diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index 253796f5cd3..6e98c849c87 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -51,7 +51,7 @@ jobs: # "Checking PR diff" echo "terminal_files=$(git diff --name-only origin/${{ github.base_ref }}...${{ github.head_ref }} | grep 'openbb_terminal/.*\.py$' | xargs)" >> $GITHUB_ENV echo $terminal_files - echo "platform_files=$(git diff --name-only origin/${{ github.base_ref }}...${{ github.head_ref }} | grep 'openbb_platform/.*\.py$' | grep -v 'openbb_platform/openbb/package' | grep -v 'integration' | grep -v 'tests' | xargs)" >> $GITHUB_ENV + echo "platform_files=$(git diff --diff-filter=d --name-only origin/${{ github.base_ref }}...${{ github.head_ref }} | grep 'openbb_platform/.*\.py$' | grep -v 'openbb_platform/openbb/package' | grep -v 'integration' | grep -v 'tests' | xargs)" >> $GITHUB_ENV echo $platform_files - uses: actions/cache@v3 diff --git a/build/pypi/openbb_platform/nightly.py b/build/pypi/openbb_platform/nightly.py index fc002f5cb8a..c8e610365bf 100644 --- a/build/pypi/openbb_platform/nightly.py +++ b/build/pypi/openbb_platform/nightly.py @@ -13,6 +13,7 @@ DEPENDENCIES: Dict[str, Any] = {} PLUGINS: Dict[str, Dict] = { "openbb_core_extension": {}, "openbb_provider_extension": {}, + "openbb_obbject_extension": {}, } CMD = [sys.executable, "-m", "poetry", "build"] @@ -47,7 +48,7 @@ def gather_metadata(sub_path: str): def build(): """Build the Platform package.""" - for sub_path in ["core", "providers", "extensions"]: + for sub_path in ["core", "providers", "extensions", "obbject_extensions"]: gather_metadata(sub_path) # need to pop these from the dependencies diff --git a/build/pypi/openbb_platform/publish.py b/build/pypi/openbb_platform/publish.py index 7b1be5e9ae7..bf48478e103 100644 --- a/build/pypi/openbb_platform/publish.py +++ b/build/pypi/openbb_platform/publish.py @@ -7,7 +7,7 @@ from pathlib import Path PLATFORM_PATH = Path(__file__).parent.parent.parent.parent.resolve() / "openbb_platform" CORE_PACKAGES = ["core"] -EXTENSION_PACKAGES = ["extensions", "providers"] +EXTENSION_PACKAGES = ["extensions", "providers", "obbject_extensions"] CMD = [sys.executable, "-m", "poetry"] EXTENSION_DEPENDENCIES_UPDATE_CMD = ["add", "openbb-core=latest", "--lock"] diff --git a/openbb_platform/core/openbb_core/api/router/commands.py b/openbb_platform/core/openbb_core/api/router/commands.py index 94cd4a88ea2..96334f549fa 100644 --- a/openbb_platform/core/openbb_core/api/router/commands.py +++ b/openbb_platform/core/openbb_core/api/router/commands.py @@ -1,3 +1,5 @@ +"""Commands: generates the command map.""" + import inspect from functools import partial, wraps from inspect import Parameter, Signature, signature @@ -5,7 +7,6 @@ from typing import Any, Callable, Dict, Optional, Tuple, TypeVar from fastapi import APIRouter, Depends, Header from fastapi.routing import APIRoute -from openbb_core.app.charting_service import ChartingService from openbb_core.app.command_runner import CommandRunner from openbb_core.app.model.command_context import CommandContext from openbb_core.app.model.obbject import OBBject @@ -18,6 +19,13 @@ from openbb_core.env import Env from pydantic import BaseModel from typing_extensions import Annotated, ParamSpec +try: + from openbb_charting import Charting + + CHARTING_INSTALLED = True +except ImportError: + CHARTING_INSTALLED = False + T = TypeVar("T") P = ParamSpec("P") @@ -57,10 +65,7 @@ def build_new_signature(path: str, func: Callable) -> Signature: ) ) - if ( - path.replace("/", "_")[1:] - in ChartingService.get_implemented_charting_functions() - ): + if CHARTING_INSTALLED and path.replace("/", "_")[1:] in Charting.functions(): new_parameter_list.append( Parameter( "chart", @@ -104,6 +109,7 @@ def build_new_signature(path: str, func: Callable) -> Signature: def validate_output(c_out: OBBject) -> OBBject: """ Validate OBBject object. + Checks against the OBBject schema and removes fields that contain the `exclude_from_api` extra `pydantic.Field` kwarg. Note that the modification to the `OBBject` object is done in-place. diff --git a/openbb_platform/core/openbb_core/app/charting_service.py b/openbb_platform/core/openbb_core/app/charting_service.py deleted file mode 100644 index 75123331029..00000000000 --- a/openbb_platform/core/openbb_core/app/charting_service.py +++ /dev/null @@ -1,287 +0,0 @@ -"""Charting service.""" - -from importlib import import_module -from inspect import getmembers, getsource, isfunction -from typing import Callable, List, Optional, Tuple, TypeVar - -from openbb_core.app.extension_loader import ExtensionLoader -from openbb_core.app.model.abstract.singleton import SingletonMeta -from openbb_core.app.model.charts.chart import Chart, ChartFormat -from openbb_core.app.model.charts.charting_settings import ChartingSettings -from openbb_core.app.model.system_settings import SystemSettings -from openbb_core.app.model.user_settings import UserSettings -from openbb_core.env import Env - -T = TypeVar("T") - -# this is needed because static assets and api endpoints are built before any user is instantiated -EXTENSION_NAME = Env().CHARTING_EXTENSION - - -class ChartingServiceError(Exception): - """Charting service error.""" - - -class ChartingService(metaclass=SingletonMeta): - """ - Charting Service. - - It is responsible for retrieving and executing the charting function, corresponding - to a given route, from the user's preferred charting extension. - - Parameters - ---------- - user_settings : UserSettings - User settings. - system_settings : SystemSettings - System settings. - - Attributes - ---------- - _charting_extension : str - Charting extension name, which is retrieved from the user preferences. - _charting_extension_installed : bool - Either charting extension is installed or not. - - Raises - ------ - ChartingServiceError - If charting extension is not installed. - """ - - def __init__( - self, - user_settings: Optional[UserSettings] = None, - system_settings: Optional[SystemSettings] = None, - ) -> None: - """Initializes ChartingService.""" - # Although the __init__ method states that both the user_settings and the system_settings - # are optional, they are actually required for the first initialization of the ChartingService. - # This is because the ChartingService is a singleton and it is initialized only once. - # We want to be able to call the ChartingService from other parts of the code without having - # to pass the user_settings and the system_settings every time. - if not user_settings or not system_settings: - raise ChartingServiceError( - "User settings and system settings must be provided." - ) - - self._charting_settings = ChartingSettings(user_settings, system_settings) - self._charting_extension = self._check_and_get_charting_extension_name( - user_settings.preferences.charting_extension - ) - self._charting_extension_installed = self._check_charting_extension_installed( - self._charting_extension - ) - - @property - def charting_settings(self) -> ChartingSettings: - """Gets charting settings.""" - return self._charting_settings - - @charting_settings.setter - def charting_settings(self, value: Tuple[SystemSettings, UserSettings]): - system_settings, user_settings = value - self._charting_settings = ChartingSettings( - user_settings=user_settings, - system_settings=system_settings, - ) - - @staticmethod - def _check_and_get_charting_extension_name( - user_preferences_charting_extension: str, - ): - """Checks if the charting extension defined on user preferences is the same as the one defined in the env file.""" - if user_preferences_charting_extension != EXTENSION_NAME: - raise ChartingServiceError( - f"The charting extension defined on user preferences must be the same as the one defined in the env file." - f"diff: {user_preferences_charting_extension} != {EXTENSION_NAME}" - ) - return user_preferences_charting_extension - - @staticmethod - def _check_charting_extension_installed(ext_name: str) -> bool: - """Checks if a given extension is installed.""" - extension = ExtensionLoader().get_core_entry_point(ext_name) or False - return extension and ext_name == extension.name # type: ignore - - @staticmethod - def _handle_backend(charting_extension: str, charting_settings: ChartingSettings): - """ - Handles the backend of the given charting extension. - - This function that the module expose in its root (__init__.py) the following functions: - - `create_backend(charting_settings: ChartingSettings)` - - `get_backend()` - - Parameters - ---------- - charting_extension : str - Charting extension name. - charting_settings : ChartingSettings - Charting settings. - """ - # Dynamically import the backend module - backend_module = import_module(charting_extension) - - create_backend_func = getattr(backend_module, "create_backend") - get_backend_func = getattr(backend_module, "get_backend") - - create_backend_func(charting_settings=charting_settings) - get_backend_func().start(debug=charting_settings.debug_mode) - - @classmethod - def _get_extension_router(cls, extension_name: str): - """Get the module of the given extension.""" - extension = ExtensionLoader().get_core_entry_point(extension_name) - if not extension or extension_name != extension.name: - raise ChartingServiceError( - f"Extension '{extension_name}' is not installed." - ) - return import_module(extension.module) - - @classmethod - def _get_chart_format(cls, extension_name: str) -> ChartFormat: - """ - Given an extension name, it returns the chart format. - - The module must contain the `CHART_FORMAT` attribute. - """ - module = cls._get_extension_router(extension_name) - return getattr(module, "CHART_FORMAT") - - @classmethod - def _get_chart_function(cls, extension_name: str, route: str) -> Callable: - """ - Given an extension name and a route, it returns the chart function. - - The module must contain the given route. - """ - adjusted_route = route.replace("/", "_")[1:] - module = cls._get_extension_router(extension_name) - return getattr(module, adjusted_route) - - @classmethod - def get_implemented_charting_functions( - cls, extension_name: str = EXTENSION_NAME - ) -> List[str]: - """Given an extension name, it returns the implemented charting functions from its router.""" - implemented_functions = [] - - try: - if module := cls._get_extension_router(extension_name): - module_name = module.__name__ - - for name, obj in getmembers(module, isfunction): - if ( - obj.__module__ == module_name - and not name.startswith("_") - and "NotImplementedError" not in getsource(obj) - ): - implemented_functions.append(name) - except ChartingServiceError: - pass - - return implemented_functions - - def to_chart(self, **kwargs) -> Chart: - """ - Returns the chart object. - - Parameters - ---------- - **kwargs - Keyword arguments to be passed to the charting extension. - - Returns - ------- - Chart - Chart object. - - Raises - ------ - ChartingServiceError - If charting extension is not installed. - Exception - If the charting extension module does not contain the `to_chart` function. - """ - if not self._charting_extension_installed: - raise ChartingServiceError( - f"Charting extension `{self._charting_extension}` is not installed" - ) - self._handle_backend(self._charting_extension, self._charting_settings) - - # Dynamically import the charting module - backend_module = import_module(self._charting_extension) - # Get the `to_chart` function from the charting module - to_chart_func = getattr(backend_module, "to_chart") - - # Add the charting settings to the kwargs - kwargs["charting_settings"] = self._charting_settings - - fig, content = to_chart_func(**kwargs) - - return Chart( - content=content, - format=self._get_chart_format(self._charting_extension), - fig=fig, - ) - - def chart( - self, - user_settings: UserSettings, - system_settings: SystemSettings, - route: str, - obbject_item: T, - **kwargs, - ) -> Chart: - """ - Given a route and an obbject item, it returns the chart object. - - If the charting extension is not installed, an error is raised. - Otherwise, a charting function will be retrieved and executed from the user's preferred charting extension. - This function assumes that, in order to successfully retrieve the charting function, - the charting extension uses the following naming convention to convert routes into charting functions: - - Route: `/stocks/load` - - Charting function: `stocks_load()` - - Route: `/ta/ema` - - Charting function: `ta_ema()` - Note that the route should be in its original format, since it will be converted inside this function. - - Parameters - ---------- - user_settings : UserSettings - User settings. - route : str - Route name, example: `/stocks/load`. - obbject_item - Command output item. - - Returns - ------- - Chart - Chart object. - """ - self._charting_settings = ChartingSettings(user_settings, system_settings) - self._charting_extension = user_settings.preferences.charting_extension - self._charting_extension_installed = self._check_charting_extension_installed( - self._charting_extension - ) - - if not self._charting_extension_installed: - raise ChartingServiceError( - f"Charting extension `{self._charting_extension}` is not installed" - ) - - self._handle_backend(self._charting_extension, self._charting_settings) - - kwargs["obbject_item"] = obbject_item - kwargs["charting_settings"] = self._charting_settings - - charting_function = self._get_chart_function(self._charting_extension, route) - fig, content = charting_function(**kwargs) - - return Chart( - content=content, - format=self._get_chart_format(self._charting_extension), - fig=fig, - ) diff --git a/openbb_platform/core/openbb_core/app/command_runner.py b/openbb_platform/core/openbb_core/app/command_runner.py index 2dedfcd917a..b6d06ed0f8e 100644 --- a/openbb_platform/core/openbb_core/app/command_runner.py +++ b/openbb_platform/core/openbb_core/app/command_runner.py @@ -10,7 +10,6 @@ from typing import Any, Callable, Dict, List, Optional, Tuple from pydantic import ConfigDict, create_model -from openbb_core.app.charting_service import ChartingService from openbb_core.app.logs.logging_service import LoggingService from openbb_core.app.model.abstract.error import OpenBBError from openbb_core.app.model.abstract.warning import cast_warning @@ -273,22 +272,14 @@ class StaticCommandRunner: def _chart( cls, obbject: OBBject, - user_settings: UserSettings, - system_settings: SystemSettings, - route: str, **kwargs, ) -> None: """Create a chart from the command output.""" - cs = ChartingService( - user_settings=user_settings, system_settings=system_settings - ) - obbject.chart = cs.chart( - user_settings=user_settings, - system_settings=system_settings, - route=route, - obbject_item=obbject.results, - **kwargs, - ) + if "charting" not in obbject.accessors: + raise OpenBBError( + "Charting is not installed. Please install `openbb-charting`." + ) + obbject.charting.show(render=False, **kwargs) # type: ignore @classmethod async def _execute_func( @@ -339,13 +330,13 @@ class StaticCommandRunner: kwargs=kwargs, show_warnings=user_settings.preferences.show_warnings, ) + # pylint: disable=protected-access + obbject._route = route + obbject._standard_params = kwargs.get("standard_params", None) if chart and obbject.results: cls._chart( obbject=obbject, - user_settings=user_settings, - system_settings=system_settings, - route=route, **kwargs, ) @@ -424,10 +415,6 @@ class CommandRunner: self._system_settings = system_settings or SystemService().system_settings self._user_settings = user_settings or UserService.read_default_user_settings() - self._charting_service = ChartingService( - system_settings=self._system_settings, user_settings=self._user_settings - ) - def init_logging_service(self) -> None: """Initialize the logging service.""" _ = LoggingService( diff --git a/openbb_platform/core/openbb_core/app/logs/logging_service.py b/openbb_platform/core/openbb_core/app/logs/logging_service.py index 1c2775b246c..28067def685 100644 --- a/openbb_platform/core/openbb_core/app/logs/logging_service.py +++ b/openbb_platform/core/openbb_core/app/logs/logging_service.py @@ -1,8 +1,10 @@ +"""Logging Service Module.""" + import json import logging from enum import Enum from types import TracebackType -from typing import Any, Callable, Dict, Optional, Tuple, Type, cast +from typing import Any, Callable, Dict, Optional, Tuple, Type, Union, cast from openbb_core.app.logs.formatters.formatter_with_exceptions import ( FormatterWithExceptions, @@ -58,7 +60,8 @@ class LoggingService(metaclass=SingletonMeta): user_settings: UserSettings, ) -> None: """ - Logging Manager Constructor + Logging Service Constructor. + Sets up the logging settings and handlers and then logs the startup information. Parameters @@ -140,9 +143,7 @@ class LoggingService(metaclass=SingletonMeta): route: Optional[str] = None, custom_headers: Optional[Dict[str, Any]] = None, ) -> None: - """ - Log startup information. - """ + """Log startup information.""" def check_credentials_defined(credentials: Dict[str, Any]): class CredentialsDefinition(Enum): @@ -184,9 +185,10 @@ class LoggingService(metaclass=SingletonMeta): route: str, func: Callable, kwargs: Dict[str, Any], - exec_info: Optional[ - Tuple[Type[BaseException], BaseException, Optional[TracebackType]] - ] = None, + exec_info: Union[ + Tuple[Type[BaseException], BaseException, TracebackType], + Tuple[None, None, None], + ], custom_headers: Optional[Dict[str, Any]] = None, ): """ diff --git a/openbb_platform/core/openbb_core/app/model/charts/charting_settings.py b/openbb_platform/core/openbb_core/app/model/charts/charting_settings.py index c74adec0339..fca968e24c1 100644 --- a/openbb_platform/core/openbb_core/app/model/charts/charting_settings.py +++ b/openbb_platform/core/openbb_core/app/model/charts/charting_settings.py @@ -1,3 +1,5 @@ +"""Charting settings.""" + from pathlib import Path from typing import Optional @@ -9,11 +11,14 @@ from openbb_core.env import Env # pylint: disable=too-many-instance-attributes class ChartingSettings: + """Charting settings.""" + def __init__( self, user_settings: Optional[UserSettings] = None, system_settings: Optional[SystemSettings] = None, ): + """Initialize charting settings.""" user_settings = user_settings or UserSettings() system_settings = system_settings or SystemSettings() @@ -29,7 +34,7 @@ class ChartingSettings: self.python_version: str = system_settings.python_version self.test_mode = system_settings.test_mode self.app_id: str = get_app_id(user_data_directory) - self.debug_mode: bool = Env().DEBUG_MODE + self.debug_mode: bool = system_settings.debug_mode or Env().DEBUG_MODE self.headless: bool = system_settings.headless # User self.plot_enable_pywry: bool = user_settings.preferences.plot_enable_pywry diff --git a/openbb_platform/core/openbb_core/app/model/extension.py b/openbb_platform/core/openbb_core/app/model/extension.py index 7aed57d110a..f3cd9615f98 100644 --- a/openbb_platform/core/openbb_core/app/model/extension.py +++ b/openbb_platform/core/openbb_core/app/model/extension.py @@ -52,7 +52,7 @@ class Extension: ) setattr(cls, name, CachedAccessor(name, accessor)) # pylint: disable=protected-access - cls._accessors.add(name) + cls.accessors.add(name) return accessor return decorator diff --git a/openbb_platform/core/openbb_core/app/model/obbject.py b/openbb_platform/core/openbb_core/app/model/obbject.py index 30a21b61c9a..7251dc9969b 100644 --- a/openbb_platform/core/openbb_core/app/model/obbject.py +++ b/openbb_platform/core/openbb_core/app/model/obbject.py @@ -4,6 +4,7 @@ from re import sub from typing import ( TYPE_CHECKING, Any, + Callable, ClassVar, Dict, Generic, @@ -17,17 +18,18 @@ from typing import ( import pandas as pd from numpy import ndarray -from pydantic import BaseModel, Field +from pydantic import BaseModel, Field, PrivateAttr from openbb_core.app.model.abstract.error import OpenBBError from openbb_core.app.model.abstract.tagged import Tagged from openbb_core.app.model.abstract.warning import Warning_ from openbb_core.app.model.charts.chart import Chart -from openbb_core.app.query import Query from openbb_core.app.utils import basemodel_to_df from openbb_core.provider.abstract.data import Data if TYPE_CHECKING: + from openbb_core.app.query import Query + try: from polars import DataFrame as PolarsDataFrame # type: ignore except ImportError: @@ -39,6 +41,10 @@ T = TypeVar("T") class OBBject(Tagged, Generic[T]): """OpenBB object.""" + accessors: ClassVar[Set[str]] = set() + _user_settings: ClassVar[Optional[BaseModel]] = None + _system_settings: ClassVar[Optional[BaseModel]] = None + results: Optional[T] = Field( default=None, description="Serializable results.", @@ -59,8 +65,12 @@ class OBBject(Tagged, Generic[T]): default_factory=dict, description="Extra info.", ) - _credentials: ClassVar[Optional[BaseModel]] = None - _accessors: ClassVar[Set[str]] = set() + _route: str = PrivateAttr( + default=None, + ) + _standard_params: Optional[Dict[str, Any]] = PrivateAttr( + default_factory=dict, + ) def __repr__(self) -> str: """Human readable representation of the object.""" @@ -268,48 +278,16 @@ class OBBject(Tagged, Generic[T]): del results["index"] return results - def to_chart(self, **kwargs): - """ - Create or update the `Chart`. - - This function assumes that the provided data is a time series, if it's not, it will - most likely result in an Exception. - - Note that the `chart` attribute is composed by: `content`, `format` and `fig`. - - Parameters - ---------- - **kwargs - Keyword arguments to be passed to the charting extension. - This implies that the user has some knowledge on the charting extension API. - This is the case because the charting extension may vary on user preferences. - - Returns - ------- - chart.fig - The chart figure. - """ - # pylint: disable=import-outside-toplevel - # Avoids circular import - from openbb_core.app.charting_service import ChartingService - - cs = ChartingService() - kwargs["data"] = self.to_dataframe() - - self.chart = cs.to_chart(**kwargs) - return self.chart.fig - - def show(self): + def show(self, **kwargs: Any) -> None: """Display chart.""" + # pylint: disable=no-member if not self.chart or not self.chart.fig: - raise OpenBBError( - "Chart not found. " - "Please compute the chart first by using the `chart=True` argument." - ) - self.chart.fig.show() + raise OpenBBError("Chart not found.") + show_function: Callable = getattr(self.chart.fig, "show") + show_function(**kwargs) @classmethod - async def from_query(cls, query: Query) -> "OBBject": + async def from_query(cls, query: "Query") -> "OBBject": """Create OBBject from query. Parameters diff --git a/openbb_platform/core/openbb_core/app/model/system_settings.py b/openbb_platform/core/openbb_core/app/model/system_settings.py index c434e16fd28..39ceebbc813 100644 --- a/openbb_platform/core/openbb_core/app/model/system_settings.py +++ b/openbb_platform/core/openbb_core/app/model/system_settings.py @@ -48,6 +48,7 @@ class SystemSettings(Tagged): api_settings: FastAPISettings = Field(default_factory=FastAPISettings) # Others + debug_mode: bool = False test_mode: bool = False headless: bool = False @@ -87,7 +88,7 @@ class SystemSettings(Tagged): def validate_posthog_handler(cls, values: "SystemSettings") -> "SystemSettings": """If the user has enabled log collection, then we need to add the Posthog.""" if ( - not any([values.test_mode, values.logging_suppress]) + not any([values.test_mode, values.debug_mode, values.logging_suppress]) and values.log_collect and "posthog" not in values.logging_handlers ): diff --git a/openbb_platform/core/openbb_core/app/service/system_service.py b/openbb_platform/core/openbb_core/app/service/system_service.py index f1b626987d6..c18bc1354ef 100644 --- a/openbb_platform/core/openbb_core/app/service/system_service.py +++ b/openbb_platform/core/openbb_core/app/service/system_service.py @@ -1,3 +1,5 @@ +"""System service.""" + import hashlib import json from pathlib import Path @@ -18,11 +20,10 @@ class SystemService(metaclass=SingletonMeta): "headless", "logging_sub_app", "api_settings", + "debug_mode", } - PRO_VALIDATION_HASH = ( - "300ac59fdcc8f899e0bc5c18cda8652220735da1a00e2af365efe9d8e5fe8306" - ) + PRO_VALIDATION_HASH = "300ac59fdcc8f899e0bc5c18cda8652220735da1a00e2af365efe9d8e5fe8306" # pragma: allowlist secret def __init__( self, diff --git a/openbb_platform/core/openbb_core/app/static/container.py b/openbb_platform/core/openbb_core/app/static/container.py index 9a1527ac7c2..0f0e483678d 100644 --- a/openbb_platform/core/openbb_core/app/static/container.py +++ b/openbb_platform/core/openbb_core/app/static/container.py @@ -11,7 +11,8 @@ class Container: def __init__(self, command_runner: CommandRunner) -> None: self._command_runner = command_runner - OBBject._credentials = command_runner.user_settings.credentials + OBBject._user_settings = command_runner.user_settings + OBBject._system_settings = command_runner.system_settings def _run(self, *args, **kwargs) -> Any: """Run a command in the container.""" diff --git a/openbb_platform/core/openbb_core/app/static/package_builder.py b/openbb_platform/core/openbb_core/app/static/package_builder.py index 966726d6a8f..4accfa70c08 100644 --- a/openbb_platform/core/openbb_core/app/static/package_builder.py +++ b/openbb_platform/core/openbb_core/app/static/package_builder.py @@ -34,7 +34,6 @@ from pydantic_core import PydanticUndefined from starlette.routing import BaseRoute from typing_extensions import Annotated, _AnnotatedAlias -from openbb_core.app.charting_service import ChartingService from openbb_core.app.extension_loader import ExtensionLoader, OpenBBGroups from openbb_core.app.model.custom_parameter import OpenBBCustomParameter from openbb_core.app.provider_interface import ProviderInterface @@ -44,6 +43,13 @@ from openbb_core.app.static.utils.linters import Linters from openbb_core.env import Env from openbb_core.provider.abstract.data import Data +try: + from openbb_charting import Charting + + CHARTING_INSTALLED = True +except ImportError: + CHARTING_INSTALLED = False + DataProcessingSupportedTypes = TypeVar( "DataProcessingSupportedTypes", list, @@ -533,10 +539,7 @@ class MethodDefinition: parameter_map.pop("cc", None) # we need to add the chart parameter here bc of the docstring generation - if ( - path.replace("/", "_")[1:] - in ChartingService.get_implemented_charting_functions() - ): + if CHARTING_INSTALLED and path.replace("/", "_")[1:] in Charting.functions(): parameter_map["chart"] = Parameter( name="chart", kind=Parameter.POSITIONAL_OR_KEYWORD, @@ -706,10 +709,7 @@ class MethodDefinition: parameter_map.pop("cc", None) code = "" - if ( - path.replace("/", "_")[1:] - in ChartingService.get_implemented_charting_functions() - ): + if CHARTING_INSTALLED and path.replace("/", "_")[1:] in Charting.functions(): parameter_map["chart"] = Parameter( name="chart", kind=Parameter.POSITIONAL_OR_KEYWORD, diff --git a/openbb_platform/core/openbb_core/app/utils.py b/openbb_platform/core/openbb_core/app/utils.py index b4b6682ad4e..e0c232801e7 100644 --- a/openbb_platform/core/openbb_core/app/utils.py +++ b/openbb_platform/core/openbb_core/app/utils.py @@ -1,3 +1,5 @@ +"""Utility functions for the OpenBB Core app.""" + import ast import json from typing import Dict, Iterable, List, Optional, Union @@ -43,8 +45,10 @@ def df_to_basemodel( df: Union[pd.DataFrame, pd.Series], index: bool = False ) -> List[Data]: """Convert from a Pandas DataFrame to list of BaseModel.""" - if index and not isinstance(df.index, pd.MultiIndex): - df = df.reset_index(drop=True) + is_multiindex = isinstance(df.index, pd.MultiIndex) + + if not is_multiindex and (index or df.index.name): + df = df.reset_index() if isinstance(df, pd.Series): df = df.to_frame() @@ -120,6 +124,7 @@ def get_target_column(df: pd.DataFrame, target: str) -> pd.Series: def get_target_columns(df: pd.DataFrame, target_columns: List[str]) -> pd.DataFrame: + """Get target columns from time series data.""" df_result = pd.DataFrame() for target in target_columns: df_result[target] = get_target_column(df, target).to_frame() @@ -127,6 +132,7 @@ def get_target_columns(df: pd.DataFrame, target_columns: List[str]) -> pd.DataFr def get_user_cache_directory() -> str: + """Get user cache directory.""" file = SystemSettings().model_dump()["user_settings_path"] with open(file) as settings_file: contents = settings_file.read() diff --git a/openbb_platform/core/tests/app/model/test_obbject.py b/openbb_platform/core/tests/app/model/test_obbject.py index 9cef9e6ee08..0e9692b8f70 100644 --- a/openbb_platform/core/tests/app/model/test_obbject.py +++ b/openbb_platform/core/tests/app/model/test_obbject.py @@ -1,6 +1,6 @@ """Tests for the OBBject class.""" -from unittest.mock import MagicMock, patch +from unittest.mock import MagicMock import pandas as pd import pytest @@ -321,45 +321,6 @@ def test_to_dict(results, expected_dict): assert str(exc_info.value) == str(expected_dict) -@patch("openbb_core.app.model.obbject.OBBject.to_dataframe") -@patch("openbb_core.app.charting_service.ChartingService") -def test_to_chart_with_new_chart( - mock_charting_service, - mock_to_dataframe, -): - """Test helper.""" - - def get_mock_dataframe(): - data = { - "col1": [1, 2, 3], - "col2": ["a", "b", "c"], - "col3": [True, False, True], - } - - return pd.DataFrame(data) - - # Arrange - mock_instance = OBBject() - mock_charting_service_instance = mock_charting_service.return_value - mock_charting_service_instance.to_chart.return_value = Chart( - content={"content": "some_new_content"}, fig={"fig": "some_mock_fig"} - ) - mock_to_dataframe.return_value = get_mock_dataframe() - - # Act - result = mock_instance.to_chart() - - # Assert - assert result == {"fig": "some_mock_fig"} - assert mock_instance.chart.content == {"content": "some_new_content"} - - # Ensure self.to_dataframe() was called - mock_to_dataframe.assert_called_once() - - # Ensure ChartingService was called with the correct parameters - mock_charting_service_instance.to_chart.assert_called_once() - - def test_show_chart_exists(): """Test helper.""" mock_instance = OBBject() @@ -372,7 +333,7 @@ def test_show_chart_exists(): mock_instance.show() # Assert - mock_instance.chart.fig.show.assert_called_once() + mock_instance.chart.fig.show.assert_called_once() # pylint: disable=no-member def test_show_chart_no_chart(): diff --git a/openbb_platform/core/tests/app/model/test_system_settings.py b/openbb_platform/core/tests/app/model/test_system_settings.py index 625062b6d88..c44fb072318 100644 --- a/openbb_platform/core/tests/app/model/test_system_settings.py +++ b/openbb_platform/core/tests/app/model/test_system_settings.py @@ -90,6 +90,7 @@ def test_create_openbb_directory_directory_exists_system_settings_missing(tmpdir # Test case: test_mode is True, logging_suppress is True ( { + "debug_mode": True, "test_mode": True, "logging_suppress": True, "log_collect": True, @@ -100,6 +101,7 @@ def test_create_openbb_directory_directory_exists_system_settings_missing(tmpdir # Test case: test_mode is False, logging_suppress is True ( { + "debug_mode": False, "test_mode": False, "logging_suppress": True, "log_collect": True, @@ -111,6 +113,7 @@ def test_create_openbb_directory_directory_exists_system_settings_missing(tmpdir # and "posthog" handler is not present in logging_handlers ( { + "debug_mode": False, "test_mode": False, "logging_suppress": False, "log_collect": True, @@ -122,6 +125,7 @@ def test_create_openbb_directory_directory_exists_system_settings_missing(tmpdir # and "posthog" handler is already present in logging_handlers ( { + "debug_mode": False, "test_mode": False, "logging_suppress": False, "log_collect": True, diff --git a/openbb_platform/core/tests/app/test_charting_service.py b/openbb_platform/core/tests/app/test_charting_service.py deleted file mode 100644 index 6e673b37f11..00000000000 --- a/openbb_platform/core/tests/app/test_charting_service.py +++ /dev/null @@ -1,384 +0,0 @@ -from typing import Callable -from unittest.mock import patch - -import pytest -from openbb_core.app.charting_service import ( - Chart, - ChartingService, - ChartingServiceError, -) -from openbb_core.app.model.system_settings import SystemSettings -from openbb_core.app.model.user_settings import UserSettings - - -@pytest.fixture(autouse=True) -def setup_and_teardown(): - # Code to run before each test function - yield # This is where the test function runs - # Code to run after each test function - ChartingService._instances = {} - - -# fixture for system_settings -@pytest.fixture() -def system_settings(): - return SystemSettings() - - -# fixture for user_settings -@pytest.fixture() -def user_settings(): - return UserSettings() - - -# fixture for charting_service -@pytest.fixture() -def charting_service(user_settings, system_settings): - return ChartingService(user_settings=user_settings, system_settings=system_settings) - - -def test_charting_service(user_settings, system_settings): - assert ChartingService(user_settings=user_settings, system_settings=system_settings) - - -def test_charting_service_singleton_prop(user_settings, system_settings): - cm_1 = ChartingService(user_settings=user_settings, system_settings=system_settings) - cm_2 = ChartingService(user_settings=user_settings, system_settings=system_settings) - - assert cm_1 is cm_2 - - -def test_charting_settings(): - sys = SystemSettings(test_mode=True) - user = UserSettings(preferences={"plot_enable_pywry": False}) - - cm = ChartingService(user_settings=user, system_settings=sys) - - assert cm.charting_settings.plot_enable_pywry is False - assert cm.charting_settings.test_mode is True - - -def test_charting_settings_setter(charting_service): - sys = SystemSettings(test_mode=True) - user = UserSettings(preferences={"plot_enable_pywry": False}) - - charting_service.charting_settings = (sys, user) - - assert charting_service.charting_settings.plot_enable_pywry is False - assert charting_service.charting_settings.test_mode is True - - -@pytest.mark.parametrize( - "user_preferences_charting_extension, expected_result", - [ - ("openbb_charting", "openbb_charting"), # Matching extension names - ("openbb_charting", ChartingServiceError), # Mismatching extension names - ], -) -def test_check_and_get_charting_extension_name( - system_settings, user_preferences_charting_extension, expected_result -): - user = UserSettings( - preferences={"charting_extension": user_preferences_charting_extension} - ) - cm = ChartingService(user_settings=user, system_settings=system_settings) - - if expected_result == ChartingServiceError: - with pytest.raises(ChartingServiceError) as exc_info, patch( - "openbb_core.app.charting_service.EXTENSION_NAME", "other_extension" - ): - cm._check_and_get_charting_extension_name( - user_preferences_charting_extension - ) - assert str(exc_info.value) == ( - "The charting extension defined on user preferences must be " - "the same as the one defined in the env file." - f"diff: {user_preferences_charting_extension} != openbb_charting" - ) - else: - with patch( - "openbb_core.app.charting_service.EXTENSION_NAME", "openbb_charting" - ): - result = cm._check_and_get_charting_extension_name( - user_preferences_charting_extension - ) - assert result == expected_result - - -@patch("openbb_core.app.charting_service.ExtensionLoader") -@pytest.mark.parametrize( - "entry_point_name, extension_name, expected_result", - [ - ( - "mock_extension", - "mock_extension", - True, - ), # Extension is installed and names match - ( - "mock_extension", - "another_extension", - False, - ), # Extension is installed but names don't match - (None, "mock_extension", False), # Extension is not installed - ], -) -def test_check_charting_extension_installed( - mock_extension_loader, - charting_service, - entry_point_name, - extension_name, - expected_result, -): - class MockEntryPoint: - def __init__(self, name): - self.name = name - - # Set the return value of get_core_entry_point - if entry_point_name is not None: - mock_extension_loader.return_value.get_core_entry_point.return_value = ( - MockEntryPoint(entry_point_name) - ) - else: - mock_extension_loader.return_value.get_core_entry_point.return_value = None - - # Call the function and assert the result - result = charting_service._check_charting_extension_installed(extension_name) - assert result == expected_result - - -@pytest.mark.parametrize( - "extension_name, expected_result", - [ - ("mock_extension", "mock_module"), - ("another_extension", ChartingServiceError), - ], -) -@patch("openbb_core.app.charting_service.import_module") -@patch("openbb_core.app.charting_service.ExtensionLoader") -def test_get_extension_router( - mock_extension_loader, - mock_import_module, - charting_service, - extension_name, - expected_result, -): - class MockEntryPoint: - def __init__(self, name, module): - self.name = name - self.module = module - - mock_extension_loader.return_value.get_core_entry_point.return_value = ( - MockEntryPoint("mock_extension", "mock_module") - ) - mock_import_module.return_value = "mock_module" - - if expected_result == ChartingServiceError: - with pytest.raises(ChartingServiceError) as exc_info: - charting_service._get_extension_router(extension_name) - assert str(exc_info.value) == ( - f"Extension '{extension_name}' is not installed." - ) - else: - result = charting_service._get_extension_router("mock_extension") - assert result == "mock_module" - - -@patch("openbb_core.app.charting_service.import_module") -def test_handle_back_end(mock_import_module, charting_service): - class MockBackend: - def __init__(self): - pass - - def start(self, debug): - pass - - class MockBackendModule: - def __init__(self): - self._backend = None - - def create_backend(self, charting_settings): - self._backend = MockBackend() - - def get_backend(self): - return self._backend - - mock_import_module.return_value = MockBackendModule() - assert ( - charting_service._handle_backend( - "mock_extension", charting_service.charting_settings - ) - is None - ) - - -@patch("openbb_core.app.charting_service.ChartingService._get_extension_router") -def test_get_chart_format(mock_get_extension_router, charting_service): - class MockChartingRouterModule: - CHART_FORMAT = "mock_chart_format" - - mock_get_extension_router.return_value = MockChartingRouterModule() - - assert charting_service._get_chart_format("mock_extension") == "mock_chart_format" - - -@pytest.mark.parametrize( - "route, expected_result", - [ - ("/stocks/load", ...), - ("/crypto/load", ...), - ("/ta/ema", ...), - ("wrong/route", AttributeError), - ], -) -@patch("openbb_core.app.charting_service.ChartingService._get_extension_router") -def test_get_chart_function( - mock_get_extension_router, charting_service, route, expected_result -): - class MockChartingRouterModule: - def stocks_load(self): - pass - - def crypto_load(self): - pass - - def ta_ema(self): - pass - - mock_get_extension_router.return_value = MockChartingRouterModule() - - if expected_result != AttributeError: - assert isinstance( - charting_service._get_chart_function("mock_extension", route), Callable - ) - else: - with pytest.raises(AttributeError) as exc_info: - charting_service._get_chart_function("mock_extension", route) - assert str(exc_info.value) == f"Attribute '{route}' not found." - - -@pytest.mark.parametrize("charting_router_module", [(...), (None)]) -@patch("openbb_core.app.charting_service.ChartingService._get_extension_router") -def test_get_implemented_charting_functions( - mock_get_extension_router, charting_service, charting_router_module -): - if not charting_router_module: - mock_get_extension_router.return_value = None - assert charting_service.get_implemented_charting_functions() == [] - - else: - - class MockChartingRouterModule: - __name__ = "MockChartingRouterModule" - - def stocks_load(self): - pass - - def crypto_load(self): - pass - - def ta_ema(self): - raise NotImplementedError() - - MockChartingRouterModule.stocks_load.__module__ = ( - MockChartingRouterModule.__name__ - ) - MockChartingRouterModule.crypto_load.__module__ = ( - MockChartingRouterModule.__name__ - ) - MockChartingRouterModule.ta_ema.__module__ = MockChartingRouterModule.__name__ - - mock_get_extension_router.return_value = MockChartingRouterModule - result = charting_service.get_implemented_charting_functions() - assert result == ["crypto_load", "stocks_load"] - - -@pytest.mark.parametrize( - "charting_extension_installed", - [(True), (False)], -) -@patch("openbb_core.app.charting_service.ChartingService._handle_backend") -@patch("openbb_core.app.charting_service.import_module") -@patch("openbb_core.app.charting_service.ChartingService._get_chart_format") -def test_to_chart( - mock_get_chart_format, - mock_import_module, - mock_handle_backend, - charting_service, - charting_extension_installed, -): - charting_service._charting_extension_installed = charting_extension_installed - - class MockBackendModule: - CHART_FORMAT = "plotly" - - @staticmethod - def to_chart(**kwargs): - return ("mock_fig", {"content": "mock_content"}) - - mock_import_module.return_value = MockBackendModule() - mock_get_chart_format.return_value = "plotly" - - if charting_extension_installed: - result = charting_service.to_chart() - - assert isinstance(result, Chart) - assert result.fig == "mock_fig" - assert result.content == {"content": "mock_content"} - - assert mock_handle_backend.called_once() - - else: - with pytest.raises(ChartingServiceError) as exc_info: - charting_service.to_chart() - assert str(exc_info.value) == ( - "Charting extension `openbb_charting` is not installed" - ) - - -@pytest.mark.parametrize( - "charting_extension_installed, expected_result", - [(True, ...), (False, ChartingServiceError)], -) -@patch("openbb_core.app.charting_service.ChartingService._handle_backend") -@patch( - "openbb_core.app.charting_service.ChartingService._check_charting_extension_installed" -) -@patch("openbb_core.app.charting_service.ChartingService._get_chart_format") -@patch("openbb_core.app.charting_service.ChartingService._get_chart_function") -def test_chart( - mock_get_chart_function, - mock_get_chart_format, - mock_check_charting_extension_installed, - mock_handle_backend, - user_settings, - system_settings, - charting_service, - charting_extension_installed, - expected_result, -): - def mock_chart_function(**kwargs): - return ("mock_fig", {"content": "mock_content"}) - - mock_check_charting_extension_installed.return_value = charting_extension_installed - mock_get_chart_function.return_value = mock_chart_function - mock_get_chart_format.return_value = "plotly" - - if expected_result != ChartingServiceError: - result = charting_service.chart( - user_settings, system_settings, "/mock/route", "mock_obbject_item" - ) - - assert isinstance(result, Chart) - assert result.fig == "mock_fig" - assert result.content == {"content": "mock_content"} - - assert mock_handle_backend.called_once() - - else: - with pytest.raises(ChartingServiceError) as exc_info: - charting_service.chart( - user_settings, system_settings, "/mock/route", "mock_obbject_item" - ) - assert str(exc_info.value) == ( - "Charting extension `openbb_charting` is not installed" - ) diff --git a/openbb_platform/core/tests/app/test_command_runner.py b/openbb_platform/core/tests/app/test_command_runner.py index 9f2c6877b5d..00659a6e0c5 100644 --- a/openbb_platform/core/tests/app/test_command_runner.py +++ b/openbb_platform/core/tests/app/test_command_runner.py @@ -1,6 +1,6 @@ from inspect import Parameter from typing import Dict, List -from unittest.mock import patch +from unittest.mock import Mock, patch import pytest from openbb_core.app.command_runner import ( @@ -361,30 +361,15 @@ async def test_static_command_runner_execute_func( assert mock_chart.called_once() -@patch("openbb_core.app.command_runner.ChartingService.chart") -def test_static_command_runner_chart(mock_charting_service_chart, execution_context): - """Test chart.""" +def test_static_command_runner_chart(): + """Test _chart method when charting is in obbject.accessors.""" + mock_obbject = Mock() + mock_obbject.accessors = ["charting"] + mock_obbject.charting.show = Mock() - class MockOBBject: - """Mock OBBject""" + StaticCommandRunner._chart(mock_obbject) # pylint: disable=protected-access - def __init__(self, results): - self.results = results - self.chart = {} - - mock_charting_service_chart.return_value = {"mock": "chart"} - mock_obbject = MockOBBject(results=[1, 2, 3, 4]) - - StaticCommandRunner._chart( - obbject=mock_obbject, - user_settings=execution_context.user_settings, - system_settings=execution_context.system_settings, - route="mock/route", - ) - - assert mock_charting_service_chart.called_once() - assert mock_obbject.results == [1, 2, 3, 4] - assert mock_obbject.chart == {"mock": "chart"} + mock_obbject.charting.show.assert_called_once() @pytest.mark.asyncio diff --git a/openbb_platform/dev_install.py b/openbb_platform/dev_install.py index 3bc15416828..0944d9ccf41 100644 --- a/openbb_platform/dev_install.py +++ b/openbb_platform/dev_install.py @@ -54,7 +54,7 @@ openbb-seeking-alpha = { path = "./providers/seeking_alpha", optional = true, de openbb-stockgrid = { path = "./providers/stockgrid" , optional = true, develop = true } openbb-wsj = { path = "./providers/wsj", optional = true, develop = true } -openbb-charting = { path = "./extensions/charting", optional = true, develop = true } +openbb-charting = { path = "./obbject_extensions/charting", optional = true, develop = true } openbb-econometrics = { path = "./extensions/econometrics", optional = true, develop = true } openbb-quantitative = { path = "./extensions/quantitative", optional = true, develop = true } openbb-technical = { path = "./extensions/technical", optional = true, develop = true } diff --git a/openbb_platform/extensions/charting/integration/.gitkeep b/openbb_platform/extensions/charting/integration/.gitkeep deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/openbb_platform/extensions/charting/openbb_charting/__init__.py b/openbb_platform/extensions/charting/openbb_charting/__init__.py deleted file mode 100644 index 494d7d40b75..00000000000 --- a/openbb_platform/extensions/charting/openbb_charting/__init__.py +++ /dev/null @@ -1,6 +0,0 @@ -# flake8: noqa: F401 -from openbb_charting.core.backend import ( - create_backend, - get_backend, -) -from openbb_charting.core.to_chart import to_chart diff --git a/openbb_platform/extensions/charting/openbb_charting/core/openbb_figure_table.py b/openbb_platform/extensions/charting/openbb_charting/core/openbb_figure_table.py deleted file mode 100644 index bfdbc650666..00000000000 --- a/openbb_platform/extensions/charting/openbb_charting/core/openbb_figure_table.py +++ /dev/null @@ -1,95 +0,0 @@ -from typing import List, Optional, Union - -import pandas as pd -from openbb_charting.core.openbb_figure import OpenBBFigure - - -class OpenBBFigureTable(OpenBBFigure): - def __init__( - self, - tabular_data: pd.DataFrame, - columnwidth: Optional[List[Union[int, float]]] = None, - ): - super().__init__() - self._tabular_data = tabular_data - self._columnwidth = columnwidth - - def show( - self, - show_index: Optional[bool] = True, - index_name: Optional[str] = "", - headers: Optional[Union[List[str], pd.Index]] = None, - title: Optional[str] = "", - source: Optional[str] = "", - external: Optional[bool] = False, - ) -> Optional["OpenBBFigureTable"]: - if external: - return self - - if not self._backend.isatty: - tmp_fig = self.to_table() - tmp_fig.show() - return None - else: - # Make a copy of the dataframe to avoid SettingWithCopyWarning - df = self._tabular_data.copy() - - show_index = not isinstance(df.index, pd.RangeIndex) and show_index - # convert non-str that are not timestamp or int into str - # eg) praw.models.reddit.subreddit.Subreddit - for col in df.columns: - try: - if not any( - isinstance(df[col].iloc[x], pd.Timestamp) - for x in range(min(10, len(df))) - ): - df[col] = pd.to_numeric(df[col], errors="ignore") - except (ValueError, TypeError): - df[col] = df[col].astype(str) - - def _get_headers(_headers: Union[List[str], pd.Index]) -> List[str]: - """Check if headers are valid and return them.""" - output = _headers - if isinstance(_headers, pd.Index): - output = list(_headers) - if len(output) != len(df.columns): - raise ( - ValueError( - "Length of headers does not match length of DataFrame" - ) - ) - return output - - df_outgoing = df.copy() - # If headers are provided, use them - if headers is not None: - # We check if headers are valid - df_outgoing.columns = _get_headers(headers) - - if show_index and index_name not in df_outgoing.columns: - # If index name is provided, we use it - df_outgoing.index.name = index_name or "Index" - df_outgoing = df_outgoing.reset_index() - - for col in df_outgoing.columns: - if not col: - df_outgoing = df_outgoing.rename(columns={col: " "}) - - self._backend.send_table( - df_table=df_outgoing, - title=title, - source=source, # type: ignore - theme=self._charting_settings.table_style, - ) - - return None - - def to_table( - self, - print_index: bool = True, - **kwargs, - ) -> "OpenBBFigure": - data = self._tabular_data - columnwidth = self._columnwidth - - return super().to_table(data, columnwidth, print_index, **kwargs) diff --git a/openbb_platform/extensions/charting/openbb_charting/py.typed b/openbb_platform/extensions/charting/openbb_charting/py.typed deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/openbb_platform/extensions/charting/poetry.lock b/openbb_platform/extensions/charting/poetry.lock deleted file mode 100644 index e5a9fd414e4..00000000000 --- a/openbb_platform/extensions/charting/poetry.lock +++ /dev/null @@ -1,2196 +0,0 @@ -# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. - -[[package]] -name = "aiohttp" -version = "3.9.1" -description = "Async http client/server framework (asyncio)" -optional = false -python-versions = ">=3.8" -files = [ - {file = "aiohttp-3.9.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e1f80197f8b0b846a8d5cf7b7ec6084493950d0882cc5537fb7b96a69e3c8590"}, - {file = "aiohttp-3.9.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c72444d17777865734aa1a4d167794c34b63e5883abb90356a0364a28904e6c0"}, - {file = "aiohttp-3.9.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9b05d5cbe9dafcdc733262c3a99ccf63d2f7ce02543620d2bd8db4d4f7a22f83"}, - {file = "aiohttp-3.9.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c4fa235d534b3547184831c624c0b7c1e262cd1de847d95085ec94c16fddcd5"}, - {file = "aiohttp-3.9.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:289ba9ae8e88d0ba16062ecf02dd730b34186ea3b1e7489046fc338bdc3361c4"}, - {file = "aiohttp-3.9.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bff7e2811814fa2271be95ab6e84c9436d027a0e59665de60edf44e529a42c1f"}, - {file = "aiohttp-3.9.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81b77f868814346662c96ab36b875d7814ebf82340d3284a31681085c051320f"}, - {file = "aiohttp-3.9.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3b9c7426923bb7bd66d409da46c41e3fb40f5caf679da624439b9eba92043fa6"}, - {file = "aiohttp-3.9.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:8d44e7bf06b0c0a70a20f9100af9fcfd7f6d9d3913e37754c12d424179b4e48f"}, - {file = "aiohttp-3.9.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:22698f01ff5653fe66d16ffb7658f582a0ac084d7da1323e39fd9eab326a1f26"}, - {file = "aiohttp-3.9.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:ca7ca5abfbfe8d39e653870fbe8d7710be7a857f8a8386fc9de1aae2e02ce7e4"}, - {file = "aiohttp-3.9.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:8d7f98fde213f74561be1d6d3fa353656197f75d4edfbb3d94c9eb9b0fc47f5d"}, - {file = "aiohttp-3.9.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5216b6082c624b55cfe79af5d538e499cd5f5b976820eac31951fb4325974501"}, - {file = "aiohttp-3.9.1-cp310-cp310-win32.whl", hash = "sha256:0e7ba7ff228c0d9a2cd66194e90f2bca6e0abca810b786901a569c0de082f489"}, - {file = "aiohttp-3.9.1-cp310-cp310-win_amd64.whl", hash = "sha256:c7e939f1ae428a86e4abbb9a7c4732bf4706048818dfd979e5e2839ce0159f23"}, - {file = "aiohttp-3.9.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:df9cf74b9bc03d586fc53ba470828d7b77ce51b0582d1d0b5b2fb673c0baa32d"}, - {file = "aiohttp-3.9.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ecca113f19d5e74048c001934045a2b9368d77b0b17691d905af18bd1c21275e"}, - {file = "aiohttp-3.9.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8cef8710fb849d97c533f259103f09bac167a008d7131d7b2b0e3a33269185c0"}, - {file = "aiohttp-3.9.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bea94403a21eb94c93386d559bce297381609153e418a3ffc7d6bf772f59cc35"}, - {file = "aiohttp-3.9.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91c742ca59045dce7ba76cab6e223e41d2c70d79e82c284a96411f8645e2afff"}, - {file = "aiohttp-3.9.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6c93b7c2e52061f0925c3382d5cb8980e40f91c989563d3d32ca280069fd6a87"}, - {file = "aiohttp-3.9.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee2527134f95e106cc1653e9ac78846f3a2ec1004cf20ef4e02038035a74544d"}, - {file = "aiohttp-3.9.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:11ff168d752cb41e8492817e10fb4f85828f6a0142b9726a30c27c35a1835f01"}, - {file = "aiohttp-3.9.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b8c3a67eb87394386847d188996920f33b01b32155f0a94f36ca0e0c635bf3e3"}, - {file = "aiohttp-3.9.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c7b5d5d64e2a14e35a9240b33b89389e0035e6de8dbb7ffa50d10d8b65c57449"}, - {file = "aiohttp-3.9.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:69985d50a2b6f709412d944ffb2e97d0be154ea90600b7a921f95a87d6f108a2"}, - {file = "aiohttp-3.9.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:c9110c06eaaac7e1f5562caf481f18ccf8f6fdf4c3323feab28a93d34cc646bd"}, - {file = "aiohttp-3.9.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d737e69d193dac7296365a6dcb73bbbf53bb760ab25a3727716bbd42022e8d7a"}, - {file = "aiohttp-3.9.1-cp311-cp311-win32.whl", hash = "sha256:4ee8caa925aebc1e64e98432d78ea8de67b2272252b0a931d2ac3bd876ad5544"}, - {file = "aiohttp-3.9.1-cp311-cp311-win_amd64.whl", hash = "sha256:a34086c5cc285be878622e0a6ab897a986a6e8bf5b67ecb377015f06ed316587"}, - {file = "aiohttp-3.9.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:f800164276eec54e0af5c99feb9494c295118fc10a11b997bbb1348ba1a52065"}, - {file = "aiohttp-3.9.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:500f1c59906cd142d452074f3811614be04819a38ae2b3239a48b82649c08821"}, - {file = "aiohttp-3.9.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0b0a6a36ed7e164c6df1e18ee47afbd1990ce47cb428739d6c99aaabfaf1b3af"}, - {file = "aiohttp-3.9.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69da0f3ed3496808e8cbc5123a866c41c12c15baaaead96d256477edf168eb57"}, - {file = "aiohttp-3.9.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:176df045597e674fa950bf5ae536be85699e04cea68fa3a616cf75e413737eb5"}, - {file = "aiohttp-3.9.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b796b44111f0cab6bbf66214186e44734b5baab949cb5fb56154142a92989aeb"}, - {file = "aiohttp-3.9.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f27fdaadce22f2ef950fc10dcdf8048407c3b42b73779e48a4e76b3c35bca26c"}, - {file = "aiohttp-3.9.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bcb6532b9814ea7c5a6a3299747c49de30e84472fa72821b07f5a9818bce0f66"}, - {file = "aiohttp-3.9.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:54631fb69a6e44b2ba522f7c22a6fb2667a02fd97d636048478db2fd8c4e98fe"}, - {file = "aiohttp-3.9.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:4b4c452d0190c5a820d3f5c0f3cd8a28ace48c54053e24da9d6041bf81113183"}, - {file = "aiohttp-3.9.1-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:cae4c0c2ca800c793cae07ef3d40794625471040a87e1ba392039639ad61ab5b"}, - {file = "aiohttp-3.9.1-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:565760d6812b8d78d416c3c7cfdf5362fbe0d0d25b82fed75d0d29e18d7fc30f"}, - {file = "aiohttp-3.9.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:54311eb54f3a0c45efb9ed0d0a8f43d1bc6060d773f6973efd90037a51cd0a3f"}, - {file = "aiohttp-3.9.1-cp312-cp312-win32.whl", hash = "sha256:85c3e3c9cb1d480e0b9a64c658cd66b3cfb8e721636ab8b0e746e2d79a7a9eed"}, - {file = "aiohttp-3.9.1-cp312-cp312-win_amd64.whl", hash = "sha256:11cb254e397a82efb1805d12561e80124928e04e9c4483587ce7390b3866d213"}, - {file = "aiohttp-3.9.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8a22a34bc594d9d24621091d1b91511001a7eea91d6652ea495ce06e27381f70"}, - {file = "aiohttp-3.9.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:598db66eaf2e04aa0c8900a63b0101fdc5e6b8a7ddd805c56d86efb54eb66672"}, - {file = "aiohttp-3.9.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2c9376e2b09895c8ca8b95362283365eb5c03bdc8428ade80a864160605715f1"}, - {file = "aiohttp-3.9.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41473de252e1797c2d2293804e389a6d6986ef37cbb4a25208de537ae32141dd"}, - {file = "aiohttp-3.9.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9c5857612c9813796960c00767645cb5da815af16dafb32d70c72a8390bbf690"}, - {file = "aiohttp-3.9.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ffcd828e37dc219a72c9012ec44ad2e7e3066bec6ff3aaa19e7d435dbf4032ca"}, - {file = "aiohttp-3.9.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:219a16763dc0294842188ac8a12262b5671817042b35d45e44fd0a697d8c8361"}, - {file = "aiohttp-3.9.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f694dc8a6a3112059258a725a4ebe9acac5fe62f11c77ac4dcf896edfa78ca28"}, - {file = "aiohttp-3.9.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:bcc0ea8d5b74a41b621ad4a13d96c36079c81628ccc0b30cfb1603e3dfa3a014"}, - {file = "aiohttp-3.9.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:90ec72d231169b4b8d6085be13023ece8fa9b1bb495e4398d847e25218e0f431"}, - {file = "aiohttp-3.9.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:cf2a0ac0615842b849f40c4d7f304986a242f1e68286dbf3bd7a835e4f83acfd"}, - {file = "aiohttp-3.9.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:0e49b08eafa4f5707ecfb321ab9592717a319e37938e301d462f79b4e860c32a"}, - {file = "aiohttp-3.9.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2c59e0076ea31c08553e868cec02d22191c086f00b44610f8ab7363a11a5d9d8"}, - {file = "aiohttp-3.9.1-cp38-cp38-win32.whl", hash = "sha256:4831df72b053b1eed31eb00a2e1aff6896fb4485301d4ccb208cac264b648db4"}, - {file = "aiohttp-3.9.1-cp38-cp38-win_amd64.whl", hash = "sha256:3135713c5562731ee18f58d3ad1bf41e1d8883eb68b363f2ffde5b2ea4b84cc7"}, - {file = "aiohttp-3.9.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:cfeadf42840c1e870dc2042a232a8748e75a36b52d78968cda6736de55582766"}, - {file = "aiohttp-3.9.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:70907533db712f7aa791effb38efa96f044ce3d4e850e2d7691abd759f4f0ae0"}, - {file = "aiohttp-3.9.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cdefe289681507187e375a5064c7599f52c40343a8701761c802c1853a504558"}, - {file = "aiohttp-3.9.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7481f581251bb5558ba9f635db70908819caa221fc79ee52a7f58392778c636"}, - {file = "aiohttp-3.9.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:49f0c1b3c2842556e5de35f122fc0f0b721334ceb6e78c3719693364d4af8499"}, - {file = "aiohttp-3.9.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0d406b01a9f5a7e232d1b0d161b40c05275ffbcbd772dc18c1d5a570961a1ca4"}, - {file = "aiohttp-3.9.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d8e4450e7fe24d86e86b23cc209e0023177b6d59502e33807b732d2deb6975f"}, - {file = "aiohttp-3.9.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3c0266cd6f005e99f3f51e583012de2778e65af6b73860038b968a0a8888487a"}, - {file = "aiohttp-3.9.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab221850108a4a063c5b8a70f00dd7a1975e5a1713f87f4ab26a46e5feac5a0e"}, - {file = "aiohttp-3.9.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:c88a15f272a0ad3d7773cf3a37cc7b7d077cbfc8e331675cf1346e849d97a4e5"}, - {file = "aiohttp-3.9.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:237533179d9747080bcaad4d02083ce295c0d2eab3e9e8ce103411a4312991a0"}, - {file = "aiohttp-3.9.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:02ab6006ec3c3463b528374c4cdce86434e7b89ad355e7bf29e2f16b46c7dd6f"}, - {file = "aiohttp-3.9.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04fa38875e53eb7e354ece1607b1d2fdee2d175ea4e4d745f6ec9f751fe20c7c"}, - {file = "aiohttp-3.9.1-cp39-cp39-win32.whl", hash = "sha256:82eefaf1a996060602f3cc1112d93ba8b201dbf5d8fd9611227de2003dddb3b7"}, - {file = "aiohttp-3.9.1-cp39-cp39-win_amd64.whl", hash = "sha256:9b05d33ff8e6b269e30a7957bd3244ffbce2a7a35a81b81c382629b80af1a8bf"}, - {file = "aiohttp-3.9.1.tar.gz", hash = "sha256:8fc49a87ac269d4529da45871e2ffb6874e87779c3d0e2ccd813c0899221239d"}, -] - -[package.dependencies] -aiosignal = ">=1.1.2" -async-timeout = {version = ">=4.0,<5.0", markers = "python_version < \"3.11\""} -attrs = ">=17.3.0" -frozenlist = ">=1.1.1" -multidict = ">=4.5,<7.0" -yarl = ">=1.0,<2.0" - -[package.extras] -speedups = ["Brotli", "aiodns", "brotlicffi"] - -[[package]] -name = "aiosignal" -version = "1.3.1" -description = "aiosignal: a list of registered asynchronous callbacks" -optional = false -python-versions = ">=3.7" -files = [ - {file = "aiosignal-1.3.1-py3-none-any.whl", hash = "sha256:f8376fb07dd1e86a584e4fcdec80b36b7f81aac666ebc724e2c090300dd83b17"}, - {file = "aiosignal-1.3.1.tar.gz", hash = "sha256:54cd96e15e1649b75d6c87526a6ff0b6c1b0dd3459f43d9ca11d48c339b68cfc"}, -] - -[package.dependencies] -frozenlist = ">=1.1.0" - -[[package]] -name = "annotated-types" -version = "0.6.0" -description = "Reusable constraint types to use with typing.Annotated" -optional = false -python-versions = ">=3.8" -files = [ - {file = "annotated_types-0.6.0-py3-none-any.whl", hash = "sha256:0641064de18ba7a25dee8f96403ebc39113d0cb953a01429249d5c7564666a43"}, - {file = "annotated_types-0.6.0.tar.gz", hash = "sha256:563339e807e53ffd9c267e99fc6d9ea23eb8443c08f112651963e24e22f84a5d"}, -] - -[package.dependencies] -typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.9\""} - -[[package]] -name = "anyio" -version = "3.7.1" -description = "High level compatibility layer for multiple asynchronous event loop implementations" -optional = false -python-versions = ">=3.7" -files = [ - {file = "anyio-3.7.1-py3-none-any.whl", hash = "sha256:91dee416e570e92c64041bd18b900d1d6fa78dff7048769ce5ac5ddad004fbb5"}, - {file = "anyio-3.7.1.tar.gz", hash = "sha256:44a3c9aba0f5defa43261a8b3efb97891f2bd7d804e0e1f56419befa1adfc780"}, -] - -[package.dependencies] -exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} -idna = ">=2.8" -sniffio = ">=1.1" - -[package.extras] -doc = ["Sphinx", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme (>=1.2.2)", "sphinxcontrib-jquery"] -test = ["anyio[trio]", "coverage[toml] (>=4.5)", "hypothesis (>=4.0)", "mock (>=4)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] -trio = ["trio (<0.22)"] - -[[package]] -name = "async-timeout" -version = "4.0.3" -description = "Timeout context manager for asyncio programs" -optional = false -python-versions = ">=3.7" -files = [ - {file = "async-timeout-4.0.3.tar.gz", hash = "sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f"}, - {file = "async_timeout-4.0.3-py3-none-any.whl", hash = "sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028"}, -] - -[[package]] -name = "attrs" -version = "23.1.0" -description = "Classes Without Boilerplate" -optional = false -python-versions = ">=3.7" -files = [ - {file = "attrs-23.1.0-py3-none-any.whl", hash = "sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04"}, - {file = "attrs-23.1.0.tar.gz", hash = "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015"}, -] - -[package.extras] -cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] -dev = ["attrs[docs,tests]", "pre-commit"] -docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] -tests = ["attrs[tests-no-zope]", "zope-interface"] -tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] - -[[package]] -name = "backoff" -version = "2.2.1" -description = "Function decoration for backoff and retry" -optional = false -python-versions = ">=3.7,<4.0" -files = [ - {file = "backoff-2.2.1-py3-none-any.whl", hash = "sha256:63579f9a0628e06278f7e47b7d7d5b6ce20dc65c5e96a6f3ca99a6adca0396e8"}, - {file = "backoff-2.2.1.tar.gz", hash = "sha256:03f829f5bb1923180821643f8753b0502c3b682293992485b0eef2807afa5cba"}, -] - -[[package]] -name = "certifi" -version = "2023.7.22" -description = "Python package for providing Mozilla's CA Bundle." -optional = false -python-versions = ">=3.6" -files = [ - {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"}, - {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"}, -] - -[[package]] -name = "charset-normalizer" -version = "3.2.0" -description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -optional = false -python-versions = ">=3.7.0" -files = [ - {file = "charset-normalizer-3.2.0.tar.gz", hash = "sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-win32.whl", hash = "sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-win32.whl", hash = "sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-win32.whl", hash = "sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-win32.whl", hash = "sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-win32.whl", hash = "sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80"}, - {file = "charset_normalizer-3.2.0-py3-none-any.whl", hash = "sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6"}, -] - -[[package]] -name = "click" -version = "8.1.7" -description = "Composable command line interface toolkit" -optional = false -python-versions = ">=3.7" -files = [ - {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, - {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "platform_system == \"Windows\""} - -[[package]] -name = "colorama" -version = "0.4.6" -description = "Cross-platform colored terminal text." -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" -files = [ - {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, - {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, -] - -[[package]] -name = "cssselect2" -version = "0.7.0" -description = "CSS selectors for Python ElementTree" -optional = false -python-versions = ">=3.7" -files = [ - {file = "cssselect2-0.7.0-py3-none-any.whl", hash = "sha256:fd23a65bfd444595913f02fc71f6b286c29261e354c41d722ca7a261a49b5969"}, - {file = "cssselect2-0.7.0.tar.gz", hash = "sha256:1ccd984dab89fc68955043aca4e1b03e0cf29cad9880f6e28e3ba7a74b14aa5a"}, -] - -[package.dependencies] -tinycss2 = "*" -webencodings = "*" - -[package.extras] -doc = ["sphinx", "sphinx_rtd_theme"] -test = ["flake8", "isort", "pytest"] - -[[package]] -name = "ecdsa" -version = "0.18.0" -description = "ECDSA cryptographic signature library (pure python)" -optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" -files = [ - {file = "ecdsa-0.18.0-py2.py3-none-any.whl", hash = "sha256:80600258e7ed2f16b9aa1d7c295bd70194109ad5a30fdee0eaeefef1d4c559dd"}, - {file = "ecdsa-0.18.0.tar.gz", hash = "sha256:190348041559e21b22a1d65cee485282ca11a6f81d503fddb84d5017e9ed1e49"}, -] - -[package.dependencies] -six = ">=1.9.0" - -[package.extras] -gmpy = ["gmpy"] -gmpy2 = ["gmpy2"] - -[[package]] -name = "exceptiongroup" -version = "1.1.3" -description = "Backport of PEP 654 (exception groups)" -optional = false -python-versions = ">=3.7" -files = [ - {file = "exceptiongroup-1.1.3-py3-none-any.whl", hash = "sha256:343280667a4585d195ca1cf9cef84a4e178c4b6cf2274caef9859782b567d5e3"}, - {file = "exceptiongroup-1.1.3.tar.gz", hash = "sha256:097acd85d473d75af5bb98e41b61ff7fe35efe6675e4f9370ec6ec5126d160e9"}, -] - -[package.extras] -test = ["pytest (>=6)"] - -[[package]] -name = "fastapi" -version = "0.104.1" -description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" -optional = false -python-versions = ">=3.8" -files = [ - {file = "fastapi-0.104.1-py3-none-any.whl", hash = "sha256:752dc31160cdbd0436bb93bad51560b57e525cbb1d4bbf6f4904ceee75548241"}, - {file = "fastapi-0.104.1.tar.gz", hash = "sha256:e5e4540a7c5e1dcfbbcf5b903c234feddcdcd881f191977a1c5dfd917487e7ae"}, -] - -[package.dependencies] -anyio = ">=3.7.1,<4.0.0" -pydantic = ">=1.7.4,<1.8 || >1.8,<1.8.1 || >1.8.1,<2.0.0 || >2.0.0,<2.0.1 || >2.0.1,<2.1.0 || >2.1.0,<3.0.0" -starlette = ">=0.27.0,<0.28.0" -typing-extensions = ">=4.8.0" - -[package.extras] -all = ["email-validator (>=2.0.0)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=2.11.2)", "orjson (>=3.2.1)", "pydantic-extra-types (>=2.0.0)", "pydantic-settings (>=2.0.0)", "python-multipart (>=0.0.5)", "pyyaml (>=5.3.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0)", "uvicorn[standard] (>=0.12.0)"] - -[[package]] -name = "fastjsonschema" -version = "2.18.0" -description = "Fastest Python implementation of JSON schema" -optional = false -python-versions = "*" -files = [ - {file = "fastjsonschema-2.18.0-py3-none-any.whl", hash = "sha256:128039912a11a807068a7c87d0da36660afbfd7202780db26c4aa7153cfdc799"}, - {file = "fastjsonschema-2.18.0.tar.gz", hash = "sha256:e820349dd16f806e4bd1467a138dced9def4bc7d6213a34295272a6cac95b5bd"}, -] - -[package.extras] -devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benchmark", "pytest-cache", "validictory"] - -[[package]] -name = "frozenlist" -version = "1.4.0" -description = "A list-like structure which implements collections.abc.MutableSequence" -optional = false -python-versions = ">=3.8" -files = [ - {file = "frozenlist-1.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:764226ceef3125e53ea2cb275000e309c0aa5464d43bd72abd661e27fffc26ab"}, - {file = "frozenlist-1.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d6484756b12f40003c6128bfcc3fa9f0d49a687e171186c2d85ec82e3758c559"}, - {file = "frozenlist-1.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9ac08e601308e41eb533f232dbf6b7e4cea762f9f84f6357136eed926c15d12c"}, - {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d081f13b095d74b67d550de04df1c756831f3b83dc9881c38985834387487f1b"}, - {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:71932b597f9895f011f47f17d6428252fc728ba2ae6024e13c3398a087c2cdea"}, - {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:981b9ab5a0a3178ff413bca62526bb784249421c24ad7381e39d67981be2c326"}, - {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e41f3de4df3e80de75845d3e743b3f1c4c8613c3997a912dbf0229fc61a8b963"}, - {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6918d49b1f90821e93069682c06ffde41829c346c66b721e65a5c62b4bab0300"}, - {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0e5c8764c7829343d919cc2dfc587a8db01c4f70a4ebbc49abde5d4b158b007b"}, - {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:8d0edd6b1c7fb94922bf569c9b092ee187a83f03fb1a63076e7774b60f9481a8"}, - {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e29cda763f752553fa14c68fb2195150bfab22b352572cb36c43c47bedba70eb"}, - {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:0c7c1b47859ee2cac3846fde1c1dc0f15da6cec5a0e5c72d101e0f83dcb67ff9"}, - {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:901289d524fdd571be1c7be054f48b1f88ce8dddcbdf1ec698b27d4b8b9e5d62"}, - {file = "frozenlist-1.4.0-cp310-cp310-win32.whl", hash = "sha256:1a0848b52815006ea6596c395f87449f693dc419061cc21e970f139d466dc0a0"}, - {file = "frozenlist-1.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:b206646d176a007466358aa21d85cd8600a415c67c9bd15403336c331a10d956"}, - {file = "frozenlist-1.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:de343e75f40e972bae1ef6090267f8260c1446a1695e77096db6cfa25e759a95"}, - {file = "frozenlist-1.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ad2a9eb6d9839ae241701d0918f54c51365a51407fd80f6b8289e2dfca977cc3"}, - {file = "frozenlist-1.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bd7bd3b3830247580de99c99ea2a01416dfc3c34471ca1298bccabf86d0ff4dc"}, - {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bdf1847068c362f16b353163391210269e4f0569a3c166bc6a9f74ccbfc7e839"}, - {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:38461d02d66de17455072c9ba981d35f1d2a73024bee7790ac2f9e361ef1cd0c"}, - {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5a32087d720c608f42caed0ef36d2b3ea61a9d09ee59a5142d6070da9041b8f"}, - {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dd65632acaf0d47608190a71bfe46b209719bf2beb59507db08ccdbe712f969b"}, - {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:261b9f5d17cac914531331ff1b1d452125bf5daa05faf73b71d935485b0c510b"}, - {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b89ac9768b82205936771f8d2eb3ce88503b1556324c9f903e7156669f521472"}, - {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:008eb8b31b3ea6896da16c38c1b136cb9fec9e249e77f6211d479db79a4eaf01"}, - {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:e74b0506fa5aa5598ac6a975a12aa8928cbb58e1f5ac8360792ef15de1aa848f"}, - {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:490132667476f6781b4c9458298b0c1cddf237488abd228b0b3650e5ecba7467"}, - {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:76d4711f6f6d08551a7e9ef28c722f4a50dd0fc204c56b4bcd95c6cc05ce6fbb"}, - {file = "frozenlist-1.4.0-cp311-cp311-win32.whl", hash = "sha256:a02eb8ab2b8f200179b5f62b59757685ae9987996ae549ccf30f983f40602431"}, - {file = "frozenlist-1.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:515e1abc578dd3b275d6a5114030b1330ba044ffba03f94091842852f806f1c1"}, - {file = "frozenlist-1.4.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:f0ed05f5079c708fe74bf9027e95125334b6978bf07fd5ab923e9e55e5fbb9d3"}, - {file = "frozenlist-1.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ca265542ca427bf97aed183c1676e2a9c66942e822b14dc6e5f42e038f92a503"}, - {file = "frozenlist-1.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:491e014f5c43656da08958808588cc6c016847b4360e327a62cb308c791bd2d9"}, - {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:17ae5cd0f333f94f2e03aaf140bb762c64783935cc764ff9c82dff626089bebf"}, - {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1e78fb68cf9c1a6aa4a9a12e960a5c9dfbdb89b3695197aa7064705662515de2"}, - {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5655a942f5f5d2c9ed93d72148226d75369b4f6952680211972a33e59b1dfdc"}, - {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c11b0746f5d946fecf750428a95f3e9ebe792c1ee3b1e96eeba145dc631a9672"}, - {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e66d2a64d44d50d2543405fb183a21f76b3b5fd16f130f5c99187c3fb4e64919"}, - {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:88f7bc0fcca81f985f78dd0fa68d2c75abf8272b1f5c323ea4a01a4d7a614efc"}, - {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5833593c25ac59ede40ed4de6d67eb42928cca97f26feea219f21d0ed0959b79"}, - {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:fec520865f42e5c7f050c2a79038897b1c7d1595e907a9e08e3353293ffc948e"}, - {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:b826d97e4276750beca7c8f0f1a4938892697a6bcd8ec8217b3312dad6982781"}, - {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ceb6ec0a10c65540421e20ebd29083c50e6d1143278746a4ef6bcf6153171eb8"}, - {file = "frozenlist-1.4.0-cp38-cp38-win32.whl", hash = "sha256:2b8bcf994563466db019fab287ff390fffbfdb4f905fc77bc1c1d604b1c689cc"}, - {file = "frozenlist-1.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:a6c8097e01886188e5be3e6b14e94ab365f384736aa1fca6a0b9e35bd4a30bc7"}, - {file = "frozenlist-1.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:6c38721585f285203e4b4132a352eb3daa19121a035f3182e08e437cface44bf"}, - {file = "frozenlist-1.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a0c6da9aee33ff0b1a451e867da0c1f47408112b3391dd43133838339e410963"}, - {file = "frozenlist-1.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:93ea75c050c5bb3d98016b4ba2497851eadf0ac154d88a67d7a6816206f6fa7f"}, - {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f61e2dc5ad442c52b4887f1fdc112f97caeff4d9e6ebe78879364ac59f1663e1"}, - {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aa384489fefeb62321b238e64c07ef48398fe80f9e1e6afeff22e140e0850eef"}, - {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:10ff5faaa22786315ef57097a279b833ecab1a0bfb07d604c9cbb1c4cdc2ed87"}, - {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:007df07a6e3eb3e33e9a1fe6a9db7af152bbd8a185f9aaa6ece10a3529e3e1c6"}, - {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f4f399d28478d1f604c2ff9119907af9726aed73680e5ed1ca634d377abb087"}, - {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c5374b80521d3d3f2ec5572e05adc94601985cc526fb276d0c8574a6d749f1b3"}, - {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:ce31ae3e19f3c902de379cf1323d90c649425b86de7bbdf82871b8a2a0615f3d"}, - {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7211ef110a9194b6042449431e08c4d80c0481e5891e58d429df5899690511c2"}, - {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:556de4430ce324c836789fa4560ca62d1591d2538b8ceb0b4f68fb7b2384a27a"}, - {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7645a8e814a3ee34a89c4a372011dcd817964ce8cb273c8ed6119d706e9613e3"}, - {file = "frozenlist-1.4.0-cp39-cp39-win32.whl", hash = "sha256:19488c57c12d4e8095a922f328df3f179c820c212940a498623ed39160bc3c2f"}, - {file = "frozenlist-1.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:6221d84d463fb110bdd7619b69cb43878a11d51cbb9394ae3105d082d5199167"}, - {file = "frozenlist-1.4.0.tar.gz", hash = "sha256:09163bdf0b2907454042edb19f887c6d33806adc71fbd54afc14908bfdc22251"}, -] - -[[package]] -name = "h11" -version = "0.14.0" -description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" -optional = false -python-versions = ">=3.7" -files = [ - {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, - {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, -] - -[[package]] -name = "html5lib" -version = "1.1" -description = "HTML parser based on the WHATWG HTML specification" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -files = [ - {file = "html5lib-1.1-py2.py3-none-any.whl", hash = "sha256:0d78f8fde1c230e99fe37986a60526d7049ed4bf8a9fadbad5f00e22e58e041d"}, - {file = "html5lib-1.1.tar.gz", hash = "sha256:b2e5b40261e20f354d198eae92afc10d750afb487ed5e50f9c4eaf07c184146f"}, -] - -[package.dependencies] -six = ">=1.9" -webencodings = "*" - -[package.extras] -all = ["chardet (>=2.2)", "genshi", "lxml"] -chardet = ["chardet (>=2.2)"] -genshi = ["genshi"] -lxml = ["lxml"] - -[[package]] -name = "idna" -version = "3.4" -description = "Internationalized Domain Names in Applications (IDNA)" -optional = false -python-versions = ">=3.5" -files = [ - {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, - {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, -] - -[[package]] -name = "importlib-metadata" -version = "6.8.0" -description = "Read metadata from Python packages" -optional = false -python-versions = ">=3.8" -files = [ - {file = "importlib_metadata-6.8.0-py3-none-any.whl", hash = "sha256:3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb"}, - {file = "importlib_metadata-6.8.0.tar.gz", hash = "sha256:dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743"}, -] - -[package.dependencies] -zipp = ">=0.5" - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -perf = ["ipython"] -testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] - -[[package]] -name = "importlib-resources" -version = "6.1.0" -description = "Read resources from Python packages" -optional = false -python-versions = ">=3.8" -files = [ - {file = "importlib_resources-6.1.0-py3-none-any.whl", hash = "sha256:aa50258bbfa56d4e33fbd8aa3ef48ded10d1735f11532b8df95388cc6bdb7e83"}, - {file = "importlib_resources-6.1.0.tar.gz", hash = "sha256:9d48dcccc213325e810fd723e7fbb45ccb39f6cf5c31f00cf2b965f5f10f3cb9"}, -] - -[package.dependencies] -zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-ruff", "zipp (>=3.17)"] - -[[package]] -name = "jsonschema" -version = "4.19.1" -description = "An implementation of JSON Schema validation for Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "jsonschema-4.19.1-py3-none-any.whl", hash = "sha256:cd5f1f9ed9444e554b38ba003af06c0a8c2868131e56bfbef0550fb450c0330e"}, - {file = "jsonschema-4.19.1.tar.gz", hash = "sha256:ec84cc37cfa703ef7cd4928db24f9cb31428a5d0fa77747b8b51a847458e0bbf"}, -] - -[package.dependencies] -attrs = ">=22.2.0" -importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""} -jsonschema-specifications = ">=2023.03.6" -pkgutil-resolve-name = {version = ">=1.3.10", markers = "python_version < \"3.9\""} -referencing = ">=0.28.4" -rpds-py = ">=0.7.1" - -[package.extras] -format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] -format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"] - -[[package]] -name = "jsonschema-specifications" -version = "2023.7.1" -description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" -optional = false -python-versions = ">=3.8" -files = [ - {file = "jsonschema_specifications-2023.7.1-py3-none-any.whl", hash = "sha256:05adf340b659828a004220a9613be00fa3f223f2b82002e273dee62fd50524b1"}, - {file = "jsonschema_specifications-2023.7.1.tar.gz", hash = "sha256:c91a50404e88a1f6ba40636778e2ee08f6e24c5613fe4c53ac24578a5a7f72bb"}, -] - -[package.dependencies] -importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""} -referencing = ">=0.28.0" - -[[package]] -name = "jupyter-core" -version = "5.3.1" -description = "Jupyter core package. A base package on which Jupyter projects rely." -optional = false -python-versions = ">=3.8" -files = [ - {file = "jupyter_core-5.3.1-py3-none-any.whl", hash = "sha256:ae9036db959a71ec1cac33081eeb040a79e681f08ab68b0883e9a676c7a90dce"}, - {file = "jupyter_core-5.3.1.tar.gz", hash = "sha256:5ba5c7938a7f97a6b0481463f7ff0dbac7c15ba48cf46fa4035ca6e838aa1aba"}, -] - -[package.dependencies] -platformdirs = ">=2.5" -pywin32 = {version = ">=300", markers = "sys_platform == \"win32\" and platform_python_implementation != \"PyPy\""} -traitlets = ">=5.3" - -[package.extras] -docs = ["myst-parser", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "traitlets"] -test = ["ipykernel", "pre-commit", "pytest", "pytest-cov", "pytest-timeout"] - -[[package]] -name = "lxml" -version = "4.9.3" -description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4.*" -files = [ - {file = "lxml-4.9.3-cp27-cp27m-macosx_11_0_x86_64.whl", hash = "sha256:b0a545b46b526d418eb91754565ba5b63b1c0b12f9bd2f808c852d9b4b2f9b5c"}, - {file = "lxml-4.9.3-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:075b731ddd9e7f68ad24c635374211376aa05a281673ede86cbe1d1b3455279d"}, - {file = "lxml-4.9.3-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1e224d5755dba2f4a9498e150c43792392ac9b5380aa1b845f98a1618c94eeef"}, - {file = "lxml-4.9.3-cp27-cp27m-win32.whl", hash = "sha256:2c74524e179f2ad6d2a4f7caf70e2d96639c0954c943ad601a9e146c76408ed7"}, - {file = "lxml-4.9.3-cp27-cp27m-win_amd64.whl", hash = "sha256:4f1026bc732b6a7f96369f7bfe1a4f2290fb34dce00d8644bc3036fb351a4ca1"}, - {file = "lxml-4.9.3-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c0781a98ff5e6586926293e59480b64ddd46282953203c76ae15dbbbf302e8bb"}, - {file = "lxml-4.9.3-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:cef2502e7e8a96fe5ad686d60b49e1ab03e438bd9123987994528febd569868e"}, - {file = "lxml-4.9.3-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:b86164d2cff4d3aaa1f04a14685cbc072efd0b4f99ca5708b2ad1b9b5988a991"}, - {file = "lxml-4.9.3-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:42871176e7896d5d45138f6d28751053c711ed4d48d8e30b498da155af39aebd"}, - {file = "lxml-4.9.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:ae8b9c6deb1e634ba4f1930eb67ef6e6bf6a44b6eb5ad605642b2d6d5ed9ce3c"}, - {file = "lxml-4.9.3-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:411007c0d88188d9f621b11d252cce90c4a2d1a49db6c068e3c16422f306eab8"}, - {file = "lxml-4.9.3-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:cd47b4a0d41d2afa3e58e5bf1f62069255aa2fd6ff5ee41604418ca925911d76"}, - {file = "lxml-4.9.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0e2cb47860da1f7e9a5256254b74ae331687b9672dfa780eed355c4c9c3dbd23"}, - {file = "lxml-4.9.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1247694b26342a7bf47c02e513d32225ededd18045264d40758abeb3c838a51f"}, - {file = "lxml-4.9.3-cp310-cp310-win32.whl", hash = "sha256:cdb650fc86227eba20de1a29d4b2c1bfe139dc75a0669270033cb2ea3d391b85"}, - {file = "lxml-4.9.3-cp310-cp310-win_amd64.whl", hash = "sha256:97047f0d25cd4bcae81f9ec9dc290ca3e15927c192df17331b53bebe0e3ff96d"}, - {file = "lxml-4.9.3-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:1f447ea5429b54f9582d4b955f5f1985f278ce5cf169f72eea8afd9502973dd5"}, - {file = "lxml-4.9.3-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:57d6ba0ca2b0c462f339640d22882acc711de224d769edf29962b09f77129cbf"}, - {file = "lxml-4.9.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:9767e79108424fb6c3edf8f81e6730666a50feb01a328f4a016464a5893f835a"}, - {file = "lxml-4.9.3-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:71c52db65e4b56b8ddc5bb89fb2e66c558ed9d1a74a45ceb7dcb20c191c3df2f"}, - {file = "lxml-4.9.3-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:d73d8ecf8ecf10a3bd007f2192725a34bd62898e8da27eb9d32a58084f93962b"}, - {file = "lxml-4.9.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0a3d3487f07c1d7f150894c238299934a2a074ef590b583103a45002035be120"}, - {file = "lxml-4.9.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9e28c51fa0ce5674be9f560c6761c1b441631901993f76700b1b30ca6c8378d6"}, - {file = "lxml-4.9.3-cp311-cp311-win32.whl", hash = "sha256:0bfd0767c5c1de2551a120673b72e5d4b628737cb05414f03c3277bf9bed3305"}, - {file = "lxml-4.9.3-cp311-cp311-win_amd64.whl", hash = "sha256:25f32acefac14ef7bd53e4218fe93b804ef6f6b92ffdb4322bb6d49d94cad2bc"}, - {file = "lxml-4.9.3-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:d3ff32724f98fbbbfa9f49d82852b159e9784d6094983d9a8b7f2ddaebb063d4"}, - {file = "lxml-4.9.3-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:48d6ed886b343d11493129e019da91d4039826794a3e3027321c56d9e71505be"}, - {file = "lxml-4.9.3-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:9a92d3faef50658dd2c5470af249985782bf754c4e18e15afb67d3ab06233f13"}, - {file = "lxml-4.9.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b4e4bc18382088514ebde9328da057775055940a1f2e18f6ad2d78aa0f3ec5b9"}, - {file = "lxml-4.9.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fc9b106a1bf918db68619fdcd6d5ad4f972fdd19c01d19bdb6bf63f3589a9ec5"}, - {file = "lxml-4.9.3-cp312-cp312-win_amd64.whl", hash = "sha256:d37017287a7adb6ab77e1c5bee9bcf9660f90ff445042b790402a654d2ad81d8"}, - {file = "lxml-4.9.3-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:56dc1f1ebccc656d1b3ed288f11e27172a01503fc016bcabdcbc0978b19352b7"}, - {file = "lxml-4.9.3-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:578695735c5a3f51569810dfebd05dd6f888147a34f0f98d4bb27e92b76e05c2"}, - {file = "lxml-4.9.3-cp35-cp35m-win32.whl", hash = "sha256:704f61ba8c1283c71b16135caf697557f5ecf3e74d9e453233e4771d68a1f42d"}, - {file = "lxml-4.9.3-cp35-cp35m-win_amd64.whl", hash = "sha256:c41bfca0bd3532d53d16fd34d20806d5c2b1ace22a2f2e4c0008570bf2c58833"}, - {file = "lxml-4.9.3-cp36-cp36m-macosx_11_0_x86_64.whl", hash = "sha256:64f479d719dc9f4c813ad9bb6b28f8390360660b73b2e4beb4cb0ae7104f1c12"}, - {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:dd708cf4ee4408cf46a48b108fb9427bfa00b9b85812a9262b5c668af2533ea5"}, - {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c31c7462abdf8f2ac0577d9f05279727e698f97ecbb02f17939ea99ae8daa98"}, - {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:e3cd95e10c2610c360154afdc2f1480aea394f4a4f1ea0a5eacce49640c9b190"}, - {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_28_x86_64.whl", hash = "sha256:4930be26af26ac545c3dffb662521d4e6268352866956672231887d18f0eaab2"}, - {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4aec80cde9197340bc353d2768e2a75f5f60bacda2bab72ab1dc499589b3878c"}, - {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:14e019fd83b831b2e61baed40cab76222139926b1fb5ed0e79225bc0cae14584"}, - {file = "lxml-4.9.3-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:0c0850c8b02c298d3c7006b23e98249515ac57430e16a166873fc47a5d549287"}, - {file = "lxml-4.9.3-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:aca086dc5f9ef98c512bac8efea4483eb84abbf926eaeedf7b91479feb092458"}, - {file = "lxml-4.9.3-cp36-cp36m-win32.whl", hash = "sha256:50baa9c1c47efcaef189f31e3d00d697c6d4afda5c3cde0302d063492ff9b477"}, - {file = "lxml-4.9.3-cp36-cp36m-win_amd64.whl", hash = "sha256:bef4e656f7d98aaa3486d2627e7d2df1157d7e88e7efd43a65aa5dd4714916cf"}, - {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:46f409a2d60f634fe550f7133ed30ad5321ae2e6630f13657fb9479506b00601"}, - {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:4c28a9144688aef80d6ea666c809b4b0e50010a2aca784c97f5e6bf143d9f129"}, - {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:141f1d1a9b663c679dc524af3ea1773e618907e96075262726c7612c02b149a4"}, - {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:53ace1c1fd5a74ef662f844a0413446c0629d151055340e9893da958a374f70d"}, - {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:17a753023436a18e27dd7769e798ce302963c236bc4114ceee5b25c18c52c693"}, - {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7d298a1bd60c067ea75d9f684f5f3992c9d6766fadbc0bcedd39750bf344c2f4"}, - {file = "lxml-4.9.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:081d32421db5df44c41b7f08a334a090a545c54ba977e47fd7cc2deece78809a"}, - {file = "lxml-4.9.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:23eed6d7b1a3336ad92d8e39d4bfe09073c31bfe502f20ca5116b2a334f8ec02"}, - {file = "lxml-4.9.3-cp37-cp37m-win32.whl", hash = "sha256:1509dd12b773c02acd154582088820893109f6ca27ef7291b003d0e81666109f"}, - {file = "lxml-4.9.3-cp37-cp37m-win_amd64.whl", hash = "sha256:120fa9349a24c7043854c53cae8cec227e1f79195a7493e09e0c12e29f918e52"}, - {file = "lxml-4.9.3-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:4d2d1edbca80b510443f51afd8496be95529db04a509bc8faee49c7b0fb6d2cc"}, - {file = "lxml-4.9.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:8d7e43bd40f65f7d97ad8ef5c9b1778943d02f04febef12def25f7583d19baac"}, - {file = "lxml-4.9.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:71d66ee82e7417828af6ecd7db817913cb0cf9d4e61aa0ac1fde0583d84358db"}, - {file = "lxml-4.9.3-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:6fc3c450eaa0b56f815c7b62f2b7fba7266c4779adcf1cece9e6deb1de7305ce"}, - {file = "lxml-4.9.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:65299ea57d82fb91c7f019300d24050c4ddeb7c5a190e076b5f48a2b43d19c42"}, - {file = "lxml-4.9.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:eadfbbbfb41b44034a4c757fd5d70baccd43296fb894dba0295606a7cf3124aa"}, - {file = "lxml-4.9.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3e9bdd30efde2b9ccfa9cb5768ba04fe71b018a25ea093379c857c9dad262c40"}, - {file = "lxml-4.9.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fcdd00edfd0a3001e0181eab3e63bd5c74ad3e67152c84f93f13769a40e073a7"}, - {file = "lxml-4.9.3-cp38-cp38-win32.whl", hash = "sha256:57aba1bbdf450b726d58b2aea5fe47c7875f5afb2c4a23784ed78f19a0462574"}, - {file = "lxml-4.9.3-cp38-cp38-win_amd64.whl", hash = "sha256:92af161ecbdb2883c4593d5ed4815ea71b31fafd7fd05789b23100d081ecac96"}, - {file = "lxml-4.9.3-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:9bb6ad405121241e99a86efff22d3ef469024ce22875a7ae045896ad23ba2340"}, - {file = "lxml-4.9.3-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:8ed74706b26ad100433da4b9d807eae371efaa266ffc3e9191ea436087a9d6a7"}, - {file = "lxml-4.9.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:fbf521479bcac1e25a663df882c46a641a9bff6b56dc8b0fafaebd2f66fb231b"}, - {file = "lxml-4.9.3-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:303bf1edce6ced16bf67a18a1cf8339d0db79577eec5d9a6d4a80f0fb10aa2da"}, - {file = "lxml-4.9.3-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:5515edd2a6d1a5a70bfcdee23b42ec33425e405c5b351478ab7dc9347228f96e"}, - {file = "lxml-4.9.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:690dafd0b187ed38583a648076865d8c229661ed20e48f2335d68e2cf7dc829d"}, - {file = "lxml-4.9.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b6420a005548ad52154c8ceab4a1290ff78d757f9e5cbc68f8c77089acd3c432"}, - {file = "lxml-4.9.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bb3bb49c7a6ad9d981d734ef7c7193bc349ac338776a0360cc671eaee89bcf69"}, - {file = "lxml-4.9.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d27be7405547d1f958b60837dc4c1007da90b8b23f54ba1f8b728c78fdb19d50"}, - {file = "lxml-4.9.3-cp39-cp39-win32.whl", hash = "sha256:8df133a2ea5e74eef5e8fc6f19b9e085f758768a16e9877a60aec455ed2609b2"}, - {file = "lxml-4.9.3-cp39-cp39-win_amd64.whl", hash = "sha256:4dd9a263e845a72eacb60d12401e37c616438ea2e5442885f65082c276dfb2b2"}, - {file = "lxml-4.9.3-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:6689a3d7fd13dc687e9102a27e98ef33730ac4fe37795d5036d18b4d527abd35"}, - {file = "lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:f6bdac493b949141b733c5345b6ba8f87a226029cbabc7e9e121a413e49441e0"}, - {file = "lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:05186a0f1346ae12553d66df1cfce6f251589fea3ad3da4f3ef4e34b2d58c6a3"}, - {file = "lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c2006f5c8d28dee289f7020f721354362fa304acbaaf9745751ac4006650254b"}, - {file = "lxml-4.9.3-pp38-pypy38_pp73-macosx_11_0_x86_64.whl", hash = "sha256:5c245b783db29c4e4fbbbfc9c5a78be496c9fea25517f90606aa1f6b2b3d5f7b"}, - {file = "lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:4fb960a632a49f2f089d522f70496640fdf1218f1243889da3822e0a9f5f3ba7"}, - {file = "lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:50670615eaf97227d5dc60de2dc99fb134a7130d310d783314e7724bf163f75d"}, - {file = "lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:9719fe17307a9e814580af1f5c6e05ca593b12fb7e44fe62450a5384dbf61b4b"}, - {file = "lxml-4.9.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:3331bece23c9ee066e0fb3f96c61322b9e0f54d775fccefff4c38ca488de283a"}, - {file = "lxml-4.9.3-pp39-pypy39_pp73-macosx_11_0_x86_64.whl", hash = "sha256:ed667f49b11360951e201453fc3967344d0d0263aa415e1619e85ae7fd17b4e0"}, - {file = "lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:8b77946fd508cbf0fccd8e400a7f71d4ac0e1595812e66025bac475a8e811694"}, - {file = "lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:e4da8ca0c0c0aea88fd46be8e44bd49716772358d648cce45fe387f7b92374a7"}, - {file = "lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:fe4bda6bd4340caa6e5cf95e73f8fea5c4bfc55763dd42f1b50a94c1b4a2fbd4"}, - {file = "lxml-4.9.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:f3df3db1d336b9356dd3112eae5f5c2b8b377f3bc826848567f10bfddfee77e9"}, - {file = "lxml-4.9.3.tar.gz", hash = "sha256:48628bd53a426c9eb9bc066a923acaa0878d1e86129fd5359aee99285f4eed9c"}, -] - -[package.extras] -cssselect = ["cssselect (>=0.7)"] -html5 = ["html5lib"] -htmlsoup = ["BeautifulSoup4"] -source = ["Cython (>=0.29.35)"] - -[[package]] -name = "monotonic" -version = "1.6" -description = "An implementation of time.monotonic() for Python 2 & < 3.3" -optional = false -python-versions = "*" -files = [ - {file = "monotonic-1.6-py2.py3-none-any.whl", hash = "sha256:68687e19a14f11f26d140dd5c86f3dba4bf5df58003000ed467e0e2a69bca96c"}, - {file = "monotonic-1.6.tar.gz", hash = "sha256:3a55207bcfed53ddd5c5bae174524062935efed17792e9de2ad0205ce9ad63f7"}, -] - -[[package]] -name = "multidict" -version = "6.0.4" -description = "multidict implementation" -optional = false -python-versions = ">=3.7" -files = [ - {file = "multidict-6.0.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b1a97283e0c85772d613878028fec909f003993e1007eafa715b24b377cb9b8"}, - {file = "multidict-6.0.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:eeb6dcc05e911516ae3d1f207d4b0520d07f54484c49dfc294d6e7d63b734171"}, - {file = "multidict-6.0.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d6d635d5209b82a3492508cf5b365f3446afb65ae7ebd755e70e18f287b0adf7"}, - {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c048099e4c9e9d615545e2001d3d8a4380bd403e1a0578734e0d31703d1b0c0b"}, - {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ea20853c6dbbb53ed34cb4d080382169b6f4554d394015f1bef35e881bf83547"}, - {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:16d232d4e5396c2efbbf4f6d4df89bfa905eb0d4dc5b3549d872ab898451f569"}, - {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36c63aaa167f6c6b04ef2c85704e93af16c11d20de1d133e39de6a0e84582a93"}, - {file = "multidict-6.0.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:64bdf1086b6043bf519869678f5f2757f473dee970d7abf6da91ec00acb9cb98"}, - {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:43644e38f42e3af682690876cff722d301ac585c5b9e1eacc013b7a3f7b696a0"}, - {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7582a1d1030e15422262de9f58711774e02fa80df0d1578995c76214f6954988"}, - {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:ddff9c4e225a63a5afab9dd15590432c22e8057e1a9a13d28ed128ecf047bbdc"}, - {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:ee2a1ece51b9b9e7752e742cfb661d2a29e7bcdba2d27e66e28a99f1890e4fa0"}, - {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a2e4369eb3d47d2034032a26c7a80fcb21a2cb22e1173d761a162f11e562caa5"}, - {file = "multidict-6.0.4-cp310-cp310-win32.whl", hash = "sha256:574b7eae1ab267e5f8285f0fe881f17efe4b98c39a40858247720935b893bba8"}, - {file = "multidict-6.0.4-cp310-cp310-win_amd64.whl", hash = "sha256:4dcbb0906e38440fa3e325df2359ac6cb043df8e58c965bb45f4e406ecb162cc"}, - {file = "multidict-6.0.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0dfad7a5a1e39c53ed00d2dd0c2e36aed4650936dc18fd9a1826a5ae1cad6f03"}, - {file = "multidict-6.0.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:64da238a09d6039e3bd39bb3aee9c21a5e34f28bfa5aa22518581f910ff94af3"}, - {file = "multidict-6.0.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ff959bee35038c4624250473988b24f846cbeb2c6639de3602c073f10410ceba"}, - {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:01a3a55bd90018c9c080fbb0b9f4891db37d148a0a18722b42f94694f8b6d4c9"}, - {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c5cb09abb18c1ea940fb99360ea0396f34d46566f157122c92dfa069d3e0e982"}, - {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:666daae833559deb2d609afa4490b85830ab0dfca811a98b70a205621a6109fe"}, - {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11bdf3f5e1518b24530b8241529d2050014c884cf18b6fc69c0c2b30ca248710"}, - {file = "multidict-6.0.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7d18748f2d30f94f498e852c67d61261c643b349b9d2a581131725595c45ec6c"}, - {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:458f37be2d9e4c95e2d8866a851663cbc76e865b78395090786f6cd9b3bbf4f4"}, - {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:b1a2eeedcead3a41694130495593a559a668f382eee0727352b9a41e1c45759a"}, - {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7d6ae9d593ef8641544d6263c7fa6408cc90370c8cb2bbb65f8d43e5b0351d9c"}, - {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:5979b5632c3e3534e42ca6ff856bb24b2e3071b37861c2c727ce220d80eee9ed"}, - {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:dcfe792765fab89c365123c81046ad4103fcabbc4f56d1c1997e6715e8015461"}, - {file = "multidict-6.0.4-cp311-cp311-win32.whl", hash = "sha256:3601a3cece3819534b11d4efc1eb76047488fddd0c85a3948099d5da4d504636"}, - {file = "multidict-6.0.4-cp311-cp311-win_amd64.whl", hash = "sha256:81a4f0b34bd92df3da93315c6a59034df95866014ac08535fc819f043bfd51f0"}, - {file = "multidict-6.0.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:67040058f37a2a51ed8ea8f6b0e6ee5bd78ca67f169ce6122f3e2ec80dfe9b78"}, - {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:853888594621e6604c978ce2a0444a1e6e70c8d253ab65ba11657659dcc9100f"}, - {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:39ff62e7d0f26c248b15e364517a72932a611a9b75f35b45be078d81bdb86603"}, - {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:af048912e045a2dc732847d33821a9d84ba553f5c5f028adbd364dd4765092ac"}, - {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1e8b901e607795ec06c9e42530788c45ac21ef3aaa11dbd0c69de543bfb79a9"}, - {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62501642008a8b9871ddfccbf83e4222cf8ac0d5aeedf73da36153ef2ec222d2"}, - {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:99b76c052e9f1bc0721f7541e5e8c05db3941eb9ebe7b8553c625ef88d6eefde"}, - {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:509eac6cf09c794aa27bcacfd4d62c885cce62bef7b2c3e8b2e49d365b5003fe"}, - {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:21a12c4eb6ddc9952c415f24eef97e3e55ba3af61f67c7bc388dcdec1404a067"}, - {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:5cad9430ab3e2e4fa4a2ef4450f548768400a2ac635841bc2a56a2052cdbeb87"}, - {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ab55edc2e84460694295f401215f4a58597f8f7c9466faec545093045476327d"}, - {file = "multidict-6.0.4-cp37-cp37m-win32.whl", hash = "sha256:5a4dcf02b908c3b8b17a45fb0f15b695bf117a67b76b7ad18b73cf8e92608775"}, - {file = "multidict-6.0.4-cp37-cp37m-win_amd64.whl", hash = "sha256:6ed5f161328b7df384d71b07317f4d8656434e34591f20552c7bcef27b0ab88e"}, - {file = "multidict-6.0.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5fc1b16f586f049820c5c5b17bb4ee7583092fa0d1c4e28b5239181ff9532e0c"}, - {file = "multidict-6.0.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1502e24330eb681bdaa3eb70d6358e818e8e8f908a22a1851dfd4e15bc2f8161"}, - {file = "multidict-6.0.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b692f419760c0e65d060959df05f2a531945af31fda0c8a3b3195d4efd06de11"}, - {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45e1ecb0379bfaab5eef059f50115b54571acfbe422a14f668fc8c27ba410e7e"}, - {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ddd3915998d93fbcd2566ddf9cf62cdb35c9e093075f862935573d265cf8f65d"}, - {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:59d43b61c59d82f2effb39a93c48b845efe23a3852d201ed2d24ba830d0b4cf2"}, - {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc8e1d0c705233c5dd0c5e6460fbad7827d5d36f310a0fadfd45cc3029762258"}, - {file = "multidict-6.0.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6aa0418fcc838522256761b3415822626f866758ee0bc6632c9486b179d0b52"}, - {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6748717bb10339c4760c1e63da040f5f29f5ed6e59d76daee30305894069a660"}, - {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4d1a3d7ef5e96b1c9e92f973e43aa5e5b96c659c9bc3124acbbd81b0b9c8a951"}, - {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4372381634485bec7e46718edc71528024fcdc6f835baefe517b34a33c731d60"}, - {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:fc35cb4676846ef752816d5be2193a1e8367b4c1397b74a565a9d0389c433a1d"}, - {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:4b9d9e4e2b37daddb5c23ea33a3417901fa7c7b3dee2d855f63ee67a0b21e5b1"}, - {file = "multidict-6.0.4-cp38-cp38-win32.whl", hash = "sha256:e41b7e2b59679edfa309e8db64fdf22399eec4b0b24694e1b2104fb789207779"}, - {file = "multidict-6.0.4-cp38-cp38-win_amd64.whl", hash = "sha256:d6c254ba6e45d8e72739281ebc46ea5eb5f101234f3ce171f0e9f5cc86991480"}, - {file = "multidict-6.0.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:16ab77bbeb596e14212e7bab8429f24c1579234a3a462105cda4a66904998664"}, - {file = "multidict-6.0.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bc779e9e6f7fda81b3f9aa58e3a6091d49ad528b11ed19f6621408806204ad35"}, - {file = "multidict-6.0.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4ceef517eca3e03c1cceb22030a3e39cb399ac86bff4e426d4fc6ae49052cc60"}, - {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:281af09f488903fde97923c7744bb001a9b23b039a909460d0f14edc7bf59706"}, - {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:52f2dffc8acaba9a2f27174c41c9e57f60b907bb9f096b36b1a1f3be71c6284d"}, - {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b41156839806aecb3641f3208c0dafd3ac7775b9c4c422d82ee2a45c34ba81ca"}, - {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5e3fc56f88cc98ef8139255cf8cd63eb2c586531e43310ff859d6bb3a6b51f1"}, - {file = "multidict-6.0.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8316a77808c501004802f9beebde51c9f857054a0c871bd6da8280e718444449"}, - {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f70b98cd94886b49d91170ef23ec5c0e8ebb6f242d734ed7ed677b24d50c82cf"}, - {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bf6774e60d67a9efe02b3616fee22441d86fab4c6d335f9d2051d19d90a40063"}, - {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:e69924bfcdda39b722ef4d9aa762b2dd38e4632b3641b1d9a57ca9cd18f2f83a"}, - {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:6b181d8c23da913d4ff585afd1155a0e1194c0b50c54fcfe286f70cdaf2b7176"}, - {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:52509b5be062d9eafc8170e53026fbc54cf3b32759a23d07fd935fb04fc22d95"}, - {file = "multidict-6.0.4-cp39-cp39-win32.whl", hash = "sha256:27c523fbfbdfd19c6867af7346332b62b586eed663887392cff78d614f9ec313"}, - {file = "multidict-6.0.4-cp39-cp39-win_amd64.whl", hash = "sha256:33029f5734336aa0d4c0384525da0387ef89148dc7191aae00ca5fb23d7aafc2"}, - {file = "multidict-6.0.4.tar.gz", hash = "sha256:3666906492efb76453c0e7b97f2cf459b0682e7402c0489a95484965dbc1da49"}, -] - -[[package]] -name = "nbformat" -version = "5.9.2" -description = "The Jupyter Notebook format" -optional = false -python-versions = ">=3.8" -files = [ - {file = "nbformat-5.9.2-py3-none-any.whl", hash = "sha256:1c5172d786a41b82bcfd0c23f9e6b6f072e8fb49c39250219e4acfff1efe89e9"}, - {file = "nbformat-5.9.2.tar.gz", hash = "sha256:5f98b5ba1997dff175e77e0c17d5c10a96eaed2cbd1de3533d1fc35d5e111192"}, -] - -[package.dependencies] -fastjsonschema = "*" -jsonschema = ">=2.6" -jupyter-core = "*" -traitlets = ">=5.1" - -[package.extras] -docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] -test = ["pep440", "pre-commit", "pytest", "testpath"] - -[[package]] -name = "numpy" -version = "1.24.4" -description = "Fundamental package for array computing in Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "numpy-1.24.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c0bfb52d2169d58c1cdb8cc1f16989101639b34c7d3ce60ed70b19c63eba0b64"}, - {file = "numpy-1.24.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ed094d4f0c177b1b8e7aa9cba7d6ceed51c0e569a5318ac0ca9a090680a6a1b1"}, - {file = "numpy-1.24.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79fc682a374c4a8ed08b331bef9c5f582585d1048fa6d80bc6c35bc384eee9b4"}, - {file = "numpy-1.24.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ffe43c74893dbf38c2b0a1f5428760a1a9c98285553c89e12d70a96a7f3a4d6"}, - {file = "numpy-1.24.4-cp310-cp310-win32.whl", hash = "sha256:4c21decb6ea94057331e111a5bed9a79d335658c27ce2adb580fb4d54f2ad9bc"}, - {file = "numpy-1.24.4-cp310-cp310-win_amd64.whl", hash = "sha256:b4bea75e47d9586d31e892a7401f76e909712a0fd510f58f5337bea9572c571e"}, - {file = "numpy-1.24.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f136bab9c2cfd8da131132c2cf6cc27331dd6fae65f95f69dcd4ae3c3639c810"}, - {file = "numpy-1.24.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e2926dac25b313635e4d6cf4dc4e51c8c0ebfed60b801c799ffc4c32bf3d1254"}, - {file = "numpy-1.24.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:222e40d0e2548690405b0b3c7b21d1169117391c2e82c378467ef9ab4c8f0da7"}, - {file = "numpy-1.24.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7215847ce88a85ce39baf9e89070cb860c98fdddacbaa6c0da3ffb31b3350bd5"}, - {file = "numpy-1.24.4-cp311-cp311-win32.whl", hash = "sha256:4979217d7de511a8d57f4b4b5b2b965f707768440c17cb70fbf254c4b225238d"}, - {file = "numpy-1.24.4-cp311-cp311-win_amd64.whl", hash = "sha256:b7b1fc9864d7d39e28f41d089bfd6353cb5f27ecd9905348c24187a768c79694"}, - {file = "numpy-1.24.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1452241c290f3e2a312c137a9999cdbf63f78864d63c79039bda65ee86943f61"}, - {file = "numpy-1.24.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:04640dab83f7c6c85abf9cd729c5b65f1ebd0ccf9de90b270cd61935eef0197f"}, - {file = "numpy-1.24.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5425b114831d1e77e4b5d812b69d11d962e104095a5b9c3b641a218abcc050e"}, - {file = "numpy-1.24.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd80e219fd4c71fc3699fc1dadac5dcf4fd882bfc6f7ec53d30fa197b8ee22dc"}, - {file = "numpy-1.24.4-cp38-cp38-win32.whl", hash = "sha256:4602244f345453db537be5314d3983dbf5834a9701b7723ec28923e2889e0bb2"}, - {file = "numpy-1.24.4-cp38-cp38-win_amd64.whl", hash = "sha256:692f2e0f55794943c5bfff12b3f56f99af76f902fc47487bdfe97856de51a706"}, - {file = "numpy-1.24.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2541312fbf09977f3b3ad449c4e5f4bb55d0dbf79226d7724211acc905049400"}, - {file = "numpy-1.24.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9667575fb6d13c95f1b36aca12c5ee3356bf001b714fc354eb5465ce1609e62f"}, - {file = "numpy-1.24.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3a86ed21e4f87050382c7bc96571755193c4c1392490744ac73d660e8f564a9"}, - {file = "numpy-1.24.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d11efb4dbecbdf22508d55e48d9c8384db795e1b7b51ea735289ff96613ff74d"}, - {file = "numpy-1.24.4-cp39-cp39-win32.whl", hash = "sha256:6620c0acd41dbcb368610bb2f4d83145674040025e5536954782467100aa8835"}, - {file = "numpy-1.24.4-cp39-cp39-win_amd64.whl", hash = "sha256:befe2bf740fd8373cf56149a5c23a0f601e82869598d41f8e188a0e9869926f8"}, - {file = "numpy-1.24.4-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:31f13e25b4e304632a4619d0e0777662c2ffea99fcae2029556b17d8ff958aef"}, - {file = "numpy-1.24.4-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95f7ac6540e95bc440ad77f56e520da5bf877f87dca58bd095288dce8940532a"}, - {file = "numpy-1.24.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:e98f220aa76ca2a977fe435f5b04d7b3470c0a2e6312907b37ba6068f26787f2"}, - {file = "numpy-1.24.4.tar.gz", hash = "sha256:80f5e3a4e498641401868df4208b74581206afbee7cf7b8329daae82676d9463"}, -] - -[[package]] -name = "numpy" -version = "1.26.0" -description = "Fundamental package for array computing in Python" -optional = false -python-versions = "<3.13,>=3.9" -files = [ - {file = "numpy-1.26.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f8db2f125746e44dce707dd44d4f4efeea8d7e2b43aace3f8d1f235cfa2733dd"}, - {file = "numpy-1.26.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0621f7daf973d34d18b4e4bafb210bbaf1ef5e0100b5fa750bd9cde84c7ac292"}, - {file = "numpy-1.26.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:51be5f8c349fdd1a5568e72713a21f518e7d6707bcf8503b528b88d33b57dc68"}, - {file = "numpy-1.26.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:767254ad364991ccfc4d81b8152912e53e103ec192d1bb4ea6b1f5a7117040be"}, - {file = "numpy-1.26.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:436c8e9a4bdeeee84e3e59614d38c3dbd3235838a877af8c211cfcac8a80b8d3"}, - {file = "numpy-1.26.0-cp310-cp310-win32.whl", hash = "sha256:c2e698cb0c6dda9372ea98a0344245ee65bdc1c9dd939cceed6bb91256837896"}, - {file = "numpy-1.26.0-cp310-cp310-win_amd64.whl", hash = "sha256:09aaee96c2cbdea95de76ecb8a586cb687d281c881f5f17bfc0fb7f5890f6b91"}, - {file = "numpy-1.26.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:637c58b468a69869258b8ae26f4a4c6ff8abffd4a8334c830ffb63e0feefe99a"}, - {file = "numpy-1.26.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:306545e234503a24fe9ae95ebf84d25cba1fdc27db971aa2d9f1ab6bba19a9dd"}, - {file = "numpy-1.26.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c6adc33561bd1d46f81131d5352348350fc23df4d742bb246cdfca606ea1208"}, - {file = "numpy-1.26.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e062aa24638bb5018b7841977c360d2f5917268d125c833a686b7cbabbec496c"}, - {file = "numpy-1.26.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:546b7dd7e22f3c6861463bebb000646fa730e55df5ee4a0224408b5694cc6148"}, - {file = "numpy-1.26.0-cp311-cp311-win32.whl", hash = "sha256:c0b45c8b65b79337dee5134d038346d30e109e9e2e9d43464a2970e5c0e93229"}, - {file = "numpy-1.26.0-cp311-cp311-win_amd64.whl", hash = "sha256:eae430ecf5794cb7ae7fa3808740b015aa80747e5266153128ef055975a72b99"}, - {file = "numpy-1.26.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:166b36197e9debc4e384e9c652ba60c0bacc216d0fc89e78f973a9760b503388"}, - {file = "numpy-1.26.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f042f66d0b4ae6d48e70e28d487376204d3cbf43b84c03bac57e28dac6151581"}, - {file = "numpy-1.26.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e5e18e5b14a7560d8acf1c596688f4dfd19b4f2945b245a71e5af4ddb7422feb"}, - {file = "numpy-1.26.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f6bad22a791226d0a5c7c27a80a20e11cfe09ad5ef9084d4d3fc4a299cca505"}, - {file = "numpy-1.26.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4acc65dd65da28060e206c8f27a573455ed724e6179941edb19f97e58161bb69"}, - {file = "numpy-1.26.0-cp312-cp312-win32.whl", hash = "sha256:bb0d9a1aaf5f1cb7967320e80690a1d7ff69f1d47ebc5a9bea013e3a21faec95"}, - {file = "numpy-1.26.0-cp312-cp312-win_amd64.whl", hash = "sha256:ee84ca3c58fe48b8ddafdeb1db87388dce2c3c3f701bf447b05e4cfcc3679112"}, - {file = "numpy-1.26.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4a873a8180479bc829313e8d9798d5234dfacfc2e8a7ac188418189bb8eafbd2"}, - {file = "numpy-1.26.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:914b28d3215e0c721dc75db3ad6d62f51f630cb0c277e6b3bcb39519bed10bd8"}, - {file = "numpy-1.26.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c78a22e95182fb2e7874712433eaa610478a3caf86f28c621708d35fa4fd6e7f"}, - {file = "numpy-1.26.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86f737708b366c36b76e953c46ba5827d8c27b7a8c9d0f471810728e5a2fe57c"}, - {file = "numpy-1.26.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b44e6a09afc12952a7d2a58ca0a2429ee0d49a4f89d83a0a11052da696440e49"}, - {file = "numpy-1.26.0-cp39-cp39-win32.whl", hash = "sha256:5671338034b820c8d58c81ad1dafc0ed5a00771a82fccc71d6438df00302094b"}, - {file = "numpy-1.26.0-cp39-cp39-win_amd64.whl", hash = "sha256:020cdbee66ed46b671429c7265cf00d8ac91c046901c55684954c3958525dab2"}, - {file = "numpy-1.26.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0792824ce2f7ea0c82ed2e4fecc29bb86bee0567a080dacaf2e0a01fe7654369"}, - {file = "numpy-1.26.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d484292eaeb3e84a51432a94f53578689ffdea3f90e10c8b203a99be5af57d8"}, - {file = "numpy-1.26.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:186ba67fad3c60dbe8a3abff3b67a91351100f2661c8e2a80364ae6279720299"}, - {file = "numpy-1.26.0.tar.gz", hash = "sha256:f93fc78fe8bf15afe2b8d6b6499f1c73953169fad1e9a8dd086cdff3190e7fdf"}, -] - -[[package]] -name = "openbb-core" -version = "1.1.1" -description = "OpenBB package with core functionality" -optional = false -python-versions = ">=3.8,<4.0" -files = [ - {file = "openbb_core-1.1.1-py3-none-any.whl", hash = "sha256:56a8156494225cd920dd7b8998e754ace0e8c0ce569b0476f498fca3266e319d"}, - {file = "openbb_core-1.1.1.tar.gz", hash = "sha256:69dafa517f600e97523c789af144e731adc2403a26ea6449a48e956066d5d37b"}, -] - -[package.dependencies] -aiohttp = ">=3.9.0,<4.0.0" -fastapi = ">=0.104.1,<0.105.0" -html5lib = ">=1.1,<2.0" -importlib-metadata = ">=6.8.0,<7.0.0" -pandas = ">=1.5.3" -posthog = ">=3.0.1,<4.0.0" -pydantic = ">=2.5.1,<3.0.0" -python-dotenv = ">=1.0.0,<2.0.0" -python-jose = ">=3.3.0,<4.0.0" -python-multipart = ">=0.0.6,<0.0.7" -requests = ">=2.31.0,<3.0.0" -ruff = ">=0.1.6,<0.2.0" -uuid7 = ">=0.1.0,<0.2.0" -uvicorn = ">=0.24,<0.25" -websockets = ">=12.0,<13.0" - -[[package]] -name = "packaging" -version = "23.1" -description = "Core utilities for Python packages" -optional = false -python-versions = ">=3.7" -files = [ - {file = "packaging-23.1-py3-none-any.whl", hash = "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61"}, - {file = "packaging-23.1.tar.gz", hash = "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"}, -] - -[[package]] -name = "pandas" -version = "2.0.3" -description = "Powerful data structures for data analysis, time series, and statistics" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pandas-2.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e4c7c9f27a4185304c7caf96dc7d91bc60bc162221152de697c98eb0b2648dd8"}, - {file = "pandas-2.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f167beed68918d62bffb6ec64f2e1d8a7d297a038f86d4aed056b9493fca407f"}, - {file = "pandas-2.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce0c6f76a0f1ba361551f3e6dceaff06bde7514a374aa43e33b588ec10420183"}, - {file = "pandas-2.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba619e410a21d8c387a1ea6e8a0e49bb42216474436245718d7f2e88a2f8d7c0"}, - {file = "pandas-2.0.3-cp310-cp310-win32.whl", hash = "sha256:3ef285093b4fe5058eefd756100a367f27029913760773c8bf1d2d8bebe5d210"}, - {file = "pandas-2.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:9ee1a69328d5c36c98d8e74db06f4ad518a1840e8ccb94a4ba86920986bb617e"}, - {file = "pandas-2.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b084b91d8d66ab19f5bb3256cbd5ea661848338301940e17f4492b2ce0801fe8"}, - {file = "pandas-2.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:37673e3bdf1551b95bf5d4ce372b37770f9529743d2498032439371fc7b7eb26"}, - {file = "pandas-2.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9cb1e14fdb546396b7e1b923ffaeeac24e4cedd14266c3497216dd4448e4f2d"}, - {file = "pandas-2.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9cd88488cceb7635aebb84809d087468eb33551097d600c6dad13602029c2df"}, - {file = "pandas-2.0.3-cp311-cp311-win32.whl", hash = "sha256:694888a81198786f0e164ee3a581df7d505024fbb1f15202fc7db88a71d84ebd"}, - {file = "pandas-2.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:6a21ab5c89dcbd57f78d0ae16630b090eec626360085a4148693def5452d8a6b"}, - {file = "pandas-2.0.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9e4da0d45e7f34c069fe4d522359df7d23badf83abc1d1cef398895822d11061"}, - {file = "pandas-2.0.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:32fca2ee1b0d93dd71d979726b12b61faa06aeb93cf77468776287f41ff8fdc5"}, - {file = "pandas-2.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:258d3624b3ae734490e4d63c430256e716f488c4fcb7c8e9bde2d3aa46c29089"}, - {file = "pandas-2.0.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9eae3dc34fa1aa7772dd3fc60270d13ced7346fcbcfee017d3132ec625e23bb0"}, - {file = "pandas-2.0.3-cp38-cp38-win32.whl", hash = "sha256:f3421a7afb1a43f7e38e82e844e2bca9a6d793d66c1a7f9f0ff39a795bbc5e02"}, - {file = "pandas-2.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:69d7f3884c95da3a31ef82b7618af5710dba95bb885ffab339aad925c3e8ce78"}, - {file = "pandas-2.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5247fb1ba347c1261cbbf0fcfba4a3121fbb4029d95d9ef4dc45406620b25c8b"}, - {file = "pandas-2.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:81af086f4543c9d8bb128328b5d32e9986e0c84d3ee673a2ac6fb57fd14f755e"}, - {file = "pandas-2.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1994c789bf12a7c5098277fb43836ce090f1073858c10f9220998ac74f37c69b"}, - {file = "pandas-2.0.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ec591c48e29226bcbb316e0c1e9423622bc7a4eaf1ef7c3c9fa1a3981f89641"}, - {file = "pandas-2.0.3-cp39-cp39-win32.whl", hash = "sha256:04dbdbaf2e4d46ca8da896e1805bc04eb85caa9a82e259e8eed00254d5e0c682"}, - {file = "pandas-2.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:1168574b036cd8b93abc746171c9b4f1b83467438a5e45909fed645cf8692dbc"}, - {file = "pandas-2.0.3.tar.gz", hash = "sha256:c02f372a88e0d17f36d3093a644c73cfc1788e876a7c4bcb4020a77512e2043c"}, -] - -[package.dependencies] -numpy = [ - {version = ">=1.21.0", markers = "python_version >= \"3.10\" and python_version < \"3.11\""}, - {version = ">=1.20.3", markers = "python_version < \"3.10\""}, - {version = ">=1.23.2", markers = "python_version >= \"3.11\""}, -] -python-dateutil = ">=2.8.2" -pytz = ">=2020.1" -tzdata = ">=2022.1" - -[package.extras] -all = ["PyQt5 (>=5.15.1)", "SQLAlchemy (>=1.4.16)", "beautifulsoup4 (>=4.9.3)", "bottleneck (>=1.3.2)", "brotlipy (>=0.7.0)", "fastparquet (>=0.6.3)", "fsspec (>=2021.07.0)", "gcsfs (>=2021.07.0)", "html5lib (>=1.1)", "hypothesis (>=6.34.2)", "jinja2 (>=3.0.0)", "lxml (>=4.6.3)", "matplotlib (>=3.6.1)", "numba (>=0.53.1)", "numexpr (>=2.7.3)", "odfpy (>=1.4.1)", "openpyxl (>=3.0.7)", "pandas-gbq (>=0.15.0)", "psycopg2 (>=2.8.6)", "pyarrow (>=7.0.0)", "pymysql (>=1.0.2)", "pyreadstat (>=1.1.2)", "pytest (>=7.3.2)", "pytest-asyncio (>=0.17.0)", "pytest-xdist (>=2.2.0)", "python-snappy (>=0.6.0)", "pyxlsb (>=1.0.8)", "qtpy (>=2.2.0)", "s3fs (>=2021.08.0)", "scipy (>=1.7.1)", "tables (>=3.6.1)", "tabulate (>=0.8.9)", "xarray (>=0.21.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=1.4.3)", "zstandard (>=0.15.2)"] -aws = ["s3fs (>=2021.08.0)"] -clipboard = ["PyQt5 (>=5.15.1)", "qtpy (>=2.2.0)"] -compression = ["brotlipy (>=0.7.0)", "python-snappy (>=0.6.0)", "zstandard (>=0.15.2)"] -computation = ["scipy (>=1.7.1)", "xarray (>=0.21.0)"] -excel = ["odfpy (>=1.4.1)", "openpyxl (>=3.0.7)", "pyxlsb (>=1.0.8)", "xlrd (>=2.0.1)", "xlsxwriter (>=1.4.3)"] -feather = ["pyarrow (>=7.0.0)"] -fss = ["fsspec (>=2021.07.0)"] -gcp = ["gcsfs (>=2021.07.0)", "pandas-gbq (>=0.15.0)"] -hdf5 = ["tables (>=3.6.1)"] -html = ["beautifulsoup4 (>=4.9.3)", "html5lib (>=1.1)", "lxml (>=4.6.3)"] -mysql = ["SQLAlchemy (>=1.4.16)", "pymysql (>=1.0.2)"] -output-formatting = ["jinja2 (>=3.0.0)", "tabulate (>=0.8.9)"] -parquet = ["pyarrow (>=7.0.0)"] -performance = ["bottleneck (>=1.3.2)", "numba (>=0.53.1)", "numexpr (>=2.7.1)"] -plot = ["matplotlib (>=3.6.1)"] -postgresql = ["SQLAlchemy (>=1.4.16)", "psycopg2 (>=2.8.6)"] -spss = ["pyreadstat (>=1.1.2)"] -sql-other = ["SQLAlchemy (>=1.4.16)"] -test = ["hypothesis (>=6.34.2)", "pytest (>=7.3.2)", "pytest-asyncio (>=0.17.0)", "pytest-xdist (>=2.2.0)"] -xml = ["lxml (>=4.6.3)"] - -[[package]] -name = "pandas-ta" -version = "0.3.14b" -description = "An easy to use Python 3 Pandas Extension with 130+ Technical Analysis Indicators. Can be called from a Pandas DataFrame or standalone like TA-Lib. Correlation tested with TA-Lib." -optional = false -python-versions = "*" -files = [ - {file = "pandas_ta-0.3.14b.tar.gz", hash = "sha256:0fa35aec831d2815ea30b871688a8d20a76b288a7be2d26cc00c35cd8c09a993"}, -] - -[package.dependencies] -pandas = "*" - -[package.extras] -dev = ["alphaVantage-api", "matplotlib", "mplfinance", "scipy", "sklearn", "statsmodels", "stochastic", "talib", "tqdm", "vectorbt", "yfinance"] -test = ["ta-lib"] - -[[package]] -name = "patsy" -version = "0.5.3" -description = "A Python package for describing statistical models and for building design matrices." -optional = false -python-versions = "*" -files = [ - {file = "patsy-0.5.3-py2.py3-none-any.whl", hash = "sha256:7eb5349754ed6aa982af81f636479b1b8db9d5b1a6e957a6016ec0534b5c86b7"}, - {file = "patsy-0.5.3.tar.gz", hash = "sha256:bdc18001875e319bc91c812c1eb6a10be4bb13cb81eb763f466179dca3b67277"}, -] - -[package.dependencies] -numpy = ">=1.4" -six = "*" - -[package.extras] -test = ["pytest", "pytest-cov", "scipy"] - -[[package]] -name = "pillow" -version = "10.0.1" -description = "Python Imaging Library (Fork)" -optional = false -python-versions = ">=3.8" -files = [ - {file = "Pillow-10.0.1-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:8f06be50669087250f319b706decf69ca71fdecd829091a37cc89398ca4dc17a"}, - {file = "Pillow-10.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:50bd5f1ebafe9362ad622072a1d2f5850ecfa44303531ff14353a4059113b12d"}, - {file = "Pillow-10.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e6a90167bcca1216606223a05e2cf991bb25b14695c518bc65639463d7db722d"}, - {file = "Pillow-10.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f11c9102c56ffb9ca87134bd025a43d2aba3f1155f508eff88f694b33a9c6d19"}, - {file = "Pillow-10.0.1-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:186f7e04248103482ea6354af6d5bcedb62941ee08f7f788a1c7707bc720c66f"}, - {file = "Pillow-10.0.1-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:0462b1496505a3462d0f35dc1c4d7b54069747d65d00ef48e736acda2c8cbdff"}, - {file = "Pillow-10.0.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d889b53ae2f030f756e61a7bff13684dcd77e9af8b10c6048fb2c559d6ed6eaf"}, - {file = "Pillow-10.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:552912dbca585b74d75279a7570dd29fa43b6d93594abb494ebb31ac19ace6bd"}, - {file = "Pillow-10.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:787bb0169d2385a798888e1122c980c6eff26bf941a8ea79747d35d8f9210ca0"}, - {file = "Pillow-10.0.1-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:fd2a5403a75b54661182b75ec6132437a181209b901446ee5724b589af8edef1"}, - {file = "Pillow-10.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2d7e91b4379f7a76b31c2dda84ab9e20c6220488e50f7822e59dac36b0cd92b1"}, - {file = "Pillow-10.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19e9adb3f22d4c416e7cd79b01375b17159d6990003633ff1d8377e21b7f1b21"}, - {file = "Pillow-10.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:93139acd8109edcdeffd85e3af8ae7d88b258b3a1e13a038f542b79b6d255c54"}, - {file = "Pillow-10.0.1-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:92a23b0431941a33242b1f0ce6c88a952e09feeea9af4e8be48236a68ffe2205"}, - {file = "Pillow-10.0.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:cbe68deb8580462ca0d9eb56a81912f59eb4542e1ef8f987405e35a0179f4ea2"}, - {file = "Pillow-10.0.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:522ff4ac3aaf839242c6f4e5b406634bfea002469656ae8358644fc6c4856a3b"}, - {file = "Pillow-10.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:84efb46e8d881bb06b35d1d541aa87f574b58e87f781cbba8d200daa835b42e1"}, - {file = "Pillow-10.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:898f1d306298ff40dc1b9ca24824f0488f6f039bc0e25cfb549d3195ffa17088"}, - {file = "Pillow-10.0.1-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:bcf1207e2f2385a576832af02702de104be71301c2696d0012b1b93fe34aaa5b"}, - {file = "Pillow-10.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5d6c9049c6274c1bb565021367431ad04481ebb54872edecfcd6088d27edd6ed"}, - {file = "Pillow-10.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28444cb6ad49726127d6b340217f0627abc8732f1194fd5352dec5e6a0105635"}, - {file = "Pillow-10.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de596695a75496deb3b499c8c4f8e60376e0516e1a774e7bc046f0f48cd620ad"}, - {file = "Pillow-10.0.1-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:2872f2d7846cf39b3dbff64bc1104cc48c76145854256451d33c5faa55c04d1a"}, - {file = "Pillow-10.0.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:4ce90f8a24e1c15465048959f1e94309dfef93af272633e8f37361b824532e91"}, - {file = "Pillow-10.0.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ee7810cf7c83fa227ba9125de6084e5e8b08c59038a7b2c9045ef4dde61663b4"}, - {file = "Pillow-10.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:b1be1c872b9b5fcc229adeadbeb51422a9633abd847c0ff87dc4ef9bb184ae08"}, - {file = "Pillow-10.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:98533fd7fa764e5f85eebe56c8e4094db912ccbe6fbf3a58778d543cadd0db08"}, - {file = "Pillow-10.0.1-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:764d2c0daf9c4d40ad12fbc0abd5da3af7f8aa11daf87e4fa1b834000f4b6b0a"}, - {file = "Pillow-10.0.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:fcb59711009b0168d6ee0bd8fb5eb259c4ab1717b2f538bbf36bacf207ef7a68"}, - {file = "Pillow-10.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:697a06bdcedd473b35e50a7e7506b1d8ceb832dc238a336bd6f4f5aa91a4b500"}, - {file = "Pillow-10.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f665d1e6474af9f9da5e86c2a3a2d2d6204e04d5af9c06b9d42afa6ebde3f21"}, - {file = "Pillow-10.0.1-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:2fa6dd2661838c66f1a5473f3b49ab610c98a128fc08afbe81b91a1f0bf8c51d"}, - {file = "Pillow-10.0.1-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:3a04359f308ebee571a3127fdb1bd01f88ba6f6fb6d087f8dd2e0d9bff43f2a7"}, - {file = "Pillow-10.0.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:723bd25051454cea9990203405fa6b74e043ea76d4968166dfd2569b0210886a"}, - {file = "Pillow-10.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:71671503e3015da1b50bd18951e2f9daf5b6ffe36d16f1eb2c45711a301521a7"}, - {file = "Pillow-10.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:44e7e4587392953e5e251190a964675f61e4dae88d1e6edbe9f36d6243547ff3"}, - {file = "Pillow-10.0.1-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:3855447d98cced8670aaa63683808df905e956f00348732448b5a6df67ee5849"}, - {file = "Pillow-10.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ed2d9c0704f2dc4fa980b99d565c0c9a543fe5101c25b3d60488b8ba80f0cce1"}, - {file = "Pillow-10.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f5bb289bb835f9fe1a1e9300d011eef4d69661bb9b34d5e196e5e82c4cb09b37"}, - {file = "Pillow-10.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a0d3e54ab1df9df51b914b2233cf779a5a10dfd1ce339d0421748232cea9876"}, - {file = "Pillow-10.0.1-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:2cc6b86ece42a11f16f55fe8903595eff2b25e0358dec635d0a701ac9586588f"}, - {file = "Pillow-10.0.1-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:ca26ba5767888c84bf5a0c1a32f069e8204ce8c21d00a49c90dabeba00ce0145"}, - {file = "Pillow-10.0.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f0b4b06da13275bc02adfeb82643c4a6385bd08d26f03068c2796f60d125f6f2"}, - {file = "Pillow-10.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bc2e3069569ea9dbe88d6b8ea38f439a6aad8f6e7a6283a38edf61ddefb3a9bf"}, - {file = "Pillow-10.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:8b451d6ead6e3500b6ce5c7916a43d8d8d25ad74b9102a629baccc0808c54971"}, - {file = "Pillow-10.0.1-pp310-pypy310_pp73-macosx_10_10_x86_64.whl", hash = "sha256:32bec7423cdf25c9038fef614a853c9d25c07590e1a870ed471f47fb80b244db"}, - {file = "Pillow-10.0.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b7cf63d2c6928b51d35dfdbda6f2c1fddbe51a6bc4a9d4ee6ea0e11670dd981e"}, - {file = "Pillow-10.0.1-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:f6d3d4c905e26354e8f9d82548475c46d8e0889538cb0657aa9c6f0872a37aa4"}, - {file = "Pillow-10.0.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:847e8d1017c741c735d3cd1883fa7b03ded4f825a6e5fcb9378fd813edee995f"}, - {file = "Pillow-10.0.1-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:7f771e7219ff04b79e231d099c0a28ed83aa82af91fd5fa9fdb28f5b8d5addaf"}, - {file = "Pillow-10.0.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:459307cacdd4138edee3875bbe22a2492519e060660eaf378ba3b405d1c66317"}, - {file = "Pillow-10.0.1-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:b059ac2c4c7a97daafa7dc850b43b2d3667def858a4f112d1aa082e5c3d6cf7d"}, - {file = "Pillow-10.0.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:d6caf3cd38449ec3cd8a68b375e0c6fe4b6fd04edb6c9766b55ef84a6e8ddf2d"}, - {file = "Pillow-10.0.1.tar.gz", hash = "sha256:d72967b06be9300fed5cfbc8b5bafceec48bf7cdc7dab66b1d2549035287191d"}, -] - -[package.extras] -docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-removed-in", "sphinxext-opengraph"] -tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] - -[[package]] -name = "pkgutil-resolve-name" -version = "1.3.10" -description = "Resolve a name to an object." -optional = false -python-versions = ">=3.6" -files = [ - {file = "pkgutil_resolve_name-1.3.10-py3-none-any.whl", hash = "sha256:ca27cc078d25c5ad71a9de0a7a330146c4e014c2462d9af19c6b828280649c5e"}, - {file = "pkgutil_resolve_name-1.3.10.tar.gz", hash = "sha256:357d6c9e6a755653cfd78893817c0853af365dd51ec97f3d358a819373bbd174"}, -] - -[[package]] -name = "platformdirs" -version = "3.10.0" -description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -optional = false -python-versions = ">=3.7" -files = [ - {file = "platformdirs-3.10.0-py3-none-any.whl", hash = "sha256:d7c24979f292f916dc9cbf8648319032f551ea8c49a4c9bf2fb556a02070ec1d"}, - {file = "platformdirs-3.10.0.tar.gz", hash = "sha256:b45696dab2d7cc691a3226759c0d3b00c47c8b6e293d96f6436f733303f77f6d"}, -] - -[package.extras] -docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"] - -[[package]] -name = "plotly" -version = "5.17.0" -description = "An open-source, interactive data visualization library for Python" -optional = false -python-versions = ">=3.6" -files = [ - {file = "plotly-5.17.0-py2.py3-none-any.whl", hash = "sha256:7c84cdf11da162423da957bb093287134f2d6f170eb9a74f1459f825892247c3"}, - {file = "plotly-5.17.0.tar.gz", hash = "sha256:290d796bf7bab87aad184fe24b86096234c4c95dcca6ecbca02d02bdf17d3d97"}, -] - -[package.dependencies] -packaging = "*" -tenacity = ">=6.2.0" - -[[package]] -name = "posthog" -version = "3.0.2" -description = "Integrate PostHog into any python application." -optional = false -python-versions = "*" -files = [ - {file = "posthog-3.0.2-py2.py3-none-any.whl", hash = "sha256:a8c0af6f2401fbe50f90e68c4143d0824b54e872de036b1c2f23b5abb39d88ce"}, - {file = "posthog-3.0.2.tar.gz", hash = "sha256:701fba6e446a4de687c6e861b587e7b7741955ad624bf34fe013c06a0fec6fb3"}, -] - -[package.dependencies] -backoff = ">=1.10.0" -monotonic = ">=1.5" -python-dateutil = ">2.1" -requests = ">=2.7,<3.0" -six = ">=1.5" - -[package.extras] -dev = ["black", "flake8", "flake8-print", "isort", "pre-commit"] -sentry = ["django", "sentry-sdk"] -test = ["coverage", "flake8", "freezegun (==0.3.15)", "mock (>=2.0.0)", "pylint", "pytest"] - -[[package]] -name = "pyasn1" -version = "0.5.0" -description = "Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" -files = [ - {file = "pyasn1-0.5.0-py2.py3-none-any.whl", hash = "sha256:87a2121042a1ac9358cabcaf1d07680ff97ee6404333bacca15f76aa8ad01a57"}, - {file = "pyasn1-0.5.0.tar.gz", hash = "sha256:97b7290ca68e62a832558ec3976f15cbf911bf5d7c7039d8b861c2a0ece69fde"}, -] - -[[package]] -name = "pydantic" -version = "2.5.1" -description = "Data validation using Python type hints" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pydantic-2.5.1-py3-none-any.whl", hash = "sha256:dc5244a8939e0d9a68f1f1b5f550b2e1c879912033b1becbedb315accc75441b"}, - {file = "pydantic-2.5.1.tar.gz", hash = "sha256:0b8be5413c06aadfbe56f6dc1d45c9ed25fd43264414c571135c97dd77c2bedb"}, -] - -[package.dependencies] -annotated-types = ">=0.4.0" -pydantic-core = "2.14.3" -typing-extensions = ">=4.6.1" - -[package.extras] -email = ["email-validator (>=2.0.0)"] - -[[package]] -name = "pydantic-core" -version = "2.14.3" -description = "" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pydantic_core-2.14.3-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:ba44fad1d114539d6a1509966b20b74d2dec9a5b0ee12dd7fd0a1bb7b8785e5f"}, - {file = "pydantic_core-2.14.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4a70d23eedd88a6484aa79a732a90e36701048a1509078d1b59578ef0ea2cdf5"}, - {file = "pydantic_core-2.14.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7cc24728a1a9cef497697e53b3d085fb4d3bc0ef1ef4d9b424d9cf808f52c146"}, - {file = "pydantic_core-2.14.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ab4a2381005769a4af2ffddae74d769e8a4aae42e970596208ec6d615c6fb080"}, - {file = "pydantic_core-2.14.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:905a12bf088d6fa20e094f9a477bf84bd823651d8b8384f59bcd50eaa92e6a52"}, - {file = "pydantic_core-2.14.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:38aed5a1bbc3025859f56d6a32f6e53ca173283cb95348e03480f333b1091e7d"}, - {file = "pydantic_core-2.14.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1767bd3f6370458e60c1d3d7b1d9c2751cc1ad743434e8ec84625a610c8b9195"}, - {file = "pydantic_core-2.14.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7cb0c397f29688a5bd2c0dbd44451bc44ebb9b22babc90f97db5ec3e5bb69977"}, - {file = "pydantic_core-2.14.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9ff737f24b34ed26de62d481ef522f233d3c5927279f6b7229de9b0deb3f76b5"}, - {file = "pydantic_core-2.14.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a1a39fecb5f0b19faee9a8a8176c805ed78ce45d760259a4ff3d21a7daa4dfc1"}, - {file = "pydantic_core-2.14.3-cp310-none-win32.whl", hash = "sha256:ccbf355b7276593c68fa824030e68cb29f630c50e20cb11ebb0ee450ae6b3d08"}, - {file = "pydantic_core-2.14.3-cp310-none-win_amd64.whl", hash = "sha256:536e1f58419e1ec35f6d1310c88496f0d60e4f182cacb773d38076f66a60b149"}, - {file = "pydantic_core-2.14.3-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:f1f46700402312bdc31912f6fc17f5ecaaaa3bafe5487c48f07c800052736289"}, - {file = "pydantic_core-2.14.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:88ec906eb2d92420f5b074f59cf9e50b3bb44f3cb70e6512099fdd4d88c2f87c"}, - {file = "pydantic_core-2.14.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:056ea7cc3c92a7d2a14b5bc9c9fa14efa794d9f05b9794206d089d06d3433dc7"}, - {file = "pydantic_core-2.14.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:076edc972b68a66870cec41a4efdd72a6b655c4098a232314b02d2bfa3bfa157"}, - {file = "pydantic_core-2.14.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e71f666c3bf019f2490a47dddb44c3ccea2e69ac882f7495c68dc14d4065eac2"}, - {file = "pydantic_core-2.14.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f518eac285c9632be337323eef9824a856f2680f943a9b68ac41d5f5bad7df7c"}, - {file = "pydantic_core-2.14.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9dbab442a8d9ca918b4ed99db8d89d11b1f067a7dadb642476ad0889560dac79"}, - {file = "pydantic_core-2.14.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0653fb9fc2fa6787f2fa08631314ab7fc8070307bd344bf9471d1b7207c24623"}, - {file = "pydantic_core-2.14.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c54af5069da58ea643ad34ff32fd6bc4eebb8ae0fef9821cd8919063e0aeeaab"}, - {file = "pydantic_core-2.14.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cc956f78651778ec1ab105196e90e0e5f5275884793ab67c60938c75bcca3989"}, - {file = "pydantic_core-2.14.3-cp311-none-win32.whl", hash = "sha256:5b73441a1159f1fb37353aaefb9e801ab35a07dd93cb8177504b25a317f4215a"}, - {file = "pydantic_core-2.14.3-cp311-none-win_amd64.whl", hash = "sha256:7349f99f1ef8b940b309179733f2cad2e6037a29560f1b03fdc6aa6be0a8d03c"}, - {file = "pydantic_core-2.14.3-cp311-none-win_arm64.whl", hash = "sha256:ec79dbe23702795944d2ae4c6925e35a075b88acd0d20acde7c77a817ebbce94"}, - {file = "pydantic_core-2.14.3-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:8f5624f0f67f2b9ecaa812e1dfd2e35b256487566585160c6c19268bf2ffeccc"}, - {file = "pydantic_core-2.14.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6c2d118d1b6c9e2d577e215567eedbe11804c3aafa76d39ec1f8bc74e918fd07"}, - {file = "pydantic_core-2.14.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fe863491664c6720d65ae438d4efaa5eca766565a53adb53bf14bc3246c72fe0"}, - {file = "pydantic_core-2.14.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:136bc7247e97a921a020abbd6ef3169af97569869cd6eff41b6a15a73c44ea9b"}, - {file = "pydantic_core-2.14.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aeafc7f5bbddc46213707266cadc94439bfa87ecf699444de8be044d6d6eb26f"}, - {file = "pydantic_core-2.14.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e16aaf788f1de5a85c8f8fcc9c1ca1dd7dd52b8ad30a7889ca31c7c7606615b8"}, - {file = "pydantic_core-2.14.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8fc652c354d3362e2932a79d5ac4bbd7170757a41a62c4fe0f057d29f10bebb"}, - {file = "pydantic_core-2.14.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f1b92e72babfd56585c75caf44f0b15258c58e6be23bc33f90885cebffde3400"}, - {file = "pydantic_core-2.14.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:75f3f534f33651b73f4d3a16d0254de096f43737d51e981478d580f4b006b427"}, - {file = "pydantic_core-2.14.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:c9ffd823c46e05ef3eb28b821aa7bc501efa95ba8880b4a1380068e32c5bed47"}, - {file = "pydantic_core-2.14.3-cp312-none-win32.whl", hash = "sha256:12e05a76b223577a4696c76d7a6b36a0ccc491ffb3c6a8cf92d8001d93ddfd63"}, - {file = "pydantic_core-2.14.3-cp312-none-win_amd64.whl", hash = "sha256:1582f01eaf0537a696c846bea92082082b6bfc1103a88e777e983ea9fbdc2a0f"}, - {file = "pydantic_core-2.14.3-cp312-none-win_arm64.whl", hash = "sha256:96fb679c7ca12a512d36d01c174a4fbfd912b5535cc722eb2c010c7b44eceb8e"}, - {file = "pydantic_core-2.14.3-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:71ed769b58d44e0bc2701aa59eb199b6665c16e8a5b8b4a84db01f71580ec448"}, - {file = "pydantic_core-2.14.3-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:5402ee0f61e7798ea93a01b0489520f2abfd9b57b76b82c93714c4318c66ca06"}, - {file = "pydantic_core-2.14.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eaab9dc009e22726c62fe3b850b797e7f0e7ba76d245284d1064081f512c7226"}, - {file = "pydantic_core-2.14.3-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:92486a04d54987054f8b4405a9af9d482e5100d6fe6374fc3303015983fc8bda"}, - {file = "pydantic_core-2.14.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cf08b43d1d5d1678f295f0431a4a7e1707d4652576e1d0f8914b5e0213bfeee5"}, - {file = "pydantic_core-2.14.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8ca13480ce16daad0504be6ce893b0ee8ec34cd43b993b754198a89e2787f7e"}, - {file = "pydantic_core-2.14.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:44afa3c18d45053fe8d8228950ee4c8eaf3b5a7f3b64963fdeac19b8342c987f"}, - {file = "pydantic_core-2.14.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:56814b41486e2d712a8bc02a7b1f17b87fa30999d2323bbd13cf0e52296813a1"}, - {file = "pydantic_core-2.14.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c3dc2920cc96f9aa40c6dc54256e436cc95c0a15562eb7bd579e1811593c377e"}, - {file = "pydantic_core-2.14.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e483b8b913fcd3b48badec54185c150cb7ab0e6487914b84dc7cde2365e0c892"}, - {file = "pydantic_core-2.14.3-cp37-none-win32.whl", hash = "sha256:364dba61494e48f01ef50ae430e392f67ee1ee27e048daeda0e9d21c3ab2d609"}, - {file = "pydantic_core-2.14.3-cp37-none-win_amd64.whl", hash = "sha256:a402ae1066be594701ac45661278dc4a466fb684258d1a2c434de54971b006ca"}, - {file = "pydantic_core-2.14.3-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:10904368261e4509c091cbcc067e5a88b070ed9a10f7ad78f3029c175487490f"}, - {file = "pydantic_core-2.14.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:260692420028319e201b8649b13ac0988974eeafaaef95d0dfbf7120c38dc000"}, - {file = "pydantic_core-2.14.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c1bf1a7b05a65d3b37a9adea98e195e0081be6b17ca03a86f92aeb8b110f468"}, - {file = "pydantic_core-2.14.3-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d7abd17a838a52140e3aeca271054e321226f52df7e0a9f0da8f91ea123afe98"}, - {file = "pydantic_core-2.14.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a5c51460ede609fbb4fa883a8fe16e749964ddb459966d0518991ec02eb8dfb9"}, - {file = "pydantic_core-2.14.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d06c78074646111fb01836585f1198367b17d57c9f427e07aaa9ff499003e58d"}, - {file = "pydantic_core-2.14.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af452e69446fadf247f18ac5d153b1f7e61ef708f23ce85d8c52833748c58075"}, - {file = "pydantic_core-2.14.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e3ad4968711fb379a67c8c755beb4dae8b721a83737737b7bcee27c05400b047"}, - {file = "pydantic_core-2.14.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:c5ea0153482e5b4d601c25465771c7267c99fddf5d3f3bdc238ef930e6d051cf"}, - {file = "pydantic_core-2.14.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:96eb10ef8920990e703da348bb25fedb8b8653b5966e4e078e5be382b430f9e0"}, - {file = "pydantic_core-2.14.3-cp38-none-win32.whl", hash = "sha256:ea1498ce4491236d1cffa0eee9ad0968b6ecb0c1cd711699c5677fc689905f00"}, - {file = "pydantic_core-2.14.3-cp38-none-win_amd64.whl", hash = "sha256:2bc736725f9bd18a60eec0ed6ef9b06b9785454c8d0105f2be16e4d6274e63d0"}, - {file = "pydantic_core-2.14.3-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:1ea992659c03c3ea811d55fc0a997bec9dde863a617cc7b25cfde69ef32e55af"}, - {file = "pydantic_core-2.14.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d2b53e1f851a2b406bbb5ac58e16c4a5496038eddd856cc900278fa0da97f3fc"}, - {file = "pydantic_core-2.14.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0c7f8e8a7cf8e81ca7d44bea4f181783630959d41b4b51d2f74bc50f348a090f"}, - {file = "pydantic_core-2.14.3-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8d3b9c91eeb372a64ec6686c1402afd40cc20f61a0866850f7d989b6bf39a41a"}, - {file = "pydantic_core-2.14.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9ef3e2e407e4cad2df3c89488a761ed1f1c33f3b826a2ea9a411b0a7d1cccf1b"}, - {file = "pydantic_core-2.14.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f86f20a9d5bee1a6ede0f2757b917bac6908cde0f5ad9fcb3606db1e2968bcf5"}, - {file = "pydantic_core-2.14.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61beaa79d392d44dc19d6f11ccd824d3cccb865c4372157c40b92533f8d76dd0"}, - {file = "pydantic_core-2.14.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d41df8e10b094640a6b234851b624b76a41552f637b9fb34dc720b9fe4ef3be4"}, - {file = "pydantic_core-2.14.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2c08ac60c3caa31f825b5dbac47e4875bd4954d8f559650ad9e0b225eaf8ed0c"}, - {file = "pydantic_core-2.14.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:98d8b3932f1a369364606417ded5412c4ffb15bedbcf797c31317e55bd5d920e"}, - {file = "pydantic_core-2.14.3-cp39-none-win32.whl", hash = "sha256:caa94726791e316f0f63049ee00dff3b34a629b0d099f3b594770f7d0d8f1f56"}, - {file = "pydantic_core-2.14.3-cp39-none-win_amd64.whl", hash = "sha256:2494d20e4c22beac30150b4be3b8339bf2a02ab5580fa6553ca274bc08681a65"}, - {file = "pydantic_core-2.14.3-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:fe272a72c7ed29f84c42fedd2d06c2f9858dc0c00dae3b34ba15d6d8ae0fbaaf"}, - {file = "pydantic_core-2.14.3-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:7e63a56eb7fdee1587d62f753ccd6d5fa24fbeea57a40d9d8beaef679a24bdd6"}, - {file = "pydantic_core-2.14.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b7692f539a26265cece1e27e366df5b976a6db6b1f825a9e0466395b314ee48b"}, - {file = "pydantic_core-2.14.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af46f0b7a1342b49f208fed31f5a83b8495bb14b652f621e0a6787d2f10f24ee"}, - {file = "pydantic_core-2.14.3-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6e2f9d76c00e805d47f19c7a96a14e4135238a7551a18bfd89bb757993fd0933"}, - {file = "pydantic_core-2.14.3-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:de52ddfa6e10e892d00f747bf7135d7007302ad82e243cf16d89dd77b03b649d"}, - {file = "pydantic_core-2.14.3-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:38113856c7fad8c19be7ddd57df0c3e77b1b2336459cb03ee3903ce9d5e236ce"}, - {file = "pydantic_core-2.14.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:354db020b1f8f11207b35360b92d95725621eb92656725c849a61e4b550f4acc"}, - {file = "pydantic_core-2.14.3-pp37-pypy37_pp73-macosx_10_7_x86_64.whl", hash = "sha256:76fc18653a5c95e5301a52d1b5afb27c9adc77175bf00f73e94f501caf0e05ad"}, - {file = "pydantic_core-2.14.3-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2646f8270f932d79ba61102a15ea19a50ae0d43b314e22b3f8f4b5fabbfa6e38"}, - {file = "pydantic_core-2.14.3-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37dad73a2f82975ed563d6a277fd9b50e5d9c79910c4aec787e2d63547202315"}, - {file = "pydantic_core-2.14.3-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:113752a55a8eaece2e4ac96bc8817f134c2c23477e477d085ba89e3aa0f4dc44"}, - {file = "pydantic_core-2.14.3-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:8488e973547e8fb1b4193fd9faf5236cf1b7cd5e9e6dc7ff6b4d9afdc4c720cb"}, - {file = "pydantic_core-2.14.3-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:3d1dde10bd9962b1434053239b1d5490fc31a2b02d8950a5f731bc584c7a5a0f"}, - {file = "pydantic_core-2.14.3-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:2c83892c7bf92b91d30faca53bb8ea21f9d7e39f0ae4008ef2c2f91116d0464a"}, - {file = "pydantic_core-2.14.3-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:849cff945284c577c5f621d2df76ca7b60f803cc8663ff01b778ad0af0e39bb9"}, - {file = "pydantic_core-2.14.3-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa89919fbd8a553cd7d03bf23d5bc5deee622e1b5db572121287f0e64979476"}, - {file = "pydantic_core-2.14.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf15145b1f8056d12c67255cd3ce5d317cd4450d5ee747760d8d088d85d12a2d"}, - {file = "pydantic_core-2.14.3-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4cc6bb11f4e8e5ed91d78b9880774fbc0856cb226151b0a93b549c2b26a00c19"}, - {file = "pydantic_core-2.14.3-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:832d16f248ca0cc96929139734ec32d21c67669dcf8a9f3f733c85054429c012"}, - {file = "pydantic_core-2.14.3-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:b02b5e1f54c3396c48b665050464803c23c685716eb5d82a1d81bf81b5230da4"}, - {file = "pydantic_core-2.14.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:1f2d4516c32255782153e858f9a900ca6deadfb217fd3fb21bb2b60b4e04d04d"}, - {file = "pydantic_core-2.14.3-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:0a3e51c2be472b7867eb0c5d025b91400c2b73a0823b89d4303a9097e2ec6655"}, - {file = "pydantic_core-2.14.3-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:df33902464410a1f1a0411a235f0a34e7e129f12cb6340daca0f9d1390f5fe10"}, - {file = "pydantic_core-2.14.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:27828f0227b54804aac6fb077b6bb48e640b5435fdd7fbf0c274093a7b78b69c"}, - {file = "pydantic_core-2.14.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e2979dc80246e18e348de51246d4c9b410186ffa3c50e77924bec436b1e36cb"}, - {file = "pydantic_core-2.14.3-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b28996872b48baf829ee75fa06998b607c66a4847ac838e6fd7473a6b2ab68e7"}, - {file = "pydantic_core-2.14.3-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:ca55c9671bb637ce13d18ef352fd32ae7aba21b4402f300a63f1fb1fd18e0364"}, - {file = "pydantic_core-2.14.3-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:aecd5ed096b0e5d93fb0367fd8f417cef38ea30b786f2501f6c34eabd9062c38"}, - {file = "pydantic_core-2.14.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:44aaf1a07ad0824e407dafc637a852e9a44d94664293bbe7d8ee549c356c8882"}, - {file = "pydantic_core-2.14.3.tar.gz", hash = "sha256:3ad083df8fe342d4d8d00cc1d3c1a23f0dc84fce416eb301e69f1ddbbe124d3f"}, -] - -[package.dependencies] -typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" - -[[package]] -name = "python-dateutil" -version = "2.8.2" -description = "Extensions to the standard Python datetime module" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" -files = [ - {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, - {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, -] - -[package.dependencies] -six = ">=1.5" - -[[package]] -name = "python-dotenv" -version = "1.0.0" -description = "Read key-value pairs from a .env file and set them as environment variables" -optional = false -python-versions = ">=3.8" -files = [ - {file = "python-dotenv-1.0.0.tar.gz", hash = "sha256:a8df96034aae6d2d50a4ebe8216326c61c3eb64836776504fcca410e5937a3ba"}, - {file = "python_dotenv-1.0.0-py3-none-any.whl", hash = "sha256:f5971a9226b701070a4bf2c38c89e5a3f0d64de8debda981d1db98583009122a"}, -] - -[package.extras] -cli = ["click (>=5.0)"] - -[[package]] -name = "python-jose" -version = "3.3.0" -description = "JOSE implementation in Python" -optional = false -python-versions = "*" -files = [ - {file = "python-jose-3.3.0.tar.gz", hash = "sha256:55779b5e6ad599c6336191246e95eb2293a9ddebd555f796a65f838f07e5d78a"}, - {file = "python_jose-3.3.0-py2.py3-none-any.whl", hash = "sha256:9b1376b023f8b298536eedd47ae1089bcdb848f1535ab30555cd92002d78923a"}, -] - -[package.dependencies] -ecdsa = "!=0.15" -pyasn1 = "*" -rsa = "*" - -[package.extras] -cryptography = ["cryptography (>=3.4.0)"] -pycrypto = ["pyasn1", "pycrypto (>=2.6.0,<2.7.0)"] -pycryptodome = ["pyasn1", "pycryptodome (>=3.3.1,<4.0.0)"] - -[[package]] -name = "python-multipart" -version = "0.0.6" -description = "A streaming multipart parser for Python" -optional = false -python-versions = ">=3.7" -files = [ - {file = "python_multipart-0.0.6-py3-none-any.whl", hash = "sha256:ee698bab5ef148b0a760751c261902cd096e57e10558e11aca17646b74ee1c18"}, - {file = "python_multipart-0.0.6.tar.gz", hash = "sha256:e9925a80bb668529f1b67c7fdb0a5dacdd7cbfc6fb0bff3ea443fe22bdd62132"}, -] - -[package.extras] -dev = ["atomicwrites (==1.2.1)", "attrs (==19.2.0)", "coverage (==6.5.0)", "hatch", "invoke (==1.7.3)", "more-itertools (==4.3.0)", "pbr (==4.3.0)", "pluggy (==1.0.0)", "py (==1.11.0)", "pytest (==7.2.0)", "pytest-cov (==4.0.0)", "pytest-timeout (==2.1.0)", "pyyaml (==5.1)"] - -[[package]] -name = "pytz" -version = "2023.3.post1" -description = "World timezone definitions, modern and historical" -optional = false -python-versions = "*" -files = [ - {file = "pytz-2023.3.post1-py2.py3-none-any.whl", hash = "sha256:ce42d816b81b68506614c11e8937d3aa9e41007ceb50bfdcb0749b921bf646c7"}, - {file = "pytz-2023.3.post1.tar.gz", hash = "sha256:7b4fddbeb94a1eba4b557da24f19fdf9db575192544270a9101d8509f9f43d7b"}, -] - -[[package]] -name = "pywin32" -version = "306" -description = "Python for Window Extensions" -optional = false -python-versions = "*" -files = [ - {file = "pywin32-306-cp310-cp310-win32.whl", hash = "sha256:06d3420a5155ba65f0b72f2699b5bacf3109f36acbe8923765c22938a69dfc8d"}, - {file = "pywin32-306-cp310-cp310-win_amd64.whl", hash = "sha256:84f4471dbca1887ea3803d8848a1616429ac94a4a8d05f4bc9c5dcfd42ca99c8"}, - {file = "pywin32-306-cp311-cp311-win32.whl", hash = "sha256:e65028133d15b64d2ed8f06dd9fbc268352478d4f9289e69c190ecd6818b6407"}, - {file = "pywin32-306-cp311-cp311-win_amd64.whl", hash = "sha256:a7639f51c184c0272e93f244eb24dafca9b1855707d94c192d4a0b4c01e1100e"}, - {file = "pywin32-306-cp311-cp311-win_arm64.whl", hash = "sha256:70dba0c913d19f942a2db25217d9a1b726c278f483a919f1abfed79c9cf64d3a"}, - {file = "pywin32-306-cp312-cp312-win32.whl", hash = "sha256:383229d515657f4e3ed1343da8be101000562bf514591ff383ae940cad65458b"}, - {file = "pywin32-306-cp312-cp312-win_amd64.whl", hash = "sha256:37257794c1ad39ee9be652da0462dc2e394c8159dfd913a8a4e8eb6fd346da0e"}, - {file = "pywin32-306-cp312-cp312-win_arm64.whl", hash = "sha256:5821ec52f6d321aa59e2db7e0a35b997de60c201943557d108af9d4ae1ec7040"}, - {file = "pywin32-306-cp37-cp37m-win32.whl", hash = "sha256:1c73ea9a0d2283d889001998059f5eaaba3b6238f767c9cf2833b13e6a685f65"}, - {file = "pywin32-306-cp37-cp37m-win_amd64.whl", hash = "sha256:72c5f621542d7bdd4fdb716227be0dd3f8565c11b280be6315b06ace35487d36"}, - {file = "pywin32-306-cp38-cp38-win32.whl", hash = "sha256:e4c092e2589b5cf0d365849e73e02c391c1349958c5ac3e9d5ccb9a28e017b3a"}, - {file = "pywin32-306-cp38-cp38-win_amd64.whl", hash = "sha256:e8ac1ae3601bee6ca9f7cb4b5363bf1c0badb935ef243c4733ff9a393b1690c0"}, - {file = "pywin32-306-cp39-cp39-win32.whl", hash = "sha256:e25fd5b485b55ac9c057f67d94bc203f3f6595078d1fb3b458c9c28b7153a802"}, - {file = "pywin32-306-cp39-cp39-win_amd64.whl", hash = "sha256:39b61c15272833b5c329a2989999dcae836b1eed650252ab1b7bfbe1d59f30f4"}, -] - -[[package]] -name = "pywry" -version = "0.6.1" -description = "" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pywry-0.6.1-py3-none-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:ce0250bf88bd795bc2751daae162f03e9c3f64a2c0275edf4b376c180090154b"}, - {file = "pywry-0.6.1-py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:8f7dba93babc10eb49682dc8811afe5a9f108772e6a09457173b9c2b30f00e41"}, - {file = "pywry-0.6.1-py3-none-win_amd64.whl", hash = "sha256:537381db5ec246a99e583260613f20a1a2b92829e53e2faa393537f1edc71476"}, - {file = "pywry-0.6.1.tar.gz", hash = "sha256:0ef6a303d1c90db15e9ac62c337fa0b050dd73d3ece5005a96a97576fdc524ed"}, -] - -[package.dependencies] -setproctitle = "*" - -[package.extras] -dev = ["auditwheel", "wheel"] - -[[package]] -name = "referencing" -version = "0.30.2" -description = "JSON Referencing + Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "referencing-0.30.2-py3-none-any.whl", hash = "sha256:449b6669b6121a9e96a7f9e410b245d471e8d48964c67113ce9afe50c8dd7bdf"}, - {file = "referencing-0.30.2.tar.gz", hash = "sha256:794ad8003c65938edcdbc027f1933215e0d0ccc0291e3ce20a4d87432b59efc0"}, -] - -[package.dependencies] -attrs = ">=22.2.0" -rpds-py = ">=0.7.0" - -[[package]] -name = "reportlab" -version = "4.0.5" -description = "The Reportlab Toolkit" -optional = false -python-versions = ">=3.7,<4" -files = [ - {file = "reportlab-4.0.5-py3-none-any.whl", hash = "sha256:1344dbe779b9049a1888105503837d0e5b62163bf5c6b33bd1fbe84bad484f50"}, - {file = "reportlab-4.0.5.tar.gz", hash = "sha256:9c68f277736f585c5c9938755b826dd57c877fcaeb203e21cefea12b3b1db4f5"}, -] - -[package.dependencies] -pillow = ">=9.0.0" - -[package.extras] -accel = ["rl-accel (>=0.9.0,<1.1)"] -pycairo = ["freetype-py (>=2.3.0,<2.4)", "rlPyCairo (>=0.2.0,<1)"] -renderpm = ["rl-renderPM (>=4.0.3,<4.1)"] - -[[package]] -name = "requests" -version = "2.31.0" -description = "Python HTTP for Humans." -optional = false -python-versions = ">=3.7" -files = [ - {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, - {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, -] - -[package.dependencies] -certifi = ">=2017.4.17" -charset-normalizer = ">=2,<4" -idna = ">=2.5,<4" -urllib3 = ">=1.21.1,<3" - -[package.extras] -socks = ["PySocks (>=1.5.6,!=1.5.7)"] -use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] - -[[package]] -name = "rpds-py" -version = "0.10.3" -description = "Python bindings to Rust's persistent data structures (rpds)" -optional = false -python-versions = ">=3.8" -files = [ - {file = "rpds_py-0.10.3-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:485747ee62da83366a44fbba963c5fe017860ad408ccd6cd99aa66ea80d32b2e"}, - {file = "rpds_py-0.10.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c55f9821f88e8bee4b7a72c82cfb5ecd22b6aad04033334f33c329b29bfa4da0"}, - {file = "rpds_py-0.10.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3b52a67ac66a3a64a7e710ba629f62d1e26ca0504c29ee8cbd99b97df7079a8"}, - {file = "rpds_py-0.10.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3aed39db2f0ace76faa94f465d4234aac72e2f32b009f15da6492a561b3bbebd"}, - {file = "rpds_py-0.10.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:271c360fdc464fe6a75f13ea0c08ddf71a321f4c55fc20a3fe62ea3ef09df7d9"}, - {file = "rpds_py-0.10.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ef5fddfb264e89c435be4adb3953cef5d2936fdeb4463b4161a6ba2f22e7b740"}, - {file = "rpds_py-0.10.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a771417c9c06c56c9d53d11a5b084d1de75de82978e23c544270ab25e7c066ff"}, - {file = "rpds_py-0.10.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:52b5cbc0469328e58180021138207e6ec91d7ca2e037d3549cc9e34e2187330a"}, - {file = "rpds_py-0.10.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:6ac3fefb0d168c7c6cab24fdfc80ec62cd2b4dfd9e65b84bdceb1cb01d385c33"}, - {file = "rpds_py-0.10.3-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:8d54bbdf5d56e2c8cf81a1857250f3ea132de77af543d0ba5dce667183b61fec"}, - {file = "rpds_py-0.10.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:cd2163f42868865597d89399a01aa33b7594ce8e2c4a28503127c81a2f17784e"}, - {file = "rpds_py-0.10.3-cp310-none-win32.whl", hash = "sha256:ea93163472db26ac6043e8f7f93a05d9b59e0505c760da2a3cd22c7dd7111391"}, - {file = "rpds_py-0.10.3-cp310-none-win_amd64.whl", hash = "sha256:7cd020b1fb41e3ab7716d4d2c3972d4588fdfbab9bfbbb64acc7078eccef8860"}, - {file = "rpds_py-0.10.3-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:1d9b5ee46dcb498fa3e46d4dfabcb531e1f2e76b477e0d99ef114f17bbd38453"}, - {file = "rpds_py-0.10.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:563646d74a4b4456d0cf3b714ca522e725243c603e8254ad85c3b59b7c0c4bf0"}, - {file = "rpds_py-0.10.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e626b864725680cd3904414d72e7b0bd81c0e5b2b53a5b30b4273034253bb41f"}, - {file = "rpds_py-0.10.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:485301ee56ce87a51ccb182a4b180d852c5cb2b3cb3a82f7d4714b4141119d8c"}, - {file = "rpds_py-0.10.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:42f712b4668831c0cd85e0a5b5a308700fe068e37dcd24c0062904c4e372b093"}, - {file = "rpds_py-0.10.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6c9141af27a4e5819d74d67d227d5047a20fa3c7d4d9df43037a955b4c748ec5"}, - {file = "rpds_py-0.10.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef750a20de1b65657a1425f77c525b0183eac63fe7b8f5ac0dd16f3668d3e64f"}, - {file = "rpds_py-0.10.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e1a0ffc39f51aa5f5c22114a8f1906b3c17eba68c5babb86c5f77d8b1bba14d1"}, - {file = "rpds_py-0.10.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:f4c179a7aeae10ddf44c6bac87938134c1379c49c884529f090f9bf05566c836"}, - {file = "rpds_py-0.10.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:176287bb998fd1e9846a9b666e240e58f8d3373e3bf87e7642f15af5405187b8"}, - {file = "rpds_py-0.10.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6446002739ca29249f0beaaf067fcbc2b5aab4bc7ee8fb941bd194947ce19aff"}, - {file = "rpds_py-0.10.3-cp311-none-win32.whl", hash = "sha256:c7aed97f2e676561416c927b063802c8a6285e9b55e1b83213dfd99a8f4f9e48"}, - {file = "rpds_py-0.10.3-cp311-none-win_amd64.whl", hash = "sha256:8bd01ff4032abaed03f2db702fa9a61078bee37add0bd884a6190b05e63b028c"}, - {file = "rpds_py-0.10.3-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:4cf0855a842c5b5c391dd32ca273b09e86abf8367572073bd1edfc52bc44446b"}, - {file = "rpds_py-0.10.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:69b857a7d8bd4f5d6e0db4086da8c46309a26e8cefdfc778c0c5cc17d4b11e08"}, - {file = "rpds_py-0.10.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:975382d9aa90dc59253d6a83a5ca72e07f4ada3ae3d6c0575ced513db322b8ec"}, - {file = "rpds_py-0.10.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:35fbd23c1c8732cde7a94abe7fb071ec173c2f58c0bd0d7e5b669fdfc80a2c7b"}, - {file = "rpds_py-0.10.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:106af1653007cc569d5fbb5f08c6648a49fe4de74c2df814e234e282ebc06957"}, - {file = "rpds_py-0.10.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ce5e7504db95b76fc89055c7f41e367eaadef5b1d059e27e1d6eabf2b55ca314"}, - {file = "rpds_py-0.10.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5aca759ada6b1967fcfd4336dcf460d02a8a23e6abe06e90ea7881e5c22c4de6"}, - {file = "rpds_py-0.10.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b5d4bdd697195f3876d134101c40c7d06d46c6ab25159ed5cbd44105c715278a"}, - {file = "rpds_py-0.10.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a657250807b6efd19b28f5922520ae002a54cb43c2401e6f3d0230c352564d25"}, - {file = "rpds_py-0.10.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:177c9dd834cdf4dc39c27436ade6fdf9fe81484758885f2d616d5d03c0a83bd2"}, - {file = "rpds_py-0.10.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e22491d25f97199fc3581ad8dd8ce198d8c8fdb8dae80dea3512e1ce6d5fa99f"}, - {file = "rpds_py-0.10.3-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:2f3e1867dd574014253b4b8f01ba443b9c914e61d45f3674e452a915d6e929a3"}, - {file = "rpds_py-0.10.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c22211c165166de6683de8136229721f3d5c8606cc2c3d1562da9a3a5058049c"}, - {file = "rpds_py-0.10.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40bc802a696887b14c002edd43c18082cb7b6f9ee8b838239b03b56574d97f71"}, - {file = "rpds_py-0.10.3-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5e271dd97c7bb8eefda5cca38cd0b0373a1fea50f71e8071376b46968582af9b"}, - {file = "rpds_py-0.10.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:95cde244e7195b2c07ec9b73fa4c5026d4a27233451485caa1cd0c1b55f26dbd"}, - {file = "rpds_py-0.10.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08a80cf4884920863623a9ee9a285ee04cef57ebedc1cc87b3e3e0f24c8acfe5"}, - {file = "rpds_py-0.10.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:763ad59e105fca09705d9f9b29ecffb95ecdc3b0363be3bb56081b2c6de7977a"}, - {file = "rpds_py-0.10.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:187700668c018a7e76e89424b7c1042f317c8df9161f00c0c903c82b0a8cac5c"}, - {file = "rpds_py-0.10.3-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:5267cfda873ad62591b9332fd9472d2409f7cf02a34a9c9cb367e2c0255994bf"}, - {file = "rpds_py-0.10.3-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:2ed83d53a8c5902ec48b90b2ac045e28e1698c0bea9441af9409fc844dc79496"}, - {file = "rpds_py-0.10.3-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:255f1a10ae39b52122cce26ce0781f7a616f502feecce9e616976f6a87992d6b"}, - {file = "rpds_py-0.10.3-cp38-none-win32.whl", hash = "sha256:a019a344312d0b1f429c00d49c3be62fa273d4a1094e1b224f403716b6d03be1"}, - {file = "rpds_py-0.10.3-cp38-none-win_amd64.whl", hash = "sha256:efb9ece97e696bb56e31166a9dd7919f8f0c6b31967b454718c6509f29ef6fee"}, - {file = "rpds_py-0.10.3-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:570cc326e78ff23dec7f41487aa9c3dffd02e5ee9ab43a8f6ccc3df8f9327623"}, - {file = "rpds_py-0.10.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cff7351c251c7546407827b6a37bcef6416304fc54d12d44dbfecbb717064717"}, - {file = "rpds_py-0.10.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:177914f81f66c86c012311f8c7f46887ec375cfcfd2a2f28233a3053ac93a569"}, - {file = "rpds_py-0.10.3-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:448a66b8266de0b581246ca7cd6a73b8d98d15100fb7165974535fa3b577340e"}, - {file = "rpds_py-0.10.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3bbac1953c17252f9cc675bb19372444aadf0179b5df575ac4b56faaec9f6294"}, - {file = "rpds_py-0.10.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9dd9d9d9e898b9d30683bdd2b6c1849449158647d1049a125879cb397ee9cd12"}, - {file = "rpds_py-0.10.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e8c71ea77536149e36c4c784f6d420ffd20bea041e3ba21ed021cb40ce58e2c9"}, - {file = "rpds_py-0.10.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:16a472300bc6c83fe4c2072cc22b3972f90d718d56f241adabc7ae509f53f154"}, - {file = "rpds_py-0.10.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:b9255e7165083de7c1d605e818025e8860636348f34a79d84ec533546064f07e"}, - {file = "rpds_py-0.10.3-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:53d7a3cd46cdc1689296348cb05ffd4f4280035770aee0c8ead3bbd4d6529acc"}, - {file = "rpds_py-0.10.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:22da15b902f9f8e267020d1c8bcfc4831ca646fecb60254f7bc71763569f56b1"}, - {file = "rpds_py-0.10.3-cp39-none-win32.whl", hash = "sha256:850c272e0e0d1a5c5d73b1b7871b0a7c2446b304cec55ccdb3eaac0d792bb065"}, - {file = "rpds_py-0.10.3-cp39-none-win_amd64.whl", hash = "sha256:de61e424062173b4f70eec07e12469edde7e17fa180019a2a0d75c13a5c5dc57"}, - {file = "rpds_py-0.10.3-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:af247fd4f12cca4129c1b82090244ea5a9d5bb089e9a82feb5a2f7c6a9fe181d"}, - {file = "rpds_py-0.10.3-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:3ad59efe24a4d54c2742929001f2d02803aafc15d6d781c21379e3f7f66ec842"}, - {file = "rpds_py-0.10.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:642ed0a209ced4be3a46f8cb094f2d76f1f479e2a1ceca6de6346a096cd3409d"}, - {file = "rpds_py-0.10.3-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:37d0c59548ae56fae01c14998918d04ee0d5d3277363c10208eef8c4e2b68ed6"}, - {file = "rpds_py-0.10.3-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aad6ed9e70ddfb34d849b761fb243be58c735be6a9265b9060d6ddb77751e3e8"}, - {file = "rpds_py-0.10.3-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8f94fdd756ba1f79f988855d948ae0bad9ddf44df296770d9a58c774cfbcca72"}, - {file = "rpds_py-0.10.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77076bdc8776a2b029e1e6ffbe6d7056e35f56f5e80d9dc0bad26ad4a024a762"}, - {file = "rpds_py-0.10.3-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:87d9b206b1bd7a0523375dc2020a6ce88bca5330682ae2fe25e86fd5d45cea9c"}, - {file = "rpds_py-0.10.3-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:8efaeb08ede95066da3a3e3c420fcc0a21693fcd0c4396d0585b019613d28515"}, - {file = "rpds_py-0.10.3-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:a4d9bfda3f84fc563868fe25ca160c8ff0e69bc4443c5647f960d59400ce6557"}, - {file = "rpds_py-0.10.3-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:d27aa6bbc1f33be920bb7adbb95581452cdf23005d5611b29a12bb6a3468cc95"}, - {file = "rpds_py-0.10.3-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:ed8313809571a5463fd7db43aaca68ecb43ca7a58f5b23b6e6c6c5d02bdc7882"}, - {file = "rpds_py-0.10.3-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:e10e6a1ed2b8661201e79dff5531f8ad4cdd83548a0f81c95cf79b3184b20c33"}, - {file = "rpds_py-0.10.3-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:015de2ce2af1586ff5dc873e804434185199a15f7d96920ce67e50604592cae9"}, - {file = "rpds_py-0.10.3-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ae87137951bb3dc08c7d8bfb8988d8c119f3230731b08a71146e84aaa919a7a9"}, - {file = "rpds_py-0.10.3-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0bb4f48bd0dd18eebe826395e6a48b7331291078a879295bae4e5d053be50d4c"}, - {file = "rpds_py-0.10.3-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:09362f86ec201288d5687d1dc476b07bf39c08478cde837cb710b302864e7ec9"}, - {file = "rpds_py-0.10.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:821392559d37759caa67d622d0d2994c7a3f2fb29274948ac799d496d92bca73"}, - {file = "rpds_py-0.10.3-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7170cbde4070dc3c77dec82abf86f3b210633d4f89550fa0ad2d4b549a05572a"}, - {file = "rpds_py-0.10.3-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:5de11c041486681ce854c814844f4ce3282b6ea1656faae19208ebe09d31c5b8"}, - {file = "rpds_py-0.10.3-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:4ed172d0c79f156c1b954e99c03bc2e3033c17efce8dd1a7c781bc4d5793dfac"}, - {file = "rpds_py-0.10.3-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:11fdd1192240dda8d6c5d18a06146e9045cb7e3ba7c06de6973000ff035df7c6"}, - {file = "rpds_py-0.10.3-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:f602881d80ee4228a2355c68da6b296a296cd22bbb91e5418d54577bbf17fa7c"}, - {file = "rpds_py-0.10.3-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:691d50c99a937709ac4c4cd570d959a006bd6a6d970a484c84cc99543d4a5bbb"}, - {file = "rpds_py-0.10.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:24cd91a03543a0f8d09cb18d1cb27df80a84b5553d2bd94cba5979ef6af5c6e7"}, - {file = "rpds_py-0.10.3-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fc2200e79d75b5238c8d69f6a30f8284290c777039d331e7340b6c17cad24a5a"}, - {file = "rpds_py-0.10.3-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ea65b59882d5fa8c74a23f8960db579e5e341534934f43f3b18ec1839b893e41"}, - {file = "rpds_py-0.10.3-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:829e91f3a8574888b73e7a3feb3b1af698e717513597e23136ff4eba0bc8387a"}, - {file = "rpds_py-0.10.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eab75a8569a095f2ad470b342f2751d9902f7944704f0571c8af46bede438475"}, - {file = "rpds_py-0.10.3-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:061c3ff1f51ecec256e916cf71cc01f9975af8fb3af9b94d3c0cc8702cfea637"}, - {file = "rpds_py-0.10.3-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:39d05e65f23a0fe897b6ac395f2a8d48c56ac0f583f5d663e0afec1da89b95da"}, - {file = "rpds_py-0.10.3-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:4eca20917a06d2fca7628ef3c8b94a8c358f6b43f1a621c9815243462dcccf97"}, - {file = "rpds_py-0.10.3-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:e8d0f0eca087630d58b8c662085529781fd5dc80f0a54eda42d5c9029f812599"}, - {file = "rpds_py-0.10.3.tar.gz", hash = "sha256:fcc1ebb7561a3e24a6588f7c6ded15d80aec22c66a070c757559b57b17ffd1cb"}, -] - -[[package]] -name = "rsa" -version = "4.9" -description = "Pure-Python RSA implementation" -optional = false -python-versions = ">=3.6,<4" -files = [ - {file = "rsa-4.9-py3-none-any.whl", hash = "sha256:90260d9058e514786967344d0ef75fa8727eed8a7d2e43ce9f4bcf1b536174f7"}, - {file = "rsa-4.9.tar.gz", hash = "sha256:e38464a49c6c85d7f1351b0126661487a7e0a14a50f1675ec50eb34d4f20ef21"}, -] - -[package.dependencies] -pyasn1 = ">=0.1.3" - -[[package]] -name = "ruff" -version = "0.1.6" -description = "An extremely fast Python linter and code formatter, written in Rust." -optional = false -python-versions = ">=3.7" -files = [ - {file = "ruff-0.1.6-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:88b8cdf6abf98130991cbc9f6438f35f6e8d41a02622cc5ee130a02a0ed28703"}, - {file = "ruff-0.1.6-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:5c549ed437680b6105a1299d2cd30e4964211606eeb48a0ff7a93ef70b902248"}, - {file = "ruff-0.1.6-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1cf5f701062e294f2167e66d11b092bba7af6a057668ed618a9253e1e90cfd76"}, - {file = "ruff-0.1.6-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:05991ee20d4ac4bb78385360c684e4b417edd971030ab12a4fbd075ff535050e"}, - {file = "ruff-0.1.6-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:87455a0c1f739b3c069e2f4c43b66479a54dea0276dd5d4d67b091265f6fd1dc"}, - {file = "ruff-0.1.6-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:683aa5bdda5a48cb8266fcde8eea2a6af4e5700a392c56ea5fb5f0d4bfdc0240"}, - {file = "ruff-0.1.6-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:137852105586dcbf80c1717facb6781555c4e99f520c9c827bd414fac67ddfb6"}, - {file = "ruff-0.1.6-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bd98138a98d48a1c36c394fd6b84cd943ac92a08278aa8ac8c0fdefcf7138f35"}, - {file = "ruff-0.1.6-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a0cd909d25f227ac5c36d4e7e681577275fb74ba3b11d288aff7ec47e3ae745"}, - {file = "ruff-0.1.6-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:e8fd1c62a47aa88a02707b5dd20c5ff20d035d634aa74826b42a1da77861b5ff"}, - {file = "ruff-0.1.6-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:fd89b45d374935829134a082617954120d7a1470a9f0ec0e7f3ead983edc48cc"}, - {file = "ruff-0.1.6-py3-none-musllinux_1_2_i686.whl", hash = "sha256:491262006e92f825b145cd1e52948073c56560243b55fb3b4ecb142f6f0e9543"}, - {file = "ruff-0.1.6-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:ea284789861b8b5ca9d5443591a92a397ac183d4351882ab52f6296b4fdd5462"}, - {file = "ruff-0.1.6-py3-none-win32.whl", hash = "sha256:1610e14750826dfc207ccbcdd7331b6bd285607d4181df9c1c6ae26646d6848a"}, - {file = "ruff-0.1.6-py3-none-win_amd64.whl", hash = "sha256:4558b3e178145491e9bc3b2ee3c4b42f19d19384eaa5c59d10acf6e8f8b57e33"}, - {file = "ruff-0.1.6-py3-none-win_arm64.whl", hash = "sha256:03910e81df0d8db0e30050725a5802441c2022ea3ae4fe0609b76081731accbc"}, - {file = "ruff-0.1.6.tar.gz", hash = "sha256:1b09f29b16c6ead5ea6b097ef2764b42372aebe363722f1605ecbcd2b9207184"}, -] - -[[package]] -name = "scipy" -version = "1.10.1" -description = "Fundamental algorithms for scientific computing in Python" -optional = false -python-versions = "<3.12,>=3.8" -files = [ - {file = "scipy-1.10.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e7354fd7527a4b0377ce55f286805b34e8c54b91be865bac273f527e1b839019"}, - {file = "scipy-1.10.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:4b3f429188c66603a1a5c549fb414e4d3bdc2a24792e061ffbd607d3d75fd84e"}, - {file = "scipy-1.10.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1553b5dcddd64ba9a0d95355e63fe6c3fc303a8fd77c7bc91e77d61363f7433f"}, - {file = "scipy-1.10.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c0ff64b06b10e35215abce517252b375e580a6125fd5fdf6421b98efbefb2d2"}, - {file = "scipy-1.10.1-cp310-cp310-win_amd64.whl", hash = "sha256:fae8a7b898c42dffe3f7361c40d5952b6bf32d10c4569098d276b4c547905ee1"}, - {file = "scipy-1.10.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0f1564ea217e82c1bbe75ddf7285ba0709ecd503f048cb1236ae9995f64217bd"}, - {file = "scipy-1.10.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:d925fa1c81b772882aa55bcc10bf88324dadb66ff85d548c71515f6689c6dac5"}, - {file = "scipy-1.10.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaea0a6be54462ec027de54fca511540980d1e9eea68b2d5c1dbfe084797be35"}, - {file = "scipy-1.10.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15a35c4242ec5f292c3dd364a7c71a61be87a3d4ddcc693372813c0b73c9af1d"}, - {file = "scipy-1.10.1-cp311-cp311-win_amd64.whl", hash = "sha256:43b8e0bcb877faf0abfb613d51026cd5cc78918e9530e375727bf0625c82788f"}, - {file = "scipy-1.10.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5678f88c68ea866ed9ebe3a989091088553ba12c6090244fdae3e467b1139c35"}, - {file = "scipy-1.10.1-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:39becb03541f9e58243f4197584286e339029e8908c46f7221abeea4b749fa88"}, - {file = "scipy-1.10.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bce5869c8d68cf383ce240e44c1d9ae7c06078a9396df68ce88a1230f93a30c1"}, - {file = "scipy-1.10.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07c3457ce0b3ad5124f98a86533106b643dd811dd61b548e78cf4c8786652f6f"}, - {file = "scipy-1.10.1-cp38-cp38-win_amd64.whl", hash = "sha256:049a8bbf0ad95277ffba9b3b7d23e5369cc39e66406d60422c8cfef40ccc8415"}, - {file = "scipy-1.10.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:cd9f1027ff30d90618914a64ca9b1a77a431159df0e2a195d8a9e8a04c78abf9"}, - {file = "scipy-1.10.1-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:79c8e5a6c6ffaf3a2262ef1be1e108a035cf4f05c14df56057b64acc5bebffb6"}, - {file = "scipy-1.10.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:51af417a000d2dbe1ec6c372dfe688e041a7084da4fdd350aeb139bd3fb55353"}, - {file = "scipy-1.10.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b4735d6c28aad3cdcf52117e0e91d6b39acd4272f3f5cd9907c24ee931ad601"}, - {file = "scipy-1.10.1-cp39-cp39-win_amd64.whl", hash = "sha256:7ff7f37b1bf4417baca958d254e8e2875d0cc23aaadbe65b3d5b3077b0eb23ea"}, - {file = "scipy-1.10.1.tar.gz", hash = "sha256:2cf9dfb80a7b4589ba4c40ce7588986d6d5cebc5457cad2c2880f6bc2d42f3a5"}, -] - -[package.dependencies] -numpy = ">=1.19.5,<1.27.0" - -[package.extras] -dev = ["click", "doit (>=0.36.0)", "flake8", "mypy", "pycodestyle", "pydevtool", "rich-click", "typing_extensions"] -doc = ["matplotlib (>2)", "numpydoc", "pydata-sphinx-theme (==0.9.0)", "sphinx (!=4.1.0)", "sphinx-design (>=0.2.0)"] -test = ["asv", "gmpy2", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] - -[[package]] -name = "setproctitle" -version = "1.3.2" -description = "A Python module to customize the process title" -optional = false -python-versions = ">=3.7" -files = [ - {file = "setproctitle-1.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:288943dec88e178bb2fd868adf491197cc0fc8b6810416b1c6775e686bab87fe"}, - {file = "setproctitle-1.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:630f6fe5e24a619ccf970c78e084319ee8be5be253ecc9b5b216b0f474f5ef18"}, - {file = "setproctitle-1.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c877691b90026670e5a70adfbcc735460a9f4c274d35ec5e8a43ce3f8443005"}, - {file = "setproctitle-1.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7a55fe05f15c10e8c705038777656fe45e3bd676d49ad9ac8370b75c66dd7cd7"}, - {file = "setproctitle-1.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ab45146c71ca6592c9cc8b354a2cc9cc4843c33efcbe1d245d7d37ce9696552d"}, - {file = "setproctitle-1.3.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e00c9d5c541a2713ba0e657e0303bf96ddddc412ef4761676adc35df35d7c246"}, - {file = "setproctitle-1.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:265ecbe2c6eafe82e104f994ddd7c811520acdd0647b73f65c24f51374cf9494"}, - {file = "setproctitle-1.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:c2c46200656280a064073447ebd363937562debef329482fd7e570c8d498f806"}, - {file = "setproctitle-1.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:fa2f50678f04fda7a75d0fe5dd02bbdd3b13cbe6ed4cf626e4472a7ccf47ae94"}, - {file = "setproctitle-1.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7f2719a398e1a2c01c2a63bf30377a34d0b6ef61946ab9cf4d550733af8f1ef1"}, - {file = "setproctitle-1.3.2-cp310-cp310-win32.whl", hash = "sha256:e425be62524dc0c593985da794ee73eb8a17abb10fe692ee43bb39e201d7a099"}, - {file = "setproctitle-1.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:e85e50b9c67854f89635a86247412f3ad66b132a4d8534ac017547197c88f27d"}, - {file = "setproctitle-1.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2a97d51c17d438cf5be284775a322d57b7ca9505bb7e118c28b1824ecaf8aeaa"}, - {file = "setproctitle-1.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:587c7d6780109fbd8a627758063d08ab0421377c0853780e5c356873cdf0f077"}, - {file = "setproctitle-1.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7d17c8bd073cbf8d141993db45145a70b307385b69171d6b54bcf23e5d644de"}, - {file = "setproctitle-1.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e932089c35a396dc31a5a1fc49889dd559548d14cb2237adae260382a090382e"}, - {file = "setproctitle-1.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8e4f8f12258a8739c565292a551c3db62cca4ed4f6b6126664e2381acb4931bf"}, - {file = "setproctitle-1.3.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:570d255fd99c7f14d8f91363c3ea96bd54f8742275796bca67e1414aeca7d8c3"}, - {file = "setproctitle-1.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a8e0881568c5e6beff91ef73c0ec8ac2a9d3ecc9edd6bd83c31ca34f770910c4"}, - {file = "setproctitle-1.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4bba3be4c1fabf170595b71f3af46c6d482fbe7d9e0563999b49999a31876f77"}, - {file = "setproctitle-1.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:37ece938110cab2bb3957e3910af8152ca15f2b6efdf4f2612e3f6b7e5459b80"}, - {file = "setproctitle-1.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:db684d6bbb735a80bcbc3737856385b55d53f8a44ce9b46e9a5682c5133a9bf7"}, - {file = "setproctitle-1.3.2-cp311-cp311-win32.whl", hash = "sha256:ca58cd260ea02759238d994cfae844fc8b1e206c684beb8f38877dcab8451dfc"}, - {file = "setproctitle-1.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:88486e6cce2a18a033013d17b30a594f1c5cb42520c49c19e6ade40b864bb7ff"}, - {file = "setproctitle-1.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:92c626edc66169a1b09e9541b9c0c9f10488447d8a2b1d87c8f0672e771bc927"}, - {file = "setproctitle-1.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:710e16fa3bade3b026907e4a5e841124983620046166f355bbb84be364bf2a02"}, - {file = "setproctitle-1.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1f29b75e86260b0ab59adb12661ef9f113d2f93a59951373eb6d68a852b13e83"}, - {file = "setproctitle-1.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c8d9650154afaa86a44ff195b7b10d683c73509d085339d174e394a22cccbb9"}, - {file = "setproctitle-1.3.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f0452282258dfcc01697026a8841258dd2057c4438b43914b611bccbcd048f10"}, - {file = "setproctitle-1.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:e49ae693306d7624015f31cb3e82708916759d592c2e5f72a35c8f4cc8aef258"}, - {file = "setproctitle-1.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:1ff863a20d1ff6ba2c24e22436a3daa3cd80be1dfb26891aae73f61b54b04aca"}, - {file = "setproctitle-1.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:55ce1e9925ce1765865442ede9dca0ba9bde10593fcd570b1f0fa25d3ec6b31c"}, - {file = "setproctitle-1.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:7fe9df7aeb8c64db6c34fc3b13271a363475d77bc157d3f00275a53910cb1989"}, - {file = "setproctitle-1.3.2-cp37-cp37m-win32.whl", hash = "sha256:e5c50e164cd2459bc5137c15288a9ef57160fd5cbf293265ea3c45efe7870865"}, - {file = "setproctitle-1.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:a499fff50387c1520c085a07578a000123f519e5f3eee61dd68e1d301659651f"}, - {file = "setproctitle-1.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5b932c3041aa924163f4aab970c2f0e6b4d9d773f4d50326e0ea1cd69240e5c5"}, - {file = "setproctitle-1.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f4bfc89bd33ebb8e4c0e9846a09b1f5a4a86f5cb7a317e75cc42fee1131b4f4f"}, - {file = "setproctitle-1.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fcd3cf4286a60fdc95451d8d14e0389a6b4f5cebe02c7f2609325eb016535963"}, - {file = "setproctitle-1.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5fb4f769c02f63fac90989711a3fee83919f47ae9afd4758ced5d86596318c65"}, - {file = "setproctitle-1.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5194b4969f82ea842a4f6af2f82cd16ebdc3f1771fb2771796e6add9835c1973"}, - {file = "setproctitle-1.3.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f0cde41857a644b7353a0060b5f94f7ba7cf593ebde5a1094da1be581ac9a31"}, - {file = "setproctitle-1.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9124bedd8006b0e04d4e8a71a0945da9b67e7a4ab88fdad7b1440dc5b6122c42"}, - {file = "setproctitle-1.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c8a09d570b39517de10ee5b718730e171251ce63bbb890c430c725c8c53d4484"}, - {file = "setproctitle-1.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:8ff3c8cb26afaed25e8bca7b9dd0c1e36de71f35a3a0706b5c0d5172587a3827"}, - {file = "setproctitle-1.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:589be87172b238f839e19f146b9ea47c71e413e951ef0dc6db4218ddacf3c202"}, - {file = "setproctitle-1.3.2-cp38-cp38-win32.whl", hash = "sha256:4749a2b0c9ac52f864d13cee94546606f92b981b50e46226f7f830a56a9dc8e1"}, - {file = "setproctitle-1.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:e43f315c68aa61cbdef522a2272c5a5b9b8fd03c301d3167b5e1343ef50c676c"}, - {file = "setproctitle-1.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:de3a540cd1817ede31f530d20e6a4935bbc1b145fd8f8cf393903b1e02f1ae76"}, - {file = "setproctitle-1.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4058564195b975ddc3f0462375c533cce310ccdd41b80ac9aed641c296c3eff4"}, - {file = "setproctitle-1.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c5d5dad7c28bdd1ec4187d818e43796f58a845aa892bb4481587010dc4d362b"}, - {file = "setproctitle-1.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ffc61a388a5834a97953d6444a2888c24a05f2e333f9ed49f977a87bb1ad4761"}, - {file = "setproctitle-1.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1fa1a0fbee72b47dc339c87c890d3c03a72ea65c061ade3204f285582f2da30f"}, - {file = "setproctitle-1.3.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe8a988c7220c002c45347430993830666e55bc350179d91fcee0feafe64e1d4"}, - {file = "setproctitle-1.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bae283e85fc084b18ffeb92e061ff7ac5af9e183c9d1345c93e178c3e5069cbe"}, - {file = "setproctitle-1.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:fed18e44711c5af4b681c2b3b18f85e6f0f1b2370a28854c645d636d5305ccd8"}, - {file = "setproctitle-1.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:b34baef93bfb20a8ecb930e395ccd2ae3268050d8cf4fe187de5e2bd806fd796"}, - {file = "setproctitle-1.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7f0bed90a216ef28b9d227d8d73e28a8c9b88c0f48a082d13ab3fa83c581488f"}, - {file = "setproctitle-1.3.2-cp39-cp39-win32.whl", hash = "sha256:4d8938249a7cea45ab7e1e48b77685d0f2bab1ebfa9dde23e94ab97968996a7c"}, - {file = "setproctitle-1.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:a47d97a75fd2d10c37410b180f67a5835cb1d8fdea2648fd7f359d4277f180b9"}, - {file = "setproctitle-1.3.2-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:dad42e676c5261eb50fdb16bdf3e2771cf8f99a79ef69ba88729aeb3472d8575"}, - {file = "setproctitle-1.3.2-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c91b9bc8985d00239f7dc08a49927a7ca1ca8a6af2c3890feec3ed9665b6f91e"}, - {file = "setproctitle-1.3.2-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e8579a43eafd246e285eb3a5b939e7158073d5087aacdd2308f23200eac2458b"}, - {file = "setproctitle-1.3.2-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:2fbd8187948284293f43533c150cd69a0e4192c83c377da837dbcd29f6b83084"}, - {file = "setproctitle-1.3.2-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:faec934cfe5fd6ac1151c02e67156c3f526e82f96b24d550b5d51efa4a5527c6"}, - {file = "setproctitle-1.3.2-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e1aafc91cbdacc9e5fe712c52077369168e6b6c346f3a9d51bf600b53eae56bb"}, - {file = "setproctitle-1.3.2-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b617f12c9be61e8f4b2857be4a4319754756845dbbbd9c3718f468bbb1e17bcb"}, - {file = "setproctitle-1.3.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:b2c9cb2705fc84cb8798f1ba74194f4c080aaef19d9dae843591c09b97678e98"}, - {file = "setproctitle-1.3.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a149a5f7f2c5a065d4e63cb0d7a4b6d3b66e6e80f12e3f8827c4f63974cbf122"}, - {file = "setproctitle-1.3.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2e3ac25bfc4a0f29d2409650c7532d5ddfdbf29f16f8a256fc31c47d0dc05172"}, - {file = "setproctitle-1.3.2-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65d884e22037b23fa25b2baf1a3316602ed5c5971eb3e9d771a38c3a69ce6e13"}, - {file = "setproctitle-1.3.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7aa0aac1711fadffc1d51e9d00a3bea61f68443d6ac0241a224e4d622489d665"}, - {file = "setproctitle-1.3.2.tar.gz", hash = "sha256:b9fb97907c830d260fa0658ed58afd48a86b2b88aac521135c352ff7fd3477fd"}, -] - -[package.extras] -test = ["pytest"] - -[[package]] -name = "six" -version = "1.16.0" -description = "Python 2 and 3 compatibility utilities" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" -files = [ - {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, - {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, -] - -[[package]] -name = "sniffio" -version = "1.3.0" -description = "Sniff out which async library your code is running under" -optional = false -python-versions = ">=3.7" -files = [ - {file = "sniffio-1.3.0-py3-none-any.whl", hash = "sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384"}, - {file = "sniffio-1.3.0.tar.gz", hash = "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101"}, -] - -[[package]] -name = "starlette" -version = "0.27.0" -description = "The little ASGI library that shines." -optional = false -python-versions = ">=3.7" -files = [ - {file = "starlette-0.27.0-py3-none-any.whl", hash = "sha256:918416370e846586541235ccd38a474c08b80443ed31c578a418e2209b3eef91"}, - {file = "starlette-0.27.0.tar.gz", hash = "sha256:6a6b0d042acb8d469a01eba54e9cda6cbd24ac602c4cd016723117d6a7e73b75"}, -] - -[package.dependencies] -anyio = ">=3.4.0,<5" -typing-extensions = {version = ">=3.10.0", markers = "python_version < \"3.10\""} - -[package.extras] -full = ["httpx (>=0.22.0)", "itsdangerous", "jinja2", "python-multipart", "pyyaml"] - -[[package]] -name = "statsmodels" -version = "0.14.0" -description = "Statistical computations and models for Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "statsmodels-0.14.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:16bfe0c96a53b20fa19067e3b6bd2f1d39e30d4891ea0d7bc20734a0ae95942d"}, - {file = "statsmodels-0.14.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5a6a0a1a06ff79be8aa89c8494b33903442859add133f0dda1daf37c3c71682e"}, - {file = "statsmodels-0.14.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77b3cd3a5268ef966a0a08582c591bd29c09c88b4566c892a7c087935234f285"}, - {file = "statsmodels-0.14.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c64ebe9cf376cba0c31aed138e15ed179a1d128612dd241cdf299d159e5e882"}, - {file = "statsmodels-0.14.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:229b2f676b4a45cb62d132a105c9c06ca8a09ffba060abe34935391eb5d9ba87"}, - {file = "statsmodels-0.14.0-cp310-cp310-win_amd64.whl", hash = "sha256:fb471f757fc45102a87e5d86e87dc2c8c78b34ad4f203679a46520f1d863b9da"}, - {file = "statsmodels-0.14.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:582f9e41092e342aaa04920d17cc3f97240e3ee198672f194719b5a3d08657d6"}, - {file = "statsmodels-0.14.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7ebe885ccaa64b4bc5ad49ac781c246e7a594b491f08ab4cfd5aa456c363a6f6"}, - {file = "statsmodels-0.14.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b587ee5d23369a0e881da6e37f78371dce4238cf7638a455db4b633a1a1c62d6"}, - {file = "statsmodels-0.14.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ef7fa4813c7a73b0d8a0c830250f021c102c71c95e9fe0d6877bcfb56d38b8c"}, - {file = "statsmodels-0.14.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:afe80544ef46730ea1b11cc655da27038bbaa7159dc5af4bc35bbc32982262f2"}, - {file = "statsmodels-0.14.0-cp311-cp311-win_amd64.whl", hash = "sha256:a6ad7b8aadccd4e4dd7f315a07bef1bca41d194eeaf4ec600d20dea02d242fce"}, - {file = "statsmodels-0.14.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:0eea4a0b761aebf0c355b726ac5616b9a8b618bd6e81a96b9f998a61f4fd7484"}, - {file = "statsmodels-0.14.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4c815ce7a699047727c65a7c179bff4031cff9ae90c78ca730cfd5200eb025dd"}, - {file = "statsmodels-0.14.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:575f61337c8e406ae5fa074d34bc6eb77b5a57c544b2d4ee9bc3da6a0a084cf1"}, - {file = "statsmodels-0.14.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8be53cdeb82f49c4cb0fda6d7eeeb2d67dbd50179b3e1033510e061863720d93"}, - {file = "statsmodels-0.14.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:6f7d762df4e04d1dde8127d07e91aff230eae643aa7078543e60e83e7d5b40db"}, - {file = "statsmodels-0.14.0-cp312-cp312-win_amd64.whl", hash = "sha256:fc2c7931008a911e3060c77ea8933f63f7367c0f3af04f82db3a04808ad2cd2c"}, - {file = "statsmodels-0.14.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3757542c95247e4ab025291a740efa5da91dc11a05990c033d40fce31c450dc9"}, - {file = "statsmodels-0.14.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:de489e3ed315bdba55c9d1554a2e89faa65d212e365ab81bc323fa52681fc60e"}, - {file = "statsmodels-0.14.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76e290f4718177bffa8823a780f3b882d56dd64ad1c18cfb4bc8b5558f3f5757"}, - {file = "statsmodels-0.14.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:71054f9dbcead56def14e3c9db6f66f943110fdfb19713caf0eb0f08c1ec03fd"}, - {file = "statsmodels-0.14.0-cp38-cp38-win_amd64.whl", hash = "sha256:d7fda067837df94e0a614d93d3a38fb6868958d37f7f50afe2a534524f2660cb"}, - {file = "statsmodels-0.14.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1c7724ad573af26139a98393ae64bc318d1b19762b13442d96c7a3e793f495c3"}, - {file = "statsmodels-0.14.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3b0a135f3bfdeec987e36e3b3b4c53e0bb87a8d91464d2fcc4d169d176f46fdb"}, - {file = "statsmodels-0.14.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce28eb1c397dba437ec39b9ab18f2101806f388c7a0cf9cdfd8f09294ad1c799"}, - {file = "statsmodels-0.14.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68b1c768dd94cc5ba8398121a632b673c625491aa7ed627b82cb4c880a25563f"}, - {file = "statsmodels-0.14.0-cp39-cp39-win_amd64.whl", hash = "sha256:8d1e3e10dfbfcd58119ba5a4d3c7d519182b970a2aebaf0b6f539f55ae16058d"}, - {file = "statsmodels-0.14.0.tar.gz", hash = "sha256:6875c7d689e966d948f15eb816ab5616f4928706b180cf470fd5907ab6f647a4"}, -] - -[package.dependencies] -numpy = [ - {version = ">=1.22.3", markers = "python_version == \"3.10\" and platform_system == \"Windows\" and platform_python_implementation != \"PyPy\""}, - {version = ">=1.18", markers = "python_version != \"3.10\" or platform_system != \"Windows\" or platform_python_implementation == \"PyPy\""}, -] -packaging = ">=21.3" -pandas = ">=1.0" -patsy = ">=0.5.2" -scipy = ">=1.4,<1.9.2 || >1.9.2" - -[package.extras] -build = ["cython (>=0.29.26)"] -develop = ["colorama", "cython (>=0.29.26)", "cython (>=0.29.28,<3.0.0)", "flake8", "isort", "joblib", "matplotlib (>=3)", "oldest-supported-numpy (>=2022.4.18)", "pytest (>=7.0.1,<7.1.0)", "pytest-randomly", "pytest-xdist", "pywinpty", "setuptools-scm[toml] (>=7.0.0,<7.1.0)"] -docs = ["ipykernel", "jupyter-client", "matplotlib", "nbconvert", "nbformat", "numpydoc", "pandas-datareader", "sphinx"] - -[[package]] -name = "svglib" -version = "1.5.1" -description = "A pure-Python library for reading and converting SVG" -optional = false -python-versions = ">=3.7" -files = [ - {file = "svglib-1.5.1.tar.gz", hash = "sha256:3ae765d3a9409ee60c0fb4d24c2deb6a80617aa927054f5bcd7fc98f0695e587"}, -] - -[package.dependencies] -cssselect2 = ">=0.2.0" -lxml = "*" -reportlab = "*" -tinycss2 = ">=0.6.0" - -[[package]] -name = "tenacity" -version = "8.2.3" -description = "Retry code until it succeeds" -optional = false -python-versions = ">=3.7" -files = [ - {file = "tenacity-8.2.3-py3-none-any.whl", hash = "sha256:ce510e327a630c9e1beaf17d42e6ffacc88185044ad85cf74c0a8887c6a0f88c"}, - {file = "tenacity-8.2.3.tar.gz", hash = "sha256:5398ef0d78e63f40007c1fb4c0bff96e1911394d2fa8d194f77619c05ff6cc8a"}, -] - -[package.extras] -doc = ["reno", "sphinx", "tornado (>=4.5)"] - -[[package]] -name = "tinycss2" -version = "1.2.1" -description = "A tiny CSS parser" -optional = false -python-versions = ">=3.7" -files = [ - {file = "tinycss2-1.2.1-py3-none-any.whl", hash = "sha256:2b80a96d41e7c3914b8cda8bc7f705a4d9c49275616e886103dd839dfc847847"}, - {file = "tinycss2-1.2.1.tar.gz", hash = "sha256:8cff3a8f066c2ec677c06dbc7b45619804a6938478d9d73c284b29d14ecb0627"}, -] - -[package.dependencies] -webencodings = ">=0.4" - -[package.extras] -doc = ["sphinx", "sphinx_rtd_theme"] -test = ["flake8", "isort", "pytest"] - -[[package]] -name = "traitlets" -version = "5.10.0" -description = "Traitlets Python configuration system" -optional = false -python-versions = ">=3.8" -files = [ - {file = "traitlets-5.10.0-py3-none-any.whl", hash = "sha256:417745a96681fbb358e723d5346a547521f36e9bd0d50ba7ab368fff5d67aa54"}, - {file = "traitlets-5.10.0.tar.gz", hash = "sha256:f584ea209240466e66e91f3c81aa7d004ba4cf794990b0c775938a1544217cd1"}, -] - -[package.extras] -docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] -test = ["argcomplete (>=3.0.3)", "mypy (>=1.5.1)", "pre-commit", "pytest (>=7.0,<7.5)", "pytest-mock", "pytest-mypy-testing"] - -[[package]] -name = "typing-extensions" -version = "4.8.0" -description = "Backported and Experimental Type Hints for Python 3.8+" -optional = false -python-versions = ">=3.8" -files = [ - {file = "typing_extensions-4.8.0-py3-none-any.whl", hash = "sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0"}, - {file = "typing_extensions-4.8.0.tar.gz", hash = "sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef"}, -] - -[[package]] -name = "tzdata" -version = "2023.3" -description = "Provider of IANA time zone data" -optional = false -python-versions = ">=2" -files = [ - {file = "tzdata-2023.3-py2.py3-none-any.whl", hash = "sha256:7e65763eef3120314099b6939b5546db7adce1e7d6f2e179e3df563c70511eda"}, - {file = "tzdata-2023.3.tar.gz", hash = "sha256:11ef1e08e54acb0d4f95bdb1be05da659673de4acbd21bf9c69e94cc5e907a3a"}, -] - -[[package]] -name = "urllib3" -version = "1.26.16" -description = "HTTP library with thread-safe connection pooling, file post, and more." -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" -files = [ - {file = "urllib3-1.26.16-py2.py3-none-any.whl", hash = "sha256:8d36afa7616d8ab714608411b4a3b13e58f463aee519024578e062e141dce20f"}, - {file = "urllib3-1.26.16.tar.gz", hash = "sha256:8f135f6502756bde6b2a9b28989df5fbe87c9970cecaa69041edcce7f0589b14"}, -] - -[package.extras] -brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] -secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] -socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] - -[[package]] -name = "uuid7" -version = "0.1.0" -description = "UUID version 7, generating time-sorted UUIDs with 200ns time resolution and 48 bits of randomness" -optional = false -python-versions = ">=3.7" -files = [ - {file = "uuid7-0.1.0-py2.py3-none-any.whl", hash = "sha256:5e259bb63c8cb4aded5927ff41b444a80d0c7124e8a0ced7cf44efa1f5cccf61"}, - {file = "uuid7-0.1.0.tar.gz", hash = "sha256:8c57aa32ee7456d3cc68c95c4530bc571646defac01895cfc73545449894a63c"}, -] - -[[package]] -name = "uvicorn" -version = "0.24.0.post1" -description = "The lightning-fast ASGI server." -optional = false -python-versions = ">=3.8" -files = [ - {file = "uvicorn-0.24.0.post1-py3-none-any.whl", hash = "sha256:7c84fea70c619d4a710153482c0d230929af7bcf76c7bfa6de151f0a3a80121e"}, - {file = "uvicorn-0.24.0.post1.tar.gz", hash = "sha256:09c8e5a79dc466bdf28dead50093957db184de356fcdc48697bad3bde4c2588e"}, -] - -[package.dependencies] -click = ">=7.0" -h11 = ">=0.8" -typing-extensions = {version = ">=4.0", markers = "python_version < \"3.11\""} - -[package.extras] -standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1)", "watchfiles (>=0.13)", "websockets (>=10.4)"] - -[[package]] -name = "webencodings" -version = "0.5.1" -description = "Character encoding aliases for legacy web content" -optional = false -python-versions = "*" -files = [ - {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, - {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, -] - -[[package]] -name = "websockets" -version = "12.0" -description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" -optional = false -python-versions = ">=3.8" -files = [ - {file = "websockets-12.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d554236b2a2006e0ce16315c16eaa0d628dab009c33b63ea03f41c6107958374"}, - {file = "websockets-12.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2d225bb6886591b1746b17c0573e29804619c8f755b5598d875bb4235ea639be"}, - {file = "websockets-12.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:eb809e816916a3b210bed3c82fb88eaf16e8afcf9c115ebb2bacede1797d2547"}, - {file = "websockets-12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c588f6abc13f78a67044c6b1273a99e1cf31038ad51815b3b016ce699f0d75c2"}, - {file = "websockets-12.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5aa9348186d79a5f232115ed3fa9020eab66d6c3437d72f9d2c8ac0c6858c558"}, - {file = "websockets-12.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6350b14a40c95ddd53e775dbdbbbc59b124a5c8ecd6fbb09c2e52029f7a9f480"}, - {file = "websockets-12.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:70ec754cc2a769bcd218ed8d7209055667b30860ffecb8633a834dde27d6307c"}, - {file = "websockets-12.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6e96f5ed1b83a8ddb07909b45bd94833b0710f738115751cdaa9da1fb0cb66e8"}, - {file = "websockets-12.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4d87be612cbef86f994178d5186add3d94e9f31cc3cb499a0482b866ec477603"}, - {file = "websockets-12.0-cp310-cp310-win32.whl", hash = "sha256:befe90632d66caaf72e8b2ed4d7f02b348913813c8b0a32fae1cc5fe3730902f"}, - {file = "websockets-12.0-cp310-cp310-win_amd64.whl", hash = "sha256:363f57ca8bc8576195d0540c648aa58ac18cf85b76ad5202b9f976918f4219cf"}, - {file = "websockets-12.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5d873c7de42dea355d73f170be0f23788cf3fa9f7bed718fd2830eefedce01b4"}, - {file = "websockets-12.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3f61726cae9f65b872502ff3c1496abc93ffbe31b278455c418492016e2afc8f"}, - {file = "websockets-12.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ed2fcf7a07334c77fc8a230755c2209223a7cc44fc27597729b8ef5425aa61a3"}, - {file = "websockets-12.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e332c210b14b57904869ca9f9bf4ca32f5427a03eeb625da9b616c85a3a506c"}, - {file = "websockets-12.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5693ef74233122f8ebab026817b1b37fe25c411ecfca084b29bc7d6efc548f45"}, - {file = "websockets-12.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e9e7db18b4539a29cc5ad8c8b252738a30e2b13f033c2d6e9d0549b45841c04"}, - {file = "websockets-12.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6e2df67b8014767d0f785baa98393725739287684b9f8d8a1001eb2839031447"}, - {file = "websockets-12.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:bea88d71630c5900690fcb03161ab18f8f244805c59e2e0dc4ffadae0a7ee0ca"}, - {file = "websockets-12.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:dff6cdf35e31d1315790149fee351f9e52978130cef6c87c4b6c9b3baf78bc53"}, - {file = "websockets-12.0-cp311-cp311-win32.whl", hash = "sha256:3e3aa8c468af01d70332a382350ee95f6986db479ce7af14d5e81ec52aa2b402"}, - {file = "websockets-12.0-cp311-cp311-win_amd64.whl", hash = "sha256:25eb766c8ad27da0f79420b2af4b85d29914ba0edf69f547cc4f06ca6f1d403b"}, - {file = "websockets-12.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0e6e2711d5a8e6e482cacb927a49a3d432345dfe7dea8ace7b5790df5932e4df"}, - {file = "websockets-12.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:dbcf72a37f0b3316e993e13ecf32f10c0e1259c28ffd0a85cee26e8549595fbc"}, - {file = "websockets-12.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:12743ab88ab2af1d17dd4acb4645677cb7063ef4db93abffbf164218a5d54c6b"}, - {file = "websockets-12.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b645f491f3c48d3f8a00d1fce07445fab7347fec54a3e65f0725d730d5b99cb"}, - {file = "websockets-12.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9893d1aa45a7f8b3bc4510f6ccf8db8c3b62120917af15e3de247f0780294b92"}, - {file = "websockets-12.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f38a7b376117ef7aff996e737583172bdf535932c9ca021746573bce40165ed"}, - {file = "websockets-12.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:f764ba54e33daf20e167915edc443b6f88956f37fb606449b4a5b10ba42235a5"}, - {file = "websockets-12.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:1e4b3f8ea6a9cfa8be8484c9221ec0257508e3a1ec43c36acdefb2a9c3b00aa2"}, - {file = "websockets-12.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:9fdf06fd06c32205a07e47328ab49c40fc1407cdec801d698a7c41167ea45113"}, - {file = "websockets-12.0-cp312-cp312-win32.whl", hash = "sha256:baa386875b70cbd81798fa9f71be689c1bf484f65fd6fb08d051a0ee4e79924d"}, - {file = "websockets-12.0-cp312-cp312-win_amd64.whl", hash = "sha256:ae0a5da8f35a5be197f328d4727dbcfafa53d1824fac3d96cdd3a642fe09394f"}, - {file = "websockets-12.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5f6ffe2c6598f7f7207eef9a1228b6f5c818f9f4d53ee920aacd35cec8110438"}, - {file = "websockets-12.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9edf3fc590cc2ec20dc9d7a45108b5bbaf21c0d89f9fd3fd1685e223771dc0b2"}, - {file = "websockets-12.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8572132c7be52632201a35f5e08348137f658e5ffd21f51f94572ca6c05ea81d"}, - {file = "websockets-12.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:604428d1b87edbf02b233e2c207d7d528460fa978f9e391bd8aaf9c8311de137"}, - {file = "websockets-12.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1a9d160fd080c6285e202327aba140fc9a0d910b09e423afff4ae5cbbf1c7205"}, - {file = "websockets-12.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87b4aafed34653e465eb77b7c93ef058516cb5acf3eb21e42f33928616172def"}, - {file = "websockets-12.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b2ee7288b85959797970114deae81ab41b731f19ebcd3bd499ae9ca0e3f1d2c8"}, - {file = "websockets-12.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:7fa3d25e81bfe6a89718e9791128398a50dec6d57faf23770787ff441d851967"}, - {file = "websockets-12.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:a571f035a47212288e3b3519944f6bf4ac7bc7553243e41eac50dd48552b6df7"}, - {file = "websockets-12.0-cp38-cp38-win32.whl", hash = "sha256:3c6cc1360c10c17463aadd29dd3af332d4a1adaa8796f6b0e9f9df1fdb0bad62"}, - {file = "websockets-12.0-cp38-cp38-win_amd64.whl", hash = "sha256:1bf386089178ea69d720f8db6199a0504a406209a0fc23e603b27b300fdd6892"}, - {file = "websockets-12.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:ab3d732ad50a4fbd04a4490ef08acd0517b6ae6b77eb967251f4c263011a990d"}, - {file = "websockets-12.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a1d9697f3337a89691e3bd8dc56dea45a6f6d975f92e7d5f773bc715c15dde28"}, - {file = "websockets-12.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1df2fbd2c8a98d38a66f5238484405b8d1d16f929bb7a33ed73e4801222a6f53"}, - {file = "websockets-12.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23509452b3bc38e3a057382c2e941d5ac2e01e251acce7adc74011d7d8de434c"}, - {file = "websockets-12.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2e5fc14ec6ea568200ea4ef46545073da81900a2b67b3e666f04adf53ad452ec"}, - {file = "websockets-12.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46e71dbbd12850224243f5d2aeec90f0aaa0f2dde5aeeb8fc8df21e04d99eff9"}, - {file = "websockets-12.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b81f90dcc6c85a9b7f29873beb56c94c85d6f0dac2ea8b60d995bd18bf3e2aae"}, - {file = "websockets-12.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:a02413bc474feda2849c59ed2dfb2cddb4cd3d2f03a2fedec51d6e959d9b608b"}, - {file = "websockets-12.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bbe6013f9f791944ed31ca08b077e26249309639313fff132bfbf3ba105673b9"}, - {file = "websockets-12.0-cp39-cp39-win32.whl", hash = "sha256:cbe83a6bbdf207ff0541de01e11904827540aa069293696dd528a6640bd6a5f6"}, - {file = "websockets-12.0-cp39-cp39-win_amd64.whl", hash = "sha256:fc4e7fa5414512b481a2483775a8e8be7803a35b30ca805afa4998a84f9fd9e8"}, - {file = "websockets-12.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:248d8e2446e13c1d4326e0a6a4e9629cb13a11195051a73acf414812700badbd"}, - {file = "websockets-12.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f44069528d45a933997a6fef143030d8ca8042f0dfaad753e2906398290e2870"}, - {file = "websockets-12.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c4e37d36f0d19f0a4413d3e18c0d03d0c268ada2061868c1e6f5ab1a6d575077"}, - {file = "websockets-12.0-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d829f975fc2e527a3ef2f9c8f25e553eb7bc779c6665e8e1d52aa22800bb38b"}, - {file = "websockets-12.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:2c71bd45a777433dd9113847af751aae36e448bc6b8c361a566cb043eda6ec30"}, - {file = "websockets-12.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0bee75f400895aef54157b36ed6d3b308fcab62e5260703add87f44cee9c82a6"}, - {file = "websockets-12.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:423fc1ed29f7512fceb727e2d2aecb952c46aa34895e9ed96071821309951123"}, - {file = "websockets-12.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:27a5e9964ef509016759f2ef3f2c1e13f403725a5e6a1775555994966a66e931"}, - {file = "websockets-12.0-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3181df4583c4d3994d31fb235dc681d2aaad744fbdbf94c4802485ececdecf2"}, - {file = "websockets-12.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:b067cb952ce8bf40115f6c19f478dc71c5e719b7fbaa511359795dfd9d1a6468"}, - {file = "websockets-12.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:00700340c6c7ab788f176d118775202aadea7602c5cc6be6ae127761c16d6b0b"}, - {file = "websockets-12.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e469d01137942849cff40517c97a30a93ae79917752b34029f0ec72df6b46399"}, - {file = "websockets-12.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffefa1374cd508d633646d51a8e9277763a9b78ae71324183693959cf94635a7"}, - {file = "websockets-12.0-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba0cab91b3956dfa9f512147860783a1829a8d905ee218a9837c18f683239611"}, - {file = "websockets-12.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:2cb388a5bfb56df4d9a406783b7f9dbefb888c09b71629351cc6b036e9259370"}, - {file = "websockets-12.0-py3-none-any.whl", hash = "sha256:dc284bbc8d7c78a6c69e0c7325ab46ee5e40bb4d50e494d8131a07ef47500e9e"}, - {file = "websockets-12.0.tar.gz", hash = "sha256:81df9cbcbb6c260de1e007e58c011bfebe2dafc8435107b0537f393dd38c8b1b"}, -] - -[[package]] -name = "yarl" -version = "1.9.3" -description = "Yet another URL library" -optional = false -python-versions = ">=3.7" -files = [ - {file = "yarl-1.9.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:32435d134414e01d937cd9d6cc56e8413a8d4741dea36af5840c7750f04d16ab"}, - {file = "yarl-1.9.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9a5211de242754b5e612557bca701f39f8b1a9408dff73c6db623f22d20f470e"}, - {file = "yarl-1.9.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:525cd69eff44833b01f8ef39aa33a9cc53a99ff7f9d76a6ef6a9fb758f54d0ff"}, - {file = "yarl-1.9.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc94441bcf9cb8c59f51f23193316afefbf3ff858460cb47b5758bf66a14d130"}, - {file = "yarl-1.9.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e36021db54b8a0475805acc1d6c4bca5d9f52c3825ad29ae2d398a9d530ddb88"}, - {file = "yarl-1.9.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e0f17d1df951336a02afc8270c03c0c6e60d1f9996fcbd43a4ce6be81de0bd9d"}, - {file = "yarl-1.9.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c5f3faeb8100a43adf3e7925d556801d14b5816a0ac9e75e22948e787feec642"}, - {file = "yarl-1.9.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aed37db837ecb5962469fad448aaae0f0ee94ffce2062cf2eb9aed13328b5196"}, - {file = "yarl-1.9.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:721ee3fc292f0d069a04016ef2c3a25595d48c5b8ddc6029be46f6158d129c92"}, - {file = "yarl-1.9.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:b8bc5b87a65a4e64bc83385c05145ea901b613d0d3a434d434b55511b6ab0067"}, - {file = "yarl-1.9.3-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:dd952b9c64f3b21aedd09b8fe958e4931864dba69926d8a90c90d36ac4e28c9a"}, - {file = "yarl-1.9.3-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:c405d482c320a88ab53dcbd98d6d6f32ada074f2d965d6e9bf2d823158fa97de"}, - {file = "yarl-1.9.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:9df9a0d4c5624790a0dea2e02e3b1b3c69aed14bcb8650e19606d9df3719e87d"}, - {file = "yarl-1.9.3-cp310-cp310-win32.whl", hash = "sha256:d34c4f80956227f2686ddea5b3585e109c2733e2d4ef12eb1b8b4e84f09a2ab6"}, - {file = "yarl-1.9.3-cp310-cp310-win_amd64.whl", hash = "sha256:cf7a4e8de7f1092829caef66fd90eaf3710bc5efd322a816d5677b7664893c93"}, - {file = "yarl-1.9.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d61a0ca95503867d4d627517bcfdc28a8468c3f1b0b06c626f30dd759d3999fd"}, - {file = "yarl-1.9.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:73cc83f918b69110813a7d95024266072d987b903a623ecae673d1e71579d566"}, - {file = "yarl-1.9.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d81657b23e0edb84b37167e98aefb04ae16cbc5352770057893bd222cdc6e45f"}, - {file = "yarl-1.9.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26a1a8443091c7fbc17b84a0d9f38de34b8423b459fb853e6c8cdfab0eacf613"}, - {file = "yarl-1.9.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fe34befb8c765b8ce562f0200afda3578f8abb159c76de3ab354c80b72244c41"}, - {file = "yarl-1.9.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2c757f64afe53a422e45e3e399e1e3cf82b7a2f244796ce80d8ca53e16a49b9f"}, - {file = "yarl-1.9.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72a57b41a0920b9a220125081c1e191b88a4cdec13bf9d0649e382a822705c65"}, - {file = "yarl-1.9.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:632c7aeb99df718765adf58eacb9acb9cbc555e075da849c1378ef4d18bf536a"}, - {file = "yarl-1.9.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b0b8c06afcf2bac5a50b37f64efbde978b7f9dc88842ce9729c020dc71fae4ce"}, - {file = "yarl-1.9.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:1d93461e2cf76c4796355494f15ffcb50a3c198cc2d601ad8d6a96219a10c363"}, - {file = "yarl-1.9.3-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:4003f380dac50328c85e85416aca6985536812c082387255c35292cb4b41707e"}, - {file = "yarl-1.9.3-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4d6d74a97e898c1c2df80339aa423234ad9ea2052f66366cef1e80448798c13d"}, - {file = "yarl-1.9.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:b61e64b06c3640feab73fa4ff9cb64bd8182de52e5dc13038e01cfe674ebc321"}, - {file = "yarl-1.9.3-cp311-cp311-win32.whl", hash = "sha256:29beac86f33d6c7ab1d79bd0213aa7aed2d2f555386856bb3056d5fdd9dab279"}, - {file = "yarl-1.9.3-cp311-cp311-win_amd64.whl", hash = "sha256:f7271d6bd8838c49ba8ae647fc06469137e1c161a7ef97d778b72904d9b68696"}, - {file = "yarl-1.9.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:dd318e6b75ca80bff0b22b302f83a8ee41c62b8ac662ddb49f67ec97e799885d"}, - {file = "yarl-1.9.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c4b1efb11a8acd13246ffb0bee888dd0e8eb057f8bf30112e3e21e421eb82d4a"}, - {file = "yarl-1.9.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c6f034386e5550b5dc8ded90b5e2ff7db21f0f5c7de37b6efc5dac046eb19c10"}, - {file = "yarl-1.9.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cd49a908cb6d387fc26acee8b7d9fcc9bbf8e1aca890c0b2fdfd706057546080"}, - {file = "yarl-1.9.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aa4643635f26052401750bd54db911b6342eb1a9ac3e74f0f8b58a25d61dfe41"}, - {file = "yarl-1.9.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e741bd48e6a417bdfbae02e088f60018286d6c141639359fb8df017a3b69415a"}, - {file = "yarl-1.9.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7c86d0d0919952d05df880a1889a4f0aeb6868e98961c090e335671dea5c0361"}, - {file = "yarl-1.9.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3d5434b34100b504aabae75f0622ebb85defffe7b64ad8f52b8b30ec6ef6e4b9"}, - {file = "yarl-1.9.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:79e1df60f7c2b148722fb6cafebffe1acd95fd8b5fd77795f56247edaf326752"}, - {file = "yarl-1.9.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:44e91a669c43f03964f672c5a234ae0d7a4d49c9b85d1baa93dec28afa28ffbd"}, - {file = "yarl-1.9.3-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:3cfa4dbe17b2e6fca1414e9c3bcc216f6930cb18ea7646e7d0d52792ac196808"}, - {file = "yarl-1.9.3-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:88d2c3cc4b2f46d1ba73d81c51ec0e486f59cc51165ea4f789677f91a303a9a7"}, - {file = "yarl-1.9.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:cccdc02e46d2bd7cb5f38f8cc3d9db0d24951abd082b2f242c9e9f59c0ab2af3"}, - {file = "yarl-1.9.3-cp312-cp312-win32.whl", hash = "sha256:96758e56dceb8a70f8a5cff1e452daaeff07d1cc9f11e9b0c951330f0a2396a7"}, - {file = "yarl-1.9.3-cp312-cp312-win_amd64.whl", hash = "sha256:c4472fe53ebf541113e533971bd8c32728debc4c6d8cc177f2bff31d011ec17e"}, - {file = "yarl-1.9.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:126638ab961633f0940a06e1c9d59919003ef212a15869708dcb7305f91a6732"}, - {file = "yarl-1.9.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c99ddaddb2fbe04953b84d1651149a0d85214780e4d0ee824e610ab549d98d92"}, - {file = "yarl-1.9.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8dab30b21bd6fb17c3f4684868c7e6a9e8468078db00f599fb1c14e324b10fca"}, - {file = "yarl-1.9.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:828235a2a169160ee73a2fcfb8a000709edf09d7511fccf203465c3d5acc59e4"}, - {file = "yarl-1.9.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc391e3941045fd0987c77484b2799adffd08e4b6735c4ee5f054366a2e1551d"}, - {file = "yarl-1.9.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:51382c72dd5377861b573bd55dcf680df54cea84147c8648b15ac507fbef984d"}, - {file = "yarl-1.9.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:28a108cb92ce6cf867690a962372996ca332d8cda0210c5ad487fe996e76b8bb"}, - {file = "yarl-1.9.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:8f18a7832ff85dfcd77871fe677b169b1bc60c021978c90c3bb14f727596e0ae"}, - {file = "yarl-1.9.3-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:7eaf13af79950142ab2bbb8362f8d8d935be9aaf8df1df89c86c3231e4ff238a"}, - {file = "yarl-1.9.3-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:66a6dbf6ca7d2db03cc61cafe1ee6be838ce0fbc97781881a22a58a7c5efef42"}, - {file = "yarl-1.9.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:1a0a4f3aaa18580038cfa52a7183c8ffbbe7d727fe581300817efc1e96d1b0e9"}, - {file = "yarl-1.9.3-cp37-cp37m-win32.whl", hash = "sha256:946db4511b2d815979d733ac6a961f47e20a29c297be0d55b6d4b77ee4b298f6"}, - {file = "yarl-1.9.3-cp37-cp37m-win_amd64.whl", hash = "sha256:2dad8166d41ebd1f76ce107cf6a31e39801aee3844a54a90af23278b072f1ccf"}, - {file = "yarl-1.9.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:bb72d2a94481e7dc7a0c522673db288f31849800d6ce2435317376a345728225"}, - {file = "yarl-1.9.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9a172c3d5447b7da1680a1a2d6ecdf6f87a319d21d52729f45ec938a7006d5d8"}, - {file = "yarl-1.9.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2dc72e891672343b99db6d497024bf8b985537ad6c393359dc5227ef653b2f17"}, - {file = "yarl-1.9.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8d51817cf4b8d545963ec65ff06c1b92e5765aa98831678d0e2240b6e9fd281"}, - {file = "yarl-1.9.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:53ec65f7eee8655bebb1f6f1607760d123c3c115a324b443df4f916383482a67"}, - {file = "yarl-1.9.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cfd77e8e5cafba3fb584e0f4b935a59216f352b73d4987be3af51f43a862c403"}, - {file = "yarl-1.9.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e73db54c967eb75037c178a54445c5a4e7461b5203b27c45ef656a81787c0c1b"}, - {file = "yarl-1.9.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09c19e5f4404574fcfb736efecf75844ffe8610606f3fccc35a1515b8b6712c4"}, - {file = "yarl-1.9.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6280353940f7e5e2efaaabd686193e61351e966cc02f401761c4d87f48c89ea4"}, - {file = "yarl-1.9.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c25ec06e4241e162f5d1f57c370f4078797ade95c9208bd0c60f484834f09c96"}, - {file = "yarl-1.9.3-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:7217234b10c64b52cc39a8d82550342ae2e45be34f5bff02b890b8c452eb48d7"}, - {file = "yarl-1.9.3-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:4ce77d289f8d40905c054b63f29851ecbfd026ef4ba5c371a158cfe6f623663e"}, - {file = "yarl-1.9.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5f74b015c99a5eac5ae589de27a1201418a5d9d460e89ccb3366015c6153e60a"}, - {file = "yarl-1.9.3-cp38-cp38-win32.whl", hash = "sha256:8a2538806be846ea25e90c28786136932ec385c7ff3bc1148e45125984783dc6"}, - {file = "yarl-1.9.3-cp38-cp38-win_amd64.whl", hash = "sha256:6465d36381af057d0fab4e0f24ef0e80ba61f03fe43e6eeccbe0056e74aadc70"}, - {file = "yarl-1.9.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2f3c8822bc8fb4a347a192dd6a28a25d7f0ea3262e826d7d4ef9cc99cd06d07e"}, - {file = "yarl-1.9.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b7831566595fe88ba17ea80e4b61c0eb599f84c85acaa14bf04dd90319a45b90"}, - {file = "yarl-1.9.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ff34cb09a332832d1cf38acd0f604c068665192c6107a439a92abfd8acf90fe2"}, - {file = "yarl-1.9.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fe8080b4f25dfc44a86bedd14bc4f9d469dfc6456e6f3c5d9077e81a5fedfba7"}, - {file = "yarl-1.9.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8535e111a064f3bdd94c0ed443105934d6f005adad68dd13ce50a488a0ad1bf3"}, - {file = "yarl-1.9.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0d155a092bf0ebf4a9f6f3b7a650dc5d9a5bbb585ef83a52ed36ba46f55cc39d"}, - {file = "yarl-1.9.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:778df71c8d0c8c9f1b378624b26431ca80041660d7be7c3f724b2c7a6e65d0d6"}, - {file = "yarl-1.9.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b9f9cafaf031c34d95c1528c16b2fa07b710e6056b3c4e2e34e9317072da5d1a"}, - {file = "yarl-1.9.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ca6b66f69e30f6e180d52f14d91ac854b8119553b524e0e28d5291a724f0f423"}, - {file = "yarl-1.9.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:e0e7e83f31e23c5d00ff618045ddc5e916f9e613d33c5a5823bc0b0a0feb522f"}, - {file = "yarl-1.9.3-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:af52725c7c39b0ee655befbbab5b9a1b209e01bb39128dce0db226a10014aacc"}, - {file = "yarl-1.9.3-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0ab5baaea8450f4a3e241ef17e3d129b2143e38a685036b075976b9c415ea3eb"}, - {file = "yarl-1.9.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6d350388ba1129bc867c6af1cd17da2b197dff0d2801036d2d7d83c2d771a682"}, - {file = "yarl-1.9.3-cp39-cp39-win32.whl", hash = "sha256:e2a16ef5fa2382af83bef4a18c1b3bcb4284c4732906aa69422cf09df9c59f1f"}, - {file = "yarl-1.9.3-cp39-cp39-win_amd64.whl", hash = "sha256:d92d897cb4b4bf915fbeb5e604c7911021a8456f0964f3b8ebbe7f9188b9eabb"}, - {file = "yarl-1.9.3-py3-none-any.whl", hash = "sha256:271d63396460b6607b588555ea27a1a02b717ca2e3f2cf53bdde4013d7790929"}, - {file = "yarl-1.9.3.tar.gz", hash = "sha256:4a14907b597ec55740f63e52d7fee0e9ee09d5b9d57a4f399a7423268e457b57"}, -] - -[package.dependencies] -idna = ">=2.0" -multidict = ">=4.0" - -[[package]] -name = "zipp" -version = "3.17.0" -description = "Backport of pathlib-compatible object wrapper for zip files" -optional = false -python-versions = ">=3.8" -files = [ - {file = "zipp-3.17.0-py3-none-any.whl", hash = "sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31"}, - {file = "zipp-3.17.0.tar.gz", hash = "sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0"}, -] - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"] - -[metadata] -lock-version = "2.0" -python-versions = ">=3.8,<3.12" -content-hash = "742953761c3319aa2328049df34b79c5ee8596152d2ec5e83547d20658b2b85a" diff --git a/openbb_platform/extensions/charting/tests/.gitkeep b/openbb_platform/extensions/charting/tests/.gitkeep deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/openbb_platform/extensions/tests/test_integration_tests_api.py b/openbb_platform/extensions/tests/test_integration_tests_api.py index a14cfb7ebf9..70f3d0823ad 100644 --- a/openbb_platform/extensions/tests/test_integration_tests_api.py +++ b/openbb_platform/extensions/tests/test_integration_tests_api.py @@ -2,7 +2,7 @@ from typing import Literal -from openbb_core.app.charting_service import ChartingService +from openbb_charting import Charting from extensions.tests.utils.integration_tests_testers import ( check_missing_integration_test_params, @@ -41,7 +41,8 @@ def test_api_interface_wrong_integration_test_params() -> None: def test_charting_extension_function_coverage() -> None: """Test if all charting extension functions are covered by integration tests.""" - functions = ChartingService.get_implemented_charting_functions() + functions = Charting.functions() + test_names = [f"test_chart_{func}" for func in functions] integration_tests_modules = get_integration_tests( test_type="api", filter_charting_ext=False diff --git a/openbb_platform/extensions/tests/test_integration_tests_python.py b/openbb_platform/extensions/tests/test_integration_tests_python.py index 65d28c3db16..110034fa82f 100644 --- a/openbb_platform/extensions/tests/test_integration_tests_python.py +++ b/openbb_platform/extensions/tests/test_integration_tests_python.py @@ -2,7 +2,7 @@ from typing import Literal -from openbb_core.app.charting_service import ChartingService +from openbb_charting import Charting from extensions.tests.utils.integration_tests_testers import ( check_missing_integration_test_params, @@ -41,7 +41,8 @@ def test_python_interface_wrong_integration_test_params() -> None: def test_charting_extension_function_coverage() -> None: """Test if all charting extension functions are covered by integration tests.""" - functions = ChartingService.get_implemented_charting_functions() + functions = Charting.functions() + test_names = [f"test_chart_{func}" for func in functions] integration_tests_modules = get_integration_tests( test_type="python", filter_charting_ext=False diff --git a/openbb_platform/extensions/tests/utils/integration_tests_api_generator.py b/openbb_platform/extensions/tests/utils/integration_tests_api_generator.py index 2a91c759cbb..ca30f28d3b5 100644 --- a/openbb_platform/extensions/tests/utils/integration_tests_api_generator.py +++ b/openbb_platform/extensions/tests/utils/integration_tests_api_generator.py @@ -2,10 +2,11 @@ import argparse import os +from pathlib import Path from typing import Dict, List, Literal, Type, get_type_hints import requests -from openbb_core.app.charting_service import ChartingService +from openbb_charting import Charting from openbb_core.app.provider_interface import ProviderInterface from openbb_core.app.router import CommandMap @@ -160,25 +161,21 @@ def write_commands_integration_tests( def write_charting_extension_integration_tests(): """Write the charting extension integration tests.""" - functions = ChartingService.get_implemented_charting_functions() + import openbb_charting # pylint: disable=import-outside-toplevel - # we assume test file exists - path = os.path.join( - "openbb_platform", - "extensions", - "charting", - "integration", - "test_charting_api.py", - ) + functions = Charting.functions() + + charting_ext_path = Path(openbb_charting.__file__).parent.parent + test_file = charting_ext_path / "integration" / "test_charting_api.py" for function in functions: route = "/" + function.replace("_", "/") - if not test_exists(route=function, path=path): + if not test_exists(route=function, path=test_file): write_test_w_template( http_method="post", params_list=[{"chart": True}], route=route, - path=path, + path=test_file, chart=True, ) diff --git a/openbb_platform/extensions/tests/utils/integration_tests_generator.py b/openbb_platform/extensions/tests/utils/integration_tests_generator.py index 9c2ebe645ed..7e1f478fd47 100644 --- a/openbb_platform/extensions/tests/utils/integration_tests_generator.py +++ b/openbb_platform/extensions/tests/utils/integration_tests_generator.py @@ -14,7 +14,7 @@ from typing import ( get_type_hints, ) -from openbb_core.app.charting_service import ChartingService +from openbb_charting import Charting from openbb_core.app.provider_interface import ProviderInterface from openbb_core.app.router import CommandMap from pydantic.fields import FieldInfo @@ -44,6 +44,9 @@ def find_extensions(filter_chart: Optional[bool] = True): if filter_chart: filter_ext.append("charting") extensions = [x for x in Path("openbb_platform/extensions").iterdir() if x.is_dir()] + extensions.extend( + [x for x in Path("openbb_platform/obbject_extensions").iterdir() if x.is_dir()] + ) extensions = [x for x in extensions if x.name not in filter_ext] return extensions @@ -279,7 +282,7 @@ def write_charting_extension_integration_tests(): """Write charting extension integration tests.""" import openbb_charting # pylint: disable=import-outside-toplevel - functions = ChartingService.get_implemented_charting_functions() + functions = Charting.functions() charting_ext_path = Path(openbb_charting.__file__).parent.parent test_file = charting_ext_path / "integration" / "test_charting_python.py" @@ -306,15 +309,15 @@ if __name__ == "__main__": parser.add_argument( "--charting", dest="charting", - default=True, - action="store_false", + default=False, + action="store_true", help="Generate charting extension integration tests", ) parser.add_argument( "--commands", dest="commands", - default=True, - action="store_false", + default=False, + action="store_true", help="Generate commands integration tests", ) diff --git a/openbb_platform/extensions/charting/README.md b/openbb_platform/obbject_extensions/charting/README.md similarity index 59% rename from openbb_platform/extensions/charting/README.md rename to openbb_platform/obbject_extensions/charting/README.md index eeac066e7d4..039001608c0 100644 --- a/openbb_platform/extensions/charting/README.md +++ b/openbb_platform/obbject_extensions/charting/README.md @@ -8,6 +8,9 @@ The library includes: - a set of charting components - prebuilt charts for a set of commands that are built-in OpenBB extensions +>[!NOTE] +> The charting library is an [`OBBject` extension](https://docs.openbb.co/platform/development/developer-guidelines/obbject_extensions) which means you'll have the functionality it exposes on every command result. + ## Installation To install the extension, run the following command in this folder: @@ -52,14 +55,77 @@ equity_data.show() > Note: The `show()` method currently works either in a Jupyter Notebook or in a standalone python script with a PyWry based backend properly initialized. +Alternatively, you can use the fact that the `openbb-charting` is an `OBBject` extension and use its available methods. + +```python +from openbb import obb +res = obb.equity.price.historical("AAPL") +res.charting.show() +``` + +The above code will produce the same effect as the previous example. + +### Discovering available charts + +Not all the endpoints are currently supported by the charting extension. To discover which endpoints are supported, you can run the following command: + +```python +from openbb_charting import Charting +Charting.functions() +``` + +### Using the `to_chart` method + +The `to_chart` function should be taken as an advanced feature, as it requires the user to have a good understanding of the charting extension and the `OpenBBFigure` class. + +The user can use any number of `**kwargs` that will be passed to the `PlotlyTA` class in order to build custom visualizations with custom indicators and similar. + +> Note that, this method will only work to some limited extent with data that is not standardized. +> Also, it is currently designed only to handle time series (OHLCV) data. + +Example usage: + +- Plotting a time series with TA indicators + + ```python + + from openbb import obb + res = obb.equity.price.historical("AAPL") + + indicators = dict( + sma=dict(length=[20,30,50]), + adx=dict(length=14), + rsi=dict(length=14), + macd=dict(fast=12, slow=26, signal=9), + bbands=dict(length=20, std=2), + stoch=dict(length=14), + ema=dict(length=[20,30,50]), + ) + res.charting.to_chart(**{"indicators": indicators}) + + ``` + +- Get all the available indicators + + ```python + + # if you have a command result already + res.charting.indicators + + # or if you want to know in standalone fashion + from openbb_charting import Charting + Charting.indicators() + + ``` + ## Add a visualization to an existing Platform command -One should first ensure that the already implemented endpoint is available in the [charting router](/openbb_platform/extensions/charting/openbb_charting/charting_router.py). +One should first ensure that the already implemented endpoint is available in the [charting router](/openbb_platform/obbject_extensions/charting/openbb_charting/charting_router.py). To do so, you can run: - `python openbb_platform/extensions/charting/openbb_charting/builder.py` - which will read all the available endpoints and add them to the charting router. + `python openbb_platform/obbject_extensions/charting/openbb_charting/builder.py` - which will read all the available endpoints and add them to the charting router. -Afterwards, you'll need to add the visualization to the [charting router](/openbb_platform/extensions/charting/openbb_charting/charting_router.py). The convention to match the endpoint with the respective charting function is the following: +Afterwards, you'll need to add the visualization to the [charting router]. The convention to match the endpoint with the respective charting function is the following: - `/equity/price/historical` -> `equity_price_historical` - `/technical/ema` -> `technical_ema` @@ -69,7 +135,6 @@ When you spot the charting function on the charting router file, you can add the The implementation should leverage the already existing classes and methods to do so, namely: - `OpenBBFigure` -- `OpenBBFigureTable` - `PlotlyTA` Note that the return of each charting function should respect the already defined return types: `Tuple[OpenBBFigure, Dict[str, Any]]`. @@ -77,17 +142,4 @@ Note that the return of each charting function should respect the already define The returned tuple contains a `OpenBBFigure` that is an interactive plotly figure which can be used in a Python interpreter, and a `Dict[str, Any]` that contains the raw data leveraged by the API. After you're done implementing the charting function, you can use either the Python interface or the API to get the chart. To do so, you'll only need to set the already available `chart` argument to `True`. - -### Using the `to_chart` OBBject method - -The `OBBject` is the custom OpenBB object that is returned by the Platform commands. -It implements a set of `to_` functions that enable the user to easily transform the data into a different format. - -The `to_chart` function should be taken as an advanced feature, as it requires the user to have a good understanding of the charting extension and the `OpenBBFigure` class. - -The user can use any number of `**kwargs` that will be passed to the `PlotlyTA` class in order to build custom visualizations with custom indicators and similar. - -Refer to the [`to_chart` implementation](openbb_charting/core/to_chart.py) for further details. - -> Note that, this method will only work to some limited extent with data that is not standardized. -> Also, it is currently designed only to handle time series data. +Or accessing the `charting` attribute of the `OBBject` object: `my_obbject.charting.show()`. diff --git a/openbb_platform/extensions/charting/integration/test_charting_api.py b/openbb_platform/obbject_extensions/charting/integration/test_charting_api.py similarity index 100% rename from openbb_platform/extensions/charting/integration/test_charting_api.py rename to openbb_platform/obbject_extensions/charting/integration/test_charting_api.py diff --git a/openbb_platform/extensions/charting/integration/test_charting_python.py b/openbb_platform/obbject_extensions/charting/integration/test_charting_python.py similarity index 100% rename from openbb_platform/extensions/charting/integration/test_charting_python.py rename to openbb_platform/obbject_extensions/charting/integration/test_charting_python.py diff --git a/openbb_platform/obbject_extensions/charting/openbb_charting/__init__.py b/openbb_platform/obbject_extensions/charting/openbb_charting/__init__.py new file mode 100644 index 00000000000..68391476ac0 --- /dev/null +++ b/openbb_platform/obbject_extensions/charting/openbb_charting/__init__.py @@ -0,0 +1,201 @@ +"""OpenBB OBBject extension for charting.""" + +from typing import ( + Any, + Callable, + Dict, + List, + Optional, + Tuple, + Union, +) + +import numpy as np +import pandas as pd +from openbb_core.app.model.charts.chart import Chart +from openbb_core.app.model.extension import Extension +from openbb_core.app.utils import basemodel_to_df, convert_to_basemodel +from openbb_core.provider.abstract.data import Data + +from openbb_charting import charting_router +from openbb_charting.core.to_chart import ChartIndicators, OpenBBFigure, to_chart +from openbb_charting.utils.helpers import get_charting_functions + +ext = Extension(name="charting") + + +@ext.obbject_accessor +class Charting: + """ + Charting extension. + + Methods + ------- + show + Display chart and save it to the OBBject. + to_chart + Returns the plotly json representation of the chart. + functions + Returns a list of Platform commands with charting functions. + indicators + Returns a list of the available indicators to use with the `to_chart` method. + """ + + def __init__(self, obbject): + """Initialize Charting extension.""" + # pylint: disable=import-outside-toplevel + from openbb_core.app.model.charts.charting_settings import ChartingSettings + from openbb_core.app.model.obbject import OBBject + + self._obbject: OBBject = obbject + self._charting_settings = ChartingSettings( + user_settings=self._obbject._user_settings, + system_settings=self._obbject._system_settings, + ) + self._handle_backend() + + @classmethod + def indicators(cls): + """Returns a list of the available indicators.""" + return ChartIndicators.get_available_indicators() + + @classmethod + def functions(cls): + """Returns a list of the available functions.""" + return get_charting_functions() + + def _handle_backend(self): + # pylint: disable=import-outside-toplevel + from openbb_charting.core.backend import create_backend, get_backend + + create_backend(self._charting_settings) + get_backend().start(debug=self._charting_settings.debug_mode) + + @staticmethod + def _get_chart_function(route: str) -> Callable: + """Given a route, it returns the chart function. The module must contain the given route.""" + adjusted_route = route.replace("/", "_")[1:] + return getattr(charting_router, adjusted_route) + + def show(self, render: bool = True, **kwargs): + """Display chart and save it to the OBBject.""" + charting_function = self._get_chart_function( + self._obbject._route # pylint: disable=protected-access + ) + kwargs["obbject_item"] = self._obbject.results + kwargs["charting_settings"] = self._charting_settings + if ( + hasattr(self._obbject, "_standard_params") + and self._obbject._standard_params # pylint: disable=protected-access + ): + kwargs["standard_params"] = ( + self._obbject._standard_params.__dict__ # pylint: disable=protected-access + ) + + fig, content = charting_function(**kwargs) + self._obbject.chart = Chart( + fig=fig, content=content, format=charting_router.CHART_FORMAT + ) + if render: + fig.show(**kwargs) + + # pylint: disable=too-many-arguments + def to_chart( + self, + data: Optional[ + Union[ + list, + dict, + pd.DataFrame, + List[pd.DataFrame], + pd.Series, + List[pd.Series], + np.ndarray, + Data, + ] + ] = None, + indicators: Optional[Union[ChartIndicators, Dict[str, Dict[str, Any]]]] = None, + symbol: str = "", + candles: bool = True, + volume: bool = True, + prepost: bool = False, + volume_ticks_x: int = 7, + render: bool = True, + **kwargs, + ): + """ + Creates a OpenBBFigure with user customizations (if any) and saves it to the OBBject. + + This function is used so it can be called at the module level and used out of the box, + which allows some more flexibility, ease of use and doesn't require the user to know + about the PlotlyTA class. + + Parameters + ---------- + data : Union[pd.DataFrame, pd.Series] + Data to be plotted Data to be plotted (OHLCV data). + indicators : Optional[Union[ChartIndicators, Dict[str, Dict[str, Any]]]], optional + Indicators to be plotted, by default None + symbol : str, optional + Symbol to be plotted, by default "" + candles : bool, optional + If True, candles will be plotted, by default True + volume : bool, optional + If True, volume will be plotted, by default True + prepost : bool, optional + If True, prepost will be plotted, by default False + volume_ticks_x : int, optional + Volume ticks, by default 7 + render : bool, optional + If True, the chart will be rendered, by default True + + Examples + -------- + 1) Plotting a time series with TA indicators + > from openbb import obb + > res = obb.equity.price.historical("AAPL") + > indicators = dict( + > sma=dict(length=[20,30,50]), + > adx=dict(length=14), + > rsi=dict(length=14), + > macd=dict(fast=12, slow=26, signal=9), + > bbands=dict(length=20, std=2), + > stoch=dict(length=14), + > ema=dict(length=[20,30,50]), + > ) + > res.charting.to_chart(**{"indicators": indicators}) + + 2) Get all the available indicators + > from openbb_charting.core.plotly_ta.data_classes import ChartIndicators + > ChartIndicators.get_available_indicators() + or + > from openbb_charting import Charting + > Charting.indicators() + """ + has_data = (isinstance(data, (pd.DataFrame, pd.Series)) and not data.empty) or ( + data + ) + index = ( + data.index.name + if has_data and isinstance(data, (pd.DataFrame, pd.Series)) + else "" + ) + data_as_df: pd.DataFrame = ( + basemodel_to_df(convert_to_basemodel(data), index=index) + if has_data + else self._obbject.to_dataframe() + ) + fig, content = to_chart( + data_as_df, + indicators=indicators, + symbol=symbol, + candles=candles, + volume=volume, + prepost=prepost, + volume_ticks_x=volume_ticks_x, + ) + self._obbject.chart = Chart( + fig=fig, content=content, format=charting_router.CHART_FORMAT + ) + if render: + fig.show(**kwargs) diff --git a/openbb_platform/extensions/charting/openbb_charting/builder.py b/openbb_platform/obbject_extensions/charting/openbb_charting/builder.py similarity index 79% rename from openbb_platform/extensions/charting/openbb_charting/builder.py rename to openbb_platform/obbject_extensions/charting/openbb_charting/builder.py index c6da656ca20..8fb4302cd7a 100644 --- a/openbb_platform/extensions/charting/openbb_charting/builder.py +++ b/openbb_platform/obbject_extensions/charting/openbb_charting/builder.py @@ -1,35 +1,40 @@ +"""Script used to create charting functions in charting_router.py.""" + from inspect import getmembers, isfunction from typing import List -from openbb_charting import charting_router from openbb_core.app.router import RouterLoader +from openbb_charting import charting_router + # refers to the root of the repo, not the root of the extension # this script should be run from the root of the repo CHARTING_ROUTER = ( - "openbb_platform/extensions/charting/openbb_charting/charting_router.py" + "openbb_platform/obbject_extensions/charting/openbb_charting/charting_router.py" ) def get_routes() -> List[str]: + """Get all routes from the api router.""" router = RouterLoader.from_extensions() return [route.path for route in router.api_router.routes] # type: ignore def create_charting_functions_w_routes(routes_to_add: List[str]): + """Create new charting functions in charting_router.py.""" with open(CHARTING_ROUTER, "a") as f: for route in routes_to_add: original_route = route.replace("_", "/") f.write( f""" - -def {route}(**kwargs) -> Tuple[OpenBBFigure, Dict[str, Any]]: +def {route}(**kwargs) -> Tuple["OpenBBFigure", Dict[str, Any]]: raise NotImplementedError("Command `{original_route}` does not have a charting function") """ ) def get_charting_functions() -> List[str]: + """Get all functions from charting_router.py.""" functions = getmembers(charting_router, isfunction) if functions: return [function[0] for function in functions] diff --git a/openbb_platform/extensions/charting/openbb_charting/charting_router.py b/openbb_platform/obbject_extensions/charting/openbb_charting/charting_router.py similarity index 63% rename from openbb_platform/extensions/charting/openbb_charting/charting_router.py rename to openbb_platform/obbject_extensions/charting/openbb_charting/charting_router.py index e3bff401b3f..a80c1af8ad9 100644 --- a/openbb_platform/extensions/charting/openbb_charting/charting_router.py +++ b/openbb_platform/obbject_extensions/charting/openbb_charting/charting_router.py @@ -1,21 +1,21 @@ """Charting router.""" -from typing import Any, Dict, Tuple +from typing import TYPE_CHECKING, Any, Dict, Tuple from openbb_core.app.model.charts.chart import ChartFormat -from openbb_core.app.router import Router from openbb_core.app.utils import basemodel_to_df -from .core.openbb_figure import OpenBBFigure -from .core.openbb_figure_table import OpenBBFigureTable from .core.plotly_ta.ta_class import PlotlyTA -router = Router(prefix="") - CHART_FORMAT = ChartFormat.plotly +if TYPE_CHECKING: + from .core.openbb_figure import OpenBBFigure -def equity_price_historical(**kwargs) -> Tuple[OpenBBFigure, Dict[str, Any]]: + # from .core.openbb_figure_table import OpenBBFigureTable + + +def equity_price_historical(**kwargs) -> Tuple["OpenBBFigure", Dict[str, Any]]: """Equity price chart.""" def handle_indicators(ma): @@ -26,12 +26,12 @@ def equity_price_historical(**kwargs) -> Tuple[OpenBBFigure, Dict[str, Any]]: return k data = basemodel_to_df(kwargs["obbject_item"], index=kwargs.get("index", "date")) - standard_params = kwargs["standard_params"].__dict__ + standard_params = kwargs["standard_params"] ma = standard_params.get("ma", None) prepost = standard_params.get("prepost", False) symbol = standard_params.get("symbol", "") - ta = PlotlyTA(charting_settings=kwargs["charting_settings"]) + ta = PlotlyTA() fig = ta.plot( data, indicators=dict(**handle_indicators(ma)), @@ -45,12 +45,12 @@ def equity_price_historical(**kwargs) -> Tuple[OpenBBFigure, Dict[str, Any]]: def _ta_ma(ma_type: str, **kwargs): """Plot moving average helper.""" - data = basemodel_to_df(kwargs["data"], index=kwargs.get("index", "date")) + data = basemodel_to_df(kwargs["obbject_item"], index=kwargs.get("index", "date")) window = kwargs.get("window", 50) offset = kwargs.get("offset", 0) symbol = kwargs.get("symbol", "") - ta = PlotlyTA(charting_settings=kwargs["charting_settings"]) + ta = PlotlyTA() fig = ta.plot( data, {f"{ma_type.lower()}": dict(length=window, offset=offset)}, @@ -63,20 +63,20 @@ def _ta_ma(ma_type: str, **kwargs): return fig, content -def technical_zlma(**kwargs) -> Tuple[OpenBBFigure, Dict[str, Any]]: +def technical_zlma(**kwargs) -> Tuple["OpenBBFigure", Dict[str, Any]]: """Zero lag moving average chart.""" ma_type = "zlma" return _ta_ma(ma_type, **kwargs) -def technical_aroon(**kwargs) -> Tuple[OpenBBFigure, Dict[str, Any]]: +def technical_aroon(**kwargs) -> Tuple["OpenBBFigure", Dict[str, Any]]: """Aroon chart.""" - data = basemodel_to_df(kwargs["data"], index=kwargs.get("index", "date")) + data = basemodel_to_df(kwargs["obbject_item"], index=kwargs.get("index", "date")) length = kwargs.get("length", 25) scalar = kwargs.get("scalar", 100) symbol = kwargs.get("symbol", "") - ta = PlotlyTA(charting_settings=kwargs["charting_settings"]) + ta = PlotlyTA() fig = ta.plot( data, dict(aroon=dict(length=length, scalar=scalar)), @@ -89,21 +89,21 @@ def technical_aroon(**kwargs) -> Tuple[OpenBBFigure, Dict[str, Any]]: return fig, content -def technical_sma(**kwargs) -> Tuple[OpenBBFigure, Dict[str, Any]]: +def technical_sma(**kwargs) -> Tuple["OpenBBFigure", Dict[str, Any]]: """Plot simple moving average chart.""" ma_type = "sma" return _ta_ma(ma_type, **kwargs) -def technical_macd(**kwargs) -> Tuple[OpenBBFigure, Dict[str, Any]]: +def technical_macd(**kwargs) -> Tuple["OpenBBFigure", Dict[str, Any]]: """Plot moving average convergence divergence chart.""" - data = basemodel_to_df(kwargs["data"], index=kwargs.get("index", "date")) + data = basemodel_to_df(kwargs["obbject_item"], index=kwargs.get("index", "date")) fast = kwargs.get("fast", 12) slow = kwargs.get("slow", 26) signal = kwargs.get("signal", 9) symbol = kwargs.get("symbol", "") - ta = PlotlyTA(charting_settings=kwargs["charting_settings"]) + ta = PlotlyTA() fig = ta.plot( data, dict(macd=dict(fast=fast, slow=slow, signal=signal)), @@ -116,21 +116,21 @@ def technical_macd(**kwargs) -> Tuple[OpenBBFigure, Dict[str, Any]]: return fig, content -def technical_hma(**kwargs) -> Tuple[OpenBBFigure, Dict[str, Any]]: +def technical_hma(**kwargs) -> Tuple["OpenBBFigure", Dict[str, Any]]: """Hull moving average chart.""" ma_type = "hma" return _ta_ma(ma_type, **kwargs) -def technical_adx(**kwargs) -> Tuple[OpenBBFigure, Dict[str, Any]]: +def technical_adx(**kwargs) -> Tuple["OpenBBFigure", Dict[str, Any]]: """Average directional movement index chart.""" - data = basemodel_to_df(kwargs["data"], index=kwargs.get("index", "date")) + data = basemodel_to_df(kwargs["obbject_item"], index=kwargs.get("index", "date")) length = kwargs.get("length", 14) scalar = kwargs.get("scalar", 100.0) drift = kwargs.get("drift", 1) symbol = kwargs.get("symbol", "") - ta = PlotlyTA(charting_settings=kwargs["charting_settings"]) + ta = PlotlyTA() fig = ta.plot( data, dict(adx=dict(length=length, scalar=scalar, drift=drift)), @@ -143,21 +143,21 @@ def technical_adx(**kwargs) -> Tuple[OpenBBFigure, Dict[str, Any]]: return fig, content -def technical_wma(**kwargs) -> Tuple[OpenBBFigure, Dict[str, Any]]: +def technical_wma(**kwargs) -> Tuple["OpenBBFigure", Dict[str, Any]]: """Weighted moving average chart.""" ma_type = "wma" return _ta_ma(ma_type, **kwargs) -def technical_rsi(**kwargs) -> Tuple[OpenBBFigure, Dict[str, Any]]: +def technical_rsi(**kwargs) -> Tuple["OpenBBFigure", Dict[str, Any]]: """Relative strength index chart.""" - data = basemodel_to_df(kwargs["data"], index=kwargs.get("index", "date")) + data = basemodel_to_df(kwargs["obbject_item"], index=kwargs.get("index", "date")) window = kwargs.get("window", 14) scalar = kwargs.get("scalar", 100.0) drift = kwargs.get("drift", 1) symbol = kwargs.get("symbol", "") - ta = PlotlyTA(charting_settings=kwargs["charting_settings"]) + ta = PlotlyTA() fig = ta.plot( data, dict(rsi=dict(length=window, scalar=scalar, drift=drift)), @@ -170,19 +170,7 @@ def technical_rsi(**kwargs) -> Tuple[OpenBBFigure, Dict[str, Any]]: return fig, content -def technical_ema(**kwargs) -> Tuple[OpenBBFigure, Dict[str, Any]]: +def technical_ema(**kwargs) -> Tuple["OpenBBFigure", Dict[str, Any]]: """Exponential moving average chart.""" ma_type = "ema" return _ta_ma(ma_type, **kwargs) - - -def equity_fundamental_multiples(**kwargs) -> Tuple[OpenBBFigure, Dict[str, Any]]: - """Equity multiples chart.""" - data = basemodel_to_df(kwargs["obbject_item"], index=kwargs.get("index", "date")) - standard_params = kwargs["standard_params"].__dict__ - columnwidth = standard_params.get("columnwidth", None) - - tbl_fig = OpenBBFigureTable(tabular_data=data, columnwidth=columnwidth) - content = tbl_fig.to_table().show(external=True).to_plotly_json() - - return tbl_fig, content diff --git a/openbb_platform/extensions/charting/__init__.py b/openbb_platform/obbject_extensions/charting/openbb_charting/core/__init__.py similarity index 100% rename from openbb_platform/extensions/charting/__init__.py rename to openbb_platform/obbject_extensions/charting/openbb_charting/core/__init__.py diff --git a/openbb_platform/extensions/charting/openbb_charting/core/assets/Terminal_icon.png b/openbb_platform/obbject_extensions/charting/openbb_charting/core/assets/Terminal_icon.png similarity index 100% rename from openbb_platform/extensions/charting/openbb_charting/core/assets/Terminal_icon.png rename to openbb_platform/obbject_extensions/charting/openbb_charting/core/assets/Terminal_icon.png diff --git a/openbb_platform/extensions/charting/openbb_charting/core/assets/plotly-2.24.2.min.js b/openbb_platform/obbject_extensions/charting/openbb_charting/core/assets/plotly-2.24.2.min.js similarity index 100% rename from openbb_platform/extensions/charting/openbb_charting/core/assets/plotly-2.24.2.min.js rename to openbb_platform/obbject_extensions/charting/openbb_charting/core/assets/plotly-2.24.2.min.js diff --git a/openbb_platform/extensions/charting/openbb_charting/core/backend.py b/openbb_platform/obbject_extensions/charting/openbb_charting/core/backend.py similarity index 97% rename from openbb_platform/extensions/charting/openbb_charting/core/backend.py rename to openbb_platform/obbject_extensions/charting/openbb_charting/core/backend.py index a1ab4b5e270..ce8b706f5cc 100644 --- a/openbb_platform/extensions/charting/openbb_charting/core/backend.py +++ b/openbb_platform/obbject_extensions/charting/openbb_charting/core/backend.py @@ -11,15 +11,19 @@ import warnings from multiprocessing import current_process from pathlib import Path from threading import Thread -from typing import Any, Dict, Optional, Union +from typing import TYPE_CHECKING, Any, Dict, Optional, Union import aiohttp import pandas as pd import plotly.graph_objects as go -from openbb_core.app.model.charts.charting_settings import ChartingSettings from openbb_core.env import Env from packaging import version from reportlab.graphics import renderPDF +from svglib.svglib import svg2rlg + +if TYPE_CHECKING: + from openbb_core.app.model.charts.charting_settings import ChartingSettings + # pylint: disable=C0415 try: @@ -34,8 +38,6 @@ except ImportError as e: """Dummy backend for charts.""" -from svglib.svglib import svg2rlg - try: from IPython import get_ipython @@ -67,7 +69,7 @@ class Backend(PyWry): def __init__( self, - charting_settings: ChartingSettings, + charting_settings: "ChartingSettings", daemon: bool = True, max_retries: int = 30, proc_name: str = "OpenBB Terminal", @@ -504,7 +506,10 @@ if not PLOTLYJS_PATH.exists() and not JUPYTER_NOTEBOOK: Thread(target=asyncio.run, args=(download_plotly_js(),)).start() -def create_backend(charting_settings: Optional[ChartingSettings] = None): +def create_backend(charting_settings: Optional["ChartingSettings"] = None): + # # pylint: disable=import-outside-toplevel + from openbb_core.app.model.charts.charting_settings import ChartingSettings + charting_settings = charting_settings or ChartingSettings() global BACKEND # pylint: disable=W0603 # noqa if BACKEND is None: diff --git a/openbb_platform/extensions/charting/openbb_charting/core/chart_style.py b/openbb_platform/obbject_extensions/charting/openbb_charting/core/chart_style.py similarity index 99% rename from openbb_platform/extensions/charting/openbb_charting/core/chart_style.py rename to openbb_platform/obbject_extensions/charting/openbb_charting/core/chart_style.py index 01e86dc0fad..f09fe5a8491 100644 --- a/openbb_platform/extensions/charting/openbb_charting/core/chart_style.py +++ b/openbb_platform/obbject_extensions/charting/openbb_charting/core/chart_style.py @@ -15,6 +15,7 @@ from warnings import warn import plotly.graph_objects as go import plotly.io as pio + from openbb_charting.core.config.openbb_styles import ( PLT_COLORWAY, PLT_DECREASING_COLORWAY, diff --git a/openbb_platform/extensions/charting/openbb_charting/core/__init__.py b/openbb_platform/obbject_extensions/charting/openbb_charting/core/config/__init__.py similarity index 100% rename from openbb_platform/extensions/charting/openbb_charting/core/__init__.py rename to openbb_platform/obbject_extensions/charting/openbb_charting/core/config/__init__.py diff --git a/openbb_platform/extensions/charting/openbb_charting/core/config/openbb_styles.py b/openbb_platform/obbject_extensions/charting/openbb_charting/core/config/openbb_styles.py similarity index 100% rename from openbb_platform/extensions/charting/openbb_charting/core/config/openbb_styles.py rename to openbb_platform/obbject_extensions/charting/openbb_charting/core/config/openbb_styles.py diff --git a/openbb_platform/extensions/charting/openbb_charting/core/dummy_backend.py b/openbb_platform/obbject_extensions/charting/openbb_charting/core/dummy_backend.py similarity index 100% rename from openbb_platform/extensions/charting/openbb_charting/core/dummy_backend.py rename to openbb_platform/obbject_extensions/charting/openbb_charting/core/dummy_backend.py diff --git a/openbb_platform/extensions/charting/openbb_charting/core/openbb_figure.py b/openbb_platform/obbject_extensions/charting/openbb_charting/core/openbb_figure.py similarity index 98% rename from openbb_platform/extensions/charting/openbb_charting/core/openbb_figure.py rename to openbb_platform/obbject_extensions/charting/openbb_charting/core/openbb_figure.py index 97fe018a8d0..27963e1cd5b 100644 --- a/openbb_platform/extensions/charting/openbb_charting/core/openbb_figure.py +++ b/openbb_platform/obbject_extensions/charting/openbb_charting/core/openbb_figure.py @@ -23,15 +23,17 @@ import numpy as np import pandas as pd import plotly.graph_objects as go import plotly.io as pio +from plotly.subplots import make_subplots + from openbb_charting.core.backend import PLOTLYJS_PATH, create_backend, get_backend from openbb_charting.core.chart_style import ChartStyle from openbb_charting.core.config.openbb_styles import ( PLT_TBL_ROW_COLORS, ) -from openbb_core.app.model.charts.charting_settings import ChartingSettings -from plotly.subplots import make_subplots if TYPE_CHECKING: + from openbb_core.app.model.charts.charting_settings import ChartingSettings + try: # noqa: SIM105 # pylint: disable=W0611 # noqa: F401 from darts import TimeSeries @@ -86,7 +88,9 @@ class OpenBBFigure(go.Figure): if fig: self.__dict__ = fig.__dict__ - self._charting_settings = kwargs.pop("charting_settings", ChartingSettings()) + self._charting_settings: Optional["ChartingSettings"] = kwargs.pop( + "charting_settings", None + ) self._has_secondary_y = kwargs.pop("has_secondary_y", False) self._subplots_kwargs: Dict[str, Any] = kwargs.pop("subplots_kwargs", {}) self._multi_rows = kwargs.pop("multi_rows", False) @@ -102,10 +106,12 @@ class OpenBBFigure(go.Figure): if kwargs.pop("create_backend", False): create_backend(self._charting_settings) - get_backend().start(debug=self._charting_settings.debug_mode) + get_backend().start( + debug=getattr(self._charting_settings, "debug_mode", False) + ) self._theme = ChartStyle( - self._charting_settings.chart_style, - self._charting_settings.user_styles_directory, + getattr(self._charting_settings, "plt_style", ""), + getattr(self._charting_settings, "user_styles_directory", None), ) if xaxis := kwargs.pop("xaxis", None): @@ -232,7 +238,8 @@ class OpenBBFigure(go.Figure): secondary_y: bool = False, **kwargs, ): - """Add a trend line to the figure. + """ + Add a trend line to the figure. Parameters ---------- @@ -245,7 +252,6 @@ class OpenBBFigure(go.Figure): secondary_y : `bool`, optional Whether to plot on secondary y axis, by default None """ - try: for column, color in zip( ["OC_High_trend", "OC_Low_trend"], @@ -285,7 +291,8 @@ class OpenBBFigure(go.Figure): row: int = 1, col: int = 1, ) -> None: - """Add a histogram with a curve and rug plot if desired. + """ + Add a histogram with a curve and rug plot if desired. Parameters ---------- @@ -312,7 +319,6 @@ class OpenBBFigure(go.Figure): col : `int`, optional Column of the subplot, by default 1 """ - from scipy import stats # pylint: disable=import-outside-toplevel callback = stats.norm if curve == "normal" else stats.gaussian_kde @@ -554,7 +560,8 @@ class OpenBBFigure(go.Figure): legendrank: Optional[int] = None, **kwargs, ) -> None: - """Add a horizontal line with a legend label. + """ + Add a horizontal line with a legend label. Parameters ---------- @@ -567,7 +574,6 @@ class OpenBBFigure(go.Figure): legendrank : `int`, optional Legend rank, by default None (e.g. 1 is above 2) """ - if line is None: line = {} @@ -592,7 +598,8 @@ class OpenBBFigure(go.Figure): legendrank: Optional[int] = None, **kwargs, ) -> None: - """Add a vertical line with a legend label. + """ + Add a vertical line with a legend label. Parameters ---------- @@ -605,7 +612,6 @@ class OpenBBFigure(go.Figure): legendrank : `int`, optional Legend rank, by default None (e.g. 1 is above 2) """ - if line is None: line = {} @@ -661,7 +667,8 @@ class OpenBBFigure(go.Figure): def chart_volume_scaling( df_volume: pd.DataFrame, volume_ticks_x: int = 7 ) -> Dict[str, list]: - """Takes df_volume and returns volume_ticks, tickvals for chart volume scaling + """ + Takes df_volume and returns volume_ticks, tickvals for chart volume scaling. Parameters ---------- @@ -709,7 +716,8 @@ class OpenBBFigure(go.Figure): col: Optional[int] = 1, volume_ticks_x: int = 7, ) -> None: - """Add in-chart volume to a subplot. + """ + Add in-chart volume to a subplot. Parameters ---------- @@ -726,7 +734,6 @@ class OpenBBFigure(go.Figure): volume_ticks_x : int, optional Number to multiply volume, by default 7 """ - colors = np.where( df_stock.open < df_stock[close_col], self._theme.up_color, @@ -838,8 +845,9 @@ class OpenBBFigure(go.Figure): external: bool = False, export_image: Optional[Union[Path, str]] = "", **kwargs, - ) -> Optional["OpenBBFigure"]: - """Show the figure. + ) -> "OpenBBFigure": + """ + Show the figure. Parameters ---------- @@ -854,7 +862,6 @@ class OpenBBFigure(go.Figure): date_xaxis : `bool`, optional Whether to check if the xaxis is a date axis, by default True """ - self.cmd_xshift = kwargs.pop("cmd_xshift", self.cmd_xshift) self.bar_width = kwargs.pop("bar_width", self.bar_width) self._export_image = export_image @@ -899,7 +906,7 @@ class OpenBBFigure(go.Figure): if external or self._exported: return self # type: ignore - if self._charting_settings.headless: + if getattr(self._charting_settings, "headless", False): return self.to_json() kwargs.update(config=dict(scrollZoom=True, displaylogo=False)) @@ -916,7 +923,7 @@ class OpenBBFigure(go.Figure): # If the backend fails, we just show the figure normally # This is a very rare case, but it's better to have a fallback - if self._charting_settings.debug_mode: + if getattr(self._charting_settings, "debug_mode", False): warn(f"Failed to show figure with backend: {e}") warn( f"Failed to show figure with backend: {e}" @@ -1232,8 +1239,7 @@ class OpenBBFigure(go.Figure): self, ndarray: bool = False, np_nan: bool = False ) -> Dict[str, Any]: """ - Convert figure to a JSON representation as a Python dict - + Convert figure to a JSON representation as a Python dict. Parameters ---------- @@ -1512,7 +1518,6 @@ class OpenBBFigure(go.Figure): def add_logscale_menus(self, yaxis: str = "yaxis") -> None: """Set the menus for the figure.""" - self._added_logscale = True bg_color = "#000000" if self._theme.mapbox_style == "dark" else "#FFFFFF" # type: ignore font_color = "#FFFFFF" if self._theme.mapbox_style == "dark" else "#000000" # type: ignore diff --git a/openbb_platform/extensions/charting/openbb_charting/core/plotly.html b/openbb_platform/obbject_extensions/charting/openbb_charting/core/plotly.html similarity index 98% rename from openbb_platform/extensions/charting/openbb_charting/core/plotly.html rename to openbb_platform/obbject_extensions/charting/openbb_charting/core/plotly.html index 7f952bc3e12..0968c0a6998 100644 --- a/openbb_platform/extensions/charting/openbb_charting/core/plotly.html +++ b/openbb_platform/obbject_extensions/charting/openbb_charting/core/plotly.html @@ -118,12 +118,12 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho var I, $, se, Pe, R = ""; for (I = $ = 0, se = (L = (L + "").replace(/\r\n/g, ` `).replace(/\r/g, ` `)).length, Pe = 0; Pe < se; Pe++) { var E = L.charCodeAt(Pe), e = null; E < 128 ? $++ : e = E > 127 && E < 2048 ? String.fromCharCode(E >> 6 | 192, 63 & E | 128) : String.fromCharCode(E >> 12 | 224, E >> 6 & 63 | 128, 63 & E | 128), e !== null && ($ > I && (R += L.substring(I, $)), R += e, I = $ = Pe + 1) } return $ > I && (R += L.substring(I, L.length)), R - }, Xu = (Jg = function () { for (var L = new Date().valueOf(), I = 0; L == new Date().valueOf();)I++; return L.toString(16) + I.toString(16) }, function (L) { if (L === "v7") return lT().toString(); var I = typeof window < "u" ? (window.screen.height * window.screen.width).toString(16) : "0"; return Jg() + "-" + Math.random().toString(16).replace(".", "") + "-" + function () { var $, se, Pe = El, R = 0, E = []; function e(w, k) { var i, _ = 0; for (i = 0; i < k.length; i++)_ |= E[i] << 8 * i; return w ^ _ } for ($ = 0; $ < Pe.length; $++)se = Pe.charCodeAt($), E.unshift(255 & se), E.length >= 4 && (R = e(R, E), E = []); return E.length > 0 && (R = e(R, E)), R.toString(16) }() + "-" + I + "-" + Jg() }), mT = function (L) { return !!/(google web preview|baiduspider|yandexbot|bingbot|googlebot|yahoo! slurp|ahrefsbot|facebookexternalhit|facebookcatalog|applebot|semrushbot|duckduckbot|twitterbot|rogerbot|linkedinbot|mj12bot|sitebulb|bot.htm|bot.php|hubspot|crawler|prerender)/i.test(L) }, zb = function (L, I) { var $ = I.replace(/[[]/, "\\[").replace(/[\]]/, "\\]"), se = new RegExp("[\\?&]" + $ + "=([^&#]*)").exec(L); if (se === null || se && typeof se[1] != "string" && se[1].length) return ""; var Pe = se[1]; try { Pe = decodeURIComponent(Pe) } catch { Sa.error("Skipping decoding for malformed query param: " + Pe) } return Pe.replace(/\+/g, " ") }, Db = function (L, I) { var $ = L.match(new RegExp(I + "=([^&]*)")); return $ ? $[1] : null }, jp = function () { function L(I) { return I && (I.preventDefault = L.preventDefault, I.stopPropagation = L.stopPropagation), I } return L.preventDefault = function () { this.returnValue = !1 }, L.stopPropagation = function () { this.cancelBubble = !0 }, function (I, $, se, Pe, R) { if (I) if (I.addEventListener && !Pe) I.addEventListener($, se, !!R); else { var E = "on" + $, e = I[E]; I[E] = function (w, k, i) { return function (_) { if (_ = _ || L(window.event)) { var y, h = !0; Xw(i) && (y = i(_)); var l = k.call(w, _); return y !== !1 && l !== !1 || (h = !1), h } } }(I, se, e) } else Sa.error("No valid element provided to register_event") } }(); function Ey(L, I) { var $ = function () { var se = ao.createElement("script"); se.type = "text/javascript", se.src = L, se.onload = function (E) { return I(void 0, E) }, se.onerror = function (E) { return I(E) }; var Pe, R = ao.querySelectorAll("body > script"); R.length > 0 ? (Pe = R[0].parentNode) === null || Pe === void 0 || Pe.insertBefore(se, R[0]) : ao.body.appendChild(se) }; ao.body ? $() : ao.addEventListener("DOMContentLoaded", $) } var vo = { campaignParams: function (L) { var I = ["utm_source", "utm_medium", "utm_campaign", "utm_content", "utm_term", "gclid", "fbclid", "msclkid"].concat(L || []), $ = {}; return ji(I, function (se) { var Pe = zb(ao.URL, se); Pe.length && ($[se] = Pe) }), $ }, searchEngine: function () { var L = ao.referrer; return L ? L.search("https?://(.*)google.([^/?]*)") === 0 ? "google" : L.search("https?://(.*)bing.com") === 0 ? "bing" : L.search("https?://(.*)yahoo.com") === 0 ? "yahoo" : L.search("https?://(.*)duckduckgo.com") === 0 ? "duckduckgo" : null : null }, searchInfo: function () { var L = vo.searchEngine(), I = L != "yahoo" ? "q" : "p", $ = {}; if (L !== null) { $.$search_engine = L; var se = zb(ao.referrer, I); se.length && ($.ph_keyword = se) } return $ }, browser: function (L, I, $) { return I = I || "", $ || Yi(L, " OPR/") ? Yi(L, "Mini") ? "Opera Mini" : "Opera" : /(BlackBerry|PlayBook|BB10)/i.test(L) ? "BlackBerry" : Yi(L, "IEMobile") || Yi(L, "WPDesktop") ? "Internet Explorer Mobile" : Yi(L, "SamsungBrowser/") ? "Samsung Internet" : Yi(L, "Edge") || Yi(L, "Edg/") ? "Microsoft Edge" : Yi(L, "FBIOS") ? "Facebook Mobile" : Yi(L, "Chrome") ? "Chrome" : Yi(L, "CriOS") ? "Chrome iOS" : Yi(L, "UCWEB") || Yi(L, "UCBrowser") ? "UC Browser" : Yi(L, "FxiOS") ? "Firefox iOS" : Yi(I, "Apple") ? Yi(L, "Mobile") ? "Mobile Safari" : "Safari" : Yi(L, "Android") ? "Android Mobile" : Yi(L, "Konqueror") ? "Konqueror" : Yi(L, "Firefox") ? "Firefox" : Yi(L, "MSIE") || Yi(L, "Trident/") ? "Internet Explorer" : Yi(L, "Gecko") ? "Mozilla" : "" }, browserVersion: function (L, I, $) { var se = { "Internet Explorer Mobile": /rv:(\d+(\.\d+)?)/, "Microsoft Edge": /Edge?\/(\d+(\.\d+)?)/, Chrome: /Chrome\/(\d+(\.\d+)?)/, "Chrome iOS": /CriOS\/(\d+(\.\d+)?)/, "UC Browser": /(UCBrowser|UCWEB)\/(\d+(\.\d+)?)/, Safari: /Version\/(\d+(\.\d+)?)/, "Mobile Safari": /Version\/(\d+(\.\d+)?)/, Opera: /(Opera|OPR)\/(\d+(\.\d+)?)/, Firefox: /Firefox\/(\d+(\.\d+)?)/, "Firefox iOS": /FxiOS\/(\d+(\.\d+)?)/, Konqueror: /Konqueror:(\d+(\.\d+)?)/, BlackBerry: /BlackBerry (\d+(\.\d+)?)/, "Android Mobile": /android\s(\d+(\.\d+)?)/, "Samsung Internet": /SamsungBrowser\/(\d+(\.\d+)?)/, "Internet Explorer": /(rv:|MSIE )(\d+(\.\d+)?)/, Mozilla: /rv:(\d+(\.\d+)?)/ }[vo.browser(L, I, $)]; if (se === void 0) return null; var Pe = L.match(se); return Pe ? parseFloat(Pe[Pe.length - 2]) : null }, browserLanguage: function () { return pf.language || pf.userLanguage }, os: function (L) { if (/Windows/i.test(L)) { if (/Phone/.test(L) || /WPDesktop/.test(L)) return { os_name: "Windows Phone", os_version: "" }; var I = /Windows NT ([0-9.]+)/i.exec(L); return I && I[1] ? { os_name: "Windows", os_version: I[1] } : { os_name: "Windows", os_version: "" } } if (/(iPhone|iPad|iPod)/.test(L)) { var $ = /OS (\d+)_(\d+)_?(\d+)?/i.exec(L); return $ && $[1] ? { os_name: "iOS", os_version: [$[1], $[2], $[3] || "0"].join(".") } : { os_name: "iOS", os_version: "" } } if (/Android/.test(L)) { var se = /Android (\d+)\.(\d+)\.?(\d+)?/i.exec(L); return se && se[1] ? { os_name: "Android", os_version: [se[1], se[2], se[3] || "0"].join(".") } : { os_name: "Android", os_version: "" } } if (/(BlackBerry|PlayBook|BB10)/i.test(L)) return { os_name: "BlackBerry", os_version: "" }; if (/Mac/i.test(L)) { var Pe = /Mac OS X (\d+)[_.](\d+)[_.]?(\d+)?/i.exec(L); return Pe && Pe[1] ? { os_name: "Mac OS X", os_version: [Pe[1], Pe[2], Pe[3] || "0"].join(".") } : { os_name: "Mac OS X", os_version: "" } } return /Linux/.test(L) ? { os_name: "Linux", os_version: "" } : /CrOS/.test(L) ? { os_name: "Chrome OS", os_version: "" } : { os_name: "", os_version: "" } }, device: function (L) { return /Windows Phone/i.test(L) || /WPDesktop/.test(L) ? "Windows Phone" : /iPad/.test(L) ? "iPad" : /iPod/.test(L) ? "iPod Touch" : /iPhone/.test(L) ? "iPhone" : /(BlackBerry|PlayBook|BB10)/i.test(L) ? "BlackBerry" : /Android/.test(L) && !/Mobile/.test(L) ? "Android Tablet" : /Android/.test(L) ? "Android" : "" }, deviceType: function (L) { var I = this.device(L); return I === "iPad" || I === "Android Tablet" ? "Tablet" : I ? "Mobile" : "Desktop" }, referrer: function () { return ao.referrer || "$direct" }, referringDomain: function () { if (!ao.referrer) return "$direct"; var L = ao.createElement("a"); return L.href = ao.referrer, L.host }, properties: function () { var L = vo.os(El), I = L.os_name, $ = L.os_version; return Lo(hm({ $os: I, $os_version: $, $browser: vo.browser(El, pf.vendor, qr.opera), $device: vo.device(El), $device_type: vo.deviceType(El) }), { $current_url: qr == null ? void 0 : qr.location.href, $host: qr == null ? void 0 : qr.location.host, $pathname: qr == null ? void 0 : qr.location.pathname, $browser_version: vo.browserVersion(El, pf.vendor, qr.opera), $browser_language: vo.browserLanguage(), $screen_height: qr == null ? void 0 : qr.screen.height, $screen_width: qr == null ? void 0 : qr.screen.width, $viewport_height: qr == null ? void 0 : qr.innerHeight, $viewport_width: qr == null ? void 0 : qr.innerWidth, $lib: "web", $lib_version: Su.LIB_VERSION, $insert_id: Math.random().toString(36).substring(2, 10) + Math.random().toString(36).substring(2, 10), $time: (Date.now = Date.now || function () { return +new Date }, Date.now() / 1e3) }) }, people_properties: function () { var L = vo.os(El), I = L.os_name, $ = L.os_version; return Lo(hm({ $os: I, $os_version: $, $browser: vo.browser(El, pf.vendor, qr.opera) }), { $browser_version: vo.browserVersion(El, pf.vendor, qr.opera) }) } }; function v1(L) { switch (Hc(L.className)) { case "string": return L.className; case "object": return ("baseVal" in L.className ? L.className.baseVal : null) || L.getAttribute("class") || ""; default: return "" } } function m1(L) { var I = ""; return F0(L) && !e5(L) && L.childNodes && L.childNodes.length && ji(L.childNodes, function ($) { Qw($) && $.textContent && (I += fm($.textContent).split(/(\s+)/).filter(yh).join("").replace(/[\r\n]/g, " ").replace(/[ ]+/g, " ").substring(0, 255)) }), fm(I) } function Fb(L) { return !!L && L.nodeType === 1 } function _f(L, I) { return !!L && !!L.tagName && L.tagName.toLowerCase() === I.toLowerCase() } function Qw(L) { return !!L && L.nodeType === 3 } function Bb(L) { return !!L && L.nodeType === 11 } var Qg = ["a", "button", "form", "input", "select", "textarea", "label"]; function F0(L) { for (var I = L; I.parentNode && !_f(I, "body"); I = I.parentNode) { var $ = v1(I).split(" "); if (Yi($, "ph-sensitive") || Yi($, "ph-no-capture")) return !1 } if (Yi(v1(L).split(" "), "ph-include")) return !0; var se = L.type || ""; if (typeof se == "string") switch (se.toLowerCase()) { case "hidden": case "password": return !1 }var Pe = L.name || L.id || ""; return !(typeof Pe == "string" && /^cc|cardnum|ccnum|creditcard|csc|cvc|cvv|exp|pass|pwd|routing|seccode|securitycode|securitynum|socialsec|socsec|ssn/i.test(Pe.replace(/[^a-zA-Z0-9]/g, ""))) } function e5(L) { return !!(_f(L, "input") && !["button", "checkbox", "submit", "reset"].includes(L.type) || _f(L, "select") || _f(L, "textarea") || L.getAttribute("contenteditable") === "true") } function yh(L) { return !(L === null || nu(L) || typeof L == "string" && (L = fm(L), /^(?:(4[0-9]{12}(?:[0-9]{3})?)|(5[1-5][0-9]{14})|(6(?:011|5[0-9]{2})[0-9]{12})|(3[47][0-9]{13})|(3(?:0[0-5]|[68][0-9])[0-9]{11})|((?:2131|1800|35[0-9]{3})[0-9]{11}))$/.test((L || "").replace(/[- ]/g, "")) || /(^\d{3}-?\d{2}-?\d{4}$)/.test(L))) } function Nb(L) { var I = m1(L); return yh(I = "".concat(I, " ").concat(t5(L)).trim()) ? I : "" } function t5(L) { var I = ""; return L && L.childNodes && L.childNodes.length && ji(L.childNodes, function ($) { var se; if ($ && ((se = $.tagName) === null || se === void 0 ? void 0 : se.toLowerCase()) === "span") try { var Pe = m1($); I = "".concat(I, " ").concat(Pe).trim(), $.childNodes && $.childNodes.length && (I = "".concat(I, " ").concat(t5($)).trim()) } catch (R) { console.error(R) } }), I } var yT = function () { function L(I) { Ua(this, L), this.clicks = [], this.enabled = I } return Va(L, [{ key: "isRageClick", value: function (I, $, se) { if (!this.enabled) return !1; var Pe = this.clicks[this.clicks.length - 1]; if (Pe && Math.abs(I - Pe.x) + Math.abs($ - Pe.y) < 30 && se - Pe.timestamp < 1e3) { if (this.clicks.push({ x: I, y: $, timestamp: se }), this.clicks.length === 3) return !0 } else this.clicks = [{ x: I, y: $, timestamp: se }]; return !1 } }]), L }(), xT = /[a-z0-9][a-z0-9-]+\.[a-z.]{2,6}$/i, Tu = { is_supported: function () { return !0 }, error: function (L) { Sa.error("cookieStore error: " + L) }, get: function (L) { try { for (var I = L + "=", $ = document.cookie.split(";"), se = 0; se < $.length; se++) { for (var Pe = $[se]; Pe.charAt(0) == " ";)Pe = Pe.substring(1, Pe.length); if (Pe.indexOf(I) === 0) return decodeURIComponent(Pe.substring(I.length, Pe.length)) } } catch { } return null }, parse: function (L) { var I; try { I = JSON.parse(Tu.get(L)) || {} } catch { } return I }, set: function (L, I, $, se, Pe) { try { var R = "", E = "", e = ""; if (se) { var w = document.location.hostname.match(xT), k = w ? w[0] : ""; R = k ? "; domain=." + k : "" } if ($) { var i = new Date; i.setTime(i.getTime() + 24 * $ * 60 * 60 * 1e3), E = "; expires=" + i.toUTCString() } Pe && (e = "; secure"); var _ = L + "=" + encodeURIComponent(JSON.stringify(I)) + E + "; SameSite=Lax; path=/" + R + e; return document.cookie = _, _ } catch { return } }, remove: function (L, I) { try { Tu.set(L, "", -1, I) } catch { return } } }, ev = null, Ka = { is_supported: function () { if (ev !== null) return ev; var L = !0; if (typeof window < "u") try { var I = "__mplssupport__"; Ka.set(I, "xyz"), Ka.get(I) !== '"xyz"' && (L = !1), Ka.remove(I) } catch { L = !1 } else L = !1; return L || Sa.error("localStorage unsupported; falling back to cookie store"), ev = L, L }, error: function (L) { Sa.error("localStorage error: " + L) }, get: function (L) { try { return window.localStorage.getItem(L) } catch (I) { Ka.error(I) } return null }, parse: function (L) { try { return JSON.parse(Ka.get(L)) || {} } catch { } return null }, set: function (L, I) { try { window.localStorage.setItem(L, JSON.stringify(I)) } catch ($) { Ka.error($) } }, remove: function (L) { try { window.localStorage.removeItem(L) } catch (I) { Ka.error(I) } } }, pm = Zr(Zr({}, Ka), {}, { parse: function (L) { try { var I = {}; try { (I = Tu.parse(L) || {}).distinct_id && Tu.set(L, { distinct_id: I.distinct_id }) } catch { } var $ = Lo(I, JSON.parse(Ka.get(L) || "{}")); return Ka.set(L, $), $ } catch { } return null }, set: function (L, I, $, se, Pe) { try { Ka.set(L, I), I.distinct_id && Tu.set(L, { distinct_id: I.distinct_id }, $, se, Pe) } catch (R) { Ka.error(R) } }, remove: function (L, I) { try { window.localStorage.removeItem(L), Tu.remove(L, I) } catch ($) { Ka.error($) } } }), m0 = {}, bT = { is_supported: function () { return !0 }, error: function (L) { Sa.error("memoryStorage error: " + L) }, get: function (L) { return m0[L] || null }, parse: function (L) { return m0[L] || null }, set: function (L, I) { m0[L] = I }, remove: function (L) { delete m0[L] } }, uf = null, Oo = { is_supported: function () { if (uf !== null) return uf; if (uf = !0, typeof window < "u") try { var L = "__support__"; Oo.set(L, "xyz"), Oo.get(L) !== '"xyz"' && (uf = !1), Oo.remove(L) } catch { uf = !1 } else uf = !1; return uf }, error: function (L) { Su.DEBUG && Sa.error("sessionStorage error: ", L) }, get: function (L) { try { return window.sessionStorage.getItem(L) } catch (I) { Oo.error(I) } return null }, parse: function (L) { try { return JSON.parse(Oo.get(L)) || null } catch { } return null }, set: function (L, I) { try { window.sessionStorage.setItem(L, JSON.stringify(I)) } catch ($) { Oo.error($) } }, remove: function (L) { try { window.sessionStorage.removeItem(L) } catch (I) { Oo.error(I) } } }, n5 = "$people_distinct_id", B0 = "__alias", Lp = "__timers", jb = "$autocapture_disabled_server_side", dm = "$session_recording_enabled_server_side", Ub = "$console_log_recording_enabled_server_side", Vb = "$session_recording_recorder_version_server_side", gm = "$sesid", xh = "$enabled_feature_flags", vm = "$early_access_features", bh = "$stored_person_properties", Mc = "$stored_group_properties", mm = "$surveys", ym = "$user_state", _T = [n5, B0, "__cmpns", Lp, dm, gm, xh, ym, vm, Mc, bh, mm], wT = ["cookie", "localstorage", "localstorage+cookie", "sessionstorage", "memory"], Hb = function () { function L(I) { Ua(this, L); var $ = ""; I.token && ($ = I.token.replace(/\+/g, "PL").replace(/\//g, "SL").replace(/=/g, "EQ")), this.props = {}, this.campaign_params_saved = !1, this.custom_campaign_params = I.custom_campaign_params || [], I.persistence_name ? this.name = "ph_" + I.persistence_name : this.name = "ph_" + $ + "_posthog", wT.indexOf(I.persistence.toLowerCase()) === -1 && (Sa.critical("Unknown persistence type " + I.persistence + "; falling back to cookie"), I.persistence = "cookie"); var se = I.persistence.toLowerCase(); se === "localstorage" && Ka.is_supported() ? this.storage = Ka : se === "localstorage+cookie" && pm.is_supported() ? this.storage = pm : se === "sessionstorage" && Oo.is_supported() ? this.storage = Oo : this.storage = se === "memory" ? bT : Tu, this.user_state = "anonymous", this.load(), this.update_config(I), this.save() } return Va(L, [{ key: "properties", value: function () { var I = {}; return ji(this.props, function ($, se) { if (se === xh && Hc($) === "object") for (var Pe = Object.keys($), R = 0; R < Pe.length; R++)I["$feature/".concat(Pe[R])] = $[Pe[R]]; else e = se, w = !1, ((E = _T) === null ? w : Rb && E.indexOf === Rb ? E.indexOf(e) != -1 : (ji(E, function (k) { if (w || (w = k === e)) return Sy }), w)) || (I[se] = $); var E, e, w }), I } }, { key: "load", value: function () { if (!this.disabled) { var I = this.storage.parse(this.name); I && (this.props = Lo({}, I)) } } }, { key: "save", value: function () { this.disabled || this.storage.set(this.name, this.props, this.expire_days, this.cross_subdomain, this.secure) } }, { key: "remove", value: function () { this.storage.remove(this.name, !1), this.storage.remove(this.name, !0) } }, { key: "clear", value: function () { this.remove(), this.props = {} } }, { key: "register_once", value: function (I, $, se) { var Pe = this; if (bf(I)) { $ === void 0 && ($ = "None"), this.expire_days = se === void 0 ? this.default_expiry : se; var R = !1; if (ji(I, function (E, e) { Pe.props.hasOwnProperty(e) && Pe.props[e] !== $ || (Pe.props[e] = E, R = !0) }), R) return this.save(), !0 } return !1 } }, { key: "register", value: function (I, $) { var se = this; if (bf(I)) { this.expire_days = $ === void 0 ? this.default_expiry : $; var Pe = !1; if (ji(I, function (R, E) { I.hasOwnProperty(E) && se.props[E] !== R && (se.props[E] = R, Pe = !0) }), Pe) return this.save(), !0 } return !1 } }, { key: "unregister", value: function (I) { I in this.props && (delete this.props[I], this.save()) } }, { key: "update_campaign_params", value: function () { this.campaign_params_saved || (this.register(vo.campaignParams(this.custom_campaign_params)), this.campaign_params_saved = !0) } }, { key: "update_search_keyword", value: function () { this.register(vo.searchInfo()) } }, { key: "update_referrer_info", value: function () { this.register({ $referrer: this.props.$referrer || vo.referrer(), $referring_domain: this.props.$referring_domain || vo.referringDomain() }) } }, { key: "get_referrer_info", value: function () { return hm({ $referrer: this.props.$referrer, $referring_domain: this.props.$referring_domain }) } }, { key: "safe_merge", value: function (I) { return ji(this.props, function ($, se) { se in I || (I[se] = $) }), I } }, { key: "update_config", value: function (I) { this.default_expiry = this.expire_days = I.cookie_expiration, this.set_disabled(I.disable_persistence), this.set_cross_subdomain(I.cross_subdomain_cookie), this.set_secure(I.secure_cookie) } }, { key: "set_disabled", value: function (I) { this.disabled = I, this.disabled ? this.remove() : this.save() } }, { key: "set_cross_subdomain", value: function (I) { I !== this.cross_subdomain && (this.cross_subdomain = I, this.remove(), this.save()) } }, { key: "get_cross_subdomain", value: function () { return !!this.cross_subdomain } }, { key: "set_secure", value: function (I) { I !== this.secure && (this.secure = I, this.remove(), this.save()) } }, { key: "set_event_timer", value: function (I, $) { var se = this.props[Lp] || {}; se[I] = $, this.props[Lp] = se, this.save() } }, { key: "remove_event_timer", value: function (I) { var $ = (this.props[Lp] || {})[I]; return nu($) || (delete this.props[Lp][I], this.save()), $ } }, { key: "get_user_state", value: function () { return this.props[ym] || "anonymous" } }, { key: "set_user_state", value: function (I) { this.props[ym] = I, this.save() } }]), L }(), Cc = { _initializedTokens: [], _isAutocaptureEnabled: !1, _setIsAutocaptureEnabled: function (L) { var I = !!L.get_property(jb), $ = !!L.get_config("autocapture"); this._isAutocaptureEnabled = $ && !I }, _previousElementSibling: function (L) { if (L.previousElementSibling) return L.previousElementSibling; var I = L; do I = I.previousSibling; while (I && !Fb(I)); return I }, _getAugmentPropertiesFromElement: function (L) { if (!F0(L)) return {}; var I = {}; return ji(L.attributes, function ($) { if ($.name.indexOf("data-ph-capture-attribute") === 0) { var se = $.name.replace("data-ph-capture-attribute-", ""), Pe = $.value; se && Pe && yh(Pe) && (I[se] = Pe) } }), I }, _getPropertiesFromElement: function (L, I, $) { var se = L.tagName.toLowerCase(), Pe = { tag_name: se }; Qg.indexOf(se) > -1 && !$ && (se.toLowerCase() === "a" || se.toLowerCase() === "button" ? Pe.$el_text = Nb(L) : Pe.$el_text = m1(L)); var R = v1(L); R.length > 0 && (Pe.classes = R.split(" ").filter(function (k) { return k !== "" })), ji(L.attributes, function (k) { var i; e5(L) && ["name", "id", "class"].indexOf(k.name) === -1 || !I && yh(k.value) && (typeof (i = k.name) != "string" || i.substring(0, 10) !== "_ngcontent" && i.substring(0, 7) !== "_nghost") && (Pe["attr__" + k.name] = k.value) }); for (var E = 1, e = 1, w = L; w = this._previousElementSibling(w);)E++, w.tagName === L.tagName && e++; return Pe.nth_child = E, Pe.nth_of_type = e, Pe }, _getDefaultProperties: function (L) { return { $event_type: L, $ce_version: 1 } }, _extractCustomPropertyValue: function (L) { var I = []; return ji(document.querySelectorAll(L.css_selector), function ($) { var se;["input", "select"].indexOf($.tagName.toLowerCase()) > -1 ? se = $.value : $.textContent && (se = $.textContent), yh(se) && I.push(se) }), I.join(", ") }, _getCustomProperties: function (L) { var I = this, $ = {}; return ji(this._customProperties, function (se) { ji(se.event_selectors, function (Pe) { ji(document.querySelectorAll(Pe), function (R) { Yi(L, R) && F0(R) && ($[se.name] = I._extractCustomPropertyValue(se)) }) }) }), $ }, _getEventTarget: function (L) { return L.target === void 0 ? L.srcElement || null : (I = L.target) !== null && I !== void 0 && I.shadowRoot ? L.composedPath()[0] || null : L.target || null; var I }, _captureEvent: function (L, I) { var $, se = this, Pe = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : "$autocapture", R = this._getEventTarget(L); if (Qw(R) && (R = R.parentNode || null), Pe === "$autocapture" && L.type === "click" && L instanceof MouseEvent && ($ = this.rageclicks) !== null && $ !== void 0 && $.isRageClick(L.clientX, L.clientY, new Date().getTime()) && this._captureEvent(L, I, "$rageclick"), R && function (h, l) { var t = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : void 0; if (!h || _f(h, "html") || !Fb(h)) return !1; if (t != null && t.url_allowlist) { var o = window.location.href, r = t.url_allowlist; if (r && !r.some(function (m) { return o.match(m) })) return !1 } if (t != null && t.dom_event_allowlist) { var n = t.dom_event_allowlist; if (n && !n.some(function (m) { return l.type === m })) return !1 } if (t != null && t.element_allowlist) { var a = t.element_allowlist; if (a && !a.some(function (m) { return h.tagName.toLowerCase() === m })) return !1 } if (t != null && t.css_selector_allowlist) { var s = t.css_selector_allowlist; if (s && !s.some(function (m) { return h.matches(m) })) return !1 } for (var u = !1, p = [h], c = !0, b = h; b.parentNode && !_f(b, "body");)if (Bb(b.parentNode)) p.push(b.parentNode.host), b = b.parentNode.host; else { if (!(c = b.parentNode || !1)) break; if (Qg.indexOf(c.tagName.toLowerCase()) > -1) u = !0; else { var g = window.getComputedStyle(c); g && g.getPropertyValue("cursor") === "pointer" && (u = !0) } p.push(c), b = c } var f = window.getComputedStyle(h); if (f && f.getPropertyValue("cursor") === "pointer" && l.type === "click") return !0; var v = h.tagName.toLowerCase(); switch (v) { case "html": return !1; case "form": return l.type === "submit"; case "input": case "select": case "textarea": return l.type === "change" || l.type === "click"; default: return u ? l.type === "click" : l.type === "click" && (Qg.indexOf(v) > -1 || h.getAttribute("contenteditable") === "true") } }(R, L, this.config)) { for (var E = [R], e = R; e.parentNode && !_f(e, "body");)Bb(e.parentNode) ? (E.push(e.parentNode.host), e = e.parentNode.host) : (E.push(e.parentNode), e = e.parentNode); var w, k = [], i = {}, _ = !1; if (ji(E, function (h) { var l = F0(h); h.tagName.toLowerCase() === "a" && (w = h.getAttribute("href"), w = l && yh(w) && w), Yi(v1(h).split(" "), "ph-no-capture") && (_ = !0), k.push(se._getPropertiesFromElement(h, I.get_config("mask_all_element_attributes"), I.get_config("mask_all_text"))); var t = se._getAugmentPropertiesFromElement(h); Lo(i, t) }), I.get_config("mask_all_text") || (R.tagName.toLowerCase() === "a" || R.tagName.toLowerCase() === "button" ? k[0].$el_text = Nb(R) : k[0].$el_text = m1(R)), w && (k[0].attr__href = w), _) return !1; var y = Lo(this._getDefaultProperties(L.type), { $elements: k }, this._getCustomProperties(E), i); return I.capture(Pe, y), !0 } }, _navigate: function (L) { window.location.href = L }, _addDomEventHandlers: function (L) { var I = this, $ = function (se) { se = se || window.event, I._captureEvent(se, L) }; jp(document, "submit", $, !1, !0), jp(document, "change", $, !1, !0), jp(document, "click", $, !1, !0) }, _customProperties: [], rageclicks: null, config: void 0, init: function (L) { var I; typeof L.__autocapture != "boolean" && (this.config = L.__autocapture), (I = this.config) !== null && I !== void 0 && I.url_allowlist && (this.config.url_allowlist = this.config.url_allowlist.map(function ($) { return new RegExp($) })), this.rageclicks = new yT(L.get_config("rageclick")) }, afterDecideResponse: function (L, I) { this._setIsAutocaptureEnabled(I); var $ = I.get_config("token"); this._initializedTokens.indexOf($) > -1 ? Sa.log('autocapture already initialized for token "' + $ + '"') : (I.persistence && I.persistence.register(Jr({}, jb, !!L.autocapture_opt_out)), this._initializedTokens.push($), L && L.config && L.config.enable_collect_everything && this._isAutocaptureEnabled ? (L.custom_properties && (this._customProperties = L.custom_properties), this._addDomEventHandlers(I)) : I.__autocapture = !1) }, enabledForProject: function (L, I, $) { if (!L) return !0; I = nu(I) ? 10 : I, $ = nu($) ? 10 : $; for (var se = 0, Pe = 0; Pe < L.length; Pe++)se += L.charCodeAt(Pe); return se % I < $ }, isBrowserSupported: function () { return Xw(document.querySelectorAll) } }; (function (L) { for (var I in L) typeof L[I] == "function" && (L[I] = L[I].bind(L)) })(Cc), function (L) { for (var I in L) typeof L[I] == "function" && (L[I] = Kw(L[I])) }(Cc); var kT = "__ph_opt_in_out_"; function TT(L, I) { a5(!0, L, I) } function AT(L, I) { a5(!1, L, I) } function MT(L, I) { return i5(L, I) === "1" } function r5(L, I) { return !!function ($) { if ($ && $.respectDnt) { var se = $ && $.window || qr, Pe = se.navigator || {}, R = !1; return ji([Pe.doNotTrack, Pe.msDoNotTrack, se.doNotTrack], function (E) { Yi([!0, 1, "1", "yes"], E) && (R = !0) }), R } return !1 }(I) || i5(L, I) === "0" } function ST(L, I) { Cy(I = I || {}).remove(Ly(L, I), !!I.crossSubdomainCookie) } function Cy(L) { return (L = L || {}).persistenceType === "localStorage" ? Ka : L.persistenceType === "localStorage+cookie" ? pm : Tu } function Ly(L, I) { return ((I = I || {}).persistencePrefix || kT) + L } function i5(L, I) { return Cy(I).get(Ly(L, I)) } function a5(L, I, $) { $w(I) && I.length ? (Cy($ = $ || {}).set(Ly(I, $), L ? 1 : 0, hT($.cookieExpiration) ? $.cookieExpiration : null, $.crossSubdomainCookie, $.secureCookie), $.capture && L && $.capture($.captureEventName || "$opt_in", $.captureProperties || {}, { send_instantly: !0 })) : console.error("gdpr." + (L ? "optIn" : "optOut") + " called with an invalid token") } function o5(L, I) { var $ = !1; try { var se = L.get_config("token"), Pe = L.get_config("respect_dnt"), R = L.get_config("opt_out_capturing_persistence_type"), E = L.get_config("opt_out_capturing_cookie_prefix") || void 0, e = L.get_config("window"); se && ($ = r5(se, { respectDnt: Pe, persistenceType: R, persistencePrefix: E, window: e })) } catch (w) { I || console.error("Unexpected error when checking capturing opt-out status: " + w) } return $ } function qb(L, I, $) { return function () { for (var se = o5(L, $), Pe = arguments.length, R = new Array(Pe), E = 0; E < Pe; E++)R[E] = arguments[E]; if (!se) return I.apply(this, R); var e = R[R.length - 1]; typeof e == "function" && e(0) } } var tv = "$set", ET = function () { function L(I) { var $ = this; Ua(this, L), this._posthog = I, this.set = qb(I, function (se, Pe, R) { var E = $.set_action(se, Pe); return $._posthog.setPersonPropertiesForFlags(E.$set || {}), bf(se) && (R = Pe), $._get_config("save_referrer") && $._posthog.sessionPersistence.update_referrer_info(), E[tv] = Lo({}, vo.people_properties(), $._posthog.sessionPersistence.get_referrer_info(), E[tv]), $._send_request(E, R) }), this.set_once = qb(I, function (se, Pe, R) { var E = $.set_once_action(se, Pe); return bf(se) && (R = Pe), $._send_request(E, R) }) } return Va(L, [{ key: "toString", value: function () { return this._posthog.toString() + ".people" } }, { key: "_send_request", value: function (I, $) { I.$token = this._get_config("token"), I.$distinct_id = this._posthog.get_distinct_id(); var se = this._posthog.get_property("$device_id"), Pe = this._posthog.get_property("$user_id"), R = this._posthog.get_property("$had_persisted_distinct_id"); se && (I.$device_id = se), Pe && (I.$user_id = Pe), R && (I.$had_persisted_distinct_id = R); var E = pT(I), e = Jw(E, this._get_config("properties_string_max_length")), w = F1(JSON.stringify(E)); return this._posthog._send_request(this._get_config("api_host") + "/engage/", { data: w }, {}, this._posthog._prepare_callback($, e)), e } }, { key: "_get_config", value: function (I) { return this._posthog.get_config(I) } }, { key: "_is_reserved_property", value: function (I) { return I === "$distinct_id" || I === "$token" || I === "$device_id" || I === "$user_id" || I === "$had_persisted_distinct_id" } }, { key: "set_action", value: function (I, $) { return this.apiActionParser(tv, I, $) } }, { key: "set_once_action", value: function (I, $) { return this.apiActionParser("$set_once", I, $) } }, { key: "apiActionParser", value: function (I, $, se) { var Pe = this, R = {}, E = {}; return bf($) ? ji($, function (e, w) { Pe._is_reserved_property(w) || (E[w] = e) }) : E[$] = se, R[I] = E, R } }]), L }(), nv = "$active_feature_flags", y0 = "$override_feature_flags", Gb = "$feature_flag_payloads", Wb = function (L) { var I, $ = {}, se = nc(function (e) { for (var w = Object.keys(e), k = w.length, i = new Array(k); k--;)i[k] = [w[k], e[w[k]]]; return i }(L || {})); try { for (se.s(); !(I = se.n()).done;) { var Pe = Wc(I.value, 2), R = Pe[0], E = Pe[1]; E && ($[R] = E) } } catch (e) { se.e(e) } finally { se.f() } return $ }, CT = function () { function L(I) { Ua(this, L), this.instance = I, this._override_warning = !1, this.flagCallReported = {}, this.featureFlagEventHandlers = [], this.reloadFeatureFlagsQueued = !1, this.reloadFeatureFlagsInAction = !1 } return Va(L, [{ key: "getFlags", value: function () { return Object.keys(this.getFlagVariants()) } }, { key: "getFlagVariants", value: function () { var I = this.instance.get_property(xh), $ = this.instance.get_property(y0); if (!$) return I || {}; for (var se = Lo({}, I), Pe = Object.keys($), R = 0; R < Pe.length; R++)$[Pe[R]] === !1 ? delete se[Pe[R]] : se[Pe[R]] = $[Pe[R]]; return this._override_warning || (console.warn("[PostHog] Overriding feature flags!", { enabledFlags: I, overriddenFlags: $, finalFlags: se }), this._override_warning = !0), se } }, { key: "getFlagPayloads", value: function () { return this.instance.get_property(Gb) || {} } }, { key: "reloadFeatureFlags", value: function () { this.reloadFeatureFlagsQueued || (this.reloadFeatureFlagsQueued = !0, this._startReloadTimer()) } }, { key: "setAnonymousDistinctId", value: function (I) { this.$anon_distinct_id = I } }, { key: "setReloadingPaused", value: function (I) { this.reloadFeatureFlagsInAction = I } }, { key: "resetRequestQueue", value: function () { this.reloadFeatureFlagsQueued = !1 } }, { key: "_startReloadTimer", value: function () { var I = this; this.reloadFeatureFlagsQueued && !this.reloadFeatureFlagsInAction && setTimeout(function () { !I.reloadFeatureFlagsInAction && I.reloadFeatureFlagsQueued && (I.reloadFeatureFlagsQueued = !1, I._reloadFeatureFlagsRequest()) }, 5) } }, { key: "_reloadFeatureFlagsRequest", value: function () { var I = this; this.setReloadingPaused(!0); var $ = this.instance.get_config("token"), se = this.instance.get_property(bh), Pe = this.instance.get_property(Mc), R = F1(JSON.stringify({ token: $, distinct_id: this.instance.get_distinct_id(), groups: this.instance.getGroups(), $anon_distinct_id: this.$anon_distinct_id, person_properties: se, group_properties: Pe })); this.instance._send_request(this.instance.get_config("api_host") + "/decide/?v=3", { data: R }, { method: "POST" }, this.instance._prepare_callback(function (E) { I.$anon_distinct_id = void 0, I.receivedFeatureFlags(E), I.setReloadingPaused(!1), I._startReloadTimer() })) } }, { key: "getFeatureFlag", value: function (I) { var $ = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}; if (!this.getFlags()) return console.warn('getFeatureFlag for key "' + I + `" failed. Feature flags didn't load in time.`), !1; var se = this.getFlagVariants()[I]; return !$.send_event && "send_event" in $ || this.flagCallReported[I] || (this.flagCallReported[I] = !0, this.instance.capture("$feature_flag_called", { $feature_flag: I, $feature_flag_response: se })), se } }, { key: "getFeatureFlagPayload", value: function (I) { return this.getFlagPayloads()[I] } }, { key: "isFeatureEnabled", value: function (I) { var $ = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}; return this.getFlags() ? !!this.getFeatureFlag(I, $) : (console.warn('isFeatureEnabled for key "' + I + `" failed. Feature flags didn't load in time.`), !1) } }, { key: "addFeatureFlagsHandler", value: function (I) { this.featureFlagEventHandlers.push(I) } }, { key: "removeFeatureFlagsHandler", value: function (I) { this.featureFlagEventHandlers = this.featureFlagEventHandlers.filter(function ($) { return $ !== I }) } }, { key: "receivedFeatureFlags", value: function (I) { this.instance.decideEndpointWasHit = !0; var $ = this.getFlagVariants(), se = this.getFlagPayloads(); (function (Pe, R) { var E = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {}, e = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : {}, w = Pe.featureFlags, k = Pe.featureFlagPayloads; if (w) if (Array.isArray(w)) { var i, _ = {}; if (w) for (var y = 0; y < w.length; y++)_[w[y]] = !0; R && R.register((Jr(i = {}, nv, w), Jr(i, xh, _), i)) } else { var h, l = w, t = k; Pe.errorsWhileComputingFlags && (l = Zr(Zr({}, E), l), t = Zr(Zr({}, e), t)), R && R.register((Jr(h = {}, nv, Object.keys(Wb(l))), Jr(h, xh, l || {}), Jr(h, Gb, t || {}), h)) } })(I, this.instance.persistence, $, se), this._fireFeatureFlagsCallbacks() } }, { key: "override", value: function (I) { if (this._override_warning = !1, I === !1) this.instance.persistence.unregister(y0); else if (Array.isArray(I)) { for (var $ = {}, se = 0; se < I.length; se++)$[I[se]] = !0; this.instance.persistence.register(Jr({}, y0, $)) } else this.instance.persistence.register(Jr({}, y0, I)) } }, { key: "onFeatureFlags", value: function (I) { var $ = this; if (this.addFeatureFlagsHandler(I), this.instance.decideEndpointWasHit) { var se = this._prepareFeatureFlagsForCallbacks(), Pe = se.flags, R = se.flagVariants; I(Pe, R) } return function () { return $.removeFeatureFlagsHandler(I) } } }, { key: "updateEarlyAccessFeatureEnrollment", value: function (I, $) { var se, Pe = Jr({}, "$feature_enrollment/".concat(I), $); this.instance.capture("$feature_enrollment_update", { $feature_flag: I, $feature_enrollment: $, $set: Pe }), this.setPersonPropertiesForFlags(Pe, !1); var R = Zr(Zr({}, this.getFlagVariants()), {}, Jr({}, I, $)); this.instance.persistence.register((Jr(se = {}, nv, Object.keys(Wb(R))), Jr(se, xh, R), se)), this._fireFeatureFlagsCallbacks() } }, { key: "getEarlyAccessFeatures", value: function (I) { var $ = this, se = arguments.length > 1 && arguments[1] !== void 0 && arguments[1], Pe = this.instance.get_property(vm); if (Pe && !se) return I(Pe); this.instance._send_request("".concat(this.instance.get_config("api_host"), "/api/early_access_features/?token=").concat(this.instance.get_config("token")), {}, { method: "GET" }, function (R) { var E = R.earlyAccessFeatures; return $.instance.persistence.register(Jr({}, vm, E)), I(E) }) } }, { key: "_prepareFeatureFlagsForCallbacks", value: function () { var I = this.getFlags(), $ = this.getFlagVariants(); return { flags: I.filter(function (se) { return $[se] }), flagVariants: Object.keys($).filter(function (se) { return $[se] }).reduce(function (se, Pe) { return se[Pe] = $[Pe], se }, {}) } } }, { key: "_fireFeatureFlagsCallbacks", value: function () { var I = this._prepareFeatureFlagsForCallbacks(), $ = I.flags, se = I.flagVariants; this.featureFlagEventHandlers.forEach(function (Pe) { return Pe($, se) }) } }, { key: "setPersonPropertiesForFlags", value: function (I) { var $ = !(arguments.length > 1 && arguments[1] !== void 0) || arguments[1], se = this.instance.get_property(bh) || {}; this.instance.register(Jr({}, bh, Zr(Zr({}, se), I))), $ && this.instance.reloadFeatureFlags() } }, { key: "resetPersonPropertiesForFlags", value: function () { this.instance.unregister(bh) } }, { key: "setGroupPropertiesForFlags", value: function (I) { var $ = !(arguments.length > 1 && arguments[1] !== void 0) || arguments[1], se = this.instance.get_property(Mc) || {}; Object.keys(se).length !== 0 && Object.keys(se).forEach(function (Pe) { se[Pe] = Zr(Zr({}, se[Pe]), I[Pe]), delete I[Pe] }), this.instance.register(Jr({}, Mc, Zr(Zr({}, se), I))), $ && this.instance.reloadFeatureFlags() } }, { key: "resetGroupPropertiesForFlags", value: function (I) { if (I) { var $ = this.instance.get_property(Mc) || {}; this.instance.register(Jr({}, Mc, Zr(Zr({}, $), {}, Jr({}, I, {})))) } else this.instance.unregister(Mc) } }]), L }(), LT = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3Qgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNOCAwSDE2TDAgMTZWOEw4IDBaIiBmaWxsPSIjMkQyRDJEIi8+CjxwYXRoIGQ9Ik0xNiA4VjE2SDhMMTYgOFoiIGZpbGw9IiMyRDJEMkQiLz4KPC9zdmc+Cg==", Zb = 2, PT = 4, OT = 6, IT = "rrweb/console@1", _u, RT = "/s/"; (function (L) { L[L.Mutation = 0] = "Mutation", L[L.MouseMove = 1] = "MouseMove", L[L.MouseInteraction = 2] = "MouseInteraction", L[L.Scroll = 3] = "Scroll", L[L.ViewportResize = 4] = "ViewportResize", L[L.Input = 5] = "Input", L[L.TouchMove = 6] = "TouchMove", L[L.MediaInteraction = 7] = "MediaInteraction", L[L.StyleSheetRule = 8] = "StyleSheetRule", L[L.CanvasMutation = 9] = "CanvasMutation", L[L.Font = 10] = "Font", L[L.Log = 11] = "Log", L[L.Drag = 12] = "Drag", L[L.StyleDeclaration = 13] = "StyleDeclaration", L[L.Selection = 14] = "Selection", L[L.AdoptedStyleSheet = 15] = "AdoptedStyleSheet" })(_u || (_u = {})); var zT = [_u.MouseMove, _u.MouseInteraction, _u.Scroll, _u.ViewportResize, _u.Input, _u.TouchMove, _u.MediaInteraction, _u.Drag], DT = function () { function L(I) { Ua(this, L), Jr(this, "lastActivityTimestamp", Date.now()), Jr(this, "isIdle", !1), this.instance = I, this.captureStarted = !1, this.snapshots = [], this.emit = !1, this.endpoint = RT, this.stopRrweb = void 0, this.windowId = null, this.sessionId = null, this.receivedDecide = !1 } return Va(L, [{ key: "startRecordingIfEnabled", value: function () { this.isRecordingEnabled() ? this.startCaptureAndTrySendingQueuedSnapshots() : this.stopRecording() } }, { key: "started", value: function () { return this.captureStarted } }, { key: "stopRecording", value: function () { this.captureStarted && this.stopRrweb && (this.stopRrweb(), this.stopRrweb = void 0, this.captureStarted = !1) } }, { key: "isRecordingEnabled", value: function () { var I = !!this.instance.get_property(dm), $ = !this.instance.get_config("disable_session_recording"); return I && $ } }, { key: "isConsoleLogCaptureEnabled", value: function () { var I = !!this.instance.get_property(Ub), $ = this.instance.get_config("enable_recording_console_log"); return $ ?? I } }, { key: "getRecordingVersion", value: function () { var I, $ = this.instance.get_property(Vb); return ((I = this.instance.get_config("session_recording")) === null || I === void 0 ? void 0 : I.recorderVersion) || $ || "v1" } }, { key: "afterDecideResponse", value: function (I) { var $, se, Pe, R, E, e; this.receivedDecide = !0, this.instance.persistence && this.instance.persistence.register((Jr(E = {}, dm, !!I.sessionRecording), Jr(E, Ub, (Pe = I.sessionRecording) === null || Pe === void 0 ? void 0 : Pe.consoleLogRecordingEnabled), Jr(E, Vb, (R = I.sessionRecording) === null || R === void 0 ? void 0 : R.recorderVersion), E)), ($ = I.sessionRecording) !== null && $ !== void 0 && $.endpoint && (this.endpoint = (e = I.sessionRecording) === null || e === void 0 ? void 0 : e.endpoint), (se = I.sessionRecording) !== null && se !== void 0 && se.recorderVersion && (this.recorderVersion = I.sessionRecording.recorderVersion), this.startRecordingIfEnabled() } }, { key: "startCaptureAndTrySendingQueuedSnapshots", value: function () { var I = this; this.receivedDecide && (this.emit = !0, this.snapshots.forEach(function ($) { return I._captureSnapshot($) })), this._startCapture() } }, { key: "_startCapture", value: function () { var I = this; if (Object.assign !== void 0 && !this.captureStarted && !this.instance.get_config("disable_session_recording")) { this.captureStarted = !0, this.instance.sessionManager.checkAndGetSessionAndWindowId(); var $ = this.getRecordingVersion() === "v2" ? "recorder-v2.js" : "recorder.js"; this.instance.__loaded_recorder_version !== this.getRecordingVersion() ? Ey(this.instance.get_config("api_host") + "/static/".concat($, "?v=").concat(Su.LIB_VERSION), function (se) { if (se) return Sa.error("Could not load ".concat($), se); I._onScriptLoaded() }) : this._onScriptLoaded() } } }, { key: "_isInteractiveEvent", value: function (I) { var $; return I.type === 3 && zT.indexOf(($ = I.data) === null || $ === void 0 ? void 0 : $.source) !== -1 } }, { key: "_updateWindowAndSessionIds", value: function (I) { var $ = this._isInteractiveEvent(I); if ($ || this.isIdle || I.timestamp - this.lastActivityTimestamp > 3e5 && (this.isIdle = !0), $ && (this.lastActivityTimestamp = I.timestamp, this.isIdle && (this.isIdle = !1, this._tryTakeFullSnapshot())), !this.isIdle) { var se = this.instance.sessionManager.checkAndGetSessionAndWindowId(!$, I.timestamp), Pe = se.windowId, R = se.sessionId;[Zb, PT].indexOf(I.type) !== -1 || this.windowId === Pe && this.sessionId === R || this._tryTakeFullSnapshot(), this.windowId = Pe, this.sessionId = R } } }, { key: "_tryTakeFullSnapshot", value: function () { if (!this.captureStarted) return !1; try { var I; return (I = this.rrwebRecord) === null || I === void 0 || I.takeFullSnapshot(), !0 } catch ($) { return Sa.error("Error taking full snapshot.", $), !1 } } }, { key: "_onScriptLoaded", value: function () { var I = this, $ = { blockClass: "ph-no-capture", blockSelector: void 0, ignoreClass: "ph-ignore-input", maskTextClass: "ph-mask", maskTextSelector: void 0, maskTextFn: void 0, maskAllInputs: !0, maskInputOptions: {}, maskInputFn: void 0, slimDOMOptions: {}, collectFonts: !1, inlineStylesheet: !0, recordCrossOriginIframes: !1 }; this.rrwebRecord = window.rrweb ? window.rrweb.record : window.rrwebRecord; for (var se = this.instance.get_config("session_recording"), Pe = 0, R = Object.entries(se || {}); Pe < R.length; Pe++) { var E = Wc(R[Pe], 2), e = E[0], w = E[1]; e in $ && ($[e] = w) } this.rrwebRecord ? (this.stopRrweb = this.rrwebRecord(Zr({ emit: function (k) { I.onRRwebEmit(k) }, plugins: window.rrwebConsoleRecord && this.isConsoleLogCaptureEnabled() ? [window.rrwebConsoleRecord.getRecordConsolePlugin()] : [] }, $)), this.instance._addCaptureHook(function (k) { try { var i; k === "$pageview" && ((i = I.rrwebRecord) === null || i === void 0 || i.addCustomEvent("$pageview", { href: window.location.href })) } catch (_) { Sa.error("Could not add $pageview to rrweb session", _) } }), this.lastActivityTimestamp = Date.now(), this.isIdle = !1) : Sa.error("onScriptLoaded was called but rrwebRecord is not available. This indicates something has gone wrong.") } }, { key: "onRRwebEmit", value: function (I) { if (I = function (se) { if (se && Hc(se) === "object" && se.type === OT && Hc(se.data) === "object" && se.data.plugin === IT) { se.data.payload.payload.length > 10 && (se.data.payload.payload = se.data.payload.payload.slice(0, 10), se.data.payload.payload.push("...[truncated]")); for (var Pe = [], R = 0; R < se.data.payload.payload.length; R++)se.data.payload.payload[R] && se.data.payload.payload[R].length > 2e3 ? Pe.push(se.data.payload.payload[R].slice(0, 2e3) + "...[truncated]") : Pe.push(se.data.payload.payload[R]); return se.data.payload.payload = Pe, se } return se }(function (se) { if (se && Hc(se) === "object") { var Pe = JSON.stringify(se); if (Pe.length > 5e6) { var R, E = nc(Pe.matchAll(/data:([\w\/\-\.]+);(\w+),([^)"]*)/gim)); try { for (E.s(); !(R = E.n()).done;) { var e = R.value; Pe = e[1].toLocaleLowerCase().slice(0, 6) === "image/" ? Pe.replace(e[0], LT) : Pe.replace(e[0], "") } } catch (w) { E.e(w) } finally { E.f() } } return JSON.parse(Pe) } return se }(I)), this._updateWindowAndSessionIds(I), !this.isIdle) { var $ = { $snapshot_data: I, $session_id: this.sessionId, $window_id: this.windowId }; this.instance._captureMetrics.incr("rrweb-record"), this.instance._captureMetrics.incr("rrweb-record-".concat(I.type)), this.emit ? this._captureSnapshot($) : this.snapshots.push($) } } }, { key: "_captureSnapshot", value: function (I) { this.instance.capture("$snapshot", I, { transport: "XHR", method: "POST", endpoint: this.endpoint, _noTruncate: !0, _batchKey: "sessionRecording", _metrics: { rrweb_full_snapshot: I.$snapshot_data.type === Zb } }) } }]), L }(), xu = { entryType: 0, timeOrigin: 1, name: 2, startTime: 3, redirectStart: 4, redirectEnd: 5, workerStart: 6, fetchStart: 7, domainLookupStart: 8, domainLookupEnd: 9, connectStart: 10, secureConnectionStart: 11, connectEnd: 12, requestStart: 13, responseStart: 14, responseEnd: 15, decodedBodySize: 16, encodedBodySize: 17, initiatorType: 18, nextHopProtocol: 19, renderBlockingStatus: 20, responseStatus: 21, transferSize: 22, element: 23, renderTime: 24, loadTime: 25, size: 26, id: 27, url: 28, domComplete: 29, domContentLoadedEvent: 30, domInteractive: 31, loadEventEnd: 32, loadEventStart: 33, redirectCount: 34, navigationType: 35, unloadEventEnd: 36, unloadEventStart: 37, duration: 39, timestamp: 40 }, FT = ["first-input", "navigation", "paint", "resource"], BT = ["/s/", "/e/"], NT = function () { function L(I) { Ua(this, L), Jr(this, "_forceAllowLocalhost", !1), this.instance = I } return Va(L, [{ key: "startObservingIfEnabled", value: function () { this.isEnabled() ? this.startObserving() : this.stopObserving() } }, { key: "startObserving", value: function () { var I, $, se = this; if (!this.observer) if (((I = window) === null || I === void 0 || ($ = I.PerformanceObserver) === null || $ === void 0 ? void 0 : $.supportedEntryTypes) !== void 0) if (!cT.includes(location.hostname) || this._forceAllowLocalhost) try { this.observer = new PerformanceObserver(function (R) { R.getEntries().forEach(function (E) { se._capturePerformanceEvent(E) }) }); var Pe = PerformanceObserver.supportedEntryTypes.filter(function (R) { return FT.includes(R) }); Pe.forEach(function (R) { var E; (E = se.observer) === null || E === void 0 || E.observe({ type: R, buffered: !0 }) }) } catch (R) { console.error("PostHog failed to start performance observer", R), this.stopObserving() } else Sa.log("PostHog Peformance observer not started because we are on localhost."); else Sa.log("PostHog Performance observer not started because PerformanceObserver is not supported by this browser.") } }, { key: "stopObserving", value: function () { this.observer && (this.observer.disconnect(), this.observer = void 0) } }, { key: "isObserving", value: function () { return !!this.observer } }, { key: "isEnabled", value: function () { var I, $; return (I = ($ = this.instance.get_config("capture_performance")) !== null && $ !== void 0 ? $ : this.remoteEnabled) !== null && I !== void 0 && I } }, { key: "afterDecideResponse", value: function (I) { this.remoteEnabled = I.capturePerformance || !1, this.isEnabled() && this.startObserving() } }, { key: "_capturePerformanceEvent", value: function (I) { if (I.name.indexOf(this.instance.get_config("api_host")) === 0) { var $ = I.name.replace(this.instance.get_config("api_host"), ""); if (BT.find(function (h) { return $.indexOf(h) === 0 })) return } var se = { url: I.name }, Pe = this.instance.get_config("session_recording"); if (Pe.maskNetworkRequestFn && (se = Pe.maskNetworkRequestFn(se)), se) { var R = I.toJSON(); R.name = se.url; var E = {}, e = Math.floor(Date.now() - performance.now()); for (var w in E[xu.timeOrigin] = e, E[xu.timestamp] = Math.floor(e + I.startTime), xu) R[w] !== void 0 && (E[xu[w]] = R[w]); if (this.capturePerformanceEvent(E), jT(I)) { var k, i = nc(I.serverTiming || []); try { for (i.s(); !(k = i.n()).done;) { var _, y = k.value; this.capturePerformanceEvent((Jr(_ = {}, xu.timeOrigin, e), Jr(_, xu.timestamp, Math.floor(e + I.startTime)), Jr(_, xu.name, y.name), Jr(_, xu.duration, y.duration), Jr(_, xu.entryType, "serverTiming"), _)) } } catch (h) { i.e(h) } finally { i.f() } } } } }, { key: "capturePerformanceEvent", value: function (I) { var $, se = I[xu.timestamp]; ($ = this.instance.sessionRecording) === null || $ === void 0 || $.onRRwebEmit({ type: 6, data: { plugin: "posthog/network@1", payload: I }, timestamp: se }) } }]), L }(), jT = function (L) { return L.entryType === "navigation" || L.entryType === "resource" }, UT = function () { function L(I) { Ua(this, L), this.instance = I, this.instance.decideEndpointWasHit = this.instance._hasBootstrappedFeatureFlags() } return Va(L, [{ key: "call", value: function () { var I = this, $ = F1(JSON.stringify({ token: this.instance.get_config("token"), distinct_id: this.instance.get_distinct_id(), groups: this.instance.getGroups(), person_properties: this.instance.get_property(bh), group_properties: this.instance.get_property(Mc) })); this.instance._send_request("".concat(this.instance.get_config("api_host"), "/decide/?v=3"), { data: $, verbose: !0 }, { method: "POST" }, function (se) { return I.parseDecideResponse(se) }) } }, { key: "parseDecideResponse", value: function (I) { var $, se, Pe, R = this; if ((I == null ? void 0 : I.status) !== 0) { if (this.instance.decideEndpointWasHit = !0, !document || !document.body) return console.log("document not ready yet, trying again in 500 milliseconds..."), void setTimeout(function () { R.parseDecideResponse(I) }, 500); if (this.instance.toolbar.afterDecideResponse(I), ($ = this.instance.sessionRecording) === null || $ === void 0 || $.afterDecideResponse(I), Cc.afterDecideResponse(I, this.instance), (se = this.instance.webPerformance) === null || se === void 0 || se.afterDecideResponse(I), (Pe = this.instance.exceptionAutocapture) === null || Pe === void 0 || Pe.afterDecideResponse(I), this.instance.featureFlags.receivedFeatureFlags(I), this.instance.compression = {}, I.supportedCompression && !this.instance.get_config("disable_compression")) { var E, e = {}, w = nc(I.supportedCompression); try { for (w.s(); !(E = w.n()).done;)e[E.value] = !0 } catch (h) { w.e(h) } finally { w.f() } this.instance.compression = e } if (I.siteApps) if (this.instance.get_config("opt_in_site_apps")) { var k, i = this.instance.get_config("api_host"), _ = nc(I.siteApps); try { var y = function () { var h = k.value, l = h.id, t = h.url, o = [i, i[i.length - 1] === "/" && t[0] === "/" ? t.substring(1) : t].join(""); window["__$$ph_site_app_".concat(l)] = R.instance, Ey(o, function (r) { r && console.error("Error while initializing PostHog app with config id ".concat(l), r) }) }; for (_.s(); !(k = _.n()).done;)y() } catch (h) { _.e(h) } finally { _.f() } } else I.siteApps.length > 0 && console.error('PostHog site apps are disabled. Enable the "opt_in_site_apps" config to proceed.') } else console.error("Failed to fetch feature flags from PostHog.") } }]), L }(), VT = ["https://app.posthog.com", "https://eu.posthog.com"], HT = ["source"], qT = function () { function L(I) { Ua(this, L), this.instance = I } return Va(L, [{ key: "afterDecideResponse", value: function (I) { var $ = I.toolbarParams || I.editorParams || (I.toolbarVersion ? { toolbarVersion: I.toolbarVersion } : {}); I.isAuthenticated && $.toolbarVersion && $.toolbarVersion.indexOf("toolbar") === 0 && this.loadToolbar(Zr({}, $)) } }, { key: "maybeLoadToolbar", value: function () { var I = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : window.location, $ = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : void 0, se = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : window.history; try { if (!$) { try { window.localStorage.setItem("test", "test"), window.localStorage.removeItem("test") } catch { return !1 } $ = window.localStorage } var Pe, R = Db(I.hash, "__posthog") || Db(I.hash, "state"), E = R ? JSON.parse(decodeURIComponent(R)) : null; return E && E.action === "ph_authorize" ? ((Pe = E).source = "url", Pe && Object.keys(Pe).length > 0 && (E.desiredHash ? I.hash = E.desiredHash : se ? se.replaceState("", document.title, I.pathname + I.search) : I.hash = "")) : ((Pe = JSON.parse($.getItem("_postHogToolbarParams") || "{}")).source = "localstorage", delete Pe.userIntent), !(!Pe.token || this.instance.get_config("token") !== Pe.token) && (this.loadToolbar(Pe), !0) } catch { return !1 } } }, { key: "loadToolbar", value: function (I) { var $ = this; if (window._postHogToolbarLoaded) return !1; window._postHogToolbarLoaded = !0; var se = this.instance.get_config("api_host"), Pe = 3e4 * Math.floor(Date.now() / 3e4), R = "".concat(se).concat(se.endsWith("/") ? "" : "/", "static/toolbar.js?_ts=").concat(Pe), E = !VT.includes(this.instance.get_config("api_host")) && this.instance.get_config("advanced_disable_toolbar_metrics"), e = Zr(Zr({ token: this.instance.get_config("token") }, I), {}, { apiURL: se }, E ? { instrument: !1 } : {}); e.source; var w = rT(e, HT); return window.localStorage.setItem("_postHogToolbarParams", JSON.stringify(w)), Ey(R, function (k) { k ? Sa.error("Failed to load toolbar", k) : (window.ph_load_toolbar || window.ph_load_editor)(e, $.instance) }), jp(window, "turbolinks:load", function () { window._postHogToolbarLoaded = !1, $.loadToolbar(e) }), !0 } }, { key: "_loadEditor", value: function (I) { return this.loadToolbar(I) } }, { key: "maybeLoadEditor", value: function () { var I = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : window.location, $ = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : void 0, se = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : window.history; return this.maybeLoadToolbar(I, $, se) } }]), L }(), s5 = function () { function L() { var I = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : 3e3; Ua(this, L), this.isPolling = !0, this._event_queue = [], this._empty_queue_count = 0, this._poller = void 0, this._pollInterval = I } return Va(L, [{ key: "setPollInterval", value: function (I) { this._pollInterval = I, this.isPolling && this.poll() } }, { key: "poll", value: function () { } }, { key: "unload", value: function () { } }, { key: "getTime", value: function () { return new Date().getTime() } }]), L }(), GT = function (L) { qw($, s5); var I = Gw($); function $(se, Pe) { var R, E = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : 3e3; return Ua(this, $), (R = I.call(this, E)).handlePollRequest = Pe, R.captureMetrics = se, R } return Va($, [{ key: "enqueue", value: function (se, Pe, R) { this.captureMetrics.incr("batch-enqueue"), this._event_queue.push({ url: se, data: Pe, options: R }), this.isPolling || (this.isPolling = !0, this.poll()) } }, { key: "poll", value: function () { var se = this; clearTimeout(this._poller), this._poller = setTimeout(function () { if (se._event_queue.length > 0) { var Pe = se.formatQueue(), R = function (e) { var w = Pe[e], k = w.url, i = w.data, _ = w.options; ji(i, function (y, h) { i[h].offset = Math.abs(i[h].timestamp - se.getTime()), delete i[h].timestamp }), se.handlePollRequest(k, i, _), se.captureMetrics.incr("batch-requests"), se.captureMetrics.incr("batch-requests-".concat(k.slice(k.length - 2))), se.captureMetrics.incr("batch-handle", i.length), se.captureMetrics.incr("batch-handle-".concat(k.slice(k.length - 2)), i.length) }; for (var E in Pe) R(E); se._event_queue.length = 0, se._empty_queue_count = 0 } else se._empty_queue_count++; se._empty_queue_count > 4 && (se.isPolling = !1, se._empty_queue_count = 0), se.isPolling && se.poll() }, this._pollInterval) } }, { key: "updateUnloadMetrics", value: function () { var se = this.formatQueue(); for (var Pe in se) { var R = se[Pe], E = R.url, e = R.data; this.captureMetrics.incr("batch-unload-requests"), this.captureMetrics.incr("batch-unload-requests-".concat(E.slice(E.length - 2))), this.captureMetrics.incr("batch-unload", e.length), this.captureMetrics.incr("batch-unload-".concat(E.slice(E.length - 2)), e.length) } } }, { key: "unload", value: function () { var se = this; clearTimeout(this._poller); var Pe = this._event_queue.length > 0 ? this.formatQueue() : {}; this._event_queue.length = 0; var R = Object.values(Pe);[].concat(um(R.filter(function (E) { return E.url.indexOf("/e") === 0 })), um(R.filter(function (E) { return E.url.indexOf("/e") !== 0 }))).map(function (E) { var e = E.url, w = E.data, k = E.options; se.handlePollRequest(e, w, Zr(Zr({}, k), {}, { transport: "sendBeacon" })) }) } }, { key: "formatQueue", value: function () { var se = {}; return ji(this._event_queue, function (Pe) { var R = Pe.url, E = Pe.data, e = Pe.options, w = (e ? e._batchKey : null) || R; se[w] === void 0 && (se[w] = { data: [], url: R, options: e }), e && se[w].options && se[w].options._metrics && !se[w].options._metrics.rrweb_full_snapshot && (se[w].options._metrics.rrweb_full_snapshot = e._metrics.rrweb_full_snapshot), se[w].data.push(E) }), se } }]), $ }(), WT = function () { function L(I) { Ua(this, L), this.enabled = I, this.metrics = {} } return Va(L, [{ key: "incr", value: function (I) { var $ = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 1; this.enabled && (I = "phjs-".concat(I), this.metrics[I] = (this.metrics[I] || 0) + $) } }, { key: "decr", value: function (I) { this.enabled && (I = "phjs-".concat(I), this.metrics[I] = (this.metrics[I] || 0) - 1) } }]), L }(), fl = Uint8Array, gs = Uint16Array, zh = Uint32Array, Py = new fl([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 0, 0, 0]), Oy = new fl([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 0, 0]), Yb = new fl([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]), l5 = function (L, I) { for (var $ = new gs(31), se = 0; se < 31; ++se)$[se] = I += 1 << L[se - 1]; var Pe = new zh($[30]); for (se = 1; se < 30; ++se)for (var R = $[se]; R < $[se + 1]; ++R)Pe[R] = R - $[se] << 5 | se; return [$, Pe] }, u5 = l5(Py, 2), ZT = u5[0], xm = u5[1]; ZT[28] = 258, xm[258] = 28; for (var Xb = l5(Oy, 0)[1], bm = new gs(32768), ha = 0; ha < 32768; ++ha) { var cf = (43690 & ha) >>> 1 | (21845 & ha) << 1; cf = (61680 & (cf = (52428 & cf) >>> 2 | (13107 & cf) << 2)) >>> 4 | (3855 & cf) << 4, bm[ha] = ((65280 & cf) >>> 8 | (255 & cf) << 8) >>> 1 } var Up = function (L, I, $) { for (var se = L.length, Pe = 0, R = new gs(I); Pe < se; ++Pe)++R[L[Pe] - 1]; var E, e = new gs(I); for (Pe = 0; Pe < I; ++Pe)e[Pe] = e[Pe - 1] + R[Pe - 1] << 1; if ($) { E = new gs(1 << I); var w = 15 - I; for (Pe = 0; Pe < se; ++Pe)if (L[Pe]) for (var k = Pe << 4 | L[Pe], i = I - L[Pe], _ = e[L[Pe] - 1]++ << i, y = _ | (1 << i) - 1; _ <= y; ++_)E[bm[_] >>> w] = k } else for (E = new gs(se), Pe = 0; Pe < se; ++Pe)E[Pe] = bm[e[L[Pe] - 1]++] >>> 15 - L[Pe]; return E }, Ef = new fl(288); for (ha = 0; ha < 144; ++ha)Ef[ha] = 8; for (ha = 144; ha < 256; ++ha)Ef[ha] = 9; for (ha = 256; ha < 280; ++ha)Ef[ha] = 7; for (ha = 280; ha < 288; ++ha)Ef[ha] = 8; var y1 = new fl(32); for (ha = 0; ha < 32; ++ha)y1[ha] = 5; var df, $b, Kb, YT = Up(Ef, 9, 0), XT = Up(y1, 5, 0), c5 = function (L) { return (L / 8 >> 0) + (7 & L && 1) }, f5 = function (L, I, $) { (I == null || I < 0) && (I = 0), ($ == null || $ > L.length) && ($ = L.length); var se = new (L instanceof gs ? gs : L instanceof zh ? zh : fl)($ - I); return se.set(L.subarray(I, $)), se }, Vu = function (L, I, $) { $ <<= 7 & I; var se = I / 8 >> 0; L[se] |= $, L[se + 1] |= $ >>> 8 }, Tp = function (L, I, $) { $ <<= 7 & I; var se = I / 8 >> 0; L[se] |= $, L[se + 1] |= $ >>> 8, L[se + 2] |= $ >>> 16 }, rv = function (L, I) { for (var $ = [], se = 0; se < L.length; ++se)L[se] && $.push({ s: se, f: L[se] }); var Pe = $.length, R = $.slice(); if (!Pe) return [new fl(0), 0]; if (Pe == 1) { var E = new fl($[0].s + 1); return E[$[0].s] = 1, [E, 1] } $.sort(function (u, p) { return u.f - p.f }), $.push({ s: -1, f: 25001 }); var e = $[0], w = $[1], k = 0, i = 1, _ = 2; for ($[0] = { s: -1, f: e.f + w.f, l: e, r: w }; i != Pe - 1;)e = $[$[k].f < $[_].f ? k++ : _++], w = $[k != i && $[k].f < $[_].f ? k++ : _++], $[i++] = { s: -1, f: e.f + w.f, l: e, r: w }; var y = R[0].s; for (se = 1; se < Pe; ++se)R[se].s > y && (y = R[se].s); var h = new gs(y + 1), l = $T($[i - 1], h, 0); if (l > I) { se = 0; var t = 0, o = l - I, r = 1 << o; for (R.sort(function (u, p) { return h[p.s] - h[u.s] || u.f - p.f }); se < Pe; ++se) { var n = R[se].s; if (!(h[n] > I)) break; t += r - (1 << l - h[n]), h[n] = I } for (t >>>= o; t > 0;) { var a = R[se].s; h[a] < I ? t -= 1 << I - h[a]++ - 1 : ++se } for (; se >= 0 && t; --se) { var s = R[se].s; h[s] == I && (--h[s], ++t) } l = I } return [new fl(h), l] }, $T = function L(I, $, se) { return I.s == -1 ? Math.max(L(I.l, $, se + 1), L(I.r, $, se + 1)) : $[I.s] = se }, Jb = function (L) { for (var I = L.length; I && !L[--I];); for (var $ = new gs(++I), se = 0, Pe = L[0], R = 1, E = function (w) { $[se++] = w }, e = 1; e <= I; ++e)if (L[e] == Pe && e != I) ++R; else { if (!Pe && R > 2) { for (; R > 138; R -= 138)E(32754); R > 2 && (E(R > 10 ? R - 11 << 5 | 28690 : R - 3 << 5 | 12305), R = 0) } else if (R > 3) { for (E(Pe), --R; R > 6; R -= 6)E(8304); R > 2 && (E(R - 3 << 5 | 8208), R = 0) } for (; R--;)E(Pe); R = 1, Pe = L[e] } return [$.subarray(0, se), I] }, Ap = function (L, I) { for (var $ = 0, se = 0; se < I.length; ++se)$ += L[se] * I[se]; return $ }, N0 = function (L, I, $) { var se = $.length, Pe = c5(I + 2); L[Pe] = 255 & se, L[Pe + 1] = se >>> 8, L[Pe + 2] = 255 ^ L[Pe], L[Pe + 3] = 255 ^ L[Pe + 1]; for (var R = 0; R < se; ++R)L[Pe + R + 4] = $[R]; return 8 * (Pe + 4 + se) }, Qb = function (L, I, $, se, Pe, R, E, e, w, k, i) { Vu(I, i++, $), ++Pe[256]; for (var _ = rv(Pe, 15), y = _[0], h = _[1], l = rv(R, 15), t = l[0], o = l[1], r = Jb(y), n = r[0], a = r[1], s = Jb(t), u = s[0], p = s[1], c = new gs(19), b = 0; b < n.length; ++b)c[31 & n[b]]++; for (b = 0; b < u.length; ++b)c[31 & u[b]]++; for (var g = rv(c, 7), f = g[0], v = g[1], m = 19; m > 4 && !f[Yb[m - 1]]; --m); var x, T, d, M, A = k + 5 << 3, C = Ap(Pe, Ef) + Ap(R, y1) + E, P = Ap(Pe, y) + Ap(R, t) + E + 14 + 3 * m + Ap(c, f) + (2 * c[16] + 3 * c[17] + 7 * c[18]); if (A <= C && A <= P) return N0(I, i, L.subarray(w, w + k)); if (Vu(I, i, 1 + (P < C)), i += 2, P < C) { x = Up(y, h, 0), T = y, d = Up(t, o, 0), M = t; var O = Up(f, v, 0); for (Vu(I, i, a - 257), Vu(I, i + 5, p - 1), Vu(I, i + 10, m - 4), i += 14, b = 0; b < m; ++b)Vu(I, i + 3 * b, f[Yb[b]]); i += 3 * m; for (var z = [n, u], B = 0; B < 2; ++B) { var Y = z[B]; for (b = 0; b < Y.length; ++b) { var D = 31 & Y[b]; Vu(I, i, O[D]), i += f[D], D > 15 && (Vu(I, i, Y[b] >>> 5 & 127), i += Y[b] >>> 12) } } } else x = YT, T = Ef, d = XT, M = y1; for (b = 0; b < e; ++b)if (se[b] > 255) { D = se[b] >>> 18 & 31, Tp(I, i, x[D + 257]), i += T[D + 257], D > 7 && (Vu(I, i, se[b] >>> 23 & 31), i += Py[D]); var G = 31 & se[b]; Tp(I, i, d[G]), i += M[G], G > 3 && (Tp(I, i, se[b] >>> 5 & 8191), i += Oy[G]) } else Tp(I, i, x[se[b]]), i += T[se[b]]; return Tp(I, i, x[256]), i + T[256] }, KT = new zh([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]), JT = new fl(0), QT = function () { for (var L = new zh(256), I = 0; I < 256; ++I) { for (var $ = I, se = 9; --se;)$ = (1 & $ && 3988292384) ^ $ >>> 1; L[I] = $ } return L }(), e7 = function () { var L = 4294967295; return { p: function (I) { for (var $ = L, se = 0; se < I.length; ++se)$ = QT[255 & $ ^ I[se]] ^ $ >>> 8; L = $ }, d: function () { return 4294967295 ^ L } } }, t7 = function (L, I, $, se, Pe) { return function (R, E, e, w, k, i) { var _ = R.length, y = new fl(w + _ + 5 * (1 + Math.floor(_ / 7e3)) + k), h = y.subarray(w, y.length - k), l = 0; if (!E || _ < 8) for (var t = 0; t <= _; t += 65535) { var o = t + 65535; o < _ ? l = N0(h, l, R.subarray(t, o)) : (h[t] = i, l = N0(h, l, R.subarray(t, _))) } else { for (var r = KT[E - 1], n = r >>> 13, a = 8191 & r, s = (1 << e) - 1, u = new gs(32768), p = new gs(s + 1), c = Math.ceil(e / 3), b = 2 * c, g = function (ue) { return (R[ue] ^ R[ue + 1] << c ^ R[ue + 2] << b) & s }, f = new zh(25e3), v = new gs(288), m = new gs(32), x = 0, T = 0, d = (t = 0, 0), M = 0, A = 0; t < _; ++t) { var C = g(t), P = 32767 & t, O = p[C]; if (u[P] = O, p[C] = P, M <= t) { var z = _ - t; if ((x > 7e3 || d > 24576) && z > 423) { l = Qb(R, h, 0, f, v, m, T, d, A, t - A, l), d = x = T = 0, A = t; for (var B = 0; B < 286; ++B)v[B] = 0; for (B = 0; B < 30; ++B)m[B] = 0 } var Y = 2, D = 0, G = a, V = P - O & 32767; if (z > 2 && C == g(t - V)) for (var j = Math.min(n, z) - 1, W = Math.min(32767, t), Z = Math.min(258, z); V <= W && --G && P != O;) { if (R[t + Y] == R[t + Y - V]) { for (var ie = 0; ie < Z && R[t + ie] == R[t + ie - V]; ++ie); if (ie > Y) { if (Y = ie, D = V, ie > j) break; var te = Math.min(V, ie - 2), J = 0; for (B = 0; B < te; ++B) { var X = t - V + B + 32768 & 32767, ee = X - u[X] + 32768 & 32767; ee > J && (J = ee, O = X) } } } V += (P = O) - (O = u[P]) + 32768 & 32767 } if (D) { f[d++] = 268435456 | xm[Y] << 18 | Xb[D]; var re = 31 & xm[Y], oe = 31 & Xb[D]; T += Py[re] + Oy[oe], ++v[257 + re], ++m[oe], M = t + Y, ++x } else f[d++] = R[t], ++v[R[t]] } } l = Qb(R, h, i, f, v, m, T, d, A, t - A, l), i || (l = N0(h, l, JT)) } return f5(y, 0, w + c5(l) + k) }(L, I.level == null ? 6 : I.level, I.mem == null ? Math.ceil(1.5 * Math.max(8, Math.min(13, Math.log(L.length)))) : 12 + I.mem, $, se, !Pe) }, _m = function (L, I, $) { for (; $; ++I)L[I] = $, $ >>>= 8 }, n7 = function (L, I) { var $ = I.filename; if (L[0] = 31, L[1] = 139, L[2] = 8, L[8] = I.level < 2 ? 4 : I.level == 9 ? 2 : 0, L[9] = 3, I.mtime != 0 && _m(L, 4, Math.floor(new Date(I.mtime || Date.now()) / 1e3)), $) { L[3] = 8; for (var se = 0; se <= $.length; ++se)L[se + 10] = $.charCodeAt(se) } }, r7 = function (L) { return 10 + (L.filename && L.filename.length + 1 || 0) }; function i7(L, I) { I === void 0 && (I = {}); var $ = e7(), se = L.length; $.p(L); var Pe = t7(L, I, r7(I), 8), R = Pe.length; return n7(Pe, I), _m(Pe, R - 8, $.d()), _m(Pe, R - 4, se), Pe } function a7(L, I) { var $ = L.length; if (!I && typeof TextEncoder < "u") return new TextEncoder().encode(L); for (var se = new fl(L.length + (L.length >>> 1)), Pe = 0, R = function (k) { se[Pe++] = k }, E = 0; E < $; ++E) { if (Pe + 5 > se.length) { var e = new fl(Pe + 8 + ($ - E << 1)); e.set(se), se = e } var w = L.charCodeAt(E); w < 128 || I ? R(w) : w < 2048 ? (R(192 | w >>> 6), R(128 | 63 & w)) : w > 55295 && w < 57344 ? (R(240 | (w = 65536 + (1047552 & w) | 1023 & L.charCodeAt(++E)) >>> 18), R(128 | w >>> 12 & 63), R(128 | w >>> 6 & 63), R(128 | 63 & w)) : (R(224 | w >>> 12), R(128 | w >>> 6 & 63), R(128 | 63 & w)) } return f5(se, 0, Pe) } (function (L) { L.GZipJS = "gzip-js", L.Base64 = "base64" })(df || (df = {})), function (L) { L.Popover = "Popover", L.Button = "Button", L.Email = "Email", L.FullScreen = "Fullscreen" }($b || ($b = {})), function (L) { L.Open = "open", L.MultipleChoiceSingle = "multiple_single", L.MultipleChoiceMulti = "multiple_multi", L.NPS = "nps", L.Rating = "rating", L.Link = "link" }(Kb || (Kb = {})); var o7 = function (L, I, $) { var se = I || {}; se.ip = $.ip ? 1 : 0, se._ = new Date().getTime().toString(), se.ver = Su.LIB_VERSION; var Pe = L.split("?"); if (Pe.length > 1) { var R, E = nc(Pe[1].split("&")); try { for (E.s(); !(R = E.n()).done;) { var e = R.value.split("=")[0]; se[e] && delete se[e] } } catch (k) { E.e(k) } finally { E.f() } } var w = L.indexOf("?") > -1 ? "&" : "?"; return L + w + function (k) { var i, _, y = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : "&", h = []; return ji(k, function (l, t) { i = encodeURIComponent(l.toString()), _ = encodeURIComponent(t), h[h.length] = _ + "=" + i }), h.join(y) }(se) }, Iy = function L(I, $) { if ($.blob && I.buffer) return new Blob([I.buffer], { type: "text/plain" }); if ($.sendBeacon || $.blob) { var se = L(I, { method: "POST" }); return new Blob([se], { type: "application/x-www-form-urlencoded" }) } if ($.method !== "POST") return null; var Pe, R; return Pe = Array.isArray(I) || (R = I, Object.prototype.toString.call(R) === "[object Uint8Array]") ? "data=" + encodeURIComponent(I) : "data=" + encodeURIComponent(I.data), "compression" in I && I.compression && (Pe += "&compression=" + I.compression), Pe }, h5 = function (L) { var I = L.url, $ = L.data, se = L.headers, Pe = L.options, R = L.captureMetrics, E = L.callback, e = L.retriesPerformedSoFar, w = L.retryQueue, k = L.onXHRError, i = L.timeout, _ = i === void 0 ? 1e4 : i, y = new XMLHttpRequest; y.open(Pe.method || "GET", I, !0); var h = Iy($, Pe); R.incr("_send_request"), R.incr("_send_request_inflight"), ji(se, function (l, t) { y.setRequestHeader(t, l) }), Pe.method !== "POST" || Pe.blob || y.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"), y.timeout = _, y.withCredentials = !0, y.onreadystatechange = function () { if (y.readyState === 4) if (R.incr("xhr-response"), R.incr("xhr-response-".concat(y.status)), R.decr("_send_request_inflight"), y.status === 200) { if (E) { var l; try { l = JSON.parse(y.responseText) } catch (t) { return void Sa.error(t) } E(l) } } else typeof k == "function" && k(y), [401, 403, 404, 500].indexOf(y.status) < 0 && w.enqueue({ url: I, data: $, options: Pe, headers: se, retriesPerformedSoFar: (e || 0) + 1, callback: E }), E && E({ status: 0 }) }, y.send(h) }, s7 = 18e5, l7 = function (L) { qw($, s5); var I = Gw($); function $(se, Pe) { var R; return Ua(this, $), (R = I.call(this)).captureMetrics = se, R.isPolling = !1, R.queue = [], R.areWeOnline = !0, R.onXHRError = Pe, typeof window < "u" && "onLine" in window.navigator && (R.areWeOnline = window.navigator.onLine, window.addEventListener("online", function () { R._handleWeAreNowOnline() }), window.addEventListener("offline", function () { R.areWeOnline = !1 })), R } return Va($, [{ key: "enqueue", value: function (se) { var Pe = se.retriesPerformedSoFar || 0; if (!(Pe >= 10)) { var R = function (e) { var w = 3e3 * Math.pow(2, e), k = w / 2, i = Math.min(s7, w), _ = (Math.random() - .5) * (i - k); return Math.ceil(i + _) }(Pe), E = new Date(Date.now() + R); this.queue.push({ retryAt: E, requestData: se }), console.warn("Enqueued failed request for retry in ".concat(R)), this.isPolling || (this.isPolling = !0, this.poll()) } } }, { key: "poll", value: function () { var se = this; this._poller && clearTimeout(this._poller), this._poller = setTimeout(function () { se.areWeOnline && se.queue.length > 0 && se.flush(), se.poll() }, this._pollInterval) } }, { key: "flush", value: function () { var se = new Date(Date.now()), Pe = this.queue.filter(function (w) { return w.retryAt < se }); if (Pe.length > 0) { this.queue = this.queue.filter(function (w) { return w.retryAt >= se }); var R, E = nc(Pe); try { for (E.s(); !(R = E.n()).done;) { var e = R.value.requestData; this._executeXhrRequest(e) } } catch (w) { E.e(w) } finally { E.f() } } } }, { key: "unload", value: function () { this._poller && (clearTimeout(this._poller), this._poller = void 0); var se, Pe = nc(this.queue); try { for (Pe.s(); !(se = Pe.n()).done;) { var R = se.value.requestData, E = R.url, e = R.data, w = R.options; try { window.navigator.sendBeacon(E, Iy(e, Zr(Zr({}, w), {}, { sendBeacon: !0 }))) } catch (k) { Su.DEBUG && console.error(k) } } } catch (k) { Pe.e(k) } finally { Pe.f() } this.queue = [] } }, { key: "_executeXhrRequest", value: function (se) { var Pe = se.url, R = se.data, E = se.options, e = se.headers, w = se.callback, k = se.retriesPerformedSoFar; h5({ url: Pe, data: R || {}, options: E || {}, headers: e || {}, retriesPerformedSoFar: k || 0, callback: w, captureMetrics: this.captureMetrics, retryQueue: this, onXHRError: this.onXHRError }) } }, { key: "_handleWeAreNowOnline", value: function () { this.areWeOnline = !0, this.flush() } }]), $ }(), u7 = 18e5, c7 = 864e5, f7 = function () { function L(I, $) { Ua(this, L), this.config = I, this.persistence = $, this._windowId = void 0, this._sessionId = void 0, this._sessionStartTimestamp = null, this._sessionActivityTimestamp = null; var se = I.persistence_name || I.token; if (this.window_id_storage_key = "ph_" + se + "_window_id", this.primary_window_exists_storage_key = "ph_" + se + "_primary_window_exists", this._canUseSessionStorage()) { var Pe = Oo.parse(this.window_id_storage_key), R = Oo.parse(this.primary_window_exists_storage_key); Pe && !R ? this._windowId = Pe : Oo.remove(this.window_id_storage_key), Oo.set(this.primary_window_exists_storage_key, !0) } this._listenToReloadWindow() } return Va(L, [{ key: "_canUseSessionStorage", value: function () { return this.config.persistence !== "memory" && !this.persistence.disabled && Oo.is_supported() } }, { key: "_setWindowId", value: function (I) { I !== this._windowId && (this._windowId = I, this._canUseSessionStorage() && Oo.set(this.window_id_storage_key, I)) } }, { key: "_getWindowId", value: function () { return this._windowId ? this._windowId : this._canUseSessionStorage() ? Oo.parse(this.window_id_storage_key) : null } }, { key: "_setSessionId", value: function (I, $, se) { I === this._sessionId && $ === this._sessionActivityTimestamp && se === this._sessionStartTimestamp || (this._sessionStartTimestamp = se, this._sessionActivityTimestamp = $, this._sessionId = I, this.persistence.register(Jr({}, gm, [$, I, se]))) } }, { key: "_getSessionId", value: function () { if (this._sessionId && this._sessionActivityTimestamp && this._sessionStartTimestamp) return [this._sessionActivityTimestamp, this._sessionId, this._sessionStartTimestamp]; var I = this.persistence.props[gm]; return Array.isArray(I) && I.length === 2 && I.push(I[0]), I || [0, null, 0] } }, { key: "resetSessionId", value: function () { this._setSessionId(null, null, null) } }, { key: "_listenToReloadWindow", value: function () { var I = this; window.addEventListener("beforeunload", function () { I._canUseSessionStorage() && Oo.remove(I.primary_window_exists_storage_key) }) } }, { key: "checkAndGetSessionAndWindowId", value: function () { var I = arguments.length > 0 && arguments[0] !== void 0 && arguments[0], $ = (arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : null) || new Date().getTime(), se = Wc(this._getSessionId(), 3), Pe = se[0], R = se[1], E = se[2], e = this._getWindowId(), w = E && E > 0 && Math.abs($ - E) > c7; !R || !I && Math.abs($ - Pe) > u7 || w ? (R = Xu(), e = Xu(), E = $) : e || (e = Xu()); var k = Pe === 0 || !I || w ? $ : Pe, i = E === 0 ? new Date().getTime() : E; return this._setWindowId(e), this._setSessionId(R, k, i), { sessionId: R, windowId: e } } }]), L }(), h7 = Va(function L(I, $, se, Pe) { Ua(this, L), this.name = "posthog-js", this.setupOnce = function (R) { R(function (E) { var e, w, k, i, _; if (E.level !== "error" || !I.__loaded) return E; E.tags || (E.tags = {}); var y = I.config.ui_host || I.config.api_host; E.tags["PostHog Person URL"] = y + "/person/" + I.get_distinct_id(), I.sessionRecordingStarted() && (E.tags["PostHog Recording URL"] = I.get_session_replay_url({ withTimestamp: !0 })); var h = ((e = E.exception) === null || e === void 0 ? void 0 : e.values) || [], l = { $exception_message: (w = h[0]) === null || w === void 0 ? void 0 : w.value, $exception_type: (k = h[0]) === null || k === void 0 ? void 0 : k.type, $exception_personURL: y + "/person/" + I.get_distinct_id(), $sentry_event_id: E.event_id, $sentry_exception: E.exception, $sentry_exception_message: (i = h[0]) === null || i === void 0 ? void 0 : i.value, $sentry_exception_type: (_ = h[0]) === null || _ === void 0 ? void 0 : _.type, $sentry_tags: E.tags }; return $ && se && (l.$sentry_url = (Pe || "https://sentry.io/organizations/") + $ + "/issues/?project=" + se + "&query=" + E.event_id), I.capture("$exception", l), E }) } }), p7 = function (L) { Promise && Promise.resolve || console.warn("This browser does not have Promise support, and can not use the segment integration"); var I = function ($, se) { $.event.userId || $.event.anonymousId === L.get_distinct_id() || L.reset(), $.event.userId && $.event.userId !== L.get_distinct_id() && (L.register({ distinct_id: $.event.userId }), L.reloadFeatureFlags()); var Pe = L._calculate_event_properties(se, $.event.properties); return $.event.properties = Object.assign({}, Pe, $.event.properties), $ }; return { name: "PostHog JS", type: "enrichment", version: "1.0.0", isLoaded: function () { return !0 }, load: function () { return Promise.resolve() }, track: function ($) { return I($, $.event.event) }, page: function ($) { return I($, "$pageview") }, identify: function ($) { return I($, "$identify") }, screen: function ($) { return I($, "$screen") } } }, d7 = function () { function L() { Ua(this, L), Jr(this, "_seenFirstPageView", !1) } return Va(L, [{ key: "onPageview", value: function () { this._seenFirstPageView && (this._pageViewId = Xu()), this._seenFirstPageView = !0 } }, { key: "getPageViewId", value: function () { return this._pageViewId || (this._pageViewId = Xu()), this._pageViewId } }]), L }(); function e_(L) { return typeof Event < "u" && p5(L, Event) } function p5(L, I) { try { return L instanceof I } catch { return !1 } } function j0(L, I) { return Object.prototype.toString.call(L) === "[object ".concat(I, "]") } function iv(L) { return j0(L, "DOMError") } var t_ = /\(error: (.*)\)/, n_ = 50, U0 = "?"; function av(L, I, $, se) { var Pe = { filename: L, function: I, in_app: !0 }; return $ !== void 0 && (Pe.lineno = $), se !== void 0 && (Pe.colno = se), Pe } var g7 = /^\s*at (?:(.+?\)(?: \[.+\])?|.*?) ?\((?:address at )?)?(?:async )?((?:|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i, v7 = /\((\S*)(?::(\d+))(?::(\d+))\)/, m7 = /^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:[-a-z]+)?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i, y7 = /(\S+) line (\d+)(?: > eval line \d+)* > eval/i, x7 = /^\s*at (?:((?:\[object object\])?.+) )?\(?((?:[-a-z]+):.*?):(\d+)(?::(\d+))?\)?\s*$/i, b7 = function () { + }, Xu = (Jg = function () { for (var L = new Date().valueOf(), I = 0; L == new Date().valueOf();)I++; return L.toString(16) + I.toString(16) }, function (L) { if (L === "v7") return lT().toString(); var I = typeof window < "u" ? (window.screen.height * window.screen.width).toString(16) : "0"; return Jg() + "-" + Math.random().toString(16).replace(".", "") + "-" + function () { var $, se, Pe = El, R = 0, E = []; function e(w, k) { var i, _ = 0; for (i = 0; i < k.length; i++)_ |= E[i] << 8 * i; return w ^ _ } for ($ = 0; $ < Pe.length; $++)se = Pe.charCodeAt($), E.unshift(255 & se), E.length >= 4 && (R = e(R, E), E = []); return E.length > 0 && (R = e(R, E)), R.toString(16) }() + "-" + I + "-" + Jg() }), mT = function (L) { return !!/(google web preview|baiduspider|yandexbot|bingbot|googlebot|yahoo! slurp|ahrefsbot|facebookexternalhit|facebookcatalog|applebot|semrushbot|duckduckbot|twitterbot|rogerbot|linkedinbot|mj12bot|sitebulb|bot.htm|bot.php|hubspot|crawler|prerender)/i.test(L) }, zb = function (L, I) { var $ = I.replace(/[[]/, "\\[").replace(/[\]]/, "\\]"), se = new RegExp("[\\?&]" + $ + "=([^&#]*)").exec(L); if (se === null || se && typeof se[1] != "string" && se[1].length) return ""; var Pe = se[1]; try { Pe = decodeURIComponent(Pe) } catch { Sa.error("Skipping decoding for malformed query param: " + Pe) } return Pe.replace(/\+/g, " ") }, Db = function (L, I) { var $ = L.match(new RegExp(I + "=([^&]*)")); return $ ? $[1] : null }, jp = function () { function L(I) { return I && (I.preventDefault = L.preventDefault, I.stopPropagation = L.stopPropagation), I } return L.preventDefault = function () { this.returnValue = !1 }, L.stopPropagation = function () { this.cancelBubble = !0 }, function (I, $, se, Pe, R) { if (I) if (I.addEventListener && !Pe) I.addEventListener($, se, !!R); else { var E = "on" + $, e = I[E]; I[E] = function (w, k, i) { return function (_) { if (_ = _ || L(window.event)) { var y, h = !0; Xw(i) && (y = i(_)); var l = k.call(w, _); return y !== !1 && l !== !1 || (h = !1), h } } }(I, se, e) } else Sa.error("No valid element provided to register_event") } }(); function Ey(L, I) { var $ = function () { var se = ao.createElement("script"); se.type = "text/javascript", se.src = L, se.onload = function (E) { return I(void 0, E) }, se.onerror = function (E) { return I(E) }; var Pe, R = ao.querySelectorAll("body > script"); R.length > 0 ? (Pe = R[0].parentNode) === null || Pe === void 0 || Pe.insertBefore(se, R[0]) : ao.body.appendChild(se) }; ao.body ? $() : ao.addEventListener("DOMContentLoaded", $) } var vo = { campaignParams: function (L) { var I = ["utm_source", "utm_medium", "utm_campaign", "utm_content", "utm_term", "gclid", "fbclid", "msclkid"].concat(L || []), $ = {}; return ji(I, function (se) { var Pe = zb(ao.URL, se); Pe.length && ($[se] = Pe) }), $ }, searchEngine: function () { var L = ao.referrer; return L ? L.search("https?://(.*)google.([^/?]*)") === 0 ? "google" : L.search("https?://(.*)bing.com") === 0 ? "bing" : L.search("https?://(.*)yahoo.com") === 0 ? "yahoo" : L.search("https?://(.*)duckduckgo.com") === 0 ? "duckduckgo" : null : null }, searchInfo: function () { var L = vo.searchEngine(), I = L != "yahoo" ? "q" : "p", $ = {}; if (L !== null) { $.$search_engine = L; var se = zb(ao.referrer, I); se.length && ($.ph_keyword = se) } return $ }, browser: function (L, I, $) { return I = I || "", $ || Yi(L, " OPR/") ? Yi(L, "Mini") ? "Opera Mini" : "Opera" : /(BlackBerry|PlayBook|BB10)/i.test(L) ? "BlackBerry" : Yi(L, "IEMobile") || Yi(L, "WPDesktop") ? "Internet Explorer Mobile" : Yi(L, "SamsungBrowser/") ? "Samsung Internet" : Yi(L, "Edge") || Yi(L, "Edg/") ? "Microsoft Edge" : Yi(L, "FBIOS") ? "Facebook Mobile" : Yi(L, "Chrome") ? "Chrome" : Yi(L, "CriOS") ? "Chrome iOS" : Yi(L, "UCWEB") || Yi(L, "UCBrowser") ? "UC Browser" : Yi(L, "FxiOS") ? "Firefox iOS" : Yi(I, "Apple") ? Yi(L, "Mobile") ? "Mobile Safari" : "Safari" : Yi(L, "Android") ? "Android Mobile" : Yi(L, "Konqueror") ? "Konqueror" : Yi(L, "Firefox") ? "Firefox" : Yi(L, "MSIE") || Yi(L, "Trident/") ? "Internet Explorer" : Yi(L, "Gecko") ? "Mozilla" : "" }, browserVersion: function (L, I, $) { var se = { "Internet Explorer Mobile": /rv:(\d+(\.\d+)?)/, "Microsoft Edge": /Edge?\/(\d+(\.\d+)?)/, Chrome: /Chrome\/(\d+(\.\d+)?)/, "Chrome iOS": /CriOS\/(\d+(\.\d+)?)/, "UC Browser": /(UCBrowser|UCWEB)\/(\d+(\.\d+)?)/, Safari: /Version\/(\d+(\.\d+)?)/, "Mobile Safari": /Version\/(\d+(\.\d+)?)/, Opera: /(Opera|OPR)\/(\d+(\.\d+)?)/, Firefox: /Firefox\/(\d+(\.\d+)?)/, "Firefox iOS": /FxiOS\/(\d+(\.\d+)?)/, Konqueror: /Konqueror:(\d+(\.\d+)?)/, BlackBerry: /BlackBerry (\d+(\.\d+)?)/, "Android Mobile": /android\s(\d+(\.\d+)?)/, "Samsung Internet": /SamsungBrowser\/(\d+(\.\d+)?)/, "Internet Explorer": /(rv:|MSIE )(\d+(\.\d+)?)/, Mozilla: /rv:(\d+(\.\d+)?)/ }[vo.browser(L, I, $)]; if (se === void 0) return null; var Pe = L.match(se); return Pe ? parseFloat(Pe[Pe.length - 2]) : null }, browserLanguage: function () { return pf.language || pf.userLanguage }, os: function (L) { if (/Windows/i.test(L)) { if (/Phone/.test(L) || /WPDesktop/.test(L)) return { os_name: "Windows Phone", os_version: "" }; var I = /Windows NT ([0-9.]+)/i.exec(L); return I && I[1] ? { os_name: "Windows", os_version: I[1] } : { os_name: "Windows", os_version: "" } } if (/(iPhone|iPad|iPod)/.test(L)) { var $ = /OS (\d+)_(\d+)_?(\d+)?/i.exec(L); return $ && $[1] ? { os_name: "iOS", os_version: [$[1], $[2], $[3] || "0"].join(".") } : { os_name: "iOS", os_version: "" } } if (/Android/.test(L)) { var se = /Android (\d+)\.(\d+)\.?(\d+)?/i.exec(L); return se && se[1] ? { os_name: "Android", os_version: [se[1], se[2], se[3] || "0"].join(".") } : { os_name: "Android", os_version: "" } } if (/(BlackBerry|PlayBook|BB10)/i.test(L)) return { os_name: "BlackBerry", os_version: "" }; if (/Mac/i.test(L)) { var Pe = /Mac OS X (\d+)[_.](\d+)[_.]?(\d+)?/i.exec(L); return Pe && Pe[1] ? { os_name: "Mac OS X", os_version: [Pe[1], Pe[2], Pe[3] || "0"].join(".") } : { os_name: "Mac OS X", os_version: "" } } return /Linux/.test(L) ? { os_name: "Linux", os_version: "" } : /CrOS/.test(L) ? { os_name: "Chrome OS", os_version: "" } : { os_name: "", os_version: "" } }, device: function (L) { return /Windows Phone/i.test(L) || /WPDesktop/.test(L) ? "Windows Phone" : /iPad/.test(L) ? "iPad" : /iPod/.test(L) ? "iPod Touch" : /iPhone/.test(L) ? "iPhone" : /(BlackBerry|PlayBook|BB10)/i.test(L) ? "BlackBerry" : /Android/.test(L) && !/Mobile/.test(L) ? "Android Tablet" : /Android/.test(L) ? "Android" : "" }, deviceType: function (L) { var I = this.device(L); return I === "iPad" || I === "Android Tablet" ? "Tablet" : I ? "Mobile" : "Desktop" }, referrer: function () { return ao.referrer || "$direct" }, referringDomain: function () { if (!ao.referrer) return "$direct"; var L = ao.createElement("a"); return L.href = ao.referrer, L.host }, properties: function () { var L = vo.os(El), I = L.os_name, $ = L.os_version; return Lo(hm({ $os: I, $os_version: $, $browser: vo.browser(El, pf.vendor, qr.opera), $device: vo.device(El), $device_type: vo.deviceType(El) }), { $current_url: qr == null ? void 0 : qr.location.href, $host: qr == null ? void 0 : qr.location.host, $pathname: qr == null ? void 0 : qr.location.pathname, $browser_version: vo.browserVersion(El, pf.vendor, qr.opera), $browser_language: vo.browserLanguage(), $screen_height: qr == null ? void 0 : qr.screen.height, $screen_width: qr == null ? void 0 : qr.screen.width, $viewport_height: qr == null ? void 0 : qr.innerHeight, $viewport_width: qr == null ? void 0 : qr.innerWidth, $lib: "web", $lib_version: Su.LIB_VERSION, $insert_id: Math.random().toString(36).substring(2, 10) + Math.random().toString(36).substring(2, 10), $time: (Date.now = Date.now || function () { return +new Date }, Date.now() / 1e3) }) }, people_properties: function () { var L = vo.os(El), I = L.os_name, $ = L.os_version; return Lo(hm({ $os: I, $os_version: $, $browser: vo.browser(El, pf.vendor, qr.opera) }), { $browser_version: vo.browserVersion(El, pf.vendor, qr.opera) }) } }; function v1(L) { switch (Hc(L.className)) { case "string": return L.className; case "object": return ("baseVal" in L.className ? L.className.baseVal : null) || L.getAttribute("class") || ""; default: return "" } } function m1(L) { var I = ""; return F0(L) && !e5(L) && L.childNodes && L.childNodes.length && ji(L.childNodes, function ($) { Qw($) && $.textContent && (I += fm($.textContent).split(/(\s+)/).filter(yh).join("").replace(/[\r\n]/g, " ").replace(/[ ]+/g, " ").substring(0, 255)) }), fm(I) } function Fb(L) { return !!L && L.nodeType === 1 } function _f(L, I) { return !!L && !!L.tagName && L.tagName.toLowerCase() === I.toLowerCase() } function Qw(L) { return !!L && L.nodeType === 3 } function Bb(L) { return !!L && L.nodeType === 11 } var Qg = ["a", "button", "form", "input", "select", "textarea", "label"]; function F0(L) { for (var I = L; I.parentNode && !_f(I, "body"); I = I.parentNode) { var $ = v1(I).split(" "); if (Yi($, "ph-sensitive") || Yi($, "ph-no-capture")) return !1 } if (Yi(v1(L).split(" "), "ph-include")) return !0; var se = L.type || ""; if (typeof se == "string") switch (se.toLowerCase()) { case "hidden": case "password": return !1 }var Pe = L.name || L.id || ""; return !(typeof Pe == "string" && /^cc|cardnum|ccnum|creditcard|csc|cvc|cvv|exp|pass|pwd|routing|seccode|securitycode|securitynum|socialsec|socsec|ssn/i.test(Pe.replace(/[^a-zA-Z0-9]/g, ""))) } function e5(L) { return !!(_f(L, "input") && !["button", "checkbox", "submit", "reset"].includes(L.type) || _f(L, "select") || _f(L, "textarea") || L.getAttribute("contenteditable") === "true") } function yh(L) { return !(L === null || nu(L) || typeof L == "string" && (L = fm(L), /^(?:(4[0-9]{12}(?:[0-9]{3})?)|(5[1-5][0-9]{14})|(6(?:011|5[0-9]{2})[0-9]{12})|(3[47][0-9]{13})|(3(?:0[0-5]|[68][0-9])[0-9]{11})|((?:2131|1800|35[0-9]{3})[0-9]{11}))$/.test((L || "").replace(/[- ]/g, "")) || /(^\d{3}-?\d{2}-?\d{4}$)/.test(L))) } function Nb(L) { var I = m1(L); return yh(I = "".concat(I, " ").concat(t5(L)).trim()) ? I : "" } function t5(L) { var I = ""; return L && L.childNodes && L.childNodes.length && ji(L.childNodes, function ($) { var se; if ($ && ((se = $.tagName) === null || se === void 0 ? void 0 : se.toLowerCase()) === "span") try { var Pe = m1($); I = "".concat(I, " ").concat(Pe).trim(), $.childNodes && $.childNodes.length && (I = "".concat(I, " ").concat(t5($)).trim()) } catch (R) { console.error(R) } }), I } var yT = function () { function L(I) { Ua(this, L), this.clicks = [], this.enabled = I } return Va(L, [{ key: "isRageClick", value: function (I, $, se) { if (!this.enabled) return !1; var Pe = this.clicks[this.clicks.length - 1]; if (Pe && Math.abs(I - Pe.x) + Math.abs($ - Pe.y) < 30 && se - Pe.timestamp < 1e3) { if (this.clicks.push({ x: I, y: $, timestamp: se }), this.clicks.length === 3) return !0 } else this.clicks = [{ x: I, y: $, timestamp: se }]; return !1 } }]), L }(), xT = /[a-z0-9][a-z0-9-]+\.[a-z.]{2,6}$/i, Tu = { is_supported: function () { return !0 }, error: function (L) { Sa.error("cookieStore error: " + L) }, get: function (L) { try { for (var I = L + "=", $ = document.cookie.split(";"), se = 0; se < $.length; se++) { for (var Pe = $[se]; Pe.charAt(0) == " ";)Pe = Pe.substring(1, Pe.length); if (Pe.indexOf(I) === 0) return decodeURIComponent(Pe.substring(I.length, Pe.length)) } } catch { } return null }, parse: function (L) { var I; try { I = JSON.parse(Tu.get(L)) || {} } catch { } return I }, set: function (L, I, $, se, Pe) { try { var R = "", E = "", e = ""; if (se) { var w = document.location.hostname.match(xT), k = w ? w[0] : ""; R = k ? "; domain=." + k : "" } if ($) { var i = new Date; i.setTime(i.getTime() + 24 * $ * 60 * 60 * 1e3), E = "; expires=" + i.toUTCString() } Pe && (e = "; secure"); var _ = L + "=" + encodeURIComponent(JSON.stringify(I)) + E + "; SameSite=Lax; path=/" + R + e; return document.cookie = _, _ } catch { return } }, remove: function (L, I) { try { Tu.set(L, "", -1, I) } catch { return } } }, ev = null, Ka = { is_supported: function () { if (ev !== null) return ev; var L = !0; if (typeof window < "u") try { var I = "__mplssupport__"; Ka.set(I, "xyz"), Ka.get(I) !== '"xyz"' && (L = !1), Ka.remove(I) } catch { L = !1 } else L = !1; return L || Sa.error("localStorage unsupported; falling back to cookie store"), ev = L, L }, error: function (L) { Sa.error("localStorage error: " + L) }, get: function (L) { try { return window.localStorage.getItem(L) } catch (I) { Ka.error(I) } return null }, parse: function (L) { try { return JSON.parse(Ka.get(L)) || {} } catch { } return null }, set: function (L, I) { try { window.localStorage.setItem(L, JSON.stringify(I)) } catch ($) { Ka.error($) } }, remove: function (L) { try { window.localStorage.removeItem(L) } catch (I) { Ka.error(I) } } }, pm = Zr(Zr({}, Ka), {}, { parse: function (L) { try { var I = {}; try { (I = Tu.parse(L) || {}).distinct_id && Tu.set(L, { distinct_id: I.distinct_id }) } catch { } var $ = Lo(I, JSON.parse(Ka.get(L) || "{}")); return Ka.set(L, $), $ } catch { } return null }, set: function (L, I, $, se, Pe) { try { Ka.set(L, I), I.distinct_id && Tu.set(L, { distinct_id: I.distinct_id }, $, se, Pe) } catch (R) { Ka.error(R) } }, remove: function (L, I) { try { window.localStorage.removeItem(L), Tu.remove(L, I) } catch ($) { Ka.error($) } } }), m0 = {}, bT = { is_supported: function () { return !0 }, error: function (L) { Sa.error("memoryStorage error: " + L) }, get: function (L) { return m0[L] || null }, parse: function (L) { return m0[L] || null }, set: function (L, I) { m0[L] = I }, remove: function (L) { delete m0[L] } }, uf = null, Oo = { is_supported: function () { if (uf !== null) return uf; if (uf = !0, typeof window < "u") try { var L = "__support__"; Oo.set(L, "xyz"), Oo.get(L) !== '"xyz"' && (uf = !1), Oo.remove(L) } catch { uf = !1 } else uf = !1; return uf }, error: function (L) { Su.DEBUG && Sa.error("sessionStorage error: ", L) }, get: function (L) { try { return window.sessionStorage.getItem(L) } catch (I) { Oo.error(I) } return null }, parse: function (L) { try { return JSON.parse(Oo.get(L)) || null } catch { } return null }, set: function (L, I) { try { window.sessionStorage.setItem(L, JSON.stringify(I)) } catch ($) { Oo.error($) } }, remove: function (L) { try { window.sessionStorage.removeItem(L) } catch (I) { Oo.error(I) } } }, n5 = "$people_distinct_id", B0 = "__alias", Lp = "__timers", jb = "$autocapture_disabled_server_side", dm = "$session_recording_enabled_server_side", Ub = "$console_log_recording_enabled_server_side", Vb = "$session_recording_recorder_version_server_side", gm = "$sesid", xh = "$enabled_feature_flags", vm = "$early_access_features", bh = "$stored_person_properties", Mc = "$stored_group_properties", mm = "$surveys", ym = "$user_state", _T = [n5, B0, "__cmpns", Lp, dm, gm, xh, ym, vm, Mc, bh, mm], wT = ["cookie", "localstorage", "localstorage+cookie", "sessionstorage", "memory"], Hb = function () { function L(I) { Ua(this, L); var $ = ""; I.token && ($ = I.token.replace(/\+/g, "PL").replace(/\//g, "SL").replace(/=/g, "EQ")), this.props = {}, this.campaign_params_saved = !1, this.custom_campaign_params = I.custom_campaign_params || [], I.persistence_name ? this.name = "ph_" + I.persistence_name : this.name = "ph_" + $ + "_posthog", wT.indexOf(I.persistence.toLowerCase()) === -1 && (Sa.critical("Unknown persistence type " + I.persistence + "; falling back to cookie"), I.persistence = "cookie"); var se = I.persistence.toLowerCase(); se === "localstorage" && Ka.is_supported() ? this.storage = Ka : se === "localstorage+cookie" && pm.is_supported() ? this.storage = pm : se === "sessionstorage" && Oo.is_supported() ? this.storage = Oo : this.storage = se === "memory" ? bT : Tu, this.user_state = "anonymous", this.load(), this.update_config(I), this.save() } return Va(L, [{ key: "properties", value: function () { var I = {}; return ji(this.props, function ($, se) { if (se === xh && Hc($) === "object") for (var Pe = Object.keys($), R = 0; R < Pe.length; R++)I["$feature/".concat(Pe[R])] = $[Pe[R]]; else e = se, w = !1, ((E = _T) === null ? w : Rb && E.indexOf === Rb ? E.indexOf(e) != -1 : (ji(E, function (k) { if (w || (w = k === e)) return Sy }), w)) || (I[se] = $); var E, e, w }), I } }, { key: "load", value: function () { if (!this.disabled) { var I = this.storage.parse(this.name); I && (this.props = Lo({}, I)) } } }, { key: "save", value: function () { this.disabled || this.storage.set(this.name, this.props, this.expire_days, this.cross_subdomain, this.secure) } }, { key: "remove", value: function () { this.storage.remove(this.name, !1), this.storage.remove(this.name, !0) } }, { key: "clear", value: function () { this.remove(), this.props = {} } }, { key: "register_once", value: function (I, $, se) { var Pe = this; if (bf(I)) { $ === void 0 && ($ = "None"), this.expire_days = se === void 0 ? this.default_expiry : se; var R = !1; if (ji(I, function (E, e) { Pe.props.hasOwnProperty(e) && Pe.props[e] !== $ || (Pe.props[e] = E, R = !0) }), R) return this.save(), !0 } return !1 } }, { key: "register", value: function (I, $) { var se = this; if (bf(I)) { this.expire_days = $ === void 0 ? this.default_expiry : $; var Pe = !1; if (ji(I, function (R, E) { I.hasOwnProperty(E) && se.props[E] !== R && (se.props[E] = R, Pe = !0) }), Pe) return this.save(), !0 } return !1 } }, { key: "unregister", value: function (I) { I in this.props && (delete this.props[I], this.save()) } }, { key: "update_campaign_params", value: function () { this.campaign_params_saved || (this.register(vo.campaignParams(this.custom_campaign_params)), this.campaign_params_saved = !0) } }, { key: "update_search_keyword", value: function () { this.register(vo.searchInfo()) } }, { key: "update_referrer_info", value: function () { this.register({ $referrer: this.props.$referrer || vo.referrer(), $referring_domain: this.props.$referring_domain || vo.referringDomain() }) } }, { key: "get_referrer_info", value: function () { return hm({ $referrer: this.props.$referrer, $referring_domain: this.props.$referring_domain }) } }, { key: "safe_merge", value: function (I) { return ji(this.props, function ($, se) { se in I || (I[se] = $) }), I } }, { key: "update_config", value: function (I) { this.default_expiry = this.expire_days = I.cookie_expiration, this.set_disabled(I.disable_persistence), this.set_cross_subdomain(I.cross_subdomain_cookie), this.set_secure(I.secure_cookie) } }, { key: "set_disabled", value: function (I) { this.disabled = I, this.disabled ? this.remove() : this.save() } }, { key: "set_cross_subdomain", value: function (I) { I !== this.cross_subdomain && (this.cross_subdomain = I, this.remove(), this.save()) } }, { key: "get_cross_subdomain", value: function () { return !!this.cross_subdomain } }, { key: "set_secure", value: function (I) { I !== this.secure && (this.secure = I, this.remove(), this.save()) } }, { key: "set_event_timer", value: function (I, $) { var se = this.props[Lp] || {}; se[I] = $, this.props[Lp] = se, this.save() } }, { key: "remove_event_timer", value: function (I) { var $ = (this.props[Lp] || {})[I]; return nu($) || (delete this.props[Lp][I], this.save()), $ } }, { key: "get_user_state", value: function () { return this.props[ym] || "anonymous" } }, { key: "set_user_state", value: function (I) { this.props[ym] = I, this.save() } }]), L }(), Cc = { _initializedTokens: [], _isAutocaptureEnabled: !1, _setIsAutocaptureEnabled: function (L) { var I = !!L.get_property(jb), $ = !!L.get_config("autocapture"); this._isAutocaptureEnabled = $ && !I }, _previousElementSibling: function (L) { if (L.previousElementSibling) return L.previousElementSibling; var I = L; do I = I.previousSibling; while (I && !Fb(I)); return I }, _getAugmentPropertiesFromElement: function (L) { if (!F0(L)) return {}; var I = {}; return ji(L.attributes, function ($) { if ($.name.indexOf("data-ph-capture-attribute") === 0) { var se = $.name.replace("data-ph-capture-attribute-", ""), Pe = $.value; se && Pe && yh(Pe) && (I[se] = Pe) } }), I }, _getPropertiesFromElement: function (L, I, $) { var se = L.tagName.toLowerCase(), Pe = { tag_name: se }; Qg.indexOf(se) > -1 && !$ && (se.toLowerCase() === "a" || se.toLowerCase() === "button" ? Pe.$el_text = Nb(L) : Pe.$el_text = m1(L)); var R = v1(L); R.length > 0 && (Pe.classes = R.split(" ").filter(function (k) { return k !== "" })), ji(L.attributes, function (k) { var i; e5(L) && ["name", "id", "class"].indexOf(k.name) === -1 || !I && yh(k.value) && (typeof (i = k.name) != "string" || i.substring(0, 10) !== "_ngcontent" && i.substring(0, 7) !== "_nghost") && (Pe["attr__" + k.name] = k.value) }); for (var E = 1, e = 1, w = L; w = this._previousElementSibling(w);)E++, w.tagName === L.tagName && e++; return Pe.nth_child = E, Pe.nth_of_type = e, Pe }, _getDefaultProperties: function (L) { return { $event_type: L, $ce_version: 1 } }, _extractCustomPropertyValue: function (L) { var I = []; return ji(document.querySelectorAll(L.css_selector), function ($) { var se;["input", "select"].indexOf($.tagName.toLowerCase()) > -1 ? se = $.value : $.textContent && (se = $.textContent), yh(se) && I.push(se) }), I.join(", ") }, _getCustomProperties: function (L) { var I = this, $ = {}; return ji(this._customProperties, function (se) { ji(se.event_selectors, function (Pe) { ji(document.querySelectorAll(Pe), function (R) { Yi(L, R) && F0(R) && ($[se.name] = I._extractCustomPropertyValue(se)) }) }) }), $ }, _getEventTarget: function (L) { return L.target === void 0 ? L.srcElement || null : (I = L.target) !== null && I !== void 0 && I.shadowRoot ? L.composedPath()[0] || null : L.target || null; var I }, _captureEvent: function (L, I) { var $, se = this, Pe = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : "$autocapture", R = this._getEventTarget(L); if (Qw(R) && (R = R.parentNode || null), Pe === "$autocapture" && L.type === "click" && L instanceof MouseEvent && ($ = this.rageclicks) !== null && $ !== void 0 && $.isRageClick(L.clientX, L.clientY, new Date().getTime()) && this._captureEvent(L, I, "$rageclick"), R && function (h, l) { var t = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : void 0; if (!h || _f(h, "html") || !Fb(h)) return !1; if (t != null && t.url_allowlist) { var o = window.location.href, r = t.url_allowlist; if (r && !r.some(function (m) { return o.match(m) })) return !1 } if (t != null && t.dom_event_allowlist) { var n = t.dom_event_allowlist; if (n && !n.some(function (m) { return l.type === m })) return !1 } if (t != null && t.element_allowlist) { var a = t.element_allowlist; if (a && !a.some(function (m) { return h.tagName.toLowerCase() === m })) return !1 } if (t != null && t.css_selector_allowlist) { var s = t.css_selector_allowlist; if (s && !s.some(function (m) { return h.matches(m) })) return !1 } for (var u = !1, p = [h], c = !0, b = h; b.parentNode && !_f(b, "body");)if (Bb(b.parentNode)) p.push(b.parentNode.host), b = b.parentNode.host; else { if (!(c = b.parentNode || !1)) break; if (Qg.indexOf(c.tagName.toLowerCase()) > -1) u = !0; else { var g = window.getComputedStyle(c); g && g.getPropertyValue("cursor") === "pointer" && (u = !0) } p.push(c), b = c } var f = window.getComputedStyle(h); if (f && f.getPropertyValue("cursor") === "pointer" && l.type === "click") return !0; var v = h.tagName.toLowerCase(); switch (v) { case "html": return !1; case "form": return l.type === "submit"; case "input": case "select": case "textarea": return l.type === "change" || l.type === "click"; default: return u ? l.type === "click" : l.type === "click" && (Qg.indexOf(v) > -1 || h.getAttribute("contenteditable") === "true") } }(R, L, this.config)) { for (var E = [R], e = R; e.parentNode && !_f(e, "body");)Bb(e.parentNode) ? (E.push(e.parentNode.host), e = e.parentNode.host) : (E.push(e.parentNode), e = e.parentNode); var w, k = [], i = {}, _ = !1; if (ji(E, function (h) { var l = F0(h); h.tagName.toLowerCase() === "a" && (w = h.getAttribute("href"), w = l && yh(w) && w), Yi(v1(h).split(" "), "ph-no-capture") && (_ = !0), k.push(se._getPropertiesFromElement(h, I.get_config("mask_all_element_attributes"), I.get_config("mask_all_text"))); var t = se._getAugmentPropertiesFromElement(h); Lo(i, t) }), I.get_config("mask_all_text") || (R.tagName.toLowerCase() === "a" || R.tagName.toLowerCase() === "button" ? k[0].$el_text = Nb(R) : k[0].$el_text = m1(R)), w && (k[0].attr__href = w), _) return !1; var y = Lo(this._getDefaultProperties(L.type), { $elements: k }, this._getCustomProperties(E), i); return I.capture(Pe, y), !0 } }, _navigate: function (L) { window.location.href = L }, _addDomEventHandlers: function (L) { var I = this, $ = function (se) { se = se || window.event, I._captureEvent(se, L) }; jp(document, "submit", $, !1, !0), jp(document, "change", $, !1, !0), jp(document, "click", $, !1, !0) }, _customProperties: [], rageclicks: null, config: void 0, init: function (L) { var I; typeof L.__autocapture != "boolean" && (this.config = L.__autocapture), (I = this.config) !== null && I !== void 0 && I.url_allowlist && (this.config.url_allowlist = this.config.url_allowlist.map(function ($) { return new RegExp($) })), this.rageclicks = new yT(L.get_config("rageclick")) }, afterDecideResponse: function (L, I) { this._setIsAutocaptureEnabled(I); var $ = I.get_config("token"); this._initializedTokens.indexOf($) > -1 ? Sa.log('autocapture already initialized for token "' + $ + '"') : (I.persistence && I.persistence.register(Jr({}, jb, !!L.autocapture_opt_out)), this._initializedTokens.push($), L && L.config && L.config.enable_collect_everything && this._isAutocaptureEnabled ? (L.custom_properties && (this._customProperties = L.custom_properties), this._addDomEventHandlers(I)) : I.__autocapture = !1) }, enabledForProject: function (L, I, $) { if (!L) return !0; I = nu(I) ? 10 : I, $ = nu($) ? 10 : $; for (var se = 0, Pe = 0; Pe < L.length; Pe++)se += L.charCodeAt(Pe); return se % I < $ }, isBrowserSupported: function () { return Xw(document.querySelectorAll) } }; (function (L) { for (var I in L) typeof L[I] == "function" && (L[I] = L[I].bind(L)) })(Cc), function (L) { for (var I in L) typeof L[I] == "function" && (L[I] = Kw(L[I])) }(Cc); var kT = "__ph_opt_in_out_"; function TT(L, I) { a5(!0, L, I) } function AT(L, I) { a5(!1, L, I) } function MT(L, I) { return i5(L, I) === "1" } function r5(L, I) { return !!function ($) { if ($ && $.respectDnt) { var se = $ && $.window || qr, Pe = se.navigator || {}, R = !1; return ji([Pe.doNotTrack, Pe.msDoNotTrack, se.doNotTrack], function (E) { Yi([!0, 1, "1", "yes"], E) && (R = !0) }), R } return !1 }(I) || i5(L, I) === "0" } function ST(L, I) { Cy(I = I || {}).remove(Ly(L, I), !!I.crossSubdomainCookie) } function Cy(L) { return (L = L || {}).persistenceType === "localStorage" ? Ka : L.persistenceType === "localStorage+cookie" ? pm : Tu } function Ly(L, I) { return ((I = I || {}).persistencePrefix || kT) + L } function i5(L, I) { return Cy(I).get(Ly(L, I)) } function a5(L, I, $) { $w(I) && I.length ? (Cy($ = $ || {}).set(Ly(I, $), L ? 1 : 0, hT($.cookieExpiration) ? $.cookieExpiration : null, $.crossSubdomainCookie, $.secureCookie), $.capture && L && $.capture($.captureEventName || "$opt_in", $.captureProperties || {}, { send_instantly: !0 })) : console.error("gdpr." + (L ? "optIn" : "optOut") + " called with an invalid token") } function o5(L, I) { var $ = !1; try { var se = L.get_config("token"), Pe = L.get_config("respect_dnt"), R = L.get_config("opt_out_capturing_persistence_type"), E = L.get_config("opt_out_capturing_cookie_prefix") || void 0, e = L.get_config("window"); se && ($ = r5(se, { respectDnt: Pe, persistenceType: R, persistencePrefix: E, window: e })) } catch (w) { I || console.error("Unexpected error when checking capturing opt-out status: " + w) } return $ } function qb(L, I, $) { return function () { for (var se = o5(L, $), Pe = arguments.length, R = new Array(Pe), E = 0; E < Pe; E++)R[E] = arguments[E]; if (!se) return I.apply(this, R); var e = R[R.length - 1]; typeof e == "function" && e(0) } } var tv = "$set", ET = function () { function L(I) { var $ = this; Ua(this, L), this._posthog = I, this.set = qb(I, function (se, Pe, R) { var E = $.set_action(se, Pe); return $._posthog.setPersonPropertiesForFlags(E.$set || {}), bf(se) && (R = Pe), $._get_config("save_referrer") && $._posthog.sessionPersistence.update_referrer_info(), E[tv] = Lo({}, vo.people_properties(), $._posthog.sessionPersistence.get_referrer_info(), E[tv]), $._send_request(E, R) }), this.set_once = qb(I, function (se, Pe, R) { var E = $.set_once_action(se, Pe); return bf(se) && (R = Pe), $._send_request(E, R) }) } return Va(L, [{ key: "toString", value: function () { return this._posthog.toString() + ".people" } }, { key: "_send_request", value: function (I, $) { I.$token = this._get_config("token"), I.$distinct_id = this._posthog.get_distinct_id(); var se = this._posthog.get_property("$device_id"), Pe = this._posthog.get_property("$user_id"), R = this._posthog.get_property("$had_persisted_distinct_id"); se && (I.$device_id = se), Pe && (I.$user_id = Pe), R && (I.$had_persisted_distinct_id = R); var E = pT(I), e = Jw(E, this._get_config("properties_string_max_length")), w = F1(JSON.stringify(E)); return this._posthog._send_request(this._get_config("api_host") + "/engage/", { data: w }, {}, this._posthog._prepare_callback($, e)), e } }, { key: "_get_config", value: function (I) { return this._posthog.get_config(I) } }, { key: "_is_reserved_property", value: function (I) { return I === "$distinct_id" || I === "$token" || I === "$device_id" || I === "$user_id" || I === "$had_persisted_distinct_id" } }, { key: "set_action", value: function (I, $) { return this.apiActionParser(tv, I, $) } }, { key: "set_once_action", value: function (I, $) { return this.apiActionParser("$set_once", I, $) } }, { key: "apiActionParser", value: function (I, $, se) { var Pe = this, R = {}, E = {}; return bf($) ? ji($, function (e, w) { Pe._is_reserved_property(w) || (E[w] = e) }) : E[$] = se, R[I] = E, R } }]), L }(), nv = "$active_feature_flags", y0 = "$override_feature_flags", Gb = "$feature_flag_payloads", Wb = function (L) { var I, $ = {}, se = nc(function (e) { for (var w = Object.keys(e), k = w.length, i = new Array(k); k--;)i[k] = [w[k], e[w[k]]]; return i }(L || {})); try { for (se.s(); !(I = se.n()).done;) { var Pe = Wc(I.value, 2), R = Pe[0], E = Pe[1]; E && ($[R] = E) } } catch (e) { se.e(e) } finally { se.f() } return $ }, CT = function () { function L(I) { Ua(this, L), this.instance = I, this._override_warning = !1, this.flagCallReported = {}, this.featureFlagEventHandlers = [], this.reloadFeatureFlagsQueued = !1, this.reloadFeatureFlagsInAction = !1 } return Va(L, [{ key: "getFlags", value: function () { return Object.keys(this.getFlagVariants()) } }, { key: "getFlagVariants", value: function () { var I = this.instance.get_property(xh), $ = this.instance.get_property(y0); if (!$) return I || {}; for (var se = Lo({}, I), Pe = Object.keys($), R = 0; R < Pe.length; R++)$[Pe[R]] === !1 ? delete se[Pe[R]] : se[Pe[R]] = $[Pe[R]]; return this._override_warning || (console.warn("[PostHog] Overriding feature flags!", { enabledFlags: I, overriddenFlags: $, finalFlags: se }), this._override_warning = !0), se } }, { key: "getFlagPayloads", value: function () { return this.instance.get_property(Gb) || {} } }, { key: "reloadFeatureFlags", value: function () { this.reloadFeatureFlagsQueued || (this.reloadFeatureFlagsQueued = !0, this._startReloadTimer()) } }, { key: "setAnonymousDistinctId", value: function (I) { this.$anon_distinct_id = I } }, { key: "setReloadingPaused", value: function (I) { this.reloadFeatureFlagsInAction = I } }, { key: "resetRequestQueue", value: function () { this.reloadFeatureFlagsQueued = !1 } }, { key: "_startReloadTimer", value: function () { var I = this; this.reloadFeatureFlagsQueued && !this.reloadFeatureFlagsInAction && setTimeout(function () { !I.reloadFeatureFlagsInAction && I.reloadFeatureFlagsQueued && (I.reloadFeatureFlagsQueued = !1, I._reloadFeatureFlagsRequest()) }, 5) } }, { key: "_reloadFeatureFlagsRequest", value: function () { var I = this; this.setReloadingPaused(!0); var $ = this.instance.get_config("token"), se = this.instance.get_property(bh), Pe = this.instance.get_property(Mc), R = F1(JSON.stringify({ token: $, distinct_id: this.instance.get_distinct_id(), groups: this.instance.getGroups(), $anon_distinct_id: this.$anon_distinct_id, person_properties: se, group_properties: Pe })); this.instance._send_request(this.instance.get_config("api_host") + "/decide/?v=3", { data: R }, { method: "POST" }, this.instance._prepare_callback(function (E) { I.$anon_distinct_id = void 0, I.receivedFeatureFlags(E), I.setReloadingPaused(!1), I._startReloadTimer() })) } }, { key: "getFeatureFlag", value: function (I) { var $ = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}; if (!this.getFlags()) return console.warn('getFeatureFlag for key "' + I + `" failed. Feature flags didn't load in time.`), !1; var se = this.getFlagVariants()[I]; return !$.send_event && "send_event" in $ || this.flagCallReported[I] || (this.flagCallReported[I] = !0, this.instance.capture("$feature_flag_called", { $feature_flag: I, $feature_flag_response: se })), se } }, { key: "getFeatureFlagPayload", value: function (I) { return this.getFlagPayloads()[I] } }, { key: "isFeatureEnabled", value: function (I) { var $ = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}; return this.getFlags() ? !!this.getFeatureFlag(I, $) : (console.warn('isFeatureEnabled for key "' + I + `" failed. Feature flags didn't load in time.`), !1) } }, { key: "addFeatureFlagsHandler", value: function (I) { this.featureFlagEventHandlers.push(I) } }, { key: "removeFeatureFlagsHandler", value: function (I) { this.featureFlagEventHandlers = this.featureFlagEventHandlers.filter(function ($) { return $ !== I }) } }, { key: "receivedFeatureFlags", value: function (I) { this.instance.decideEndpointWasHit = !0; var $ = this.getFlagVariants(), se = this.getFlagPayloads(); (function (Pe, R) { var E = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {}, e = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : {}, w = Pe.featureFlags, k = Pe.featureFlagPayloads; if (w) if (Array.isArray(w)) { var i, _ = {}; if (w) for (var y = 0; y < w.length; y++)_[w[y]] = !0; R && R.register((Jr(i = {}, nv, w), Jr(i, xh, _), i)) } else { var h, l = w, t = k; Pe.errorsWhileComputingFlags && (l = Zr(Zr({}, E), l), t = Zr(Zr({}, e), t)), R && R.register((Jr(h = {}, nv, Object.keys(Wb(l))), Jr(h, xh, l || {}), Jr(h, Gb, t || {}), h)) } })(I, this.instance.persistence, $, se), this._fireFeatureFlagsCallbacks() } }, { key: "override", value: function (I) { if (this._override_warning = !1, I === !1) this.instance.persistence.unregister(y0); else if (Array.isArray(I)) { for (var $ = {}, se = 0; se < I.length; se++)$[I[se]] = !0; this.instance.persistence.register(Jr({}, y0, $)) } else this.instance.persistence.register(Jr({}, y0, I)) } }, { key: "onFeatureFlags", value: function (I) { var $ = this; if (this.addFeatureFlagsHandler(I), this.instance.decideEndpointWasHit) { var se = this._prepareFeatureFlagsForCallbacks(), Pe = se.flags, R = se.flagVariants; I(Pe, R) } return function () { return $.removeFeatureFlagsHandler(I) } } }, { key: "updateEarlyAccessFeatureEnrollment", value: function (I, $) { var se, Pe = Jr({}, "$feature_enrollment/".concat(I), $); this.instance.capture("$feature_enrollment_update", { $feature_flag: I, $feature_enrollment: $, $set: Pe }), this.setPersonPropertiesForFlags(Pe, !1); var R = Zr(Zr({}, this.getFlagVariants()), {}, Jr({}, I, $)); this.instance.persistence.register((Jr(se = {}, nv, Object.keys(Wb(R))), Jr(se, xh, R), se)), this._fireFeatureFlagsCallbacks() } }, { key: "getEarlyAccessFeatures", value: function (I) { var $ = this, se = arguments.length > 1 && arguments[1] !== void 0 && arguments[1], Pe = this.instance.get_property(vm); if (Pe && !se) return I(Pe); this.instance._send_request("".concat(this.instance.get_config("api_host"), "/api/early_access_features/?token=").concat(this.instance.get_config("token")), {}, { method: "GET" }, function (R) { var E = R.earlyAccessFeatures; return $.instance.persistence.register(Jr({}, vm, E)), I(E) }) } }, { key: "_prepareFeatureFlagsForCallbacks", value: function () { var I = this.getFlags(), $ = this.getFlagVariants(); return { flags: I.filter(function (se) { return $[se] }), flagVariants: Object.keys($).filter(function (se) { return $[se] }).reduce(function (se, Pe) { return se[Pe] = $[Pe], se }, {}) } } }, { key: "_fireFeatureFlagsCallbacks", value: function () { var I = this._prepareFeatureFlagsForCallbacks(), $ = I.flags, se = I.flagVariants; this.featureFlagEventHandlers.forEach(function (Pe) { return Pe($, se) }) } }, { key: "setPersonPropertiesForFlags", value: function (I) { var $ = !(arguments.length > 1 && arguments[1] !== void 0) || arguments[1], se = this.instance.get_property(bh) || {}; this.instance.register(Jr({}, bh, Zr(Zr({}, se), I))), $ && this.instance.reloadFeatureFlags() } }, { key: "resetPersonPropertiesForFlags", value: function () { this.instance.unregister(bh) } }, { key: "setGroupPropertiesForFlags", value: function (I) { var $ = !(arguments.length > 1 && arguments[1] !== void 0) || arguments[1], se = this.instance.get_property(Mc) || {}; Object.keys(se).length !== 0 && Object.keys(se).forEach(function (Pe) { se[Pe] = Zr(Zr({}, se[Pe]), I[Pe]), delete I[Pe] }), this.instance.register(Jr({}, Mc, Zr(Zr({}, se), I))), $ && this.instance.reloadFeatureFlags() } }, { key: "resetGroupPropertiesForFlags", value: function (I) { if (I) { var $ = this.instance.get_property(Mc) || {}; this.instance.register(Jr({}, Mc, Zr(Zr({}, $), {}, Jr({}, I, {})))) } else this.instance.unregister(Mc) } }]), L }(), LT = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3Qgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNOCAwSDE2TDAgMTZWOEw4IDBaIiBmaWxsPSIjMkQyRDJEIi8+CjxwYXRoIGQ9Ik0xNiA4VjE2SDhMMTYgOFoiIGZpbGw9IiMyRDJEMkQiLz4KPC9zdmc+Cg==", Zb = 2, PT = 4, OT = 6, IT = "rrweb/console@1", _u, RT = "/s/"; (function (L) { L[L.Mutation = 0] = "Mutation", L[L.MouseMove = 1] = "MouseMove", L[L.MouseInteraction = 2] = "MouseInteraction", L[L.Scroll = 3] = "Scroll", L[L.ViewportResize = 4] = "ViewportResize", L[L.Input = 5] = "Input", L[L.TouchMove = 6] = "TouchMove", L[L.MediaInteraction = 7] = "MediaInteraction", L[L.StyleSheetRule = 8] = "StyleSheetRule", L[L.CanvasMutation = 9] = "CanvasMutation", L[L.Font = 10] = "Font", L[L.Log = 11] = "Log", L[L.Drag = 12] = "Drag", L[L.StyleDeclaration = 13] = "StyleDeclaration", L[L.Selection = 14] = "Selection", L[L.AdoptedStyleSheet = 15] = "AdoptedStyleSheet" })(_u || (_u = {})); var zT = [_u.MouseMove, _u.MouseInteraction, _u.Scroll, _u.ViewportResize, _u.Input, _u.TouchMove, _u.MediaInteraction, _u.Drag], DT = function () { function L(I) { Ua(this, L), Jr(this, "lastActivityTimestamp", Date.now()), Jr(this, "isIdle", !1), this.instance = I, this.captureStarted = !1, this.snapshots = [], this.emit = !1, this.endpoint = RT, this.stopRrweb = void 0, this.windowId = null, this.sessionId = null, this.receivedDecide = !1 } return Va(L, [{ key: "startRecordingIfEnabled", value: function () { this.isRecordingEnabled() ? this.startCaptureAndTrySendingQueuedSnapshots() : this.stopRecording() } }, { key: "started", value: function () { return this.captureStarted } }, { key: "stopRecording", value: function () { this.captureStarted && this.stopRrweb && (this.stopRrweb(), this.stopRrweb = void 0, this.captureStarted = !1) } }, { key: "isRecordingEnabled", value: function () { var I = !!this.instance.get_property(dm), $ = !this.instance.get_config("disable_session_recording"); return I && $ } }, { key: "isConsoleLogCaptureEnabled", value: function () { var I = !!this.instance.get_property(Ub), $ = this.instance.get_config("enable_recording_console_log"); return $ ?? I } }, { key: "getRecordingVersion", value: function () { var I, $ = this.instance.get_property(Vb); return ((I = this.instance.get_config("session_recording")) === null || I === void 0 ? void 0 : I.recorderVersion) || $ || "v1" } }, { key: "afterDecideResponse", value: function (I) { var $, se, Pe, R, E, e; this.receivedDecide = !0, this.instance.persistence && this.instance.persistence.register((Jr(E = {}, dm, !!I.sessionRecording), Jr(E, Ub, (Pe = I.sessionRecording) === null || Pe === void 0 ? void 0 : Pe.consoleLogRecordingEnabled), Jr(E, Vb, (R = I.sessionRecording) === null || R === void 0 ? void 0 : R.recorderVersion), E)), ($ = I.sessionRecording) !== null && $ !== void 0 && $.endpoint && (this.endpoint = (e = I.sessionRecording) === null || e === void 0 ? void 0 : e.endpoint), (se = I.sessionRecording) !== null && se !== void 0 && se.recorderVersion && (this.recorderVersion = I.sessionRecording.recorderVersion), this.startRecordingIfEnabled() } }, { key: "startCaptureAndTrySendingQueuedSnapshots", value: function () { var I = this; this.receivedDecide && (this.emit = !0, this.snapshots.forEach(function ($) { return I._captureSnapshot($) })), this._startCapture() } }, { key: "_startCapture", value: function () { var I = this; if (Object.assign !== void 0 && !this.captureStarted && !this.instance.get_config("disable_session_recording")) { this.captureStarted = !0, this.instance.sessionManager.checkAndGetSessionAndWindowId(); var $ = this.getRecordingVersion() === "v2" ? "recorder-v2.js" : "recorder.js"; this.instance.__loaded_recorder_version !== this.getRecordingVersion() ? Ey(this.instance.get_config("api_host") + "/static/".concat($, "?v=").concat(Su.LIB_VERSION), function (se) { if (se) return Sa.error("Could not load ".concat($), se); I._onScriptLoaded() }) : this._onScriptLoaded() } } }, { key: "_isInteractiveEvent", value: function (I) { var $; return I.type === 3 && zT.indexOf(($ = I.data) === null || $ === void 0 ? void 0 : $.source) !== -1 } }, { key: "_updateWindowAndSessionIds", value: function (I) { var $ = this._isInteractiveEvent(I); if ($ || this.isIdle || I.timestamp - this.lastActivityTimestamp > 3e5 && (this.isIdle = !0), $ && (this.lastActivityTimestamp = I.timestamp, this.isIdle && (this.isIdle = !1, this._tryTakeFullSnapshot())), !this.isIdle) { var se = this.instance.sessionManager.checkAndGetSessionAndWindowId(!$, I.timestamp), Pe = se.windowId, R = se.sessionId;[Zb, PT].indexOf(I.type) !== -1 || this.windowId === Pe && this.sessionId === R || this._tryTakeFullSnapshot(), this.windowId = Pe, this.sessionId = R } } }, { key: "_tryTakeFullSnapshot", value: function () { if (!this.captureStarted) return !1; try { var I; return (I = this.rrwebRecord) === null || I === void 0 || I.takeFullSnapshot(), !0 } catch ($) { return Sa.error("Error taking full snapshot.", $), !1 } } }, { key: "_onScriptLoaded", value: function () { var I = this, $ = { blockClass: "ph-no-capture", blockSelector: void 0, ignoreClass: "ph-ignore-input", maskTextClass: "ph-mask", maskTextSelector: void 0, maskTextFn: void 0, maskAllInputs: !0, maskInputOptions: {}, maskInputFn: void 0, slimDOMOptions: {}, collectFonts: !1, inlineStylesheet: !0, recordCrossOriginIframes: !1 }; this.rrwebRecord = window.rrweb ? window.rrweb.record : window.rrwebRecord; for (var se = this.instance.get_config("session_recording"), Pe = 0, R = Object.entries(se || {}); Pe < R.length; Pe++) { var E = Wc(R[Pe], 2), e = E[0], w = E[1]; e in $ && ($[e] = w) } this.rrwebRecord ? (this.stopRrweb = this.rrwebRecord(Zr({ emit: function (k) { I.onRRwebEmit(k) }, plugins: window.rrwebConsoleRecord && this.isConsoleLogCaptureEnabled() ? [window.rrwebConsoleRecord.getRecordConsolePlugin()] : [] }, $)), this.instance._addCaptureHook(function (k) { try { var i; k === "$pageview" && ((i = I.rrwebRecord) === null || i === void 0 || i.addCustomEvent("$pageview", { href: window.location.href })) } catch (_) { Sa.error("Could not add $pageview to rrweb session", _) } }), this.lastActivityTimestamp = Date.now(), this.isIdle = !1) : Sa.error("onScriptLoaded was called but rrwebRecord is not available. This indicates something has gone wrong.") } }, { key: "onRRwebEmit", value: function (I) { if (I = function (se) { if (se && Hc(se) === "object" && se.type === OT && Hc(se.data) === "object" && se.data.plugin === IT) { se.data.payload.payload.length > 10 && (se.data.payload.payload = se.data.payload.payload.slice(0, 10), se.data.payload.payload.push("...[truncated]")); for (var Pe = [], R = 0; R < se.data.payload.payload.length; R++)se.data.payload.payload[R] && se.data.payload.payload[R].length > 2e3 ? Pe.push(se.data.payload.payload[R].slice(0, 2e3) + "...[truncated]") : Pe.push(se.data.payload.payload[R]); return se.data.payload.payload = Pe, se } return se }(function (se) { if (se && Hc(se) === "object") { var Pe = JSON.stringify(se); if (Pe.length > 5e6) { var R, E = nc(Pe.matchAll(/data:([\w\/\-\.]+);(\w+),([^)"]*)/gim)); try { for (E.s(); !(R = E.n()).done;) { var e = R.value; Pe = e[1].toLocaleLowerCase().slice(0, 6) === "image/" ? Pe.replace(e[0], LT) : Pe.replace(e[0], "") } } catch (w) { E.e(w) } finally { E.f() } } return JSON.parse(Pe) } return se }(I)), this._updateWindowAndSessionIds(I), !this.isIdle) { var $ = { $snapshot_data: I, $session_id: this.sessionId, $window_id: this.windowId }; this.instance._captureMetrics.incr("rrweb-record"), this.instance._captureMetrics.incr("rrweb-record-".concat(I.type)), this.emit ? this._captureSnapshot($) : this.snapshots.push($) } } }, { key: "_captureSnapshot", value: function (I) { this.instance.capture("$snapshot", I, { transport: "XHR", method: "POST", endpoint: this.endpoint, _noTruncate: !0, _batchKey: "sessionRecording", _metrics: { rrweb_full_snapshot: I.$snapshot_data.type === Zb } }) } }]), L }(), xu = { entryType: 0, timeOrigin: 1, name: 2, startTime: 3, redirectStart: 4, redirectEnd: 5, workerStart: 6, fetchStart: 7, domainLookupStart: 8, domainLookupEnd: 9, connectStart: 10, secureConnectionStart: 11, connectEnd: 12, requestStart: 13, responseStart: 14, responseEnd: 15, decodedBodySize: 16, encodedBodySize: 17, initiatorType: 18, nextHopProtocol: 19, renderBlockingStatus: 20, responseStatus: 21, transferSize: 22, element: 23, renderTime: 24, loadTime: 25, size: 26, id: 27, url: 28, domComplete: 29, domContentLoadedEvent: 30, domInteractive: 31, loadEventEnd: 32, loadEventStart: 33, redirectCount: 34, navigationType: 35, unloadEventEnd: 36, unloadEventStart: 37, duration: 39, timestamp: 40 }, FT = ["first-input", "navigation", "paint", "resource"], BT = ["/s/", "/e/"], NT = function () { function L(I) { Ua(this, L), Jr(this, "_forceAllowLocalhost", !1), this.instance = I } return Va(L, [{ key: "startObservingIfEnabled", value: function () { this.isEnabled() ? this.startObserving() : this.stopObserving() } }, { key: "startObserving", value: function () { var I, $, se = this; if (!this.observer) if (((I = window) === null || I === void 0 || ($ = I.PerformanceObserver) === null || $ === void 0 ? void 0 : $.supportedEntryTypes) !== void 0) if (!cT.includes(location.hostname) || this._forceAllowLocalhost) try { this.observer = new PerformanceObserver(function (R) { R.getEntries().forEach(function (E) { se._capturePerformanceEvent(E) }) }); var Pe = PerformanceObserver.supportedEntryTypes.filter(function (R) { return FT.includes(R) }); Pe.forEach(function (R) { var E; (E = se.observer) === null || E === void 0 || E.observe({ type: R, buffered: !0 }) }) } catch (R) { console.error("PostHog failed to start performance observer", R), this.stopObserving() } else Sa.log("PostHog Peformance observer not started because we are on localhost."); else Sa.log("PostHog Performance observer not started because PerformanceObserver is not supported by this browser.") } }, { key: "stopObserving", value: function () { this.observer && (this.observer.disconnect(), this.observer = void 0) } }, { key: "isObserving", value: function () { return !!this.observer } }, { key: "isEnabled", value: function () { var I, $; return (I = ($ = this.instance.get_config("capture_performance")) !== null && $ !== void 0 ? $ : this.remoteEnabled) !== null && I !== void 0 && I } }, { key: "afterDecideResponse", value: function (I) { this.remoteEnabled = I.capturePerformance || !1, this.isEnabled() && this.startObserving() } }, { key: "_capturePerformanceEvent", value: function (I) { if (I.name.indexOf(this.instance.get_config("api_host")) === 0) { var $ = I.name.replace(this.instance.get_config("api_host"), ""); if (BT.find(function (h) { return $.indexOf(h) === 0 })) return } var se = { url: I.name }, Pe = this.instance.get_config("session_recording"); if (Pe.maskNetworkRequestFn && (se = Pe.maskNetworkRequestFn(se)), se) { var R = I.toJSON(); R.name = se.url; var E = {}, e = Math.floor(Date.now() - performance.now()); for (var w in E[xu.timeOrigin] = e, E[xu.timestamp] = Math.floor(e + I.startTime), xu) R[w] !== void 0 && (E[xu[w]] = R[w]); if (this.capturePerformanceEvent(E), jT(I)) { var k, i = nc(I.serverTiming || []); try { for (i.s(); !(k = i.n()).done;) { var _, y = k.value; this.capturePerformanceEvent((Jr(_ = {}, xu.timeOrigin, e), Jr(_, xu.timestamp, Math.floor(e + I.startTime)), Jr(_, xu.name, y.name), Jr(_, xu.duration, y.duration), Jr(_, xu.entryType, "serverTiming"), _)) } } catch (h) { i.e(h) } finally { i.f() } } } } }, { key: "capturePerformanceEvent", value: function (I) { var $, se = I[xu.timestamp]; ($ = this.instance.sessionRecording) === null || $ === void 0 || $.onRRwebEmit({ type: 6, data: { plugin: "posthog/network@1", payload: I }, timestamp: se }) } }]), L }(), jT = function (L) { return L.entryType === "navigation" || L.entryType === "resource" }, UT = function () { function L(I) { Ua(this, L), this.instance = I, this.instance.decideEndpointWasHit = this.instance._hasBootstrappedFeatureFlags() } return Va(L, [{ key: "call", value: function () { var I = this, $ = F1(JSON.stringify({ token: this.instance.get_config("token"), distinct_id: this.instance.get_distinct_id(), groups: this.instance.getGroups(), person_properties: this.instance.get_property(bh), group_properties: this.instance.get_property(Mc) })); this.instance._send_request("".concat(this.instance.get_config("api_host"), "/decide/?v=3"), { data: $, verbose: !0 }, { method: "POST" }, function (se) { return I.parseDecideResponse(se) }) } }, { key: "parseDecideResponse", value: function (I) { var $, se, Pe, R = this; if ((I == null ? void 0 : I.status) !== 0) { if (this.instance.decideEndpointWasHit = !0, !document || !document.body) return console.log("document not ready yet, trying again in 500 milliseconds..."), void setTimeout(function () { R.parseDecideResponse(I) }, 500); if (this.instance.toolbar.afterDecideResponse(I), ($ = this.instance.sessionRecording) === null || $ === void 0 || $.afterDecideResponse(I), Cc.afterDecideResponse(I, this.instance), (se = this.instance.webPerformance) === null || se === void 0 || se.afterDecideResponse(I), (Pe = this.instance.exceptionAutocapture) === null || Pe === void 0 || Pe.afterDecideResponse(I), this.instance.featureFlags.receivedFeatureFlags(I), this.instance.compression = {}, I.supportedCompression && !this.instance.get_config("disable_compression")) { var E, e = {}, w = nc(I.supportedCompression); try { for (w.s(); !(E = w.n()).done;)e[E.value] = !0 } catch (h) { w.e(h) } finally { w.f() } this.instance.compression = e } if (I.siteApps) if (this.instance.get_config("opt_in_site_apps")) { var k, i = this.instance.get_config("api_host"), _ = nc(I.siteApps); try { var y = function () { var h = k.value, l = h.id, t = h.url, o = [i, i[i.length - 1] === "/" && t[0] === "/" ? t.substring(1) : t].join(""); window["__$$ph_site_app_".concat(l)] = R.instance, Ey(o, function (r) { r && console.error("Error while initializing PostHog app with config id ".concat(l), r) }) }; for (_.s(); !(k = _.n()).done;)y() } catch (h) { _.e(h) } finally { _.f() } } else I.siteApps.length > 0 && console.error('PostHog site apps are disabled. Enable the "opt_in_site_apps" config to proceed.') } else console.error("Failed to fetch feature flags from PostHog.") } }]), L }(), VT = ["https://app.posthog.com", "https://app.posthog.com"], HT = ["source"], qT = function () { function L(I) { Ua(this, L), this.instance = I } return Va(L, [{ key: "afterDecideResponse", value: function (I) { var $ = I.toolbarParams || I.editorParams || (I.toolbarVersion ? { toolbarVersion: I.toolbarVersion } : {}); I.isAuthenticated && $.toolbarVersion && $.toolbarVersion.indexOf("toolbar") === 0 && this.loadToolbar(Zr({}, $)) } }, { key: "maybeLoadToolbar", value: function () { var I = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : window.location, $ = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : void 0, se = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : window.history; try { if (!$) { try { window.localStorage.setItem("test", "test"), window.localStorage.removeItem("test") } catch { return !1 } $ = window.localStorage } var Pe, R = Db(I.hash, "__posthog") || Db(I.hash, "state"), E = R ? JSON.parse(decodeURIComponent(R)) : null; return E && E.action === "ph_authorize" ? ((Pe = E).source = "url", Pe && Object.keys(Pe).length > 0 && (E.desiredHash ? I.hash = E.desiredHash : se ? se.replaceState("", document.title, I.pathname + I.search) : I.hash = "")) : ((Pe = JSON.parse($.getItem("_postHogToolbarParams") || "{}")).source = "localstorage", delete Pe.userIntent), !(!Pe.token || this.instance.get_config("token") !== Pe.token) && (this.loadToolbar(Pe), !0) } catch { return !1 } } }, { key: "loadToolbar", value: function (I) { var $ = this; if (window._postHogToolbarLoaded) return !1; window._postHogToolbarLoaded = !0; var se = this.instance.get_config("api_host"), Pe = 3e4 * Math.floor(Date.now() / 3e4), R = "".concat(se).concat(se.endsWith("/") ? "" : "/", "static/toolbar.js?_ts=").concat(Pe), E = !VT.includes(this.instance.get_config("api_host")) && this.instance.get_config("advanced_disable_toolbar_metrics"), e = Zr(Zr({ token: this.instance.get_config("token") }, I), {}, { apiURL: se }, E ? { instrument: !1 } : {}); e.source; var w = rT(e, HT); return window.localStorage.setItem("_postHogToolbarParams", JSON.stringify(w)), Ey(R, function (k) { k ? Sa.error("Failed to load toolbar", k) : (window.ph_load_toolbar || window.ph_load_editor)(e, $.instance) }), jp(window, "turbolinks:load", function () { window._postHogToolbarLoaded = !1, $.loadToolbar(e) }), !0 } }, { key: "_loadEditor", value: function (I) { return this.loadToolbar(I) } }, { key: "maybeLoadEditor", value: function () { var I = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : window.location, $ = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : void 0, se = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : window.history; return this.maybeLoadToolbar(I, $, se) } }]), L }(), s5 = function () { function L() { var I = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : 3e3; Ua(this, L), this.isPolling = !0, this._event_queue = [], this._empty_queue_count = 0, this._poller = void 0, this._pollInterval = I } return Va(L, [{ key: "setPollInterval", value: function (I) { this._pollInterval = I, this.isPolling && this.poll() } }, { key: "poll", value: function () { } }, { key: "unload", value: function () { } }, { key: "getTime", value: function () { return new Date().getTime() } }]), L }(), GT = function (L) { qw($, s5); var I = Gw($); function $(se, Pe) { var R, E = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : 3e3; return Ua(this, $), (R = I.call(this, E)).handlePollRequest = Pe, R.captureMetrics = se, R } return Va($, [{ key: "enqueue", value: function (se, Pe, R) { this.captureMetrics.incr("batch-enqueue"), this._event_queue.push({ url: se, data: Pe, options: R }), this.isPolling || (this.isPolling = !0, this.poll()) } }, { key: "poll", value: function () { var se = this; clearTimeout(this._poller), this._poller = setTimeout(function () { if (se._event_queue.length > 0) { var Pe = se.formatQueue(), R = function (e) { var w = Pe[e], k = w.url, i = w.data, _ = w.options; ji(i, function (y, h) { i[h].offset = Math.abs(i[h].timestamp - se.getTime()), delete i[h].timestamp }), se.handlePollRequest(k, i, _), se.captureMetrics.incr("batch-requests"), se.captureMetrics.incr("batch-requests-".concat(k.slice(k.length - 2))), se.captureMetrics.incr("batch-handle", i.length), se.captureMetrics.incr("batch-handle-".concat(k.slice(k.length - 2)), i.length) }; for (var E in Pe) R(E); se._event_queue.length = 0, se._empty_queue_count = 0 } else se._empty_queue_count++; se._empty_queue_count > 4 && (se.isPolling = !1, se._empty_queue_count = 0), se.isPolling && se.poll() }, this._pollInterval) } }, { key: "updateUnloadMetrics", value: function () { var se = this.formatQueue(); for (var Pe in se) { var R = se[Pe], E = R.url, e = R.data; this.captureMetrics.incr("batch-unload-requests"), this.captureMetrics.incr("batch-unload-requests-".concat(E.slice(E.length - 2))), this.captureMetrics.incr("batch-unload", e.length), this.captureMetrics.incr("batch-unload-".concat(E.slice(E.length - 2)), e.length) } } }, { key: "unload", value: function () { var se = this; clearTimeout(this._poller); var Pe = this._event_queue.length > 0 ? this.formatQueue() : {}; this._event_queue.length = 0; var R = Object.values(Pe);[].concat(um(R.filter(function (E) { return E.url.indexOf("/e") === 0 })), um(R.filter(function (E) { return E.url.indexOf("/e") !== 0 }))).map(function (E) { var e = E.url, w = E.data, k = E.options; se.handlePollRequest(e, w, Zr(Zr({}, k), {}, { transport: "sendBeacon" })) }) } }, { key: "formatQueue", value: function () { var se = {}; return ji(this._event_queue, function (Pe) { var R = Pe.url, E = Pe.data, e = Pe.options, w = (e ? e._batchKey : null) || R; se[w] === void 0 && (se[w] = { data: [], url: R, options: e }), e && se[w].options && se[w].options._metrics && !se[w].options._metrics.rrweb_full_snapshot && (se[w].options._metrics.rrweb_full_snapshot = e._metrics.rrweb_full_snapshot), se[w].data.push(E) }), se } }]), $ }(), WT = function () { function L(I) { Ua(this, L), this.enabled = I, this.metrics = {} } return Va(L, [{ key: "incr", value: function (I) { var $ = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 1; this.enabled && (I = "phjs-".concat(I), this.metrics[I] = (this.metrics[I] || 0) + $) } }, { key: "decr", value: function (I) { this.enabled && (I = "phjs-".concat(I), this.metrics[I] = (this.metrics[I] || 0) - 1) } }]), L }(), fl = Uint8Array, gs = Uint16Array, zh = Uint32Array, Py = new fl([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 0, 0, 0]), Oy = new fl([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 0, 0]), Yb = new fl([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]), l5 = function (L, I) { for (var $ = new gs(31), se = 0; se < 31; ++se)$[se] = I += 1 << L[se - 1]; var Pe = new zh($[30]); for (se = 1; se < 30; ++se)for (var R = $[se]; R < $[se + 1]; ++R)Pe[R] = R - $[se] << 5 | se; return [$, Pe] }, u5 = l5(Py, 2), ZT = u5[0], xm = u5[1]; ZT[28] = 258, xm[258] = 28; for (var Xb = l5(Oy, 0)[1], bm = new gs(32768), ha = 0; ha < 32768; ++ha) { var cf = (43690 & ha) >>> 1 | (21845 & ha) << 1; cf = (61680 & (cf = (52428 & cf) >>> 2 | (13107 & cf) << 2)) >>> 4 | (3855 & cf) << 4, bm[ha] = ((65280 & cf) >>> 8 | (255 & cf) << 8) >>> 1 } var Up = function (L, I, $) { for (var se = L.length, Pe = 0, R = new gs(I); Pe < se; ++Pe)++R[L[Pe] - 1]; var E, e = new gs(I); for (Pe = 0; Pe < I; ++Pe)e[Pe] = e[Pe - 1] + R[Pe - 1] << 1; if ($) { E = new gs(1 << I); var w = 15 - I; for (Pe = 0; Pe < se; ++Pe)if (L[Pe]) for (var k = Pe << 4 | L[Pe], i = I - L[Pe], _ = e[L[Pe] - 1]++ << i, y = _ | (1 << i) - 1; _ <= y; ++_)E[bm[_] >>> w] = k } else for (E = new gs(se), Pe = 0; Pe < se; ++Pe)E[Pe] = bm[e[L[Pe] - 1]++] >>> 15 - L[Pe]; return E }, Ef = new fl(288); for (ha = 0; ha < 144; ++ha)Ef[ha] = 8; for (ha = 144; ha < 256; ++ha)Ef[ha] = 9; for (ha = 256; ha < 280; ++ha)Ef[ha] = 7; for (ha = 280; ha < 288; ++ha)Ef[ha] = 8; var y1 = new fl(32); for (ha = 0; ha < 32; ++ha)y1[ha] = 5; var df, $b, Kb, YT = Up(Ef, 9, 0), XT = Up(y1, 5, 0), c5 = function (L) { return (L / 8 >> 0) + (7 & L && 1) }, f5 = function (L, I, $) { (I == null || I < 0) && (I = 0), ($ == null || $ > L.length) && ($ = L.length); var se = new (L instanceof gs ? gs : L instanceof zh ? zh : fl)($ - I); return se.set(L.subarray(I, $)), se }, Vu = function (L, I, $) { $ <<= 7 & I; var se = I / 8 >> 0; L[se] |= $, L[se + 1] |= $ >>> 8 }, Tp = function (L, I, $) { $ <<= 7 & I; var se = I / 8 >> 0; L[se] |= $, L[se + 1] |= $ >>> 8, L[se + 2] |= $ >>> 16 }, rv = function (L, I) { for (var $ = [], se = 0; se < L.length; ++se)L[se] && $.push({ s: se, f: L[se] }); var Pe = $.length, R = $.slice(); if (!Pe) return [new fl(0), 0]; if (Pe == 1) { var E = new fl($[0].s + 1); return E[$[0].s] = 1, [E, 1] } $.sort(function (u, p) { return u.f - p.f }), $.push({ s: -1, f: 25001 }); var e = $[0], w = $[1], k = 0, i = 1, _ = 2; for ($[0] = { s: -1, f: e.f + w.f, l: e, r: w }; i != Pe - 1;)e = $[$[k].f < $[_].f ? k++ : _++], w = $[k != i && $[k].f < $[_].f ? k++ : _++], $[i++] = { s: -1, f: e.f + w.f, l: e, r: w }; var y = R[0].s; for (se = 1; se < Pe; ++se)R[se].s > y && (y = R[se].s); var h = new gs(y + 1), l = $T($[i - 1], h, 0); if (l > I) { se = 0; var t = 0, o = l - I, r = 1 << o; for (R.sort(function (u, p) { return h[p.s] - h[u.s] || u.f - p.f }); se < Pe; ++se) { var n = R[se].s; if (!(h[n] > I)) break; t += r - (1 << l - h[n]), h[n] = I } for (t >>>= o; t > 0;) { var a = R[se].s; h[a] < I ? t -= 1 << I - h[a]++ - 1 : ++se } for (; se >= 0 && t; --se) { var s = R[se].s; h[s] == I && (--h[s], ++t) } l = I } return [new fl(h), l] }, $T = function L(I, $, se) { return I.s == -1 ? Math.max(L(I.l, $, se + 1), L(I.r, $, se + 1)) : $[I.s] = se }, Jb = function (L) { for (var I = L.length; I && !L[--I];); for (var $ = new gs(++I), se = 0, Pe = L[0], R = 1, E = function (w) { $[se++] = w }, e = 1; e <= I; ++e)if (L[e] == Pe && e != I) ++R; else { if (!Pe && R > 2) { for (; R > 138; R -= 138)E(32754); R > 2 && (E(R > 10 ? R - 11 << 5 | 28690 : R - 3 << 5 | 12305), R = 0) } else if (R > 3) { for (E(Pe), --R; R > 6; R -= 6)E(8304); R > 2 && (E(R - 3 << 5 | 8208), R = 0) } for (; R--;)E(Pe); R = 1, Pe = L[e] } return [$.subarray(0, se), I] }, Ap = function (L, I) { for (var $ = 0, se = 0; se < I.length; ++se)$ += L[se] * I[se]; return $ }, N0 = function (L, I, $) { var se = $.length, Pe = c5(I + 2); L[Pe] = 255 & se, L[Pe + 1] = se >>> 8, L[Pe + 2] = 255 ^ L[Pe], L[Pe + 3] = 255 ^ L[Pe + 1]; for (var R = 0; R < se; ++R)L[Pe + R + 4] = $[R]; return 8 * (Pe + 4 + se) }, Qb = function (L, I, $, se, Pe, R, E, e, w, k, i) { Vu(I, i++, $), ++Pe[256]; for (var _ = rv(Pe, 15), y = _[0], h = _[1], l = rv(R, 15), t = l[0], o = l[1], r = Jb(y), n = r[0], a = r[1], s = Jb(t), u = s[0], p = s[1], c = new gs(19), b = 0; b < n.length; ++b)c[31 & n[b]]++; for (b = 0; b < u.length; ++b)c[31 & u[b]]++; for (var g = rv(c, 7), f = g[0], v = g[1], m = 19; m > 4 && !f[Yb[m - 1]]; --m); var x, T, d, M, A = k + 5 << 3, C = Ap(Pe, Ef) + Ap(R, y1) + E, P = Ap(Pe, y) + Ap(R, t) + E + 14 + 3 * m + Ap(c, f) + (2 * c[16] + 3 * c[17] + 7 * c[18]); if (A <= C && A <= P) return N0(I, i, L.subarray(w, w + k)); if (Vu(I, i, 1 + (P < C)), i += 2, P < C) { x = Up(y, h, 0), T = y, d = Up(t, o, 0), M = t; var O = Up(f, v, 0); for (Vu(I, i, a - 257), Vu(I, i + 5, p - 1), Vu(I, i + 10, m - 4), i += 14, b = 0; b < m; ++b)Vu(I, i + 3 * b, f[Yb[b]]); i += 3 * m; for (var z = [n, u], B = 0; B < 2; ++B) { var Y = z[B]; for (b = 0; b < Y.length; ++b) { var D = 31 & Y[b]; Vu(I, i, O[D]), i += f[D], D > 15 && (Vu(I, i, Y[b] >>> 5 & 127), i += Y[b] >>> 12) } } } else x = YT, T = Ef, d = XT, M = y1; for (b = 0; b < e; ++b)if (se[b] > 255) { D = se[b] >>> 18 & 31, Tp(I, i, x[D + 257]), i += T[D + 257], D > 7 && (Vu(I, i, se[b] >>> 23 & 31), i += Py[D]); var G = 31 & se[b]; Tp(I, i, d[G]), i += M[G], G > 3 && (Tp(I, i, se[b] >>> 5 & 8191), i += Oy[G]) } else Tp(I, i, x[se[b]]), i += T[se[b]]; return Tp(I, i, x[256]), i + T[256] }, KT = new zh([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]), JT = new fl(0), QT = function () { for (var L = new zh(256), I = 0; I < 256; ++I) { for (var $ = I, se = 9; --se;)$ = (1 & $ && 3988292384) ^ $ >>> 1; L[I] = $ } return L }(), e7 = function () { var L = 4294967295; return { p: function (I) { for (var $ = L, se = 0; se < I.length; ++se)$ = QT[255 & $ ^ I[se]] ^ $ >>> 8; L = $ }, d: function () { return 4294967295 ^ L } } }, t7 = function (L, I, $, se, Pe) { return function (R, E, e, w, k, i) { var _ = R.length, y = new fl(w + _ + 5 * (1 + Math.floor(_ / 7e3)) + k), h = y.subarray(w, y.length - k), l = 0; if (!E || _ < 8) for (var t = 0; t <= _; t += 65535) { var o = t + 65535; o < _ ? l = N0(h, l, R.subarray(t, o)) : (h[t] = i, l = N0(h, l, R.subarray(t, _))) } else { for (var r = KT[E - 1], n = r >>> 13, a = 8191 & r, s = (1 << e) - 1, u = new gs(32768), p = new gs(s + 1), c = Math.ceil(e / 3), b = 2 * c, g = function (ue) { return (R[ue] ^ R[ue + 1] << c ^ R[ue + 2] << b) & s }, f = new zh(25e3), v = new gs(288), m = new gs(32), x = 0, T = 0, d = (t = 0, 0), M = 0, A = 0; t < _; ++t) { var C = g(t), P = 32767 & t, O = p[C]; if (u[P] = O, p[C] = P, M <= t) { var z = _ - t; if ((x > 7e3 || d > 24576) && z > 423) { l = Qb(R, h, 0, f, v, m, T, d, A, t - A, l), d = x = T = 0, A = t; for (var B = 0; B < 286; ++B)v[B] = 0; for (B = 0; B < 30; ++B)m[B] = 0 } var Y = 2, D = 0, G = a, V = P - O & 32767; if (z > 2 && C == g(t - V)) for (var j = Math.min(n, z) - 1, W = Math.min(32767, t), Z = Math.min(258, z); V <= W && --G && P != O;) { if (R[t + Y] == R[t + Y - V]) { for (var ie = 0; ie < Z && R[t + ie] == R[t + ie - V]; ++ie); if (ie > Y) { if (Y = ie, D = V, ie > j) break; var te = Math.min(V, ie - 2), J = 0; for (B = 0; B < te; ++B) { var X = t - V + B + 32768 & 32767, ee = X - u[X] + 32768 & 32767; ee > J && (J = ee, O = X) } } } V += (P = O) - (O = u[P]) + 32768 & 32767 } if (D) { f[d++] = 268435456 | xm[Y] << 18 | Xb[D]; var re = 31 & xm[Y], oe = 31 & Xb[D]; T += Py[re] + Oy[oe], ++v[257 + re], ++m[oe], M = t + Y, ++x } else f[d++] = R[t], ++v[R[t]] } } l = Qb(R, h, i, f, v, m, T, d, A, t - A, l), i || (l = N0(h, l, JT)) } return f5(y, 0, w + c5(l) + k) }(L, I.level == null ? 6 : I.level, I.mem == null ? Math.ceil(1.5 * Math.max(8, Math.min(13, Math.log(L.length)))) : 12 + I.mem, $, se, !Pe) }, _m = function (L, I, $) { for (; $; ++I)L[I] = $, $ >>>= 8 }, n7 = function (L, I) { var $ = I.filename; if (L[0] = 31, L[1] = 139, L[2] = 8, L[8] = I.level < 2 ? 4 : I.level == 9 ? 2 : 0, L[9] = 3, I.mtime != 0 && _m(L, 4, Math.floor(new Date(I.mtime || Date.now()) / 1e3)), $) { L[3] = 8; for (var se = 0; se <= $.length; ++se)L[se + 10] = $.charCodeAt(se) } }, r7 = function (L) { return 10 + (L.filename && L.filename.length + 1 || 0) }; function i7(L, I) { I === void 0 && (I = {}); var $ = e7(), se = L.length; $.p(L); var Pe = t7(L, I, r7(I), 8), R = Pe.length; return n7(Pe, I), _m(Pe, R - 8, $.d()), _m(Pe, R - 4, se), Pe } function a7(L, I) { var $ = L.length; if (!I && typeof TextEncoder < "u") return new TextEncoder().encode(L); for (var se = new fl(L.length + (L.length >>> 1)), Pe = 0, R = function (k) { se[Pe++] = k }, E = 0; E < $; ++E) { if (Pe + 5 > se.length) { var e = new fl(Pe + 8 + ($ - E << 1)); e.set(se), se = e } var w = L.charCodeAt(E); w < 128 || I ? R(w) : w < 2048 ? (R(192 | w >>> 6), R(128 | 63 & w)) : w > 55295 && w < 57344 ? (R(240 | (w = 65536 + (1047552 & w) | 1023 & L.charCodeAt(++E)) >>> 18), R(128 | w >>> 12 & 63), R(128 | w >>> 6 & 63), R(128 | 63 & w)) : (R(224 | w >>> 12), R(128 | w >>> 6 & 63), R(128 | 63 & w)) } return f5(se, 0, Pe) } (function (L) { L.GZipJS = "gzip-js", L.Base64 = "base64" })(df || (df = {})), function (L) { L.Popover = "Popover", L.Button = "Button", L.Email = "Email", L.FullScreen = "Fullscreen" }($b || ($b = {})), function (L) { L.Open = "open", L.MultipleChoiceSingle = "multiple_single", L.MultipleChoiceMulti = "multiple_multi", L.NPS = "nps", L.Rating = "rating", L.Link = "link" }(Kb || (Kb = {})); var o7 = function (L, I, $) { var se = I || {}; se.ip = $.ip ? 1 : 0, se._ = new Date().getTime().toString(), se.ver = Su.LIB_VERSION; var Pe = L.split("?"); if (Pe.length > 1) { var R, E = nc(Pe[1].split("&")); try { for (E.s(); !(R = E.n()).done;) { var e = R.value.split("=")[0]; se[e] && delete se[e] } } catch (k) { E.e(k) } finally { E.f() } } var w = L.indexOf("?") > -1 ? "&" : "?"; return L + w + function (k) { var i, _, y = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : "&", h = []; return ji(k, function (l, t) { i = encodeURIComponent(l.toString()), _ = encodeURIComponent(t), h[h.length] = _ + "=" + i }), h.join(y) }(se) }, Iy = function L(I, $) { if ($.blob && I.buffer) return new Blob([I.buffer], { type: "text/plain" }); if ($.sendBeacon || $.blob) { var se = L(I, { method: "POST" }); return new Blob([se], { type: "application/x-www-form-urlencoded" }) } if ($.method !== "POST") return null; var Pe, R; return Pe = Array.isArray(I) || (R = I, Object.prototype.toString.call(R) === "[object Uint8Array]") ? "data=" + encodeURIComponent(I) : "data=" + encodeURIComponent(I.data), "compression" in I && I.compression && (Pe += "&compression=" + I.compression), Pe }, h5 = function (L) { var I = L.url, $ = L.data, se = L.headers, Pe = L.options, R = L.captureMetrics, E = L.callback, e = L.retriesPerformedSoFar, w = L.retryQueue, k = L.onXHRError, i = L.timeout, _ = i === void 0 ? 1e4 : i, y = new XMLHttpRequest; y.open(Pe.method || "GET", I, !0); var h = Iy($, Pe); R.incr("_send_request"), R.incr("_send_request_inflight"), ji(se, function (l, t) { y.setRequestHeader(t, l) }), Pe.method !== "POST" || Pe.blob || y.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"), y.timeout = _, y.withCredentials = !0, y.onreadystatechange = function () { if (y.readyState === 4) if (R.incr("xhr-response"), R.incr("xhr-response-".concat(y.status)), R.decr("_send_request_inflight"), y.status === 200) { if (E) { var l; try { l = JSON.parse(y.responseText) } catch (t) { return void Sa.error(t) } E(l) } } else typeof k == "function" && k(y), [401, 403, 404, 500].indexOf(y.status) < 0 && w.enqueue({ url: I, data: $, options: Pe, headers: se, retriesPerformedSoFar: (e || 0) + 1, callback: E }), E && E({ status: 0 }) }, y.send(h) }, s7 = 18e5, l7 = function (L) { qw($, s5); var I = Gw($); function $(se, Pe) { var R; return Ua(this, $), (R = I.call(this)).captureMetrics = se, R.isPolling = !1, R.queue = [], R.areWeOnline = !0, R.onXHRError = Pe, typeof window < "u" && "onLine" in window.navigator && (R.areWeOnline = window.navigator.onLine, window.addEventListener("online", function () { R._handleWeAreNowOnline() }), window.addEventListener("offline", function () { R.areWeOnline = !1 })), R } return Va($, [{ key: "enqueue", value: function (se) { var Pe = se.retriesPerformedSoFar || 0; if (!(Pe >= 10)) { var R = function (e) { var w = 3e3 * Math.pow(2, e), k = w / 2, i = Math.min(s7, w), _ = (Math.random() - .5) * (i - k); return Math.ceil(i + _) }(Pe), E = new Date(Date.now() + R); this.queue.push({ retryAt: E, requestData: se }), console.warn("Enqueued failed request for retry in ".concat(R)), this.isPolling || (this.isPolling = !0, this.poll()) } } }, { key: "poll", value: function () { var se = this; this._poller && clearTimeout(this._poller), this._poller = setTimeout(function () { se.areWeOnline && se.queue.length > 0 && se.flush(), se.poll() }, this._pollInterval) } }, { key: "flush", value: function () { var se = new Date(Date.now()), Pe = this.queue.filter(function (w) { return w.retryAt < se }); if (Pe.length > 0) { this.queue = this.queue.filter(function (w) { return w.retryAt >= se }); var R, E = nc(Pe); try { for (E.s(); !(R = E.n()).done;) { var e = R.value.requestData; this._executeXhrRequest(e) } } catch (w) { E.e(w) } finally { E.f() } } } }, { key: "unload", value: function () { this._poller && (clearTimeout(this._poller), this._poller = void 0); var se, Pe = nc(this.queue); try { for (Pe.s(); !(se = Pe.n()).done;) { var R = se.value.requestData, E = R.url, e = R.data, w = R.options; try { window.navigator.sendBeacon(E, Iy(e, Zr(Zr({}, w), {}, { sendBeacon: !0 }))) } catch (k) { Su.DEBUG && console.error(k) } } } catch (k) { Pe.e(k) } finally { Pe.f() } this.queue = [] } }, { key: "_executeXhrRequest", value: function (se) { var Pe = se.url, R = se.data, E = se.options, e = se.headers, w = se.callback, k = se.retriesPerformedSoFar; h5({ url: Pe, data: R || {}, options: E || {}, headers: e || {}, retriesPerformedSoFar: k || 0, callback: w, captureMetrics: this.captureMetrics, retryQueue: this, onXHRError: this.onXHRError }) } }, { key: "_handleWeAreNowOnline", value: function () { this.areWeOnline = !0, this.flush() } }]), $ }(), u7 = 18e5, c7 = 864e5, f7 = function () { function L(I, $) { Ua(this, L), this.config = I, this.persistence = $, this._windowId = void 0, this._sessionId = void 0, this._sessionStartTimestamp = null, this._sessionActivityTimestamp = null; var se = I.persistence_name || I.token; if (this.window_id_storage_key = "ph_" + se + "_window_id", this.primary_window_exists_storage_key = "ph_" + se + "_primary_window_exists", this._canUseSessionStorage()) { var Pe = Oo.parse(this.window_id_storage_key), R = Oo.parse(this.primary_window_exists_storage_key); Pe && !R ? this._windowId = Pe : Oo.remove(this.window_id_storage_key), Oo.set(this.primary_window_exists_storage_key, !0) } this._listenToReloadWindow() } return Va(L, [{ key: "_canUseSessionStorage", value: function () { return this.config.persistence !== "memory" && !this.persistence.disabled && Oo.is_supported() } }, { key: "_setWindowId", value: function (I) { I !== this._windowId && (this._windowId = I, this._canUseSessionStorage() && Oo.set(this.window_id_storage_key, I)) } }, { key: "_getWindowId", value: function () { return this._windowId ? this._windowId : this._canUseSessionStorage() ? Oo.parse(this.window_id_storage_key) : null } }, { key: "_setSessionId", value: function (I, $, se) { I === this._sessionId && $ === this._sessionActivityTimestamp && se === this._sessionStartTimestamp || (this._sessionStartTimestamp = se, this._sessionActivityTimestamp = $, this._sessionId = I, this.persistence.register(Jr({}, gm, [$, I, se]))) } }, { key: "_getSessionId", value: function () { if (this._sessionId && this._sessionActivityTimestamp && this._sessionStartTimestamp) return [this._sessionActivityTimestamp, this._sessionId, this._sessionStartTimestamp]; var I = this.persistence.props[gm]; return Array.isArray(I) && I.length === 2 && I.push(I[0]), I || [0, null, 0] } }, { key: "resetSessionId", value: function () { this._setSessionId(null, null, null) } }, { key: "_listenToReloadWindow", value: function () { var I = this; window.addEventListener("beforeunload", function () { I._canUseSessionStorage() && Oo.remove(I.primary_window_exists_storage_key) }) } }, { key: "checkAndGetSessionAndWindowId", value: function () { var I = arguments.length > 0 && arguments[0] !== void 0 && arguments[0], $ = (arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : null) || new Date().getTime(), se = Wc(this._getSessionId(), 3), Pe = se[0], R = se[1], E = se[2], e = this._getWindowId(), w = E && E > 0 && Math.abs($ - E) > c7; !R || !I && Math.abs($ - Pe) > u7 || w ? (R = Xu(), e = Xu(), E = $) : e || (e = Xu()); var k = Pe === 0 || !I || w ? $ : Pe, i = E === 0 ? new Date().getTime() : E; return this._setWindowId(e), this._setSessionId(R, k, i), { sessionId: R, windowId: e } } }]), L }(), h7 = Va(function L(I, $, se, Pe) { Ua(this, L), this.name = "posthog-js", this.setupOnce = function (R) { R(function (E) { var e, w, k, i, _; if (E.level !== "error" || !I.__loaded) return E; E.tags || (E.tags = {}); var y = I.config.ui_host || I.config.api_host; E.tags["PostHog Person URL"] = y + "/person/" + I.get_distinct_id(), I.sessionRecordingStarted() && (E.tags["PostHog Recording URL"] = I.get_session_replay_url({ withTimestamp: !0 })); var h = ((e = E.exception) === null || e === void 0 ? void 0 : e.values) || [], l = { $exception_message: (w = h[0]) === null || w === void 0 ? void 0 : w.value, $exception_type: (k = h[0]) === null || k === void 0 ? void 0 : k.type, $exception_personURL: y + "/person/" + I.get_distinct_id(), $sentry_event_id: E.event_id, $sentry_exception: E.exception, $sentry_exception_message: (i = h[0]) === null || i === void 0 ? void 0 : i.value, $sentry_exception_type: (_ = h[0]) === null || _ === void 0 ? void 0 : _.type, $sentry_tags: E.tags }; return $ && se && (l.$sentry_url = (Pe || "https://sentry.io/organizations/") + $ + "/issues/?project=" + se + "&query=" + E.event_id), I.capture("$exception", l), E }) } }), p7 = function (L) { Promise && Promise.resolve || console.warn("This browser does not have Promise support, and can not use the segment integration"); var I = function ($, se) { $.event.userId || $.event.anonymousId === L.get_distinct_id() || L.reset(), $.event.userId && $.event.userId !== L.get_distinct_id() && (L.register({ distinct_id: $.event.userId }), L.reloadFeatureFlags()); var Pe = L._calculate_event_properties(se, $.event.properties); return $.event.properties = Object.assign({}, Pe, $.event.properties), $ }; return { name: "PostHog JS", type: "enrichment", version: "1.0.0", isLoaded: function () { return !0 }, load: function () { return Promise.resolve() }, track: function ($) { return I($, $.event.event) }, page: function ($) { return I($, "$pageview") }, identify: function ($) { return I($, "$identify") }, screen: function ($) { return I($, "$screen") } } }, d7 = function () { function L() { Ua(this, L), Jr(this, "_seenFirstPageView", !1) } return Va(L, [{ key: "onPageview", value: function () { this._seenFirstPageView && (this._pageViewId = Xu()), this._seenFirstPageView = !0 } }, { key: "getPageViewId", value: function () { return this._pageViewId || (this._pageViewId = Xu()), this._pageViewId } }]), L }(); function e_(L) { return typeof Event < "u" && p5(L, Event) } function p5(L, I) { try { return L instanceof I } catch { return !1 } } function j0(L, I) { return Object.prototype.toString.call(L) === "[object ".concat(I, "]") } function iv(L) { return j0(L, "DOMError") } var t_ = /\(error: (.*)\)/, n_ = 50, U0 = "?"; function av(L, I, $, se) { var Pe = { filename: L, function: I, in_app: !0 }; return $ !== void 0 && (Pe.lineno = $), se !== void 0 && (Pe.colno = se), Pe } var g7 = /^\s*at (?:(.+?\)(?: \[.+\])?|.*?) ?\((?:address at )?)?(?:async )?((?:|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i, v7 = /\((\S*)(?::(\d+))(?::(\d+))\)/, m7 = /^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:[-a-z]+)?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i, y7 = /(\S+) line (\d+)(?: > eval line \d+)* > eval/i, x7 = /^\s*at (?:((?:\[object object\])?.+) )?\(?((?:[-a-z]+):.*?):(\d+)(?::(\d+))?\)?\s*$/i, b7 = function () { for (var L = arguments.length, I = new Array(L), $ = 0; $ < L; $++)I[$] = arguments[$]; var se = I.sort(function (Pe, R) { return Pe[0] - R[0] }).map(function (Pe) { return Pe[1] }); return function (Pe) { for (var R = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 0, E = [], e = Pe.split(` `), w = R; w < e.length; w++) { var k = e[w]; if (!(k.length > 1024)) { var i = t_.test(k) ? k.replace(t_, "$1") : k; if (!i.match(/\S*Error: /)) { var _, y = nc(se); try { for (y.s(); !(_ = y.n()).done;) { var h = (0, _.value)(i); if (h) { E.push(h); break } } } catch (l) { y.e(l) } finally { y.f() } if (E.length >= n_) break } } } return function (l) { if (!l.length) return []; var t = l.slice(0, n_); return t.reverse(), t.map(function (o) { return Zr(Zr({}, o), {}, { filename: o.filename || t[t.length - 1].filename, function: o.function || "?" }) }) }(E) } - }.apply(void 0, [[30, function (L) { var I = g7.exec(L); if (I) { if (I[2] && I[2].indexOf("eval") === 0) { var $ = v7.exec(I[2]); $ && (I[2] = $[1], I[3] = $[2], I[4] = $[3]) } var se = Wc(r_(I[1] || U0, I[2]), 2), Pe = se[0]; return av(se[1], Pe, I[3] ? +I[3] : void 0, I[4] ? +I[4] : void 0) } }], [50, function (L) { var I = m7.exec(L); if (I) { if (I[3] && I[3].indexOf(" > eval") > -1) { var $ = y7.exec(I[3]); $ && (I[1] = I[1] || "eval", I[3] = $[1], I[4] = $[2], I[5] = "") } var se = I[3], Pe = I[1] || U0, R = Wc(r_(Pe, se), 2); return Pe = R[0], av(se = R[1], Pe, I[4] ? +I[4] : void 0, I[5] ? +I[5] : void 0) } }], [40, function (L) { var I = x7.exec(L); return I ? av(I[2], I[1] || U0, +I[3], I[4] ? +I[4] : void 0) : void 0 }]]), r_ = function (L, I) { var $ = L.indexOf("safari-extension") !== -1, se = L.indexOf("safari-web-extension") !== -1; return $ || se ? [L.indexOf("@") !== -1 ? L.split("@")[0] : U0, $ ? "safari-extension:".concat(I) : "safari-web-extension:".concat(I)] : [L, I] }, _7 = /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i, w7 = /Minified React error #\d+;/i; function k7(L) { var I = L.stacktrace || L.stack || "", $ = function (se) { if (se) { if (typeof se.framesToPop == "number") return se.framesToPop; if (w7.test(se.message)) return 1 } return 0 }(L); try { return b7(I, $) } catch { } return [] } function ov(L) { var I = k7(L); return { $exception_type: L.name, $exception_message: L.message, $exception_stack_trace_raw: JSON.stringify(I) } } function T7(L) { var I = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 40, $ = Object.keys(L); if ($.sort(), !$.length) return "[object has no keys]"; for (var se = $.length; se > 0; se--) { var Pe = $.slice(0, se).join(", "); if (!(Pe.length > I)) return se === $.length || Pe.length <= I ? Pe : "".concat(Pe.slice(0, I), "...") } return "" } function d5(L) { var I = Wc(L, 5), $ = I[0], se = I[1], Pe = I[2], R = I[3], E = I[4], e = {}; if (E === void 0 && typeof $ == "string") { var w = "Error", k = $, i = $.match(_7); i && (w = i[1], k = i[2]), e = { $exception_type: w, $exception_message: k } } var _ = E || $; if (iv(_) || function (t) { return j0(t, "DOMException") }(_)) { var y = _; if (function (t) { return "stack" in t }(_)) e = ov(_); else { var h = y.name || (iv(y) ? "DOMError" : "DOMException"), l = y.message ? "".concat(h, ": ").concat(y.message) : h; e = function (t) { return { $exception_type: "Error", $exception_message: t } }(l), e.$exception_type = iv(y) ? "DOMError" : "DOMException", e.$exception_message = e.$exception_message || l } "code" in y && (e.$exception_DOMException_code = "".concat(y.code)) } else (function (t) { return j0(t, "ErrorEvent") })(_) && _.error ? e = ov(_.error) : function (t) { switch (Object.prototype.toString.call(t)) { case "[object Error]": case "[object Exception]": case "[object DOMException]": return !0; default: return p5(t, Error) } }(_) ? e = ov(_) : function (t) { return j0(t, "Object") }(_) || e_(_) ? (e = function (t) { return { $exception_type: e_(t) ? t.constructor.name : "Error", $exception_message: "Non-Error ".concat("exception", " captured with keys: ", T7(t)) } }(_), e.$exception_is_synthetic = !0) : (e.$exception_type = e.$exception_type || "Error", e.$exception_message = e.$exception_message || _, e.$exception_is_synthetic = !0); return Zr(Zr(Zr(Zr({}, e), {}, { $exception_type: e.$exception_type || "UnknownErrorType", $exception_message: e.$exception_message || "" }, se ? { $exception_source: se } : {}), Pe ? { $exception_lineno: Pe } : {}), R ? { $exception_colno: R } : {}) } function A7(L) { var I = Wc(L, 1)[0], $ = I; try { "reason" in I ? $ = I.reason : "detail" in I && "reason" in I.detail && ($ = I.detail.reason) } catch { } var se, Pe = {}; return (Pe = (se = $) === null || Hc(se) !== "object" && typeof se != "function" ? { $exception_message: "Non-Error promise rejection captured with value: ".concat(String($)) } : d5([$])).$exception_handled = !1, Zr(Zr({}, Pe), {}, { $exception_type: Pe.$exception_type = "UnhandledRejection", $exception_message: Pe.$exception_message = Pe.$exception_message || I.reason || String($) }) } var ad, Ry, Po, M7 = function () { function L(I) { Ua(this, L), Jr(this, "originalOnErrorHandler", void 0), Jr(this, "originalOnUnhandledRejectionHandler", void 0), this.instance = I } return Va(L, [{ key: "startCapturing", value: function () { var I; if (this.isEnabled() && ((I = qr.onerror) === null || I === void 0 || !I.__POSTHOG_INSTRUMENTED__)) try { this.originalOnErrorHandler = qr.onerror, qr.onerror = function () { for (var $ = arguments.length, se = new Array($), Pe = 0; Pe < $; Pe++)se[Pe] = arguments[Pe]; return this.captureException(se), !!this.originalOnErrorHandler && this.originalOnErrorHandler.apply(this, se) }.bind(this), qr.onerror.__POSTHOG_INSTRUMENTED__ = !0, this.originalOnUnhandledRejectionHandler = qr.onunhandledrejection, qr.onunhandledrejection = function () { for (var $ = arguments.length, se = new Array($), Pe = 0; Pe < $; Pe++)se[Pe] = arguments[Pe]; var R = A7(se); return this.sendExceptionEvent(R), !this.originalOnUnhandledRejectionHandler || this.originalOnUnhandledRejectionHandler.apply(qr, se) }.bind(this), qr.onunhandledrejection.__POSTHOG_INSTRUMENTED__ = !0 } catch ($) { console.error("PostHog failed to start exception autocapture", $), this.stopCapturing() } } }, { key: "stopCapturing", value: function () { var I, $; this.originalOnErrorHandler !== void 0 && (qr.onerror = this.originalOnErrorHandler, this.originalOnErrorHandler = null), (I = qr.onerror) === null || I === void 0 || delete I.__POSTHOG_INSTRUMENTED__, this.originalOnUnhandledRejectionHandler !== void 0 && (qr.onunhandledrejection = this.originalOnUnhandledRejectionHandler, this.originalOnUnhandledRejectionHandler = null), ($ = qr.onunhandledrejection) === null || $ === void 0 || delete $.__POSTHOG_INSTRUMENTED__ } }, { key: "isCapturing", value: function () { var I; return !((I = qr.onerror) === null || I === void 0 || !I.__POSTHOG_INSTRUMENTED__) } }, { key: "isEnabled", value: function () { var I; return (I = this.remoteEnabled) !== null && I !== void 0 && I } }, { key: "afterDecideResponse", value: function (I) { this.remoteEnabled = I.autocaptureExceptions || !1, this.isEnabled() && this.startCapturing() } }, { key: "captureException", value: function (I, $) { var se = d5(I), Pe = Zr(Zr({}, $), se), R = this.instance.config.ui_host || this.instance.config.api_host; se.$exception_personURL = R + "/person/" + this.instance.get_distinct_id(), this.sendExceptionEvent(Pe) } }, { key: "sendExceptionEvent", value: function (I) { this.instance.capture("$exception", I, { transport: "XHR", method: "POST", endpoint: "/e/", _noTruncate: !0, _batchKey: "exceptionEvent" }) } }]), L }(), S7 = function () { function L(I) { Ua(this, L), this.instance = I } return Va(L, [{ key: "getSurveys", value: function (I) { var $ = this, se = arguments.length > 1 && arguments[1] !== void 0 && arguments[1], Pe = this.instance.get_property(mm); if (Pe && !se) return I(Pe); this.instance._send_request("".concat(this.instance.get_config("api_host"), "/api/surveys/?token=").concat(this.instance.get_config("token")), {}, { method: "GET" }, function (R) { var E = R.surveys; return $.instance.persistence.register(Jr({}, mm, E)), I(E) }) } }, { key: "getActiveMatchingSurveys", value: function (I) { var $ = this, se = arguments.length > 1 && arguments[1] !== void 0 && arguments[1]; this.getSurveys(function (Pe) { var R = Pe.filter(function (E) { return !(!E.start_date || E.end_date) }).filter(function (E) { var e, w; if (!E.conditions) return !0; var k = (e = E.conditions) === null || e === void 0 || !e.url || window.location.href.indexOf(E.conditions.url) > -1, i = (w = E.conditions) === null || w === void 0 || !w.selector || document.querySelector(E.conditions.selector); return k && i }).filter(function (E) { if (!E.linked_flag_key && !E.targeting_flag_key) return !0; var e = !E.linked_flag_key || $.instance.featureFlags.isFeatureEnabled(E.linked_flag_key), w = !E.targeting_flag_key || $.instance.featureFlags.isFeatureEnabled(E.targeting_flag_key); return e && w }); return I(R) }, se) } }]), L }(); (function (L) { L[L.INIT_MODULE = 0] = "INIT_MODULE", L[L.INIT_SNIPPET = 1] = "INIT_SNIPPET" })(ad || (ad = {})); var wm = function () { }, x0 = {}, Bs = "posthog", V0 = qr.XMLHttpRequest && "withCredentials" in new XMLHttpRequest, g5 = !V0 && El.indexOf("MSIE") === -1 && El.indexOf("Mozilla") === -1, i_ = function () { var L, I, $; return { api_host: "https://eu.posthog.com", api_method: "POST", api_transport: "XHR", ui_host: null, token: "", autocapture: !0, rageclick: !0, cross_subdomain_cookie: (ao == null || (L = ao.location) === null || L === void 0 || (I = L.hostname) === null || I === void 0 ? void 0 : I.indexOf("herokuapp.com")) === -1, persistence: "cookie", persistence_name: "", cookie_name: "", loaded: wm, store_google: !0, custom_campaign_params: [], save_referrer: !0, test: !1, verbose: !1, capture_pageview: !0, capture_pageleave: !0, debug: !1, cookie_expiration: 365, upgrade: !1, disable_session_recording: !1, disable_persistence: !1, disable_cookie: !1, enable_recording_console_log: void 0, secure_cookie: (qr == null || ($ = qr.location) === null || $ === void 0 ? void 0 : $.protocol) === "https:", ip: !0, opt_out_capturing_by_default: !1, opt_out_persistence_by_default: !1, opt_out_capturing_persistence_type: "localStorage", opt_out_capturing_cookie_prefix: null, opt_in_site_apps: !1, property_blacklist: [], respect_dnt: !1, sanitize_properties: null, xhr_headers: {}, inapp_protocol: "//", inapp_link_new_window: !1, request_batching: !0, properties_string_max_length: 65535, session_recording: {}, mask_all_element_attributes: !1, mask_all_text: !1, advanced_disable_decide: !1, advanced_disable_toolbar_metrics: !1, on_xhr_error: function (se) { var Pe = "Bad HTTP status: " + se.status + " " + se.statusText; console.error(Pe) }, get_device_id: function (se) { return se }, _onCapture: wm, _capture_metrics: !1, capture_performance: void 0, name: "posthog", callback_fn: "posthog._jsc", bootstrap: {}, disable_compression: !1 } }, km = function (L, I, $, se) { var Pe, R = $ !== Bs && Po ? $ ? Po[$] : void 0 : Po, E = { initComplete: !1, syncCode: !1 }, e = function (w) { return function (k) { E[w] || (E[w] = !0, E.initComplete && E.syncCode && (se == null || se(k))) } }; if (R && Ry === ad.INIT_MODULE) Pe = R; else { if (R && !Wu(R)) return void console.error("You have already initialized " + $); Pe = new zy } return Pe._init(L, I, $, e("initComplete")), Pe.toolbar.maybeLoadToolbar(), Pe.sessionRecording = new DT(Pe), Pe.sessionRecording.startRecordingIfEnabled(), Pe.webPerformance = new NT(Pe), Pe.webPerformance.startObservingIfEnabled(), Pe.exceptionAutocapture = new M7(Pe), Pe.__autocapture = Pe.get_config("autocapture"), Cc._setIsAutocaptureEnabled(Pe), Cc._isAutocaptureEnabled && (Pe.__autocapture = Pe.get_config("autocapture"), Cc.enabledForProject(Pe.get_config("token"), 100, 100) ? Cc.isBrowserSupported() ? Cc.init(Pe) : (Pe.__autocapture = !1, Sa.log("Disabling Automatic Event Collection because this browser is not supported")) : (Pe.__autocapture = !1, Sa.log("Not in active bucket: disabling Automatic Event Collection."))), Su.DEBUG = Su.DEBUG || Pe.get_config("debug"), R !== void 0 && Wu(R) && (Pe._execute_array.call(Pe.people, R.people), Pe._execute_array(R)), e("syncCode")(Pe), Pe }, zy = function () { function L() { var I = this; Ua(this, L), this.config = i_(), this.compression = {}, this.decideEndpointWasHit = !1, this.SentryIntegration = h7, this.segmentIntegration = function () { return p7(I) }, this.__captureHooks = [], this.__request_queue = [], this.__loaded = !1, this.__loaded_recorder_version = void 0, this.__autocapture = void 0, this._jsc = function () { }, this.people = new ET(this), this.featureFlags = new CT(this), this.feature_flags = this.featureFlags, this.toolbar = new qT(this), this.pageViewIdManager = new d7, this.surveys = new S7(this), this._captureMetrics = void 0, this._requestQueue = void 0, this._retryQueue = void 0, this.persistence = void 0, this.sessionPersistence = void 0, this.sessionManager = void 0 } return Va(L, [{ key: "init", value: function (I, $, se) { if (nu(se)) console.error("You must name your new library: init(token, config, name)"); else { if (se !== Bs) { var Pe = km(I, $, se, function (R) { Po[se] = R, R._loaded() }); return Po[se] = Pe, Pe } console.error("You must initialize the main posthog object right after you include the PostHog js snippet") } } }, { key: "_init", value: function (I) { var $, se, Pe = this, R = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, E = arguments.length > 2 ? arguments[2] : void 0, e = arguments.length > 3 ? arguments[3] : void 0; this.__loaded = !0, this.config = {}, this._triggered_notifs = []; var w, k = { segmentRegister: !1, syncCode: !1 }, i = function (s) { return function () { k[s] || (k[s] = !0, k.segmentRegister && k.syncCode && (e == null || e(Pe))) } }; if (this.set_config(Lo({}, i_(), R, { name: E, token: I, callback_fn: (E === Bs ? E : Bs + "." + E) + "._jsc" })), this._jsc = function () { }, (qr != null && ($ = qr.rrweb) !== null && $ !== void 0 && $.record || qr != null && qr.rrwebRecord) && (this.__loaded_recorder_version = qr == null || (w = qr.rrweb) === null || w === void 0 ? void 0 : w.version), this._captureMetrics = new WT(this.get_config("_capture_metrics")), this._requestQueue = new GT(this._captureMetrics, this._handle_queued_event.bind(this)), this._retryQueue = new l7(this._captureMetrics, this.get_config("on_xhr_error")), this.__captureHooks = [], this.__request_queue = [], this.persistence = new Hb(this.config), this.sessionManager = new f7(this.config, this.persistence), this.sessionPersistence = this.config.persistence === "sessionStorage" ? this.persistence : new Hb(Zr(Zr({}, this.config), {}, { persistence: "sessionStorage" })), this._gdpr_init(), R.segment ? (this.config.get_device_id = function () { return R.segment.user().anonymousId() }, R.segment.user().id() && (this.register({ distinct_id: R.segment.user().id() }), this.persistence.set_user_state("identified")), R.segment.register(this.segmentIntegration()).then(i("segmentRegister"))) : i("segmentRegister")(), ((se = R.bootstrap) === null || se === void 0 ? void 0 : se.distinctID) !== void 0) { var _, y, h = this.get_config("get_device_id")(Xu()), l = (_ = R.bootstrap) !== null && _ !== void 0 && _.isIdentifiedID ? h : R.bootstrap.distinctID; this.persistence.set_user_state((y = R.bootstrap) !== null && y !== void 0 && y.isIdentifiedID ? "identified" : "anonymous"), this.register({ distinct_id: R.bootstrap.distinctID, $device_id: l }) } if (this._hasBootstrappedFeatureFlags()) { var t, o, r = Object.keys(((t = R.bootstrap) === null || t === void 0 ? void 0 : t.featureFlags) || {}).filter(function (s) { var u, p; return !((u = R.bootstrap) === null || u === void 0 || (p = u.featureFlags) === null || p === void 0 || !p[s]) }).reduce(function (s, u) { var p, c; return s[u] = ((p = R.bootstrap) === null || p === void 0 || (c = p.featureFlags) === null || c === void 0 ? void 0 : c[u]) || !1, s }, {}), n = Object.keys(((o = R.bootstrap) === null || o === void 0 ? void 0 : o.featureFlagPayloads) || {}).filter(function (s) { return r[s] }).reduce(function (s, u) { var p, c, b, g; return (p = R.bootstrap) !== null && p !== void 0 && (c = p.featureFlagPayloads) !== null && c !== void 0 && c[u] && (s[u] = (b = R.bootstrap) === null || b === void 0 || (g = b.featureFlagPayloads) === null || g === void 0 ? void 0 : g[u]), s }, {}); this.featureFlags.receivedFeatureFlags({ featureFlags: r, featureFlagPayloads: n }) } if (!this.get_distinct_id()) { var a = this.get_config("get_device_id")(Xu()); this.register_once({ distinct_id: a, $device_id: a }, ""), this.persistence.set_user_state("anonymous") } qr.addEventListener && qr.addEventListener("onpagehide" in self ? "pagehide" : "unload", this._handle_unload.bind(this)), i("syncCode")() } }, { key: "_loaded", value: function () { this.featureFlags.setReloadingPaused(!0); try { this.get_config("loaded")(this) } catch (I) { console.error("`loaded` function failed", I) } this._start_queue_if_opted_in(), this.get_config("capture_pageview") && this.capture("$pageview", {}, { send_instantly: !0 }), this.get_config("advanced_disable_decide") || new UT(this).call(), this.featureFlags.resetRequestQueue(), this.featureFlags.setReloadingPaused(!1) } }, { key: "_start_queue_if_opted_in", value: function () { this.has_opted_out_capturing() || this.get_config("request_batching") && this._requestQueue.poll() } }, { key: "_dom_loaded", value: function () { var I = this; this.has_opted_out_capturing() || Ku(this.__request_queue, function ($) { I._send_request.apply(I, um($)) }), this.__request_queue = [], this._start_queue_if_opted_in() } }, { key: "_prepare_callback", value: function (I, $) { if (nu(I)) return null; if (V0) return function (E) { I(E, $) }; var se = this._jsc, Pe = "" + Math.floor(1e8 * Math.random()), R = this.get_config("callback_fn") + "[" + Pe + "]"; return se[Pe] = function (E) { delete se[Pe], I(E, $) }, R } }, { key: "_handle_unload", value: function () { this.get_config("request_batching") ? (this.get_config("capture_pageview") && this.get_config("capture_pageleave") && this.capture("$pageleave"), this.get_config("_capture_metrics") && (this._requestQueue.updateUnloadMetrics(), this.capture("$capture_metrics", this._captureMetrics.metrics)), this._requestQueue.unload(), this._retryQueue.unload()) : this.get_config("capture_pageview") && this.get_config("capture_pageleave") && this.capture("$pageleave", null, { transport: "sendBeacon" }) } }, { key: "_handle_queued_event", value: function (I, $, se) { var Pe = JSON.stringify($); this.__compress_and_send_json_request(I, Pe, se || x0, wm) } }, { key: "__compress_and_send_json_request", value: function (I, $, se, Pe) { var R = function (k, i, _) { return k === df.GZipJS ? [i7(a7(i), { mtime: 0 }), Zr(Zr({}, _), {}, { blob: !0, urlQueryArgs: { compression: df.GZipJS } })] : [{ data: F1(i) }, _] }(this.compression[df.GZipJS] ? df.GZipJS : df.Base64, $, se), E = Wc(R, 2), e = E[0], w = E[1]; this._send_request(I, e, w, Pe) } }, { key: "_send_request", value: function (I, $, se, Pe) { if (g5) this.__request_queue.push([I, $, se, Pe]); else { var R = { method: this.get_config("api_method"), transport: this.get_config("api_transport"), verbose: this.get_config("verbose") }; se = Lo(R, se || {}), V0 || (se.method = "GET"); var E = "sendBeacon" in qr.navigator && se.transport === "sendBeacon"; if (I = o7(I, se.urlQueryArgs || {}, { ip: this.get_config("ip") }), E) try { qr.navigator.sendBeacon(I, Iy($, Zr(Zr({}, se), {}, { sendBeacon: !0 }))) } catch (i) { this.get_config("debug") && console.error(i) } else if (V0) try { h5({ url: I, data: $, headers: this.get_config("xhr_headers"), options: se, captureMetrics: this._captureMetrics, callback: Pe, retriesPerformedSoFar: 0, retryQueue: this._retryQueue, onXHRError: this.get_config("on_xhr_error") }) } catch (i) { console.error(i) } else { var e, w = ao.createElement("script"); w.type = "text/javascript", w.async = !0, w.defer = !0, w.src = I; var k = ao.getElementsByTagName("script")[0]; (e = k.parentNode) === null || e === void 0 || e.insertBefore(w, k) } } } }, { key: "_execute_array", value: function (I) { var $, se = this, Pe = [], R = [], E = []; Ku(I, function (w) { w && ($ = w[0], Wu($) ? E.push(w) : typeof w == "function" ? w.call(se) : Wu(w) && $ === "alias" ? Pe.push(w) : Wu(w) && $.indexOf("capture") !== -1 && typeof se[$] == "function" ? E.push(w) : R.push(w)) }); var e = function (w, k) { Ku(w, function (i) { if (Wu(i[0])) { var _ = k; ji(i, function (y) { _ = _[y[0]].apply(_, y.slice(1)) }) } else this[i[0]].apply(this, i.slice(1)) }, k) }; e(Pe, this), e(R, this), e(E, this) } }, { key: "_hasBootstrappedFeatureFlags", value: function () { var I, $; return ((I = this.config.bootstrap) === null || I === void 0 ? void 0 : I.featureFlags) && Object.keys(($ = this.config.bootstrap) === null || $ === void 0 ? void 0 : $.featureFlags).length > 0 || !1 } }, { key: "push", value: function (I) { this._execute_array([I]) } }, { key: "captureException", value: function (I, $) { var se; (se = this.exceptionAutocapture) === null || se === void 0 || se.captureException([I.name, void 0, void 0, void 0, I], $) } }, { key: "capture", value: function (I, $) { var se = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : x0; if (this.__loaded && !o5(this, !1)) { this._captureMetrics.incr("capture"), I === "$snapshot" && this._captureMetrics.incr("snapshot"); var Pe = (se = se || x0).transport; if (Pe && (se.transport = Pe), nu(I) || typeof I != "string") console.error("No event name provided to posthog.capture"); else if (!mT(El)) { this.sessionPersistence.update_search_keyword(), this.get_config("store_google") && this.sessionPersistence.update_campaign_params(), this.get_config("save_referrer") && this.sessionPersistence.update_referrer_info(); var R = { uuid: Xu("v7"), event: I, properties: this._calculate_event_properties(I, $ || {}) }; I === "$identify" && (R.$set = se.$set, R.$set_once = se.$set_once), (R = Jw(R, se._noTruncate ? null : this.get_config("properties_string_max_length"))).timestamp = se.timestamp || new Date, this.get_config("debug") && Sa.log("PostHog.js send", R); var E = JSON.stringify(R), e = this.get_config("api_host") + (se.endpoint || "/e/"), w = se !== x0; return !this.get_config("request_batching") || w && !se._batchKey || se.send_instantly ? this.__compress_and_send_json_request(e, E, se) : this._requestQueue.enqueue(e, R, se), this._invokeCaptureHooks(I, R), R } } } }, { key: "_addCaptureHook", value: function (I) { this.__captureHooks.push(I) } }, { key: "_invokeCaptureHooks", value: function (I, $) { this.config._onCapture(I, $), ji(this.__captureHooks, function (se) { return se(I) }) } }, { key: "_calculate_event_properties", value: function (I, $) { var se, Pe = this.persistence.remove_event_timer(I), R = Zr({}, $); if (R.token = this.get_config("token"), I === "$snapshot") { var E = Zr(Zr({}, this.persistence.properties()), this.sessionPersistence.properties()); return R.distinct_id = E.distinct_id, R } var e = vo.properties(); if (this.sessionManager) { var w = this.sessionManager.checkAndGetSessionAndWindowId(), k = w.sessionId, i = w.windowId; R.$session_id = k, R.$window_id = i } if ((se = this.webPerformance) !== null && se !== void 0 && se.isEnabled && (I === "$pageview" && this.pageViewIdManager.onPageview(), R = Lo(R, { $pageview_id: this.pageViewIdManager.getPageViewId() })), I === "$performance_event") { var _ = this.persistence.properties(); return R.distinct_id = _.distinct_id, R.$current_url = e.$current_url, R } if (Pe !== void 0) { var y = new Date().getTime() - Pe; R.$duration = parseFloat((y / 1e3).toFixed(3)) } R = Lo({}, vo.properties(), this.persistence.properties(), this.sessionPersistence.properties(), R); var h = this.get_config("property_blacklist"); Wu(h) ? ji(h, function (t) { delete R[t] }) : console.error("Invalid value for property_blacklist config: " + h); var l = this.get_config("sanitize_properties"); return l && (R = l(R, I)), R } }, { key: "register", value: function (I, $) { this.persistence.register(I, $) } }, { key: "register_once", value: function (I, $, se) { this.persistence.register_once(I, $, se) } }, { key: "register_for_session", value: function (I) { this.sessionPersistence.register(I) } }, { key: "unregister", value: function (I) { this.persistence.unregister(I) } }, { key: "unregister_for_session", value: function (I) { this.sessionPersistence.unregister(I) } }, { key: "_register_single", value: function (I, $) { this.register(Jr({}, I, $)) } }, { key: "getFeatureFlag", value: function (I, $) { return this.featureFlags.getFeatureFlag(I, $) } }, { key: "getFeatureFlagPayload", value: function (I) { var $ = this.featureFlags.getFeatureFlagPayload(I); try { return JSON.parse($) } catch { return $ } } }, { key: "isFeatureEnabled", value: function (I, $) { return this.featureFlags.isFeatureEnabled(I, $) } }, { key: "reloadFeatureFlags", value: function () { this.featureFlags.reloadFeatureFlags() } }, { key: "updateEarlyAccessFeatureEnrollment", value: function (I, $) { this.featureFlags.updateEarlyAccessFeatureEnrollment(I, $) } }, { key: "getEarlyAccessFeatures", value: function (I) { var $ = arguments.length > 1 && arguments[1] !== void 0 && arguments[1]; return this.featureFlags.getEarlyAccessFeatures(I, $) } }, { key: "onFeatureFlags", value: function (I) { return this.featureFlags.onFeatureFlags(I) } }, { key: "getSurveys", value: function (I) { var $ = arguments.length > 1 && arguments[1] !== void 0 && arguments[1]; this.surveys.getSurveys(I, $) } }, { key: "getActiveMatchingSurveys", value: function (I) { var $ = arguments.length > 1 && arguments[1] !== void 0 && arguments[1]; this.surveys.getActiveMatchingSurveys(I, $) } }, { key: "identify", value: function (I, $, se) { if (I) { this._captureMetrics.incr("identify"); var Pe = this.get_distinct_id(); if (this.register({ $user_id: I }), !this.get_property("$device_id")) { var R = Pe; this.register_once({ $had_persisted_distinct_id: !0, $device_id: R }, "") } I !== Pe && I !== this.get_property(B0) && (this.unregister(B0), this.register({ distinct_id: I })); var E = this.persistence.get_user_state() === "anonymous"; I !== Pe && E ? (this.persistence.set_user_state("identified"), this.capture("$identify", { distinct_id: I, $anon_distinct_id: Pe }, { $set: $ || {}, $set_once: se || {} }), this.featureFlags.setAnonymousDistinctId(Pe)) : ($ && this.people.set($), se && this.people.set_once(se)), I !== Pe && this.reloadFeatureFlags() } else console.error("Unique user id has not been set in posthog.identify") } }, { key: "group", value: function (I, $, se) { if (I && $) { this._captureMetrics.incr("group"); var Pe = this.getGroups(); Pe[I] !== $ && this.resetGroupPropertiesForFlags(I), this.register({ $groups: Zr(Zr({}, Pe), {}, Jr({}, I, $)) }), se && (this.capture("$groupidentify", { $group_type: I, $group_key: $, $group_set: se }), this.setGroupPropertiesForFlags(Jr({}, I, se))), Pe[I] === $ || se || this.reloadFeatureFlags() } else console.error("posthog.group requires a group type and group key") } }, { key: "resetGroups", value: function () { this.register({ $groups: {} }), this.resetGroupPropertiesForFlags(), this.reloadFeatureFlags() } }, { key: "setPersonPropertiesForFlags", value: function (I) { var $ = !(arguments.length > 1 && arguments[1] !== void 0) || arguments[1]; this.featureFlags.setPersonPropertiesForFlags(I, $) } }, { key: "resetPersonPropertiesForFlags", value: function () { this.featureFlags.resetPersonPropertiesForFlags() } }, { key: "setGroupPropertiesForFlags", value: function (I) { var $ = !(arguments.length > 1 && arguments[1] !== void 0) || arguments[1]; this.featureFlags.setGroupPropertiesForFlags(I, $) } }, { key: "resetGroupPropertiesForFlags", value: function (I) { this.featureFlags.resetGroupPropertiesForFlags(I) } }, { key: "reset", value: function (I) { var $ = this.get_property("$device_id"); this.persistence.clear(), this.sessionPersistence.clear(), this.persistence.set_user_state("anonymous"), this.sessionManager.resetSessionId(); var se = this.get_config("get_device_id")(Xu()); this.register_once({ distinct_id: se, $device_id: I ? se : $ }, "") } }, { key: "get_distinct_id", value: function () { return this.get_property("distinct_id") } }, { key: "getGroups", value: function () { return this.get_property("$groups") || {} } }, { key: "get_session_id", value: function () { return this.sessionManager.checkAndGetSessionAndWindowId(!0).sessionId } }, { key: "get_session_replay_url", value: function (I) { var $ = (this.config.ui_host || this.config.api_host) + "/replay/" + this.get_session_id(); if (I != null && I.withTimestamp && this.sessionManager._sessionStartTimestamp) { var se, Pe = (se = I.timestampLookBack) !== null && se !== void 0 ? se : 10; if (!this.sessionManager._sessionStartTimestamp) return $; var R = Math.max(Math.floor((new Date().getTime() - (this.sessionManager._sessionStartTimestamp || 0)) / 1e3) - Pe, 0); $ += "?t=".concat(R) } return $ } }, { key: "alias", value: function (I, $) { return I === this.get_property(n5) ? (Sa.critical("Attempting to create alias for existing People user - aborting."), -2) : (nu($) && ($ = this.get_distinct_id()), I !== $ ? (this._register_single(B0, I), this.capture("$create_alias", { alias: I, distinct_id: $ })) : (console.error("alias matches current distinct_id - skipping api call."), this.identify(I), -1)) } }, { key: "set_config", value: function (I) { var $ = Zr({}, this.config); bf(I) && (Lo(this.config, I), this.get_config("persistence_name") || (this.config.persistence_name = this.config.cookie_name), this.get_config("disable_persistence") || (this.config.disable_persistence = this.config.disable_cookie), this.persistence && this.persistence.update_config(this.config), this.sessionPersistence && this.sessionPersistence.update_config(this.config), Ka.is_supported() && Ka.get("ph_debug") === "true" && (this.config.debug = !0), this.get_config("debug") && (Su.DEBUG = !0), this.sessionRecording && I.disable_session_recording !== void 0 && $.disable_session_recording !== I.disable_session_recording && (I.disable_session_recording ? this.sessionRecording.stopRecording() : this.sessionRecording.startRecordingIfEnabled())) } }, { key: "startSessionRecording", value: function () { this.set_config({ disable_session_recording: !1 }) } }, { key: "stopSessionRecording", value: function () { this.set_config({ disable_session_recording: !0 }) } }, { key: "sessionRecordingStarted", value: function () { var I; return !((I = this.sessionRecording) === null || I === void 0 || !I.started()) } }, { key: "loadToolbar", value: function (I) { return this.toolbar.loadToolbar(I) } }, { key: "get_config", value: function (I) { var $; return ($ = this.config) === null || $ === void 0 ? void 0 : $[I] } }, { key: "get_property", value: function (I) { return this.persistence.props[I] } }, { key: "getSessionProperty", value: function (I) { return this.sessionPersistence.props[I] } }, { key: "toString", value: function () { var I, $ = (I = this.get_config("name")) !== null && I !== void 0 ? I : Bs; return $ !== Bs && ($ = Bs + "." + $), $ } }, { key: "_gdpr_init", value: function () { this.get_config("opt_out_capturing_persistence_type") === "localStorage" && Ka.is_supported() && (!this.has_opted_in_capturing() && this.has_opted_in_capturing({ persistence_type: "cookie" }) && this.opt_in_capturing({ enable_persistence: !1 }), !this.has_opted_out_capturing() && this.has_opted_out_capturing({ persistence_type: "cookie" }) && this.opt_out_capturing({ clear_persistence: !1 }), this.clear_opt_in_out_capturing({ persistence_type: "cookie", enable_persistence: !1 })), this.has_opted_out_capturing() ? this._gdpr_update_persistence({ clear_persistence: !0 }) : this.has_opted_in_capturing() || !this.get_config("opt_out_capturing_by_default") && !Tu.get("ph_optout") || (Tu.remove("ph_optout"), this.opt_out_capturing({ clear_persistence: this.get_config("opt_out_persistence_by_default") })) } }, { key: "_gdpr_update_persistence", value: function (I) { var $; if (I && I.clear_persistence) $ = !0; else { if (!I || !I.enable_persistence) return; $ = !1 } this.get_config("disable_persistence") || this.persistence.disabled === $ || this.persistence.set_disabled($), this.get_config("disable_persistence") || this.sessionPersistence.disabled === $ || this.sessionPersistence.set_disabled($) } }, { key: "_gdpr_call_func", value: function (I, $) { return $ = Lo({ capture: this.capture.bind(this), persistence_type: this.get_config("opt_out_capturing_persistence_type"), cookie_prefix: this.get_config("opt_out_capturing_cookie_prefix"), cookie_expiration: this.get_config("cookie_expiration"), cross_subdomain_cookie: this.get_config("cross_subdomain_cookie"), secure_cookie: this.get_config("secure_cookie") }, $ || {}), Ka.is_supported() || $.persistence_type !== "localStorage" || ($.persistence_type = "cookie"), I(this.get_config("token"), { capture: $.capture, captureEventName: $.capture_event_name, captureProperties: $.capture_properties, persistenceType: $.persistence_type, persistencePrefix: $.cookie_prefix, cookieExpiration: $.cookie_expiration, crossSubdomainCookie: $.cross_subdomain_cookie, secureCookie: $.secure_cookie }) } }, { key: "opt_in_capturing", value: function (I) { I = Lo({ enable_persistence: !0 }, I || {}), this._gdpr_call_func(TT, I), this._gdpr_update_persistence(I) } }, { key: "opt_out_capturing", value: function (I) { var $ = Lo({ clear_persistence: !0 }, I || {}); this._gdpr_call_func(AT, $), this._gdpr_update_persistence($) } }, { key: "has_opted_in_capturing", value: function (I) { return this._gdpr_call_func(MT, I) } }, { key: "has_opted_out_capturing", value: function (I) { return this._gdpr_call_func(r5, I) } }, { key: "clear_opt_in_out_capturing", value: function (I) { var $ = Lo({ enable_persistence: !0 }, I ?? {}); this._gdpr_call_func(ST, $), this._gdpr_update_persistence($) } }, { key: "debug", value: function (I) { I === !1 ? (qr.console.log("You've disabled debug mode."), localStorage && localStorage.removeItem("ph_debug"), this.set_config({ debug: !1 })) : (qr.console.log("You're now in debug mode. All calls to PostHog will be logged in your console.\nYou can disable this with `posthog.debug(false)`."), localStorage && localStorage.setItem("ph_debug", "true"), this.set_config({ debug: !0 })) } }]), L }(); (function (L, I) { for (var $ = 0; $ < I.length; $++)L.prototype[I[$]] = Kw(L.prototype[I[$]]) })(zy, ["identify"]); var wc = {}, E7 = function () { Po.init = function (L, I, $) { if ($) return Po[$] || (Po[$] = wc[$] = km(L || "", I || {}, $, function (Pe) { Po[$] = wc[$] = Pe, Pe._loaded() })), Po[$]; var se = Po; return wc[Bs] ? se = wc[Bs] : L && (se = km(L, I || {}, Bs, function (Pe) { wc[Bs] = Pe, Pe._loaded() }), wc[Bs] = se), Po = se, Ry === ad.INIT_SNIPPET && (qr[Bs] = Po), ji(wc, function (Pe, R) { R !== Bs && (Po[R] = Pe) }), se } }, C7 = function () { function L() { L.done || (L.done = !0, g5 = !1, ji(wc, function (I) { I._dom_loaded() })) } ao.addEventListener && (ao.readyState === "complete" ? L() : ao.addEventListener("DOMContentLoaded", L, !1)), jp(qr, "load", L, !0) }, a_ = (Ry = ad.INIT_MODULE, Po = new zy, E7(), Po.init(), C7(), Po), v5 = In.createContext({ client: void 0 }); function L7(L) { var I = L.children, $ = L.client, se = L.apiKey, Pe = L.options, R = In.useState($), E = R[0], e = R[1]; return In.useEffect(function () { $ && se && console.warn("You have provided both a client and an apiKey to PostHogProvider. The apiKey will be ignored in favour of the client."), $ && Pe && console.warn("You have provided both a client and options to PostHogProvider. The options will be ignored in favour of the client."), !E && ($ ? e($) : se && (a_.init(se, Pe), e(a_))) }, [E, $, se, Pe]), In.createElement(v5.Provider, { value: { client: E } }, I) } var P7 = function () { var L = In.useContext(v5).client; return L }; function m5(L) { var I, $, se = ""; if (typeof L == "string" || typeof L == "number") se += L; else if (typeof L == "object") if (Array.isArray(L)) for (I = 0; I < L.length; I++)L[I] && ($ = m5(L[I])) && (se && (se += " "), se += $); else for (I in L) L[I] && (se && (se += " "), se += I); return se } function O7() { for (var L, I, $ = 0, se = ""; $ < arguments.length;)(L = arguments[$++]) && (I = m5(L)) && (se && (se += " "), se += I); return se } var y5 = { exports: {} }; (function (L, I) {/*! For license information please see plotly.min.js.LICENSE.txt */(function ($, se) { L.exports = se() })(self, function () { + }.apply(void 0, [[30, function (L) { var I = g7.exec(L); if (I) { if (I[2] && I[2].indexOf("eval") === 0) { var $ = v7.exec(I[2]); $ && (I[2] = $[1], I[3] = $[2], I[4] = $[3]) } var se = Wc(r_(I[1] || U0, I[2]), 2), Pe = se[0]; return av(se[1], Pe, I[3] ? +I[3] : void 0, I[4] ? +I[4] : void 0) } }], [50, function (L) { var I = m7.exec(L); if (I) { if (I[3] && I[3].indexOf(" > eval") > -1) { var $ = y7.exec(I[3]); $ && (I[1] = I[1] || "eval", I[3] = $[1], I[4] = $[2], I[5] = "") } var se = I[3], Pe = I[1] || U0, R = Wc(r_(Pe, se), 2); return Pe = R[0], av(se = R[1], Pe, I[4] ? +I[4] : void 0, I[5] ? +I[5] : void 0) } }], [40, function (L) { var I = x7.exec(L); return I ? av(I[2], I[1] || U0, +I[3], I[4] ? +I[4] : void 0) : void 0 }]]), r_ = function (L, I) { var $ = L.indexOf("safari-extension") !== -1, se = L.indexOf("safari-web-extension") !== -1; return $ || se ? [L.indexOf("@") !== -1 ? L.split("@")[0] : U0, $ ? "safari-extension:".concat(I) : "safari-web-extension:".concat(I)] : [L, I] }, _7 = /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i, w7 = /Minified React error #\d+;/i; function k7(L) { var I = L.stacktrace || L.stack || "", $ = function (se) { if (se) { if (typeof se.framesToPop == "number") return se.framesToPop; if (w7.test(se.message)) return 1 } return 0 }(L); try { return b7(I, $) } catch { } return [] } function ov(L) { var I = k7(L); return { $exception_type: L.name, $exception_message: L.message, $exception_stack_trace_raw: JSON.stringify(I) } } function T7(L) { var I = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 40, $ = Object.keys(L); if ($.sort(), !$.length) return "[object has no keys]"; for (var se = $.length; se > 0; se--) { var Pe = $.slice(0, se).join(", "); if (!(Pe.length > I)) return se === $.length || Pe.length <= I ? Pe : "".concat(Pe.slice(0, I), "...") } return "" } function d5(L) { var I = Wc(L, 5), $ = I[0], se = I[1], Pe = I[2], R = I[3], E = I[4], e = {}; if (E === void 0 && typeof $ == "string") { var w = "Error", k = $, i = $.match(_7); i && (w = i[1], k = i[2]), e = { $exception_type: w, $exception_message: k } } var _ = E || $; if (iv(_) || function (t) { return j0(t, "DOMException") }(_)) { var y = _; if (function (t) { return "stack" in t }(_)) e = ov(_); else { var h = y.name || (iv(y) ? "DOMError" : "DOMException"), l = y.message ? "".concat(h, ": ").concat(y.message) : h; e = function (t) { return { $exception_type: "Error", $exception_message: t } }(l), e.$exception_type = iv(y) ? "DOMError" : "DOMException", e.$exception_message = e.$exception_message || l } "code" in y && (e.$exception_DOMException_code = "".concat(y.code)) } else (function (t) { return j0(t, "ErrorEvent") })(_) && _.error ? e = ov(_.error) : function (t) { switch (Object.prototype.toString.call(t)) { case "[object Error]": case "[object Exception]": case "[object DOMException]": return !0; default: return p5(t, Error) } }(_) ? e = ov(_) : function (t) { return j0(t, "Object") }(_) || e_(_) ? (e = function (t) { return { $exception_type: e_(t) ? t.constructor.name : "Error", $exception_message: "Non-Error ".concat("exception", " captured with keys: ", T7(t)) } }(_), e.$exception_is_synthetic = !0) : (e.$exception_type = e.$exception_type || "Error", e.$exception_message = e.$exception_message || _, e.$exception_is_synthetic = !0); return Zr(Zr(Zr(Zr({}, e), {}, { $exception_type: e.$exception_type || "UnknownErrorType", $exception_message: e.$exception_message || "" }, se ? { $exception_source: se } : {}), Pe ? { $exception_lineno: Pe } : {}), R ? { $exception_colno: R } : {}) } function A7(L) { var I = Wc(L, 1)[0], $ = I; try { "reason" in I ? $ = I.reason : "detail" in I && "reason" in I.detail && ($ = I.detail.reason) } catch { } var se, Pe = {}; return (Pe = (se = $) === null || Hc(se) !== "object" && typeof se != "function" ? { $exception_message: "Non-Error promise rejection captured with value: ".concat(String($)) } : d5([$])).$exception_handled = !1, Zr(Zr({}, Pe), {}, { $exception_type: Pe.$exception_type = "UnhandledRejection", $exception_message: Pe.$exception_message = Pe.$exception_message || I.reason || String($) }) } var ad, Ry, Po, M7 = function () { function L(I) { Ua(this, L), Jr(this, "originalOnErrorHandler", void 0), Jr(this, "originalOnUnhandledRejectionHandler", void 0), this.instance = I } return Va(L, [{ key: "startCapturing", value: function () { var I; if (this.isEnabled() && ((I = qr.onerror) === null || I === void 0 || !I.__POSTHOG_INSTRUMENTED__)) try { this.originalOnErrorHandler = qr.onerror, qr.onerror = function () { for (var $ = arguments.length, se = new Array($), Pe = 0; Pe < $; Pe++)se[Pe] = arguments[Pe]; return this.captureException(se), !!this.originalOnErrorHandler && this.originalOnErrorHandler.apply(this, se) }.bind(this), qr.onerror.__POSTHOG_INSTRUMENTED__ = !0, this.originalOnUnhandledRejectionHandler = qr.onunhandledrejection, qr.onunhandledrejection = function () { for (var $ = arguments.length, se = new Array($), Pe = 0; Pe < $; Pe++)se[Pe] = arguments[Pe]; var R = A7(se); return this.sendExceptionEvent(R), !this.originalOnUnhandledRejectionHandler || this.originalOnUnhandledRejectionHandler.apply(qr, se) }.bind(this), qr.onunhandledrejection.__POSTHOG_INSTRUMENTED__ = !0 } catch ($) { console.error("PostHog failed to start exception autocapture", $), this.stopCapturing() } } }, { key: "stopCapturing", value: function () { var I, $; this.originalOnErrorHandler !== void 0 && (qr.onerror = this.originalOnErrorHandler, this.originalOnErrorHandler = null), (I = qr.onerror) === null || I === void 0 || delete I.__POSTHOG_INSTRUMENTED__, this.originalOnUnhandledRejectionHandler !== void 0 && (qr.onunhandledrejection = this.originalOnUnhandledRejectionHandler, this.originalOnUnhandledRejectionHandler = null), ($ = qr.onunhandledrejection) === null || $ === void 0 || delete $.__POSTHOG_INSTRUMENTED__ } }, { key: "isCapturing", value: function () { var I; return !((I = qr.onerror) === null || I === void 0 || !I.__POSTHOG_INSTRUMENTED__) } }, { key: "isEnabled", value: function () { var I; return (I = this.remoteEnabled) !== null && I !== void 0 && I } }, { key: "afterDecideResponse", value: function (I) { this.remoteEnabled = I.autocaptureExceptions || !1, this.isEnabled() && this.startCapturing() } }, { key: "captureException", value: function (I, $) { var se = d5(I), Pe = Zr(Zr({}, $), se), R = this.instance.config.ui_host || this.instance.config.api_host; se.$exception_personURL = R + "/person/" + this.instance.get_distinct_id(), this.sendExceptionEvent(Pe) } }, { key: "sendExceptionEvent", value: function (I) { this.instance.capture("$exception", I, { transport: "XHR", method: "POST", endpoint: "/e/", _noTruncate: !0, _batchKey: "exceptionEvent" }) } }]), L }(), S7 = function () { function L(I) { Ua(this, L), this.instance = I } return Va(L, [{ key: "getSurveys", value: function (I) { var $ = this, se = arguments.length > 1 && arguments[1] !== void 0 && arguments[1], Pe = this.instance.get_property(mm); if (Pe && !se) return I(Pe); this.instance._send_request("".concat(this.instance.get_config("api_host"), "/api/surveys/?token=").concat(this.instance.get_config("token")), {}, { method: "GET" }, function (R) { var E = R.surveys; return $.instance.persistence.register(Jr({}, mm, E)), I(E) }) } }, { key: "getActiveMatchingSurveys", value: function (I) { var $ = this, se = arguments.length > 1 && arguments[1] !== void 0 && arguments[1]; this.getSurveys(function (Pe) { var R = Pe.filter(function (E) { return !(!E.start_date || E.end_date) }).filter(function (E) { var e, w; if (!E.conditions) return !0; var k = (e = E.conditions) === null || e === void 0 || !e.url || window.location.href.indexOf(E.conditions.url) > -1, i = (w = E.conditions) === null || w === void 0 || !w.selector || document.querySelector(E.conditions.selector); return k && i }).filter(function (E) { if (!E.linked_flag_key && !E.targeting_flag_key) return !0; var e = !E.linked_flag_key || $.instance.featureFlags.isFeatureEnabled(E.linked_flag_key), w = !E.targeting_flag_key || $.instance.featureFlags.isFeatureEnabled(E.targeting_flag_key); return e && w }); return I(R) }, se) } }]), L }(); (function (L) { L[L.INIT_MODULE = 0] = "INIT_MODULE", L[L.INIT_SNIPPET = 1] = "INIT_SNIPPET" })(ad || (ad = {})); var wm = function () { }, x0 = {}, Bs = "posthog", V0 = qr.XMLHttpRequest && "withCredentials" in new XMLHttpRequest, g5 = !V0 && El.indexOf("MSIE") === -1 && El.indexOf("Mozilla") === -1, i_ = function () { var L, I, $; return { api_host: "https://app.posthog.com", api_method: "POST", api_transport: "XHR", ui_host: null, token: "", autocapture: !0, rageclick: !0, cross_subdomain_cookie: (ao == null || (L = ao.location) === null || L === void 0 || (I = L.hostname) === null || I === void 0 ? void 0 : I.indexOf("herokuapp.com")) === -1, persistence: "cookie", persistence_name: "", cookie_name: "", loaded: wm, store_google: !0, custom_campaign_params: [], save_referrer: !0, test: !1, verbose: !1, capture_pageview: !0, capture_pageleave: !0, debug: !1, cookie_expiration: 365, upgrade: !1, disable_session_recording: !1, disable_persistence: !1, disable_cookie: !1, enable_recording_console_log: void 0, secure_cookie: (qr == null || ($ = qr.location) === null || $ === void 0 ? void 0 : $.protocol) === "https:", ip: !0, opt_out_capturing_by_default: !1, opt_out_persistence_by_default: !1, opt_out_capturing_persistence_type: "localStorage", opt_out_capturing_cookie_prefix: null, opt_in_site_apps: !1, property_blacklist: [], respect_dnt: !1, sanitize_properties: null, xhr_headers: {}, inapp_protocol: "//", inapp_link_new_window: !1, request_batching: !0, properties_string_max_length: 65535, session_recording: {}, mask_all_element_attributes: !1, mask_all_text: !1, advanced_disable_decide: !1, advanced_disable_toolbar_metrics: !1, on_xhr_error: function (se) { var Pe = "Bad HTTP status: " + se.status + " " + se.statusText; console.error(Pe) }, get_device_id: function (se) { return se }, _onCapture: wm, _capture_metrics: !1, capture_performance: void 0, name: "posthog", callback_fn: "posthog._jsc", bootstrap: {}, disable_compression: !1 } }, km = function (L, I, $, se) { var Pe, R = $ !== Bs && Po ? $ ? Po[$] : void 0 : Po, E = { initComplete: !1, syncCode: !1 }, e = function (w) { return function (k) { E[w] || (E[w] = !0, E.initComplete && E.syncCode && (se == null || se(k))) } }; if (R && Ry === ad.INIT_MODULE) Pe = R; else { if (R && !Wu(R)) return void console.error("You have already initialized " + $); Pe = new zy } return Pe._init(L, I, $, e("initComplete")), Pe.toolbar.maybeLoadToolbar(), Pe.sessionRecording = new DT(Pe), Pe.sessionRecording.startRecordingIfEnabled(), Pe.webPerformance = new NT(Pe), Pe.webPerformance.startObservingIfEnabled(), Pe.exceptionAutocapture = new M7(Pe), Pe.__autocapture = Pe.get_config("autocapture"), Cc._setIsAutocaptureEnabled(Pe), Cc._isAutocaptureEnabled && (Pe.__autocapture = Pe.get_config("autocapture"), Cc.enabledForProject(Pe.get_config("token"), 100, 100) ? Cc.isBrowserSupported() ? Cc.init(Pe) : (Pe.__autocapture = !1, Sa.log("Disabling Automatic Event Collection because this browser is not supported")) : (Pe.__autocapture = !1, Sa.log("Not in active bucket: disabling Automatic Event Collection."))), Su.DEBUG = Su.DEBUG || Pe.get_config("debug"), R !== void 0 && Wu(R) && (Pe._execute_array.call(Pe.people, R.people), Pe._execute_array(R)), e("syncCode")(Pe), Pe }, zy = function () { function L() { var I = this; Ua(this, L), this.config = i_(), this.compression = {}, this.decideEndpointWasHit = !1, this.SentryIntegration = h7, this.segmentIntegration = function () { return p7(I) }, this.__captureHooks = [], this.__request_queue = [], this.__loaded = !1, this.__loaded_recorder_version = void 0, this.__autocapture = void 0, this._jsc = function () { }, this.people = new ET(this), this.featureFlags = new CT(this), this.feature_flags = this.featureFlags, this.toolbar = new qT(this), this.pageViewIdManager = new d7, this.surveys = new S7(this), this._captureMetrics = void 0, this._requestQueue = void 0, this._retryQueue = void 0, this.persistence = void 0, this.sessionPersistence = void 0, this.sessionManager = void 0 } return Va(L, [{ key: "init", value: function (I, $, se) { if (nu(se)) console.error("You must name your new library: init(token, config, name)"); else { if (se !== Bs) { var Pe = km(I, $, se, function (R) { Po[se] = R, R._loaded() }); return Po[se] = Pe, Pe } console.error("You must initialize the main posthog object right after you include the PostHog js snippet") } } }, { key: "_init", value: function (I) { var $, se, Pe = this, R = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, E = arguments.length > 2 ? arguments[2] : void 0, e = arguments.length > 3 ? arguments[3] : void 0; this.__loaded = !0, this.config = {}, this._triggered_notifs = []; var w, k = { segmentRegister: !1, syncCode: !1 }, i = function (s) { return function () { k[s] || (k[s] = !0, k.segmentRegister && k.syncCode && (e == null || e(Pe))) } }; if (this.set_config(Lo({}, i_(), R, { name: E, token: I, callback_fn: (E === Bs ? E : Bs + "." + E) + "._jsc" })), this._jsc = function () { }, (qr != null && ($ = qr.rrweb) !== null && $ !== void 0 && $.record || qr != null && qr.rrwebRecord) && (this.__loaded_recorder_version = qr == null || (w = qr.rrweb) === null || w === void 0 ? void 0 : w.version), this._captureMetrics = new WT(this.get_config("_capture_metrics")), this._requestQueue = new GT(this._captureMetrics, this._handle_queued_event.bind(this)), this._retryQueue = new l7(this._captureMetrics, this.get_config("on_xhr_error")), this.__captureHooks = [], this.__request_queue = [], this.persistence = new Hb(this.config), this.sessionManager = new f7(this.config, this.persistence), this.sessionPersistence = this.config.persistence === "sessionStorage" ? this.persistence : new Hb(Zr(Zr({}, this.config), {}, { persistence: "sessionStorage" })), this._gdpr_init(), R.segment ? (this.config.get_device_id = function () { return R.segment.user().anonymousId() }, R.segment.user().id() && (this.register({ distinct_id: R.segment.user().id() }), this.persistence.set_user_state("identified")), R.segment.register(this.segmentIntegration()).then(i("segmentRegister"))) : i("segmentRegister")(), ((se = R.bootstrap) === null || se === void 0 ? void 0 : se.distinctID) !== void 0) { var _, y, h = this.get_config("get_device_id")(Xu()), l = (_ = R.bootstrap) !== null && _ !== void 0 && _.isIdentifiedID ? h : R.bootstrap.distinctID; this.persistence.set_user_state((y = R.bootstrap) !== null && y !== void 0 && y.isIdentifiedID ? "identified" : "anonymous"), this.register({ distinct_id: R.bootstrap.distinctID, $device_id: l }) } if (this._hasBootstrappedFeatureFlags()) { var t, o, r = Object.keys(((t = R.bootstrap) === null || t === void 0 ? void 0 : t.featureFlags) || {}).filter(function (s) { var u, p; return !((u = R.bootstrap) === null || u === void 0 || (p = u.featureFlags) === null || p === void 0 || !p[s]) }).reduce(function (s, u) { var p, c; return s[u] = ((p = R.bootstrap) === null || p === void 0 || (c = p.featureFlags) === null || c === void 0 ? void 0 : c[u]) || !1, s }, {}), n = Object.keys(((o = R.bootstrap) === null || o === void 0 ? void 0 : o.featureFlagPayloads) || {}).filter(function (s) { return r[s] }).reduce(function (s, u) { var p, c, b, g; return (p = R.bootstrap) !== null && p !== void 0 && (c = p.featureFlagPayloads) !== null && c !== void 0 && c[u] && (s[u] = (b = R.bootstrap) === null || b === void 0 || (g = b.featureFlagPayloads) === null || g === void 0 ? void 0 : g[u]), s }, {}); this.featureFlags.receivedFeatureFlags({ featureFlags: r, featureFlagPayloads: n }) } if (!this.get_distinct_id()) { var a = this.get_config("get_device_id")(Xu()); this.register_once({ distinct_id: a, $device_id: a }, ""), this.persistence.set_user_state("anonymous") } qr.addEventListener && qr.addEventListener("onpagehide" in self ? "pagehide" : "unload", this._handle_unload.bind(this)), i("syncCode")() } }, { key: "_loaded", value: function () { this.featureFlags.setReloadingPaused(!0); try { this.get_config("loaded")(this) } catch (I) { console.error("`loaded` function failed", I) } this._start_queue_if_opted_in(), this.get_config("capture_pageview") && this.capture("$pageview", {}, { send_instantly: !0 }), this.get_config("advanced_disable_decide") || new UT(this).call(), this.featureFlags.resetRequestQueue(), this.featureFlags.setReloadingPaused(!1) } }, { key: "_start_queue_if_opted_in", value: function () { this.has_opted_out_capturing() || this.get_config("request_batching") && this._requestQueue.poll() } }, { key: "_dom_loaded", value: function () { var I = this; this.has_opted_out_capturing() || Ku(this.__request_queue, function ($) { I._send_request.apply(I, um($)) }), this.__request_queue = [], this._start_queue_if_opted_in() } }, { key: "_prepare_callback", value: function (I, $) { if (nu(I)) return null; if (V0) return function (E) { I(E, $) }; var se = this._jsc, Pe = "" + Math.floor(1e8 * Math.random()), R = this.get_config("callback_fn") + "[" + Pe + "]"; return se[Pe] = function (E) { delete se[Pe], I(E, $) }, R } }, { key: "_handle_unload", value: function () { this.get_config("request_batching") ? (this.get_config("capture_pageview") && this.get_config("capture_pageleave") && this.capture("$pageleave"), this.get_config("_capture_metrics") && (this._requestQueue.updateUnloadMetrics(), this.capture("$capture_metrics", this._captureMetrics.metrics)), this._requestQueue.unload(), this._retryQueue.unload()) : this.get_config("capture_pageview") && this.get_config("capture_pageleave") && this.capture("$pageleave", null, { transport: "sendBeacon" }) } }, { key: "_handle_queued_event", value: function (I, $, se) { var Pe = JSON.stringify($); this.__compress_and_send_json_request(I, Pe, se || x0, wm) } }, { key: "__compress_and_send_json_request", value: function (I, $, se, Pe) { var R = function (k, i, _) { return k === df.GZipJS ? [i7(a7(i), { mtime: 0 }), Zr(Zr({}, _), {}, { blob: !0, urlQueryArgs: { compression: df.GZipJS } })] : [{ data: F1(i) }, _] }(this.compression[df.GZipJS] ? df.GZipJS : df.Base64, $, se), E = Wc(R, 2), e = E[0], w = E[1]; this._send_request(I, e, w, Pe) } }, { key: "_send_request", value: function (I, $, se, Pe) { if (g5) this.__request_queue.push([I, $, se, Pe]); else { var R = { method: this.get_config("api_method"), transport: this.get_config("api_transport"), verbose: this.get_config("verbose") }; se = Lo(R, se || {}), V0 || (se.method = "GET"); var E = "sendBeacon" in qr.navigator && se.transport === "sendBeacon"; if (I = o7(I, se.urlQueryArgs || {}, { ip: this.get_config("ip") }), E) try { qr.navigator.sendBeacon(I, Iy($, Zr(Zr({}, se), {}, { sendBeacon: !0 }))) } catch (i) { this.get_config("debug") && console.error(i) } else if (V0) try { h5({ url: I, data: $, headers: this.get_config("xhr_headers"), options: se, captureMetrics: this._captureMetrics, callback: Pe, retriesPerformedSoFar: 0, retryQueue: this._retryQueue, onXHRError: this.get_config("on_xhr_error") }) } catch (i) { console.error(i) } else { var e, w = ao.createElement("script"); w.type = "text/javascript", w.async = !0, w.defer = !0, w.src = I; var k = ao.getElementsByTagName("script")[0]; (e = k.parentNode) === null || e === void 0 || e.insertBefore(w, k) } } } }, { key: "_execute_array", value: function (I) { var $, se = this, Pe = [], R = [], E = []; Ku(I, function (w) { w && ($ = w[0], Wu($) ? E.push(w) : typeof w == "function" ? w.call(se) : Wu(w) && $ === "alias" ? Pe.push(w) : Wu(w) && $.indexOf("capture") !== -1 && typeof se[$] == "function" ? E.push(w) : R.push(w)) }); var e = function (w, k) { Ku(w, function (i) { if (Wu(i[0])) { var _ = k; ji(i, function (y) { _ = _[y[0]].apply(_, y.slice(1)) }) } else this[i[0]].apply(this, i.slice(1)) }, k) }; e(Pe, this), e(R, this), e(E, this) } }, { key: "_hasBootstrappedFeatureFlags", value: function () { var I, $; return ((I = this.config.bootstrap) === null || I === void 0 ? void 0 : I.featureFlags) && Object.keys(($ = this.config.bootstrap) === null || $ === void 0 ? void 0 : $.featureFlags).length > 0 || !1 } }, { key: "push", value: function (I) { this._execute_array([I]) } }, { key: "captureException", value: function (I, $) { var se; (se = this.exceptionAutocapture) === null || se === void 0 || se.captureException([I.name, void 0, void 0, void 0, I], $) } }, { key: "capture", value: function (I, $) { var se = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : x0; if (this.__loaded && !o5(this, !1)) { this._captureMetrics.incr("capture"), I === "$snapshot" && this._captureMetrics.incr("snapshot"); var Pe = (se = se || x0).transport; if (Pe && (se.transport = Pe), nu(I) || typeof I != "string") console.error("No event name provided to posthog.capture"); else if (!mT(El)) { this.sessionPersistence.update_search_keyword(), this.get_config("store_google") && this.sessionPersistence.update_campaign_params(), this.get_config("save_referrer") && this.sessionPersistence.update_referrer_info(); var R = { uuid: Xu("v7"), event: I, properties: this._calculate_event_properties(I, $ || {}) }; I === "$identify" && (R.$set = se.$set, R.$set_once = se.$set_once), (R = Jw(R, se._noTruncate ? null : this.get_config("properties_string_max_length"))).timestamp = se.timestamp || new Date, this.get_config("debug") && Sa.log("PostHog.js send", R); var E = JSON.stringify(R), e = this.get_config("api_host") + (se.endpoint || "/e/"), w = se !== x0; return !this.get_config("request_batching") || w && !se._batchKey || se.send_instantly ? this.__compress_and_send_json_request(e, E, se) : this._requestQueue.enqueue(e, R, se), this._invokeCaptureHooks(I, R), R } } } }, { key: "_addCaptureHook", value: function (I) { this.__captureHooks.push(I) } }, { key: "_invokeCaptureHooks", value: function (I, $) { this.config._onCapture(I, $), ji(this.__captureHooks, function (se) { return se(I) }) } }, { key: "_calculate_event_properties", value: function (I, $) { var se, Pe = this.persistence.remove_event_timer(I), R = Zr({}, $); if (R.token = this.get_config("token"), I === "$snapshot") { var E = Zr(Zr({}, this.persistence.properties()), this.sessionPersistence.properties()); return R.distinct_id = E.distinct_id, R } var e = vo.properties(); if (this.sessionManager) { var w = this.sessionManager.checkAndGetSessionAndWindowId(), k = w.sessionId, i = w.windowId; R.$session_id = k, R.$window_id = i } if ((se = this.webPerformance) !== null && se !== void 0 && se.isEnabled && (I === "$pageview" && this.pageViewIdManager.onPageview(), R = Lo(R, { $pageview_id: this.pageViewIdManager.getPageViewId() })), I === "$performance_event") { var _ = this.persistence.properties(); return R.distinct_id = _.distinct_id, R.$current_url = e.$current_url, R } if (Pe !== void 0) { var y = new Date().getTime() - Pe; R.$duration = parseFloat((y / 1e3).toFixed(3)) } R = Lo({}, vo.properties(), this.persistence.properties(), this.sessionPersistence.properties(), R); var h = this.get_config("property_blacklist"); Wu(h) ? ji(h, function (t) { delete R[t] }) : console.error("Invalid value for property_blacklist config: " + h); var l = this.get_config("sanitize_properties"); return l && (R = l(R, I)), R } }, { key: "register", value: function (I, $) { this.persistence.register(I, $) } }, { key: "register_once", value: function (I, $, se) { this.persistence.register_once(I, $, se) } }, { key: "register_for_session", value: function (I) { this.sessionPersistence.register(I) } }, { key: "unregister", value: function (I) { this.persistence.unregister(I) } }, { key: "unregister_for_session", value: function (I) { this.sessionPersistence.unregister(I) } }, { key: "_register_single", value: function (I, $) { this.register(Jr({}, I, $)) } }, { key: "getFeatureFlag", value: function (I, $) { return this.featureFlags.getFeatureFlag(I, $) } }, { key: "getFeatureFlagPayload", value: function (I) { var $ = this.featureFlags.getFeatureFlagPayload(I); try { return JSON.parse($) } catch { return $ } } }, { key: "isFeatureEnabled", value: function (I, $) { return this.featureFlags.isFeatureEnabled(I, $) } }, { key: "reloadFeatureFlags", value: function () { this.featureFlags.reloadFeatureFlags() } }, { key: "updateEarlyAccessFeatureEnrollment", value: function (I, $) { this.featureFlags.updateEarlyAccessFeatureEnrollment(I, $) } }, { key: "getEarlyAccessFeatures", value: function (I) { var $ = arguments.length > 1 && arguments[1] !== void 0 && arguments[1]; return this.featureFlags.getEarlyAccessFeatures(I, $) } }, { key: "onFeatureFlags", value: function (I) { return this.featureFlags.onFeatureFlags(I) } }, { key: "getSurveys", value: function (I) { var $ = arguments.length > 1 && arguments[1] !== void 0 && arguments[1]; this.surveys.getSurveys(I, $) } }, { key: "getActiveMatchingSurveys", value: function (I) { var $ = arguments.length > 1 && arguments[1] !== void 0 && arguments[1]; this.surveys.getActiveMatchingSurveys(I, $) } }, { key: "identify", value: function (I, $, se) { if (I) { this._captureMetrics.incr("identify"); var Pe = this.get_distinct_id(); if (this.register({ $user_id: I }), !this.get_property("$device_id")) { var R = Pe; this.register_once({ $had_persisted_distinct_id: !0, $device_id: R }, "") } I !== Pe && I !== this.get_property(B0) && (this.unregister(B0), this.register({ distinct_id: I })); var E = this.persistence.get_user_state() === "anonymous"; I !== Pe && E ? (this.persistence.set_user_state("identified"), this.capture("$identify", { distinct_id: I, $anon_distinct_id: Pe }, { $set: $ || {}, $set_once: se || {} }), this.featureFlags.setAnonymousDistinctId(Pe)) : ($ && this.people.set($), se && this.people.set_once(se)), I !== Pe && this.reloadFeatureFlags() } else console.error("Unique user id has not been set in posthog.identify") } }, { key: "group", value: function (I, $, se) { if (I && $) { this._captureMetrics.incr("group"); var Pe = this.getGroups(); Pe[I] !== $ && this.resetGroupPropertiesForFlags(I), this.register({ $groups: Zr(Zr({}, Pe), {}, Jr({}, I, $)) }), se && (this.capture("$groupidentify", { $group_type: I, $group_key: $, $group_set: se }), this.setGroupPropertiesForFlags(Jr({}, I, se))), Pe[I] === $ || se || this.reloadFeatureFlags() } else console.error("posthog.group requires a group type and group key") } }, { key: "resetGroups", value: function () { this.register({ $groups: {} }), this.resetGroupPropertiesForFlags(), this.reloadFeatureFlags() } }, { key: "setPersonPropertiesForFlags", value: function (I) { var $ = !(arguments.length > 1 && arguments[1] !== void 0) || arguments[1]; this.featureFlags.setPersonPropertiesForFlags(I, $) } }, { key: "resetPersonPropertiesForFlags", value: function () { this.featureFlags.resetPersonPropertiesForFlags() } }, { key: "setGroupPropertiesForFlags", value: function (I) { var $ = !(arguments.length > 1 && arguments[1] !== void 0) || arguments[1]; this.featureFlags.setGroupPropertiesForFlags(I, $) } }, { key: "resetGroupPropertiesForFlags", value: function (I) { this.featureFlags.resetGroupPropertiesForFlags(I) } }, { key: "reset", value: function (I) { var $ = this.get_property("$device_id"); this.persistence.clear(), this.sessionPersistence.clear(), this.persistence.set_user_state("anonymous"), this.sessionManager.resetSessionId(); var se = this.get_config("get_device_id")(Xu()); this.register_once({ distinct_id: se, $device_id: I ? se : $ }, "") } }, { key: "get_distinct_id", value: function () { return this.get_property("distinct_id") } }, { key: "getGroups", value: function () { return this.get_property("$groups") || {} } }, { key: "get_session_id", value: function () { return this.sessionManager.checkAndGetSessionAndWindowId(!0).sessionId } }, { key: "get_session_replay_url", value: function (I) { var $ = (this.config.ui_host || this.config.api_host) + "/replay/" + this.get_session_id(); if (I != null && I.withTimestamp && this.sessionManager._sessionStartTimestamp) { var se, Pe = (se = I.timestampLookBack) !== null && se !== void 0 ? se : 10; if (!this.sessionManager._sessionStartTimestamp) return $; var R = Math.max(Math.floor((new Date().getTime() - (this.sessionManager._sessionStartTimestamp || 0)) / 1e3) - Pe, 0); $ += "?t=".concat(R) } return $ } }, { key: "alias", value: function (I, $) { return I === this.get_property(n5) ? (Sa.critical("Attempting to create alias for existing People user - aborting."), -2) : (nu($) && ($ = this.get_distinct_id()), I !== $ ? (this._register_single(B0, I), this.capture("$create_alias", { alias: I, distinct_id: $ })) : (console.error("alias matches current distinct_id - skipping api call."), this.identify(I), -1)) } }, { key: "set_config", value: function (I) { var $ = Zr({}, this.config); bf(I) && (Lo(this.config, I), this.get_config("persistence_name") || (this.config.persistence_name = this.config.cookie_name), this.get_config("disable_persistence") || (this.config.disable_persistence = this.config.disable_cookie), this.persistence && this.persistence.update_config(this.config), this.sessionPersistence && this.sessionPersistence.update_config(this.config), Ka.is_supported() && Ka.get("ph_debug") === "true" && (this.config.debug = !0), this.get_config("debug") && (Su.DEBUG = !0), this.sessionRecording && I.disable_session_recording !== void 0 && $.disable_session_recording !== I.disable_session_recording && (I.disable_session_recording ? this.sessionRecording.stopRecording() : this.sessionRecording.startRecordingIfEnabled())) } }, { key: "startSessionRecording", value: function () { this.set_config({ disable_session_recording: !1 }) } }, { key: "stopSessionRecording", value: function () { this.set_config({ disable_session_recording: !0 }) } }, { key: "sessionRecordingStarted", value: function () { var I; return !((I = this.sessionRecording) === null || I === void 0 || !I.started()) } }, { key: "loadToolbar", value: function (I) { return this.toolbar.loadToolbar(I) } }, { key: "get_config", value: function (I) { var $; return ($ = this.config) === null || $ === void 0 ? void 0 : $[I] } }, { key: "get_property", value: function (I) { return this.persistence.props[I] } }, { key: "getSessionProperty", value: function (I) { return this.sessionPersistence.props[I] } }, { key: "toString", value: function () { var I, $ = (I = this.get_config("name")) !== null && I !== void 0 ? I : Bs; return $ !== Bs && ($ = Bs + "." + $), $ } }, { key: "_gdpr_init", value: function () { this.get_config("opt_out_capturing_persistence_type") === "localStorage" && Ka.is_supported() && (!this.has_opted_in_capturing() && this.has_opted_in_capturing({ persistence_type: "cookie" }) && this.opt_in_capturing({ enable_persistence: !1 }), !this.has_opted_out_capturing() && this.has_opted_out_capturing({ persistence_type: "cookie" }) && this.opt_out_capturing({ clear_persistence: !1 }), this.clear_opt_in_out_capturing({ persistence_type: "cookie", enable_persistence: !1 })), this.has_opted_out_capturing() ? this._gdpr_update_persistence({ clear_persistence: !0 }) : this.has_opted_in_capturing() || !this.get_config("opt_out_capturing_by_default") && !Tu.get("ph_optout") || (Tu.remove("ph_optout"), this.opt_out_capturing({ clear_persistence: this.get_config("opt_out_persistence_by_default") })) } }, { key: "_gdpr_update_persistence", value: function (I) { var $; if (I && I.clear_persistence) $ = !0; else { if (!I || !I.enable_persistence) return; $ = !1 } this.get_config("disable_persistence") || this.persistence.disabled === $ || this.persistence.set_disabled($), this.get_config("disable_persistence") || this.sessionPersistence.disabled === $ || this.sessionPersistence.set_disabled($) } }, { key: "_gdpr_call_func", value: function (I, $) { return $ = Lo({ capture: this.capture.bind(this), persistence_type: this.get_config("opt_out_capturing_persistence_type"), cookie_prefix: this.get_config("opt_out_capturing_cookie_prefix"), cookie_expiration: this.get_config("cookie_expiration"), cross_subdomain_cookie: this.get_config("cross_subdomain_cookie"), secure_cookie: this.get_config("secure_cookie") }, $ || {}), Ka.is_supported() || $.persistence_type !== "localStorage" || ($.persistence_type = "cookie"), I(this.get_config("token"), { capture: $.capture, captureEventName: $.capture_event_name, captureProperties: $.capture_properties, persistenceType: $.persistence_type, persistencePrefix: $.cookie_prefix, cookieExpiration: $.cookie_expiration, crossSubdomainCookie: $.cross_subdomain_cookie, secureCookie: $.secure_cookie }) } }, { key: "opt_in_capturing", value: function (I) { I = Lo({ enable_persistence: !0 }, I || {}), this._gdpr_call_func(TT, I), this._gdpr_update_persistence(I) } }, { key: "opt_out_capturing", value: function (I) { var $ = Lo({ clear_persistence: !0 }, I || {}); this._gdpr_call_func(AT, $), this._gdpr_update_persistence($) } }, { key: "has_opted_in_capturing", value: function (I) { return this._gdpr_call_func(MT, I) } }, { key: "has_opted_out_capturing", value: function (I) { return this._gdpr_call_func(r5, I) } }, { key: "clear_opt_in_out_capturing", value: function (I) { var $ = Lo({ enable_persistence: !0 }, I ?? {}); this._gdpr_call_func(ST, $), this._gdpr_update_persistence($) } }, { key: "debug", value: function (I) { I === !1 ? (qr.console.log("You've disabled debug mode."), localStorage && localStorage.removeItem("ph_debug"), this.set_config({ debug: !1 })) : (qr.console.log("You're now in debug mode. All calls to PostHog will be logged in your console.\nYou can disable this with `posthog.debug(false)`."), localStorage && localStorage.setItem("ph_debug", "true"), this.set_config({ debug: !0 })) } }]), L }(); (function (L, I) { for (var $ = 0; $ < I.length; $++)L.prototype[I[$]] = Kw(L.prototype[I[$]]) })(zy, ["identify"]); var wc = {}, E7 = function () { Po.init = function (L, I, $) { if ($) return Po[$] || (Po[$] = wc[$] = km(L || "", I || {}, $, function (Pe) { Po[$] = wc[$] = Pe, Pe._loaded() })), Po[$]; var se = Po; return wc[Bs] ? se = wc[Bs] : L && (se = km(L, I || {}, Bs, function (Pe) { wc[Bs] = Pe, Pe._loaded() }), wc[Bs] = se), Po = se, Ry === ad.INIT_SNIPPET && (qr[Bs] = Po), ji(wc, function (Pe, R) { R !== Bs && (Po[R] = Pe) }), se } }, C7 = function () { function L() { L.done || (L.done = !0, g5 = !1, ji(wc, function (I) { I._dom_loaded() })) } ao.addEventListener && (ao.readyState === "complete" ? L() : ao.addEventListener("DOMContentLoaded", L, !1)), jp(qr, "load", L, !0) }, a_ = (Ry = ad.INIT_MODULE, Po = new zy, E7(), Po.init(), C7(), Po), v5 = In.createContext({ client: void 0 }); function L7(L) { var I = L.children, $ = L.client, se = L.apiKey, Pe = L.options, R = In.useState($), E = R[0], e = R[1]; return In.useEffect(function () { $ && se && console.warn("You have provided both a client and an apiKey to PostHogProvider. The apiKey will be ignored in favour of the client."), $ && Pe && console.warn("You have provided both a client and options to PostHogProvider. The options will be ignored in favour of the client."), !E && ($ ? e($) : se && (a_.init(se, Pe), e(a_))) }, [E, $, se, Pe]), In.createElement(v5.Provider, { value: { client: E } }, I) } var P7 = function () { var L = In.useContext(v5).client; return L }; function m5(L) { var I, $, se = ""; if (typeof L == "string" || typeof L == "number") se += L; else if (typeof L == "object") if (Array.isArray(L)) for (I = 0; I < L.length; I++)L[I] && ($ = m5(L[I])) && (se && (se += " "), se += $); else for (I in L) L[I] && (se && (se += " "), se += I); return se } function O7() { for (var L, I, $ = 0, se = ""; $ < arguments.length;)(L = arguments[$++]) && (I = m5(L)) && (se && (se += " "), se += I); return se } var y5 = { exports: {} }; (function (L, I) {/*! For license information please see plotly.min.js.LICENSE.txt */(function ($, se) { L.exports = se() })(self, function () { return function () { var $ = { 98847: function (R, E, e) { var w = e(71828), k = { "X,X div": 'direction:ltr;font-family:"Open Sans",verdana,arial,sans-serif;margin:0;padding:0;', "X input,X button": 'font-family:"Open Sans",verdana,arial,sans-serif;', "X input:focus,X button:focus": "outline:none;", "X a": "text-decoration:none;", "X a:hover": "text-decoration:none;", "X .crisp": "shape-rendering:crispEdges;", "X .user-select-none": "-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;", "X svg": "overflow:hidden;", "X svg a": "fill:#447adb;", "X svg a:hover": "fill:#3c6dc5;", "X .main-svg": "position:absolute;top:0;left:0;pointer-events:none;", "X .main-svg .draglayer": "pointer-events:all;", "X .cursor-default": "cursor:default;", "X .cursor-pointer": "cursor:pointer;", "X .cursor-crosshair": "cursor:crosshair;", "X .cursor-move": "cursor:move;", "X .cursor-col-resize": "cursor:col-resize;", "X .cursor-row-resize": "cursor:row-resize;", "X .cursor-ns-resize": "cursor:ns-resize;", "X .cursor-ew-resize": "cursor:ew-resize;", "X .cursor-sw-resize": "cursor:sw-resize;", "X .cursor-s-resize": "cursor:s-resize;", "X .cursor-se-resize": "cursor:se-resize;", "X .cursor-w-resize": "cursor:w-resize;", "X .cursor-e-resize": "cursor:e-resize;", "X .cursor-nw-resize": "cursor:nw-resize;", "X .cursor-n-resize": "cursor:n-resize;", "X .cursor-ne-resize": "cursor:ne-resize;", "X .cursor-grab": "cursor:-webkit-grab;cursor:grab;", "X .modebar": "position:absolute;top:2px;right:2px;", "X .ease-bg": "-webkit-transition:background-color .3s ease 0s;-moz-transition:background-color .3s ease 0s;-ms-transition:background-color .3s ease 0s;-o-transition:background-color .3s ease 0s;transition:background-color .3s ease 0s;", "X .modebar--hover>:not(.watermark)": "opacity:0;-webkit-transition:opacity .3s ease 0s;-moz-transition:opacity .3s ease 0s;-ms-transition:opacity .3s ease 0s;-o-transition:opacity .3s ease 0s;transition:opacity .3s ease 0s;", "X:hover .modebar--hover .modebar-group": "opacity:1;", "X .modebar-group": "float:left;display:inline-block;box-sizing:border-box;padding-left:8px;position:relative;vertical-align:middle;white-space:nowrap;", "X .modebar-btn": "position:relative;font-size:16px;padding:3px 4px;height:22px;cursor:pointer;line-height:normal;box-sizing:border-box;", "X .modebar-btn svg": "position:relative;top:2px;", "X .modebar.vertical": "display:flex;flex-direction:column;flex-wrap:wrap;align-content:flex-end;max-height:100%;", "X .modebar.vertical svg": "top:-1px;", "X .modebar.vertical .modebar-group": "display:block;float:none;padding-left:0px;padding-bottom:8px;", "X .modebar.vertical .modebar-group .modebar-btn": "display:block;text-align:center;", "X [data-title]:before,X [data-title]:after": "position:absolute;-webkit-transform:translate3d(0, 0, 0);-moz-transform:translate3d(0, 0, 0);-ms-transform:translate3d(0, 0, 0);-o-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);display:none;opacity:0;z-index:1001;pointer-events:none;top:110%;right:50%;", "X [data-title]:hover:before,X [data-title]:hover:after": "display:block;opacity:1;", "X [data-title]:before": 'content:"";position:absolute;background:rgba(0,0,0,0);border:6px solid rgba(0,0,0,0);z-index:1002;margin-top:-12px;border-bottom-color:#69738a;margin-right:-6px;', "X [data-title]:after": "content:attr(data-title);background:#69738a;color:#fff;padding:8px 10px;font-size:12px;line-height:12px;white-space:nowrap;margin-right:-18px;border-radius:2px;", "X .vertical [data-title]:before,X .vertical [data-title]:after": "top:0%;right:200%;", "X .vertical [data-title]:before": "border:6px solid rgba(0,0,0,0);border-left-color:#69738a;margin-top:8px;margin-right:-30px;", Y: 'font-family:"Open Sans",verdana,arial,sans-serif;position:fixed;top:50px;right:20px;z-index:10000;font-size:10pt;max-width:180px;', "Y p": "margin:0;", "Y .notifier-note": "min-width:180px;max-width:250px;border:1px solid #fff;z-index:3000;margin:0;background-color:#8c97af;background-color:rgba(140,151,175,.9);color:#fff;padding:10px;overflow-wrap:break-word;word-wrap:break-word;-ms-hyphens:auto;-webkit-hyphens:auto;hyphens:auto;", "Y .notifier-close": "color:#fff;opacity:.8;float:right;padding:0 5px;background:none;border:none;font-size:20px;font-weight:bold;line-height:20px;", "Y .notifier-close:hover": "color:#444;text-decoration:none;cursor:pointer;" }; for (var i in k) { var _ = i.replace(/^,/, " ,").replace(/X/g, ".js-plotly-plot .plotly").replace(/Y/g, ".plotly-notifier"); w.addStyleRule(_, k[i]) } }, 98222: function (R, E, e) { R.exports = e(82887) }, 27206: function (R, E, e) { R.exports = e(60822) }, 59893: function (R, E, e) { R.exports = e(23381) }, 5224: function (R, E, e) { R.exports = e(83832) }, 59509: function (R, E, e) { R.exports = e(72201) }, 75557: function (R, E, e) { R.exports = e(91815) }, 40338: function (R, E, e) { R.exports = e(21462) }, 35080: function (R, E, e) { R.exports = e(51319) }, 61396: function (R, E, e) { R.exports = e(57516) }, 40549: function (R, E, e) { R.exports = e(98128) }, 49866: function (R, E, e) { R.exports = e(99442) }, 36089: function (R, E, e) { R.exports = e(93740) }, 19548: function (R, E, e) { R.exports = e(8729) }, 35831: function (R, E, e) { R.exports = e(93814) }, 61039: function (R, E, e) { R.exports = e(14382) }, 97040: function (R, E, e) { R.exports = e(51759) }, 77986: function (R, E, e) { R.exports = e(10421) }, 24296: function (R, E, e) { R.exports = e(43102) }, 58872: function (R, E, e) { R.exports = e(92165) }, 29626: function (R, E, e) { R.exports = e(3325) }, 65591: function (R, E, e) { R.exports = e(36071) }, 69738: function (R, E, e) { R.exports = e(43905) }, 92650: function (R, E, e) { R.exports = e(35902) }, 35630: function (R, E, e) { R.exports = e(69816) }, 73434: function (R, E, e) { R.exports = e(94507) }, 27909: function (R, E, e) { var w = e(19548); w.register([e(27206), e(5224), e(58872), e(65591), e(69738), e(92650), e(49866), e(25743), e(6197), e(97040), e(85461), e(73434), e(54201), e(81299), e(47645), e(35630), e(77986), e(83043), e(93005), e(96881), e(4534), e(50581), e(40549), e(77900), e(47582), e(35080), e(21641), e(17280), e(5861), e(29626), e(10021), e(65317), e(96268), e(61396), e(35831), e(16122), e(46163), e(40344), e(40338), e(48131), e(36089), e(55334), e(75557), e(19440), e(99488), e(59893), e(97393), e(98222), e(61039), e(24296), e(66398), e(59509)]), R.exports = w }, 46163: function (R, E, e) { R.exports = e(15154) }, 96881: function (R, E, e) { R.exports = e(64943) }, 50581: function (R, E, e) { R.exports = e(21164) }, 55334: function (R, E, e) { R.exports = e(54186) }, 65317: function (R, E, e) { R.exports = e(94873) }, 10021: function (R, E, e) { R.exports = e(67618) }, 54201: function (R, E, e) { R.exports = e(58810) }, 5861: function (R, E, e) { R.exports = e(20593) }, 16122: function (R, E, e) { R.exports = e(29396) }, 83043: function (R, E, e) { R.exports = e(13551) }, 48131: function (R, E, e) { R.exports = e(46858) }, 47582: function (R, E, e) { R.exports = e(17988) }, 21641: function (R, E, e) { R.exports = e(68868) }, 96268: function (R, E, e) { R.exports = e(20467) }, 19440: function (R, E, e) { R.exports = e(91271) }, 99488: function (R, E, e) { R.exports = e(21461) }, 97393: function (R, E, e) { R.exports = e(85956) }, 25743: function (R, E, e) { R.exports = e(52979) }, 66398: function (R, E, e) { R.exports = e(32275) }, 17280: function (R, E, e) { R.exports = e(6419) }, 77900: function (R, E, e) { R.exports = e(61510) }, 81299: function (R, E, e) { R.exports = e(87619) }, 93005: function (R, E, e) { R.exports = e(93601) }, 40344: function (R, E, e) { R.exports = e(96595) }, 47645: function (R, E, e) { R.exports = e(70954) }, 6197: function (R, E, e) { R.exports = e(47462) }, 4534: function (R, E, e) { R.exports = e(17659) }, 85461: function (R, E, e) { R.exports = e(19990) }, 82884: function (R) { R.exports = [{ path: "", backoff: 0 }, { path: "M-2.4,-3V3L0.6,0Z", backoff: .6 }, { path: "M-3.7,-2.5V2.5L1.3,0Z", backoff: 1.3 }, { path: "M-4.45,-3L-1.65,-0.2V0.2L-4.45,3L1.55,0Z", backoff: 1.55 }, { path: "M-2.2,-2.2L-0.2,-0.2V0.2L-2.2,2.2L-1.4,3L1.6,0L-1.4,-3Z", backoff: 1.6 }, { path: "M-4.4,-2.1L-0.6,-0.2V0.2L-4.4,2.1L-4,3L2,0L-4,-3Z", backoff: 2 }, { path: "M2,0A2,2 0 1,1 0,-2A2,2 0 0,1 2,0Z", backoff: 0, noRotate: !0 }, { path: "M2,2V-2H-2V2Z", backoff: 0, noRotate: !0 }] }, 50215: function (R, E, e) { var w = e(82884), k = e(41940), i = e(85555), _ = e(44467).templatedArray; e(24695), R.exports = _("annotation", { visible: { valType: "boolean", dflt: !0, editType: "calc+arraydraw" }, text: { valType: "string", editType: "calc+arraydraw" }, textangle: { valType: "angle", dflt: 0, editType: "calc+arraydraw" }, font: k({ editType: "calc+arraydraw", colorEditType: "arraydraw" }), width: { valType: "number", min: 1, dflt: null, editType: "calc+arraydraw" }, height: { valType: "number", min: 1, dflt: null, editType: "calc+arraydraw" }, opacity: { valType: "number", min: 0, max: 1, dflt: 1, editType: "arraydraw" }, align: { valType: "enumerated", values: ["left", "center", "right"], dflt: "center", editType: "arraydraw" }, valign: { valType: "enumerated", values: ["top", "middle", "bottom"], dflt: "middle", editType: "arraydraw" }, bgcolor: { valType: "color", dflt: "rgba(0,0,0,0)", editType: "arraydraw" }, bordercolor: { valType: "color", dflt: "rgba(0,0,0,0)", editType: "arraydraw" }, borderpad: { valType: "number", min: 0, dflt: 1, editType: "calc+arraydraw" }, borderwidth: { valType: "number", min: 0, dflt: 1, editType: "calc+arraydraw" }, showarrow: { valType: "boolean", dflt: !0, editType: "calc+arraydraw" }, arrowcolor: { valType: "color", editType: "arraydraw" }, arrowhead: { valType: "integer", min: 0, max: w.length, dflt: 1, editType: "arraydraw" }, startarrowhead: { valType: "integer", min: 0, max: w.length, dflt: 1, editType: "arraydraw" }, arrowside: { valType: "flaglist", flags: ["end", "start"], extras: ["none"], dflt: "end", editType: "arraydraw" }, arrowsize: { valType: "number", min: .3, dflt: 1, editType: "calc+arraydraw" }, startarrowsize: { valType: "number", min: .3, dflt: 1, editType: "calc+arraydraw" }, arrowwidth: { valType: "number", min: .1, editType: "calc+arraydraw" }, standoff: { valType: "number", min: 0, dflt: 0, editType: "calc+arraydraw" }, startstandoff: { valType: "number", min: 0, dflt: 0, editType: "calc+arraydraw" }, ax: { valType: "any", editType: "calc+arraydraw" }, ay: { valType: "any", editType: "calc+arraydraw" }, axref: { valType: "enumerated", dflt: "pixel", values: ["pixel", i.idRegex.x.toString()], editType: "calc" }, ayref: { valType: "enumerated", dflt: "pixel", values: ["pixel", i.idRegex.y.toString()], editType: "calc" }, xref: { valType: "enumerated", values: ["paper", i.idRegex.x.toString()], editType: "calc" }, x: { valType: "any", editType: "calc+arraydraw" }, xanchor: { valType: "enumerated", values: ["auto", "left", "center", "right"], dflt: "auto", editType: "calc+arraydraw" }, xshift: { valType: "number", dflt: 0, editType: "calc+arraydraw" }, yref: { valType: "enumerated", values: ["paper", i.idRegex.y.toString()], editType: "calc" }, y: { valType: "any", editType: "calc+arraydraw" }, yanchor: { valType: "enumerated", values: ["auto", "top", "middle", "bottom"], dflt: "auto", editType: "calc+arraydraw" }, yshift: { valType: "number", dflt: 0, editType: "calc+arraydraw" }, clicktoshow: { valType: "enumerated", values: [!1, "onoff", "onout"], dflt: !1, editType: "arraydraw" }, xclick: { valType: "any", editType: "arraydraw" }, yclick: { valType: "any", editType: "arraydraw" }, hovertext: { valType: "string", editType: "arraydraw" }, hoverlabel: { bgcolor: { valType: "color", editType: "arraydraw" }, bordercolor: { valType: "color", editType: "arraydraw" }, font: k({ editType: "arraydraw" }), editType: "arraydraw" }, captureevents: { valType: "boolean", editType: "arraydraw" }, editType: "calc", _deprecated: { ref: { valType: "string", editType: "calc" } } }) }, 3749: function (R, E, e) { var w = e(71828), k = e(89298), i = e(92605).draw; function _(h) { var l = h._fullLayout; w.filterVisible(l.annotations).forEach(function (t) { var o = k.getFromId(h, t.xref), r = k.getFromId(h, t.yref), n = k.getRefType(t.xref), a = k.getRefType(t.yref); t._extremes = {}, n === "range" && y(t, o), a === "range" && y(t, r) }) } function y(h, l) { var t, o = l._id, r = o.charAt(0), n = h[r], a = h["a" + r], s = h[r + "ref"], u = h["a" + r + "ref"], p = h["_" + r + "padplus"], c = h["_" + r + "padminus"], b = { x: 1, y: -1 }[r] * h[r + "shift"], g = 3 * h.arrowsize * h.arrowwidth || 0, f = g + b, v = g - b, m = 3 * h.startarrowsize * h.arrowwidth || 0, x = m + b, T = m - b; if (u === s) { var d = k.findExtremes(l, [l.r2c(n)], { ppadplus: f, ppadminus: v }), M = k.findExtremes(l, [l.r2c(a)], { ppadplus: Math.max(p, x), ppadminus: Math.max(c, T) }); t = { min: [d.min[0], M.min[0]], max: [d.max[0], M.max[0]] } } else x = a ? x + a : x, T = a ? T - a : T, t = k.findExtremes(l, [l.r2c(n)], { ppadplus: Math.max(p, f, x), ppadminus: Math.max(c, v, T) }); h._extremes[o] = t } R.exports = function (h) { var l = h._fullLayout; if (w.filterVisible(l.annotations).length && h._fullData.length) return w.syncOrAsync([i, _], h) } }, 44317: function (R, E, e) { var w = e(71828), k = e(73972), i = e(44467).arrayEditor; function _(h, l) { var t, o, r, n, a, s, u, p = h._fullLayout.annotations, c = [], b = [], g = [], f = (l || []).length; for (t = 0; t < p.length; t++)if (n = (r = p[t]).clicktoshow) { for (o = 0; o < f; o++)if (s = (a = l[o]).xaxis, u = a.yaxis, s._id === r.xref && u._id === r.yref && s.d2r(a.x) === y(r._xclick, s) && u.d2r(a.y) === y(r._yclick, u)) { (r.visible ? n === "onout" ? b : g : c).push(t); break } o === f && r.visible && n === "onout" && b.push(t) } return { on: c, off: b, explicitOff: g } } function y(h, l) { return l.type === "log" ? l.l2r(h) : l.d2r(h) } R.exports = { hasClickToShow: function (h, l) { var t = _(h, l); return t.on.length > 0 || t.explicitOff.length > 0 }, onClick: function (h, l) { var t, o, r = _(h, l), n = r.on, a = r.off.concat(r.explicitOff), s = {}, u = h._fullLayout.annotations; if (n.length || a.length) { for (t = 0; t < n.length; t++)(o = i(h.layout, "annotations", u[n[t]])).modifyItem("visible", !0), w.extendFlat(s, o.getUpdateObj()); for (t = 0; t < a.length; t++)(o = i(h.layout, "annotations", u[a[t]])).modifyItem("visible", !1), w.extendFlat(s, o.getUpdateObj()); return k.call("update", h, {}, s) } } } }, 25625: function (R, E, e) { var w = e(71828), k = e(7901); R.exports = function (i, _, y, h) { h("opacity"); var l = h("bgcolor"), t = h("bordercolor"), o = k.opacity(t); h("borderpad"); var r = h("borderwidth"), n = h("showarrow"); if (h("text", n ? " " : y._dfltTitle.annotation), h("textangle"), w.coerceFont(h, "font", y.font), h("width"), h("align"), h("height") && h("valign"), n) { var a, s, u = h("arrowside"); u.indexOf("end") !== -1 && (a = h("arrowhead"), s = h("arrowsize")), u.indexOf("start") !== -1 && (h("startarrowhead", a), h("startarrowsize", s)), h("arrowcolor", o ? _.bordercolor : k.defaultLine), h("arrowwidth", 2 * (o && r || 1)), h("standoff"), h("startstandoff") } var p = h("hovertext"), c = y.hoverlabel || {}; if (p) { var b = h("hoverlabel.bgcolor", c.bgcolor || (k.opacity(l) ? k.rgb(l) : k.defaultLine)), g = h("hoverlabel.bordercolor", c.bordercolor || k.contrast(b)); w.coerceFont(h, "hoverlabel.font", { family: c.font.family, size: c.font.size, color: c.font.color || g }) } h("captureevents", !!p) } }, 94128: function (R, E, e) { var w = e(92770), k = e(58163); R.exports = function (i, _, y, h) { _ = _ || {}; var l = y === "log" && _.type === "linear", t = y === "linear" && _.type === "log"; if (l || t) for (var o, r, n = i._fullLayout.annotations, a = _._id.charAt(0), s = 0; s < n.length; s++)o = n[s], r = "annotations[" + s + "].", o[a + "ref"] === _._id && u(a), o["a" + a + "ref"] === _._id && u("a" + a); function u(p) { var c = o[p], b = null; b = l ? k(c, _.range) : Math.pow(10, c), w(b) || (b = null), h(r + p, b) } } }, 84046: function (R, E, e) { var w = e(71828), k = e(89298), i = e(85501), _ = e(25625), y = e(50215); function h(l, t, o) { function r(M, A) { return w.coerce(l, t, y, M, A) } var n = r("visible"), a = r("clicktoshow"); if (n || a) { _(l, t, o, r); for (var s = t.showarrow, u = ["x", "y"], p = [-10, -30], c = { _fullLayout: o }, b = 0; b < 2; b++) { var g = u[b], f = k.coerceRef(l, t, c, g, "", "paper"); if (f !== "paper" && k.getFromId(c, f)._annIndices.push(t._index), k.coercePosition(t, c, r, f, g, .5), s) { var v = "a" + g, m = k.coerceRef(l, t, c, v, "pixel", ["pixel", "paper"]); m !== "pixel" && m !== f && (m = t[v] = "pixel"); var x = m === "pixel" ? p[b] : .4; k.coercePosition(t, c, r, m, v, x) } r(g + "anchor"), r(g + "shift") } if (w.noneOrAll(l, t, ["x", "y"]), s && w.noneOrAll(l, t, ["ax", "ay"]), a) { var T = r("xclick"), d = r("yclick"); t._xclick = T === void 0 ? t.x : k.cleanPosition(T, c, t.xref), t._yclick = d === void 0 ? t.y : k.cleanPosition(d, c, t.yref) } } } R.exports = function (l, t) { i(l, t, { name: "annotations", handleItemDefaults: h }) } }, 92605: function (R, E, e) { var w = e(39898), k = e(73972), i = e(74875), _ = e(71828), y = _.strTranslate, h = e(89298), l = e(7901), t = e(91424), o = e(30211), r = e(63893), n = e(6964), a = e(28569), s = e(44467).arrayEditor, u = e(13011); function p(g, f) { var v = g._fullLayout.annotations[f] || {}, m = h.getFromId(g, v.xref), x = h.getFromId(g, v.yref); m && m.setScale(), x && x.setScale(), b(g, v, f, !1, m, x) } function c(g, f, v, m, x) { var T = x[v], d = x[v + "ref"], M = v.indexOf("y") !== -1, A = h.getRefType(d) === "domain", C = M ? m.h : m.w; return g ? A ? T + (M ? -f : f) / g._length : g.p2r(g.r2p(T) + f) : T + (M ? -f : f) / C } function b(g, f, v, m, x, T) { var d, M, A = g._fullLayout, C = g._fullLayout._size, P = g._context.edits; m ? (d = "annotation-" + m, M = m + ".annotations") : (d = "annotation", M = "annotations"); var O = s(g.layout, M, f), z = O.modifyBase, B = O.modifyItem, Y = O.getUpdateObj; A._infolayer.selectAll("." + d + '[data-index="' + v + '"]').remove(); var D = "clip" + A._uid + "_ann" + v; if (f._input && f.visible !== !1) { var G = { x: {}, y: {} }, V = +f.textangle || 0, j = A._infolayer.append("g").classed(d, !0).attr("data-index", String(v)).style("opacity", f.opacity), W = j.append("g").classed("annotation-text-g", !0), Z = P[f.showarrow ? "annotationTail" : "annotationPosition"], ie = f.captureevents || P.annotationText || Z, te = W.append("g").style("pointer-events", ie ? "all" : null).call(n, "pointer").on("click", function () { g._dragging = !1, g.emit("plotly_clickannotation", _e(w.event)) }); f.hovertext && te.on("mouseover", function () { var xe = f.hoverlabel, De = xe.font, Ee = this.getBoundingClientRect(), Me = g.getBoundingClientRect(); o.loneHover({ x0: Ee.left - Me.left, x1: Ee.right - Me.left, y: (Ee.top + Ee.bottom) / 2 - Me.top, text: f.hovertext, color: xe.bgcolor, borderColor: xe.bordercolor, fontFamily: De.family, fontSize: De.size, fontColor: De.color }, { container: A._hoverlayer.node(), outerContainer: A._paper.node(), gd: g }) }).on("mouseout", function () { o.loneUnhover(A._hoverlayer.node()) }); var J = f.borderwidth, X = f.borderpad, ee = J + X, re = te.append("rect").attr("class", "bg").style("stroke-width", J + "px").call(l.stroke, f.bordercolor).call(l.fill, f.bgcolor), oe = f.width || f.height, ue = A._topclips.selectAll("#" + D).data(oe ? [0] : []); ue.enter().append("clipPath").classed("annclip", !0).attr("id", D).append("rect"), ue.exit().remove(); var ce = f.font, de = A._meta ? _.templateString(f.text, A._meta) : f.text, me = te.append("text").classed("annotation-text", !0).text(de); P.annotationText ? me.call(r.makeEditable, { delegate: te, gd: g }).call(Se).on("edit", function (xe) { f.text = xe, this.call(Se), B("text", xe), x && x.autorange && z(x._name + ".autorange", !0), T && T.autorange && z(T._name + ".autorange", !0), k.call("_guiRelayout", g, Y()) }) : me.call(Se) } else w.selectAll("#" + D).remove(); function _e(xe) { var De = { index: v, annotation: f._input, fullAnnotation: f, event: xe }; return m && (De.subplotId = m), De } function Se(xe) { return xe.call(t.font, ce).attr({ "text-anchor": { left: "start", right: "end" }[f.align] || "middle" }), r.convertToTspans(xe, g, we), xe } function we() { var xe = me.selectAll("a"); xe.size() === 1 && xe.text() === me.text() && te.insert("a", ":first-child").attr({ "xlink:xlink:href": xe.attr("xlink:href"), "xlink:xlink:show": xe.attr("xlink:show") }).style({ cursor: "pointer" }).node().appendChild(re.node()); var De = te.select(".annotation-text-math-group"), Ee = !De.empty(), Me = t.bBox((Ee ? De : me).node()), he = Me.width, fe = Me.height, ae = f.width || he, be = f.height || fe, Ie = Math.round(ae + 2 * ee), Te = Math.round(be + 2 * ee); function Ne(_t, gt) { return gt === "auto" && (gt = _t < .3333333333333333 ? "left" : _t > .6666666666666666 ? "right" : "center"), { center: 0, middle: 0, left: .5, bottom: -.5, right: -.5, top: .5 }[gt] } for (var qe = !1, ve = ["x", "y"], Ce = 0; Ce < ve.length; Ce++) { var Ae, ze, Ue, Ve, Ye, $e = ve[Ce], rt = f[$e + "ref"] || $e, ht = f["a" + $e + "ref"], nt = { x, y: T }[$e], bt = (V + ($e === "x" ? 0 : -90)) * Math.PI / 180, wt = Ie * Math.cos(bt), ut = Te * Math.sin(bt), lt = Math.abs(wt) + Math.abs(ut), Tt = f[$e + "anchor"], Et = f[$e + "shift"] * ($e === "x" ? 1 : -1), St = G[$e], Ft = h.getRefType(rt); if (nt && Ft !== "domain") { var zt = nt.r2fraction(f[$e]); (zt < 0 || zt > 1) && (ht === rt ? ((zt = nt.r2fraction(f["a" + $e])) < 0 || zt > 1) && (qe = !0) : qe = !0), Ae = nt._offset + nt.r2p(f[$e]), Ve = .5 } else { var Je = Ft === "domain"; $e === "x" ? (Ue = f[$e], Ae = Je ? nt._offset + nt._length * Ue : Ae = C.l + C.w * Ue) : (Ue = 1 - f[$e], Ae = Je ? nt._offset + nt._length * Ue : Ae = C.t + C.h * Ue), Ve = f.showarrow ? .5 : Ue } if (f.showarrow) { St.head = Ae; var et = f["a" + $e]; if (Ye = wt * Ne(.5, f.xanchor) - ut * Ne(.5, f.yanchor), ht === rt) { var Ze = h.getRefType(ht); Ze === "domain" ? ($e === "y" && (et = 1 - et), St.tail = nt._offset + nt._length * et) : Ze === "paper" ? $e === "y" ? (et = 1 - et, St.tail = C.t + C.h * et) : St.tail = C.l + C.w * et : St.tail = nt._offset + nt.r2p(et), ze = Ye } else St.tail = Ae + et, ze = Ye + et; St.text = St.tail + Ye; var Qe = A[$e === "x" ? "width" : "height"]; if (rt === "paper" && (St.head = _.constrain(St.head, 1, Qe - 1)), ht === "pixel") { var st = -Math.max(St.tail - 3, St.text), ft = Math.min(St.tail + 3, St.text) - Qe; st > 0 ? (St.tail += st, St.text += st) : ft > 0 && (St.tail -= ft, St.text -= ft) } St.tail += Et, St.head += Et } else ze = Ye = lt * Ne(Ve, Tt), St.text = Ae + Ye; St.text += Et, Ye += Et, ze += Et, f["_" + $e + "padplus"] = lt / 2 + ze, f["_" + $e + "padminus"] = lt / 2 - ze, f["_" + $e + "size"] = lt, f["_" + $e + "shift"] = Ye } if (qe) te.remove(); else { var Be = 0, je = 0; if (f.align !== "left" && (Be = (ae - he) * (f.align === "center" ? .5 : 1)), f.valign !== "top" && (je = (be - fe) * (f.valign === "middle" ? .5 : 1)), Ee) De.select("svg").attr({ x: ee + Be - 1, y: ee + je }).call(t.setClipUrl, oe ? D : null, g); else { var at = ee + je - Me.top, ot = ee + Be - Me.left; me.call(r.positionText, ot, at).call(t.setClipUrl, oe ? D : null, g) } ue.select("rect").call(t.setRect, ee, ee, ae, be), re.call(t.setRect, J / 2, J / 2, Ie - J, Te - J), te.call(t.setTranslate, Math.round(G.x.text - Ie / 2), Math.round(G.y.text - Te / 2)), W.attr({ transform: "rotate(" + V + "," + G.x.text + "," + G.y.text + ")" }); var xt, yt = function (_t, gt) { j.selectAll(".annotation-arrow-g").remove(); var Ct = G.x.head, dt = G.y.head, vt = G.x.tail + _t, At = G.y.tail + gt, Bt = G.x.text + _t, jt = G.y.text + gt, Ut = _.rotationXYMatrix(V, Bt, jt), tn = _.apply2DTransform(Ut), Xt = _.apply2DTransform2(Ut), Qt = +re.attr("width"), Gt = +re.attr("height"), vn = Bt - .5 * Qt, Tn = vn + Qt, dn = jt - .5 * Gt, Yt = dn + Gt, ln = [[vn, dn, vn, Yt], [vn, Yt, Tn, Yt], [Tn, Yt, Tn, dn], [Tn, dn, vn, dn]].map(Xt); if (!ln.reduce(function (ar, Kn) { return ar ^ !!_.segmentsIntersect(Ct, dt, Ct + 1e6, dt + 1e6, Kn[0], Kn[1], Kn[2], Kn[3]) }, !1)) { ln.forEach(function (ar) { var Kn = _.segmentsIntersect(vt, At, Ct, dt, ar[0], ar[1], ar[2], ar[3]); Kn && (vt = Kn.x, At = Kn.y) }); var nn = f.arrowwidth, fn = f.arrowcolor, mn = f.arrowside, xn = j.append("g").style({ opacity: l.opacity(fn) }).classed("annotation-arrow-g", !0), Pn = xn.append("path").attr("d", "M" + vt + "," + At + "L" + Ct + "," + dt).style("stroke-width", nn + "px").call(l.stroke, l.rgb(fn)); if (u(Pn, mn, f), P.annotationPosition && Pn.node().parentNode && !m) { var Dn = Ct, En = dt; if (f.standoff) { var Fn = Math.sqrt(Math.pow(Ct - vt, 2) + Math.pow(dt - At, 2)); Dn += f.standoff * (vt - Ct) / Fn, En += f.standoff * (At - dt) / Fn } var er, ir, fr = xn.append("path").classed("annotation-arrow", !0).classed("anndrag", !0).classed("cursor-move", !0).attr({ d: "M3,3H-3V-3H3ZM0,0L" + (vt - Dn) + "," + (At - En), transform: y(Dn, En) }).style("stroke-width", nn + 6 + "px").call(l.stroke, "rgba(0,0,0,0)").call(l.fill, "rgba(0,0,0,0)"); a.init({ element: fr.node(), gd: g, prepFn: function () { var ar = t.getTranslate(te); er = ar.x, ir = ar.y, x && x.autorange && z(x._name + ".autorange", !0), T && T.autorange && z(T._name + ".autorange", !0) }, moveFn: function (ar, Kn) { var wr = tn(er, ir), Ht = wr[0] + ar, sn = wr[1] + Kn; te.call(t.setTranslate, Ht, sn), B("x", c(x, ar, "x", C, f)), B("y", c(T, Kn, "y", C, f)), f.axref === f.xref && B("ax", c(x, ar, "ax", C, f)), f.ayref === f.yref && B("ay", c(T, Kn, "ay", C, f)), xn.attr("transform", y(ar, Kn)), W.attr({ transform: "rotate(" + V + "," + Ht + "," + sn + ")" }) }, doneFn: function () { k.call("_guiRelayout", g, Y()); var ar = document.querySelector(".js-notes-box-panel"); ar && ar.redraw(ar.selectedObj) } }) } } }; f.showarrow && yt(0, 0), Z && a.init({ element: te.node(), gd: g, prepFn: function () { xt = W.attr("transform") }, moveFn: function (_t, gt) { var Ct = "pointer"; if (f.showarrow) f.axref === f.xref ? B("ax", c(x, _t, "ax", C, f)) : B("ax", f.ax + _t), f.ayref === f.yref ? B("ay", c(T, gt, "ay", C.w, f)) : B("ay", f.ay + gt), yt(_t, gt); else { if (m) return; var dt, vt; if (x) dt = c(x, _t, "x", C, f); else { var At = f._xsize / C.w, Bt = f.x + (f._xshift - f.xshift) / C.w - At / 2; dt = a.align(Bt + _t / C.w, At, 0, 1, f.xanchor) } if (T) vt = c(T, gt, "y", C, f); else { var jt = f._ysize / C.h, Ut = f.y - (f._yshift + f.yshift) / C.h - jt / 2; vt = a.align(Ut - gt / C.h, jt, 0, 1, f.yanchor) } B("x", dt), B("y", vt), x && T || (Ct = a.getCursor(x ? .5 : dt, T ? .5 : vt, f.xanchor, f.yanchor)) } W.attr({ transform: y(_t, gt) + xt }), n(te, Ct) }, clickFn: function (_t, gt) { f.captureevents && g.emit("plotly_clickannotation", _e(gt)) }, doneFn: function () { n(te), k.call("_guiRelayout", g, Y()); var _t = document.querySelector(".js-notes-box-panel"); _t && _t.redraw(_t.selectedObj) } }) } } } R.exports = { draw: function (g) { var f = g._fullLayout; f._infolayer.selectAll(".annotation").remove(); for (var v = 0; v < f.annotations.length; v++)f.annotations[v].visible && p(g, v); return i.previousPromises(g) }, drawOne: p, drawRaw: b } }, 13011: function (R, E, e) { var w = e(39898), k = e(7901), i = e(82884), _ = e(71828), y = _.strScale, h = _.strRotate, l = _.strTranslate; R.exports = function (t, o, r) { var n, a, s, u, p = t.node(), c = i[r.arrowhead || 0], b = i[r.startarrowhead || 0], g = (r.arrowwidth || 1) * (r.arrowsize || 1), f = (r.arrowwidth || 1) * (r.startarrowsize || 1), v = o.indexOf("start") >= 0, m = o.indexOf("end") >= 0, x = c.backoff * g + r.standoff, T = b.backoff * f + r.startstandoff; if (p.nodeName === "line") { n = { x: +t.attr("x1"), y: +t.attr("y1") }, a = { x: +t.attr("x2"), y: +t.attr("y2") }; var d = n.x - a.x, M = n.y - a.y; if (u = (s = Math.atan2(M, d)) + Math.PI, x && T && x + T > Math.sqrt(d * d + M * M)) return void j(); if (x) { if (x * x > d * d + M * M) return void j(); var A = x * Math.cos(s), C = x * Math.sin(s); a.x += A, a.y += C, t.attr({ x2: a.x, y2: a.y }) } if (T) { if (T * T > d * d + M * M) return void j(); var P = T * Math.cos(s), O = T * Math.sin(s); n.x -= P, n.y -= O, t.attr({ x1: n.x, y1: n.y }) } } else if (p.nodeName === "path") { var z = p.getTotalLength(), B = ""; if (z < x + T) return void j(); var Y = p.getPointAtLength(0), D = p.getPointAtLength(.1); s = Math.atan2(Y.y - D.y, Y.x - D.x), n = p.getPointAtLength(Math.min(T, z)), B = "0px," + T + "px,"; var G = p.getPointAtLength(z), V = p.getPointAtLength(z - .1); u = Math.atan2(G.y - V.y, G.x - V.x), a = p.getPointAtLength(Math.max(0, z - x)), B += z - (B ? T + x : x) + "px," + z + "px", t.style("stroke-dasharray", B) } function j() { t.style("stroke-dasharray", "0px,100px") } function W(Z, ie, te, J) { Z.path && (Z.noRotate && (te = 0), w.select(p.parentNode).append("path").attr({ class: t.attr("class"), d: Z.path, transform: l(ie.x, ie.y) + h(180 * te / Math.PI) + y(J) }).style({ fill: k.rgb(r.arrowcolor), "stroke-width": 0 })) } v && W(b, n, s, f), m && W(c, a, u, g) } }, 32745: function (R, E, e) { var w = e(92605), k = e(44317); R.exports = { moduleType: "component", name: "annotations", layoutAttributes: e(50215), supplyLayoutDefaults: e(84046), includeBasePlot: e(76325)("annotations"), calcAutorange: e(3749), draw: w.draw, drawOne: w.drawOne, drawRaw: w.drawRaw, hasClickToShow: k.hasClickToShow, onClick: k.onClick, convertCoords: e(94128) } }, 26997: function (R, E, e) { var w = e(50215), k = e(30962).overrideAll, i = e(44467).templatedArray; R.exports = k(i("annotation", { visible: w.visible, x: { valType: "any" }, y: { valType: "any" }, z: { valType: "any" }, ax: { valType: "number" }, ay: { valType: "number" }, xanchor: w.xanchor, xshift: w.xshift, yanchor: w.yanchor, yshift: w.yshift, text: w.text, textangle: w.textangle, font: w.font, width: w.width, height: w.height, opacity: w.opacity, align: w.align, valign: w.valign, bgcolor: w.bgcolor, bordercolor: w.bordercolor, borderpad: w.borderpad, borderwidth: w.borderwidth, showarrow: w.showarrow, arrowcolor: w.arrowcolor, arrowhead: w.arrowhead, startarrowhead: w.startarrowhead, arrowside: w.arrowside, arrowsize: w.arrowsize, startarrowsize: w.startarrowsize, arrowwidth: w.arrowwidth, standoff: w.standoff, startstandoff: w.startstandoff, hovertext: w.hovertext, hoverlabel: w.hoverlabel, captureevents: w.captureevents }), "calc", "from-root") }, 5485: function (R, E, e) { var w = e(71828), k = e(89298); function i(_, y) { var h = y.fullSceneLayout.domain, l = y.fullLayout._size, t = { pdata: null, type: "linear", autorange: !1, range: [-1 / 0, 1 / 0] }; _._xa = {}, w.extendFlat(_._xa, t), k.setConvert(_._xa), _._xa._offset = l.l + h.x[0] * l.w, _._xa.l2p = function () { return .5 * (1 + _._pdata[0] / _._pdata[3]) * l.w * (h.x[1] - h.x[0]) }, _._ya = {}, w.extendFlat(_._ya, t), k.setConvert(_._ya), _._ya._offset = l.t + (1 - h.y[1]) * l.h, _._ya.l2p = function () { return .5 * (1 - _._pdata[1] / _._pdata[3]) * l.h * (h.y[1] - h.y[0]) } } R.exports = function (_) { for (var y = _.fullSceneLayout.annotations, h = 0; h < y.length; h++)i(y[h], _); _.fullLayout._infolayer.selectAll(".annotation-" + _.id).remove() } }, 20226: function (R, E, e) { var w = e(71828), k = e(89298), i = e(85501), _ = e(25625), y = e(26997); function h(l, t, o, r) { function n(s, u) { return w.coerce(l, t, y, s, u) } function a(s) { var u = s + "axis", p = { _fullLayout: {} }; return p._fullLayout[u] = o[u], k.coercePosition(t, p, n, s, s, .5) } n("visible") && (_(l, t, r.fullLayout, n), a("x"), a("y"), a("z"), w.noneOrAll(l, t, ["x", "y", "z"]), t.xref = "x", t.yref = "y", t.zref = "z", n("xanchor"), n("yanchor"), n("xshift"), n("yshift"), t.showarrow && (t.axref = "pixel", t.ayref = "pixel", n("ax", -10), n("ay", -30), w.noneOrAll(l, t, ["ax", "ay"]))) } R.exports = function (l, t, o) { i(l, t, { name: "annotations", handleItemDefaults: h, fullLayout: o.fullLayout }) } }, 82188: function (R, E, e) { var w = e(92605).drawRaw, k = e(63538), i = ["x", "y", "z"]; R.exports = function (_) { for (var y = _.fullSceneLayout, h = _.dataScale, l = y.annotations, t = 0; t < l.length; t++) { for (var o = l[t], r = !1, n = 0; n < 3; n++) { var a = i[n], s = o[a], u = y[a + "axis"].r2fraction(s); if (u < 0 || u > 1) { r = !0; break } } r ? _.fullLayout._infolayer.select(".annotation-" + _.id + '[data-index="' + t + '"]').remove() : (o._pdata = k(_.glplot.cameraParams, [y.xaxis.r2l(o.x) * h[0], y.yaxis.r2l(o.y) * h[1], y.zaxis.r2l(o.z) * h[2]]), w(_.graphDiv, o, t, _.id, o._xa, o._ya)) } } }, 2468: function (R, E, e) { var w = e(73972), k = e(71828); R.exports = { moduleType: "component", name: "annotations3d", schema: { subplots: { scene: { annotations: e(26997) } } }, layoutAttributes: e(26997), handleDefaults: e(20226), includeBasePlot: function (i, _) { var y = w.subplotsRegistry.gl3d; if (y) for (var h = y.attrRegex, l = Object.keys(i), t = 0; t < l.length; t++) { var o = l[t]; h.test(o) && (i[o].annotations || []).length && (k.pushUnique(_._basePlotModules, y), k.pushUnique(_._subplots.gl3d, o)) } }, convert: e(5485), draw: e(82188) } }, 7561: function (R, E, e) { R.exports = e(63489), e(94338), e(3961), e(38751), e(86825), e(37715), e(99384), e(43805), e(88874), e(83290), e(29108), e(55422), e(94320), e(31320), e(51367), e(21457) }, 72201: function (R, E, e) { var w = e(7561), k = e(71828), i = e(50606), _ = i.EPOCHJD, y = i.ONEDAY, h = { valType: "enumerated", values: k.sortObjectKeys(w.calendars), editType: "calc", dflt: "gregorian" }, l = function (g, f, v, m) { var x = {}; return x[v] = h, k.coerce(g, f, x, v, m) }, t = "##", o = { d: { 0: "dd", "-": "d" }, e: { 0: "d", "-": "d" }, a: { 0: "D", "-": "D" }, A: { 0: "DD", "-": "DD" }, j: { 0: "oo", "-": "o" }, W: { 0: "ww", "-": "w" }, m: { 0: "mm", "-": "m" }, b: { 0: "M", "-": "M" }, B: { 0: "MM", "-": "MM" }, y: { 0: "yy", "-": "yy" }, Y: { 0: "yyyy", "-": "yyyy" }, U: t, w: t, c: { 0: "D M d %X yyyy", "-": "D M d %X yyyy" }, x: { 0: "mm/dd/yyyy", "-": "mm/dd/yyyy" } }, r = {}; function n(g) { var f = r[g]; return f || (r[g] = w.instance(g)) } function a(g) { return k.extendFlat({}, h, { description: g }) } function s(g) { return "Sets the calendar system to use with `" + g + "` date data." } var u = { xcalendar: a(s("x")) }, p = k.extendFlat({}, u, { ycalendar: a(s("y")) }), c = k.extendFlat({}, p, { zcalendar: a(s("z")) }), b = a(["Sets the calendar system to use for `range` and `tick0`", "if this is a date axis. This does not set the calendar for", "interpreting data on this axis, that's specified in the trace", "or via the global `layout.calendar`"].join(" ")); R.exports = { moduleType: "component", name: "calendars", schema: { traces: { scatter: p, bar: p, box: p, heatmap: p, contour: p, histogram: p, histogram2d: p, histogram2dcontour: p, scatter3d: c, surface: c, mesh3d: c, scattergl: p, ohlc: u, candlestick: u }, layout: { calendar: a(["Sets the default calendar system to use for interpreting and", "displaying dates throughout the plot."].join(" ")) }, subplots: { xaxis: { calendar: b }, yaxis: { calendar: b }, scene: { xaxis: { calendar: b }, yaxis: { calendar: b }, zaxis: { calendar: b } }, polar: { radialaxis: { calendar: b } } }, transforms: { filter: { valuecalendar: a(["WARNING: All transforms are deprecated and may be removed from the API in next major version.", "Sets the calendar system to use for `value`, if it is a date."].join(" ")), targetcalendar: a(["WARNING: All transforms are deprecated and may be removed from the API in next major version.", "Sets the calendar system to use for `target`, if it is an", "array of dates. If `target` is a string (eg *x*) we use the", "corresponding trace attribute (eg `xcalendar`) if it exists,", "even if `targetcalendar` is provided."].join(" ")) } } }, layoutAttributes: h, handleDefaults: l, handleTraceDefaults: function (g, f, v, m) { for (var x = 0; x < v.length; x++)l(g, f, v[x] + "calendar", m.calendar) }, CANONICAL_SUNDAY: { chinese: "2000-01-02", coptic: "2000-01-03", discworld: "2000-01-03", ethiopian: "2000-01-05", hebrew: "5000-01-01", islamic: "1000-01-02", julian: "2000-01-03", mayan: "5000-01-01", nanakshahi: "1000-01-05", nepali: "2000-01-05", persian: "1000-01-01", jalali: "1000-01-01", taiwan: "1000-01-04", thai: "2000-01-04", ummalqura: "1400-01-06" }, CANONICAL_TICK: { chinese: "2000-01-01", coptic: "2000-01-01", discworld: "2000-01-01", ethiopian: "2000-01-01", hebrew: "5000-01-01", islamic: "1000-01-01", julian: "2000-01-01", mayan: "5000-01-01", nanakshahi: "1000-01-01", nepali: "2000-01-01", persian: "1000-01-01", jalali: "1000-01-01", taiwan: "1000-01-01", thai: "2000-01-01", ummalqura: "1400-01-01" }, DFLTRANGE: { chinese: ["2000-01-01", "2001-01-01"], coptic: ["1700-01-01", "1701-01-01"], discworld: ["1800-01-01", "1801-01-01"], ethiopian: ["2000-01-01", "2001-01-01"], hebrew: ["5700-01-01", "5701-01-01"], islamic: ["1400-01-01", "1401-01-01"], julian: ["2000-01-01", "2001-01-01"], mayan: ["5200-01-01", "5201-01-01"], nanakshahi: ["0500-01-01", "0501-01-01"], nepali: ["2000-01-01", "2001-01-01"], persian: ["1400-01-01", "1401-01-01"], jalali: ["1400-01-01", "1401-01-01"], taiwan: ["0100-01-01", "0101-01-01"], thai: ["2500-01-01", "2501-01-01"], ummalqura: ["1400-01-01", "1401-01-01"] }, getCal: n, worldCalFmt: function (g, f, v) { for (var m, x, T, d, M, A = Math.floor((f + .05) / y) + _, C = n(v).fromJD(A), P = 0; (P = g.indexOf("%", P)) !== -1;)(m = g.charAt(P + 1)) === "0" || m === "-" || m === "_" ? (T = 3, x = g.charAt(P + 2), m === "_" && (m = "-")) : (x = m, m = "0", T = 2), (d = o[x]) ? (M = d === t ? t : C.formatDate(d[m]), g = g.substr(0, P) + M + g.substr(P + T), P += M.length) : P += T; return g } } }, 22399: function (R, E) { E.defaults = ["#1f77b4", "#ff7f0e", "#2ca02c", "#d62728", "#9467bd", "#8c564b", "#e377c2", "#7f7f7f", "#bcbd22", "#17becf"], E.defaultLine = "#444", E.lightLine = "#eee", E.background = "#fff", E.borderLine = "#BEC8D9", E.lightFraction = 90.9090909090909 }, 7901: function (R, E, e) { var w = e(84267), k = e(92770), i = e(73627).isTypedArray, _ = R.exports = {}, y = e(22399); _.defaults = y.defaults; var h = _.defaultLine = y.defaultLine; _.lightLine = y.lightLine; var l = _.background = y.background; function t(o) { if (k(o) || typeof o != "string") return o; var r = o.trim(); if (r.substr(0, 3) !== "rgb") return o; var n = r.match(/^rgba?\s*\(([^()]*)\)$/); if (!n) return o; var a = n[1].trim().split(/\s*[\s,]\s*/), s = r.charAt(3) === "a" && a.length === 4; if (!s && a.length !== 3) return o; for (var u = 0; u < a.length; u++) { if (!a[u].length || (a[u] = Number(a[u]), !(a[u] >= 0))) return o; if (u === 3) a[u] > 1 && (a[u] = 1); else if (a[u] >= 1) return o } var p = Math.round(255 * a[0]) + ", " + Math.round(255 * a[1]) + ", " + Math.round(255 * a[2]); return s ? "rgba(" + p + ", " + a[3] + ")" : "rgb(" + p + ")" } _.tinyRGB = function (o) { var r = o.toRgb(); return "rgb(" + Math.round(r.r) + ", " + Math.round(r.g) + ", " + Math.round(r.b) + ")" }, _.rgb = function (o) { return _.tinyRGB(w(o)) }, _.opacity = function (o) { return o ? w(o).getAlpha() : 0 }, _.addOpacity = function (o, r) { var n = w(o).toRgb(); return "rgba(" + Math.round(n.r) + ", " + Math.round(n.g) + ", " + Math.round(n.b) + ", " + r + ")" }, _.combine = function (o, r) { var n = w(o).toRgb(); if (n.a === 1) return w(o).toRgbString(); var a = w(r || l).toRgb(), s = a.a === 1 ? a : { r: 255 * (1 - a.a) + a.r * a.a, g: 255 * (1 - a.a) + a.g * a.a, b: 255 * (1 - a.a) + a.b * a.a }, u = { r: s.r * (1 - n.a) + n.r * n.a, g: s.g * (1 - n.a) + n.g * n.a, b: s.b * (1 - n.a) + n.b * n.a }; return w(u).toRgbString() }, _.contrast = function (o, r, n) { var a = w(o); return a.getAlpha() !== 1 && (a = w(_.combine(o, l))), (a.isDark() ? r ? a.lighten(r) : l : n ? a.darken(n) : h).toString() }, _.stroke = function (o, r) { var n = w(r); o.style({ stroke: _.tinyRGB(n), "stroke-opacity": n.getAlpha() }) }, _.fill = function (o, r) { var n = w(r); o.style({ fill: _.tinyRGB(n), "fill-opacity": n.getAlpha() }) }, _.clean = function (o) { if (o && typeof o == "object") { var r, n, a, s, u = Object.keys(o); for (r = 0; r < u.length; r++)if (s = o[a = u[r]], a.substr(a.length - 5) === "color") if (Array.isArray(s)) for (n = 0; n < s.length; n++)s[n] = t(s[n]); else o[a] = t(s); else if (a.substr(a.length - 10) === "colorscale" && Array.isArray(s)) for (n = 0; n < s.length; n++)Array.isArray(s[n]) && (s[n][1] = t(s[n][1])); else if (Array.isArray(s)) { var p = s[0]; if (!Array.isArray(p) && p && typeof p == "object") for (n = 0; n < s.length; n++)_.clean(s[n]) } else s && typeof s == "object" && !i(s) && _.clean(s) } } }, 63583: function (R, E, e) { var w = e(13838), k = e(41940), i = e(1426).extendFlat, _ = e(30962).overrideAll; R.exports = _({ orientation: { valType: "enumerated", values: ["h", "v"], dflt: "v" }, thicknessmode: { valType: "enumerated", values: ["fraction", "pixels"], dflt: "pixels" }, thickness: { valType: "number", min: 0, dflt: 30 }, lenmode: { valType: "enumerated", values: ["fraction", "pixels"], dflt: "fraction" }, len: { valType: "number", min: 0, dflt: 1 }, x: { valType: "number" }, xref: { valType: "enumerated", dflt: "paper", values: ["container", "paper"], editType: "layoutstyle" }, xanchor: { valType: "enumerated", values: ["left", "center", "right"] }, xpad: { valType: "number", min: 0, dflt: 10 }, y: { valType: "number" }, yref: { valType: "enumerated", dflt: "paper", values: ["container", "paper"], editType: "layoutstyle" }, yanchor: { valType: "enumerated", values: ["top", "middle", "bottom"] }, ypad: { valType: "number", min: 0, dflt: 10 }, outlinecolor: w.linecolor, outlinewidth: w.linewidth, bordercolor: w.linecolor, borderwidth: { valType: "number", min: 0, dflt: 0 }, bgcolor: { valType: "color", dflt: "rgba(0,0,0,0)" }, tickmode: w.minor.tickmode, nticks: w.nticks, tick0: w.tick0, dtick: w.dtick, tickvals: w.tickvals, ticktext: w.ticktext, ticks: i({}, w.ticks, { dflt: "" }), ticklabeloverflow: i({}, w.ticklabeloverflow, {}), ticklabelposition: { valType: "enumerated", values: ["outside", "inside", "outside top", "inside top", "outside left", "inside left", "outside right", "inside right", "outside bottom", "inside bottom"], dflt: "outside" }, ticklen: w.ticklen, tickwidth: w.tickwidth, tickcolor: w.tickcolor, ticklabelstep: w.ticklabelstep, showticklabels: w.showticklabels, labelalias: w.labelalias, tickfont: k({}), tickangle: w.tickangle, tickformat: w.tickformat, tickformatstops: w.tickformatstops, tickprefix: w.tickprefix, showtickprefix: w.showtickprefix, ticksuffix: w.ticksuffix, showticksuffix: w.showticksuffix, separatethousands: w.separatethousands, exponentformat: w.exponentformat, minexponent: w.minexponent, showexponent: w.showexponent, title: { text: { valType: "string" }, font: k({}), side: { valType: "enumerated", values: ["right", "top", "bottom"] } }, _deprecated: { title: { valType: "string" }, titlefont: k({}), titleside: { valType: "enumerated", values: ["right", "top", "bottom"], dflt: "top" } } }, "colorbars", "from-root") }, 30939: function (R) { R.exports = { cn: { colorbar: "colorbar", cbbg: "cbbg", cbfill: "cbfill", cbfills: "cbfills", cbline: "cbline", cblines: "cblines", cbaxis: "cbaxis", cbtitleunshift: "cbtitleunshift", cbtitle: "cbtitle", cboutline: "cboutline", crisp: "crisp", jsPlaceholder: "js-placeholder" } } }, 62499: function (R, E, e) { var w = e(71828), k = e(44467), i = e(26218), _ = e(38701), y = e(96115), h = e(89426), l = e(63583); R.exports = function (t, o, r) { var n = k.newContainer(o, "colorbar"), a = t.colorbar || {}; function s(B, Y) { return w.coerce(a, n, l, B, Y) } var u = r.margin || { t: 0, b: 0, l: 0, r: 0 }, p = r.width - u.l - u.r, c = r.height - u.t - u.b, b = s("orientation") === "v", g = s("thicknessmode"); s("thickness", g === "fraction" ? 30 / (b ? p : c) : 30); var f = s("lenmode"); s("len", f === "fraction" ? 1 : b ? c : p); var v, m, x, T = s("yref") === "paper", d = s("xref") === "paper", M = "left"; b ? (x = "middle", M = d ? "left" : "right", v = d ? 1.02 : 1, m = .5) : (x = T ? "bottom" : "top", M = "center", v = .5, m = T ? 1.02 : 1), w.coerce(a, n, { x: { valType: "number", min: d ? -2 : 0, max: d ? 3 : 1, dflt: v } }, "x"), w.coerce(a, n, { y: { valType: "number", min: T ? -2 : 0, max: T ? 3 : 1, dflt: m } }, "y"), s("xanchor", M), s("xpad"), s("yanchor", x), s("ypad"), w.noneOrAll(a, n, ["x", "y"]), s("outlinecolor"), s("outlinewidth"), s("bordercolor"), s("borderwidth"), s("bgcolor"); var A = w.coerce(a, n, { ticklabelposition: { valType: "enumerated", dflt: "outside", values: b ? ["outside", "inside", "outside top", "inside top", "outside bottom", "inside bottom"] : ["outside", "inside", "outside left", "inside left", "outside right", "inside right"] } }, "ticklabelposition"); s("ticklabeloverflow", A.indexOf("inside") !== -1 ? "hide past domain" : "hide past div"), i(a, n, s, "linear"); var C = r.font, P = { outerTicks: !1, font: C }; A.indexOf("inside") !== -1 && (P.bgColor = "black"), h(a, n, s, "linear", P), y(a, n, s, "linear", P), _(a, n, s, "linear", P), s("title.text", r._dfltTitle.colorbar); var O = n.showticklabels ? n.tickfont : C, z = w.extendFlat({}, O, { color: C.color, size: w.bigFont(O.size) }); w.coerceFont(s, "title.font", z), s("title.side", b ? "top" : "right") } }, 98981: function (R, E, e) { var w = e(39898), k = e(84267), i = e(74875), _ = e(73972), y = e(89298), h = e(28569), l = e(71828), t = l.strTranslate, o = e(1426).extendFlat, r = e(6964), n = e(91424), a = e(7901), s = e(92998), u = e(63893), p = e(52075).flipScale, c = e(71453), b = e(52830), g = e(13838), f = e(18783), v = f.LINE_SPACING, m = f.FROM_TL, x = f.FROM_BR, T = e(30939).cn; R.exports = { draw: function (d) { var M = d._fullLayout._infolayer.selectAll("g." + T.colorbar).data(function (A) { var C, P, O, z, B = A._fullLayout, Y = A.calcdata, D = []; function G(oe) { return o(oe, { _fillcolor: null, _line: { color: null, width: null, dash: null }, _levels: { start: null, end: null, size: null }, _filllevels: null, _fillgradient: null, _zrange: null }) } function V() { typeof z.calc == "function" ? z.calc(A, O, C) : (C._fillgradient = P.reversescale ? p(P.colorscale) : P.colorscale, C._zrange = [P[z.min], P[z.max]]) } for (var j = 0; j < Y.length; j++) { var W = Y[j], Z = (O = W[0].trace)._module.colorbar; if (O.visible === !0 && Z) for (var ie = Array.isArray(Z), te = ie ? Z : [Z], J = 0; J < te.length; J++) { var X = (z = te[J]).container; (P = X ? O[X] : O) && P.showscale && ((C = G(P.colorbar))._id = "cb" + O.uid + (ie && X ? "-" + X : ""), C._traceIndex = O.index, C._propPrefix = (X ? X + "." : "") + "colorbar.", C._meta = O._meta, V(), D.push(C)) } } for (var ee in B._colorAxes) if ((P = B[ee]).showscale) { var re = B._colorAxes[ee]; (C = G(P.colorbar))._id = "cb" + ee, C._propPrefix = ee + ".colorbar.", C._meta = B._meta, z = { min: "cmin", max: "cmax" }, re[0] !== "heatmap" && (O = re[1], z.calc = O._module.colorbar.calc), V(), D.push(C) } return D }(d), function (A) { return A._id }); M.enter().append("g").attr("class", function (A) { return A._id }).classed(T.colorbar, !0), M.each(function (A) { var C = w.select(this); l.ensureSingle(C, "rect", T.cbbg), l.ensureSingle(C, "g", T.cbfills), l.ensureSingle(C, "g", T.cblines), l.ensureSingle(C, "g", T.cbaxis, function (O) { O.classed(T.crisp, !0) }), l.ensureSingle(C, "g", T.cbtitleunshift, function (O) { O.append("g").classed(T.cbtitle, !0) }), l.ensureSingle(C, "rect", T.cboutline); var P = function (O, z, B) { var Y = z.orientation === "v", D = z.len, G = z.lenmode, V = z.thickness, j = z.thicknessmode, W = z.outlinewidth, Z = z.borderwidth, ie = z.bgcolor, te = z.xanchor, J = z.yanchor, X = z.xpad, ee = z.ypad, re = z.x, oe = Y ? z.y : 1 - z.y, ue = z.yref === "paper", ce = z.xref === "paper", de = B._fullLayout, me = de._size, _e = z._fillcolor, Se = z._line, we = z.title, xe = we.side, De = z._zrange || w.extent((typeof _e == "function" ? _e : Se.color).domain()), Ee = typeof Se.color == "function" ? Se.color : function () { return Se.color }, Me = typeof _e == "function" ? _e : function () { return _e }, he = z._levels, fe = function (Ze, Qe, st) { var ft, Be, je = Qe._levels, at = [], ot = [], xt = je.end + je.size / 100, yt = je.size, _t = 1.001 * st[0] - .001 * st[1], gt = 1.001 * st[1] - .001 * st[0]; for (Be = 0; Be < 1e5 && (ft = je.start + Be * yt, !(yt > 0 ? ft >= xt : ft <= xt)); Be++)ft > _t && ft < gt && at.push(ft); if (Qe._fillgradient) ot = [0]; else if (typeof Qe._fillcolor == "function") { var Ct = Qe._filllevels; if (Ct) for (xt = Ct.end + Ct.size / 100, yt = Ct.size, Be = 0; Be < 1e5 && (ft = Ct.start + Be * yt, !(yt > 0 ? ft >= xt : ft <= xt)); Be++)ft > st[0] && ft < st[1] && ot.push(ft); else (ot = at.map(function (dt) { return dt - je.size / 2 })).push(ot[ot.length - 1] + je.size) } else Qe._fillcolor && typeof Qe._fillcolor == "string" && (ot = [0]); return je.size < 0 && (at.reverse(), ot.reverse()), { line: at, fill: ot } }(0, z, De), ae = fe.fill, be = fe.line, Ie = Math.round(V * (j === "fraction" ? Y ? me.w : me.h : 1)), Te = Ie / (Y ? me.w : me.h), Ne = Math.round(D * (G === "fraction" ? Y ? me.h : me.w : 1)), qe = Ne / (Y ? me.h : me.w), ve = ce ? me.w : B._fullLayout.width, Ce = ue ? me.h : B._fullLayout.height, Ae = Math.round(Y ? re * ve + X : oe * Ce + ee), ze = { center: .5, right: 1 }[te] || 0, Ue = { top: 1, middle: .5 }[J] || 0, Ve = Y ? re - ze * Te : oe - Ue * Te, Ye = Y ? oe - Ue * qe : re - ze * qe, $e = Math.round(Y ? Ce * (1 - Ye) : ve * Ye); z._lenFrac = qe, z._thickFrac = Te, z._uFrac = Ve, z._vFrac = Ye; var rt = z._axis = function (Ze, Qe, st) { var ft = Ze._fullLayout, Be = Qe.orientation === "v", je = { type: "linear", range: st, tickmode: Qe.tickmode, nticks: Qe.nticks, tick0: Qe.tick0, dtick: Qe.dtick, tickvals: Qe.tickvals, ticktext: Qe.ticktext, ticks: Qe.ticks, ticklen: Qe.ticklen, tickwidth: Qe.tickwidth, tickcolor: Qe.tickcolor, showticklabels: Qe.showticklabels, labelalias: Qe.labelalias, ticklabelposition: Qe.ticklabelposition, ticklabeloverflow: Qe.ticklabeloverflow, ticklabelstep: Qe.ticklabelstep, tickfont: Qe.tickfont, tickangle: Qe.tickangle, tickformat: Qe.tickformat, exponentformat: Qe.exponentformat, minexponent: Qe.minexponent, separatethousands: Qe.separatethousands, showexponent: Qe.showexponent, showtickprefix: Qe.showtickprefix, tickprefix: Qe.tickprefix, showticksuffix: Qe.showticksuffix, ticksuffix: Qe.ticksuffix, title: Qe.title, showline: !0, anchor: "free", side: Be ? "right" : "bottom", position: 1 }, at = Be ? "y" : "x", ot = { type: "linear", _id: at + Qe._id }, xt = { letter: at, font: ft.font, noHover: !0, noTickson: !0, noTicklabelmode: !0, calendar: ft.calendar }; function yt(_t, gt) { return l.coerce(je, ot, g, _t, gt) } return c(je, ot, yt, xt, ft), b(je, ot, yt, xt), ot }(B, z, De); rt.position = Te + (Y ? re + X / me.w : oe + ee / me.h); var ht = ["top", "bottom"].indexOf(xe) !== -1; if (Y && ht && (rt.title.side = xe, rt.titlex = re + X / me.w, rt.titley = Ye + (we.side === "top" ? qe - ee / me.h : ee / me.h)), Y || ht || (rt.title.side = xe, rt.titley = oe + ee / me.h, rt.titlex = Ye + X / me.w), Se.color && z.tickmode === "auto") { rt.tickmode = "linear", rt.tick0 = he.start; var nt = he.size, bt = l.constrain(Ne / 50, 4, 15) + 1, wt = (De[1] - De[0]) / ((z.nticks || bt) * nt); if (wt > 1) { var ut = Math.pow(10, Math.floor(Math.log(wt) / Math.LN10)); nt *= ut * l.roundUp(wt / ut, [2, 5, 10]), (Math.abs(he.start) / he.size + 1e-6) % 1 < 2e-6 && (rt.tick0 = 0) } rt.dtick = nt } rt.domain = Y ? [Ye + ee / me.h, Ye + qe - ee / me.h] : [Ye + X / me.w, Ye + qe - X / me.w], rt.setScale(), O.attr("transform", t(Math.round(me.l), Math.round(me.t))); var lt, Tt = O.select("." + T.cbtitleunshift).attr("transform", t(-Math.round(me.l), -Math.round(me.t))), Et = rt.ticklabelposition, St = rt.title.font.size, Ft = O.select("." + T.cbaxis), zt = 0, Je = 0; function et(Ze, Qe) { var st = { propContainer: rt, propName: z._propPrefix + "title", traceIndex: z._traceIndex, _meta: z._meta, placeholder: de._dfltTitle.colorbar, containerGroup: O.select("." + T.cbtitle) }, ft = Ze.charAt(0) === "h" ? Ze.substr(1) : "h" + Ze; O.selectAll("." + ft + ",." + ft + "-math-group").remove(), s.draw(B, Ze, o(st, Qe || {})) } return l.syncOrAsync([i.previousPromises, function () { var Ze, Qe; (Y && ht || !Y && !ht) && (xe === "top" && (Ze = X + me.l + ve * re, Qe = ee + me.t + Ce * (1 - Ye - qe) + 3 + .75 * St), xe === "bottom" && (Ze = X + me.l + ve * re, Qe = ee + me.t + Ce * (1 - Ye) - 3 - .25 * St), xe === "right" && (Qe = ee + me.t + Ce * oe + 3 + .75 * St, Ze = X + me.l + ve * Ye), et(rt._id + "title", { attributes: { x: Ze, y: Qe, "text-anchor": Y ? "start" : "middle" } })) }, function () { if (!Y && !ht || Y && ht) { var Ze, Qe = O.select("." + T.cbtitle), st = Qe.select("text"), ft = [-W / 2, W / 2], Be = Qe.select(".h" + rt._id + "title-math-group").node(), je = 15.6; if (st.node() && (je = parseInt(st.node().style.fontSize, 10) * v), Be ? (Ze = n.bBox(Be), Je = Ze.width, (zt = Ze.height) > je && (ft[1] -= (zt - je) / 2)) : st.node() && !st.classed(T.jsPlaceholder) && (Ze = n.bBox(st.node()), Je = Ze.width, zt = Ze.height), Y) { if (zt) { if (zt += 5, xe === "top") rt.domain[1] -= zt / me.h, ft[1] *= -1; else { rt.domain[0] += zt / me.h; var at = u.lineCount(st); ft[1] += (1 - at) * je } Qe.attr("transform", t(ft[0], ft[1])), rt.setScale() } } else Je && (xe === "right" && (rt.domain[0] += (Je + St / 2) / me.w), Qe.attr("transform", t(ft[0], ft[1])), rt.setScale()) } O.selectAll("." + T.cbfills + ",." + T.cblines).attr("transform", Y ? t(0, Math.round(me.h * (1 - rt.domain[1]))) : t(Math.round(me.w * rt.domain[0]), 0)), Ft.attr("transform", Y ? t(0, Math.round(-me.t)) : t(Math.round(-me.l), 0)); var ot = O.select("." + T.cbfills).selectAll("rect." + T.cbfill).attr("style", "").data(ae); ot.enter().append("rect").classed(T.cbfill, !0).style("stroke", "none"), ot.exit().remove(); var xt = De.map(rt.c2p).map(Math.round).sort(function (dt, vt) { return dt - vt }); ot.each(function (dt, vt) { var At = [vt === 0 ? De[0] : (ae[vt] + ae[vt - 1]) / 2, vt === ae.length - 1 ? De[1] : (ae[vt] + ae[vt + 1]) / 2].map(rt.c2p).map(Math.round); Y && (At[1] = l.constrain(At[1] + (At[1] > At[0]) ? 1 : -1, xt[0], xt[1])); var Bt = w.select(this).attr(Y ? "x" : "y", Ae).attr(Y ? "y" : "x", w.min(At)).attr(Y ? "width" : "height", Math.max(Ie, 2)).attr(Y ? "height" : "width", Math.max(w.max(At) - w.min(At), 2)); if (z._fillgradient) n.gradient(Bt, B, z._id, Y ? "vertical" : "horizontalreversed", z._fillgradient, "fill"); else { var jt = Me(dt).replace("e-", ""); Bt.attr("fill", k(jt).toHexString()) } }); var yt = O.select("." + T.cblines).selectAll("path." + T.cbline).data(Se.color && Se.width ? be : []); yt.enter().append("path").classed(T.cbline, !0), yt.exit().remove(), yt.each(function (dt) { var vt = Ae, At = Math.round(rt.c2p(dt)) + Se.width / 2 % 1; w.select(this).attr("d", "M" + (Y ? vt + "," + At : At + "," + vt) + (Y ? "h" : "v") + Ie).call(n.lineGroupStyle, Se.width, Ee(dt), Se.dash) }), Ft.selectAll("g." + rt._id + "tick,path").remove(); var _t = Ae + Ie + (W || 0) / 2 - (z.ticks === "outside" ? 1 : 0), gt = y.calcTicks(rt), Ct = y.getTickSigns(rt)[2]; return y.drawTicks(B, rt, { vals: rt.ticks === "inside" ? y.clipEnds(rt, gt) : gt, layer: Ft, path: y.makeTickPath(rt, _t, Ct), transFn: y.makeTransTickFn(rt) }), y.drawLabels(B, rt, { vals: gt, layer: Ft, transFn: y.makeTransTickLabelFn(rt), labelFns: y.makeLabelFns(rt, _t) }) }, function () { if (Y && !ht || !Y && ht) { var Ze, Qe, st = rt.position || 0, ft = rt._offset + rt._length / 2; if (xe === "right") Qe = ft, Ze = me.l + ve * st + 10 + St * (rt.showticklabels ? 1 : .5); else if (Ze = ft, xe === "bottom" && (Qe = me.t + Ce * st + 10 + (Et.indexOf("inside") === -1 ? rt.tickfont.size : 0) + (rt.ticks !== "intside" && z.ticklen || 0)), xe === "top") { var Be = we.text.split("
").length; Qe = me.t + Ce * st + 10 - Ie - v * St * Be } et((Y ? "h" : "v") + rt._id + "title", { avoid: { selection: w.select(B).selectAll("g." + rt._id + "tick"), side: xe, offsetTop: Y ? 0 : me.t, offsetLeft: Y ? me.l : 0, maxShift: Y ? de.width : de.height }, attributes: { x: Ze, y: Qe, "text-anchor": "middle" }, transform: { rotate: Y ? -90 : 0, offset: 0 } }) } }, i.previousPromises, function () { var Ze, Qe = Ie + W / 2; Et.indexOf("inside") === -1 && (Ze = n.bBox(Ft.node()), Qe += Y ? Ze.width : Ze.height), lt = Tt.select("text"); var st = 0, ft = Y && xe === "top", Be = !Y && xe === "right", je = 0; if (lt.node() && !lt.classed(T.jsPlaceholder)) { var at, ot = Tt.select(".h" + rt._id + "title-math-group").node(); ot && (Y && ht || !Y && !ht) ? (st = (Ze = n.bBox(ot)).width, at = Ze.height) : (st = (Ze = n.bBox(Tt.node())).right - me.l - (Y ? Ae : $e), at = Ze.bottom - me.t - (Y ? $e : Ae), Y || xe !== "top" || (Qe += Ze.height, je = Ze.height)), Be && (lt.attr("transform", t(st / 2 + St / 2, 0)), st *= 2), Qe = Math.max(Qe, Y ? st : at) } var xt = 2 * (Y ? X : ee) + Qe + Z + W / 2, yt = 0; !Y && we.text && J === "bottom" && oe <= 0 && (xt += yt = xt / 2, je += yt), de._hColorbarMoveTitle = yt, de._hColorbarMoveCBTitle = je; var _t = Z + W, gt = (Y ? Ae : $e) - _t / 2 - (Y ? X : 0), Ct = (Y ? $e : Ae) - (Y ? Ne : ee + je - yt); O.select("." + T.cbbg).attr("x", gt).attr("y", Ct).attr(Y ? "width" : "height", Math.max(xt - yt, 2)).attr(Y ? "height" : "width", Math.max(Ne + _t, 2)).call(a.fill, ie).call(a.stroke, z.bordercolor).style("stroke-width", Z); var dt = Be ? Math.max(st - 10, 0) : 0; O.selectAll("." + T.cboutline).attr("x", (Y ? Ae : $e + X) + dt).attr("y", (Y ? $e + ee - Ne : Ae) + (ft ? zt : 0)).attr(Y ? "width" : "height", Math.max(Ie, 2)).attr(Y ? "height" : "width", Math.max(Ne - (Y ? 2 * ee + zt : 2 * X + dt), 2)).call(a.stroke, z.outlinecolor).style({ fill: "none", "stroke-width": W }); var vt = Y ? ze * xt : 0, At = Y ? 0 : (1 - Ue) * xt - je; if (vt = ce ? me.l - vt : -vt, At = ue ? me.t - At : -At, O.attr("transform", t(vt, At)), !Y && (Z || k(ie).getAlpha() && !k.equals(de.paper_bgcolor, ie))) { var Bt = Ft.selectAll("text"), jt = Bt[0].length, Ut = O.select("." + T.cbbg).node(), tn = n.bBox(Ut), Xt = n.getTranslate(O); Bt.each(function (mn, xn) { var Pn = jt - 1; if (xn === 0 || xn === Pn) { var Dn, En = n.bBox(this), Fn = n.getTranslate(this); if (xn === Pn) { var er = En.right + Fn.x; (Dn = tn.right + Xt.x + $e - Z - 2 + re - er) > 0 && (Dn = 0) } else if (xn === 0) { var ir = En.left + Fn.x; (Dn = tn.left + Xt.x + $e + Z + 2 - ir) < 0 && (Dn = 0) } Dn && (jt < 3 ? this.setAttribute("transform", "translate(" + Dn + ",0) " + this.getAttribute("transform")) : this.setAttribute("visibility", "hidden")) } }) } var Qt = {}, Gt = m[te], vn = x[te], Tn = m[J], dn = x[J], Yt = xt - Ie; Y ? (G === "pixels" ? (Qt.y = oe, Qt.t = Ne * Tn, Qt.b = Ne * dn) : (Qt.t = Qt.b = 0, Qt.yt = oe + D * Tn, Qt.yb = oe - D * dn), j === "pixels" ? (Qt.x = re, Qt.l = xt * Gt, Qt.r = xt * vn) : (Qt.l = Yt * Gt, Qt.r = Yt * vn, Qt.xl = re - V * Gt, Qt.xr = re + V * vn)) : (G === "pixels" ? (Qt.x = re, Qt.l = Ne * Gt, Qt.r = Ne * vn) : (Qt.l = Qt.r = 0, Qt.xl = re + D * Gt, Qt.xr = re - D * vn), j === "pixels" ? (Qt.y = 1 - oe, Qt.t = xt * Tn, Qt.b = xt * dn) : (Qt.t = Yt * Tn, Qt.b = Yt * dn, Qt.yt = oe - V * Tn, Qt.yb = oe + V * dn)); var ln = z.y < .5 ? "b" : "t", nn = z.x < .5 ? "l" : "r"; B._fullLayout._reservedMargin[z._id] = {}; var fn = { r: de.width - gt - vt, l: gt + Qt.r, b: de.height - Ct - At, t: Ct + Qt.b }; ce && ue ? i.autoMargin(B, z._id, Qt) : ce ? B._fullLayout._reservedMargin[z._id][ln] = fn[ln] : ue || Y ? B._fullLayout._reservedMargin[z._id][nn] = fn[nn] : B._fullLayout._reservedMargin[z._id][ln] = fn[ln] }], B) }(C, A, d); P && P.then && (d._promises || []).push(P), d._context.edits.colorbarPosition && function (O, z, B) { var Y, D, G, V = z.orientation === "v", j = B._fullLayout._size; h.init({ element: O.node(), gd: B, prepFn: function () { Y = O.attr("transform"), r(O) }, moveFn: function (W, Z) { O.attr("transform", Y + t(W, Z)), D = h.align((V ? z._uFrac : z._vFrac) + W / j.w, V ? z._thickFrac : z._lenFrac, 0, 1, z.xanchor), G = h.align((V ? z._vFrac : 1 - z._uFrac) - Z / j.h, V ? z._lenFrac : z._thickFrac, 0, 1, z.yanchor); var ie = h.getCursor(D, G, z.xanchor, z.yanchor); r(O, ie) }, doneFn: function () { if (r(O), D !== void 0 && G !== void 0) { var W = {}; W[z._propPrefix + "x"] = D, W[z._propPrefix + "y"] = G, z._traceIndex !== void 0 ? _.call("_guiRestyle", B, W, z._traceIndex) : _.call("_guiRelayout", B, W) } } }) }(C, A, d) }), M.exit().each(function (A) { i.autoMargin(d, A._id) }).remove(), M.order() } } }, 76228: function (R, E, e) { var w = e(71828); R.exports = function (k) { return w.isPlainObject(k.colorbar) } }, 12311: function (R, E, e) { R.exports = { moduleType: "component", name: "colorbar", attributes: e(63583), supplyDefaults: e(62499), draw: e(98981).draw, hasColorbar: e(76228) } }, 50693: function (R, E, e) { var w = e(63583), k = e(30587).counter, i = e(78607), _ = e(63282).scales; function y(h) { return "`" + h + "`" } i(_), R.exports = function (h, l) { h = h || ""; var t, o = (l = l || {}).cLetter || "c", r = ("onlyIfNumerical" in l && l.onlyIfNumerical, "noScale" in l ? l.noScale : h === "marker.line"), n = "showScaleDflt" in l ? l.showScaleDflt : o === "z", a = typeof l.colorscaleDflt == "string" ? _[l.colorscaleDflt] : null, s = l.editTypeOverride || "", u = h ? h + "." : ""; "colorAttr" in l ? (t = l.colorAttr, l.colorAttr) : y(u + (t = { z: "z", c: "color" }[o])); var p = o + "auto", c = o + "min", b = o + "max", g = o + "mid", f = {}; f[c] = f[b] = void 0; var v = {}; v[p] = !1; var m = {}; return t === "color" && (m.color = { valType: "color", arrayOk: !0, editType: s || "style" }, l.anim && (m.color.anim = !0)), m[p] = { valType: "boolean", dflt: !0, editType: "calc", impliedEdits: f }, m[c] = { valType: "number", dflt: null, editType: s || "plot", impliedEdits: v }, m[b] = { valType: "number", dflt: null, editType: s || "plot", impliedEdits: v }, m[g] = { valType: "number", dflt: null, editType: "calc", impliedEdits: f }, m.colorscale = { valType: "colorscale", editType: "calc", dflt: a, impliedEdits: { autocolorscale: !1 } }, m.autocolorscale = { valType: "boolean", dflt: l.autoColorDflt !== !1, editType: "calc", impliedEdits: { colorscale: void 0 } }, m.reversescale = { valType: "boolean", dflt: !1, editType: "plot" }, r || (m.showscale = { valType: "boolean", dflt: n, editType: "calc" }, m.colorbar = w), l.noColorAxis || (m.coloraxis = { valType: "subplotid", regex: k("coloraxis"), dflt: null, editType: "calc" }), m } }, 78803: function (R, E, e) { var w = e(92770), k = e(71828), i = e(52075).extractOpts; R.exports = function (_, y, h) { var l, t = _._fullLayout, o = h.vals, r = h.containerStr, n = r ? k.nestedProperty(y, r).get() : y, a = i(n), s = a.auto !== !1, u = a.min, p = a.max, c = a.mid, b = function () { return k.aggNums(Math.min, null, o) }, g = function () { return k.aggNums(Math.max, null, o) }; u === void 0 ? u = b() : s && (u = n._colorAx && w(u) ? Math.min(u, b()) : b()), p === void 0 ? p = g() : s && (p = n._colorAx && w(p) ? Math.max(p, g()) : g()), s && c !== void 0 && (p - c > c - u ? u = c - (p - c) : p - c < c - u && (p = c + (c - u))), u === p && (u -= .5, p += .5), a._sync("min", u), a._sync("max", p), a.autocolorscale && (l = u * p < 0 ? t.colorscale.diverging : u >= 0 ? t.colorscale.sequential : t.colorscale.sequentialminus, a._sync("colorscale", l)) } }, 33046: function (R, E, e) { var w = e(71828), k = e(52075).hasColorscale, i = e(52075).extractOpts; R.exports = function (_, y) { function h(s, u) { var p = s["_" + u]; p !== void 0 && (s[u] = p) } function l(s, u) { var p = u.container ? w.nestedProperty(s, u.container).get() : s; if (p) if (p.coloraxis) p._colorAx = y[p.coloraxis]; else { var c = i(p), b = c.auto; (b || c.min === void 0) && h(p, u.min), (b || c.max === void 0) && h(p, u.max), c.autocolorscale && h(p, "colorscale") } } for (var t = 0; t < _.length; t++) { var o = _[t], r = o._module.colorbar; if (r) if (Array.isArray(r)) for (var n = 0; n < r.length; n++)l(o, r[n]); else l(o, r); k(o, "marker.line") && l(o, { container: "marker.line", min: "cmin", max: "cmax" }) } for (var a in y._colorAxes) l(y[a], { min: "cmin", max: "cmax" }) } }, 1586: function (R, E, e) { var w = e(92770), k = e(71828), i = e(76228), _ = e(62499), y = e(63282).isValid, h = e(73972).traceIs; function l(t, o) { var r = o.slice(0, o.length - 1); return o ? k.nestedProperty(t, r).get() || {} : t } R.exports = function t(o, r, n, a, s) { var u = s.prefix, p = s.cLetter, c = "_module" in r, b = l(o, u), g = l(r, u), f = l(r._template || {}, u) || {}, v = function () { return delete o.coloraxis, delete r.coloraxis, t(o, r, n, a, s) }; if (c) { var m = n._colorAxes || {}, x = a(u + "coloraxis"); if (x) { var T = h(r, "contour") && k.nestedProperty(r, "contours.coloring").get() || "heatmap", d = m[x]; return void (d ? (d[2].push(v), d[0] !== T && (d[0] = !1, k.warn(["Ignoring coloraxis:", x, "setting", "as it is linked to incompatible colorscales."].join(" ")))) : m[x] = [T, r, [v]]) } } var M = b[p + "min"], A = b[p + "max"], C = w(M) && w(A) && M < A; a(u + p + "auto", !C) ? a(u + p + "mid") : (a(u + p + "min"), a(u + p + "max")); var P, O, z = b.colorscale, B = f.colorscale; z !== void 0 && (P = !y(z)), B !== void 0 && (P = !y(B)), a(u + "autocolorscale", P), a(u + "colorscale"), a(u + "reversescale"), u !== "marker.line." && (u && c && (O = i(b)), a(u + "showscale", O) && (u && f && (g._template = f), _(b, g, n))) } }, 52075: function (R, E, e) { var w = e(39898), k = e(84267), i = e(92770), _ = e(71828), y = e(7901), h = e(63282).isValid, l = ["showscale", "autocolorscale", "colorscale", "reversescale", "colorbar"], t = ["min", "max", "mid", "auto"]; function o(u) { var p, c, b, g = u._colorAx, f = g || u, v = {}; for (c = 0; c < l.length; c++)v[b = l[c]] = f[b]; if (g) for (p = "c", c = 0; c < t.length; c++)v[b = t[c]] = f["c" + b]; else { var m; for (c = 0; c < t.length; c++)((m = "c" + (b = t[c])) in f || (m = "z" + b) in f) && (v[b] = f[m]); p = m.charAt(0) } return v._sync = function (x, T) { var d = t.indexOf(x) !== -1 ? p + x : x; f[d] = f["_" + d] = T }, v } function r(u) { for (var p = o(u), c = p.min, b = p.max, g = p.reversescale ? n(p.colorscale) : p.colorscale, f = g.length, v = new Array(f), m = new Array(f), x = 0; x < f; x++) { var T = g[x]; v[x] = c + T[0] * (b - c), m[x] = T[1] } return { domain: v, range: m } } function n(u) { for (var p = u.length, c = new Array(p), b = p - 1, g = 0; b >= 0; b--, g++) { var f = u[b]; c[g] = [1 - f[0], f[1]] } return c } function a(u, p) { p = p || {}; for (var c = u.domain, b = u.range, g = b.length, f = new Array(g), v = 0; v < g; v++) { var m = k(b[v]).toRgb(); f[v] = [m.r, m.g, m.b, m.a] } var x, T = w.scale.linear().domain(c).range(f).clamp(!0), d = p.noNumericCheck, M = p.returnArray; return (x = d && M ? T : d ? function (A) { return s(T(A)) } : M ? function (A) { return i(A) ? T(A) : k(A).isValid() ? A : y.defaultLine } : function (A) { return i(A) ? s(T(A)) : k(A).isValid() ? A : y.defaultLine }).domain = T.domain, x.range = function () { return b }, x } function s(u) { var p = { r: u[0], g: u[1], b: u[2], a: u[3] }; return k(p).toRgbString() } R.exports = { hasColorscale: function (u, p, c) { var b = p ? _.nestedProperty(u, p).get() || {} : u, g = b[c || "color"], f = !1; if (_.isArrayOrTypedArray(g)) { for (var v = 0; v < g.length; v++)if (i(g[v])) { f = !0; break } } return _.isPlainObject(b) && (f || b.showscale === !0 || i(b.cmin) && i(b.cmax) || h(b.colorscale) || _.isPlainObject(b.colorbar)) }, extractOpts: o, extractScale: r, flipScale: n, makeColorScaleFunc: a, makeColorScaleFuncFromTrace: function (u, p) { return a(r(u), p) } } }, 21081: function (R, E, e) { var w = e(63282), k = e(52075); R.exports = { moduleType: "component", name: "colorscale", attributes: e(50693), layoutAttributes: e(72673), supplyLayoutDefaults: e(30959), handleDefaults: e(1586), crossTraceDefaults: e(33046), calc: e(78803), scales: w.scales, defaultScale: w.defaultScale, getScale: w.get, isValidScale: w.isValid, hasColorscale: k.hasColorscale, extractOpts: k.extractOpts, extractScale: k.extractScale, flipScale: k.flipScale, makeColorScaleFunc: k.makeColorScaleFunc, makeColorScaleFuncFromTrace: k.makeColorScaleFuncFromTrace } }, 72673: function (R, E, e) { var w = e(1426).extendFlat, k = e(50693), i = e(63282).scales; R.exports = { editType: "calc", colorscale: { editType: "calc", sequential: { valType: "colorscale", dflt: i.Reds, editType: "calc" }, sequentialminus: { valType: "colorscale", dflt: i.Blues, editType: "calc" }, diverging: { valType: "colorscale", dflt: i.RdBu, editType: "calc" } }, coloraxis: w({ _isSubplotObj: !0, editType: "calc" }, k("", { colorAttr: "corresponding trace color array(s)", noColorAxis: !0, showScaleDflt: !0 })) } }, 30959: function (R, E, e) { var w = e(71828), k = e(44467), i = e(72673), _ = e(1586); R.exports = function (y, h) { function l(p, c) { return w.coerce(y, h, i, p, c) } l("colorscale.sequential"), l("colorscale.sequentialminus"), l("colorscale.diverging"); var t, o, r = h._colorAxes; function n(p, c) { return w.coerce(t, o, i.coloraxis, p, c) } for (var a in r) { var s = r[a]; if (s[0]) t = y[a] || {}, (o = k.newContainer(h, a, "coloraxis"))._name = a, _(t, o, h, n, { prefix: "", cLetter: "c" }); else { for (var u = 0; u < s[2].length; u++)s[2][u](); delete h._colorAxes[a] } } } }, 63282: function (R, E, e) { var w = e(84267), k = { Greys: [[0, "rgb(0,0,0)"], [1, "rgb(255,255,255)"]], YlGnBu: [[0, "rgb(8,29,88)"], [.125, "rgb(37,52,148)"], [.25, "rgb(34,94,168)"], [.375, "rgb(29,145,192)"], [.5, "rgb(65,182,196)"], [.625, "rgb(127,205,187)"], [.75, "rgb(199,233,180)"], [.875, "rgb(237,248,217)"], [1, "rgb(255,255,217)"]], Greens: [[0, "rgb(0,68,27)"], [.125, "rgb(0,109,44)"], [.25, "rgb(35,139,69)"], [.375, "rgb(65,171,93)"], [.5, "rgb(116,196,118)"], [.625, "rgb(161,217,155)"], [.75, "rgb(199,233,192)"], [.875, "rgb(229,245,224)"], [1, "rgb(247,252,245)"]], YlOrRd: [[0, "rgb(128,0,38)"], [.125, "rgb(189,0,38)"], [.25, "rgb(227,26,28)"], [.375, "rgb(252,78,42)"], [.5, "rgb(253,141,60)"], [.625, "rgb(254,178,76)"], [.75, "rgb(254,217,118)"], [.875, "rgb(255,237,160)"], [1, "rgb(255,255,204)"]], Bluered: [[0, "rgb(0,0,255)"], [1, "rgb(255,0,0)"]], RdBu: [[0, "rgb(5,10,172)"], [.35, "rgb(106,137,247)"], [.5, "rgb(190,190,190)"], [.6, "rgb(220,170,132)"], [.7, "rgb(230,145,90)"], [1, "rgb(178,10,28)"]], Reds: [[0, "rgb(220,220,220)"], [.2, "rgb(245,195,157)"], [.4, "rgb(245,160,105)"], [1, "rgb(178,10,28)"]], Blues: [[0, "rgb(5,10,172)"], [.35, "rgb(40,60,190)"], [.5, "rgb(70,100,245)"], [.6, "rgb(90,120,245)"], [.7, "rgb(106,137,247)"], [1, "rgb(220,220,220)"]], Picnic: [[0, "rgb(0,0,255)"], [.1, "rgb(51,153,255)"], [.2, "rgb(102,204,255)"], [.3, "rgb(153,204,255)"], [.4, "rgb(204,204,255)"], [.5, "rgb(255,255,255)"], [.6, "rgb(255,204,255)"], [.7, "rgb(255,153,255)"], [.8, "rgb(255,102,204)"], [.9, "rgb(255,102,102)"], [1, "rgb(255,0,0)"]], Rainbow: [[0, "rgb(150,0,90)"], [.125, "rgb(0,0,200)"], [.25, "rgb(0,25,255)"], [.375, "rgb(0,152,255)"], [.5, "rgb(44,255,150)"], [.625, "rgb(151,255,0)"], [.75, "rgb(255,234,0)"], [.875, "rgb(255,111,0)"], [1, "rgb(255,0,0)"]], Portland: [[0, "rgb(12,51,131)"], [.25, "rgb(10,136,186)"], [.5, "rgb(242,211,56)"], [.75, "rgb(242,143,56)"], [1, "rgb(217,30,30)"]], Jet: [[0, "rgb(0,0,131)"], [.125, "rgb(0,60,170)"], [.375, "rgb(5,255,255)"], [.625, "rgb(255,255,0)"], [.875, "rgb(250,0,0)"], [1, "rgb(128,0,0)"]], Hot: [[0, "rgb(0,0,0)"], [.3, "rgb(230,0,0)"], [.6, "rgb(255,210,0)"], [1, "rgb(255,255,255)"]], Blackbody: [[0, "rgb(0,0,0)"], [.2, "rgb(230,0,0)"], [.4, "rgb(230,210,0)"], [.7, "rgb(255,255,255)"], [1, "rgb(160,200,255)"]], Earth: [[0, "rgb(0,0,130)"], [.1, "rgb(0,180,180)"], [.2, "rgb(40,210,40)"], [.4, "rgb(230,230,50)"], [.6, "rgb(120,70,20)"], [1, "rgb(255,255,255)"]], Electric: [[0, "rgb(0,0,0)"], [.15, "rgb(30,0,100)"], [.4, "rgb(120,0,100)"], [.6, "rgb(160,90,0)"], [.8, "rgb(230,200,0)"], [1, "rgb(255,250,220)"]], Viridis: [[0, "#440154"], [.06274509803921569, "#48186a"], [.12549019607843137, "#472d7b"], [.18823529411764706, "#424086"], [.25098039215686274, "#3b528b"], [.3137254901960784, "#33638d"], [.3764705882352941, "#2c728e"], [.4392156862745098, "#26828e"], [.5019607843137255, "#21918c"], [.5647058823529412, "#1fa088"], [.6274509803921569, "#28ae80"], [.6901960784313725, "#3fbc73"], [.7529411764705882, "#5ec962"], [.8156862745098039, "#84d44b"], [.8784313725490196, "#addc30"], [.9411764705882353, "#d8e219"], [1, "#fde725"]], Cividis: [[0, "rgb(0,32,76)"], [.058824, "rgb(0,42,102)"], [.117647, "rgb(0,52,110)"], [.176471, "rgb(39,63,108)"], [.235294, "rgb(60,74,107)"], [.294118, "rgb(76,85,107)"], [.352941, "rgb(91,95,109)"], [.411765, "rgb(104,106,112)"], [.470588, "rgb(117,117,117)"], [.529412, "rgb(131,129,120)"], [.588235, "rgb(146,140,120)"], [.647059, "rgb(161,152,118)"], [.705882, "rgb(176,165,114)"], [.764706, "rgb(192,177,109)"], [.823529, "rgb(209,191,102)"], [.882353, "rgb(225,204,92)"], [.941176, "rgb(243,219,79)"], [1, "rgb(255,233,69)"]] }, i = k.RdBu; function _(y) { var h = 0; if (!Array.isArray(y) || y.length < 2 || !y[0] || !y[y.length - 1] || +y[0][0] != 0 || +y[y.length - 1][0] != 1) return !1; for (var l = 0; l < y.length; l++) { var t = y[l]; if (t.length !== 2 || +t[0] < h || !w(t[1]).isValid()) return !1; h = +t[0] } return !0 } R.exports = { scales: k, defaultScale: i, get: function (y, h) { if (h || (h = i), !y) return h; function l() { try { y = k[y] || JSON.parse(y) } catch { y = h } } return typeof y == "string" && (l(), typeof y == "string" && l()), _(y) ? y : h }, isValid: function (y) { return k[y] !== void 0 || _(y) } } }, 92807: function (R) { R.exports = function (E, e, w, k, i) { var _ = (E - w) / (k - w), y = _ + e / (k - w), h = (_ + y) / 2; return i === "left" || i === "bottom" ? _ : i === "center" || i === "middle" ? h : i === "right" || i === "top" ? y : _ < .6666666666666666 - h ? _ : y > 1.3333333333333333 - h ? y : h } }, 70461: function (R, E, e) { var w = e(71828), k = [["sw-resize", "s-resize", "se-resize"], ["w-resize", "move", "e-resize"], ["nw-resize", "n-resize", "ne-resize"]]; R.exports = function (i, _, y, h) { return i = y === "left" ? 0 : y === "center" ? 1 : y === "right" ? 2 : w.constrain(Math.floor(3 * i), 0, 2), _ = h === "bottom" ? 0 : h === "middle" ? 1 : h === "top" ? 2 : w.constrain(Math.floor(3 * _), 0, 2), k[_][i] } }, 64505: function (R, E) { E.selectMode = function (e) { return e === "lasso" || e === "select" }, E.drawMode = function (e) { return e === "drawclosedpath" || e === "drawopenpath" || e === "drawline" || e === "drawrect" || e === "drawcircle" }, E.openMode = function (e) { return e === "drawline" || e === "drawopenpath" }, E.rectMode = function (e) { return e === "select" || e === "drawline" || e === "drawrect" || e === "drawcircle" }, E.freeMode = function (e) { return e === "lasso" || e === "drawclosedpath" || e === "drawopenpath" }, E.selectingOrDrawing = function (e) { return E.freeMode(e) || E.rectMode(e) } }, 28569: function (R, E, e) { var w = e(48956), k = e(57035), i = e(38520), _ = e(71828).removeElement, y = e(85555), h = R.exports = {}; h.align = e(92807), h.getCursor = e(70461); var l = e(26041); function t() { var r = document.createElement("div"); r.className = "dragcover"; var n = r.style; return n.position = "fixed", n.left = 0, n.right = 0, n.top = 0, n.bottom = 0, n.zIndex = 999999999, n.background = "none", document.body.appendChild(r), r } function o(r) { return w(r.changedTouches ? r.changedTouches[0] : r, document.body) } h.unhover = l.wrapped, h.unhoverRaw = l.raw, h.init = function (r) { var n, a, s, u, p, c, b, g, f = r.gd, v = 1, m = f._context.doubleClickDelay, x = r.element; f._mouseDownTime || (f._mouseDownTime = 0), x.style.pointerEvents = "all", x.onmousedown = d, i ? (x._ontouchstart && x.removeEventListener("touchstart", x._ontouchstart), x._ontouchstart = d, x.addEventListener("touchstart", d, { passive: !1 })) : x.ontouchstart = d; var T = r.clampFn || function (C, P, O) { return Math.abs(C) < O && (C = 0), Math.abs(P) < O && (P = 0), [C, P] }; function d(C) { f._dragged = !1, f._dragging = !0; var P = o(C); n = P[0], a = P[1], b = C.target, c = C, g = C.buttons === 2 || C.ctrlKey, C.clientX === void 0 && C.clientY === void 0 && (C.clientX = n, C.clientY = a), (s = new Date().getTime()) - f._mouseDownTime < m ? v += 1 : (v = 1, f._mouseDownTime = s), r.prepFn && r.prepFn(C, n, a), k && !g ? (p = t()).style.cursor = window.getComputedStyle(x).cursor : k || (p = document, u = window.getComputedStyle(document.documentElement).cursor, document.documentElement.style.cursor = window.getComputedStyle(x).cursor), document.addEventListener("mouseup", A), document.addEventListener("touchend", A), r.dragmode !== !1 && (C.preventDefault(), document.addEventListener("mousemove", M), document.addEventListener("touchmove", M, { passive: !1 })) } function M(C) { C.preventDefault(); var P = o(C), O = r.minDrag || y.MINDRAG, z = T(P[0] - n, P[1] - a, O), B = z[0], Y = z[1]; (B || Y) && (f._dragged = !0, h.unhover(f, C)), f._dragged && r.moveFn && !g && (f._dragdata = { element: x, dx: B, dy: Y }, r.moveFn(B, Y)) } function A(C) { if (delete f._dragdata, r.dragmode !== !1 && (C.preventDefault(), document.removeEventListener("mousemove", M), document.removeEventListener("touchmove", M)), document.removeEventListener("mouseup", A), document.removeEventListener("touchend", A), k ? _(p) : u && (p.documentElement.style.cursor = u, u = null), f._dragging) { if (f._dragging = !1, new Date().getTime() - f._mouseDownTime > m && (v = Math.max(v - 1, 1)), f._dragged) r.doneFn && r.doneFn(); else if (r.clickFn && r.clickFn(v, c), !g) { var P; try { P = new MouseEvent("click", C) } catch { var O = o(C); (P = document.createEvent("MouseEvents")).initMouseEvent("click", C.bubbles, C.cancelable, C.view, C.detail, C.screenX, C.screenY, O[0], O[1], C.ctrlKey, C.altKey, C.shiftKey, C.metaKey, C.button, C.relatedTarget) } b.dispatchEvent(P) } f._dragging = !1, f._dragged = !1 } else f._dragged = !1 } }, h.coverSlip = t }, 26041: function (R, E, e) { var w = e(11086), k = e(79990), i = e(24401).getGraphDiv, _ = e(26675), y = R.exports = {}; y.wrapped = function (h, l, t) { (h = i(h))._fullLayout && k.clear(h._fullLayout._uid + _.HOVERID), y.raw(h, l, t) }, y.raw = function (h, l) { var t = h._fullLayout, o = h._hoverdata; l || (l = {}), l.target && !h._dragged && w.triggerHandler(h, "plotly_beforehover", l) === !1 || (t._hoverlayer.selectAll("g").remove(), t._hoverlayer.selectAll("line").remove(), t._hoverlayer.selectAll("circle").remove(), h._hoverdata = void 0, l.target && o && h.emit("plotly_unhover", { event: l, points: o })) } }, 79952: function (R, E) { E.P = { valType: "string", values: ["solid", "dot", "dash", "longdash", "dashdot", "longdashdot"], dflt: "solid", editType: "style" }, E.u = { shape: { valType: "enumerated", values: ["", "/", "\\", "x", "-", "|", "+", "."], dflt: "", arrayOk: !0, editType: "style" }, fillmode: { valType: "enumerated", values: ["replace", "overlay"], dflt: "replace", editType: "style" }, bgcolor: { valType: "color", arrayOk: !0, editType: "style" }, fgcolor: { valType: "color", arrayOk: !0, editType: "style" }, fgopacity: { valType: "number", editType: "style", min: 0, max: 1 }, size: { valType: "number", min: 0, dflt: 8, arrayOk: !0, editType: "style" }, solidity: { valType: "number", min: 0, max: 1, dflt: .3, arrayOk: !0, editType: "style" }, editType: "style" } }, 91424: function (R, E, e) { var w = e(39898), k = e(71828), i = k.numberFormat, _ = e(92770), y = e(84267), h = e(73972), l = e(7901), t = e(21081), o = k.strTranslate, r = e(63893), n = e(77922), a = e(18783).LINE_SPACING, s = e(37822).DESELECTDIM, u = e(34098), p = e(39984), c = e(23469).appendArrayPointValue, b = R.exports = {}; function g(Ee, Me, he) { var fe = Me.fillpattern, ae = fe && b.getPatternAttr(fe.shape, 0, ""); if (ae) { var be = b.getPatternAttr(fe.bgcolor, 0, null), Ie = b.getPatternAttr(fe.fgcolor, 0, null), Te = fe.fgopacity, Ne = b.getPatternAttr(fe.size, 0, 8), qe = b.getPatternAttr(fe.solidity, 0, .3), ve = Me.uid; b.pattern(Ee, "point", he, ve, ae, Ne, qe, void 0, fe.fillmode, be, Ie, Te) } else Me.fillcolor && Ee.call(l.fill, Me.fillcolor) } b.font = function (Ee, Me, he, fe) { k.isPlainObject(Me) && (fe = Me.color, he = Me.size, Me = Me.family), Me && Ee.style("font-family", Me), he + 1 && Ee.style("font-size", he + "px"), fe && Ee.call(l.fill, fe) }, b.setPosition = function (Ee, Me, he) { Ee.attr("x", Me).attr("y", he) }, b.setSize = function (Ee, Me, he) { Ee.attr("width", Me).attr("height", he) }, b.setRect = function (Ee, Me, he, fe, ae) { Ee.call(b.setPosition, Me, he).call(b.setSize, fe, ae) }, b.translatePoint = function (Ee, Me, he, fe) { var ae = he.c2p(Ee.x), be = fe.c2p(Ee.y); return !!(_(ae) && _(be) && Me.node()) && (Me.node().nodeName === "text" ? Me.attr("x", ae).attr("y", be) : Me.attr("transform", o(ae, be)), !0) }, b.translatePoints = function (Ee, Me, he) { Ee.each(function (fe) { var ae = w.select(this); b.translatePoint(fe, ae, Me, he) }) }, b.hideOutsideRangePoint = function (Ee, Me, he, fe, ae, be) { Me.attr("display", he.isPtWithinRange(Ee, ae) && fe.isPtWithinRange(Ee, be) ? null : "none") }, b.hideOutsideRangePoints = function (Ee, Me) { if (Me._hasClipOnAxisFalse) { var he = Me.xaxis, fe = Me.yaxis; Ee.each(function (ae) { var be = ae[0].trace, Ie = be.xcalendar, Te = be.ycalendar, Ne = h.traceIs(be, "bar-like") ? ".bartext" : ".point,.textpoint"; Ee.selectAll(Ne).each(function (qe) { b.hideOutsideRangePoint(qe, w.select(this), he, fe, Ie, Te) }) }) } }, b.crispRound = function (Ee, Me, he) { return Me && _(Me) ? Ee._context.staticPlot ? Me : Me < 1 ? 1 : Math.round(Me) : he || 0 }, b.singleLineStyle = function (Ee, Me, he, fe, ae) { Me.style("fill", "none"); var be = (((Ee || [])[0] || {}).trace || {}).line || {}, Ie = he || be.width || 0, Te = ae || be.dash || ""; l.stroke(Me, fe || be.color), b.dashLine(Me, Te, Ie) }, b.lineGroupStyle = function (Ee, Me, he, fe) { Ee.style("fill", "none").each(function (ae) { var be = (((ae || [])[0] || {}).trace || {}).line || {}, Ie = Me || be.width || 0, Te = fe || be.dash || ""; w.select(this).call(l.stroke, he || be.color).call(b.dashLine, Te, Ie) }) }, b.dashLine = function (Ee, Me, he) { he = +he || 0, Me = b.dashStyle(Me, he), Ee.style({ "stroke-dasharray": Me, "stroke-width": he + "px" }) }, b.dashStyle = function (Ee, Me) { Me = +Me || 1; var he = Math.max(Me, 3); return Ee === "solid" ? Ee = "" : Ee === "dot" ? Ee = he + "px," + he + "px" : Ee === "dash" ? Ee = 3 * he + "px," + 3 * he + "px" : Ee === "longdash" ? Ee = 5 * he + "px," + 5 * he + "px" : Ee === "dashdot" ? Ee = 3 * he + "px," + he + "px," + he + "px," + he + "px" : Ee === "longdashdot" && (Ee = 5 * he + "px," + 2 * he + "px," + he + "px," + 2 * he + "px"), Ee }, b.singleFillStyle = function (Ee, Me) { var he = w.select(Ee.node()); g(Ee, ((he.data()[0] || [])[0] || {}).trace || {}, Me) }, b.fillGroupStyle = function (Ee, Me) { Ee.style("stroke-width", 0).each(function (he) { var fe = w.select(this); he[0].trace && g(fe, he[0].trace, Me) }) }; var f = e(90998); b.symbolNames = [], b.symbolFuncs = [], b.symbolBackOffs = [], b.symbolNeedLines = {}, b.symbolNoDot = {}, b.symbolNoFill = {}, b.symbolList = [], Object.keys(f).forEach(function (Ee) { var Me = f[Ee], he = Me.n; b.symbolList.push(he, String(he), Ee, he + 100, String(he + 100), Ee + "-open"), b.symbolNames[he] = Ee, b.symbolFuncs[he] = Me.f, b.symbolBackOffs[he] = Me.backoff || 0, Me.needLine && (b.symbolNeedLines[he] = !0), Me.noDot ? b.symbolNoDot[he] = !0 : b.symbolList.push(he + 200, String(he + 200), Ee + "-dot", he + 300, String(he + 300), Ee + "-open-dot"), Me.noFill && (b.symbolNoFill[he] = !0) }); var v = b.symbolNames.length; function m(Ee, Me, he, fe) { var ae = Ee % 100; return b.symbolFuncs[ae](Me, he, fe) + (Ee >= 200 ? "M0,0.5L0.5,0L0,-0.5L-0.5,0Z" : "") } b.symbolNumber = function (Ee) { if (_(Ee)) Ee = +Ee; else if (typeof Ee == "string") { var Me = 0; Ee.indexOf("-open") > 0 && (Me = 100, Ee = Ee.replace("-open", "")), Ee.indexOf("-dot") > 0 && (Me += 200, Ee = Ee.replace("-dot", "")), (Ee = b.symbolNames.indexOf(Ee)) >= 0 && (Ee += Me) } return Ee % 100 >= v || Ee >= 400 ? 0 : Math.floor(Math.max(Ee, 0)) }; var x = { x1: 1, x2: 0, y1: 0, y2: 0 }, T = { x1: 0, x2: 0, y1: 1, y2: 0 }, d = i("~f"), M = { radial: { node: "radialGradient" }, radialreversed: { node: "radialGradient", reversed: !0 }, horizontal: { node: "linearGradient", attrs: x }, horizontalreversed: { node: "linearGradient", attrs: x, reversed: !0 }, vertical: { node: "linearGradient", attrs: T }, verticalreversed: { node: "linearGradient", attrs: T, reversed: !0 } }; b.gradient = function (Ee, Me, he, fe, ae, be) { for (var Ie = ae.length, Te = M[fe], Ne = new Array(Ie), qe = 0; qe < Ie; qe++)Te.reversed ? Ne[Ie - 1 - qe] = [d(100 * (1 - ae[qe][0])), ae[qe][1]] : Ne[qe] = [d(100 * ae[qe][0]), ae[qe][1]]; var ve = Me._fullLayout, Ce = "g" + ve._uid + "-" + he, Ae = ve._defs.select(".gradients").selectAll("#" + Ce).data([fe + Ne.join(";")], k.identity); Ae.exit().remove(), Ae.enter().append(Te.node).each(function () { var ze = w.select(this); Te.attrs && ze.attr(Te.attrs), ze.attr("id", Ce); var Ue = ze.selectAll("stop").data(Ne); Ue.exit().remove(), Ue.enter().append("stop"), Ue.each(function (Ve) { var Ye = y(Ve[1]); w.select(this).attr({ offset: Ve[0] + "%", "stop-color": l.tinyRGB(Ye), "stop-opacity": Ye.getAlpha() }) }) }), Ee.style(be, te(Ce, Me)).style(be + "-opacity", null), Ee.classed("gradient_filled", !0) }, b.pattern = function (Ee, Me, he, fe, ae, be, Ie, Te, Ne, qe, ve, Ce) { var Ae = Me === "legend"; Te && (Ne === "overlay" ? (qe = Te, ve = l.contrast(qe)) : (qe = void 0, ve = Te)); var ze, Ue, Ve, Ye, $e, rt, ht, nt, bt, wt = he._fullLayout, ut = "p" + wt._uid + "-" + fe, lt = {}, Tt = y(ve), Et = l.tinyRGB(Tt), St = Ce * Tt.getAlpha(); switch (ae) { case "/": ze = be * Math.sqrt(2), Ue = be * Math.sqrt(2), rt = "path", lt = { d: Ve = "M-" + ze / 4 + "," + Ue / 4 + "l" + ze / 2 + ",-" + Ue / 2 + "M0," + Ue + "L" + ze + ",0M" + ze / 4 * 3 + "," + Ue / 4 * 5 + "l" + ze / 2 + ",-" + Ue / 2, opacity: St, stroke: Et, "stroke-width": (Ye = Ie * be) + "px" }; break; case "\\": ze = be * Math.sqrt(2), Ue = be * Math.sqrt(2), rt = "path", lt = { d: Ve = "M" + ze / 4 * 3 + ",-" + Ue / 4 + "l" + ze / 2 + "," + Ue / 2 + "M0,0L" + ze + "," + Ue + "M-" + ze / 4 + "," + Ue / 4 * 3 + "l" + ze / 2 + "," + Ue / 2, opacity: St, stroke: Et, "stroke-width": (Ye = Ie * be) + "px" }; break; case "x": ze = be * Math.sqrt(2), Ue = be * Math.sqrt(2), Ve = "M-" + ze / 4 + "," + Ue / 4 + "l" + ze / 2 + ",-" + Ue / 2 + "M0," + Ue + "L" + ze + ",0M" + ze / 4 * 3 + "," + Ue / 4 * 5 + "l" + ze / 2 + ",-" + Ue / 2 + "M" + ze / 4 * 3 + ",-" + Ue / 4 + "l" + ze / 2 + "," + Ue / 2 + "M0,0L" + ze + "," + Ue + "M-" + ze / 4 + "," + Ue / 4 * 3 + "l" + ze / 2 + "," + Ue / 2, Ye = be - be * Math.sqrt(1 - Ie), rt = "path", lt = { d: Ve, opacity: St, stroke: Et, "stroke-width": Ye + "px" }; break; case "|": rt = "path", rt = "path", lt = { d: Ve = "M" + (ze = be) / 2 + ",0L" + ze / 2 + "," + (Ue = be), opacity: St, stroke: Et, "stroke-width": (Ye = Ie * be) + "px" }; break; case "-": rt = "path", rt = "path", lt = { d: Ve = "M0," + (Ue = be) / 2 + "L" + (ze = be) + "," + Ue / 2, opacity: St, stroke: Et, "stroke-width": (Ye = Ie * be) + "px" }; break; case "+": rt = "path", Ve = "M" + (ze = be) / 2 + ",0L" + ze / 2 + "," + (Ue = be) + "M0," + Ue / 2 + "L" + ze + "," + Ue / 2, Ye = be - be * Math.sqrt(1 - Ie), rt = "path", lt = { d: Ve, opacity: St, stroke: Et, "stroke-width": Ye + "px" }; break; case ".": ze = be, Ue = be, Ie < Math.PI / 4 ? $e = Math.sqrt(Ie * be * be / Math.PI) : (ht = Ie, nt = Math.PI / 4, $e = (bt = be / 2) + (be / Math.sqrt(2) - bt) * (ht - nt) / (1 - nt)), rt = "circle", lt = { cx: ze / 2, cy: Ue / 2, r: $e, opacity: St, fill: Et } }var Ft = [ae || "noSh", qe || "noBg", ve || "noFg", be, Ie].join(";"), zt = wt._defs.select(".patterns").selectAll("#" + ut).data([Ft], k.identity); zt.exit().remove(), zt.enter().append("pattern").each(function () { var Je = w.select(this); if (Je.attr({ id: ut, width: ze + "px", height: Ue + "px", patternUnits: "userSpaceOnUse", patternTransform: Ae ? "scale(0.8)" : "" }), qe) { var et = y(qe), Ze = l.tinyRGB(et), Qe = et.getAlpha(), st = Je.selectAll("rect").data([0]); st.exit().remove(), st.enter().append("rect").attr({ width: ze + "px", height: Ue + "px", fill: Ze, "fill-opacity": Qe }) } var ft = Je.selectAll(rt).data([0]); ft.exit().remove(), ft.enter().append(rt).attr(lt) }), Ee.style("fill", te(ut, he)).style("fill-opacity", null), Ee.classed("pattern_filled", !0) }, b.initGradients = function (Ee) { var Me = Ee._fullLayout; k.ensureSingle(Me._defs, "g", "gradients").selectAll("linearGradient,radialGradient").remove(), w.select(Ee).selectAll(".gradient_filled").classed("gradient_filled", !1) }, b.initPatterns = function (Ee) { var Me = Ee._fullLayout; k.ensureSingle(Me._defs, "g", "patterns").selectAll("pattern").remove(), w.select(Ee).selectAll(".pattern_filled").classed("pattern_filled", !1) }, b.getPatternAttr = function (Ee, Me, he) { return Ee && k.isArrayOrTypedArray(Ee) ? Me < Ee.length ? Ee[Me] : he : Ee }, b.pointStyle = function (Ee, Me, he, fe) { if (Ee.size()) { var ae = b.makePointStyleFns(Me); Ee.each(function (be) { b.singlePointStyle(be, w.select(this), Me, ae, he, fe) }) } }, b.singlePointStyle = function (Ee, Me, he, fe, ae, be) { var Ie = he.marker, Te = Ie.line; if (be && be.i >= 0 && Ee.i === void 0 && (Ee.i = be.i), Me.style("opacity", fe.selectedOpacityFn ? fe.selectedOpacityFn(Ee) : Ee.mo === void 0 ? Ie.opacity : Ee.mo), fe.ms2mrc) { var Ne; Ne = Ee.ms === "various" || Ie.size === "various" ? 3 : fe.ms2mrc(Ee.ms), Ee.mrc = Ne, fe.selectedSizeFn && (Ne = Ee.mrc = fe.selectedSizeFn(Ee)); var qe = b.symbolNumber(Ee.mx || Ie.symbol) || 0; Ee.om = qe % 200 >= 100; var ve = De(Ee, he), Ce = ee(Ee, he); Me.attr("d", m(qe, Ne, ve, Ce)) } var Ae, ze, Ue, Ve = !1; if (Ee.so) Ue = Te.outlierwidth, ze = Te.outliercolor, Ae = Ie.outliercolor; else { var Ye = (Te || {}).width; Ue = (Ee.mlw + 1 || Ye + 1 || (Ee.trace ? (Ee.trace.marker.line || {}).width : 0) + 1) - 1 || 0, ze = "mlc" in Ee ? Ee.mlcc = fe.lineScale(Ee.mlc) : k.isArrayOrTypedArray(Te.color) ? l.defaultLine : Te.color, k.isArrayOrTypedArray(Ie.color) && (Ae = l.defaultLine, Ve = !0), Ae = "mc" in Ee ? Ee.mcc = fe.markerScale(Ee.mc) : Ie.color || Ie.colors || "rgba(0,0,0,0)", fe.selectedColorFn && (Ae = fe.selectedColorFn(Ee)) } if (Ee.om) Me.call(l.stroke, Ae).style({ "stroke-width": (Ue || 1) + "px", fill: "none" }); else { Me.style("stroke-width", (Ee.isBlank ? 0 : Ue) + "px"); var $e = Ie.gradient, rt = Ee.mgt; rt ? Ve = !0 : rt = $e && $e.type, k.isArrayOrTypedArray(rt) && (rt = rt[0], M[rt] || (rt = 0)); var ht = Ie.pattern, nt = ht && b.getPatternAttr(ht.shape, Ee.i, ""); if (rt && rt !== "none") { var bt = Ee.mgc; bt ? Ve = !0 : bt = $e.color; var wt = he.uid; Ve && (wt += "-" + Ee.i), b.gradient(Me, ae, wt, rt, [[0, bt], [1, Ae]], "fill") } else if (nt) { var ut = !1, lt = ht.fgcolor; !lt && be && be.color && (lt = be.color, ut = !0); var Tt = b.getPatternAttr(lt, Ee.i, be && be.color || null), Et = b.getPatternAttr(ht.bgcolor, Ee.i, null), St = ht.fgopacity, Ft = b.getPatternAttr(ht.size, Ee.i, 8), zt = b.getPatternAttr(ht.solidity, Ee.i, .3); ut = ut || Ee.mcc || k.isArrayOrTypedArray(ht.shape) || k.isArrayOrTypedArray(ht.bgcolor) || k.isArrayOrTypedArray(ht.fgcolor) || k.isArrayOrTypedArray(ht.size) || k.isArrayOrTypedArray(ht.solidity); var Je = he.uid; ut && (Je += "-" + Ee.i), b.pattern(Me, "point", ae, Je, nt, Ft, zt, Ee.mcc, ht.fillmode, Et, Tt, St) } else k.isArrayOrTypedArray(Ae) ? l.fill(Me, Ae[Ee.i]) : l.fill(Me, Ae); Ue && l.stroke(Me, ze) } }, b.makePointStyleFns = function (Ee) { var Me = {}, he = Ee.marker; return Me.markerScale = b.tryColorscale(he, ""), Me.lineScale = b.tryColorscale(he, "line"), h.traceIs(Ee, "symbols") && (Me.ms2mrc = u.isBubble(Ee) ? p(Ee) : function () { return (he.size || 6) / 2 }), Ee.selectedpoints && k.extendFlat(Me, b.makeSelectedPointStyleFns(Ee)), Me }, b.makeSelectedPointStyleFns = function (Ee) { var Me = {}, he = Ee.selected || {}, fe = Ee.unselected || {}, ae = Ee.marker || {}, be = he.marker || {}, Ie = fe.marker || {}, Te = ae.opacity, Ne = be.opacity, qe = Ie.opacity, ve = Ne !== void 0, Ce = qe !== void 0; (k.isArrayOrTypedArray(Te) || ve || Ce) && (Me.selectedOpacityFn = function (nt) { var bt = nt.mo === void 0 ? ae.opacity : nt.mo; return nt.selected ? ve ? Ne : bt : Ce ? qe : s * bt }); var Ae = ae.color, ze = be.color, Ue = Ie.color; (ze || Ue) && (Me.selectedColorFn = function (nt) { var bt = nt.mcc || Ae; return nt.selected ? ze || bt : Ue || bt }); var Ve = ae.size, Ye = be.size, $e = Ie.size, rt = Ye !== void 0, ht = $e !== void 0; return h.traceIs(Ee, "symbols") && (rt || ht) && (Me.selectedSizeFn = function (nt) { var bt = nt.mrc || Ve / 2; return nt.selected ? rt ? Ye / 2 : bt : ht ? $e / 2 : bt }), Me }, b.makeSelectedTextStyleFns = function (Ee) { var Me = {}, he = Ee.selected || {}, fe = Ee.unselected || {}, ae = Ee.textfont || {}, be = he.textfont || {}, Ie = fe.textfont || {}, Te = ae.color, Ne = be.color, qe = Ie.color; return Me.selectedTextColorFn = function (ve) { var Ce = ve.tc || Te; return ve.selected ? Ne || Ce : qe || (Ne ? Ce : l.addOpacity(Ce, s)) }, Me }, b.selectedPointStyle = function (Ee, Me) { if (Ee.size() && Me.selectedpoints) { var he = b.makeSelectedPointStyleFns(Me), fe = Me.marker || {}, ae = []; he.selectedOpacityFn && ae.push(function (be, Ie) { be.style("opacity", he.selectedOpacityFn(Ie)) }), he.selectedColorFn && ae.push(function (be, Ie) { l.fill(be, he.selectedColorFn(Ie)) }), he.selectedSizeFn && ae.push(function (be, Ie) { var Te = Ie.mx || fe.symbol || 0, Ne = he.selectedSizeFn(Ie); be.attr("d", m(b.symbolNumber(Te), Ne, De(Ie, Me), ee(Ie, Me))), Ie.mrc2 = Ne }), ae.length && Ee.each(function (be) { for (var Ie = w.select(this), Te = 0; Te < ae.length; Te++)ae[Te](Ie, be) }) } }, b.tryColorscale = function (Ee, Me) { var he = Me ? k.nestedProperty(Ee, Me).get() : Ee; if (he) { var fe = he.color; if ((he.colorscale || he._colorAx) && k.isArrayOrTypedArray(fe)) return t.makeColorScaleFuncFromTrace(he) } return k.identity }; var A, C, P = { start: 1, end: -1, middle: 0, bottom: 1, top: -1 }; function O(Ee, Me, he, fe, ae) { var be = w.select(Ee.node().parentNode), Ie = Me.indexOf("top") !== -1 ? "top" : Me.indexOf("bottom") !== -1 ? "bottom" : "middle", Te = Me.indexOf("left") !== -1 ? "end" : Me.indexOf("right") !== -1 ? "start" : "middle", Ne = fe ? fe / .8 + 1 : 0, qe = (r.lineCount(Ee) - 1) * a + 1, ve = P[Te] * Ne, Ce = .75 * he + P[Ie] * Ne + (P[Ie] - 1) * qe * he / 2; Ee.attr("text-anchor", Te), ae || be.attr("transform", o(ve, Ce)) } function z(Ee, Me) { var he = Ee.ts || Me.textfont.size; return _(he) && he > 0 ? he : 0 } function B(Ee, Me, he) { return he && (Ee = W(Ee)), Me ? D(Ee[1]) : Y(Ee[0]) } function Y(Ee) { var Me = w.round(Ee, 2); return A = Me, Me } function D(Ee) { var Me = w.round(Ee, 2); return C = Me, Me } function G(Ee, Me, he, fe) { var ae = Ee[0] - Me[0], be = Ee[1] - Me[1], Ie = he[0] - Me[0], Te = he[1] - Me[1], Ne = Math.pow(ae * ae + be * be, .25), qe = Math.pow(Ie * Ie + Te * Te, .25), ve = (qe * qe * ae - Ne * Ne * Ie) * fe, Ce = (qe * qe * be - Ne * Ne * Te) * fe, Ae = 3 * qe * (Ne + qe), ze = 3 * Ne * (Ne + qe); return [[Y(Me[0] + (Ae && ve / Ae)), D(Me[1] + (Ae && Ce / Ae))], [Y(Me[0] - (ze && ve / ze)), D(Me[1] - (ze && Ce / ze))]] } b.textPointStyle = function (Ee, Me, he) { if (Ee.size()) { var fe; if (Me.selectedpoints) { var ae = b.makeSelectedTextStyleFns(Me); fe = ae.selectedTextColorFn } var be = Me.texttemplate, Ie = he._fullLayout; Ee.each(function (Te) { var Ne = w.select(this), qe = be ? k.extractOption(Te, Me, "txt", "texttemplate") : k.extractOption(Te, Me, "tx", "text"); if (qe || qe === 0) { if (be) { var ve = Me._module.formatLabels, Ce = ve ? ve(Te, Me, Ie) : {}, Ae = {}; c(Ae, Me, Te.i); var ze = Me._meta || {}; qe = k.texttemplateString(qe, Ce, Ie._d3locale, Ae, Te, ze) } var Ue = Te.tp || Me.textposition, Ve = z(Te, Me), Ye = fe ? fe(Te) : Te.tc || Me.textfont.color; Ne.call(b.font, Te.tf || Me.textfont.family, Ve, Ye).text(qe).call(r.convertToTspans, he).call(O, Ue, Ve, Te.mrc) } else Ne.remove() }) } }, b.selectedTextStyle = function (Ee, Me) { if (Ee.size() && Me.selectedpoints) { var he = b.makeSelectedTextStyleFns(Me); Ee.each(function (fe) { var ae = w.select(this), be = he.selectedTextColorFn(fe), Ie = fe.tp || Me.textposition, Te = z(fe, Me); l.fill(ae, be); var Ne = h.traceIs(Me, "bar-like"); O(ae, Ie, Te, fe.mrc2 || fe.mrc, Ne) }) } }, b.smoothopen = function (Ee, Me) { if (Ee.length < 3) return "M" + Ee.join("L"); var he, fe = "M" + Ee[0], ae = []; for (he = 1; he < Ee.length - 1; he++)ae.push(G(Ee[he - 1], Ee[he], Ee[he + 1], Me)); for (fe += "Q" + ae[0][0] + " " + Ee[1], he = 2; he < Ee.length - 1; he++)fe += "C" + ae[he - 2][1] + " " + ae[he - 1][0] + " " + Ee[he]; return fe + "Q" + ae[Ee.length - 3][1] + " " + Ee[Ee.length - 1] }, b.smoothclosed = function (Ee, Me) { if (Ee.length < 3) return "M" + Ee.join("L") + "Z"; var he, fe = "M" + Ee[0], ae = Ee.length - 1, be = [G(Ee[ae], Ee[0], Ee[1], Me)]; for (he = 1; he < ae; he++)be.push(G(Ee[he - 1], Ee[he], Ee[he + 1], Me)); for (be.push(G(Ee[ae - 1], Ee[ae], Ee[0], Me)), he = 1; he <= ae; he++)fe += "C" + be[he - 1][1] + " " + be[he][0] + " " + Ee[he]; return fe + "C" + be[ae][1] + " " + be[0][0] + " " + Ee[0] + "Z" }; var V = { hv: function (Ee, Me, he) { return "H" + Y(Me[0]) + "V" + B(Me, 1, he) }, vh: function (Ee, Me, he) { return "V" + D(Me[1]) + "H" + B(Me, 0, he) }, hvh: function (Ee, Me, he) { return "H" + Y((Ee[0] + Me[0]) / 2) + "V" + D(Me[1]) + "H" + B(Me, 0, he) }, vhv: function (Ee, Me, he) { return "V" + D((Ee[1] + Me[1]) / 2) + "H" + Y(Me[0]) + "V" + B(Me, 1, he) } }, j = function (Ee, Me, he) { return "L" + B(Me, 0, he) + "," + B(Me, 1, he) }; function W(Ee, Me) { var he = Ee.backoff, fe = Ee.trace, ae = Ee.d, be = Ee.i; if (he && fe && fe.marker && fe.marker.angle % 360 == 0 && fe.line && fe.line.shape !== "spline") { var Ie = k.isArrayOrTypedArray(he), Te = Ee, Ne = Me ? Me[0] : A || 0, qe = Me ? Me[1] : C || 0, ve = Te[0], Ce = Te[1], Ae = ve - Ne, ze = Ce - qe, Ue = Math.atan2(ze, Ae), Ve = Ie ? he[be] : he; if (Ve === "auto") { var Ye = Te.i; fe.type === "scatter" && Ye--; var $e = Te.marker, rt = $e.symbol; k.isArrayOrTypedArray(rt) && (rt = rt[Ye]); var ht = $e.size; k.isArrayOrTypedArray(ht) && (ht = ht[Ye]), Ve = $e ? b.symbolBackOffs[b.symbolNumber(rt)] * ht : 0, Ve += b.getMarkerStandoff(ae[Ye], fe) || 0 } var nt = ve - Ve * Math.cos(Ue), bt = Ce - Ve * Math.sin(Ue); (nt <= ve && nt >= Ne || nt >= ve && nt <= Ne) && (bt <= Ce && bt >= qe || bt >= Ce && bt <= qe) && (Ee = [nt, bt]) } return Ee } b.steps = function (Ee) { var Me = V[Ee] || j; return function (he) { for (var fe = "M" + Y(he[0][0]) + "," + D(he[0][1]), ae = he.length, be = 1; be < ae; be++)fe += Me(he[be - 1], he[be], be === ae - 1); return fe } }, b.applyBackoff = W, b.makeTester = function () { var Ee = k.ensureSingleById(w.select("body"), "svg", "js-plotly-tester", function (he) { he.attr(n.svgAttrs).style({ position: "absolute", left: "-10000px", top: "-10000px", width: "9000px", height: "9000px", "z-index": "1" }) }), Me = k.ensureSingle(Ee, "path", "js-reference-point", function (he) { he.attr("d", "M0,0H1V1H0Z").style({ "stroke-width": 0, fill: "black" }) }); b.tester = Ee, b.testref = Me }, b.savedBBoxes = {}; var Z = 0; function ie(Ee) { var Me = Ee.getAttribute("data-unformatted"); if (Me !== null) return Me + Ee.getAttribute("data-math") + Ee.getAttribute("text-anchor") + Ee.getAttribute("style") } function te(Ee, Me) { if (!Ee) return null; var he = Me._context, fe = he._exportedPlot ? "" : he._baseUrl || ""; return fe ? "url('" + fe + "#" + Ee + "')" : "url(#" + Ee + ")" } b.bBox = function (Ee, Me, he) { var fe, ae, be; if (he || (he = ie(Ee)), he) { if (fe = b.savedBBoxes[he]) return k.extendFlat({}, fe) } else if (Ee.childNodes.length === 1) { var Ie = Ee.childNodes[0]; if (he = ie(Ie)) { var Te = +Ie.getAttribute("x") || 0, Ne = +Ie.getAttribute("y") || 0, qe = Ie.getAttribute("transform"); if (!qe) { var ve = b.bBox(Ie, !1, he); return Te && (ve.left += Te, ve.right += Te), Ne && (ve.top += Ne, ve.bottom += Ne), ve } if (he += "~" + Te + "~" + Ne + "~" + qe, fe = b.savedBBoxes[he]) return k.extendFlat({}, fe) } } Me ? ae = Ee : (be = b.tester.node(), ae = Ee.cloneNode(!0), be.appendChild(ae)), w.select(ae).attr("transform", null).call(r.positionText, 0, 0); var Ce = ae.getBoundingClientRect(), Ae = b.testref.node().getBoundingClientRect(); Me || be.removeChild(ae); var ze = { height: Ce.height, width: Ce.width, left: Ce.left - Ae.left, top: Ce.top - Ae.top, right: Ce.right - Ae.left, bottom: Ce.bottom - Ae.top }; return Z >= 1e4 && (b.savedBBoxes = {}, Z = 0), he && (b.savedBBoxes[he] = ze), Z++, k.extendFlat({}, ze) }, b.setClipUrl = function (Ee, Me, he) { Ee.attr("clip-path", te(Me, he)) }, b.getTranslate = function (Ee) { var Me = (Ee[Ee.attr ? "attr" : "getAttribute"]("transform") || "").replace(/.*\btranslate\((-?\d*\.?\d*)[^-\d]*(-?\d*\.?\d*)[^\d].*/, function (he, fe, ae) { return [fe, ae].join(" ") }).split(" "); return { x: +Me[0] || 0, y: +Me[1] || 0 } }, b.setTranslate = function (Ee, Me, he) { var fe = Ee.attr ? "attr" : "getAttribute", ae = Ee.attr ? "attr" : "setAttribute", be = Ee[fe]("transform") || ""; return Me = Me || 0, he = he || 0, be = be.replace(/(\btranslate\(.*?\);?)/, "").trim(), be = (be += o(Me, he)).trim(), Ee[ae]("transform", be), be }, b.getScale = function (Ee) { var Me = (Ee[Ee.attr ? "attr" : "getAttribute"]("transform") || "").replace(/.*\bscale\((\d*\.?\d*)[^\d]*(\d*\.?\d*)[^\d].*/, function (he, fe, ae) { return [fe, ae].join(" ") }).split(" "); return { x: +Me[0] || 1, y: +Me[1] || 1 } }, b.setScale = function (Ee, Me, he) { var fe = Ee.attr ? "attr" : "getAttribute", ae = Ee.attr ? "attr" : "setAttribute", be = Ee[fe]("transform") || ""; return Me = Me || 1, he = he || 1, be = be.replace(/(\bscale\(.*?\);?)/, "").trim(), be = (be += "scale(" + Me + "," + he + ")").trim(), Ee[ae]("transform", be), be }; var J = /\s*sc.*/; b.setPointGroupScale = function (Ee, Me, he) { if (Me = Me || 1, he = he || 1, Ee) { var fe = Me === 1 && he === 1 ? "" : "scale(" + Me + "," + he + ")"; Ee.each(function () { var ae = (this.getAttribute("transform") || "").replace(J, ""); ae = (ae += fe).trim(), this.setAttribute("transform", ae) }) } }; var X = /translate\([^)]*\)\s*$/; function ee(Ee, Me) { var he; return Ee && (he = Ee.mf), he === void 0 && (he = Me.marker && Me.marker.standoff || 0), Me._geo || Me._xA ? he : -he } b.setTextPointsScale = function (Ee, Me, he) { Ee && Ee.each(function () { var fe, ae = w.select(this), be = ae.select("text"); if (be.node()) { var Ie = parseFloat(be.attr("x") || 0), Te = parseFloat(be.attr("y") || 0), Ne = (ae.attr("transform") || "").match(X); fe = Me === 1 && he === 1 ? [] : [o(Ie, Te), "scale(" + Me + "," + he + ")", o(-Ie, -Te)], Ne && fe.push(Ne), ae.attr("transform", fe.join("")) } }) }, b.getMarkerStandoff = ee; var re, oe, ue, ce, de, me, _e = Math.atan2, Se = Math.cos, we = Math.sin; function xe(Ee, Me) { var he = Me[0], fe = Me[1]; return [he * Se(Ee) - fe * we(Ee), he * we(Ee) + fe * Se(Ee)] } function De(Ee, Me) { var he, fe, ae = Ee.ma; ae === void 0 && (ae = Me.marker.angle || 0); var be = Me.marker.angleref; if (be === "previous" || be === "north") { if (Me._geo) { var Ie = Me._geo.project(Ee.lonlat); he = Ie[0], fe = Ie[1] } else { var Te = Me._xA, Ne = Me._yA; if (!Te || !Ne) return 90; he = Te.c2p(Ee.x), fe = Ne.c2p(Ee.y) } if (Me._geo) { var qe, ve = Ee.lonlat[0], Ce = Ee.lonlat[1], Ae = Me._geo.project([ve, Ce + 1e-5]), ze = Me._geo.project([ve + 1e-5, Ce]), Ue = _e(ze[1] - fe, ze[0] - he), Ve = _e(Ae[1] - fe, Ae[0] - he); if (be === "north") qe = ae / 180 * Math.PI; else if (be === "previous") { var Ye = ve / 180 * Math.PI, $e = Ce / 180 * Math.PI, rt = re / 180 * Math.PI, ht = oe / 180 * Math.PI, nt = rt - Ye, bt = Se(ht) * we(nt), wt = we(ht) * Se($e) - Se(ht) * we($e) * Se(nt); qe = -_e(bt, wt) - Math.PI, re = ve, oe = Ce } var ut = xe(Ue, [Se(qe), 0]), lt = xe(Ve, [we(qe), 0]); ae = _e(ut[1] + lt[1], ut[0] + lt[0]) / Math.PI * 180, be !== "previous" || me === Me.uid && Ee.i === de + 1 || (ae = null) } if (be === "previous" && !Me._geo) if (me === Me.uid && Ee.i === de + 1 && _(he) && _(fe)) { var Tt = he - ue, Et = fe - ce, St = Me.line && Me.line.shape || "", Ft = St.slice(St.length - 1); Ft === "h" && (Et = 0), Ft === "v" && (Tt = 0), ae += _e(Et, Tt) / Math.PI * 180 + 90 } else ae = null } return ue = he, ce = fe, de = Ee.i, me = Me.uid, ae } b.getMarkerAngle = De }, 90998: function (R, E, e) { var w, k, i, _, y = e(95616), h = e(39898).round, l = "M0,0Z", t = Math.sqrt(2), o = Math.sqrt(3), r = Math.PI, n = Math.cos, a = Math.sin; function s(p) { return p === null } function u(p, c, b) { if (!(p && p % 360 != 0 || c)) return b; if (i === p && _ === c && w === b) return k; function g(B, Y) { var D = n(B), G = a(B), V = Y[0], j = Y[1] + (c || 0); return [V * D - j * G, V * G + j * D] } i = p, _ = c, w = b; for (var f = p / 180 * r, v = 0, m = 0, x = y(b), T = "", d = 0; d < x.length; d++) { var M = x[d], A = M[0], C = v, P = m; if (A === "M" || A === "L") v = +M[1], m = +M[2]; else if (A === "m" || A === "l") v += +M[1], m += +M[2]; else if (A === "H") v = +M[1]; else if (A === "h") v += +M[1]; else if (A === "V") m = +M[1]; else if (A === "v") m += +M[1]; else if (A === "A") { v = +M[1], m = +M[2]; var O = g(f, [+M[6], +M[7]]); M[6] = O[0], M[7] = O[1], M[3] = +M[3] + p } A !== "H" && A !== "V" || (A = "L"), A !== "h" && A !== "v" || (A = "l"), A !== "m" && A !== "l" || (v -= C, m -= P); var z = g(f, [v, m]); A !== "H" && A !== "V" || (A = "L"), A !== "M" && A !== "L" && A !== "m" && A !== "l" || (M[1] = z[0], M[2] = z[1]), M[0] = A, T += M[0] + M.slice(1).join(",") } return k = T, T } R.exports = { circle: { n: 0, f: function (p, c, b) { if (s(c)) return l; var g = h(p, 2), f = "M" + g + ",0A" + g + "," + g + " 0 1,1 0,-" + g + "A" + g + "," + g + " 0 0,1 " + g + ",0Z"; return b ? u(c, b, f) : f } }, square: { n: 1, f: function (p, c, b) { if (s(c)) return l; var g = h(p, 2); return u(c, b, "M" + g + "," + g + "H-" + g + "V-" + g + "H" + g + "Z") } }, diamond: { n: 2, f: function (p, c, b) { if (s(c)) return l; var g = h(1.3 * p, 2); return u(c, b, "M" + g + ",0L0," + g + "L-" + g + ",0L0,-" + g + "Z") } }, cross: { n: 3, f: function (p, c, b) { if (s(c)) return l; var g = h(.4 * p, 2), f = h(1.2 * p, 2); return u(c, b, "M" + f + "," + g + "H" + g + "V" + f + "H-" + g + "V" + g + "H-" + f + "V-" + g + "H-" + g + "V-" + f + "H" + g + "V-" + g + "H" + f + "Z") } }, x: { n: 4, f: function (p, c, b) { if (s(c)) return l; var g = h(.8 * p / t, 2), f = "l" + g + "," + g, v = "l" + g + ",-" + g, m = "l-" + g + ",-" + g, x = "l-" + g + "," + g; return u(c, b, "M0," + g + f + v + m + v + m + x + m + x + f + x + f + "Z") } }, "triangle-up": { n: 5, f: function (p, c, b) { if (s(c)) return l; var g = h(2 * p / o, 2); return u(c, b, "M-" + g + "," + h(p / 2, 2) + "H" + g + "L0,-" + h(p, 2) + "Z") } }, "triangle-down": { n: 6, f: function (p, c, b) { if (s(c)) return l; var g = h(2 * p / o, 2); return u(c, b, "M-" + g + ",-" + h(p / 2, 2) + "H" + g + "L0," + h(p, 2) + "Z") } }, "triangle-left": { n: 7, f: function (p, c, b) { if (s(c)) return l; var g = h(2 * p / o, 2); return u(c, b, "M" + h(p / 2, 2) + ",-" + g + "V" + g + "L-" + h(p, 2) + ",0Z") } }, "triangle-right": { n: 8, f: function (p, c, b) { if (s(c)) return l; var g = h(2 * p / o, 2); return u(c, b, "M-" + h(p / 2, 2) + ",-" + g + "V" + g + "L" + h(p, 2) + ",0Z") } }, "triangle-ne": { n: 9, f: function (p, c, b) { if (s(c)) return l; var g = h(.6 * p, 2), f = h(1.2 * p, 2); return u(c, b, "M-" + f + ",-" + g + "H" + g + "V" + f + "Z") } }, "triangle-se": { n: 10, f: function (p, c, b) { if (s(c)) return l; var g = h(.6 * p, 2), f = h(1.2 * p, 2); return u(c, b, "M" + g + ",-" + f + "V" + g + "H-" + f + "Z") } }, "triangle-sw": { n: 11, f: function (p, c, b) { if (s(c)) return l; var g = h(.6 * p, 2), f = h(1.2 * p, 2); return u(c, b, "M" + f + "," + g + "H-" + g + "V-" + f + "Z") } }, "triangle-nw": { n: 12, f: function (p, c, b) { if (s(c)) return l; var g = h(.6 * p, 2), f = h(1.2 * p, 2); return u(c, b, "M-" + g + "," + f + "V-" + g + "H" + f + "Z") } }, pentagon: { n: 13, f: function (p, c, b) { if (s(c)) return l; var g = h(.951 * p, 2), f = h(.588 * p, 2), v = h(-p, 2), m = h(-.309 * p, 2); return u(c, b, "M" + g + "," + m + "L" + f + "," + h(.809 * p, 2) + "H-" + f + "L-" + g + "," + m + "L0," + v + "Z") } }, hexagon: { n: 14, f: function (p, c, b) { if (s(c)) return l; var g = h(p, 2), f = h(p / 2, 2), v = h(p * o / 2, 2); return u(c, b, "M" + v + ",-" + f + "V" + f + "L0," + g + "L-" + v + "," + f + "V-" + f + "L0,-" + g + "Z") } }, hexagon2: { n: 15, f: function (p, c, b) { if (s(c)) return l; var g = h(p, 2), f = h(p / 2, 2), v = h(p * o / 2, 2); return u(c, b, "M-" + f + "," + v + "H" + f + "L" + g + ",0L" + f + ",-" + v + "H-" + f + "L-" + g + ",0Z") } }, octagon: { n: 16, f: function (p, c, b) { if (s(c)) return l; var g = h(.924 * p, 2), f = h(.383 * p, 2); return u(c, b, "M-" + f + ",-" + g + "H" + f + "L" + g + ",-" + f + "V" + f + "L" + f + "," + g + "H-" + f + "L-" + g + "," + f + "V-" + f + "Z") } }, star: { n: 17, f: function (p, c, b) { if (s(c)) return l; var g = 1.4 * p, f = h(.225 * g, 2), v = h(.951 * g, 2), m = h(.363 * g, 2), x = h(.588 * g, 2), T = h(-g, 2), d = h(-.309 * g, 2), M = h(.118 * g, 2), A = h(.809 * g, 2); return u(c, b, "M" + f + "," + d + "H" + v + "L" + m + "," + M + "L" + x + "," + A + "L0," + h(.382 * g, 2) + "L-" + x + "," + A + "L-" + m + "," + M + "L-" + v + "," + d + "H-" + f + "L0," + T + "Z") } }, hexagram: { n: 18, f: function (p, c, b) { if (s(c)) return l; var g = h(.66 * p, 2), f = h(.38 * p, 2), v = h(.76 * p, 2); return u(c, b, "M-" + v + ",0l-" + f + ",-" + g + "h" + v + "l" + f + ",-" + g + "l" + f + "," + g + "h" + v + "l-" + f + "," + g + "l" + f + "," + g + "h-" + v + "l-" + f + "," + g + "l-" + f + ",-" + g + "h-" + v + "Z") } }, "star-triangle-up": { n: 19, f: function (p, c, b) { if (s(c)) return l; var g = h(p * o * .8, 2), f = h(.8 * p, 2), v = h(1.6 * p, 2), m = h(4 * p, 2), x = "A " + m + "," + m + " 0 0 1 "; return u(c, b, "M-" + g + "," + f + x + g + "," + f + x + "0,-" + v + x + "-" + g + "," + f + "Z") } }, "star-triangle-down": { n: 20, f: function (p, c, b) { if (s(c)) return l; var g = h(p * o * .8, 2), f = h(.8 * p, 2), v = h(1.6 * p, 2), m = h(4 * p, 2), x = "A " + m + "," + m + " 0 0 1 "; return u(c, b, "M" + g + ",-" + f + x + "-" + g + ",-" + f + x + "0," + v + x + g + ",-" + f + "Z") } }, "star-square": { n: 21, f: function (p, c, b) { if (s(c)) return l; var g = h(1.1 * p, 2), f = h(2 * p, 2), v = "A " + f + "," + f + " 0 0 1 "; return u(c, b, "M-" + g + ",-" + g + v + "-" + g + "," + g + v + g + "," + g + v + g + ",-" + g + v + "-" + g + ",-" + g + "Z") } }, "star-diamond": { n: 22, f: function (p, c, b) { if (s(c)) return l; var g = h(1.4 * p, 2), f = h(1.9 * p, 2), v = "A " + f + "," + f + " 0 0 1 "; return u(c, b, "M-" + g + ",0" + v + "0," + g + v + g + ",0" + v + "0,-" + g + v + "-" + g + ",0Z") } }, "diamond-tall": { n: 23, f: function (p, c, b) { if (s(c)) return l; var g = h(.7 * p, 2), f = h(1.4 * p, 2); return u(c, b, "M0," + f + "L" + g + ",0L0,-" + f + "L-" + g + ",0Z") } }, "diamond-wide": { n: 24, f: function (p, c, b) { if (s(c)) return l; var g = h(1.4 * p, 2), f = h(.7 * p, 2); return u(c, b, "M0," + f + "L" + g + ",0L0,-" + f + "L-" + g + ",0Z") } }, hourglass: { n: 25, f: function (p, c, b) { if (s(c)) return l; var g = h(p, 2); return u(c, b, "M" + g + "," + g + "H-" + g + "L" + g + ",-" + g + "H-" + g + "Z") }, noDot: !0 }, bowtie: { n: 26, f: function (p, c, b) { if (s(c)) return l; var g = h(p, 2); return u(c, b, "M" + g + "," + g + "V-" + g + "L-" + g + "," + g + "V-" + g + "Z") }, noDot: !0 }, "circle-cross": { n: 27, f: function (p, c, b) { if (s(c)) return l; var g = h(p, 2); return u(c, b, "M0," + g + "V-" + g + "M" + g + ",0H-" + g + "M" + g + ",0A" + g + "," + g + " 0 1,1 0,-" + g + "A" + g + "," + g + " 0 0,1 " + g + ",0Z") }, needLine: !0, noDot: !0 }, "circle-x": { n: 28, f: function (p, c, b) { if (s(c)) return l; var g = h(p, 2), f = h(p / t, 2); return u(c, b, "M" + f + "," + f + "L-" + f + ",-" + f + "M" + f + ",-" + f + "L-" + f + "," + f + "M" + g + ",0A" + g + "," + g + " 0 1,1 0,-" + g + "A" + g + "," + g + " 0 0,1 " + g + ",0Z") }, needLine: !0, noDot: !0 }, "square-cross": { n: 29, f: function (p, c, b) { if (s(c)) return l; var g = h(p, 2); return u(c, b, "M0," + g + "V-" + g + "M" + g + ",0H-" + g + "M" + g + "," + g + "H-" + g + "V-" + g + "H" + g + "Z") }, needLine: !0, noDot: !0 }, "square-x": { n: 30, f: function (p, c, b) { if (s(c)) return l; var g = h(p, 2); return u(c, b, "M" + g + "," + g + "L-" + g + ",-" + g + "M" + g + ",-" + g + "L-" + g + "," + g + "M" + g + "," + g + "H-" + g + "V-" + g + "H" + g + "Z") }, needLine: !0, noDot: !0 }, "diamond-cross": { n: 31, f: function (p, c, b) { if (s(c)) return l; var g = h(1.3 * p, 2); return u(c, b, "M" + g + ",0L0," + g + "L-" + g + ",0L0,-" + g + "ZM0,-" + g + "V" + g + "M-" + g + ",0H" + g) }, needLine: !0, noDot: !0 }, "diamond-x": { n: 32, f: function (p, c, b) { if (s(c)) return l; var g = h(1.3 * p, 2), f = h(.65 * p, 2); return u(c, b, "M" + g + ",0L0," + g + "L-" + g + ",0L0,-" + g + "ZM-" + f + ",-" + f + "L" + f + "," + f + "M-" + f + "," + f + "L" + f + ",-" + f) }, needLine: !0, noDot: !0 }, "cross-thin": { n: 33, f: function (p, c, b) { if (s(c)) return l; var g = h(1.4 * p, 2); return u(c, b, "M0," + g + "V-" + g + "M" + g + ",0H-" + g) }, needLine: !0, noDot: !0, noFill: !0 }, "x-thin": { n: 34, f: function (p, c, b) { if (s(c)) return l; var g = h(p, 2); return u(c, b, "M" + g + "," + g + "L-" + g + ",-" + g + "M" + g + ",-" + g + "L-" + g + "," + g) }, needLine: !0, noDot: !0, noFill: !0 }, asterisk: { n: 35, f: function (p, c, b) { if (s(c)) return l; var g = h(1.2 * p, 2), f = h(.85 * p, 2); return u(c, b, "M0," + g + "V-" + g + "M" + g + ",0H-" + g + "M" + f + "," + f + "L-" + f + ",-" + f + "M" + f + ",-" + f + "L-" + f + "," + f) }, needLine: !0, noDot: !0, noFill: !0 }, hash: { n: 36, f: function (p, c, b) { if (s(c)) return l; var g = h(p / 2, 2), f = h(p, 2); return u(c, b, "M" + g + "," + f + "V-" + f + "M" + (g - f) + ",-" + f + "V" + f + "M" + f + "," + g + "H-" + f + "M-" + f + "," + (g - f) + "H" + f) }, needLine: !0, noFill: !0 }, "y-up": { n: 37, f: function (p, c, b) { if (s(c)) return l; var g = h(1.2 * p, 2), f = h(1.6 * p, 2), v = h(.8 * p, 2); return u(c, b, "M-" + g + "," + v + "L0,0M" + g + "," + v + "L0,0M0,-" + f + "L0,0") }, needLine: !0, noDot: !0, noFill: !0 }, "y-down": { n: 38, f: function (p, c, b) { if (s(c)) return l; var g = h(1.2 * p, 2), f = h(1.6 * p, 2), v = h(.8 * p, 2); return u(c, b, "M-" + g + ",-" + v + "L0,0M" + g + ",-" + v + "L0,0M0," + f + "L0,0") }, needLine: !0, noDot: !0, noFill: !0 }, "y-left": { n: 39, f: function (p, c, b) { if (s(c)) return l; var g = h(1.2 * p, 2), f = h(1.6 * p, 2), v = h(.8 * p, 2); return u(c, b, "M" + v + "," + g + "L0,0M" + v + ",-" + g + "L0,0M-" + f + ",0L0,0") }, needLine: !0, noDot: !0, noFill: !0 }, "y-right": { n: 40, f: function (p, c, b) { if (s(c)) return l; var g = h(1.2 * p, 2), f = h(1.6 * p, 2), v = h(.8 * p, 2); return u(c, b, "M-" + v + "," + g + "L0,0M-" + v + ",-" + g + "L0,0M" + f + ",0L0,0") }, needLine: !0, noDot: !0, noFill: !0 }, "line-ew": { n: 41, f: function (p, c, b) { if (s(c)) return l; var g = h(1.4 * p, 2); return u(c, b, "M" + g + ",0H-" + g) }, needLine: !0, noDot: !0, noFill: !0 }, "line-ns": { n: 42, f: function (p, c, b) { if (s(c)) return l; var g = h(1.4 * p, 2); return u(c, b, "M0," + g + "V-" + g) }, needLine: !0, noDot: !0, noFill: !0 }, "line-ne": { n: 43, f: function (p, c, b) { if (s(c)) return l; var g = h(p, 2); return u(c, b, "M" + g + ",-" + g + "L-" + g + "," + g) }, needLine: !0, noDot: !0, noFill: !0 }, "line-nw": { n: 44, f: function (p, c, b) { if (s(c)) return l; var g = h(p, 2); return u(c, b, "M" + g + "," + g + "L-" + g + ",-" + g) }, needLine: !0, noDot: !0, noFill: !0 }, "arrow-up": { n: 45, f: function (p, c, b) { if (s(c)) return l; var g = h(p, 2); return u(c, b, "M0,0L-" + g + "," + h(2 * p, 2) + "H" + g + "Z") }, backoff: 1, noDot: !0 }, "arrow-down": { n: 46, f: function (p, c, b) { if (s(c)) return l; var g = h(p, 2); return u(c, b, "M0,0L-" + g + ",-" + h(2 * p, 2) + "H" + g + "Z") }, noDot: !0 }, "arrow-left": { n: 47, f: function (p, c, b) { if (s(c)) return l; var g = h(2 * p, 2), f = h(p, 2); return u(c, b, "M0,0L" + g + ",-" + f + "V" + f + "Z") }, noDot: !0 }, "arrow-right": { n: 48, f: function (p, c, b) { if (s(c)) return l; var g = h(2 * p, 2), f = h(p, 2); return u(c, b, "M0,0L-" + g + ",-" + f + "V" + f + "Z") }, noDot: !0 }, "arrow-bar-up": { n: 49, f: function (p, c, b) { if (s(c)) return l; var g = h(p, 2); return u(c, b, "M-" + g + ",0H" + g + "M0,0L-" + g + "," + h(2 * p, 2) + "H" + g + "Z") }, backoff: 1, needLine: !0, noDot: !0 }, "arrow-bar-down": { n: 50, f: function (p, c, b) { if (s(c)) return l; var g = h(p, 2); return u(c, b, "M-" + g + ",0H" + g + "M0,0L-" + g + ",-" + h(2 * p, 2) + "H" + g + "Z") }, needLine: !0, noDot: !0 }, "arrow-bar-left": { n: 51, f: function (p, c, b) { if (s(c)) return l; var g = h(2 * p, 2), f = h(p, 2); return u(c, b, "M0,-" + f + "V" + f + "M0,0L" + g + ",-" + f + "V" + f + "Z") }, needLine: !0, noDot: !0 }, "arrow-bar-right": { n: 52, f: function (p, c, b) { if (s(c)) return l; var g = h(2 * p, 2), f = h(p, 2); return u(c, b, "M0,-" + f + "V" + f + "M0,0L-" + g + ",-" + f + "V" + f + "Z") }, needLine: !0, noDot: !0 }, arrow: { n: 53, f: function (p, c, b) { if (s(c)) return l; var g = r / 2.5, f = 2 * p * n(g), v = 2 * p * a(g); return u(c, b, "M0,0L" + -f + "," + v + "L" + f + "," + v + "Z") }, backoff: .9, noDot: !0 }, "arrow-wide": { n: 54, f: function (p, c, b) { if (s(c)) return l; var g = r / 4, f = 2 * p * n(g), v = 2 * p * a(g); return u(c, b, "M0,0L" + -f + "," + v + "A " + 2 * p + "," + 2 * p + " 0 0 1 " + f + "," + v + "Z") }, backoff: .4, noDot: !0 } } }, 25673: function (R) { R.exports = { visible: { valType: "boolean", editType: "calc" }, type: { valType: "enumerated", values: ["percent", "constant", "sqrt", "data"], editType: "calc" }, symmetric: { valType: "boolean", editType: "calc" }, array: { valType: "data_array", editType: "calc" }, arrayminus: { valType: "data_array", editType: "calc" }, value: { valType: "number", min: 0, dflt: 10, editType: "calc" }, valueminus: { valType: "number", min: 0, dflt: 10, editType: "calc" }, traceref: { valType: "integer", min: 0, dflt: 0, editType: "style" }, tracerefminus: { valType: "integer", min: 0, dflt: 0, editType: "style" }, copy_ystyle: { valType: "boolean", editType: "plot" }, copy_zstyle: { valType: "boolean", editType: "style" }, color: { valType: "color", editType: "style" }, thickness: { valType: "number", min: 0, dflt: 2, editType: "style" }, width: { valType: "number", min: 0, editType: "plot" }, editType: "calc", _deprecated: { opacity: { valType: "number", editType: "style" } } } }, 84532: function (R, E, e) { var w = e(92770), k = e(73972), i = e(89298), _ = e(71828), y = e(45827); function h(l, t, o, r) { var n = t["error_" + r] || {}, a = []; if (n.visible && ["linear", "log"].indexOf(o.type) !== -1) { for (var s = y(n), u = 0; u < l.length; u++) { var p = l[u], c = p.i; if (c === void 0) c = u; else if (c === null) continue; var b = p[r]; if (w(o.c2l(b))) { var g = s(b, c); if (w(g[0]) && w(g[1])) { var f = p[r + "s"] = b - g[0], v = p[r + "h"] = b + g[1]; a.push(f, v) } } } var m = o._id, x = t._extremes[m], T = i.findExtremes(o, a, _.extendFlat({ tozero: x.opts.tozero }, { padded: !0 })); x.min = x.min.concat(T.min), x.max = x.max.concat(T.max) } } R.exports = function (l) { for (var t = l.calcdata, o = 0; o < t.length; o++) { var r = t[o], n = r[0].trace; if (n.visible === !0 && k.traceIs(n, "errorBarsOK")) { var a = i.getFromId(l, n.xaxis), s = i.getFromId(l, n.yaxis); h(r, n, a, "x"), h(r, n, s, "y") } } } }, 45827: function (R) { function E(e, w) { return e === "percent" ? function (k) { return Math.abs(k * w / 100) } : e === "constant" ? function () { return Math.abs(w) } : e === "sqrt" ? function (k) { return Math.sqrt(Math.abs(k)) } : void 0 } R.exports = function (e) { var w = e.type, k = e.symmetric; if (w === "data") { var i = e.array || []; if (k) return function (l, t) { var o = +i[t]; return [o, o] }; var _ = e.arrayminus || []; return function (l, t) { var o = +i[t], r = +_[t]; return isNaN(o) && isNaN(r) ? [NaN, NaN] : [r || 0, o || 0] } } var y = E(w, e.value), h = E(w, e.valueminus); return k || e.valueminus === void 0 ? function (l) { var t = y(l); return [t, t] } : function (l) { return [h(l), y(l)] } } }, 97587: function (R, E, e) { var w = e(92770), k = e(73972), i = e(71828), _ = e(44467), y = e(25673); R.exports = function (h, l, t, o) { var r = "error_" + o.axis, n = _.newContainer(l, r), a = h[r] || {}; function s(b, g) { return i.coerce(a, n, y, b, g) } if (s("visible", a.array !== void 0 || a.value !== void 0 || a.type === "sqrt") !== !1) { var u = s("type", "array" in a ? "data" : "percent"), p = !0; u !== "sqrt" && (p = s("symmetric", !((u === "data" ? "arrayminus" : "valueminus") in a))), u === "data" ? (s("array"), s("traceref"), p || (s("arrayminus"), s("tracerefminus"))) : u !== "percent" && u !== "constant" || (s("value"), p || s("valueminus")); var c = "copy_" + o.inherit + "style"; o.inherit && (l["error_" + o.inherit] || {}).visible && s(c, !(a.color || w(a.thickness) || w(a.width))), o.inherit && n[c] || (s("color", t), s("thickness"), s("width", k.traceIs(l, "gl3d") ? 0 : 4)) } } }, 37369: function (R, E, e) { var w = e(71828), k = e(30962).overrideAll, i = e(25673), _ = { error_x: w.extendFlat({}, i), error_y: w.extendFlat({}, i) }; delete _.error_x.copy_zstyle, delete _.error_y.copy_zstyle, delete _.error_y.copy_ystyle; var y = { error_x: w.extendFlat({}, i), error_y: w.extendFlat({}, i), error_z: w.extendFlat({}, i) }; delete y.error_x.copy_ystyle, delete y.error_y.copy_ystyle, delete y.error_z.copy_ystyle, delete y.error_z.copy_zstyle, R.exports = { moduleType: "component", name: "errorbars", schema: { traces: { scatter: _, bar: _, histogram: _, scatter3d: k(y, "calc", "nested"), scattergl: k(_, "calc", "nested") } }, supplyDefaults: e(97587), calc: e(84532), makeComputeError: e(45827), plot: e(19398), style: e(62662), hoverInfo: function (h, l, t) { (l.error_y || {}).visible && (t.yerr = h.yh - h.y, l.error_y.symmetric || (t.yerrneg = h.y - h.ys)), (l.error_x || {}).visible && (t.xerr = h.xh - h.x, l.error_x.symmetric || (t.xerrneg = h.x - h.xs)) } } }, 19398: function (R, E, e) { var w = e(39898), k = e(92770), i = e(91424), _ = e(34098); R.exports = function (y, h, l, t) { var o = l.xaxis, r = l.yaxis, n = t && t.duration > 0, a = y._context.staticPlot; h.each(function (s) { var u, p = s[0].trace, c = p.error_x || {}, b = p.error_y || {}; p.ids && (u = function (m) { return m.id }); var g = _.hasMarkers(p) && p.marker.maxdisplayed > 0; b.visible || c.visible || (s = []); var f = w.select(this).selectAll("g.errorbar").data(s, u); if (f.exit().remove(), s.length) { c.visible || f.selectAll("path.xerror").remove(), b.visible || f.selectAll("path.yerror").remove(), f.style("opacity", 1); var v = f.enter().append("g").classed("errorbar", !0); n && v.style("opacity", 0).transition().duration(t.duration).style("opacity", 1), i.setClipUrl(f, l.layerClipId, y), f.each(function (m) { var x = w.select(this), T = function (O, z, B) { var Y = { x: z.c2p(O.x), y: B.c2p(O.y) }; return O.yh !== void 0 && (Y.yh = B.c2p(O.yh), Y.ys = B.c2p(O.ys), k(Y.ys) || (Y.noYS = !0, Y.ys = B.c2p(O.ys, !0))), O.xh !== void 0 && (Y.xh = z.c2p(O.xh), Y.xs = z.c2p(O.xs), k(Y.xs) || (Y.noXS = !0, Y.xs = z.c2p(O.xs, !0))), Y }(m, o, r); if (!g || m.vis) { var d, M = x.select("path.yerror"); if (b.visible && k(T.x) && k(T.yh) && k(T.ys)) { var A = b.width; d = "M" + (T.x - A) + "," + T.yh + "h" + 2 * A + "m-" + A + ",0V" + T.ys, T.noYS || (d += "m-" + A + ",0h" + 2 * A), M.size() ? n && (M = M.transition().duration(t.duration).ease(t.easing)) : M = x.append("path").style("vector-effect", a ? "none" : "non-scaling-stroke").classed("yerror", !0), M.attr("d", d) } else M.remove(); var C = x.select("path.xerror"); if (c.visible && k(T.y) && k(T.xh) && k(T.xs)) { var P = (c.copy_ystyle ? b : c).width; d = "M" + T.xh + "," + (T.y - P) + "v" + 2 * P + "m0,-" + P + "H" + T.xs, T.noXS || (d += "m0,-" + P + "v" + 2 * P), C.size() ? n && (C = C.transition().duration(t.duration).ease(t.easing)) : C = x.append("path").style("vector-effect", a ? "none" : "non-scaling-stroke").classed("xerror", !0), C.attr("d", d) } else C.remove() } }) } }) } }, 62662: function (R, E, e) { var w = e(39898), k = e(7901); R.exports = function (i) { i.each(function (_) { var y = _[0].trace, h = y.error_y || {}, l = y.error_x || {}, t = w.select(this); t.selectAll("path.yerror").style("stroke-width", h.thickness + "px").call(k.stroke, h.color), l.copy_ystyle && (l = h), t.selectAll("path.xerror").style("stroke-width", l.thickness + "px").call(k.stroke, l.color) }) } }, 77914: function (R, E, e) { var w = e(41940), k = e(528).hoverlabel, i = e(1426).extendFlat; R.exports = { hoverlabel: { bgcolor: i({}, k.bgcolor, { arrayOk: !0 }), bordercolor: i({}, k.bordercolor, { arrayOk: !0 }), font: w({ arrayOk: !0, editType: "none" }), align: i({}, k.align, { arrayOk: !0 }), namelength: i({}, k.namelength, { arrayOk: !0 }), editType: "none" } } }, 30732: function (R, E, e) { var w = e(71828), k = e(73972); function i(_, y, h, l) { l = l || w.identity, Array.isArray(_) && (y[0][h] = l(_)) } R.exports = function (_) { var y = _.calcdata, h = _._fullLayout; function l(a) { return function (s) { return w.coerceHoverinfo({ hoverinfo: s }, { _module: a._module }, h) } } for (var t = 0; t < y.length; t++) { var o = y[t], r = o[0].trace; if (!k.traceIs(r, "pie-like")) { var n = k.traceIs(r, "2dMap") ? i : w.fillArray; n(r.hoverinfo, o, "hi", l(r)), r.hovertemplate && n(r.hovertemplate, o, "ht"), r.hoverlabel && (n(r.hoverlabel.bgcolor, o, "hbg"), n(r.hoverlabel.bordercolor, o, "hbc"), n(r.hoverlabel.font.size, o, "hts"), n(r.hoverlabel.font.color, o, "htc"), n(r.hoverlabel.font.family, o, "htf"), n(r.hoverlabel.namelength, o, "hnl"), n(r.hoverlabel.align, o, "hta")) } } } }, 75914: function (R, E, e) { var w = e(73972), k = e(88335).hover; R.exports = function (i, _, y) { var h = w.getComponentMethod("annotations", "onClick")(i, i._hoverdata); function l() { i.emit("plotly_click", { points: i._hoverdata, event: _ }) } y !== void 0 && k(i, _, y, !0), i._hoverdata && _ && _.target && (h && h.then ? h.then(l) : l(), _.stopImmediatePropagation && _.stopImmediatePropagation()) } }, 26675: function (R) { R.exports = { YANGLE: 60, HOVERARROWSIZE: 6, HOVERTEXTPAD: 3, HOVERFONTSIZE: 13, HOVERFONT: "Arial, sans-serif", HOVERMINTIME: 50, HOVERID: "-hover" } }, 54268: function (R, E, e) { var w = e(71828), k = e(77914), i = e(38048); R.exports = function (_, y, h, l) { var t = w.extendFlat({}, l.hoverlabel); y.hovertemplate && (t.namelength = -1), i(_, y, function (o, r) { return w.coerce(_, y, k, o, r) }, t) } }, 23469: function (R, E, e) { var w = e(71828); E.getSubplot = function (l) { return l.subplot || l.xaxis + l.yaxis || l.geo }, E.isTraceInSubplots = function (l, t) { if (l.type === "splom") { for (var o = l.xaxes || [], r = l.yaxes || [], n = 0; n < o.length; n++)for (var a = 0; a < r.length; a++)if (t.indexOf(o[n] + r[a]) !== -1) return !0; return !1 } return t.indexOf(E.getSubplot(l)) !== -1 }, E.flat = function (l, t) { for (var o = new Array(l.length), r = 0; r < l.length; r++)o[r] = t; return o }, E.p2c = function (l, t) { for (var o = new Array(l.length), r = 0; r < l.length; r++)o[r] = l[r].p2c(t); return o }, E.getDistanceFunction = function (l, t, o, r) { return l === "closest" ? r || E.quadrature(t, o) : l.charAt(0) === "x" ? t : o }, E.getClosest = function (l, t, o) { if (o.index !== !1) o.index >= 0 && o.index < l.length ? o.distance = 0 : o.index = !1; else for (var r = 0; r < l.length; r++) { var n = t(l[r]); n <= o.distance && (o.index = r, o.distance = n) } return o }, E.inbox = function (l, t, o) { return l * t < 0 || l === 0 ? o : 1 / 0 }, E.quadrature = function (l, t) { return function (o) { var r = l(o), n = t(o); return Math.sqrt(r * r + n * n) } }, E.makeEventData = function (l, t, o) { var r = "index" in l ? l.index : l.pointNumber, n = { data: t._input, fullData: t, curveNumber: t.index, pointNumber: r }; if (t._indexToPoints) { var a = t._indexToPoints[r]; a.length === 1 ? n.pointIndex = a[0] : n.pointIndices = a } else n.pointIndex = r; return t._module.eventData ? n = t._module.eventData(n, l, t, o, r) : ("xVal" in l ? n.x = l.xVal : "x" in l && (n.x = l.x), "yVal" in l ? n.y = l.yVal : "y" in l && (n.y = l.y), l.xa && (n.xaxis = l.xa), l.ya && (n.yaxis = l.ya), l.zLabelVal !== void 0 && (n.z = l.zLabelVal)), E.appendArrayPointValue(n, t, r), n }, E.appendArrayPointValue = function (l, t, o) { var r = t._arrayAttrs; if (r) for (var n = 0; n < r.length; n++) { var a = r[n], s = i(a); if (l[s] === void 0) { var u = _(w.nestedProperty(t, a).get(), o); u !== void 0 && (l[s] = u) } } }, E.appendArrayMultiPointValues = function (l, t, o) { var r = t._arrayAttrs; if (r) for (var n = 0; n < r.length; n++) { var a = r[n], s = i(a); if (l[s] === void 0) { for (var u = w.nestedProperty(t, a).get(), p = new Array(o.length), c = 0; c < o.length; c++)p[c] = _(u, o[c]); l[s] = p } } }; var k = { ids: "id", locations: "location", labels: "label", values: "value", "marker.colors": "color", parents: "parent" }; function i(l) { return k[l] || l } function _(l, t) { return Array.isArray(t) ? Array.isArray(l) && Array.isArray(l[t[0]]) ? l[t[0]][t[1]] : void 0 : l[t] } var y = { x: !0, y: !0 }, h = { "x unified": !0, "y unified": !0 }; E.isUnifiedHover = function (l) { return typeof l == "string" && !!h[l] }, E.isXYhover = function (l) { return typeof l == "string" && !!y[l] } }, 88335: function (R, E, e) { var w = e(39898), k = e(92770), i = e(84267), _ = e(71828), y = _.strTranslate, h = _.strRotate, l = e(11086), t = e(63893), o = e(39918), r = e(91424), n = e(7901), a = e(28569), s = e(89298), u = e(73972), p = e(23469), c = e(26675), b = e(99017), g = e(43969), f = c.YANGLE, v = Math.PI * f / 180, m = 1 / Math.sin(v), x = Math.cos(v), T = Math.sin(v), d = c.HOVERARROWSIZE, M = c.HOVERTEXTPAD, A = { box: !0, ohlc: !0, violin: !0, candlestick: !0 }, C = { scatter: !0, scattergl: !0, splom: !0 }; function P(X) { return [X.trace.index, X.index, X.x0, X.y0, X.name, X.attr, X.xa ? X.xa._id : "", X.ya ? X.ya._id : ""].join(",") } E.hover = function (X, ee, re, oe) { X = _.getGraphDiv(X); var ue = ee.target; _.throttle(X._fullLayout._uid + c.HOVERID, c.HOVERMINTIME, function () { (function (ce, de, me, _e, Se) { me || (me = "xy"); var we = Array.isArray(me) ? me : [me], xe = ce._fullLayout, De = xe._plots || [], Ee = De[me], Me = xe._has("cartesian"); if (Ee) { var he = Ee.overlays.map(function (Ht) { return Ht.id }); we = we.concat(he) } for (var fe = we.length, ae = new Array(fe), be = new Array(fe), Ie = !1, Te = 0; Te < fe; Te++) { var Ne = we[Te]; if (De[Ne]) Ie = !0, ae[Te] = De[Ne].xaxis, be[Te] = De[Ne].yaxis; else { if (!xe[Ne] || !xe[Ne]._subplot) return void _.warn("Unrecognized subplot: " + Ne); var qe = xe[Ne]._subplot; ae[Te] = qe.xaxis, be[Te] = qe.yaxis } } var ve = de.hovermode || xe.hovermode; if (ve && !Ie && (ve = "closest"), ["x", "y", "closest", "x unified", "y unified"].indexOf(ve) === -1 || !ce.calcdata || ce.querySelector(".zoombox") || ce._dragging) return a.unhoverRaw(ce, de); var Ce = xe.hoverdistance; Ce === -1 && (Ce = 1 / 0); var Ae = xe.spikedistance; Ae === -1 && (Ae = 1 / 0); var ze, Ue, Ve, Ye, $e, rt, ht, nt, bt, wt, ut, lt, Tt, Et = [], St = [], Ft = { hLinePoint: null, vLinePoint: null }, zt = !1; if (Array.isArray(de)) for (ve = "array", Ve = 0; Ve < de.length; Ve++)($e = ce.calcdata[de[Ve].curveNumber || 0]) && (rt = $e[0].trace, $e[0].trace.hoverinfo !== "skip" && (St.push($e), rt.orientation === "h" && (zt = !0))); else { for (Ye = 0; Ye < ce.calcdata.length; Ye++)$e = ce.calcdata[Ye], (rt = $e[0].trace).hoverinfo !== "skip" && p.isTraceInSubplots(rt, we) && (St.push($e), rt.orientation === "h" && (zt = !0)); var Je, et; if (Se) { if (l.triggerHandler(ce, "plotly_beforehover", de) === !1) return; var Ze = Se.getBoundingClientRect(); Je = de.clientX - Ze.left, et = de.clientY - Ze.top, xe._calcInverseTransform(ce); var Qe = _.apply3DTransform(xe._invTransform)(Je, et); if (Je = Qe[0], et = Qe[1], Je < 0 || Je > ae[0]._length || et < 0 || et > be[0]._length) return a.unhoverRaw(ce, de) } else Je = "xpx" in de ? de.xpx : ae[0]._length / 2, et = "ypx" in de ? de.ypx : be[0]._length / 2; if (de.pointerX = Je + ae[0]._offset, de.pointerY = et + be[0]._offset, ze = "xval" in de ? p.flat(we, de.xval) : p.p2c(ae, Je), Ue = "yval" in de ? p.flat(we, de.yval) : p.p2c(be, et), !k(ze[0]) || !k(Ue[0])) return _.warn("Fx.hover failed", de, ce), a.unhoverRaw(ce, de) } var st = 1 / 0; function ft(Ht, sn) { for (Ye = 0; Ye < St.length; Ye++)if (($e = St[Ye]) && $e[0] && $e[0].trace && (rt = $e[0].trace).visible === !0 && rt._length !== 0 && ["carpet", "contourcarpet"].indexOf(rt._module.name) === -1) { if (rt.type === "splom" ? ht = we[nt = 0] : (ht = p.getSubplot(rt), nt = we.indexOf(ht)), bt = ve, p.isUnifiedHover(bt) && (bt = bt.charAt(0)), lt = { cd: $e, trace: rt, xa: ae[nt], ya: be[nt], maxHoverDistance: Ce, maxSpikeDistance: Ae, index: !1, distance: Math.min(st, Ce), spikeDistance: 1 / 0, xSpike: void 0, ySpike: void 0, color: n.defaultLine, name: rt.name, x0: void 0, x1: void 0, y0: void 0, y1: void 0, xLabelVal: void 0, yLabelVal: void 0, zLabelVal: void 0, text: void 0 }, xe[ht] && (lt.subplot = xe[ht]._subplot), xe._splomScenes && xe._splomScenes[rt.uid] && (lt.scene = xe._splomScenes[rt.uid]), Tt = Et.length, bt === "array") { var gn = de[Ye]; "pointNumber" in gn ? (lt.index = gn.pointNumber, bt = "closest") : (bt = "", "xval" in gn && (wt = gn.xval, bt = "x"), "yval" in gn && (ut = gn.yval, bt = bt ? "closest" : "y")) } else Ht !== void 0 && sn !== void 0 ? (wt = Ht, ut = sn) : (wt = ze[nt], ut = Ue[nt]); if (Ce !== 0) if (rt._module && rt._module.hoverPoints) { var bn = rt._module.hoverPoints(lt, wt, ut, bt, { finiteRange: !0, hoverLayer: xe._hoverlayer }); if (bn) for (var Cn, Yn = 0; Yn < bn.length; Yn++)Cn = bn[Yn], k(Cn.x0) && k(Cn.y0) && Et.push(G(Cn, ve)) } else _.log("Unrecognized trace type in hover:", rt); if (ve === "closest" && Et.length > Tt && (Et.splice(0, Tt), st = Et[0].distance), Me && Ae !== 0 && Et.length === 0) { lt.distance = Ae, lt.index = !1; var Nn = rt._module.hoverPoints(lt, wt, ut, "closest", { hoverLayer: xe._hoverlayer }); if (Nn && (Nn = Nn.filter(function ($t) { return $t.spikeDistance <= Ae })), Nn && Nn.length) { var jn, rr = Nn.filter(function ($t) { return $t.xa.showspikes && $t.xa.spikesnap !== "hovered data" }); if (rr.length) { var Wt = rr[0]; k(Wt.x0) && k(Wt.y0) && (jn = je(Wt), (!Ft.vLinePoint || Ft.vLinePoint.spikeDistance > jn.spikeDistance) && (Ft.vLinePoint = jn)) } var An = Nn.filter(function ($t) { return $t.ya.showspikes && $t.ya.spikesnap !== "hovered data" }); if (An.length) { var Lt = An[0]; k(Lt.x0) && k(Lt.y0) && (jn = je(Lt), (!Ft.hLinePoint || Ft.hLinePoint.spikeDistance > jn.spikeDistance) && (Ft.hLinePoint = jn)) } } } } } function Be(Ht, sn, gn) { for (var bn, Cn = null, Yn = 1 / 0, Nn = 0; Nn < Ht.length; Nn++)bn = Ht[Nn].spikeDistance, gn && Nn === 0 && (bn = -1 / 0), bn <= Yn && bn <= sn && (Cn = Ht[Nn], Yn = bn); return Cn } function je(Ht) { return Ht ? { xa: Ht.xa, ya: Ht.ya, x: Ht.xSpike !== void 0 ? Ht.xSpike : (Ht.x0 + Ht.x1) / 2, y: Ht.ySpike !== void 0 ? Ht.ySpike : (Ht.y0 + Ht.y1) / 2, distance: Ht.distance, spikeDistance: Ht.spikeDistance, curveNumber: Ht.trace.index, color: Ht.color, pointNumber: Ht.index } : null } ft(); var at = { fullLayout: xe, container: xe._hoverlayer, event: de }, ot = ce._spikepoints, xt = { vLinePoint: Ft.vLinePoint, hLinePoint: Ft.hLinePoint }; ce._spikepoints = xt; var yt = function () { Et.sort(function (Ht, sn) { return Ht.distance - sn.distance }), Et = function (Ht, sn) { for (var gn = sn.charAt(0), bn = [], Cn = [], Yn = [], Nn = 0; Nn < Ht.length; Nn++) { var jn = Ht[Nn]; u.traceIs(jn.trace, "bar-like") || u.traceIs(jn.trace, "box-violin") ? Yn.push(jn) : jn.trace[gn + "period"] ? Cn.push(jn) : bn.push(jn) } return bn.concat(Cn).concat(Yn) }(Et, ve) }; yt(); var _t = ve.charAt(0), gt = (_t === "x" || _t === "y") && Et[0] && C[Et[0].trace.type]; if (Me && Ae !== 0 && Et.length !== 0) { var Ct = Be(Et.filter(function (Ht) { return Ht.ya.showspikes }), Ae, gt); Ft.hLinePoint = je(Ct); var dt = Be(Et.filter(function (Ht) { return Ht.xa.showspikes }), Ae, gt); Ft.vLinePoint = je(dt) } if (Et.length === 0) { var vt = a.unhoverRaw(ce, de); return !Me || Ft.hLinePoint === null && Ft.vLinePoint === null || j(ot) && V(ce, Ft, at), vt } if (Me && j(ot) && V(ce, Ft, at), p.isXYhover(bt) && Et[0].length !== 0 && Et[0].trace.type !== "splom") { var At = Et[0], Bt = (Et = A[At.trace.type] ? Et.filter(function (Ht) { return Ht.trace.index === At.trace.index }) : [At]).length; ft(Z("x", At, xe), Z("y", At, xe)); var jt, Ut = [], tn = {}, Xt = 0, Qt = function (Ht) { var sn = A[Ht.trace.type] ? P(Ht) : Ht.trace.index; if (tn[sn]) { var gn = tn[sn] - 1, bn = Ut[gn]; gn > 0 && Math.abs(Ht.distance) < Math.abs(bn.distance) && (Ut[gn] = Ht) } else Xt++, tn[sn] = Xt, Ut.push(Ht) }; for (jt = 0; jt < Bt; jt++)Qt(Et[jt]); for (jt = Et.length - 1; jt > Bt - 1; jt--)Qt(Et[jt]); Et = Ut, yt() } var Gt = ce._hoverdata, vn = [], Tn = ie(ce), dn = te(ce); for (Ve = 0; Ve < Et.length; Ve++) { var Yt = Et[Ve], ln = p.makeEventData(Yt, Yt.trace, Yt.cd); if (Yt.hovertemplate !== !1) { var nn = !1; Yt.cd[Yt.index] && Yt.cd[Yt.index].ht && (nn = Yt.cd[Yt.index].ht), Yt.hovertemplate = nn || Yt.trace.hovertemplate || !1 } if (Yt.xa && Yt.ya) { var fn = Yt.x0 + Yt.xa._offset, mn = Yt.x1 + Yt.xa._offset, xn = Yt.y0 + Yt.ya._offset, Pn = Yt.y1 + Yt.ya._offset, Dn = Math.min(fn, mn), En = Math.max(fn, mn), Fn = Math.min(xn, Pn), er = Math.max(xn, Pn); ln.bbox = { x0: Dn + dn, x1: En + dn, y0: Fn + Tn, y1: er + Tn } } Yt.eventData = [ln], vn.push(ln) } ce._hoverdata = vn; var ir = ve === "y" && (St.length > 1 || Et.length > 1) || ve === "closest" && zt && Et.length > 1, fr = n.combine(xe.plot_bgcolor || n.background, xe.paper_bgcolor), ar = z(Et, { gd: ce, hovermode: ve, rotateLabels: ir, bgColor: fr, container: xe._hoverlayer, outerContainer: xe._paper.node(), commonLabelOpts: xe.hoverlabel, hoverdistance: xe.hoverdistance }), Kn = ar.hoverLabels; if (p.isUnifiedHover(ve) || (function (Ht, sn, gn, bn) { var Cn, Yn, Nn, jn, rr, Wt, An, Lt = sn ? "xa" : "ya", $t = sn ? "ya" : "xa", rn = 0, wn = 1, kn = Ht.size(), Ln = new Array(kn), hn = 0, Jt = bn.minX, en = bn.maxX, cn = bn.minY, pn = bn.maxY, On = function (vr) { return vr * gn._invScaleX }, Rn = function (vr) { return vr * gn._invScaleY }; function Wn(vr) { var Er = vr[0], Jn = vr[vr.length - 1]; if (Yn = Er.pmin - Er.pos - Er.dp + Er.size, Nn = Jn.pos + Jn.dp + Jn.size - Er.pmax, Yn > .01) { for (rr = vr.length - 1; rr >= 0; rr--)vr[rr].dp += Yn; Cn = !1 } if (!(Nn < .01)) { if (Yn < -.01) { for (rr = vr.length - 1; rr >= 0; rr--)vr[rr].dp -= Nn; Cn = !1 } if (Cn) { var br = 0; for (jn = 0; jn < vr.length; jn++)(Wt = vr[jn]).pos + Wt.dp + Wt.size > Er.pmax && br++; for (jn = vr.length - 1; jn >= 0 && !(br <= 0); jn--)(Wt = vr[jn]).pos > Er.pmax - 1 && (Wt.del = !0, br--); for (jn = 0; jn < vr.length && !(br <= 0); jn++)if ((Wt = vr[jn]).pos < Er.pmin + 1) for (Wt.del = !0, br--, Nn = 2 * Wt.size, rr = vr.length - 1; rr >= 0; rr--)vr[rr].dp -= Nn; for (jn = vr.length - 1; jn >= 0 && !(br <= 0); jn--)(Wt = vr[jn]).pos + Wt.dp + Wt.size > Er.pmax && (Wt.del = !0, br--) } } } for (Ht.each(function (vr) { var Er = vr[Lt], Jn = vr[$t], br = Er._id.charAt(0) === "x", zr = Er.range; hn === 0 && zr && zr[0] > zr[1] !== br && (wn = -1); var ii = 0, xi = br ? gn.width : gn.height; if (gn.hovermode === "x" || gn.hovermode === "y") { var vi, Ai, ci = Y(vr, sn), zi = vr.anchor, Do = zi === "end" ? -1 : 1; if (zi === "middle") Ai = (vi = vr.crossPos + (br ? Rn(ci.y - vr.by / 2) : On(vr.bx / 2 + vr.tx2width / 2))) + (br ? Rn(vr.by) : On(vr.bx)); else if (br) Ai = (vi = vr.crossPos + Rn(d + ci.y) - Rn(vr.by / 2 - d)) + Rn(vr.by); else { var Ha = On(Do * d + ci.x), Ko = Ha + On(Do * vr.bx); vi = vr.crossPos + Math.min(Ha, Ko), Ai = vr.crossPos + Math.max(Ha, Ko) } br ? cn !== void 0 && pn !== void 0 && Math.min(Ai, pn) - Math.max(vi, cn) > 1 && (Jn.side === "left" ? (ii = Jn._mainLinePosition, xi = gn.width) : xi = Jn._mainLinePosition) : Jt !== void 0 && en !== void 0 && Math.min(Ai, en) - Math.max(vi, Jt) > 1 && (Jn.side === "top" ? (ii = Jn._mainLinePosition, xi = gn.height) : xi = Jn._mainLinePosition) } Ln[hn++] = [{ datum: vr, traceIndex: vr.trace.index, dp: 0, pos: vr.pos, posref: vr.posref, size: vr.by * (br ? m : 1) / 2, pmin: ii, pmax: xi }] }), Ln.sort(function (vr, Er) { return vr[0].posref - Er[0].posref || wn * (Er[0].traceIndex - vr[0].traceIndex) }); !Cn && rn <= kn;) { for (rn++, Cn = !0, jn = 0; jn < Ln.length - 1;) { var Hn = Ln[jn], tr = Ln[jn + 1], Xn = Hn[Hn.length - 1], lr = tr[0]; if ((Yn = Xn.pos + Xn.dp + Xn.size - lr.pos - lr.dp + lr.size) > .01 && Xn.pmin === lr.pmin && Xn.pmax === lr.pmax) { for (rr = tr.length - 1; rr >= 0; rr--)tr[rr].dp += Yn; for (Hn.push.apply(Hn, tr), Ln.splice(jn + 1, 1), An = 0, rr = Hn.length - 1; rr >= 0; rr--)An += Hn[rr].dp; for (Nn = An / Hn.length, rr = Hn.length - 1; rr >= 0; rr--)Hn[rr].dp -= Nn; Cn = !1 } else jn++ } Ln.forEach(Wn) } for (jn = Ln.length - 1; jn >= 0; jn--) { var or = Ln[jn]; for (rr = or.length - 1; rr >= 0; rr--) { var sr = or[rr], gr = sr.datum; gr.offset = sr.dp, gr.del = sr.del } } }(Kn, ir, xe, ar.commonLabelBoundingBox), D(Kn, ir, xe._invScaleX, xe._invScaleY)), Se && Se.tagName) { var wr = u.getComponentMethod("annotations", "hasClickToShow")(ce, vn); o(w.select(Se), wr ? "pointer" : "") } Se && !_e && function (Ht, sn, gn) { if (!gn || gn.length !== Ht._hoverdata.length) return !0; for (var bn = gn.length - 1; bn >= 0; bn--) { var Cn = gn[bn], Yn = Ht._hoverdata[bn]; if (Cn.curveNumber !== Yn.curveNumber || String(Cn.pointNumber) !== String(Yn.pointNumber) || String(Cn.pointNumbers) !== String(Yn.pointNumbers)) return !0 } return !1 }(ce, 0, Gt) && (Gt && ce.emit("plotly_unhover", { event: de, points: Gt }), ce.emit("plotly_hover", { event: de, points: ce._hoverdata, xaxes: ae, yaxes: be, xvals: ze, yvals: Ue })) })(X, ee, re, oe, ue) }) }, E.loneHover = function (X, ee) { var re = !0; Array.isArray(X) || (re = !1, X = [X]); var oe = ee.gd, ue = ie(oe), ce = te(oe), de = z(X.map(function (Se) { var we = Se._x0 || Se.x0 || Se.x || 0, xe = Se._x1 || Se.x1 || Se.x || 0, De = Se._y0 || Se.y0 || Se.y || 0, Ee = Se._y1 || Se.y1 || Se.y || 0, Me = Se.eventData; if (Me) { var he = Math.min(we, xe), fe = Math.max(we, xe), ae = Math.min(De, Ee), be = Math.max(De, Ee), Ie = Se.trace; if (u.traceIs(Ie, "gl3d")) { var Te = oe._fullLayout[Ie.scene]._scene.container, Ne = Te.offsetLeft, qe = Te.offsetTop; he += Ne, fe += Ne, ae += qe, be += qe } Me.bbox = { x0: he + ce, x1: fe + ce, y0: ae + ue, y1: be + ue }, ee.inOut_bbox && ee.inOut_bbox.push(Me.bbox) } else Me = !1; return { color: Se.color || n.defaultLine, x0: Se.x0 || Se.x || 0, x1: Se.x1 || Se.x || 0, y0: Se.y0 || Se.y || 0, y1: Se.y1 || Se.y || 0, xLabel: Se.xLabel, yLabel: Se.yLabel, zLabel: Se.zLabel, text: Se.text, name: Se.name, idealAlign: Se.idealAlign, borderColor: Se.borderColor, fontFamily: Se.fontFamily, fontSize: Se.fontSize, fontColor: Se.fontColor, nameLength: Se.nameLength, textAlign: Se.textAlign, trace: Se.trace || { index: 0, hoverinfo: "" }, xa: { _offset: 0 }, ya: { _offset: 0 }, index: 0, hovertemplate: Se.hovertemplate || !1, hovertemplateLabels: Se.hovertemplateLabels || !1, eventData: Me } }), { gd: oe, hovermode: "closest", rotateLabels: !1, bgColor: ee.bgColor || n.background, container: w.select(ee.container), outerContainer: ee.outerContainer || ee.container }).hoverLabels, me = 0, _e = 0; return de.sort(function (Se, we) { return Se.y0 - we.y0 }).each(function (Se, we) { var xe = Se.y0 - Se.by / 2; Se.offset = xe - 5 < me ? me - xe + 5 : 0, me = xe + Se.by + Se.offset, we === ee.anchorIndex && (_e = Se.offset) }).each(function (Se) { Se.offset -= _e }), D(de, !1, oe._fullLayout._invScaleX, oe._fullLayout._invScaleY), re ? de : de.node() }; var O = /([\s\S]*)<\/extra>/; function z(X, ee) { var re = ee.gd, oe = re._fullLayout, ue = ee.hovermode, ce = ee.rotateLabels, de = ee.bgColor, me = ee.container, _e = ee.outerContainer, Se = ee.commonLabelOpts || {}; if (X.length === 0) return [[]]; var we = ee.fontFamily || c.HOVERFONT, xe = ee.fontSize || c.HOVERFONTSIZE, De = X[0], Ee = De.xa, Me = De.ya, he = ue.charAt(0), fe = he + "Label", ae = De[fe]; if (ae === void 0 && Ee.type === "multicategory") for (var be = 0; be < X.length && (ae = X[be][fe]) === void 0; be++); var Ie = J(re, _e), Te = Ie.top, Ne = Ie.width, qe = Ie.height, ve = ae !== void 0 && De.distance <= ee.hoverdistance && (ue === "x" || ue === "y"); if (ve) { var Ce, Ae, ze = !0; for (Ce = 0; Ce < X.length; Ce++)if (ze && X[Ce].zLabel === void 0 && (ze = !1), Ae = X[Ce].hoverinfo || X[Ce].trace.hoverinfo) { var Ue = Array.isArray(Ae) ? Ae : Ae.split("+"); if (Ue.indexOf("all") === -1 && Ue.indexOf(ue) === -1) { ve = !1; break } } ze && (ve = !1) } var Ve = me.selectAll("g.axistext").data(ve ? [0] : []); Ve.enter().append("g").classed("axistext", !0), Ve.exit().remove(); var Ye = { minX: 0, maxX: 0, minY: 0, maxY: 0 }; if (Ve.each(function () { var vt = w.select(this), At = _.ensureSingle(vt, "path", "", function (Fn) { Fn.style({ "stroke-width": "1px" }) }), Bt = _.ensureSingle(vt, "text", "", function (Fn) { Fn.attr("data-notex", 1) }), jt = Se.bgcolor || n.defaultLine, Ut = Se.bordercolor || n.contrast(jt), tn = n.contrast(jt), Xt = { family: Se.font.family || we, size: Se.font.size || xe, color: Se.font.color || tn }; At.style({ fill: jt, stroke: Ut }), Bt.text(ae).call(r.font, Xt).call(t.positionText, 0, 0).call(t.convertToTspans, re), vt.attr("transform", ""); var Qt, Gt, vn = J(re, Bt.node()); if (ue === "x") { var Tn = Ee.side === "top" ? "-" : ""; Bt.attr("text-anchor", "middle").call(t.positionText, 0, Ee.side === "top" ? Te - vn.bottom - d - M : Te - vn.top + d + M), Qt = Ee._offset + (De.x0 + De.x1) / 2, Gt = Me._offset + (Ee.side === "top" ? 0 : Me._length); var dn = vn.width / 2 + M; Qt < dn ? (Qt = dn, At.attr("d", "M-" + (dn - d) + ",0L-" + (dn - 2 * d) + "," + Tn + d + "H" + dn + "v" + Tn + (2 * M + vn.height) + "H-" + dn + "V" + Tn + d + "Z")) : Qt > oe.width - dn ? (Qt = oe.width - dn, At.attr("d", "M" + (dn - d) + ",0L" + dn + "," + Tn + d + "v" + Tn + (2 * M + vn.height) + "H-" + dn + "V" + Tn + d + "H" + (dn - 2 * d) + "Z")) : At.attr("d", "M0,0L" + d + "," + Tn + d + "H" + dn + "v" + Tn + (2 * M + vn.height) + "H-" + dn + "V" + Tn + d + "H-" + d + "Z"), Ye.minX = Qt - dn, Ye.maxX = Qt + dn, Ee.side === "top" ? (Ye.minY = Gt - (2 * M + vn.height), Ye.maxY = Gt - M) : (Ye.minY = Gt + M, Ye.maxY = Gt + (2 * M + vn.height)) } else { var Yt, ln, nn; Me.side === "right" ? (Yt = "start", ln = 1, nn = "", Qt = Ee._offset + Ee._length) : (Yt = "end", ln = -1, nn = "-", Qt = Ee._offset), Gt = Me._offset + (De.y0 + De.y1) / 2, Bt.attr("text-anchor", Yt), At.attr("d", "M0,0L" + nn + d + "," + d + "V" + (M + vn.height / 2) + "h" + nn + (2 * M + vn.width) + "V-" + (M + vn.height / 2) + "H" + nn + d + "V-" + d + "Z"), Ye.minY = Gt - (M + vn.height / 2), Ye.maxY = Gt + (M + vn.height / 2), Me.side === "right" ? (Ye.minX = Qt + d, Ye.maxX = Qt + d + (2 * M + vn.width)) : (Ye.minX = Qt - d - (2 * M + vn.width), Ye.maxX = Qt - d); var fn, mn = vn.height / 2, xn = Te - vn.top - mn, Pn = "clip" + oe._uid + "commonlabel" + Me._id; if (Qt < vn.width + 2 * M + d) { fn = "M-" + (d + M) + "-" + mn + "h-" + (vn.width - M) + "V" + mn + "h" + (vn.width - M) + "Z"; var Dn = vn.width - Qt + M; t.positionText(Bt, Dn, xn), Yt === "end" && Bt.selectAll("tspan").each(function () { var Fn = w.select(this), er = r.tester.append("text").text(Fn.text()).call(r.font, Xt), ir = J(re, er.node()); Math.round(ir.width) < Math.round(vn.width) && Fn.attr("x", Dn - ir.width), er.remove() }) } else t.positionText(Bt, ln * (M + d), xn), fn = null; var En = oe._topclips.selectAll("#" + Pn).data(fn ? [0] : []); En.enter().append("clipPath").attr("id", Pn).append("path"), En.exit().remove(), En.select("path").attr("d", fn), r.setClipUrl(Bt, fn ? Pn : null, re) } vt.attr("transform", y(Qt, Gt)) }), p.isUnifiedHover(ue)) { me.selectAll("g.hovertext").remove(); var $e = X.filter(function (vt) { return vt.hoverinfo !== "none" }); if ($e.length === 0) return []; var rt = oe.hoverlabel, ht = rt.font, nt = { showlegend: !0, legend: { title: { text: ae, font: ht }, font: ht, bgcolor: rt.bgcolor, bordercolor: rt.bordercolor, borderwidth: 1, tracegroupgap: 7, traceorder: oe.legend ? oe.legend.traceorder : void 0, orientation: "v" } }, bt = { font: ht }; b(nt, bt, re._fullData); var wt = bt.legend; wt.entries = []; for (var ut = 0; ut < $e.length; ut++) { var lt = $e[ut]; if (lt.hoverinfo !== "none") { var Tt = B(lt, !0, ue, oe, ae), Et = Tt[0], St = Tt[1]; lt.name = St, lt.text = St !== "" ? St + " : " + Et : Et; var Ft = lt.cd[lt.index]; Ft && (Ft.mc && (lt.mc = Ft.mc), Ft.mcc && (lt.mc = Ft.mcc), Ft.mlc && (lt.mlc = Ft.mlc), Ft.mlcc && (lt.mlc = Ft.mlcc), Ft.mlw && (lt.mlw = Ft.mlw), Ft.mrc && (lt.mrc = Ft.mrc), Ft.dir && (lt.dir = Ft.dir)), lt._distinct = !0, wt.entries.push([lt]) } } wt.entries.sort(function (vt, At) { return vt[0].trace.index - At[0].trace.index }), wt.layer = me, wt._inHover = !0, wt._groupTitleFont = rt.grouptitlefont, g(re, wt); var zt, Je, et, Ze, Qe = me.select("g.legend"), st = J(re, Qe.node()), ft = st.width + 2 * M, Be = st.height + 2 * M, je = $e[0], at = (je.x0 + je.x1) / 2, ot = (je.y0 + je.y1) / 2, xt = !(u.traceIs(je.trace, "bar-like") || u.traceIs(je.trace, "box-violin")); he === "y" ? xt ? (Je = ot - M, zt = ot + M) : (Je = Math.min.apply(null, $e.map(function (vt) { return Math.min(vt.y0, vt.y1) })), zt = Math.max.apply(null, $e.map(function (vt) { return Math.max(vt.y0, vt.y1) }))) : Je = zt = _.mean($e.map(function (vt) { return (vt.y0 + vt.y1) / 2 })) - Be / 2, he === "x" ? xt ? (et = at + M, Ze = at - M) : (et = Math.max.apply(null, $e.map(function (vt) { return Math.max(vt.x0, vt.x1) })), Ze = Math.min.apply(null, $e.map(function (vt) { return Math.min(vt.x0, vt.x1) }))) : et = Ze = _.mean($e.map(function (vt) { return (vt.x0 + vt.x1) / 2 })) - ft / 2; var yt, _t, gt = Ee._offset, Ct = Me._offset; return Ze += gt - ft, Je += Ct - Be, yt = (et += gt) + ft < Ne && et >= 0 ? et : Ze + ft < Ne && Ze >= 0 ? Ze : gt + ft < Ne ? gt : et - at < at - Ze + ft ? Ne - ft : 0, yt += M, _t = (zt += Ct) + Be < qe && zt >= 0 ? zt : Je + Be < qe && Je >= 0 ? Je : Ct + Be < qe ? Ct : zt - ot < ot - Je + Be ? qe - Be : 0, _t += M, Qe.attr("transform", y(yt - 1, _t - 1)), Qe } var dt = me.selectAll("g.hovertext").data(X, function (vt) { return P(vt) }); return dt.enter().append("g").classed("hovertext", !0).each(function () { var vt = w.select(this); vt.append("rect").call(n.fill, n.addOpacity(de, .8)), vt.append("text").classed("name", !0), vt.append("path").style("stroke-width", "1px"), vt.append("text").classed("nums", !0).call(r.font, we, xe) }), dt.exit().remove(), dt.each(function (vt) { var At = w.select(this).attr("transform", ""), Bt = vt.color; Array.isArray(Bt) && (Bt = Bt[vt.eventData[0].pointNumber]); var jt = vt.bgcolor || Bt, Ut = n.combine(n.opacity(jt) ? jt : n.defaultLine, de), tn = n.combine(n.opacity(Bt) ? Bt : n.defaultLine, de), Xt = vt.borderColor || n.contrast(Ut), Qt = B(vt, ve, ue, oe, ae, At), Gt = Qt[0], vn = Qt[1], Tn = At.select("text.nums").call(r.font, vt.fontFamily || we, vt.fontSize || xe, vt.fontColor || Xt).text(Gt).attr("data-notex", 1).call(t.positionText, 0, 0).call(t.convertToTspans, re), dn = At.select("text.name"), Yt = 0, ln = 0; if (vn && vn !== Gt) { dn.call(r.font, vt.fontFamily || we, vt.fontSize || xe, tn).text(vn).attr("data-notex", 1).call(t.positionText, 0, 0).call(t.convertToTspans, re); var nn = J(re, dn.node()); Yt = nn.width + 2 * M, ln = nn.height + 2 * M } else dn.remove(), At.select("rect").remove(); At.select("path").style({ fill: Ut, stroke: Xt }); var fn = vt.xa._offset + (vt.x0 + vt.x1) / 2, mn = vt.ya._offset + (vt.y0 + vt.y1) / 2, xn = Math.abs(vt.x1 - vt.x0), Pn = Math.abs(vt.y1 - vt.y0), Dn = J(re, Tn.node()), En = Dn.width / oe._invScaleX, Fn = Dn.height / oe._invScaleY; vt.ty0 = (Te - Dn.top) / oe._invScaleY, vt.bx = En + 2 * M, vt.by = Math.max(Fn + 2 * M, ln), vt.anchor = "start", vt.txwidth = En, vt.tx2width = Yt, vt.offset = 0; var er, ir, fr = (En + d + M + Yt) * oe._invScaleX; if (ce) vt.pos = fn, er = mn + Pn / 2 + fr <= qe, ir = mn - Pn / 2 - fr >= 0, vt.idealAlign !== "top" && er || !ir ? er ? (mn += Pn / 2, vt.anchor = "start") : vt.anchor = "middle" : (mn -= Pn / 2, vt.anchor = "end"), vt.crossPos = mn; else { if (vt.pos = mn, er = fn + xn / 2 + fr <= Ne, ir = fn - xn / 2 - fr >= 0, vt.idealAlign !== "left" && er || !ir) if (er) fn += xn / 2, vt.anchor = "start"; else { vt.anchor = "middle"; var ar = fr / 2, Kn = fn + ar - Ne, wr = fn - ar; Kn > 0 && (fn -= Kn), wr < 0 && (fn += -wr) } else fn -= xn / 2, vt.anchor = "end"; vt.crossPos = fn } Tn.attr("text-anchor", vt.anchor), Yt && dn.attr("text-anchor", vt.anchor), At.attr("transform", y(fn, mn) + (ce ? h(f) : "")) }), { hoverLabels: dt, commonLabelBoundingBox: Ye } } function B(X, ee, re, oe, ue, ce) { var de = "", me = ""; X.nameOverride !== void 0 && (X.name = X.nameOverride), X.name && (X.trace._meta && (X.name = _.templateString(X.name, X.trace._meta)), de = W(X.name, X.nameLength)); var _e = re.charAt(0), Se = _e === "x" ? "y" : "x"; X.zLabel !== void 0 ? (X.xLabel !== void 0 && (me += "x: " + X.xLabel + "
"), X.yLabel !== void 0 && (me += "y: " + X.yLabel + "
"), X.trace.type !== "choropleth" && X.trace.type !== "choroplethmapbox" && (me += (me ? "z: " : "") + X.zLabel)) : ee && X[_e + "Label"] === ue ? me = X[Se + "Label"] || "" : X.xLabel === void 0 ? X.yLabel !== void 0 && X.trace.type !== "scattercarpet" && (me = X.yLabel) : me = X.yLabel === void 0 ? X.xLabel : "(" + X.xLabel + ", " + X.yLabel + ")", !X.text && X.text !== 0 || Array.isArray(X.text) || (me += (me ? "
" : "") + X.text), X.extraText !== void 0 && (me += (me ? "
" : "") + X.extraText), ce && me === "" && !X.hovertemplate && (de === "" && ce.remove(), me = de); var we = X.hovertemplate || !1; if (we) { var xe = X.hovertemplateLabels || X; X[_e + "Label"] !== ue && (xe[_e + "other"] = xe[_e + "Val"], xe[_e + "otherLabel"] = xe[_e + "Label"]), me = (me = _.hovertemplateString(we, xe, oe._d3locale, X.eventData[0] || {}, X.trace._meta)).replace(O, function (De, Ee) { return de = W(Ee, X.nameLength), "" }) } return [me, de] } function Y(X, ee) { var re = 0, oe = X.offset; return ee && (oe *= -T, re = X.offset * x), { x: re, y: oe } } function D(X, ee, re, oe) { var ue = function (de) { return de * re }, ce = function (de) { return de * oe }; X.each(function (de) { var me = w.select(this); if (de.del) return me.remove(); var _e, Se, we, xe, De = me.select("text.nums"), Ee = de.anchor, Me = Ee === "end" ? -1 : 1, he = (xe = (we = (Se = { start: 1, end: -1, middle: 0 }[(_e = de).anchor]) * (d + M)) + Se * (_e.txwidth + M), _e.anchor === "middle" && (we -= _e.tx2width / 2, xe += _e.txwidth / 2 + M), { alignShift: Se, textShiftX: we, text2ShiftX: xe }), fe = Y(de, ee), ae = fe.x, be = fe.y, Ie = Ee === "middle"; me.select("path").attr("d", Ie ? "M-" + ue(de.bx / 2 + de.tx2width / 2) + "," + ce(be - de.by / 2) + "h" + ue(de.bx) + "v" + ce(de.by) + "h-" + ue(de.bx) + "Z" : "M0,0L" + ue(Me * d + ae) + "," + ce(d + be) + "v" + ce(de.by / 2 - d) + "h" + ue(Me * de.bx) + "v-" + ce(de.by) + "H" + ue(Me * d + ae) + "V" + ce(be - d) + "Z"); var Te = ae + he.textShiftX, Ne = be + de.ty0 - de.by / 2 + M, qe = de.textAlign || "auto"; qe !== "auto" && (qe === "left" && Ee !== "start" ? (De.attr("text-anchor", "start"), Te = Ie ? -de.bx / 2 - de.tx2width / 2 + M : -de.bx - M) : qe === "right" && Ee !== "end" && (De.attr("text-anchor", "end"), Te = Ie ? de.bx / 2 - de.tx2width / 2 - M : de.bx + M)), De.call(t.positionText, ue(Te), ce(Ne)), de.tx2width && (me.select("text.name").call(t.positionText, ue(he.text2ShiftX + he.alignShift * M + ae), ce(be + de.ty0 - de.by / 2 + M)), me.select("rect").call(r.setRect, ue(he.text2ShiftX + (he.alignShift - 1) * de.tx2width / 2 + ae), ce(be - de.by / 2 - 1), ue(de.tx2width), ce(de.by + 2))) }) } function G(X, ee) { var re = X.index, oe = X.trace || {}, ue = X.cd[0], ce = X.cd[re] || {}; function de(De) { return De || k(De) && De === 0 } var me = Array.isArray(re) ? function (De, Ee) { var Me = _.castOption(ue, re, De); return de(Me) ? Me : _.extractOption({}, oe, "", Ee) } : function (De, Ee) { return _.extractOption(ce, oe, De, Ee) }; function _e(De, Ee, Me) { var he = me(Ee, Me); de(he) && (X[De] = he) } if (_e("hoverinfo", "hi", "hoverinfo"), _e("bgcolor", "hbg", "hoverlabel.bgcolor"), _e("borderColor", "hbc", "hoverlabel.bordercolor"), _e("fontFamily", "htf", "hoverlabel.font.family"), _e("fontSize", "hts", "hoverlabel.font.size"), _e("fontColor", "htc", "hoverlabel.font.color"), _e("nameLength", "hnl", "hoverlabel.namelength"), _e("textAlign", "hta", "hoverlabel.align"), X.posref = ee === "y" || ee === "closest" && oe.orientation === "h" ? X.xa._offset + (X.x0 + X.x1) / 2 : X.ya._offset + (X.y0 + X.y1) / 2, X.x0 = _.constrain(X.x0, 0, X.xa._length), X.x1 = _.constrain(X.x1, 0, X.xa._length), X.y0 = _.constrain(X.y0, 0, X.ya._length), X.y1 = _.constrain(X.y1, 0, X.ya._length), X.xLabelVal !== void 0 && (X.xLabel = "xLabel" in X ? X.xLabel : s.hoverLabelText(X.xa, X.xLabelVal, oe.xhoverformat), X.xVal = X.xa.c2d(X.xLabelVal)), X.yLabelVal !== void 0 && (X.yLabel = "yLabel" in X ? X.yLabel : s.hoverLabelText(X.ya, X.yLabelVal, oe.yhoverformat), X.yVal = X.ya.c2d(X.yLabelVal)), X.zLabelVal !== void 0 && X.zLabel === void 0 && (X.zLabel = String(X.zLabelVal)), !(isNaN(X.xerr) || X.xa.type === "log" && X.xerr <= 0)) { var Se = s.tickText(X.xa, X.xa.c2l(X.xerr), "hover").text; X.xerrneg !== void 0 ? X.xLabel += " +" + Se + " / -" + s.tickText(X.xa, X.xa.c2l(X.xerrneg), "hover").text : X.xLabel += " ± " + Se, ee === "x" && (X.distance += 1) } if (!(isNaN(X.yerr) || X.ya.type === "log" && X.yerr <= 0)) { var we = s.tickText(X.ya, X.ya.c2l(X.yerr), "hover").text; X.yerrneg !== void 0 ? X.yLabel += " +" + we + " / -" + s.tickText(X.ya, X.ya.c2l(X.yerrneg), "hover").text : X.yLabel += " ± " + we, ee === "y" && (X.distance += 1) } var xe = X.hoverinfo || X.trace.hoverinfo; return xe && xe !== "all" && ((xe = Array.isArray(xe) ? xe : xe.split("+")).indexOf("x") === -1 && (X.xLabel = void 0), xe.indexOf("y") === -1 && (X.yLabel = void 0), xe.indexOf("z") === -1 && (X.zLabel = void 0), xe.indexOf("text") === -1 && (X.text = void 0), xe.indexOf("name") === -1 && (X.name = void 0)), X } function V(X, ee, re) { var oe, ue, ce = re.container, de = re.fullLayout, me = de._size, _e = re.event, Se = !!ee.hLinePoint, we = !!ee.vLinePoint; if (ce.selectAll(".spikeline").remove(), we || Se) { var xe = n.combine(de.plot_bgcolor, de.paper_bgcolor); if (Se) { var De, Ee, Me = ee.hLinePoint; oe = Me && Me.xa, (ue = Me && Me.ya).spikesnap === "cursor" ? (De = _e.pointerX, Ee = _e.pointerY) : (De = oe._offset + Me.x, Ee = ue._offset + Me.y); var he, fe, ae = i.readability(Me.color, xe) < 1.5 ? n.contrast(xe) : Me.color, be = ue.spikemode, Ie = ue.spikethickness, Te = ue.spikecolor || ae, Ne = s.getPxPosition(X, ue); if (be.indexOf("toaxis") !== -1 || be.indexOf("across") !== -1) { if (be.indexOf("toaxis") !== -1 && (he = Ne, fe = De), be.indexOf("across") !== -1) { var qe = ue._counterDomainMin, ve = ue._counterDomainMax; ue.anchor === "free" && (qe = Math.min(qe, ue.position), ve = Math.max(ve, ue.position)), he = me.l + qe * me.w, fe = me.l + ve * me.w } ce.insert("line", ":first-child").attr({ x1: he, x2: fe, y1: Ee, y2: Ee, "stroke-width": Ie, stroke: Te, "stroke-dasharray": r.dashStyle(ue.spikedash, Ie) }).classed("spikeline", !0).classed("crisp", !0), ce.insert("line", ":first-child").attr({ x1: he, x2: fe, y1: Ee, y2: Ee, "stroke-width": Ie + 2, stroke: xe }).classed("spikeline", !0).classed("crisp", !0) } be.indexOf("marker") !== -1 && ce.insert("circle", ":first-child").attr({ cx: Ne + (ue.side !== "right" ? Ie : -Ie), cy: Ee, r: Ie, fill: Te }).classed("spikeline", !0) } if (we) { var Ce, Ae, ze = ee.vLinePoint; oe = ze && ze.xa, ue = ze && ze.ya, oe.spikesnap === "cursor" ? (Ce = _e.pointerX, Ae = _e.pointerY) : (Ce = oe._offset + ze.x, Ae = ue._offset + ze.y); var Ue, Ve, Ye = i.readability(ze.color, xe) < 1.5 ? n.contrast(xe) : ze.color, $e = oe.spikemode, rt = oe.spikethickness, ht = oe.spikecolor || Ye, nt = s.getPxPosition(X, oe); if ($e.indexOf("toaxis") !== -1 || $e.indexOf("across") !== -1) { if ($e.indexOf("toaxis") !== -1 && (Ue = nt, Ve = Ae), $e.indexOf("across") !== -1) { var bt = oe._counterDomainMin, wt = oe._counterDomainMax; oe.anchor === "free" && (bt = Math.min(bt, oe.position), wt = Math.max(wt, oe.position)), Ue = me.t + (1 - wt) * me.h, Ve = me.t + (1 - bt) * me.h } ce.insert("line", ":first-child").attr({ x1: Ce, x2: Ce, y1: Ue, y2: Ve, "stroke-width": rt, stroke: ht, "stroke-dasharray": r.dashStyle(oe.spikedash, rt) }).classed("spikeline", !0).classed("crisp", !0), ce.insert("line", ":first-child").attr({ x1: Ce, x2: Ce, y1: Ue, y2: Ve, "stroke-width": rt + 2, stroke: xe }).classed("spikeline", !0).classed("crisp", !0) } $e.indexOf("marker") !== -1 && ce.insert("circle", ":first-child").attr({ cx: Ce, cy: nt - (oe.side !== "top" ? rt : -rt), r: rt, fill: ht }).classed("spikeline", !0) } } } function j(X, ee) { return !ee || ee.vLinePoint !== X._spikepoints.vLinePoint || ee.hLinePoint !== X._spikepoints.hLinePoint } function W(X, ee) { return t.plainText(X || "", { len: ee, allowedTags: ["br", "sub", "sup", "b", "i", "em"] }) } function Z(X, ee, re) { var oe = ee[X + "a"], ue = ee[X + "Val"], ce = ee.cd[0]; if (oe.type === "category" || oe.type === "multicategory") ue = oe._categoriesMap[ue]; else if (oe.type === "date") { var de = ee.trace[X + "periodalignment"]; if (de) { var me = ee.cd[ee.index], _e = me[X + "Start"]; _e === void 0 && (_e = me[X]); var Se = me[X + "End"]; Se === void 0 && (Se = me[X]); var we = Se - _e; de === "end" ? ue += we : de === "middle" && (ue += we / 2) } ue = oe.d2c(ue) } return ce && ce.t && ce.t.posLetter === oe._id && (re.boxmode !== "group" && re.violinmode !== "group" || (ue += ce.t.dPos)), ue } function ie(X) { return X.offsetTop + X.clientTop } function te(X) { return X.offsetLeft + X.clientLeft } function J(X, ee) { var re = X._fullLayout, oe = ee.getBoundingClientRect(), ue = oe.left, ce = oe.top, de = ue + oe.width, me = ce + oe.height, _e = _.apply3DTransform(re._invTransform)(ue, ce), Se = _.apply3DTransform(re._invTransform)(de, me), we = _e[0], xe = _e[1], De = Se[0], Ee = Se[1]; return { x: we, y: xe, width: De - we, height: Ee - xe, top: Math.min(xe, Ee), left: Math.min(we, De), right: Math.max(we, De), bottom: Math.max(xe, Ee) } } }, 38048: function (R, E, e) { var w = e(71828), k = e(7901), i = e(23469).isUnifiedHover; R.exports = function (_, y, h, l) { l = l || {}; var t = y.legend; function o(r) { l.font[r] || (l.font[r] = t ? y.legend.font[r] : y.font[r]) } y && i(y.hovermode) && (l.font || (l.font = {}), o("size"), o("family"), o("color"), t ? (l.bgcolor || (l.bgcolor = k.combine(y.legend.bgcolor, y.paper_bgcolor)), l.bordercolor || (l.bordercolor = y.legend.bordercolor)) : l.bgcolor || (l.bgcolor = y.paper_bgcolor)), h("hoverlabel.bgcolor", l.bgcolor), h("hoverlabel.bordercolor", l.bordercolor), h("hoverlabel.namelength", l.namelength), w.coerceFont(h, "hoverlabel.font", l.font), h("hoverlabel.align", l.align) } }, 98212: function (R, E, e) { var w = e(71828), k = e(528); R.exports = function (i, _) { function y(h, l) { return _[h] !== void 0 ? _[h] : w.coerce(i, _, k, h, l) } return y("clickmode"), y("hovermode") } }, 30211: function (R, E, e) { var w = e(39898), k = e(71828), i = e(28569), _ = e(23469), y = e(528), h = e(88335); R.exports = { moduleType: "component", name: "fx", constants: e(26675), schema: { layout: y }, attributes: e(77914), layoutAttributes: y, supplyLayoutGlobalDefaults: e(22774), supplyDefaults: e(54268), supplyLayoutDefaults: e(34938), calc: e(30732), getDistanceFunction: _.getDistanceFunction, getClosest: _.getClosest, inbox: _.inbox, quadrature: _.quadrature, appendArrayPointValue: _.appendArrayPointValue, castHoverOption: function (l, t, o) { return k.castOption(l, t, "hoverlabel." + o) }, castHoverinfo: function (l, t, o) { return k.castOption(l, o, "hoverinfo", function (r) { return k.coerceHoverinfo({ hoverinfo: r }, { _module: l._module }, t) }) }, hover: h.hover, unhover: i.unhover, loneHover: h.loneHover, loneUnhover: function (l) { var t = k.isD3Selection(l) ? l : w.select(l); t.selectAll("g.hovertext").remove(), t.selectAll(".spikeline").remove() }, click: e(75914) } }, 528: function (R, E, e) { var w = e(26675), k = e(41940), i = k({ editType: "none" }); i.family.dflt = w.HOVERFONT, i.size.dflt = w.HOVERFONTSIZE, R.exports = { clickmode: { valType: "flaglist", flags: ["event", "select"], dflt: "event", editType: "plot", extras: ["none"] }, dragmode: { valType: "enumerated", values: ["zoom", "pan", "select", "lasso", "drawclosedpath", "drawopenpath", "drawline", "drawrect", "drawcircle", "orbit", "turntable", !1], dflt: "zoom", editType: "modebar" }, hovermode: { valType: "enumerated", values: ["x", "y", "closest", !1, "x unified", "y unified"], dflt: "closest", editType: "modebar" }, hoverdistance: { valType: "integer", min: -1, dflt: 20, editType: "none" }, spikedistance: { valType: "integer", min: -1, dflt: -1, editType: "none" }, hoverlabel: { bgcolor: { valType: "color", editType: "none" }, bordercolor: { valType: "color", editType: "none" }, font: i, grouptitlefont: k({ editType: "none" }), align: { valType: "enumerated", values: ["left", "right", "auto"], dflt: "auto", editType: "none" }, namelength: { valType: "integer", min: -1, dflt: 15, editType: "none" }, editType: "none" }, selectdirection: { valType: "enumerated", values: ["h", "v", "d", "any"], dflt: "any", editType: "none" } } }, 34938: function (R, E, e) { var w = e(71828), k = e(528), i = e(98212), _ = e(38048); R.exports = function (y, h) { function l(n, a) { return w.coerce(y, h, k, n, a) } i(y, h) && (l("hoverdistance"), l("spikedistance")), l("dragmode") === "select" && l("selectdirection"); var t = h._has("mapbox"), o = h._has("geo"), r = h._basePlotModules.length; h.dragmode === "zoom" && ((t || o) && r === 1 || t && o && r === 2) && (h.dragmode = "pan"), _(y, h, l), w.coerceFont(l, "hoverlabel.grouptitlefont", h.hoverlabel.font) } }, 22774: function (R, E, e) { var w = e(71828), k = e(38048), i = e(528); R.exports = function (_, y) { k(_, y, function (h, l) { return w.coerce(_, y, i, h, l) }) } }, 83312: function (R, E, e) { var w = e(71828), k = e(30587).counter, i = e(27670).Y, _ = e(85555).idRegex, y = e(44467), h = { rows: { valType: "integer", min: 1, editType: "plot" }, roworder: { valType: "enumerated", values: ["top to bottom", "bottom to top"], dflt: "top to bottom", editType: "plot" }, columns: { valType: "integer", min: 1, editType: "plot" }, subplots: { valType: "info_array", freeLength: !0, dimensions: 2, items: { valType: "enumerated", values: [k("xy").toString(), ""], editType: "plot" }, editType: "plot" }, xaxes: { valType: "info_array", freeLength: !0, items: { valType: "enumerated", values: [_.x.toString(), ""], editType: "plot" }, editType: "plot" }, yaxes: { valType: "info_array", freeLength: !0, items: { valType: "enumerated", values: [_.y.toString(), ""], editType: "plot" }, editType: "plot" }, pattern: { valType: "enumerated", values: ["independent", "coupled"], dflt: "coupled", editType: "plot" }, xgap: { valType: "number", min: 0, max: 1, editType: "plot" }, ygap: { valType: "number", min: 0, max: 1, editType: "plot" }, domain: i({ name: "grid", editType: "plot", noGridCell: !0 }, {}), xside: { valType: "enumerated", values: ["bottom", "bottom plot", "top plot", "top"], dflt: "bottom plot", editType: "plot" }, yside: { valType: "enumerated", values: ["left", "left plot", "right plot", "right"], dflt: "left plot", editType: "plot" }, editType: "plot" }; function l(r, n, a) { var s = n[a + "axes"], u = Object.keys((r._splomAxes || {})[a] || {}); return Array.isArray(s) ? s : u.length ? u : void 0 } function t(r, n, a, s, u, p) { var c = n(r + "gap", a), b = n("domain." + r); n(r + "side", s); for (var g = new Array(u), f = b[0], v = (b[1] - f) / (u - c), m = v * (1 - c), x = 0; x < u; x++) { var T = f + v * x; g[p ? u - 1 - x : x] = [T, T + m] } return g } function o(r, n, a, s, u) { var p, c = new Array(a); function b(g, f) { n.indexOf(f) !== -1 && s[f] === void 0 ? (c[g] = f, s[f] = g) : c[g] = "" } if (Array.isArray(r)) for (p = 0; p < a; p++)b(p, r[p]); else for (b(0, u), p = 1; p < a; p++)b(p, u + (p + 1)); return c } R.exports = { moduleType: "component", name: "grid", schema: { layout: { grid: h } }, layoutAttributes: h, sizeDefaults: function (r, n) { var a = r.grid || {}, s = l(n, a, "x"), u = l(n, a, "y"); if (r.grid || s || u) { var p, c, b = Array.isArray(a.subplots) && Array.isArray(a.subplots[0]), g = Array.isArray(s), f = Array.isArray(u), v = g && s !== a.xaxes && f && u !== a.yaxes; b ? (p = a.subplots.length, c = a.subplots[0].length) : (f && (p = u.length), g && (c = s.length)); var m = y.newContainer(n, "grid"), x = O("rows", p), T = O("columns", c); if (x * T > 1) { b || g || f || O("pattern") === "independent" && (b = !0), m._hasSubplotGrid = b; var d, M, A = O("roworder") === "top to bottom", C = b ? .2 : .1, P = b ? .3 : .1; v && n._splomGridDflt && (d = n._splomGridDflt.xside, M = n._splomGridDflt.yside), m._domains = { x: t("x", O, C, d, T), y: t("y", O, P, M, x, A) } } else delete n.grid } function O(z, B) { return w.coerce(a, m, h, z, B) } }, contentDefaults: function (r, n) { var a = n.grid; if (a && a._domains) { var s, u, p, c, b, g, f, v = r.grid || {}, m = n._subplots, x = a._hasSubplotGrid, T = a.rows, d = a.columns, M = a.pattern === "independent", A = a._axisMap = {}; if (x) { var C = v.subplots || []; g = a.subplots = new Array(T); var P = 1; for (s = 0; s < T; s++) { var O = g[s] = new Array(d), z = C[s] || []; for (u = 0; u < d; u++)if (M ? (b = P === 1 ? "xy" : "x" + P + "y" + P, P++) : b = z[u], O[u] = "", m.cartesian.indexOf(b) !== -1) { if (f = b.indexOf("y"), p = b.slice(0, f), c = b.slice(f), A[p] !== void 0 && A[p] !== u || A[c] !== void 0 && A[c] !== s) continue; O[u] = b, A[p] = u, A[c] = s } } } else { var B = l(n, v, "x"), Y = l(n, v, "y"); a.xaxes = o(B, m.xaxis, d, A, "x"), a.yaxes = o(Y, m.yaxis, T, A, "y") } var D = a._anchors = {}, G = a.roworder === "top to bottom"; for (var V in A) { var j, W, Z, ie = V.charAt(0), te = a[ie + "side"]; if (te.length < 8) D[V] = "free"; else if (ie === "x") { if (te.charAt(0) === "t" === G ? (j = 0, W = 1, Z = T) : (j = T - 1, W = -1, Z = -1), x) { var J = A[V]; for (s = j; s !== Z; s += W)if ((b = g[s][J]) && (f = b.indexOf("y"), b.slice(0, f) === V)) { D[V] = b.slice(f); break } } else for (s = j; s !== Z; s += W)if (c = a.yaxes[s], m.cartesian.indexOf(V + c) !== -1) { D[V] = c; break } } else if (te.charAt(0) === "l" ? (j = 0, W = 1, Z = d) : (j = d - 1, W = -1, Z = -1), x) { var X = A[V]; for (s = j; s !== Z; s += W)if ((b = g[X][s]) && (f = b.indexOf("y"), b.slice(f) === V)) { D[V] = b.slice(0, f); break } } else for (s = j; s !== Z; s += W)if (p = a.xaxes[s], m.cartesian.indexOf(p + V) !== -1) { D[V] = p; break } } } } } }, 69819: function (R, E, e) { var w = e(85555), k = e(44467).templatedArray; e(24695), R.exports = k("image", { visible: { valType: "boolean", dflt: !0, editType: "arraydraw" }, source: { valType: "string", editType: "arraydraw" }, layer: { valType: "enumerated", values: ["below", "above"], dflt: "above", editType: "arraydraw" }, sizex: { valType: "number", dflt: 0, editType: "arraydraw" }, sizey: { valType: "number", dflt: 0, editType: "arraydraw" }, sizing: { valType: "enumerated", values: ["fill", "contain", "stretch"], dflt: "contain", editType: "arraydraw" }, opacity: { valType: "number", min: 0, max: 1, dflt: 1, editType: "arraydraw" }, x: { valType: "any", dflt: 0, editType: "arraydraw" }, y: { valType: "any", dflt: 0, editType: "arraydraw" }, xanchor: { valType: "enumerated", values: ["left", "center", "right"], dflt: "left", editType: "arraydraw" }, yanchor: { valType: "enumerated", values: ["top", "middle", "bottom"], dflt: "top", editType: "arraydraw" }, xref: { valType: "enumerated", values: ["paper", w.idRegex.x.toString()], dflt: "paper", editType: "arraydraw" }, yref: { valType: "enumerated", values: ["paper", w.idRegex.y.toString()], dflt: "paper", editType: "arraydraw" }, editType: "arraydraw" }) }, 75378: function (R, E, e) { var w = e(92770), k = e(58163); R.exports = function (i, _, y, h) { _ = _ || {}; var l = y === "log" && _.type === "linear", t = y === "linear" && _.type === "log"; if (l || t) { for (var o, r, n = i._fullLayout.images, a = _._id.charAt(0), s = 0; s < n.length; s++)if (r = "images[" + s + "].", (o = n[s])[a + "ref"] === _._id) { var u = o[a], p = o["size" + a], c = null, b = null; if (l) { c = k(u, _.range); var g = p / Math.pow(10, c) / 2; b = 2 * Math.log(g + Math.sqrt(1 + g * g)) / Math.LN10 } else b = (c = Math.pow(10, u)) * (Math.pow(10, p / 2) - Math.pow(10, -p / 2)); w(c) ? w(b) || (b = null) : (c = null, b = null), h(r + a, c), h(r + "size" + a, b) } } } }, 81603: function (R, E, e) { var w = e(71828), k = e(89298), i = e(85501), _ = e(69819); function y(h, l, t) { function o(c, b) { return w.coerce(h, l, _, c, b) } var r = o("source"); if (!o("visible", !!r)) return l; o("layer"), o("xanchor"), o("yanchor"), o("sizex"), o("sizey"), o("sizing"), o("opacity"); for (var n = { _fullLayout: t }, a = ["x", "y"], s = 0; s < 2; s++) { var u = a[s], p = k.coerceRef(h, l, n, u, "paper", void 0); p !== "paper" && k.getFromId(n, p)._imgIndices.push(l._index), k.coercePosition(l, n, o, p, u, 0) } return l } R.exports = function (h, l) { i(h, l, { name: "images", handleItemDefaults: y }) } }, 80750: function (R, E, e) { var w = e(39898), k = e(91424), i = e(89298), _ = e(41675), y = e(77922); R.exports = function (h) { var l, t, o = h._fullLayout, r = [], n = {}, a = []; for (t = 0; t < o.images.length; t++) { var s = o.images[t]; if (s.visible) if (s.layer === "below" && s.xref !== "paper" && s.yref !== "paper") { l = _.ref2id(s.xref) + _.ref2id(s.yref); var u = o._plots[l]; if (!u) { a.push(s); continue } u.mainplot && (l = u.mainplot.id), n[l] || (n[l] = []), n[l].push(s) } else s.layer === "above" ? r.push(s) : a.push(s) } var p = { left: { sizing: "xMin", offset: 0 }, center: { sizing: "xMid", offset: -.5 }, right: { sizing: "xMax", offset: -1 } }, c = { top: { sizing: "YMin", offset: 0 }, middle: { sizing: "YMid", offset: -.5 }, bottom: { sizing: "YMax", offset: -1 } }; function b(d) { var M = w.select(this); if (this._imgSrc !== d.source) if (M.attr("xmlns", y.svg), d.source && d.source.slice(0, 5) === "data:") M.attr("xlink:href", d.source), this._imgSrc = d.source; else { var A = new Promise(function (C) { var P = new Image; function O() { M.remove(), C() } this.img = P, P.setAttribute("crossOrigin", "anonymous"), P.onerror = O, P.onload = function () { var z = document.createElement("canvas"); z.width = this.width, z.height = this.height, z.getContext("2d", { willReadFrequently: !0 }).drawImage(this, 0, 0); var B = z.toDataURL("image/png"); M.attr("xlink:href", B), C() }, M.on("error", O), P.src = d.source, this._imgSrc = d.source }.bind(this)); h._promises.push(A) } } function g(d) { var M, A, C = w.select(this), P = i.getFromId(h, d.xref), O = i.getFromId(h, d.yref), z = i.getRefType(d.xref) === "domain", B = i.getRefType(d.yref) === "domain", Y = o._size; M = P !== void 0 ? typeof d.xref == "string" && z ? P._length * d.sizex : Math.abs(P.l2p(d.sizex) - P.l2p(0)) : d.sizex * Y.w, A = O !== void 0 ? typeof d.yref == "string" && B ? O._length * d.sizey : Math.abs(O.l2p(d.sizey) - O.l2p(0)) : d.sizey * Y.h; var D, G, V = M * p[d.xanchor].offset, j = A * c[d.yanchor].offset, W = p[d.xanchor].sizing + c[d.yanchor].sizing; switch (D = P !== void 0 ? typeof d.xref == "string" && z ? P._length * d.x + P._offset : P.r2p(d.x) + P._offset : d.x * Y.w + Y.l, D += V, G = O !== void 0 ? typeof d.yref == "string" && B ? O._length * (1 - d.y) + O._offset : O.r2p(d.y) + O._offset : Y.h - d.y * Y.h + Y.t, G += j, d.sizing) { case "fill": W += " slice"; break; case "stretch": W = "none" }C.attr({ x: D, y: G, width: M, height: A, preserveAspectRatio: W, opacity: d.opacity }); var Z = (P && i.getRefType(d.xref) !== "domain" ? P._id : "") + (O && i.getRefType(d.yref) !== "domain" ? O._id : ""); k.setClipUrl(C, Z ? "clip" + o._uid + Z : null, h) } var f = o._imageLowerLayer.selectAll("image").data(a), v = o._imageUpperLayer.selectAll("image").data(r); f.enter().append("image"), v.enter().append("image"), f.exit().remove(), v.exit().remove(), f.each(function (d) { b.bind(this)(d), g.bind(this)(d) }), v.each(function (d) { b.bind(this)(d), g.bind(this)(d) }); var m = Object.keys(o._plots); for (t = 0; t < m.length; t++) { l = m[t]; var x = o._plots[l]; if (x.imagelayer) { var T = x.imagelayer.selectAll("image").data(n[l] || []); T.enter().append("image"), T.exit().remove(), T.each(function (d) { b.bind(this)(d), g.bind(this)(d) }) } } } }, 68804: function (R, E, e) { R.exports = { moduleType: "component", name: "images", layoutAttributes: e(69819), supplyLayoutDefaults: e(81603), includeBasePlot: e(76325)("images"), draw: e(80750), convertCoords: e(75378) } }, 33030: function (R, E, e) { var w = e(41940), k = e(22399); R.exports = { _isSubplotObj: !0, visible: { valType: "boolean", dflt: !0, editType: "legend" }, bgcolor: { valType: "color", editType: "legend" }, bordercolor: { valType: "color", dflt: k.defaultLine, editType: "legend" }, borderwidth: { valType: "number", min: 0, dflt: 0, editType: "legend" }, font: w({ editType: "legend" }), grouptitlefont: w({ editType: "legend" }), orientation: { valType: "enumerated", values: ["v", "h"], dflt: "v", editType: "legend" }, traceorder: { valType: "flaglist", flags: ["reversed", "grouped"], extras: ["normal"], editType: "legend" }, tracegroupgap: { valType: "number", min: 0, dflt: 10, editType: "legend" }, entrywidth: { valType: "number", min: 0, editType: "legend" }, entrywidthmode: { valType: "enumerated", values: ["fraction", "pixels"], dflt: "pixels", editType: "legend" }, itemsizing: { valType: "enumerated", values: ["trace", "constant"], dflt: "trace", editType: "legend" }, itemwidth: { valType: "number", min: 30, dflt: 30, editType: "legend" }, itemclick: { valType: "enumerated", values: ["toggle", "toggleothers", !1], dflt: "toggle", editType: "legend" }, itemdoubleclick: { valType: "enumerated", values: ["toggle", "toggleothers", !1], dflt: "toggleothers", editType: "legend" }, groupclick: { valType: "enumerated", values: ["toggleitem", "togglegroup"], dflt: "togglegroup", editType: "legend" }, x: { valType: "number", editType: "legend" }, xref: { valType: "enumerated", dflt: "paper", values: ["container", "paper"], editType: "layoutstyle" }, xanchor: { valType: "enumerated", values: ["auto", "left", "center", "right"], dflt: "left", editType: "legend" }, y: { valType: "number", editType: "legend" }, yref: { valType: "enumerated", dflt: "paper", values: ["container", "paper"], editType: "layoutstyle" }, yanchor: { valType: "enumerated", values: ["auto", "top", "middle", "bottom"], editType: "legend" }, uirevision: { valType: "any", editType: "none" }, valign: { valType: "enumerated", values: ["top", "middle", "bottom"], dflt: "middle", editType: "legend" }, title: { text: { valType: "string", dflt: "", editType: "legend" }, font: w({ editType: "legend" }), side: { valType: "enumerated", values: ["top", "left", "top left"], editType: "legend" }, editType: "legend" }, editType: "legend" } }, 14928: function (R) { R.exports = { scrollBarWidth: 6, scrollBarMinHeight: 20, scrollBarColor: "#808BA4", scrollBarMargin: 4, scrollBarEnterAttrs: { rx: 20, ry: 3, width: 0, height: 0 }, titlePad: 2, itemGap: 5 } }, 99017: function (R, E, e) { var w = e(73972), k = e(71828), i = e(44467), _ = e(9012), y = e(33030), h = e(10820), l = e(10130); function t(o, r, n, a) { var s = r[o] || {}, u = i.newContainer(n, o); function p(G, V) { return k.coerce(s, u, y, G, V) } var c = k.coerceFont(p, "font", n.font); if (p("bgcolor", n.paper_bgcolor), p("bordercolor"), p("visible")) { for (var b, g = function (G, V) { var j = b._input, W = b; return k.coerce(j, W, _, G, V) }, f = n.font || {}, v = k.coerceFont(p, "grouptitlefont", k.extendFlat({}, f, { size: Math.round(1.1 * f.size) })), m = 0, x = !1, T = "normal", d = 0; d < a.length; d++)(b = a[d]).visible && ((b.showlegend || b._dfltShowLegend && !(b._module && b._module.attributes && b._module.attributes.showlegend && b._module.attributes.showlegend.dflt === !1)) && (m++, b.showlegend && (x = !0, (w.traceIs(b, "pie-like") || b._input.showlegend === !0) && m++), k.coerceFont(g, "legendgrouptitle.font", v)), (w.traceIs(b, "bar") && n.barmode === "stack" || ["tonextx", "tonexty"].indexOf(b.fill) !== -1) && (T = l.isGrouped({ traceorder: T }) ? "grouped+reversed" : "reversed"), b.legendgroup !== void 0 && b.legendgroup !== "" && (T = l.isReversed({ traceorder: T }) ? "reversed+grouped" : "grouped")); var M = k.coerce(r, n, h, "showlegend", x && m > 1); if (M === !1 && (n.legend = void 0), (M !== !1 || s.uirevision) && (p("uirevision", n.uirevision), M !== !1)) { p("borderwidth"); var A, C, P, O = p("orientation") === "h", z = p("yref") === "paper", B = p("xref") === "paper", Y = "left"; if (O ? (A = 0, w.getComponentMethod("rangeslider", "isVisible")(r.xaxis) ? z ? (C = 1.1, P = "bottom") : (C = 1, P = "top") : z ? (C = -.1, P = "top") : (C = 0, P = "bottom")) : (C = 1, P = "auto", B ? A = 1.02 : (A = 1, Y = "right")), k.coerce(s, u, { x: { valType: "number", editType: "legend", min: B ? -2 : 0, max: B ? 3 : 1, dflt: A } }, "x"), k.coerce(s, u, { y: { valType: "number", editType: "legend", min: z ? -2 : 0, max: z ? 3 : 1, dflt: C } }, "y"), p("traceorder", T), l.isGrouped(n.legend) && p("tracegroupgap"), p("entrywidth"), p("entrywidthmode"), p("itemsizing"), p("itemwidth"), p("itemclick"), p("itemdoubleclick"), p("groupclick"), p("xanchor", Y), p("yanchor", P), p("valign"), k.noneOrAll(s, u, ["x", "y"]), p("title.text")) { p("title.side", O ? "left" : "top"); var D = k.extendFlat({}, c, { size: k.bigFont(c.size) }); k.coerceFont(p, "title.font", D) } } } } R.exports = function (o, r, n) { var a, s = ["legend"]; for (a = 0; a < n.length; a++)k.pushUnique(s, n[a].legend); for (r._legends = [], a = 0; a < s.length; a++) { var u = s[a]; t(u, o, r, n), r[u] && r[u].visible && (r[u]._id = u), r._legends.push(u) } } }, 43969: function (R, E, e) { var w = e(39898), k = e(71828), i = e(74875), _ = e(73972), y = e(11086), h = e(28569), l = e(91424), t = e(7901), o = e(63893), r = e(85167), n = e(14928), a = e(18783), s = a.LINE_SPACING, u = a.FROM_TL, p = a.FROM_BR, c = e(82424), b = e(53630), g = e(10130), f = 1, v = /^legend[0-9]*$/; function m(B, Y) { var D, G, V = Y || {}, j = B._fullLayout, W = z(V), Z = V._inHover; if (Z ? (G = V.layer, D = "hover") : (G = j._infolayer, D = W), G) { var ie; if (D += j._uid, B._legendMouseDownTime || (B._legendMouseDownTime = 0), Z) { if (!V.entries) return; ie = c(V.entries, V) } else { if (!B.calcdata) return; ie = j.showlegend && c(B.calcdata, V, j._legends.length > 1) } var te = j.hiddenlabels || []; if (!(Z || j.showlegend && ie.length)) return G.selectAll("." + W).remove(), j._topdefs.select("#" + D).remove(), i.autoMargin(B, W); var J = k.ensureSingle(G, "g", W, function (_e) { Z || _e.attr("pointer-events", "all") }), X = k.ensureSingleById(j._topdefs, "clipPath", D, function (_e) { _e.append("rect") }), ee = k.ensureSingle(J, "rect", "bg", function (_e) { _e.attr("shape-rendering", "crispEdges") }); ee.call(t.stroke, V.bordercolor).call(t.fill, V.bgcolor).style("stroke-width", V.borderwidth + "px"); var re = k.ensureSingle(J, "g", "scrollbox"), oe = V.title; if (V._titleWidth = 0, V._titleHeight = 0, oe.text) { var ue = k.ensureSingle(re, "text", W + "titletext"); ue.attr("text-anchor", "start").call(l.font, oe.font).text(oe.text), C(ue, re, B, V, f) } else re.selectAll("." + W + "titletext").remove(); var ce = k.ensureSingle(J, "rect", "scrollbar", function (_e) { _e.attr(n.scrollBarEnterAttrs).call(t.fill, n.scrollBarColor) }), de = re.selectAll("g.groups").data(ie); de.enter().append("g").attr("class", "groups"), de.exit().remove(); var me = de.selectAll("g.traces").data(k.identity); me.enter().append("g").attr("class", "traces"), me.exit().remove(), me.style("opacity", function (_e) { var Se = _e[0].trace; return _.traceIs(Se, "pie-like") ? te.indexOf(_e[0].label) !== -1 ? .5 : 1 : Se.visible === "legendonly" ? .5 : 1 }).each(function () { w.select(this).call(d, B, V) }).call(b, B, V).each(function () { Z || w.select(this).call(A, B, W) }), k.syncOrAsync([i.previousPromises, function () { return function (_e, Se, we, xe) { var De = _e._fullLayout, Ee = z(xe); xe || (xe = De[Ee]); var Me = De._size, he = g.isVertical(xe), fe = g.isGrouped(xe), ae = xe.entrywidthmode === "fraction", be = xe.borderwidth, Ie = 2 * be, Te = n.itemGap, Ne = xe.itemwidth + 2 * Te, qe = 2 * (be + Te), ve = O(xe), Ce = xe.y < 0 || xe.y === 0 && ve === "top", Ae = xe.y > 1 || xe.y === 1 && ve === "bottom", ze = xe.tracegroupgap, Ue = {}; xe._maxHeight = Math.max(Ce || Ae ? De.height / 2 : Me.h, 30); var Ve = 0; xe._width = 0, xe._height = 0; var Ye = function (Be) { var je = 0, at = 0, ot = Be.title.side; return ot && (ot.indexOf("left") !== -1 && (je = Be._titleWidth), ot.indexOf("top") !== -1 && (at = Be._titleHeight)), [je, at] }(xe); if (he) we.each(function (Be) { var je = Be[0].height; l.setTranslate(this, be + Ye[0], be + Ye[1] + xe._height + je / 2 + Te), xe._height += je, xe._width = Math.max(xe._width, Be[0].width) }), Ve = Ne + xe._width, xe._width += Te + Ne + Ie, xe._height += qe, fe && (Se.each(function (Be, je) { l.setTranslate(this, 0, je * xe.tracegroupgap) }), xe._height += (xe._lgroupsLength - 1) * xe.tracegroupgap); else { var $e = P(xe), rt = xe.x < 0 || xe.x === 0 && $e === "right", ht = xe.x > 1 || xe.x === 1 && $e === "left", nt = Ae || Ce, bt = De.width / 2; xe._maxWidth = Math.max(rt ? nt && $e === "left" ? Me.l + Me.w : bt : ht ? nt && $e === "right" ? Me.r + Me.w : bt : Me.w, 2 * Ne); var wt = 0, ut = 0; we.each(function (Be) { var je = x(Be, xe, Ne); wt = Math.max(wt, je), ut += je }), Ve = null; var lt = 0; if (fe) { var Tt = 0, Et = 0, St = 0; Se.each(function () { var Be = 0, je = 0; w.select(this).selectAll("g.traces").each(function (ot) { var xt = x(ot, xe, Ne), yt = ot[0].height; l.setTranslate(this, Ye[0], Ye[1] + be + Te + yt / 2 + je), je += yt, Be = Math.max(Be, xt), Ue[ot[0].trace.legendgroup] = Be }); var at = Be + Te; Et > 0 && at + be + Et > xe._maxWidth ? (lt = Math.max(lt, Et), Et = 0, St += Tt + ze, Tt = je) : Tt = Math.max(Tt, je), l.setTranslate(this, Et, St), Et += at }), xe._width = Math.max(lt, Et) + be, xe._height = St + Tt + qe } else { var Ft = we.size(), zt = ut + Ie + (Ft - 1) * Te < xe._maxWidth, Je = 0, et = 0, Ze = 0, Qe = 0; we.each(function (Be) { var je = Be[0].height, at = x(Be, xe, Ne), ot = zt ? at : wt; ae || (ot += Te), ot + be + et - Te >= xe._maxWidth && (lt = Math.max(lt, Qe), et = 0, Ze += Je, xe._height += Je, Je = 0), l.setTranslate(this, Ye[0] + be + et, Ye[1] + be + Ze + je / 2 + Te), Qe = et + at + Te, et += ot, Je = Math.max(Je, je) }), zt ? (xe._width = et + Ie, xe._height = Je + qe) : (xe._width = Math.max(lt, Qe) + Ie, xe._height += Je + qe) } } xe._width = Math.ceil(Math.max(xe._width + Ye[0], xe._titleWidth + 2 * (be + n.titlePad))), xe._height = Math.ceil(Math.max(xe._height + Ye[1], xe._titleHeight + 2 * (be + n.itemGap))), xe._effHeight = Math.min(xe._height, xe._maxHeight); var st = _e._context.edits, ft = st.legendText || st.legendPosition; we.each(function (Be) { var je = w.select(this).select("." + Ee + "toggle"), at = Be[0].height, ot = Be[0].trace.legendgroup, xt = x(Be, xe, Ne); fe && ot !== "" && (xt = Ue[ot]); var yt = ft ? Ne : Ve || xt; he || ae || (yt += Te / 2), l.setRect(je, 0, -at / 2, yt, at) }) }(B, de, me, V) }, function () { var _e, Se, we, xe, De = j._size, Ee = V.borderwidth, Me = V.xref === "paper", he = V.yref === "paper"; if (!Z) { var fe, ae; fe = Me ? De.l + De.w * V.x - u[P(V)] * V._width : j.width * V.x - u[P(V)] * V._width, ae = he ? De.t + De.h * (1 - V.y) - u[O(V)] * V._effHeight : j.height * (1 - V.y) - u[O(V)] * V._effHeight; var be = function (nt, bt, wt, ut) { var lt = nt._fullLayout, Tt = lt[bt], Et = P(Tt), St = O(Tt), Ft = Tt.xref === "paper", zt = Tt.yref === "paper"; nt._fullLayout._reservedMargin[bt] = {}; var Je = Tt.y < .5 ? "b" : "t", et = Tt.x < .5 ? "l" : "r", Ze = { r: lt.width - wt, l: wt + Tt._width, b: lt.height - ut, t: ut + Tt._effHeight }; if (Ft && zt) return i.autoMargin(nt, bt, { x: Tt.x, y: Tt.y, l: Tt._width * u[Et], r: Tt._width * p[Et], b: Tt._effHeight * p[St], t: Tt._effHeight * u[St] }); Ft ? nt._fullLayout._reservedMargin[bt][Je] = Ze[Je] : zt || Tt.orientation === "v" ? nt._fullLayout._reservedMargin[bt][et] = Ze[et] : nt._fullLayout._reservedMargin[bt][Je] = Ze[Je] }(B, W, fe, ae); if (be) return; if (j.margin.autoexpand) { var Ie = fe, Te = ae; fe = Me ? k.constrain(fe, 0, j.width - V._width) : Ie, ae = he ? k.constrain(ae, 0, j.height - V._effHeight) : Te, fe !== Ie && k.log("Constrain " + W + ".x to make legend fit inside graph"), ae !== Te && k.log("Constrain " + W + ".y to make legend fit inside graph") } l.setTranslate(J, fe, ae) } if (ce.on(".drag", null), J.on("wheel", null), Z || V._height <= V._maxHeight || B._context.staticPlot) { var Ne = V._effHeight; Z && (Ne = V._height), ee.attr({ width: V._width - Ee, height: Ne - Ee, x: Ee / 2, y: Ee / 2 }), l.setTranslate(re, 0, 0), X.select("rect").attr({ width: V._width - 2 * Ee, height: Ne - 2 * Ee, x: Ee, y: Ee }), l.setClipUrl(re, D, B), l.setRect(ce, 0, 0, 0, 0), delete V._scrollY } else { var qe, ve, Ce, Ae = Math.max(n.scrollBarMinHeight, V._effHeight * V._effHeight / V._height), ze = V._effHeight - Ae - 2 * n.scrollBarMargin, Ue = V._height - V._effHeight, Ve = ze / Ue, Ye = Math.min(V._scrollY || 0, Ue); ee.attr({ width: V._width - 2 * Ee + n.scrollBarWidth + n.scrollBarMargin, height: V._effHeight - Ee, x: Ee / 2, y: Ee / 2 }), X.select("rect").attr({ width: V._width - 2 * Ee + n.scrollBarWidth + n.scrollBarMargin, height: V._effHeight - 2 * Ee, x: Ee, y: Ee + Ye }), l.setClipUrl(re, D, B), ht(Ye, Ae, Ve), J.on("wheel", function () { ht(Ye = k.constrain(V._scrollY + w.event.deltaY / ze * Ue, 0, Ue), Ae, Ve), Ye !== 0 && Ye !== Ue && w.event.preventDefault() }); var $e = w.behavior.drag().on("dragstart", function () { var nt = w.event.sourceEvent; qe = nt.type === "touchstart" ? nt.changedTouches[0].clientY : nt.clientY, Ce = Ye }).on("drag", function () { var nt = w.event.sourceEvent; nt.buttons === 2 || nt.ctrlKey || (ve = nt.type === "touchmove" ? nt.changedTouches[0].clientY : nt.clientY, Ye = function (bt, wt, ut) { var lt = (ut - wt) / Ve + bt; return k.constrain(lt, 0, Ue) }(Ce, qe, ve), ht(Ye, Ae, Ve)) }); ce.call($e); var rt = w.behavior.drag().on("dragstart", function () { var nt = w.event.sourceEvent; nt.type === "touchstart" && (qe = nt.changedTouches[0].clientY, Ce = Ye) }).on("drag", function () { var nt = w.event.sourceEvent; nt.type === "touchmove" && (ve = nt.changedTouches[0].clientY, Ye = function (bt, wt, ut) { var lt = (wt - ut) / Ve + bt; return k.constrain(lt, 0, Ue) }(Ce, qe, ve), ht(Ye, Ae, Ve)) }); re.call(rt) } function ht(nt, bt, wt) { V._scrollY = B._fullLayout[W]._scrollY = nt, l.setTranslate(re, 0, -nt), l.setRect(ce, V._width, n.scrollBarMargin + nt * wt, n.scrollBarWidth, bt), X.select("rect").attr("y", Ee + nt) } B._context.edits.legendPosition && (J.classed("cursor-move", !0), h.init({ element: J.node(), gd: B, prepFn: function () { var nt = l.getTranslate(J); we = nt.x, xe = nt.y }, moveFn: function (nt, bt) { var wt = we + nt, ut = xe + bt; l.setTranslate(J, wt, ut), _e = h.align(wt, V._width, De.l, De.l + De.w, V.xanchor), Se = h.align(ut + V._height, -V._height, De.t + De.h, De.t, V.yanchor) }, doneFn: function () { if (_e !== void 0 && Se !== void 0) { var nt = {}; nt[W + ".x"] = _e, nt[W + ".y"] = Se, _.call("_guiRelayout", B, nt) } }, clickFn: function (nt, bt) { var wt = G.selectAll("g.traces").filter(function () { var ut = this.getBoundingClientRect(); return bt.clientX >= ut.left && bt.clientX <= ut.right && bt.clientY >= ut.top && bt.clientY <= ut.bottom }); wt.size() > 0 && T(B, J, wt, nt, bt) } })) }], B) } } function x(B, Y, D) { var G = B[0], V = G.width, j = Y.entrywidthmode, W = G.trace.legendwidth || Y.entrywidth; return j === "fraction" ? Y._maxWidth * W : D + (W || V) } function T(B, Y, D, G, V) { var j = D.data()[0][0].trace, W = { event: V, node: D.node(), curveNumber: j.index, expandedIndex: j._expandedIndex, data: B.data, layout: B.layout, frames: B._transitionData._frames, config: B._context, fullData: B._fullData, fullLayout: B._fullLayout }; j._group && (W.group = j._group), _.traceIs(j, "pie-like") && (W.label = D.datum()[0].label), y.triggerHandler(B, "plotly_legendclick", W) !== !1 && (G === 1 ? Y._clickTimeout = setTimeout(function () { B._fullLayout && r(D, B, G) }, B._context.doubleClickDelay) : G === 2 && (Y._clickTimeout && clearTimeout(Y._clickTimeout), B._legendMouseDownTime = 0, y.triggerHandler(B, "plotly_legenddoubleclick", W) !== !1 && r(D, B, G))) } function d(B, Y, D) { var G, V, j = z(D), W = B.data()[0][0], Z = W.trace, ie = _.traceIs(Z, "pie-like"), te = !D._inHover && Y._context.edits.legendText && !ie, J = D._maxNameLength; W.groupTitle ? (G = W.groupTitle.text, V = W.groupTitle.font) : (V = D.font, D.entries ? G = W.text : (G = ie ? W.label : Z.name, Z._meta && (G = k.templateString(G, Z._meta)))); var X = k.ensureSingle(B, "text", j + "text"); X.attr("text-anchor", "start").call(l.font, V).text(te ? M(G, J) : G); var ee = D.itemwidth + 2 * n.itemGap; o.positionText(X, ee, 0), te ? X.call(o.makeEditable, { gd: Y, text: G }).call(C, B, Y, D).on("edit", function (re) { this.text(M(re, J)).call(C, B, Y, D); var oe = W.trace._fullInput || {}, ue = {}; if (_.hasTransform(oe, "groupby")) { var ce = _.getTransformIndices(oe, "groupby"), de = ce[ce.length - 1], me = k.keyedContainer(oe, "transforms[" + de + "].styles", "target", "value.name"); me.set(W.trace._group, re), ue = me.constructUpdate() } else ue.name = re; return _.call("_guiRestyle", Y, ue, Z.index) }) : C(X, B, Y, D) } function M(B, Y) { var D = Math.max(4, Y); if (B && B.trim().length >= D / 2) return B; for (var G = D - (B = B || "").length; G > 0; G--)B += " "; return B } function A(B, Y, D) { var G, V = Y._context.doubleClickDelay, j = 1, W = k.ensureSingle(B, "rect", D + "toggle", function (Z) { Y._context.staticPlot || Z.style("cursor", "pointer").attr("pointer-events", "all"), Z.call(t.fill, "rgba(0,0,0,0)") }); Y._context.staticPlot || (W.on("mousedown", function () { (G = new Date().getTime()) - Y._legendMouseDownTime < V ? j += 1 : (j = 1, Y._legendMouseDownTime = G) }), W.on("mouseup", function () { if (!Y._dragged && !Y._editing) { var Z = Y._fullLayout[D]; new Date().getTime() - Y._legendMouseDownTime > V && (j = Math.max(j - 1, 1)), T(Y, Z, B, j, w.event) } })) } function C(B, Y, D, G, V) { G._inHover && B.attr("data-notex", !0), o.convertToTspans(B, D, function () { (function (j, W, Z, ie) { var te = j.data()[0][0]; if (Z._inHover || !te || te.trace.showlegend) { var J = j.select("g[class*=math-group]"), X = J.node(), ee = z(Z); Z || (Z = W._fullLayout[ee]); var re, oe, ue = Z.borderwidth, ce = (ie === f ? Z.title.font : te.groupTitle ? te.groupTitle.font : Z.font).size * s; if (X) { var de = l.bBox(X); re = de.height, oe = de.width, ie === f ? l.setTranslate(J, ue, ue + .75 * re) : l.setTranslate(J, 0, .25 * re) } else { var me = "." + ee + (ie === f ? "title" : "") + "text", _e = j.select(me), Se = o.lineCount(_e), we = _e.node(); if (re = ce * Se, oe = we ? l.bBox(we).width : 0, ie === f) Z.title.side === "left" && (oe += 2 * n.itemGap), o.positionText(_e, ue + n.titlePad, ue + ce); else { var xe = 2 * n.itemGap + Z.itemwidth; te.groupTitle && (xe = n.itemGap, oe -= Z.itemwidth), o.positionText(_e, xe, -ce * ((Se - 1) / 2 - .3)) } } ie === f ? (Z._titleWidth = oe, Z._titleHeight = re) : (te.lineHeight = ce, te.height = Math.max(re, 16) + 3, te.width = oe) } else j.remove() })(Y, D, G, V) }) } function P(B) { return k.isRightAnchor(B) ? "right" : k.isCenterAnchor(B) ? "center" : "left" } function O(B) { return k.isBottomAnchor(B) ? "bottom" : k.isMiddleAnchor(B) ? "middle" : "top" } function z(B) { return B._id || "legend" } R.exports = function (B, Y) { if (Y) m(B, Y); else { var D = B._fullLayout, G = D._legends; D._infolayer.selectAll('[class^="legend"]').each(function () { var W = w.select(this), Z = W.attr("class").split(" ")[0]; Z.match(v) && G.indexOf(Z) === -1 && W.remove() }); for (var V = 0; V < G.length; V++) { var j = G[V]; m(B, B._fullLayout[j]) } } } }, 82424: function (R, E, e) { var w = e(73972), k = e(10130); R.exports = function (i, _, y) { var h, l, t = _._inHover, o = k.isGrouped(_), r = k.isReversed(_), n = {}, a = [], s = !1, u = {}, p = 0, c = 0; function b(G, V, j) { if (_.visible !== !1 && (!y || G === _._id)) if (V !== "" && k.isGrouped(_)) a.indexOf(V) === -1 ? (a.push(V), s = !0, n[V] = [j]) : n[V].push(j); else { var W = "~~i" + p; a.push(W), n[W] = [j], p++ } } for (h = 0; h < i.length; h++) { var g = i[h], f = g[0], v = f.trace, m = v.legend, x = v.legendgroup; if (t || v.visible && v.showlegend) if (w.traceIs(v, "pie-like")) for (u[x] || (u[x] = {}), l = 0; l < g.length; l++) { var T = g[l].label; u[x][T] || (b(m, x, { label: T, color: g[l].color, i: g[l].i, trace: v, pts: g[l].pts }), u[x][T] = !0, c = Math.max(c, (T || "").length)) } else b(m, x, f), c = Math.max(c, (v.name || "").length) } if (!a.length) return []; var d = !s || !o, M = []; for (h = 0; h < a.length; h++) { var A = n[a[h]]; d ? M.push(A[0]) : M.push(A) } for (d && (M = [M]), h = 0; h < M.length; h++) { var C = 1 / 0; for (l = 0; l < M[h].length; l++) { var P = M[h][l].trace.legendrank; C > P && (C = P) } M[h][0]._groupMinRank = C, M[h][0]._preGroupSort = h } var O = function (G, V) { return G.trace.legendrank - V.trace.legendrank || G._preSort - V._preSort }; for (M.forEach(function (G, V) { G[0]._preGroupSort = V }), M.sort(function (G, V) { return G[0]._groupMinRank - V[0]._groupMinRank || G[0]._preGroupSort - V[0]._preGroupSort }), h = 0; h < M.length; h++) { M[h].forEach(function (G, V) { G._preSort = V }), M[h].sort(O); var z = M[h][0].trace, B = null; for (l = 0; l < M[h].length; l++) { var Y = M[h][l].trace.legendgrouptitle; if (Y && Y.text) { B = Y, t && (Y.font = _._groupTitleFont); break } } if (r && M[h].reverse(), B) { var D = !1; for (l = 0; l < M[h].length; l++)if (w.traceIs(M[h][l].trace, "pie-like")) { D = !0; break } M[h].unshift({ i: -1, groupTitle: B, noClick: D, trace: { showlegend: z.showlegend, legendgroup: z.legendgroup, visible: _.groupclick === "toggleitem" || z.visible } }) } for (l = 0; l < M[h].length; l++)M[h][l] = [M[h][l]] } return _._lgroupsLength = M.length, _._maxNameLength = c, M } }, 85167: function (R, E, e) { var w = e(71828), k = e(73972), i = !0; R.exports = function (_, y, h) { var l = y._fullLayout; if (!y._dragged && !y._editing) { var t, o = l.legend.itemclick, r = l.legend.itemdoubleclick, n = l.legend.groupclick; if (h === 1 && o === "toggle" && r === "toggleothers" && i && y.data && y._context.showTips && w.notifier(w._(y, "Double-click on legend to isolate one trace"), "long"), i = !1, h === 1 ? t = o : h === 2 && (t = r), t) { var a = n === "togglegroup", s = l.hiddenlabels ? l.hiddenlabels.slice() : [], u = _.data()[0][0]; if (!u.groupTitle || !u.noClick) { var p, c, b, g, f, v = y._fullData, m = u.trace, x = m.legendgroup, T = {}, d = [], M = [], A = []; if (k.traceIs(m, "pie-like")) { var C = u.label, P = s.indexOf(C); t === "toggle" ? P === -1 ? s.push(C) : s.splice(P, 1) : t === "toggleothers" && (s = [], y.calcdata[0].forEach(function (X) { C !== X.label && s.push(X.label) }), y._fullLayout.hiddenlabels && y._fullLayout.hiddenlabels.length === s.length && P === -1 && (s = [])), k.call("_guiRelayout", y, "hiddenlabels", s) } else { var O, z = x && x.length, B = []; if (z) for (p = 0; p < v.length; p++)(O = v[p]).visible && O.legendgroup === x && B.push(p); if (t === "toggle") { var Y; switch (m.visible) { case !0: Y = "legendonly"; break; case !1: Y = !1; break; case "legendonly": Y = !0 }if (z) if (a) for (p = 0; p < v.length; p++)v[p].visible !== !1 && v[p].legendgroup === x && J(v[p], Y); else J(m, Y); else J(m, Y) } else if (t === "toggleothers") { var D, G, V, j, W = !0; for (p = 0; p < v.length; p++)if (D = v[p] === m, V = v[p].showlegend !== !0, !(D || V || (G = z && v[p].legendgroup === x) || v[p].visible !== !0 || k.traceIs(v[p], "notLegendIsolatable"))) { W = !1; break } for (p = 0; p < v.length; p++)if (v[p].visible !== !1 && !k.traceIs(v[p], "notLegendIsolatable")) switch (m.visible) { case "legendonly": J(v[p], !0); break; case !0: j = !!W || "legendonly", D = v[p] === m, V = v[p].showlegend !== !0 && !v[p].legendgroup, G = D || z && v[p].legendgroup === x, J(v[p], !(!G && !V) || j) } } for (p = 0; p < M.length; p++)if (b = M[p]) { var Z = b.constructUpdate(), ie = Object.keys(Z); for (c = 0; c < ie.length; c++)g = ie[c], (T[g] = T[g] || [])[A[p]] = Z[g] } for (f = Object.keys(T), p = 0; p < f.length; p++)for (g = f[p], c = 0; c < d.length; c++)T[g].hasOwnProperty(c) || (T[g][c] = void 0); k.call("_guiRestyle", y, T, d) } } } } function te(X, ee, re) { var oe = d.indexOf(X), ue = T[ee]; return ue || (ue = T[ee] = []), d.indexOf(X) === -1 && (d.push(X), oe = d.length - 1), ue[oe] = re, oe } function J(X, ee) { if (!u.groupTitle || a) { var re = X._fullInput; if (k.hasTransform(re, "groupby")) { var oe = M[re.index]; if (!oe) { var ue = k.getTransformIndices(re, "groupby"), ce = ue[ue.length - 1]; oe = w.keyedContainer(re, "transforms[" + ce + "].styles", "target", "value.visible"), M[re.index] = oe } var de = oe.get(X._group); de === void 0 && (de = !0), de !== !1 && oe.set(X._group, ee), A[re.index] = te(re.index, "visible", re.visible !== !1) } else { var me = re.visible !== !1 && ee; te(re.index, "visible", me) } } } } }, 10130: function (R, E) { E.isGrouped = function (e) { return (e.traceorder || "").indexOf("grouped") !== -1 }, E.isVertical = function (e) { return e.orientation !== "h" }, E.isReversed = function (e) { return (e.traceorder || "").indexOf("reversed") !== -1 } }, 2199: function (R, E, e) { R.exports = { moduleType: "component", name: "legend", layoutAttributes: e(33030), supplyLayoutDefaults: e(99017), draw: e(43969), style: e(53630) } }, 53630: function (R, E, e) { var w = e(39898), k = e(73972), i = e(71828), _ = i.strTranslate, y = e(91424), h = e(7901), l = e(52075).extractOpts, t = e(34098), o = e(63463), r = e(53581).castOption, n = e(14928); function a(p, c) { return (c ? "radial" : "horizontal") + (p ? "" : "reversed") } function s(p) { var c = p[0].trace, b = c.contours, g = t.hasLines(c), f = t.hasMarkers(c), v = c.visible && c.fill && c.fill !== "none", m = !1, x = !1; if (b) { var T = b.coloring; T === "lines" ? m = !0 : g = T === "none" || T === "heatmap" || b.showlines, b.type === "constraint" ? v = b._operation !== "=" : T !== "fill" && T !== "heatmap" || (x = !0) } return { showMarker: f, showLine: g, showFill: v, showGradientLine: m, showGradientFill: x, anyLine: g || m, anyFill: v || x } } function u(p, c, b) { return p && i.isArrayOrTypedArray(p) ? c : p > b ? b : p } R.exports = function (p, c, b) { var g = c._fullLayout; b || (b = g.legend); var f = b.itemsizing === "constant", v = b.itemwidth, m = (v + 2 * n.itemGap) / 2, x = _(m, 0), T = function (A, C, P, O) { var z; if (A + 1) z = A; else { if (!(C && C.width > 0)) return 0; z = C.width } return f ? O : Math.min(z, P) }; function d(A, C, P) { var O = A[0].trace, z = O.marker || {}, B = z.line || {}, Y = P ? O.visible && O.type === P : k.traceIs(O, "bar"), D = w.select(C).select("g.legendpoints").selectAll("path.legend" + P).data(Y ? [A] : []); D.enter().append("path").classed("legend" + P, !0).attr("d", "M6,6H-6V-6H6Z").attr("transform", x), D.exit().remove(), D.each(function (G) { var V = w.select(this), j = G[0], W = T(j.mlw, z.line, 5, 2); V.style("stroke-width", W + "px"); var Z = j.mcc; if (!b._inHover && "mc" in j) { var ie = l(z), te = ie.mid; te === void 0 && (te = (ie.max + ie.min) / 2), Z = y.tryColorscale(z, "")(te) } var J = Z || j.mc || z.color, X = z.pattern, ee = X && y.getPatternAttr(X.shape, 0, ""); if (ee) { var re = y.getPatternAttr(X.bgcolor, 0, null), oe = y.getPatternAttr(X.fgcolor, 0, null), ue = X.fgopacity, ce = u(X.size, 8, 10), de = u(X.solidity, .5, 1), me = "legend-" + O.uid; V.call(y.pattern, "legend", c, me, ee, ce, de, Z, X.fillmode, re, oe, ue) } else V.call(h.fill, J); W && h.stroke(V, j.mlc || B.color) }) } function M(A, C, P) { var O = A[0], z = O.trace, B = P ? z.visible && z.type === P : k.traceIs(z, P), Y = w.select(C).select("g.legendpoints").selectAll("path.legend" + P).data(B ? [A] : []); if (Y.enter().append("path").classed("legend" + P, !0).attr("d", "M6,6H-6V-6H6Z").attr("transform", x), Y.exit().remove(), Y.size()) { var D = z.marker || {}, G = T(r(D.line.width, O.pts), D.line, 5, 2), V = "pieLike", j = i.minExtend(z, { marker: { line: { width: G } } }, V), W = i.minExtend(O, { trace: j }, V); o(Y, W, j, c) } } p.each(function (A) { var C = w.select(this), P = i.ensureSingle(C, "g", "layers"); P.style("opacity", A[0].trace.opacity); var O = b.valign, z = A[0].lineHeight, B = A[0].height; if (O !== "middle" && z && B) { var Y = { top: 1, bottom: -1 }[O] * (.5 * (z - B + 3)); P.attr("transform", _(0, Y)) } else P.attr("transform", null); P.selectAll("g.legendfill").data([A]).enter().append("g").classed("legendfill", !0), P.selectAll("g.legendlines").data([A]).enter().append("g").classed("legendlines", !0); var D = P.selectAll("g.legendsymbols").data([A]); D.enter().append("g").classed("legendsymbols", !0), D.selectAll("g.legendpoints").data([A]).enter().append("g").classed("legendpoints", !0) }).each(function (A) { var C, P = A[0].trace, O = []; if (P.visible) switch (P.type) { case "histogram2d": case "heatmap": O = [["M-15,-2V4H15V-2Z"]], C = !0; break; case "choropleth": case "choroplethmapbox": O = [["M-6,-6V6H6V-6Z"]], C = !0; break; case "densitymapbox": O = [["M-6,0 a6,6 0 1,0 12,0 a 6,6 0 1,0 -12,0"]], C = "radial"; break; case "cone": O = [["M-6,2 A2,2 0 0,0 -6,6 V6L6,4Z"], ["M-6,-6 A2,2 0 0,0 -6,-2 L6,-4Z"], ["M-6,-2 A2,2 0 0,0 -6,2 L6,0Z"]], C = !1; break; case "streamtube": O = [["M-6,2 A2,2 0 0,0 -6,6 H6 A2,2 0 0,1 6,2 Z"], ["M-6,-6 A2,2 0 0,0 -6,-2 H6 A2,2 0 0,1 6,-6 Z"], ["M-6,-2 A2,2 0 0,0 -6,2 H6 A2,2 0 0,1 6,-2 Z"]], C = !1; break; case "surface": O = [["M-6,-6 A2,3 0 0,0 -6,0 H6 A2,3 0 0,1 6,-6 Z"], ["M-6,1 A2,3 0 0,1 -6,6 H6 A2,3 0 0,0 6,0 Z"]], C = !0; break; case "mesh3d": O = [["M-6,6H0L-6,-6Z"], ["M6,6H0L6,-6Z"], ["M-6,-6H6L0,6Z"]], C = !1; break; case "volume": O = [["M-6,6H0L-6,-6Z"], ["M6,6H0L6,-6Z"], ["M-6,-6H6L0,6Z"]], C = !0; break; case "isosurface": O = [["M-6,6H0L-6,-6Z"], ["M6,6H0L6,-6Z"], ["M-6,-6 A12,24 0 0,0 6,-6 L0,6Z"]], C = !1 }var z = w.select(this).select("g.legendpoints").selectAll("path.legend3dandfriends").data(O); z.enter().append("path").classed("legend3dandfriends", !0).attr("transform", x).style("stroke-miterlimit", 1), z.exit().remove(), z.each(function (B, Y) { var D, G = w.select(this), V = l(P), j = V.colorscale, W = V.reversescale; if (j) { if (!C) { var Z = j.length; D = Y === 0 ? j[W ? Z - 1 : 0][1] : Y === 1 ? j[W ? 0 : Z - 1][1] : j[Math.floor((Z - 1) / 2)][1] } } else { var ie = P.vertexcolor || P.facecolor || P.color; D = i.isArrayOrTypedArray(ie) ? ie[Y] || ie[0] : ie } G.attr("d", B[0]), D ? G.call(h.fill, D) : G.call(function (te) { if (te.size()) { var J = "legendfill-" + P.uid; y.gradient(te, c, J, a(W, C === "radial"), j, "fill") } }) }) }).each(function (A) { var C = A[0].trace, P = C.type === "waterfall"; if (A[0]._distinct && P) { var O = A[0].trace[A[0].dir].marker; return A[0].mc = O.color, A[0].mlw = O.line.width, A[0].mlc = O.line.color, d(A, this, "waterfall") } var z = []; C.visible && P && (z = A[0].hasTotals ? [["increasing", "M-6,-6V6H0Z"], ["totals", "M6,6H0L-6,-6H-0Z"], ["decreasing", "M6,6V-6H0Z"]] : [["increasing", "M-6,-6V6H6Z"], ["decreasing", "M6,6V-6H-6Z"]]); var B = w.select(this).select("g.legendpoints").selectAll("path.legendwaterfall").data(z); B.enter().append("path").classed("legendwaterfall", !0).attr("transform", x).style("stroke-miterlimit", 1), B.exit().remove(), B.each(function (Y) { var D = w.select(this), G = C[Y[0]].marker, V = T(void 0, G.line, 5, 2); D.attr("d", Y[1]).style("stroke-width", V + "px").call(h.fill, G.color), V && D.call(h.stroke, G.line.color) }) }).each(function (A) { d(A, this, "funnel") }).each(function (A) { d(A, this) }).each(function (A) { var C = A[0].trace, P = w.select(this).select("g.legendpoints").selectAll("path.legendbox").data(C.visible && k.traceIs(C, "box-violin") ? [A] : []); P.enter().append("path").classed("legendbox", !0).attr("d", "M6,6H-6V-6H6Z").attr("transform", x), P.exit().remove(), P.each(function () { var O = w.select(this); if (C.boxpoints !== "all" && C.points !== "all" || h.opacity(C.fillcolor) !== 0 || h.opacity((C.line || {}).color) !== 0) { var z = T(void 0, C.line, 5, 2); O.style("stroke-width", z + "px").call(h.fill, C.fillcolor), z && h.stroke(O, C.line.color) } else { var B = i.minExtend(C, { marker: { size: f ? 12 : i.constrain(C.marker.size, 2, 16), sizeref: 1, sizemin: 1, sizemode: "diameter" } }); P.call(y.pointStyle, B, c) } }) }).each(function (A) { M(A, this, "funnelarea") }).each(function (A) { M(A, this, "pie") }).each(function (A) { var C, P, O = s(A), z = O.showFill, B = O.showLine, Y = O.showGradientLine, D = O.showGradientFill, G = O.anyFill, V = O.anyLine, j = A[0], W = j.trace, Z = l(W), ie = Z.colorscale, te = Z.reversescale, J = t.hasMarkers(W) || !G ? "M5,0" : V ? "M5,-2" : "M5,-3", X = w.select(this), ee = X.select(".legendfill").selectAll("path").data(z || D ? [A] : []); if (ee.enter().append("path").classed("js-fill", !0), ee.exit().remove(), ee.attr("d", J + "h" + v + "v6h-" + v + "z").call(function (ue) { if (ue.size()) if (z) y.fillGroupStyle(ue, c); else { var ce = "legendfill-" + W.uid; y.gradient(ue, c, ce, a(te), ie, "fill") } }), B || Y) { var re = T(void 0, W.line, 10, 5); P = i.minExtend(W, { line: { width: re } }), C = [i.minExtend(j, { trace: P })] } var oe = X.select(".legendlines").selectAll("path").data(B || Y ? [C] : []); oe.enter().append("path").classed("js-line", !0), oe.exit().remove(), oe.attr("d", J + (Y ? "l" + v + ",0.0001" : "h" + v)).call(B ? y.lineGroupStyle : function (ue) { if (ue.size()) { var ce = "legendline-" + W.uid; y.lineGroupStyle(ue), y.gradient(ue, c, ce, a(te), ie, "stroke") } }) }).each(function (A) { var C, P, O = s(A), z = O.anyFill, B = O.anyLine, Y = O.showLine, D = O.showMarker, G = A[0], V = G.trace, j = !D && !B && !z && t.hasText(V); function W(oe, ue, ce, de) { var me = i.nestedProperty(V, oe).get(), _e = i.isArrayOrTypedArray(me) && ue ? ue(me) : me; if (f && _e && de !== void 0 && (_e = de), ce) { if (_e < ce[0]) return ce[0]; if (_e > ce[1]) return ce[1] } return _e } function Z(oe) { return G._distinct && G.index && oe[G.index] ? oe[G.index] : oe[0] } if (D || j || Y) { var ie = {}, te = {}; if (D) { ie.mc = W("marker.color", Z), ie.mx = W("marker.symbol", Z), ie.mo = W("marker.opacity", i.mean, [.2, 1]), ie.mlc = W("marker.line.color", Z), ie.mlw = W("marker.line.width", i.mean, [0, 5], 2), te.marker = { sizeref: 1, sizemin: 1, sizemode: "diameter" }; var J = W("marker.size", i.mean, [2, 16], 12); ie.ms = J, te.marker.size = J } Y && (te.line = { width: W("line.width", Z, [0, 10], 5) }), j && (ie.tx = "Aa", ie.tp = W("textposition", Z), ie.ts = 10, ie.tc = W("textfont.color", Z), ie.tf = W("textfont.family", Z)), C = [i.minExtend(G, ie)], (P = i.minExtend(V, te)).selectedpoints = null, P.texttemplate = null } var X = w.select(this).select("g.legendpoints"), ee = X.selectAll("path.scatterpts").data(D ? C : []); ee.enter().insert("path", ":first-child").classed("scatterpts", !0).attr("transform", x), ee.exit().remove(), ee.call(y.pointStyle, P, c), D && (C[0].mrc = 3); var re = X.selectAll("g.pointtext").data(j ? C : []); re.enter().append("g").classed("pointtext", !0).append("text").attr("transform", x), re.exit().remove(), re.selectAll("text").call(y.textPointStyle, P, c) }).each(function (A) { var C = A[0].trace, P = w.select(this).select("g.legendpoints").selectAll("path.legendcandle").data(C.visible && C.type === "candlestick" ? [A, A] : []); P.enter().append("path").classed("legendcandle", !0).attr("d", function (O, z) { return z ? "M-15,0H-8M-8,6V-6H8Z" : "M15,0H8M8,-6V6H-8Z" }).attr("transform", x).style("stroke-miterlimit", 1), P.exit().remove(), P.each(function (O, z) { var B = w.select(this), Y = C[z ? "increasing" : "decreasing"], D = T(void 0, Y.line, 5, 2); B.style("stroke-width", D + "px").call(h.fill, Y.fillcolor), D && h.stroke(B, Y.line.color) }) }).each(function (A) { var C = A[0].trace, P = w.select(this).select("g.legendpoints").selectAll("path.legendohlc").data(C.visible && C.type === "ohlc" ? [A, A] : []); P.enter().append("path").classed("legendohlc", !0).attr("d", function (O, z) { return z ? "M-15,0H0M-8,-6V0" : "M15,0H0M8,6V0" }).attr("transform", x).style("stroke-miterlimit", 1), P.exit().remove(), P.each(function (O, z) { var B = w.select(this), Y = C[z ? "increasing" : "decreasing"], D = T(void 0, Y.line, 5, 2); B.style("fill", "none").call(y.dashLine, Y.line.dash, D), D && h.stroke(B, Y.line.color) }) }) } }, 42068: function (R, E, e) { e(93348), R.exports = { editType: "modebar", orientation: { valType: "enumerated", values: ["v", "h"], dflt: "h", editType: "modebar" }, bgcolor: { valType: "color", editType: "modebar" }, color: { valType: "color", editType: "modebar" }, activecolor: { valType: "color", editType: "modebar" }, uirevision: { valType: "any", editType: "none" }, add: { valType: "string", arrayOk: !0, dflt: "", editType: "modebar" }, remove: { valType: "string", arrayOk: !0, dflt: "", editType: "modebar" } } }, 26023: function (R, E, e) { var w = e(73972), k = e(74875), i = e(41675), _ = e(24255), y = e(34031).eraseActiveShape, h = e(71828), l = h._, t = R.exports = {}; function o(g, f) { var v, m, x = f.currentTarget, T = x.getAttribute("data-attr"), d = x.getAttribute("data-val") || !0, M = g._fullLayout, A = {}, C = i.list(g, null, !0), P = M._cartesianSpikesEnabled; if (T === "zoom") { var O, z = d === "in" ? .5 : 2, B = (1 + z) / 2, Y = (1 - z) / 2; for (m = 0; m < C.length; m++)if (!(v = C[m]).fixedrange) if (O = v._name, d === "auto") A[O + ".autorange"] = !0; else if (d === "reset") { if (v._rangeInitial === void 0) A[O + ".autorange"] = !0; else { var D = v._rangeInitial.slice(); A[O + ".range[0]"] = D[0], A[O + ".range[1]"] = D[1] } v._showSpikeInitial !== void 0 && (A[O + ".showspikes"] = v._showSpikeInitial, P !== "on" || v._showSpikeInitial || (P = "off")) } else { var G = [v.r2l(v.range[0]), v.r2l(v.range[1])], V = [B * G[0] + Y * G[1], B * G[1] + Y * G[0]]; A[O + ".range[0]"] = v.l2r(V[0]), A[O + ".range[1]"] = v.l2r(V[1]) } } else T !== "hovermode" || d !== "x" && d !== "y" || (d = M._isHoriz ? "y" : "x", x.setAttribute("data-val", d)), A[T] = d; M._cartesianSpikesEnabled = P, w.call("_guiRelayout", g, A) } function r(g, f) { for (var v = f.currentTarget, m = v.getAttribute("data-attr"), x = v.getAttribute("data-val") || !0, T = g._fullLayout._subplots.gl3d || [], d = {}, M = m.split("."), A = 0; A < T.length; A++)d[T[A] + "." + M[1]] = x; var C = x === "pan" ? x : "zoom"; d.dragmode = C, w.call("_guiRelayout", g, d) } function n(g, f) { for (var v = f.currentTarget.getAttribute("data-attr"), m = v === "resetLastSave", x = v === "resetDefault", T = g._fullLayout, d = T._subplots.gl3d || [], M = {}, A = 0; A < d.length; A++) { var C, P = d[A], O = P + ".camera", z = P + ".aspectratio", B = P + ".aspectmode", Y = T[P]._scene; m ? (M[O + ".up"] = Y.viewInitial.up, M[O + ".eye"] = Y.viewInitial.eye, M[O + ".center"] = Y.viewInitial.center, C = !0) : x && (M[O + ".up"] = null, M[O + ".eye"] = null, M[O + ".center"] = null, C = !0), C && (M[z + ".x"] = Y.viewInitial.aspectratio.x, M[z + ".y"] = Y.viewInitial.aspectratio.y, M[z + ".z"] = Y.viewInitial.aspectratio.z, M[B] = Y.viewInitial.aspectmode) } w.call("_guiRelayout", g, M) } function a(g, f) { var v = f.currentTarget, m = v._previousVal, x = g._fullLayout, T = x._subplots.gl3d || [], d = ["xaxis", "yaxis", "zaxis"], M = {}, A = {}; if (m) A = m, v._previousVal = null; else { for (var C = 0; C < T.length; C++) { var P = T[C], O = x[P], z = P + ".hovermode"; M[z] = O.hovermode, A[z] = !1; for (var B = 0; B < 3; B++) { var Y = d[B], D = P + "." + Y + ".showspikes"; A[D] = !1, M[D] = O[Y].showspikes } } v._previousVal = M } return A } function s(g, f) { for (var v = f.currentTarget, m = v.getAttribute("data-attr"), x = v.getAttribute("data-val") || !0, T = g._fullLayout, d = T._subplots.geo || [], M = 0; M < d.length; M++) { var A = d[M], C = T[A]; if (m === "zoom") { var P = C.projection.scale, O = x === "in" ? 2 * P : .5 * P; w.call("_guiRelayout", g, A + ".projection.scale", O) } } m === "reset" && b(g, "geo") } function u(g) { var f = g._fullLayout; return !f.hovermode && (f._has("cartesian") ? f._isHoriz ? "y" : "x" : "closest") } function p(g) { var f = u(g); w.call("_guiRelayout", g, "hovermode", f) } function c(g, f) { for (var v = f.currentTarget.getAttribute("data-val"), m = g._fullLayout, x = m._subplots.mapbox || [], T = {}, d = 0; d < x.length; d++) { var M = x[d], A = m[M].zoom, C = v === "in" ? 1.05 * A : A / 1.05; T[M + ".zoom"] = C } w.call("_guiRelayout", g, T) } function b(g, f) { for (var v = g._fullLayout, m = v._subplots[f] || [], x = {}, T = 0; T < m.length; T++)for (var d = m[T], M = v[d]._subplot.viewInitial, A = Object.keys(M), C = 0; C < A.length; C++) { var P = A[C]; x[d + "." + P] = M[P] } w.call("_guiRelayout", g, x) } t.toImage = { name: "toImage", title: function (g) { var f = (g._context.toImageButtonOptions || {}).format || "png"; return l(g, f === "png" ? "Download plot as a png" : "Download plot") }, icon: _.camera, click: function (g) { var f = g._context.toImageButtonOptions, v = { format: f.format || "png" }; h.notifier(l(g, "Taking snapshot - this may take a few seconds"), "long"), v.format !== "svg" && h.isIE() && (h.notifier(l(g, "IE only supports svg. Changing format to svg."), "long"), v.format = "svg"), ["filename", "width", "height", "scale"].forEach(function (m) { m in f && (v[m] = f[m]) }), w.call("downloadImage", g, v).then(function (m) { h.notifier(l(g, "Snapshot succeeded") + " - " + m, "long") }).catch(function () { h.notifier(l(g, "Sorry, there was a problem downloading your snapshot!"), "long") }) } }, t.sendDataToCloud = { name: "sendDataToCloud", title: function (g) { return l(g, "Edit in Chart Studio") }, icon: _.disk, click: function (g) { k.sendDataToCloud(g) } }, t.editInChartStudio = { name: "editInChartStudio", title: function (g) { return l(g, "Edit in Chart Studio") }, icon: _.pencil, click: function (g) { k.sendDataToCloud(g) } }, t.zoom2d = { name: "zoom2d", _cat: "zoom", title: function (g) { return l(g, "Zoom") }, attr: "dragmode", val: "zoom", icon: _.zoombox, click: o }, t.pan2d = { name: "pan2d", _cat: "pan", title: function (g) { return l(g, "Pan") }, attr: "dragmode", val: "pan", icon: _.pan, click: o }, t.select2d = { name: "select2d", _cat: "select", title: function (g) { return l(g, "Box Select") }, attr: "dragmode", val: "select", icon: _.selectbox, click: o }, t.lasso2d = { name: "lasso2d", _cat: "lasso", title: function (g) { return l(g, "Lasso Select") }, attr: "dragmode", val: "lasso", icon: _.lasso, click: o }, t.drawclosedpath = { name: "drawclosedpath", title: function (g) { return l(g, "Draw closed freeform") }, attr: "dragmode", val: "drawclosedpath", icon: _.drawclosedpath, click: o }, t.drawopenpath = { name: "drawopenpath", title: function (g) { return l(g, "Draw open freeform") }, attr: "dragmode", val: "drawopenpath", icon: _.drawopenpath, click: o }, t.drawline = { name: "drawline", title: function (g) { return l(g, "Draw line") }, attr: "dragmode", val: "drawline", icon: _.drawline, click: o }, t.drawrect = { name: "drawrect", title: function (g) { return l(g, "Draw rectangle") }, attr: "dragmode", val: "drawrect", icon: _.drawrect, click: o }, t.drawcircle = { name: "drawcircle", title: function (g) { return l(g, "Draw circle") }, attr: "dragmode", val: "drawcircle", icon: _.drawcircle, click: o }, t.eraseshape = { name: "eraseshape", title: function (g) { return l(g, "Erase active shape") }, icon: _.eraseshape, click: y }, t.zoomIn2d = { name: "zoomIn2d", _cat: "zoomin", title: function (g) { return l(g, "Zoom in") }, attr: "zoom", val: "in", icon: _.zoom_plus, click: o }, t.zoomOut2d = { name: "zoomOut2d", _cat: "zoomout", title: function (g) { return l(g, "Zoom out") }, attr: "zoom", val: "out", icon: _.zoom_minus, click: o }, t.autoScale2d = { name: "autoScale2d", _cat: "autoscale", title: function (g) { return l(g, "Autoscale") }, attr: "zoom", val: "auto", icon: _.autoscale, click: o }, t.resetScale2d = { name: "resetScale2d", _cat: "resetscale", title: function (g) { return l(g, "Reset axes") }, attr: "zoom", val: "reset", icon: _.home, click: o }, t.hoverClosestCartesian = { name: "hoverClosestCartesian", _cat: "hoverclosest", title: function (g) { return l(g, "Show closest data on hover") }, attr: "hovermode", val: "closest", icon: _.tooltip_basic, gravity: "ne", click: o }, t.hoverCompareCartesian = { name: "hoverCompareCartesian", _cat: "hoverCompare", title: function (g) { return l(g, "Compare data on hover") }, attr: "hovermode", val: function (g) { return g._fullLayout._isHoriz ? "y" : "x" }, icon: _.tooltip_compare, gravity: "ne", click: o }, t.zoom3d = { name: "zoom3d", _cat: "zoom", title: function (g) { return l(g, "Zoom") }, attr: "scene.dragmode", val: "zoom", icon: _.zoombox, click: r }, t.pan3d = { name: "pan3d", _cat: "pan", title: function (g) { return l(g, "Pan") }, attr: "scene.dragmode", val: "pan", icon: _.pan, click: r }, t.orbitRotation = { name: "orbitRotation", title: function (g) { return l(g, "Orbital rotation") }, attr: "scene.dragmode", val: "orbit", icon: _["3d_rotate"], click: r }, t.tableRotation = { name: "tableRotation", title: function (g) { return l(g, "Turntable rotation") }, attr: "scene.dragmode", val: "turntable", icon: _["z-axis"], click: r }, t.resetCameraDefault3d = { name: "resetCameraDefault3d", _cat: "resetCameraDefault", title: function (g) { return l(g, "Reset camera to default") }, attr: "resetDefault", icon: _.home, click: n }, t.resetCameraLastSave3d = { name: "resetCameraLastSave3d", _cat: "resetCameraLastSave", title: function (g) { return l(g, "Reset camera to last save") }, attr: "resetLastSave", icon: _.movie, click: n }, t.hoverClosest3d = { name: "hoverClosest3d", _cat: "hoverclosest", title: function (g) { return l(g, "Toggle show closest data on hover") }, attr: "hovermode", val: null, toggle: !0, icon: _.tooltip_basic, gravity: "ne", click: function (g, f) { var v = a(g, f); w.call("_guiRelayout", g, v) } }, t.zoomInGeo = { name: "zoomInGeo", _cat: "zoomin", title: function (g) { return l(g, "Zoom in") }, attr: "zoom", val: "in", icon: _.zoom_plus, click: s }, t.zoomOutGeo = { name: "zoomOutGeo", _cat: "zoomout", title: function (g) { return l(g, "Zoom out") }, attr: "zoom", val: "out", icon: _.zoom_minus, click: s }, t.resetGeo = { name: "resetGeo", _cat: "reset", title: function (g) { return l(g, "Reset") }, attr: "reset", val: null, icon: _.autoscale, click: s }, t.hoverClosestGeo = { name: "hoverClosestGeo", _cat: "hoverclosest", title: function (g) { return l(g, "Toggle show closest data on hover") }, attr: "hovermode", val: null, toggle: !0, icon: _.tooltip_basic, gravity: "ne", click: p }, t.hoverClosestGl2d = { name: "hoverClosestGl2d", _cat: "hoverclosest", title: function (g) { return l(g, "Toggle show closest data on hover") }, attr: "hovermode", val: null, toggle: !0, icon: _.tooltip_basic, gravity: "ne", click: p }, t.hoverClosestPie = { name: "hoverClosestPie", _cat: "hoverclosest", title: function (g) { return l(g, "Toggle show closest data on hover") }, attr: "hovermode", val: "closest", icon: _.tooltip_basic, gravity: "ne", click: p }, t.resetViewSankey = { name: "resetSankeyGroup", title: function (g) { return l(g, "Reset view") }, icon: _.home, click: function (g) { for (var f = { "node.groups": [], "node.x": [], "node.y": [] }, v = 0; v < g._fullData.length; v++) { var m = g._fullData[v]._viewInitial; f["node.groups"].push(m.node.groups.slice()), f["node.x"].push(m.node.x.slice()), f["node.y"].push(m.node.y.slice()) } w.call("restyle", g, f) } }, t.toggleHover = { name: "toggleHover", title: function (g) { return l(g, "Toggle show closest data on hover") }, attr: "hovermode", val: null, toggle: !0, icon: _.tooltip_basic, gravity: "ne", click: function (g, f) { var v = a(g, f); v.hovermode = u(g), w.call("_guiRelayout", g, v) } }, t.resetViews = { name: "resetViews", title: function (g) { return l(g, "Reset views") }, icon: _.home, click: function (g, f) { var v = f.currentTarget; v.setAttribute("data-attr", "zoom"), v.setAttribute("data-val", "reset"), o(g, f), v.setAttribute("data-attr", "resetLastSave"), n(g, f), b(g, "geo"), b(g, "mapbox") } }, t.toggleSpikelines = { name: "toggleSpikelines", title: function (g) { return l(g, "Toggle Spike Lines") }, icon: _.spikeline, attr: "_cartesianSpikesEnabled", val: "on", click: function (g) { var f = g._fullLayout, v = f._cartesianSpikesEnabled; f._cartesianSpikesEnabled = v === "on" ? "off" : "on", w.call("_guiRelayout", g, function (m) { for (var x = m._fullLayout._cartesianSpikesEnabled === "on", T = i.list(m, null, !0), d = {}, M = 0; M < T.length; M++) { var A = T[M]; d[A._name + ".showspikes"] = !!x || A._showSpikeInitial } return d }(g)) } }, t.resetViewMapbox = { name: "resetViewMapbox", _cat: "resetView", title: function (g) { return l(g, "Reset view") }, attr: "reset", icon: _.home, click: function (g) { b(g, "mapbox") } }, t.zoomInMapbox = { name: "zoomInMapbox", _cat: "zoomin", title: function (g) { return l(g, "Zoom in") }, attr: "zoom", val: "in", icon: _.zoom_plus, click: c }, t.zoomOutMapbox = { name: "zoomOutMapbox", _cat: "zoomout", title: function (g) { return l(g, "Zoom out") }, attr: "zoom", val: "out", icon: _.zoom_minus, click: c } }, 93348: function (R, E, e) { var w = e(26023), k = Object.keys(w), i = ["drawline", "drawopenpath", "drawclosedpath", "drawcircle", "drawrect", "eraseshape"], _ = ["v1hovermode", "hoverclosest", "hovercompare", "togglehover", "togglespikelines"].concat(i), y = []; k.forEach(function (h) { (function (l) { if (_.indexOf(l._cat || l.name) === -1) { var t = l.name, o = (l._cat || l.name).toLowerCase(); y.indexOf(t) === -1 && y.push(t), y.indexOf(o) === -1 && y.push(o) } })(w[h]) }), y.sort(), R.exports = { DRAW_MODES: i, backButtons: _, foreButtons: y } }, 35750: function (R, E, e) { var w = e(71828), k = e(7901), i = e(44467), _ = e(42068); R.exports = function (y, h) { var l = y.modebar || {}, t = i.newContainer(h, "modebar"); function o(n, a) { return w.coerce(l, t, _, n, a) } o("orientation"), o("bgcolor", k.addOpacity(h.paper_bgcolor, .5)); var r = k.contrast(k.rgb(h.modebar.bgcolor)); o("color", k.addOpacity(r, .3)), o("activecolor", k.addOpacity(r, .7)), o("uirevision", h.uirevision), o("add"), o("remove") } }, 64168: function (R, E, e) { R.exports = { moduleType: "component", name: "modebar", layoutAttributes: e(42068), supplyLayoutDefaults: e(35750), manage: e(14192) } }, 14192: function (R, E, e) { var w = e(41675), k = e(34098), i = e(73972), _ = e(23469).isUnifiedHover, y = e(37676), h = e(26023), l = e(93348).DRAW_MODES, t = e(71828).extendDeep; R.exports = function (o) { var r = o._fullLayout, n = o._context, a = r._modeBar; if (n.displayModeBar || n.watermark) { if (!Array.isArray(n.modeBarButtonsToRemove)) throw new Error(["*modeBarButtonsToRemove* configuration options", "must be an array."].join(" ")); if (!Array.isArray(n.modeBarButtonsToAdd)) throw new Error(["*modeBarButtonsToAdd* configuration options", "must be an array."].join(" ")); var s, u = n.modeBarButtons; s = Array.isArray(u) && u.length ? function (p) { for (var c = t([], p), b = 0; b < c.length; b++)for (var g = c[b], f = 0; f < g.length; f++) { var v = g[f]; if (typeof v == "string") { if (h[v] === void 0) throw new Error(["*modeBarButtons* configuration options", "invalid button name"].join(" ")); c[b][f] = h[v] } } return c }(u) : !n.displayModeBar && n.watermark ? [] : function (p) { var c = p._fullLayout, b = p._fullData, g = p._context; function f(me, _e) { if (typeof _e == "string") { if (_e.toLowerCase() === me.toLowerCase()) return !0 } else { var Se = _e.name, we = _e._cat || _e.name; if (Se === me || we === me.toLowerCase()) return !0 } return !1 } var v = c.modebar.add; typeof v == "string" && (v = [v]); var m = c.modebar.remove; typeof m == "string" && (m = [m]); var x = g.modeBarButtonsToAdd.concat(v.filter(function (me) { for (var _e = 0; _e < g.modeBarButtonsToRemove.length; _e++)if (f(me, g.modeBarButtonsToRemove[_e])) return !1; return !0 })), T = g.modeBarButtonsToRemove.concat(m.filter(function (me) { for (var _e = 0; _e < g.modeBarButtonsToAdd.length; _e++)if (f(me, g.modeBarButtonsToAdd[_e])) return !1; return !0 })), d = c._has("cartesian"), M = c._has("gl3d"), A = c._has("geo"), C = c._has("pie"), P = c._has("funnelarea"), O = c._has("gl2d"), z = c._has("ternary"), B = c._has("mapbox"), Y = c._has("polar"), D = c._has("smith"), G = c._has("sankey"), V = function (me) { for (var _e = w.list({ _fullLayout: me }, null, !0), Se = 0; Se < _e.length; Se++)if (!_e[Se].fixedrange) return !1; return !0 }(c), j = _(c.hovermode), W = []; function Z(me) { if (me.length) { for (var _e = [], Se = 0; Se < me.length; Se++) { for (var we = me[Se], xe = h[we], De = xe.name.toLowerCase(), Ee = (xe._cat || xe.name).toLowerCase(), Me = !1, he = 0; he < T.length; he++) { var fe = T[he].toLowerCase(); if (fe === De || fe === Ee) { Me = !0; break } } Me || _e.push(h[we]) } W.push(_e) } } var ie = ["toImage"]; g.showEditInChartStudio ? ie.push("editInChartStudio") : g.showSendToCloud && ie.push("sendDataToCloud"), Z(ie); var te = [], J = [], X = [], ee = []; (d || O || C || P || z) + A + M + B + Y + D > 1 ? (J = ["toggleHover"], X = ["resetViews"]) : A ? (te = ["zoomInGeo", "zoomOutGeo"], J = ["hoverClosestGeo"], X = ["resetGeo"]) : M ? (J = ["hoverClosest3d"], X = ["resetCameraDefault3d", "resetCameraLastSave3d"]) : B ? (te = ["zoomInMapbox", "zoomOutMapbox"], J = ["toggleHover"], X = ["resetViewMapbox"]) : O ? J = ["hoverClosestGl2d"] : C ? J = ["hoverClosestPie"] : G ? (J = ["hoverClosestCartesian", "hoverCompareCartesian"], X = ["resetViewSankey"]) : J = ["toggleHover"], d && (J = ["toggleSpikelines", "hoverClosestCartesian", "hoverCompareCartesian"]), (function (me) { for (var _e = 0; _e < me.length; _e++)if (!i.traceIs(me[_e], "noHover")) return !1; return !0 }(b) || j) && (J = []), !d && !O || V || (te = ["zoomIn2d", "zoomOut2d", "autoScale2d"], X[0] !== "resetViews" && (X = ["resetScale2d"])), M ? ee = ["zoom3d", "pan3d", "orbitRotation", "tableRotation"] : (d || O) && !V || z ? ee = ["zoom2d", "pan2d"] : B || A ? ee = ["pan2d"] : Y && (ee = ["zoom2d"]), function (me) { for (var _e = !1, Se = 0; Se < me.length && !_e; Se++) { var we = me[Se]; we._module && we._module.selectPoints && (i.traceIs(we, "scatter-like") ? (k.hasMarkers(we) || k.hasText(we)) && (_e = !0) : i.traceIs(we, "box-violin") && we.boxpoints !== "all" && we.points !== "all" || (_e = !0)) } return _e }(b) && ee.push("select2d", "lasso2d"); var re = [], oe = function (me) { re.indexOf(me) === -1 && J.indexOf(me) !== -1 && re.push(me) }; if (Array.isArray(x)) { for (var ue = [], ce = 0; ce < x.length; ce++) { var de = x[ce]; typeof de == "string" ? (de = de.toLowerCase(), l.indexOf(de) !== -1 ? (c._has("mapbox") || c._has("cartesian")) && ee.push(de) : de === "togglespikelines" ? oe("toggleSpikelines") : de === "togglehover" ? oe("toggleHover") : de === "hovercompare" ? oe("hoverCompareCartesian") : de === "hoverclosest" ? (oe("hoverClosestCartesian"), oe("hoverClosestGeo"), oe("hoverClosest3d"), oe("hoverClosestGl2d"), oe("hoverClosestPie")) : de === "v1hovermode" && (oe("toggleHover"), oe("hoverClosestCartesian"), oe("hoverCompareCartesian"), oe("hoverClosestGeo"), oe("hoverClosest3d"), oe("hoverClosestGl2d"), oe("hoverClosestPie"))) : ue.push(de) } x = ue } return Z(ee), Z(te.concat(X)), Z(re), function (me, _e) { if (_e.length) if (Array.isArray(_e[0])) for (var Se = 0; Se < _e.length; Se++)me.push(_e[Se]); else me.push(_e); return me }(W, x) }(o), a ? a.update(o, s) : r._modeBar = y(o, s) } else a && (a.destroy(), delete r._modeBar) } }, 37676: function (R, E, e) { var w = e(39898), k = e(92770), i = e(71828), _ = e(24255), y = e(11506).version, h = new DOMParser; function l(o) { this.container = o.container, this.element = document.createElement("div"), this.update(o.graphInfo, o.buttons), this.container.appendChild(this.element) } var t = l.prototype; t.update = function (o, r) { this.graphInfo = o; var n = this.graphInfo._context, a = this.graphInfo._fullLayout, s = "modebar-" + a._uid; this.element.setAttribute("id", s), this._uid = s, this.element.className = "modebar", n.displayModeBar === "hover" && (this.element.className += " modebar--hover ease-bg"), a.modebar.orientation === "v" && (this.element.className += " vertical", r = r.reverse()); var u = a.modebar, p = n.displayModeBar === "hover" ? ".js-plotly-plot .plotly:hover " : ""; i.deleteRelatedStyleRule(s), i.addRelatedStyleRule(s, p + "#" + s + " .modebar-group", "background-color: " + u.bgcolor), i.addRelatedStyleRule(s, "#" + s + " .modebar-btn .icon path", "fill: " + u.color), i.addRelatedStyleRule(s, "#" + s + " .modebar-btn:hover .icon path", "fill: " + u.activecolor), i.addRelatedStyleRule(s, "#" + s + " .modebar-btn.active .icon path", "fill: " + u.activecolor); var c = !this.hasButtons(r), b = this.hasLogo !== n.displaylogo, g = this.locale !== n.locale; if (this.locale = n.locale, (c || b || g) && (this.removeAllButtons(), this.updateButtons(r), n.watermark || n.displaylogo)) { var f = this.getLogo(); n.watermark && (f.className = f.className + " watermark"), a.modebar.orientation === "v" ? this.element.insertBefore(f, this.element.childNodes[0]) : this.element.appendChild(f), this.hasLogo = !0 } this.updateActiveButton() }, t.updateButtons = function (o) { var r = this; this.buttons = o, this.buttonElements = [], this.buttonsNames = [], this.buttons.forEach(function (n) { var a = r.createGroup(); n.forEach(function (s) { var u = s.name; if (!u) throw new Error("must provide button 'name' in button config"); if (r.buttonsNames.indexOf(u) !== -1) throw new Error("button name '" + u + "' is taken"); r.buttonsNames.push(u); var p = r.createButton(s); r.buttonElements.push(p), a.appendChild(p) }), r.element.appendChild(a) }) }, t.createGroup = function () { var o = document.createElement("div"); return o.className = "modebar-group", o }, t.createButton = function (o) { var r = this, n = document.createElement("a"); n.setAttribute("rel", "tooltip"), n.className = "modebar-btn"; var a = o.title; a === void 0 ? a = o.name : typeof a == "function" && (a = a(this.graphInfo)), (a || a === 0) && n.setAttribute("data-title", a), o.attr !== void 0 && n.setAttribute("data-attr", o.attr); var s = o.val; if (s !== void 0 && (typeof s == "function" && (s = s(this.graphInfo)), n.setAttribute("data-val", s)), typeof o.click != "function") throw new Error("must provide button 'click' function in button config"); n.addEventListener("click", function (p) { o.click(r.graphInfo, p), r.updateActiveButton(p.currentTarget) }), n.setAttribute("data-toggle", o.toggle || !1), o.toggle && w.select(n).classed("active", !0); var u = o.icon; return typeof u == "function" ? n.appendChild(u()) : n.appendChild(this.createIcon(u || _.question)), n.setAttribute("data-gravity", o.gravity || "n"), n }, t.createIcon = function (o) { var r, n = k(o.height) ? Number(o.height) : o.ascent - o.descent, a = "http://www.w3.org/2000/svg"; if (o.path) { (r = document.createElementNS(a, "svg")).setAttribute("viewBox", [0, 0, o.width, n].join(" ")), r.setAttribute("class", "icon"); var s = document.createElementNS(a, "path"); s.setAttribute("d", o.path), o.transform ? s.setAttribute("transform", o.transform) : o.ascent !== void 0 && s.setAttribute("transform", "matrix(1 0 0 -1 0 " + o.ascent + ")"), r.appendChild(s) } return o.svg && (r = h.parseFromString(o.svg, "application/xml").childNodes[0]), r.setAttribute("height", "1em"), r.setAttribute("width", "1em"), r }, t.updateActiveButton = function (o) { var r = this.graphInfo._fullLayout, n = o !== void 0 ? o.getAttribute("data-attr") : null; this.buttonElements.forEach(function (a) { var s = a.getAttribute("data-val") || !0, u = a.getAttribute("data-attr"), p = a.getAttribute("data-toggle") === "true", c = w.select(a); if (p) u === n && c.classed("active", !c.classed("active")); else { var b = u === null ? u : i.nestedProperty(r, u).get(); c.classed("active", b === s) } }) }, t.hasButtons = function (o) { var r = this.buttons; if (!r || o.length !== r.length) return !1; for (var n = 0; n < o.length; ++n) { if (o[n].length !== r[n].length) return !1; for (var a = 0; a < o[n].length; a++)if (o[n][a].name !== r[n][a].name) return !1 } return !0 }, t.getLogo = function () { var o = this.createGroup(), r = document.createElement("a"); return r.href = "https://plotly.com/", r.target = "_blank", r.setAttribute("data-title", i._(this.graphInfo, "Produced with Plotly.js") + " (v" + y + ")"), r.className = "modebar-btn plotlyjsicon modebar-btn--logo", r.appendChild(this.createIcon(_.newplotlylogo)), o.appendChild(r), o }, t.removeAllButtons = function () { for (; this.element.firstChild;)this.element.removeChild(this.element.firstChild); this.hasLogo = !1 }, t.destroy = function () { i.removeElement(this.container.querySelector(".modebar")), i.deleteRelatedStyleRule(this._uid) }, R.exports = function (o, r) { var n = o._fullLayout, a = new l({ graphInfo: o, container: n._modebardiv.node(), buttons: r }); return n._privateplot && w.select(a.element).append("span").classed("badge-private float--left", !0).text("PRIVATE"), a } }, 37113: function (R, E, e) { var w = e(41940), k = e(22399), i = (0, e(44467).templatedArray)("button", { visible: { valType: "boolean", dflt: !0, editType: "plot" }, step: { valType: "enumerated", values: ["month", "year", "day", "hour", "minute", "second", "all"], dflt: "month", editType: "plot" }, stepmode: { valType: "enumerated", values: ["backward", "todate"], dflt: "backward", editType: "plot" }, count: { valType: "number", min: 0, dflt: 1, editType: "plot" }, label: { valType: "string", editType: "plot" }, editType: "plot" }); R.exports = { visible: { valType: "boolean", editType: "plot" }, buttons: i, x: { valType: "number", min: -2, max: 3, editType: "plot" }, xanchor: { valType: "enumerated", values: ["auto", "left", "center", "right"], dflt: "left", editType: "plot" }, y: { valType: "number", min: -2, max: 3, editType: "plot" }, yanchor: { valType: "enumerated", values: ["auto", "top", "middle", "bottom"], dflt: "bottom", editType: "plot" }, font: w({ editType: "plot" }), bgcolor: { valType: "color", dflt: k.lightLine, editType: "plot" }, activecolor: { valType: "color", editType: "plot" }, bordercolor: { valType: "color", dflt: k.defaultLine, editType: "plot" }, borderwidth: { valType: "number", min: 0, dflt: 0, editType: "plot" }, editType: "plot" } }, 89573: function (R) { R.exports = { yPad: .02, minButtonWidth: 30, rx: 3, ry: 3, lightAmount: 25, darkAmount: 10 } }, 28674: function (R, E, e) { var w = e(71828), k = e(7901), i = e(44467), _ = e(85501), y = e(37113), h = e(89573); function l(t, o, r, n) { var a = n.calendar; function s(p, c) { return w.coerce(t, o, y.buttons, p, c) } if (s("visible")) { var u = s("step"); u !== "all" && (!a || a === "gregorian" || u !== "month" && u !== "year" ? s("stepmode") : o.stepmode = "backward", s("count")), s("label") } } R.exports = function (t, o, r, n, a) { var s = t.rangeselector || {}, u = i.newContainer(o, "rangeselector"); function p(g, f) { return w.coerce(s, u, y, g, f) } if (p("visible", _(s, u, { name: "buttons", handleItemDefaults: l, calendar: a }).length > 0)) { var c = function (g, f, v) { for (var m = v.filter(function (M) { return f[M].anchor === g._id }), x = 0, T = 0; T < m.length; T++) { var d = f[m[T]].domain; d && (x = Math.max(d[1], x)) } return [g.domain[0], x + h.yPad] }(o, r, n); p("x", c[0]), p("y", c[1]), w.noneOrAll(t, o, ["x", "y"]), p("xanchor"), p("yanchor"), w.coerceFont(p, "font", r.font); var b = p("bgcolor"); p("activecolor", k.contrast(b, h.lightAmount, h.darkAmount)), p("bordercolor"), p("borderwidth") } } }, 21598: function (R, E, e) { var w = e(39898), k = e(73972), i = e(74875), _ = e(7901), y = e(91424), h = e(71828), l = h.strTranslate, t = e(63893), o = e(41675), r = e(18783), n = r.LINE_SPACING, a = r.FROM_TL, s = r.FROM_BR, u = e(89573), p = e(70565); function c(f) { return f._id } function b(f, v, m) { var x = h.ensureSingle(f, "rect", "selector-rect", function (T) { T.attr("shape-rendering", "crispEdges") }); x.attr({ rx: u.rx, ry: u.ry }), x.call(_.stroke, v.bordercolor).call(_.fill, function (T, d) { return d._isActive || d._isHovered ? T.activecolor : T.bgcolor }(v, m)).style("stroke-width", v.borderwidth + "px") } function g(f, v, m, x) { var T, d; h.ensureSingle(f, "text", "selector-text", function (M) { M.attr("text-anchor", "middle") }).call(y.font, v.font).text((T = m, d = x._fullLayout._meta, T.label ? d ? h.templateString(T.label, d) : T.label : T.step === "all" ? "all" : T.count + T.step.charAt(0))).call(function (M) { t.convertToTspans(M, x) }) } R.exports = function (f) { var v = f._fullLayout._infolayer.selectAll(".rangeselector").data(function (m) { for (var x = o.list(m, "x", !0), T = [], d = 0; d < x.length; d++) { var M = x[d]; M.rangeselector && M.rangeselector.visible && T.push(M) } return T }(f), c); v.enter().append("g").classed("rangeselector", !0), v.exit().remove(), v.style({ cursor: "pointer", "pointer-events": "all" }), v.each(function (m) { var x = w.select(this), T = m, d = T.rangeselector, M = x.selectAll("g.button").data(h.filterVisible(d.buttons)); M.enter().append("g").classed("button", !0), M.exit().remove(), M.each(function (A) { var C = w.select(this), P = p(T, A); A._isActive = function (O, z, B) { if (z.step === "all") return O.autorange === !0; var Y = Object.keys(B); return O.range[0] === B[Y[0]] && O.range[1] === B[Y[1]] }(T, A, P), C.call(b, d, A), C.call(g, d, A, f), C.on("click", function () { f._dragged || k.call("_guiRelayout", f, P) }), C.on("mouseover", function () { A._isHovered = !0, C.call(b, d, A) }), C.on("mouseout", function () { A._isHovered = !1, C.call(b, d, A) }) }), function (A, C, P, O, z) { var B = 0, Y = 0, D = P.borderwidth; C.each(function () { var ie = w.select(this).select(".selector-text"), te = P.font.size * n, J = Math.max(te * t.lineCount(ie), 16) + 3; Y = Math.max(Y, J) }), C.each(function () { var ie = w.select(this), te = ie.select(".selector-rect"), J = ie.select(".selector-text"), X = J.node() && y.bBox(J.node()).width, ee = P.font.size * n, re = t.lineCount(J), oe = Math.max(X + 10, u.minButtonWidth); ie.attr("transform", l(D + B, D)), te.attr({ x: 0, y: 0, width: oe, height: Y }), t.positionText(J, oe / 2, Y / 2 - (re - 1) * ee / 2 + 3), B += oe + 5 }); var G = A._fullLayout._size, V = G.l + G.w * P.x, j = G.t + G.h * (1 - P.y), W = "left"; h.isRightAnchor(P) && (V -= B, W = "right"), h.isCenterAnchor(P) && (V -= B / 2, W = "center"); var Z = "top"; h.isBottomAnchor(P) && (j -= Y, Z = "bottom"), h.isMiddleAnchor(P) && (j -= Y / 2, Z = "middle"), B = Math.ceil(B), Y = Math.ceil(Y), V = Math.round(V), j = Math.round(j), i.autoMargin(A, O + "-range-selector", { x: P.x, y: P.y, l: B * a[W], r: B * s[W], b: Y * s[Z], t: Y * a[Z] }), z.attr("transform", l(V, j)) }(f, M, d, T._name, x) }) } }, 70565: function (R, E, e) { var w = e(81041), k = e(71828).titleCase; R.exports = function (i, _) { var y = i._name, h = {}; if (_.step === "all") h[y + ".autorange"] = !0; else { var l = function (t, o) { var r, n = t.range, a = new Date(t.r2l(n[1])), s = o.step, u = w["utc" + k(s)], p = o.count; switch (o.stepmode) { case "backward": r = t.l2r(+u.offset(a, -p)); break; case "todate": var c = u.offset(a, -p); r = t.l2r(+u.ceil(c)) }return [r, n[1]] }(i, _); h[y + ".range[0]"] = l[0], h[y + ".range[1]"] = l[1] } return h } }, 97218: function (R, E, e) { R.exports = { moduleType: "component", name: "rangeselector", schema: { subplots: { xaxis: { rangeselector: e(37113) } } }, layoutAttributes: e(37113), handleDefaults: e(28674), draw: e(21598) } }, 75148: function (R, E, e) { var w = e(22399); R.exports = { bgcolor: { valType: "color", dflt: w.background, editType: "plot" }, bordercolor: { valType: "color", dflt: w.defaultLine, editType: "plot" }, borderwidth: { valType: "integer", dflt: 0, min: 0, editType: "plot" }, autorange: { valType: "boolean", dflt: !0, editType: "calc", impliedEdits: { "range[0]": void 0, "range[1]": void 0 } }, range: { valType: "info_array", items: [{ valType: "any", editType: "calc", impliedEdits: { "^autorange": !1 } }, { valType: "any", editType: "calc", impliedEdits: { "^autorange": !1 } }], editType: "calc", impliedEdits: { autorange: !1 } }, thickness: { valType: "number", dflt: .15, min: 0, max: 1, editType: "plot" }, visible: { valType: "boolean", dflt: !0, editType: "calc" }, editType: "calc" } }, 88443: function (R, E, e) { var w = e(41675).list, k = e(71739).getAutoRange, i = e(73251); R.exports = function (_) { for (var y = w(_, "x", !0), h = 0; h < y.length; h++) { var l = y[h], t = l[i.name]; t && t.visible && t.autorange && (t._input.autorange = !0, t._input.range = t.range = k(_, l)) } } }, 73251: function (R) { R.exports = { name: "rangeslider", containerClassName: "rangeslider-container", bgClassName: "rangeslider-bg", rangePlotClassName: "rangeslider-rangeplot", maskMinClassName: "rangeslider-mask-min", maskMaxClassName: "rangeslider-mask-max", slideBoxClassName: "rangeslider-slidebox", grabberMinClassName: "rangeslider-grabber-min", grabAreaMinClassName: "rangeslider-grabarea-min", handleMinClassName: "rangeslider-handle-min", grabberMaxClassName: "rangeslider-grabber-max", grabAreaMaxClassName: "rangeslider-grabarea-max", handleMaxClassName: "rangeslider-handle-max", maskMinOppAxisClassName: "rangeslider-mask-min-opp-axis", maskMaxOppAxisClassName: "rangeslider-mask-max-opp-axis", maskColor: "rgba(0,0,0,0.4)", maskOppAxisColor: "rgba(0,0,0,0.2)", slideBoxFill: "transparent", slideBoxCursor: "ew-resize", grabAreaFill: "transparent", grabAreaCursor: "col-resize", grabAreaWidth: 10, handleWidth: 4, handleRadius: 1, handleStrokeWidth: 1, extraPad: 15 } }, 26377: function (R, E, e) { var w = e(71828), k = e(44467), i = e(41675), _ = e(75148), y = e(47850); R.exports = function (h, l, t) { var o = h[t], r = l[t]; if (o.rangeslider || l._requestRangeslider[r._id]) { w.isPlainObject(o.rangeslider) || (o.rangeslider = {}); var n, a, s = o.rangeslider, u = k.newContainer(r, "rangeslider"); if (x("visible")) { x("bgcolor", l.plot_bgcolor), x("bordercolor"), x("borderwidth"), x("thickness"), x("autorange", !r.isValidRange(s.range)), x("range"); var p = l._subplots; if (p) for (var c = p.cartesian.filter(function (d) { return d.substr(0, d.indexOf("y")) === i.name2id(t) }).map(function (d) { return d.substr(d.indexOf("y"), d.length) }), b = w.simpleMap(c, i.id2name), g = 0; g < b.length; g++) { var f = b[g]; n = s[f] || {}, a = k.newContainer(u, f, "yaxis"); var v, m = l[f]; n.range && m.isValidRange(n.range) && (v = "fixed"), T("rangemode", v) !== "match" && T("range", m.range.slice()) } u._input = s } } function x(d, M) { return w.coerce(s, u, _, d, M) } function T(d, M) { return w.coerce(n, a, y, d, M) } } }, 72413: function (R, E, e) { var w = e(39898), k = e(73972), i = e(74875), _ = e(71828), y = _.strTranslate, h = e(91424), l = e(7901), t = e(92998), o = e(93612), r = e(41675), n = e(28569), a = e(6964), s = e(73251); function u(v, m, x, T) { var d = _.ensureSingle(v, "rect", s.bgClassName, function (P) { P.attr({ x: 0, y: 0, "shape-rendering": "crispEdges" }) }), M = T.borderwidth % 2 == 0 ? T.borderwidth : T.borderwidth - 1, A = -T._offsetShift, C = h.crispRound(m, T.borderwidth); d.attr({ width: T._width + M, height: T._height + M, transform: y(A, A), "stroke-width": C }).call(l.stroke, T.bordercolor).call(l.fill, T.bgcolor) } function p(v, m, x, T) { var d = m._fullLayout; _.ensureSingleById(d._topdefs, "clipPath", T._clipId, function (M) { M.append("rect").attr({ x: 0, y: 0 }) }).select("rect").attr({ width: T._width, height: T._height }) } function c(v, m, x, T) { var d, M = m.calcdata, A = v.selectAll("g." + s.rangePlotClassName).data(x._subplotsWith, _.identity); A.enter().append("g").attr("class", function (C) { return s.rangePlotClassName + " " + C }).call(h.setClipUrl, T._clipId, m), A.order(), A.exit().remove(), A.each(function (C, P) { var O = w.select(this), z = P === 0, B = r.getFromId(m, C, "y"), Y = B._name, D = T[Y], G = { data: [], layout: { xaxis: { type: x.type, domain: [0, 1], range: T.range.slice(), calendar: x.calendar }, width: T._width, height: T._height, margin: { t: 0, b: 0, l: 0, r: 0 } }, _context: m._context }; x.rangebreaks && (G.layout.xaxis.rangebreaks = x.rangebreaks), G.layout[Y] = { type: B.type, domain: [0, 1], range: D.rangemode !== "match" ? D.range.slice() : B.range.slice(), calendar: B.calendar }, B.rangebreaks && (G.layout[Y].rangebreaks = B.rangebreaks), i.supplyDefaults(G); var V = G._fullLayout.xaxis, j = G._fullLayout[Y]; V.clearCalc(), V.setScale(), j.clearCalc(), j.setScale(); var W = { id: C, plotgroup: O, xaxis: V, yaxis: j, isRangePlot: !0 }; z ? d = W : (W.mainplot = "xy", W.mainplotinfo = d), o.rangePlot(m, W, function (Z, ie) { for (var te = [], J = 0; J < Z.length; J++) { var X = Z[J], ee = X[0].trace; ee.xaxis + ee.yaxis === ie && te.push(X) } return te }(M, C)) }) } function b(v, m, x, T, d) { _.ensureSingle(v, "rect", s.maskMinClassName, function (M) { M.attr({ x: 0, y: 0, "shape-rendering": "crispEdges" }) }).attr("height", T._height).call(l.fill, s.maskColor), _.ensureSingle(v, "rect", s.maskMaxClassName, function (M) { M.attr({ y: 0, "shape-rendering": "crispEdges" }) }).attr("height", T._height).call(l.fill, s.maskColor), d.rangemode !== "match" && (_.ensureSingle(v, "rect", s.maskMinOppAxisClassName, function (M) { M.attr({ y: 0, "shape-rendering": "crispEdges" }) }).attr("width", T._width).call(l.fill, s.maskOppAxisColor), _.ensureSingle(v, "rect", s.maskMaxOppAxisClassName, function (M) { M.attr({ y: 0, "shape-rendering": "crispEdges" }) }).attr("width", T._width).style("border-top", s.maskOppBorder).call(l.fill, s.maskOppAxisColor)) } function g(v, m, x, T) { m._context.staticPlot || _.ensureSingle(v, "rect", s.slideBoxClassName, function (d) { d.attr({ y: 0, cursor: s.slideBoxCursor, "shape-rendering": "crispEdges" }) }).attr({ height: T._height, fill: s.slideBoxFill }) } function f(v, m, x, T) { var d = _.ensureSingle(v, "g", s.grabberMinClassName), M = _.ensureSingle(v, "g", s.grabberMaxClassName), A = { x: 0, width: s.handleWidth, rx: s.handleRadius, fill: l.background, stroke: l.defaultLine, "stroke-width": s.handleStrokeWidth, "shape-rendering": "crispEdges" }, C = { y: Math.round(T._height / 4), height: Math.round(T._height / 2) }; _.ensureSingle(d, "rect", s.handleMinClassName, function (O) { O.attr(A) }).attr(C), _.ensureSingle(M, "rect", s.handleMaxClassName, function (O) { O.attr(A) }).attr(C); var P = { width: s.grabAreaWidth, x: 0, y: 0, fill: s.grabAreaFill, cursor: m._context.staticPlot ? void 0 : s.grabAreaCursor }; _.ensureSingle(d, "rect", s.grabAreaMinClassName, function (O) { O.attr(P) }).attr("height", T._height), _.ensureSingle(M, "rect", s.grabAreaMaxClassName, function (O) { O.attr(P) }).attr("height", T._height) } R.exports = function (v) { for (var m = v._fullLayout, x = m._rangeSliderData, T = 0; T < x.length; T++) { var d = x[T][s.name]; d._clipId = d._id + "-" + m._uid } var M = m._infolayer.selectAll("g." + s.containerClassName).data(x, function (A) { return A._name }); M.exit().each(function (A) { var C = A[s.name]; m._topdefs.select("#" + C._clipId).remove() }).remove(), x.length !== 0 && (M.enter().append("g").classed(s.containerClassName, !0).attr("pointer-events", "all"), M.each(function (A) { var C = w.select(this), P = A[s.name], O = m[r.id2name(A.anchor)], z = P[r.id2name(A.anchor)]; if (P.range) { var B, Y = _.simpleMap(P.range, A.r2l), D = _.simpleMap(A.range, A.r2l); B = D[0] < D[1] ? [Math.min(Y[0], D[0]), Math.max(Y[1], D[1])] : [Math.max(Y[0], D[0]), Math.min(Y[1], D[1])], P.range = P._input.range = _.simpleMap(B, A.l2r) } A.cleanRange("rangeslider.range"); var G = m._size, V = A.domain; P._width = G.w * (V[1] - V[0]); var j = Math.round(G.l + G.w * V[0]), W = Math.round(G.t + G.h * (1 - A._counterDomainMin) + (A.side === "bottom" ? A._depth : 0) + P._offsetShift + s.extraPad); C.attr("transform", y(j, W)), P._rl = _.simpleMap(P.range, A.r2l); var Z = P._rl[0], ie = P._rl[1], te = ie - Z; if (P.p2d = function (me) { return me / P._width * te + Z }, P.d2p = function (me) { return (me - Z) / te * P._width }, A.rangebreaks) { var J = A.locateBreaks(Z, ie); if (J.length) { var X, ee, re = 0; for (X = 0; X < J.length; X++)re += (ee = J[X]).max - ee.min; var oe = P._width / (ie - Z - re), ue = [-oe * Z]; for (X = 0; X < J.length; X++)ee = J[X], ue.push(ue[ue.length - 1] - oe * (ee.max - ee.min)); for (P.d2p = function (me) { for (var _e = ue[0], Se = 0; Se < J.length; Se++) { var we = J[Se]; if (me >= we.max) _e = ue[Se + 1]; else if (me < we.min) break } return _e + oe * me }, X = 0; X < J.length; X++)(ee = J[X]).pmin = P.d2p(ee.min), ee.pmax = P.d2p(ee.max); P.p2d = function (me) { for (var _e = ue[0], Se = 0; Se < J.length; Se++) { var we = J[Se]; if (me >= we.pmax) _e = ue[Se + 1]; else if (me < we.pmin) break } return (me - _e) / oe } } } if (z.rangemode !== "match") { var ce = O.r2l(z.range[0]), de = O.r2l(z.range[1]) - ce; P.d2pOppAxis = function (me) { return (me - ce) / de * P._height } } C.call(u, v, A, P).call(p, v, A, P).call(c, v, A, P).call(b, v, A, P, z).call(g, v, A, P).call(f, v, A, P), function (me, _e, Se, we) { if (!_e._context.staticPlot) { var xe = me.select("rect." + s.slideBoxClassName).node(), De = me.select("rect." + s.grabAreaMinClassName).node(), Ee = me.select("rect." + s.grabAreaMaxClassName).node(); me.on("mousedown", Me), me.on("touchstart", Me) } function Me() { var he = w.event, fe = he.target, ae = he.clientX || he.touches[0].clientX, be = ae - me.node().getBoundingClientRect().left, Ie = we.d2p(Se._rl[0]), Te = we.d2p(Se._rl[1]), Ne = n.coverSlip(); function qe(Ce) { var Ae, ze, Ue, Ve = +(Ce.clientX || Ce.touches[0].clientX) - ae; switch (fe) { case xe: if (Ue = "ew-resize", Ie + Ve > Se._length || Te + Ve < 0) return; Ae = Ie + Ve, ze = Te + Ve; break; case De: if (Ue = "col-resize", Ie + Ve > Se._length) return; Ae = Ie + Ve, ze = Te; break; case Ee: if (Ue = "col-resize", Te + Ve < 0) return; Ae = Ie, ze = Te + Ve; break; default: Ue = "ew-resize", Ae = be, ze = be + Ve }if (ze < Ae) { var Ye = ze; ze = Ae, Ae = Ye } we._pixelMin = Ae, we._pixelMax = ze, a(w.select(Ne), Ue), function ($e, rt, ht, nt) { function bt(lt) { return ht.l2r(_.constrain(lt, nt._rl[0], nt._rl[1])) } var wt = bt(nt.p2d(nt._pixelMin)), ut = bt(nt.p2d(nt._pixelMax)); window.requestAnimationFrame(function () { k.call("_guiRelayout", rt, ht._name + ".range", [wt, ut]) }) }(0, _e, Se, we) } function ve() { Ne.removeEventListener("mousemove", qe), Ne.removeEventListener("mouseup", ve), this.removeEventListener("touchmove", qe), this.removeEventListener("touchend", ve), _.removeElement(Ne) } this.addEventListener("touchmove", qe), this.addEventListener("touchend", ve), Ne.addEventListener("mousemove", qe), Ne.addEventListener("mouseup", ve) } }(C, v, A, P), function (me, _e, Se, we, xe, De) { var Ee = s.handleWidth / 2; function Me(Ce) { return _.constrain(Ce, 0, we._width) } function he(Ce) { return _.constrain(Ce, 0, we._height) } function fe(Ce) { return _.constrain(Ce, -Ee, we._width + Ee) } var ae = Me(we.d2p(Se._rl[0])), be = Me(we.d2p(Se._rl[1])); if (me.select("rect." + s.slideBoxClassName).attr("x", ae).attr("width", be - ae), me.select("rect." + s.maskMinClassName).attr("width", ae), me.select("rect." + s.maskMaxClassName).attr("x", be).attr("width", we._width - be), De.rangemode !== "match") { var Ie = we._height - he(we.d2pOppAxis(xe._rl[1])), Te = we._height - he(we.d2pOppAxis(xe._rl[0])); me.select("rect." + s.maskMinOppAxisClassName).attr("x", ae).attr("height", Ie).attr("width", be - ae), me.select("rect." + s.maskMaxOppAxisClassName).attr("x", ae).attr("y", Te).attr("height", we._height - Te).attr("width", be - ae), me.select("rect." + s.slideBoxClassName).attr("y", Ie).attr("height", Te - Ie) } var Ne = .5, qe = Math.round(fe(ae - Ee)) - Ne, ve = Math.round(fe(be - Ee)) + Ne; me.select("g." + s.grabberMinClassName).attr("transform", y(qe, Ne)), me.select("g." + s.grabberMaxClassName).attr("transform", y(ve, Ne)) }(C, 0, A, P, O, z), A.side === "bottom" && t.draw(v, A._id + "title", { propContainer: A, propName: A._name + ".title", placeholder: m._dfltTitle.x, attributes: { x: A._offset + A._length / 2, y: W + P._height + P._offsetShift + 10 + 1.5 * A.title.font.size, "text-anchor": "middle" } }) })) } }, 549: function (R, E, e) { var w = e(41675), k = e(63893), i = e(73251), _ = e(18783).LINE_SPACING, y = i.name; function h(l) { var t = l && l[y]; return t && t.visible } E.isVisible = h, E.makeData = function (l) { var t = w.list({ _fullLayout: l }, "x", !0), o = l.margin, r = []; if (!l._has("gl2d")) for (var n = 0; n < t.length; n++) { var a = t[n]; if (h(a)) { r.push(a); var s = a[y]; s._id = y + a._id, s._height = (l.height - o.b - o.t) * s.thickness, s._offsetShift = Math.floor(s.borderwidth / 2) } } l._rangeSliderData = r }, E.autoMarginOpts = function (l, t) { var o = l._fullLayout, r = t[y], n = t._id.charAt(0), a = 0, s = 0; return t.side === "bottom" && (a = t._depth, t.title.text !== o._dfltTitle[n] && (s = 1.5 * t.title.font.size + 10 + r._offsetShift, s += (t.title.text.match(k.BR_TAG_ALL) || []).length * t.title.font.size * _)), { x: 0, y: t._counterDomainMin, l: 0, r: 0, t: 0, b: r._height + a + Math.max(o.margin.b, s), pad: i.extraPad + 2 * r._offsetShift } } }, 13137: function (R, E, e) { var w = e(71828), k = e(75148), i = e(47850), _ = e(549); R.exports = { moduleType: "component", name: "rangeslider", schema: { subplots: { xaxis: { rangeslider: w.extendFlat({}, k, { yaxis: i }) } } }, layoutAttributes: e(75148), handleDefaults: e(26377), calcAutorange: e(88443), draw: e(72413), isVisible: _.isVisible, makeData: _.makeData, autoMarginOpts: _.autoMarginOpts } }, 47850: function (R) { R.exports = { _isSubplotObj: !0, rangemode: { valType: "enumerated", values: ["auto", "fixed", "match"], dflt: "match", editType: "calc" }, range: { valType: "info_array", items: [{ valType: "any", editType: "plot" }, { valType: "any", editType: "plot" }], editType: "plot" }, editType: "calc" } }, 8389: function (R, E, e) { var w = e(50215), k = e(82196).line, i = e(79952).P, _ = e(1426).extendFlat, y = e(30962).overrideAll, h = e(44467).templatedArray; e(24695), R.exports = y(h("selection", { type: { valType: "enumerated", values: ["rect", "path"] }, xref: _({}, w.xref, {}), yref: _({}, w.yref, {}), x0: { valType: "any" }, x1: { valType: "any" }, y0: { valType: "any" }, y1: { valType: "any" }, path: { valType: "string", editType: "arraydraw" }, opacity: { valType: "number", min: 0, max: 1, dflt: .7, editType: "arraydraw" }, line: { color: k.color, width: _({}, k.width, { min: 1, dflt: 1 }), dash: _({}, i, { dflt: "dot" }) } }), "arraydraw", "from-root") }, 34122: function (R) { R.exports = { BENDPX: 1.5, MINSELECT: 12, SELECTDELAY: 100, SELECTID: "-select" } }, 59402: function (R, E, e) { var w = e(71828), k = e(89298), i = e(85501), _ = e(8389), y = e(30477); function h(l, t, o) { function r(C, P) { return w.coerce(l, t, _, C, P) } var n = r("path"), a = r("type", n ? "path" : "rect") !== "path"; a && delete t.path, r("opacity"), r("line.color"), r("line.width"), r("line.dash"); for (var s = ["x", "y"], u = 0; u < 2; u++) { var p, c, b, g = s[u], f = { _fullLayout: o }, v = k.coerceRef(l, t, f, g); if ((p = k.getFromId(f, v))._selectionIndices.push(t._index), b = y.rangeToShapePosition(p), c = y.shapePositionToRange(p), a) { var m = g + "0", x = g + "1", T = l[m], d = l[x]; l[m] = c(l[m], !0), l[x] = c(l[x], !0), k.coercePosition(t, f, r, v, m), k.coercePosition(t, f, r, v, x); var M = t[m], A = t[x]; M !== void 0 && A !== void 0 && (t[m] = b(M), t[x] = b(A), l[m] = T, l[x] = d) } } a && w.noneOrAll(l, t, ["x0", "x1", "y0", "y1"]) } R.exports = function (l, t) { i(l, t, { name: "selections", handleItemDefaults: h }); for (var o = t.selections, r = 0; r < o.length; r++) { var n = o[r]; n && n.path === void 0 && (n.x0 !== void 0 && n.x1 !== void 0 && n.y0 !== void 0 && n.y1 !== void 0 || (t.selections[r] = null)) } } }, 32485: function (R, E, e) { var w = e(60165).readPaths, k = e(42359), i = e(51873).clearOutlineControllers, _ = e(7901), y = e(91424), h = e(44467).arrayEditor, l = e(30477), t = l.getPathString; function o(u) { var p = u._fullLayout; for (var c in i(u), p._selectionLayer.selectAll("path").remove(), p._plots) { var b = p._plots[c].selectionLayer; b && b.selectAll("path").remove() } for (var g = 0; g < p.selections.length; g++)n(u, g) } function r(u) { return u._context.editSelection } function n(u, p) { u._fullLayout._paperdiv.selectAll('.selectionlayer [data-index="' + p + '"]').remove(); var c = l.makeSelectionsOptionsAndPlotinfo(u, p), b = c.options, g = c.plotinfo; b._input && function (f) { var v = t(u, b), m = { "data-index": p, "fill-rule": "evenodd", d: v }, x = b.opacity, T = "rgba(0,0,0,0)", d = b.line.color || _.contrast(u._fullLayout.plot_bgcolor), M = b.line.width, A = b.line.dash; M || (M = 5, A = "solid"); var C = r(u) && u._fullLayout._activeSelectionIndex === p; C && (T = u._fullLayout.activeselection.fillcolor, x = u._fullLayout.activeselection.opacity); for (var P = [], O = 1; O >= 0; O--) { var z = f.append("path").attr(m).style("opacity", O ? .1 : x).call(_.stroke, d).call(_.fill, T).call(y.dashLine, O ? "solid" : A, O ? 4 + M : M); if (a(z, u, b), C) { var B = h(u.layout, "selections", b); z.style({ cursor: "move" }); var Y = { element: z.node(), plotinfo: g, gd: u, editHelpers: B, isActiveSelection: !0 }, D = w(v, u); k(D, z, Y) } else z.style("pointer-events", O ? "all" : "none"); P[O] = z } var G = P[0]; P[1].node().addEventListener("click", function () { return function (V, j) { if (r(V)) { var W = +j.node().getAttribute("data-index"); if (W >= 0) { if (W === V._fullLayout._activeSelectionIndex) return void s(V); V._fullLayout._activeSelectionIndex = W, V._fullLayout._deactivateSelection = s, o(V) } } }(u, G) }) }(u._fullLayout._selectionLayer) } function a(u, p, c) { var b = c.xref + c.yref; y.setClipUrl(u, "clip" + p._fullLayout._uid + b, p) } function s(u) { r(u) && u._fullLayout._activeSelectionIndex >= 0 && (i(u), delete u._fullLayout._activeSelectionIndex, o(u)) } R.exports = { draw: o, drawOne: n, activateLastSelection: function (u) { if (r(u)) { var p = u._fullLayout.selections.length - 1; u._fullLayout._activeSelectionIndex = p, u._fullLayout._deactivateSelection = s, o(u) } } } }, 53777: function (R, E, e) { var w = e(79952).P, k = e(1426).extendFlat; R.exports = { newselection: { mode: { valType: "enumerated", values: ["immediate", "gradual"], dflt: "immediate", editType: "none" }, line: { color: { valType: "color", editType: "none" }, width: { valType: "number", min: 1, dflt: 1, editType: "none" }, dash: k({}, w, { dflt: "dot", editType: "none" }), editType: "none" }, editType: "none" }, activeselection: { fillcolor: { valType: "color", dflt: "rgba(0,0,0,0)", editType: "none" }, opacity: { valType: "number", min: 0, max: 1, dflt: .5, editType: "none" }, editType: "none" } } }, 90849: function (R) { R.exports = function (E, e, w) { w("newselection.mode"), w("newselection.line.width") && (w("newselection.line.color"), w("newselection.line.dash")), w("activeselection.fillcolor"), w("activeselection.opacity") } }, 35855: function (R, E, e) { var w = e(64505).selectMode, k = e(51873).clearOutline, i = e(60165), _ = i.readPaths, y = i.writePaths, h = i.fixDatesForPaths; R.exports = function (l, t) { if (l.length) { var o = l[0][0]; if (o) { var r = o.getAttribute("d"), n = t.gd, a = n._fullLayout.newselection, s = t.plotinfo, u = s.xaxis, p = s.yaxis, c = t.isActiveSelection, b = t.dragmode, g = (n.layout || {}).selections || []; if (!w(b) && c !== void 0) { var f = n._fullLayout._activeSelectionIndex; if (f < g.length) switch (n._fullLayout.selections[f].type) { case "rect": b = "select"; break; case "path": b = "lasso" } } var v, m = _(r, n, s, c), x = { xref: u._id, yref: p._id, opacity: a.opacity, line: { color: a.line.color, width: a.line.width, dash: a.line.dash } }; m.length === 1 && (v = m[0]), v && v.length === 5 && b === "select" ? (x.type = "rect", x.x0 = v[0][1], x.y0 = v[0][2], x.x1 = v[2][1], x.y1 = v[2][2]) : (x.type = "path", u && p && h(m, u, p), x.path = y(m), v = null), k(n); for (var T = t.editHelpers, d = (T || {}).modifyItem, M = [], A = 0; A < g.length; A++) { var C = n._fullLayout.selections[A]; if (C) { if (M[A] = C._input, c !== void 0 && A === n._fullLayout._activeSelectionIndex) { var P = x; switch (C.type) { case "rect": d("x0", P.x0), d("x1", P.x1), d("y0", P.y0), d("y1", P.y1); break; case "path": d("path", P.path) } } } else M[A] = C } return c === void 0 ? (M.push(x), M) : T ? T.getUpdateObj() : {} } } } }, 75549: function (R, E, e) { var w = e(71828).strTranslate; function k(i, _) { switch (i.type) { case "log": return i.p2d(_); case "date": return i.p2r(_, 0, i.calendar); default: return i.p2r(_) } } R.exports = { p2r: k, r2p: function (i, _) { switch (i.type) { case "log": return i.d2p(_); case "date": return i.r2p(_, 0, i.calendar); default: return i.r2p(_) } }, axValue: function (i) { var _ = i._id.charAt(0) === "y" ? 1 : 0; return function (y) { return k(i, y[_]) } }, getTransform: function (i) { return w(i.xaxis._offset, i.yaxis._offset) } } }, 47322: function (R, E, e) { var w = e(32485), k = e(3937); R.exports = { moduleType: "component", name: "selections", layoutAttributes: e(8389), supplyLayoutDefaults: e(59402), supplyDrawNewSelectionDefaults: e(90849), includeBasePlot: e(76325)("selections"), draw: w.draw, drawOne: w.drawOne, reselect: k.reselect, prepSelect: k.prepSelect, clearOutline: k.clearOutline, clearSelectionsCache: k.clearSelectionsCache, selectOnClick: k.selectOnClick } }, 3937: function (R, E, e) { var w = e(52142), k = e(38258), i = e(73972), _ = e(91424).dashStyle, y = e(7901), h = e(30211), l = e(23469).makeEventData, t = e(64505), o = t.freeMode, r = t.rectMode, n = t.drawMode, a = t.openMode, s = t.selectMode, u = e(30477), p = e(21459), c = e(42359), b = e(51873).clearOutline, g = e(60165), f = g.handleEllipse, v = g.readPaths, m = e(90551).newShapes, x = e(35855), T = e(32485).activateLastSelection, d = e(71828), M = d.sorterAsc, A = e(61082), C = e(79990), P = e(41675).getFromId, O = e(33306), z = e(61549).redrawReglTraces, B = e(34122), Y = B.MINSELECT, D = A.filter, G = A.tester, V = e(75549), j = V.p2r, W = V.axValue, Z = V.getTransform; function ie(ve) { return ve.subplot !== void 0 } function te(ve, Ce, Ae, ze, Ue, Ve, Ye) { var $e, rt, ht, nt, bt, wt, ut, lt, Tt, Et = Ce._hoverdata, St = Ce._fullLayout.clickmode.indexOf("event") > -1, Ft = []; if (function (Qe) { return Qe && Array.isArray(Qe) && Qe[0].hoverOnBox !== !0 }(Et)) { re(ve, Ce, Ve); var zt = function (Qe, st) { var ft, Be, je = Qe[0], at = -1, ot = []; for (Be = 0; Be < st.length; Be++)if (ft = st[Be], je.fullData._expandedIndex === ft.cd[0].trace._expandedIndex) { if (je.hoverOnBox === !0) break; je.pointNumber !== void 0 ? at = je.pointNumber : je.binNumber !== void 0 && (at = je.binNumber, ot = je.pointNumbers); break } return { pointNumber: at, pointNumbers: ot, searchInfo: ft } }(Et, $e = ce(Ce, Ae, ze, Ue)); if (zt.pointNumbers.length > 0 ? function (Qe, st) { var ft, Be, je, at = []; for (je = 0; je < Qe.length; je++)(ft = Qe[je]).cd[0].trace.selectedpoints && ft.cd[0].trace.selectedpoints.length > 0 && at.push(ft); if (at.length === 1 && at[0] === st.searchInfo && (Be = st.searchInfo.cd[0].trace).selectedpoints.length === st.pointNumbers.length) { for (je = 0; je < st.pointNumbers.length; je++)if (Be.selectedpoints.indexOf(st.pointNumbers[je]) < 0) return !1; return !0 } return !1 }($e, zt) : function (Qe) { var st, ft, Be = 0; for (ft = 0; ft < Qe.length; ft++)if ((st = Qe[ft].cd[0].trace).selectedpoints && (st.selectedpoints.length > 1 || (Be += st.selectedpoints.length) > 1)) return !1; return Be === 1 }($e) && (wt = me(zt))) { for (Ye && Ye.remove(), Tt = 0; Tt < $e.length; Tt++)(rt = $e[Tt])._module.selectPoints(rt, !1); _e(Ce, $e), oe(Ve), St && qe(Ce) } else { for (ut = ve.shiftKey && (wt !== void 0 ? wt : me(zt)), ht = function (Qe, st, ft) { return { pointNumber: Qe, searchInfo: st, subtract: !!ft } }(zt.pointNumber, zt.searchInfo, ut), nt = ee(Ve.selectionDefs.concat([ht])), Tt = 0; Tt < $e.length; Tt++)if (bt = we($e[Tt]._module.selectPoints($e[Tt], nt), $e[Tt]), Ft.length) for (var Je = 0; Je < bt.length; Je++)Ft.push(bt[Je]); else Ft = bt; if (_e(Ce, $e, lt = { points: Ft }), ht && Ve && Ve.selectionDefs.push(ht), Ye) { var et = Ve.mergedPolygons, Ze = a(Ve.dragmode); c(xe(et, Ze), Ye, Ve) } St && Ne(Ce, lt) } } } function J(ve) { return "pointNumber" in ve && "searchInfo" in ve } function X(ve) { return { xmin: 0, xmax: 0, ymin: 0, ymax: 0, pts: [], contains: function (Ce, Ae, ze, Ue) { var Ve = ve.searchInfo.cd[0].trace._expandedIndex; return Ue.cd[0].trace._expandedIndex === Ve && ze === ve.pointNumber }, isRect: !1, degenerate: !1, subtract: !!ve.subtract } } function ee(ve) { if (ve.length) { for (var Ce = [], Ae = J(ve[0]) ? 0 : ve[0][0][0], ze = Ae, Ue = J(ve[0]) ? 0 : ve[0][0][1], Ve = Ue, Ye = 0; Ye < ve.length; Ye++)if (J(ve[Ye])) Ce.push(X(ve[Ye])); else { var $e = G(ve[Ye]); $e.subtract = !!ve[Ye].subtract, Ce.push($e), Ae = Math.min(Ae, $e.xmin), ze = Math.max(ze, $e.xmax), Ue = Math.min(Ue, $e.ymin), Ve = Math.max(Ve, $e.ymax) } return { xmin: Ae, xmax: ze, ymin: Ue, ymax: Ve, pts: [], contains: function (rt, ht, nt, bt) { for (var wt = !1, ut = 0; ut < Ce.length; ut++)Ce[ut].contains(rt, ht, nt, bt) && (wt = !Ce[ut].subtract); return wt }, isRect: !1, degenerate: !1 } } } function re(ve, Ce, Ae) { var ze = Ce._fullLayout, Ue = Ae.plotinfo, Ve = Ae.dragmode, Ye = ze._lastSelectedSubplot && ze._lastSelectedSubplot === Ue.id, $e = (ve.shiftKey || ve.altKey) && !(n(Ve) && a(Ve)); Ye && $e && Ue.selection && Ue.selection.selectionDefs && !Ae.selectionDefs ? (Ae.selectionDefs = Ue.selection.selectionDefs, Ae.mergedPolygons = Ue.selection.mergedPolygons) : $e && Ue.selection || oe(Ae), Ye || (b(Ce), ze._lastSelectedSubplot = Ue.id) } function oe(ve, Ce) { var Ae = ve.dragmode, ze = ve.plotinfo, Ue = ve.gd; (function (bt) { return bt._fullLayout._activeShapeIndex >= 0 })(Ue) && Ue._fullLayout._deactivateShape(Ue), function (bt) { return bt._fullLayout._activeSelectionIndex >= 0 }(Ue) && Ue._fullLayout._deactivateSelection(Ue); var Ve = Ue._fullLayout._zoomlayer, Ye = n(Ae), $e = s(Ae); if (Ye || $e) { var rt, ht, nt = Ve.selectAll(".select-outline-" + ze.id); nt && Ue._fullLayout._outlining && (Ye && (rt = m(nt, ve)), rt && i.call("_guiRelayout", Ue, { shapes: rt }), $e && !ie(ve) && (ht = x(nt, ve)), ht && (Ue._fullLayout._noEmitSelectedAtStart = !0, i.call("_guiRelayout", Ue, { selections: ht }).then(function () { Ce && T(Ue) })), Ue._fullLayout._outlining = !1) } ze.selection = {}, ze.selection.selectionDefs = ve.selectionDefs = [], ze.selection.mergedPolygons = ve.mergedPolygons = [] } function ue(ve) { return ve._id } function ce(ve, Ce, Ae, ze) { if (!ve.calcdata) return []; var Ue, Ve, Ye, $e = [], rt = Ce.map(ue), ht = Ae.map(ue); for (Ye = 0; Ye < ve.calcdata.length; Ye++)if ((Ve = (Ue = ve.calcdata[Ye])[0].trace).visible === !0 && Ve._module && Ve._module.selectPoints) if (!ie({ subplot: ze }) || Ve.subplot !== ze && Ve.geo !== ze) if (Ve.type === "splom") { if (Ve._xaxes[rt[0]] && Ve._yaxes[ht[0]]) { var nt = de(Ve._module, Ue, Ce[0], Ae[0]); nt.scene = ve._fullLayout._splomScenes[Ve.uid], $e.push(nt) } } else if (Ve.type === "sankey") { var bt = de(Ve._module, Ue, Ce[0], Ae[0]); $e.push(bt) } else { if (rt.indexOf(Ve.xaxis) === -1 || ht.indexOf(Ve.yaxis) === -1) continue; $e.push(de(Ve._module, Ue, P(ve, Ve.xaxis), P(ve, Ve.yaxis))) } else $e.push(de(Ve._module, Ue, Ce[0], Ae[0])); return $e } function de(ve, Ce, Ae, ze) { return { _module: ve, cd: Ce, xaxis: Ae, yaxis: ze } } function me(ve) { var Ce = ve.searchInfo.cd[0].trace, Ae = ve.pointNumber, ze = ve.pointNumbers, Ue = ze.length > 0 ? ze[0] : Ae; return !!Ce.selectedpoints && Ce.selectedpoints.indexOf(Ue) > -1 } function _e(ve, Ce, Ae) { var ze, Ue; for (ze = 0; ze < Ce.length; ze++) { var Ve = Ce[ze].cd[0].trace._fullInput, Ye = ve._fullLayout._tracePreGUI[Ve.uid] || {}; Ye.selectedpoints === void 0 && (Ye.selectedpoints = Ve._input.selectedpoints || null) } if (Ae) { var $e = Ae.points || []; for (ze = 0; ze < Ce.length; ze++)(Ue = Ce[ze].cd[0].trace)._input.selectedpoints = Ue._fullInput.selectedpoints = [], Ue._fullInput !== Ue && (Ue.selectedpoints = []); for (var rt = 0; rt < $e.length; rt++) { var ht = $e[rt], nt = ht.data, bt = ht.fullData, wt = ht.pointIndex, ut = ht.pointIndices; ut ? ([].push.apply(nt.selectedpoints, ut), Ue._fullInput !== Ue && [].push.apply(bt.selectedpoints, ut)) : (nt.selectedpoints.push(wt), Ue._fullInput !== Ue && bt.selectedpoints.push(wt)) } } else for (ze = 0; ze < Ce.length; ze++)delete (Ue = Ce[ze].cd[0].trace).selectedpoints, delete Ue._input.selectedpoints, Ue._fullInput !== Ue && delete Ue._fullInput.selectedpoints; (function (lt, Tt) { for (var Et = !1, St = 0; St < Tt.length; St++) { var Ft = Tt[St], zt = Ft.cd; i.traceIs(zt[0].trace, "regl") && (Et = !0); var Je = Ft._module, et = Je.styleOnSelect || Je.style; et && (et(lt, zt, zt[0].node3), zt[0].nodeRangePlot3 && et(lt, zt, zt[0].nodeRangePlot3)) } Et && (O(lt), z(lt)) })(ve, Ce) } function Se(ve, Ce, Ae) { for (var ze = (Ae ? w.difference : w.union)({ regions: ve }, { regions: [Ce] }).regions.reverse(), Ue = 0; Ue < ze.length; Ue++) { var Ve = ze[Ue]; Ve.subtract = ae(Ve, ze.slice(0, Ue)) } return ze } function we(ve, Ce) { if (Array.isArray(ve)) for (var Ae = Ce.cd, ze = Ce.cd[0].trace, Ue = 0; Ue < ve.length; Ue++)ve[Ue] = l(ve[Ue], ze, Ae); return ve } function xe(ve, Ce) { for (var Ae = [], ze = 0; ze < ve.length; ze++) { Ae[ze] = []; for (var Ue = 0; Ue < ve[ze].length; Ue++) { Ae[ze][Ue] = [], Ae[ze][Ue][0] = Ue ? "L" : "M"; for (var Ve = 0; Ve < ve[ze][Ue].length; Ve++)Ae[ze][Ue].push(ve[ze][Ue][Ve]) } Ce || Ae[ze].push(["Z", Ae[ze][0][1], Ae[ze][0][2]]) } return Ae } function De(ve, Ce) { for (var Ae, ze, Ue = [], Ve = [], Ye = 0; Ye < Ce.length; Ye++) { var $e = Ce[Ye]; ze = $e._module.selectPoints($e, ve), Ve.push(ze), Ae = we(ze, $e), Ue = Ue.concat(Ae) } return Ue } function Ee(ve, Ce, Ae, ze, Ue) { var Ve, Ye, $e, rt = !!ze; Ue && (Ve = Ue.plotinfo, Ye = Ue.xaxes[0]._id, $e = Ue.yaxes[0]._id); var ht = [], nt = [], bt = fe(ve), wt = ve._fullLayout; if (Ve) { var ut = wt._zoomlayer, lt = wt.dragmode, Tt = n(lt), Et = s(lt); if (Tt || Et) { var St = P(ve, Ye, "x"), Ft = P(ve, $e, "y"); if (St && Ft) { var zt = ut.selectAll(".select-outline-" + Ve.id); if (zt && ve._fullLayout._outlining && zt.length) { for (var Je = zt[0][0].getAttribute("d"), et = v(Je, ve, Ve), Ze = [], Qe = 0; Qe < et.length; Qe++) { for (var st = et[Qe], ft = [], Be = 0; Be < st.length; Be++)ft.push([be(St, st[Be][1]), be(Ft, st[Be][2])]); ft.xref = Ye, ft.yref = $e, ft.subtract = ae(ft, Ze), Ze.push(ft) } bt = bt.concat(Ze) } } } } var je = Ye && $e ? [Ye + $e] : wt._subplots.cartesian; (function (Pn) { var Dn = Pn.calcdata; if (Dn) for (var En = 0; En < Dn.length; En++) { var Fn = Dn[En][0].trace, er = Pn._fullLayout._splomScenes; if (er) { var ir = er[Fn.uid]; ir && (ir.selectBatch = []) } } })(ve); for (var at = {}, ot = 0; ot < je.length; ot++) { var xt = je[ot], yt = xt.indexOf("y"), _t = xt.slice(0, yt), gt = xt.slice(yt), Ct = Ye && $e ? Ae : void 0; if (Ct = he(bt, _t, gt, Ct)) { var dt = ze; if (!rt) { var vt = P(ve, _t, "x"), At = P(ve, gt, "y"); dt = ce(ve, [vt], [At], xt); for (var Bt = 0; Bt < dt.length; Bt++) { var jt = dt[Bt], Ut = jt.cd[0], tn = Ut.trace; if (jt._module.name === "scattergl" && !Ut.t.xpx) { var Xt = tn.x, Qt = tn.y, Gt = tn._length; Ut.t.xpx = [], Ut.t.ypx = []; for (var vn = 0; vn < Gt; vn++)Ut.t.xpx[vn] = vt.c2p(Xt[vn]), Ut.t.ypx[vn] = At.c2p(Qt[vn]) } jt._module.name === "splom" && (at[tn.uid] || (at[tn.uid] = !0)) } } var Tn = De(Ct, dt); ht = ht.concat(Tn), nt = nt.concat(dt) } } var dn = { points: ht }; _e(ve, nt, dn); var Yt = wt.clickmode.indexOf("event") > -1 && Ce; if (!Ve && Ce) { var ln = fe(ve, !0); if (ln.length) { var nn = ln[0].xref, fn = ln[0].yref; if (nn && fn) { var mn = Ie(ln); Te([P(ve, nn, "x"), P(ve, fn, "y")])(dn, mn) } } ve._fullLayout._noEmitSelectedAtStart ? ve._fullLayout._noEmitSelectedAtStart = !1 : Yt && Ne(ve, dn), wt._reselect = !1 } if (!Ve && wt._deselect) { var xn = wt._deselect; (function (Pn, Dn, En) { for (var Fn = 0; Fn < En.length; Fn++) { var er = En[Fn]; if (er.xaxis && er.xaxis._id === Pn && er.yaxis && er.yaxis._id === Dn) return !0 } return !1 })(Ye = xn.xref, $e = xn.yref, nt) || Me(ve, Ye, $e, ze), Yt && (dn.points.length ? Ne(ve, dn) : qe(ve)), wt._deselect = !1 } return { eventData: dn, selectionTesters: Ae } } function Me(ve, Ce, Ae, ze) { ze = ce(ve, [P(ve, Ce, "x")], [P(ve, Ae, "y")], Ce + Ae); for (var Ue = 0; Ue < ze.length; Ue++) { var Ve = ze[Ue]; Ve._module.selectPoints(Ve, !1) } _e(ve, ze) } function he(ve, Ce, Ae, ze) { for (var Ue, Ve = 0; Ve < ve.length; Ve++) { var Ye = ve[Ve]; Ce === Ye.xref && Ae === Ye.yref && (Ue ? ze = ee(Ue = Se(Ue, Ye, !!Ye.subtract)) : (Ue = [Ye], ze = G(Ye))) } return ze } function fe(ve, Ce) { for (var Ae = [], ze = ve._fullLayout, Ue = ze.selections, Ve = Ue.length, Ye = 0; Ye < Ve; Ye++)if (!Ce || Ye === ze._activeSelectionIndex) { var $e = Ue[Ye]; if ($e) { var rt, ht, nt, bt, wt, ut = $e.xref, lt = $e.yref, Tt = P(ve, ut, "x"), Et = P(ve, lt, "y"); if ($e.type === "rect") { wt = []; var St = be(Tt, $e.x0), Ft = be(Tt, $e.x1), zt = be(Et, $e.y0), Je = be(Et, $e.y1); wt = [[St, zt], [St, Je], [Ft, Je], [Ft, zt]], rt = Math.min(St, Ft), ht = Math.max(St, Ft), nt = Math.min(zt, Je), bt = Math.max(zt, Je), wt.xmin = rt, wt.xmax = ht, wt.ymin = nt, wt.ymax = bt, wt.xref = ut, wt.yref = lt, wt.subtract = !1, wt.isRect = !0, Ae.push(wt) } else if ($e.type === "path") for (var et = $e.path.split("Z"), Ze = [], Qe = 0; Qe < et.length; Qe++) { var st = et[Qe]; if (st) { st += "Z"; var ft = u.extractPathCoords(st, p.paramIsX, "raw"), Be = u.extractPathCoords(st, p.paramIsY, "raw"); rt = 1 / 0, ht = -1 / 0, nt = 1 / 0, bt = -1 / 0, wt = []; for (var je = 0; je < ft.length; je++) { var at = be(Tt, ft[je]), ot = be(Et, Be[je]); wt.push([at, ot]), rt = Math.min(at, rt), ht = Math.max(at, ht), nt = Math.min(ot, nt), bt = Math.max(ot, bt) } wt.xmin = rt, wt.xmax = ht, wt.ymin = nt, wt.ymax = bt, wt.xref = ut, wt.yref = lt, wt.subtract = ae(wt, Ze), Ze.push(wt), Ae.push(wt) } } } } return Ae } function ae(ve, Ce) { for (var Ae = !1, ze = 0; ze < Ce.length; ze++)for (var Ue = Ce[ze], Ve = 0; Ve < ve.length; Ve++)if (k(ve[Ve], Ue)) { Ae = !Ae; break } return Ae } function be(ve, Ce) { return ve.type === "date" && (Ce = Ce.replace("_", " ")), ve.type === "log" ? ve.c2p(Ce) : ve.r2p(Ce, null, ve.calendar) } function Ie(ve) { for (var Ce = ve.length, Ae = [], ze = 0; ze < Ce; ze++) { var Ue = ve[ze]; Ae = (Ae = Ae.concat(Ue)).concat([Ue[0]]) } return (Ve = Ae).isRect = Ve.length === 5 && Ve[0][0] === Ve[4][0] && Ve[0][1] === Ve[4][1] && Ve[0][0] === Ve[1][0] && Ve[2][0] === Ve[3][0] && Ve[0][1] === Ve[3][1] && Ve[1][1] === Ve[2][1] || Ve[0][1] === Ve[1][1] && Ve[2][1] === Ve[3][1] && Ve[0][0] === Ve[3][0] && Ve[1][0] === Ve[2][0], Ve.isRect && (Ve.xmin = Math.min(Ve[0][0], Ve[2][0]), Ve.xmax = Math.max(Ve[0][0], Ve[2][0]), Ve.ymin = Math.min(Ve[0][1], Ve[2][1]), Ve.ymax = Math.max(Ve[0][1], Ve[2][1])), Ve; var Ve } function Te(ve) { return function (Ce, Ae) { for (var ze, Ue, Ve = 0; Ve < ve.length; Ve++) { var Ye = ve[Ve], $e = Ye._id, rt = $e.charAt(0); if (Ae.isRect) { ze || (ze = {}); var ht = Ae[rt + "min"], nt = Ae[rt + "max"]; ht !== void 0 && nt !== void 0 && (ze[$e] = [j(Ye, ht), j(Ye, nt)].sort(M)) } else Ue || (Ue = {}), Ue[$e] = Ae.map(W(Ye)) } ze && (Ce.range = ze), Ue && (Ce.lassoPoints = Ue) } } function Ne(ve, Ce) { Ce && (Ce.selections = (ve.layout || {}).selections || []), ve.emit("plotly_selected", Ce) } function qe(ve) { ve.emit("plotly_deselect", null) } R.exports = { reselect: Ee, prepSelect: function (ve, Ce, Ae, ze, Ue) { var Ve = !ie(ze), Ye = o(Ue), $e = r(Ue), rt = a(Ue), ht = n(Ue), nt = s(Ue), bt = Ue === "drawcircle", wt = Ue === "drawline" || bt, ut = ze.gd, lt = ut._fullLayout, Tt = nt && lt.newselection.mode === "immediate" && Ve, Et = lt._zoomlayer, St = ze.element.getBoundingClientRect(), Ft = ze.plotinfo, zt = Z(Ft), Je = Ce - St.left, et = Ae - St.top; lt._calcInverseTransform(ut); var Ze = d.apply3DTransform(lt._invTransform)(Je, et); Je = Ze[0], et = Ze[1]; var Qe, st, ft, Be, je, at, ot, xt = lt._invScaleX, yt = lt._invScaleY, _t = Je, gt = et, Ct = "M" + Je + "," + et, dt = ze.xaxes[0], vt = ze.yaxes[0], At = dt._length, Bt = vt._length, jt = ve.altKey && !(n(Ue) && rt); re(ve, ut, ze), Ye && (Qe = D([[Je, et]], B.BENDPX)); var Ut = Et.selectAll("path.select-outline-" + Ft.id).data([1]), tn = ht ? lt.newshape : lt.newselection; ht && (ze.hasText = tn.label.text || tn.label.texttemplate); var Xt = ht && !rt ? tn.fillcolor : "rgba(0,0,0,0)", Qt = tn.line.color || (Ve ? y.contrast(ut._fullLayout.plot_bgcolor) : "#7f7f7f"); Ut.enter().append("path").attr("class", "select-outline select-outline-" + Ft.id).style({ opacity: ht ? tn.opacity / 2 : 1, "stroke-dasharray": _(tn.line.dash, tn.line.width), "stroke-width": tn.line.width + "px", "shape-rendering": "crispEdges" }).call(y.stroke, Qt).call(y.fill, Xt).attr("fill-rule", "evenodd").classed("cursor-move", !!ht).attr("transform", zt).attr("d", Ct + "Z"); var Gt = Et.append("path").attr("class", "zoombox-corners").style({ fill: y.background, stroke: y.defaultLine, "stroke-width": 1 }).attr("transform", zt).attr("d", "M0,0Z"); if (ht && ze.hasText) { var vn = Et.select(".label-temp"); vn.empty() && (vn = Et.append("g").classed("label-temp", !0).classed("select-outline", !0).style({ opacity: .8 })) } var Tn = lt._uid + B.SELECTID, dn = [], Yt = ce(ut, ze.xaxes, ze.yaxes, ze.subplot); Tt && !ve.shiftKey && (ze._clearSubplotSelections = function () { if (Ve) { var nn = dt._id, fn = vt._id; Me(ut, nn, fn, Yt); for (var mn = (ut.layout || {}).selections || [], xn = [], Pn = !1, Dn = 0; Dn < mn.length; Dn++) { var En = lt.selections[Dn]; En.xref !== nn || En.yref !== fn ? xn.push(mn[Dn]) : Pn = !0 } Pn && (ut._fullLayout._noEmitSelectedAtStart = !0, i.call("_guiRelayout", ut, { selections: xn })) } }); var ln = function (nn) { return nn.plotinfo.fillRangeItems || Te(nn.xaxes.concat(nn.yaxes)) }(ze); ze.moveFn = function (nn, fn) { ze._clearSubplotSelections && (ze._clearSubplotSelections(), ze._clearSubplotSelections = void 0), _t = Math.max(0, Math.min(At, xt * nn + Je)), gt = Math.max(0, Math.min(Bt, yt * fn + et)); var mn = Math.abs(_t - Je), xn = Math.abs(gt - et); if ($e) { var Pn, Dn, En; if (nt) { var Fn = lt.selectdirection; switch (Pn = Fn === "any" ? xn < Math.min(.6 * mn, Y) ? "h" : mn < Math.min(.6 * xn, Y) ? "v" : "d" : Fn) { case "h": Dn = bt ? Bt / 2 : 0, En = Bt; break; case "v": Dn = bt ? At / 2 : 0, En = At } } if (ht) switch (lt.newshape.drawdirection) { case "vertical": Pn = "h", Dn = bt ? Bt / 2 : 0, En = Bt; break; case "horizontal": Pn = "v", Dn = bt ? At / 2 : 0, En = At; break; case "ortho": mn < xn ? (Pn = "h", Dn = et, En = gt) : (Pn = "v", Dn = Je, En = _t); break; default: Pn = "d" }Pn === "h" ? ((Be = wt ? f(bt, [_t, Dn], [_t, En]) : [[Je, Dn], [Je, En], [_t, En], [_t, Dn]]).xmin = wt ? _t : Math.min(Je, _t), Be.xmax = wt ? _t : Math.max(Je, _t), Be.ymin = Math.min(Dn, En), Be.ymax = Math.max(Dn, En), Gt.attr("d", "M" + Be.xmin + "," + (et - Y) + "h-4v" + 2 * Y + "h4ZM" + (Be.xmax - 1) + "," + (et - Y) + "h4v" + 2 * Y + "h-4Z")) : Pn === "v" ? ((Be = wt ? f(bt, [Dn, gt], [En, gt]) : [[Dn, et], [Dn, gt], [En, gt], [En, et]]).xmin = Math.min(Dn, En), Be.xmax = Math.max(Dn, En), Be.ymin = wt ? gt : Math.min(et, gt), Be.ymax = wt ? gt : Math.max(et, gt), Gt.attr("d", "M" + (Je - Y) + "," + Be.ymin + "v-4h" + 2 * Y + "v4ZM" + (Je - Y) + "," + (Be.ymax - 1) + "v4h" + 2 * Y + "v-4Z")) : Pn === "d" && ((Be = wt ? f(bt, [Je, et], [_t, gt]) : [[Je, et], [Je, gt], [_t, gt], [_t, et]]).xmin = Math.min(Je, _t), Be.xmax = Math.max(Je, _t), Be.ymin = Math.min(et, gt), Be.ymax = Math.max(et, gt), Gt.attr("d", "M0,0Z")) } else Ye && (Qe.addPt([_t, gt]), Be = Qe.filtered); if (ze.selectionDefs && ze.selectionDefs.length ? (ft = Se(ze.mergedPolygons, Be, jt), Be.subtract = jt, st = ee(ze.selectionDefs.concat([Be]))) : (ft = [Be], st = G(Be)), c(xe(ft, rt), Ut, ze), nt) { var er, ir = Ee(ut, !1), fr = ir.eventData ? ir.eventData.points.slice() : []; ir = Ee(ut, !1, st, Yt, ze), st = ir.selectionTesters, ot = ir.eventData, er = Qe ? Qe.filtered : Ie(ft), C.throttle(Tn, B.SELECTDELAY, function () { for (var ar = (dn = De(st, Yt)).slice(), Kn = 0; Kn < fr.length; Kn++) { for (var wr = fr[Kn], Ht = !1, sn = 0; sn < ar.length; sn++)if (ar[sn].curveNumber === wr.curveNumber && ar[sn].pointNumber === wr.pointNumber) { Ht = !0; break } Ht || ar.push(wr) } ar.length && (ot || (ot = {}), ot.points = ar), ln(ot, er), function (gn, bn) { gn.emit("plotly_selecting", bn) }(ut, ot) }) } }, ze.clickFn = function (nn, fn) { if (Gt.remove(), ut._fullLayout._activeShapeIndex >= 0) ut._fullLayout._deactivateShape(ut); else if (!ht) { var mn = lt.clickmode; C.done(Tn).then(function () { if (C.clear(Tn), nn === 2) { for (Ut.remove(), je = 0; je < Yt.length; je++)(at = Yt[je])._module.selectPoints(at, !1); if (_e(ut, Yt), oe(ze), qe(ut), Yt.length) { var xn = Yt[0].xaxis, Pn = Yt[0].yaxis; if (xn && Pn) { for (var Dn = [], En = ut._fullLayout.selections, Fn = 0; Fn < En.length; Fn++) { var er = En[Fn]; er && (er.xref === xn._id && er.yref === Pn._id || Dn.push(er)) } Dn.length < En.length && (ut._fullLayout._noEmitSelectedAtStart = !0, i.call("_guiRelayout", ut, { selections: Dn })) } } } else mn.indexOf("select") > -1 && te(fn, ut, ze.xaxes, ze.yaxes, ze.subplot, ze, Ut), mn === "event" && Ne(ut, void 0); h.click(ut, fn) }).catch(d.error) } }, ze.doneFn = function () { Gt.remove(), C.done(Tn).then(function () { C.clear(Tn), !Tt && Be && ze.selectionDefs && (Be.subtract = jt, ze.selectionDefs.push(Be), ze.mergedPolygons.length = 0, [].push.apply(ze.mergedPolygons, ft)), (Tt || ht) && oe(ze, Tt), ze.doneFnCompleted && ze.doneFnCompleted(dn), nt && Ne(ut, ot) }).catch(d.error) } }, clearOutline: b, clearSelectionsCache: oe, selectOnClick: te } }, 89827: function (R, E, e) { var w = e(50215), k = e(41940), i = e(82196).line, _ = e(79952).P, y = e(1426).extendFlat, h = e(44467).templatedArray, l = (e(24695), e(5386).R), t = e(37281); R.exports = h("shape", { visible: { valType: "boolean", dflt: !0, editType: "calc+arraydraw" }, type: { valType: "enumerated", values: ["circle", "rect", "path", "line"], editType: "calc+arraydraw" }, layer: { valType: "enumerated", values: ["below", "above"], dflt: "above", editType: "arraydraw" }, xref: y({}, w.xref, {}), xsizemode: { valType: "enumerated", values: ["scaled", "pixel"], dflt: "scaled", editType: "calc+arraydraw" }, xanchor: { valType: "any", editType: "calc+arraydraw" }, x0: { valType: "any", editType: "calc+arraydraw" }, x1: { valType: "any", editType: "calc+arraydraw" }, yref: y({}, w.yref, {}), ysizemode: { valType: "enumerated", values: ["scaled", "pixel"], dflt: "scaled", editType: "calc+arraydraw" }, yanchor: { valType: "any", editType: "calc+arraydraw" }, y0: { valType: "any", editType: "calc+arraydraw" }, y1: { valType: "any", editType: "calc+arraydraw" }, path: { valType: "string", editType: "calc+arraydraw" }, opacity: { valType: "number", min: 0, max: 1, dflt: 1, editType: "arraydraw" }, line: { color: y({}, i.color, { editType: "arraydraw" }), width: y({}, i.width, { editType: "calc+arraydraw" }), dash: y({}, _, { editType: "arraydraw" }), editType: "calc+arraydraw" }, fillcolor: { valType: "color", dflt: "rgba(0,0,0,0)", editType: "arraydraw" }, fillrule: { valType: "enumerated", values: ["evenodd", "nonzero"], dflt: "evenodd", editType: "arraydraw" }, editable: { valType: "boolean", dflt: !1, editType: "calc+arraydraw" }, label: { text: { valType: "string", dflt: "", editType: "arraydraw" }, texttemplate: l({}, { keys: Object.keys(t) }), font: k({ editType: "calc+arraydraw", colorEditType: "arraydraw" }), textposition: { valType: "enumerated", values: ["top left", "top center", "top right", "middle left", "middle center", "middle right", "bottom left", "bottom center", "bottom right", "start", "middle", "end"], editType: "arraydraw" }, textangle: { valType: "angle", dflt: "auto", editType: "calc+arraydraw" }, xanchor: { valType: "enumerated", values: ["auto", "left", "center", "right"], dflt: "auto", editType: "calc+arraydraw" }, yanchor: { valType: "enumerated", values: ["top", "middle", "bottom"], editType: "calc+arraydraw" }, padding: { valType: "number", dflt: 3, min: 0, editType: "arraydraw" }, editType: "arraydraw" }, editType: "arraydraw" }) }, 5627: function (R, E, e) { var w = e(71828), k = e(89298), i = e(21459), _ = e(30477); function y(o) { return l(o.line.width, o.xsizemode, o.x0, o.x1, o.path, !1) } function h(o) { return l(o.line.width, o.ysizemode, o.y0, o.y1, o.path, !0) } function l(o, r, n, a, s, u) { var p = o / 2, c = u; if (r === "pixel") { var b = s ? _.extractPathCoords(s, u ? i.paramIsY : i.paramIsX) : [n, a], g = w.aggNums(Math.max, null, b), f = w.aggNums(Math.min, null, b), v = f < 0 ? Math.abs(f) + p : p, m = g > 0 ? g + p : p; return { ppad: p, ppadplus: c ? v : m, ppadminus: c ? m : v } } return { ppad: p } } function t(o, r, n, a, s) { var u = o.type === "category" || o.type === "multicategory" ? o.r2c : o.d2c; if (r !== void 0) return [u(r), u(n)]; if (a) { var p, c, b, g, f = 1 / 0, v = -1 / 0, m = a.match(i.segmentRE); for (o.type === "date" && (u = _.decodeDate(u)), p = 0; p < m.length; p++)(c = s[m[p].charAt(0)].drawn) !== void 0 && (!(b = m[p].substr(1).match(i.paramRE)) || b.length < c || ((g = u(b[c])) < f && (f = g), g > v && (v = g))); return v >= f ? [f, v] : void 0 } } R.exports = function (o) { var r = o._fullLayout, n = w.filterVisible(r.shapes); if (n.length && o._fullData.length) for (var a = 0; a < n.length; a++) { var s, u, p = n[a]; p._extremes = {}; var c = k.getRefType(p.xref), b = k.getRefType(p.yref); if (p.xref !== "paper" && c !== "domain") { var g = p.xsizemode === "pixel" ? p.xanchor : p.x0, f = p.xsizemode === "pixel" ? p.xanchor : p.x1; (u = t(s = k.getFromId(o, p.xref), g, f, p.path, i.paramIsX)) && (p._extremes[s._id] = k.findExtremes(s, u, y(p))) } if (p.yref !== "paper" && b !== "domain") { var v = p.ysizemode === "pixel" ? p.yanchor : p.y0, m = p.ysizemode === "pixel" ? p.yanchor : p.y1; (u = t(s = k.getFromId(o, p.yref), v, m, p.path, i.paramIsY)) && (p._extremes[s._id] = k.findExtremes(s, u, h(p))) } } } }, 21459: function (R) { R.exports = { segmentRE: /[MLHVQCTSZ][^MLHVQCTSZ]*/g, paramRE: /[^\s,]+/g, paramIsX: { M: { 0: !0, drawn: 0 }, L: { 0: !0, drawn: 0 }, H: { 0: !0, drawn: 0 }, V: {}, Q: { 0: !0, 2: !0, drawn: 2 }, C: { 0: !0, 2: !0, 4: !0, drawn: 4 }, T: { 0: !0, drawn: 0 }, S: { 0: !0, 2: !0, drawn: 2 }, Z: {} }, paramIsY: { M: { 1: !0, drawn: 1 }, L: { 1: !0, drawn: 1 }, H: {}, V: { 0: !0, drawn: 0 }, Q: { 1: !0, 3: !0, drawn: 3 }, C: { 1: !0, 3: !0, 5: !0, drawn: 5 }, T: { 1: !0, drawn: 1 }, S: { 1: !0, 3: !0, drawn: 5 }, Z: {} }, numParams: { M: 2, L: 2, H: 1, V: 1, Q: 4, C: 6, T: 2, S: 4, Z: 0 } } }, 84726: function (R, E, e) { var w = e(71828), k = e(89298), i = e(85501), _ = e(89827), y = e(30477); function h(l, t, o) { function r(V, j) { return w.coerce(l, t, _, V, j) } if (r("visible")) { var n = r("path"), a = r("type", n ? "path" : "rect"), s = a !== "path"; s && delete t.path, r("editable"), r("layer"), r("opacity"), r("fillcolor"), r("fillrule"), r("line.width") && (r("line.color"), r("line.dash")); for (var u = r("xsizemode"), p = r("ysizemode"), c = ["x", "y"], b = 0; b < 2; b++) { var g, f, v, m = c[b], x = m + "anchor", T = m === "x" ? u : p, d = { _fullLayout: o }, M = k.coerceRef(l, t, d, m, void 0, "paper"); if (k.getRefType(M) === "range" ? ((g = k.getFromId(d, M))._shapeIndices.push(t._index), v = y.rangeToShapePosition(g), f = y.shapePositionToRange(g)) : f = v = w.identity, s) { var A = m + "0", C = m + "1", P = l[A], O = l[C]; l[A] = f(l[A], !0), l[C] = f(l[C], !0), T === "pixel" ? (r(A, 0), r(C, 10)) : (k.coercePosition(t, d, r, M, A, .25), k.coercePosition(t, d, r, M, C, .75)), t[A] = v(t[A]), t[C] = v(t[C]), l[A] = P, l[C] = O } if (T === "pixel") { var z = l[x]; l[x] = f(l[x], !0), k.coercePosition(t, d, r, M, x, .25), t[x] = v(t[x]), l[x] = z } } s && w.noneOrAll(l, t, ["x0", "x1", "y0", "y1"]); var B, Y, D = a === "line"; if (s && (B = r("label.texttemplate")), B || (Y = r("label.text")), Y || B) { r("label.textangle"); var G = r("label.textposition", D ? "middle" : "middle center"); r("label.xanchor"), r("label.yanchor", function (V, j) { return V ? "bottom" : j.indexOf("top") !== -1 ? "top" : j.indexOf("bottom") !== -1 ? "bottom" : "middle" }(D, G)), r("label.padding"), w.coerceFont(r, "label.font", o.font) } } } R.exports = function (l, t) { i(l, t, { name: "shapes", handleItemDefaults: h }) } }, 48100: function (R, E, e) { var w = e(71828), k = e(89298), i = e(63893), _ = e(91424), y = e(60165).readPaths, h = e(30477), l = h.getPathString, t = e(37281), o = e(18783).FROM_TL; R.exports = function (r, n, a, s) { if (s.selectAll(".shape-label").remove(), a.label.text || a.label.texttemplate) { var u; if (a.label.texttemplate) { var p = {}; if (a.type !== "path") { var c = k.getFromId(r, a.xref), b = k.getFromId(r, a.yref); for (var g in t) { var f = t[g](a, c, b); f !== void 0 && (p[g] = f) } } u = w.texttemplateStringForShapes(a.label.texttemplate, {}, r._fullLayout._d3locale, p) } else u = a.label.text; var v, m, x, T, d = { "data-index": n }, M = a.label.font, A = s.append("g").attr(d).classed("shape-label", !0).append("text").attr({ "data-notex": 1 }).classed("shape-label-text", !0).text(u); if (a.path) { var C = l(r, a), P = y(C, r); v = 1 / 0, x = 1 / 0, m = -1 / 0, T = -1 / 0; for (var O = 0; O < P.length; O++)for (var z = 0; z < P[O].length; z++)for (var B = P[O][z], Y = 1; Y < B.length; Y += 2) { var D = B[Y], G = B[Y + 1]; v = Math.min(v, D), m = Math.max(m, D), x = Math.min(x, G), T = Math.max(T, G) } } else { var V = k.getFromId(r, a.xref), j = k.getRefType(a.xref), W = k.getFromId(r, a.yref), Z = k.getRefType(a.yref), ie = h.getDataToPixel(r, V, !1, j), te = h.getDataToPixel(r, W, !0, Z); v = ie(a.x0), m = ie(a.x1), x = te(a.y0), T = te(a.y1) } var J = a.label.textangle; J === "auto" && (J = a.type === "line" ? function (ue, ce, de, me) { var _e, Se; return Se = Math.abs(de - ue), _e = de >= ue ? ce - me : me - ce, -180 / Math.PI * Math.atan2(_e, Se) }(v, x, m, T) : 0), A.call(function (ue) { return ue.call(_.font, M).attr({}), i.convertToTspans(ue, r), ue }); var X = function (ue, ce, de, me, _e, Se, we) { var xe, De, Ee, Me, he = _e.label.textposition, fe = _e.label.textangle, ae = _e.label.padding, be = _e.type, Ie = Math.PI / 180 * Se, Te = Math.sin(Ie), Ne = Math.cos(Ie), qe = _e.label.xanchor, ve = _e.label.yanchor; if (be === "line") { he === "start" ? (xe = ue, De = ce) : he === "end" ? (xe = de, De = me) : (xe = (ue + de) / 2, De = (ce + me) / 2), qe === "auto" && (qe = he === "start" ? fe === "auto" ? de > ue ? "left" : de < ue ? "right" : "center" : de > ue ? "right" : de < ue ? "left" : "center" : he === "end" ? fe === "auto" ? de > ue ? "right" : de < ue ? "left" : "center" : de > ue ? "left" : de < ue ? "right" : "center" : "center"); var Ce = { bottom: -1, middle: 0, top: 1 }; if (fe === "auto") { var Ae = Ce[ve]; Ee = -ae * Te * Ae, Me = ae * Ne * Ae } else Ee = ae * { left: 1, center: 0, right: -1 }[qe], Me = ae * Ce[ve]; xe += Ee, De += Me } else Ee = ae + 3, he.indexOf("right") !== -1 ? (xe = Math.max(ue, de) - Ee, qe === "auto" && (qe = "right")) : he.indexOf("left") !== -1 ? (xe = Math.min(ue, de) + Ee, qe === "auto" && (qe = "left")) : (xe = (ue + de) / 2, qe === "auto" && (qe = "center")), De = he.indexOf("top") !== -1 ? Math.min(ce, me) : he.indexOf("bottom") !== -1 ? Math.max(ce, me) : (ce + me) / 2, Me = ae, ve === "bottom" ? De -= Me : ve === "top" && (De += Me); var ze = o[ve], Ue = _e.label.font.size, Ve = we.height; return { textx: xe + (Ve * ze - Ue) * Te, texty: De + -(Ve * ze - Ue) * Ne, xanchor: qe } }(v, x, m, T, a, J, _.bBox(A.node())), ee = X.textx, re = X.texty, oe = X.xanchor; A.attr({ "text-anchor": { left: "start", center: "middle", right: "end" }[oe], y: re, x: ee, transform: "rotate(" + J + "," + ee + "," + re + ")" }).call(i.positionText, ee, re) } } }, 42359: function (R, E, e) { var w = e(71828).strTranslate, k = e(28569), i = e(64505), _ = i.drawMode, y = i.selectMode, h = e(73972), l = e(7901), t = e(89995), o = t.i000, r = t.i090, n = t.i180, a = t.i270, s = e(51873).clearOutlineControllers, u = e(60165), p = u.pointsOnRectangle, c = u.pointsOnEllipse, b = u.writePaths, g = e(90551).newShapes, f = e(90551).createShapeObj, v = e(35855), m = e(48100); function x(T, d) { var M, A, C, P = T[d][1], O = T[d][2], z = T.length; return A = T[M = (d + 1) % z][1], C = T[M][2], A === P && C === O && (A = T[M = (d + 2) % z][1], C = T[M][2]), [M, A, C] } R.exports = function T(d, M, A, C) { C || (C = 0); var P = A.gd; function O() { T(d, M, A, C++), (c(d[0]) || A.hasText) && z({ redrawing: !0 }) } function z(_e) { var Se = {}; A.isActiveShape !== void 0 && (A.isActiveShape = !1, Se = g(M, A)), A.isActiveSelection !== void 0 && (A.isActiveSelection = !1, Se = v(M, A), P._fullLayout._reselect = !0), Object.keys(Se).length && h.call((_e || {}).redrawing ? "relayout" : "_guiRelayout", P, Se) } var B, Y, D, G, V, j = P._fullLayout._zoomlayer, W = A.dragmode, Z = _(W), ie = y(W); if ((Z || ie) && (P._fullLayout._outlining = !0), s(P), M.attr("d", b(d)), C || !A.isActiveShape && !A.isActiveSelection || (V = function (_e, Se) { for (var we = 0; we < Se.length; we++) { var xe = Se[we]; _e[we] = []; for (var De = 0; De < xe.length; De++) { _e[we][De] = []; for (var Ee = 0; Ee < xe[De].length; Ee++)_e[we][De][Ee] = xe[De][Ee] } } return _e }([], d), function (_e) { B = []; for (var Se = 0; Se < d.length; Se++) { var we = d[Se], xe = p(we), De = !xe && c(we); B[Se] = []; for (var Ee = we.length, Me = 0; Me < Ee; Me++)if (we[Me][0] !== "Z" && (!De || Me === o || Me === r || Me === n || Me === a)) { var he, fe = xe && A.isActiveSelection; fe && (he = x(we, Me)); var ae = we[Me][1], be = we[Me][2], Ie = _e.append(fe ? "rect" : "circle").attr("data-i", Se).attr("data-j", Me).style({ fill: l.background, stroke: l.defaultLine, "stroke-width": 1, "shape-rendering": "crispEdges" }); if (fe) { var Te = he[1] - ae, Ne = he[2] - be, qe = Ne ? 5 : Math.max(Math.min(25, Math.abs(Te) - 5), 5), ve = Te ? 5 : Math.max(Math.min(25, Math.abs(Ne) - 5), 5); Ie.classed(Ne ? "cursor-ew-resize" : "cursor-ns-resize", !0).attr("width", qe).attr("height", ve).attr("x", ae - qe / 2).attr("y", be - ve / 2).attr("transform", w(Te / 2, Ne / 2)) } else Ie.classed("cursor-grab", !0).attr("r", 5).attr("cx", ae).attr("cy", be); B[Se][Me] = { element: Ie.node(), gd: P, prepFn: X, doneFn: re, clickFn: oe }, k.init(B[Se][Me]) } } }(j.append("g").attr("class", "outline-controllers")), function () { Y = [], d.length && (Y[0] = { element: M[0][0], gd: P, prepFn: ce, doneFn: de, clickFn: me }, k.init(Y[0])) }()), Z && A.hasText) { var te = j.select(".label-temp"), J = f(M, A, A.dragmode); m(P, "label-temp", J, te) } function X(_e) { D = +_e.srcElement.getAttribute("data-i"), G = +_e.srcElement.getAttribute("data-j"), B[D][G].moveFn = ee } function ee(_e, Se) { if (d.length) { var we = V[D][G][1], xe = V[D][G][2], De = d[D], Ee = De.length; if (p(De)) { var Me = _e, he = Se; A.isActiveSelection && (x(De, G)[1] === De[G][1] ? he = 0 : Me = 0); for (var fe = 0; fe < Ee; fe++)if (fe !== G) { var ae = De[fe]; ae[1] === De[G][1] && (ae[1] = we + Me), ae[2] === De[G][2] && (ae[2] = xe + he) } if (De[G][1] = we + Me, De[G][2] = xe + he, !p(De)) for (var be = 0; be < Ee; be++)for (var Ie = 0; Ie < De[be].length; Ie++)De[be][Ie] = V[D][be][Ie] } else De[G][1] = we + _e, De[G][2] = xe + Se; O() } } function re() { z() } function oe(_e, Se) { if (_e === 2) { D = +Se.srcElement.getAttribute("data-i"), G = +Se.srcElement.getAttribute("data-j"); var we = d[D]; p(we) || c(we) || function () { if (d.length && d[D] && d[D].length) { for (var xe = [], De = 0; De < d[D].length; De++)De !== G && xe.push(d[D][De]); xe.length > 1 && (xe.length !== 2 || xe[1][0] !== "Z") && (G === 0 && (xe[0][0] = "M"), d[D] = xe, O(), z()) } }() } } function ue(_e, Se) { (function (we, xe) { if (d.length) for (var De = 0; De < d.length; De++)for (var Ee = 0; Ee < d[De].length; Ee++)for (var Me = 0; Me + 2 < d[De][Ee].length; Me += 2)d[De][Ee][Me + 1] = V[De][Ee][Me + 1] + we, d[De][Ee][Me + 2] = V[De][Ee][Me + 2] + xe })(_e, Se), O() } function ce(_e) { (D = +_e.srcElement.getAttribute("data-i")) || (D = 0), Y[D].moveFn = ue } function de() { z() } function me(_e) { _e === 2 && function (Se) { if (y(Se._fullLayout.dragmode)) { s(Se); var we = Se._fullLayout._activeSelectionIndex, xe = (Se.layout || {}).selections || []; if (we < xe.length) { for (var De = [], Ee = 0; Ee < xe.length; Ee++)Ee !== we && De.push(xe[Ee]); delete Se._fullLayout._activeSelectionIndex; var Me = Se._fullLayout.selections[we]; Se._fullLayout._deselect = { xref: Me.xref, yref: Me.yref }, h.call("_guiRelayout", Se, { selections: De }) } } }(P) } } }, 34031: function (R, E, e) { var w = e(39898), k = e(73972), i = e(71828), _ = e(89298), y = e(60165).readPaths, h = e(42359), l = e(48100), t = e(51873).clearOutlineControllers, o = e(7901), r = e(91424), n = e(44467).arrayEditor, a = e(28569), s = e(6964), u = e(21459), p = e(30477), c = p.getPathString; function b(d) { var M = d._fullLayout; for (var A in M._shapeUpperLayer.selectAll("path").remove(), M._shapeLowerLayer.selectAll("path").remove(), M._shapeUpperLayer.selectAll("text").remove(), M._shapeLowerLayer.selectAll("text").remove(), M._plots) { var C = M._plots[A].shapelayer; C && (C.selectAll("path").remove(), C.selectAll("text").remove()) } for (var P = 0; P < M.shapes.length; P++)M.shapes[P].visible && v(d, P) } function g(d) { return !!d._fullLayout._outlining } function f(d) { return !d._context.edits.shapePosition } function v(d, M) { d._fullLayout._paperdiv.selectAll('.shapelayer [data-index="' + M + '"]').remove(); var A = p.makeShapesOptionsAndPlotinfo(d, M), C = A.options, P = A.plotinfo; function O(z) { var B = c(d, C), Y = { "data-index": M, "fill-rule": C.fillrule, d: B }, D = C.opacity, G = C.fillcolor, V = C.line.width ? C.line.color : "rgba(0,0,0,0)", j = C.line.width, W = C.line.dash; j || C.editable !== !0 || (j = 5, W = "solid"); var Z = B[B.length - 1] !== "Z", ie = f(d) && C.editable && d._fullLayout._activeShapeIndex === M; ie && (G = Z ? "rgba(0,0,0,0)" : d._fullLayout.activeshape.fillcolor, D = d._fullLayout.activeshape.opacity); var te, J = z.append("g").classed("shape-group", !0).attr({ "data-index": M }), X = J.append("path").attr(Y).style("opacity", D).call(o.stroke, V).call(o.fill, G).call(r.dashLine, W, j); if (m(J, d, C), l(d, M, C, J), (ie || d._context.edits.shapePosition) && (te = n(d.layout, "shapes", C)), ie) { X.style({ cursor: "move" }); var ee = { element: X.node(), plotinfo: P, gd: d, editHelpers: te, hasText: C.label.text || C.label.texttemplate, isActiveShape: !0 }, re = y(B, d); h(re, X, ee) } else d._context.edits.shapePosition ? function (oe, ue, ce, de, me, _e) { var Se, we, xe, De, Ee, Me, he, fe, ae, be, Ie, Te, Ne, qe, ve, Ce, Ae = 10, ze = 10, Ue = ce.xsizemode === "pixel", Ve = ce.ysizemode === "pixel", Ye = ce.type === "line", $e = ce.type === "path", rt = _e.modifyItem, ht = w.select(ue.node().parentNode), nt = _.getFromId(oe, ce.xref), bt = _.getRefType(ce.xref), wt = _.getFromId(oe, ce.yref), ut = _.getRefType(ce.yref), lt = p.getDataToPixel(oe, nt, !1, bt), Tt = p.getDataToPixel(oe, wt, !0, ut), Et = p.getPixelToData(oe, nt, !1, bt), St = p.getPixelToData(oe, wt, !0, ut), Ft = Ye ? function () { var ft = 10, Be = Math.max(ce.line.width, ft), je = me.append("g").attr("data-index", de).attr("drag-helper", !0); je.append("path").attr("d", ue.attr("d")).style({ cursor: "move", "stroke-width": Be, "stroke-opacity": "0" }); var at = { "fill-opacity": "0" }, ot = Math.max(Be / 2, ft); return je.append("circle").attr({ "data-line-point": "start-point", cx: Ue ? lt(ce.xanchor) + ce.x0 : lt(ce.x0), cy: Ve ? Tt(ce.yanchor) - ce.y0 : Tt(ce.y0), r: ot }).style(at).classed("cursor-grab", !0), je.append("circle").attr({ "data-line-point": "end-point", cx: Ue ? lt(ce.xanchor) + ce.x1 : lt(ce.x1), cy: Ve ? Tt(ce.yanchor) - ce.y1 : Tt(ce.y1), r: ot }).style(at).classed("cursor-grab", !0), je }() : ue, zt = { element: Ft.node(), gd: oe, prepFn: function (ft) { g(oe) || (Ue && (Ee = lt(ce.xanchor)), Ve && (Me = Tt(ce.yanchor)), ce.type === "path" ? ve = ce.path : (Se = Ue ? ce.x0 : lt(ce.x0), we = Ve ? ce.y0 : Tt(ce.y0), xe = Ue ? ce.x1 : lt(ce.x1), De = Ve ? ce.y1 : Tt(ce.y1)), Se < xe ? (ae = Se, Ne = "x0", be = xe, qe = "x1") : (ae = xe, Ne = "x1", be = Se, qe = "x0"), !Ve && we < De || Ve && we > De ? (he = we, Ie = "y0", fe = De, Te = "y1") : (he = De, Ie = "y1", fe = we, Te = "y0"), Je(ft), Qe(me, ce), function (Be, je, at) { var ot = je.xref, xt = je.yref, yt = _.getFromId(at, ot), _t = _.getFromId(at, xt), gt = ""; ot === "paper" || yt.autorange || (gt += ot), xt === "paper" || _t.autorange || (gt += xt), r.setClipUrl(Be, gt ? "clip" + at._fullLayout._uid + gt : null, at) }(ue, ce, oe), zt.moveFn = Ce === "move" ? et : Ze, zt.altKey = ft.altKey) }, doneFn: function () { g(oe) || (s(ue), st(me), m(ue, oe, ce), k.call("_guiRelayout", oe, _e.getUpdateObj())) }, clickFn: function () { g(oe) || st(me) } }; function Je(ft) { if (g(oe)) Ce = null; else if (Ye) Ce = ft.target.tagName === "path" ? "move" : ft.target.attributes["data-line-point"].value === "start-point" ? "resize-over-start-point" : "resize-over-end-point"; else { var Be = zt.element.getBoundingClientRect(), je = Be.right - Be.left, at = Be.bottom - Be.top, ot = ft.clientX - Be.left, xt = ft.clientY - Be.top, yt = !$e && je > Ae && at > ze && !ft.shiftKey ? a.getCursor(ot / je, 1 - xt / at) : "move"; s(ue, yt), Ce = yt.split("-")[0] } } function et(ft, Be) { if (ce.type === "path") { var je = function (xt) { return xt }, at = je, ot = je; Ue ? rt("xanchor", ce.xanchor = Et(Ee + ft)) : (at = function (xt) { return Et(lt(xt) + ft) }, nt && nt.type === "date" && (at = p.encodeDate(at))), Ve ? rt("yanchor", ce.yanchor = St(Me + Be)) : (ot = function (xt) { return St(Tt(xt) + Be) }, wt && wt.type === "date" && (ot = p.encodeDate(ot))), rt("path", ce.path = x(ve, at, ot)) } else Ue ? rt("xanchor", ce.xanchor = Et(Ee + ft)) : (rt("x0", ce.x0 = Et(Se + ft)), rt("x1", ce.x1 = Et(xe + ft))), Ve ? rt("yanchor", ce.yanchor = St(Me + Be)) : (rt("y0", ce.y0 = St(we + Be)), rt("y1", ce.y1 = St(De + Be))); ue.attr("d", c(oe, ce)), Qe(me, ce), l(oe, de, ce, ht) } function Ze(ft, Be) { if ($e) { var je = function (Qt) { return Qt }, at = je, ot = je; Ue ? rt("xanchor", ce.xanchor = Et(Ee + ft)) : (at = function (Qt) { return Et(lt(Qt) + ft) }, nt && nt.type === "date" && (at = p.encodeDate(at))), Ve ? rt("yanchor", ce.yanchor = St(Me + Be)) : (ot = function (Qt) { return St(Tt(Qt) + Be) }, wt && wt.type === "date" && (ot = p.encodeDate(ot))), rt("path", ce.path = x(ve, at, ot)) } else if (Ye) { if (Ce === "resize-over-start-point") { var xt = Se + ft, yt = Ve ? we - Be : we + Be; rt("x0", ce.x0 = Ue ? xt : Et(xt)), rt("y0", ce.y0 = Ve ? yt : St(yt)) } else if (Ce === "resize-over-end-point") { var _t = xe + ft, gt = Ve ? De - Be : De + Be; rt("x1", ce.x1 = Ue ? _t : Et(_t)), rt("y1", ce.y1 = Ve ? gt : St(gt)) } } else { var Ct = function (Qt) { return Ce.indexOf(Qt) !== -1 }, dt = Ct("n"), vt = Ct("s"), At = Ct("w"), Bt = Ct("e"), jt = dt ? he + Be : he, Ut = vt ? fe + Be : fe, tn = At ? ae + ft : ae, Xt = Bt ? be + ft : be; Ve && (dt && (jt = he - Be), vt && (Ut = fe - Be)), (!Ve && Ut - jt > ze || Ve && jt - Ut > ze) && (rt(Ie, ce[Ie] = Ve ? jt : St(jt)), rt(Te, ce[Te] = Ve ? Ut : St(Ut))), Xt - tn > Ae && (rt(Ne, ce[Ne] = Ue ? tn : Et(tn)), rt(qe, ce[qe] = Ue ? Xt : Et(Xt))) } ue.attr("d", c(oe, ce)), Qe(me, ce), l(oe, de, ce, ht) } function Qe(ft, Be) { (Ue || Ve) && function () { var je = Be.type !== "path", at = ft.selectAll(".visual-cue").data([0]); at.enter().append("path").attr({ fill: "#fff", "fill-rule": "evenodd", stroke: "#000", "stroke-width": 1 }).classed("visual-cue", !0); var ot = lt(Ue ? Be.xanchor : i.midRange(je ? [Be.x0, Be.x1] : p.extractPathCoords(Be.path, u.paramIsX))), xt = Tt(Ve ? Be.yanchor : i.midRange(je ? [Be.y0, Be.y1] : p.extractPathCoords(Be.path, u.paramIsY))); if (ot = p.roundPositionForSharpStrokeRendering(ot, 1), xt = p.roundPositionForSharpStrokeRendering(xt, 1), Ue && Ve) { var yt = "M" + (ot - 1 - 1) + "," + (xt - 1 - 1) + "h-8v2h8 v8h2v-8 h8v-2h-8 v-8h-2 Z"; at.attr("d", yt) } else if (Ue) { var _t = "M" + (ot - 1 - 1) + "," + (xt - 9 - 1) + "v18 h2 v-18 Z"; at.attr("d", _t) } else { var gt = "M" + (ot - 9 - 1) + "," + (xt - 1 - 1) + "h18 v2 h-18 Z"; at.attr("d", gt) } }() } function st(ft) { ft.selectAll(".visual-cue").remove() } a.init(zt), Ft.node().onmousemove = Je }(d, X, C, M, z, te) : C.editable === !0 && X.style("pointer-events", Z || o.opacity(G) * D <= .5 ? "stroke" : "all"); X.node().addEventListener("click", function () { return function (oe, ue) { if (f(oe)) { var ce = +ue.node().getAttribute("data-index"); if (ce >= 0) { if (ce === oe._fullLayout._activeShapeIndex) return void T(oe); oe._fullLayout._activeShapeIndex = ce, oe._fullLayout._deactivateShape = T, b(oe) } } }(d, X) }) } C._input && C.visible !== !1 && (C.layer !== "below" ? O(d._fullLayout._shapeUpperLayer) : C.xref === "paper" || C.yref === "paper" ? O(d._fullLayout._shapeLowerLayer) : P._hadPlotinfo ? O((P.mainplotinfo || P).shapelayer) : O(d._fullLayout._shapeLowerLayer)) } function m(d, M, A) { var C = (A.xref + A.yref).replace(/paper/g, "").replace(/[xyz][1-9]* *domain/g, ""); r.setClipUrl(d, C ? "clip" + M._fullLayout._uid + C : null, M) } function x(d, M, A) { return d.replace(u.segmentRE, function (C) { var P = 0, O = C.charAt(0), z = u.paramIsX[O], B = u.paramIsY[O], Y = u.numParams[O]; return O + C.substr(1).replace(u.paramRE, function (D) { return P >= Y || (z[P] ? D = M(D) : B[P] && (D = A(D)), P++), D }) }) } function T(d) { f(d) && d._fullLayout._activeShapeIndex >= 0 && (t(d), delete d._fullLayout._activeShapeIndex, b(d)) } R.exports = { draw: b, drawOne: v, eraseActiveShape: function (d) { if (f(d)) { t(d); var M = d._fullLayout._activeShapeIndex, A = (d.layout || {}).shapes || []; if (M < A.length) { for (var C = [], P = 0; P < A.length; P++)P !== M && C.push(A[P]); delete d._fullLayout._activeShapeIndex, k.call("_guiRelayout", d, { shapes: C }) } } }, drawLabel: l } }, 29241: function (R, E, e) { var w = e(41940), k = e(79952).P, i = e(1426).extendFlat, _ = e(5386).R, y = e(37281); R.exports = { newshape: { line: { color: { valType: "color", editType: "none" }, width: { valType: "number", min: 0, dflt: 4, editType: "none" }, dash: i({}, k, { dflt: "solid", editType: "none" }), editType: "none" }, fillcolor: { valType: "color", dflt: "rgba(0,0,0,0)", editType: "none" }, fillrule: { valType: "enumerated", values: ["evenodd", "nonzero"], dflt: "evenodd", editType: "none" }, opacity: { valType: "number", min: 0, max: 1, dflt: 1, editType: "none" }, layer: { valType: "enumerated", values: ["below", "above"], dflt: "above", editType: "none" }, drawdirection: { valType: "enumerated", values: ["ortho", "horizontal", "vertical", "diagonal"], dflt: "diagonal", editType: "none" }, label: { text: { valType: "string", dflt: "", editType: "none" }, texttemplate: _({ newshape: !0, editType: "none" }, { keys: Object.keys(y) }), font: w({ editType: "none" }), textposition: { valType: "enumerated", values: ["top left", "top center", "top right", "middle left", "middle center", "middle right", "bottom left", "bottom center", "bottom right", "start", "middle", "end"], editType: "none" }, textangle: { valType: "angle", dflt: "auto", editType: "none" }, xanchor: { valType: "enumerated", values: ["auto", "left", "center", "right"], dflt: "auto", editType: "none" }, yanchor: { valType: "enumerated", values: ["top", "middle", "bottom"], editType: "none" }, padding: { valType: "number", dflt: 3, min: 0, editType: "none" }, editType: "none" }, editType: "none" }, activeshape: { fillcolor: { valType: "color", dflt: "rgb(255,0,255)", editType: "none" }, opacity: { valType: "number", min: 0, max: 1, dflt: .5, editType: "none" }, editType: "none" } } }, 89995: function (R) { R.exports = { CIRCLE_SIDES: 32, i000: 0, i090: 8, i180: 16, i270: 24, cos45: Math.cos(Math.PI / 4), sin45: Math.sin(Math.PI / 4), SQRT2: Math.sqrt(2) } }, 45547: function (R, E, e) { var w = e(7901), k = e(71828); R.exports = function (i, _, y) { if (y("newshape.drawdirection"), y("newshape.layer"), y("newshape.fillcolor"), y("newshape.fillrule"), y("newshape.opacity"), y("newshape.line.width")) { var h = (i || {}).plot_bgcolor || "#FFF"; y("newshape.line.color", w.contrast(h)), y("newshape.line.dash") } var l = i.dragmode === "drawline", t = y("newshape.label.text"), o = y("newshape.label.texttemplate"); if (t || o) { y("newshape.label.textangle"); var r = y("newshape.label.textposition", l ? "middle" : "middle center"); y("newshape.label.xanchor"), y("newshape.label.yanchor", function (n, a) { return n ? "bottom" : a.indexOf("top") !== -1 ? "top" : a.indexOf("bottom") !== -1 ? "bottom" : "middle" }(l, r)), y("newshape.label.padding"), k.coerceFont(y, "newshape.label.font", _.font) } y("activeshape.fillcolor"), y("activeshape.opacity") } }, 60165: function (R, E, e) { var w = e(95616), k = e(89995), i = k.CIRCLE_SIDES, _ = k.SQRT2, y = e(75549), h = y.p2r, l = y.r2p, t = [0, 3, 4, 5, 6, 1, 2], o = [0, 3, 4, 1, 2]; function r(a, s) { return Math.abs(a - s) <= 1e-6 } function n(a, s) { var u = s[1] - a[1], p = s[2] - a[2]; return Math.sqrt(u * u + p * p) } E.writePaths = function (a) { var s = a.length; if (!s) return "M0,0Z"; for (var u = "", p = 0; p < s; p++)for (var c = a[p].length, b = 0; b < c; b++) { var g = a[p][b][0]; if (g === "Z") u += "Z"; else for (var f = a[p][b].length, v = 0; v < f; v++) { var m = v; g === "Q" || g === "S" ? m = o[v] : g === "C" && (m = t[v]), u += a[p][b][m], v > 0 && v < f - 1 && (u += ",") } } return u }, E.readPaths = function (a, s, u, p) { var c, b, g, f = w(a), v = [], m = -1, x = 0, T = 0, d = function () { b = x, g = T }; d(); for (var M = 0; M < f.length; M++) { var A, C, P, O, z = [], B = f[M][0], Y = B; switch (B) { case "M": v[++m] = [], x = +f[M][1], T = +f[M][2], z.push([Y, x, T]), d(); break; case "Q": case "S": A = +f[M][1], P = +f[M][2], x = +f[M][3], T = +f[M][4], z.push([Y, x, T, A, P]); break; case "C": A = +f[M][1], P = +f[M][2], C = +f[M][3], O = +f[M][4], x = +f[M][5], T = +f[M][6], z.push([Y, x, T, A, P, C, O]); break; case "T": case "L": x = +f[M][1], T = +f[M][2], z.push([Y, x, T]); break; case "H": Y = "L", x = +f[M][1], z.push([Y, x, T]); break; case "V": Y = "L", T = +f[M][1], z.push([Y, x, T]); break; case "A": Y = "L"; var D = +f[M][1], G = +f[M][2]; +f[M][4] || (D = -D, G = -G); var V = x - D, j = T; for (c = 1; c <= i / 2; c++) { var W = 2 * Math.PI * c / i; z.push([Y, V + D * Math.cos(W), j + G * Math.sin(W)]) } break; case "Z": x === b && T === g || (x = b, T = g, z.push([Y, x, T])) }for (var Z = (u || {}).domain, ie = s._fullLayout._size, te = u && u.xsizemode === "pixel", J = u && u.ysizemode === "pixel", X = p === !1, ee = 0; ee < z.length; ee++) { for (c = 0; c + 2 < 7; c += 2) { var re = z[ee][c + 1], oe = z[ee][c + 2]; re !== void 0 && oe !== void 0 && (x = re, T = oe, u && (u.xaxis && u.xaxis.p2r ? (X && (re -= u.xaxis._offset), re = te ? l(u.xaxis, u.xanchor) + re : h(u.xaxis, re)) : (X && (re -= ie.l), Z ? re = Z.x[0] + re / ie.w : re /= ie.w), u.yaxis && u.yaxis.p2r ? (X && (oe -= u.yaxis._offset), oe = J ? l(u.yaxis, u.yanchor) - oe : h(u.yaxis, oe)) : (X && (oe -= ie.t), oe = Z ? Z.y[1] - oe / ie.h : 1 - oe / ie.h)), z[ee][c + 1] = re, z[ee][c + 2] = oe) } v[m].push(z[ee].slice()) } } return v }, E.pointsOnRectangle = function (a) { if (a.length !== 5) return !1; for (var s = 1; s < 3; s++)if (!r(a[0][s] - a[1][s], a[3][s] - a[2][s]) || !r(a[0][s] - a[3][s], a[1][s] - a[2][s])) return !1; return !(!r(a[0][1], a[1][1]) && !r(a[0][1], a[3][1]) || !(n(a[0], a[1]) * n(a[0], a[3]))) }, E.pointsOnEllipse = function (a) { var s = a.length; if (s !== i + 1) return !1; s = i; for (var u = 0; u < s; u++) { var p = (2 * s - u) % s, c = (s / 2 + p) % s, b = (s / 2 + u) % s; if (!r(n(a[u], a[b]), n(a[p], a[c]))) return !1 } return !0 }, E.handleEllipse = function (a, s, u) { if (!a) return [s, u]; var p = E.ellipseOver({ x0: s[0], y0: s[1], x1: u[0], y1: u[1] }), c = (p.x1 + p.x0) / 2, b = (p.y1 + p.y0) / 2, g = (p.x1 - p.x0) / 2, f = (p.y1 - p.y0) / 2; g || (g = f /= _), f || (f = g /= _); for (var v = [], m = 0; m < i; m++) { var x = 2 * m * Math.PI / i; v.push([c + g * Math.cos(x), b + f * Math.sin(x)]) } return v }, E.ellipseOver = function (a) { var s = a.x0, u = a.y0, p = a.x1, c = a.y1, b = p - s, g = c - u, f = ((s -= b) + p) / 2, v = ((u -= g) + c) / 2; return { x0: f - (b *= _), y0: v - (g *= _), x1: f + b, y1: v + g } }, E.fixDatesForPaths = function (a, s, u) { var p = s.type === "date", c = u.type === "date"; if (!p && !c) return a; for (var b = 0; b < a.length; b++)for (var g = 0; g < a[b].length; g++)for (var f = 0; f + 2 < a[b][g].length; f += 2)p && (a[b][g][f + 1] = a[b][g][f + 1].replace(" ", "_")), c && (a[b][g][f + 2] = a[b][g][f + 2].replace(" ", "_")); return a } }, 90551: function (R, E, e) { var w = e(64505), k = w.drawMode, i = w.openMode, _ = e(89995), y = _.i000, h = _.i090, l = _.i180, t = _.i270, o = _.cos45, r = _.sin45, n = e(75549), a = n.p2r, s = n.r2p, u = e(51873).clearOutline, p = e(60165), c = p.readPaths, b = p.writePaths, g = p.ellipseOver, f = p.fixDatesForPaths; function v(m, x, T) { var d, M = m[0][0], A = x.gd, C = M.getAttribute("d"), P = A._fullLayout.newshape, O = x.plotinfo, z = x.isActiveShape, B = O.xaxis, Y = O.yaxis, D = !!O.domain || !O.xaxis, G = !!O.domain || !O.yaxis, V = i(T), j = c(C, A, O, z), W = { editable: !0, label: P.label, xref: D ? "paper" : B._id, yref: G ? "paper" : Y._id, layer: P.layer, opacity: P.opacity, line: { color: P.line.color, width: P.line.width, dash: P.line.dash } }; if (V || (W.fillcolor = P.fillcolor, W.fillrule = P.fillrule), j.length === 1 && (d = j[0]), d && d.length === 5 && T === "drawrect") W.type = "rect", W.x0 = d[0][1], W.y0 = d[0][2], W.x1 = d[2][1], W.y1 = d[2][2]; else if (d && T === "drawline") W.type = "line", W.x0 = d[0][1], W.y0 = d[0][2], W.x1 = d[1][1], W.y1 = d[1][2]; else if (d && T === "drawcircle") { W.type = "circle"; var Z = d[y][1], ie = d[h][1], te = d[l][1], J = d[t][1], X = d[y][2], ee = d[h][2], re = d[l][2], oe = d[t][2], ue = O.xaxis && (O.xaxis.type === "date" || O.xaxis.type === "log"), ce = O.yaxis && (O.yaxis.type === "date" || O.yaxis.type === "log"); ue && (Z = s(O.xaxis, Z), ie = s(O.xaxis, ie), te = s(O.xaxis, te), J = s(O.xaxis, J)), ce && (X = s(O.yaxis, X), ee = s(O.yaxis, ee), re = s(O.yaxis, re), oe = s(O.yaxis, oe)); var de = (ie + J) / 2, me = (X + re) / 2, _e = g({ x0: de, y0: me, x1: de + (J - ie + te - Z) / 2 * o, y1: me + (oe - ee + re - X) / 2 * r }); ue && (_e.x0 = a(O.xaxis, _e.x0), _e.x1 = a(O.xaxis, _e.x1)), ce && (_e.y0 = a(O.yaxis, _e.y0), _e.y1 = a(O.yaxis, _e.y1)), W.x0 = _e.x0, W.y0 = _e.y0, W.x1 = _e.x1, W.y1 = _e.y1 } else W.type = "path", B && Y && f(j, B, Y), W.path = b(j), d = null; return W } R.exports = { newShapes: function (m, x) { if (m.length && m[0][0]) { var T = x.gd, d = x.isActiveShape, M = x.dragmode, A = (T.layout || {}).shapes || []; if (!k(M) && d !== void 0) { var C = T._fullLayout._activeShapeIndex; if (C < A.length) switch (T._fullLayout.shapes[C].type) { case "rect": M = "drawrect"; break; case "circle": M = "drawcircle"; break; case "line": M = "drawline"; break; case "path": var P = A[C].path || ""; M = P[P.length - 1] === "Z" ? "drawclosedpath" : "drawopenpath" } } var O = v(m, x, M); u(T); for (var z = x.editHelpers, B = (z || {}).modifyItem, Y = [], D = 0; D < A.length; D++) { var G = T._fullLayout.shapes[D]; if (Y[D] = G._input, d !== void 0 && D === T._fullLayout._activeShapeIndex) { var V = O; switch (G.type) { case "line": case "rect": case "circle": B("x0", V.x0), B("x1", V.x1), B("y0", V.y0), B("y1", V.y1); break; case "path": B("path", V.path) } } } return d === void 0 ? (Y.push(O), Y) : z ? z.getUpdateObj() : {} } }, createShapeObj: v } }, 51873: function (R) { R.exports = { clearOutlineControllers: function (E) { var e = E._fullLayout._zoomlayer; e && e.selectAll(".outline-controllers").remove() }, clearOutline: function (E) { var e = E._fullLayout._zoomlayer; e && e.selectAll(".select-outline").remove(), E._fullLayout._outlining = !1 } } }, 30477: function (R, E, e) { var w = e(21459), k = e(71828), i = e(89298); E.rangeToShapePosition = function (_) { return _.type === "log" ? _.r2d : function (y) { return y } }, E.shapePositionToRange = function (_) { return _.type === "log" ? _.d2r : function (y) { return y } }, E.decodeDate = function (_) { return function (y) { return y.replace && (y = y.replace("_", " ")), _(y) } }, E.encodeDate = function (_) { return function (y) { return _(y).replace(" ", "_") } }, E.extractPathCoords = function (_, y, h) { var l = []; return _.match(w.segmentRE).forEach(function (t) { var o = y[t.charAt(0)].drawn; if (o !== void 0) { var r = t.substr(1).match(w.paramRE); if (r && !(r.length < o)) { var n = r[o], a = h ? n : k.cleanNumber(n); l.push(a) } } }), l }, E.getDataToPixel = function (_, y, h, l) { var t, o = _._fullLayout._size; if (y) if (l === "domain") t = function (n) { return y._length * (h ? 1 - n : n) + y._offset }; else { var r = E.shapePositionToRange(y); t = function (n) { return y._offset + y.r2p(r(n, !0)) }, y.type === "date" && (t = E.decodeDate(t)) } else t = h ? function (n) { return o.t + o.h * (1 - n) } : function (n) { return o.l + o.w * n }; return t }, E.getPixelToData = function (_, y, h, l) { var t, o = _._fullLayout._size; if (y) if (l === "domain") t = function (n) { var a = (n - y._offset) / y._length; return h ? 1 - a : a }; else { var r = E.rangeToShapePosition(y); t = function (n) { return r(y.p2r(n - y._offset)) } } else t = h ? function (n) { return 1 - (n - o.t) / o.h } : function (n) { return (n - o.l) / o.w }; return t }, E.roundPositionForSharpStrokeRendering = function (_, y) { var h = Math.round(y % 2) === 1, l = Math.round(_); return h ? l + .5 : l }, E.makeShapesOptionsAndPlotinfo = function (_, y) { var h = _._fullLayout.shapes[y] || {}, l = _._fullLayout._plots[h.xref + h.yref]; return l ? l._hadPlotinfo = !0 : (l = {}, h.xref && h.xref !== "paper" && (l.xaxis = _._fullLayout[h.xref + "axis"]), h.yref && h.yref !== "paper" && (l.yaxis = _._fullLayout[h.yref + "axis"])), l.xsizemode = h.xsizemode, l.ysizemode = h.ysizemode, l.xanchor = h.xanchor, l.yanchor = h.yanchor, { options: h, plotinfo: l } }, E.makeSelectionsOptionsAndPlotinfo = function (_, y) { var h = _._fullLayout.selections[y] || {}, l = _._fullLayout._plots[h.xref + h.yref]; return l ? l._hadPlotinfo = !0 : (l = {}, h.xref && (l.xaxis = _._fullLayout[h.xref + "axis"]), h.yref && (l.yaxis = _._fullLayout[h.yref + "axis"])), { options: h, plotinfo: l } }, E.getPathString = function (_, y) { var h, l, t, o, r, n, a, s, u = y.type, p = i.getRefType(y.xref), c = i.getRefType(y.yref), b = i.getFromId(_, y.xref), g = i.getFromId(_, y.yref), f = _._fullLayout._size; if (b ? p === "domain" ? l = function (P) { return b._offset + b._length * P } : (h = E.shapePositionToRange(b), l = function (P) { return b._offset + b.r2p(h(P, !0)) }) : l = function (P) { return f.l + f.w * P }, g ? c === "domain" ? o = function (P) { return g._offset + g._length * (1 - P) } : (t = E.shapePositionToRange(g), o = function (P) { return g._offset + g.r2p(t(P, !0)) }) : o = function (P) { return f.t + f.h * (1 - P) }, u === "path") return b && b.type === "date" && (l = E.decodeDate(l)), g && g.type === "date" && (o = E.decodeDate(o)), function (P, O, z) { var B = P.path, Y = P.xsizemode, D = P.ysizemode, G = P.xanchor, V = P.yanchor; return B.replace(w.segmentRE, function (j) { var W = 0, Z = j.charAt(0), ie = w.paramIsX[Z], te = w.paramIsY[Z], J = w.numParams[Z], X = j.substr(1).replace(w.paramRE, function (ee) { return ie[W] ? ee = Y === "pixel" ? O(G) + Number(ee) : O(ee) : te[W] && (ee = D === "pixel" ? z(V) - Number(ee) : z(ee)), ++W > J && (ee = "X"), ee }); return W > J && (X = X.replace(/[\s,]*X.*/, ""), k.log("Ignoring extra params in segment " + j)), Z + X }) }(y, l, o); if (y.xsizemode === "pixel") { var v = l(y.xanchor); r = v + y.x0, n = v + y.x1 } else r = l(y.x0), n = l(y.x1); if (y.ysizemode === "pixel") { var m = o(y.yanchor); a = m - y.y0, s = m - y.y1 } else a = o(y.y0), s = o(y.y1); if (u === "line") return "M" + r + "," + a + "L" + n + "," + s; if (u === "rect") return "M" + r + "," + a + "H" + n + "V" + s + "H" + r + "Z"; var x = (r + n) / 2, T = (a + s) / 2, d = Math.abs(x - r), M = Math.abs(T - a), A = "A" + d + "," + M, C = x + d + "," + T; return "M" + C + A + " 0 1,1 " + x + "," + (T - M) + A + " 0 0,1 " + C + "Z" } }, 89853: function (R, E, e) { var w = e(34031); R.exports = { moduleType: "component", name: "shapes", layoutAttributes: e(89827), supplyLayoutDefaults: e(84726), supplyDrawNewShapeDefaults: e(45547), includeBasePlot: e(76325)("shapes"), calcAutorange: e(5627), draw: w.draw, drawOne: w.drawOne } }, 37281: function (R) { function E(i, _) { return _ ? _.d2l(i) : i } function e(i, _) { return _ ? _.l2d(i) : i } function w(i, _) { return E(i.x1, _) - E(i.x0, _) } function k(i, _, y) { return E(i.y1, y) - E(i.y0, y) } R.exports = { x0: function (i) { return i.x0 }, x1: function (i) { return i.x1 }, y0: function (i) { return i.y0 }, y1: function (i) { return i.y1 }, slope: function (i, _, y) { return i.type !== "line" ? void 0 : k(i, 0, y) / w(i, _) }, dx: w, dy: k, width: function (i, _) { return Math.abs(w(i, _)) }, height: function (i, _, y) { return Math.abs(k(i, 0, y)) }, length: function (i, _, y) { return i.type !== "line" ? void 0 : Math.sqrt(Math.pow(w(i, _), 2) + Math.pow(k(i, 0, y), 2)) }, xcenter: function (i, _) { return e((E(i.x1, _) + E(i.x0, _)) / 2, _) }, ycenter: function (i, _, y) { return e((E(i.y1, y) + E(i.y0, y)) / 2, y) } } }, 75067: function (R, E, e) { var w = e(41940), k = e(35025), i = e(1426).extendDeepAll, _ = e(30962).overrideAll, y = e(85594), h = e(44467).templatedArray, l = e(98292), t = h("step", { visible: { valType: "boolean", dflt: !0 }, method: { valType: "enumerated", values: ["restyle", "relayout", "animate", "update", "skip"], dflt: "restyle" }, args: { valType: "info_array", freeLength: !0, items: [{ valType: "any" }, { valType: "any" }, { valType: "any" }] }, label: { valType: "string" }, value: { valType: "string" }, execute: { valType: "boolean", dflt: !0 } }); R.exports = _(h("slider", { visible: { valType: "boolean", dflt: !0 }, active: { valType: "number", min: 0, dflt: 0 }, steps: t, lenmode: { valType: "enumerated", values: ["fraction", "pixels"], dflt: "fraction" }, len: { valType: "number", min: 0, dflt: 1 }, x: { valType: "number", min: -2, max: 3, dflt: 0 }, pad: i(k({ editType: "arraydraw" }), {}, { t: { dflt: 20 } }), xanchor: { valType: "enumerated", values: ["auto", "left", "center", "right"], dflt: "left" }, y: { valType: "number", min: -2, max: 3, dflt: 0 }, yanchor: { valType: "enumerated", values: ["auto", "top", "middle", "bottom"], dflt: "top" }, transition: { duration: { valType: "number", min: 0, dflt: 150 }, easing: { valType: "enumerated", values: y.transition.easing.values, dflt: "cubic-in-out" } }, currentvalue: { visible: { valType: "boolean", dflt: !0 }, xanchor: { valType: "enumerated", values: ["left", "center", "right"], dflt: "left" }, offset: { valType: "number", dflt: 10 }, prefix: { valType: "string" }, suffix: { valType: "string" }, font: w({}) }, font: w({}), activebgcolor: { valType: "color", dflt: l.gripBgActiveColor }, bgcolor: { valType: "color", dflt: l.railBgColor }, bordercolor: { valType: "color", dflt: l.railBorderColor }, borderwidth: { valType: "number", min: 0, dflt: l.railBorderWidth }, ticklen: { valType: "number", min: 0, dflt: l.tickLength }, tickcolor: { valType: "color", dflt: l.tickColor }, tickwidth: { valType: "number", min: 0, dflt: 1 }, minorticklen: { valType: "number", min: 0, dflt: l.minorTickLength } }), "arraydraw", "from-root") }, 98292: function (R) { R.exports = { name: "sliders", containerClassName: "slider-container", groupClassName: "slider-group", inputAreaClass: "slider-input-area", railRectClass: "slider-rail-rect", railTouchRectClass: "slider-rail-touch-rect", gripRectClass: "slider-grip-rect", tickRectClass: "slider-tick-rect", inputProxyClass: "slider-input-proxy", labelsClass: "slider-labels", labelGroupClass: "slider-label-group", labelClass: "slider-label", currentValueClass: "slider-current-value", railHeight: 5, menuIndexAttrName: "slider-active-index", autoMarginIdRoot: "slider-", minWidth: 30, minHeight: 30, textPadX: 40, arrowOffsetX: 4, railRadius: 2, railWidth: 5, railBorder: 4, railBorderWidth: 1, railBorderColor: "#bec8d9", railBgColor: "#f8fafc", railInset: 8, stepInset: 10, gripRadius: 10, gripWidth: 20, gripHeight: 20, gripBorder: 20, gripBorderWidth: 1, gripBorderColor: "#bec8d9", gripBgColor: "#f6f8fa", gripBgActiveColor: "#dbdde0", labelPadding: 8, labelOffset: 0, tickWidth: 1, tickColor: "#333", tickOffset: 25, tickLength: 7, minorTickOffset: 25, minorTickColor: "#333", minorTickLength: 4, currentValuePadding: 8, currentValueInset: 0 } }, 12343: function (R, E, e) { var w = e(71828), k = e(85501), i = e(75067), _ = e(98292).name, y = i.steps; function h(t, o, r) { function n(c, b) { return w.coerce(t, o, i, c, b) } for (var a = k(t, o, { name: "steps", handleItemDefaults: l }), s = 0, u = 0; u < a.length; u++)a[u].visible && s++; if (s < 2 ? o.visible = !1 : n("visible")) { o._stepCount = s; var p = o._visibleSteps = w.filterVisible(a); (a[n("active")] || {}).visible || (o.active = p[0]._index), n("x"), n("y"), w.noneOrAll(t, o, ["x", "y"]), n("xanchor"), n("yanchor"), n("len"), n("lenmode"), n("pad.t"), n("pad.r"), n("pad.b"), n("pad.l"), w.coerceFont(n, "font", r.font), n("currentvalue.visible") && (n("currentvalue.xanchor"), n("currentvalue.prefix"), n("currentvalue.suffix"), n("currentvalue.offset"), w.coerceFont(n, "currentvalue.font", o.font)), n("transition.duration"), n("transition.easing"), n("bgcolor"), n("activebgcolor"), n("bordercolor"), n("borderwidth"), n("ticklen"), n("tickwidth"), n("tickcolor"), n("minorticklen") } } function l(t, o) { function r(a, s) { return w.coerce(t, o, y, a, s) } if (t.method === "skip" || Array.isArray(t.args) ? r("visible") : o.visible = !1) { r("method"), r("args"); var n = r("label", "step-" + o._index); r("value", n), r("execute") } } R.exports = function (t, o) { k(t, o, { name: _, handleItemDefaults: h }) } }, 44504: function (R, E, e) { var w = e(39898), k = e(74875), i = e(7901), _ = e(91424), y = e(71828), h = y.strTranslate, l = e(63893), t = e(44467).arrayEditor, o = e(98292), r = e(18783), n = r.LINE_SPACING, a = r.FROM_TL, s = r.FROM_BR; function u(z) { return o.autoMarginIdRoot + z._index } function p(z) { return z._index } function c(z, B) { var Y = _.tester.selectAll("g." + o.labelGroupClass).data(B._visibleSteps); Y.enter().append("g").classed(o.labelGroupClass, !0); var D = 0, G = 0; Y.each(function (ee) { var re = f(w.select(this), { step: ee }, B).node(); if (re) { var oe = _.bBox(re); G = Math.max(G, oe.height), D = Math.max(D, oe.width) } }), Y.remove(); var V = B._dims = {}; V.inputAreaWidth = Math.max(o.railWidth, o.gripHeight); var j = z._fullLayout._size; V.lx = j.l + j.w * B.x, V.ly = j.t + j.h * (1 - B.y), B.lenmode === "fraction" ? V.outerLength = Math.round(j.w * B.len) : V.outerLength = B.len, V.inputAreaStart = 0, V.inputAreaLength = Math.round(V.outerLength - B.pad.l - B.pad.r); var W = (V.inputAreaLength - 2 * o.stepInset) / (B._stepCount - 1), Z = D + o.labelPadding; if (V.labelStride = Math.max(1, Math.ceil(Z / W)), V.labelHeight = G, V.currentValueMaxWidth = 0, V.currentValueHeight = 0, V.currentValueTotalHeight = 0, V.currentValueMaxLines = 1, B.currentvalue.visible) { var ie = _.tester.append("g"); Y.each(function (ee) { var re = b(ie, B, ee.label), oe = re.node() && _.bBox(re.node()) || { width: 0, height: 0 }, ue = l.lineCount(re); V.currentValueMaxWidth = Math.max(V.currentValueMaxWidth, Math.ceil(oe.width)), V.currentValueHeight = Math.max(V.currentValueHeight, Math.ceil(oe.height)), V.currentValueMaxLines = Math.max(V.currentValueMaxLines, ue) }), V.currentValueTotalHeight = V.currentValueHeight + B.currentvalue.offset, ie.remove() } V.height = V.currentValueTotalHeight + o.tickOffset + B.ticklen + o.labelOffset + V.labelHeight + B.pad.t + B.pad.b; var te = "left"; y.isRightAnchor(B) && (V.lx -= V.outerLength, te = "right"), y.isCenterAnchor(B) && (V.lx -= V.outerLength / 2, te = "center"); var J = "top"; y.isBottomAnchor(B) && (V.ly -= V.height, J = "bottom"), y.isMiddleAnchor(B) && (V.ly -= V.height / 2, J = "middle"), V.outerLength = Math.ceil(V.outerLength), V.height = Math.ceil(V.height), V.lx = Math.round(V.lx), V.ly = Math.round(V.ly); var X = { y: B.y, b: V.height * s[J], t: V.height * a[J] }; B.lenmode === "fraction" ? (X.l = 0, X.xl = B.x - B.len * a[te], X.r = 0, X.xr = B.x + B.len * s[te]) : (X.x = B.x, X.l = V.outerLength * a[te], X.r = V.outerLength * s[te]), k.autoMargin(z, u(B), X) } function b(z, B, Y) { if (B.currentvalue.visible) { var D, G, V = B._dims; switch (B.currentvalue.xanchor) { case "right": D = V.inputAreaLength - o.currentValueInset - V.currentValueMaxWidth, G = "left"; break; case "center": D = .5 * V.inputAreaLength, G = "middle"; break; default: D = o.currentValueInset, G = "left" }var j = y.ensureSingle(z, "text", o.labelClass, function (X) { X.attr({ "text-anchor": G, "data-notex": 1 }) }), W = B.currentvalue.prefix ? B.currentvalue.prefix : ""; if (typeof Y == "string") W += Y; else { var Z = B.steps[B.active].label, ie = B._gd._fullLayout._meta; ie && (Z = y.templateString(Z, ie)), W += Z } B.currentvalue.suffix && (W += B.currentvalue.suffix), j.call(_.font, B.currentvalue.font).text(W).call(l.convertToTspans, B._gd); var te = l.lineCount(j), J = (V.currentValueMaxLines + 1 - te) * B.currentvalue.font.size * n; return l.positionText(j, D, J), j } } function g(z, B, Y) { y.ensureSingle(z, "rect", o.gripRectClass, function (D) { D.call(T, B, z, Y).style("pointer-events", "all") }).attr({ width: o.gripWidth, height: o.gripHeight, rx: o.gripRadius, ry: o.gripRadius }).call(i.stroke, Y.bordercolor).call(i.fill, Y.bgcolor).style("stroke-width", Y.borderwidth + "px") } function f(z, B, Y) { var D = y.ensureSingle(z, "text", o.labelClass, function (j) { j.attr({ "text-anchor": "middle", "data-notex": 1 }) }), G = B.step.label, V = Y._gd._fullLayout._meta; return V && (G = y.templateString(G, V)), D.call(_.font, Y.font).text(G).call(l.convertToTspans, Y._gd), D } function v(z, B) { var Y = y.ensureSingle(z, "g", o.labelsClass), D = B._dims, G = Y.selectAll("g." + o.labelGroupClass).data(D.labelSteps); G.enter().append("g").classed(o.labelGroupClass, !0), G.exit().remove(), G.each(function (V) { var j = w.select(this); j.call(f, V, B), _.setTranslate(j, A(B, V.fraction), o.tickOffset + B.ticklen + B.font.size * n + o.labelOffset + D.currentValueTotalHeight) }) } function m(z, B, Y, D, G) { var V = Math.round(D * (Y._stepCount - 1)), j = Y._visibleSteps[V]._index; j !== Y.active && x(z, B, Y, j, !0, G) } function x(z, B, Y, D, G, V) { var j = Y.active; Y.active = D, t(z.layout, o.name, Y).applyUpdate("active", D); var W = Y.steps[Y.active]; B.call(M, Y, V), B.call(b, Y), z.emit("plotly_sliderchange", { slider: Y, step: Y.steps[Y.active], interaction: G, previousActive: j }), W && W.method && G && (B._nextMethod ? (B._nextMethod.step = W, B._nextMethod.doCallback = G, B._nextMethod.doTransition = V) : (B._nextMethod = { step: W, doCallback: G, doTransition: V }, B._nextMethodRaf = window.requestAnimationFrame(function () { var Z = B._nextMethod.step; Z.method && (Z.execute && k.executeAPICommand(z, Z.method, Z.args), B._nextMethod = null, B._nextMethodRaf = null) }))) } function T(z, B, Y) { if (!B._context.staticPlot) { var D = Y.node(), G = w.select(B); z.on("mousedown", j), z.on("touchstart", j) } function V() { return Y.data()[0] } function j() { var W = V(); B.emit("plotly_sliderstart", { slider: W }); var Z = Y.select("." + o.gripRectClass); w.event.stopPropagation(), w.event.preventDefault(), Z.call(i.fill, W.activebgcolor); var ie = C(W, w.mouse(D)[0]); function te() { var X = V(), ee = C(X, w.mouse(D)[0]); m(B, Y, X, ee, !1) } function J() { var X = V(); X._dragging = !1, Z.call(i.fill, X.bgcolor), G.on("mouseup", null), G.on("mousemove", null), G.on("touchend", null), G.on("touchmove", null), B.emit("plotly_sliderend", { slider: X, step: X.steps[X.active] }) } m(B, Y, W, ie, !0), W._dragging = !0, G.on("mousemove", te), G.on("touchmove", te), G.on("mouseup", J), G.on("touchend", J) } } function d(z, B) { var Y = z.selectAll("rect." + o.tickRectClass).data(B._visibleSteps), D = B._dims; Y.enter().append("rect").classed(o.tickRectClass, !0), Y.exit().remove(), Y.attr({ width: B.tickwidth + "px", "shape-rendering": "crispEdges" }), Y.each(function (G, V) { var j = V % D.labelStride == 0, W = w.select(this); W.attr({ height: j ? B.ticklen : B.minorticklen }).call(i.fill, B.tickcolor), _.setTranslate(W, A(B, V / (B._stepCount - 1)) - .5 * B.tickwidth, (j ? o.tickOffset : o.minorTickOffset) + D.currentValueTotalHeight) }) } function M(z, B, Y) { for (var D = z.select("rect." + o.gripRectClass), G = 0, V = 0; V < B._stepCount; V++)if (B._visibleSteps[V]._index === B.active) { G = V; break } var j = A(B, G / (B._stepCount - 1)); if (!B._invokingCommand) { var W = D; Y && B.transition.duration > 0 && (W = W.transition().duration(B.transition.duration).ease(B.transition.easing)), W.attr("transform", h(j - .5 * o.gripWidth, B._dims.currentValueTotalHeight)) } } function A(z, B) { var Y = z._dims; return Y.inputAreaStart + o.stepInset + (Y.inputAreaLength - 2 * o.stepInset) * Math.min(1, Math.max(0, B)) } function C(z, B) { var Y = z._dims; return Math.min(1, Math.max(0, (B - o.stepInset - Y.inputAreaStart) / (Y.inputAreaLength - 2 * o.stepInset - 2 * Y.inputAreaStart))) } function P(z, B, Y) { var D = Y._dims, G = y.ensureSingle(z, "rect", o.railTouchRectClass, function (V) { V.call(T, B, z, Y).style("pointer-events", "all") }); G.attr({ width: D.inputAreaLength, height: Math.max(D.inputAreaWidth, o.tickOffset + Y.ticklen + D.labelHeight) }).call(i.fill, Y.bgcolor).attr("opacity", 0), _.setTranslate(G, 0, D.currentValueTotalHeight) } function O(z, B) { var Y = B._dims, D = Y.inputAreaLength - 2 * o.railInset, G = y.ensureSingle(z, "rect", o.railRectClass); G.attr({ width: D, height: o.railWidth, rx: o.railRadius, ry: o.railRadius, "shape-rendering": "crispEdges" }).call(i.stroke, B.bordercolor).call(i.fill, B.bgcolor).style("stroke-width", B.borderwidth + "px"), _.setTranslate(G, o.railInset, .5 * (Y.inputAreaWidth - o.railWidth) + Y.currentValueTotalHeight) } R.exports = function (z) { var B = z._context.staticPlot, Y = z._fullLayout, D = function (ie, te) { for (var J = ie[o.name], X = [], ee = 0; ee < J.length; ee++) { var re = J[ee]; re.visible && (re._gd = te, X.push(re)) } return X }(Y, z), G = Y._infolayer.selectAll("g." + o.containerClassName).data(D.length > 0 ? [0] : []); function V(ie) { ie._commandObserver && (ie._commandObserver.remove(), delete ie._commandObserver), k.autoMargin(z, u(ie)) } if (G.enter().append("g").classed(o.containerClassName, !0).style("cursor", B ? null : "ew-resize"), G.exit().each(function () { w.select(this).selectAll("g." + o.groupClassName).each(V) }).remove(), D.length !== 0) { var j = G.selectAll("g." + o.groupClassName).data(D, p); j.enter().append("g").classed(o.groupClassName, !0), j.exit().each(V).remove(); for (var W = 0; W < D.length; W++) { var Z = D[W]; c(z, Z) } j.each(function (ie) { var te = w.select(this); (function (J) { var X = J._dims; X.labelSteps = []; for (var ee = J._stepCount, re = 0; re < ee; re += X.labelStride)X.labelSteps.push({ fraction: re / (ee - 1), step: J._visibleSteps[re] }) })(ie), k.manageCommandObserver(z, ie, ie._visibleSteps, function (J) { var X = te.data()[0]; X.active !== J.index && (X._dragging || x(z, te, X, J.index, !1, !0)) }), function (J, X, ee) { (ee.steps[ee.active] || {}).visible || (ee.active = ee._visibleSteps[0]._index), X.call(b, ee).call(O, ee).call(v, ee).call(d, ee).call(P, J, ee).call(g, J, ee); var re = ee._dims; _.setTranslate(X, re.lx + ee.pad.l, re.ly + ee.pad.t), X.call(M, ee, !1), X.call(b, ee) }(z, w.select(this), ie) }) } } }, 23243: function (R, E, e) { var w = e(98292); R.exports = { moduleType: "component", name: w.name, layoutAttributes: e(75067), supplyLayoutDefaults: e(12343), draw: e(44504) } }, 92998: function (R, E, e) { var w = e(39898), k = e(92770), i = e(74875), _ = e(73972), y = e(71828), h = y.strTranslate, l = e(91424), t = e(7901), o = e(63893), r = e(37822), n = e(18783).OPPOSITE_SIDE, a = / [XY][0-9]* /; R.exports = { draw: function (s, u, p) { var c, b = p.propContainer, g = p.propName, f = p.placeholder, v = p.traceIndex, m = p.avoid || {}, x = p.attributes, T = p.transform, d = p.containerGroup, M = s._fullLayout, A = 1, C = !1, P = b.title, O = (P && P.text ? P.text : "").trim(), z = P && P.font ? P.font : {}, B = z.family, Y = z.size, D = z.color; g === "title.text" ? c = "titleText" : g.indexOf("axis") !== -1 ? c = "axisTitleText" : g.indexOf(!0) && (c = "colorbarTitleText"); var G = s._context.edits[c]; O === "" ? A = 0 : O.replace(a, " % ") === f.replace(a, " % ") && (A = .2, C = !0, G || (O = "")), p._meta ? O = y.templateString(O, p._meta) : M._meta && (O = y.templateString(O, M._meta)); var V, j = O || G; d || (d = y.ensureSingle(M._infolayer, "g", "g-" + u), V = M._hColorbarMoveTitle); var W = d.selectAll("text").data(j ? [0] : []); if (W.enter().append("text"), W.text(O).attr("class", u), W.exit().remove(), !j) return d; function Z(J) { y.syncOrAsync([ie, te], J) } function ie(J) { var X; return !T && V && (T = {}), T ? (X = "", T.rotate && (X += "rotate(" + [T.rotate, x.x, x.y] + ")"), (T.offset || V) && (X += h(0, (T.offset || 0) - (V || 0)))) : X = null, J.attr("transform", X), J.style({ "font-family": B, "font-size": w.round(Y, 2) + "px", fill: t.rgb(D), opacity: A * t.opacity(D), "font-weight": i.fontWeight }).attr(x).call(o.convertToTspans, s), i.previousPromises(s) } function te(J) { var X = w.select(J.node().parentNode); if (m && m.selection && m.side && O) { X.attr("transform", null); var ee = n[m.side], re = m.side === "left" || m.side === "top" ? -1 : 1, oe = k(m.pad) ? m.pad : 2, ue = l.bBox(X.node()), ce = { t: 0, b: 0, l: 0, r: 0 }, de = s._fullLayout._reservedMargin; for (var me in de) for (var _e in de[me]) { var Se = de[me][_e]; ce[_e] = Math.max(ce[_e], Se) } var we = { left: ce.l, top: ce.t, right: M.width - ce.r, bottom: M.height - ce.b }, xe = m.maxShift || re * (we[m.side] - ue[m.side]), De = 0; if (xe < 0) De = xe; else { var Ee = m.offsetLeft || 0, Me = m.offsetTop || 0; ue.left -= Ee, ue.right -= Ee, ue.top -= Me, ue.bottom -= Me, m.selection.each(function () { var fe = l.bBox(this); y.bBoxIntersect(ue, fe, oe) && (De = Math.max(De, re * (fe[m.side] - ue[ee]) + oe)) }), De = Math.min(xe, De), b._titleScoot = Math.abs(De) } if (De > 0 || xe < 0) { var he = { left: [-De, 0], right: [De, 0], top: [0, -De], bottom: [0, De] }[m.side]; X.attr("transform", h(he[0], he[1])) } } } return W.call(Z), G && (O ? W.on(".opacity", null) : (A = 0, C = !0, W.text(f).on("mouseover.opacity", function () { w.select(this).transition().duration(r.SHOW_PLACEHOLDER).style("opacity", 1) }).on("mouseout.opacity", function () { w.select(this).transition().duration(r.HIDE_PLACEHOLDER).style("opacity", 0) })), W.call(o.makeEditable, { gd: s }).on("edit", function (J) { v !== void 0 ? _.call("_guiRestyle", s, g, J, v) : _.call("_guiRelayout", s, g, J) }).on("cancel", function () { this.text(this.attr("data-unformatted")).call(Z) }).on("input", function (J) { this.text(J || " ").call(o.positionText, x.x, x.y) })), W.classed("js-placeholder", C), d } } }, 7163: function (R, E, e) { var w = e(41940), k = e(22399), i = e(1426).extendFlat, _ = e(30962).overrideAll, y = e(35025), h = e(44467).templatedArray, l = h("button", { visible: { valType: "boolean" }, method: { valType: "enumerated", values: ["restyle", "relayout", "animate", "update", "skip"], dflt: "restyle" }, args: { valType: "info_array", freeLength: !0, items: [{ valType: "any" }, { valType: "any" }, { valType: "any" }] }, args2: { valType: "info_array", freeLength: !0, items: [{ valType: "any" }, { valType: "any" }, { valType: "any" }] }, label: { valType: "string", dflt: "" }, execute: { valType: "boolean", dflt: !0 } }); R.exports = _(h("updatemenu", { _arrayAttrRegexps: [/^updatemenus\[(0|[1-9][0-9]+)\]\.buttons/], visible: { valType: "boolean" }, type: { valType: "enumerated", values: ["dropdown", "buttons"], dflt: "dropdown" }, direction: { valType: "enumerated", values: ["left", "right", "up", "down"], dflt: "down" }, active: { valType: "integer", min: -1, dflt: 0 }, showactive: { valType: "boolean", dflt: !0 }, buttons: l, x: { valType: "number", min: -2, max: 3, dflt: -.05 }, xanchor: { valType: "enumerated", values: ["auto", "left", "center", "right"], dflt: "right" }, y: { valType: "number", min: -2, max: 3, dflt: 1 }, yanchor: { valType: "enumerated", values: ["auto", "top", "middle", "bottom"], dflt: "top" }, pad: i(y({ editType: "arraydraw" }), {}), font: w({}), bgcolor: { valType: "color" }, bordercolor: { valType: "color", dflt: k.borderLine }, borderwidth: { valType: "number", min: 0, dflt: 1, editType: "arraydraw" } }), "arraydraw", "from-root") }, 75909: function (R) { R.exports = { name: "updatemenus", containerClassName: "updatemenu-container", headerGroupClassName: "updatemenu-header-group", headerClassName: "updatemenu-header", headerArrowClassName: "updatemenu-header-arrow", dropdownButtonGroupClassName: "updatemenu-dropdown-button-group", dropdownButtonClassName: "updatemenu-dropdown-button", buttonClassName: "updatemenu-button", itemRectClassName: "updatemenu-item-rect", itemTextClassName: "updatemenu-item-text", menuIndexAttrName: "updatemenu-active-index", autoMarginIdRoot: "updatemenu-", blankHeaderOpts: { label: " " }, minWidth: 30, minHeight: 30, textPadX: 24, arrowPadX: 16, rx: 2, ry: 2, textOffsetX: 12, textOffsetY: 3, arrowOffsetX: 4, gapButtonHeader: 5, gapButton: 2, activeColor: "#F4FAFF", hoverColor: "#F4FAFF", arrowSymbol: { left: "◄", right: "►", up: "▲", down: "▼" } } }, 64897: function (R, E, e) { var w = e(71828), k = e(85501), i = e(7163), _ = e(75909).name, y = i.buttons; function h(t, o, r) { function n(a, s) { return w.coerce(t, o, i, a, s) } n("visible", k(t, o, { name: "buttons", handleItemDefaults: l }).length > 0) && (n("active"), n("direction"), n("type"), n("showactive"), n("x"), n("y"), w.noneOrAll(t, o, ["x", "y"]), n("xanchor"), n("yanchor"), n("pad.t"), n("pad.r"), n("pad.b"), n("pad.l"), w.coerceFont(n, "font", r.font), n("bgcolor", r.paper_bgcolor), n("bordercolor"), n("borderwidth")) } function l(t, o) { function r(n, a) { return w.coerce(t, o, y, n, a) } r("visible", t.method === "skip" || Array.isArray(t.args)) && (r("method"), r("args"), r("args2"), r("label"), r("execute")) } R.exports = function (t, o) { k(t, o, { name: _, handleItemDefaults: h }) } }, 13689: function (R, E, e) { var w = e(39898), k = e(74875), i = e(7901), _ = e(91424), y = e(71828), h = e(63893), l = e(44467).arrayEditor, t = e(18783).LINE_SPACING, o = e(75909), r = e(25849); function n(A) { return A._index } function a(A, C) { return +A.attr(o.menuIndexAttrName) === C._index } function s(A, C, P, O, z, B, Y, D) { C.active = Y, l(A.layout, o.name, C).applyUpdate("active", Y), C.type === "buttons" ? p(A, O, null, null, C) : C.type === "dropdown" && (z.attr(o.menuIndexAttrName, "-1"), u(A, O, z, B, C), D || p(A, O, z, B, C)) } function u(A, C, P, O, z) { var B = y.ensureSingle(C, "g", o.headerClassName, function (W) { W.style("pointer-events", "all") }), Y = z._dims, D = z.active, G = z.buttons[D] || o.blankHeaderOpts, V = { y: z.pad.t, yPad: 0, x: z.pad.l, xPad: 0, index: 0 }, j = { width: Y.headerWidth, height: Y.headerHeight }; B.call(c, z, G, A).call(d, z, V, j), y.ensureSingle(C, "text", o.headerArrowClassName, function (W) { W.attr("text-anchor", "end").call(_.font, z.font).text(o.arrowSymbol[z.direction]) }).attr({ x: Y.headerWidth - o.arrowOffsetX + z.pad.l, y: Y.headerHeight / 2 + o.textOffsetY + z.pad.t }), B.on("click", function () { P.call(M, String(a(P, z) ? -1 : z._index)), p(A, C, P, O, z) }), B.on("mouseover", function () { B.call(v) }), B.on("mouseout", function () { B.call(m, z) }), _.setTranslate(C, Y.lx, Y.ly) } function p(A, C, P, O, z) { P || (P = C).attr("pointer-events", "all"); var B = function (X) { return +X.attr(o.menuIndexAttrName) == -1 }(P) && z.type !== "buttons" ? [] : z.buttons, Y = z.type === "dropdown" ? o.dropdownButtonClassName : o.buttonClassName, D = P.selectAll("g." + Y).data(y.filterVisible(B)), G = D.enter().append("g").classed(Y, !0), V = D.exit(); z.type === "dropdown" ? (G.attr("opacity", "0").transition().attr("opacity", "1"), V.transition().attr("opacity", "0").remove()) : V.remove(); var j = 0, W = 0, Z = z._dims, ie = ["up", "down"].indexOf(z.direction) !== -1; z.type === "dropdown" && (ie ? W = Z.headerHeight + o.gapButtonHeader : j = Z.headerWidth + o.gapButtonHeader), z.type === "dropdown" && z.direction === "up" && (W = -o.gapButtonHeader + o.gapButton - Z.openHeight), z.type === "dropdown" && z.direction === "left" && (j = -o.gapButtonHeader + o.gapButton - Z.openWidth); var te = { x: Z.lx + j + z.pad.l, y: Z.ly + W + z.pad.t, yPad: o.gapButton, xPad: o.gapButton, index: 0 }, J = { l: te.x + z.borderwidth, t: te.y + z.borderwidth }; D.each(function (X, ee) { var re = w.select(this); re.call(c, z, X, A).call(d, z, te), re.on("click", function () { w.event.defaultPrevented || (X.execute && (X.args2 && z.active === ee ? (s(A, z, 0, C, P, O, -1), k.executeAPICommand(A, X.method, X.args2)) : (s(A, z, 0, C, P, O, ee), k.executeAPICommand(A, X.method, X.args))), A.emit("plotly_buttonclicked", { menu: z, button: X, active: z.active })) }), re.on("mouseover", function () { re.call(v) }), re.on("mouseout", function () { re.call(m, z), D.call(f, z) }) }), D.call(f, z), ie ? (J.w = Math.max(Z.openWidth, Z.headerWidth), J.h = te.y - J.t) : (J.w = te.x - J.l, J.h = Math.max(Z.openHeight, Z.headerHeight)), J.direction = z.direction, O && (D.size() ? function (X, ee, re, oe, ue, ce) { var de, me, _e, Se = ue.direction, we = Se === "up" || Se === "down", xe = ue._dims, De = ue.active; if (we) for (me = 0, _e = 0; _e < De; _e++)me += xe.heights[_e] + o.gapButton; else for (de = 0, _e = 0; _e < De; _e++)de += xe.widths[_e] + o.gapButton; oe.enable(ce, de, me), oe.hbar && oe.hbar.attr("opacity", "0").transition().attr("opacity", "1"), oe.vbar && oe.vbar.attr("opacity", "0").transition().attr("opacity", "1") }(0, 0, 0, O, z, J) : function (X) { var ee = !!X.hbar, re = !!X.vbar; ee && X.hbar.transition().attr("opacity", "0").each("end", function () { ee = !1, re || X.disable() }), re && X.vbar.transition().attr("opacity", "0").each("end", function () { re = !1, ee || X.disable() }) }(O)) } function c(A, C, P, O) { A.call(b, C).call(g, C, P, O) } function b(A, C) { y.ensureSingle(A, "rect", o.itemRectClassName, function (P) { P.attr({ rx: o.rx, ry: o.ry, "shape-rendering": "crispEdges" }) }).call(i.stroke, C.bordercolor).call(i.fill, C.bgcolor).style("stroke-width", C.borderwidth + "px") } function g(A, C, P, O) { var z = y.ensureSingle(A, "text", o.itemTextClassName, function (D) { D.attr({ "text-anchor": "start", "data-notex": 1 }) }), B = P.label, Y = O._fullLayout._meta; Y && (B = y.templateString(B, Y)), z.call(_.font, C.font).text(B).call(h.convertToTspans, O) } function f(A, C) { var P = C.active; A.each(function (O, z) { var B = w.select(this); z === P && C.showactive && B.select("rect." + o.itemRectClassName).call(i.fill, o.activeColor) }) } function v(A) { A.select("rect." + o.itemRectClassName).call(i.fill, o.hoverColor) } function m(A, C) { A.select("rect." + o.itemRectClassName).call(i.fill, C.bgcolor) } function x(A, C) { var P = C._dims = { width1: 0, height1: 0, heights: [], widths: [], totalWidth: 0, totalHeight: 0, openWidth: 0, openHeight: 0, lx: 0, ly: 0 }, O = _.tester.selectAll("g." + o.dropdownButtonClassName).data(y.filterVisible(C.buttons)); O.enter().append("g").classed(o.dropdownButtonClassName, !0); var z = ["up", "down"].indexOf(C.direction) !== -1; O.each(function (j, W) { var Z = w.select(this); Z.call(c, C, j, A); var ie = Z.select("." + o.itemTextClassName), te = ie.node() && _.bBox(ie.node()).width, J = Math.max(te + o.textPadX, o.minWidth), X = C.font.size * t, ee = h.lineCount(ie), re = Math.max(X * ee, o.minHeight) + o.textOffsetY; re = Math.ceil(re), J = Math.ceil(J), P.widths[W] = J, P.heights[W] = re, P.height1 = Math.max(P.height1, re), P.width1 = Math.max(P.width1, J), z ? (P.totalWidth = Math.max(P.totalWidth, J), P.openWidth = P.totalWidth, P.totalHeight += re + o.gapButton, P.openHeight += re + o.gapButton) : (P.totalWidth += J + o.gapButton, P.openWidth += J + o.gapButton, P.totalHeight = Math.max(P.totalHeight, re), P.openHeight = P.totalHeight) }), z ? P.totalHeight -= o.gapButton : P.totalWidth -= o.gapButton, P.headerWidth = P.width1 + o.arrowPadX, P.headerHeight = P.height1, C.type === "dropdown" && (z ? (P.width1 += o.arrowPadX, P.totalHeight = P.height1) : P.totalWidth = P.width1, P.totalWidth += o.arrowPadX), O.remove(); var B = P.totalWidth + C.pad.l + C.pad.r, Y = P.totalHeight + C.pad.t + C.pad.b, D = A._fullLayout._size; P.lx = D.l + D.w * C.x, P.ly = D.t + D.h * (1 - C.y); var G = "left"; y.isRightAnchor(C) && (P.lx -= B, G = "right"), y.isCenterAnchor(C) && (P.lx -= B / 2, G = "center"); var V = "top"; y.isBottomAnchor(C) && (P.ly -= Y, V = "bottom"), y.isMiddleAnchor(C) && (P.ly -= Y / 2, V = "middle"), P.totalWidth = Math.ceil(P.totalWidth), P.totalHeight = Math.ceil(P.totalHeight), P.lx = Math.round(P.lx), P.ly = Math.round(P.ly), k.autoMargin(A, T(C), { x: C.x, y: C.y, l: B * ({ right: 1, center: .5 }[G] || 0), r: B * ({ left: 1, center: .5 }[G] || 0), b: Y * ({ top: 1, middle: .5 }[V] || 0), t: Y * ({ bottom: 1, middle: .5 }[V] || 0) }) } function T(A) { return o.autoMarginIdRoot + A._index } function d(A, C, P, O) { O = O || {}; var z = A.select("." + o.itemRectClassName), B = A.select("." + o.itemTextClassName), Y = C.borderwidth, D = P.index, G = C._dims; _.setTranslate(A, Y + P.x, Y + P.y); var V = ["up", "down"].indexOf(C.direction) !== -1, j = O.height || (V ? G.heights[D] : G.height1); z.attr({ x: 0, y: 0, width: O.width || (V ? G.width1 : G.widths[D]), height: j }); var W = C.font.size * t, Z = (h.lineCount(B) - 1) * W / 2; h.positionText(B, o.textOffsetX, j / 2 - Z + o.textOffsetY), V ? P.y += G.heights[D] + P.yPad : P.x += G.widths[D] + P.xPad, P.index++ } function M(A, C) { A.attr(o.menuIndexAttrName, C || "-1").selectAll("g." + o.dropdownButtonClassName).remove() } R.exports = function (A) { var C = A._fullLayout, P = y.filterVisible(C[o.name]); function O(W) { k.autoMargin(A, T(W)) } var z = C._menulayer.selectAll("g." + o.containerClassName).data(P.length > 0 ? [0] : []); if (z.enter().append("g").classed(o.containerClassName, !0).style("cursor", "pointer"), z.exit().each(function () { w.select(this).selectAll("g." + o.headerGroupClassName).each(O) }).remove(), P.length !== 0) { var B = z.selectAll("g." + o.headerGroupClassName).data(P, n); B.enter().append("g").classed(o.headerGroupClassName, !0); for (var Y = y.ensureSingle(z, "g", o.dropdownButtonGroupClassName, function (W) { W.style("pointer-events", "all") }), D = 0; D < P.length; D++) { var G = P[D]; x(A, G) } var V = "updatemenus" + C._uid, j = new r(A, Y, V); B.enter().size() && (Y.node().parentNode.appendChild(Y.node()), Y.call(M)), B.exit().each(function (W) { Y.call(M), O(W) }).remove(), B.each(function (W) { var Z = w.select(this), ie = W.type === "dropdown" ? Y : null; k.manageCommandObserver(A, W, W.buttons, function (te) { s(A, W, W.buttons[te.index], Z, ie, j, te.index, !0) }), W.type === "dropdown" ? (u(A, Z, Y, j, W), a(Y, W) && p(A, Z, Y, j, W)) : p(A, Z, null, null, W) }) } } }, 20763: function (R, E, e) { var w = e(75909); R.exports = { moduleType: "component", name: w.name, layoutAttributes: e(7163), supplyLayoutDefaults: e(64897), draw: e(13689) } }, 25849: function (R, E, e) { R.exports = y; var w = e(39898), k = e(7901), i = e(91424), _ = e(71828); function y(h, l, t) { this.gd = h, this.container = l, this.id = t, this.position = null, this.translateX = null, this.translateY = null, this.hbar = null, this.vbar = null, this.bg = this.container.selectAll("rect.scrollbox-bg").data([0]), this.bg.exit().on(".drag", null).on("wheel", null).remove(), this.bg.enter().append("rect").classed("scrollbox-bg", !0).style("pointer-events", "all").attr({ opacity: 0, x: 0, y: 0, width: 0, height: 0 }) } y.barWidth = 2, y.barLength = 20, y.barRadius = 2, y.barPad = 1, y.barColor = "#808BA4", y.prototype.enable = function (h, l, t) { var o = this.gd._fullLayout, r = o.width, n = o.height; this.position = h; var a, s, u, p, c = this.position.l, b = this.position.w, g = this.position.t, f = this.position.h, v = this.position.direction, m = v === "down", x = v === "left", T = v === "up", d = b, M = f; m || x || v === "right" || T || (this.position.direction = "down", m = !0), m || T ? (s = (a = c) + d, m ? (u = g, M = (p = Math.min(u + M, n)) - u) : M = (p = g + M) - (u = Math.max(p - M, 0))) : (p = (u = g) + M, x ? d = (s = c + d) - (a = Math.max(s - d, 0)) : (a = c, d = (s = Math.min(a + d, r)) - a)), this._box = { l: a, t: u, w: d, h: M }; var A = b > d, C = y.barLength + 2 * y.barPad, P = y.barWidth + 2 * y.barPad, O = c, z = g + f; z + P > n && (z = n - P); var B = this.container.selectAll("rect.scrollbar-horizontal").data(A ? [0] : []); B.exit().on(".drag", null).remove(), B.enter().append("rect").classed("scrollbar-horizontal", !0).call(k.fill, y.barColor), A ? (this.hbar = B.attr({ rx: y.barRadius, ry: y.barRadius, x: O, y: z, width: C, height: P }), this._hbarXMin = O + C / 2, this._hbarTranslateMax = d - C) : (delete this.hbar, delete this._hbarXMin, delete this._hbarTranslateMax); var Y = f > M, D = y.barWidth + 2 * y.barPad, G = y.barLength + 2 * y.barPad, V = c + b, j = g; V + D > r && (V = r - D); var W = this.container.selectAll("rect.scrollbar-vertical").data(Y ? [0] : []); W.exit().on(".drag", null).remove(), W.enter().append("rect").classed("scrollbar-vertical", !0).call(k.fill, y.barColor), Y ? (this.vbar = W.attr({ rx: y.barRadius, ry: y.barRadius, x: V, y: j, width: D, height: G }), this._vbarYMin = j + G / 2, this._vbarTranslateMax = M - G) : (delete this.vbar, delete this._vbarYMin, delete this._vbarTranslateMax); var Z = this.id, ie = a - .5, te = Y ? s + D + .5 : s + .5, J = u - .5, X = A ? p + P + .5 : p + .5, ee = o._topdefs.selectAll("#" + Z).data(A || Y ? [0] : []); if (ee.exit().remove(), ee.enter().append("clipPath").attr("id", Z).append("rect"), A || Y ? (this._clipRect = ee.select("rect").attr({ x: Math.floor(ie), y: Math.floor(J), width: Math.ceil(te) - Math.floor(ie), height: Math.ceil(X) - Math.floor(J) }), this.container.call(i.setClipUrl, Z, this.gd), this.bg.attr({ x: c, y: g, width: b, height: f })) : (this.bg.attr({ width: 0, height: 0 }), this.container.on("wheel", null).on(".drag", null).call(i.setClipUrl, null), delete this._clipRect), A || Y) { var re = w.behavior.drag().on("dragstart", function () { w.event.sourceEvent.preventDefault() }).on("drag", this._onBoxDrag.bind(this)); this.container.on("wheel", null).on("wheel", this._onBoxWheel.bind(this)).on(".drag", null).call(re); var oe = w.behavior.drag().on("dragstart", function () { w.event.sourceEvent.preventDefault(), w.event.sourceEvent.stopPropagation() }).on("drag", this._onBarDrag.bind(this)); A && this.hbar.on(".drag", null).call(oe), Y && this.vbar.on(".drag", null).call(oe) } this.setTranslate(l, t) }, y.prototype.disable = function () { (this.hbar || this.vbar) && (this.bg.attr({ width: 0, height: 0 }), this.container.on("wheel", null).on(".drag", null).call(i.setClipUrl, null), delete this._clipRect), this.hbar && (this.hbar.on(".drag", null), this.hbar.remove(), delete this.hbar, delete this._hbarXMin, delete this._hbarTranslateMax), this.vbar && (this.vbar.on(".drag", null), this.vbar.remove(), delete this.vbar, delete this._vbarYMin, delete this._vbarTranslateMax) }, y.prototype._onBoxDrag = function () { var h = this.translateX, l = this.translateY; this.hbar && (h -= w.event.dx), this.vbar && (l -= w.event.dy), this.setTranslate(h, l) }, y.prototype._onBoxWheel = function () { var h = this.translateX, l = this.translateY; this.hbar && (h += w.event.deltaY), this.vbar && (l += w.event.deltaY), this.setTranslate(h, l) }, y.prototype._onBarDrag = function () { var h = this.translateX, l = this.translateY; if (this.hbar) { var t = h + this._hbarXMin, o = t + this._hbarTranslateMax; h = (_.constrain(w.event.x, t, o) - t) / (o - t) * (this.position.w - this._box.w) } if (this.vbar) { var r = l + this._vbarYMin, n = r + this._vbarTranslateMax; l = (_.constrain(w.event.y, r, n) - r) / (n - r) * (this.position.h - this._box.h) } this.setTranslate(h, l) }, y.prototype.setTranslate = function (h, l) { var t = this.position.w - this._box.w, o = this.position.h - this._box.h; if (h = _.constrain(h || 0, 0, t), l = _.constrain(l || 0, 0, o), this.translateX = h, this.translateY = l, this.container.call(i.setTranslate, this._box.l - this.position.l - h, this._box.t - this.position.t - l), this._clipRect && this._clipRect.attr({ x: Math.floor(this.position.l + h - .5), y: Math.floor(this.position.t + l - .5) }), this.hbar) { var r = h / t; this.hbar.call(i.setTranslate, h + r * this._hbarTranslateMax, l) } if (this.vbar) { var n = l / o; this.vbar.call(i.setTranslate, h, l + n * this._vbarTranslateMax) } } }, 18783: function (R) { R.exports = { FROM_BL: { left: 0, center: .5, right: 1, bottom: 0, middle: .5, top: 1 }, FROM_TL: { left: 0, center: .5, right: 1, bottom: 1, middle: .5, top: 0 }, FROM_BR: { left: 1, center: .5, right: 0, bottom: 0, middle: .5, top: 1 }, LINE_SPACING: 1.3, CAP_SHIFT: .7, MID_SHIFT: .35, OPPOSITE_SIDE: { left: "right", right: "left", top: "bottom", bottom: "top" } } }, 24695: function (R) { R.exports = { axisRefDescription: function (E, e, w) { return ["If set to a", E, "axis id (e.g. *" + E + "* or", "*" + E + "2*), the `" + E + "` position refers to a", E, "coordinate. If set to *paper*, the `" + E + "`", "position refers to the distance from the", e, "of the plotting", "area in normalized coordinates where *0* (*1*) corresponds to the", e, "(" + w + "). If set to a", E, "axis ID followed by", "*domain* (separated by a space), the position behaves like for", "*paper*, but refers to the distance in fractions of the domain", "length from the", e, "of the domain of that axis: e.g.,", "*" + E + "2 domain* refers to the domain of the second", E, " axis and a", E, "position of 0.5 refers to the", "point between the", e, "and the", w, "of the domain of the", "second", E, "axis."].join(" ") } } }, 22372: function (R) { R.exports = { INCREASING: { COLOR: "#3D9970", SYMBOL: "▲" }, DECREASING: { COLOR: "#FF4136", SYMBOL: "▼" } } }, 31562: function (R) { R.exports = { FORMAT_LINK: "https://github.com/d3/d3-format/tree/v1.4.5#d3-format", DATE_FORMAT_LINK: "https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format" } }, 74808: function (R) { R.exports = { COMPARISON_OPS: ["=", "!=", "<", ">=", ">", "<="], COMPARISON_OPS2: ["=", "<", ">=", ">", "<="], INTERVAL_OPS: ["[]", "()", "[)", "(]", "][", ")(", "](", ")["], SET_OPS: ["{}", "}{"], CONSTRAINT_REDUCTION: { "=": "=", "<": "<", "<=": "<", ">": ">", ">=": ">", "[]": "[]", "()": "[]", "[)": "[]", "(]": "[]", "][": "][", ")(": "][", "](": "][", ")[": "][" } } }, 29659: function (R) { R.exports = { solid: [[], 0], dot: [[.5, 1], 200], dash: [[.5, 1], 50], longdash: [[.5, 1], 10], dashdot: [[.5, .625, .875, 1], 50], longdashdot: [[.5, .7, .8, 1], 10] } }, 87381: function (R) { R.exports = { circle: "●", "circle-open": "○", square: "■", "square-open": "□", diamond: "◆", "diamond-open": "◇", cross: "+", x: "❌" } }, 37822: function (R) { R.exports = { SHOW_PLACEHOLDER: 100, HIDE_PLACEHOLDER: 1e3, DESELECTDIM: .2 } }, 50606: function (R) { R.exports = { BADNUM: void 0, FP_SAFE: 1e-4 * Number.MAX_VALUE, ONEMAXYEAR: 316224e5, ONEAVGYEAR: 315576e5, ONEMINYEAR: 31536e6, ONEMAXQUARTER: 79488e5, ONEAVGQUARTER: 78894e5, ONEMINQUARTER: 76896e5, ONEMAXMONTH: 26784e5, ONEAVGMONTH: 26298e5, ONEMINMONTH: 24192e5, ONEWEEK: 6048e5, ONEDAY: 864e5, ONEHOUR: 36e5, ONEMIN: 6e4, ONESEC: 1e3, EPOCHJD: 24405875e-1, ALMOST_EQUAL: .999999, LOG_CLIP: 10, MINUS_SIGN: "−" } }, 32396: function (R, E) { E.CSS_DECLARATIONS = [["image-rendering", "optimizeSpeed"], ["image-rendering", "-moz-crisp-edges"], ["image-rendering", "-o-crisp-edges"], ["image-rendering", "-webkit-optimize-contrast"], ["image-rendering", "optimize-contrast"], ["image-rendering", "crisp-edges"], ["image-rendering", "pixelated"]], E.STYLE = E.CSS_DECLARATIONS.map(function (e) { return e.join(": ") + "; " }).join("") }, 77922: function (R, E) { E.xmlns = "http://www.w3.org/2000/xmlns/", E.svg = "http://www.w3.org/2000/svg", E.xlink = "http://www.w3.org/1999/xlink", E.svgAttrs = { xmlns: E.svg, "xmlns:xlink": E.xlink } }, 8729: function (R, E, e) { E.version = e(11506).version, e(7417), e(98847); for (var w = e(73972), k = E.register = w.register, i = e(10641), _ = Object.keys(i), y = 0; y < _.length; y++) { var h = _[y]; h.charAt(0) !== "_" && (E[h] = i[h]), k({ moduleType: "apiMethod", name: h, fn: i[h] }) } k(e(67368)), k([e(2199), e(30211), e(32745), e(2468), e(47322), e(89853), e(68804), e(20763), e(23243), e(13137), e(97218), e(83312), e(37369), e(21081), e(12311), e(64168)]), k([e(92177), e(37815)]), window.PlotlyLocales && Array.isArray(window.PlotlyLocales) && (k(window.PlotlyLocales), delete window.PlotlyLocales), E.Icons = e(24255); var l = e(30211), t = e(74875); E.Plots = { resize: t.resize, graphJson: t.graphJson, sendDataToCloud: t.sendDataToCloud }, E.Fx = { hover: l.hover, unhover: l.unhover, loneHover: l.loneHover, loneUnhover: l.loneUnhover }, E.Snapshot = e(44511), E.PlotSchema = e(86281) }, 24255: function (R) { R.exports = { undo: { width: 857.1, height: 1e3, path: "m857 350q0-87-34-166t-91-137-137-92-166-34q-96 0-183 41t-147 114q-4 6-4 13t5 11l76 77q6 5 14 5 9-1 13-7 41-53 100-82t126-29q58 0 110 23t92 61 61 91 22 111-22 111-61 91-92 61-110 23q-55 0-105-20t-90-57l77-77q17-16 8-38-10-23-33-23h-250q-15 0-25 11t-11 25v250q0 24 22 33 22 10 39-8l72-72q60 57 137 88t159 31q87 0 166-34t137-92 91-137 34-166z", transform: "matrix(1 0 0 -1 0 850)" }, home: { width: 928.6, height: 1e3, path: "m786 296v-267q0-15-11-26t-25-10h-214v214h-143v-214h-214q-15 0-25 10t-11 26v267q0 1 0 2t0 2l321 264 321-264q1-1 1-4z m124 39l-34-41q-5-5-12-6h-2q-7 0-12 3l-386 322-386-322q-7-4-13-4-7 2-12 7l-35 41q-4 5-3 13t6 12l401 334q18 15 42 15t43-15l136-114v109q0 8 5 13t13 5h107q8 0 13-5t5-13v-227l122-102q5-5 6-12t-4-13z", transform: "matrix(1 0 0 -1 0 850)" }, "camera-retro": { width: 1e3, height: 1e3, path: "m518 386q0 8-5 13t-13 5q-37 0-63-27t-26-63q0-8 5-13t13-5 12 5 5 13q0 23 16 38t38 16q8 0 13 5t5 13z m125-73q0-59-42-101t-101-42-101 42-42 101 42 101 101 42 101-42 42-101z m-572-320h858v71h-858v-71z m643 320q0 89-62 152t-152 62-151-62-63-152 63-151 151-63 152 63 62 151z m-571 358h214v72h-214v-72z m-72-107h858v143h-462l-36-71h-360v-72z m929 143v-714q0-30-21-51t-50-21h-858q-29 0-50 21t-21 51v714q0 30 21 51t50 21h858q29 0 50-21t21-51z", transform: "matrix(1 0 0 -1 0 850)" }, zoombox: { width: 1e3, height: 1e3, path: "m1000-25l-250 251c40 63 63 138 63 218 0 224-182 406-407 406-224 0-406-182-406-406s183-406 407-406c80 0 155 22 218 62l250-250 125 125z m-812 250l0 438 437 0 0-438-437 0z m62 375l313 0 0-312-313 0 0 312z", transform: "matrix(1 0 0 -1 0 850)" }, pan: { width: 1e3, height: 1e3, path: "m1000 350l-187 188 0-125-250 0 0 250 125 0-188 187-187-187 125 0 0-250-250 0 0 125-188-188 186-187 0 125 252 0 0-250-125 0 187-188 188 188-125 0 0 250 250 0 0-126 187 188z", transform: "matrix(1 0 0 -1 0 850)" }, zoom_plus: { width: 875, height: 1e3, path: "m1 787l0-875 875 0 0 875-875 0z m687-500l-187 0 0-187-125 0 0 187-188 0 0 125 188 0 0 187 125 0 0-187 187 0 0-125z", transform: "matrix(1 0 0 -1 0 850)" }, zoom_minus: { width: 875, height: 1e3, path: "m0 788l0-876 875 0 0 876-875 0z m688-500l-500 0 0 125 500 0 0-125z", transform: "matrix(1 0 0 -1 0 850)" }, autoscale: { width: 1e3, height: 1e3, path: "m250 850l-187 0-63 0 0-62 0-188 63 0 0 188 187 0 0 62z m688 0l-188 0 0-62 188 0 0-188 62 0 0 188 0 62-62 0z m-875-938l0 188-63 0 0-188 0-62 63 0 187 0 0 62-187 0z m875 188l0-188-188 0 0-62 188 0 62 0 0 62 0 188-62 0z m-125 188l-1 0-93-94-156 156 156 156 92-93 2 0 0 250-250 0 0-2 93-92-156-156-156 156 94 92 0 2-250 0 0-250 0 0 93 93 157-156-157-156-93 94 0 0 0-250 250 0 0 0-94 93 156 157 156-157-93-93 0 0 250 0 0 250z", transform: "matrix(1 0 0 -1 0 850)" }, tooltip_basic: { width: 1500, height: 1e3, path: "m375 725l0 0-375-375 375-374 0-1 1125 0 0 750-1125 0z", transform: "matrix(1 0 0 -1 0 850)" }, tooltip_compare: { width: 1125, height: 1e3, path: "m187 786l0 2-187-188 188-187 0 0 937 0 0 373-938 0z m0-499l0 1-187-188 188-188 0 0 937 0 0 376-938-1z", transform: "matrix(1 0 0 -1 0 850)" }, plotlylogo: { width: 1542, height: 1e3, path: "m0-10h182v-140h-182v140z m228 146h183v-286h-183v286z m225 714h182v-1000h-182v1000z m225-285h182v-715h-182v715z m225 142h183v-857h-183v857z m231-428h182v-429h-182v429z m225-291h183v-138h-183v138z", transform: "matrix(1 0 0 -1 0 850)" }, "z-axis": { width: 1e3, height: 1e3, path: "m833 5l-17 108v41l-130-65 130-66c0 0 0 38 0 39 0-1 36-14 39-25 4-15-6-22-16-30-15-12-39-16-56-20-90-22-187-23-279-23-261 0-341 34-353 59 3 60 228 110 228 110-140-8-351-35-351-116 0-120 293-142 474-142 155 0 477 22 477 142 0 50-74 79-163 96z m-374 94c-58-5-99-21-99-40 0-24 65-43 144-43 79 0 143 19 143 43 0 19-42 34-98 40v216h87l-132 135-133-135h88v-216z m167 515h-136v1c16 16 31 34 46 52l84 109v54h-230v-71h124v-1c-16-17-28-32-44-51l-89-114v-51h245v72z", transform: "matrix(1 0 0 -1 0 850)" }, "3d_rotate": { width: 1e3, height: 1e3, path: "m922 660c-5 4-9 7-14 11-359 263-580-31-580-31l-102 28 58-400c0 1 1 1 2 2 118 108 351 249 351 249s-62 27-100 42c88 83 222 183 347 122 16-8 30-17 44-27-2 1-4 2-6 4z m36-329c0 0 64 229-88 296-62 27-124 14-175-11 157-78 225-208 249-266 8-19 11-31 11-31 2 5 6 15 11 32-5-13-8-20-8-20z m-775-239c70-31 117-50 198-32-121 80-199 346-199 346l-96-15-58-12c0 0 55-226 155-287z m603 133l-317-139c0 0 4-4 19-14 7-5 24-15 24-15s-177-147-389 4c235-287 536-112 536-112l31-22 100 299-4-1z m-298-153c6-4 14-9 24-15 0 0-17 10-24 15z", transform: "matrix(1 0 0 -1 0 850)" }, camera: { width: 1e3, height: 1e3, path: "m500 450c-83 0-150-67-150-150 0-83 67-150 150-150 83 0 150 67 150 150 0 83-67 150-150 150z m400 150h-120c-16 0-34 13-39 29l-31 93c-6 15-23 28-40 28h-340c-16 0-34-13-39-28l-31-94c-6-15-23-28-40-28h-120c-55 0-100-45-100-100v-450c0-55 45-100 100-100h800c55 0 100 45 100 100v450c0 55-45 100-100 100z m-400-550c-138 0-250 112-250 250 0 138 112 250 250 250 138 0 250-112 250-250 0-138-112-250-250-250z m365 380c-19 0-35 16-35 35 0 19 16 35 35 35 19 0 35-16 35-35 0-19-16-35-35-35z", transform: "matrix(1 0 0 -1 0 850)" }, movie: { width: 1e3, height: 1e3, path: "m938 413l-188-125c0 37-17 71-44 94 64 38 107 107 107 187 0 121-98 219-219 219-121 0-219-98-219-219 0-61 25-117 66-156h-115c30 33 49 76 49 125 0 103-84 187-187 187s-188-84-188-187c0-57 26-107 65-141-38-22-65-62-65-109v-250c0-70 56-126 125-126h500c69 0 125 56 125 126l188-126c34 0 62 28 62 63v375c0 35-28 63-62 63z m-750 0c-69 0-125 56-125 125s56 125 125 125 125-56 125-125-56-125-125-125z m406-1c-87 0-157 70-157 157 0 86 70 156 157 156s156-70 156-156-70-157-156-157z", transform: "matrix(1 0 0 -1 0 850)" }, question: { width: 857.1, height: 1e3, path: "m500 82v107q0 8-5 13t-13 5h-107q-8 0-13-5t-5-13v-107q0-8 5-13t13-5h107q8 0 13 5t5 13z m143 375q0 49-31 91t-77 65-95 23q-136 0-207-119-9-14 4-24l74-55q4-4 10-4 9 0 14 7 30 38 48 51 19 14 48 14 27 0 48-15t21-33q0-21-11-34t-38-25q-35-16-65-48t-29-70v-20q0-8 5-13t13-5h107q8 0 13 5t5 13q0 10 12 27t30 28q18 10 28 16t25 19 25 27 16 34 7 45z m214-107q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z", transform: "matrix(1 0 0 -1 0 850)" }, disk: { width: 857.1, height: 1e3, path: "m214-7h429v214h-429v-214z m500 0h72v500q0 8-6 21t-11 20l-157 156q-5 6-19 12t-22 5v-232q0-22-15-38t-38-16h-322q-22 0-37 16t-16 38v232h-72v-714h72v232q0 22 16 38t37 16h465q22 0 38-16t15-38v-232z m-214 518v178q0 8-5 13t-13 5h-107q-7 0-13-5t-5-13v-178q0-8 5-13t13-5h107q7 0 13 5t5 13z m357-18v-518q0-22-15-38t-38-16h-750q-23 0-38 16t-16 38v750q0 22 16 38t38 16h517q23 0 50-12t42-26l156-157q16-15 27-42t11-49z", transform: "matrix(1 0 0 -1 0 850)" }, drawopenpath: { width: 70, height: 70, path: "M33.21,85.65a7.31,7.31,0,0,1-2.59-.48c-8.16-3.11-9.27-19.8-9.88-41.3-.1-3.58-.19-6.68-.35-9-.15-2.1-.67-3.48-1.43-3.79-2.13-.88-7.91,2.32-12,5.86L3,32.38c1.87-1.64,11.55-9.66,18.27-6.9,2.13.87,4.75,3.14,5.17,9,.17,2.43.26,5.59.36,9.25a224.17,224.17,0,0,0,1.5,23.4c1.54,10.76,4,12.22,4.48,12.4.84.32,2.79-.46,5.76-3.59L43,80.07C41.53,81.57,37.68,85.64,33.21,85.65ZM74.81,69a11.34,11.34,0,0,0,6.09-6.72L87.26,44.5,74.72,32,56.9,38.35c-2.37.86-5.57,3.42-6.61,6L38.65,72.14l8.42,8.43ZM55,46.27a7.91,7.91,0,0,1,3.64-3.17l14.8-5.3,8,8L76.11,60.6l-.06.19a6.37,6.37,0,0,1-3,3.43L48.25,74.59,44.62,71Zm16.57,7.82A6.9,6.9,0,1,0,64.64,61,6.91,6.91,0,0,0,71.54,54.09Zm-4.05,0a2.85,2.85,0,1,1-2.85-2.85A2.86,2.86,0,0,1,67.49,54.09Zm-4.13,5.22L60.5,56.45,44.26,72.7l2.86,2.86ZM97.83,35.67,84.14,22l-8.57,8.57L89.26,44.24Zm-13.69-8,8,8-2.85,2.85-8-8Z", transform: "matrix(1 0 0 1 -15 -15)" }, drawclosedpath: { width: 90, height: 90, path: "M88.41,21.12a26.56,26.56,0,0,0-36.18,0l-2.07,2-2.07-2a26.57,26.57,0,0,0-36.18,0,23.74,23.74,0,0,0,0,34.8L48,90.12a3.22,3.22,0,0,0,4.42,0l36-34.21a23.73,23.73,0,0,0,0-34.79ZM84,51.24,50.16,83.35,16.35,51.25a17.28,17.28,0,0,1,0-25.47,20,20,0,0,1,27.3,0l4.29,4.07a3.23,3.23,0,0,0,4.44,0l4.29-4.07a20,20,0,0,1,27.3,0,17.27,17.27,0,0,1,0,25.46ZM66.76,47.68h-33v6.91h33ZM53.35,35H46.44V68h6.91Z", transform: "matrix(1 0 0 1 -5 -5)" }, lasso: { width: 1031, height: 1e3, path: "m1018 538c-36 207-290 336-568 286-277-48-473-256-436-463 10-57 36-108 76-151-13-66 11-137 68-183 34-28 75-41 114-42l-55-70 0 0c-2-1-3-2-4-3-10-14-8-34 5-45 14-11 34-8 45 4 1 1 2 3 2 5l0 0 113 140c16 11 31 24 45 40 4 3 6 7 8 11 48-3 100 0 151 9 278 48 473 255 436 462z m-624-379c-80 14-149 48-197 96 42 42 109 47 156 9 33-26 47-66 41-105z m-187-74c-19 16-33 37-39 60 50-32 109-55 174-68-42-25-95-24-135 8z m360 75c-34-7-69-9-102-8 8 62-16 128-68 170-73 59-175 54-244-5-9 20-16 40-20 61-28 159 121 317 333 354s407-60 434-217c28-159-121-318-333-355z", transform: "matrix(1 0 0 -1 0 850)" }, selectbox: { width: 1e3, height: 1e3, path: "m0 850l0-143 143 0 0 143-143 0z m286 0l0-143 143 0 0 143-143 0z m285 0l0-143 143 0 0 143-143 0z m286 0l0-143 143 0 0 143-143 0z m-857-286l0-143 143 0 0 143-143 0z m857 0l0-143 143 0 0 143-143 0z m-857-285l0-143 143 0 0 143-143 0z m857 0l0-143 143 0 0 143-143 0z m-857-286l0-143 143 0 0 143-143 0z m286 0l0-143 143 0 0 143-143 0z m285 0l0-143 143 0 0 143-143 0z m286 0l0-143 143 0 0 143-143 0z", transform: "matrix(1 0 0 -1 0 850)" }, drawline: { width: 70, height: 70, path: "M60.64,62.3a11.29,11.29,0,0,0,6.09-6.72l6.35-17.72L60.54,25.31l-17.82,6.4c-2.36.86-5.57,3.41-6.6,6L24.48,65.5l8.42,8.42ZM40.79,39.63a7.89,7.89,0,0,1,3.65-3.17l14.79-5.31,8,8L61.94,54l-.06.19a6.44,6.44,0,0,1-3,3.43L34.07,68l-3.62-3.63Zm16.57,7.81a6.9,6.9,0,1,0-6.89,6.9A6.9,6.9,0,0,0,57.36,47.44Zm-4,0a2.86,2.86,0,1,1-2.85-2.85A2.86,2.86,0,0,1,53.32,47.44Zm-4.13,5.22L46.33,49.8,30.08,66.05l2.86,2.86ZM83.65,29,70,15.34,61.4,23.9,75.09,37.59ZM70,21.06l8,8-2.84,2.85-8-8ZM87,80.49H10.67V87H87Z", transform: "matrix(1 0 0 1 -15 -15)" }, drawrect: { width: 80, height: 80, path: "M78,22V79H21V22H78m9-9H12V88H87V13ZM68,46.22H31V54H68ZM53,32H45.22V69H53Z", transform: "matrix(1 0 0 1 -10 -10)" }, drawcircle: { width: 80, height: 80, path: "M50,84.72C26.84,84.72,8,69.28,8,50.3S26.84,15.87,50,15.87,92,31.31,92,50.3,73.16,84.72,50,84.72Zm0-60.59c-18.6,0-33.74,11.74-33.74,26.17S31.4,76.46,50,76.46,83.74,64.72,83.74,50.3,68.6,24.13,50,24.13Zm17.15,22h-34v7.11h34Zm-13.8-13H46.24v34h7.11Z", transform: "matrix(1 0 0 1 -10 -10)" }, eraseshape: { width: 80, height: 80, path: "M82.77,78H31.85L6,49.57,31.85,21.14H82.77a8.72,8.72,0,0,1,8.65,8.77V69.24A8.72,8.72,0,0,1,82.77,78ZM35.46,69.84H82.77a.57.57,0,0,0,.49-.6V29.91a.57.57,0,0,0-.49-.61H35.46L17,49.57Zm32.68-34.7-24,24,5,5,24-24Zm-19,.53-5,5,24,24,5-5Z", transform: "matrix(1 0 0 1 -10 -10)" }, spikeline: { width: 1e3, height: 1e3, path: "M512 409c0-57-46-104-103-104-57 0-104 47-104 104 0 57 47 103 104 103 57 0 103-46 103-103z m-327-39l92 0 0 92-92 0z m-185 0l92 0 0 92-92 0z m370-186l92 0 0 93-92 0z m0-184l92 0 0 92-92 0z", transform: "matrix(1.5 0 0 -1.5 0 850)" }, pencil: { width: 1792, height: 1792, path: "M491 1536l91-91-235-235-91 91v107h128v128h107zm523-928q0-22-22-22-10 0-17 7l-542 542q-7 7-7 17 0 22 22 22 10 0 17-7l542-542q7-7 7-17zm-54-192l416 416-832 832h-416v-416zm683 96q0 53-37 90l-166 166-416-416 166-165q36-38 90-38 53 0 91 38l235 234q37 39 37 91z", transform: "matrix(1 0 0 1 0 1)" }, newplotlylogo: { name: "newplotlylogo", svg: ["", "", " ", "", " plotly-logomark", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", ""].join("") } } }, 99863: function (R, E) { E.isLeftAnchor = function (e) { return e.xanchor === "left" || e.xanchor === "auto" && e.x <= .3333333333333333 }, E.isCenterAnchor = function (e) { return e.xanchor === "center" || e.xanchor === "auto" && e.x > .3333333333333333 && e.x < .6666666666666666 }, E.isRightAnchor = function (e) { return e.xanchor === "right" || e.xanchor === "auto" && e.x >= .6666666666666666 }, E.isTopAnchor = function (e) { return e.yanchor === "top" || e.yanchor === "auto" && e.y >= .6666666666666666 }, E.isMiddleAnchor = function (e) { return e.yanchor === "middle" || e.yanchor === "auto" && e.y > .3333333333333333 && e.y < .6666666666666666 }, E.isBottomAnchor = function (e) { return e.yanchor === "bottom" || e.yanchor === "auto" && e.y <= .3333333333333333 } }, 26348: function (R, E, e) { var w = e(64872), k = w.mod, i = w.modHalf, _ = Math.PI, y = 2 * _; function h(r) { return Math.abs(r[1] - r[0]) > y - 1e-14 } function l(r, n) { return i(n - r, y) } function t(r, n) { if (h(n)) return !0; var a, s; n[0] < n[1] ? (a = n[0], s = n[1]) : (a = n[1], s = n[0]), (a = k(a, y)) > (s = k(s, y)) && (s += y); var u = k(r, y), p = u + y; return u >= a && u <= s || p >= a && p <= s } function o(r, n, a, s, u, p, c) { u = u || 0, p = p || 0; var b, g, f, v, m, x = h([a, s]); function T(C, P) { return [C * Math.cos(P) + u, p - C * Math.sin(P)] } x ? (b = 0, g = _, f = y) : a < s ? (b = a, f = s) : (b = s, f = a), r < n ? (v = r, m = n) : (v = n, m = r); var d, M = Math.abs(f - b) <= _ ? 0 : 1; function A(C, P, O) { return "A" + [C, C] + " " + [0, M, O] + " " + T(C, P) } return x ? d = v === null ? "M" + T(m, b) + A(m, g, 0) + A(m, f, 0) + "Z" : "M" + T(v, b) + A(v, g, 0) + A(v, f, 0) + "ZM" + T(m, b) + A(m, g, 1) + A(m, f, 1) + "Z" : v === null ? (d = "M" + T(m, b) + A(m, f, 0), c && (d += "L0,0Z")) : d = "M" + T(v, b) + "L" + T(m, b) + A(m, f, 0) + "L" + T(v, f) + A(v, b, 1) + "Z", d } R.exports = { deg2rad: function (r) { return r / 180 * _ }, rad2deg: function (r) { return r / _ * 180 }, angleDelta: l, angleDist: function (r, n) { return Math.abs(l(r, n)) }, isFullCircle: h, isAngleInsideSector: t, isPtInsideSector: function (r, n, a, s) { return !!t(n, s) && (a[0] < a[1] ? (u = a[0], p = a[1]) : (u = a[1], p = a[0]), r >= u && r <= p); var u, p }, pathArc: function (r, n, a, s, u) { return o(null, r, n, a, s, u, 0) }, pathSector: function (r, n, a, s, u) { return o(null, r, n, a, s, u, 1) }, pathAnnulus: function (r, n, a, s, u, p) { return o(r, n, a, s, u, p, 1) } } }, 73627: function (R, E) { var e = Array.isArray, w = ArrayBuffer, k = DataView; function i(h) { return w.isView(h) && !(h instanceof k) } function _(h) { return e(h) || i(h) } function y(h, l, t) { if (_(h)) { if (_(h[0])) { for (var o = t, r = 0; r < h.length; r++)o = l(o, h[r].length); return o } return h.length } return 0 } E.isTypedArray = i, E.isArrayOrTypedArray = _, E.isArray1D = function (h) { return !_(h[0]) }, E.ensureArray = function (h, l) { return e(h) || (h = []), h.length = l, h }, E.concat = function () { var h, l, t, o, r, n, a, s, u = [], p = !0, c = 0; for (t = 0; t < arguments.length; t++)(n = (o = arguments[t]).length) && (l ? u.push(o) : (l = o, r = n), e(o) ? h = !1 : (p = !1, c ? h !== o.constructor && (h = !1) : h = o.constructor), c += n); if (!c) return []; if (!u.length) return l; if (p) return l.concat.apply(l, u); if (h) { for ((a = new h(c)).set(l), t = 0; t < u.length; t++)o = u[t], a.set(o, r), r += o.length; return a } for (a = new Array(c), s = 0; s < l.length; s++)a[s] = l[s]; for (t = 0; t < u.length; t++) { for (o = u[t], s = 0; s < o.length; s++)a[r + s] = o[s]; r += s } return a }, E.maxRowLength = function (h) { return y(h, Math.max, 0) }, E.minRowLength = function (h) { return y(h, Math.min, 1 / 0) } }, 95218: function (R, E, e) { var w = e(92770), k = e(50606).BADNUM, i = /^['"%,$#\s']+|[, ]|['"%,$#\s']+$/g; R.exports = function (_) { return typeof _ == "string" && (_ = _.replace(i, "")), w(_) ? Number(_) : k } }, 33306: function (R) { R.exports = function (E) { var e = E._fullLayout; e._glcanvas && e._glcanvas.size() && e._glcanvas.each(function (w) { w.regl && w.regl.clear({ color: !0, depth: !0 }) }) } }, 86367: function (R) { R.exports = function (E) { E._responsiveChartHandler && (window.removeEventListener("resize", E._responsiveChartHandler), delete E._responsiveChartHandler) } }, 96554: function (R, E, e) { var w = e(92770), k = e(84267), i = e(9012), _ = e(63282), y = e(7901), h = e(37822).DESELECTDIM, l = e(65487), t = e(30587).counter, o = e(64872).modHalf, r = e(73627).isArrayOrTypedArray; function n(a, s) { var u = E.valObjectMeta[s.valType]; if (s.arrayOk && r(a)) return !0; if (u.validateFunction) return u.validateFunction(a, s); var p = {}, c = p, b = { set: function (g) { c = g } }; return u.coerceFunction(a, b, p, s), c !== p } E.valObjectMeta = { data_array: { coerceFunction: function (a, s, u) { r(a) ? s.set(a) : u !== void 0 && s.set(u) } }, enumerated: { coerceFunction: function (a, s, u, p) { p.coerceNumber && (a = +a), p.values.indexOf(a) === -1 ? s.set(u) : s.set(a) }, validateFunction: function (a, s) { s.coerceNumber && (a = +a); for (var u = s.values, p = 0; p < u.length; p++) { var c = String(u[p]); if (c.charAt(0) === "/" && c.charAt(c.length - 1) === "/") { if (new RegExp(c.substr(1, c.length - 2)).test(a)) return !0 } else if (a === u[p]) return !0 } return !1 } }, boolean: { coerceFunction: function (a, s, u) { a === !0 || a === !1 ? s.set(a) : s.set(u) } }, number: { coerceFunction: function (a, s, u, p) { !w(a) || p.min !== void 0 && a < p.min || p.max !== void 0 && a > p.max ? s.set(u) : s.set(+a) } }, integer: { coerceFunction: function (a, s, u, p) { a % 1 || !w(a) || p.min !== void 0 && a < p.min || p.max !== void 0 && a > p.max ? s.set(u) : s.set(+a) } }, string: { coerceFunction: function (a, s, u, p) { if (typeof a != "string") { var c = typeof a == "number"; p.strict !== !0 && c ? s.set(String(a)) : s.set(u) } else p.noBlank && !a ? s.set(u) : s.set(a) } }, color: { coerceFunction: function (a, s, u) { k(a).isValid() ? s.set(a) : s.set(u) } }, colorlist: { coerceFunction: function (a, s, u) { Array.isArray(a) && a.length && a.every(function (p) { return k(p).isValid() }) ? s.set(a) : s.set(u) } }, colorscale: { coerceFunction: function (a, s, u) { s.set(_.get(a, u)) } }, angle: { coerceFunction: function (a, s, u) { a === "auto" ? s.set("auto") : w(a) ? s.set(o(+a, 360)) : s.set(u) } }, subplotid: { coerceFunction: function (a, s, u, p) { var c = p.regex || t(u); typeof a == "string" && c.test(a) ? s.set(a) : s.set(u) }, validateFunction: function (a, s) { var u = s.dflt; return a === u || typeof a == "string" && !!t(u).test(a) } }, flaglist: { coerceFunction: function (a, s, u, p) { if ((p.extras || []).indexOf(a) === -1) if (typeof a == "string") { for (var c = a.split("+"), b = 0; b < c.length;) { var g = c[b]; p.flags.indexOf(g) === -1 || c.indexOf(g) < b ? c.splice(b, 1) : b++ } c.length ? s.set(c.join("+")) : s.set(u) } else s.set(u); else s.set(a) } }, any: { coerceFunction: function (a, s, u) { a === void 0 ? s.set(u) : s.set(a) } }, info_array: { coerceFunction: function (a, s, u, p) { function c(z, B, Y) { var D, G = { set: function (V) { D = V } }; return Y === void 0 && (Y = B.dflt), E.valObjectMeta[B.valType].coerceFunction(z, G, Y, B), D } var b = p.dimensions === 2 || p.dimensions === "1-2" && Array.isArray(a) && Array.isArray(a[0]); if (Array.isArray(a)) { var g, f, v, m, x, T, d = p.items, M = [], A = Array.isArray(d), C = A && b && Array.isArray(d[0]), P = b && A && !C, O = A && !P ? d.length : a.length; if (u = Array.isArray(u) ? u : [], b) for (g = 0; g < O; g++)for (M[g] = [], v = Array.isArray(a[g]) ? a[g] : [], x = P ? d.length : A ? d[g].length : v.length, f = 0; f < x; f++)m = P ? d[f] : A ? d[g][f] : d, (T = c(v[f], m, (u[g] || [])[f])) !== void 0 && (M[g][f] = T); else for (g = 0; g < O; g++)(T = c(a[g], A ? d[g] : d, u[g])) !== void 0 && (M[g] = T); s.set(M) } else s.set(u) }, validateFunction: function (a, s) { if (!Array.isArray(a)) return !1; var u = s.items, p = Array.isArray(u), c = s.dimensions === 2; if (!s.freeLength && a.length !== u.length) return !1; for (var b = 0; b < a.length; b++)if (c) { if (!Array.isArray(a[b]) || !s.freeLength && a[b].length !== u[b].length) return !1; for (var g = 0; g < a[b].length; g++)if (!n(a[b][g], p ? u[b][g] : u)) return !1 } else if (!n(a[b], p ? u[b] : u)) return !1; return !0 } } }, E.coerce = function (a, s, u, p, c) { var b = l(u, p).get(), g = l(a, p), f = l(s, p), v = g.get(), m = s._template; if (v === void 0 && m && (v = l(m, p).get(), m = 0), c === void 0 && (c = b.dflt), b.arrayOk && r(v)) return f.set(v), v; var x = E.valObjectMeta[b.valType].coerceFunction; x(v, f, c, b); var T = f.get(); return m && T === c && !n(v, b) && (x(v = l(m, p).get(), f, c, b), T = f.get()), T }, E.coerce2 = function (a, s, u, p, c) { var b = l(a, p), g = E.coerce(a, s, u, p, c); return b.get() != null && g }, E.coerceFont = function (a, s, u) { var p = {}; return u = u || {}, p.family = a(s + ".family", u.family), p.size = a(s + ".size", u.size), p.color = a(s + ".color", u.color), p }, E.coercePattern = function (a, s, u, p) { if (a(s + ".shape")) { a(s + ".solidity"), a(s + ".size"); var c = a(s + ".fillmode") === "overlay"; if (!p) { var b = a(s + ".bgcolor", c ? u : void 0); a(s + ".fgcolor", c ? y.contrast(b) : u) } a(s + ".fgopacity", c ? .5 : 1) } }, E.coerceHoverinfo = function (a, s, u) { var p, c = s._module.attributes, b = c.hoverinfo ? c : i, g = b.hoverinfo; if (u._dataLength === 1) { var f = g.dflt === "all" ? g.flags.slice() : g.dflt.split("+"); f.splice(f.indexOf("name"), 1), p = f.join("+") } return E.coerce(a, s, b, "hoverinfo", p) }, E.coerceSelectionMarkerOpacity = function (a, s) { if (a.marker) { var u, p, c = a.marker.opacity; c !== void 0 && (r(c) || a.selected || a.unselected || (u = c, p = h * c), s("selected.marker.opacity", u), s("unselected.marker.opacity", p)) } }, E.validate = n }, 41631: function (R, E, e) { @@ -4077,7 +4077,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho }); const Ce = $5(w.data); P({ ...w, data: Ce }), A(!0), j(!0) } }, [n]), Xr("div", { className: "relative h-full", children: [p && hr("div", { className: "absolute inset-0 flex items-center justify-center z-[100]", children: Xr("svg", { className: "animate-spin h-20 w-20 text-white", xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24", children: [hr("circle", { className: "opacity-25", cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "4" }), hr("path", { className: "opacity-75", fill: "currentColor", d: "M4 12a8 8 0 018-8v8z" })] }) }), Xr("div", { id: "loading", className: "saving", children: [hr("div", { id: "loading_text", className: "loading_text" }), hr("div", { id: "loader", className: "loader" })] }), hr(P9, { title: (Me = s == null ? void 0 : s.data) == null ? void 0 : Me.title, content: (he = s == null ? void 0 : s.data) == null ? void 0 : he.content, open: s.name === "alertDialog", close: ce }), hr(R9, { addOverlay: fe => { console.log(fe), C.layout.showlegend = !0, P(fe), a(!1) }, plotlyData: C, setLoading: c, open: s.name === "overlayChart", close: ce }), hr(F9, { updateTitle: fe => t(fe), updateAxesTitles: fe => r(fe), defaultTitle: l, plotlyData: C, open: s.name === "titleDialog", close: ce }), hr(D9, { popupData: s.name === "textDialog" ? s == null ? void 0 : s.data : null, open: s.name === "textDialog", close: ce, addAnnotation: fe => me(fe), deleteAnnotation: fe => de(fe) }), hr(X7, { open: ie, onColorChange: _e }), hr(O9, { open: s.name === "downloadFinished", close: ce }), Xr("div", { className: "relative h-full", id: "MainChart", children: [Xr("div", { className: "_header relative gap-4 py-2 text-center text-xs flex items-center justify-between px-4 text-white", children: [hr("div", { className: "w-1/3", children: hr("svg", { xmlns: "http://www.w3.org/2000/svg", width: "64", height: "40", fill: "none", viewBox: "0 0 64 40", children: hr("path", { fill: "#fff", d: "M61.283 3.965H33.608v27.757h25.699V19.826H37.561v-3.965H63.26V3.965h-1.977zM39.538 23.792h15.815v3.965H37.561v-3.965h1.977zM59.306 9.913v1.983H37.561V7.931h21.745v1.982zM33.606 0h-3.954v3.965H33.606V0zM25.7 3.966H0V15.86h25.7v3.965H3.953v11.896h25.7V3.966h-3.955zm0 21.808v1.983H7.907v-3.965h17.791v1.982zm0-15.86v1.982H3.953V7.931h21.745v1.982zM37.039 35.693v2.952l-.246-.246-.245-.245-.245-.247-.245-.246-.246-.246-.245-.245-.245-.247-.247-.246-.245-.246-.245-.246-.245-.246-.246-.246h-.49v3.936h.49v-3.198l.246.246.245.246.245.246.245.246.246.246.246.246.245.247.246.245.245.246.245.247.245.246.246.245.245.246h.245v-3.936h-.49zM44.938 37.17h-.491v-1.477h-2.944v3.937h3.93v-2.46h-.495zm-2.944-.246v-.739h1.962v.984h-1.962v-.245zm2.944.984v1.23h-2.944V37.66h2.944v.247zM52.835 37.17h-.49v-1.477h-2.946v3.937h3.925v-2.46h-.489zm-2.944-.246v-.739h1.963v.984h-1.965l.002-.245zm2.944.984v1.23H49.89V37.66h2.946v.247zM29.174 35.693H25.739v3.936H29.663v-.491H26.229v-.984h2.943v-.493H26.229v-1.476h3.434v-.492h-.489zM13.37 35.693H9.934v3.937h3.925v-3.937h-.49zm0 .738v2.709h-2.945v-2.955h2.943l.001.246zM21.276 35.693h-3.435v3.937h.491v-1.476h3.434v-2.461h-.49zm0 .738v1.23h-2.944v-1.476h2.944v.246z" }) }) }), hr("p", { className: "font-bold w-1/3 flex flex-col gap-0.5 items-center", children: l }), Xr("p", { className: "w-1/3 text-right text-xs", children: [new Intl.DateTimeFormat("en-GB", { dateStyle: "full", timeStyle: "long" }).format(I).replace(/:\d\d /, " "), hr("br", {}), hr("span", { className: "text-grey-400", children: $ })] })] }), hr("div", { className: O7("w-full sm:pb-12", { "h-[calc(100%-10px)]": m, "h-[calc(100%-50px)]": !m }), children: hr(eM, { onInitialized: () => { if (!b) { const fe = document.getElementById("plotlyChart"); console.log("plot", fe), fe && g(fe), fe.globals = Pe } n || a(!0) }, className: "w-full h-full", divId: "plotlyChart", data: C.data, layout: C.layout, config: J9({ setModal: u, changeTheme: Y, autoScaling: j, Loading: c, changeColor: Z, downloadFinished: d }) }) })] })] }) - } function nM() { const [L, I] = In.useState(null), [$, se] = In.useState({}); In.useEffect(() => { { const E = setInterval(() => { if (window.json_data) { const e = window.json_data; console.log(e), I(e), clearInterval(E) } }, 100); return () => clearInterval(E) } }, []); const R = (E => { var y, h, l, t; if (!E) return null; const e = { added_traces: [], csv_yaxis_id: null, cmd_src_idx: null, cmd_idx: null, cmd_src: "", old_margin: null, title: "" }, w = (h = (y = E.layout) == null ? void 0 : y.title) == null ? void 0 : h.text.replace(/ -/g, "").replace(/-/g, "").replace(/|<\/b>/g, "").replace(/ /g, "_"), k = new Date().toISOString().slice(0, 10).replace(/-/g, ""), i = new Date().toISOString().slice(11, 19).replace(/:/g, ""); window.title = `openbb_${w}_${k}_${i}`.replace(/_{2,}/g, "_"), E.layout.annotations !== void 0 && E.layout.annotations.forEach(function (o) { if (o.text !== void 0 && o.text[0] === "/") { e.cmd_src = o.text, e.cmd_idx = E.layout.annotations.indexOf(o), o.text = ""; const r = E.layout.margin; e.old_margin = { ...r }, r.t !== void 0 && r.t > 40 && (r.t = 40), E.cmd === "/stocks/candle" && (r.r -= 50) } }), E.data.forEach(function (o) { if (o.name !== void 0) { const r = o.name.length; o.name = `${o.name} `, o.hoverlabel = { namelength: r } } }); const _ = ((t = (l = E.layout) == null ? void 0 : l.title) == null ? void 0 : t.text) || "Interactive Chart"; return e.title = _, { data: E, date: new Date, globals: e, cmd: E.command_location, posthog: E.posthog, python_version: E.python_version, pywry_version: E.pywry_version, platform_version: E.platform_version, theme: E.theme, title: _ } })(L); if (R) { R.posthog.collect_logs && !$ && se({ api_host: "https://eu.posthog.com", autocapture: { css_selector_allowlist: [".ph-capture"] }, capture_pageview: !1, loaded: function (k) { const i = (R == null ? void 0 : R.log_id) || ""; i !== "" && i !== "REPLACE_ME" && k.identify(i), k.onFeatureFlags(function () { k.isFeatureEnabled("record-pywry", { send_event: !1 }) || k.stopSessionRecording(), k.isFeatureEnabled("collect-logs-pywry", { send_event: !1 }) ? k.has_opted_out_capturing() && k.opt_in_capturing() : k.opt_out_capturing() }) } }); const E = { INFO: { command: R.cmd, title: R.title, date: R.date, python_version: R.python_version, pywry_version: R.pywry_version, platform_version: R.platform_version } }, e = hr(tM, { json: R.data, date: R.date, cmd: R.cmd, title: R.title, globals: R.globals, theme: R.theme, info: E }); return R.posthog.collect_logs && $ ? hr(L7, { apiKey: "phc_6FXLqu4uW9yxfyN8DpPdgzCdlYXOmIWdMGh6GnBgJLX", options: $, children: e }) : e } else return hr("div", { className: "absolute inset-0 flex items-center justify-center z-[100]", children: Xr("svg", { className: "animate-spin h-20 w-20 text-white", xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24", children: [hr("circle", { className: "opacity-25", cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "4" }), hr("path", { className: "opacity-75", fill: "currentColor", d: "M4 12a8 8 0 018-8v8z" })] }) }) } const rM = document.getElementById("root"); Hw(rM).render(hr(B_.StrictMode, { children: hr(nM, {}) })); + } function nM() { const [L, I] = In.useState(null), [$, se] = In.useState({}); In.useEffect(() => { { const E = setInterval(() => { if (window.json_data) { const e = window.json_data; console.log(e), I(e), clearInterval(E) } }, 100); return () => clearInterval(E) } }, []); const R = (E => { var y, h, l, t; if (!E) return null; const e = { added_traces: [], csv_yaxis_id: null, cmd_src_idx: null, cmd_idx: null, cmd_src: "", old_margin: null, title: "" }, w = (h = (y = E.layout) == null ? void 0 : y.title) == null ? void 0 : h.text.replace(/ -/g, "").replace(/-/g, "").replace(/|<\/b>/g, "").replace(/ /g, "_"), k = new Date().toISOString().slice(0, 10).replace(/-/g, ""), i = new Date().toISOString().slice(11, 19).replace(/:/g, ""); window.title = `openbb_${w}_${k}_${i}`.replace(/_{2,}/g, "_"), E.layout.annotations !== void 0 && E.layout.annotations.forEach(function (o) { if (o.text !== void 0 && o.text[0] === "/") { e.cmd_src = o.text, e.cmd_idx = E.layout.annotations.indexOf(o), o.text = ""; const r = E.layout.margin; e.old_margin = { ...r }, r.t !== void 0 && r.t > 40 && (r.t = 40), E.cmd === "/stocks/candle" && (r.r -= 50) } }), E.data.forEach(function (o) { if (o.name !== void 0) { const r = o.name.length; o.name = `${o.name} `, o.hoverlabel = { namelength: r } } }); const _ = ((t = (l = E.layout) == null ? void 0 : l.title) == null ? void 0 : t.text) || "Interactive Chart"; return e.title = _, { data: E, date: new Date, globals: e, cmd: E.command_location, posthog: E.posthog, python_version: E.python_version, pywry_version: E.pywry_version, platform_version: E.platform_version, theme: E.theme, title: _ } })(L); if (R) { R.posthog.collect_logs && !$ && se({ api_host: "https://app.posthog.com", autocapture: { css_selector_allowlist: [".ph-capture"] }, capture_pageview: !1, loaded: function (k) { const i = (R == null ? void 0 : R.log_id) || ""; i !== "" && i !== "REPLACE_ME" && k.identify(i), k.onFeatureFlags(function () { k.isFeatureEnabled("record-pywry", { send_event: !1 }) || k.stopSessionRecording(), k.isFeatureEnabled("collect-logs-pywry", { send_event: !1 }) ? k.has_opted_out_capturing() && k.opt_in_capturing() : k.opt_out_capturing() }) } }); const E = { INFO: { command: R.cmd, title: R.title, date: R.date, python_version: R.python_version, pywry_version: R.pywry_version, platform_version: R.platform_version } }, e = hr(tM, { json: R.data, date: R.date, cmd: R.cmd, title: R.title, globals: R.globals, theme: R.theme, info: E }); return R.posthog.collect_logs && $ ? hr(L7, { apiKey: "", options: $, children: e }) : e } else return hr("div", { className: "absolute inset-0 flex items-center justify-center z-[100]", children: Xr("svg", { className: "animate-spin h-20 w-20 text-white", xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24", children: [hr("circle", { className: "opacity-25", cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "4" }), hr("path", { className: "opacity-75", fill: "currentColor", d: "M4 12a8 8 0 018-8v8z" })] }) }) } const rM = document.getElementById("root"); Hw(rM).render(hr(B_.StrictMode, { children: hr(nM, {}) }));