diff --git a/.circleci/config.yml b/.circleci/config.yml
index 3b36cc48022..a0e2dbd2a7a 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -58,9 +58,6 @@ commands:
             source .venv/bin/activate
             uv pip install .
             uv pip install -r ./test_requirements/requirements_optional.txt
-            cd js
-            npm ci
-            npm run build
       
       - when:
           condition: 
@@ -117,6 +114,35 @@ commands:
             source .venv/bin/activate
             python -m pytest -x test_init/test_lazy_imports.py
 
+  test_io_kaleido_v0:
+    steps:
+      - checkout
+      - browser-tools/install-chrome
+      - browser-tools/install-chromedriver
+      - run:
+          name: Install dependencies
+          command: |
+            curl -LsSf https://astral.sh/uv/install.sh | sh
+            uv venv
+            source .venv/bin/activate
+            uv pip install .
+            uv pip install -r ./test_requirements/requirements_optional.txt
+            # Install Kaleido v0 instead of the v1 specified in requirements_optional.txt
+            uv pip uninstall kaleido
+            uv pip install kaleido==0.2.1
+      - run:
+          name: List installed packages and python version
+          command: |
+            source .venv/bin/activate
+            uv pip list
+            python --version
+      - run:
+          name: Test plotly.io image output with Kaleido v0
+          command: |
+            source .venv/bin/activate
+            python -m pytest tests/test_optional/test_kaleido
+          no_output_timeout: 20m
+
 jobs:
   check-code-formatting:
     docker:
@@ -129,7 +155,7 @@ jobs:
           command: |
             python -m venv venv
             . venv/bin/activate
-            pip install black==22.3.0
+            pip install black==25.1.0
       - run:
           name: Check formatting with black
           command: |
@@ -166,6 +192,17 @@ jobs:
           pandas_version: <<parameters.pandas_version>>
           numpy_version: <<parameters.numpy_version>>
 
+  test_kaleido_v0:
+    parameters:
+      python_version:
+        default: "3.12"
+        type: string
+    executor:
+      name: docker-container
+      python_version: <<parameters.python_version>>
+    steps:  
+      - test_io_kaleido_v0
+
   # Percy
   python_311_percy:
     docker:
@@ -269,22 +306,18 @@ jobs:
 
     steps:
       - checkout
-
       - run:
-          name: initial NPM Build
+          name: PyPI Build
           command: |
-            python -m venv venv
-            . venv/bin/activate
+            curl -LsSf https://astral.sh/uv/install.sh | sh
+            uv venv
+            source .venv/bin/activate
+            uv pip install build
+            uv pip install jupyter
             cd js
             npm ci
             npm run build
-            git status
-
-      - run:
-          name: PyPI Build
-          command: |
-            . venv/bin/activate
-            pip install build
+            cd ..
             python -m build --sdist --wheel -o dist
             cp -R dist output
             git status
@@ -310,7 +343,6 @@ jobs:
       - checkout
       - browser-tools/install-chrome
       - browser-tools/install-chromedriver
-
       - run:
           name: Install dependencies
           command: |
@@ -319,16 +351,11 @@ jobs:
             uv venv
             source .venv/bin/activate
             uv pip install -r requirements.txt
+            cd ..
             if [ "${CIRCLE_BRANCH}" != "doc-prod" ]; then
               uv pip uninstall plotly
-              cd ..
               uv pip install -e .
-              cd js
-              npm ci
-              npm run build
-              cd ../doc
             fi
-            cd ..
 
       - run:
           name: make html
@@ -420,7 +447,7 @@ workflows:
   release_build:
     jobs:
       - full_build
-
+  
   build:
     jobs:
       - test_core_py:
@@ -448,5 +475,10 @@ workflows:
           python_version: "3.9"
           pandas_version: "1.2.4"
           numpy_version: "1.26.4"
+      - test_kaleido_v0:
+          matrix:
+            parameters:
+              python_version:
+                - "3.12"
       - python_311_percy
-      - build-doc
+      - build-doc
\ No newline at end of file
diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md
index 0fbc16b87a9..c862d73cb9e 100644
--- a/.github/ISSUE_TEMPLATE.md
+++ b/.github/ISSUE_TEMPLATE.md
@@ -2,6 +2,6 @@ Thanks for your interest in Plotly.py!
 
 Before opening an issue, please search for existing and closed issues :)
 
-**Please** accompany bug reports with a reproducible example. Please use the [latest version](https://github.com/plotly/plotly.py/blob/master/CHANGELOG.md) of plotly.py in your report unless not applicable.
+**Please** accompany bug reports with a reproducible example. Please use the [latest version](https://github.com/plotly/plotly.py/blob/main/CHANGELOG.md) of plotly.py in your report unless not applicable.
 
 Note that GitHub Issues are meant to be used for bug reports and feature requests only. Implementation or usage questions should be asked on [community.plotly.com](https://community.plotly.com/c/graphing-libraries/python/10) or on Stack Overflow (tagged [`plotly`](https://stackoverflow.com/questions/tagged/plotly)).
diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md
index b5c5d2649d0..79e3829585f 100644
--- a/.github/pull_request_template.md
+++ b/.github/pull_request_template.md
@@ -6,7 +6,7 @@ below :-).
 
 ### Documentation PR
 
-- [ ] I've [seen the `doc/README.md` file](https://github.com/plotly/plotly.py/blob/master/doc/README.md)
+- [ ] I've [seen the `doc/README.md` file](https://github.com/plotly/plotly.py/blob/main/doc/README.md)
 - [ ] This change runs in the current version of Plotly on PyPI and targets the `doc-prod` branch OR it targets the `main` branch
 - [ ] If this PR modifies the first example in a page or adds a new one, it is a `px` example if at all possible
 - [ ] Every new/modified example has a descriptive title and motivating sentence or paragraph
@@ -27,7 +27,7 @@ below :-).
 
 ## Code PR
 
-- [ ] I have read through the [contributing notes](https://github.com/plotly/plotly.py/blob/master/CONTRIBUTING.md) and understand the structure of the package. In particular, if my PR modifies code of `plotly.graph_objects`, my modifications concern the `codegen` files and not generated files.
+- [ ] I have read through the [contributing notes](https://github.com/plotly/plotly.py/blob/main/CONTRIBUTING.md) and understand the structure of the package. In particular, if my PR modifies code of `plotly.graph_objects`, my modifications concern the `codegen` files and not generated files.
 - [ ] I have added tests (if submitting a new feature or correcting a bug) or
   modified existing tests.
 - [ ] For a new feature, I have added documentation examples in an existing or
diff --git a/.github/workflows/check-js-build.yml b/.github/workflows/check-js-build.yml
new file mode 100644
index 00000000000..d5e4ea1f8ad
--- /dev/null
+++ b/.github/workflows/check-js-build.yml
@@ -0,0 +1,66 @@
+on: push
+
+jobs:
+  check-js-build:
+    name: Check JS build artifacts
+    runs-on: ubuntu-latest
+    steps:
+    - uses: actions/checkout@v4
+    - name: Set up Python
+      uses: actions/setup-python@v5
+      with:
+        python-version: "3.x"
+        
+    - name: Install Node
+      uses: actions/setup-node@v2
+      with:
+        node-version: '22'
+
+    - name: Copy current files to a temporary directory
+      run: |
+        cp -R plotly/labextension/ plotly/labextension-tmp/
+
+    - name: Install dependencies and build
+      run: |
+        curl -LsSf https://astral.sh/uv/install.sh | sh
+        uv venv
+        source .venv/bin/activate
+        uv pip install jupyter
+        cd js
+        npm ci
+        npm run build
+    - name: Check JupyterLab build artifacts
+      run: |
+        # 1. Hash contents of all static files, sort by content hash
+        find plotly/labextension/static -type f -exec sha256sum {} \; | awk '{print $1}' | sort > new_hashes.txt
+        find plotly/labextension-tmp/static -type f -exec sha256sum {} \; | awk '{print $1}' | sort > old_hashes.txt
+
+        # 2. Compare the sorted content hashes
+        diff old_hashes.txt new_hashes.txt > content_diff.txt
+
+        # Remove the "load" line from both package.json files before comparing
+        grep -v '"load": "static/' plotly/labextension/package.json > pkg1.json
+        grep -v '"load": "static/' plotly/labextension-tmp/package.json > pkg2.json
+
+        # Compare stripped versions
+        diff pkg1.json pkg2.json > package_json_diff.txt
+
+        # 5. Final check
+        if [ -s content_diff.txt ] || [ -s package_json_diff.txt ]; then
+        echo "❌ Build artifacts differ:"
+        echo "--- Unexpected diffs ---"
+        cat content_diff.txt
+        echo "--- Unexpected package.json diffs ---"
+        cat package_json_diff.txt
+        echo "Please replace the 'plotly/labextension' directory with the artifacts of this CI run."
+        exit 1
+        else
+        echo "✅ Build artifacts match expected output (ignoring known 'load' hash in package.json)."
+        fi
+
+    - name: Store the build artifacts from plotly/labextension
+      uses: actions/upload-artifact@v4
+      if: failure()
+      with:
+        name: labextension
+        path: plotly/labextension
diff --git a/.github/workflows/test-release.yml b/.github/workflows/test-release.yml
new file mode 100644
index 00000000000..19c87193e1c
--- /dev/null
+++ b/.github/workflows/test-release.yml
@@ -0,0 +1,71 @@
+name: Publish Python 🐍 distribution 📦 to PyPI and TestPyPI
+
+on:
+  workflow_dispatch
+
+jobs:
+  build:
+    name: Build distribution 📦
+    runs-on: ubuntu-latest
+
+    steps:
+    - uses: actions/checkout@v4
+      with:
+        persist-credentials: false
+    - name: Set up Python
+      uses: actions/setup-python@v5
+      with:
+        python-version: "3.x"
+    
+    - name: Install Node
+      uses: actions/setup-node@v2
+      with:
+        node-version: '22'
+
+    - name: Install npm dependencies
+      run: |
+        curl -LsSf https://astral.sh/uv/install.sh | sh
+        uv venv
+        source .venv/bin/activate
+        uv pip install jupyter
+        cd js
+        npm ci --verbose
+        npm run build --verbose
+
+    - name: Install pypa/build
+      run: >-
+        python3 -m
+        pip install
+        build
+        --user
+    - name: Build a binary wheel and a source tarball
+      run: python3 -m build
+    - name: Store the distribution packages
+      uses: actions/upload-artifact@v4
+      with:
+        name: python-package-distributions
+        path: dist/
+
+  publish-to-testpypi:
+    name: Publish Python 🐍 distribution 📦 to TestPyPI
+    needs:
+    - build
+    runs-on: ubuntu-latest
+
+    environment:
+      name: testpypi
+      url: https://test.pypi.org/p/plotly
+
+    permissions:
+      id-token: write  # IMPORTANT: mandatory for trusted publishing
+
+    steps:
+    - name: Download all the dists
+      uses: actions/download-artifact@v4
+      with:
+        name: python-package-distributions
+        path: dist/
+    - name: Publish distribution 📦 to TestPyPI
+      uses: pypa/gh-action-pypi-publish@release/v1
+      with:
+        repository-url: https://test.pypi.org/legacy/
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 0da5fe396a6..dc12befc828 100644
--- a/.gitignore
+++ b/.gitignore
@@ -59,7 +59,6 @@ doc/python/.mapbox_token
 doc/.ipynb_checkpoints
 tags
 doc/check-or-enforce-order.py
-plotly/package_data/widgetbundle.js
 
 tests/percy/*.html
 tests/percy/pandas2/*.html
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 638fb47b176..c70c9cf1d19 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,7 +1,20 @@
-# Change Log
+# Changelog
 All notable changes to this project will be documented in this file.
 This project adheres to [Semantic Versioning](http://semver.org/).
 
+## [6.1.0rc0] - 2025-05-01
+
+### Updated
+- Add support for Kaleido>=v1.0.0 for image generation, and deprecate support for Kaleido<1 and Orca [[#5062](https://github.com/plotly/plotly.py/pull/5062)]
+- Reduce package bundle size by 18-24% via changes to code generation [[#4978](https://github.com/plotly/plotly.py/pull/4978)]
+
+### Fixed
+- Fix third-party widget display issues in v6 [[#5102](https://github.com/plotly/plotly.py/pull/5102)]
+- Add handling for case where `jupyterlab` or `notebook` is not installed [[#5104](https://github.com/plotly/plotly.py/pull/5104/files)]
+- Fix issue causing Plotly.js script to be embedded multiple times in Jupyter notebooks [[#5112](https://github.com/plotly/plotly.py/pull/5112)]
+- Re-add MIME renderer JupyterLab extension with JupyterLab 4 support to reduce file sizes for offline notebooks [[#5096](https://github.com/plotly/plotly.py/pull/5096)]
+- Fix issue preventing plots from rendering in HTML notebook export when using 'vscode+notebook' renderer [[#5154](https://github.com/plotly/plotly.py/pull/5154)]
+
 ## [6.0.1] - 2025-03-14
 
 ### Updated
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index a9c8fa76232..a6ab588ed0d 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -169,6 +169,19 @@ and
 [`pip`](https://pip.pypa.io/en/stable/reference/pip_install/#install-editable)
 documentation on _development mode_.
 
+### Updating the `js/` directory
+**This is only necessary if you're making changes to files in the `js/` directory.**
+If you make changes to any files in the `js/` directory, you must run `npm install && npm run build` from the `js/` directory to rebuild the FigureWidget and JupyterLab extension.
+You must then commit the build artifacts produced in `plotly/labextension`. A CI job will verify that this step has been done correctly.
+
+**Notes on the contents of the `js/` directory:**
+The `js/` directory contains Javascript code which helps with using Plotly in Jupyter notebooks.
+
+There are two kinds of Jupyter support included in the `js/` directory:
+1. **Mime Renderer JupyterLab extension**: This is the default renderer for Plotly `Figure()` objects in Jupyter notebooks. The Plotly mime renderer JupyterLab extension is used automatically by JupyterLab / Jupyter Notebook
+when it sees the mimetype `application/vnd.plotly.v1+json` in the notebook output. The mime renderer loads `plotly.js` a single time and references it each time a Plotly figure is used in the notebook. This allows us to avoid embedding `plotly.js` in the notebook output. The JupyterLab extension source code is located at `js/src/mimeExtension.ts` and the compiled extension code is located at `plotly/labextension` in the built Python package. The command `jupyter labextension build` (which is one of the steps called by `npm run build`) compiles the extension and places the build artifacts in `plotly/labextension`. 
+2. **FigureWidget**: This is a more-interactive method for rendering Plotly charts in notebooks. FigureWidget used by creating a `FigureWidget()` object inside the notebook code (in place of a `Figure()`). It allows for communication between the Javascript frontend and Python backend, and requires the installation of an additional Python package (`anywidget`). The FigureWidget source code is located at `js/src/widget.ts`, and is included in the built Python package at `plotly/package_data/widgetbundle.js`. 
+
 ### Configure black code formatting
 
 This repo uses the [Black](https://black.readthedocs.io/en/stable/) code formatter,
diff --git a/README.md b/README.md
index 10231193e8a..e0b23b1c1ef 100644
--- a/README.md
+++ b/README.md
@@ -55,7 +55,7 @@ See the [Python documentation](https://plotly.com/python/) for more examples.
 
 Built on top of [plotly.js](https://github.com/plotly/plotly.js), `plotly.py` is a high-level, declarative charting library. plotly.js ships with over 30 chart types, including scientific charts, 3D graphs, statistical charts, SVG maps, financial charts, and more.
 
-`plotly.py` is [MIT Licensed](https://github.com/plotly/plotly.py/blob/master/LICENSE.txt). Plotly graphs can be viewed in Jupyter notebooks, standalone HTML files, or integrated into [Dash applications](https://dash.plotly.com/).
+`plotly.py` is [MIT Licensed](https://github.com/plotly/plotly.py/blob/main/LICENSE.txt). Plotly graphs can be viewed in Jupyter notebooks, standalone HTML files, or integrated into [Dash applications](https://dash.plotly.com/).
 
 [Contact us](https://plotly.com/consulting-and-oem/) for consulting, dashboard development, application integration, and feature additions.
 
@@ -67,9 +67,9 @@ Built on top of [plotly.js](https://github.com/plotly/plotly.js), `plotly.py` is
 ---
 
 - [Online Documentation](https://plotly.com/python/)
-- [Contributing to plotly](https://github.com/plotly/plotly.py/blob/master/CONTRIBUTING.md)
-- [Changelog](https://github.com/plotly/plotly.py/blob/master/CHANGELOG.md)
-- [Code of Conduct](https://github.com/plotly/plotly.py/blob/master/CODE_OF_CONDUCT.md)
+- [Contributing to plotly](https://github.com/plotly/plotly.py/blob/main/CONTRIBUTING.md)
+- [Changelog](https://github.com/plotly/plotly.py/blob/main/CHANGELOG.md)
+- [Code of Conduct](https://github.com/plotly/plotly.py/blob/main/CODE_OF_CONDUCT.md)
 - [Community forum](https://community.plotly.com)
 
 ---
@@ -147,7 +147,7 @@ conda install -c plotly plotly-geo=1.0.0
 
 Code and documentation copyright 2019 Plotly, Inc.
 
-Code released under the [MIT license](https://github.com/plotly/plotly.py/blob/master/LICENSE.txt).
+Code released under the [MIT license](https://github.com/plotly/plotly.py/blob/main/LICENSE.txt).
 
 Docs released under the [Creative Commons license](https://github.com/plotly/documentation/blob/source/LICENSE).
 
diff --git a/RELEASE.md b/RELEASE.md
index 826dd407f1d..471e076b912 100644
--- a/RELEASE.md
+++ b/RELEASE.md
@@ -20,7 +20,7 @@ a link to the plotly.js CHANGELOG.
 
 ### Finalize versions
 
-**Create a branch `git checkout -b release-X.Y.Z` *from the tip of `origin/master`*.**
+**Create a branch `git checkout -b release-X.Y.Z` *from the tip of `origin/main`*.**
 
 Manually update the versions to `X.Y.Z` in the files specified below.
 
@@ -70,7 +70,6 @@ Publishing to PyPI:
 ### Update documentation site
 
 1. Search for the previous version string in the docs and replace it with the new version string, including but not necessarily limited to the following files:
-    - `doc/python/getting-started.md`
     - `doc/apidoc/conf.py`
     - `doc/requirements.txt`
 2. `doc-prod` should already have been merged on a regular basis into `main`, but
diff --git a/_plotly_utils/basevalidators.py b/_plotly_utils/basevalidators.py
index 3e7bd9faddf..5cc8e6c8c7c 100644
--- a/_plotly_utils/basevalidators.py
+++ b/_plotly_utils/basevalidators.py
@@ -1328,25 +1328,14 @@ def numbers_allowed(self):
         return self.colorscale_path is not None
 
     def description(self):
-
-        named_clrs_str = "\n".join(
-            textwrap.wrap(
-                ", ".join(self.named_colors),
-                width=79 - 16,
-                initial_indent=" " * 12,
-                subsequent_indent=" " * 12,
-            )
-        )
-
         valid_color_description = """\
     The '{plotly_name}' property is a color and may be specified as:
       - A hex string (e.g. '#ff0000')
       - An rgb/rgba string (e.g. 'rgb(255,0,0)')
       - An hsl/hsla string (e.g. 'hsl(0,100%,50%)')
       - An hsv/hsva string (e.g. 'hsv(0,100%,100%)')
-      - A named CSS color:
-{clrs}""".format(
-            plotly_name=self.plotly_name, clrs=named_clrs_str
+      - A named CSS color: see https://plotly.com/python/css-colors/ for a list""".format(
+            plotly_name=self.plotly_name
         )
 
         if self.colorscale_path:
@@ -2483,15 +2472,11 @@ def description(self):
     that may be specified as:
       - An instance of :class:`{module_str}.{class_str}`
       - A dict of string/value properties that will be passed
-        to the {class_str} constructor
-
-        Supported dict properties:
-            {constructor_params_str}"""
+        to the {class_str} constructor"""
         ).format(
             plotly_name=self.plotly_name,
             class_str=self.data_class_str,
             module_str=self.module_str,
-            constructor_params_str=self.data_docs,
         )
 
         return desc
@@ -2560,15 +2545,11 @@ def description(self):
     {class_str} that may be specified as:
       - A list or tuple of instances of {module_str}.{class_str}
       - A list or tuple of dicts of string/value properties that
-        will be passed to the {class_str} constructor
-
-        Supported dict properties:
-            {constructor_params_str}"""
+        will be passed to the {class_str} constructor"""
         ).format(
             plotly_name=self.plotly_name,
             class_str=self.data_class_str,
             module_str=self.module_str,
-            constructor_params_str=self.data_docs,
         )
 
         return desc
diff --git a/_plotly_utils/colors/__init__.py b/_plotly_utils/colors/__init__.py
index 794c20d2e52..6c6b8199041 100644
--- a/_plotly_utils/colors/__init__.py
+++ b/_plotly_utils/colors/__init__.py
@@ -73,6 +73,7 @@
 Be careful! If you have a lot of unique numbers in your color column you will
 end up with a colormap that is massive and may slow down graphing performance.
 """
+
 import decimal
 from numbers import Number
 
diff --git a/codegen/__init__.py b/codegen/__init__.py
index ffc15257213..d3bb05f2ec4 100644
--- a/codegen/__init__.py
+++ b/codegen/__init__.py
@@ -26,6 +26,10 @@
     get_data_validator_instance,
 )
 
+# Target Python version for code formatting with Black.
+# Must be one of the values listed in pyproject.toml.
+BLACK_TARGET_VERSIONS = "py38 py39 py310 py311 py312"
+
 
 # Import notes
 # ------------
@@ -85,7 +89,7 @@ def preprocess_schema(plotly_schema):
         items["colorscale"] = items.pop("concentrationscales")
 
 
-def perform_codegen():
+def perform_codegen(reformat=True):
     # Set root codegen output directory
     # ---------------------------------
     # (relative to project root)
@@ -267,36 +271,24 @@ def perform_codegen():
         root_datatype_imports.append(f"._deprecations.{dep_clas}")
 
     optional_figure_widget_import = f"""
-if sys.version_info < (3, 7) or TYPE_CHECKING:
-    try:
-        import ipywidgets as _ipywidgets
-        from packaging.version import Version as _Version
-        if _Version(_ipywidgets.__version__) >= _Version("7.0.0"):
-            from ..graph_objs._figurewidget import FigureWidget
-        else:
-            raise ImportError()
-    except Exception:
-        from ..missing_anywidget import FigureWidget
-else:
-    __all__.append("FigureWidget")
-    orig_getattr = __getattr__
-    def __getattr__(import_name):
-        if import_name == "FigureWidget":
-            try:
-                import ipywidgets
-                from packaging.version import Version
-
-                if Version(ipywidgets.__version__) >= Version("7.0.0"):
-                    from ..graph_objs._figurewidget import FigureWidget
-
-                    return FigureWidget
-                else:
-                    raise ImportError()
-            except Exception:
-                from ..missing_anywidget import FigureWidget
+__all__.append("FigureWidget")
+orig_getattr = __getattr__
+def __getattr__(import_name):
+    if import_name == "FigureWidget":
+        try:
+            import ipywidgets
+            from packaging.version import Version
+
+            if Version(ipywidgets.__version__) >= Version("7.0.0"):
+                from ..graph_objs._figurewidget import FigureWidget
                 return FigureWidget
+            else:
+                raise ImportError()
+        except Exception:
+            from ..missing_anywidget import FigureWidget
+            return FigureWidget
 
-        return orig_getattr(import_name)
+    return orig_getattr(import_name)
 """
     # ### __all__ ###
     for path_parts, class_names in alls.items():
@@ -337,9 +329,15 @@ def __getattr__(import_name):
         f.write(graph_objects_init_source)
 
     # ### Run black code formatter on output directories ###
-    subprocess.call(["black", "--target-version=py36", validators_pkgdir])
-    subprocess.call(["black", "--target-version=py36", graph_objs_pkgdir])
-    subprocess.call(["black", "--target-version=py36", graph_objects_path])
+    if reformat:
+        target_version = [
+            f"--target-version={v}" for v in BLACK_TARGET_VERSIONS.split()
+        ]
+        subprocess.call(["black", *target_version, validators_pkgdir])
+        subprocess.call(["black", *target_version, graph_objs_pkgdir])
+        subprocess.call(["black", *target_version, graph_objects_path])
+    else:
+        print("skipping reformatting")
 
 
 if __name__ == "__main__":
diff --git a/codegen/compatibility.py b/codegen/compatibility.py
index 65baf3860ee..d806afa09f2 100644
--- a/codegen/compatibility.py
+++ b/codegen/compatibility.py
@@ -89,7 +89,7 @@ def __init__(self, *args, **kwargs):
         {depr_msg}
         \"\"\"
         warnings.warn(\"\"\"{depr_msg}\"\"\", DeprecationWarning)
-        super({class_name}, self).__init__(*args, **kwargs)\n\n\n"""
+        super().__init__(*args, **kwargs)\n\n\n"""
         )
 
     # Return source string
diff --git a/codegen/datatypes.py b/codegen/datatypes.py
index 178c777850e..4376f321654 100644
--- a/codegen/datatypes.py
+++ b/codegen/datatypes.py
@@ -2,7 +2,7 @@
 import textwrap
 from io import StringIO
 
-from codegen.utils import PlotlyNode, write_source_py
+from codegen.utils import CAVEAT, PlotlyNode, write_source_py
 
 
 deprecated_mapbox_traces = [
@@ -69,11 +69,10 @@ def build_datatype_py(node):
     """
 
     # Validate inputs
-    # ---------------
     assert node.is_compound
 
     # Handle template traces
-    # ----------------------
+    #
     # We want template trace/layout classes like
     # plotly.graph_objs.layout.template.data.Scatter to map to the
     # corresponding trace/layout class (e.g. plotly.graph_objs.Scatter).
@@ -85,17 +84,15 @@ def build_datatype_py(node):
         return "from plotly.graph_objs import Layout"
 
     # Extract node properties
-    # -----------------------
     undercase = node.name_undercase
     datatype_class = node.name_datatype_class
     literal_nodes = [n for n in node.child_literals if n.plotly_name in ["type"]]
 
     # Initialze source code buffer
-    # ----------------------------
     buffer = StringIO()
+    buffer.write(CAVEAT)
 
     # Imports
-    # -------
     buffer.write(
         f"from plotly.basedatatypes "
         f"import {node.name_base_datatype} as _{node.name_base_datatype}\n"
@@ -109,14 +106,13 @@ def build_datatype_py(node):
         buffer.write(f"import warnings\n")
 
     # Write class definition
-    # ----------------------
     buffer.write(
         f"""
 
 class {datatype_class}(_{node.name_base_datatype}):\n"""
     )
 
-    # ### Layout subplot properties ###
+    ### Layout subplot properties
     if datatype_class == "Layout":
         subplot_nodes = [
             node
@@ -130,7 +126,7 @@ class {datatype_class}(_{node.name_base_datatype}):\n"""
 
     import re
     _subplotid_prop_re = re.compile(
-        '^(' + '|'.join(_subplotid_prop_names) + r')(\d+)$')
+        '^(' + '|'.join(_subplotid_prop_names) + r')(\\d+)$')
 """
         )
 
@@ -171,17 +167,16 @@ def _subplot_re_match(self, prop):
     valid_props_list = sorted(
         [node.name_property for node in subtype_nodes + literal_nodes]
     )
+    # class properties
     buffer.write(
         f"""
-    # class properties
-    # --------------------
     _parent_path_str = '{node.parent_path_str}'
     _path_str = '{node.path_str}'
     _valid_props = {{"{'", "'.join(valid_props_list)}"}}
 """
     )
 
-    # ### Property definitions ###
+    ### Property definitions
     for subtype_node in subtype_nodes:
         if subtype_node.is_array_element:
             prop_type = (
@@ -202,7 +197,7 @@ def _subplot_re_match(self, prop):
         else:
             prop_type = get_typing_type(subtype_node.datatype, subtype_node.is_array_ok)
 
-        # #### Get property description ####
+        #### Get property description ####
         raw_description = subtype_node.description
         property_description = "\n".join(
             textwrap.wrap(
@@ -213,12 +208,12 @@ def _subplot_re_match(self, prop):
             )
         )
 
-        # # #### Get validator description ####
+        # #### Get validator description ####
         validator = subtype_node.get_validator_instance()
         if validator:
             validator_description = reindent_validator_description(validator, 4)
 
-            # #### Combine to form property docstring ####
+            #### Combine to form property docstring ####
             if property_description.strip():
                 property_docstring = f"""{property_description}
 
@@ -228,12 +223,10 @@ def _subplot_re_match(self, prop):
         else:
             property_docstring = property_description
 
-        # #### Write get property ####
+        #### Write get property ####
         buffer.write(
             f"""\
 
-    # {subtype_node.name_property}
-    # {'-' * len(subtype_node.name_property)}
     @property
     def {subtype_node.name_property}(self):
         \"\"\"
@@ -246,7 +239,7 @@ def {subtype_node.name_property}(self):
         return self['{subtype_node.name_property}']"""
         )
 
-        # #### Write set property ####
+        #### Write set property ####
         buffer.write(
             f"""
 
@@ -255,24 +248,20 @@ def {subtype_node.name_property}(self, val):
         self['{subtype_node.name_property}'] = val\n"""
         )
 
-        # ### Literals ###
+        ### Literals
     for literal_node in literal_nodes:
         buffer.write(
             f"""\
 
-    # {literal_node.name_property}
-    # {'-' * len(literal_node.name_property)}
     @property
     def {literal_node.name_property}(self):
         return self._props['{literal_node.name_property}']\n"""
         )
 
-    # ### Private properties descriptions ###
+    ### Private properties descriptions
     valid_props = {node.name_property for node in subtype_nodes}
     buffer.write(
         f"""
-    # Self properties description
-    # ---------------------------
     @property
     def _prop_descriptions(self):
         return \"\"\"\\"""
@@ -294,7 +283,7 @@ def _prop_descriptions(self):
     _mapped_properties = {repr(mapped_properties)}"""
         )
 
-    # ### Constructor ###
+    ### Constructor
     buffer.write(
         f"""
     def __init__(self"""
@@ -302,7 +291,7 @@ def __init__(self"""
 
     add_constructor_params(buffer, subtype_nodes, prepend_extras=["arg"])
 
-    # ### Constructor Docstring ###
+    ### Constructor Docstring
     header = f"Construct a new {datatype_class} object"
     class_name = (
         f"plotly.graph_objs" f"{node.parent_dotpath_str}." f"{node.name_datatype_class}"
@@ -326,8 +315,7 @@ def __init__(self"""
 
     buffer.write(
         f"""
-        super({datatype_class}, self).__init__('{node.name_property}')
-
+        super().__init__('{node.name_property}')
         if '_parent' in kwargs:
             self._parent = kwargs['_parent']
             return
@@ -335,18 +323,17 @@ def __init__(self"""
     )
 
     if datatype_class == "Layout":
-        buffer.write(
-            f"""
         # Override _valid_props for instance so that instance can mutate set
         # to support subplot properties (e.g. xaxis2)
+        buffer.write(
+            f"""
         self._valid_props = {{"{'", "'.join(valid_props_list)}"}}
 """
         )
 
+    # Validate arg
     buffer.write(
         f"""
-        # Validate arg
-        # ------------
         if arg is None:
             arg = {{}}
         elif isinstance(arg, self.__class__):
@@ -359,53 +346,34 @@ def __init__(self"""
 constructor must be a dict or
 an instance of :class:`{class_name}`\"\"\")
 
-        # Handle skip_invalid
-        # -------------------
         self._skip_invalid = kwargs.pop('skip_invalid', False)
         self._validate = kwargs.pop('_validate', True)
         """
     )
 
-    buffer.write(
-        f"""
-
-        # Populate data dict with properties
-        # ----------------------------------"""
-    )
+    buffer.write("\n\n")
     for subtype_node in subtype_nodes:
         name_prop = subtype_node.name_property
-        buffer.write(
-            f"""
-        _v = arg.pop('{name_prop}', None)
-        _v = {name_prop} if {name_prop} is not None else _v
-        if _v is not None:"""
-        )
         if datatype_class == "Template" and name_prop == "data":
             buffer.write(
-                """
-            # Template.data contains a 'scattermapbox' key, which causes a
-            # go.Scattermapbox trace object to be created during validation.
-            # In order to prevent false deprecation warnings from surfacing,
-            # we suppress deprecation warnings for this line only.
-            with warnings.catch_warnings():
-                warnings.filterwarnings("ignore", category=DeprecationWarning)
-                self["data"] = _v"""
+                f"""
+        # Template.data contains a 'scattermapbox' key, which causes a
+        # go.Scattermapbox trace object to be created during validation.
+        # In order to prevent false deprecation warnings from surfacing,
+        # we suppress deprecation warnings for this line only.
+        with warnings.catch_warnings():
+            warnings.filterwarnings("ignore", category=DeprecationWarning)
+            self._set_property('{name_prop}', arg, {name_prop})"""
             )
         else:
             buffer.write(
                 f"""
-                self['{name_prop}'] = _v"""
+        self._set_property('{name_prop}', arg, {name_prop})"""
             )
 
-    # ### Literals ###
+    ### Literals
     if literal_nodes:
-        buffer.write(
-            f"""
-
-        # Read-only literals
-        # ------------------
-"""
-        )
+        buffer.write("\n\n")
         for literal_node in literal_nodes:
             lit_name = literal_node.name_property
             lit_val = repr(literal_node.node_data)
@@ -417,13 +385,7 @@ def __init__(self"""
 
     buffer.write(
         f"""
-
-        # Process unknown kwargs
-        # ----------------------
         self._process_kwargs(**dict(arg, **kwargs))
-
-        # Reset skip_invalid
-        # ------------------
         self._skip_invalid = False
 """
     )
@@ -442,7 +404,6 @@ def __init__(self"""
         )
 
     # Return source string
-    # --------------------
     return buffer.getvalue()
 
 
@@ -549,11 +510,9 @@ def add_docstring(
 
     """
     # Validate inputs
-    # ---------------
     assert node.is_compound
 
     # Build wrapped description
-    # -------------------------
     node_description = node.description
     if node_description:
         description_lines = textwrap.wrap(
@@ -566,7 +525,6 @@ def add_docstring(
         node_description = "\n".join(description_lines) + "\n\n"
 
     # Write header and description
-    # ----------------------------
     buffer.write(
         f"""
         \"\"\"
@@ -577,7 +535,7 @@ def add_docstring(
     )
 
     # Write parameter descriptions
-    # ----------------------------
+
     # Write any prepend extras
     for p, v in prepend_extras:
         v_wrapped = "\n".join(
@@ -616,7 +574,6 @@ def add_docstring(
         )
 
     # Write return block and close docstring
-    # --------------------------------------
     buffer.write(
         f"""
 
@@ -645,16 +602,13 @@ def write_datatype_py(outdir, node):
     """
 
     # Build file path
-    # ---------------
     # filepath = opath.join(outdir, "graph_objs", *node.parent_path_parts, "__init__.py")
     filepath = opath.join(
         outdir, "graph_objs", *node.parent_path_parts, "_" + node.name_undercase + ".py"
     )
 
     # Generate source code
-    # --------------------
     datatype_source = build_datatype_py(node)
 
     # Write file
-    # ----------
     write_source_py(datatype_source, filepath, leading_newlines=2)
diff --git a/codegen/figure.py b/codegen/figure.py
index a77fa0678f3..c412104af0c 100644
--- a/codegen/figure.py
+++ b/codegen/figure.py
@@ -6,7 +6,7 @@
     add_constructor_params,
     add_docstring,
 )
-from codegen.utils import write_source_py
+from codegen.utils import CAVEAT, write_source_py
 
 import inflect
 from plotly.basedatatypes import BaseFigure
@@ -55,6 +55,7 @@ def build_figure_py(
     # Initialize source code buffer
     # -----------------------------
     buffer = StringIO()
+    buffer.write(CAVEAT)
 
     # Get list of trace type nodes
     # ----------------------------
@@ -108,9 +109,7 @@ def __init__(self, data=None, layout=None,
             if a property in the specification of data, layout, or frames
             is invalid AND skip_invalid is False
         \"\"\"
-        super({fig_classname} ,self).__init__(data, layout,
-                                              frames, skip_invalid,
-                                              **kwargs)
+        super().__init__(data, layout, frames, skip_invalid, **kwargs)
     """
     )
 
@@ -121,7 +120,7 @@ def {wrapped_name}(self, {full_params}) -> "{fig_classname}":
         '''
         {getattr(BaseFigure, wrapped_name).__doc__}
         '''
-        return super({fig_classname}, self).{wrapped_name}({param_list})
+        return super().{wrapped_name}({param_list})
     """
         )
 
diff --git a/codegen/resources/plot-schema.json b/codegen/resources/plot-schema.json
index 6aa77cf3338..fe1eb67d81a 100644
--- a/codegen/resources/plot-schema.json
+++ b/codegen/resources/plot-schema.json
@@ -761,7 +761,7 @@
        "description": "Sets the annotation text font.",
        "editType": "calc+arraydraw",
        "family": {
-        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
         "editType": "calc+arraydraw",
         "noBlank": true,
         "strict": true,
@@ -869,7 +869,7 @@
         "description": "Sets the hover label text font. By default uses the global hover font and size, with color from `hoverlabel.bordercolor`.",
         "editType": "arraydraw",
         "family": {
-         "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+         "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
          "editType": "arraydraw",
          "noBlank": true,
          "strict": true,
@@ -1415,7 +1415,7 @@
       "description": "Sets the color bar's tick label font",
       "editType": "colorbars",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "colorbars",
        "noBlank": true,
        "strict": true,
@@ -1661,7 +1661,7 @@
        "description": "Sets this color bar's title font.",
        "editType": "colorbars",
        "family": {
-        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
         "editType": "colorbars",
         "noBlank": true,
         "strict": true,
@@ -2000,7 +2000,7 @@
     "description": "Sets the global font. Note that fonts used in traces and other layout components inherit from the global font.",
     "editType": "calc",
     "family": {
-     "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+     "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
      "dflt": "\"Open Sans\", verdana, arial, sans-serif",
      "editType": "calc",
      "noBlank": true,
@@ -2840,7 +2840,7 @@
      "description": "Sets the default hover label font used by all traces on the graph.",
      "editType": "none",
      "family": {
-      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
       "dflt": "Arial, sans-serif",
       "editType": "none",
       "noBlank": true,
@@ -2931,7 +2931,7 @@
      "description": "Sets the font for group titles in hover (unified modes). Defaults to `hoverlabel.font`.",
      "editType": "none",
      "family": {
-      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
       "editType": "none",
       "noBlank": true,
       "strict": true,
@@ -3216,7 +3216,7 @@
      "description": "Sets the font used to text the legend items.",
      "editType": "legend",
      "family": {
-      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
       "editType": "legend",
       "noBlank": true,
       "strict": true,
@@ -3315,7 +3315,7 @@
      "description": "Sets the font for group titles in legend. Defaults to `legend.font` with its size increased about 10%.",
      "editType": "legend",
      "family": {
-      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
       "editType": "legend",
       "noBlank": true,
       "strict": true,
@@ -3463,7 +3463,7 @@
       "description": "Sets this legend's title font. Defaults to `legend.font` with its size increased about 20%.",
       "editType": "legend",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "legend",
        "noBlank": true,
        "strict": true,
@@ -3933,7 +3933,7 @@
          "description": "Sets the icon text font (color=map.layer.paint.text-color, size=map.layer.layout.text-size). Has an effect only when `type` is set to *symbol*.",
          "editType": "plot",
          "family": {
-          "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+          "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
           "dflt": "Open Sans Regular, Arial Unicode MS Regular",
           "editType": "plot",
           "noBlank": true,
@@ -4339,7 +4339,7 @@
          "description": "Sets the icon text font (color=mapbox.layer.paint.text-color, size=mapbox.layer.layout.text-size). Has an effect only when `type` is set to *symbol*.",
          "editType": "plot",
          "family": {
-          "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+          "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
           "dflt": "Open Sans Regular, Arial Unicode MS Regular",
           "editType": "plot",
           "noBlank": true,
@@ -4675,7 +4675,7 @@
       "description": "Sets the new shape label text font.",
       "editType": "none",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "none",
        "noBlank": true,
        "strict": true,
@@ -4857,7 +4857,7 @@
       "description": "Sets this legend group's title font.",
       "editType": "none",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "none",
        "noBlank": true,
        "strict": true,
@@ -5306,7 +5306,7 @@
       "description": "Sets the tick font.",
       "editType": "plot",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "plot",
        "noBlank": true,
        "strict": true,
@@ -5919,7 +5919,7 @@
       "valType": "info_array"
      },
      "rangemode": {
-      "description": "If *tozero*`, the range extends to 0, regardless of the input data If *nonnegative*, the range is non-negative, regardless of the input data. If *normal*, the range is computed in relation to the extrema of the input data (same behavior as for cartesian axes).",
+      "description": "If *tozero*, the range extends to 0, regardless of the input data If *nonnegative*, the range is non-negative, regardless of the input data. If *normal*, the range is computed in relation to the extrema of the input data (same behavior as for cartesian axes).",
       "dflt": "tozero",
       "editType": "calc",
       "valType": "enumerated",
@@ -6028,7 +6028,7 @@
       "description": "Sets the tick font.",
       "editType": "plot",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "plot",
        "noBlank": true,
        "strict": true,
@@ -6245,7 +6245,7 @@
        "description": "Sets this axis' title font.",
        "editType": "plot",
        "family": {
-        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
         "editType": "ticks",
         "noBlank": true,
         "strict": true,
@@ -6494,7 +6494,7 @@
         "description": "Sets the annotation text font.",
         "editType": "calc",
         "family": {
-         "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+         "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
          "editType": "calc",
          "noBlank": true,
          "strict": true,
@@ -6602,7 +6602,7 @@
          "description": "Sets the hover label text font. By default uses the global hover font and size, with color from `hoverlabel.bordercolor`.",
          "editType": "calc",
          "family": {
-          "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+          "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
           "editType": "calc",
           "noBlank": true,
           "strict": true,
@@ -7325,7 +7325,7 @@
       "valType": "info_array"
      },
      "rangemode": {
-      "description": "If *normal*, the range is computed in relation to the extrema of the input data. If *tozero*`, the range extends to 0, regardless of the input data If *nonnegative*, the range is non-negative, regardless of the input data. Applies only to linear axes.",
+      "description": "If *normal*, the range is computed in relation to the extrema of the input data. If *tozero*, the range extends to 0, regardless of the input data If *nonnegative*, the range is non-negative, regardless of the input data. Applies only to linear axes.",
       "dflt": "normal",
       "editType": "plot",
       "valType": "enumerated",
@@ -7460,7 +7460,7 @@
       "description": "Sets the tick font.",
       "editType": "plot",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "plot",
        "noBlank": true,
        "strict": true,
@@ -7670,7 +7670,7 @@
        "description": "Sets this axis' title font.",
        "editType": "plot",
        "family": {
-        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
         "editType": "plot",
         "noBlank": true,
         "strict": true,
@@ -8064,7 +8064,7 @@
       "valType": "info_array"
      },
      "rangemode": {
-      "description": "If *normal*, the range is computed in relation to the extrema of the input data. If *tozero*`, the range extends to 0, regardless of the input data If *nonnegative*, the range is non-negative, regardless of the input data. Applies only to linear axes.",
+      "description": "If *normal*, the range is computed in relation to the extrema of the input data. If *tozero*, the range extends to 0, regardless of the input data If *nonnegative*, the range is non-negative, regardless of the input data. Applies only to linear axes.",
       "dflt": "normal",
       "editType": "plot",
       "valType": "enumerated",
@@ -8199,7 +8199,7 @@
       "description": "Sets the tick font.",
       "editType": "plot",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "plot",
        "noBlank": true,
        "strict": true,
@@ -8409,7 +8409,7 @@
        "description": "Sets this axis' title font.",
        "editType": "plot",
        "family": {
-        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
         "editType": "plot",
         "noBlank": true,
         "strict": true,
@@ -8803,7 +8803,7 @@
       "valType": "info_array"
      },
      "rangemode": {
-      "description": "If *normal*, the range is computed in relation to the extrema of the input data. If *tozero*`, the range extends to 0, regardless of the input data If *nonnegative*, the range is non-negative, regardless of the input data. Applies only to linear axes.",
+      "description": "If *normal*, the range is computed in relation to the extrema of the input data. If *tozero*, the range extends to 0, regardless of the input data If *nonnegative*, the range is non-negative, regardless of the input data. Applies only to linear axes.",
       "dflt": "normal",
       "editType": "plot",
       "valType": "enumerated",
@@ -8938,7 +8938,7 @@
       "description": "Sets the tick font.",
       "editType": "plot",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "plot",
        "noBlank": true,
        "strict": true,
@@ -9148,7 +9148,7 @@
        "description": "Sets this axis' title font.",
        "editType": "plot",
        "family": {
-        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
         "editType": "plot",
         "noBlank": true,
         "strict": true,
@@ -9443,7 +9443,7 @@
         "description": "Sets the shape label text font.",
         "editType": "calc+arraydraw",
         "family": {
-         "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+         "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
          "editType": "calc+arraydraw",
          "noBlank": true,
          "strict": true,
@@ -9625,7 +9625,7 @@
         "description": "Sets this legend group's title font.",
         "editType": "calc+arraydraw",
         "family": {
-         "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+         "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
          "editType": "calc+arraydraw",
          "noBlank": true,
          "strict": true,
@@ -9964,7 +9964,7 @@
         "description": "Sets the font of the current value label text.",
         "editType": "arraydraw",
         "family": {
-         "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+         "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
          "editType": "arraydraw",
          "noBlank": true,
          "strict": true,
@@ -10089,7 +10089,7 @@
        "description": "Sets the font of the slider step labels.",
        "editType": "arraydraw",
        "family": {
-        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
         "editType": "arraydraw",
         "noBlank": true,
         "strict": true,
@@ -10633,7 +10633,7 @@
       "description": "Sets the tick font.",
       "editType": "plot",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "plot",
        "noBlank": true,
        "strict": true,
@@ -10916,7 +10916,7 @@
       "description": "Sets the tick font.",
       "editType": "plot",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "plot",
        "noBlank": true,
        "strict": true,
@@ -11281,7 +11281,7 @@
       "description": "Sets the tick font.",
       "editType": "plot",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "plot",
        "noBlank": true,
        "strict": true,
@@ -11498,7 +11498,7 @@
        "description": "Sets this axis' title font.",
        "editType": "plot",
        "family": {
-        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
         "editType": "plot",
         "noBlank": true,
         "strict": true,
@@ -11794,7 +11794,7 @@
       "description": "Sets the tick font.",
       "editType": "plot",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "plot",
        "noBlank": true,
        "strict": true,
@@ -12011,7 +12011,7 @@
        "description": "Sets this axis' title font.",
        "editType": "plot",
        "family": {
-        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
         "editType": "plot",
         "noBlank": true,
         "strict": true,
@@ -12313,7 +12313,7 @@
       "description": "Sets the tick font.",
       "editType": "plot",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "plot",
        "noBlank": true,
        "strict": true,
@@ -12530,7 +12530,7 @@
        "description": "Sets this axis' title font.",
        "editType": "plot",
        "family": {
-        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
         "editType": "plot",
         "noBlank": true,
         "strict": true,
@@ -12719,7 +12719,7 @@
      "description": "Sets the title font.",
      "editType": "layoutstyle",
      "family": {
-      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
       "editType": "layoutstyle",
       "noBlank": true,
       "strict": true,
@@ -12840,7 +12840,7 @@
       "description": "Sets the subtitle font.",
       "editType": "layoutstyle",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "layoutstyle",
        "noBlank": true,
        "strict": true,
@@ -13228,7 +13228,7 @@
        "description": "Sets the font of the update menu button text.",
        "editType": "arraydraw",
        "family": {
-        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
         "editType": "arraydraw",
         "noBlank": true,
         "strict": true,
@@ -14032,7 +14032,7 @@
      "role": "object"
     },
     "rangemode": {
-     "description": "If *normal*, the range is computed in relation to the extrema of the input data. If *tozero*`, the range extends to 0, regardless of the input data If *nonnegative*, the range is non-negative, regardless of the input data. Applies only to linear axes.",
+     "description": "If *normal*, the range is computed in relation to the extrema of the input data. If *tozero*, the range extends to 0, regardless of the input data If *nonnegative*, the range is non-negative, regardless of the input data. Applies only to linear axes.",
      "dflt": "normal",
      "editType": "plot",
      "valType": "enumerated",
@@ -14139,7 +14139,7 @@
       "description": "Sets the font of the range selector button text.",
       "editType": "plot",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "plot",
        "noBlank": true,
        "strict": true,
@@ -14540,7 +14540,7 @@
      "description": "Sets the tick font.",
      "editType": "ticks",
      "family": {
-      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
       "editType": "ticks",
       "noBlank": true,
       "strict": true,
@@ -14829,7 +14829,7 @@
       "description": "Sets this axis' title font.",
       "editType": "ticks",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "ticks",
        "noBlank": true,
        "strict": true,
@@ -15583,7 +15583,7 @@
      "role": "object"
     },
     "rangemode": {
-     "description": "If *normal*, the range is computed in relation to the extrema of the input data. If *tozero*`, the range extends to 0, regardless of the input data If *nonnegative*, the range is non-negative, regardless of the input data. Applies only to linear axes.",
+     "description": "If *normal*, the range is computed in relation to the extrema of the input data. If *tozero*, the range extends to 0, regardless of the input data If *nonnegative*, the range is non-negative, regardless of the input data. Applies only to linear axes.",
      "dflt": "normal",
      "editType": "plot",
      "valType": "enumerated",
@@ -15774,7 +15774,7 @@
      "description": "Sets the tick font.",
      "editType": "ticks",
      "family": {
-      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
       "editType": "ticks",
       "noBlank": true,
       "strict": true,
@@ -16063,7 +16063,7 @@
       "description": "Sets this axis' title font.",
       "editType": "ticks",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "ticks",
        "noBlank": true,
        "strict": true,
@@ -16323,7 +16323,7 @@
       "valType": "integer"
      },
      "type": {
-      "description": "Determines the rule used to generate the error bars. If *constant`, the bar lengths are of a constant value. Set this constant in `value`. If *percent*, the bar lengths correspond to a percentage of underlying data. Set this percentage in `value`. If *sqrt*, the bar lengths correspond to the square of the underlying data. If *data*, the bar lengths are set with data set `array`.",
+      "description": "Determines the rule used to generate the error bars. If *constant*, the bar lengths are of a constant value. Set this constant in `value`. If *percent*, the bar lengths correspond to a percentage of underlying data. Set this percentage in `value`. If *sqrt*, the bar lengths correspond to the square of the underlying data. If *data*, the bar lengths are set with data set `array`.",
       "editType": "calc",
       "valType": "enumerated",
       "values": [
@@ -16412,7 +16412,7 @@
       "valType": "integer"
      },
      "type": {
-      "description": "Determines the rule used to generate the error bars. If *constant`, the bar lengths are of a constant value. Set this constant in `value`. If *percent*, the bar lengths correspond to a percentage of underlying data. Set this percentage in `value`. If *sqrt*, the bar lengths correspond to the square of the underlying data. If *data*, the bar lengths are set with data set `array`.",
+      "description": "Determines the rule used to generate the error bars. If *constant*, the bar lengths are of a constant value. Set this constant in `value`. If *percent*, the bar lengths correspond to a percentage of underlying data. Set this percentage in `value`. If *sqrt*, the bar lengths correspond to the square of the underlying data. If *data*, the bar lengths are set with data set `array`.",
       "editType": "calc",
       "valType": "enumerated",
       "values": [
@@ -16528,7 +16528,7 @@
       "editType": "none",
       "family": {
        "arrayOk": true,
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "none",
        "noBlank": true,
        "strict": true,
@@ -16732,7 +16732,7 @@
      "editType": "calc",
      "family": {
       "arrayOk": true,
-      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
       "editType": "calc",
       "noBlank": true,
       "strict": true,
@@ -16882,7 +16882,7 @@
       "description": "Sets this legend group's title font.",
       "editType": "style",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "style",
        "noBlank": true,
        "strict": true,
@@ -17233,7 +17233,7 @@
        "description": "Sets the color bar's tick label font",
        "editType": "colorbars",
        "family": {
-        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
         "editType": "colorbars",
         "noBlank": true,
         "strict": true,
@@ -17479,7 +17479,7 @@
         "description": "Sets this color bar's title font.",
         "editType": "colorbars",
         "family": {
-         "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+         "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
          "editType": "colorbars",
          "noBlank": true,
          "strict": true,
@@ -17939,7 +17939,7 @@
      "editType": "calc",
      "family": {
       "arrayOk": true,
-      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
       "editType": "calc",
       "noBlank": true,
       "strict": true,
@@ -18154,7 +18154,7 @@
      "editType": "calc",
      "family": {
       "arrayOk": true,
-      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
       "editType": "calc",
       "noBlank": true,
       "strict": true,
@@ -18716,7 +18716,7 @@
       "editType": "none",
       "family": {
        "arrayOk": true,
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "none",
        "noBlank": true,
        "strict": true,
@@ -18915,7 +18915,7 @@
       "description": "Sets this legend group's title font.",
       "editType": "style",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "style",
        "noBlank": true,
        "strict": true,
@@ -19266,7 +19266,7 @@
        "description": "Sets the color bar's tick label font",
        "editType": "colorbars",
        "family": {
-        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
         "editType": "colorbars",
         "noBlank": true,
         "strict": true,
@@ -19512,7 +19512,7 @@
         "description": "Sets this color bar's title font.",
         "editType": "colorbars",
         "family": {
-         "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+         "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
          "editType": "colorbars",
          "noBlank": true,
          "strict": true,
@@ -20287,7 +20287,7 @@
       "editType": "none",
       "family": {
        "arrayOk": true,
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "none",
        "noBlank": true,
        "strict": true,
@@ -20503,7 +20503,7 @@
       "description": "Sets this legend group's title font.",
       "editType": "style",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "style",
        "noBlank": true,
        "strict": true,
@@ -21824,7 +21824,7 @@
       "editType": "none",
       "family": {
        "arrayOk": true,
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "none",
        "noBlank": true,
        "strict": true,
@@ -22043,7 +22043,7 @@
       "description": "Sets this legend group's title font.",
       "editType": "style",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "style",
        "noBlank": true,
        "strict": true,
@@ -22654,7 +22654,7 @@
       "valType": "info_array"
      },
      "rangemode": {
-      "description": "If *normal*, the range is computed in relation to the extrema of the input data. If *tozero*`, the range extends to 0, regardless of the input data If *nonnegative*, the range is non-negative, regardless of the input data.",
+      "description": "If *normal*, the range is computed in relation to the extrema of the input data. If *tozero*, the range extends to 0, regardless of the input data If *nonnegative*, the range is non-negative, regardless of the input data.",
       "dflt": "normal",
       "editType": "calc",
       "valType": "enumerated",
@@ -22775,7 +22775,7 @@
       "description": "Sets the tick font.",
       "editType": "calc",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "calc",
        "noBlank": true,
        "strict": true,
@@ -22959,7 +22959,7 @@
        "description": "Sets this axis' title font.",
        "editType": "calc",
        "family": {
-        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
         "editType": "calc",
         "noBlank": true,
         "strict": true,
@@ -23325,7 +23325,7 @@
       "valType": "info_array"
      },
      "rangemode": {
-      "description": "If *normal*, the range is computed in relation to the extrema of the input data. If *tozero*`, the range extends to 0, regardless of the input data If *nonnegative*, the range is non-negative, regardless of the input data.",
+      "description": "If *normal*, the range is computed in relation to the extrema of the input data. If *tozero*, the range extends to 0, regardless of the input data If *nonnegative*, the range is non-negative, regardless of the input data.",
       "dflt": "normal",
       "editType": "calc",
       "valType": "enumerated",
@@ -23446,7 +23446,7 @@
       "description": "Sets the tick font.",
       "editType": "calc",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "calc",
        "noBlank": true,
        "strict": true,
@@ -23630,7 +23630,7 @@
        "description": "Sets this axis' title font.",
        "editType": "calc",
        "family": {
-        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
         "editType": "calc",
         "noBlank": true,
         "strict": true,
@@ -23791,7 +23791,7 @@
      "description": "The default font used for axis & tick labels on this carpet",
      "editType": "calc",
      "family": {
-      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
       "dflt": "\"Open Sans\", verdana, arial, sans-serif",
       "editType": "calc",
       "noBlank": true,
@@ -23901,7 +23901,7 @@
       "description": "Sets this legend group's title font.",
       "editType": "style",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "style",
        "noBlank": true,
        "strict": true,
@@ -24336,7 +24336,7 @@
       "description": "Sets the color bar's tick label font",
       "editType": "colorbars",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "colorbars",
        "noBlank": true,
        "strict": true,
@@ -24582,7 +24582,7 @@
        "description": "Sets this color bar's title font.",
        "editType": "colorbars",
        "family": {
-        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
         "editType": "colorbars",
         "noBlank": true,
         "strict": true,
@@ -24860,7 +24860,7 @@
       "editType": "none",
       "family": {
        "arrayOk": true,
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "none",
        "noBlank": true,
        "strict": true,
@@ -25059,7 +25059,7 @@
       "description": "Sets this legend group's title font.",
       "editType": "style",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "style",
        "noBlank": true,
        "strict": true,
@@ -25623,7 +25623,7 @@
       "description": "Sets the color bar's tick label font",
       "editType": "colorbars",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "colorbars",
        "noBlank": true,
        "strict": true,
@@ -25869,7 +25869,7 @@
        "description": "Sets this color bar's title font.",
        "editType": "colorbars",
        "family": {
-        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
         "editType": "colorbars",
         "noBlank": true,
         "strict": true,
@@ -26141,7 +26141,7 @@
       "editType": "none",
       "family": {
        "arrayOk": true,
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "none",
        "noBlank": true,
        "strict": true,
@@ -26340,7 +26340,7 @@
       "description": "Sets this legend group's title font.",
       "editType": "style",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "style",
        "noBlank": true,
        "strict": true,
@@ -26900,7 +26900,7 @@
       "description": "Sets the color bar's tick label font",
       "editType": "colorbars",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "colorbars",
        "noBlank": true,
        "strict": true,
@@ -27146,7 +27146,7 @@
        "description": "Sets this color bar's title font.",
        "editType": "colorbars",
        "family": {
-        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
         "editType": "colorbars",
         "noBlank": true,
         "strict": true,
@@ -27418,7 +27418,7 @@
       "editType": "none",
       "family": {
        "arrayOk": true,
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "none",
        "noBlank": true,
        "strict": true,
@@ -27617,7 +27617,7 @@
       "description": "Sets this legend group's title font.",
       "editType": "style",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "style",
        "noBlank": true,
        "strict": true,
@@ -28216,7 +28216,7 @@
       "description": "Sets the color bar's tick label font",
       "editType": "colorbars",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "colorbars",
        "noBlank": true,
        "strict": true,
@@ -28462,7 +28462,7 @@
        "description": "Sets this color bar's title font.",
        "editType": "colorbars",
        "family": {
-        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
         "editType": "colorbars",
         "noBlank": true,
         "strict": true,
@@ -28728,7 +28728,7 @@
       "editType": "none",
       "family": {
        "arrayOk": true,
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "none",
        "noBlank": true,
        "strict": true,
@@ -28927,7 +28927,7 @@
       "description": "Sets this legend group's title font.",
       "editType": "style",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "style",
        "noBlank": true,
        "strict": true,
@@ -29561,7 +29561,7 @@
       "description": "Sets the color bar's tick label font",
       "editType": "colorbars",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "colorbars",
        "noBlank": true,
        "strict": true,
@@ -29807,7 +29807,7 @@
        "description": "Sets this color bar's title font.",
        "editType": "colorbars",
        "family": {
-        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
         "editType": "colorbars",
         "noBlank": true,
         "strict": true,
@@ -30019,7 +30019,7 @@
       "description": "Sets the font used for labeling the contour levels. The default color comes from the lines, if shown. The default family and size come from `layout.font`.",
       "editType": "plot",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "plot",
        "noBlank": true,
        "strict": true,
@@ -30289,7 +30289,7 @@
       "editType": "none",
       "family": {
        "arrayOk": true,
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "none",
        "noBlank": true,
        "strict": true,
@@ -30492,7 +30492,7 @@
       "description": "Sets this legend group's title font.",
       "editType": "style",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "style",
        "noBlank": true,
        "strict": true,
@@ -30712,7 +30712,7 @@
      "description": "For this trace it only has an effect if `coloring` is set to *heatmap*. Sets the text font.",
      "editType": "plot",
      "family": {
-      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
       "editType": "plot",
       "noBlank": true,
       "strict": true,
@@ -31378,7 +31378,7 @@
       "description": "Sets the color bar's tick label font",
       "editType": "colorbars",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "colorbars",
        "noBlank": true,
        "strict": true,
@@ -31624,7 +31624,7 @@
        "description": "Sets this color bar's title font.",
        "editType": "colorbars",
        "family": {
-        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
         "editType": "colorbars",
         "noBlank": true,
         "strict": true,
@@ -31830,7 +31830,7 @@
       "description": "Sets the font used for labeling the contour levels. The default color comes from the lines, if shown. The default family and size come from `layout.font`.",
       "editType": "plot",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "plot",
        "noBlank": true,
        "strict": true,
@@ -32062,7 +32062,7 @@
       "description": "Sets this legend group's title font.",
       "editType": "style",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "style",
        "noBlank": true,
        "strict": true,
@@ -32604,7 +32604,7 @@
       "description": "Sets the color bar's tick label font",
       "editType": "colorbars",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "colorbars",
        "noBlank": true,
        "strict": true,
@@ -32850,7 +32850,7 @@
        "description": "Sets this color bar's title font.",
        "editType": "colorbars",
        "family": {
-        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
         "editType": "colorbars",
         "noBlank": true,
         "strict": true,
@@ -33112,7 +33112,7 @@
       "editType": "none",
       "family": {
        "arrayOk": true,
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "none",
        "noBlank": true,
        "strict": true,
@@ -33321,7 +33321,7 @@
       "description": "Sets this legend group's title font.",
       "editType": "style",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "style",
        "noBlank": true,
        "strict": true,
@@ -33819,7 +33819,7 @@
       "description": "Sets the color bar's tick label font",
       "editType": "colorbars",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "colorbars",
        "noBlank": true,
        "strict": true,
@@ -34065,7 +34065,7 @@
        "description": "Sets this color bar's title font.",
        "editType": "colorbars",
        "family": {
-        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
         "editType": "colorbars",
         "noBlank": true,
         "strict": true,
@@ -34327,7 +34327,7 @@
       "editType": "none",
       "family": {
        "arrayOk": true,
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "none",
        "noBlank": true,
        "strict": true,
@@ -34536,7 +34536,7 @@
       "description": "Sets this legend group's title font.",
       "editType": "style",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "style",
        "noBlank": true,
        "strict": true,
@@ -34992,7 +34992,7 @@
       "editType": "none",
       "family": {
        "arrayOk": true,
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "none",
        "noBlank": true,
        "strict": true,
@@ -35195,7 +35195,7 @@
      "editType": "calc",
      "family": {
       "arrayOk": true,
-      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
       "editType": "calc",
       "noBlank": true,
       "strict": true,
@@ -35345,7 +35345,7 @@
       "description": "Sets this legend group's title font.",
       "editType": "style",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "style",
        "noBlank": true,
        "strict": true,
@@ -35696,7 +35696,7 @@
        "description": "Sets the color bar's tick label font",
        "editType": "colorbars",
        "family": {
-        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
         "editType": "colorbars",
         "noBlank": true,
         "strict": true,
@@ -35942,7 +35942,7 @@
         "description": "Sets this color bar's title font.",
         "editType": "colorbars",
         "family": {
-         "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+         "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
          "editType": "colorbars",
          "noBlank": true,
          "strict": true,
@@ -36298,7 +36298,7 @@
      "editType": "calc",
      "family": {
       "arrayOk": true,
-      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
       "editType": "calc",
       "noBlank": true,
       "strict": true,
@@ -36484,7 +36484,7 @@
      "editType": "calc",
      "family": {
       "arrayOk": true,
-      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
       "editType": "calc",
       "noBlank": true,
       "strict": true,
@@ -37020,7 +37020,7 @@
       "editType": "none",
       "family": {
        "arrayOk": true,
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "none",
        "noBlank": true,
        "strict": true,
@@ -37212,7 +37212,7 @@
      "editType": "plot",
      "family": {
       "arrayOk": true,
-      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
       "editType": "plot",
       "noBlank": true,
       "strict": true,
@@ -37378,7 +37378,7 @@
       "description": "Sets this legend group's title font.",
       "editType": "style",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "style",
        "noBlank": true,
        "strict": true,
@@ -37690,7 +37690,7 @@
      "editType": "plot",
      "family": {
       "arrayOk": true,
-      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
       "editType": "plot",
       "noBlank": true,
       "strict": true,
@@ -37882,7 +37882,7 @@
       "editType": "plot",
       "family": {
        "arrayOk": true,
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "plot",
        "noBlank": true,
        "strict": true,
@@ -38309,7 +38309,7 @@
       "description": "Sets the color bar's tick label font",
       "editType": "colorbars",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "colorbars",
        "noBlank": true,
        "strict": true,
@@ -38555,7 +38555,7 @@
        "description": "Sets this color bar's title font.",
        "editType": "colorbars",
        "family": {
-        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
         "editType": "colorbars",
         "noBlank": true,
         "strict": true,
@@ -38840,7 +38840,7 @@
       "editType": "none",
       "family": {
        "arrayOk": true,
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "none",
        "noBlank": true,
        "strict": true,
@@ -39043,7 +39043,7 @@
       "description": "Sets this legend group's title font.",
       "editType": "style",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "style",
        "noBlank": true,
        "strict": true,
@@ -39219,7 +39219,7 @@
      "description": "Sets the text font.",
      "editType": "plot",
      "family": {
-      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
       "editType": "plot",
       "noBlank": true,
       "strict": true,
@@ -39770,7 +39770,7 @@
       "valType": "integer"
      },
      "type": {
-      "description": "Determines the rule used to generate the error bars. If *constant`, the bar lengths are of a constant value. Set this constant in `value`. If *percent*, the bar lengths correspond to a percentage of underlying data. Set this percentage in `value`. If *sqrt*, the bar lengths correspond to the square of the underlying data. If *data*, the bar lengths are set with data set `array`.",
+      "description": "Determines the rule used to generate the error bars. If *constant*, the bar lengths are of a constant value. Set this constant in `value`. If *percent*, the bar lengths correspond to a percentage of underlying data. Set this percentage in `value`. If *sqrt*, the bar lengths correspond to the square of the underlying data. If *data*, the bar lengths are set with data set `array`.",
       "editType": "calc",
       "valType": "enumerated",
       "values": [
@@ -39859,7 +39859,7 @@
       "valType": "integer"
      },
      "type": {
-      "description": "Determines the rule used to generate the error bars. If *constant`, the bar lengths are of a constant value. Set this constant in `value`. If *percent*, the bar lengths correspond to a percentage of underlying data. Set this percentage in `value`. If *sqrt*, the bar lengths correspond to the square of the underlying data. If *data*, the bar lengths are set with data set `array`.",
+      "description": "Determines the rule used to generate the error bars. If *constant*, the bar lengths are of a constant value. Set this constant in `value`. If *percent*, the bar lengths correspond to a percentage of underlying data. Set this percentage in `value`. If *sqrt*, the bar lengths correspond to the square of the underlying data. If *data*, the bar lengths are set with data set `array`.",
       "editType": "calc",
       "valType": "enumerated",
       "values": [
@@ -40001,7 +40001,7 @@
       "editType": "none",
       "family": {
        "arrayOk": true,
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "none",
        "noBlank": true,
        "strict": true,
@@ -40197,7 +40197,7 @@
      "description": "Sets the font used for `text` lying inside the bar.",
      "editType": "plot",
      "family": {
-      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
       "editType": "plot",
       "noBlank": true,
       "strict": true,
@@ -40300,7 +40300,7 @@
       "description": "Sets this legend group's title font.",
       "editType": "style",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "style",
        "noBlank": true,
        "strict": true,
@@ -40651,7 +40651,7 @@
        "description": "Sets the color bar's tick label font",
        "editType": "colorbars",
        "family": {
-        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
         "editType": "colorbars",
         "noBlank": true,
         "strict": true,
@@ -40897,7 +40897,7 @@
         "description": "Sets this color bar's title font.",
         "editType": "colorbars",
         "family": {
-         "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+         "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
          "editType": "colorbars",
          "noBlank": true,
          "strict": true,
@@ -41351,7 +41351,7 @@
      "description": "Sets the font used for `text` lying outside the bar.",
      "editType": "plot",
      "family": {
-      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
       "editType": "plot",
       "noBlank": true,
       "strict": true,
@@ -41512,7 +41512,7 @@
      "description": "Sets the text font.",
      "editType": "plot",
      "family": {
-      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
       "editType": "plot",
       "noBlank": true,
       "strict": true,
@@ -42097,7 +42097,7 @@
       "description": "Sets the color bar's tick label font",
       "editType": "colorbars",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "colorbars",
        "noBlank": true,
        "strict": true,
@@ -42343,7 +42343,7 @@
        "description": "Sets this color bar's title font.",
        "editType": "colorbars",
        "family": {
-        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
         "editType": "colorbars",
         "noBlank": true,
         "strict": true,
@@ -42631,7 +42631,7 @@
       "editType": "none",
       "family": {
        "arrayOk": true,
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "none",
        "noBlank": true,
        "strict": true,
@@ -42818,7 +42818,7 @@
       "description": "Sets this legend group's title font.",
       "editType": "style",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "style",
        "noBlank": true,
        "strict": true,
@@ -43017,7 +43017,7 @@
      "description": "Sets the text font.",
      "editType": "plot",
      "family": {
-      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
       "editType": "plot",
       "noBlank": true,
       "strict": true,
@@ -43595,7 +43595,7 @@
       "description": "Sets the color bar's tick label font",
       "editType": "colorbars",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "colorbars",
        "noBlank": true,
        "strict": true,
@@ -43841,7 +43841,7 @@
        "description": "Sets this color bar's title font.",
        "editType": "colorbars",
        "family": {
-        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
         "editType": "colorbars",
         "noBlank": true,
         "strict": true,
@@ -44048,7 +44048,7 @@
       "description": "Sets the font used for labeling the contour levels. The default color comes from the lines, if shown. The default family and size come from `layout.font`.",
       "editType": "plot",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "plot",
        "noBlank": true,
        "strict": true,
@@ -44321,7 +44321,7 @@
       "editType": "none",
       "family": {
        "arrayOk": true,
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "none",
        "noBlank": true,
        "strict": true,
@@ -44508,7 +44508,7 @@
       "description": "Sets this legend group's title font.",
       "editType": "style",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "style",
        "noBlank": true,
        "strict": true,
@@ -44752,7 +44752,7 @@
      "description": "For this trace it only has an effect if `coloring` is set to *heatmap*. Sets the text font.",
      "editType": "plot",
      "family": {
-      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
       "editType": "plot",
       "noBlank": true,
       "strict": true,
@@ -45247,7 +45247,7 @@
       "editType": "none",
       "family": {
        "arrayOk": true,
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "none",
        "noBlank": true,
        "strict": true,
@@ -45440,7 +45440,7 @@
      "editType": "plot",
      "family": {
       "arrayOk": true,
-      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
       "editType": "plot",
       "noBlank": true,
       "strict": true,
@@ -45605,7 +45605,7 @@
       "description": "Sets this legend group's title font.",
       "editType": "style",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "style",
        "noBlank": true,
        "strict": true,
@@ -45956,7 +45956,7 @@
        "description": "Sets the color bar's tick label font",
        "editType": "colorbars",
        "family": {
-        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
         "editType": "colorbars",
         "noBlank": true,
         "strict": true,
@@ -46202,7 +46202,7 @@
         "description": "Sets this color bar's title font.",
         "editType": "colorbars",
         "family": {
-         "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+         "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
          "editType": "colorbars",
          "noBlank": true,
          "strict": true,
@@ -46566,7 +46566,7 @@
      "editType": "plot",
      "family": {
       "arrayOk": true,
-      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
       "editType": "plot",
       "noBlank": true,
       "strict": true,
@@ -46745,7 +46745,7 @@
       "editType": "plot",
       "family": {
        "arrayOk": true,
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "plot",
        "noBlank": true,
        "strict": true,
@@ -46941,7 +46941,7 @@
      "editType": "plot",
      "family": {
       "arrayOk": true,
-      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
       "editType": "plot",
       "noBlank": true,
       "strict": true,
@@ -47322,7 +47322,7 @@
       "editType": "none",
       "family": {
        "arrayOk": true,
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "none",
        "noBlank": true,
        "strict": true,
@@ -47513,7 +47513,7 @@
       "description": "Sets this legend group's title font.",
       "editType": "style",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "style",
        "noBlank": true,
        "strict": true,
@@ -47851,7 +47851,7 @@
       "description": "Set the font used to display the delta",
       "editType": "plot",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "plot",
        "noBlank": true,
        "strict": true,
@@ -48191,7 +48191,7 @@
        "description": "Sets the color bar's tick label font",
        "editType": "plot",
        "family": {
-        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
         "editType": "plot",
         "noBlank": true,
         "strict": true,
@@ -48600,7 +48600,7 @@
       "description": "Sets this legend group's title font.",
       "editType": "style",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "style",
        "noBlank": true,
        "strict": true,
@@ -48738,7 +48738,7 @@
       "description": "Set the font used to display main number",
       "editType": "plot",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "plot",
        "noBlank": true,
        "strict": true,
@@ -48878,7 +48878,7 @@
       "description": "Set the font used to display the title",
       "editType": "plot",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "plot",
        "noBlank": true,
        "strict": true,
@@ -49310,7 +49310,7 @@
       "description": "Sets the color bar's tick label font",
       "editType": "calc",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "calc",
        "noBlank": true,
        "strict": true,
@@ -49556,7 +49556,7 @@
        "description": "Sets this color bar's title font.",
        "editType": "calc",
        "family": {
-        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
         "editType": "calc",
         "noBlank": true,
         "strict": true,
@@ -49848,7 +49848,7 @@
       "editType": "none",
       "family": {
        "arrayOk": true,
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "none",
        "noBlank": true,
        "strict": true,
@@ -50057,7 +50057,7 @@
       "description": "Sets this legend group's title font.",
       "editType": "style",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "style",
        "noBlank": true,
        "strict": true,
@@ -50830,7 +50830,7 @@
       "description": "Sets the color bar's tick label font",
       "editType": "colorbars",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "colorbars",
        "noBlank": true,
        "strict": true,
@@ -51076,7 +51076,7 @@
        "description": "Sets this color bar's title font.",
        "editType": "colorbars",
        "family": {
-        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
         "editType": "colorbars",
         "noBlank": true,
         "strict": true,
@@ -51389,7 +51389,7 @@
       "editType": "none",
       "family": {
        "arrayOk": true,
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "none",
        "noBlank": true,
        "strict": true,
@@ -51638,7 +51638,7 @@
       "description": "Sets this legend group's title font.",
       "editType": "style",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "style",
        "noBlank": true,
        "strict": true,
@@ -52216,7 +52216,7 @@
       "editType": "none",
       "family": {
        "arrayOk": true,
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "none",
        "noBlank": true,
        "strict": true,
@@ -52444,7 +52444,7 @@
       "description": "Sets this legend group's title font.",
       "editType": "style",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "style",
        "noBlank": true,
        "strict": true,
@@ -52990,7 +52990,7 @@
      "description": "Sets the font for the `dimension` labels.",
      "editType": "calc",
      "family": {
-      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
       "editType": "calc",
       "noBlank": true,
       "strict": true,
@@ -53081,7 +53081,7 @@
       "description": "Sets this legend group's title font.",
       "editType": "style",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "style",
        "noBlank": true,
        "strict": true,
@@ -53426,7 +53426,7 @@
        "description": "Sets the color bar's tick label font",
        "editType": "colorbars",
        "family": {
-        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
         "editType": "colorbars",
         "noBlank": true,
         "strict": true,
@@ -53672,7 +53672,7 @@
         "description": "Sets this color bar's title font.",
         "editType": "colorbars",
         "family": {
-         "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+         "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
          "editType": "colorbars",
          "noBlank": true,
          "strict": true,
@@ -53933,7 +53933,7 @@
      "description": "Sets the font for the `category` labels.",
      "editType": "calc",
      "family": {
-      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
       "editType": "calc",
       "noBlank": true,
       "strict": true,
@@ -54251,7 +54251,7 @@
      "description": "Sets the font for the `dimension` labels.",
      "editType": "plot",
      "family": {
-      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
       "editType": "plot",
       "noBlank": true,
       "strict": true,
@@ -54358,7 +54358,7 @@
       "description": "Sets this legend group's title font.",
       "editType": "style",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "style",
        "noBlank": true,
        "strict": true,
@@ -54709,7 +54709,7 @@
        "description": "Sets the color bar's tick label font",
        "editType": "colorbars",
        "family": {
-        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
         "editType": "colorbars",
         "noBlank": true,
         "strict": true,
@@ -54955,7 +54955,7 @@
         "description": "Sets this color bar's title font.",
         "editType": "colorbars",
         "family": {
-         "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+         "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
          "editType": "colorbars",
          "noBlank": true,
          "strict": true,
@@ -55240,7 +55240,7 @@
      "description": "Sets the font for the `dimension` range values.",
      "editType": "plot",
      "family": {
-      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
       "editType": "plot",
       "noBlank": true,
       "strict": true,
@@ -55348,7 +55348,7 @@
      "description": "Sets the font for the `dimension` tick values.",
      "editType": "plot",
      "family": {
-      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
       "editType": "plot",
       "noBlank": true,
       "strict": true,
@@ -55672,7 +55672,7 @@
       "editType": "none",
       "family": {
        "arrayOk": true,
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "none",
        "noBlank": true,
        "strict": true,
@@ -55864,7 +55864,7 @@
      "editType": "plot",
      "family": {
       "arrayOk": true,
-      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
       "editType": "plot",
       "noBlank": true,
       "strict": true,
@@ -56042,7 +56042,7 @@
       "description": "Sets this legend group's title font.",
       "editType": "style",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "style",
        "noBlank": true,
        "strict": true,
@@ -56318,7 +56318,7 @@
      "editType": "plot",
      "family": {
       "arrayOk": true,
-      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
       "editType": "plot",
       "noBlank": true,
       "strict": true,
@@ -56523,7 +56523,7 @@
      "editType": "plot",
      "family": {
       "arrayOk": true,
-      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
       "editType": "plot",
       "noBlank": true,
       "strict": true,
@@ -56717,7 +56717,7 @@
       "editType": "plot",
       "family": {
        "arrayOk": true,
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "plot",
        "noBlank": true,
        "strict": true,
@@ -57091,7 +57091,7 @@
       "editType": "calc",
       "family": {
        "arrayOk": true,
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "calc",
        "noBlank": true,
        "strict": true,
@@ -57260,7 +57260,7 @@
       "description": "Sets this legend group's title font.",
       "editType": "style",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "style",
        "noBlank": true,
        "strict": true,
@@ -57525,7 +57525,7 @@
        "editType": "calc",
        "family": {
         "arrayOk": true,
-        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
         "editType": "calc",
         "noBlank": true,
         "strict": true,
@@ -57890,7 +57890,7 @@
        "editType": "calc",
        "family": {
         "arrayOk": true,
-        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
         "editType": "calc",
         "noBlank": true,
         "strict": true,
@@ -58167,7 +58167,7 @@
      "description": "Sets the font for node labels",
      "editType": "calc",
      "family": {
-      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
       "editType": "calc",
       "noBlank": true,
       "strict": true,
@@ -58393,7 +58393,7 @@
       "valType": "integer"
      },
      "type": {
-      "description": "Determines the rule used to generate the error bars. If *constant`, the bar lengths are of a constant value. Set this constant in `value`. If *percent*, the bar lengths correspond to a percentage of underlying data. Set this percentage in `value`. If *sqrt*, the bar lengths correspond to the square of the underlying data. If *data*, the bar lengths are set with data set `array`.",
+      "description": "Determines the rule used to generate the error bars. If *constant*, the bar lengths are of a constant value. Set this constant in `value`. If *percent*, the bar lengths correspond to a percentage of underlying data. Set this percentage in `value`. If *sqrt*, the bar lengths correspond to the square of the underlying data. If *data*, the bar lengths are set with data set `array`.",
       "editType": "calc",
       "valType": "enumerated",
       "values": [
@@ -58482,7 +58482,7 @@
       "valType": "integer"
      },
      "type": {
-      "description": "Determines the rule used to generate the error bars. If *constant`, the bar lengths are of a constant value. Set this constant in `value`. If *percent*, the bar lengths correspond to a percentage of underlying data. Set this percentage in `value`. If *sqrt*, the bar lengths correspond to the square of the underlying data. If *data*, the bar lengths are set with data set `array`.",
+      "description": "Determines the rule used to generate the error bars. If *constant*, the bar lengths are of a constant value. Set this constant in `value`. If *percent*, the bar lengths correspond to a percentage of underlying data. Set this percentage in `value`. If *sqrt*, the bar lengths correspond to the square of the underlying data. If *data*, the bar lengths are set with data set `array`.",
       "editType": "calc",
       "valType": "enumerated",
       "values": [
@@ -58754,7 +58754,7 @@
       "editType": "none",
       "family": {
        "arrayOk": true,
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "none",
        "noBlank": true,
        "strict": true,
@@ -58963,7 +58963,7 @@
       "description": "Sets this legend group's title font.",
       "editType": "style",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "style",
        "noBlank": true,
        "strict": true,
@@ -59412,7 +59412,7 @@
        "description": "Sets the color bar's tick label font",
        "editType": "colorbars",
        "family": {
-        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
         "editType": "colorbars",
         "noBlank": true,
         "strict": true,
@@ -59658,7 +59658,7 @@
         "description": "Sets this color bar's title font.",
         "editType": "colorbars",
         "family": {
-         "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+         "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
          "editType": "colorbars",
          "noBlank": true,
          "strict": true,
@@ -60700,7 +60700,7 @@
      "editType": "calc",
      "family": {
       "arrayOk": true,
-      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
       "editType": "calc",
       "noBlank": true,
       "strict": true,
@@ -61194,7 +61194,7 @@
       "valType": "integer"
      },
      "type": {
-      "description": "Determines the rule used to generate the error bars. If *constant`, the bar lengths are of a constant value. Set this constant in `value`. If *percent*, the bar lengths correspond to a percentage of underlying data. Set this percentage in `value`. If *sqrt*, the bar lengths correspond to the square of the underlying data. If *data*, the bar lengths are set with data set `array`.",
+      "description": "Determines the rule used to generate the error bars. If *constant*, the bar lengths are of a constant value. Set this constant in `value`. If *percent*, the bar lengths correspond to a percentage of underlying data. Set this percentage in `value`. If *sqrt*, the bar lengths correspond to the square of the underlying data. If *data*, the bar lengths are set with data set `array`.",
       "editType": "calc",
       "valType": "enumerated",
       "values": [
@@ -61287,7 +61287,7 @@
       "valType": "integer"
      },
      "type": {
-      "description": "Determines the rule used to generate the error bars. If *constant`, the bar lengths are of a constant value. Set this constant in `value`. If *percent*, the bar lengths correspond to a percentage of underlying data. Set this percentage in `value`. If *sqrt*, the bar lengths correspond to the square of the underlying data. If *data*, the bar lengths are set with data set `array`.",
+      "description": "Determines the rule used to generate the error bars. If *constant*, the bar lengths are of a constant value. Set this constant in `value`. If *percent*, the bar lengths correspond to a percentage of underlying data. Set this percentage in `value`. If *sqrt*, the bar lengths correspond to the square of the underlying data. If *data*, the bar lengths are set with data set `array`.",
       "editType": "calc",
       "valType": "enumerated",
       "values": [
@@ -61376,7 +61376,7 @@
       "valType": "integer"
      },
      "type": {
-      "description": "Determines the rule used to generate the error bars. If *constant`, the bar lengths are of a constant value. Set this constant in `value`. If *percent*, the bar lengths correspond to a percentage of underlying data. Set this percentage in `value`. If *sqrt*, the bar lengths correspond to the square of the underlying data. If *data*, the bar lengths are set with data set `array`.",
+      "description": "Determines the rule used to generate the error bars. If *constant*, the bar lengths are of a constant value. Set this constant in `value`. If *percent*, the bar lengths correspond to a percentage of underlying data. Set this percentage in `value`. If *sqrt*, the bar lengths correspond to the square of the underlying data. If *data*, the bar lengths are set with data set `array`.",
       "editType": "calc",
       "valType": "enumerated",
       "values": [
@@ -61492,7 +61492,7 @@
       "editType": "none",
       "family": {
        "arrayOk": true,
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "none",
        "noBlank": true,
        "strict": true,
@@ -61691,7 +61691,7 @@
       "description": "Sets this legend group's title font.",
       "editType": "style",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "style",
        "noBlank": true,
        "strict": true,
@@ -62042,7 +62042,7 @@
        "description": "Sets the color bar's tick label font",
        "editType": "calc",
        "family": {
-        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
         "editType": "calc",
         "noBlank": true,
         "strict": true,
@@ -62288,7 +62288,7 @@
         "description": "Sets this color bar's title font.",
         "editType": "calc",
         "family": {
-         "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+         "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
          "editType": "calc",
          "noBlank": true,
          "strict": true,
@@ -62751,7 +62751,7 @@
        "description": "Sets the color bar's tick label font",
        "editType": "calc",
        "family": {
-        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
         "editType": "calc",
         "noBlank": true,
         "strict": true,
@@ -62997,7 +62997,7 @@
         "description": "Sets this color bar's title font.",
         "editType": "calc",
         "family": {
-         "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+         "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
          "editType": "calc",
          "noBlank": true,
          "strict": true,
@@ -63528,7 +63528,7 @@
      "editType": "calc",
      "family": {
       "arrayOk": true,
-      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
       "editType": "calc",
       "noBlank": true,
       "strict": true,
@@ -63936,7 +63936,7 @@
       "editType": "none",
       "family": {
        "arrayOk": true,
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "none",
        "noBlank": true,
        "strict": true,
@@ -64144,7 +64144,7 @@
       "description": "Sets this legend group's title font.",
       "editType": "style",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "style",
        "noBlank": true,
        "strict": true,
@@ -64578,7 +64578,7 @@
        "description": "Sets the color bar's tick label font",
        "editType": "colorbars",
        "family": {
-        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
         "editType": "colorbars",
         "noBlank": true,
         "strict": true,
@@ -64824,7 +64824,7 @@
         "description": "Sets this color bar's title font.",
         "editType": "colorbars",
         "family": {
-         "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+         "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
          "editType": "colorbars",
          "noBlank": true,
          "strict": true,
@@ -65831,7 +65831,7 @@
      "editType": "calc",
      "family": {
       "arrayOk": true,
-      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
       "editType": "calc",
       "noBlank": true,
       "strict": true,
@@ -66220,7 +66220,7 @@
       "editType": "none",
       "family": {
        "arrayOk": true,
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "none",
        "noBlank": true,
        "strict": true,
@@ -66429,7 +66429,7 @@
       "description": "Sets this legend group's title font.",
       "editType": "style",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "style",
        "noBlank": true,
        "strict": true,
@@ -66865,7 +66865,7 @@
        "description": "Sets the color bar's tick label font",
        "editType": "calc",
        "family": {
-        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
         "editType": "calc",
         "noBlank": true,
         "strict": true,
@@ -67111,7 +67111,7 @@
         "description": "Sets this color bar's title font.",
         "editType": "calc",
         "family": {
-         "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+         "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
          "editType": "calc",
          "noBlank": true,
          "strict": true,
@@ -68111,7 +68111,7 @@
      "editType": "calc",
      "family": {
       "arrayOk": true,
-      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
       "editType": "calc",
       "noBlank": true,
       "strict": true,
@@ -68437,7 +68437,7 @@
       "valType": "integer"
      },
      "type": {
-      "description": "Determines the rule used to generate the error bars. If *constant`, the bar lengths are of a constant value. Set this constant in `value`. If *percent*, the bar lengths correspond to a percentage of underlying data. Set this percentage in `value`. If *sqrt*, the bar lengths correspond to the square of the underlying data. If *data*, the bar lengths are set with data set `array`.",
+      "description": "Determines the rule used to generate the error bars. If *constant*, the bar lengths are of a constant value. Set this constant in `value`. If *percent*, the bar lengths correspond to a percentage of underlying data. Set this percentage in `value`. If *sqrt*, the bar lengths correspond to the square of the underlying data. If *data*, the bar lengths are set with data set `array`.",
       "editType": "calc",
       "valType": "enumerated",
       "values": [
@@ -68526,7 +68526,7 @@
       "valType": "integer"
      },
      "type": {
-      "description": "Determines the rule used to generate the error bars. If *constant`, the bar lengths are of a constant value. Set this constant in `value`. If *percent*, the bar lengths correspond to a percentage of underlying data. Set this percentage in `value`. If *sqrt*, the bar lengths correspond to the square of the underlying data. If *data*, the bar lengths are set with data set `array`.",
+      "description": "Determines the rule used to generate the error bars. If *constant*, the bar lengths are of a constant value. Set this constant in `value`. If *percent*, the bar lengths correspond to a percentage of underlying data. Set this percentage in `value`. If *sqrt*, the bar lengths correspond to the square of the underlying data. If *data*, the bar lengths are set with data set `array`.",
       "editType": "calc",
       "valType": "enumerated",
       "values": [
@@ -68662,7 +68662,7 @@
       "editType": "none",
       "family": {
        "arrayOk": true,
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "none",
        "noBlank": true,
        "strict": true,
@@ -68861,7 +68861,7 @@
       "description": "Sets this legend group's title font.",
       "editType": "style",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "style",
        "noBlank": true,
        "strict": true,
@@ -69267,7 +69267,7 @@
        "description": "Sets the color bar's tick label font",
        "editType": "calc",
        "family": {
-        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
         "editType": "calc",
         "noBlank": true,
         "strict": true,
@@ -69513,7 +69513,7 @@
         "description": "Sets this color bar's title font.",
         "editType": "calc",
         "family": {
-         "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+         "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
          "editType": "calc",
          "noBlank": true,
          "strict": true,
@@ -70466,7 +70466,7 @@
      "editType": "calc",
      "family": {
       "arrayOk": true,
-      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
       "editType": "calc",
       "noBlank": true,
       "strict": true,
@@ -70985,7 +70985,7 @@
       "editType": "none",
       "family": {
        "arrayOk": true,
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "none",
        "noBlank": true,
        "strict": true,
@@ -71194,7 +71194,7 @@
       "description": "Sets this legend group's title font.",
       "editType": "style",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "style",
        "noBlank": true,
        "strict": true,
@@ -71589,7 +71589,7 @@
        "description": "Sets the color bar's tick label font",
        "editType": "calc",
        "family": {
-        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
         "editType": "calc",
         "noBlank": true,
         "strict": true,
@@ -71835,7 +71835,7 @@
         "description": "Sets this color bar's title font.",
         "editType": "calc",
         "family": {
-         "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+         "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
          "editType": "calc",
          "noBlank": true,
          "strict": true,
@@ -72203,7 +72203,7 @@
      "description": "Sets the icon text font (color=map.layer.paint.text-color, size=map.layer.layout.text-size). Has an effect only when `type` is set to *symbol*.",
      "editType": "calc",
      "family": {
-      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
       "dflt": "Open Sans Regular, Arial Unicode MS Regular",
       "editType": "calc",
       "noBlank": true,
@@ -72522,7 +72522,7 @@
       "editType": "none",
       "family": {
        "arrayOk": true,
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "none",
        "noBlank": true,
        "strict": true,
@@ -72731,7 +72731,7 @@
       "description": "Sets this legend group's title font.",
       "editType": "style",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "style",
        "noBlank": true,
        "strict": true,
@@ -73126,7 +73126,7 @@
        "description": "Sets the color bar's tick label font",
        "editType": "calc",
        "family": {
-        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
         "editType": "calc",
         "noBlank": true,
         "strict": true,
@@ -73372,7 +73372,7 @@
         "description": "Sets this color bar's title font.",
         "editType": "calc",
         "family": {
-         "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+         "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
          "editType": "calc",
          "noBlank": true,
          "strict": true,
@@ -73740,7 +73740,7 @@
      "description": "Sets the icon text font (color=mapbox.layer.paint.text-color, size=mapbox.layer.layout.text-size). Has an effect only when `type` is set to *symbol*.",
      "editType": "calc",
      "family": {
-      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
       "dflt": "Open Sans Regular, Arial Unicode MS Regular",
       "editType": "calc",
       "noBlank": true,
@@ -74004,7 +74004,7 @@
       "editType": "none",
       "family": {
        "arrayOk": true,
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "none",
        "noBlank": true,
        "strict": true,
@@ -74212,7 +74212,7 @@
       "description": "Sets this legend group's title font.",
       "editType": "style",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "style",
        "noBlank": true,
        "strict": true,
@@ -74646,7 +74646,7 @@
        "description": "Sets the color bar's tick label font",
        "editType": "colorbars",
        "family": {
-        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
         "editType": "colorbars",
         "noBlank": true,
         "strict": true,
@@ -74892,7 +74892,7 @@
         "description": "Sets this color bar's title font.",
         "editType": "colorbars",
         "family": {
-         "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+         "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
          "editType": "colorbars",
          "noBlank": true,
          "strict": true,
@@ -75920,7 +75920,7 @@
      "editType": "calc",
      "family": {
       "arrayOk": true,
-      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
       "editType": "calc",
       "noBlank": true,
       "strict": true,
@@ -76314,7 +76314,7 @@
       "editType": "none",
       "family": {
        "arrayOk": true,
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "none",
        "noBlank": true,
        "strict": true,
@@ -76513,7 +76513,7 @@
       "description": "Sets this legend group's title font.",
       "editType": "style",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "style",
        "noBlank": true,
        "strict": true,
@@ -76906,7 +76906,7 @@
        "description": "Sets the color bar's tick label font",
        "editType": "calc",
        "family": {
-        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
         "editType": "calc",
         "noBlank": true,
         "strict": true,
@@ -77152,7 +77152,7 @@
         "description": "Sets this color bar's title font.",
         "editType": "calc",
         "family": {
-         "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+         "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
          "editType": "calc",
          "noBlank": true,
          "strict": true,
@@ -78127,7 +78127,7 @@
      "editType": "calc",
      "family": {
       "arrayOk": true,
-      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
       "editType": "calc",
       "noBlank": true,
       "strict": true,
@@ -78458,7 +78458,7 @@
       "editType": "none",
       "family": {
        "arrayOk": true,
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "none",
        "noBlank": true,
        "strict": true,
@@ -78676,7 +78676,7 @@
       "description": "Sets this legend group's title font.",
       "editType": "style",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "style",
        "noBlank": true,
        "strict": true,
@@ -79110,7 +79110,7 @@
        "description": "Sets the color bar's tick label font",
        "editType": "colorbars",
        "family": {
-        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
         "editType": "colorbars",
         "noBlank": true,
         "strict": true,
@@ -79356,7 +79356,7 @@
         "description": "Sets this color bar's title font.",
         "editType": "colorbars",
         "family": {
-         "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+         "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
          "editType": "colorbars",
          "noBlank": true,
          "strict": true,
@@ -80378,7 +80378,7 @@
      "editType": "calc",
      "family": {
       "arrayOk": true,
-      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
       "editType": "calc",
       "noBlank": true,
       "strict": true,
@@ -80767,7 +80767,7 @@
       "editType": "none",
       "family": {
        "arrayOk": true,
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "none",
        "noBlank": true,
        "strict": true,
@@ -80975,7 +80975,7 @@
       "description": "Sets this legend group's title font.",
       "editType": "style",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "style",
        "noBlank": true,
        "strict": true,
@@ -81409,7 +81409,7 @@
        "description": "Sets the color bar's tick label font",
        "editType": "colorbars",
        "family": {
-        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
         "editType": "colorbars",
         "noBlank": true,
         "strict": true,
@@ -81655,7 +81655,7 @@
         "description": "Sets this color bar's title font.",
         "editType": "colorbars",
         "family": {
-         "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+         "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
          "editType": "colorbars",
          "noBlank": true,
          "strict": true,
@@ -82675,7 +82675,7 @@
      "editType": "calc",
      "family": {
       "arrayOk": true,
-      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
       "editType": "calc",
       "noBlank": true,
       "strict": true,
@@ -83077,7 +83077,7 @@
       "editType": "none",
       "family": {
        "arrayOk": true,
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "none",
        "noBlank": true,
        "strict": true,
@@ -83276,7 +83276,7 @@
       "description": "Sets this legend group's title font.",
       "editType": "style",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "style",
        "noBlank": true,
        "strict": true,
@@ -83639,7 +83639,7 @@
        "description": "Sets the color bar's tick label font",
        "editType": "colorbars",
        "family": {
-        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
         "editType": "colorbars",
         "noBlank": true,
         "strict": true,
@@ -83885,7 +83885,7 @@
         "description": "Sets this color bar's title font.",
         "editType": "colorbars",
         "family": {
-         "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+         "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
          "editType": "colorbars",
          "noBlank": true,
          "strict": true,
@@ -85160,7 +85160,7 @@
       "description": "Sets the color bar's tick label font",
       "editType": "colorbars",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "colorbars",
        "noBlank": true,
        "strict": true,
@@ -85406,7 +85406,7 @@
        "description": "Sets this color bar's title font.",
        "editType": "colorbars",
        "family": {
-        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
         "editType": "colorbars",
         "noBlank": true,
         "strict": true,
@@ -85673,7 +85673,7 @@
       "editType": "none",
       "family": {
        "arrayOk": true,
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "none",
        "noBlank": true,
        "strict": true,
@@ -85866,7 +85866,7 @@
       "description": "Sets this legend group's title font.",
       "editType": "style",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "style",
        "noBlank": true,
        "strict": true,
@@ -86484,7 +86484,7 @@
       "editType": "none",
       "family": {
        "arrayOk": true,
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "none",
        "noBlank": true,
        "strict": true,
@@ -86677,7 +86677,7 @@
      "editType": "plot",
      "family": {
       "arrayOk": true,
-      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
       "editType": "plot",
       "noBlank": true,
       "strict": true,
@@ -86854,7 +86854,7 @@
       "description": "Sets this legend group's title font.",
       "editType": "style",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "style",
        "noBlank": true,
        "strict": true,
@@ -87205,7 +87205,7 @@
        "description": "Sets the color bar's tick label font",
        "editType": "colorbars",
        "family": {
-        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
         "editType": "colorbars",
         "noBlank": true,
         "strict": true,
@@ -87451,7 +87451,7 @@
         "description": "Sets this color bar's title font.",
         "editType": "colorbars",
         "family": {
-         "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+         "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
          "editType": "colorbars",
          "noBlank": true,
          "strict": true,
@@ -87815,7 +87815,7 @@
      "editType": "plot",
      "family": {
       "arrayOk": true,
-      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
       "editType": "plot",
       "noBlank": true,
       "strict": true,
@@ -88014,7 +88014,7 @@
      "editType": "plot",
      "family": {
       "arrayOk": true,
-      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
       "editType": "plot",
       "noBlank": true,
       "strict": true,
@@ -88475,7 +88475,7 @@
       "description": "Sets the color bar's tick label font",
       "editType": "calc",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "calc",
        "noBlank": true,
        "strict": true,
@@ -88721,7 +88721,7 @@
        "description": "Sets this color bar's title font.",
        "editType": "calc",
        "family": {
-        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
         "editType": "calc",
         "noBlank": true,
         "strict": true,
@@ -89272,7 +89272,7 @@
       "editType": "none",
       "family": {
        "arrayOk": true,
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "none",
        "noBlank": true,
        "strict": true,
@@ -89471,7 +89471,7 @@
       "description": "Sets this legend group's title font.",
       "editType": "style",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "style",
        "noBlank": true,
        "strict": true,
@@ -89944,7 +89944,7 @@
       "editType": "calc",
       "family": {
        "arrayOk": true,
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "calc",
        "noBlank": true,
        "strict": true,
@@ -90299,7 +90299,7 @@
       "editType": "calc",
       "family": {
        "arrayOk": true,
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "calc",
        "noBlank": true,
        "strict": true,
@@ -90587,7 +90587,7 @@
       "editType": "none",
       "family": {
        "arrayOk": true,
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "none",
        "noBlank": true,
        "strict": true,
@@ -90756,7 +90756,7 @@
       "description": "Sets this legend group's title font.",
       "editType": "style",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "style",
        "noBlank": true,
        "strict": true,
@@ -91103,7 +91103,7 @@
       "editType": "none",
       "family": {
        "arrayOk": true,
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "none",
        "noBlank": true,
        "strict": true,
@@ -91296,7 +91296,7 @@
      "editType": "plot",
      "family": {
       "arrayOk": true,
-      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
       "editType": "plot",
       "noBlank": true,
       "strict": true,
@@ -91450,7 +91450,7 @@
       "description": "Sets this legend group's title font.",
       "editType": "style",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "style",
        "noBlank": true,
        "strict": true,
@@ -91801,7 +91801,7 @@
        "description": "Sets the color bar's tick label font",
        "editType": "colorbars",
        "family": {
-        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
         "editType": "colorbars",
         "noBlank": true,
         "strict": true,
@@ -92047,7 +92047,7 @@
         "description": "Sets this color bar's title font.",
         "editType": "colorbars",
         "family": {
-         "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+         "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
          "editType": "colorbars",
          "noBlank": true,
          "strict": true,
@@ -92456,7 +92456,7 @@
      "editType": "plot",
      "family": {
       "arrayOk": true,
-      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
       "editType": "plot",
       "noBlank": true,
       "strict": true,
@@ -92635,7 +92635,7 @@
       "editType": "plot",
       "family": {
        "arrayOk": true,
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "plot",
        "noBlank": true,
        "strict": true,
@@ -92831,7 +92831,7 @@
      "editType": "plot",
      "family": {
       "arrayOk": true,
-      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
       "editType": "plot",
       "noBlank": true,
       "strict": true,
@@ -93253,7 +93253,7 @@
       "editType": "none",
       "family": {
        "arrayOk": true,
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "none",
        "noBlank": true,
        "strict": true,
@@ -93473,7 +93473,7 @@
       "description": "Sets this legend group's title font.",
       "editType": "style",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "style",
        "noBlank": true,
        "strict": true,
@@ -94829,7 +94829,7 @@
       "description": "Sets the color bar's tick label font",
       "editType": "calc",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "calc",
        "noBlank": true,
        "strict": true,
@@ -95075,7 +95075,7 @@
        "description": "Sets this color bar's title font.",
        "editType": "calc",
        "family": {
-        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
         "editType": "calc",
         "noBlank": true,
         "strict": true,
@@ -95367,7 +95367,7 @@
       "editType": "none",
       "family": {
        "arrayOk": true,
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "none",
        "noBlank": true,
        "strict": true,
@@ -95576,7 +95576,7 @@
       "description": "Sets this legend group's title font.",
       "editType": "style",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "style",
        "noBlank": true,
        "strict": true,
@@ -96318,7 +96318,7 @@
       "editType": "none",
       "family": {
        "arrayOk": true,
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "none",
        "noBlank": true,
        "strict": true,
@@ -96553,7 +96553,7 @@
      "editType": "calc",
      "family": {
       "arrayOk": true,
-      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
       "editType": "calc",
       "noBlank": true,
       "strict": true,
@@ -96703,7 +96703,7 @@
       "description": "Sets this legend group's title font.",
       "editType": "style",
       "family": {
-       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+       "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
        "editType": "style",
        "noBlank": true,
        "strict": true,
@@ -96881,7 +96881,7 @@
      "editType": "calc",
      "family": {
       "arrayOk": true,
-      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
       "editType": "calc",
       "noBlank": true,
       "strict": true,
@@ -97067,7 +97067,7 @@
      "editType": "calc",
      "family": {
       "arrayOk": true,
-      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
+      "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.",
       "editType": "calc",
       "noBlank": true,
       "strict": true,
diff --git a/codegen/utils.py b/codegen/utils.py
index 087e3d683b6..8c68d017c00 100644
--- a/codegen/utils.py
+++ b/codegen/utils.py
@@ -8,6 +8,13 @@
 import re
 import errno
 
+CAVEAT = """
+
+#                   --- THIS FILE IS AUTO-GENERATED ---
+# Modifications will be overwitten the next time code generation run.
+
+"""
+
 
 # Source code utilities
 # =====================
@@ -75,16 +82,12 @@ def build_from_imports_py(rel_modules=(), rel_classes=(), init_extra=""):
 
     result = f"""\
 import sys
-from typing import TYPE_CHECKING
-if sys.version_info < (3, 7) or TYPE_CHECKING:
-    {imports_str}
-else:
-    from _plotly_utils.importers import relative_import
-    __all__, __getattr__, __dir__ = relative_import(
-        __name__,
-        {repr(rel_modules)},
-        {repr(rel_classes)}
-    )
+from _plotly_utils.importers import relative_import
+__all__, __getattr__, __dir__ = relative_import(
+    __name__,
+    {repr(rel_modules)},
+    {repr(rel_classes)}
+)
 
 {init_extra}
 """
@@ -126,14 +129,14 @@ def write_init_py(pkg_root, path_parts, rel_modules=(), rel_classes=(), init_ext
 def format_description(desc):
 
     # Remove surrounding *s from numbers
-    desc = re.sub("(^|[\s(,.:])\*([\d.]+)\*([\s),.:]|$)", r"\1\2\3", desc)
+    desc = re.sub(r"(^|[\s(,.:])\*([\d.]+)\*([\s),.:]|$)", r"\1\2\3", desc)
 
     # replace *true* with True
     desc = desc.replace("*true*", "True")
     desc = desc.replace("*false*", "False")
 
     # Replace *word* with "word"
-    desc = re.sub("(^|[\s(,.:])\*(\S+)\*([\s),.:]|$)", r'\1"\2"\3', desc)
+    desc = re.sub(r"(^|[\s(,.:])\*(\S+)\*([\s),.:]|$)", r'\1"\2"\3', desc)
 
     # Special case strings that don't satisfy regex above
     other_strings = [
@@ -456,9 +459,7 @@ def get_validator_params(self):
 
         if self.is_compound:
             params["data_class_str"] = repr(self.name_datatype_class)
-            params["data_docs"] = (
-                '"""' + self.get_constructor_params_docstring() + '\n"""'
-            )
+            params["data_docs"] = '"""\n"""'
         else:
             assert self.is_simple
 
diff --git a/codegen/validators.py b/codegen/validators.py
index 6867e2fd3a4..cad1188a9ee 100644
--- a/codegen/validators.py
+++ b/codegen/validators.py
@@ -2,7 +2,7 @@
 from io import StringIO
 
 import _plotly_utils.basevalidators
-from codegen.utils import PlotlyNode, TraceNode, write_source_py
+from codegen.utils import CAVEAT, PlotlyNode, TraceNode, write_source_py
 
 
 def build_validator_py(node: PlotlyNode):
@@ -24,15 +24,16 @@ def build_validator_py(node: PlotlyNode):
     # ---------------
     assert node.is_datatype
 
-    # Initialize source code buffer
-    # -----------------------------
+    # Initialize
+    import_alias = "_bv"
     buffer = StringIO()
+    buffer.write(CAVEAT)
 
     # Imports
     # -------
     # ### Import package of the validator's superclass ###
     import_str = ".".join(node.name_base_validator.split(".")[:-1])
-    buffer.write(f"import {import_str }\n")
+    buffer.write(f"import {import_str} as {import_alias}\n")
 
     # Build Validator
     # ---------------
@@ -41,11 +42,11 @@ def build_validator_py(node: PlotlyNode):
 
     # ### Write class definition ###
     class_name = node.name_validator_class
-    superclass_name = node.name_base_validator
+    superclass_name = node.name_base_validator.split(".")[-1]
     buffer.write(
         f"""
 
-class {class_name}({superclass_name}):
+class {class_name}({import_alias}.{superclass_name}):
     def __init__(self, plotly_name={params['plotly_name']},
                        parent_name={params['parent_name']},
                        **kwargs):"""
@@ -54,8 +55,7 @@ def __init__(self, plotly_name={params['plotly_name']},
     # ### Write constructor ###
     buffer.write(
         f"""
-        super({class_name}, self).__init__(plotly_name=plotly_name,
-                         parent_name=parent_name"""
+        super().__init__(plotly_name, parent_name"""
     )
 
     # Write out remaining constructor parameters
@@ -198,10 +198,7 @@ def __init__(self, plotly_name={params['plotly_name']},
                        parent_name={params['parent_name']},
                        **kwargs):
 
-        super(DataValidator, self).__init__(class_strs_map={params['class_strs_map']},
-                         plotly_name=plotly_name,
-                         parent_name=parent_name,
-                         **kwargs)"""
+        super().__init__({params['class_strs_map']}, plotly_name, parent_name, **kwargs)"""
     )
 
     return buffer.getvalue()
diff --git a/commands.py b/commands.py
index 9c529e87e91..3d9977bdd94 100644
--- a/commands.py
+++ b/commands.py
@@ -1,31 +1,31 @@
+from distutils import log
+import json
 import os
-import sys
-import time
 import platform
-import json
 import shutil
-
 from subprocess import check_call
-from distutils import log
+import sys
+import time
 
-project_root = os.path.dirname(os.path.abspath(__file__))
-node_root = os.path.join(project_root, "js")
-is_repo = os.path.exists(os.path.join(project_root, ".git"))
-node_modules = os.path.join(node_root, "node_modules")
-targets = [
-    os.path.join(project_root, "plotly", "package_data", "widgetbundle.js"),
+USAGE = "usage: python commands.py [updateplotlyjsdev | updateplotlyjs | codegen]"
+PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))
+NODE_ROOT = os.path.join(PROJECT_ROOT, "js")
+NODE_MODULES = os.path.join(NODE_ROOT, "node_modules")
+TARGETS = [
+    os.path.join(PROJECT_ROOT, "plotly", "package_data", "widgetbundle.js"),
 ]
 
-npm_path = os.pathsep.join(
+NPM_PATH = os.pathsep.join(
     [
-        os.path.join(node_root, "node_modules", ".bin"),
+        os.path.join(NODE_ROOT, "node_modules", ".bin"),
         os.environ.get("PATH", os.defpath),
     ]
 )
 
+
 # Load plotly.js version from js/package.json
 def plotly_js_version():
-    path = os.path.join(project_root, "js", "package.json")
+    path = os.path.join(PROJECT_ROOT, "js", "package.json")
     with open(path, "rt") as f:
         package_json = json.load(f)
         version = package_json["dependencies"]["plotly.js"]
@@ -57,13 +57,13 @@ def install_js_deps(local):
         )
 
     env = os.environ.copy()
-    env["PATH"] = npm_path
+    env["PATH"] = NPM_PATH
 
     if has_npm:
         log.info("Installing build dependencies with npm.  This may take a while...")
         check_call(
             [npmName, "install"],
-            cwd=node_root,
+            cwd=NODE_ROOT,
             stdout=sys.stdout,
             stderr=sys.stderr,
         )
@@ -71,19 +71,19 @@ def install_js_deps(local):
             plotly_archive = os.path.join(local, "plotly.js.tgz")
             check_call(
                 [npmName, "install", plotly_archive],
-                cwd=node_root,
+                cwd=NODE_ROOT,
                 stdout=sys.stdout,
                 stderr=sys.stderr,
             )
         check_call(
             [npmName, "run", "build"],
-            cwd=node_root,
+            cwd=NODE_ROOT,
             stdout=sys.stdout,
             stderr=sys.stderr,
         )
-        os.utime(node_modules, None)
+        os.utime(NODE_MODULES, None)
 
-    for t in targets:
+    for t in TARGETS:
         if not os.path.exists(t):
             msg = "Missing file: %s" % t
             raise ValueError(msg)
@@ -100,7 +100,7 @@ def run_codegen():
 
 
 def overwrite_schema_local(uri):
-    path = os.path.join(project_root, "codegen", "resources", "plot-schema.json")
+    path = os.path.join(PROJECT_ROOT, "codegen", "resources", "plot-schema.json")
     shutil.copyfile(uri, path)
 
 
@@ -109,13 +109,13 @@ def overwrite_schema(url):
 
     req = requests.get(url)
     assert req.status_code == 200
-    path = os.path.join(project_root, "codegen", "resources", "plot-schema.json")
+    path = os.path.join(PROJECT_ROOT, "codegen", "resources", "plot-schema.json")
     with open(path, "wb") as f:
         f.write(req.content)
 
 
 def overwrite_bundle_local(uri):
-    path = os.path.join(project_root, "plotly", "package_data", "plotly.min.js")
+    path = os.path.join(PROJECT_ROOT, "plotly", "package_data", "plotly.min.js")
     shutil.copyfile(uri, path)
 
 
@@ -125,13 +125,13 @@ def overwrite_bundle(url):
     req = requests.get(url)
     print("url:", url)
     assert req.status_code == 200
-    path = os.path.join(project_root, "plotly", "package_data", "plotly.min.js")
+    path = os.path.join(PROJECT_ROOT, "plotly", "package_data", "plotly.min.js")
     with open(path, "wb") as f:
         f.write(req.content)
 
 
 def overwrite_plotlyjs_version_file(plotlyjs_version):
-    path = os.path.join(project_root, "plotly", "offline", "_plotlyjs_version.py")
+    path = os.path.join(PROJECT_ROOT, "plotly", "offline", "_plotlyjs_version.py")
     with open(path, "w") as f:
         f.write(
             """\
@@ -274,7 +274,7 @@ def update_schema_bundle_from_master():
         overwrite_schema_local(schema_uri)
 
     # Update plotly.js url in package.json
-    package_json_path = os.path.join(node_root, "package.json")
+    package_json_path = os.path.join(NODE_ROOT, "package.json")
     with open(package_json_path, "r") as f:
         package_json = json.load(f)
 
@@ -299,9 +299,18 @@ def update_plotlyjs_dev():
     run_codegen()
 
 
-if __name__ == "__main__":
-    if "updateplotlyjsdev" in sys.argv:
+def main():
+    if len(sys.argv) != 2:
+        print(USAGE, file=sys.stderr)
+        sys.exit(1)
+    elif sys.argv[1] == "codegen":
+        run_codegen()
+    elif sys.argv[1] == "updateplotlyjsdev":
         update_plotlyjs_dev()
-    elif "updateplotlyjs" in sys.argv:
+    elif sys.argv[1] == "updateplotlyjs":
         print(plotly_js_version())
         update_plotlyjs(plotly_js_version())
+
+
+if __name__ == "__main__":
+    main()
diff --git a/doc/apidoc/conf.py b/doc/apidoc/conf.py
index 03772179ae4..3c80a1af82f 100644
--- a/doc/apidoc/conf.py
+++ b/doc/apidoc/conf.py
@@ -26,7 +26,7 @@
 # The short X.Y version
 version = ""
 # The full version, including alpha/beta/rc tags
-release = "6.0.0"
+release = "6.0.1"
 
 
 # -- General configuration ---------------------------------------------------
diff --git a/doc/python/3d-axes.md b/doc/python/3d-axes.md
index b6ec1d8d3e0..e6ea8414032 100644
--- a/doc/python/3d-axes.md
+++ b/doc/python/3d-axes.md
@@ -6,7 +6,7 @@ jupyter:
       extension: .md
       format_name: markdown
       format_version: '1.3'
-      jupytext_version: 1.15.1
+      jupytext_version: 1.16.4
   kernelspec:
     display_name: Python 3 (ipykernel)
     language: python
@@ -114,7 +114,7 @@ fig = make_subplots(rows=2, cols=2,
                     print_grid=False)
 for i in [1,2]:
     for j in [1,2]:
-        fig.append_trace(
+        fig.add_trace(
             go.Mesh3d(
                 x=(60*np.random.randn(N)),
                 y=(25*np.random.randn(N)),
diff --git a/doc/python/histograms.md b/doc/python/histograms.md
index 78eab471933..aca2c25b3d5 100644
--- a/doc/python/histograms.md
+++ b/doc/python/histograms.md
@@ -6,9 +6,9 @@ jupyter:
       extension: .md
       format_name: markdown
       format_version: '1.3'
-      jupytext_version: 1.14.1
+      jupytext_version: 1.16.4
   kernelspec:
-    display_name: Python 3
+    display_name: Python 3 (ipykernel)
     language: python
     name: python3
   language_info:
@@ -20,7 +20,7 @@ jupyter:
     name: python
     nbconvert_exporter: python
     pygments_lexer: ipython3
-    version: 3.8.8
+    version: 3.11.10
   plotly:
     description: How to make Histograms in Python with Plotly.
     display_as: statistical
@@ -438,12 +438,12 @@ trace5 = go.Histogram(x=x,
                       autobinx = False
                       )
 
-fig.append_trace(trace0, 1, 1)
-fig.append_trace(trace1, 1, 2)
-fig.append_trace(trace2, 2, 1)
-fig.append_trace(trace3, 2, 2)
-fig.append_trace(trace4, 3, 1)
-fig.append_trace(trace5, 3, 2)
+fig.add_trace(trace0, 1, 1)
+fig.add_trace(trace1, 1, 2)
+fig.add_trace(trace2, 2, 1)
+fig.add_trace(trace3, 2, 2)
+fig.add_trace(trace4, 3, 1)
+fig.add_trace(trace5, 3, 2)
 
 fig.show()
 ```
diff --git a/doc/python/horizontal-bar-charts.md b/doc/python/horizontal-bar-charts.md
index ae9b02e3d30..dc8e54a1a4d 100644
--- a/doc/python/horizontal-bar-charts.md
+++ b/doc/python/horizontal-bar-charts.md
@@ -5,10 +5,10 @@ jupyter:
     text_representation:
       extension: .md
       format_name: markdown
-      format_version: '1.1'
-      jupytext_version: 1.1.1
+      format_version: '1.3'
+      jupytext_version: 1.16.4
   kernelspec:
-    display_name: Python 3
+    display_name: Python 3 (ipykernel)
     language: python
     name: python3
   language_info:
@@ -20,7 +20,7 @@ jupyter:
     name: python
     nbconvert_exporter: python
     pygments_lexer: ipython3
-    version: 3.6.7
+    version: 3.11.10
   plotly:
     description: How to make horizontal bar charts in Python with Plotly.
     display_as: basic
@@ -217,6 +217,76 @@ fig.update_layout(annotations=annotations)
 fig.show()
 ```
 
+### Diverging Bar (or Butterfly) Chart
+
+Diverging bar charts show counts of positive outcomes or sentiments to the right of zero and counts of negative outcomes to the left of zero, allowing the reader to easily spot areas of excellence and concern.  This example allows the reader of the graph to infer the number of people offering a neutral response because the neutral category, which is left implicit, would make the responses add to 100%.
+
+```python
+import plotly.graph_objects as go
+import pandas as pd
+
+
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/refs/heads/master/gss_2002_5_pt_likert.csv')
+
+df.rename(columns={'Unnamed: 0':"Category"}, inplace=True)
+
+#achieve the diverging effect by putting a negative sign on the "disagree" answers 
+for v in ["Disagree","Strongly Disagree"]:
+    df[v]=df[v]*-1
+
+fig = go.Figure()
+# this color palette conveys meaning:  blues for positive, red and orange for negative
+color_by_category={
+    "Strongly Agree":'darkblue',
+    "Agree":'lightblue',
+    "Disagree":'orange',
+    "Strongly Disagree":'red',
+}
+
+
+# We want the legend to be ordered in the same order that the categories appear, left to right --
+# which is different from the order in which we have to add the traces to the figure.
+# since we need to create the "somewhat" traces before the "strongly" traces to display
+# the segments in the desired order
+legend_rank_by_category={
+    "Strongly Disagree":1,
+    "Disagree":2,
+    "Agree":3,
+    "Strongly Agree":4,
+}
+# Add bars for each category
+for col in ["Disagree","Strongly Disagree","Agree","Strongly Agree"]:
+    fig.add_trace(go.Bar(
+        y=df["Category"], 
+        x=df[col], 
+        name=col, 
+        orientation='h',
+        marker=dict(color=color_by_category[col]),
+        legendrank=legend_rank_by_category[col]
+    ))
+
+fig.update_layout(
+   title="Reactions to statements from the 2002 General Social Survey:",
+    yaxis_title = "",
+    barmode='relative',  # Allows bars to diverge from the center
+    plot_bgcolor="white",
+)
+
+fig.update_xaxes(
+        title="Percent of Responses",
+        zeroline=True,  # Ensure there's a zero line for divergence
+        zerolinecolor="black",
+        # use array tick mode to show that the counts to the left of zero are still positive.
+        # this is hard coded; generalize this if you plan to create a function that takes unknown or widely varying data
+        tickmode = 'array',     
+        tickvals = [-50, 0, 50, 100],
+        ticktext = [50, 0, 50, 100]
+)
+
+fig.show()
+
+```
+
 ### Bar Chart with Line Plot
 
 ```python
@@ -239,7 +309,7 @@ x = ['Japan', 'United Kingdom', 'Canada', 'Netherlands',
 fig = make_subplots(rows=1, cols=2, specs=[[{}, {}]], shared_xaxes=True,
                     shared_yaxes=False, vertical_spacing=0.001)
 
-fig.append_trace(go.Bar(
+fig.add_trace(go.Bar(
     x=y_saving,
     y=x,
     marker=dict(
@@ -252,7 +322,7 @@ fig.append_trace(go.Bar(
     orientation='h',
 ), 1, 1)
 
-fig.append_trace(go.Scatter(
+fig.add_trace(go.Scatter(
     x=y_net_worth, y=x,
     mode='lines+markers',
     line_color='rgb(128, 0, 128)',
@@ -335,4 +405,4 @@ fig.show()
 
 ### Reference
 
-See more examples of bar charts and styling options [here](https://plotly.com/python/bar-charts/).<br> See https://plotly.com/python/reference/bar/ for more information and chart attribute options!
\ No newline at end of file
+See more examples of bar charts and styling options [here](https://plotly.com/python/bar-charts/).<br> See https://plotly.com/python/reference/bar/ for more information and chart attribute options!
diff --git a/doc/python/ml-pca.md b/doc/python/ml-pca.md
index f146e8384df..1776d3be393 100644
--- a/doc/python/ml-pca.md
+++ b/doc/python/ml-pca.md
@@ -136,18 +136,6 @@ fig.update_traces(diagonal_visible=False)
 fig.show()
 ```
 
-## PCA analysis in Dash
-
-[Dash](https://plotly.com/dash/) is the best way to build analytical apps in Python using Plotly figures. To run the app below, run `pip install dash`, click "Download" to get the code and run `python app.py`.
-
-Get started  with [the official Dash docs](https://dash.plotly.com/installation) and **learn how to effortlessly [style](https://plotly.com/dash/design-kit/) & [deploy](https://plotly.com/dash/app-manager/) apps like this with <a class="plotly-red" href="https://plotly.com/dash/">Dash Enterprise</a>.**
-
-
-```python hide_code=true
-from IPython.display import IFrame
-snippet_url = 'https://python-docs-dash-snippets.herokuapp.com/python-docs-dash-snippets/'
-IFrame(snippet_url + 'pca-visualization', width='100%', height=1200)
-```
 
 <div style="font-size: 0.9em;"><div style="width: calc(100% - 30px); box-shadow: none; border: thin solid rgb(229, 229, 229);"><div style="padding: 5px;"><div><p><strong>Sign up for Dash Club</strong> → Free cheat sheets plus updates from Chris Parmer and Adam Schroeder delivered to your inbox every two months. Includes tips and tricks, community apps, and deep dives into the Dash architecture.
 <u><a href="https://go.plotly.com/dash-club?utm_source=Dash+Club+2022&utm_medium=graphing_libraries&utm_content=inline">Join now</a></u>.</p></div></div></div></div>
diff --git a/doc/python/subplots.md b/doc/python/subplots.md
index 6842a650b50..b5711ee5de8 100644
--- a/doc/python/subplots.md
+++ b/doc/python/subplots.md
@@ -6,9 +6,9 @@ jupyter:
       extension: .md
       format_name: markdown
       format_version: '1.3'
-      jupytext_version: 1.14.1
+      jupytext_version: 1.16.4
   kernelspec:
-    display_name: Python 3
+    display_name: Python 3 (ipykernel)
     language: python
     name: python3
   language_info:
@@ -20,7 +20,7 @@ jupyter:
     name: python
     nbconvert_exporter: python
     pygments_lexer: ipython3
-    version: 3.8.8
+    version: 3.11.10
   plotly:
     description: How to make subplots in with Plotly's Python graphing library. Examples
       of stacked, custom-sized, gridded, and annotated subplots.
@@ -80,17 +80,17 @@ import plotly.graph_objects as go
 
 fig = make_subplots(rows=3, cols=1)
 
-fig.append_trace(go.Scatter(
+fig.add_trace(go.Scatter(
     x=[3, 4, 5],
     y=[1000, 1100, 1200],
 ), row=1, col=1)
 
-fig.append_trace(go.Scatter(
+fig.add_trace(go.Scatter(
     x=[2, 3, 4],
     y=[100, 110, 120],
 ), row=2, col=1)
 
-fig.append_trace(go.Scatter(
+fig.add_trace(go.Scatter(
     x=[0, 1, 2],
     y=[10, 11, 12]
 ), row=3, col=1)
diff --git a/doc/python/text-and-annotations.md b/doc/python/text-and-annotations.md
index ca8dbd63dfa..84521f34cd7 100644
--- a/doc/python/text-and-annotations.md
+++ b/doc/python/text-and-annotations.md
@@ -782,6 +782,66 @@ fig.add_annotation(
 
 fig.show()
 ```
+### Specifying Source Lines or Figure Notes on the Bottom of a Figure
+
+This example shows how to add a note about the data source or interpretation at the bottom of the figure. This example aligns the note in the bottom right corner using the title element and container coordinates and then uses an annotation to add a figure title. A near zero container coordinate is an easy and robust way to put text -- such as a source line or figure note -- at the bottom of a figure. It is easier to specify the bottom of the figure in container coordinates than using paper coordinates, since uncertainty about the size of legends and x-axis labels make the paper coordinate of the bottom of the figure uncertain. Making the y container coordinate very slightly positive avoids cutting off the descending strokes of letters like y, p, and q.  Only the title command supports container coordinates, so this example re-purposes the title element to insert the note and re-purposes an annotation element for the title. The top of the figure is typically less cluttered and more predictable than the bottom of the figure, so an annotation with its bottom at a paper y-coordinate slightly greater than 1 is a reasonable title location on many graphs.
+
+```python
+import plotly.express as px
+df = px.data.iris()
+fig.update_layout(
+        title=dict(text="Note: this is the Plotly title element.",
+                 # keeping this title string short avoids getting the text cut off in small windows
+                 # if you need longer text, consider 1) embedding your graphic on a web page and
+                 # putting the note in the HTML to use the browser's automated word wrap,
+                 # 2) using this approach and also specifying a graph width that shows the whole title,
+                 # or 3) using <BR> tags to wrap the text onto multiple lines
+                yref="container",
+                y=0.005,
+                 # The "paper" x-coordinates lets us align this with either the right or left
+                 # edge of the plot region. 
+                 # The code to align this flush with the right edge of the plot area is 
+                 # predictable and simple.  
+                 # Putting the title in the lower left corner, aligned with the left edge of the axis labeling would
+                 # require graph specific coordinate adjustments.
+                xref="paper",
+                xanchor="right",
+                x=1, 
+                font=dict(size=12)),
+                plot_bgcolor="white",
+
+  # We move the legend out of the right margin so the right-aligned note is 
+  # flush with the right most element of the graph.
+  # Here we put the legend in a corner of the graph region
+  # because it has consistent coordinates at all screen resolutions.
+  legend=dict(
+                yanchor="top",
+                y=1,
+                xanchor="right",
+                x=1,
+                borderwidth=1)
+                )
+
+# Insert a title by repurposing an annotation 
+fig.add_annotation(
+    yref="paper",
+    yanchor="bottom",
+    y=1.025,  # y = 1 is the top of the plot area; the top is typically uncluttered, so placing 
+              # the bottom of the title slightly above the graph region works on a wide variety of graphs
+            text="This title is a Plotly annotation",
+
+    # Center the title horizontally over the plot area
+    xref="paper",
+    xanchor="center",
+    x=0.5, 
+
+    showarrow=False,
+    font=dict(size=18)
+    )
+
+fig.show()
+```
+
 
 ### Customize Displayed Text with a Text Template
 
diff --git a/doc/requirements.txt b/doc/requirements.txt
index 4e3b17ef58b..65aa3f0aad4 100644
--- a/doc/requirements.txt
+++ b/doc/requirements.txt
@@ -1,4 +1,4 @@
-plotly==6.0.0
+plotly==6.0.1
 jupytext==1.16.4
 jupyter-client<7
 jupyter
diff --git a/js/install.json b/js/install.json
new file mode 100644
index 00000000000..556c5ebc790
--- /dev/null
+++ b/js/install.json
@@ -0,0 +1,9 @@
+{
+    "schemaVersion": 1,
+    "name": "jupyterlab-plotly",
+    "version": "6.0.1",
+    "jupyterlab": {
+      "mimeExtension": "lib/mimeExtension.js"
+    }
+}
+  
\ No newline at end of file
diff --git a/js/lib/mimeExtension.js b/js/lib/mimeExtension.js
new file mode 100644
index 00000000000..1bdbb0c3bd2
--- /dev/null
+++ b/js/lib/mimeExtension.js
@@ -0,0 +1,3865 @@
+var lB=Object.create;var TS=Object.defineProperty;var uB=Object.getOwnPropertyDescriptor;var cB=Object.getOwnPropertyNames;var fB=Object.getPrototypeOf,hB=Object.prototype.hasOwnProperty;var Tw=(Ft,Ae)=>()=>(Ae||Ft((Ae={exports:{}}).exports,Ae),Ae.exports);var dB=(Ft,Ae,wt,At)=>{if(Ae&&typeof Ae=="object"||typeof Ae=="function")for(let Vt of cB(Ae))!hB.call(Ft,Vt)&&Vt!==wt&&TS(Ft,Vt,{get:()=>Ae[Vt],enumerable:!(At=uB(Ae,Vt))||At.enumerable});return Ft};var Jv=(Ft,Ae,wt)=>(wt=Ft!=null?lB(fB(Ft)):{},dB(Ae||!Ft||!Ft.__esModule?TS(wt,"default",{value:Ft,enumerable:!0}):wt,Ft));var Lm=Tw((e_,AS)=>{(function(Ft,Ae){typeof e_=="object"&&typeof AS<"u"?Ae(e_):typeof define=="function"&&define.amd?define(["exports"],Ae):(Ft=typeof globalThis<"u"?globalThis:Ft||self,Ae(Ft.lumino_algorithm={}))})(e_,function(Ft){"use strict";Ft.ArrayExt=void 0,function(Xn){function zn(no,Ro,Qn=0,ta=-1){let ua=no.length;if(ua===0)return-1;Qn<0?Qn=Math.max(0,Qn+ua):Qn=Math.min(Qn,ua-1),ta<0?ta=Math.max(0,ta+ua):ta=Math.min(ta,ua-1);let jo;ta<Qn?jo=ta+1+(ua-Qn):jo=ta-Qn+1;for(let ms=0;ms<jo;++ms){let cc=(Qn+ms)%ua;if(no[cc]===Ro)return cc}return-1}Xn.firstIndexOf=zn;function $n(no,Ro,Qn=-1,ta=0){let ua=no.length;if(ua===0)return-1;Qn<0?Qn=Math.max(0,Qn+ua):Qn=Math.min(Qn,ua-1),ta<0?ta=Math.max(0,ta+ua):ta=Math.min(ta,ua-1);let jo;Qn<ta?jo=Qn+1+(ua-ta):jo=Qn-ta+1;for(let ms=0;ms<jo;++ms){let cc=(Qn-ms+ua)%ua;if(no[cc]===Ro)return cc}return-1}Xn.lastIndexOf=$n;function Ao(no,Ro,Qn=0,ta=-1){let ua=no.length;if(ua===0)return-1;Qn<0?Qn=Math.max(0,Qn+ua):Qn=Math.min(Qn,ua-1),ta<0?ta=Math.max(0,ta+ua):ta=Math.min(ta,ua-1);let jo;ta<Qn?jo=ta+1+(ua-Qn):jo=ta-Qn+1;for(let ms=0;ms<jo;++ms){let cc=(Qn+ms)%ua;if(Ro(no[cc],cc))return cc}return-1}Xn.findFirstIndex=Ao;function $s(no,Ro,Qn=-1,ta=0){let ua=no.length;if(ua===0)return-1;Qn<0?Qn=Math.max(0,Qn+ua):Qn=Math.min(Qn,ua-1),ta<0?ta=Math.max(0,ta+ua):ta=Math.min(ta,ua-1);let jo;Qn<ta?jo=Qn+1+(ua-ta):jo=Qn-ta+1;for(let ms=0;ms<jo;++ms){let cc=(Qn-ms+ua)%ua;if(Ro(no[cc],cc))return cc}return-1}Xn.findLastIndex=$s;function cl(no,Ro,Qn=0,ta=-1){let ua=Ao(no,Ro,Qn,ta);return ua!==-1?no[ua]:void 0}Xn.findFirstValue=cl;function jl(no,Ro,Qn=-1,ta=0){let ua=$s(no,Ro,Qn,ta);return ua!==-1?no[ua]:void 0}Xn.findLastValue=jl;function lu(no,Ro,Qn,ta=0,ua=-1){let jo=no.length;if(jo===0)return 0;ta<0?ta=Math.max(0,ta+jo):ta=Math.min(ta,jo-1),ua<0?ua=Math.max(0,ua+jo):ua=Math.min(ua,jo-1);let ms=ta,cc=ua-ta+1;for(;cc>0;){let wd=cc>>1,Np=ms+wd;Qn(no[Np],Ro)<0?(ms=Np+1,cc-=wd+1):cc=wd}return ms}Xn.lowerBound=lu;function uf(no,Ro,Qn,ta=0,ua=-1){let jo=no.length;if(jo===0)return 0;ta<0?ta=Math.max(0,ta+jo):ta=Math.min(ta,jo-1),ua<0?ua=Math.max(0,ua+jo):ua=Math.min(ua,jo-1);let ms=ta,cc=ua-ta+1;for(;cc>0;){let wd=cc>>1,Np=ms+wd;Qn(no[Np],Ro)>0?cc=wd:(ms=Np+1,cc-=wd+1)}return ms}Xn.upperBound=uf;function ju(no,Ro,Qn){if(no===Ro)return!0;if(no.length!==Ro.length)return!1;for(let ta=0,ua=no.length;ta<ua;++ta)if(Qn?!Qn(no[ta],Ro[ta]):no[ta]!==Ro[ta])return!1;return!0}Xn.shallowEqual=ju;function Tc(no,Ro={}){let{start:Qn,stop:ta,step:ua}=Ro;if(ua===void 0&&(ua=1),ua===0)throw new Error("Slice `step` cannot be zero.");let jo=no.length;Qn===void 0?Qn=ua<0?jo-1:0:Qn<0?Qn=Math.max(Qn+jo,ua<0?-1:0):Qn>=jo&&(Qn=ua<0?jo-1:jo),ta===void 0?ta=ua<0?-1:jo:ta<0?ta=Math.max(ta+jo,ua<0?-1:0):ta>=jo&&(ta=ua<0?jo-1:jo);let ms;ua<0&&ta>=Qn||ua>0&&Qn>=ta?ms=0:ua<0?ms=Math.floor((ta-Qn+1)/ua+1):ms=Math.floor((ta-Qn-1)/ua+1);let cc=[];for(let wd=0;wd<ms;++wd)cc[wd]=no[Qn+wd*ua];return cc}Xn.slice=Tc;function Vu(no,Ro,Qn){let ta=no.length;if(ta<=1||(Ro<0?Ro=Math.max(0,Ro+ta):Ro=Math.min(Ro,ta-1),Qn<0?Qn=Math.max(0,Qn+ta):Qn=Math.min(Qn,ta-1),Ro===Qn))return;let ua=no[Ro],jo=Ro<Qn?1:-1;for(let ms=Ro;ms!==Qn;ms+=jo)no[ms]=no[ms+jo];no[Qn]=ua}Xn.move=Vu;function Vl(no,Ro=0,Qn=-1){let ta=no.length;if(!(ta<=1))for(Ro<0?Ro=Math.max(0,Ro+ta):Ro=Math.min(Ro,ta-1),Qn<0?Qn=Math.max(0,Qn+ta):Qn=Math.min(Qn,ta-1);Ro<Qn;){let ua=no[Ro],jo=no[Qn];no[Ro++]=jo,no[Qn--]=ua}}Xn.reverse=Vl;function ho(no,Ro,Qn=0,ta=-1){let ua=no.length;if(ua<=1||(Qn<0?Qn=Math.max(0,Qn+ua):Qn=Math.min(Qn,ua-1),ta<0?ta=Math.max(0,ta+ua):ta=Math.min(ta,ua-1),Qn>=ta))return;let jo=ta-Qn+1;if(Ro>0?Ro=Ro%jo:Ro<0&&(Ro=(Ro%jo+jo)%jo),Ro===0)return;let ms=Qn+Ro;Vl(no,Qn,ms-1),Vl(no,ms,ta),Vl(no,Qn,ta)}Xn.rotate=ho;function bl(no,Ro,Qn=0,ta=-1){let ua=no.length;if(ua===0)return;Qn<0?Qn=Math.max(0,Qn+ua):Qn=Math.min(Qn,ua-1),ta<0?ta=Math.max(0,ta+ua):ta=Math.min(ta,ua-1);let jo;ta<Qn?jo=ta+1+(ua-Qn):jo=ta-Qn+1;for(let ms=0;ms<jo;++ms)no[(Qn+ms)%ua]=Ro}Xn.fill=bl;function Bm(no,Ro,Qn){let ta=no.length;Ro<0?Ro=Math.max(0,Ro+ta):Ro=Math.min(Ro,ta);for(let ua=ta;ua>Ro;--ua)no[ua]=no[ua-1];no[Ro]=Qn}Xn.insert=Bm;function Pd(no,Ro){let Qn=no.length;if(Ro<0&&(Ro+=Qn),Ro<0||Ro>=Qn)return;let ta=no[Ro];for(let ua=Ro+1;ua<Qn;++ua)no[ua-1]=no[ua];return no.length=Qn-1,ta}Xn.removeAt=Pd;function Op(no,Ro,Qn=0,ta=-1){let ua=zn(no,Ro,Qn,ta);return ua!==-1&&Pd(no,ua),ua}Xn.removeFirstOf=Op;function Sl(no,Ro,Qn=-1,ta=0){let ua=$n(no,Ro,Qn,ta);return ua!==-1&&Pd(no,ua),ua}Xn.removeLastOf=Sl;function lp(no,Ro,Qn=0,ta=-1){let ua=no.length;if(ua===0)return 0;Qn<0?Qn=Math.max(0,Qn+ua):Qn=Math.min(Qn,ua-1),ta<0?ta=Math.max(0,ta+ua):ta=Math.min(ta,ua-1);let jo=0;for(let ms=0;ms<ua;++ms)Qn<=ta&&ms>=Qn&&ms<=ta&&no[ms]===Ro||ta<Qn&&(ms<=ta||ms>=Qn)&&no[ms]===Ro?jo++:jo>0&&(no[ms-jo]=no[ms]);return jo>0&&(no.length=ua-jo),jo}Xn.removeAllOf=lp;function gf(no,Ro,Qn=0,ta=-1){let ua,jo=Ao(no,Ro,Qn,ta);return jo!==-1&&(ua=Pd(no,jo)),{index:jo,value:ua}}Xn.removeFirstWhere=gf;function $a(no,Ro,Qn=-1,ta=0){let ua,jo=$s(no,Ro,Qn,ta);return jo!==-1&&(ua=Pd(no,jo)),{index:jo,value:ua}}Xn.removeLastWhere=$a;function Iv(no,Ro,Qn=0,ta=-1){let ua=no.length;if(ua===0)return 0;Qn<0?Qn=Math.max(0,Qn+ua):Qn=Math.min(Qn,ua-1),ta<0?ta=Math.max(0,ta+ua):ta=Math.min(ta,ua-1);let jo=0;for(let ms=0;ms<ua;++ms)Qn<=ta&&ms>=Qn&&ms<=ta&&Ro(no[ms],ms)||ta<Qn&&(ms<=ta||ms>=Qn)&&Ro(no[ms],ms)?jo++:jo>0&&(no[ms-jo]=no[ms]);return jo>0&&(no.length=ua-jo),jo}Xn.removeAllWhere=Iv}(Ft.ArrayExt||(Ft.ArrayExt={}));function*Ae(...Xn){for(let zn of Xn)yield*zn}function*wt(){}function*At(Xn,zn=0){for(let $n of Xn)yield[zn++,$n]}function*Vt(Xn,zn){let $n=0;for(let Ao of Xn)zn(Ao,$n++)&&(yield Ao)}function rr(Xn,zn){let $n=0;for(let Ao of Xn)if(zn(Ao,$n++))return Ao}function hi(Xn,zn){let $n=0;for(let Ao of Xn)if(zn(Ao,$n++))return $n-1;return-1}function Xr(Xn,zn){let $n;for(let Ao of Xn){if($n===void 0){$n=Ao;continue}zn(Ao,$n)<0&&($n=Ao)}return $n}function ai(Xn,zn){let $n;for(let Ao of Xn){if($n===void 0){$n=Ao;continue}zn(Ao,$n)>0&&($n=Ao)}return $n}function Ti(Xn,zn){let $n=!0,Ao,$s;for(let cl of Xn)$n?(Ao=cl,$s=cl,$n=!1):zn(cl,Ao)<0?Ao=cl:zn(cl,$s)>0&&($s=cl);return $n?void 0:[Ao,$s]}function ei(Xn){return Array.from(Xn)}function di(Xn){let zn={};for(let[$n,Ao]of Xn)zn[$n]=Ao;return zn}function Ei(Xn,zn){let $n=0;for(let Ao of Xn)if(zn(Ao,$n++)===!1)return}function pi(Xn,zn){let $n=0;for(let Ao of Xn)if(zn(Ao,$n++)===!1)return!1;return!0}function Jr(Xn,zn){let $n=0;for(let Ao of Xn)if(zn(Ao,$n++))return!0;return!1}function*Le(Xn,zn){let $n=0;for(let Ao of Xn)yield zn(Ao,$n++)}function*Qi(Xn,zn,$n){zn===void 0?(zn=Xn,Xn=0,$n=1):$n===void 0&&($n=1);let Ao=En.rangeLength(Xn,zn,$n);for(let $s=0;$s<Ao;$s++)yield Xn+$n*$s}var En;(function(Xn){function zn($n,Ao,$s){return $s===0?1/0:$n>Ao&&$s>0||$n<Ao&&$s<0?0:Math.ceil((Ao-$n)/$s)}Xn.rangeLength=zn})(En||(En={}));function wn(Xn,zn,$n){let Ao=Xn[Symbol.iterator](),$s=0,cl=Ao.next();if(cl.done&&$n===void 0)throw new TypeError("Reduce of empty iterable with no initial value.");if(cl.done)return $n;let jl=Ao.next();if(jl.done&&$n===void 0)return cl.value;if(jl.done)return zn($n,cl.value,$s++);let lu;$n===void 0?lu=zn(cl.value,jl.value,$s++):lu=zn(zn($n,cl.value,$s++),jl.value,$s++);let uf;for(;!(uf=Ao.next()).done;)lu=zn(lu,uf.value,$s++);return lu}function*Wi(Xn,zn){for(;0<zn--;)yield Xn}function*gn(Xn){yield Xn}function*Sn(Xn){if(typeof Xn.retro=="function")yield*Xn.retro();else for(let zn=Xn.length-1;zn>-1;zn--)yield Xn[zn]}function Ji(Xn){let zn=[],$n=new Set,Ao=new Map;for(let jl of Xn)$s(jl);for(let[jl]of Ao)cl(jl);return zn;function $s(jl){let[lu,uf]=jl,ju=Ao.get(uf);ju?ju.push(lu):Ao.set(uf,[lu])}function cl(jl){if($n.has(jl))return;$n.add(jl);let lu=Ao.get(jl);if(lu)for(let uf of lu)cl(uf);zn.push(jl)}}function*za(Xn,zn){let $n=0;for(let Ao of Xn)$n++%zn===0&&(yield Ao)}Ft.StringExt=void 0,function(Xn){function zn(jl,lu,uf=0){let ju=new Array(lu.length);for(let Tc=0,Vu=uf,Vl=lu.length;Tc<Vl;++Tc,++Vu){if(Vu=jl.indexOf(lu[Tc],Vu),Vu===-1)return null;ju[Tc]=Vu}return ju}Xn.findIndices=zn;function $n(jl,lu,uf=0){let ju=zn(jl,lu,uf);if(!ju)return null;let Tc=0;for(let Vu=0,Vl=ju.length;Vu<Vl;++Vu){let ho=ju[Vu]-uf;Tc+=ho*ho}return{score:Tc,indices:ju}}Xn.matchSumOfSquares=$n;function Ao(jl,lu,uf=0){let ju=zn(jl,lu,uf);if(!ju)return null;let Tc=0,Vu=uf-1;for(let Vl=0,ho=ju.length;Vl<ho;++Vl){let bl=ju[Vl];Tc+=bl-Vu-1,Vu=bl}return{score:Tc,indices:ju}}Xn.matchSumOfDeltas=Ao;function $s(jl,lu,uf){let ju=[],Tc=0,Vu=0,Vl=lu.length;for(;Tc<Vl;){let ho=lu[Tc],bl=lu[Tc];for(;++Tc<Vl&&lu[Tc]===bl+1;)bl++;Vu<ho&&ju.push(jl.slice(Vu,ho)),ho<bl+1&&ju.push(uf(jl.slice(ho,bl+1))),Vu=bl+1}return Vu<jl.length&&ju.push(jl.slice(Vu)),ju}Xn.highlight=$s;function cl(jl,lu){return jl<lu?-1:jl>lu?1:0}Xn.cmp=cl}(Ft.StringExt||(Ft.StringExt={}));function*Ia(Xn,zn){if(zn<1)return;let $n=Xn[Symbol.iterator](),Ao;for(;0<zn--&&!(Ao=$n.next()).done;)yield Ao.value}function*To(...Xn){let zn=Xn.map(Ao=>Ao[Symbol.iterator]()),$n=zn.map(Ao=>Ao.next());for(;pi($n,Ao=>!Ao.done);$n=zn.map(Ao=>Ao.next()))yield $n.map(Ao=>Ao.value)}Ft.chain=Ae,Ft.each=Ei,Ft.empty=wt,Ft.enumerate=At,Ft.every=pi,Ft.filter=Vt,Ft.find=rr,Ft.findIndex=hi,Ft.map=Le,Ft.max=ai,Ft.min=Xr,Ft.minmax=Ti,Ft.once=gn,Ft.range=Qi,Ft.reduce=wn,Ft.repeat=Wi,Ft.retro=Sn,Ft.some=Jr,Ft.stride=za,Ft.take=Ia,Ft.toArray=ei,Ft.toObject=di,Ft.topologicSort=Ji,Ft.zip=To})});var r_=Tw((t_,MS)=>{(function(Ft,Ae){typeof t_=="object"&&typeof MS<"u"?Ae(t_,Lm()):typeof define=="function"&&define.amd?define(["exports","@lumino/algorithm"],Ae):(Ft=typeof globalThis<"u"?globalThis:Ft||self,Ae(Ft.lumino_coreutils={},Ft.lumino_algorithm))})(t_,function(Ft,Ae){"use strict";Ft.JSONExt=void 0,function(Ti){Ti.emptyObject=Object.freeze({}),Ti.emptyArray=Object.freeze([]);function ei(Wi){return Wi===null||typeof Wi=="boolean"||typeof Wi=="number"||typeof Wi=="string"}Ti.isPrimitive=ei;function di(Wi){return Array.isArray(Wi)}Ti.isArray=di;function Ei(Wi){return!ei(Wi)&&!di(Wi)}Ti.isObject=Ei;function pi(Wi,gn){if(Wi===gn)return!0;if(ei(Wi)||ei(gn))return!1;let Sn=di(Wi),Ji=di(gn);return Sn!==Ji?!1:Sn&&Ji?Le(Wi,gn):Qi(Wi,gn)}Ti.deepEqual=pi;function Jr(Wi){return ei(Wi)?Wi:di(Wi)?En(Wi):wn(Wi)}Ti.deepCopy=Jr;function Le(Wi,gn){if(Wi===gn)return!0;if(Wi.length!==gn.length)return!1;for(let Sn=0,Ji=Wi.length;Sn<Ji;++Sn)if(!pi(Wi[Sn],gn[Sn]))return!1;return!0}function Qi(Wi,gn){if(Wi===gn)return!0;for(let Sn in Wi)if(Wi[Sn]!==void 0&&!(Sn in gn))return!1;for(let Sn in gn)if(gn[Sn]!==void 0&&!(Sn in Wi))return!1;for(let Sn in Wi){let Ji=Wi[Sn],za=gn[Sn];if(!(Ji===void 0&&za===void 0)&&(Ji===void 0||za===void 0||!pi(Ji,za)))return!1}return!0}function En(Wi){let gn=new Array(Wi.length);for(let Sn=0,Ji=Wi.length;Sn<Ji;++Sn)gn[Sn]=Jr(Wi[Sn]);return gn}function wn(Wi){let gn={};for(let Sn in Wi){let Ji=Wi[Sn];Ji!==void 0&&(gn[Sn]=Jr(Ji))}return gn}}(Ft.JSONExt||(Ft.JSONExt={}));class wt{constructor(){this._types=[],this._values=[]}types(){return this._types.slice()}hasData(ei){return this._types.indexOf(ei)!==-1}getData(ei){let di=this._types.indexOf(ei);return di!==-1?this._values[di]:void 0}setData(ei,di){this.clearData(ei),this._types.push(ei),this._values.push(di)}clearData(ei){let di=this._types.indexOf(ei);di!==-1&&(this._types.splice(di,1),this._values.splice(di,1))}clear(){this._types.length=0,this._values.length=0}}class At{constructor(ei={}){this._application=null,this._validatePlugin=()=>!0,this._plugins=new Map,this._services=new Map,ei.validatePlugin&&(console.info("Plugins may be rejected by the custom validation plugin method."),this._validatePlugin=ei.validatePlugin)}get application(){return this._application}set application(ei){if(this._application!==null)throw Error("PluginRegistry.application is already set. It cannot be overridden.");this._application=ei}get deferredPlugins(){return Array.from(this._plugins).filter(([ei,di])=>di.autoStart==="defer").map(([ei,di])=>ei)}getPluginDescription(ei){var di,Ei;return(Ei=(di=this._plugins.get(ei))===null||di===void 0?void 0:di.description)!==null&&Ei!==void 0?Ei:""}hasPlugin(ei){return this._plugins.has(ei)}isPluginActivated(ei){var di,Ei;return(Ei=(di=this._plugins.get(ei))===null||di===void 0?void 0:di.activated)!==null&&Ei!==void 0?Ei:!1}listPlugins(){return Array.from(this._plugins.keys())}registerPlugin(ei){if(this._plugins.has(ei.id))throw new TypeError(`Plugin '${ei.id}' is already registered.`);if(!this._validatePlugin(ei))throw new Error(`Plugin '${ei.id}' is not valid.`);let di=Vt.createPluginData(ei);Vt.ensureNoCycle(di,this._plugins,this._services),di.provides&&this._services.set(di.provides,di.id),this._plugins.set(di.id,di)}registerPlugins(ei){for(let di of ei)this.registerPlugin(di)}deregisterPlugin(ei,di){let Ei=this._plugins.get(ei);if(Ei){if(Ei.activated&&!di)throw new Error(`Plugin '${ei}' is still active.`);this._plugins.delete(ei)}}async activatePlugin(ei){let di=this._plugins.get(ei);if(!di)throw new ReferenceError(`Plugin '${ei}' is not registered.`);if(di.activated)return;if(di.promise)return di.promise;let Ei=di.requires.map(Jr=>this.resolveRequiredService(Jr)),pi=di.optional.map(Jr=>this.resolveOptionalService(Jr));return di.promise=Promise.all([...Ei,...pi]).then(Jr=>di.activate.apply(void 0,[this.application,...Jr])).then(Jr=>{di.service=Jr,di.activated=!0,di.promise=null}).catch(Jr=>{throw di.promise=null,Jr}),di.promise}async activatePlugins(ei,di={}){switch(ei){case"defer":{let Ei=this.deferredPlugins.filter(pi=>this._plugins.get(pi).autoStart).map(pi=>this.activatePlugin(pi));await Promise.all(Ei);break}case"startUp":{let pi=Vt.collectStartupPlugins(this._plugins,di).map(async Jr=>{try{return await this.activatePlugin(Jr)}catch(Le){console.error(`Plugin '${Jr}' failed to activate.`,Le)}});await Promise.all(pi);break}}}async deactivatePlugin(ei){let di=this._plugins.get(ei);if(!di)throw new ReferenceError(`Plugin '${ei}' is not registered.`);if(!di.activated)return[];if(!di.deactivate)throw new TypeError(`Plugin '${ei}'#deactivate() method missing`);let Ei=Vt.findDependents(ei,this._plugins,this._services),pi=Ei.map(Jr=>this._plugins.get(Jr));for(let Jr of pi)if(!Jr.deactivate)throw new TypeError(`Plugin ${Jr.id}#deactivate() method missing (depends on ${ei})`);for(let Jr of pi){let Le=[...Jr.requires,...Jr.optional].map(Qi=>{let En=this._services.get(Qi);return En?this._plugins.get(En).service:null});await Jr.deactivate(this.application,...Le),Jr.service=null,Jr.activated=!1}return Ei.pop(),Ei}async resolveRequiredService(ei){let di=this._services.get(ei);if(!di)throw new TypeError(`No provider for: ${ei.name}.`);let Ei=this._plugins.get(di);return Ei.activated||await this.activatePlugin(di),Ei.service}async resolveOptionalService(ei){let di=this._services.get(ei);if(!di)return null;let Ei=this._plugins.get(di);if(!Ei.activated)try{await this.activatePlugin(di)}catch(pi){return console.error(pi),null}return Ei.service}}var Vt;(function(Ti){class ei{constructor(Qi){var En,wn,Wi,gn;this._activated=!1,this._promise=null,this._service=null,this.id=Qi.id,this.description=(En=Qi.description)!==null&&En!==void 0?En:"",this.activate=Qi.activate,this.deactivate=(wn=Qi.deactivate)!==null&&wn!==void 0?wn:null,this.provides=(Wi=Qi.provides)!==null&&Wi!==void 0?Wi:null,this.autoStart=(gn=Qi.autoStart)!==null&&gn!==void 0?gn:!1,this.requires=Qi.requires?Qi.requires.slice():[],this.optional=Qi.optional?Qi.optional.slice():[]}get activated(){return this._activated}set activated(Qi){this._activated=Qi}get service(){return this._service}set service(Qi){this._service=Qi}get promise(){return this._promise}set promise(Qi){this._promise=Qi}}function di(Le){return new ei(Le)}Ti.createPluginData=di;function Ei(Le,Qi,En){let wn=[...Le.requires,...Le.optional],Wi=Sn=>{if(Sn===Le.provides)return!0;let Ji=En.get(Sn);if(!Ji)return!1;let za=Qi.get(Ji),Ia=[...za.requires,...za.optional];return Ia.length===0?!1:(gn.push(Ji),Ia.some(Wi)?!0:(gn.pop(),!1))};if(!Le.provides||wn.length===0)return;let gn=[Le.id];if(wn.some(Wi))throw new ReferenceError(`Cycle detected: ${gn.join(" -> ")}.`)}Ti.ensureNoCycle=Ei;function pi(Le,Qi,En){let wn=new Array,Wi=Ia=>{let To=Qi.get(Ia),Xn=[...To.requires,...To.optional];wn.push(...Xn.reduce((zn,$n)=>{let Ao=En.get($n);return Ao&&zn.push([Ia,Ao]),zn},[]))};for(let Ia of Qi.keys())Wi(Ia);let gn=wn.filter(Ia=>Ia[1]===Le),Sn=0;for(;gn.length>Sn;){let Ia=gn.length,To=new Set(gn.map(Xn=>Xn[0]));for(let Xn of To)wn.filter(zn=>zn[1]===Xn).forEach(zn=>{gn.includes(zn)||gn.push(zn)});Sn=Ia}let Ji=Ae.topologicSort(gn),za=Ji.findIndex(Ia=>Ia===Le);return za===-1?[Le]:Ji.slice(0,za+1)}Ti.findDependents=pi;function Jr(Le,Qi){let En=new Set;for(let wn of Le.keys())Le.get(wn).autoStart===!0&&En.add(wn);if(Qi.startPlugins)for(let wn of Qi.startPlugins)En.add(wn);if(Qi.ignorePlugins)for(let wn of Qi.ignorePlugins)En.delete(wn);return Array.from(En)}Ti.collectStartupPlugins=Jr})(Vt||(Vt={}));class rr{constructor(){this.promise=new Promise((ei,di)=>{this._resolve=ei,this._reject=di})}resolve(ei){let di=this._resolve;di(ei)}reject(ei){let di=this._reject;di(ei)}}class hi{constructor(ei,di){this.name=ei,this.description=di??"",this._tokenStructuralPropertyT=null}}function Xr(Ti){let ei=0;for(let di=0,Ei=Ti.length;di<Ei;++di)di%4===0&&(ei=Math.random()*4294967295>>>0),Ti[di]=ei&255,ei>>>=8}Ft.Random=void 0,function(Ti){Ti.getRandomValues=(()=>{let ei=typeof window<"u"&&(window.crypto||window.msCrypto)||null;return ei&&typeof ei.getRandomValues=="function"?function(Ei){return ei.getRandomValues(Ei)}:Xr})()}(Ft.Random||(Ft.Random={}));function ai(Ti){let ei=new Uint8Array(16),di=new Array(256);for(let Ei=0;Ei<16;++Ei)di[Ei]="0"+Ei.toString(16);for(let Ei=16;Ei<256;++Ei)di[Ei]=Ei.toString(16);return function(){return Ti(ei),ei[6]=64|ei[6]&15,ei[8]=128|ei[8]&63,di[ei[0]]+di[ei[1]]+di[ei[2]]+di[ei[3]]+"-"+di[ei[4]]+di[ei[5]]+"-"+di[ei[6]]+di[ei[7]]+"-"+di[ei[8]]+di[ei[9]]+"-"+di[ei[10]]+di[ei[11]]+di[ei[12]]+di[ei[13]]+di[ei[14]]+di[ei[15]]}}Ft.UUID=void 0,function(Ti){Ti.uuid4=ai(Ft.Random.getRandomValues)}(Ft.UUID||(Ft.UUID={})),Ft.MimeData=wt,Ft.PluginRegistry=At,Ft.PromiseDelegate=rr,Ft.Token=hi})});var DS=Tw((RS,d_)=>{(function(Ft,Ae){typeof d_=="object"&&d_.exports?d_.exports=Ae():Ft.moduleName=Ae()})(typeof self<"u"?self:RS,()=>{"use strict";var Ft=(()=>{var Ae=Object.create,wt=Object.defineProperty,At=Object.defineProperties,Vt=Object.getOwnPropertyDescriptor,rr=Object.getOwnPropertyDescriptors,hi=Object.getOwnPropertyNames,Xr=Object.getOwnPropertySymbols,ai=Object.getPrototypeOf,Ti=Object.prototype.hasOwnProperty,ei=Object.prototype.propertyIsEnumerable,di=(Z,H,g)=>H in Z?wt(Z,H,{enumerable:!0,configurable:!0,writable:!0,value:g}):Z[H]=g,Ei=(Z,H)=>{for(var g in H||(H={}))Ti.call(H,g)&&di(Z,g,H[g]);if(Xr)for(var g of Xr(H))ei.call(H,g)&&di(Z,g,H[g]);return Z},pi=(Z,H)=>At(Z,rr(H)),Jr=(Z,H)=>function(){return Z&&(H=(0,Z[hi(Z)[0]])(Z=0)),H},Le=(Z,H)=>function(){return H||(0,Z[hi(Z)[0]])((H={exports:{}}).exports,H),H.exports},Qi=(Z,H)=>{for(var g in H)wt(Z,g,{get:H[g],enumerable:!0})},En=(Z,H,g,x)=>{if(H&&typeof H=="object"||typeof H=="function")for(let A of hi(H))!Ti.call(Z,A)&&A!==g&&wt(Z,A,{get:()=>H[A],enumerable:!(x=Vt(H,A))||x.enumerable});return Z},wn=(Z,H,g)=>(g=Z!=null?Ae(ai(Z)):{},En(H||!Z||!Z.__esModule?wt(g,"default",{value:Z,enumerable:!0}):g,Z)),Wi=Z=>En(wt({},"__esModule",{value:!0}),Z),gn=Le({"src/version.js"(Z){"use strict";Z.version="3.0.1"}}),Sn=Le({"node_modules/native-promise-only/lib/npo.src.js"(Z,H){(function(x,A,S){A[x]=A[x]||S(),typeof H<"u"&&H.exports&&(H.exports=A[x])})("Promise",typeof window<"u"?window:Z,function(){"use strict";var x,A,S,e=Object.prototype.toString,t=typeof setImmediate<"u"?function(_){return setImmediate(_)}:setTimeout;try{Object.defineProperty({},"x",{}),x=function(_,w,M,E){return Object.defineProperty(_,w,{value:M,writable:!0,configurable:E!==!1})}}catch{x=function(w,M,E){return w[M]=E,w}}S=function(){var _,w,M;function E(m,b){this.fn=m,this.self=b,this.next=void 0}return{add:function(b,v){M=new E(b,v),w?w.next=M:_=M,w=M,M=void 0},drain:function(){var b=_;for(_=w=A=void 0;b;)b.fn.call(b.self),b=b.next}}}();function r(l,_){S.add(l,_),A||(A=t(S.drain))}function o(l){var _,w=typeof l;return l!=null&&(w=="object"||w=="function")&&(_=l.then),typeof _=="function"?_:!1}function i(){for(var l=0;l<this.chain.length;l++)n(this,this.state===1?this.chain[l].success:this.chain[l].failure,this.chain[l]);this.chain.length=0}function n(l,_,w){var M,E;try{_===!1?w.reject(l.msg):(_===!0?M=l.msg:M=_.call(void 0,l.msg),M===w.promise?w.reject(TypeError("Promise-chain cycle")):(E=o(M))?E.call(M,w.resolve,w.reject):w.resolve(M))}catch(m){w.reject(m)}}function a(l){var _,w=this;if(!w.triggered){w.triggered=!0,w.def&&(w=w.def);try{(_=o(l))?r(function(){var M=new h(w);try{_.call(l,function(){a.apply(M,arguments)},function(){s.apply(M,arguments)})}catch(E){s.call(M,E)}}):(w.msg=l,w.state=1,w.chain.length>0&&r(i,w))}catch(M){s.call(new h(w),M)}}}function s(l){var _=this;_.triggered||(_.triggered=!0,_.def&&(_=_.def),_.msg=l,_.state=2,_.chain.length>0&&r(i,_))}function c(l,_,w,M){for(var E=0;E<_.length;E++)(function(b){l.resolve(_[b]).then(function(u){w(b,u)},M)})(E)}function h(l){this.def=l,this.triggered=!1}function p(l){this.promise=l,this.state=0,this.triggered=!1,this.chain=[],this.msg=void 0}function d(l){if(typeof l!="function")throw TypeError("Not a function");if(this.__NPO__!==0)throw TypeError("Not a promise");this.__NPO__=1;var _=new p(this);this.then=function(M,E){var m={success:typeof M=="function"?M:!0,failure:typeof E=="function"?E:!1};return m.promise=new this.constructor(function(v,u){if(typeof v!="function"||typeof u!="function")throw TypeError("Not a function");m.resolve=v,m.reject=u}),_.chain.push(m),_.state!==0&&r(i,_),m.promise},this.catch=function(M){return this.then(void 0,M)};try{l.call(void 0,function(M){a.call(_,M)},function(M){s.call(_,M)})}catch(w){s.call(_,w)}}var T=x({},"constructor",d,!1);return d.prototype=T,x(T,"__NPO__",0,!1),x(d,"resolve",function(_){var w=this;return _&&typeof _=="object"&&_.__NPO__===1?_:new w(function(E,m){if(typeof E!="function"||typeof m!="function")throw TypeError("Not a function");E(_)})}),x(d,"reject",function(_){return new this(function(M,E){if(typeof M!="function"||typeof E!="function")throw TypeError("Not a function");E(_)})}),x(d,"all",function(_){var w=this;return e.call(_)!="[object Array]"?w.reject(TypeError("Not an array")):_.length===0?w.resolve([]):new w(function(E,m){if(typeof E!="function"||typeof m!="function")throw TypeError("Not a function");var b=_.length,v=Array(b),u=0;c(w,_,function(f,P){v[f]=P,++u===b&&E(v)},m)})}),x(d,"race",function(_){var w=this;return e.call(_)!="[object Array]"?w.reject(TypeError("Not an array")):new w(function(E,m){if(typeof E!="function"||typeof m!="function")throw TypeError("Not a function");c(w,_,function(v,u){E(u)},m)})}),d})}}),Ji=Le({"node_modules/@plotly/d3/d3.js"(Z,H){(function(){var g={version:"3.8.2"},x=[].slice,A=function(de){return x.call(de)},S=self.document;function e(de){return de&&(de.ownerDocument||de.document||de).documentElement}function t(de){return de&&(de.ownerDocument&&de.ownerDocument.defaultView||de.document&&de||de.defaultView)}if(S)try{A(S.documentElement.childNodes)[0].nodeType}catch{A=function(Re){for(var Ke=Re.length,ft=new Array(Ke);Ke--;)ft[Ke]=Re[Ke];return ft}}if(Date.now||(Date.now=function(){return+new Date}),S)try{S.createElement("DIV").style.setProperty("opacity",0,"")}catch{var r=this.Element.prototype,o=r.setAttribute,i=r.setAttributeNS,n=this.CSSStyleDeclaration.prototype,a=n.setProperty;r.setAttribute=function(Re,Ke){o.call(this,Re,Ke+"")},r.setAttributeNS=function(Re,Ke,ft){i.call(this,Re,Ke,ft+"")},n.setProperty=function(Re,Ke,ft){a.call(this,Re,Ke+"",ft)}}g.ascending=s;function s(de,Re){return de<Re?-1:de>Re?1:de>=Re?0:NaN}g.descending=function(de,Re){return Re<de?-1:Re>de?1:Re>=de?0:NaN},g.min=function(de,Re){var Ke=-1,ft=de.length,dt,xt;if(arguments.length===1){for(;++Ke<ft;)if((xt=de[Ke])!=null&&xt>=xt){dt=xt;break}for(;++Ke<ft;)(xt=de[Ke])!=null&&dt>xt&&(dt=xt)}else{for(;++Ke<ft;)if((xt=Re.call(de,de[Ke],Ke))!=null&&xt>=xt){dt=xt;break}for(;++Ke<ft;)(xt=Re.call(de,de[Ke],Ke))!=null&&dt>xt&&(dt=xt)}return dt},g.max=function(de,Re){var Ke=-1,ft=de.length,dt,xt;if(arguments.length===1){for(;++Ke<ft;)if((xt=de[Ke])!=null&&xt>=xt){dt=xt;break}for(;++Ke<ft;)(xt=de[Ke])!=null&&xt>dt&&(dt=xt)}else{for(;++Ke<ft;)if((xt=Re.call(de,de[Ke],Ke))!=null&&xt>=xt){dt=xt;break}for(;++Ke<ft;)(xt=Re.call(de,de[Ke],Ke))!=null&&xt>dt&&(dt=xt)}return dt},g.extent=function(de,Re){var Ke=-1,ft=de.length,dt,xt,Jt;if(arguments.length===1){for(;++Ke<ft;)if((xt=de[Ke])!=null&&xt>=xt){dt=Jt=xt;break}for(;++Ke<ft;)(xt=de[Ke])!=null&&(dt>xt&&(dt=xt),Jt<xt&&(Jt=xt))}else{for(;++Ke<ft;)if((xt=Re.call(de,de[Ke],Ke))!=null&&xt>=xt){dt=Jt=xt;break}for(;++Ke<ft;)(xt=Re.call(de,de[Ke],Ke))!=null&&(dt>xt&&(dt=xt),Jt<xt&&(Jt=xt))}return[dt,Jt]};function c(de){return de===null?NaN:+de}function h(de){return!isNaN(de)}g.sum=function(de,Re){var Ke=0,ft=de.length,dt,xt=-1;if(arguments.length===1)for(;++xt<ft;)h(dt=+de[xt])&&(Ke+=dt);else for(;++xt<ft;)h(dt=+Re.call(de,de[xt],xt))&&(Ke+=dt);return Ke},g.mean=function(de,Re){var Ke=0,ft=de.length,dt,xt=-1,Jt=ft;if(arguments.length===1)for(;++xt<ft;)h(dt=c(de[xt]))?Ke+=dt:--Jt;else for(;++xt<ft;)h(dt=c(Re.call(de,de[xt],xt)))?Ke+=dt:--Jt;if(Jt)return Ke/Jt},g.quantile=function(de,Re){var Ke=(de.length-1)*Re+1,ft=Math.floor(Ke),dt=+de[ft-1],xt=Ke-ft;return xt?dt+xt*(de[ft]-dt):dt},g.median=function(de,Re){var Ke=[],ft=de.length,dt,xt=-1;if(arguments.length===1)for(;++xt<ft;)h(dt=c(de[xt]))&&Ke.push(dt);else for(;++xt<ft;)h(dt=c(Re.call(de,de[xt],xt)))&&Ke.push(dt);if(Ke.length)return g.quantile(Ke.sort(s),.5)},g.variance=function(de,Re){var Ke=de.length,ft=0,dt,xt,Jt=0,It=-1,sr=0;if(arguments.length===1)for(;++It<Ke;)h(dt=c(de[It]))&&(xt=dt-ft,ft+=xt/++sr,Jt+=xt*(dt-ft));else for(;++It<Ke;)h(dt=c(Re.call(de,de[It],It)))&&(xt=dt-ft,ft+=xt/++sr,Jt+=xt*(dt-ft));if(sr>1)return Jt/(sr-1)},g.deviation=function(){var de=g.variance.apply(this,arguments);return de&&Math.sqrt(de)};function p(de){return{left:function(Re,Ke,ft,dt){for(arguments.length<3&&(ft=0),arguments.length<4&&(dt=Re.length);ft<dt;){var xt=ft+dt>>>1;de(Re[xt],Ke)<0?ft=xt+1:dt=xt}return ft},right:function(Re,Ke,ft,dt){for(arguments.length<3&&(ft=0),arguments.length<4&&(dt=Re.length);ft<dt;){var xt=ft+dt>>>1;de(Re[xt],Ke)>0?dt=xt:ft=xt+1}return ft}}}var d=p(s);g.bisectLeft=d.left,g.bisect=g.bisectRight=d.right,g.bisector=function(de){return p(de.length===1?function(Re,Ke){return s(de(Re),Ke)}:de)},g.shuffle=function(de,Re,Ke){(ft=arguments.length)<3&&(Ke=de.length,ft<2&&(Re=0));for(var ft=Ke-Re,dt,xt;ft;)xt=Math.random()*ft--|0,dt=de[ft+Re],de[ft+Re]=de[xt+Re],de[xt+Re]=dt;return de},g.permute=function(de,Re){for(var Ke=Re.length,ft=new Array(Ke);Ke--;)ft[Ke]=de[Re[Ke]];return ft},g.pairs=function(de){for(var Re=0,Ke=de.length-1,ft,dt=de[0],xt=new Array(Ke<0?0:Ke);Re<Ke;)xt[Re]=[ft=dt,dt=de[++Re]];return xt},g.transpose=function(de){if(!(xt=de.length))return[];for(var Re=-1,Ke=g.min(de,T),ft=new Array(Ke);++Re<Ke;)for(var dt=-1,xt,Jt=ft[Re]=new Array(xt);++dt<xt;)Jt[dt]=de[dt][Re];return ft};function T(de){return de.length}g.zip=function(){return g.transpose(arguments)},g.keys=function(de){var Re=[];for(var Ke in de)Re.push(Ke);return Re},g.values=function(de){var Re=[];for(var Ke in de)Re.push(de[Ke]);return Re},g.entries=function(de){var Re=[];for(var Ke in de)Re.push({key:Ke,value:de[Ke]});return Re},g.merge=function(de){for(var Re=de.length,Ke,ft=-1,dt=0,xt,Jt;++ft<Re;)dt+=de[ft].length;for(xt=new Array(dt);--Re>=0;)for(Jt=de[Re],Ke=Jt.length;--Ke>=0;)xt[--dt]=Jt[Ke];return xt};var l=Math.abs;g.range=function(de,Re,Ke){if(arguments.length<3&&(Ke=1,arguments.length<2&&(Re=de,de=0)),(Re-de)/Ke===1/0)throw new Error("infinite range");var ft=[],dt=_(l(Ke)),xt=-1,Jt;if(de*=dt,Re*=dt,Ke*=dt,Ke<0)for(;(Jt=de+Ke*++xt)>Re;)ft.push(Jt/dt);else for(;(Jt=de+Ke*++xt)<Re;)ft.push(Jt/dt);return ft};function _(de){for(var Re=1;de*Re%1;)Re*=10;return Re}function w(de,Re){for(var Ke in Re)Object.defineProperty(de.prototype,Ke,{value:Re[Ke],enumerable:!1})}g.map=function(de,Re){var Ke=new M;if(de instanceof M)de.forEach(function(It,sr){Ke.set(It,sr)});else if(Array.isArray(de)){var ft=-1,dt=de.length,xt;if(arguments.length===1)for(;++ft<dt;)Ke.set(ft,de[ft]);else for(;++ft<dt;)Ke.set(Re.call(de,xt=de[ft],ft),xt)}else for(var Jt in de)Ke.set(Jt,de[Jt]);return Ke};function M(){this._=Object.create(null)}var E="__proto__",m="\0";w(M,{has:u,get:function(de){return this._[b(de)]},set:function(de,Re){return this._[b(de)]=Re},remove:y,keys:f,values:function(){var de=[];for(var Re in this._)de.push(this._[Re]);return de},entries:function(){var de=[];for(var Re in this._)de.push({key:v(Re),value:this._[Re]});return de},size:P,empty:L,forEach:function(de){for(var Re in this._)de.call(this,v(Re),this._[Re])}});function b(de){return(de+="")===E||de[0]===m?m+de:de}function v(de){return(de+="")[0]===m?de.slice(1):de}function u(de){return b(de)in this._}function y(de){return(de=b(de))in this._&&delete this._[de]}function f(){var de=[];for(var Re in this._)de.push(v(Re));return de}function P(){var de=0;for(var Re in this._)++de;return de}function L(){for(var de in this._)return!1;return!0}g.nest=function(){var de={},Re=[],Ke=[],ft,dt;function xt(It,sr,zr){if(zr>=Re.length)return dt?dt.call(de,sr):ft?sr.sort(ft):sr;for(var Or=-1,bi=sr.length,gi=Re[zr++],Ki,rn,Si,Ui=new M,Xi;++Or<bi;)(Xi=Ui.get(Ki=gi(rn=sr[Or])))?Xi.push(rn):Ui.set(Ki,[rn]);return It?(rn=It(),Si=function(ln,nn){rn.set(ln,xt(It,nn,zr))}):(rn={},Si=function(ln,nn){rn[ln]=xt(It,nn,zr)}),Ui.forEach(Si),rn}function Jt(It,sr){if(sr>=Re.length)return It;var zr=[],Or=Ke[sr++];return It.forEach(function(bi,gi){zr.push({key:bi,values:Jt(gi,sr)})}),Or?zr.sort(function(bi,gi){return Or(bi.key,gi.key)}):zr}return de.map=function(It,sr){return xt(sr,It,0)},de.entries=function(It){return Jt(xt(g.map,It,0),0)},de.key=function(It){return Re.push(It),de},de.sortKeys=function(It){return Ke[Re.length-1]=It,de},de.sortValues=function(It){return ft=It,de},de.rollup=function(It){return dt=It,de},de},g.set=function(de){var Re=new z;if(de)for(var Ke=0,ft=de.length;Ke<ft;++Ke)Re.add(de[Ke]);return Re};function z(){this._=Object.create(null)}w(z,{has:u,add:function(de){return this._[b(de+="")]=!0,de},remove:y,values:f,size:P,empty:L,forEach:function(de){for(var Re in this._)de.call(this,v(Re))}}),g.behavior={};function F(de){return de}g.rebind=function(de,Re){for(var Ke=1,ft=arguments.length,dt;++Ke<ft;)de[dt=arguments[Ke]]=O(de,Re,Re[dt]);return de};function O(de,Re,Ke){return function(){var ft=Ke.apply(Re,arguments);return ft===Re?de:ft}}function B(de,Re){if(Re in de)return Re;Re=Re.charAt(0).toUpperCase()+Re.slice(1);for(var Ke=0,ft=I.length;Ke<ft;++Ke){var dt=I[Ke]+Re;if(dt in de)return dt}}var I=["webkit","ms","moz","Moz","o","O"];function N(){}g.dispatch=function(){for(var de=new U,Re=-1,Ke=arguments.length;++Re<Ke;)de[arguments[Re]]=W(de);return de};function U(){}U.prototype.on=function(de,Re){var Ke=de.indexOf("."),ft="";if(Ke>=0&&(ft=de.slice(Ke+1),de=de.slice(0,Ke)),de)return arguments.length<2?this[de].on(ft):this[de].on(ft,Re);if(arguments.length===2){if(Re==null)for(de in this)this.hasOwnProperty(de)&&this[de].on(ft,null);return this}};function W(de){var Re=[],Ke=new M;function ft(){for(var dt=Re,xt=-1,Jt=dt.length,It;++xt<Jt;)(It=dt[xt].on)&&It.apply(this,arguments);return de}return ft.on=function(dt,xt){var Jt=Ke.get(dt),It;return arguments.length<2?Jt&&Jt.on:(Jt&&(Jt.on=null,Re=Re.slice(0,It=Re.indexOf(Jt)).concat(Re.slice(It+1)),Ke.remove(dt)),xt&&Re.push(Ke.set(dt,{on:xt})),de)},ft}g.event=null;function Q(){g.event.preventDefault()}function le(){for(var de=g.event,Re;Re=de.sourceEvent;)de=Re;return de}function se(de){for(var Re=new U,Ke=0,ft=arguments.length;++Ke<ft;)Re[arguments[Ke]]=W(Re);return Re.of=function(dt,xt){return function(Jt){try{var It=Jt.sourceEvent=g.event;Jt.target=de,g.event=Jt,Re[Jt.type].apply(dt,xt)}finally{g.event=It}}},Re}g.requote=function(de){return de.replace(fe,"\\$&")};var fe=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g,G={}.__proto__?function(de,Re){de.__proto__=Re}:function(de,Re){for(var Ke in Re)de[Ke]=Re[Ke]};function J(de){return G(de,ae),de}var $=function(de,Re){return Re.querySelector(de)},X=function(de,Re){return Re.querySelectorAll(de)},re=function(de,Re){var Ke=de.matches||de[B(de,"matchesSelector")];return re=function(ft,dt){return Ke.call(ft,dt)},re(de,Re)};typeof Sizzle=="function"&&($=function(de,Re){return Sizzle(de,Re)[0]||null},X=Sizzle,re=Sizzle.matchesSelector),g.selection=function(){return g.select(S.documentElement)};var ae=g.selection.prototype=[];ae.select=function(de){var Re=[],Ke,ft,dt,xt;de=j(de);for(var Jt=-1,It=this.length;++Jt<It;){Re.push(Ke=[]),Ke.parentNode=(dt=this[Jt]).parentNode;for(var sr=-1,zr=dt.length;++sr<zr;)(xt=dt[sr])?(Ke.push(ft=de.call(xt,xt.__data__,sr,Jt)),ft&&"__data__"in xt&&(ft.__data__=xt.__data__)):Ke.push(null)}return J(Re)};function j(de){return typeof de=="function"?de:function(){return $(de,this)}}ae.selectAll=function(de){var Re=[],Ke,ft;de=ee(de);for(var dt=-1,xt=this.length;++dt<xt;)for(var Jt=this[dt],It=-1,sr=Jt.length;++It<sr;)(ft=Jt[It])&&(Re.push(Ke=A(de.call(ft,ft.__data__,It,dt))),Ke.parentNode=ft);return J(Re)};function ee(de){return typeof de=="function"?de:function(){return X(de,this)}}var ne="http://www.w3.org/1999/xhtml",ce={svg:"http://www.w3.org/2000/svg",xhtml:ne,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};g.ns={prefix:ce,qualify:function(de){var Re=de.indexOf(":"),Ke=de;return Re>=0&&(Ke=de.slice(0,Re))!=="xmlns"&&(de=de.slice(Re+1)),ce.hasOwnProperty(Ke)?{space:ce[Ke],local:de}:de}},ae.attr=function(de,Re){if(arguments.length<2){if(typeof de=="string"){var Ke=this.node();return de=g.ns.qualify(de),de.local?Ke.getAttributeNS(de.space,de.local):Ke.getAttribute(de)}for(Re in de)this.each(_e(Re,de[Re]));return this}return this.each(_e(de,Re))};function _e(de,Re){de=g.ns.qualify(de);function Ke(){this.removeAttribute(de)}function ft(){this.removeAttributeNS(de.space,de.local)}function dt(){this.setAttribute(de,Re)}function xt(){this.setAttributeNS(de.space,de.local,Re)}function Jt(){var sr=Re.apply(this,arguments);sr==null?this.removeAttribute(de):this.setAttribute(de,sr)}function It(){var sr=Re.apply(this,arguments);sr==null?this.removeAttributeNS(de.space,de.local):this.setAttributeNS(de.space,de.local,sr)}return Re==null?de.local?ft:Ke:typeof Re=="function"?de.local?It:Jt:de.local?xt:dt}function we(de){return de.trim().replace(/\s+/g," ")}ae.classed=function(de,Re){if(arguments.length<2){if(typeof de=="string"){var Ke=this.node(),ft=(de=Ie(de)).length,dt=-1;if(Re=Ke.classList){for(;++dt<ft;)if(!Re.contains(de[dt]))return!1}else for(Re=Ke.getAttribute("class");++dt<ft;)if(!Oe(de[dt]).test(Re))return!1;return!0}for(Re in de)this.each(Xe(Re,de[Re]));return this}return this.each(Xe(de,Re))};function Oe(de){return new RegExp("(?:^|\\s+)"+g.requote(de)+"(?:\\s+|$)","g")}function Ie(de){return(de+"").trim().split(/^|\s+/)}function Xe(de,Re){de=Ie(de).map(tt);var Ke=de.length;function ft(){for(var xt=-1;++xt<Ke;)de[xt](this,Re)}function dt(){for(var xt=-1,Jt=Re.apply(this,arguments);++xt<Ke;)de[xt](this,Jt)}return typeof Re=="function"?dt:ft}function tt(de){var Re=Oe(de);return function(Ke,ft){if(dt=Ke.classList)return ft?dt.add(de):dt.remove(de);var dt=Ke.getAttribute("class")||"";ft?(Re.lastIndex=0,Re.test(dt)||Ke.setAttribute("class",we(dt+" "+de))):Ke.setAttribute("class",we(dt.replace(Re," ")))}}ae.style=function(de,Re,Ke){var ft=arguments.length;if(ft<3){if(typeof de!="string"){ft<2&&(Re="");for(Ke in de)this.each(rt(Ke,de[Ke],Re));return this}if(ft<2){var dt=this.node();return t(dt).getComputedStyle(dt,null).getPropertyValue(de)}Ke=""}return this.each(rt(de,Re,Ke))};function rt(de,Re,Ke){function ft(){this.style.removeProperty(de)}function dt(){this.style.setProperty(de,Re,Ke)}function xt(){var Jt=Re.apply(this,arguments);Jt==null?this.style.removeProperty(de):this.style.setProperty(de,Jt,Ke)}return Re==null?ft:typeof Re=="function"?xt:dt}ae.property=function(de,Re){if(arguments.length<2){if(typeof de=="string")return this.node()[de];for(Re in de)this.each(Je(Re,de[Re]));return this}return this.each(Je(de,Re))};function Je(de,Re){function Ke(){delete this[de]}function ft(){this[de]=Re}function dt(){var xt=Re.apply(this,arguments);xt==null?delete this[de]:this[de]=xt}return Re==null?Ke:typeof Re=="function"?dt:ft}ae.text=function(de){return arguments.length?this.each(typeof de=="function"?function(){var Re=de.apply(this,arguments);this.textContent=Re??""}:de==null?function(){this.textContent=""}:function(){this.textContent=de}):this.node().textContent},ae.html=function(de){return arguments.length?this.each(typeof de=="function"?function(){var Re=de.apply(this,arguments);this.innerHTML=Re??""}:de==null?function(){this.innerHTML=""}:function(){this.innerHTML=de}):this.node().innerHTML},ae.append=function(de){return de=ot(de),this.select(function(){return this.appendChild(de.apply(this,arguments))})};function ot(de){function Re(){var ft=this.ownerDocument,dt=this.namespaceURI;return dt===ne&&ft.documentElement.namespaceURI===ne?ft.createElement(de):ft.createElementNS(dt,de)}function Ke(){return this.ownerDocument.createElementNS(de.space,de.local)}return typeof de=="function"?de:(de=g.ns.qualify(de)).local?Ke:Re}ae.insert=function(de,Re){return de=ot(de),Re=j(Re),this.select(function(){return this.insertBefore(de.apply(this,arguments),Re.apply(this,arguments)||null)})},ae.remove=function(){return this.each(Me)};function Me(){var de=this.parentNode;de&&de.removeChild(this)}ae.data=function(de,Re){var Ke=-1,ft=this.length,dt,xt;if(!arguments.length){for(de=new Array(ft=(dt=this[0]).length);++Ke<ft;)(xt=dt[Ke])&&(de[Ke]=xt.__data__);return de}function Jt(Or,bi){var gi,Ki=Or.length,rn=bi.length,Si=Math.min(Ki,rn),Ui=new Array(rn),Xi=new Array(rn),ln=new Array(Ki),nn,ji;if(Re){var Kn=new M,ia=new Array(Ki),ga;for(gi=-1;++gi<Ki;)(nn=Or[gi])&&(Kn.has(ga=Re.call(nn,nn.__data__,gi))?ln[gi]=nn:Kn.set(ga,nn),ia[gi]=ga);for(gi=-1;++gi<rn;)(nn=Kn.get(ga=Re.call(bi,ji=bi[gi],gi)))?nn!==!0&&(Ui[gi]=nn,nn.__data__=ji):Xi[gi]=pe(ji),Kn.set(ga,!0);for(gi=-1;++gi<Ki;)gi in ia&&Kn.get(ia[gi])!==!0&&(ln[gi]=Or[gi])}else{for(gi=-1;++gi<Si;)nn=Or[gi],ji=bi[gi],nn?(nn.__data__=ji,Ui[gi]=nn):Xi[gi]=pe(ji);for(;gi<rn;++gi)Xi[gi]=pe(bi[gi]);for(;gi<Ki;++gi)ln[gi]=Or[gi]}Xi.update=Ui,Xi.parentNode=Ui.parentNode=ln.parentNode=Or.parentNode,It.push(Xi),sr.push(Ui),zr.push(ln)}var It=it([]),sr=J([]),zr=J([]);if(typeof de=="function")for(;++Ke<ft;)Jt(dt=this[Ke],de.call(dt,dt.parentNode.__data__,Ke));else for(;++Ke<ft;)Jt(dt=this[Ke],de);return sr.enter=function(){return It},sr.exit=function(){return zr},sr};function pe(de){return{__data__:de}}ae.datum=function(de){return arguments.length?this.property("__data__",de):this.property("__data__")},ae.filter=function(de){var Re=[],Ke,ft,dt;typeof de!="function"&&(de=ue(de));for(var xt=0,Jt=this.length;xt<Jt;xt++){Re.push(Ke=[]),Ke.parentNode=(ft=this[xt]).parentNode;for(var It=0,sr=ft.length;It<sr;It++)(dt=ft[It])&&de.call(dt,dt.__data__,It,xt)&&Ke.push(dt)}return J(Re)};function ue(de){return function(){return re(this,de)}}ae.order=function(){for(var de=-1,Re=this.length;++de<Re;)for(var Ke=this[de],ft=Ke.length-1,dt=Ke[ft],xt;--ft>=0;)(xt=Ke[ft])&&(dt&&dt!==xt.nextSibling&&dt.parentNode.insertBefore(xt,dt),dt=xt);return this},ae.sort=function(de){de=ze.apply(this,arguments);for(var Re=-1,Ke=this.length;++Re<Ke;)this[Re].sort(de);return this.order()};function ze(de){return arguments.length||(de=s),function(Re,Ke){return Re&&Ke?de(Re.__data__,Ke.__data__):!Re-!Ke}}ae.each=function(de){return Qe(this,function(Re,Ke,ft){de.call(Re,Re.__data__,Ke,ft)})};function Qe(de,Re){for(var Ke=0,ft=de.length;Ke<ft;Ke++)for(var dt=de[Ke],xt=0,Jt=dt.length,It;xt<Jt;xt++)(It=dt[xt])&&Re(It,xt,Ke);return de}ae.call=function(de){var Re=A(arguments);return de.apply(Re[0]=this,Re),this},ae.empty=function(){return!this.node()},ae.node=function(){for(var de=0,Re=this.length;de<Re;de++)for(var Ke=this[de],ft=0,dt=Ke.length;ft<dt;ft++){var xt=Ke[ft];if(xt)return xt}return null},ae.size=function(){var de=0;return Qe(this,function(){++de}),de};function it(de){return G(de,$e),de}var $e=[];g.selection.enter=it,g.selection.enter.prototype=$e,$e.append=ae.append,$e.empty=ae.empty,$e.node=ae.node,$e.call=ae.call,$e.size=ae.size,$e.select=function(de){for(var Re=[],Ke,ft,dt,xt,Jt,It=-1,sr=this.length;++It<sr;){dt=(xt=this[It]).update,Re.push(Ke=[]),Ke.parentNode=xt.parentNode;for(var zr=-1,Or=xt.length;++zr<Or;)(Jt=xt[zr])?(Ke.push(dt[zr]=ft=de.call(xt.parentNode,Jt.__data__,zr,It)),ft.__data__=Jt.__data__):Ke.push(null)}return J(Re)},$e.insert=function(de,Re){return arguments.length<2&&(Re=kt(this)),ae.insert.call(this,de,Re)};function kt(de){var Re,Ke;return function(ft,dt,xt){var Jt=de[xt].update,It=Jt.length,sr;for(xt!=Ke&&(Ke=xt,Re=0),dt>=Re&&(Re=dt+1);!(sr=Jt[Re])&&++Re<It;);return sr}}g.select=function(de){var Re;return typeof de=="string"?(Re=[$(de,S)],Re.parentNode=S.documentElement):(Re=[de],Re.parentNode=e(de)),J([Re])},g.selectAll=function(de){var Re;return typeof de=="string"?(Re=A(X(de,S)),Re.parentNode=S.documentElement):(Re=A(de),Re.parentNode=null),J([Re])},ae.on=function(de,Re,Ke){var ft=arguments.length;if(ft<3){if(typeof de!="string"){ft<2&&(Re=!1);for(Ke in de)this.each(Mt(Ke,de[Ke],Re));return this}if(ft<2)return(ft=this.node()["__on"+de])&&ft._;Ke=!1}return this.each(Mt(de,Re,Ke))};function Mt(de,Re,Ke){var ft="__on"+de,dt=de.indexOf("."),xt=jt;dt>0&&(de=de.slice(0,dt));var Jt=Bt.get(de);Jt&&(de=Jt,xt=cr);function It(){var Or=this[ft];Or&&(this.removeEventListener(de,Or,Or.$),delete this[ft])}function sr(){var Or=xt(Re,A(arguments));It.call(this),this.addEventListener(de,this[ft]=Or,Or.$=Ke),Or._=Re}function zr(){var Or=new RegExp("^__on([^.]+)"+g.requote(de)+"$"),bi;for(var gi in this)if(bi=gi.match(Or)){var Ki=this[gi];this.removeEventListener(bi[1],Ki,Ki.$),delete this[gi]}}return dt?Re?sr:It:Re?N:zr}var Bt=g.map({mouseenter:"mouseover",mouseleave:"mouseout"});S&&Bt.forEach(function(de){"on"+de in S&&Bt.remove(de)});function jt(de,Re){return function(Ke){var ft=g.event;g.event=Ke,Re[0]=this.__data__;try{de.apply(this,Re)}finally{g.event=ft}}}function cr(de,Re){var Ke=jt(de,Re);return function(ft){var dt=this,xt=ft.relatedTarget;(!xt||xt!==dt&&!(xt.compareDocumentPosition(dt)&8))&&Ke.call(dt,ft)}}var nr,Lr=0;function mr(de){var Re=".dragsuppress-"+ ++Lr,Ke="click"+Re,ft=g.select(t(de)).on("touchmove"+Re,Q).on("dragstart"+Re,Q).on("selectstart"+Re,Q);if(nr==null&&(nr="onselectstart"in de?!1:B(de.style,"userSelect")),nr){var dt=e(de).style,xt=dt[nr];dt[nr]="none"}return function(Jt){if(ft.on(Re,null),nr&&(dt[nr]=xt),Jt){var It=function(){ft.on(Ke,null)};ft.on(Ke,function(){Q(),It()},!0),setTimeout(It,0)}}}g.mouse=function(de){return mt(de,le())};var xr=this.navigator&&/WebKit/.test(this.navigator.userAgent)?-1:0;function mt(de,Re){Re.changedTouches&&(Re=Re.changedTouches[0]);var Ke=de.ownerSVGElement||de;if(Ke.createSVGPoint){var ft=Ke.createSVGPoint();if(xr<0){var dt=t(de);if(dt.scrollX||dt.scrollY){Ke=g.select("body").append("svg").style({position:"absolute",top:0,left:0,margin:0,padding:0,border:"none"},"important");var xt=Ke[0][0].getScreenCTM();xr=!(xt.f||xt.e),Ke.remove()}}return xr?(ft.x=Re.pageX,ft.y=Re.pageY):(ft.x=Re.clientX,ft.y=Re.clientY),ft=ft.matrixTransform(de.getScreenCTM().inverse()),[ft.x,ft.y]}var Jt=de.getBoundingClientRect();return[Re.clientX-Jt.left-de.clientLeft,Re.clientY-Jt.top-de.clientTop]}g.touch=function(de,Re,Ke){if(arguments.length<3&&(Ke=Re,Re=le().changedTouches),Re){for(var ft=0,dt=Re.length,xt;ft<dt;++ft)if((xt=Re[ft]).identifier===Ke)return mt(de,xt)}},g.behavior.drag=function(){var de=se(dt,"drag","dragstart","dragend"),Re=null,Ke=xt(N,g.mouse,t,"mousemove","mouseup"),ft=xt(Fe,g.touch,F,"touchmove","touchend");function dt(){this.on("mousedown.drag",Ke).on("touchstart.drag",ft)}function xt(Jt,It,sr,zr,Or){return function(){var bi=this,gi=g.event.target.correspondingElement||g.event.target,Ki=bi.parentNode,rn=de.of(bi,arguments),Si=0,Ui=Jt(),Xi=".drag"+(Ui==null?"":"-"+Ui),ln,nn=g.select(sr(gi)).on(zr+Xi,ia).on(Or+Xi,ga),ji=mr(gi),Kn=It(Ki,Ui);Re?(ln=Re.apply(bi,arguments),ln=[ln.x-Kn[0],ln.y-Kn[1]]):ln=[0,0],rn({type:"dragstart"});function ia(){var ka=It(Ki,Ui),ro,ao;ka&&(ro=ka[0]-Kn[0],ao=ka[1]-Kn[1],Si|=ro|ao,Kn=ka,rn({type:"drag",x:ka[0]+ln[0],y:ka[1]+ln[1],dx:ro,dy:ao}))}function ga(){It(Ki,Ui)&&(nn.on(zr+Xi,null).on(Or+Xi,null),ji(Si),rn({type:"dragend"}))}}}return dt.origin=function(Jt){return arguments.length?(Re=Jt,dt):Re},g.rebind(dt,de,"on")};function Fe(){return g.event.changedTouches[0].identifier}g.touches=function(de,Re){return arguments.length<2&&(Re=le().touches),Re?A(Re).map(function(Ke){var ft=mt(de,Ke);return ft.identifier=Ke.identifier,ft}):[]};var Ze=1e-6,Ne=Ze*Ze,Se=Math.PI,Ve=2*Se,Ee=Ve-Ze,be=Se/2,Ce=Se/180,et=180/Se;function ht(de){return de>0?1:de<0?-1:0}function yt(de,Re,Ke){return(Re[0]-de[0])*(Ke[1]-de[1])-(Re[1]-de[1])*(Ke[0]-de[0])}function Pt(de){return de>1?0:de<-1?Se:Math.acos(de)}function Ot(de){return de>1?be:de<-1?-be:Math.asin(de)}function Wt(de){return((de=Math.exp(de))-1/de)/2}function $t(de){return((de=Math.exp(de))+1/de)/2}function lr(de){return((de=Math.exp(2*de))-1)/(de+1)}function fi(de){return(de=Math.sin(de/2))*de}var Pi=Math.SQRT2,Bi=2,zi=4;g.interpolateZoom=function(de,Re){var Ke=de[0],ft=de[1],dt=de[2],xt=Re[0],Jt=Re[1],It=Re[2],sr=xt-Ke,zr=Jt-ft,Or=sr*sr+zr*zr,bi,gi;if(Or<Ne)gi=Math.log(It/dt)/Pi,bi=function(ln){return[Ke+ln*sr,ft+ln*zr,dt*Math.exp(Pi*ln*gi)]};else{var Ki=Math.sqrt(Or),rn=(It*It-dt*dt+zi*Or)/(2*dt*Bi*Ki),Si=(It*It-dt*dt-zi*Or)/(2*It*Bi*Ki),Ui=Math.log(Math.sqrt(rn*rn+1)-rn),Xi=Math.log(Math.sqrt(Si*Si+1)-Si);gi=(Xi-Ui)/Pi,bi=function(ln){var nn=ln*gi,ji=$t(Ui),Kn=dt/(Bi*Ki)*(ji*lr(Pi*nn+Ui)-Wt(Ui));return[Ke+Kn*sr,ft+Kn*zr,dt*ji/$t(Pi*nn+Ui)]}}return bi.duration=gi*1e3,bi},g.behavior.zoom=function(){var de={x:0,y:0,k:1},Re,Ke,ft,dt=[960,500],xt=en,Jt=250,It=0,sr="mousedown.zoom",zr="mousemove.zoom",Or="mouseup.zoom",bi,gi="touchstart.zoom",Ki,rn=se(nn,"zoomstart","zoom","zoomend"),Si,Ui,Xi,ln;Zi||(Zi="onwheel"in S?(Ri=function(){return-g.event.deltaY*(g.event.deltaMode?120:1)},"wheel"):"onmousewheel"in S?(Ri=function(){return g.event.wheelDelta},"mousewheel"):(Ri=function(){return-g.event.detail},"MozMousePixelScroll"));function nn(oa){oa.on(sr,ts).on(Zi+".zoom",nl).on("dblclick.zoom",xl).on(gi,ul)}nn.event=function(oa){oa.each(function(){var wo=rn.of(this,arguments),ws=de;Ms?g.select(this).transition().each("start.zoom",function(){de=this.__chart__||{x:0,y:0,k:1},ao(wo)}).tween("zoom:zoom",function(){var Cs=dt[0],Al=dt[1],Gl=Ke?Ke[0]:Cs/2,xu=Ke?Ke[1]:Al/2,Ul=g.interpolateZoom([(Gl-de.x)/de.k,(xu-de.y)/de.k,Cs/de.k],[(Gl-ws.x)/ws.k,(xu-ws.y)/ws.k,Cs/ws.k]);return function(_c){var er=Ul(_c),oi=Cs/er[2];this.__chart__=de={x:Gl-er[0]*oi,y:xu-er[1]*oi,k:oi},is(wo)}}).each("interrupt.zoom",function(){lo(wo)}).each("end.zoom",function(){lo(wo)}):(this.__chart__=de,ao(wo),is(wo),lo(wo))})},nn.translate=function(oa){return arguments.length?(de={x:+oa[0],y:+oa[1],k:de.k},ro(),nn):[de.x,de.y]},nn.scale=function(oa){return arguments.length?(de={x:de.x,y:de.y,k:null},ia(+oa),ro(),nn):de.k},nn.scaleExtent=function(oa){return arguments.length?(xt=oa==null?en:[+oa[0],+oa[1]],nn):xt},nn.center=function(oa){return arguments.length?(ft=oa&&[+oa[0],+oa[1]],nn):ft},nn.size=function(oa){return arguments.length?(dt=oa&&[+oa[0],+oa[1]],nn):dt},nn.duration=function(oa){return arguments.length?(Jt=+oa,nn):Jt},nn.x=function(oa){return arguments.length?(Ui=oa,Si=oa.copy(),de={x:0,y:0,k:1},nn):Ui},nn.y=function(oa){return arguments.length?(ln=oa,Xi=oa.copy(),de={x:0,y:0,k:1},nn):ln};function ji(oa){return[(oa[0]-de.x)/de.k,(oa[1]-de.y)/de.k]}function Kn(oa){return[oa[0]*de.k+de.x,oa[1]*de.k+de.y]}function ia(oa){de.k=Math.max(xt[0],Math.min(xt[1],oa))}function ga(oa,wo){wo=Kn(wo),de.x+=oa[0]-wo[0],de.y+=oa[1]-wo[1]}function ka(oa,wo,ws,Cs){oa.__chart__={x:de.x,y:de.y,k:de.k},ia(Math.pow(2,Cs)),ga(Ke=wo,ws),oa=g.select(oa),Jt>0&&(oa=oa.transition().duration(Jt)),oa.call(nn.event)}function ro(){Ui&&Ui.domain(Si.range().map(function(oa){return(oa-de.x)/de.k}).map(Si.invert)),ln&&ln.domain(Xi.range().map(function(oa){return(oa-de.y)/de.k}).map(Xi.invert))}function ao(oa){It++||oa({type:"zoomstart"})}function is(oa){ro(),oa({type:"zoom",scale:de.k,translate:[de.x,de.y]})}function lo(oa){--It||(oa({type:"zoomend"}),Ke=null)}function ts(){var oa=this,wo=rn.of(oa,arguments),ws=0,Cs=g.select(t(oa)).on(zr,xu).on(Or,Ul),Al=ji(g.mouse(oa)),Gl=mr(oa);ja.call(oa),ao(wo);function xu(){ws=1,ga(g.mouse(oa),Al),is(wo)}function Ul(){Cs.on(zr,null).on(Or,null),Gl(ws),lo(wo)}}function ul(){var oa=this,wo=rn.of(oa,arguments),ws={},Cs=0,Al,Gl=".zoom-"+g.event.changedTouches[0].identifier,xu="touchmove"+Gl,Ul="touchend"+Gl,_c=[],er=g.select(oa),oi=mr(oa);mn(),ao(wo),er.on(sr,null).on(gi,mn);function Li(){var Dn=g.touches(oa);return Al=de.k,Dn.forEach(function(Jn){Jn.identifier in ws&&(ws[Jn.identifier]=ji(Jn))}),Dn}function mn(){var Dn=g.event.target;g.select(Dn).on(xu,Fn).on(Ul,Rn),_c.push(Dn);for(var Jn=g.event.changedTouches,Sa=0,Ea=Jn.length;Sa<Ea;++Sa)ws[Jn[Sa].identifier]=null;var ca=Li(),$o=Date.now();if(ca.length===1){if($o-Ki<500){var wa=ca[0];ka(oa,wa,ws[wa.identifier],Math.floor(Math.log(de.k)/Math.LN2)+1),Q()}Ki=$o}else if(ca.length>1){var wa=ca[0],Ta=ca[1],ea=wa[0]-Ta[0],_n=wa[1]-Ta[1];Cs=ea*ea+_n*_n}}function Fn(){var Dn=g.touches(oa),Jn,Sa,Ea,ca;ja.call(oa);for(var $o=0,wa=Dn.length;$o<wa;++$o,ca=null)if(Ea=Dn[$o],ca=ws[Ea.identifier]){if(Sa)break;Jn=Ea,Sa=ca}if(ca){var Ta=(Ta=Ea[0]-Jn[0])*Ta+(Ta=Ea[1]-Jn[1])*Ta,ea=Cs&&Math.sqrt(Ta/Cs);Jn=[(Jn[0]+Ea[0])/2,(Jn[1]+Ea[1])/2],Sa=[(Sa[0]+ca[0])/2,(Sa[1]+ca[1])/2],ia(ea*Al)}Ki=null,ga(Jn,Sa),is(wo)}function Rn(){if(g.event.touches.length){for(var Dn=g.event.changedTouches,Jn=0,Sa=Dn.length;Jn<Sa;++Jn)delete ws[Dn[Jn].identifier];for(var Ea in ws)return void Li()}g.selectAll(_c).on(Gl,null),er.on(sr,ts).on(gi,ul),oi(),lo(wo)}}function nl(){var oa=rn.of(this,arguments);bi?clearTimeout(bi):(ja.call(this),Re=ji(Ke=ft||g.mouse(this)),ao(oa)),bi=setTimeout(function(){bi=null,lo(oa)},50),Q(),ia(Math.pow(2,Ri()*.002)*de.k),ga(Ke,Re),is(oa)}function xl(){var oa=g.mouse(this),wo=Math.log(de.k)/Math.LN2;ka(this,oa,ji(oa),g.event.shiftKey?Math.ceil(wo)-1:Math.floor(wo)+1)}return g.rebind(nn,rn,"on")};var en=[0,1/0],Ri,Zi;g.color=vn;function vn(){}vn.prototype.toString=function(){return this.rgb()+""},g.hsl=Xt;function Xt(de,Re,Ke){return this instanceof Xt?(this.h=+de,this.s=+Re,void(this.l=+Ke)):arguments.length<2?de instanceof Xt?new Xt(de.h,de.s,de.l):Qr(""+de,ci,Xt):new Xt(de,Re,Ke)}var Dt=Xt.prototype=new vn;Dt.brighter=function(de){return de=Math.pow(.7,arguments.length?de:1),new Xt(this.h,this.s,this.l/de)},Dt.darker=function(de){return de=Math.pow(.7,arguments.length?de:1),new Xt(this.h,this.s,de*this.l)},Dt.rgb=function(){return qt(this.h,this.s,this.l)};function qt(de,Re,Ke){var ft,dt;de=isNaN(de)?0:(de%=360)<0?de+360:de,Re=isNaN(Re)||Re<0?0:Re>1?1:Re,Ke=Ke<0?0:Ke>1?1:Ke,dt=Ke<=.5?Ke*(1+Re):Ke+Re-Ke*Re,ft=2*Ke-dt;function xt(It){return It>360?It-=360:It<0&&(It+=360),It<60?ft+(dt-ft)*It/60:It<180?dt:It<240?ft+(dt-ft)*(240-It)/60:ft}function Jt(It){return Math.round(xt(It)*255)}return new wr(Jt(de+120),Jt(de),Jt(de-120))}g.hcl=Ut;function Ut(de,Re,Ke){return this instanceof Ut?(this.h=+de,this.c=+Re,void(this.l=+Ke)):arguments.length<2?de instanceof Ut?new Ut(de.h,de.c,de.l):de instanceof _i?vt(de.l,de.a,de.b):vt((de=mi((de=g.rgb(de)).r,de.g,de.b)).l,de.a,de.b):new Ut(de,Re,Ke)}var br=Ut.prototype=new vn;br.brighter=function(de){return new Ut(this.h,this.c,Math.min(100,this.l+Yr*(arguments.length?de:1)))},br.darker=function(de){return new Ut(this.h,this.c,Math.max(0,this.l-Yr*(arguments.length?de:1)))},br.rgb=function(){return Zr(this.h,this.c,this.l).rgb()};function Zr(de,Re,Ke){return isNaN(de)&&(de=0),isNaN(Re)&&(Re=0),new _i(Ke,Math.cos(de*=Ce)*Re,Math.sin(de)*Re)}g.lab=_i;function _i(de,Re,Ke){return this instanceof _i?(this.l=+de,this.a=+Re,void(this.b=+Ke)):arguments.length<2?de instanceof _i?new _i(de.l,de.a,de.b):de instanceof Ut?Zr(de.h,de.c,de.l):mi((de=wr(de)).r,de.g,de.b):new _i(de,Re,Ke)}var Yr=18,Di=.95047,qi=1,$i=1.08883,Mi=_i.prototype=new vn;Mi.brighter=function(de){return new _i(Math.min(100,this.l+Yr*(arguments.length?de:1)),this.a,this.b)},Mi.darker=function(de){return new _i(Math.max(0,this.l-Yr*(arguments.length?de:1)),this.a,this.b)},Mi.rgb=function(){return sn(this.l,this.a,this.b)};function sn(de,Re,Ke){var ft=(de+16)/116,dt=ft+Re/500,xt=ft-Ke/200;return dt=pt(dt)*Di,ft=pt(ft)*qi,xt=pt(xt)*$i,new wr(Cr(3.2404542*dt-1.5371385*ft-.4985314*xt),Cr(-.969266*dt+1.8760108*ft+.041556*xt),Cr(.0556434*dt-.2040259*ft+1.0572252*xt))}function vt(de,Re,Ke){return de>0?new Ut(Math.atan2(Ke,Re)*et,Math.sqrt(Re*Re+Ke*Ke),de):new Ut(NaN,NaN,de)}function pt(de){return de>.206893034?de*de*de:(de-4/29)/7.787037}function kr(de){return de>.008856?Math.pow(de,1/3):7.787037*de+4/29}function Cr(de){return Math.round(255*(de<=.00304?12.92*de:1.055*Math.pow(de,1/2.4)-.055))}g.rgb=wr;function wr(de,Re,Ke){return this instanceof wr?(this.r=~~de,this.g=~~Re,void(this.b=~~Ke)):arguments.length<2?de instanceof wr?new wr(de.r,de.g,de.b):Qr(""+de,wr,qt):new wr(de,Re,Ke)}function Ar(de){return new wr(de>>16,de>>8&255,de&255)}function Er(de){return Ar(de)+""}var Br=wr.prototype=new vn;Br.brighter=function(de){de=Math.pow(.7,arguments.length?de:1);var Re=this.r,Ke=this.g,ft=this.b,dt=30;return!Re&&!Ke&&!ft?new wr(dt,dt,dt):(Re&&Re<dt&&(Re=dt),Ke&&Ke<dt&&(Ke=dt),ft&&ft<dt&&(ft=dt),new wr(Math.min(255,Re/de),Math.min(255,Ke/de),Math.min(255,ft/de)))},Br.darker=function(de){return de=Math.pow(.7,arguments.length?de:1),new wr(de*this.r,de*this.g,de*this.b)},Br.hsl=function(){return ci(this.r,this.g,this.b)},Br.toString=function(){return"#"+Pr(this.r)+Pr(this.g)+Pr(this.b)};function Pr(de){return de<16?"0"+Math.max(0,de).toString(16):Math.min(255,de).toString(16)}function Qr(de,Re,Ke){var ft=0,dt=0,xt=0,Jt,It,sr;if(Jt=/([a-z]+)\((.*)\)/.exec(de=de.toLowerCase()),Jt)switch(It=Jt[2].split(","),Jt[1]){case"hsl":return Ke(parseFloat(It[0]),parseFloat(It[1])/100,parseFloat(It[2])/100);case"rgb":return Re(ar(It[0]),ar(It[1]),ar(It[2]))}return(sr=gr.get(de))?Re(sr.r,sr.g,sr.b):(de!=null&&de.charAt(0)==="#"&&!isNaN(sr=parseInt(de.slice(1),16))&&(de.length===4?(ft=(sr&3840)>>4,ft=ft>>4|ft,dt=sr&240,dt=dt>>4|dt,xt=sr&15,xt=xt<<4|xt):de.length===7&&(ft=(sr&16711680)>>16,dt=(sr&65280)>>8,xt=sr&255)),Re(ft,dt,xt))}function ci(de,Re,Ke){var ft=Math.min(de/=255,Re/=255,Ke/=255),dt=Math.max(de,Re,Ke),xt=dt-ft,Jt,It,sr=(dt+ft)/2;return xt?(It=sr<.5?xt/(dt+ft):xt/(2-dt-ft),de==dt?Jt=(Re-Ke)/xt+(Re<Ke?6:0):Re==dt?Jt=(Ke-de)/xt+2:Jt=(de-Re)/xt+4,Jt*=60):(Jt=NaN,It=sr>0&&sr<1?0:Jt),new Xt(Jt,It,sr)}function mi(de,Re,Ke){de=Et(de),Re=Et(Re),Ke=Et(Ke);var ft=kr((.4124564*de+.3575761*Re+.1804375*Ke)/Di),dt=kr((.2126729*de+.7151522*Re+.072175*Ke)/qi),xt=kr((.0193339*de+.119192*Re+.9503041*Ke)/$i);return _i(116*dt-16,500*(ft-dt),200*(dt-xt))}function Et(de){return(de/=255)<=.04045?de/12.92:Math.pow((de+.055)/1.055,2.4)}function ar(de){var Re=parseFloat(de);return de.charAt(de.length-1)==="%"?Math.round(Re*2.55):Re}var gr=g.map({aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074});gr.forEach(function(de,Re){gr.set(de,Ar(Re))});function ti(de){return typeof de=="function"?de:function(){return de}}g.functor=ti,g.xhr=wi(F);function wi(de){return function(Re,Ke,ft){return arguments.length===2&&typeof Ke=="function"&&(ft=Ke,Ke=null),Gi(Re,Ke,de,ft)}}function Gi(de,Re,Ke,ft){var dt={},xt=g.dispatch("beforesend","progress","load","error"),Jt={},It=new XMLHttpRequest,sr=null;self.XDomainRequest&&!("withCredentials"in It)&&/^(http(s)?:)?\/\//.test(de)&&(It=new XDomainRequest),"onload"in It?It.onload=It.onerror=zr:It.onreadystatechange=function(){It.readyState>3&&zr()};function zr(){var Or=It.status,bi;if(!Or&&xi(It)||Or>=200&&Or<300||Or===304){try{bi=Ke.call(dt,It)}catch(gi){xt.error.call(dt,gi);return}xt.load.call(dt,bi)}else xt.error.call(dt,It)}return It.onprogress=function(Or){var bi=g.event;g.event=Or;try{xt.progress.call(dt,It)}finally{g.event=bi}},dt.header=function(Or,bi){return Or=(Or+"").toLowerCase(),arguments.length<2?Jt[Or]:(bi==null?delete Jt[Or]:Jt[Or]=bi+"",dt)},dt.mimeType=function(Or){return arguments.length?(Re=Or==null?null:Or+"",dt):Re},dt.responseType=function(Or){return arguments.length?(sr=Or,dt):sr},dt.response=function(Or){return Ke=Or,dt},["get","post"].forEach(function(Or){dt[Or]=function(){return dt.send.apply(dt,[Or].concat(A(arguments)))}}),dt.send=function(Or,bi,gi){if(arguments.length===2&&typeof bi=="function"&&(gi=bi,bi=null),It.open(Or,de,!0),Re!=null&&!("accept"in Jt)&&(Jt.accept=Re+",*/*"),It.setRequestHeader)for(var Ki in Jt)It.setRequestHeader(Ki,Jt[Ki]);return Re!=null&&It.overrideMimeType&&It.overrideMimeType(Re),sr!=null&&(It.responseType=sr),gi!=null&&dt.on("error",gi).on("load",function(rn){gi(null,rn)}),xt.beforesend.call(dt,It),It.send(bi??null),dt},dt.abort=function(){return It.abort(),dt},g.rebind(dt,xt,"on"),ft==null?dt:dt.get(Fi(ft))}function Fi(de){return de.length===1?function(Re,Ke){de(Re==null?Ke:null)}:de}function xi(de){var Re=de.responseType;return Re&&Re!=="text"?de.response:de.responseText}g.dsv=function(de,Re){var Ke=new RegExp('["'+de+`
+]`),ft=de.charCodeAt(0);function dt(zr,Or,bi){arguments.length<3&&(bi=Or,Or=null);var gi=Gi(zr,Re,Or==null?xt:Jt(Or),bi);return gi.row=function(Ki){return arguments.length?gi.response((Or=Ki)==null?xt:Jt(Ki)):Or},gi}function xt(zr){return dt.parse(zr.responseText)}function Jt(zr){return function(Or){return dt.parse(Or.responseText,zr)}}dt.parse=function(zr,Or){var bi;return dt.parseRows(zr,function(gi,Ki){if(bi)return bi(gi,Ki-1);var rn=function(Si){for(var Ui={},Xi=gi.length,ln=0;ln<Xi;++ln)Ui[gi[ln]]=Si[ln];return Ui};bi=Or?function(Si,Ui){return Or(rn(Si),Ui)}:rn})},dt.parseRows=function(zr,Or){var bi={},gi={},Ki=[],rn=zr.length,Si=0,Ui=0,Xi,ln;function nn(){if(Si>=rn)return gi;if(ln)return ln=!1,bi;var Kn=Si;if(zr.charCodeAt(Kn)===34){for(var ia=Kn;ia++<rn;)if(zr.charCodeAt(ia)===34){if(zr.charCodeAt(ia+1)!==34)break;++ia}Si=ia+2;var ga=zr.charCodeAt(ia+1);return ga===13?(ln=!0,zr.charCodeAt(ia+2)===10&&++Si):ga===10&&(ln=!0),zr.slice(Kn+1,ia).replace(/""/g,'"')}for(;Si<rn;){var ga=zr.charCodeAt(Si++),ka=1;if(ga===10)ln=!0;else if(ga===13)ln=!0,zr.charCodeAt(Si)===10&&(++Si,++ka);else if(ga!==ft)continue;return zr.slice(Kn,Si-ka)}return zr.slice(Kn)}for(;(Xi=nn())!==gi;){for(var ji=[];Xi!==bi&&Xi!==gi;)ji.push(Xi),Xi=nn();Or&&(ji=Or(ji,Ui++))==null||Ki.push(ji)}return Ki},dt.format=function(zr){if(Array.isArray(zr[0]))return dt.formatRows(zr);var Or=new z,bi=[];return zr.forEach(function(gi){for(var Ki in gi)Or.has(Ki)||bi.push(Or.add(Ki))}),[bi.map(sr).join(de)].concat(zr.map(function(gi){return bi.map(function(Ki){return sr(gi[Ki])}).join(de)})).join(`
+`)},dt.formatRows=function(zr){return zr.map(It).join(`
+`)};function It(zr){return zr.map(sr).join(de)}function sr(zr){return Ke.test(zr)?'"'+zr.replace(/\"/g,'""')+'"':zr}return dt},g.csv=g.dsv(",","text/csv"),g.tsv=g.dsv("	","text/tab-separated-values");var Ii,Bn,hn,ba,Aa=this[B(this,"requestAnimationFrame")]||function(de){setTimeout(de,17)};g.timer=function(){Va.apply(this,arguments)};function Va(de,Re,Ke){var ft=arguments.length;ft<2&&(Re=0),ft<3&&(Ke=Date.now());var dt=Ke+Re,xt={c:de,t:dt,n:null};return Bn?Bn.n=xt:Ii=xt,Bn=xt,hn||(ba=clearTimeout(ba),hn=1,Aa(Qa)),xt}function Qa(){var de=yo(),Re=Ga()-de;Re>24?(isFinite(Re)&&(clearTimeout(ba),ba=setTimeout(Qa,Re)),hn=0):(hn=1,Aa(Qa))}g.timer.flush=function(){yo(),Ga()};function yo(){for(var de=Date.now(),Re=Ii;Re;)de>=Re.t&&Re.c(de-Re.t)&&(Re.c=null),Re=Re.n;return de}function Ga(){for(var de,Re=Ii,Ke=1/0;Re;)Re.c?(Re.t<Ke&&(Ke=Re.t),Re=(de=Re).n):Re=de?de.n=Re.n:Ii=Re.n;return Bn=de,Ke}g.round=function(de,Re){return Re?Math.round(de*(Re=Math.pow(10,Re)))/Re:Math.round(de)},g.geom={};function Yo(de){return de[0]}function da(de){return de[1]}g.geom.hull=function(de){var Re=Yo,Ke=da;if(arguments.length)return ft(de);function ft(dt){if(dt.length<3)return[];var xt=ti(Re),Jt=ti(Ke),It,sr=dt.length,zr=[],Or=[];for(It=0;It<sr;It++)zr.push([+xt.call(this,dt[It],It),+Jt.call(this,dt[It],It),It]);for(zr.sort(es),It=0;It<sr;It++)Or.push([zr[It][0],-zr[It][1]]);var bi=vs(zr),gi=vs(Or),Ki=gi[0]===bi[0],rn=gi[gi.length-1]===bi[bi.length-1],Si=[];for(It=bi.length-1;It>=0;--It)Si.push(dt[zr[bi[It]][2]]);for(It=+Ki;It<gi.length-rn;++It)Si.push(dt[zr[gi[It]][2]]);return Si}return ft.x=function(dt){return arguments.length?(Re=dt,ft):Re},ft.y=function(dt){return arguments.length?(Ke=dt,ft):Ke},ft};function vs(de){for(var Re=de.length,Ke=[0,1],ft=2,dt=2;dt<Re;dt++){for(;ft>1&&yt(de[Ke[ft-2]],de[Ke[ft-1]],de[dt])<=0;)--ft;Ke[ft++]=dt}return Ke.slice(0,ft)}function es(de,Re){return de[0]-Re[0]||de[1]-Re[1]}g.geom.polygon=function(de){return G(de,bs),de};var bs=g.geom.polygon.prototype=[];bs.area=function(){for(var de=-1,Re=this.length,Ke,ft=this[Re-1],dt=0;++de<Re;)Ke=ft,ft=this[de],dt+=Ke[1]*ft[0]-Ke[0]*ft[1];return dt*.5},bs.centroid=function(de){var Re=-1,Ke=this.length,ft=0,dt=0,xt,Jt=this[Ke-1],It;for(arguments.length||(de=-1/(6*this.area()));++Re<Ke;)xt=Jt,Jt=this[Re],It=xt[0]*Jt[1]-Jt[0]*xt[1],ft+=(xt[0]+Jt[0])*It,dt+=(xt[1]+Jt[1])*It;return[ft*de,dt*de]},bs.clip=function(de){for(var Re,Ke=Za(de),ft=-1,dt=this.length-Za(this),xt,Jt,It=this[dt-1],sr,zr,Or;++ft<dt;){for(Re=de.slice(),de.length=0,sr=this[ft],zr=Re[(Jt=Re.length-Ke)-1],xt=-1;++xt<Jt;)Or=Re[xt],Xa(Or,It,sr)?(Xa(zr,It,sr)||de.push(Bo(zr,Or,It,sr)),de.push(Or)):Xa(zr,It,sr)&&de.push(Bo(zr,Or,It,sr)),zr=Or;Ke&&de.push(de[0]),It=sr}return de};function Xa(de,Re,Ke){return(Ke[0]-Re[0])*(de[1]-Re[1])<(Ke[1]-Re[1])*(de[0]-Re[0])}function Bo(de,Re,Ke,ft){var dt=de[0],xt=Ke[0],Jt=Re[0]-dt,It=ft[0]-xt,sr=de[1],zr=Ke[1],Or=Re[1]-sr,bi=ft[1]-zr,gi=(It*(sr-zr)-bi*(dt-xt))/(bi*Jt-It*Or);return[dt+gi*Jt,sr+gi*Or]}function Za(de){var Re=de[0],Ke=de[de.length-1];return!(Re[0]-Ke[0]||Re[1]-Ke[1])}var Qo,ss,gs,vo=[],zo,Ds,Hs=[];function Zs(){rl(this),this.edge=this.site=this.circle=null}function ps(de){var Re=vo.pop()||new Zs;return Re.site=de,Re}function bn(de){Ho(de),gs.remove(de),vo.push(de),rl(de)}function Ra(de){var Re=de.circle,Ke=Re.x,ft=Re.cy,dt={x:Ke,y:ft},xt=de.P,Jt=de.N,It=[de];bn(de);for(var sr=xt;sr.circle&&l(Ke-sr.circle.x)<Ze&&l(ft-sr.circle.cy)<Ze;)xt=sr.P,It.unshift(sr),bn(sr),sr=xt;It.unshift(sr),Ho(sr);for(var zr=Jt;zr.circle&&l(Ke-zr.circle.x)<Ze&&l(ft-zr.circle.cy)<Ze;)Jt=zr.N,It.push(zr),bn(zr),zr=Jt;It.push(zr),Ho(zr);var Or=It.length,bi;for(bi=1;bi<Or;++bi)zr=It[bi],sr=It[bi-1],kl(zr.edge,sr.site,zr.site,dt);sr=It[0],zr=It[Or-1],zr.edge=tu(sr.site,zr.site,null,dt),aa(sr),aa(zr)}function _l(de){for(var Re=de.x,Ke=de.y,ft,dt,xt,Jt,It=gs._;It;)if(xt=Ys(It,Ke)-Re,xt>Ze)It=It.L;else if(Jt=Re-ko(It,Ke),Jt>Ze){if(!It.R){ft=It;break}It=It.R}else{xt>-Ze?(ft=It.P,dt=It):Jt>-Ze?(ft=It,dt=It.N):ft=dt=It;break}var sr=ps(de);if(gs.insert(ft,sr),!(!ft&&!dt)){if(ft===dt){Ho(ft),dt=ps(ft.site),gs.insert(sr,dt),sr.edge=dt.edge=tu(ft.site,sr.site),aa(ft),aa(dt);return}if(!dt){sr.edge=tu(ft.site,sr.site);return}Ho(ft),Ho(dt);var zr=ft.site,Or=zr.x,bi=zr.y,gi=de.x-Or,Ki=de.y-bi,rn=dt.site,Si=rn.x-Or,Ui=rn.y-bi,Xi=2*(gi*Ui-Ki*Si),ln=gi*gi+Ki*Ki,nn=Si*Si+Ui*Ui,ji={x:(Ui*ln-Ki*nn)/Xi+Or,y:(gi*nn-Si*ln)/Xi+bi};kl(dt.edge,zr,rn,ji),sr.edge=tu(zr,de,null,ji),dt.edge=tu(de,rn,null,ji),aa(ft),aa(dt)}}function Ys(de,Re){var Ke=de.site,ft=Ke.x,dt=Ke.y,xt=dt-Re;if(!xt)return ft;var Jt=de.P;if(!Jt)return-1/0;Ke=Jt.site;var It=Ke.x,sr=Ke.y,zr=sr-Re;if(!zr)return It;var Or=It-ft,bi=1/xt-1/zr,gi=Or/zr;return bi?(-gi+Math.sqrt(gi*gi-2*bi*(Or*Or/(-2*zr)-sr+zr/2+dt-xt/2)))/bi+ft:(ft+It)/2}function ko(de,Re){var Ke=de.N;if(Ke)return Ys(Ke,Re);var ft=de.site;return ft.y===Re?ft.x:1/0}function Js(de){this.site=de,this.edges=[]}Js.prototype.prepare=function(){for(var de=this.edges,Re=de.length,Ke;Re--;)Ke=de[Re].edge,(!Ke.b||!Ke.a)&&de.splice(Re,1);return de.sort(ml),de.length};function ks(de){for(var Re=de[0][0],Ke=de[1][0],ft=de[0][1],dt=de[1][1],xt,Jt,It,sr,zr=ss,Or=zr.length,bi,gi,Ki,rn,Si,Ui;Or--;)if(bi=zr[Or],!(!bi||!bi.prepare()))for(Ki=bi.edges,rn=Ki.length,gi=0;gi<rn;)Ui=Ki[gi].end(),It=Ui.x,sr=Ui.y,Si=Ki[++gi%rn].start(),xt=Si.x,Jt=Si.y,(l(It-xt)>Ze||l(sr-Jt)>Ze)&&(Ki.splice(gi,0,new Hu(Ju(bi.site,Ui,l(It-Re)<Ze&&dt-sr>Ze?{x:Re,y:l(xt-Re)<Ze?Jt:dt}:l(sr-dt)<Ze&&Ke-It>Ze?{x:l(Jt-dt)<Ze?xt:Ke,y:dt}:l(It-Ke)<Ze&&sr-ft>Ze?{x:Ke,y:l(xt-Ke)<Ze?Jt:ft}:l(sr-ft)<Ze&&It-Re>Ze?{x:l(Jt-ft)<Ze?xt:Re,y:ft}:null),bi.site,null)),++rn)}function ml(de,Re){return Re.angle-de.angle}function El(){rl(this),this.x=this.y=this.arc=this.site=this.cy=null}function aa(de){var Re=de.P,Ke=de.N;if(!(!Re||!Ke)){var ft=Re.site,dt=de.site,xt=Ke.site;if(ft!==xt){var Jt=dt.x,It=dt.y,sr=ft.x-Jt,zr=ft.y-It,Or=xt.x-Jt,Ui=xt.y-It,bi=2*(sr*Ui-zr*Or);if(!(bi>=-Ne)){var gi=sr*sr+zr*zr,Ki=Or*Or+Ui*Ui,rn=(Ui*gi-zr*Ki)/bi,Si=(sr*Ki-Or*gi)/bi,Ui=Si+It,Xi=Hs.pop()||new El;Xi.arc=de,Xi.site=dt,Xi.x=rn+Jt,Xi.y=Ui+Math.sqrt(rn*rn+Si*Si),Xi.cy=Ui,de.circle=Xi;for(var ln=null,nn=Ds._;nn;)if(Xi.y<nn.y||Xi.y===nn.y&&Xi.x<=nn.x)if(nn.L)nn=nn.L;else{ln=nn.P;break}else if(nn.R)nn=nn.R;else{ln=nn;break}Ds.insert(ln,Xi),ln||(zo=Xi)}}}}function Ho(de){var Re=de.circle;Re&&(Re.P||(zo=Re.N),Ds.remove(Re),Hs.push(Re),rl(Re),de.circle=null)}function po(de,Re,Ke,ft){return function(dt){var xt=dt.a,Jt=dt.b,It=xt.x,sr=xt.y,zr=Jt.x,Or=Jt.y,bi=0,gi=1,Ki=zr-It,rn=Or-sr,Si;if(Si=de-It,!(!Ki&&Si>0)){if(Si/=Ki,Ki<0){if(Si<bi)return;Si<gi&&(gi=Si)}else if(Ki>0){if(Si>gi)return;Si>bi&&(bi=Si)}if(Si=Ke-It,!(!Ki&&Si<0)){if(Si/=Ki,Ki<0){if(Si>gi)return;Si>bi&&(bi=Si)}else if(Ki>0){if(Si<bi)return;Si<gi&&(gi=Si)}if(Si=Re-sr,!(!rn&&Si>0)){if(Si/=rn,rn<0){if(Si<bi)return;Si<gi&&(gi=Si)}else if(rn>0){if(Si>gi)return;Si>bi&&(bi=Si)}if(Si=ft-sr,!(!rn&&Si<0)){if(Si/=rn,rn<0){if(Si>gi)return;Si>bi&&(bi=Si)}else if(rn>0){if(Si<bi)return;Si<gi&&(gi=Si)}return bi>0&&(dt.a={x:It+bi*Ki,y:sr+bi*rn}),gi<1&&(dt.b={x:It+gi*Ki,y:sr+gi*rn}),dt}}}}}}function zs(de){for(var Re=Qo,Ke=po(de[0][0],de[0][1],de[1][0],de[1][1]),ft=Re.length,dt;ft--;)dt=Re[ft],(!hs(dt,de)||!Ke(dt)||l(dt.a.x-dt.b.x)<Ze&&l(dt.a.y-dt.b.y)<Ze)&&(dt.a=dt.b=null,Re.splice(ft,1))}function hs(de,Re){var Ke=de.b;if(Ke)return!0;var ft=de.a,dt=Re[0][0],xt=Re[1][0],Jt=Re[0][1],It=Re[1][1],sr=de.l,zr=de.r,Or=sr.x,bi=sr.y,gi=zr.x,Ki=zr.y,rn=(Or+gi)/2,Si=(bi+Ki)/2,Ui,Xi;if(Ki===bi){if(rn<dt||rn>=xt)return;if(Or>gi){if(!ft)ft={x:rn,y:Jt};else if(ft.y>=It)return;Ke={x:rn,y:It}}else{if(!ft)ft={x:rn,y:It};else if(ft.y<Jt)return;Ke={x:rn,y:Jt}}}else if(Ui=(Or-gi)/(Ki-bi),Xi=Si-Ui*rn,Ui<-1||Ui>1)if(Or>gi){if(!ft)ft={x:(Jt-Xi)/Ui,y:Jt};else if(ft.y>=It)return;Ke={x:(It-Xi)/Ui,y:It}}else{if(!ft)ft={x:(It-Xi)/Ui,y:It};else if(ft.y<Jt)return;Ke={x:(Jt-Xi)/Ui,y:Jt}}else if(bi<Ki){if(!ft)ft={x:dt,y:Ui*dt+Xi};else if(ft.x>=xt)return;Ke={x:xt,y:Ui*xt+Xi}}else{if(!ft)ft={x:xt,y:Ui*xt+Xi};else if(ft.x<dt)return;Ke={x:dt,y:Ui*dt+Xi}}return de.a=ft,de.b=Ke,!0}function to(de,Re){this.l=de,this.r=Re,this.a=this.b=null}function tu(de,Re,Ke,ft){var dt=new to(de,Re);return Qo.push(dt),Ke&&kl(dt,de,Re,Ke),ft&&kl(dt,Re,de,ft),ss[de.i].edges.push(new Hu(dt,de,Re)),ss[Re.i].edges.push(new Hu(dt,Re,de)),dt}function Ju(de,Re,Ke){var ft=new to(de,null);return ft.a=Re,ft.b=Ke,Qo.push(ft),ft}function kl(de,Re,Ke,ft){!de.a&&!de.b?(de.a=ft,de.l=Re,de.r=Ke):de.l===Ke?de.b=ft:de.a=ft}function Hu(de,Re,Ke){var ft=de.a,dt=de.b;this.edge=de,this.site=Re,this.angle=Ke?Math.atan2(Ke.y-Re.y,Ke.x-Re.x):de.l===Re?Math.atan2(dt.x-ft.x,ft.y-dt.y):Math.atan2(ft.x-dt.x,dt.y-ft.y)}Hu.prototype={start:function(){return this.edge.l===this.site?this.edge.a:this.edge.b},end:function(){return this.edge.l===this.site?this.edge.b:this.edge.a}};function Bl(){this._=null}function rl(de){de.U=de.C=de.L=de.R=de.P=de.N=null}Bl.prototype={insert:function(de,Re){var Ke,ft,dt;if(de){if(Re.P=de,Re.N=de.N,de.N&&(de.N.P=Re),de.N=Re,de.R){for(de=de.R;de.L;)de=de.L;de.L=Re}else de.R=Re;Ke=de}else this._?(de=Fc(this._),Re.P=null,Re.N=de,de.P=de.L=Re,Ke=de):(Re.P=Re.N=null,this._=Re,Ke=null);for(Re.L=Re.R=null,Re.U=Ke,Re.C=!0,de=Re;Ke&&Ke.C;)ft=Ke.U,Ke===ft.L?(dt=ft.R,dt&&dt.C?(Ke.C=dt.C=!1,ft.C=!0,de=ft):(de===Ke.R&&(au(this,Ke),de=Ke,Ke=de.U),Ke.C=!1,ft.C=!0,Gu(this,ft))):(dt=ft.L,dt&&dt.C?(Ke.C=dt.C=!1,ft.C=!0,de=ft):(de===Ke.L&&(Gu(this,Ke),de=Ke,Ke=de.U),Ke.C=!1,ft.C=!0,au(this,ft))),Ke=de.U;this._.C=!1},remove:function(de){de.N&&(de.N.P=de.P),de.P&&(de.P.N=de.N),de.N=de.P=null;var Re=de.U,Ke,ft=de.L,dt=de.R,xt,Jt;if(ft?dt?xt=Fc(dt):xt=ft:xt=dt,Re?Re.L===de?Re.L=xt:Re.R=xt:this._=xt,ft&&dt?(Jt=xt.C,xt.C=de.C,xt.L=ft,ft.U=xt,xt!==dt?(Re=xt.U,xt.U=de.U,de=xt.R,Re.L=de,xt.R=dt,dt.U=xt):(xt.U=Re,Re=xt,de=xt.R)):(Jt=de.C,de=xt),de&&(de.U=Re),!Jt){if(de&&de.C){de.C=!1;return}do{if(de===this._)break;if(de===Re.L){if(Ke=Re.R,Ke.C&&(Ke.C=!1,Re.C=!0,au(this,Re),Ke=Re.R),Ke.L&&Ke.L.C||Ke.R&&Ke.R.C){(!Ke.R||!Ke.R.C)&&(Ke.L.C=!1,Ke.C=!0,Gu(this,Ke),Ke=Re.R),Ke.C=Re.C,Re.C=Ke.R.C=!1,au(this,Re),de=this._;break}}else if(Ke=Re.L,Ke.C&&(Ke.C=!1,Re.C=!0,Gu(this,Re),Ke=Re.L),Ke.L&&Ke.L.C||Ke.R&&Ke.R.C){(!Ke.L||!Ke.L.C)&&(Ke.R.C=!1,Ke.C=!0,au(this,Ke),Ke=Re.L),Ke.C=Re.C,Re.C=Ke.L.C=!1,Gu(this,Re),de=this._;break}Ke.C=!0,de=Re,Re=Re.U}while(!de.C);de&&(de.C=!1)}}};function au(de,Re){var Ke=Re,ft=Re.R,dt=Ke.U;dt?dt.L===Ke?dt.L=ft:dt.R=ft:de._=ft,ft.U=dt,Ke.U=ft,Ke.R=ft.L,Ke.R&&(Ke.R.U=Ke),ft.L=Ke}function Gu(de,Re){var Ke=Re,ft=Re.L,dt=Ke.U;dt?dt.L===Ke?dt.L=ft:dt.R=ft:de._=ft,ft.U=dt,Ke.U=ft,Ke.L=ft.R,Ke.L&&(Ke.L.U=Ke),ft.R=Ke}function Fc(de){for(;de.L;)de=de.L;return de}function Qu(de,Re){var Ke=de.sort(fh).pop(),ft,dt,xt;for(Qo=[],ss=new Array(de.length),gs=new Bl,Ds=new Bl;;)if(xt=zo,Ke&&(!xt||Ke.y<xt.y||Ke.y===xt.y&&Ke.x<xt.x))(Ke.x!==ft||Ke.y!==dt)&&(ss[Ke.i]=new Js(Ke),_l(Ke),ft=Ke.x,dt=Ke.y),Ke=de.pop();else if(xt)Ra(xt.arc);else break;Re&&(zs(Re),ks(Re));var Jt={cells:ss,edges:Qo};return gs=Ds=Qo=ss=null,Jt}function fh(de,Re){return Re.y-de.y||Re.x-de.x}g.geom.voronoi=function(de){var Re=Yo,Ke=da,ft=Re,dt=Ke,xt=yf;if(de)return Jt(de);function Jt(sr){var zr=new Array(sr.length),Or=xt[0][0],bi=xt[0][1],gi=xt[1][0],Ki=xt[1][1];return Qu(It(sr),xt).cells.forEach(function(rn,Si){var Ui=rn.edges,Xi=rn.site,ln=zr[Si]=Ui.length?Ui.map(function(nn){var ji=nn.start();return[ji.x,ji.y]}):Xi.x>=Or&&Xi.x<=gi&&Xi.y>=bi&&Xi.y<=Ki?[[Or,Ki],[gi,Ki],[gi,bi],[Or,bi]]:[];ln.point=sr[Si]}),zr}function It(sr){return sr.map(function(zr,Or){return{x:Math.round(ft(zr,Or)/Ze)*Ze,y:Math.round(dt(zr,Or)/Ze)*Ze,i:Or}})}return Jt.links=function(sr){return Qu(It(sr)).edges.filter(function(zr){return zr.l&&zr.r}).map(function(zr){return{source:sr[zr.l.i],target:sr[zr.r.i]}})},Jt.triangles=function(sr){var zr=[];return Qu(It(sr)).cells.forEach(function(Or,bi){for(var gi=Or.site,Ki=Or.edges.sort(ml),rn=-1,Si=Ki.length,Ui,Xi,ln=Ki[Si-1].edge,nn=ln.l===gi?ln.r:ln.l;++rn<Si;)Ui=ln,Xi=nn,ln=Ki[rn].edge,nn=ln.l===gi?ln.r:ln.l,bi<Xi.i&&bi<nn.i&&Gs(gi,Xi,nn)<0&&zr.push([sr[bi],sr[Xi.i],sr[nn.i]])}),zr},Jt.x=function(sr){return arguments.length?(ft=ti(Re=sr),Jt):Re},Jt.y=function(sr){return arguments.length?(dt=ti(Ke=sr),Jt):Ke},Jt.clipExtent=function(sr){return arguments.length?(xt=sr??yf,Jt):xt===yf?null:xt},Jt.size=function(sr){return arguments.length?Jt.clipExtent(sr&&[[0,0],sr]):xt===yf?null:xt&&xt[1]},Jt};var yf=[[-1e6,-1e6],[1e6,1e6]];function Gs(de,Re,Ke){return(de.x-Ke.x)*(Re.y-de.y)-(de.x-Re.x)*(Ke.y-de.y)}g.geom.delaunay=function(de){return g.geom.voronoi().triangles(de)},g.geom.quadtree=function(de,Re,Ke,ft,dt){var xt=Yo,Jt=da,It;if(It=arguments.length)return xt=$c,Jt=kf,It===3&&(dt=Ke,ft=Re,Ke=Re=0),sr(de);function sr(zr){var Or,bi=ti(xt),gi=ti(Jt),Ki,rn,Si,Ui,Xi,ln,nn,ji;if(Re!=null)Xi=Re,ln=Ke,nn=ft,ji=dt;else if(nn=ji=-(Xi=ln=1/0),Ki=[],rn=[],Ui=zr.length,It)for(Si=0;Si<Ui;++Si)Or=zr[Si],Or.x<Xi&&(Xi=Or.x),Or.y<ln&&(ln=Or.y),Or.x>nn&&(nn=Or.x),Or.y>ji&&(ji=Or.y),Ki.push(Or.x),rn.push(Or.y);else for(Si=0;Si<Ui;++Si){var Kn=+bi(Or=zr[Si],Si),ia=+gi(Or,Si);Kn<Xi&&(Xi=Kn),ia<ln&&(ln=ia),Kn>nn&&(nn=Kn),ia>ji&&(ji=ia),Ki.push(Kn),rn.push(ia)}var ga=nn-Xi,ka=ji-ln;ga>ka?ji=ln+ga:nn=Xi+ka;function ro(lo,ts,ul,nl,xl,oa,wo,ws){if(!(isNaN(ul)||isNaN(nl)))if(lo.leaf){var Cs=lo.x,Al=lo.y;if(Cs!=null)if(l(Cs-ul)+l(Al-nl)<.01)ao(lo,ts,ul,nl,xl,oa,wo,ws);else{var Gl=lo.point;lo.x=lo.y=lo.point=null,ao(lo,Gl,Cs,Al,xl,oa,wo,ws),ao(lo,ts,ul,nl,xl,oa,wo,ws)}else lo.x=ul,lo.y=nl,lo.point=ts}else ao(lo,ts,ul,nl,xl,oa,wo,ws)}function ao(lo,ts,ul,nl,xl,oa,wo,ws){var Cs=(xl+wo)*.5,Al=(oa+ws)*.5,Gl=ul>=Cs,xu=nl>=Al,Ul=xu<<1|Gl;lo.leaf=!1,lo=lo.nodes[Ul]||(lo.nodes[Ul]=ru()),Gl?xl=Cs:wo=Cs,xu?oa=Al:ws=Al,ro(lo,ts,ul,nl,xl,oa,wo,ws)}var is=ru();if(is.add=function(lo){ro(is,lo,+bi(lo,++Si),+gi(lo,Si),Xi,ln,nn,ji)},is.visit=function(lo){Cl(lo,is,Xi,ln,nn,ji)},is.find=function(lo){return fc(is,lo[0],lo[1],Xi,ln,nn,ji)},Si=-1,Re==null){for(;++Si<Ui;)ro(is,zr[Si],Ki[Si],rn[Si],Xi,ln,nn,ji);--Si}else zr.forEach(is.add);return Ki=rn=zr=Or=null,is}return sr.x=function(zr){return arguments.length?(xt=zr,sr):xt},sr.y=function(zr){return arguments.length?(Jt=zr,sr):Jt},sr.extent=function(zr){return arguments.length?(zr==null?Re=Ke=ft=dt=null:(Re=+zr[0][0],Ke=+zr[0][1],ft=+zr[1][0],dt=+zr[1][1]),sr):Re==null?null:[[Re,Ke],[ft,dt]]},sr.size=function(zr){return arguments.length?(zr==null?Re=Ke=ft=dt=null:(Re=Ke=0,ft=+zr[0],dt=+zr[1]),sr):Re==null?null:[ft-Re,dt-Ke]},sr};function $c(de){return de.x}function kf(de){return de.y}function ru(){return{leaf:!0,nodes:[],point:null,x:null,y:null}}function Cl(de,Re,Ke,ft,dt,xt){if(!de(Re,Ke,ft,dt,xt)){var Jt=(Ke+dt)*.5,It=(ft+xt)*.5,sr=Re.nodes;sr[0]&&Cl(de,sr[0],Ke,ft,Jt,It),sr[1]&&Cl(de,sr[1],Jt,ft,dt,It),sr[2]&&Cl(de,sr[2],Ke,It,Jt,xt),sr[3]&&Cl(de,sr[3],Jt,It,dt,xt)}}function fc(de,Re,Ke,ft,dt,xt,Jt){var It=1/0,sr;return function zr(Or,bi,gi,Ki,rn){if(!(bi>xt||gi>Jt||Ki<ft||rn<dt)){if(Si=Or.point){var Si,Ui=Re-Or.x,Xi=Ke-Or.y,ln=Ui*Ui+Xi*Xi;if(ln<It){var nn=Math.sqrt(It=ln);ft=Re-nn,dt=Ke-nn,xt=Re+nn,Jt=Ke+nn,sr=Si}}for(var ji=Or.nodes,Kn=(bi+Ki)*.5,ia=(gi+rn)*.5,ga=Re>=Kn,ka=Ke>=ia,ro=ka<<1|ga,ao=ro+4;ro<ao;++ro)if(Or=ji[ro&3])switch(ro&3){case 0:zr(Or,bi,gi,Kn,ia);break;case 1:zr(Or,Kn,gi,Ki,ia);break;case 2:zr(Or,bi,ia,Kn,rn);break;case 3:zr(Or,Kn,ia,Ki,rn);break}}}(de,ft,dt,xt,Jt),sr}g.interpolateRgb=Ac;function Ac(de,Re){de=g.rgb(de),Re=g.rgb(Re);var Ke=de.r,ft=de.g,dt=de.b,xt=Re.r-Ke,Jt=Re.g-ft,It=Re.b-dt;return function(sr){return"#"+Pr(Math.round(Ke+xt*sr))+Pr(Math.round(ft+Jt*sr))+Pr(Math.round(dt+It*sr))}}g.interpolateObject=ol;function ol(de,Re){var Ke={},ft={},dt;for(dt in de)dt in Re?Ke[dt]=Wl(de[dt],Re[dt]):ft[dt]=de[dt];for(dt in Re)dt in de||(ft[dt]=Re[dt]);return function(xt){for(dt in Ke)ft[dt]=Ke[dt](xt);return ft}}g.interpolateNumber=Ll;function Ll(de,Re){return de=+de,Re=+Re,function(Ke){return de*(1-Ke)+Re*Ke}}g.interpolateString=Ks;function Ks(de,Re){var Ke=fl.lastIndex=hc.lastIndex=0,ft,dt,xt,Jt=-1,It=[],sr=[];for(de=de+"",Re=Re+"";(ft=fl.exec(de))&&(dt=hc.exec(Re));)(xt=dt.index)>Ke&&(xt=Re.slice(Ke,xt),It[Jt]?It[Jt]+=xt:It[++Jt]=xt),(ft=ft[0])===(dt=dt[0])?It[Jt]?It[Jt]+=dt:It[++Jt]=dt:(It[++Jt]=null,sr.push({i:Jt,x:Ll(ft,dt)})),Ke=hc.lastIndex;return Ke<Re.length&&(xt=Re.slice(Ke),It[Jt]?It[Jt]+=xt:It[++Jt]=xt),It.length<2?sr[0]?(Re=sr[0].x,function(zr){return Re(zr)+""}):function(){return Re}:(Re=sr.length,function(zr){for(var Or=0,bi;Or<Re;++Or)It[(bi=sr[Or]).i]=bi.x(zr);return It.join("")})}var fl=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,hc=new RegExp(fl.source,"g");g.interpolate=Wl;function Wl(de,Re){for(var Ke=g.interpolators.length,ft;--Ke>=0&&!(ft=g.interpolators[Ke](de,Re)););return ft}g.interpolators=[function(de,Re){var Ke=typeof Re;return(Ke==="string"?gr.has(Re.toLowerCase())||/^(#|rgb\(|hsl\()/i.test(Re)?Ac:Ks:Re instanceof vn?Ac:Array.isArray(Re)?ec:Ke==="object"&&isNaN(Re)?ol:Ll)(de,Re)}],g.interpolateArray=ec;function ec(de,Re){var Ke=[],ft=[],dt=de.length,xt=Re.length,Jt=Math.min(de.length,Re.length),It;for(It=0;It<Jt;++It)Ke.push(Wl(de[It],Re[It]));for(;It<dt;++It)ft[It]=de[It];for(;It<xt;++It)ft[It]=Re[It];return function(sr){for(It=0;It<Jt;++It)ft[It]=Ke[It](sr);return ft}}var hl=function(){return F},jh=g.map({linear:hl,poly:Uf,quad:function(){return ff},cubic:function(){return tc},sin:function(){return Bc},exp:function(){return hf},circle:function(){return Xl},elastic:rh,back:jf,bounce:function(){return Cf}}),ys=g.map({in:F,out:Us,"in-out":Wo,"out-in":function(de){return Wo(Us(de))}});g.ease=function(de){var Re=de.indexOf("-"),Ke=Re>=0?de.slice(0,Re):de,ft=Re>=0?de.slice(Re+1):"in";return Ke=jh.get(Ke)||hl,ft=ys.get(ft)||F,Lh(ft(Ke.apply(null,x.call(arguments,1))))};function Lh(de){return function(Re){return Re<=0?0:Re>=1?1:de(Re)}}function Us(de){return function(Re){return 1-de(1-Re)}}function Wo(de){return function(Re){return .5*(Re<.5?de(2*Re):2-de(2-2*Re))}}function ff(de){return de*de}function tc(de){return de*de*de}function yu(de){if(de<=0)return 0;if(de>=1)return 1;var Re=de*de,Ke=Re*de;return 4*(de<.5?Ke:3*(de-Re)+Ke-.75)}function Uf(de){return function(Re){return Math.pow(Re,de)}}function Bc(de){return 1-Math.cos(de*be)}function hf(de){return Math.pow(2,10*(de-1))}function Xl(de){return 1-Math.sqrt(1-de*de)}function rh(de,Re){var Ke;return arguments.length<2&&(Re=.45),arguments.length?Ke=Re/Ve*Math.asin(1/de):(de=1,Ke=Re/4),function(ft){return 1+de*Math.pow(2,-10*ft)*Math.sin((ft-Ke)*Ve/Re)}}function jf(de){return de||(de=1.70158),function(Re){return Re*Re*((de+1)*Re-de)}}function Cf(de){return de<1/2.75?7.5625*de*de:de<2/2.75?7.5625*(de-=1.5/2.75)*de+.75:de<2.5/2.75?7.5625*(de-=2.25/2.75)*de+.9375:7.5625*(de-=2.625/2.75)*de+.984375}g.interpolateHcl=Jc;function Jc(de,Re){de=g.hcl(de),Re=g.hcl(Re);var Ke=de.h,ft=de.c,dt=de.l,xt=Re.h-Ke,Jt=Re.c-ft,It=Re.l-dt;return isNaN(Jt)&&(Jt=0,ft=isNaN(ft)?Re.c:ft),isNaN(xt)?(xt=0,Ke=isNaN(Ke)?Re.h:Ke):xt>180?xt-=360:xt<-180&&(xt+=360),function(sr){return Zr(Ke+xt*sr,ft+Jt*sr,dt+It*sr)+""}}g.interpolateHsl=Vf;function Vf(de,Re){de=g.hsl(de),Re=g.hsl(Re);var Ke=de.h,ft=de.s,dt=de.l,xt=Re.h-Ke,Jt=Re.s-ft,It=Re.l-dt;return isNaN(Jt)&&(Jt=0,ft=isNaN(ft)?Re.s:ft),isNaN(xt)?(xt=0,Ke=isNaN(Ke)?Re.h:Ke):xt>180?xt-=360:xt<-180&&(xt+=360),function(sr){return qt(Ke+xt*sr,ft+Jt*sr,dt+It*sr)+""}}g.interpolateLab=ih;function ih(de,Re){de=g.lab(de),Re=g.lab(Re);var Ke=de.l,ft=de.a,dt=de.b,xt=Re.l-Ke,Jt=Re.a-ft,It=Re.b-dt;return function(sr){return sn(Ke+xt*sr,ft+Jt*sr,dt+It*sr)+""}}g.interpolateRound=rc;function rc(de,Re){return Re-=de,function(Ke){return Math.round(de+Re*Ke)}}g.transform=function(de){var Re=S.createElementNS(g.ns.prefix.svg,"g");return(g.transform=function(Ke){if(Ke!=null){Re.setAttribute("transform",Ke);var ft=Re.transform.baseVal.consolidate()}return new Lf(ft?ft.matrix:_f)})(de)};function Lf(de){var Re=[de.a,de.b],Ke=[de.c,de.d],ft=Qc(Re),dt=Oc(Re,Ke),xt=Qc(Pu(Ke,Re,-dt))||0;Re[0]*Ke[1]<Ke[0]*Re[1]&&(Re[0]*=-1,Re[1]*=-1,ft*=-1,dt*=-1),this.rotate=(ft?Math.atan2(Re[1],Re[0]):Math.atan2(-Ke[0],Ke[1]))*et,this.translate=[de.e,de.f],this.scale=[ft,xt],this.skew=xt?Math.atan2(dt,xt)*et:0}Lf.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};function Oc(de,Re){return de[0]*Re[0]+de[1]*Re[1]}function Qc(de){var Re=Math.sqrt(Oc(de,de));return Re&&(de[0]/=Re,de[1]/=Re),Re}function Pu(de,Re,Ke){return de[0]+=Ke*Re[0],de[1]+=Ke*Re[1],de}var _f={a:1,b:0,c:0,d:1,e:0,f:0};g.interpolateTransform=df;function Nc(de){return de.length?de.pop()+",":""}function Qs(de,Re,Ke,ft){if(de[0]!==Re[0]||de[1]!==Re[1]){var dt=Ke.push("translate(",null,",",null,")");ft.push({i:dt-4,x:Ll(de[0],Re[0])},{i:dt-2,x:Ll(de[1],Re[1])})}else(Re[0]||Re[1])&&Ke.push("translate("+Re+")")}function qf(de,Re,Ke,ft){de!==Re?(de-Re>180?Re+=360:Re-de>180&&(de+=360),ft.push({i:Ke.push(Nc(Ke)+"rotate(",null,")")-2,x:Ll(de,Re)})):Re&&Ke.push(Nc(Ke)+"rotate("+Re+")")}function Ph(de,Re,Ke,ft){de!==Re?ft.push({i:Ke.push(Nc(Ke)+"skewX(",null,")")-2,x:Ll(de,Re)}):Re&&Ke.push(Nc(Ke)+"skewX("+Re+")")}function nh(de,Re,Ke,ft){if(de[0]!==Re[0]||de[1]!==Re[1]){var dt=Ke.push(Nc(Ke)+"scale(",null,",",null,")");ft.push({i:dt-4,x:Ll(de[0],Re[0])},{i:dt-2,x:Ll(de[1],Re[1])})}else(Re[0]!==1||Re[1]!==1)&&Ke.push(Nc(Ke)+"scale("+Re+")")}function df(de,Re){var Ke=[],ft=[];return de=g.transform(de),Re=g.transform(Re),Qs(de.translate,Re.translate,Ke,ft),qf(de.rotate,Re.rotate,Ke,ft),Ph(de.skew,Re.skew,Ke,ft),nh(de.scale,Re.scale,Ke,ft),de=Re=null,function(dt){for(var xt=-1,Jt=ft.length,It;++xt<Jt;)Ke[(It=ft[xt]).i]=It.x(dt);return Ke.join("")}}function hh(de,Re){return Re=(Re-=de=+de)||1/Re,function(Ke){return(Ke-de)/Re}}function Iu(de,Re){return Re=(Re-=de=+de)||1/Re,function(Ke){return Math.max(0,Math.min(1,(Ke-de)/Re))}}g.layout={},g.layout.bundle=function(){return function(de){for(var Re=[],Ke=-1,ft=de.length;++Ke<ft;)Re.push(ah(de[Ke]));return Re}};function ah(de){for(var Re=de.source,Ke=de.target,ft=Ru(Re,Ke),dt=[Re];Re!==ft;)Re=Re.parent,dt.push(Re);for(var xt=dt.length;Ke!==ft;)dt.splice(xt,0,Ke),Ke=Ke.parent;return dt}function cu(de){for(var Re=[],Ke=de.parent;Ke!=null;)Re.push(de),de=Ke,Ke=Ke.parent;return Re.push(de),Re}function Ru(de,Re){if(de===Re)return de;for(var Ke=cu(de),ft=cu(Re),dt=Ke.pop(),xt=ft.pop(),Jt=null;dt===xt;)Jt=dt,dt=Ke.pop(),xt=ft.pop();return Jt}g.layout.chord=function(){var de={},Re,Ke,ft,dt,xt=0,Jt,It,sr;function zr(){var bi={},gi=[],Ki=g.range(dt),rn=[],Si,Ui,Xi,ln,nn;for(Re=[],Ke=[],Si=0,ln=-1;++ln<dt;){for(Ui=0,nn=-1;++nn<dt;)Ui+=ft[ln][nn];gi.push(Ui),rn.push(g.range(dt)),Si+=Ui}for(Jt&&Ki.sort(function(is,lo){return Jt(gi[is],gi[lo])}),It&&rn.forEach(function(is,lo){is.sort(function(ts,ul){return It(ft[lo][ts],ft[lo][ul])})}),Si=(Ve-xt*dt)/Si,Ui=0,ln=-1;++ln<dt;){for(Xi=Ui,nn=-1;++nn<dt;){var ji=Ki[ln],Kn=rn[ji][nn],ia=ft[ji][Kn],ga=Ui,ka=Ui+=ia*Si;bi[ji+"-"+Kn]={index:ji,subindex:Kn,startAngle:ga,endAngle:ka,value:ia}}Ke[ji]={index:ji,startAngle:Xi,endAngle:Ui,value:gi[ji]},Ui+=xt}for(ln=-1;++ln<dt;)for(nn=ln-1;++nn<dt;){var ro=bi[ln+"-"+nn],ao=bi[nn+"-"+ln];(ro.value||ao.value)&&Re.push(ro.value<ao.value?{source:ao,target:ro}:{source:ro,target:ao})}sr&&Or()}function Or(){Re.sort(function(bi,gi){return sr((bi.source.value+bi.target.value)/2,(gi.source.value+gi.target.value)/2)})}return de.matrix=function(bi){return arguments.length?(dt=(ft=bi)&&ft.length,Re=Ke=null,de):ft},de.padding=function(bi){return arguments.length?(xt=bi,Re=Ke=null,de):xt},de.sortGroups=function(bi){return arguments.length?(Jt=bi,Re=Ke=null,de):Jt},de.sortSubgroups=function(bi){return arguments.length?(It=bi,Re=null,de):It},de.sortChords=function(bi){return arguments.length?(sr=bi,Re&&Or(),de):sr},de.chords=function(){return Re||zr(),Re},de.groups=function(){return Ke||zr(),Ke},de},g.layout.force=function(){var de={},Re=g.dispatch("start","tick","end"),Ke,ft=[1,1],dt,xt,Jt=.9,It=Pl,sr=oh,zr=-30,Or=dh,bi=.1,gi=.64,Ki=[],rn=[],Si,Ui,Xi;function ln(ji){return function(Kn,ia,ga,ka){if(Kn.point!==ji){var ro=Kn.cx-ji.x,ao=Kn.cy-ji.y,is=ka-ia,lo=ro*ro+ao*ao;if(is*is/gi<lo){if(lo<Or){var ts=Kn.charge/lo;ji.px-=ro*ts,ji.py-=ao*ts}return!0}if(Kn.point&&lo&&lo<Or){var ts=Kn.pointCharge/lo;ji.px-=ro*ts,ji.py-=ao*ts}}return!Kn.charge}}de.tick=function(){if((xt*=.99)<.005)return Ke=null,Re.end({type:"end",alpha:xt=0}),!0;var ji=Ki.length,Kn=rn.length,ia,ga,ka,ro,ao,is,lo,ts,ul;for(ga=0;ga<Kn;++ga)ka=rn[ga],ro=ka.source,ao=ka.target,ts=ao.x-ro.x,ul=ao.y-ro.y,(is=ts*ts+ul*ul)&&(is=xt*Ui[ga]*((is=Math.sqrt(is))-Si[ga])/is,ts*=is,ul*=is,ao.x-=ts*(lo=ro.weight+ao.weight?ro.weight/(ro.weight+ao.weight):.5),ao.y-=ul*lo,ro.x+=ts*(lo=1-lo),ro.y+=ul*lo);if((lo=xt*bi)&&(ts=ft[0]/2,ul=ft[1]/2,ga=-1,lo))for(;++ga<ji;)ka=Ki[ga],ka.x+=(ts-ka.x)*lo,ka.y+=(ul-ka.y)*lo;if(zr)for(wu(ia=g.geom.quadtree(Ki),xt,Xi),ga=-1;++ga<ji;)(ka=Ki[ga]).fixed||ia.visit(ln(ka));for(ga=-1;++ga<ji;)ka=Ki[ga],ka.fixed?(ka.x=ka.px,ka.y=ka.py):(ka.x-=(ka.px-(ka.px=ka.x))*Jt,ka.y-=(ka.py-(ka.py=ka.y))*Jt);Re.tick({type:"tick",alpha:xt})},de.nodes=function(ji){return arguments.length?(Ki=ji,de):Ki},de.links=function(ji){return arguments.length?(rn=ji,de):rn},de.size=function(ji){return arguments.length?(ft=ji,de):ft},de.linkDistance=function(ji){return arguments.length?(It=typeof ji=="function"?ji:+ji,de):It},de.distance=de.linkDistance,de.linkStrength=function(ji){return arguments.length?(sr=typeof ji=="function"?ji:+ji,de):sr},de.friction=function(ji){return arguments.length?(Jt=+ji,de):Jt},de.charge=function(ji){return arguments.length?(zr=typeof ji=="function"?ji:+ji,de):zr},de.chargeDistance=function(ji){return arguments.length?(Or=ji*ji,de):Math.sqrt(Or)},de.gravity=function(ji){return arguments.length?(bi=+ji,de):bi},de.theta=function(ji){return arguments.length?(gi=ji*ji,de):Math.sqrt(gi)},de.alpha=function(ji){return arguments.length?(ji=+ji,xt?ji>0?xt=ji:(Ke.c=null,Ke.t=NaN,Ke=null,Re.end({type:"end",alpha:xt=0})):ji>0&&(Re.start({type:"start",alpha:xt=ji}),Ke=Va(de.tick)),de):xt},de.start=function(){var ji,Kn=Ki.length,ia=rn.length,ga=ft[0],ka=ft[1],ro,ao;for(ji=0;ji<Kn;++ji)(ao=Ki[ji]).index=ji,ao.weight=0;for(ji=0;ji<ia;++ji)ao=rn[ji],typeof ao.source=="number"&&(ao.source=Ki[ao.source]),typeof ao.target=="number"&&(ao.target=Ki[ao.target]),++ao.source.weight,++ao.target.weight;for(ji=0;ji<Kn;++ji)ao=Ki[ji],isNaN(ao.x)&&(ao.x=is("x",ga)),isNaN(ao.y)&&(ao.y=is("y",ka)),isNaN(ao.px)&&(ao.px=ao.x),isNaN(ao.py)&&(ao.py=ao.y);if(Si=[],typeof It=="function")for(ji=0;ji<ia;++ji)Si[ji]=+It.call(this,rn[ji],ji);else for(ji=0;ji<ia;++ji)Si[ji]=It;if(Ui=[],typeof sr=="function")for(ji=0;ji<ia;++ji)Ui[ji]=+sr.call(this,rn[ji],ji);else for(ji=0;ji<ia;++ji)Ui[ji]=sr;if(Xi=[],typeof zr=="function")for(ji=0;ji<Kn;++ji)Xi[ji]=+zr.call(this,Ki[ji],ji);else for(ji=0;ji<Kn;++ji)Xi[ji]=zr;function is(lo,ts){if(!ro){for(ro=new Array(Kn),xl=0;xl<Kn;++xl)ro[xl]=[];for(xl=0;xl<ia;++xl){var ul=rn[xl];ro[ul.source.index].push(ul.target),ro[ul.target.index].push(ul.source)}}for(var nl=ro[ji],xl=-1,oa=nl.length,wo;++xl<oa;)if(!isNaN(wo=nl[xl][lo]))return wo;return Math.random()*ts}return de.resume()},de.resume=function(){return de.alpha(.1)},de.stop=function(){return de.alpha(0)},de.drag=function(){if(dt||(dt=g.behavior.drag().origin(F).on("dragstart.force",Mc).on("drag.force",nn).on("dragend.force",Ol)),!arguments.length)return dt;this.on("mouseover.force",Uc).on("mouseout.force",ic).call(dt)};function nn(ji){ji.px=g.event.x,ji.py=g.event.y,de.resume()}return g.rebind(de,Re,"on")};function Mc(de){de.fixed|=2}function Ol(de){de.fixed&=-7}function Uc(de){de.fixed|=4,de.px=de.x,de.py=de.y}function ic(de){de.fixed&=-5}function wu(de,Re,Ke){var ft=0,dt=0;if(de.charge=0,!de.leaf)for(var xt=de.nodes,Jt=xt.length,It=-1,sr;++It<Jt;)sr=xt[It],sr!=null&&(wu(sr,Re,Ke),de.charge+=sr.charge,ft+=sr.charge*sr.cx,dt+=sr.charge*sr.cy);if(de.point){de.leaf||(de.point.x+=Math.random()-.5,de.point.y+=Math.random()-.5);var zr=Re*Ke[de.point.index];de.charge+=de.pointCharge=zr,ft+=zr*de.point.x,dt+=zr*de.point.y}de.cx=ft/de.charge,de.cy=dt/de.charge}var Pl=20,oh=1,dh=1/0;g.layout.hierarchy=function(){var de=xf,Re=Vh,Ke=vf;function ft(dt){var xt=[dt],Jt=[],It;for(dt.depth=0;(It=xt.pop())!=null;)if(Jt.push(It),(zr=Re.call(ft,It,It.depth))&&(sr=zr.length)){for(var sr,zr,Or;--sr>=0;)xt.push(Or=zr[sr]),Or.parent=It,Or.depth=It.depth+1;Ke&&(It.value=0),It.children=zr}else Ke&&(It.value=+Ke.call(ft,It,It.depth)||0),delete It.children;return dc(dt,function(bi){var gi,Ki;de&&(gi=bi.children)&&gi.sort(de),Ke&&(Ki=bi.parent)&&(Ki.value+=bi.value)}),Jt}return ft.sort=function(dt){return arguments.length?(de=dt,ft):de},ft.children=function(dt){return arguments.length?(Re=dt,ft):Re},ft.value=function(dt){return arguments.length?(Ke=dt,ft):Ke},ft.revalue=function(dt){return Ke&&(Sc(dt,function(xt){xt.children&&(xt.value=0)}),dc(dt,function(xt){var Jt;xt.children||(xt.value=+Ke.call(ft,xt,xt.depth)||0),(Jt=xt.parent)&&(Jt.value+=xt.value)})),dt},ft};function Wu(de,Re){return g.rebind(de,Re,"sort","children","value"),de.nodes=de,de.links=Du,de}function Sc(de,Re){for(var Ke=[de];(de=Ke.pop())!=null;)if(Re(de),(dt=de.children)&&(ft=dt.length))for(var ft,dt;--ft>=0;)Ke.push(dt[ft])}function dc(de,Re){for(var Ke=[de],ft=[];(de=Ke.pop())!=null;)if(ft.push(de),(Jt=de.children)&&(xt=Jt.length))for(var dt=-1,xt,Jt;++dt<xt;)Ke.push(Jt[dt]);for(;(de=ft.pop())!=null;)Re(de)}function Vh(de){return de.children}function vf(de){return de.value}function xf(de,Re){return Re.value-de.value}function Du(de){return g.merge(de.map(function(Re){return(Re.children||[]).map(function(Ke){return{source:Re,target:Ke}})}))}g.layout.partition=function(){var de=g.layout.hierarchy(),Re=[1,1];function Ke(xt,Jt,It,sr){var zr=xt.children;if(xt.x=Jt,xt.y=xt.depth*sr,xt.dx=It,xt.dy=sr,zr&&(bi=zr.length)){var Or=-1,bi,gi,Ki;for(It=xt.value?It/xt.value:0;++Or<bi;)Ke(gi=zr[Or],Jt,Ki=gi.value*It,sr),Jt+=Ki}}function ft(xt){var Jt=xt.children,It=0;if(Jt&&(zr=Jt.length))for(var sr=-1,zr;++sr<zr;)It=Math.max(It,ft(Jt[sr]));return 1+It}function dt(xt,Jt){var It=de.call(this,xt,Jt);return Ke(It[0],0,Re[0],Re[1]/ft(It[0])),It}return dt.size=function(xt){return arguments.length?(Re=xt,dt):Re},Wu(dt,de)},g.layout.pie=function(){var de=Number,Re=Pf,Ke=0,ft=Ve,dt=0;function xt(Jt){var It=Jt.length,sr=Jt.map(function(ln,nn){return+de.call(xt,ln,nn)}),zr=+(typeof Ke=="function"?Ke.apply(this,arguments):Ke),Or=(typeof ft=="function"?ft.apply(this,arguments):ft)-zr,bi=Math.min(Math.abs(Or)/It,+(typeof dt=="function"?dt.apply(this,arguments):dt)),gi=bi*(Or<0?-1:1),Ki=g.sum(sr),rn=Ki?(Or-It*gi)/Ki:0,Si=g.range(It),Ui=[],Xi;return Re!=null&&Si.sort(Re===Pf?function(ln,nn){return sr[nn]-sr[ln]}:function(ln,nn){return Re(Jt[ln],Jt[nn])}),Si.forEach(function(ln){Ui[ln]={data:Jt[ln],value:Xi=sr[ln],startAngle:zr,endAngle:zr+=Xi*rn+gi,padAngle:bi}}),Ui}return xt.value=function(Jt){return arguments.length?(de=Jt,xt):de},xt.sort=function(Jt){return arguments.length?(Re=Jt,xt):Re},xt.startAngle=function(Jt){return arguments.length?(Ke=Jt,xt):Ke},xt.endAngle=function(Jt){return arguments.length?(ft=Jt,xt):ft},xt.padAngle=function(Jt){return arguments.length?(dt=Jt,xt):dt},xt};var Pf={};g.layout.stack=function(){var de=F,Re=Tu,Ke=Au,ft=vh,dt=fu,xt=ef;function Jt(It,sr){if(!(rn=It.length))return It;var zr=It.map(function(ln,nn){return de.call(Jt,ln,nn)}),Or=zr.map(function(ln){return ln.map(function(nn,ji){return[dt.call(Jt,nn,ji),xt.call(Jt,nn,ji)]})}),bi=Re.call(Jt,Or,sr);zr=g.permute(zr,bi),Or=g.permute(Or,bi);var gi=Ke.call(Jt,Or,sr),Ki=zr[0].length,rn,Si,Ui,Xi;for(Ui=0;Ui<Ki;++Ui)for(ft.call(Jt,zr[0][Ui],Xi=gi[Ui],Or[0][Ui][1]),Si=1;Si<rn;++Si)ft.call(Jt,zr[Si][Ui],Xi+=Or[Si-1][Ui][1],Or[Si][Ui][1]);return It}return Jt.values=function(It){return arguments.length?(de=It,Jt):de},Jt.order=function(It){return arguments.length?(Re=typeof It=="function"?It:If.get(It)||Tu,Jt):Re},Jt.offset=function(It){return arguments.length?(Ke=typeof It=="function"?It:yl.get(It)||Au,Jt):Ke},Jt.x=function(It){return arguments.length?(dt=It,Jt):dt},Jt.y=function(It){return arguments.length?(xt=It,Jt):xt},Jt.out=function(It){return arguments.length?(ft=It,Jt):ft},Jt};function fu(de){return de.x}function ef(de){return de.y}function vh(de,Re,Ke){de.y0=Re,de.y=Ke}var If=g.map({"inside-out":function(de){var Re=de.length,Ke,ft,dt=de.map(Hf),xt=de.map(dl),Jt=g.range(Re).sort(function(bi,gi){return dt[bi]-dt[gi]}),It=0,sr=0,zr=[],Or=[];for(Ke=0;Ke<Re;++Ke)ft=Jt[Ke],It<sr?(It+=xt[ft],zr.push(ft)):(sr+=xt[ft],Or.push(ft));return Or.reverse().concat(zr)},reverse:function(de){return g.range(de.length).reverse()},default:Tu}),yl=g.map({silhouette:function(de){var Re=de.length,Ke=de[0].length,ft=[],dt=0,xt,Jt,It,sr=[];for(Jt=0;Jt<Ke;++Jt){for(xt=0,It=0;xt<Re;xt++)It+=de[xt][Jt][1];It>dt&&(dt=It),ft.push(It)}for(Jt=0;Jt<Ke;++Jt)sr[Jt]=(dt-ft[Jt])/2;return sr},wiggle:function(de){var Re=de.length,Ke=de[0],ft=Ke.length,dt,xt,Jt,It,sr,zr,Or,bi,gi,Ki=[];for(Ki[0]=bi=gi=0,xt=1;xt<ft;++xt){for(dt=0,It=0;dt<Re;++dt)It+=de[dt][xt][1];for(dt=0,sr=0,Or=Ke[xt][0]-Ke[xt-1][0];dt<Re;++dt){for(Jt=0,zr=(de[dt][xt][1]-de[dt][xt-1][1])/(2*Or);Jt<dt;++Jt)zr+=(de[Jt][xt][1]-de[Jt][xt-1][1])/Or;sr+=zr*de[dt][xt][1]}Ki[xt]=bi-=It?sr/It*Or:0,bi<gi&&(gi=bi)}for(xt=0;xt<ft;++xt)Ki[xt]-=gi;return Ki},expand:function(de){var Re=de.length,Ke=de[0].length,ft=1/Re,dt,xt,Jt,It=[];for(xt=0;xt<Ke;++xt){for(dt=0,Jt=0;dt<Re;dt++)Jt+=de[dt][xt][1];if(Jt)for(dt=0;dt<Re;dt++)de[dt][xt][1]/=Jt;else for(dt=0;dt<Re;dt++)de[dt][xt][1]=ft}for(xt=0;xt<Ke;++xt)It[xt]=0;return It},zero:Au});function Tu(de){return g.range(de.length)}function Au(de){for(var Re=-1,Ke=de[0].length,ft=[];++Re<Ke;)ft[Re]=0;return ft}function Hf(de){for(var Re=1,Ke=0,ft=de[0][1],dt,xt=de.length;Re<xt;++Re)(dt=de[Re][1])>ft&&(Ke=Re,ft=dt);return Ke}function dl(de){return de.reduce(pf,0)}function pf(de,Re){return de+Re[1]}g.layout.histogram=function(){var de=!0,Re=Number,Ke=bf,ft=Ec;function dt(xt,gi){for(var It=[],sr=xt.map(Re,this),zr=Ke.call(this,sr,gi),Or=ft.call(this,zr,sr,gi),bi,gi=-1,Ki=sr.length,rn=Or.length-1,Si=de?1:1/Ki,Ui;++gi<rn;)bi=It[gi]=[],bi.dx=Or[gi+1]-(bi.x=Or[gi]),bi.y=0;if(rn>0)for(gi=-1;++gi<Ki;)Ui=sr[gi],Ui>=zr[0]&&Ui<=zr[1]&&(bi=It[g.bisect(Or,Ui,1,rn)-1],bi.y+=Si,bi.push(xt[gi]));return It}return dt.value=function(xt){return arguments.length?(Re=xt,dt):Re},dt.range=function(xt){return arguments.length?(Ke=ti(xt),dt):Ke},dt.bins=function(xt){return arguments.length?(ft=typeof xt=="number"?function(Jt){return Xu(Jt,xt)}:ti(xt),dt):ft},dt.frequency=function(xt){return arguments.length?(de=!!xt,dt):de},dt};function Ec(de,Re){return Xu(de,Math.ceil(Math.log(Re.length)/Math.LN2+1))}function Xu(de,Re){for(var Ke=-1,ft=+de[0],dt=(de[1]-ft)/Re,xt=[];++Ke<=Re;)xt[Ke]=dt*Ke+ft;return xt}function bf(de){return[g.min(de),g.max(de)]}g.layout.pack=function(){var de=g.layout.hierarchy().sort(vc),Re=0,Ke=[1,1],ft;function dt(xt,Jt){var It=de.call(this,xt,Jt),sr=It[0],zr=Ke[0],Or=Ke[1],bi=ft==null?Math.sqrt:typeof ft=="function"?ft:function(){return ft};if(sr.x=sr.y=0,dc(sr,function(Ki){Ki.r=+bi(Ki.value)}),dc(sr,Wf),Re){var gi=Re*(ft?1:Math.max(2*sr.r/zr,2*sr.r/Or))/2;dc(sr,function(Ki){Ki.r+=gi}),dc(sr,Wf),dc(sr,function(Ki){Ki.r-=gi})}return pc(sr,zr/2,Or/2,ft?1:1/Math.max(2*sr.r/zr,2*sr.r/Or)),It}return dt.size=function(xt){return arguments.length?(Ke=xt,dt):Ke},dt.radius=function(xt){return arguments.length?(ft=xt==null||typeof xt=="function"?xt:+xt,dt):ft},dt.padding=function(xt){return arguments.length?(Re=+xt,dt):Re},Wu(dt,de)};function vc(de,Re){return de.value-Re.value}function tf(de,Re){var Ke=de._pack_next;de._pack_next=Re,Re._pack_prev=de,Re._pack_next=Ke,Ke._pack_prev=Re}function Gf(de,Re){de._pack_next=Re,Re._pack_prev=de}function Jl(de,Re){var Ke=Re.x-de.x,ft=Re.y-de.y,dt=de.r+Re.r;return .999*dt*dt>Ke*Ke+ft*ft}function Wf(de){if(!(Re=de.children)||!(gi=Re.length))return;var Re,Ke=1/0,ft=-1/0,dt=1/0,xt=-1/0,Jt,It,sr,zr,Or,bi,gi;function Ki(ji){Ke=Math.min(ji.x-ji.r,Ke),ft=Math.max(ji.x+ji.r,ft),dt=Math.min(ji.y-ji.r,dt),xt=Math.max(ji.y+ji.r,xt)}if(Re.forEach(Zu),Jt=Re[0],Jt.x=-Jt.r,Jt.y=0,Ki(Jt),gi>1&&(It=Re[1],It.x=It.r,It.y=0,Ki(It),gi>2))for(sr=Re[2],Nl(Jt,It,sr),Ki(sr),tf(Jt,sr),Jt._pack_prev=sr,tf(sr,It),It=Jt._pack_next,zr=3;zr<gi;zr++){Nl(Jt,It,sr=Re[zr]);var rn=0,Si=1,Ui=1;for(Or=It._pack_next;Or!==It;Or=Or._pack_next,Si++)if(Jl(Or,sr)){rn=1;break}if(rn==1)for(bi=Jt._pack_prev;bi!==Or._pack_prev&&!Jl(bi,sr);bi=bi._pack_prev,Ui++);rn?(Si<Ui||Si==Ui&&It.r<Jt.r?Gf(Jt,It=Or):Gf(Jt=bi,It),zr--):(tf(Jt,sr),It=sr,Ki(sr))}var Xi=(Ke+ft)/2,ln=(dt+xt)/2,nn=0;for(zr=0;zr<gi;zr++)sr=Re[zr],sr.x-=Xi,sr.y-=ln,nn=Math.max(nn,sr.r+Math.sqrt(sr.x*sr.x+sr.y*sr.y));de.r=nn,Re.forEach(kc)}function Zu(de){de._pack_next=de._pack_prev=de}function kc(de){delete de._pack_next,delete de._pack_prev}function pc(de,Re,Ke,ft){var dt=de.children;if(de.x=Re+=ft*de.x,de.y=Ke+=ft*de.y,de.r*=ft,dt)for(var xt=-1,Jt=dt.length;++xt<Jt;)pc(dt[xt],Re,Ke,ft)}function Nl(de,Re,Ke){var ft=de.r+Ke.r,dt=Re.x-de.x,xt=Re.y-de.y;if(ft&&(dt||xt)){var Jt=Re.r+Ke.r,It=dt*dt+xt*xt;Jt*=Jt,ft*=ft;var sr=.5+(ft-Jt)/(2*It),zr=Math.sqrt(Math.max(0,2*Jt*(ft+It)-(ft-=It)*ft-Jt*Jt))/(2*It);Ke.x=de.x+sr*dt+zr*xt,Ke.y=de.y+sr*xt-zr*dt}else Ke.x=de.x+ft,Ke.y=de.y}g.layout.tree=function(){var de=g.layout.hierarchy().sort(null).value(null),Re=hu,Ke=[1,1],ft=null;function dt(Or,bi){var gi=de.call(this,Or,bi),Ki=gi[0],rn=xt(Ki);if(dc(rn,Jt),rn.parent.m=-rn.z,Sc(rn,It),ft)Sc(Ki,zr);else{var Si=Ki,Ui=Ki,Xi=Ki;Sc(Ki,function(Kn){Kn.x<Si.x&&(Si=Kn),Kn.x>Ui.x&&(Ui=Kn),Kn.depth>Xi.depth&&(Xi=Kn)});var ln=Re(Si,Ui)/2-Si.x,nn=Ke[0]/(Ui.x+Re(Ui,Si)/2+ln),ji=Ke[1]/(Xi.depth||1);Sc(Ki,function(Kn){Kn.x=(Kn.x+ln)*nn,Kn.y=Kn.depth*ji})}return gi}function xt(Or){for(var bi={A:null,children:[Or]},gi=[bi],Ki;(Ki=gi.pop())!=null;)for(var rn=Ki.children,Si,Ui=0,Xi=rn.length;Ui<Xi;++Ui)gi.push((rn[Ui]=Si={_:rn[Ui],parent:Ki,children:(Si=rn[Ui].children)&&Si.slice()||[],A:null,a:null,z:0,m:0,c:0,s:0,t:null,i:Ui}).a=Si);return bi.children[0]}function Jt(Or){var bi=Or.children,gi=Or.parent.children,Ki=Or.i?gi[Or.i-1]:null;if(bi.length){rf(Or);var rn=(bi[0].z+bi[bi.length-1].z)/2;Ki?(Or.z=Ki.z+Re(Or._,Ki._),Or.m=Or.z-rn):Or.z=rn}else Ki&&(Or.z=Ki.z+Re(Or._,Ki._));Or.parent.A=sr(Or,Ki,Or.parent.A||gi[0])}function It(Or){Or._.x=Or.z+Or.parent.m,Or.m+=Or.parent.m}function sr(Or,bi,gi){if(bi){for(var Ki=Or,rn=Or,Si=bi,Ui=Ki.parent.children[0],Xi=Ki.m,ln=rn.m,nn=Si.m,ji=Ui.m,Kn;Si=jc(Si),Ki=mc(Ki),Si&&Ki;)Ui=mc(Ui),rn=jc(rn),rn.a=Or,Kn=Si.z+nn-Ki.z-Xi+Re(Si._,Ki._),Kn>0&&(nc(Zt(Si,Or,gi),Or,Kn),Xi+=Kn,ln+=Kn),nn+=Si.m,Xi+=Ki.m,ji+=Ui.m,ln+=rn.m;Si&&!jc(rn)&&(rn.t=Si,rn.m+=nn-ln),Ki&&!mc(Ui)&&(Ui.t=Ki,Ui.m+=Xi-ji,gi=Or)}return gi}function zr(Or){Or.x*=Ke[0],Or.y=Or.depth*Ke[1]}return dt.separation=function(Or){return arguments.length?(Re=Or,dt):Re},dt.size=function(Or){return arguments.length?(ft=(Ke=Or)==null?zr:null,dt):ft?null:Ke},dt.nodeSize=function(Or){return arguments.length?(ft=(Ke=Or)==null?null:zr,dt):ft?Ke:null},Wu(dt,de)};function hu(de,Re){return de.parent==Re.parent?1:2}function mc(de){var Re=de.children;return Re.length?Re[0]:de.t}function jc(de){var Re=de.children,Ke;return(Ke=Re.length)?Re[Ke-1]:de.t}function nc(de,Re,Ke){var ft=Ke/(Re.i-de.i);Re.c-=ft,Re.s+=Ke,de.c+=ft,Re.z+=Ke,Re.m+=Ke}function rf(de){for(var Re=0,Ke=0,ft=de.children,dt=ft.length,xt;--dt>=0;)xt=ft[dt],xt.z+=Re,xt.m+=Re,Re+=xt.s+(Ke+=xt.c)}function Zt(de,Re,Ke){return de.a.parent===Re.parent?de.a:Ke}g.layout.cluster=function(){var de=g.layout.hierarchy().sort(null).value(null),Re=hu,Ke=[1,1],ft=!1;function dt(xt,Jt){var It=de.call(this,xt,Jt),sr=It[0],zr,Or=0;dc(sr,function(Si){var Ui=Si.children;Ui&&Ui.length?(Si.x=Kr(Ui),Si.y=hr(Ui)):(Si.x=zr?Or+=Re(Si,zr):0,Si.y=0,zr=Si)});var bi=qr(sr),gi=ki(sr),Ki=bi.x-Re(bi,gi)/2,rn=gi.x+Re(gi,bi)/2;return dc(sr,ft?function(Si){Si.x=(Si.x-sr.x)*Ke[0],Si.y=(sr.y-Si.y)*Ke[1]}:function(Si){Si.x=(Si.x-Ki)/(rn-Ki)*Ke[0],Si.y=(1-(sr.y?Si.y/sr.y:1))*Ke[1]}),It}return dt.separation=function(xt){return arguments.length?(Re=xt,dt):Re},dt.size=function(xt){return arguments.length?(ft=(Ke=xt)==null,dt):ft?null:Ke},dt.nodeSize=function(xt){return arguments.length?(ft=(Ke=xt)!=null,dt):ft?Ke:null},Wu(dt,de)};function hr(de){return 1+g.max(de,function(Re){return Re.y})}function Kr(de){return de.reduce(function(Re,Ke){return Re+Ke.x},0)/de.length}function qr(de){var Re=de.children;return Re&&Re.length?qr(Re[0]):de}function ki(de){var Re=de.children,Ke;return Re&&(Ke=Re.length)?ki(Re[Ke-1]):de}g.layout.treemap=function(){var de=g.layout.hierarchy(),Re=Math.round,Ke=[1,1],ft=null,dt=an,xt=!1,Jt,It="squarify",sr=.5*(1+Math.sqrt(5));function zr(Si,Ui){for(var Xi=-1,ln=Si.length,nn,ji;++Xi<ln;)ji=(nn=Si[Xi]).value*(Ui<0?0:Ui),nn.area=isNaN(ji)||ji<=0?0:ji}function Or(Si){var Ui=Si.children;if(Ui&&Ui.length){var Xi=dt(Si),ln=[],nn=Ui.slice(),ji,Kn=1/0,ia,ga=It==="slice"?Xi.dx:It==="dice"?Xi.dy:It==="slice-dice"?Si.depth&1?Xi.dy:Xi.dx:Math.min(Xi.dx,Xi.dy),ka;for(zr(nn,Xi.dx*Xi.dy/Si.value),ln.area=0;(ka=nn.length)>0;)ln.push(ji=nn[ka-1]),ln.area+=ji.area,It!=="squarify"||(ia=gi(ln,ga))<=Kn?(nn.pop(),Kn=ia):(ln.area-=ln.pop().area,Ki(ln,ga,Xi,!1),ga=Math.min(Xi.dx,Xi.dy),ln.length=ln.area=0,Kn=1/0);ln.length&&(Ki(ln,ga,Xi,!0),ln.length=ln.area=0),Ui.forEach(Or)}}function bi(Si){var Ui=Si.children;if(Ui&&Ui.length){var Xi=dt(Si),ln=Ui.slice(),nn,ji=[];for(zr(ln,Xi.dx*Xi.dy/Si.value),ji.area=0;nn=ln.pop();)ji.push(nn),ji.area+=nn.area,nn.z!=null&&(Ki(ji,nn.z?Xi.dx:Xi.dy,Xi,!ln.length),ji.length=ji.area=0);Ui.forEach(bi)}}function gi(Si,Ui){for(var Xi=Si.area,ln,nn=0,ji=1/0,Kn=-1,ia=Si.length;++Kn<ia;)(ln=Si[Kn].area)&&(ln<ji&&(ji=ln),ln>nn&&(nn=ln));return Xi*=Xi,Ui*=Ui,Xi?Math.max(Ui*nn*sr/Xi,Xi/(Ui*ji*sr)):1/0}function Ki(Si,Ui,Xi,ln){var nn=-1,ji=Si.length,Kn=Xi.x,ia=Xi.y,ga=Ui?Re(Si.area/Ui):0,ka;if(Ui==Xi.dx){for((ln||ga>Xi.dy)&&(ga=Xi.dy);++nn<ji;)ka=Si[nn],ka.x=Kn,ka.y=ia,ka.dy=ga,Kn+=ka.dx=Math.min(Xi.x+Xi.dx-Kn,ga?Re(ka.area/ga):0);ka.z=!0,ka.dx+=Xi.x+Xi.dx-Kn,Xi.y+=ga,Xi.dy-=ga}else{for((ln||ga>Xi.dx)&&(ga=Xi.dx);++nn<ji;)ka=Si[nn],ka.x=Kn,ka.y=ia,ka.dx=ga,ia+=ka.dy=Math.min(Xi.y+Xi.dy-ia,ga?Re(ka.area/ga):0);ka.z=!1,ka.dy+=Xi.y+Xi.dy-ia,Xi.x+=ga,Xi.dx-=ga}}function rn(Si){var Ui=Jt||de(Si),Xi=Ui[0];return Xi.x=Xi.y=0,Xi.value?(Xi.dx=Ke[0],Xi.dy=Ke[1]):Xi.dx=Xi.dy=0,Jt&&de.revalue(Xi),zr([Xi],Xi.dx*Xi.dy/Xi.value),(Jt?bi:Or)(Xi),xt&&(Jt=Ui),Ui}return rn.size=function(Si){return arguments.length?(Ke=Si,rn):Ke},rn.padding=function(Si){if(!arguments.length)return ft;function Ui(nn){var ji=Si.call(rn,nn,nn.depth);return ji==null?an(nn):pn(nn,typeof ji=="number"?[ji,ji,ji,ji]:ji)}function Xi(nn){return pn(nn,Si)}var ln;return dt=(ft=Si)==null?an:(ln=typeof Si)=="function"?Ui:(ln==="number"&&(Si=[Si,Si,Si,Si]),Xi),rn},rn.round=function(Si){return arguments.length?(Re=Si?Math.round:Number,rn):Re!=Number},rn.sticky=function(Si){return arguments.length?(xt=Si,Jt=null,rn):xt},rn.ratio=function(Si){return arguments.length?(sr=Si,rn):sr},rn.mode=function(Si){return arguments.length?(It=Si+"",rn):It},Wu(rn,de)};function an(de){return{x:de.x,y:de.y,dx:de.dx,dy:de.dy}}function pn(de,Re){var Ke=de.x+Re[3],ft=de.y+Re[0],dt=de.dx-Re[1]-Re[3],xt=de.dy-Re[0]-Re[2];return dt<0&&(Ke+=dt/2,dt=0),xt<0&&(ft+=xt/2,xt=0),{x:Ke,y:ft,dx:dt,dy:xt}}g.random={normal:function(de,Re){var Ke=arguments.length;return Ke<2&&(Re=1),Ke<1&&(de=0),function(){var ft,dt,xt;do ft=Math.random()*2-1,dt=Math.random()*2-1,xt=ft*ft+dt*dt;while(!xt||xt>1);return de+Re*ft*Math.sqrt(-2*Math.log(xt)/xt)}},logNormal:function(){var de=g.random.normal.apply(g,arguments);return function(){return Math.exp(de())}},bates:function(de){var Re=g.random.irwinHall(de);return function(){return Re()/de}},irwinHall:function(de){return function(){for(var Re=0,Ke=0;Ke<de;Ke++)Re+=Math.random();return Re}}},g.scale={};function Pn(de){var Re=de[0],Ke=de[de.length-1];return Re<Ke?[Re,Ke]:[Ke,Re]}function Vn(de){return de.rangeExtent?de.rangeExtent():Pn(de.range())}function ra(de,Re,Ke,ft){var dt=Ke(de[0],de[1]),xt=ft(Re[0],Re[1]);return function(Jt){return xt(dt(Jt))}}function yn(de,Re){var Ke=0,ft=de.length-1,dt=de[Ke],xt=de[ft],Jt;return xt<dt&&(Jt=Ke,Ke=ft,ft=Jt,Jt=dt,dt=xt,xt=Jt),de[Ke]=Re.floor(dt),de[ft]=Re.ceil(xt),de}function In(de){return de?{floor:function(Re){return Math.floor(Re/de)*de},ceil:function(Re){return Math.ceil(Re/de)*de}}:kn}var kn={floor:F,ceil:F};function cn(de,Re,Ke,ft){var dt=[],xt=[],Jt=0,It=Math.min(de.length,Re.length)-1;for(de[It]<de[0]&&(de=de.slice().reverse(),Re=Re.slice().reverse());++Jt<=It;)dt.push(Ke(de[Jt-1],de[Jt])),xt.push(ft(Re[Jt-1],Re[Jt]));return function(sr){var zr=g.bisect(de,sr,1,It)-1;return xt[zr](dt[zr](sr))}}g.scale.linear=function(){return xa([0,1],[0,1],Wl,!1)};function xa(de,Re,Ke,ft){var dt,xt;function Jt(){var sr=Math.min(de.length,Re.length)>2?cn:ra,zr=ft?Iu:hh;return dt=sr(de,Re,zr,Ke),xt=sr(Re,de,zr,Wl),It}function It(sr){return dt(sr)}return It.invert=function(sr){return xt(sr)},It.domain=function(sr){return arguments.length?(de=sr.map(Number),Jt()):de},It.range=function(sr){return arguments.length?(Re=sr,Jt()):Re},It.rangeRound=function(sr){return It.range(sr).interpolate(rc)},It.clamp=function(sr){return arguments.length?(ft=sr,Jt()):ft},It.interpolate=function(sr){return arguments.length?(Ke=sr,Jt()):Ke},It.ticks=function(sr){return Mo(de,sr)},It.tickFormat=function(sr,zr){return d3_scale_linearTickFormat(de,sr,zr)},It.nice=function(sr){return uo(de,sr),Jt()},It.copy=function(){return xa(de,Re,Ke,ft)},Jt()}function mo(de,Re){return g.rebind(de,Re,"range","rangeRound","interpolate","clamp")}function uo(de,Re){return yn(de,In(go(de,Re)[2])),yn(de,In(go(de,Re)[2])),de}function go(de,Re){Re==null&&(Re=10);var Ke=Pn(de),ft=Ke[1]-Ke[0],dt=Math.pow(10,Math.floor(Math.log(ft/Re)/Math.LN10)),xt=Re/ft*dt;return xt<=.15?dt*=10:xt<=.35?dt*=5:xt<=.75&&(dt*=2),Ke[0]=Math.ceil(Ke[0]/dt)*dt,Ke[1]=Math.floor(Ke[1]/dt)*dt+dt*.5,Ke[2]=dt,Ke}function Mo(de,Re){return g.range.apply(g,go(de,Re))}var ya={s:1,g:1,p:1,r:1,e:1};function Zn(de){return-Math.floor(Math.log(de)/Math.LN10+.01)}function Po(de,Re){var Ke=Zn(Re[2]);return de in ya?Math.abs(Ke-Zn(Math.max(l(Re[0]),l(Re[1]))))+ +(de!=="e"):Ke-(de==="%")*2}g.scale.log=function(){return us(g.scale.linear().domain([0,1]),10,!0,[1,10])};function us(de,Re,Ke,ft){function dt(It){return(Ke?Math.log(It<0?0:It):-Math.log(It>0?0:-It))/Math.log(Re)}function xt(It){return Ke?Math.pow(Re,It):-Math.pow(Re,-It)}function Jt(It){return de(dt(It))}return Jt.invert=function(It){return xt(de.invert(It))},Jt.domain=function(It){return arguments.length?(Ke=It[0]>=0,de.domain((ft=It.map(Number)).map(dt)),Jt):ft},Jt.base=function(It){return arguments.length?(Re=+It,de.domain(ft.map(dt)),Jt):Re},Jt.nice=function(){var It=yn(ft.map(dt),Ke?Math:Bs);return de.domain(It),ft=It.map(xt),Jt},Jt.ticks=function(){var It=Pn(ft),sr=[],zr=It[0],Or=It[1],bi=Math.floor(dt(zr)),gi=Math.ceil(dt(Or)),Ki=Re%1?2:Re;if(isFinite(gi-bi)){if(Ke){for(;bi<gi;bi++)for(var rn=1;rn<Ki;rn++)sr.push(xt(bi)*rn);sr.push(xt(bi))}else for(sr.push(xt(bi));bi++<gi;)for(var rn=Ki-1;rn>0;rn--)sr.push(xt(bi)*rn);for(bi=0;sr[bi]<zr;bi++);for(gi=sr.length;sr[gi-1]>Or;gi--);sr=sr.slice(bi,gi)}return sr},Jt.copy=function(){return us(de.copy(),Re,Ke,ft)},mo(Jt,de)}var Bs={floor:function(de){return-Math.ceil(-de)},ceil:function(de){return-Math.floor(-de)}};g.scale.pow=function(){return sl(g.scale.linear(),1,[0,1])};function sl(de,Re,Ke){var ft=js(Re),dt=js(1/Re);function xt(Jt){return de(ft(Jt))}return xt.invert=function(Jt){return dt(de.invert(Jt))},xt.domain=function(Jt){return arguments.length?(de.domain((Ke=Jt.map(Number)).map(ft)),xt):Ke},xt.ticks=function(Jt){return Mo(Ke,Jt)},xt.tickFormat=function(Jt,It){return d3_scale_linearTickFormat(Ke,Jt,It)},xt.nice=function(Jt){return xt.domain(uo(Ke,Jt))},xt.exponent=function(Jt){return arguments.length?(ft=js(Re=Jt),dt=js(1/Re),de.domain(Ke.map(ft)),xt):Re},xt.copy=function(){return sl(de.copy(),Re,Ke)},mo(xt,de)}function js(de){return function(Re){return Re<0?-Math.pow(-Re,de):Math.pow(Re,de)}}g.scale.sqrt=function(){return g.scale.pow().exponent(.5)},g.scale.ordinal=function(){return il([],{t:"range",a:[[]]})};function il(de,Re){var Ke,ft,dt;function xt(It){return ft[((Ke.get(It)||(Re.t==="range"?Ke.set(It,de.push(It)):NaN))-1)%ft.length]}function Jt(It,sr){return g.range(de.length).map(function(zr){return It+sr*zr})}return xt.domain=function(It){if(!arguments.length)return de;de=[],Ke=new M;for(var sr=-1,zr=It.length,Or;++sr<zr;)Ke.has(Or=It[sr])||Ke.set(Or,de.push(Or));return xt[Re.t].apply(xt,Re.a)},xt.range=function(It){return arguments.length?(ft=It,dt=0,Re={t:"range",a:arguments},xt):ft},xt.rangePoints=function(It,sr){arguments.length<2&&(sr=0);var zr=It[0],Or=It[1],bi=de.length<2?(zr=(zr+Or)/2,0):(Or-zr)/(de.length-1+sr);return ft=Jt(zr+bi*sr/2,bi),dt=0,Re={t:"rangePoints",a:arguments},xt},xt.rangeRoundPoints=function(It,sr){arguments.length<2&&(sr=0);var zr=It[0],Or=It[1],bi=de.length<2?(zr=Or=Math.round((zr+Or)/2),0):(Or-zr)/(de.length-1+sr)|0;return ft=Jt(zr+Math.round(bi*sr/2+(Or-zr-(de.length-1+sr)*bi)/2),bi),dt=0,Re={t:"rangeRoundPoints",a:arguments},xt},xt.rangeBands=function(It,sr,zr){arguments.length<2&&(sr=0),arguments.length<3&&(zr=sr);var Or=It[1]<It[0],bi=It[Or-0],gi=It[1-Or],Ki=(gi-bi)/(de.length-sr+2*zr);return ft=Jt(bi+Ki*zr,Ki),Or&&ft.reverse(),dt=Ki*(1-sr),Re={t:"rangeBands",a:arguments},xt},xt.rangeRoundBands=function(It,sr,zr){arguments.length<2&&(sr=0),arguments.length<3&&(zr=sr);var Or=It[1]<It[0],bi=It[Or-0],gi=It[1-Or],Ki=Math.floor((gi-bi)/(de.length-sr+2*zr));return ft=Jt(bi+Math.round((gi-bi-(de.length-sr)*Ki)/2),Ki),Or&&ft.reverse(),dt=Math.round(Ki*(1-sr)),Re={t:"rangeRoundBands",a:arguments},xt},xt.rangeBand=function(){return dt},xt.rangeExtent=function(){return Pn(Re.a[0])},xt.copy=function(){return il(de,Re)},xt.domain(de)}g.scale.category10=function(){return g.scale.ordinal().range(Ps)},g.scale.category20=function(){return g.scale.ordinal().range(ql)},g.scale.category20b=function(){return g.scale.ordinal().range(Tl)},g.scale.category20c=function(){return g.scale.ordinal().range(vl)};var Ps=[2062260,16744206,2924588,14034728,9725885,9197131,14907330,8355711,12369186,1556175].map(Er),ql=[2062260,11454440,16744206,16759672,2924588,10018698,14034728,16750742,9725885,12955861,9197131,12885140,14907330,16234194,8355711,13092807,12369186,14408589,1556175,10410725].map(Er),Tl=[3750777,5395619,7040719,10264286,6519097,9216594,11915115,13556636,9202993,12426809,15186514,15190932,8666169,11356490,14049643,15177372,8077683,10834324,13528509,14589654].map(Er),vl=[3244733,7057110,10406625,13032431,15095053,16616764,16625259,16634018,3253076,7652470,10607003,13101504,7695281,10394312,12369372,14342891,6513507,9868950,12434877,14277081].map(Er);g.scale.quantile=function(){return Wa([],[])};function Wa(de,Re){var Ke;function ft(){var xt=0,Jt=Re.length;for(Ke=[];++xt<Jt;)Ke[xt-1]=g.quantile(de,xt/Jt);return dt}function dt(xt){if(!isNaN(xt=+xt))return Re[g.bisect(Ke,xt)]}return dt.domain=function(xt){return arguments.length?(de=xt.map(c).filter(h).sort(s),ft()):de},dt.range=function(xt){return arguments.length?(Re=xt,ft()):Re},dt.quantiles=function(){return Ke},dt.invertExtent=function(xt){return xt=Re.indexOf(xt),xt<0?[NaN,NaN]:[xt>0?Ke[xt-1]:de[0],xt<Ke.length?Ke[xt]:de[de.length-1]]},dt.copy=function(){return Wa(de,Re)},ft()}g.scale.quantize=function(){return Go(0,1,[0,1])};function Go(de,Re,Ke){var ft,dt;function xt(It){return Ke[Math.max(0,Math.min(dt,Math.floor(ft*(It-de))))]}function Jt(){return ft=Ke.length/(Re-de),dt=Ke.length-1,xt}return xt.domain=function(It){return arguments.length?(de=+It[0],Re=+It[It.length-1],Jt()):[de,Re]},xt.range=function(It){return arguments.length?(Ke=It,Jt()):Ke},xt.invertExtent=function(It){return It=Ke.indexOf(It),It=It<0?NaN:It/ft+de,[It,It+1/ft]},xt.copy=function(){return Go(de,Re,Ke)},Jt()}g.scale.threshold=function(){return el([.5],[0,1])};function el(de,Re){function Ke(ft){if(ft<=ft)return Re[g.bisect(de,ft)]}return Ke.domain=function(ft){return arguments.length?(de=ft,Ke):de},Ke.range=function(ft){return arguments.length?(Re=ft,Ke):Re},Ke.invertExtent=function(ft){return ft=Re.indexOf(ft),[de[ft-1],de[ft]]},Ke.copy=function(){return el(de,Re)},Ke}g.scale.identity=function(){return Os([0,1])};function Os(de){function Re(Ke){return+Ke}return Re.invert=Re,Re.domain=Re.range=function(Ke){return arguments.length?(de=Ke.map(Re),Re):de},Re.ticks=function(Ke){return Mo(de,Ke)},Re.tickFormat=function(Ke,ft){return d3_scale_linearTickFormat(de,Ke,ft)},Re.copy=function(){return Os(de)},Re}g.svg={};function du(){return 0}g.svg.arc=function(){var de=ac,Re=nf,Ke=du,ft=zu,dt=Mu,xt=Vc,Jt=Fu;function It(){var zr=Math.max(0,+de.apply(this,arguments)),Or=Math.max(0,+Re.apply(this,arguments)),bi=dt.apply(this,arguments)-be,gi=xt.apply(this,arguments)-be,Ki=Math.abs(gi-bi),rn=bi>gi?0:1;if(Or<zr&&(Si=Or,Or=zr,zr=Si),Ki>=Ee)return sr(Or,rn)+(zr?sr(zr,1-rn):"")+"Z";var Si,Ui,Xi,ln,nn=0,ji=0,Kn,ia,ga,ka,ro,ao,is,lo,ts=[];if((ln=(+Jt.apply(this,arguments)||0)/2)&&(Xi=ft===zu?Math.sqrt(zr*zr+Or*Or):+ft.apply(this,arguments),rn||(ji*=-1),Or&&(ji=Ot(Xi/Or*Math.sin(ln))),zr&&(nn=Ot(Xi/zr*Math.sin(ln)))),Or){Kn=Or*Math.cos(bi+ji),ia=Or*Math.sin(bi+ji),ga=Or*Math.cos(gi-ji),ka=Or*Math.sin(gi-ji);var ul=Math.abs(gi-bi-2*ji)<=Se?0:1;if(ji&&Cc(Kn,ia,ga,ka)===rn^ul){var nl=(bi+gi)/2;Kn=Or*Math.cos(nl),ia=Or*Math.sin(nl),ga=ka=null}}else Kn=ia=0;if(zr){ro=zr*Math.cos(gi-nn),ao=zr*Math.sin(gi-nn),is=zr*Math.cos(bi+nn),lo=zr*Math.sin(bi+nn);var xl=Math.abs(bi-gi+2*nn)<=Se?0:1;if(nn&&Cc(ro,ao,is,lo)===1-rn^xl){var oa=(bi+gi)/2;ro=zr*Math.cos(oa),ao=zr*Math.sin(oa),is=lo=null}}else ro=ao=0;if(Ki>Ze&&(Si=Math.min(Math.abs(Or-zr)/2,+Ke.apply(this,arguments)))>.001){Ui=zr<Or^rn?0:1;var wo=Si,ws=Si;if(Ki<Se){var Cs=is==null?[ro,ao]:ga==null?[Kn,ia]:Bo([Kn,ia],[is,lo],[ga,ka],[ro,ao]),Al=Kn-Cs[0],Gl=ia-Cs[1],xu=ga-Cs[0],Ul=ka-Cs[1],_c=1/Math.sin(Math.acos((Al*xu+Gl*Ul)/(Math.sqrt(Al*Al+Gl*Gl)*Math.sqrt(xu*xu+Ul*Ul)))/2),er=Math.sqrt(Cs[0]*Cs[0]+Cs[1]*Cs[1]);ws=Math.min(Si,(zr-er)/(_c-1)),wo=Math.min(Si,(Or-er)/(_c+1))}if(ga!=null){var oi=bo(is==null?[ro,ao]:[is,lo],[Kn,ia],Or,wo,rn),Li=bo([ga,ka],[ro,ao],Or,wo,rn);Si===wo?ts.push("M",oi[0],"A",wo,",",wo," 0 0,",Ui," ",oi[1],"A",Or,",",Or," 0 ",1-rn^Cc(oi[1][0],oi[1][1],Li[1][0],Li[1][1]),",",rn," ",Li[1],"A",wo,",",wo," 0 0,",Ui," ",Li[0]):ts.push("M",oi[0],"A",wo,",",wo," 0 1,",Ui," ",Li[0])}else ts.push("M",Kn,",",ia);if(is!=null){var mn=bo([Kn,ia],[is,lo],zr,-ws,rn),Fn=bo([ro,ao],ga==null?[Kn,ia]:[ga,ka],zr,-ws,rn);Si===ws?ts.push("L",Fn[0],"A",ws,",",ws," 0 0,",Ui," ",Fn[1],"A",zr,",",zr," 0 ",rn^Cc(Fn[1][0],Fn[1][1],mn[1][0],mn[1][1]),",",1-rn," ",mn[1],"A",ws,",",ws," 0 0,",Ui," ",mn[0]):ts.push("L",Fn[0],"A",ws,",",ws," 0 0,",Ui," ",mn[0])}else ts.push("L",ro,",",ao)}else ts.push("M",Kn,",",ia),ga!=null&&ts.push("A",Or,",",Or," 0 ",ul,",",rn," ",ga,",",ka),ts.push("L",ro,",",ao),is!=null&&ts.push("A",zr,",",zr," 0 ",xl,",",1-rn," ",is,",",lo);return ts.push("Z"),ts.join("")}function sr(zr,Or){return"M0,"+zr+"A"+zr+","+zr+" 0 1,"+Or+" 0,"+-zr+"A"+zr+","+zr+" 0 1,"+Or+" 0,"+zr}return It.innerRadius=function(zr){return arguments.length?(de=ti(zr),It):de},It.outerRadius=function(zr){return arguments.length?(Re=ti(zr),It):Re},It.cornerRadius=function(zr){return arguments.length?(Ke=ti(zr),It):Ke},It.padRadius=function(zr){return arguments.length?(ft=zr==zu?zu:ti(zr),It):ft},It.startAngle=function(zr){return arguments.length?(dt=ti(zr),It):dt},It.endAngle=function(zr){return arguments.length?(xt=ti(zr),It):xt},It.padAngle=function(zr){return arguments.length?(Jt=ti(zr),It):Jt},It.centroid=function(){var zr=(+de.apply(this,arguments)+ +Re.apply(this,arguments))/2,Or=(+dt.apply(this,arguments)+ +xt.apply(this,arguments))/2-be;return[Math.cos(Or)*zr,Math.sin(Or)*zr]},It};var zu="auto";function ac(de){return de.innerRadius}function nf(de){return de.outerRadius}function Mu(de){return de.startAngle}function Vc(de){return de.endAngle}function Fu(de){return de&&de.padAngle}function Cc(de,Re,Ke,ft){return(de-Ke)*Re-(Re-ft)*de>0?0:1}function bo(de,Re,Ke,ft,dt){var xt=de[0]-Re[0],Jt=de[1]-Re[1],It=(dt?ft:-ft)/Math.sqrt(xt*xt+Jt*Jt),sr=It*Jt,zr=-It*xt,Or=de[0]+sr,bi=de[1]+zr,gi=Re[0]+sr,Ki=Re[1]+zr,rn=(Or+gi)/2,Si=(bi+Ki)/2,Ui=gi-Or,Xi=Ki-bi,ln=Ui*Ui+Xi*Xi,nn=Ke-ft,ji=Or*Ki-gi*bi,Kn=(Xi<0?-1:1)*Math.sqrt(Math.max(0,nn*nn*ln-ji*ji)),ia=(ji*Xi-Ui*Kn)/ln,ga=(-ji*Ui-Xi*Kn)/ln,ka=(ji*Xi+Ui*Kn)/ln,ro=(-ji*Ui+Xi*Kn)/ln,ao=ia-rn,is=ga-Si,lo=ka-rn,ts=ro-Si;return ao*ao+is*is>lo*lo+ts*ts&&(ia=ka,ga=ro),[[ia-sr,ga-zr],[ia*Ke/nn,ga*Ke/nn]]}function Ko(){return!0}function qc(de){var Re=Yo,Ke=da,ft=Ko,dt=yc,xt=dt.key,Jt=.7;function It(sr){var zr=[],Or=[],bi=-1,gi=sr.length,Ki,rn=ti(Re),Si=ti(Ke);function Ui(){zr.push("M",dt(de(Or),Jt))}for(;++bi<gi;)ft.call(this,Ki=sr[bi],bi)?Or.push([+rn.call(this,Ki,bi),+Si.call(this,Ki,bi)]):Or.length&&(Ui(),Or=[]);return Or.length&&Ui(),zr.length?zr.join(""):null}return It.x=function(sr){return arguments.length?(Re=sr,It):Re},It.y=function(sr){return arguments.length?(Ke=sr,It):Ke},It.defined=function(sr){return arguments.length?(ft=sr,It):ft},It.interpolate=function(sr){return arguments.length?(typeof sr=="function"?xt=dt=sr:xt=(dt=gc.get(sr)||yc).key,It):xt},It.tension=function(sr){return arguments.length?(Jt=sr,It):Jt},It}g.svg.line=function(){return qc(F)};var gc=g.map({linear:yc,"linear-closed":Be,step:R,"step-before":ie,"step-after":xe,basis:Kt,"basis-open":fr,"basis-closed":dr,bundle:jr,cardinal:ut,"cardinal-open":Te,"cardinal-closed":De,monotone:tr});gc.forEach(function(de,Re){Re.key=de,Re.closed=/-closed$/.test(de)});function yc(de){return de.length>1?de.join("L"):de+"Z"}function Be(de){return de.join("L")+"Z"}function R(de){for(var Re=0,Ke=de.length,ft=de[0],dt=[ft[0],",",ft[1]];++Re<Ke;)dt.push("H",(ft[0]+(ft=de[Re])[0])/2,"V",ft[1]);return Ke>1&&dt.push("H",ft[0]),dt.join("")}function ie(de){for(var Re=0,Ke=de.length,ft=de[0],dt=[ft[0],",",ft[1]];++Re<Ke;)dt.push("V",(ft=de[Re])[1],"H",ft[0]);return dt.join("")}function xe(de){for(var Re=0,Ke=de.length,ft=de[0],dt=[ft[0],",",ft[1]];++Re<Ke;)dt.push("H",(ft=de[Re])[0],"V",ft[1]);return dt.join("")}function Te(de,Re){return de.length<4?yc(de):de[1]+_t(de.slice(1,-1),Rt(de,Re))}function De(de,Re){return de.length<3?Be(de):de[0]+_t((de.push(de[0]),de),Rt([de[de.length-2]].concat(de,[de[1]]),Re))}function ut(de,Re){return de.length<3?yc(de):de[0]+_t(de,Rt(de,Re))}function _t(de,Re){if(Re.length<1||de.length!=Re.length&&de.length!=Re.length+2)return yc(de);var Ke=de.length!=Re.length,ft="",dt=de[0],xt=de[1],Jt=Re[0],It=Jt,sr=1;if(Ke&&(ft+="Q"+(xt[0]-Jt[0]*2/3)+","+(xt[1]-Jt[1]*2/3)+","+xt[0]+","+xt[1],dt=de[1],sr=2),Re.length>1){It=Re[1],xt=de[sr],sr++,ft+="C"+(dt[0]+Jt[0])+","+(dt[1]+Jt[1])+","+(xt[0]-It[0])+","+(xt[1]-It[1])+","+xt[0]+","+xt[1];for(var zr=2;zr<Re.length;zr++,sr++)xt=de[sr],It=Re[zr],ft+="S"+(xt[0]-It[0])+","+(xt[1]-It[1])+","+xt[0]+","+xt[1]}if(Ke){var Or=de[sr];ft+="Q"+(xt[0]+It[0]*2/3)+","+(xt[1]+It[1]*2/3)+","+Or[0]+","+Or[1]}return ft}function Rt(de,Re){for(var Ke=[],ft=(1-Re)/2,dt,xt=de[0],Jt=de[1],It=1,sr=de.length;++It<sr;)dt=xt,xt=Jt,Jt=de[It],Ke.push([ft*(Jt[0]-dt[0]),ft*(Jt[1]-dt[1])]);return Ke}function Kt(de){if(de.length<3)return yc(de);var Re=1,Ke=de.length,ft=de[0],dt=ft[0],xt=ft[1],Jt=[dt,dt,dt,(ft=de[1])[0]],It=[xt,xt,xt,ft[1]],sr=[dt,",",xt,"L",ii(nt,Jt),",",ii(nt,It)];for(de.push(de[Ke-1]);++Re<=Ke;)ft=de[Re],Jt.shift(),Jt.push(ft[0]),It.shift(),It.push(ft[1]),ct(sr,Jt,It);return de.pop(),sr.push("L",ft),sr.join("")}function fr(de){if(de.length<4)return yc(de);for(var Re=[],Ke=-1,ft=de.length,dt,xt=[0],Jt=[0];++Ke<3;)dt=de[Ke],xt.push(dt[0]),Jt.push(dt[1]);for(Re.push(ii(nt,xt)+","+ii(nt,Jt)),--Ke;++Ke<ft;)dt=de[Ke],xt.shift(),xt.push(dt[0]),Jt.shift(),Jt.push(dt[1]),ct(Re,xt,Jt);return Re.join("")}function dr(de){for(var Re,Ke=-1,ft=de.length,dt=ft+4,xt,Jt=[],It=[];++Ke<4;)xt=de[Ke%ft],Jt.push(xt[0]),It.push(xt[1]);for(Re=[ii(nt,Jt),",",ii(nt,It)],--Ke;++Ke<dt;)xt=de[Ke%ft],Jt.shift(),Jt.push(xt[0]),It.shift(),It.push(xt[1]),ct(Re,Jt,It);return Re.join("")}function jr(de,Re){var Ke=de.length-1;if(Ke)for(var ft=de[0][0],dt=de[0][1],xt=de[Ke][0]-ft,Jt=de[Ke][1]-dt,It=-1,sr,zr;++It<=Ke;)sr=de[It],zr=It/Ke,sr[0]=Re*sr[0]+(1-Re)*(ft+zr*xt),sr[1]=Re*sr[1]+(1-Re)*(dt+zr*Jt);return Kt(de)}function ii(de,Re){return de[0]*Re[0]+de[1]*Re[1]+de[2]*Re[2]+de[3]*Re[3]}var qe=[0,2/3,1/3,0],Ye=[0,1/3,2/3,0],nt=[0,1/6,2/3,1/6];function ct(de,Re,Ke){de.push("C",ii(qe,Re),",",ii(qe,Ke),",",ii(Ye,Re),",",ii(Ye,Ke),",",ii(nt,Re),",",ii(nt,Ke))}function Tt(de,Re){return(Re[1]-de[1])/(Re[0]-de[0])}function gt(de){for(var Re=0,Ke=de.length-1,ft=[],dt=de[0],xt=de[1],Jt=ft[0]=Tt(dt,xt);++Re<Ke;)ft[Re]=(Jt+(Jt=Tt(dt=xt,xt=de[Re+1])))/2;return ft[Re]=Jt,ft}function Lt(de){for(var Re=[],Ke,ft,dt,xt,Jt=gt(de),It=-1,sr=de.length-1;++It<sr;)Ke=Tt(de[It],de[It+1]),l(Ke)<Ze?Jt[It]=Jt[It+1]=0:(ft=Jt[It]/Ke,dt=Jt[It+1]/Ke,xt=ft*ft+dt*dt,xt>9&&(xt=Ke*3/Math.sqrt(xt),Jt[It]=xt*ft,Jt[It+1]=xt*dt));for(It=-1;++It<=sr;)xt=(de[Math.min(sr,It+1)][0]-de[Math.max(0,It-1)][0])/(6*(1+Jt[It]*Jt[It])),Re.push([xt||0,Jt[It]*xt||0]);return Re}function tr(de){return de.length<3?yc(de):de[0]+_t(de,Lt(de))}g.svg.line.radial=function(){var de=qc(or);return de.radius=de.x,delete de.x,de.angle=de.y,delete de.y,de};function or(de){for(var Re,Ke=-1,ft=de.length,dt,xt;++Ke<ft;)Re=de[Ke],dt=Re[0],xt=Re[1]-be,Re[0]=dt*Math.cos(xt),Re[1]=dt*Math.sin(xt);return de}function vr(de){var Re=Yo,Ke=Yo,ft=0,dt=da,xt=Ko,Jt=yc,It=Jt.key,sr=Jt,zr="L",Or=.7;function bi(gi){var Ki=[],rn=[],Si=[],Ui=-1,Xi=gi.length,ln,nn=ti(Re),ji=ti(ft),Kn=Re===Ke?function(){return ga}:ti(Ke),ia=ft===dt?function(){return ka}:ti(dt),ga,ka;function ro(){Ki.push("M",Jt(de(Si),Or),zr,sr(de(rn.reverse()),Or),"Z")}for(;++Ui<Xi;)xt.call(this,ln=gi[Ui],Ui)?(rn.push([ga=+nn.call(this,ln,Ui),ka=+ji.call(this,ln,Ui)]),Si.push([+Kn.call(this,ln,Ui),+ia.call(this,ln,Ui)])):rn.length&&(ro(),rn=[],Si=[]);return rn.length&&ro(),Ki.length?Ki.join(""):null}return bi.x=function(gi){return arguments.length?(Re=Ke=gi,bi):Ke},bi.x0=function(gi){return arguments.length?(Re=gi,bi):Re},bi.x1=function(gi){return arguments.length?(Ke=gi,bi):Ke},bi.y=function(gi){return arguments.length?(ft=dt=gi,bi):dt},bi.y0=function(gi){return arguments.length?(ft=gi,bi):ft},bi.y1=function(gi){return arguments.length?(dt=gi,bi):dt},bi.defined=function(gi){return arguments.length?(xt=gi,bi):xt},bi.interpolate=function(gi){return arguments.length?(typeof gi=="function"?It=Jt=gi:It=(Jt=gc.get(gi)||yc).key,sr=Jt.reverse||Jt,zr=Jt.closed?"M":"L",bi):It},bi.tension=function(gi){return arguments.length?(Or=gi,bi):Or},bi}ie.reverse=xe,xe.reverse=ie,g.svg.area=function(){return vr(F)},g.svg.area.radial=function(){var de=vr(or);return de.radius=de.x,delete de.x,de.innerRadius=de.x0,delete de.x0,de.outerRadius=de.x1,delete de.x1,de.angle=de.y,delete de.y,de.startAngle=de.y0,delete de.y0,de.endAngle=de.y1,delete de.y1,de};function Sr(de){return de.source}function Wr(de){return de.target}g.svg.chord=function(){var de=Sr,Re=Wr,Ke=yi,ft=Mu,dt=Vc;function xt(Or,bi){var gi=Jt(this,de,Or,bi),Ki=Jt(this,Re,Or,bi);return"M"+gi.p0+sr(gi.r,gi.p1,gi.a1-gi.a0)+(It(gi,Ki)?zr(gi.r,gi.p1,gi.r,gi.p0):zr(gi.r,gi.p1,Ki.r,Ki.p0)+sr(Ki.r,Ki.p1,Ki.a1-Ki.a0)+zr(Ki.r,Ki.p1,gi.r,gi.p0))+"Z"}function Jt(Or,bi,gi,Ki){var rn=bi.call(Or,gi,Ki),Si=Ke.call(Or,rn,Ki),Ui=ft.call(Or,rn,Ki)-be,Xi=dt.call(Or,rn,Ki)-be;return{r:Si,a0:Ui,a1:Xi,p0:[Si*Math.cos(Ui),Si*Math.sin(Ui)],p1:[Si*Math.cos(Xi),Si*Math.sin(Xi)]}}function It(Or,bi){return Or.a0==bi.a0&&Or.a1==bi.a1}function sr(Or,bi,gi){return"A"+Or+","+Or+" 0 "+ +(gi>Se)+",1 "+bi}function zr(Or,bi,gi,Ki){return"Q 0,0 "+Ki}return xt.radius=function(Or){return arguments.length?(Ke=ti(Or),xt):Ke},xt.source=function(Or){return arguments.length?(de=ti(Or),xt):de},xt.target=function(Or){return arguments.length?(Re=ti(Or),xt):Re},xt.startAngle=function(Or){return arguments.length?(ft=ti(Or),xt):ft},xt.endAngle=function(Or){return arguments.length?(dt=ti(Or),xt):dt},xt};function yi(de){return de.radius}g.svg.diagonal=function(){var de=Sr,Re=Wr,Ke=Ai;function ft(dt,xt){var Jt=de.call(this,dt,xt),It=Re.call(this,dt,xt),sr=(Jt.y+It.y)/2,zr=[Jt,{x:Jt.x,y:sr},{x:It.x,y:sr},It];return zr=zr.map(Ke),"M"+zr[0]+"C"+zr[1]+" "+zr[2]+" "+zr[3]}return ft.source=function(dt){return arguments.length?(de=ti(dt),ft):de},ft.target=function(dt){return arguments.length?(Re=ti(dt),ft):Re},ft.projection=function(dt){return arguments.length?(Ke=dt,ft):Ke},ft};function Ai(de){return[de.x,de.y]}g.svg.diagonal.radial=function(){var de=g.svg.diagonal(),Re=Ai,Ke=de.projection;return de.projection=function(ft){return arguments.length?Ke(Oi(Re=ft)):Re},de};function Oi(de){return function(){var Re=de.apply(this,arguments),Ke=Re[0],ft=Re[1]-be;return[Ke*Math.cos(ft),Ke*Math.sin(ft)]}}g.svg.symbol=function(){var de=Mn,Re=on;function Ke(ft,dt){return(qn.get(de.call(this,ft,dt))||An)(Re.call(this,ft,dt))}return Ke.type=function(ft){return arguments.length?(de=ti(ft),Ke):de},Ke.size=function(ft){return arguments.length?(Re=ti(ft),Ke):Re},Ke};function on(){return 64}function Mn(){return"circle"}function An(de){var Re=Math.sqrt(de/Se);return"M0,"+Re+"A"+Re+","+Re+" 0 1,1 0,"+-Re+"A"+Re+","+Re+" 0 1,1 0,"+Re+"Z"}var qn=g.map({circle:An,cross:function(de){var Re=Math.sqrt(de/5)/2;return"M"+-3*Re+","+-Re+"H"+-Re+"V"+-3*Re+"H"+Re+"V"+-Re+"H"+3*Re+"V"+Re+"H"+Re+"V"+3*Re+"H"+-Re+"V"+Re+"H"+-3*Re+"Z"},diamond:function(de){var Re=Math.sqrt(de/(2*eo)),Ke=Re*eo;return"M0,"+-Re+"L"+Ke+",0 0,"+Re+" "+-Ke+",0Z"},square:function(de){var Re=Math.sqrt(de)/2;return"M"+-Re+","+-Re+"L"+Re+","+-Re+" "+Re+","+Re+" "+-Re+","+Re+"Z"},"triangle-down":function(de){var Re=Math.sqrt(de/ma),Ke=Re*ma/2;return"M0,"+Ke+"L"+Re+","+-Ke+" "+-Re+","+-Ke+"Z"},"triangle-up":function(de){var Re=Math.sqrt(de/ma),Ke=Re*ma/2;return"M0,"+-Ke+"L"+Re+","+Ke+" "+-Re+","+Ke+"Z"}});g.svg.symbolTypes=qn.keys();var ma=Math.sqrt(3),eo=Math.tan(30*Ce);ae.transition=function(de){for(var Re=Ms||++as,Ke=ls(de),ft=[],dt,xt,Jt=pl||{time:Date.now(),ease:yu,delay:0,duration:250},It=-1,sr=this.length;++It<sr;){ft.push(dt=[]);for(var zr=this[It],Or=-1,bi=zr.length;++Or<bi;)(xt=zr[Or])&&Hl(xt,Or,Ke,Re,Jt),dt.push(xt)}return _s(ft,Ke,Re)},ae.interrupt=function(de){return this.each(de==null?ja:Do(ls(de)))};var ja=Do(ls());function Do(de){return function(){var Re,Ke,ft;(Re=this[de])&&(ft=Re[Ke=Re.active])&&(ft.timer.c=null,ft.timer.t=NaN,--Re.count?delete Re[Ke]:delete this[de],Re.active+=.5,ft.event&&ft.event.interrupt.call(this,this.__data__,ft.index))}}function _s(de,Re,Ke){return G(de,Oo),de.namespace=Re,de.id=Ke,de}var Oo=[],as=0,Ms,pl;Oo.call=ae.call,Oo.empty=ae.empty,Oo.node=ae.node,Oo.size=ae.size,g.transition=function(de,Re){return de&&de.transition?Ms?de.transition(Re):de:g.selection().transition(de)},g.transition.prototype=Oo,Oo.select=function(de){var Re=this.id,Ke=this.namespace,ft=[],dt,xt,Jt;de=j(de);for(var It=-1,sr=this.length;++It<sr;){ft.push(dt=[]);for(var zr=this[It],Or=-1,bi=zr.length;++Or<bi;)(Jt=zr[Or])&&(xt=de.call(Jt,Jt.__data__,Or,It))?("__data__"in Jt&&(xt.__data__=Jt.__data__),Hl(xt,Or,Ke,Re,Jt[Ke][Re]),dt.push(xt)):dt.push(null)}return _s(ft,Ke,Re)},Oo.selectAll=function(de){var Re=this.id,Ke=this.namespace,ft=[],dt,xt,Jt,It,sr;de=ee(de);for(var zr=-1,Or=this.length;++zr<Or;)for(var bi=this[zr],gi=-1,Ki=bi.length;++gi<Ki;)if(Jt=bi[gi]){sr=Jt[Ke][Re],xt=de.call(Jt,Jt.__data__,gi,zr),ft.push(dt=[]);for(var rn=-1,Si=xt.length;++rn<Si;)(It=xt[rn])&&Hl(It,rn,Ke,Re,sr),dt.push(It)}return _s(ft,Ke,Re)},Oo.filter=function(de){var Re=[],Ke,ft,dt;typeof de!="function"&&(de=ue(de));for(var xt=0,Jt=this.length;xt<Jt;xt++){Re.push(Ke=[]);for(var ft=this[xt],It=0,sr=ft.length;It<sr;It++)(dt=ft[It])&&de.call(dt,dt.__data__,It,xt)&&Ke.push(dt)}return _s(Re,this.namespace,this.id)},Oo.tween=function(de,Re){var Ke=this.id,ft=this.namespace;return arguments.length<2?this.node()[ft][Ke].tween.get(de):Qe(this,Re==null?function(dt){dt[ft][Ke].tween.remove(de)}:function(dt){dt[ft][Ke].tween.set(de,Re)})};function ll(de,Re,Ke,ft){var dt=de.id,xt=de.namespace;return Qe(de,typeof Ke=="function"?function(Jt,It,sr){Jt[xt][dt].tween.set(Re,ft(Ke.call(Jt,Jt.__data__,It,sr)))}:(Ke=ft(Ke),function(Jt){Jt[xt][dt].tween.set(Re,Ke)}))}Oo.attr=function(de,Re){if(arguments.length<2){for(Re in de)this.attr(Re,de[Re]);return this}var Ke=de=="transform"?df:Wl,ft=g.ns.qualify(de);function dt(){this.removeAttribute(ft)}function xt(){this.removeAttributeNS(ft.space,ft.local)}function Jt(sr){return sr==null?dt:(sr+="",function(){var zr=this.getAttribute(ft),Or;return zr!==sr&&(Or=Ke(zr,sr),function(bi){this.setAttribute(ft,Or(bi))})})}function It(sr){return sr==null?xt:(sr+="",function(){var zr=this.getAttributeNS(ft.space,ft.local),Or;return zr!==sr&&(Or=Ke(zr,sr),function(bi){this.setAttributeNS(ft.space,ft.local,Or(bi))})})}return ll(this,"attr."+de,Re,ft.local?It:Jt)},Oo.attrTween=function(de,Re){var Ke=g.ns.qualify(de);function ft(xt,Jt){var It=Re.call(this,xt,Jt,this.getAttribute(Ke));return It&&function(sr){this.setAttribute(Ke,It(sr))}}function dt(xt,Jt){var It=Re.call(this,xt,Jt,this.getAttributeNS(Ke.space,Ke.local));return It&&function(sr){this.setAttributeNS(Ke.space,Ke.local,It(sr))}}return this.tween("attr."+de,Ke.local?dt:ft)},Oo.style=function(de,Re,Ke){var ft=arguments.length;if(ft<3){if(typeof de!="string"){ft<2&&(Re="");for(Ke in de)this.style(Ke,de[Ke],Re);return this}Ke=""}function dt(){this.style.removeProperty(de)}function xt(Jt){return Jt==null?dt:(Jt+="",function(){var It=t(this).getComputedStyle(this,null).getPropertyValue(de),sr;return It!==Jt&&(sr=Wl(It,Jt),function(zr){this.style.setProperty(de,sr(zr),Ke)})})}return ll(this,"style."+de,Re,xt)},Oo.styleTween=function(de,Re,Ke){arguments.length<3&&(Ke="");function ft(dt,xt){var Jt=Re.call(this,dt,xt,t(this).getComputedStyle(this,null).getPropertyValue(de));return Jt&&function(It){this.style.setProperty(de,Jt(It),Ke)}}return this.tween("style."+de,ft)},Oo.text=function(de){return ll(this,"text",de,cs)};function cs(de){return de==null&&(de=""),function(){this.textContent=de}}Oo.remove=function(){var de=this.namespace;return this.each("end.transition",function(){var Re;this[de].count<2&&(Re=this.parentNode)&&Re.removeChild(this)})},Oo.ease=function(de){var Re=this.id,Ke=this.namespace;return arguments.length<1?this.node()[Ke][Re].ease:(typeof de!="function"&&(de=g.ease.apply(g,arguments)),Qe(this,function(ft){ft[Ke][Re].ease=de}))},Oo.delay=function(de){var Re=this.id,Ke=this.namespace;return arguments.length<1?this.node()[Ke][Re].delay:Qe(this,typeof de=="function"?function(ft,dt,xt){ft[Ke][Re].delay=+de.call(ft,ft.__data__,dt,xt)}:(de=+de,function(ft){ft[Ke][Re].delay=de}))},Oo.duration=function(de){var Re=this.id,Ke=this.namespace;return arguments.length<1?this.node()[Ke][Re].duration:Qe(this,typeof de=="function"?function(ft,dt,xt){ft[Ke][Re].duration=Math.max(1,de.call(ft,ft.__data__,dt,xt))}:(de=Math.max(1,de),function(ft){ft[Ke][Re].duration=de}))},Oo.each=function(de,Re){var Ke=this.id,ft=this.namespace;if(arguments.length<2){var dt=pl,xt=Ms;try{Ms=Ke,Qe(this,function(Jt,It,sr){pl=Jt[ft][Ke],de.call(Jt,Jt.__data__,It,sr)})}finally{pl=dt,Ms=xt}}else Qe(this,function(Jt){var It=Jt[ft][Ke];(It.event||(It.event=g.dispatch("start","end","interrupt"))).on(de,Re)});return this},Oo.transition=function(){for(var de=this.id,Re=++as,Ke=this.namespace,ft=[],dt,xt,Jt,It,sr=0,zr=this.length;sr<zr;sr++){ft.push(dt=[]);for(var xt=this[sr],Or=0,bi=xt.length;Or<bi;Or++)(Jt=xt[Or])&&(It=Jt[Ke][de],Hl(Jt,Or,Ke,Re,{time:It.time,ease:It.ease,delay:It.delay+It.duration,duration:It.duration})),dt.push(Jt)}return _s(ft,Ke,Re)};function ls(de){return de==null?"__transition__":"__transition_"+de+"__"}function Hl(de,Re,Ke,ft,dt){var xt=de[Ke]||(de[Ke]={active:0,count:0}),Jt=xt[ft],It,sr,zr,Or,bi;function gi(Si){var Ui=Jt.delay;if(sr.t=Ui+It,Ui<=Si)return Ki(Si-Ui);sr.c=Ki}function Ki(Si){var Ui=xt.active,Xi=xt[Ui];Xi&&(Xi.timer.c=null,Xi.timer.t=NaN,--xt.count,delete xt[Ui],Xi.event&&Xi.event.interrupt.call(de,de.__data__,Xi.index));for(var ln in xt)if(+ln<ft){var nn=xt[ln];nn.timer.c=null,nn.timer.t=NaN,--xt.count,delete xt[ln]}sr.c=rn,Va(function(){return sr.c&&rn(Si||1)&&(sr.c=null,sr.t=NaN),1},0,It),xt.active=ft,Jt.event&&Jt.event.start.call(de,de.__data__,Re),bi=[],Jt.tween.forEach(function(ji,Kn){(Kn=Kn.call(de,de.__data__,Re))&&bi.push(Kn)}),Or=Jt.ease,zr=Jt.duration}function rn(Si){for(var Ui=Si/zr,Xi=Or(Ui),ln=bi.length;ln>0;)bi[--ln].call(de,Xi);if(Ui>=1)return Jt.event&&Jt.event.end.call(de,de.__data__,Re),--xt.count?delete xt[ft]:delete de[Ke],1}Jt||(It=dt.time,sr=Va(gi,0,It),Jt=xt[ft]={tween:new M,time:It,timer:sr,delay:dt.delay,duration:dt.duration,ease:dt.ease,index:Re},dt=null,++xt.count)}g.svg.axis=function(){var de=g.scale.linear(),Re=iu,Ke=6,ft=6,dt=3,xt=[10],Jt=null,It;function sr(zr){zr.each(function(){var Or=g.select(this),bi=this.__chart__||de,gi=this.__chart__=de.copy(),Ki=Jt??(gi.ticks?gi.ticks.apply(gi,xt):gi.domain()),rn=It??(gi.tickFormat?gi.tickFormat.apply(gi,xt):F),Si=Or.selectAll(".tick").data(Ki,gi),Ui=Si.enter().insert("g",".domain").attr("class","tick").style("opacity",Ze),Xi=g.transition(Si.exit()).style("opacity",Ze).remove(),ln=g.transition(Si.order()).style("opacity",1),nn=Math.max(Ke,0)+dt,ji,Kn=Vn(gi),ia=Or.selectAll(".domain").data([0]),ga=(ia.enter().append("path").attr("class","domain"),g.transition(ia));Ui.append("line"),Ui.append("text");var ka=Ui.select("line"),ro=ln.select("line"),ao=Si.select("text").text(rn),is=Ui.select("text"),lo=ln.select("text"),ts=Re==="top"||Re==="left"?-1:1,ul,nl,xl,oa;if(Re==="bottom"||Re==="top"?(ji=_u,ul="x",xl="y",nl="x2",oa="y2",ao.attr("dy",ts<0?"0em":".71em").style("text-anchor","middle"),ga.attr("d","M"+Kn[0]+","+ts*ft+"V0H"+Kn[1]+"V"+ts*ft)):(ji=Il,ul="y",xl="x",nl="y2",oa="x2",ao.attr("dy",".32em").style("text-anchor",ts<0?"end":"start"),ga.attr("d","M"+ts*ft+","+Kn[0]+"H0V"+Kn[1]+"H"+ts*ft)),ka.attr(oa,ts*Ke),is.attr(xl,ts*nn),ro.attr(nl,0).attr(oa,ts*Ke),lo.attr(ul,0).attr(xl,ts*nn),gi.rangeBand){var wo=gi,ws=wo.rangeBand()/2;bi=gi=function(Cs){return wo(Cs)+ws}}else bi.rangeBand?bi=gi:Xi.call(ji,gi,bi);Ui.call(ji,bi,gi),ln.call(ji,gi,gi)})}return sr.scale=function(zr){return arguments.length?(de=zr,sr):de},sr.orient=function(zr){return arguments.length?(Re=zr in Yu?zr+"":iu,sr):Re},sr.ticks=function(){return arguments.length?(xt=A(arguments),sr):xt},sr.tickValues=function(zr){return arguments.length?(Jt=zr,sr):Jt},sr.tickFormat=function(zr){return arguments.length?(It=zr,sr):It},sr.tickSize=function(zr){var Or=arguments.length;return Or?(Ke=+zr,ft=+arguments[Or-1],sr):Ke},sr.innerTickSize=function(zr){return arguments.length?(Ke=+zr,sr):Ke},sr.outerTickSize=function(zr){return arguments.length?(ft=+zr,sr):ft},sr.tickPadding=function(zr){return arguments.length?(dt=+zr,sr):dt},sr.tickSubdivide=function(){return arguments.length&&sr},sr};var iu="bottom",Yu={top:1,right:1,bottom:1,left:1};function _u(de,Re,Ke){de.attr("transform",function(ft){var dt=Re(ft);return"translate("+(isFinite(dt)?dt:Ke(ft))+",0)"})}function Il(de,Re,Ke){de.attr("transform",function(ft){var dt=Re(ft);return"translate(0,"+(isFinite(dt)?dt:Ke(ft))+")"})}g.svg.brush=function(){var de=se(Or,"brushstart","brush","brushend"),Re=null,Ke=null,ft=[0,0],dt=[0,0],xt,Jt,It=!0,sr=!0,zr=Lc[0];function Or(Si){Si.each(function(){var Ui=g.select(this).style("pointer-events","all").style("-webkit-tap-highlight-color","rgba(0,0,0,0)").on("mousedown.brush",rn).on("touchstart.brush",rn),Xi=Ui.selectAll(".background").data([0]);Xi.enter().append("rect").attr("class","background").style("visibility","hidden").style("cursor","crosshair"),Ui.selectAll(".extent").data([0]).enter().append("rect").attr("class","extent").style("cursor","move");var ln=Ui.selectAll(".resize").data(zr,F);ln.exit().remove(),ln.enter().append("g").attr("class",function(ia){return"resize "+ia}).style("cursor",function(ia){return vu[ia]}).append("rect").attr("x",function(ia){return/[ew]$/.test(ia)?-3:null}).attr("y",function(ia){return/^[ns]/.test(ia)?-3:null}).attr("width",6).attr("height",6).style("visibility","hidden"),ln.style("display",Or.empty()?"none":null);var nn=g.transition(Ui),ji=g.transition(Xi),Kn;Re&&(Kn=Vn(Re),ji.attr("x",Kn[0]).attr("width",Kn[1]-Kn[0]),gi(nn)),Ke&&(Kn=Vn(Ke),ji.attr("y",Kn[0]).attr("height",Kn[1]-Kn[0]),Ki(nn)),bi(nn)})}Or.event=function(Si){Si.each(function(){var Ui=de.of(this,arguments),Xi={x:ft,y:dt,i:xt,j:Jt},ln=this.__chart__||Xi;this.__chart__=Xi,Ms?g.select(this).transition().each("start.brush",function(){xt=ln.i,Jt=ln.j,ft=ln.x,dt=ln.y,Ui({type:"brushstart"})}).tween("brush:brush",function(){var nn=ec(ft,Xi.x),ji=ec(dt,Xi.y);return xt=Jt=null,function(Kn){ft=Xi.x=nn(Kn),dt=Xi.y=ji(Kn),Ui({type:"brush",mode:"resize"})}}).each("end.brush",function(){xt=Xi.i,Jt=Xi.j,Ui({type:"brush",mode:"resize"}),Ui({type:"brushend"})}):(Ui({type:"brushstart"}),Ui({type:"brush",mode:"resize"}),Ui({type:"brushend"}))})};function bi(Si){Si.selectAll(".resize").attr("transform",function(Ui){return"translate("+ft[+/e$/.test(Ui)]+","+dt[+/^s/.test(Ui)]+")"})}function gi(Si){Si.select(".extent").attr("x",ft[0]),Si.selectAll(".extent,.n>rect,.s>rect").attr("width",ft[1]-ft[0])}function Ki(Si){Si.select(".extent").attr("y",dt[0]),Si.selectAll(".extent,.e>rect,.w>rect").attr("height",dt[1]-dt[0])}function rn(){var Si=this,Ui=g.select(g.event.target),Xi=de.of(Si,arguments),ln=g.select(Si),nn=Ui.datum(),ji=!/^(n|s)$/.test(nn)&&Re,Kn=!/^(e|w)$/.test(nn)&&Ke,ia=Ui.classed("extent"),ga=mr(Si),ka,ro=g.mouse(Si),ao,is=g.select(t(Si)).on("keydown.brush",ul).on("keyup.brush",nl);if(g.event.changedTouches?is.on("touchmove.brush",xl).on("touchend.brush",wo):is.on("mousemove.brush",xl).on("mouseup.brush",wo),ln.interrupt().selectAll("*").interrupt(),ia)ro[0]=ft[0]-ro[0],ro[1]=dt[0]-ro[1];else if(nn){var lo=+/w$/.test(nn),ts=+/^n/.test(nn);ao=[ft[1-lo]-ro[0],dt[1-ts]-ro[1]],ro[0]=ft[lo],ro[1]=dt[ts]}else g.event.altKey&&(ka=ro.slice());ln.style("pointer-events","none").selectAll(".resize").style("display",null),g.select("body").style("cursor",Ui.style("cursor")),Xi({type:"brushstart"}),xl();function ul(){g.event.keyCode==32&&(ia||(ka=null,ro[0]-=ft[1],ro[1]-=dt[1],ia=2),Q())}function nl(){g.event.keyCode==32&&ia==2&&(ro[0]+=ft[1],ro[1]+=dt[1],ia=0,Q())}function xl(){var ws=g.mouse(Si),Cs=!1;ao&&(ws[0]+=ao[0],ws[1]+=ao[1]),ia||(g.event.altKey?(ka||(ka=[(ft[0]+ft[1])/2,(dt[0]+dt[1])/2]),ro[0]=ft[+(ws[0]<ka[0])],ro[1]=dt[+(ws[1]<ka[1])]):ka=null),ji&&oa(ws,Re,0)&&(gi(ln),Cs=!0),Kn&&oa(ws,Ke,1)&&(Ki(ln),Cs=!0),Cs&&(bi(ln),Xi({type:"brush",mode:ia?"move":"resize"}))}function oa(ws,Cs,Al){var Gl=Vn(Cs),xu=Gl[0],Ul=Gl[1],_c=ro[Al],er=Al?dt:ft,oi=er[1]-er[0],Li,mn;if(ia&&(xu-=_c,Ul-=oi+_c),Li=(Al?sr:It)?Math.max(xu,Math.min(Ul,ws[Al])):ws[Al],ia?mn=(Li+=_c)+oi:(ka&&(_c=Math.max(xu,Math.min(Ul,2*ka[Al]-Li))),_c<Li?(mn=Li,Li=_c):mn=_c),er[0]!=Li||er[1]!=mn)return Al?Jt=null:xt=null,er[0]=Li,er[1]=mn,!0}function wo(){xl(),ln.style("pointer-events","all").selectAll(".resize").style("display",Or.empty()?"none":null),g.select("body").style("cursor",null),is.on("mousemove.brush",null).on("mouseup.brush",null).on("touchmove.brush",null).on("touchend.brush",null).on("keydown.brush",null).on("keyup.brush",null),ga(),Xi({type:"brushend"})}}return Or.x=function(Si){return arguments.length?(Re=Si,zr=Lc[!Re<<1|!Ke],Or):Re},Or.y=function(Si){return arguments.length?(Ke=Si,zr=Lc[!Re<<1|!Ke],Or):Ke},Or.clamp=function(Si){return arguments.length?(Re&&Ke?(It=!!Si[0],sr=!!Si[1]):Re?It=!!Si:Ke&&(sr=!!Si),Or):Re&&Ke?[It,sr]:Re?It:Ke?sr:null},Or.extent=function(Si){var Ui,Xi,ln,nn,ji;return arguments.length?(Re&&(Ui=Si[0],Xi=Si[1],Ke&&(Ui=Ui[0],Xi=Xi[0]),xt=[Ui,Xi],Re.invert&&(Ui=Re(Ui),Xi=Re(Xi)),Xi<Ui&&(ji=Ui,Ui=Xi,Xi=ji),(Ui!=ft[0]||Xi!=ft[1])&&(ft=[Ui,Xi])),Ke&&(ln=Si[0],nn=Si[1],Re&&(ln=ln[1],nn=nn[1]),Jt=[ln,nn],Ke.invert&&(ln=Ke(ln),nn=Ke(nn)),nn<ln&&(ji=ln,ln=nn,nn=ji),(ln!=dt[0]||nn!=dt[1])&&(dt=[ln,nn])),Or):(Re&&(xt?(Ui=xt[0],Xi=xt[1]):(Ui=ft[0],Xi=ft[1],Re.invert&&(Ui=Re.invert(Ui),Xi=Re.invert(Xi)),Xi<Ui&&(ji=Ui,Ui=Xi,Xi=ji))),Ke&&(Jt?(ln=Jt[0],nn=Jt[1]):(ln=dt[0],nn=dt[1],Ke.invert&&(ln=Ke.invert(ln),nn=Ke.invert(nn)),nn<ln&&(ji=ln,ln=nn,nn=ji))),Re&&Ke?[[Ui,ln],[Xi,nn]]:Re?[Ui,Xi]:Ke&&[ln,nn])},Or.clear=function(){return Or.empty()||(ft=[0,0],dt=[0,0],xt=Jt=null),Or},Or.empty=function(){return!!Re&&ft[0]==ft[1]||!!Ke&&dt[0]==dt[1]},g.rebind(Or,de,"on")};var vu={n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},Lc=[["n","e","s","w","nw","ne","se","sw"],["e","w"],["n","s"],[]];g.text=wi(function(de){return de.responseText}),g.json=function(de,Re){return Gi(de,"application/json",Ql,Re)};function Ql(de){return JSON.parse(de.responseText)}g.html=function(de,Re){return Gi(de,"text/html",eu,Re)};function eu(de){var Re=S.createRange();return Re.selectNode(S.body),Re.createContextualFragment(de.responseText)}g.xml=wi(function(de){return de.responseXML}),typeof H=="object"&&H.exports?H.exports=g:this.d3=g}).apply(self)}}),za=Le({"node_modules/d3-time/dist/d3-time.js"(Z,H){(function(g,x){typeof Z=="object"&&typeof H<"u"?x(Z):(g=g||self,x(g.d3=g.d3||{}))})(Z,function(g){"use strict";var x=new Date,A=new Date;function S(ue,ze,Qe,it){function $e(kt){return ue(kt=arguments.length===0?new Date:new Date(+kt)),kt}return $e.floor=function(kt){return ue(kt=new Date(+kt)),kt},$e.ceil=function(kt){return ue(kt=new Date(kt-1)),ze(kt,1),ue(kt),kt},$e.round=function(kt){var Mt=$e(kt),Bt=$e.ceil(kt);return kt-Mt<Bt-kt?Mt:Bt},$e.offset=function(kt,Mt){return ze(kt=new Date(+kt),Mt==null?1:Math.floor(Mt)),kt},$e.range=function(kt,Mt,Bt){var jt=[],cr;if(kt=$e.ceil(kt),Bt=Bt==null?1:Math.floor(Bt),!(kt<Mt)||!(Bt>0))return jt;do jt.push(cr=new Date(+kt)),ze(kt,Bt),ue(kt);while(cr<kt&&kt<Mt);return jt},$e.filter=function(kt){return S(function(Mt){if(Mt>=Mt)for(;ue(Mt),!kt(Mt);)Mt.setTime(Mt-1)},function(Mt,Bt){if(Mt>=Mt)if(Bt<0)for(;++Bt<=0;)for(;ze(Mt,-1),!kt(Mt););else for(;--Bt>=0;)for(;ze(Mt,1),!kt(Mt););})},Qe&&($e.count=function(kt,Mt){return x.setTime(+kt),A.setTime(+Mt),ue(x),ue(A),Math.floor(Qe(x,A))},$e.every=function(kt){return kt=Math.floor(kt),!isFinite(kt)||!(kt>0)?null:kt>1?$e.filter(it?function(Mt){return it(Mt)%kt===0}:function(Mt){return $e.count(0,Mt)%kt===0}):$e}),$e}var e=S(function(){},function(ue,ze){ue.setTime(+ue+ze)},function(ue,ze){return ze-ue});e.every=function(ue){return ue=Math.floor(ue),!isFinite(ue)||!(ue>0)?null:ue>1?S(function(ze){ze.setTime(Math.floor(ze/ue)*ue)},function(ze,Qe){ze.setTime(+ze+Qe*ue)},function(ze,Qe){return(Qe-ze)/ue}):e};var t=e.range,r=1e3,o=6e4,i=36e5,n=864e5,a=6048e5,s=S(function(ue){ue.setTime(ue-ue.getMilliseconds())},function(ue,ze){ue.setTime(+ue+ze*r)},function(ue,ze){return(ze-ue)/r},function(ue){return ue.getUTCSeconds()}),c=s.range,h=S(function(ue){ue.setTime(ue-ue.getMilliseconds()-ue.getSeconds()*r)},function(ue,ze){ue.setTime(+ue+ze*o)},function(ue,ze){return(ze-ue)/o},function(ue){return ue.getMinutes()}),p=h.range,d=S(function(ue){ue.setTime(ue-ue.getMilliseconds()-ue.getSeconds()*r-ue.getMinutes()*o)},function(ue,ze){ue.setTime(+ue+ze*i)},function(ue,ze){return(ze-ue)/i},function(ue){return ue.getHours()}),T=d.range,l=S(function(ue){ue.setHours(0,0,0,0)},function(ue,ze){ue.setDate(ue.getDate()+ze)},function(ue,ze){return(ze-ue-(ze.getTimezoneOffset()-ue.getTimezoneOffset())*o)/n},function(ue){return ue.getDate()-1}),_=l.range;function w(ue){return S(function(ze){ze.setDate(ze.getDate()-(ze.getDay()+7-ue)%7),ze.setHours(0,0,0,0)},function(ze,Qe){ze.setDate(ze.getDate()+Qe*7)},function(ze,Qe){return(Qe-ze-(Qe.getTimezoneOffset()-ze.getTimezoneOffset())*o)/a})}var M=w(0),E=w(1),m=w(2),b=w(3),v=w(4),u=w(5),y=w(6),f=M.range,P=E.range,L=m.range,z=b.range,F=v.range,O=u.range,B=y.range,I=S(function(ue){ue.setDate(1),ue.setHours(0,0,0,0)},function(ue,ze){ue.setMonth(ue.getMonth()+ze)},function(ue,ze){return ze.getMonth()-ue.getMonth()+(ze.getFullYear()-ue.getFullYear())*12},function(ue){return ue.getMonth()}),N=I.range,U=S(function(ue){ue.setMonth(0,1),ue.setHours(0,0,0,0)},function(ue,ze){ue.setFullYear(ue.getFullYear()+ze)},function(ue,ze){return ze.getFullYear()-ue.getFullYear()},function(ue){return ue.getFullYear()});U.every=function(ue){return!isFinite(ue=Math.floor(ue))||!(ue>0)?null:S(function(ze){ze.setFullYear(Math.floor(ze.getFullYear()/ue)*ue),ze.setMonth(0,1),ze.setHours(0,0,0,0)},function(ze,Qe){ze.setFullYear(ze.getFullYear()+Qe*ue)})};var W=U.range,Q=S(function(ue){ue.setUTCSeconds(0,0)},function(ue,ze){ue.setTime(+ue+ze*o)},function(ue,ze){return(ze-ue)/o},function(ue){return ue.getUTCMinutes()}),le=Q.range,se=S(function(ue){ue.setUTCMinutes(0,0,0)},function(ue,ze){ue.setTime(+ue+ze*i)},function(ue,ze){return(ze-ue)/i},function(ue){return ue.getUTCHours()}),fe=se.range,G=S(function(ue){ue.setUTCHours(0,0,0,0)},function(ue,ze){ue.setUTCDate(ue.getUTCDate()+ze)},function(ue,ze){return(ze-ue)/n},function(ue){return ue.getUTCDate()-1}),J=G.range;function $(ue){return S(function(ze){ze.setUTCDate(ze.getUTCDate()-(ze.getUTCDay()+7-ue)%7),ze.setUTCHours(0,0,0,0)},function(ze,Qe){ze.setUTCDate(ze.getUTCDate()+Qe*7)},function(ze,Qe){return(Qe-ze)/a})}var X=$(0),re=$(1),ae=$(2),j=$(3),ee=$(4),ne=$(5),ce=$(6),_e=X.range,we=re.range,Oe=ae.range,Ie=j.range,Xe=ee.range,tt=ne.range,rt=ce.range,Je=S(function(ue){ue.setUTCDate(1),ue.setUTCHours(0,0,0,0)},function(ue,ze){ue.setUTCMonth(ue.getUTCMonth()+ze)},function(ue,ze){return ze.getUTCMonth()-ue.getUTCMonth()+(ze.getUTCFullYear()-ue.getUTCFullYear())*12},function(ue){return ue.getUTCMonth()}),ot=Je.range,Me=S(function(ue){ue.setUTCMonth(0,1),ue.setUTCHours(0,0,0,0)},function(ue,ze){ue.setUTCFullYear(ue.getUTCFullYear()+ze)},function(ue,ze){return ze.getUTCFullYear()-ue.getUTCFullYear()},function(ue){return ue.getUTCFullYear()});Me.every=function(ue){return!isFinite(ue=Math.floor(ue))||!(ue>0)?null:S(function(ze){ze.setUTCFullYear(Math.floor(ze.getUTCFullYear()/ue)*ue),ze.setUTCMonth(0,1),ze.setUTCHours(0,0,0,0)},function(ze,Qe){ze.setUTCFullYear(ze.getUTCFullYear()+Qe*ue)})};var pe=Me.range;g.timeDay=l,g.timeDays=_,g.timeFriday=u,g.timeFridays=O,g.timeHour=d,g.timeHours=T,g.timeInterval=S,g.timeMillisecond=e,g.timeMilliseconds=t,g.timeMinute=h,g.timeMinutes=p,g.timeMonday=E,g.timeMondays=P,g.timeMonth=I,g.timeMonths=N,g.timeSaturday=y,g.timeSaturdays=B,g.timeSecond=s,g.timeSeconds=c,g.timeSunday=M,g.timeSundays=f,g.timeThursday=v,g.timeThursdays=F,g.timeTuesday=m,g.timeTuesdays=L,g.timeWednesday=b,g.timeWednesdays=z,g.timeWeek=M,g.timeWeeks=f,g.timeYear=U,g.timeYears=W,g.utcDay=G,g.utcDays=J,g.utcFriday=ne,g.utcFridays=tt,g.utcHour=se,g.utcHours=fe,g.utcMillisecond=e,g.utcMilliseconds=t,g.utcMinute=Q,g.utcMinutes=le,g.utcMonday=re,g.utcMondays=we,g.utcMonth=Je,g.utcMonths=ot,g.utcSaturday=ce,g.utcSaturdays=rt,g.utcSecond=s,g.utcSeconds=c,g.utcSunday=X,g.utcSundays=_e,g.utcThursday=ee,g.utcThursdays=Xe,g.utcTuesday=ae,g.utcTuesdays=Oe,g.utcWednesday=j,g.utcWednesdays=Ie,g.utcWeek=X,g.utcWeeks=_e,g.utcYear=Me,g.utcYears=pe,Object.defineProperty(g,"__esModule",{value:!0})})}}),Ia=Le({"node_modules/d3-time-format/dist/d3-time-format.js"(Z,H){(function(g,x){typeof Z=="object"&&typeof H<"u"?x(Z,za()):(g=g||self,x(g.d3=g.d3||{},g.d3))})(Z,function(g,x){"use strict";function A(Fe){if(0<=Fe.y&&Fe.y<100){var Ze=new Date(-1,Fe.m,Fe.d,Fe.H,Fe.M,Fe.S,Fe.L);return Ze.setFullYear(Fe.y),Ze}return new Date(Fe.y,Fe.m,Fe.d,Fe.H,Fe.M,Fe.S,Fe.L)}function S(Fe){if(0<=Fe.y&&Fe.y<100){var Ze=new Date(Date.UTC(-1,Fe.m,Fe.d,Fe.H,Fe.M,Fe.S,Fe.L));return Ze.setUTCFullYear(Fe.y),Ze}return new Date(Date.UTC(Fe.y,Fe.m,Fe.d,Fe.H,Fe.M,Fe.S,Fe.L))}function e(Fe,Ze,Ne){return{y:Fe,m:Ze,d:Ne,H:0,M:0,S:0,L:0}}function t(Fe){var Ze=Fe.dateTime,Ne=Fe.date,Se=Fe.time,Ve=Fe.periods,Ee=Fe.days,be=Fe.shortDays,Ce=Fe.months,et=Fe.shortMonths,ht=c(Ve),yt=h(Ve),Pt=c(Ee),Ot=h(Ee),Wt=c(be),$t=h(be),lr=c(Ce),fi=h(Ce),Pi=c(et),Bi=h(et),zi={a:qi,A:$i,b:Mi,B:sn,c:null,d:I,e:I,f:le,H:N,I:U,j:W,L:Q,m:se,M:fe,p:vt,q:pt,Q:Mt,s:Bt,S:G,u:J,U:$,V:X,w:re,W:ae,x:null,X:null,y:j,Y:ee,Z:ne,"%":kt},en={a:kr,A:Cr,b:wr,B:Ar,c:null,d:ce,e:ce,f:Xe,H:_e,I:we,j:Oe,L:Ie,m:tt,M:rt,p:Er,q:Br,Q:Mt,s:Bt,S:Je,u:ot,U:Me,V:pe,w:ue,W:ze,x:null,X:null,y:Qe,Y:it,Z:$e,"%":kt},Ri={a:qt,A:Ut,b:br,B:Zr,c:_i,d:v,e:v,f:z,H:y,I:y,j:u,L,m:b,M:f,p:Dt,q:m,Q:O,s:B,S:P,u:d,U:T,V:l,w:p,W:_,x:Yr,X:Di,y:M,Y:w,Z:E,"%":F};zi.x=Zi(Ne,zi),zi.X=Zi(Se,zi),zi.c=Zi(Ze,zi),en.x=Zi(Ne,en),en.X=Zi(Se,en),en.c=Zi(Ze,en);function Zi(Pr,Qr){return function(ci){var mi=[],Et=-1,ar=0,gr=Pr.length,ti,wi,Gi;for(ci instanceof Date||(ci=new Date(+ci));++Et<gr;)Pr.charCodeAt(Et)===37&&(mi.push(Pr.slice(ar,Et)),(wi=r[ti=Pr.charAt(++Et)])!=null?ti=Pr.charAt(++Et):wi=ti==="e"?" ":"0",(Gi=Qr[ti])&&(ti=Gi(ci,wi)),mi.push(ti),ar=Et+1);return mi.push(Pr.slice(ar,Et)),mi.join("")}}function vn(Pr,Qr){return function(ci){var mi=e(1900,void 0,1),Et=Xt(mi,Pr,ci+="",0),ar,gr;if(Et!=ci.length)return null;if("Q"in mi)return new Date(mi.Q);if("s"in mi)return new Date(mi.s*1e3+("L"in mi?mi.L:0));if(Qr&&!("Z"in mi)&&(mi.Z=0),"p"in mi&&(mi.H=mi.H%12+mi.p*12),mi.m===void 0&&(mi.m="q"in mi?mi.q:0),"V"in mi){if(mi.V<1||mi.V>53)return null;"w"in mi||(mi.w=1),"Z"in mi?(ar=S(e(mi.y,0,1)),gr=ar.getUTCDay(),ar=gr>4||gr===0?x.utcMonday.ceil(ar):x.utcMonday(ar),ar=x.utcDay.offset(ar,(mi.V-1)*7),mi.y=ar.getUTCFullYear(),mi.m=ar.getUTCMonth(),mi.d=ar.getUTCDate()+(mi.w+6)%7):(ar=A(e(mi.y,0,1)),gr=ar.getDay(),ar=gr>4||gr===0?x.timeMonday.ceil(ar):x.timeMonday(ar),ar=x.timeDay.offset(ar,(mi.V-1)*7),mi.y=ar.getFullYear(),mi.m=ar.getMonth(),mi.d=ar.getDate()+(mi.w+6)%7)}else("W"in mi||"U"in mi)&&("w"in mi||(mi.w="u"in mi?mi.u%7:"W"in mi?1:0),gr="Z"in mi?S(e(mi.y,0,1)).getUTCDay():A(e(mi.y,0,1)).getDay(),mi.m=0,mi.d="W"in mi?(mi.w+6)%7+mi.W*7-(gr+5)%7:mi.w+mi.U*7-(gr+6)%7);return"Z"in mi?(mi.H+=mi.Z/100|0,mi.M+=mi.Z%100,S(mi)):A(mi)}}function Xt(Pr,Qr,ci,mi){for(var Et=0,ar=Qr.length,gr=ci.length,ti,wi;Et<ar;){if(mi>=gr)return-1;if(ti=Qr.charCodeAt(Et++),ti===37){if(ti=Qr.charAt(Et++),wi=Ri[ti in r?Qr.charAt(Et++):ti],!wi||(mi=wi(Pr,ci,mi))<0)return-1}else if(ti!=ci.charCodeAt(mi++))return-1}return mi}function Dt(Pr,Qr,ci){var mi=ht.exec(Qr.slice(ci));return mi?(Pr.p=yt[mi[0].toLowerCase()],ci+mi[0].length):-1}function qt(Pr,Qr,ci){var mi=Wt.exec(Qr.slice(ci));return mi?(Pr.w=$t[mi[0].toLowerCase()],ci+mi[0].length):-1}function Ut(Pr,Qr,ci){var mi=Pt.exec(Qr.slice(ci));return mi?(Pr.w=Ot[mi[0].toLowerCase()],ci+mi[0].length):-1}function br(Pr,Qr,ci){var mi=Pi.exec(Qr.slice(ci));return mi?(Pr.m=Bi[mi[0].toLowerCase()],ci+mi[0].length):-1}function Zr(Pr,Qr,ci){var mi=lr.exec(Qr.slice(ci));return mi?(Pr.m=fi[mi[0].toLowerCase()],ci+mi[0].length):-1}function _i(Pr,Qr,ci){return Xt(Pr,Ze,Qr,ci)}function Yr(Pr,Qr,ci){return Xt(Pr,Ne,Qr,ci)}function Di(Pr,Qr,ci){return Xt(Pr,Se,Qr,ci)}function qi(Pr){return be[Pr.getDay()]}function $i(Pr){return Ee[Pr.getDay()]}function Mi(Pr){return et[Pr.getMonth()]}function sn(Pr){return Ce[Pr.getMonth()]}function vt(Pr){return Ve[+(Pr.getHours()>=12)]}function pt(Pr){return 1+~~(Pr.getMonth()/3)}function kr(Pr){return be[Pr.getUTCDay()]}function Cr(Pr){return Ee[Pr.getUTCDay()]}function wr(Pr){return et[Pr.getUTCMonth()]}function Ar(Pr){return Ce[Pr.getUTCMonth()]}function Er(Pr){return Ve[+(Pr.getUTCHours()>=12)]}function Br(Pr){return 1+~~(Pr.getUTCMonth()/3)}return{format:function(Pr){var Qr=Zi(Pr+="",zi);return Qr.toString=function(){return Pr},Qr},parse:function(Pr){var Qr=vn(Pr+="",!1);return Qr.toString=function(){return Pr},Qr},utcFormat:function(Pr){var Qr=Zi(Pr+="",en);return Qr.toString=function(){return Pr},Qr},utcParse:function(Pr){var Qr=vn(Pr+="",!0);return Qr.toString=function(){return Pr},Qr}}}var r={"-":"",_:" ",0:"0"},o=/^\s*\d+/,i=/^%/,n=/[\\^$*+?|[\]().{}]/g;function a(Fe,Ze,Ne){var Se=Fe<0?"-":"",Ve=(Se?-Fe:Fe)+"",Ee=Ve.length;return Se+(Ee<Ne?new Array(Ne-Ee+1).join(Ze)+Ve:Ve)}function s(Fe){return Fe.replace(n,"\\$&")}function c(Fe){return new RegExp("^(?:"+Fe.map(s).join("|")+")","i")}function h(Fe){for(var Ze={},Ne=-1,Se=Fe.length;++Ne<Se;)Ze[Fe[Ne].toLowerCase()]=Ne;return Ze}function p(Fe,Ze,Ne){var Se=o.exec(Ze.slice(Ne,Ne+1));return Se?(Fe.w=+Se[0],Ne+Se[0].length):-1}function d(Fe,Ze,Ne){var Se=o.exec(Ze.slice(Ne,Ne+1));return Se?(Fe.u=+Se[0],Ne+Se[0].length):-1}function T(Fe,Ze,Ne){var Se=o.exec(Ze.slice(Ne,Ne+2));return Se?(Fe.U=+Se[0],Ne+Se[0].length):-1}function l(Fe,Ze,Ne){var Se=o.exec(Ze.slice(Ne,Ne+2));return Se?(Fe.V=+Se[0],Ne+Se[0].length):-1}function _(Fe,Ze,Ne){var Se=o.exec(Ze.slice(Ne,Ne+2));return Se?(Fe.W=+Se[0],Ne+Se[0].length):-1}function w(Fe,Ze,Ne){var Se=o.exec(Ze.slice(Ne,Ne+4));return Se?(Fe.y=+Se[0],Ne+Se[0].length):-1}function M(Fe,Ze,Ne){var Se=o.exec(Ze.slice(Ne,Ne+2));return Se?(Fe.y=+Se[0]+(+Se[0]>68?1900:2e3),Ne+Se[0].length):-1}function E(Fe,Ze,Ne){var Se=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(Ze.slice(Ne,Ne+6));return Se?(Fe.Z=Se[1]?0:-(Se[2]+(Se[3]||"00")),Ne+Se[0].length):-1}function m(Fe,Ze,Ne){var Se=o.exec(Ze.slice(Ne,Ne+1));return Se?(Fe.q=Se[0]*3-3,Ne+Se[0].length):-1}function b(Fe,Ze,Ne){var Se=o.exec(Ze.slice(Ne,Ne+2));return Se?(Fe.m=Se[0]-1,Ne+Se[0].length):-1}function v(Fe,Ze,Ne){var Se=o.exec(Ze.slice(Ne,Ne+2));return Se?(Fe.d=+Se[0],Ne+Se[0].length):-1}function u(Fe,Ze,Ne){var Se=o.exec(Ze.slice(Ne,Ne+3));return Se?(Fe.m=0,Fe.d=+Se[0],Ne+Se[0].length):-1}function y(Fe,Ze,Ne){var Se=o.exec(Ze.slice(Ne,Ne+2));return Se?(Fe.H=+Se[0],Ne+Se[0].length):-1}function f(Fe,Ze,Ne){var Se=o.exec(Ze.slice(Ne,Ne+2));return Se?(Fe.M=+Se[0],Ne+Se[0].length):-1}function P(Fe,Ze,Ne){var Se=o.exec(Ze.slice(Ne,Ne+2));return Se?(Fe.S=+Se[0],Ne+Se[0].length):-1}function L(Fe,Ze,Ne){var Se=o.exec(Ze.slice(Ne,Ne+3));return Se?(Fe.L=+Se[0],Ne+Se[0].length):-1}function z(Fe,Ze,Ne){var Se=o.exec(Ze.slice(Ne,Ne+6));return Se?(Fe.L=Math.floor(Se[0]/1e3),Ne+Se[0].length):-1}function F(Fe,Ze,Ne){var Se=i.exec(Ze.slice(Ne,Ne+1));return Se?Ne+Se[0].length:-1}function O(Fe,Ze,Ne){var Se=o.exec(Ze.slice(Ne));return Se?(Fe.Q=+Se[0],Ne+Se[0].length):-1}function B(Fe,Ze,Ne){var Se=o.exec(Ze.slice(Ne));return Se?(Fe.s=+Se[0],Ne+Se[0].length):-1}function I(Fe,Ze){return a(Fe.getDate(),Ze,2)}function N(Fe,Ze){return a(Fe.getHours(),Ze,2)}function U(Fe,Ze){return a(Fe.getHours()%12||12,Ze,2)}function W(Fe,Ze){return a(1+x.timeDay.count(x.timeYear(Fe),Fe),Ze,3)}function Q(Fe,Ze){return a(Fe.getMilliseconds(),Ze,3)}function le(Fe,Ze){return Q(Fe,Ze)+"000"}function se(Fe,Ze){return a(Fe.getMonth()+1,Ze,2)}function fe(Fe,Ze){return a(Fe.getMinutes(),Ze,2)}function G(Fe,Ze){return a(Fe.getSeconds(),Ze,2)}function J(Fe){var Ze=Fe.getDay();return Ze===0?7:Ze}function $(Fe,Ze){return a(x.timeSunday.count(x.timeYear(Fe)-1,Fe),Ze,2)}function X(Fe,Ze){var Ne=Fe.getDay();return Fe=Ne>=4||Ne===0?x.timeThursday(Fe):x.timeThursday.ceil(Fe),a(x.timeThursday.count(x.timeYear(Fe),Fe)+(x.timeYear(Fe).getDay()===4),Ze,2)}function re(Fe){return Fe.getDay()}function ae(Fe,Ze){return a(x.timeMonday.count(x.timeYear(Fe)-1,Fe),Ze,2)}function j(Fe,Ze){return a(Fe.getFullYear()%100,Ze,2)}function ee(Fe,Ze){return a(Fe.getFullYear()%1e4,Ze,4)}function ne(Fe){var Ze=Fe.getTimezoneOffset();return(Ze>0?"-":(Ze*=-1,"+"))+a(Ze/60|0,"0",2)+a(Ze%60,"0",2)}function ce(Fe,Ze){return a(Fe.getUTCDate(),Ze,2)}function _e(Fe,Ze){return a(Fe.getUTCHours(),Ze,2)}function we(Fe,Ze){return a(Fe.getUTCHours()%12||12,Ze,2)}function Oe(Fe,Ze){return a(1+x.utcDay.count(x.utcYear(Fe),Fe),Ze,3)}function Ie(Fe,Ze){return a(Fe.getUTCMilliseconds(),Ze,3)}function Xe(Fe,Ze){return Ie(Fe,Ze)+"000"}function tt(Fe,Ze){return a(Fe.getUTCMonth()+1,Ze,2)}function rt(Fe,Ze){return a(Fe.getUTCMinutes(),Ze,2)}function Je(Fe,Ze){return a(Fe.getUTCSeconds(),Ze,2)}function ot(Fe){var Ze=Fe.getUTCDay();return Ze===0?7:Ze}function Me(Fe,Ze){return a(x.utcSunday.count(x.utcYear(Fe)-1,Fe),Ze,2)}function pe(Fe,Ze){var Ne=Fe.getUTCDay();return Fe=Ne>=4||Ne===0?x.utcThursday(Fe):x.utcThursday.ceil(Fe),a(x.utcThursday.count(x.utcYear(Fe),Fe)+(x.utcYear(Fe).getUTCDay()===4),Ze,2)}function ue(Fe){return Fe.getUTCDay()}function ze(Fe,Ze){return a(x.utcMonday.count(x.utcYear(Fe)-1,Fe),Ze,2)}function Qe(Fe,Ze){return a(Fe.getUTCFullYear()%100,Ze,2)}function it(Fe,Ze){return a(Fe.getUTCFullYear()%1e4,Ze,4)}function $e(){return"+0000"}function kt(){return"%"}function Mt(Fe){return+Fe}function Bt(Fe){return Math.floor(+Fe/1e3)}var jt;cr({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});function cr(Fe){return jt=t(Fe),g.timeFormat=jt.format,g.timeParse=jt.parse,g.utcFormat=jt.utcFormat,g.utcParse=jt.utcParse,jt}var nr="%Y-%m-%dT%H:%M:%S.%LZ";function Lr(Fe){return Fe.toISOString()}var mr=Date.prototype.toISOString?Lr:g.utcFormat(nr);function xr(Fe){var Ze=new Date(Fe);return isNaN(Ze)?null:Ze}var mt=+new Date("2000-01-01T00:00:00.000Z")?xr:g.utcParse(nr);g.isoFormat=mr,g.isoParse=mt,g.timeFormatDefaultLocale=cr,g.timeFormatLocale=t,Object.defineProperty(g,"__esModule",{value:!0})})}}),To=Le({"node_modules/d3-format/dist/d3-format.js"(Z,H){(function(g,x){typeof Z=="object"&&typeof H<"u"?x(Z):(g=typeof globalThis<"u"?globalThis:g||self,x(g.d3=g.d3||{}))})(Z,function(g){"use strict";function x(b){return Math.abs(b=Math.round(b))>=1e21?b.toLocaleString("en").replace(/,/g,""):b.toString(10)}function A(b,v){if((u=(b=v?b.toExponential(v-1):b.toExponential()).indexOf("e"))<0)return null;var u,y=b.slice(0,u);return[y.length>1?y[0]+y.slice(2):y,+b.slice(u+1)]}function S(b){return b=A(Math.abs(b)),b?b[1]:NaN}function e(b,v){return function(u,y){for(var f=u.length,P=[],L=0,z=b[0],F=0;f>0&&z>0&&(F+z+1>y&&(z=Math.max(1,y-F)),P.push(u.substring(f-=z,f+z)),!((F+=z+1)>y));)z=b[L=(L+1)%b.length];return P.reverse().join(v)}}function t(b){return function(v){return v.replace(/[0-9]/g,function(u){return b[+u]})}}var r=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function o(b){if(!(v=r.exec(b)))throw new Error("invalid format: "+b);var v;return new i({fill:v[1],align:v[2],sign:v[3],symbol:v[4],zero:v[5],width:v[6],comma:v[7],precision:v[8]&&v[8].slice(1),trim:v[9],type:v[10]})}o.prototype=i.prototype;function i(b){this.fill=b.fill===void 0?" ":b.fill+"",this.align=b.align===void 0?">":b.align+"",this.sign=b.sign===void 0?"-":b.sign+"",this.symbol=b.symbol===void 0?"":b.symbol+"",this.zero=!!b.zero,this.width=b.width===void 0?void 0:+b.width,this.comma=!!b.comma,this.precision=b.precision===void 0?void 0:+b.precision,this.trim=!!b.trim,this.type=b.type===void 0?"":b.type+""}i.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type};function n(b){e:for(var v=b.length,u=1,y=-1,f;u<v;++u)switch(b[u]){case".":y=f=u;break;case"0":y===0&&(y=u),f=u;break;default:if(!+b[u])break e;y>0&&(y=0);break}return y>0?b.slice(0,y)+b.slice(f+1):b}var a;function s(b,v){var u=A(b,v);if(!u)return b+"";var y=u[0],f=u[1],P=f-(a=Math.max(-8,Math.min(8,Math.floor(f/3)))*3)+1,L=y.length;return P===L?y:P>L?y+new Array(P-L+1).join("0"):P>0?y.slice(0,P)+"."+y.slice(P):"0."+new Array(1-P).join("0")+A(b,Math.max(0,v+P-1))[0]}function c(b,v){var u=A(b,v);if(!u)return b+"";var y=u[0],f=u[1];return f<0?"0."+new Array(-f).join("0")+y:y.length>f+1?y.slice(0,f+1)+"."+y.slice(f+1):y+new Array(f-y.length+2).join("0")}var h={"%":function(b,v){return(b*100).toFixed(v)},b:function(b){return Math.round(b).toString(2)},c:function(b){return b+""},d:x,e:function(b,v){return b.toExponential(v)},f:function(b,v){return b.toFixed(v)},g:function(b,v){return b.toPrecision(v)},o:function(b){return Math.round(b).toString(8)},p:function(b,v){return c(b*100,v)},r:c,s,X:function(b){return Math.round(b).toString(16).toUpperCase()},x:function(b){return Math.round(b).toString(16)}};function p(b){return b}var d=Array.prototype.map,T=["y","z","a","f","p","n","\xB5","m","","k","M","G","T","P","E","Z","Y"];function l(b){var v=b.grouping===void 0||b.thousands===void 0?p:e(d.call(b.grouping,Number),b.thousands+""),u=b.currency===void 0?"":b.currency[0]+"",y=b.currency===void 0?"":b.currency[1]+"",f=b.decimal===void 0?".":b.decimal+"",P=b.numerals===void 0?p:t(d.call(b.numerals,String)),L=b.percent===void 0?"%":b.percent+"",z=b.minus===void 0?"-":b.minus+"",F=b.nan===void 0?"NaN":b.nan+"";function O(I){I=o(I);var N=I.fill,U=I.align,W=I.sign,Q=I.symbol,le=I.zero,se=I.width,fe=I.comma,G=I.precision,J=I.trim,$=I.type;$==="n"?(fe=!0,$="g"):h[$]||(G===void 0&&(G=12),J=!0,$="g"),(le||N==="0"&&U==="=")&&(le=!0,N="0",U="=");var X=Q==="$"?u:Q==="#"&&/[boxX]/.test($)?"0"+$.toLowerCase():"",re=Q==="$"?y:/[%p]/.test($)?L:"",ae=h[$],j=/[defgprs%]/.test($);G=G===void 0?6:/[gprs]/.test($)?Math.max(1,Math.min(21,G)):Math.max(0,Math.min(20,G));function ee(ne){var ce=X,_e=re,we,Oe,Ie;if($==="c")_e=ae(ne)+_e,ne="";else{ne=+ne;var Xe=ne<0||1/ne<0;if(ne=isNaN(ne)?F:ae(Math.abs(ne),G),J&&(ne=n(ne)),Xe&&+ne==0&&W!=="+"&&(Xe=!1),ce=(Xe?W==="("?W:z:W==="-"||W==="("?"":W)+ce,_e=($==="s"?T[8+a/3]:"")+_e+(Xe&&W==="("?")":""),j){for(we=-1,Oe=ne.length;++we<Oe;)if(Ie=ne.charCodeAt(we),48>Ie||Ie>57){_e=(Ie===46?f+ne.slice(we+1):ne.slice(we))+_e,ne=ne.slice(0,we);break}}}fe&&!le&&(ne=v(ne,1/0));var tt=ce.length+ne.length+_e.length,rt=tt<se?new Array(se-tt+1).join(N):"";switch(fe&&le&&(ne=v(rt+ne,rt.length?se-_e.length:1/0),rt=""),U){case"<":ne=ce+ne+_e+rt;break;case"=":ne=ce+rt+ne+_e;break;case"^":ne=rt.slice(0,tt=rt.length>>1)+ce+ne+_e+rt.slice(tt);break;default:ne=rt+ce+ne+_e;break}return P(ne)}return ee.toString=function(){return I+""},ee}function B(I,N){var U=O((I=o(I),I.type="f",I)),W=Math.max(-8,Math.min(8,Math.floor(S(N)/3)))*3,Q=Math.pow(10,-W),le=T[8+W/3];return function(se){return U(Q*se)+le}}return{format:O,formatPrefix:B}}var _;w({decimal:".",thousands:",",grouping:[3],currency:["$",""],minus:"-"});function w(b){return _=l(b),g.format=_.format,g.formatPrefix=_.formatPrefix,_}function M(b){return Math.max(0,-S(Math.abs(b)))}function E(b,v){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(S(v)/3)))*3-S(Math.abs(b)))}function m(b,v){return b=Math.abs(b),v=Math.abs(v)-b,Math.max(0,S(v)-S(b))+1}g.FormatSpecifier=i,g.formatDefaultLocale=w,g.formatLocale=l,g.formatSpecifier=o,g.precisionFixed=M,g.precisionPrefix=E,g.precisionRound=m,Object.defineProperty(g,"__esModule",{value:!0})})}}),Xn=Le({"node_modules/is-string-blank/index.js"(Z,H){"use strict";H.exports=function(g){for(var x=g.length,A,S=0;S<x;S++)if(A=g.charCodeAt(S),(A<9||A>13)&&A!==32&&A!==133&&A!==160&&A!==5760&&A!==6158&&(A<8192||A>8205)&&A!==8232&&A!==8233&&A!==8239&&A!==8287&&A!==8288&&A!==12288&&A!==65279)return!1;return!0}}}),zn=Le({"node_modules/fast-isnumeric/index.js"(Z,H){"use strict";var g=Xn();H.exports=function(x){var A=typeof x;if(A==="string"){var S=x;if(x=+x,x===0&&g(S))return!1}else if(A!=="number")return!1;return x-x<1}}}),$n=Le({"src/constants/numerical.js"(Z,H){"use strict";H.exports={BADNUM:void 0,FP_SAFE:Number.MAX_VALUE*1e-4,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,ONEMILLI:1,ONEMICROSEC:.001,EPOCHJD:24405875e-1,ALMOST_EQUAL:1-1e-6,LOG_CLIP:10,MINUS_SIGN:"\u2212"}}}),Ao=Le({"node_modules/base64-arraybuffer/dist/base64-arraybuffer.umd.js"(Z,H){(function(g,x){typeof Z=="object"&&typeof H<"u"?x(Z):(g=typeof globalThis<"u"?globalThis:g||self,x(g["base64-arraybuffer"]={}))})(Z,function(g){"use strict";for(var x="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",A=typeof Uint8Array>"u"?[]:new Uint8Array(256),S=0;S<x.length;S++)A[x.charCodeAt(S)]=S;var e=function(r){var o=new Uint8Array(r),i,n=o.length,a="";for(i=0;i<n;i+=3)a+=x[o[i]>>2],a+=x[(o[i]&3)<<4|o[i+1]>>4],a+=x[(o[i+1]&15)<<2|o[i+2]>>6],a+=x[o[i+2]&63];return n%3===2?a=a.substring(0,a.length-1)+"=":n%3===1&&(a=a.substring(0,a.length-2)+"=="),a},t=function(r){var o=r.length*.75,i=r.length,n,a=0,s,c,h,p;r[r.length-1]==="="&&(o--,r[r.length-2]==="="&&o--);var d=new ArrayBuffer(o),T=new Uint8Array(d);for(n=0;n<i;n+=4)s=A[r.charCodeAt(n)],c=A[r.charCodeAt(n+1)],h=A[r.charCodeAt(n+2)],p=A[r.charCodeAt(n+3)],T[a++]=s<<2|c>>4,T[a++]=(c&15)<<4|h>>2,T[a++]=(h&3)<<6|p&63;return d};g.decode=t,g.encode=e,Object.defineProperty(g,"__esModule",{value:!0})})}}),$s=Le({"src/lib/is_plain_object.js"(Z,H){"use strict";H.exports=function(x){return window&&window.process&&window.process.versions?Object.prototype.toString.call(x)==="[object Object]":Object.prototype.toString.call(x)==="[object Object]"&&Object.getPrototypeOf(x).hasOwnProperty("hasOwnProperty")}}}),cl=Le({"src/lib/array.js"(Z){"use strict";var H=Ao().decode,g=$s(),x=Array.isArray,A=ArrayBuffer,S=DataView;function e(s){return A.isView(s)&&!(s instanceof S)}Z.isTypedArray=e;function t(s){return x(s)||e(s)}Z.isArrayOrTypedArray=t;function r(s){return!t(s[0])}Z.isArray1D=r,Z.ensureArray=function(s,c){return x(s)||(s=[]),s.length=c,s};var o={u1c:typeof Uint8ClampedArray>"u"?void 0:Uint8ClampedArray,i1:typeof Int8Array>"u"?void 0:Int8Array,u1:typeof Uint8Array>"u"?void 0:Uint8Array,i2:typeof Int16Array>"u"?void 0:Int16Array,u2:typeof Uint16Array>"u"?void 0:Uint16Array,i4:typeof Int32Array>"u"?void 0:Int32Array,u4:typeof Uint32Array>"u"?void 0:Uint32Array,f4:typeof Float32Array>"u"?void 0:Float32Array,f8:typeof Float64Array>"u"?void 0:Float64Array};o.uint8c=o.u1c,o.uint8=o.u1,o.int8=o.i1,o.uint16=o.u2,o.int16=o.i2,o.uint32=o.u4,o.int32=o.i4,o.float32=o.f4,o.float64=o.f8;function i(s){return s.constructor===ArrayBuffer}Z.isArrayBuffer=i,Z.decodeTypedArraySpec=function(s){var c=[],h=n(s),p=h.dtype,d=o[p];if(!d)throw new Error('Error in dtype: "'+p+'"');var T=d.BYTES_PER_ELEMENT,l=h.bdata;i(l)||(l=H(l));var _=h.shape===void 0?[l.byteLength/T]:(""+h.shape).split(",");_.reverse();var w=_.length,M,E,m=+_[0],b=T*m,v=0;if(w===1)c=new d(l);else if(w===2)for(M=+_[1],E=0;E<M;E++)c[E]=new d(l,v,m),v+=b;else if(w===3){M=+_[1];for(var u=+_[2],y=0;y<u;y++)for(c[y]=[],E=0;E<M;E++)c[y][E]=new d(l,v,m),v+=b}else throw new Error("ndim: "+w+'is not supported with the shape:"'+h.shape+'"');return c.bdata=h.bdata,c.dtype=h.dtype,c.shape=_.reverse().join(","),s._inputArray=c,c},Z.isTypedArraySpec=function(s){return g(s)&&s.hasOwnProperty("dtype")&&typeof s.dtype=="string"&&s.hasOwnProperty("bdata")&&(typeof s.bdata=="string"||i(s.bdata))&&(s.shape===void 0||s.hasOwnProperty("shape")&&(typeof s.shape=="string"||typeof s.shape=="number"))};function n(s){return{bdata:s.bdata,dtype:s.dtype,shape:s.shape}}Z.concat=function(){var s=[],c=!0,h=0,p,d,T,l,_,w,M,E;for(T=0;T<arguments.length;T++)l=arguments[T],w=l.length,w&&(d?s.push(l):(d=l,_=w),x(l)?p=!1:(c=!1,h?p!==l.constructor&&(p=!1):p=l.constructor),h+=w);if(!h)return[];if(!s.length)return d;if(c)return d.concat.apply(d,s);if(p){for(M=new p(h),M.set(d),T=0;T<s.length;T++)l=s[T],M.set(l,_),_+=l.length;return M}for(M=new Array(h),E=0;E<d.length;E++)M[E]=d[E];for(T=0;T<s.length;T++){for(l=s[T],E=0;E<l.length;E++)M[_+E]=l[E];_+=E}return M},Z.maxRowLength=function(s){return a(s,Math.max,0)},Z.minRowLength=function(s){return a(s,Math.min,1/0)};function a(s,c,h){if(t(s))if(t(s[0])){for(var p=h,d=0;d<s.length;d++)p=c(p,s[d].length);return p}else return s.length;return 0}}}),jl=Le({"src/lib/nested_property.js"(Z,H){"use strict";var g=zn(),x=cl().isArrayOrTypedArray;H.exports=function(s,c){if(g(c))c=String(c);else if(typeof c!="string"||c.substr(c.length-4)==="[-1]")throw"bad property string";var h=c.split("."),p,d,T,l;for(l=0;l<h.length;l++)if(String(h[l]).slice(0,2)==="__")throw"bad property string";for(l=0;l<h.length;){if(p=String(h[l]).match(/^([^\[\]]*)((\[\-?[0-9]*\])+)$/),p){if(p[1])h[l]=p[1];else if(l===0)h.splice(0,1);else throw"bad property string";for(d=p[2].substr(1,p[2].length-2).split("]["),T=0;T<d.length;T++)l++,h.splice(l,0,Number(d[T]))}l++}return typeof s!="object"?n(s,c,h):{set:t(s,h,c),get:A(s,h),astr:c,parts:h,obj:s}};function A(a,s){return function(c){var h=a,p,d,T,l,_;for(l=0;l<s.length-1;l++){if(p=s[l],p===-1){for(d=!0,T=[],_=0;_<h.length;_++)T[_]=A(h[_],s.slice(l+1))(c),T[_]!==T[0]&&(d=!1);return d?T[0]:T}if(typeof p=="number"&&!x(h)||(h=h[p],typeof h!="object"||h===null))return}if(!(typeof h!="object"||h===null)&&(T=h[s[l]],!(!c&&T===null)))return T}}var S=/(^|\.)args\[/;function e(a,s){return a===void 0||a===null&&!s.match(S)}function t(a,s,c){return function(h){var p=a,d="",T=[[a,d]],l=e(h,c),_,w;for(w=0;w<s.length-1;w++){if(_=s[w],typeof _=="number"&&!x(p))throw"array index but container is not an array";if(_===-1){if(l=!o(p,s.slice(w+1),h,c),l)break;return}if(!i(p,_,s[w+1],l))break;if(p=p[_],typeof p!="object"||p===null)throw"container is not an object";d=r(d,_),T.push([p,d])}if(l){if(w===s.length-1&&(delete p[s[w]],Array.isArray(p)&&+s[w]===p.length-1))for(;p.length&&p[p.length-1]===void 0;)p.pop()}else p[s[w]]=h}}function r(a,s){var c=s;return g(s)?c="["+s+"]":a&&(c="."+s),a+c}function o(a,s,c,h){var p=x(c),d=!0,T=c,l=h.replace("-1",0),_=p?!1:e(c,l),w=s[0],M;for(M=0;M<a.length;M++)l=h.replace("-1",M),p&&(T=c[M%c.length],_=e(T,l)),_&&(d=!1),i(a,M,w,_)&&t(a[M],s,h.replace("-1",M))(T);return d}function i(a,s,c,h){if(a[s]===void 0){if(h)return!1;typeof c=="number"?a[s]=[]:a[s]={}}return!0}function n(a,s,c){return{set:function(){throw"bad container"},get:function(){},astr:s,parts:c,obj:a}}}}),lu=Le({"src/lib/keyed_container.js"(Z,H){"use strict";var g=jl(),x=/^\w*$/,A=0,S=1,e=2,t=3,r=4;H.exports=function(i,n,a,s){a=a||"name",s=s||"value";var c,h,p,d={};n&&n.length?(p=g(i,n),h=p.get()):h=i,n=n||"";var T={};if(h)for(c=0;c<h.length;c++)T[h[c][a]]=c;var l=x.test(s),_={set:function(w,M){var E=M===null?r:A;if(!h){if(!p||E===r)return;h=[],p.set(h)}var m=T[w];if(m===void 0){if(E===r)return;E=E|t,m=h.length,T[w]=m}else M!==(l?h[m][s]:g(h[m],s).get())&&(E=E|e);var b=h[m]=h[m]||{};return b[a]=w,l?b[s]=M:g(b,s).set(M),M!==null&&(E=E&~r),d[m]=d[m]|E,_},get:function(w){if(h){var M=T[w];if(M!==void 0)return l?h[M][s]:g(h[M],s).get()}},rename:function(w,M){var E=T[w];return E===void 0||(d[E]=d[E]|S,T[M]=E,delete T[w],h[E][a]=M),_},remove:function(w){var M=T[w];if(M===void 0)return _;var E=h[M];if(Object.keys(E).length>2)return d[M]=d[M]|e,_.set(w,null);if(l){for(c=M;c<h.length;c++)d[c]=d[c]|t;for(c=M;c<h.length;c++)T[h[c][a]]--;h.splice(M,1),delete T[w]}else g(E,s).set(null),d[M]=d[M]|e|r;return _},constructUpdate:function(){for(var w,M,E={},m=Object.keys(d),b=0;b<m.length;b++)M=m[b],w=n+"["+M+"]",h[M]?(d[M]&S&&(E[w+"."+a]=h[M][a]),d[M]&e&&(l?E[w+"."+s]=d[M]&r?null:h[M][s]:E[w+"."+s]=d[M]&r?null:g(h[M],s).get())):E[w]=null;return E}};return _}}}),uf=Le({"src/lib/relative_attr.js"(Z,H){"use strict";var g=/^(.*)(\.[^\.\[\]]+|\[\d\])$/,x=/^[^\.\[\]]+$/;H.exports=function(A,S){for(;S;){var e=A.match(g);if(e)A=e[1];else if(A.match(x))A="";else throw new Error("bad relativeAttr call:"+[A,S]);if(S.charAt(0)==="^")S=S.slice(1);else break}return A&&S.charAt(0)!=="["?A+"."+S:A+S}}}),ju=Le({"src/lib/to_log_range.js"(Z,H){"use strict";var g=zn();H.exports=function(A,S){if(A>0)return Math.log(A)/Math.LN10;var e=Math.log(Math.min(S[0],S[1]))/Math.LN10;return g(e)||(e=Math.log(Math.max(S[0],S[1]))/Math.LN10-6),e}}}),Tc=Le({"src/lib/relink_private.js"(Z,H){"use strict";var g=cl().isArrayOrTypedArray,x=$s();H.exports=function A(S,e){for(var t in e){var r=e[t],o=S[t];if(o!==r)if(t.charAt(0)==="_"||typeof r=="function"){if(t in S)continue;S[t]=r}else if(g(r)&&g(o)&&x(r[0])){if(t==="customdata"||t==="ids")continue;for(var i=Math.min(r.length,o.length),n=0;n<i;n++)o[n]!==r[n]&&x(r[n])&&x(o[n])&&A(o[n],r[n])}else x(r)&&x(o)&&(A(o,r),Object.keys(o).length||delete S[t])}}}}),Vu=Le({"src/lib/mod.js"(Z,H){"use strict";function g(A,S){var e=A%S;return e<0?e+S:e}function x(A,S){return Math.abs(A)>S/2?A-Math.round(A/S)*S:A}H.exports={mod:g,modHalf:x}}}),Vl=Le({"node_modules/tinycolor2/tinycolor.js"(Z,H){(function(g){var x=/^\s+/,A=/\s+$/,S=0,e=g.round,t=g.min,r=g.max,o=g.random;function i(j,ee){if(j=j||"",ee=ee||{},j instanceof i)return j;if(!(this instanceof i))return new i(j,ee);var ne=n(j);this._originalInput=j,this._r=ne.r,this._g=ne.g,this._b=ne.b,this._a=ne.a,this._roundA=e(100*this._a)/100,this._format=ee.format||ne.format,this._gradientType=ee.gradientType,this._r<1&&(this._r=e(this._r)),this._g<1&&(this._g=e(this._g)),this._b<1&&(this._b=e(this._b)),this._ok=ne.ok,this._tc_id=S++}i.prototype={isDark:function(){return this.getBrightness()<128},isLight:function(){return!this.isDark()},isValid:function(){return this._ok},getOriginalInput:function(){return this._originalInput},getFormat:function(){return this._format},getAlpha:function(){return this._a},getBrightness:function(){var j=this.toRgb();return(j.r*299+j.g*587+j.b*114)/1e3},getLuminance:function(){var j=this.toRgb(),ee,ne,ce,_e,we,Oe;return ee=j.r/255,ne=j.g/255,ce=j.b/255,ee<=.03928?_e=ee/12.92:_e=g.pow((ee+.055)/1.055,2.4),ne<=.03928?we=ne/12.92:we=g.pow((ne+.055)/1.055,2.4),ce<=.03928?Oe=ce/12.92:Oe=g.pow((ce+.055)/1.055,2.4),.2126*_e+.7152*we+.0722*Oe},setAlpha:function(j){return this._a=I(j),this._roundA=e(100*this._a)/100,this},toHsv:function(){var j=h(this._r,this._g,this._b);return{h:j.h*360,s:j.s,v:j.v,a:this._a}},toHsvString:function(){var j=h(this._r,this._g,this._b),ee=e(j.h*360),ne=e(j.s*100),ce=e(j.v*100);return this._a==1?"hsv("+ee+", "+ne+"%, "+ce+"%)":"hsva("+ee+", "+ne+"%, "+ce+"%, "+this._roundA+")"},toHsl:function(){var j=s(this._r,this._g,this._b);return{h:j.h*360,s:j.s,l:j.l,a:this._a}},toHslString:function(){var j=s(this._r,this._g,this._b),ee=e(j.h*360),ne=e(j.s*100),ce=e(j.l*100);return this._a==1?"hsl("+ee+", "+ne+"%, "+ce+"%)":"hsla("+ee+", "+ne+"%, "+ce+"%, "+this._roundA+")"},toHex:function(j){return d(this._r,this._g,this._b,j)},toHexString:function(j){return"#"+this.toHex(j)},toHex8:function(j){return T(this._r,this._g,this._b,this._a,j)},toHex8String:function(j){return"#"+this.toHex8(j)},toRgb:function(){return{r:e(this._r),g:e(this._g),b:e(this._b),a:this._a}},toRgbString:function(){return this._a==1?"rgb("+e(this._r)+", "+e(this._g)+", "+e(this._b)+")":"rgba("+e(this._r)+", "+e(this._g)+", "+e(this._b)+", "+this._roundA+")"},toPercentageRgb:function(){return{r:e(N(this._r,255)*100)+"%",g:e(N(this._g,255)*100)+"%",b:e(N(this._b,255)*100)+"%",a:this._a}},toPercentageRgbString:function(){return this._a==1?"rgb("+e(N(this._r,255)*100)+"%, "+e(N(this._g,255)*100)+"%, "+e(N(this._b,255)*100)+"%)":"rgba("+e(N(this._r,255)*100)+"%, "+e(N(this._g,255)*100)+"%, "+e(N(this._b,255)*100)+"%, "+this._roundA+")"},toName:function(){return this._a===0?"transparent":this._a<1?!1:O[d(this._r,this._g,this._b,!0)]||!1},toFilter:function(j){var ee="#"+l(this._r,this._g,this._b,this._a),ne=ee,ce=this._gradientType?"GradientType = 1, ":"";if(j){var _e=i(j);ne="#"+l(_e._r,_e._g,_e._b,_e._a)}return"progid:DXImageTransform.Microsoft.gradient("+ce+"startColorstr="+ee+",endColorstr="+ne+")"},toString:function(j){var ee=!!j;j=j||this._format;var ne=!1,ce=this._a<1&&this._a>=0,_e=!ee&&ce&&(j==="hex"||j==="hex6"||j==="hex3"||j==="hex4"||j==="hex8"||j==="name");return _e?j==="name"&&this._a===0?this.toName():this.toRgbString():(j==="rgb"&&(ne=this.toRgbString()),j==="prgb"&&(ne=this.toPercentageRgbString()),(j==="hex"||j==="hex6")&&(ne=this.toHexString()),j==="hex3"&&(ne=this.toHexString(!0)),j==="hex4"&&(ne=this.toHex8String(!0)),j==="hex8"&&(ne=this.toHex8String()),j==="name"&&(ne=this.toName()),j==="hsl"&&(ne=this.toHslString()),j==="hsv"&&(ne=this.toHsvString()),ne||this.toHexString())},clone:function(){return i(this.toString())},_applyModification:function(j,ee){var ne=j.apply(null,[this].concat([].slice.call(ee)));return this._r=ne._r,this._g=ne._g,this._b=ne._b,this.setAlpha(ne._a),this},lighten:function(){return this._applyModification(E,arguments)},brighten:function(){return this._applyModification(m,arguments)},darken:function(){return this._applyModification(b,arguments)},desaturate:function(){return this._applyModification(_,arguments)},saturate:function(){return this._applyModification(w,arguments)},greyscale:function(){return this._applyModification(M,arguments)},spin:function(){return this._applyModification(v,arguments)},_applyCombination:function(j,ee){return j.apply(null,[this].concat([].slice.call(ee)))},analogous:function(){return this._applyCombination(L,arguments)},complement:function(){return this._applyCombination(u,arguments)},monochromatic:function(){return this._applyCombination(z,arguments)},splitcomplement:function(){return this._applyCombination(P,arguments)},triad:function(){return this._applyCombination(y,arguments)},tetrad:function(){return this._applyCombination(f,arguments)}},i.fromRatio=function(j,ee){if(typeof j=="object"){var ne={};for(var ce in j)j.hasOwnProperty(ce)&&(ce==="a"?ne[ce]=j[ce]:ne[ce]=fe(j[ce]));j=ne}return i(j,ee)};function n(j){var ee={r:0,g:0,b:0},ne=1,ce=null,_e=null,we=null,Oe=!1,Ie=!1;return typeof j=="string"&&(j=re(j)),typeof j=="object"&&(X(j.r)&&X(j.g)&&X(j.b)?(ee=a(j.r,j.g,j.b),Oe=!0,Ie=String(j.r).substr(-1)==="%"?"prgb":"rgb"):X(j.h)&&X(j.s)&&X(j.v)?(ce=fe(j.s),_e=fe(j.v),ee=p(j.h,ce,_e),Oe=!0,Ie="hsv"):X(j.h)&&X(j.s)&&X(j.l)&&(ce=fe(j.s),we=fe(j.l),ee=c(j.h,ce,we),Oe=!0,Ie="hsl"),j.hasOwnProperty("a")&&(ne=j.a)),ne=I(ne),{ok:Oe,format:j.format||Ie,r:t(255,r(ee.r,0)),g:t(255,r(ee.g,0)),b:t(255,r(ee.b,0)),a:ne}}function a(j,ee,ne){return{r:N(j,255)*255,g:N(ee,255)*255,b:N(ne,255)*255}}function s(j,ee,ne){j=N(j,255),ee=N(ee,255),ne=N(ne,255);var ce=r(j,ee,ne),_e=t(j,ee,ne),we,Oe,Ie=(ce+_e)/2;if(ce==_e)we=Oe=0;else{var Xe=ce-_e;switch(Oe=Ie>.5?Xe/(2-ce-_e):Xe/(ce+_e),ce){case j:we=(ee-ne)/Xe+(ee<ne?6:0);break;case ee:we=(ne-j)/Xe+2;break;case ne:we=(j-ee)/Xe+4;break}we/=6}return{h:we,s:Oe,l:Ie}}function c(j,ee,ne){var ce,_e,we;j=N(j,360),ee=N(ee,100),ne=N(ne,100);function Oe(tt,rt,Je){return Je<0&&(Je+=1),Je>1&&(Je-=1),Je<1/6?tt+(rt-tt)*6*Je:Je<1/2?rt:Je<2/3?tt+(rt-tt)*(2/3-Je)*6:tt}if(ee===0)ce=_e=we=ne;else{var Ie=ne<.5?ne*(1+ee):ne+ee-ne*ee,Xe=2*ne-Ie;ce=Oe(Xe,Ie,j+1/3),_e=Oe(Xe,Ie,j),we=Oe(Xe,Ie,j-1/3)}return{r:ce*255,g:_e*255,b:we*255}}function h(j,ee,ne){j=N(j,255),ee=N(ee,255),ne=N(ne,255);var ce=r(j,ee,ne),_e=t(j,ee,ne),we,Oe,Ie=ce,Xe=ce-_e;if(Oe=ce===0?0:Xe/ce,ce==_e)we=0;else{switch(ce){case j:we=(ee-ne)/Xe+(ee<ne?6:0);break;case ee:we=(ne-j)/Xe+2;break;case ne:we=(j-ee)/Xe+4;break}we/=6}return{h:we,s:Oe,v:Ie}}function p(j,ee,ne){j=N(j,360)*6,ee=N(ee,100),ne=N(ne,100);var ce=g.floor(j),_e=j-ce,we=ne*(1-ee),Oe=ne*(1-_e*ee),Ie=ne*(1-(1-_e)*ee),Xe=ce%6,tt=[ne,Oe,we,we,Ie,ne][Xe],rt=[Ie,ne,ne,Oe,we,we][Xe],Je=[we,we,Ie,ne,ne,Oe][Xe];return{r:tt*255,g:rt*255,b:Je*255}}function d(j,ee,ne,ce){var _e=[se(e(j).toString(16)),se(e(ee).toString(16)),se(e(ne).toString(16))];return ce&&_e[0].charAt(0)==_e[0].charAt(1)&&_e[1].charAt(0)==_e[1].charAt(1)&&_e[2].charAt(0)==_e[2].charAt(1)?_e[0].charAt(0)+_e[1].charAt(0)+_e[2].charAt(0):_e.join("")}function T(j,ee,ne,ce,_e){var we=[se(e(j).toString(16)),se(e(ee).toString(16)),se(e(ne).toString(16)),se(G(ce))];return _e&&we[0].charAt(0)==we[0].charAt(1)&&we[1].charAt(0)==we[1].charAt(1)&&we[2].charAt(0)==we[2].charAt(1)&&we[3].charAt(0)==we[3].charAt(1)?we[0].charAt(0)+we[1].charAt(0)+we[2].charAt(0)+we[3].charAt(0):we.join("")}function l(j,ee,ne,ce){var _e=[se(G(ce)),se(e(j).toString(16)),se(e(ee).toString(16)),se(e(ne).toString(16))];return _e.join("")}i.equals=function(j,ee){return!j||!ee?!1:i(j).toRgbString()==i(ee).toRgbString()},i.random=function(){return i.fromRatio({r:o(),g:o(),b:o()})};function _(j,ee){ee=ee===0?0:ee||10;var ne=i(j).toHsl();return ne.s-=ee/100,ne.s=U(ne.s),i(ne)}function w(j,ee){ee=ee===0?0:ee||10;var ne=i(j).toHsl();return ne.s+=ee/100,ne.s=U(ne.s),i(ne)}function M(j){return i(j).desaturate(100)}function E(j,ee){ee=ee===0?0:ee||10;var ne=i(j).toHsl();return ne.l+=ee/100,ne.l=U(ne.l),i(ne)}function m(j,ee){ee=ee===0?0:ee||10;var ne=i(j).toRgb();return ne.r=r(0,t(255,ne.r-e(255*-(ee/100)))),ne.g=r(0,t(255,ne.g-e(255*-(ee/100)))),ne.b=r(0,t(255,ne.b-e(255*-(ee/100)))),i(ne)}function b(j,ee){ee=ee===0?0:ee||10;var ne=i(j).toHsl();return ne.l-=ee/100,ne.l=U(ne.l),i(ne)}function v(j,ee){var ne=i(j).toHsl(),ce=(ne.h+ee)%360;return ne.h=ce<0?360+ce:ce,i(ne)}function u(j){var ee=i(j).toHsl();return ee.h=(ee.h+180)%360,i(ee)}function y(j){var ee=i(j).toHsl(),ne=ee.h;return[i(j),i({h:(ne+120)%360,s:ee.s,l:ee.l}),i({h:(ne+240)%360,s:ee.s,l:ee.l})]}function f(j){var ee=i(j).toHsl(),ne=ee.h;return[i(j),i({h:(ne+90)%360,s:ee.s,l:ee.l}),i({h:(ne+180)%360,s:ee.s,l:ee.l}),i({h:(ne+270)%360,s:ee.s,l:ee.l})]}function P(j){var ee=i(j).toHsl(),ne=ee.h;return[i(j),i({h:(ne+72)%360,s:ee.s,l:ee.l}),i({h:(ne+216)%360,s:ee.s,l:ee.l})]}function L(j,ee,ne){ee=ee||6,ne=ne||30;var ce=i(j).toHsl(),_e=360/ne,we=[i(j)];for(ce.h=(ce.h-(_e*ee>>1)+720)%360;--ee;)ce.h=(ce.h+_e)%360,we.push(i(ce));return we}function z(j,ee){ee=ee||6;for(var ne=i(j).toHsv(),ce=ne.h,_e=ne.s,we=ne.v,Oe=[],Ie=1/ee;ee--;)Oe.push(i({h:ce,s:_e,v:we})),we=(we+Ie)%1;return Oe}i.mix=function(j,ee,ne){ne=ne===0?0:ne||50;var ce=i(j).toRgb(),_e=i(ee).toRgb(),we=ne/100,Oe={r:(_e.r-ce.r)*we+ce.r,g:(_e.g-ce.g)*we+ce.g,b:(_e.b-ce.b)*we+ce.b,a:(_e.a-ce.a)*we+ce.a};return i(Oe)},i.readability=function(j,ee){var ne=i(j),ce=i(ee);return(g.max(ne.getLuminance(),ce.getLuminance())+.05)/(g.min(ne.getLuminance(),ce.getLuminance())+.05)},i.isReadable=function(j,ee,ne){var ce=i.readability(j,ee),_e,we;switch(we=!1,_e=ae(ne),_e.level+_e.size){case"AAsmall":case"AAAlarge":we=ce>=4.5;break;case"AAlarge":we=ce>=3;break;case"AAAsmall":we=ce>=7;break}return we},i.mostReadable=function(j,ee,ne){var ce=null,_e=0,we,Oe,Ie,Xe;ne=ne||{},Oe=ne.includeFallbackColors,Ie=ne.level,Xe=ne.size;for(var tt=0;tt<ee.length;tt++)we=i.readability(j,ee[tt]),we>_e&&(_e=we,ce=i(ee[tt]));return i.isReadable(j,ce,{level:Ie,size:Xe})||!Oe?ce:(ne.includeFallbackColors=!1,i.mostReadable(j,["#fff","#000"],ne))};var F=i.names={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"0ff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"00f",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",burntsienna:"ea7e5d",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"0ff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkgrey:"a9a9a9",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"f0f",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",grey:"808080",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgreen:"90ee90",lightgrey:"d3d3d3",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370db",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"db7093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",rebeccapurple:"663399",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"},O=i.hexNames=B(F);function B(j){var ee={};for(var ne in j)j.hasOwnProperty(ne)&&(ee[j[ne]]=ne);return ee}function I(j){return j=parseFloat(j),(isNaN(j)||j<0||j>1)&&(j=1),j}function N(j,ee){Q(j)&&(j="100%");var ne=le(j);return j=t(ee,r(0,parseFloat(j))),ne&&(j=parseInt(j*ee,10)/100),g.abs(j-ee)<1e-6?1:j%ee/parseFloat(ee)}function U(j){return t(1,r(0,j))}function W(j){return parseInt(j,16)}function Q(j){return typeof j=="string"&&j.indexOf(".")!=-1&&parseFloat(j)===1}function le(j){return typeof j=="string"&&j.indexOf("%")!=-1}function se(j){return j.length==1?"0"+j:""+j}function fe(j){return j<=1&&(j=j*100+"%"),j}function G(j){return g.round(parseFloat(j)*255).toString(16)}function J(j){return W(j)/255}var $=function(){var j="[-\\+]?\\d+%?",ee="[-\\+]?\\d*\\.\\d+%?",ne="(?:"+ee+")|(?:"+j+")",ce="[\\s|\\(]+("+ne+")[,|\\s]+("+ne+")[,|\\s]+("+ne+")\\s*\\)?",_e="[\\s|\\(]+("+ne+")[,|\\s]+("+ne+")[,|\\s]+("+ne+")[,|\\s]+("+ne+")\\s*\\)?";return{CSS_UNIT:new RegExp(ne),rgb:new RegExp("rgb"+ce),rgba:new RegExp("rgba"+_e),hsl:new RegExp("hsl"+ce),hsla:new RegExp("hsla"+_e),hsv:new RegExp("hsv"+ce),hsva:new RegExp("hsva"+_e),hex3:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex4:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex8:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/}}();function X(j){return!!$.CSS_UNIT.exec(j)}function re(j){j=j.replace(x,"").replace(A,"").toLowerCase();var ee=!1;if(F[j])j=F[j],ee=!0;else if(j=="transparent")return{r:0,g:0,b:0,a:0,format:"name"};var ne;return(ne=$.rgb.exec(j))?{r:ne[1],g:ne[2],b:ne[3]}:(ne=$.rgba.exec(j))?{r:ne[1],g:ne[2],b:ne[3],a:ne[4]}:(ne=$.hsl.exec(j))?{h:ne[1],s:ne[2],l:ne[3]}:(ne=$.hsla.exec(j))?{h:ne[1],s:ne[2],l:ne[3],a:ne[4]}:(ne=$.hsv.exec(j))?{h:ne[1],s:ne[2],v:ne[3]}:(ne=$.hsva.exec(j))?{h:ne[1],s:ne[2],v:ne[3],a:ne[4]}:(ne=$.hex8.exec(j))?{r:W(ne[1]),g:W(ne[2]),b:W(ne[3]),a:J(ne[4]),format:ee?"name":"hex8"}:(ne=$.hex6.exec(j))?{r:W(ne[1]),g:W(ne[2]),b:W(ne[3]),format:ee?"name":"hex"}:(ne=$.hex4.exec(j))?{r:W(ne[1]+""+ne[1]),g:W(ne[2]+""+ne[2]),b:W(ne[3]+""+ne[3]),a:J(ne[4]+""+ne[4]),format:ee?"name":"hex8"}:(ne=$.hex3.exec(j))?{r:W(ne[1]+""+ne[1]),g:W(ne[2]+""+ne[2]),b:W(ne[3]+""+ne[3]),format:ee?"name":"hex"}:!1}function ae(j){var ee,ne;return j=j||{level:"AA",size:"small"},ee=(j.level||"AA").toUpperCase(),ne=(j.size||"small").toLowerCase(),ee!=="AA"&&ee!=="AAA"&&(ee="AA"),ne!=="small"&&ne!=="large"&&(ne="small"),{level:ee,size:ne}}typeof H<"u"&&H.exports?H.exports=i:window.tinycolor=i})(Math)}}),ho=Le({"src/lib/extend.js"(Z){"use strict";var H=$s(),g=Array.isArray;function x(S,e){var t,r;for(t=0;t<S.length;t++){if(r=S[t],r!==null&&typeof r=="object")return!1;r!==void 0&&(e[t]=r)}return!0}Z.extendFlat=function(){return A(arguments,!1,!1,!1)},Z.extendDeep=function(){return A(arguments,!0,!1,!1)},Z.extendDeepAll=function(){return A(arguments,!0,!0,!1)},Z.extendDeepNoArrays=function(){return A(arguments,!0,!1,!0)};function A(S,e,t,r){var o=S[0],i=S.length,n,a,s,c,h,p,d;if(i===2&&g(o)&&g(S[1])&&o.length===0){if(d=x(S[1],o),d)return o;o.splice(0,o.length)}for(var T=1;T<i;T++){n=S[T];for(a in n)s=o[a],c=n[a],r&&g(c)?o[a]=c:e&&c&&(H(c)||(h=g(c)))?(h?(h=!1,p=s&&g(s)?s:[]):p=s&&H(s)?s:{},o[a]=A([p,c],e,t,r)):(typeof c<"u"||t)&&(o[a]=c)}return o}}}),bl=Le({"src/plots/font_attributes.js"(Z,H){"use strict";H.exports=function(g){var x=g.variantValues,A=g.editType,S=g.colorEditType;S===void 0&&(S=A);var e={editType:A,valType:"integer",min:1,max:1e3,extras:["normal","bold"],dflt:"normal"};g.noNumericWeightValues&&(e.valType="enumerated",e.values=e.extras,e.extras=void 0,e.min=void 0,e.max=void 0);var t={family:{valType:"string",noBlank:!0,strict:!0,editType:A},size:{valType:"number",min:1,editType:A},color:{valType:"color",editType:S},weight:e,style:{editType:A,valType:"enumerated",values:["normal","italic"],dflt:"normal"},variant:g.noFontVariant?void 0:{editType:A,valType:"enumerated",values:x||["normal","small-caps","all-small-caps","all-petite-caps","petite-caps","unicase"],dflt:"normal"},textcase:g.noFontTextcase?void 0:{editType:A,valType:"enumerated",values:["normal","word caps","upper","lower"],dflt:"normal"},lineposition:g.noFontLineposition?void 0:{editType:A,valType:"flaglist",flags:["under","over","through"],extras:["none"],dflt:"none"},shadow:g.noFontShadow?void 0:{editType:A,valType:"string",dflt:g.autoShadowDflt?"auto":"none"},editType:A};return g.autoSize&&(t.size.dflt="auto"),g.autoColor&&(t.color.dflt="auto"),g.arrayOk&&(t.family.arrayOk=!0,t.weight.arrayOk=!0,t.style.arrayOk=!0,g.noFontVariant||(t.variant.arrayOk=!0),g.noFontTextcase||(t.textcase.arrayOk=!0),g.noFontLineposition||(t.lineposition.arrayOk=!0),g.noFontShadow||(t.shadow.arrayOk=!0),t.size.arrayOk=!0,t.color.arrayOk=!0),t}}}),Bm=Le({"src/components/fx/constants.js"(Z,H){"use strict";H.exports={YANGLE:60,HOVERARROWSIZE:6,HOVERTEXTPAD:3,HOVERFONTSIZE:13,HOVERFONT:"Arial, sans-serif",HOVERMINTIME:50,HOVERID:"-hover"}}}),Pd=Le({"src/components/fx/layout_attributes.js"(Z,H){"use strict";var g=Bm(),x=bl(),A=x({editType:"none"});A.family.dflt=g.HOVERFONT,A.size.dflt=g.HOVERFONTSIZE,H.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"},hoversubplots:{valType:"enumerated",values:["single","overlaying","axis"],dflt:"overlaying",editType:"none"},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:A,grouptitlefont:x({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"}}}}),Op=Le({"src/components/fx/attributes.js"(Z,H){"use strict";var g=bl(),x=Pd().hoverlabel,A=ho().extendFlat;H.exports={hoverlabel:{bgcolor:A({},x.bgcolor,{arrayOk:!0}),bordercolor:A({},x.bordercolor,{arrayOk:!0}),font:g({arrayOk:!0,editType:"none"}),align:A({},x.align,{arrayOk:!0}),namelength:A({},x.namelength,{arrayOk:!0}),editType:"none"}}}}),Sl=Le({"src/plots/attributes.js"(Z,H){"use strict";var g=bl(),x=Op();H.exports={type:{valType:"enumerated",values:[],dflt:"scatter",editType:"calc+clearAxisTypes",_noTemplating:!0},visible:{valType:"enumerated",values:[!0,!1,"legendonly"],dflt:!0,editType:"calc"},showlegend:{valType:"boolean",dflt:!0,editType:"style"},legend:{valType:"subplotid",dflt:"legend",editType:"style"},legendgroup:{valType:"string",dflt:"",editType:"style"},legendgrouptitle:{text:{valType:"string",dflt:"",editType:"style"},font:g({editType:"style"}),editType:"style"},legendrank:{valType:"number",dflt:1e3,editType:"style"},legendwidth:{valType:"number",min:0,editType:"style"},opacity:{valType:"number",min:0,max:1,dflt:1,editType:"style"},name:{valType:"string",editType:"style"},uid:{valType:"string",editType:"plot",anim:!0},ids:{valType:"data_array",editType:"calc",anim:!0},customdata:{valType:"data_array",editType:"calc"},meta:{valType:"any",arrayOk:!0,editType:"plot"},selectedpoints:{valType:"any",editType:"calc"},hoverinfo:{valType:"flaglist",flags:["x","y","z","text","name"],extras:["all","none","skip"],arrayOk:!0,dflt:"all",editType:"none"},hoverlabel:x.hoverlabel,stream:{token:{valType:"string",noBlank:!0,strict:!0,editType:"calc"},maxpoints:{valType:"number",min:0,max:1e4,dflt:500,editType:"calc"},editType:"calc"},uirevision:{valType:"any",editType:"none"}}}}),lp=Le({"src/components/colorscale/scales.js"(Z,H){"use strict";var g=Vl(),x={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)"]]},A=x.RdBu;function S(r,o){if(o||(o=A),!r)return o;function i(){try{r=x[r]||JSON.parse(r)}catch{r=o}}return typeof r=="string"&&(i(),typeof r=="string"&&i()),e(r)?r:o}function e(r){var o=0;if(!Array.isArray(r)||r.length<2||!r[0]||!r[r.length-1]||+r[0][0]!=0||+r[r.length-1][0]!=1)return!1;for(var i=0;i<r.length;i++){var n=r[i];if(n.length!==2||+n[0]<o||!g(n[1]).isValid())return!1;o=+n[0]}return!0}function t(r){return x[r]!==void 0?!0:e(r)}H.exports={scales:x,defaultScale:A,get:S,isValid:t}}}),gf=Le({"src/components/color/attributes.js"(Z){"use strict";Z.defaults=["#1f77b4","#ff7f0e","#2ca02c","#d62728","#9467bd","#8c564b","#e377c2","#7f7f7f","#bcbd22","#17becf"],Z.defaultLine="#444",Z.lightLine="#eee",Z.background="#fff",Z.borderLine="#BEC8D9",Z.lightFraction=100*10/11}}),$a=Le({"src/components/color/index.js"(Z,H){"use strict";var g=Vl(),x=zn(),A=cl().isTypedArray,S=H.exports={},e=gf();S.defaults=e.defaults;var t=S.defaultLine=e.defaultLine;S.lightLine=e.lightLine;var r=S.background=e.background;S.tinyRGB=function(i){var n=i.toRgb();return"rgb("+Math.round(n.r)+", "+Math.round(n.g)+", "+Math.round(n.b)+")"},S.rgb=function(i){return S.tinyRGB(g(i))},S.opacity=function(i){return i?g(i).getAlpha():0},S.addOpacity=function(i,n){var a=g(i).toRgb();return"rgba("+Math.round(a.r)+", "+Math.round(a.g)+", "+Math.round(a.b)+", "+n+")"},S.combine=function(i,n){var a=g(i).toRgb();if(a.a===1)return g(i).toRgbString();var s=g(n||r).toRgb(),c=s.a===1?s:{r:255*(1-s.a)+s.r*s.a,g:255*(1-s.a)+s.g*s.a,b:255*(1-s.a)+s.b*s.a},h={r:c.r*(1-a.a)+a.r*a.a,g:c.g*(1-a.a)+a.g*a.a,b:c.b*(1-a.a)+a.b*a.a};return g(h).toRgbString()},S.interpolate=function(i,n,a){var s=g(i).toRgb(),c=g(n).toRgb(),h={r:a*s.r+(1-a)*c.r,g:a*s.g+(1-a)*c.g,b:a*s.b+(1-a)*c.b};return g(h).toRgbString()},S.contrast=function(i,n,a){var s=g(i);s.getAlpha()!==1&&(s=g(S.combine(i,r)));var c=s.isDark()?n?s.lighten(n):r:a?s.darken(a):t;return c.toString()},S.stroke=function(i,n){var a=g(n);i.style({stroke:S.tinyRGB(a),"stroke-opacity":a.getAlpha()})},S.fill=function(i,n){var a=g(n);i.style({fill:S.tinyRGB(a),"fill-opacity":a.getAlpha()})},S.clean=function(i){if(!(!i||typeof i!="object")){var n=Object.keys(i),a,s,c,h;for(a=0;a<n.length;a++)if(c=n[a],h=i[c],c.substr(c.length-5)==="color")if(Array.isArray(h))for(s=0;s<h.length;s++)h[s]=o(h[s]);else i[c]=o(h);else if(c.substr(c.length-10)==="colorscale"&&Array.isArray(h))for(s=0;s<h.length;s++)Array.isArray(h[s])&&(h[s][1]=o(h[s][1]));else if(Array.isArray(h)){var p=h[0];if(!Array.isArray(p)&&p&&typeof p=="object")for(s=0;s<h.length;s++)S.clean(h[s])}else h&&typeof h=="object"&&!A(h)&&S.clean(h)}};function o(i){if(x(i)||typeof i!="string")return i;var n=i.trim();if(n.substr(0,3)!=="rgb")return i;var a=n.match(/^rgba?\s*\(([^()]*)\)$/);if(!a)return i;var s=a[1].trim().split(/\s*[\s,]\s*/),c=n.charAt(3)==="a"&&s.length===4;if(!c&&s.length!==3)return i;for(var h=0;h<s.length;h++){if(!s[h].length||(s[h]=Number(s[h]),!(s[h]>=0)))return i;if(h===3)s[h]>1&&(s[h]=1);else if(s[h]>=1)return i}var p=Math.round(s[0]*255)+", "+Math.round(s[1]*255)+", "+Math.round(s[2]*255);return c?"rgba("+p+", "+s[3]+")":"rgb("+p+")"}}}),Iv=Le({"src/constants/interactions.js"(Z,H){"use strict";H.exports={SHOW_PLACEHOLDER:100,HIDE_PLACEHOLDER:1e3,DESELECTDIM:.2}}}),no=Le({"src/lib/regex.js"(Z){"use strict";Z.counter=function(H,g,x,A){var S=(g||"")+(x?"":"$"),e=A===!1?"":"^";return H==="xy"?new RegExp(e+"x([2-9]|[1-9][0-9]+)?y([2-9]|[1-9][0-9]+)?"+S):new RegExp(e+H+"([2-9]|[1-9][0-9]+)?"+S)}}}),Ro=Le({"src/lib/coerce.js"(Z){"use strict";var H=zn(),g=Vl(),x=ho().extendFlat,A=Sl(),S=lp(),e=$a(),t=Iv().DESELECTDIM,r=jl(),o=no().counter,i=Vu().modHalf,n=cl().isArrayOrTypedArray,a=cl().isTypedArraySpec,s=cl().decodeTypedArraySpec;Z.valObjectMeta={data_array:{coerceFunction:function(h,p,d){p.set(n(h)?h:a(h)?s(h):d)}},enumerated:{coerceFunction:function(h,p,d,T){T.coerceNumber&&(h=+h),T.values.indexOf(h)===-1?p.set(d):p.set(h)},validateFunction:function(h,p){p.coerceNumber&&(h=+h);for(var d=p.values,T=0;T<d.length;T++){var l=String(d[T]);if(l.charAt(0)==="/"&&l.charAt(l.length-1)==="/"){var _=new RegExp(l.substr(1,l.length-2));if(_.test(h))return!0}else if(h===d[T])return!0}return!1}},boolean:{coerceFunction:function(h,p,d){h===!0||h===!1?p.set(h):p.set(d)}},number:{coerceFunction:function(h,p,d,T){a(h)&&(h=s(h)),!H(h)||T.min!==void 0&&h<T.min||T.max!==void 0&&h>T.max?p.set(d):p.set(+h)}},integer:{coerceFunction:function(h,p,d,T){if((T.extras||[]).indexOf(h)!==-1){p.set(h);return}a(h)&&(h=s(h)),h%1||!H(h)||T.min!==void 0&&h<T.min||T.max!==void 0&&h>T.max?p.set(d):p.set(+h)}},string:{coerceFunction:function(h,p,d,T){if(typeof h!="string"){var l=typeof h=="number";T.strict===!0||!l?p.set(d):p.set(String(h))}else T.noBlank&&!h?p.set(d):p.set(h)}},color:{coerceFunction:function(h,p,d){a(h)&&(h=s(h)),g(h).isValid()?p.set(h):p.set(d)}},colorlist:{coerceFunction:function(h,p,d){function T(l){return g(l).isValid()}!Array.isArray(h)||!h.length?p.set(d):h.every(T)?p.set(h):p.set(d)}},colorscale:{coerceFunction:function(h,p,d){p.set(S.get(h,d))}},angle:{coerceFunction:function(h,p,d){a(h)&&(h=s(h)),h==="auto"?p.set("auto"):H(h)?p.set(i(+h,360)):p.set(d)}},subplotid:{coerceFunction:function(h,p,d,T){var l=T.regex||o(d);if(typeof h=="string"&&l.test(h)){p.set(h);return}p.set(d)},validateFunction:function(h,p){var d=p.dflt;return h===d?!0:typeof h!="string"?!1:!!o(d).test(h)}},flaglist:{coerceFunction:function(h,p,d,T){if((T.extras||[]).indexOf(h)!==-1){p.set(h);return}if(typeof h!="string"){p.set(d);return}for(var l=h.split("+"),_=0;_<l.length;){var w=l[_];T.flags.indexOf(w)===-1||l.indexOf(w)<_?l.splice(_,1):_++}l.length?p.set(l.join("+")):p.set(d)}},any:{coerceFunction:function(h,p,d){h===void 0?p.set(d):p.set(a(h)?s(h):h)}},info_array:{coerceFunction:function(h,p,d,T){function l(F,O,B){var I,N={set:function(U){I=U}};return B===void 0&&(B=O.dflt),Z.valObjectMeta[O.valType].coerceFunction(F,N,B,O),I}if(a(h)&&(h=s(h)),!n(h)){p.set(d);return}var _=T.dimensions===2||T.dimensions==="1-2"&&Array.isArray(h)&&n(h[0]),w=T.items,M=[],E=Array.isArray(w),m=E&&_&&n(w[0]),b=_&&E&&!m,v=E&&!b?w.length:h.length,u,y,f,P,L,z;if(d=Array.isArray(d)?d:[],_)for(u=0;u<v;u++)for(M[u]=[],f=n(h[u])?h[u]:[],b?L=w.length:E?L=w[u].length:L=f.length,y=0;y<L;y++)b?P=w[y]:E?P=w[u][y]:P=w,z=l(f[y],P,(d[u]||[])[y]),z!==void 0&&(M[u][y]=z);else for(u=0;u<v;u++)z=l(h[u],E?w[u]:w,d[u]),z!==void 0&&(M[u]=z);p.set(M)},validateFunction:function(h,p){if(!n(h))return!1;var d=p.items,T=Array.isArray(d),l=p.dimensions===2;if(!p.freeLength&&h.length!==d.length)return!1;for(var _=0;_<h.length;_++)if(l){if(!n(h[_])||!p.freeLength&&h[_].length!==d[_].length)return!1;for(var w=0;w<h[_].length;w++)if(!c(h[_][w],T?d[_][w]:d))return!1}else if(!c(h[_],T?d[_]:d))return!1;return!0}}},Z.coerce=function(h,p,d,T,l){var _=r(d,T).get(),w=r(h,T),M=r(p,T),E=w.get(),m=p._template;if(E===void 0&&m&&(E=r(m,T).get(),m=0),l===void 0&&(l=_.dflt),_.arrayOk){if(n(E))return M.set(E),E;if(a(E))return E=s(E),M.set(E),E}var b=Z.valObjectMeta[_.valType].coerceFunction;b(E,M,l,_);var v=M.get();return m&&v===l&&!c(E,_)&&(E=r(m,T).get(),b(E,M,l,_),v=M.get()),v},Z.coerce2=function(h,p,d,T,l){var _=r(h,T),w=Z.coerce(h,p,d,T,l),M=_.get();return M!=null?w:!1},Z.coerceFont=function(h,p,d,T){T||(T={}),d=x({},d),d=x(d,T.overrideDflt||{});var l={family:h(p+".family",d.family),size:h(p+".size",d.size),color:h(p+".color",d.color),weight:h(p+".weight",d.weight),style:h(p+".style",d.style)};if(T.noFontVariant||(l.variant=h(p+".variant",d.variant)),T.noFontLineposition||(l.lineposition=h(p+".lineposition",d.lineposition)),T.noFontTextcase||(l.textcase=h(p+".textcase",d.textcase)),!T.noFontShadow){var _=d.shadow;_==="none"&&T.autoShadowDflt&&(_="auto"),l.shadow=h(p+".shadow",_)}return l},Z.coercePattern=function(h,p,d,T){var l=h(p+".shape");if(l){h(p+".solidity"),h(p+".size");var _=h(p+".fillmode"),w=_==="overlay";if(!T){var M=h(p+".bgcolor",w?d:void 0);h(p+".fgcolor",w?e.contrast(M):d)}h(p+".fgopacity",w?.5:1)}},Z.coerceHoverinfo=function(h,p,d){var T=p._module.attributes,l=T.hoverinfo?T:A,_=l.hoverinfo,w;if(d._dataLength===1){var M=_.dflt==="all"?_.flags.slice():_.dflt.split("+");M.splice(M.indexOf("name"),1),w=M.join("+")}return Z.coerce(h,p,l,"hoverinfo",w)},Z.coerceSelectionMarkerOpacity=function(h,p){if(h.marker){var d=h.marker.opacity;if(d!==void 0){var T,l;!n(d)&&!h.selected&&!h.unselected&&(T=d,l=t*d),p("selected.marker.opacity",T),p("unselected.marker.opacity",l)}}};function c(h,p){var d=Z.valObjectMeta[p.valType];if(p.arrayOk&&n(h))return!0;if(d.validateFunction)return d.validateFunction(h,p);var T={},l=T,_={set:function(w){l=w}};return d.coerceFunction(h,_,T,p),l!==T}Z.validate=c}}),Qn=Le({"src/plot_api/plot_config.js"(Z,H){"use strict";var g={staticPlot:{valType:"boolean",dflt:!1},typesetMath:{valType:"boolean",dflt:!0},plotlyServerURL:{valType:"string",dflt:""},editable:{valType:"boolean",dflt:!1},edits:{annotationPosition:{valType:"boolean",dflt:!1},annotationTail:{valType:"boolean",dflt:!1},annotationText:{valType:"boolean",dflt:!1},axisTitleText:{valType:"boolean",dflt:!1},colorbarPosition:{valType:"boolean",dflt:!1},colorbarTitleText:{valType:"boolean",dflt:!1},legendPosition:{valType:"boolean",dflt:!1},legendText:{valType:"boolean",dflt:!1},shapePosition:{valType:"boolean",dflt:!1},titleText:{valType:"boolean",dflt:!1}},editSelection:{valType:"boolean",dflt:!0},autosizable:{valType:"boolean",dflt:!1},responsive:{valType:"boolean",dflt:!1},fillFrame:{valType:"boolean",dflt:!1},frameMargins:{valType:"number",dflt:0,min:0,max:.5},scrollZoom:{valType:"flaglist",flags:["cartesian","gl3d","geo","mapbox","map"],extras:[!0,!1],dflt:"gl3d+geo+map"},doubleClick:{valType:"enumerated",values:[!1,"reset","autosize","reset+autosize"],dflt:"reset+autosize"},doubleClickDelay:{valType:"number",dflt:300,min:0},showAxisDragHandles:{valType:"boolean",dflt:!0},showAxisRangeEntryBoxes:{valType:"boolean",dflt:!0},showTips:{valType:"boolean",dflt:!0},showLink:{valType:"boolean",dflt:!1},linkText:{valType:"string",dflt:"Edit chart",noBlank:!0},sendData:{valType:"boolean",dflt:!0},showSources:{valType:"any",dflt:!1},displayModeBar:{valType:"enumerated",values:["hover",!0,!1],dflt:"hover"},showSendToCloud:{valType:"boolean",dflt:!1},showEditInChartStudio:{valType:"boolean",dflt:!1},modeBarButtonsToRemove:{valType:"any",dflt:[]},modeBarButtonsToAdd:{valType:"any",dflt:[]},modeBarButtons:{valType:"any",dflt:!1},toImageButtonOptions:{valType:"any",dflt:{}},displaylogo:{valType:"boolean",dflt:!0},watermark:{valType:"boolean",dflt:!1},plotGlPixelRatio:{valType:"number",dflt:2,min:1,max:4},setBackground:{valType:"any",dflt:"transparent"},topojsonURL:{valType:"string",noBlank:!0,dflt:"https://cdn.plot.ly/"},mapboxAccessToken:{valType:"string",dflt:null},logging:{valType:"integer",min:0,max:2,dflt:1},notifyOnLogging:{valType:"integer",min:0,max:2,dflt:0},queueLength:{valType:"integer",min:0,dflt:0},locale:{valType:"string",dflt:"en-US"},locales:{valType:"any",dflt:{}}},x={};function A(S,e){for(var t in S){var r=S[t];r.valType?e[t]=r.dflt:(e[t]||(e[t]={}),A(r,e[t]))}}A(g,x),H.exports={configAttributes:g,dfltConfig:x}}}),ta=Le({"src/lib/notifier.js"(Z,H){"use strict";var g=Ji(),x=zn(),A=[];H.exports=function(S,e){if(A.indexOf(S)!==-1)return;A.push(S);var t=1e3;x(e)?t=e:e==="long"&&(t=3e3);var r=g.select("body").selectAll(".plotly-notifier").data([0]);r.enter().append("div").classed("plotly-notifier",!0);var o=r.selectAll(".notifier-note").data(A);function i(n){n.duration(700).style("opacity",0).each("end",function(a){var s=A.indexOf(a);s!==-1&&A.splice(s,1),g.select(this).remove()})}o.enter().append("div").classed("notifier-note",!0).style("opacity",0).each(function(n){var a=g.select(this);a.append("button").classed("notifier-close",!0).html("&times;").on("click",function(){a.transition().call(i)});for(var s=a.append("p"),c=n.split(/<br\s*\/?>/g),h=0;h<c.length;h++)h&&s.append("br"),s.append("span").text(c[h]);e==="stick"?a.transition().duration(350).style("opacity",1):a.transition().duration(700).style("opacity",1).transition().delay(t).call(i)})}}}),ua=Le({"src/lib/loggers.js"(Z,H){"use strict";var g=Qn().dfltConfig,x=ta(),A=H.exports={};A.log=function(){var S;if(g.logging>1){var e=["LOG:"];for(S=0;S<arguments.length;S++)e.push(arguments[S]);console.trace.apply(console,e)}if(g.notifyOnLogging>1){var t=[];for(S=0;S<arguments.length;S++)t.push(arguments[S]);x(t.join("<br>"),"long")}},A.warn=function(){var S;if(g.logging>0){var e=["WARN:"];for(S=0;S<arguments.length;S++)e.push(arguments[S]);console.trace.apply(console,e)}if(g.notifyOnLogging>0){var t=[];for(S=0;S<arguments.length;S++)t.push(arguments[S]);x(t.join("<br>"),"stick")}},A.error=function(){var S;if(g.logging>0){var e=["ERROR:"];for(S=0;S<arguments.length;S++)e.push(arguments[S]);console.error.apply(console,e)}if(g.notifyOnLogging>0){var t=[];for(S=0;S<arguments.length;S++)t.push(arguments[S]);x(t.join("<br>"),"stick")}}}}),jo=Le({"src/lib/noop.js"(Z,H){"use strict";H.exports=function(){}}}),ms=Le({"src/lib/push_unique.js"(Z,H){"use strict";H.exports=function(x,A){if(A instanceof RegExp){for(var S=A.toString(),e=0;e<x.length;e++)if(x[e]instanceof RegExp&&x[e].toString()===S)return x;x.push(A)}else(A||A===0)&&x.indexOf(A)===-1&&x.push(A);return x}}}),cc=Le({"node_modules/gl-mat4/create.js"(Z,H){H.exports=g;function g(){var x=new Float32Array(16);return x[0]=1,x[1]=0,x[2]=0,x[3]=0,x[4]=0,x[5]=1,x[6]=0,x[7]=0,x[8]=0,x[9]=0,x[10]=1,x[11]=0,x[12]=0,x[13]=0,x[14]=0,x[15]=1,x}}}),wd=Le({"node_modules/gl-mat4/clone.js"(Z,H){H.exports=g;function g(x){var A=new Float32Array(16);return A[0]=x[0],A[1]=x[1],A[2]=x[2],A[3]=x[3],A[4]=x[4],A[5]=x[5],A[6]=x[6],A[7]=x[7],A[8]=x[8],A[9]=x[9],A[10]=x[10],A[11]=x[11],A[12]=x[12],A[13]=x[13],A[14]=x[14],A[15]=x[15],A}}}),Np=Le({"node_modules/gl-mat4/copy.js"(Z,H){H.exports=g;function g(x,A){return x[0]=A[0],x[1]=A[1],x[2]=A[2],x[3]=A[3],x[4]=A[4],x[5]=A[5],x[6]=A[6],x[7]=A[7],x[8]=A[8],x[9]=A[9],x[10]=A[10],x[11]=A[11],x[12]=A[12],x[13]=A[13],x[14]=A[14],x[15]=A[15],x}}}),Rw=Le({"node_modules/gl-mat4/identity.js"(Z,H){H.exports=g;function g(x){return x[0]=1,x[1]=0,x[2]=0,x[3]=0,x[4]=0,x[5]=1,x[6]=0,x[7]=0,x[8]=0,x[9]=0,x[10]=1,x[11]=0,x[12]=0,x[13]=0,x[14]=0,x[15]=1,x}}}),FS=Le({"node_modules/gl-mat4/transpose.js"(Z,H){H.exports=g;function g(x,A){if(x===A){var S=A[1],e=A[2],t=A[3],r=A[6],o=A[7],i=A[11];x[1]=A[4],x[2]=A[8],x[3]=A[12],x[4]=S,x[6]=A[9],x[7]=A[13],x[8]=e,x[9]=r,x[11]=A[14],x[12]=t,x[13]=o,x[14]=i}else x[0]=A[0],x[1]=A[4],x[2]=A[8],x[3]=A[12],x[4]=A[1],x[5]=A[5],x[6]=A[9],x[7]=A[13],x[8]=A[2],x[9]=A[6],x[10]=A[10],x[11]=A[14],x[12]=A[3],x[13]=A[7],x[14]=A[11],x[15]=A[15];return x}}}),BS=Le({"node_modules/gl-mat4/invert.js"(Z,H){H.exports=g;function g(x,A){var S=A[0],e=A[1],t=A[2],r=A[3],o=A[4],i=A[5],n=A[6],a=A[7],s=A[8],c=A[9],h=A[10],p=A[11],d=A[12],T=A[13],l=A[14],_=A[15],w=S*i-e*o,M=S*n-t*o,E=S*a-r*o,m=e*n-t*i,b=e*a-r*i,v=t*a-r*n,u=s*T-c*d,y=s*l-h*d,f=s*_-p*d,P=c*l-h*T,L=c*_-p*T,z=h*_-p*l,F=w*z-M*L+E*P+m*f-b*y+v*u;return F?(F=1/F,x[0]=(i*z-n*L+a*P)*F,x[1]=(t*L-e*z-r*P)*F,x[2]=(T*v-l*b+_*m)*F,x[3]=(h*b-c*v-p*m)*F,x[4]=(n*f-o*z-a*y)*F,x[5]=(S*z-t*f+r*y)*F,x[6]=(l*E-d*v-_*M)*F,x[7]=(s*v-h*E+p*M)*F,x[8]=(o*L-i*f+a*u)*F,x[9]=(e*f-S*L-r*u)*F,x[10]=(d*b-T*E+_*w)*F,x[11]=(c*E-s*b-p*w)*F,x[12]=(i*y-o*P-n*u)*F,x[13]=(S*P-e*y+t*u)*F,x[14]=(T*M-d*m-l*w)*F,x[15]=(s*m-c*M+h*w)*F,x):null}}}),OS=Le({"node_modules/gl-mat4/adjoint.js"(Z,H){H.exports=g;function g(x,A){var S=A[0],e=A[1],t=A[2],r=A[3],o=A[4],i=A[5],n=A[6],a=A[7],s=A[8],c=A[9],h=A[10],p=A[11],d=A[12],T=A[13],l=A[14],_=A[15];return x[0]=i*(h*_-p*l)-c*(n*_-a*l)+T*(n*p-a*h),x[1]=-(e*(h*_-p*l)-c*(t*_-r*l)+T*(t*p-r*h)),x[2]=e*(n*_-a*l)-i*(t*_-r*l)+T*(t*a-r*n),x[3]=-(e*(n*p-a*h)-i*(t*p-r*h)+c*(t*a-r*n)),x[4]=-(o*(h*_-p*l)-s*(n*_-a*l)+d*(n*p-a*h)),x[5]=S*(h*_-p*l)-s*(t*_-r*l)+d*(t*p-r*h),x[6]=-(S*(n*_-a*l)-o*(t*_-r*l)+d*(t*a-r*n)),x[7]=S*(n*p-a*h)-o*(t*p-r*h)+s*(t*a-r*n),x[8]=o*(c*_-p*T)-s*(i*_-a*T)+d*(i*p-a*c),x[9]=-(S*(c*_-p*T)-s*(e*_-r*T)+d*(e*p-r*c)),x[10]=S*(i*_-a*T)-o*(e*_-r*T)+d*(e*a-r*i),x[11]=-(S*(i*p-a*c)-o*(e*p-r*c)+s*(e*a-r*i)),x[12]=-(o*(c*l-h*T)-s*(i*l-n*T)+d*(i*h-n*c)),x[13]=S*(c*l-h*T)-s*(e*l-t*T)+d*(e*h-t*c),x[14]=-(S*(i*l-n*T)-o*(e*l-t*T)+d*(e*n-t*i)),x[15]=S*(i*h-n*c)-o*(e*h-t*c)+s*(e*n-t*i),x}}}),NS=Le({"node_modules/gl-mat4/determinant.js"(Z,H){H.exports=g;function g(x){var A=x[0],S=x[1],e=x[2],t=x[3],r=x[4],o=x[5],i=x[6],n=x[7],a=x[8],s=x[9],c=x[10],h=x[11],p=x[12],d=x[13],T=x[14],l=x[15],_=A*o-S*r,w=A*i-e*r,M=A*n-t*r,E=S*i-e*o,m=S*n-t*o,b=e*n-t*i,v=a*d-s*p,u=a*T-c*p,y=a*l-h*p,f=s*T-c*d,P=s*l-h*d,L=c*l-h*T;return _*L-w*P+M*f+E*y-m*u+b*v}}}),US=Le({"node_modules/gl-mat4/multiply.js"(Z,H){H.exports=g;function g(x,A,S){var e=A[0],t=A[1],r=A[2],o=A[3],i=A[4],n=A[5],a=A[6],s=A[7],c=A[8],h=A[9],p=A[10],d=A[11],T=A[12],l=A[13],_=A[14],w=A[15],M=S[0],E=S[1],m=S[2],b=S[3];return x[0]=M*e+E*i+m*c+b*T,x[1]=M*t+E*n+m*h+b*l,x[2]=M*r+E*a+m*p+b*_,x[3]=M*o+E*s+m*d+b*w,M=S[4],E=S[5],m=S[6],b=S[7],x[4]=M*e+E*i+m*c+b*T,x[5]=M*t+E*n+m*h+b*l,x[6]=M*r+E*a+m*p+b*_,x[7]=M*o+E*s+m*d+b*w,M=S[8],E=S[9],m=S[10],b=S[11],x[8]=M*e+E*i+m*c+b*T,x[9]=M*t+E*n+m*h+b*l,x[10]=M*r+E*a+m*p+b*_,x[11]=M*o+E*s+m*d+b*w,M=S[12],E=S[13],m=S[14],b=S[15],x[12]=M*e+E*i+m*c+b*T,x[13]=M*t+E*n+m*h+b*l,x[14]=M*r+E*a+m*p+b*_,x[15]=M*o+E*s+m*d+b*w,x}}}),jS=Le({"node_modules/gl-mat4/translate.js"(Z,H){H.exports=g;function g(x,A,S){var e=S[0],t=S[1],r=S[2],o,i,n,a,s,c,h,p,d,T,l,_;return A===x?(x[12]=A[0]*e+A[4]*t+A[8]*r+A[12],x[13]=A[1]*e+A[5]*t+A[9]*r+A[13],x[14]=A[2]*e+A[6]*t+A[10]*r+A[14],x[15]=A[3]*e+A[7]*t+A[11]*r+A[15]):(o=A[0],i=A[1],n=A[2],a=A[3],s=A[4],c=A[5],h=A[6],p=A[7],d=A[8],T=A[9],l=A[10],_=A[11],x[0]=o,x[1]=i,x[2]=n,x[3]=a,x[4]=s,x[5]=c,x[6]=h,x[7]=p,x[8]=d,x[9]=T,x[10]=l,x[11]=_,x[12]=o*e+s*t+d*r+A[12],x[13]=i*e+c*t+T*r+A[13],x[14]=n*e+h*t+l*r+A[14],x[15]=a*e+p*t+_*r+A[15]),x}}}),VS=Le({"node_modules/gl-mat4/scale.js"(Z,H){H.exports=g;function g(x,A,S){var e=S[0],t=S[1],r=S[2];return x[0]=A[0]*e,x[1]=A[1]*e,x[2]=A[2]*e,x[3]=A[3]*e,x[4]=A[4]*t,x[5]=A[5]*t,x[6]=A[6]*t,x[7]=A[7]*t,x[8]=A[8]*r,x[9]=A[9]*r,x[10]=A[10]*r,x[11]=A[11]*r,x[12]=A[12],x[13]=A[13],x[14]=A[14],x[15]=A[15],x}}}),qS=Le({"node_modules/gl-mat4/rotate.js"(Z,H){H.exports=g;function g(x,A,S,e){var t=e[0],r=e[1],o=e[2],i=Math.sqrt(t*t+r*r+o*o),n,a,s,c,h,p,d,T,l,_,w,M,E,m,b,v,u,y,f,P,L,z,F,O;return Math.abs(i)<1e-6?null:(i=1/i,t*=i,r*=i,o*=i,n=Math.sin(S),a=Math.cos(S),s=1-a,c=A[0],h=A[1],p=A[2],d=A[3],T=A[4],l=A[5],_=A[6],w=A[7],M=A[8],E=A[9],m=A[10],b=A[11],v=t*t*s+a,u=r*t*s+o*n,y=o*t*s-r*n,f=t*r*s-o*n,P=r*r*s+a,L=o*r*s+t*n,z=t*o*s+r*n,F=r*o*s-t*n,O=o*o*s+a,x[0]=c*v+T*u+M*y,x[1]=h*v+l*u+E*y,x[2]=p*v+_*u+m*y,x[3]=d*v+w*u+b*y,x[4]=c*f+T*P+M*L,x[5]=h*f+l*P+E*L,x[6]=p*f+_*P+m*L,x[7]=d*f+w*P+b*L,x[8]=c*z+T*F+M*O,x[9]=h*z+l*F+E*O,x[10]=p*z+_*F+m*O,x[11]=d*z+w*F+b*O,A!==x&&(x[12]=A[12],x[13]=A[13],x[14]=A[14],x[15]=A[15]),x)}}}),HS=Le({"node_modules/gl-mat4/rotateX.js"(Z,H){H.exports=g;function g(x,A,S){var e=Math.sin(S),t=Math.cos(S),r=A[4],o=A[5],i=A[6],n=A[7],a=A[8],s=A[9],c=A[10],h=A[11];return A!==x&&(x[0]=A[0],x[1]=A[1],x[2]=A[2],x[3]=A[3],x[12]=A[12],x[13]=A[13],x[14]=A[14],x[15]=A[15]),x[4]=r*t+a*e,x[5]=o*t+s*e,x[6]=i*t+c*e,x[7]=n*t+h*e,x[8]=a*t-r*e,x[9]=s*t-o*e,x[10]=c*t-i*e,x[11]=h*t-n*e,x}}}),GS=Le({"node_modules/gl-mat4/rotateY.js"(Z,H){H.exports=g;function g(x,A,S){var e=Math.sin(S),t=Math.cos(S),r=A[0],o=A[1],i=A[2],n=A[3],a=A[8],s=A[9],c=A[10],h=A[11];return A!==x&&(x[4]=A[4],x[5]=A[5],x[6]=A[6],x[7]=A[7],x[12]=A[12],x[13]=A[13],x[14]=A[14],x[15]=A[15]),x[0]=r*t-a*e,x[1]=o*t-s*e,x[2]=i*t-c*e,x[3]=n*t-h*e,x[8]=r*e+a*t,x[9]=o*e+s*t,x[10]=i*e+c*t,x[11]=n*e+h*t,x}}}),WS=Le({"node_modules/gl-mat4/rotateZ.js"(Z,H){H.exports=g;function g(x,A,S){var e=Math.sin(S),t=Math.cos(S),r=A[0],o=A[1],i=A[2],n=A[3],a=A[4],s=A[5],c=A[6],h=A[7];return A!==x&&(x[8]=A[8],x[9]=A[9],x[10]=A[10],x[11]=A[11],x[12]=A[12],x[13]=A[13],x[14]=A[14],x[15]=A[15]),x[0]=r*t+a*e,x[1]=o*t+s*e,x[2]=i*t+c*e,x[3]=n*t+h*e,x[4]=a*t-r*e,x[5]=s*t-o*e,x[6]=c*t-i*e,x[7]=h*t-n*e,x}}}),XS=Le({"node_modules/gl-mat4/fromRotation.js"(Z,H){H.exports=g;function g(x,A,S){var e,t,r,o=S[0],i=S[1],n=S[2],a=Math.sqrt(o*o+i*i+n*n);return Math.abs(a)<1e-6?null:(a=1/a,o*=a,i*=a,n*=a,e=Math.sin(A),t=Math.cos(A),r=1-t,x[0]=o*o*r+t,x[1]=i*o*r+n*e,x[2]=n*o*r-i*e,x[3]=0,x[4]=o*i*r-n*e,x[5]=i*i*r+t,x[6]=n*i*r+o*e,x[7]=0,x[8]=o*n*r+i*e,x[9]=i*n*r-o*e,x[10]=n*n*r+t,x[11]=0,x[12]=0,x[13]=0,x[14]=0,x[15]=1,x)}}}),ZS=Le({"node_modules/gl-mat4/fromRotationTranslation.js"(Z,H){H.exports=g;function g(x,A,S){var e=A[0],t=A[1],r=A[2],o=A[3],i=e+e,n=t+t,a=r+r,s=e*i,c=e*n,h=e*a,p=t*n,d=t*a,T=r*a,l=o*i,_=o*n,w=o*a;return x[0]=1-(p+T),x[1]=c+w,x[2]=h-_,x[3]=0,x[4]=c-w,x[5]=1-(s+T),x[6]=d+l,x[7]=0,x[8]=h+_,x[9]=d-l,x[10]=1-(s+p),x[11]=0,x[12]=S[0],x[13]=S[1],x[14]=S[2],x[15]=1,x}}}),YS=Le({"node_modules/gl-mat4/fromScaling.js"(Z,H){H.exports=g;function g(x,A){return x[0]=A[0],x[1]=0,x[2]=0,x[3]=0,x[4]=0,x[5]=A[1],x[6]=0,x[7]=0,x[8]=0,x[9]=0,x[10]=A[2],x[11]=0,x[12]=0,x[13]=0,x[14]=0,x[15]=1,x}}}),KS=Le({"node_modules/gl-mat4/fromTranslation.js"(Z,H){H.exports=g;function g(x,A){return x[0]=1,x[1]=0,x[2]=0,x[3]=0,x[4]=0,x[5]=1,x[6]=0,x[7]=0,x[8]=0,x[9]=0,x[10]=1,x[11]=0,x[12]=A[0],x[13]=A[1],x[14]=A[2],x[15]=1,x}}}),$S=Le({"node_modules/gl-mat4/fromXRotation.js"(Z,H){H.exports=g;function g(x,A){var S=Math.sin(A),e=Math.cos(A);return x[0]=1,x[1]=0,x[2]=0,x[3]=0,x[4]=0,x[5]=e,x[6]=S,x[7]=0,x[8]=0,x[9]=-S,x[10]=e,x[11]=0,x[12]=0,x[13]=0,x[14]=0,x[15]=1,x}}}),JS=Le({"node_modules/gl-mat4/fromYRotation.js"(Z,H){H.exports=g;function g(x,A){var S=Math.sin(A),e=Math.cos(A);return x[0]=e,x[1]=0,x[2]=-S,x[3]=0,x[4]=0,x[5]=1,x[6]=0,x[7]=0,x[8]=S,x[9]=0,x[10]=e,x[11]=0,x[12]=0,x[13]=0,x[14]=0,x[15]=1,x}}}),QS=Le({"node_modules/gl-mat4/fromZRotation.js"(Z,H){H.exports=g;function g(x,A){var S=Math.sin(A),e=Math.cos(A);return x[0]=e,x[1]=S,x[2]=0,x[3]=0,x[4]=-S,x[5]=e,x[6]=0,x[7]=0,x[8]=0,x[9]=0,x[10]=1,x[11]=0,x[12]=0,x[13]=0,x[14]=0,x[15]=1,x}}}),Dw=Le({"node_modules/gl-mat4/fromQuat.js"(Z,H){H.exports=g;function g(x,A){var S=A[0],e=A[1],t=A[2],r=A[3],o=S+S,i=e+e,n=t+t,a=S*o,s=e*o,c=e*i,h=t*o,p=t*i,d=t*n,T=r*o,l=r*i,_=r*n;return x[0]=1-c-d,x[1]=s+_,x[2]=h-l,x[3]=0,x[4]=s-_,x[5]=1-a-d,x[6]=p+T,x[7]=0,x[8]=h+l,x[9]=p-T,x[10]=1-a-c,x[11]=0,x[12]=0,x[13]=0,x[14]=0,x[15]=1,x}}}),eE=Le({"node_modules/gl-mat4/frustum.js"(Z,H){H.exports=g;function g(x,A,S,e,t,r,o){var i=1/(S-A),n=1/(t-e),a=1/(r-o);return x[0]=r*2*i,x[1]=0,x[2]=0,x[3]=0,x[4]=0,x[5]=r*2*n,x[6]=0,x[7]=0,x[8]=(S+A)*i,x[9]=(t+e)*n,x[10]=(o+r)*a,x[11]=-1,x[12]=0,x[13]=0,x[14]=o*r*2*a,x[15]=0,x}}}),tE=Le({"node_modules/gl-mat4/perspective.js"(Z,H){H.exports=g;function g(x,A,S,e,t){var r=1/Math.tan(A/2),o=1/(e-t);return x[0]=r/S,x[1]=0,x[2]=0,x[3]=0,x[4]=0,x[5]=r,x[6]=0,x[7]=0,x[8]=0,x[9]=0,x[10]=(t+e)*o,x[11]=-1,x[12]=0,x[13]=0,x[14]=2*t*e*o,x[15]=0,x}}}),rE=Le({"node_modules/gl-mat4/perspectiveFromFieldOfView.js"(Z,H){H.exports=g;function g(x,A,S,e){var t=Math.tan(A.upDegrees*Math.PI/180),r=Math.tan(A.downDegrees*Math.PI/180),o=Math.tan(A.leftDegrees*Math.PI/180),i=Math.tan(A.rightDegrees*Math.PI/180),n=2/(o+i),a=2/(t+r);return x[0]=n,x[1]=0,x[2]=0,x[3]=0,x[4]=0,x[5]=a,x[6]=0,x[7]=0,x[8]=-((o-i)*n*.5),x[9]=(t-r)*a*.5,x[10]=e/(S-e),x[11]=-1,x[12]=0,x[13]=0,x[14]=e*S/(S-e),x[15]=0,x}}}),iE=Le({"node_modules/gl-mat4/ortho.js"(Z,H){H.exports=g;function g(x,A,S,e,t,r,o){var i=1/(A-S),n=1/(e-t),a=1/(r-o);return x[0]=-2*i,x[1]=0,x[2]=0,x[3]=0,x[4]=0,x[5]=-2*n,x[6]=0,x[7]=0,x[8]=0,x[9]=0,x[10]=2*a,x[11]=0,x[12]=(A+S)*i,x[13]=(t+e)*n,x[14]=(o+r)*a,x[15]=1,x}}}),nE=Le({"node_modules/gl-mat4/lookAt.js"(Z,H){var g=Rw();H.exports=x;function x(A,S,e,t){var r,o,i,n,a,s,c,h,p,d,T=S[0],l=S[1],_=S[2],w=t[0],M=t[1],E=t[2],m=e[0],b=e[1],v=e[2];return Math.abs(T-m)<1e-6&&Math.abs(l-b)<1e-6&&Math.abs(_-v)<1e-6?g(A):(c=T-m,h=l-b,p=_-v,d=1/Math.sqrt(c*c+h*h+p*p),c*=d,h*=d,p*=d,r=M*p-E*h,o=E*c-w*p,i=w*h-M*c,d=Math.sqrt(r*r+o*o+i*i),d?(d=1/d,r*=d,o*=d,i*=d):(r=0,o=0,i=0),n=h*i-p*o,a=p*r-c*i,s=c*o-h*r,d=Math.sqrt(n*n+a*a+s*s),d?(d=1/d,n*=d,a*=d,s*=d):(n=0,a=0,s=0),A[0]=r,A[1]=n,A[2]=c,A[3]=0,A[4]=o,A[5]=a,A[6]=h,A[7]=0,A[8]=i,A[9]=s,A[10]=p,A[11]=0,A[12]=-(r*T+o*l+i*_),A[13]=-(n*T+a*l+s*_),A[14]=-(c*T+h*l+p*_),A[15]=1,A)}}}),aE=Le({"node_modules/gl-mat4/str.js"(Z,H){H.exports=g;function g(x){return"mat4("+x[0]+", "+x[1]+", "+x[2]+", "+x[3]+", "+x[4]+", "+x[5]+", "+x[6]+", "+x[7]+", "+x[8]+", "+x[9]+", "+x[10]+", "+x[11]+", "+x[12]+", "+x[13]+", "+x[14]+", "+x[15]+")"}}}),zw=Le({"node_modules/gl-mat4/index.js"(Z,H){H.exports={create:cc(),clone:wd(),copy:Np(),identity:Rw(),transpose:FS(),invert:BS(),adjoint:OS(),determinant:NS(),multiply:US(),translate:jS(),scale:VS(),rotate:qS(),rotateX:HS(),rotateY:GS(),rotateZ:WS(),fromRotation:XS(),fromRotationTranslation:ZS(),fromScaling:YS(),fromTranslation:KS(),fromXRotation:$S(),fromYRotation:JS(),fromZRotation:QS(),fromQuat:Dw(),frustum:eE(),perspective:tE(),perspectiveFromFieldOfView:rE(),ortho:iE(),lookAt:nE(),str:aE()}}}),v_=Le({"src/lib/matrix.js"(Z){"use strict";var H=zw();Z.init2dArray=function(g,x){for(var A=new Array(g),S=0;S<g;S++)A[S]=new Array(x);return A},Z.transposeRagged=function(g){var x=0,A=g.length,S,e;for(S=0;S<A;S++)x=Math.max(x,g[S].length);var t=new Array(x);for(S=0;S<x;S++)for(t[S]=new Array(A),e=0;e<A;e++)t[S][e]=g[e][S];return t},Z.dot=function(g,x){if(!(g.length&&x.length)||g.length!==x.length)return null;var A=g.length,S,e;if(g[0].length)for(S=new Array(A),e=0;e<A;e++)S[e]=Z.dot(g[e],x);else if(x[0].length){var t=Z.transposeRagged(x);for(S=new Array(t.length),e=0;e<t.length;e++)S[e]=Z.dot(g,t[e])}else for(S=0,e=0;e<A;e++)S+=g[e]*x[e];return S},Z.translationMatrix=function(g,x){return[[1,0,g],[0,1,x],[0,0,1]]},Z.rotationMatrix=function(g){var x=g*Math.PI/180;return[[Math.cos(x),-Math.sin(x),0],[Math.sin(x),Math.cos(x),0],[0,0,1]]},Z.rotationXYMatrix=function(g,x,A){return Z.dot(Z.dot(Z.translationMatrix(x,A),Z.rotationMatrix(g)),Z.translationMatrix(-x,-A))},Z.apply3DTransform=function(g){return function(){var x=arguments,A=arguments.length===1?x[0]:[x[0],x[1],x[2]||0];return Z.dot(g,[A[0],A[1],A[2],1]).slice(0,3)}},Z.apply2DTransform=function(g){return function(){var x=arguments;x.length===3&&(x=x[0]);var A=arguments.length===1?x[0]:[x[0],x[1]];return Z.dot(g,[A[0],A[1],1]).slice(0,2)}},Z.apply2DTransform2=function(g){var x=Z.apply2DTransform(g);return function(A){return x(A.slice(0,2)).concat(x(A.slice(2,4)))}},Z.convertCssMatrix=function(g){if(g){var x=g.length;if(x===16)return g;if(x===6)return[g[0],g[1],0,0,g[2],g[3],0,0,0,0,1,0,g[4],g[5],0,1]}return[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]},Z.inverseTransformMatrix=function(g){var x=[];return H.invert(x,g),[[x[0],x[1],x[2],x[3]],[x[4],x[5],x[6],x[7]],[x[8],x[9],x[10],x[11]],[x[12],x[13],x[14],x[15]]]}}}),iy=Le({"src/lib/dom.js"(Z,H){"use strict";var g=Ji(),x=ua(),A=v_(),S=zw();function e(T){var l;if(typeof T=="string"){if(l=document.getElementById(T),l===null)throw new Error("No DOM element with id '"+T+"' exists on the page.");return l}else if(T==null)throw new Error("DOM element provided is null or undefined");return T}function t(T){var l=g.select(T);return l.node()instanceof HTMLElement&&l.size()&&l.classed("js-plotly-plot")}function r(T){var l=T&&T.parentNode;l&&l.removeChild(T)}function o(T,l){i("global",T,l)}function i(T,l,_){var w="plotly.js-style-"+T,M=document.getElementById(w);if(!(M&&M.matches(".no-inline-styles"))){M||(M=document.createElement("style"),M.setAttribute("id",w),M.appendChild(document.createTextNode("")),document.head.appendChild(M));var E=M.sheet;E?E.insertRule?E.insertRule(l+"{"+_+"}",0):E.addRule?E.addRule(l,_,0):x.warn("addStyleRule failed"):x.warn("Cannot addRelatedStyleRule, probably due to strict CSP...")}}function n(T){var l="plotly.js-style-"+T,_=document.getElementById(l);_&&r(_)}function a(T,l,_,w,M,E){var m=w.split(":"),b=M.split(":"),v="data-btn-style-event-added";E||(E=document),E.querySelectorAll(T).forEach(function(u){u.getAttribute(v)||(u.addEventListener("mouseenter",function(){var y=this.querySelector(_);y&&(y.style[m[0]]=m[1])}),u.addEventListener("mouseleave",function(){var y=this.querySelector(_);y&&(l&&this.matches(l)?y.style[m[0]]=m[1]:y.style[b[0]]=b[1])}),u.setAttribute(v,!0))})}function s(T){var l=h(T),_=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];return l.forEach(function(w){var M=c(w);if(M){var E=A.convertCssMatrix(M);_=S.multiply(_,_,E)}}),_}function c(T){var l=window.getComputedStyle(T,null),_=l.getPropertyValue("-webkit-transform")||l.getPropertyValue("-moz-transform")||l.getPropertyValue("-ms-transform")||l.getPropertyValue("-o-transform")||l.getPropertyValue("transform");return _==="none"?null:_.replace("matrix","").replace("3d","").slice(1,-1).split(",").map(function(w){return+w})}function h(T){for(var l=[];p(T);)l.push(T),T=T.parentNode,typeof ShadowRoot=="function"&&T instanceof ShadowRoot&&(T=T.host);return l}function p(T){return T&&(T instanceof Element||T instanceof HTMLElement)}function d(T,l){return T&&l&&T.top===l.top&&T.left===l.left&&T.right===l.right&&T.bottom===l.bottom}H.exports={getGraphDiv:e,isPlotDiv:t,removeElement:r,addStyleRule:o,addRelatedStyleRule:i,deleteRelatedStyleRule:n,setStyleOnHover:a,getFullTransformMatrix:s,getElementTransformMatrix:c,getElementAndAncestors:h,equalDomRects:d}}}),ny=Le({"src/plots/animation_attributes.js"(Z,H){"use strict";H.exports={mode:{valType:"enumerated",dflt:"afterall",values:["immediate","next","afterall"]},direction:{valType:"enumerated",values:["forward","reverse"],dflt:"forward"},fromcurrent:{valType:"boolean",dflt:!1},frame:{duration:{valType:"number",min:0,dflt:500},redraw:{valType:"boolean",dflt:!0}},transition:{duration:{valType:"number",min:0,dflt:500,editType:"none"},easing:{valType:"enumerated",dflt:"cubic-in-out",values:["linear","quad","cubic","sin","exp","circle","elastic","back","bounce","linear-in","quad-in","cubic-in","sin-in","exp-in","circle-in","elastic-in","back-in","bounce-in","linear-out","quad-out","cubic-out","sin-out","exp-out","circle-out","elastic-out","back-out","bounce-out","linear-in-out","quad-in-out","cubic-in-out","sin-in-out","exp-in-out","circle-in-out","elastic-in-out","back-in-out","bounce-in-out"],editType:"none"},ordering:{valType:"enumerated",values:["layout first","traces first"],dflt:"layout first",editType:"none"}}}}}),qu=Le({"src/plot_api/edit_types.js"(Z,H){"use strict";var g=ho().extendFlat,x=$s(),A={valType:"flaglist",extras:["none"],flags:["calc","clearAxisTypes","plot","style","markerSize","colorbars"]},S={valType:"flaglist",extras:["none"],flags:["calc","plot","legend","ticks","axrange","layoutstyle","modebar","camera","arraydraw","colorbars"]},e=A.flags.slice().concat(["fullReplot"]),t=S.flags.slice().concat("layoutReplot");H.exports={traces:A,layout:S,traceFlags:function(){return r(e)},layoutFlags:function(){return r(t)},update:function(n,a){var s=a.editType;if(s&&s!=="none")for(var c=s.split("+"),h=0;h<c.length;h++)n[c[h]]=!0},overrideAll:o};function r(n){for(var a={},s=0;s<n.length;s++)a[n[s]]=!1;return a}function o(n,a,s){var c=g({},n);for(var h in c){var p=c[h];x(p)&&(c[h]=i(p,a,s,h))}return s==="from-root"&&(c.editType=a),c}function i(n,a,s,c){if(n.valType){var h=g({},n);if(h.editType=a,Array.isArray(n.items)){h.items=new Array(n.items.length);for(var p=0;p<n.items.length;p++)h.items[p]=i(n.items[p],a,"from-root")}return h}else return o(n,a,c.charAt(0)==="_"?"nested":"from-root")}}}),Ah=Le({"src/components/drawing/attributes.js"(Z){"use strict";Z.dash={valType:"string",values:["solid","dot","dash","longdash","dashdot","longdashdot"],dflt:"solid",editType:"style"},Z.pattern={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"}}}),Fw=Le({"src/constants/docs.js"(Z,H){"use strict";H.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"}}}),Fs=Le({"src/plots/template_attributes.js"(Z){"use strict";var H=Fw(),g=H.FORMAT_LINK,x=H.DATE_FORMAT_LINK;function A(S){var e=S.description?" "+S.description:"",t=S.keys||[];if(t.length>0){for(var r=[],o=0;o<t.length;o++)r[o]="`"+t[o]+"`";e=e+"Finally, the template string has access to ",t.length===1?e=e+"variable "+r[0]:e=e+"variables "+r.slice(0,-1).join(", ")+" and "+r.slice(-1)+"."}return e}Z.hovertemplateAttrs=function(S,e){S=S||{},e=e||{};var t=A(e),r={valType:"string",dflt:"",editType:S.editType||"none"};return S.arrayOk!==!1&&(r.arrayOk=!0),r},Z.texttemplateAttrs=function(S,e){S=S||{},e=e||{};var t=A(e),r={valType:"string",dflt:"",editType:S.editType||"calc"};return S.arrayOk!==!1&&(r.arrayOk=!0),r},Z.shapeTexttemplateAttrs=function(S,e){S=S||{},e=e||{};var t=S.newshape?"new ":"",r=A(e),o={valType:"string",dflt:"",editType:S.editType||"arraydraw"};return o}}}),p_=Le({"src/components/shapes/label_texttemplate.js"(Z,H){"use strict";function g(_,w){return w?w.d2l(_):_}function x(_,w){return w?w.l2d(_):_}function A(_){return _.x0}function S(_){return _.x1}function e(_){return _.y0}function t(_){return _.y1}function r(_){return _.x0shift||0}function o(_){return _.x1shift||0}function i(_){return _.y0shift||0}function n(_){return _.y1shift||0}function a(_,w){return g(_.x1,w)+o(_)-g(_.x0,w)-r(_)}function s(_,w,M){return g(_.y1,M)+n(_)-g(_.y0,M)-i(_)}function c(_,w){return Math.abs(a(_,w))}function h(_,w,M){return Math.abs(s(_,w,M))}function p(_,w,M){return _.type!=="line"?void 0:Math.sqrt(Math.pow(a(_,w),2)+Math.pow(s(_,w,M),2))}function d(_,w){return x((g(_.x1,w)+o(_)+g(_.x0,w)+r(_))/2,w)}function T(_,w,M){return x((g(_.y1,M)+n(_)+g(_.y0,M)+i(_))/2,M)}function l(_,w,M){return _.type!=="line"?void 0:s(_,w,M)/a(_,w)}H.exports={x0:A,x1:S,y0:e,y1:t,slope:l,dx:a,dy:s,width:c,height:h,length:p,xcenter:d,ycenter:T}}}),oE=Le({"src/components/shapes/draw_newshape/attributes.js"(Z,H){"use strict";var g=qu().overrideAll,x=Sl(),A=bl(),S=Ah().dash,e=ho().extendFlat,t=Fs().shapeTexttemplateAttrs,r=p_();H.exports=g({newshape:{visible:e({},x.visible,{}),showlegend:{valType:"boolean",dflt:!1},legend:e({},x.legend,{}),legendgroup:e({},x.legendgroup,{}),legendgrouptitle:{text:e({},x.legendgrouptitle.text,{}),font:A({})},legendrank:e({},x.legendrank,{}),legendwidth:e({},x.legendwidth,{}),line:{color:{valType:"color"},width:{valType:"number",min:0,dflt:4},dash:e({},S,{dflt:"solid"})},fillcolor:{valType:"color",dflt:"rgba(0,0,0,0)"},fillrule:{valType:"enumerated",values:["evenodd","nonzero"],dflt:"evenodd"},opacity:{valType:"number",min:0,max:1,dflt:1},layer:{valType:"enumerated",values:["below","above","between"],dflt:"above"},drawdirection:{valType:"enumerated",values:["ortho","horizontal","vertical","diagonal"],dflt:"diagonal"},name:e({},x.name,{}),label:{text:{valType:"string",dflt:""},texttemplate:t({newshape:!0},{keys:Object.keys(r)}),font:A({}),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"]},textangle:{valType:"angle",dflt:"auto"},xanchor:{valType:"enumerated",values:["auto","left","center","right"],dflt:"auto"},yanchor:{valType:"enumerated",values:["top","middle","bottom"]},padding:{valType:"number",dflt:3,min:0}}},activeshape:{fillcolor:{valType:"color",dflt:"rgb(255,0,255)"},opacity:{valType:"number",min:0,max:1,dflt:.5}}},"none","from-root")}}),sE=Le({"src/components/selections/draw_newselection/attributes.js"(Z,H){"use strict";var g=Ah().dash,x=ho().extendFlat;H.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:x({},g,{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"}}}}),m_=Le({"src/plots/pad_attributes.js"(Z,H){"use strict";H.exports=function(g){var x=g.editType;return{t:{valType:"number",dflt:0,editType:x},r:{valType:"number",dflt:0,editType:x},b:{valType:"number",dflt:0,editType:x},l:{valType:"number",dflt:0,editType:x},editType:x}}}}),Gg=Le({"src/plots/layout_attributes.js"(Z,H){"use strict";var g=bl(),x=ny(),A=gf(),S=oE(),e=sE(),t=m_(),r=ho().extendFlat,o=g({editType:"calc"});o.family.dflt='"Open Sans", verdana, arial, sans-serif',o.size.dflt=12,o.color.dflt=A.defaultLine,H.exports={font:o,title:{text:{valType:"string",editType:"layoutstyle"},font:g({editType:"layoutstyle"}),subtitle:{text:{valType:"string",editType:"layoutstyle"},font:g({editType:"layoutstyle"}),editType:"layoutstyle"},xref:{valType:"enumerated",dflt:"container",values:["container","paper"],editType:"layoutstyle"},yref:{valType:"enumerated",dflt:"container",values:["container","paper"],editType:"layoutstyle"},x:{valType:"number",min:0,max:1,dflt:.5,editType:"layoutstyle"},y:{valType:"number",min:0,max:1,dflt:"auto",editType:"layoutstyle"},xanchor:{valType:"enumerated",dflt:"auto",values:["auto","left","center","right"],editType:"layoutstyle"},yanchor:{valType:"enumerated",dflt:"auto",values:["auto","top","middle","bottom"],editType:"layoutstyle"},pad:r(t({editType:"layoutstyle"}),{}),automargin:{valType:"boolean",dflt:!1,editType:"plot"},editType:"layoutstyle"},uniformtext:{mode:{valType:"enumerated",values:[!1,"hide","show"],dflt:!1,editType:"plot"},minsize:{valType:"number",min:0,dflt:0,editType:"plot"},editType:"plot"},autosize:{valType:"boolean",dflt:!1,editType:"none"},width:{valType:"number",min:10,dflt:700,editType:"plot"},height:{valType:"number",min:10,dflt:450,editType:"plot"},minreducedwidth:{valType:"number",min:2,dflt:64,editType:"plot"},minreducedheight:{valType:"number",min:2,dflt:64,editType:"plot"},margin:{l:{valType:"number",min:0,dflt:80,editType:"plot"},r:{valType:"number",min:0,dflt:80,editType:"plot"},t:{valType:"number",min:0,dflt:100,editType:"plot"},b:{valType:"number",min:0,dflt:80,editType:"plot"},pad:{valType:"number",min:0,dflt:0,editType:"plot"},autoexpand:{valType:"boolean",dflt:!0,editType:"plot"},editType:"plot"},computed:{valType:"any",editType:"none"},paper_bgcolor:{valType:"color",dflt:A.background,editType:"plot"},plot_bgcolor:{valType:"color",dflt:A.background,editType:"layoutstyle"},autotypenumbers:{valType:"enumerated",values:["convert types","strict"],dflt:"convert types",editType:"calc"},separators:{valType:"string",editType:"plot"},hidesources:{valType:"boolean",dflt:!1,editType:"plot"},showlegend:{valType:"boolean",editType:"legend"},colorway:{valType:"colorlist",dflt:A.defaults,editType:"calc"},datarevision:{valType:"any",editType:"calc"},uirevision:{valType:"any",editType:"none"},editrevision:{valType:"any",editType:"none"},selectionrevision:{valType:"any",editType:"none"},template:{valType:"any",editType:"calc"},newshape:S.newshape,activeshape:S.activeshape,newselection:e.newselection,activeselection:e.activeselection,meta:{valType:"any",arrayOk:!0,editType:"plot"},transition:r({},x.transition,{editType:"none"})}}}),lE=Jr({"temp_stylePlugin:node_modules/maplibre-gl/dist/maplibre-gl.css"(){}}),bB={},uE=Jr({"stylePlugin:/Users/ekl/code/plotly.js/node_modules/maplibre-gl/dist/maplibre-gl.css"(){lE()}}),so=Le({"src/registry.js"(Z){"use strict";var H=ua(),g=jo(),x=ms(),A=$s(),S=iy().addStyleRule,e=ho(),t=Sl(),r=Gg(),o=e.extendFlat,i=e.extendDeepAll;Z.modules={},Z.allCategories={},Z.allTypes=[],Z.subplotsRegistry={},Z.componentsRegistry={},Z.layoutArrayContainers=[],Z.layoutArrayRegexes=[],Z.traceLayoutAttributes={},Z.localeRegistry={},Z.apiMethodRegistry={},Z.collectableSubplotTypes=null,Z.register=function(w){if(Z.collectableSubplotTypes=null,w)w&&!Array.isArray(w)&&(w=[w]);else throw new Error("No argument passed to Plotly.register.");for(var M=0;M<w.length;M++){var E=w[M];if(!E)throw new Error("Invalid module was attempted to be registered!");switch(E.moduleType){case"trace":n(E);break;case"transform":c(E);break;case"component":s(E);break;case"locale":h(E);break;case"apiMethod":var m=E.name;Z.apiMethodRegistry[m]=E.fn;break;default:throw new Error("Invalid module was attempted to be registered!")}}},Z.getModule=function(_){var w=Z.modules[l(_)];return w?w._module:!1},Z.traceIs=function(_,w){if(_=l(_),_==="various")return!1;var M=Z.modules[_];return M||(_&&H.log("Unrecognized trace type "+_+"."),M=Z.modules[t.type.dflt]),!!M.categories[w]},Z.getComponentMethod=function(_,w){var M=Z.componentsRegistry[_];return M&&M[w]||g},Z.call=function(){var _=arguments[0],w=[].slice.call(arguments,1);return Z.apiMethodRegistry[_].apply(null,w)};function n(_){var w=_.name,M=_.categories,E=_.meta;if(Z.modules[w]){H.log("Type "+w+" already registered");return}Z.subplotsRegistry[_.basePlotModule.name]||a(_.basePlotModule);for(var m={},b=0;b<M.length;b++)m[M[b]]=!0,Z.allCategories[M[b]]=!0;Z.modules[w]={_module:_,categories:m},E&&Object.keys(E).length&&(Z.modules[w].meta=E),Z.allTypes.push(w);for(var v in Z.componentsRegistry)d(v,w);_.layoutAttributes&&o(Z.traceLayoutAttributes,_.layoutAttributes);var u=_.basePlotModule,y=u.name;if(y==="mapbox"){var f=u.constants.styleRules;for(var P in f)S(".js-plotly-plot .plotly .mapboxgl-"+P,f[P])}y==="map"&&uE(),(y==="geo"||y==="mapbox"||y==="map")&&window.PlotlyGeoAssets===void 0&&(window.PlotlyGeoAssets={topojson:{}})}function a(_){var w=_.name;if(Z.subplotsRegistry[w]){H.log("Plot type "+w+" already registered.");return}p(_),Z.subplotsRegistry[w]=_;for(var M in Z.componentsRegistry)T(M,_.name)}function s(_){if(typeof _.name!="string")throw new Error("Component module *name* must be a string.");var w=_.name;Z.componentsRegistry[w]=_,_.layoutAttributes&&(_.layoutAttributes._isLinkedToArray&&x(Z.layoutArrayContainers,w),p(_));for(var M in Z.modules)d(w,M);for(var E in Z.subplotsRegistry)T(w,E);_.schema&&_.schema.layout&&i(r,_.schema.layout)}function c(_){if(typeof _.name!="string")throw new Error("Transform module *name* must be a string.");var w="Transform module "+_.name,M=typeof _.transform=="function",E=typeof _.calcTransform=="function";if(!M&&!E)throw new Error(w+" is missing a *transform* or *calcTransform* method.");M&&E&&H.log([w+" has both a *transform* and *calcTransform* methods.","Please note that all *transform* methods are executed","before all *calcTransform* methods."].join(" ")),A(_.attributes)||H.log(w+" registered without an *attributes* object."),typeof _.supplyDefaults!="function"&&H.log(w+" registered without a *supplyDefaults* method.")}function h(_){var w=_.name,M=w.split("-")[0],E=_.dictionary,m=_.format,b=E&&Object.keys(E).length,v=m&&Object.keys(m).length,u=Z.localeRegistry,y=u[w];if(y||(u[w]=y={}),M!==w){var f=u[M];f||(u[M]=f={}),b&&f.dictionary===y.dictionary&&(f.dictionary=E),v&&f.format===y.format&&(f.format=m)}b&&(y.dictionary=E),v&&(y.format=m)}function p(_){if(_.layoutAttributes){var w=_.layoutAttributes._arrayAttrRegexps;if(w)for(var M=0;M<w.length;M++)x(Z.layoutArrayRegexes,w[M])}}function d(_,w){var M=Z.componentsRegistry[_].schema;if(!(!M||!M.traces)){var E=M.traces[w];E&&i(Z.modules[w]._module.attributes,E)}}function T(_,w){var M=Z.componentsRegistry[_].schema;if(!(!M||!M.subplots)){var E=Z.subplotsRegistry[w],m=E.layoutAttributes,b=E.attr==="subplot"?E.name:E.attr;Array.isArray(b)&&(b=b[0]);var v=M.subplots[b];m&&v&&i(m,v)}}function l(_){return typeof _=="object"&&(_=_.type),_}}}),cE=Le({"src/lib/dates.js"(Z){"use strict";var H=Ia().timeFormat,g=zn(),x=ua(),A=Vu().mod,S=$n(),e=S.BADNUM,t=S.ONEDAY,r=S.ONEHOUR,o=S.ONEMIN,i=S.ONESEC,n=S.EPOCHJD,a=so(),s=Ia().utcFormat,c=/^\s*(-?\d\d\d\d|\d\d)(-(\d?\d)(-(\d?\d)([ Tt]([01]?\d|2[0-3])(:([0-5]\d)(:([0-5]\d(\.\d+)?))?(Z|z|[+\-]\d\d(:?\d\d)?)?)?)?)?)?\s*$/m,h=/^\s*(-?\d\d\d\d|\d\d)(-(\d?\di?)(-(\d?\d)([ Tt]([01]?\d|2[0-3])(:([0-5]\d)(:([0-5]\d(\.\d+)?))?(Z|z|[+\-]\d\d(:?\d\d)?)?)?)?)?)?\s*$/m,p=new Date().getFullYear()-70;function d(F){return F&&a.componentsRegistry.calendars&&typeof F=="string"&&F!=="gregorian"}Z.dateTick0=function(F,O){var B=T(F,!!O);if(O<2)return B;var I=Z.dateTime2ms(B,F);return I+=t*(O-1),Z.ms2DateTime(I,0,F)};function T(F,O){return d(F)?O?a.getComponentMethod("calendars","CANONICAL_SUNDAY")[F]:a.getComponentMethod("calendars","CANONICAL_TICK")[F]:O?"2000-01-02":"2000-01-01"}Z.dfltRange=function(F){return d(F)?a.getComponentMethod("calendars","DFLTRANGE")[F]:["2000-01-01","2001-01-01"]},Z.isJSDate=function(F){return typeof F=="object"&&F!==null&&typeof F.getTime=="function"};var l,_;Z.dateTime2ms=function(F,O){if(Z.isJSDate(F)){var B=F.getTimezoneOffset()*o,I=(F.getUTCMinutes()-F.getMinutes())*o+(F.getUTCSeconds()-F.getSeconds())*i+(F.getUTCMilliseconds()-F.getMilliseconds());if(I){var N=3*o;B=B-N/2+A(I-B+N/2,N)}return F=Number(F)-B,F>=l&&F<=_?F:e}if(typeof F!="string"&&typeof F!="number")return e;F=String(F);var U=d(O),W=F.charAt(0);U&&(W==="G"||W==="g")&&(F=F.substr(1),O="");var Q=U&&O.substr(0,7)==="chinese",le=F.match(Q?h:c);if(!le)return e;var se=le[1],fe=le[3]||"1",G=Number(le[5]||1),J=Number(le[7]||0),$=Number(le[9]||0),X=Number(le[11]||0);if(U){if(se.length===2)return e;se=Number(se);var re;try{var ae=a.getComponentMethod("calendars","getCal")(O);if(Q){var j=fe.charAt(fe.length-1)==="i";fe=parseInt(fe,10),re=ae.newDate(se,ae.toMonthIndex(se,fe,j),G)}else re=ae.newDate(se,Number(fe),G)}catch{return e}return re?(re.toJD()-n)*t+J*r+$*o+X*i:e}se.length===2?se=(Number(se)+2e3-p)%100+p:se=Number(se),fe-=1;var ee=new Date(Date.UTC(2e3,fe,G,J,$));return ee.setUTCFullYear(se),ee.getUTCMonth()!==fe||ee.getUTCDate()!==G?e:ee.getTime()+X*i},l=Z.MIN_MS=Z.dateTime2ms("-9999"),_=Z.MAX_MS=Z.dateTime2ms("9999-12-31 23:59:59.9999"),Z.isDateTime=function(F,O){return Z.dateTime2ms(F,O)!==e};function w(F,O){return String(F+Math.pow(10,O)).substr(1)}var M=90*t,E=3*r,m=5*o;Z.ms2DateTime=function(F,O,B){if(typeof F!="number"||!(F>=l&&F<=_))return e;O||(O=0);var I=Math.floor(A(F+.05,1)*10),N=Math.round(F-I/10),U,W,Q,le,se,fe;if(d(B)){var G=Math.floor(N/t)+n,J=Math.floor(A(F,t));try{U=a.getComponentMethod("calendars","getCal")(B).fromJD(G).formatDate("yyyy-mm-dd")}catch{U=s("G%Y-%m-%d")(new Date(N))}if(U.charAt(0)==="-")for(;U.length<11;)U="-0"+U.substr(1);else for(;U.length<10;)U="0"+U;W=O<M?Math.floor(J/r):0,Q=O<M?Math.floor(J%r/o):0,le=O<E?Math.floor(J%o/i):0,se=O<m?J%i*10+I:0}else fe=new Date(N),U=s("%Y-%m-%d")(fe),W=O<M?fe.getUTCHours():0,Q=O<M?fe.getUTCMinutes():0,le=O<E?fe.getUTCSeconds():0,se=O<m?fe.getUTCMilliseconds()*10+I:0;return b(U,W,Q,le,se)},Z.ms2DateTimeLocal=function(F){if(!(F>=l+t&&F<=_-t))return e;var O=Math.floor(A(F+.05,1)*10),B=new Date(Math.round(F-O/10)),I=H("%Y-%m-%d")(B),N=B.getHours(),U=B.getMinutes(),W=B.getSeconds(),Q=B.getUTCMilliseconds()*10+O;return b(I,N,U,W,Q)};function b(F,O,B,I,N){if((O||B||I||N)&&(F+=" "+w(O,2)+":"+w(B,2),(I||N)&&(F+=":"+w(I,2),N))){for(var U=4;N%10===0;)U-=1,N/=10;F+="."+w(N,U)}return F}Z.cleanDate=function(F,O,B){if(F===e)return O;if(Z.isJSDate(F)||typeof F=="number"&&isFinite(F)){if(d(B))return x.error("JS Dates and milliseconds are incompatible with world calendars",F),O;if(F=Z.ms2DateTimeLocal(+F),!F&&O!==void 0)return O}else if(!Z.isDateTime(F,B))return x.error("unrecognized date",F),O;return F};var v=/%\d?f/g,u=/%h/g,y={1:"1",2:"1",3:"2",4:"2"};function f(F,O,B,I){F=F.replace(v,function(U){var W=Math.min(+U.charAt(1)||6,6),Q=(O/1e3%1+2).toFixed(W).substr(2).replace(/0+$/,"")||"0";return Q});var N=new Date(Math.floor(O+.05));if(F=F.replace(u,function(){return y[B("%q")(N)]}),d(I))try{F=a.getComponentMethod("calendars","worldCalFmt")(F,O,I)}catch{return"Invalid"}return B(F)(N)}var P=[59,59.9,59.99,59.999,59.9999];function L(F,O){var B=A(F+.05,t),I=w(Math.floor(B/r),2)+":"+w(A(Math.floor(B/o),60),2);if(O!=="M"){g(O)||(O=0);var N=Math.min(A(F/i,60),P[O]),U=(100+N).toFixed(O).substr(1);O>0&&(U=U.replace(/0+$/,"").replace(/[\.]$/,"")),I+=":"+U}return I}Z.formatDate=function(F,O,B,I,N,U){if(N=d(N)&&N,!O)if(B==="y")O=U.year;else if(B==="m")O=U.month;else if(B==="d")O=U.dayMonth+`
+`+U.year;else return L(F,B)+`
+`+f(U.dayMonthYear,F,I,N);return f(O,F,I,N)};var z=3*t;Z.incrementMonth=function(F,O,B){B=d(B)&&B;var I=A(F,t);if(F=Math.round(F-I),B)try{var N=Math.round(F/t)+n,U=a.getComponentMethod("calendars","getCal")(B),W=U.fromJD(N);return O%12?U.add(W,O,"m"):U.add(W,O/12,"y"),(W.toJD()-n)*t+I}catch{x.error("invalid ms "+F+" in calendar "+B)}var Q=new Date(F+z);return Q.setUTCMonth(Q.getUTCMonth()+O)+I-z},Z.findExactDates=function(F,O){for(var B=0,I=0,N=0,U=0,W,Q,le=d(O)&&a.getComponentMethod("calendars","getCal")(O),se=0;se<F.length;se++){if(Q=F[se],!g(Q)){U++;continue}if(!(Q%t))if(le)try{W=le.fromJD(Q/t+n),W.day()===1?W.month()===1?B++:I++:N++}catch{}else W=new Date(Q),W.getUTCDate()===1?W.getUTCMonth()===0?B++:I++:N++}I+=B,N+=I;var fe=F.length-U;return{exactYears:B/fe,exactMonths:I/fe,exactDays:N/fe}}}}),ay=Le({"src/lib/identity.js"(Z,H){"use strict";H.exports=function(x){return x}}}),g_=Le({"src/lib/search.js"(Z){"use strict";var H=zn(),g=ua(),x=ay(),A=$n().BADNUM,S=1e-9;Z.findBin=function(i,n,a){if(H(n.start))return a?Math.ceil((i-n.start)/n.size-S)-1:Math.floor((i-n.start)/n.size+S);var s=0,c=n.length,h=0,p=c>1?(n[c-1]-n[0])/(c-1):1,d,T;for(p>=0?T=a?e:t:T=a?o:r,i+=p*S*(a?-1:1)*(p>=0?1:-1);s<c&&h++<100;)d=Math.floor((s+c)/2),T(n[d],i)?s=d+1:c=d;return h>90&&g.log("Long binary search..."),s-1};function e(i,n){return i<n}function t(i,n){return i<=n}function r(i,n){return i>n}function o(i,n){return i>=n}Z.sorterAsc=function(i,n){return i-n},Z.sorterDes=function(i,n){return n-i},Z.distinctVals=function(i){var n=i.slice();n.sort(Z.sorterAsc);var a;for(a=n.length-1;a>-1&&n[a]===A;a--);for(var s=n[a]-n[0]||1,c=s/(a||1)/1e4,h=[],p,d=0;d<=a;d++){var T=n[d],l=T-p;p===void 0?(h.push(T),p=T):l>c&&(s=Math.min(s,l),h.push(T),p=T)}return{vals:h,minDiff:s}},Z.roundUp=function(i,n,a){for(var s=0,c=n.length-1,h,p=0,d=a?0:1,T=a?1:0,l=a?Math.ceil:Math.floor;s<c&&p++<100;)h=l((s+c)/2),n[h]<=i?s=h+d:c=h-T;return n[s]},Z.sort=function(i,n){for(var a=0,s=0,c=1;c<i.length;c++){var h=n(i[c],i[c-1]);if(h<0?a=1:h>0&&(s=1),a&&s)return i.sort(n)}return s?i:i.reverse()},Z.findIndexOfMin=function(i,n){n=n||x;for(var a=1/0,s,c=0;c<i.length;c++){var h=n(i[c]);h<a&&(a=h,s=c)}return s}}}),Up=Le({"src/lib/sort_object_keys.js"(Z,H){"use strict";H.exports=function(x){return Object.keys(x).sort()}}}),fE=Le({"src/lib/stats.js"(Z){"use strict";var H=zn(),g=cl().isArrayOrTypedArray;Z.aggNums=function(x,A,S,e){var t,r;if((!e||e>S.length)&&(e=S.length),H(A)||(A=!1),g(S[0])){for(r=new Array(e),t=0;t<e;t++)r[t]=Z.aggNums(x,A,S[t]);S=r}for(t=0;t<e;t++)H(A)?H(S[t])&&(A=x(+A,+S[t])):A=S[t];return A},Z.len=function(x){return Z.aggNums(function(A){return A+1},0,x)},Z.mean=function(x,A){return A||(A=Z.len(x)),Z.aggNums(function(S,e){return S+e},0,x)/A},Z.geometricMean=function(x,A){return A||(A=Z.len(x)),Math.pow(Z.aggNums(function(S,e){return S*e},1,x),1/A)},Z.midRange=function(x){if(!(x===void 0||x.length===0))return(Z.aggNums(Math.max,null,x)+Z.aggNums(Math.min,null,x))/2},Z.variance=function(x,A,S){return A||(A=Z.len(x)),H(S)||(S=Z.mean(x,A)),Z.aggNums(function(e,t){return e+Math.pow(t-S,2)},0,x)/A},Z.stdev=function(x,A,S){return Math.sqrt(Z.variance(x,A,S))},Z.median=function(x){var A=x.slice().sort();return Z.interp(A,.5)},Z.interp=function(x,A){if(!H(A))throw"n should be a finite number";if(A=A*x.length-.5,A<0)return x[0];if(A>x.length-1)return x[x.length-1];var S=A%1;return S*x[Math.ceil(A)]+(1-S)*x[Math.floor(A)]}}}),hE=Le({"src/lib/angles.js"(Z,H){"use strict";var g=Vu(),x=g.mod,A=g.modHalf,S=Math.PI,e=2*S;function t(T){return T/180*S}function r(T){return T/S*180}function o(T){return Math.abs(T[1]-T[0])>e-1e-14}function i(T,l){return A(l-T,e)}function n(T,l){return Math.abs(i(T,l))}function a(T,l){if(o(l))return!0;var _,w;l[0]<l[1]?(_=l[0],w=l[1]):(_=l[1],w=l[0]),_=x(_,e),w=x(w,e),_>w&&(w+=e);var M=x(T,e),E=M+e;return M>=_&&M<=w||E>=_&&E<=w}function s(T,l,_,w){if(!a(l,w))return!1;var M,E;return _[0]<_[1]?(M=_[0],E=_[1]):(M=_[1],E=_[0]),T>=M&&T<=E}function c(T,l,_,w,M,E,m){M=M||0,E=E||0;var b=o([_,w]),v,u,y,f,P;b?(v=0,u=S,y=e):_<w?(v=_,y=w):(v=w,y=_),T<l?(f=T,P=l):(f=l,P=T);function L(B,I){return[B*Math.cos(I)+M,E-B*Math.sin(I)]}var z=Math.abs(y-v)<=S?0:1;function F(B,I,N){return"A"+[B,B]+" "+[0,z,N]+" "+L(B,I)}var O;return b?f===null?O="M"+L(P,v)+F(P,u,0)+F(P,y,0)+"Z":O="M"+L(f,v)+F(f,u,0)+F(f,y,0)+"ZM"+L(P,v)+F(P,u,1)+F(P,y,1)+"Z":f===null?(O="M"+L(P,v)+F(P,y,0),m&&(O+="L0,0Z")):O="M"+L(f,v)+"L"+L(P,v)+F(P,y,0)+"L"+L(f,y)+F(f,v,1)+"Z",O}function h(T,l,_,w,M){return c(null,T,l,_,w,M,0)}function p(T,l,_,w,M){return c(null,T,l,_,w,M,1)}function d(T,l,_,w,M,E){return c(T,l,_,w,M,E,1)}H.exports={deg2rad:t,rad2deg:r,angleDelta:i,angleDist:n,isFullCircle:o,isAngleInsideSector:a,isPtInsideSector:s,pathArc:h,pathSector:p,pathAnnulus:d}}}),dE=Le({"src/lib/anchor_utils.js"(Z){"use strict";Z.isLeftAnchor=function(g){return g.xanchor==="left"||g.xanchor==="auto"&&g.x<=1/3},Z.isCenterAnchor=function(g){return g.xanchor==="center"||g.xanchor==="auto"&&g.x>1/3&&g.x<2/3},Z.isRightAnchor=function(g){return g.xanchor==="right"||g.xanchor==="auto"&&g.x>=2/3},Z.isTopAnchor=function(g){return g.yanchor==="top"||g.yanchor==="auto"&&g.y>=2/3},Z.isMiddleAnchor=function(g){return g.yanchor==="middle"||g.yanchor==="auto"&&g.y>1/3&&g.y<2/3},Z.isBottomAnchor=function(g){return g.yanchor==="bottom"||g.yanchor==="auto"&&g.y<=1/3}}}),vE=Le({"src/lib/geometry2d.js"(Z){"use strict";var H=Vu().mod;Z.segmentsIntersect=g;function g(t,r,o,i,n,a,s,c){var h=o-t,p=n-t,d=s-n,T=i-r,l=a-r,_=c-a,w=h*_-d*T;if(w===0)return null;var M=(p*_-d*l)/w,E=(p*T-h*l)/w;return E<0||E>1||M<0||M>1?null:{x:t+h*M,y:r+T*M}}Z.segmentDistance=function(r,o,i,n,a,s,c,h){if(g(r,o,i,n,a,s,c,h))return 0;var p=i-r,d=n-o,T=c-a,l=h-s,_=p*p+d*d,w=T*T+l*l,M=Math.min(x(p,d,_,a-r,s-o),x(p,d,_,c-r,h-o),x(T,l,w,r-a,o-s),x(T,l,w,i-a,n-s));return Math.sqrt(M)};function x(t,r,o,i,n){var a=i*t+n*r;if(a<0)return i*i+n*n;if(a>o){var s=i-t,c=n-r;return s*s+c*c}else{var h=i*r-n*t;return h*h/o}}var A,S,e;Z.getTextLocation=function(r,o,i,n){if((r!==S||n!==e)&&(A={},S=r,e=n),A[i])return A[i];var a=r.getPointAtLength(H(i-n/2,o)),s=r.getPointAtLength(H(i+n/2,o)),c=Math.atan((s.y-a.y)/(s.x-a.x)),h=r.getPointAtLength(H(i,o)),p=(h.x*4+a.x+s.x)/6,d=(h.y*4+a.y+s.y)/6,T={x:p,y:d,theta:c};return A[i]=T,T},Z.clearLocationCache=function(){S=null},Z.getVisibleSegment=function(r,o,i){var n=o.left,a=o.right,s=o.top,c=o.bottom,h=0,p=r.getTotalLength(),d=p,T,l;function _(M){var E=r.getPointAtLength(M);M===0?T=E:M===p&&(l=E);var m=E.x<n?n-E.x:E.x>a?E.x-a:0,b=E.y<s?s-E.y:E.y>c?E.y-c:0;return Math.sqrt(m*m+b*b)}for(var w=_(h);w;){if(h+=w+i,h>d)return;w=_(h)}for(w=_(d);w;){if(d-=w+i,h>d)return;w=_(d)}return{min:h,max:d,len:d-h,total:p,isClosed:h===0&&d===p&&Math.abs(T.x-l.x)<.1&&Math.abs(T.y-l.y)<.1}},Z.findPointOnPath=function(r,o,i,n){n=n||{};for(var a=n.pathLength||r.getTotalLength(),s=n.tolerance||.001,c=n.iterationLimit||30,h=r.getPointAtLength(0)[i]>r.getPointAtLength(a)[i]?-1:1,p=0,d=0,T=a,l,_,w;p<c;){if(l=(d+T)/2,_=r.getPointAtLength(l),w=_[i]-o,Math.abs(w)<s)return _;h*w>0?T=l:d=l,p++}return _}}}),y_=Le({"src/lib/throttle.js"(Z){"use strict";var H={};Z.throttle=function(A,S,e){var t=H[A],r=Date.now();if(!t){for(var o in H)H[o].ts<r-6e4&&delete H[o];t=H[A]={ts:0,timer:null}}g(t);function i(){e(),t.ts=Date.now(),t.onDone&&(t.onDone(),t.onDone=null)}if(r>t.ts+S){i();return}t.timer=setTimeout(function(){i(),t.timer=null},S)},Z.done=function(x){var A=H[x];return!A||!A.timer?Promise.resolve():new Promise(function(S){var e=A.onDone;A.onDone=function(){e&&e(),S(),A.onDone=null}})},Z.clear=function(x){if(x)g(H[x]),delete H[x];else for(var A in H)Z.clear(A)};function g(x){x&&x.timer!==null&&(clearTimeout(x.timer),x.timer=null)}}}),pE=Le({"src/lib/clear_responsive.js"(Z,H){"use strict";H.exports=function(x){x._responsiveChartHandler&&(window.removeEventListener("resize",x._responsiveChartHandler),delete x._responsiveChartHandler)}}}),mE=Le({"node_modules/is-mobile/index.js"(Z,H){"use strict";H.exports=S,H.exports.isMobile=S,H.exports.default=S;var g=/(android|bb\d+|meego).+mobile|armv7l|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series[46]0|samsungbrowser.*mobile|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i,x=/CrOS/,A=/android|ipad|playbook|silk/i;function S(e){e||(e={});let t=e.ua;if(!t&&typeof navigator<"u"&&(t=navigator.userAgent),t&&t.headers&&typeof t.headers["user-agent"]=="string"&&(t=t.headers["user-agent"]),typeof t!="string")return!1;let r=g.test(t)&&!x.test(t)||!!e.tablet&&A.test(t);return!r&&e.tablet&&e.featureDetect&&navigator&&navigator.maxTouchPoints>1&&t.indexOf("Macintosh")!==-1&&t.indexOf("Safari")!==-1&&(r=!0),r}}}),gE=Le({"src/lib/preserve_drawing_buffer.js"(Z,H){"use strict";var g=zn(),x=mE();H.exports=function(e){var t;if(e&&e.hasOwnProperty("userAgent")?t=e.userAgent:t=A(),typeof t!="string")return!0;var r=x({ua:{headers:{"user-agent":t}},tablet:!0,featureDetect:!1});if(!r)for(var o=t.split(" "),i=1;i<o.length;i++){var n=o[i];if(n.indexOf("Safari")!==-1)for(var a=i-1;a>-1;a--){var s=o[a];if(s.substr(0,8)==="Version/"){var c=s.substr(8).split(".")[0];if(g(c)&&(c=+c),c>=13)return!0}}}return r};function A(){var S;return typeof navigator<"u"&&(S=navigator.userAgent),S&&S.headers&&typeof S.headers["user-agent"]=="string"&&(S=S.headers["user-agent"]),S}}}),yE=Le({"src/lib/make_trace_groups.js"(Z,H){"use strict";var g=Ji();H.exports=function(A,S,e){var t=A.selectAll("g."+e.replace(/\s/g,".")).data(S,function(o){return o[0].trace.uid});t.exit().remove(),t.enter().append("g").attr("class",e),t.order();var r=A.classed("rangeplot")?"nodeRangePlot3":"node3";return t.each(function(o){o[0][r]=g.select(this)}),t}}}),_E=Le({"src/lib/localize.js"(Z,H){"use strict";var g=so();H.exports=function(A,S){for(var e=A._context.locale,t=0;t<2;t++){for(var r=A._context.locales,o=0;o<2;o++){var i=(r[e]||{}).dictionary;if(i){var n=i[S];if(n)return n}r=g.localeRegistry}var a=e.split("-")[0];if(a===e)break;e=a}return S}}}),Bw=Le({"src/lib/filter_unique.js"(Z,H){"use strict";H.exports=function(x){for(var A={},S=[],e=0,t=0;t<x.length;t++){var r=x[t];A[r]!==1&&(A[r]=1,S[e++]=r)}return S}}}),xE=Le({"src/lib/filter_visible.js"(Z,H){"use strict";H.exports=function(e){for(var t=A(e)?x:g,r=[],o=0;o<e.length;o++){var i=e[o];t(i)&&r.push(i)}return r};function g(S){return S.visible===!0}function x(S){var e=S[0].trace;return e.visible===!0&&e._length!==0}function A(S){return Array.isArray(S)&&Array.isArray(S[0])&&S[0][0]&&S[0][0].trace}}}),bE=Le({"src/lib/increment.js"(Z,H){"use strict";H.exports=function(x,A){if(!A)return x;var S=1/Math.abs(A),e=S>1?(S*x+S*A)/S:x+A,t=String(e).length;if(t>16){var r=String(A).length,o=String(x).length;if(t>=o+r){var i=parseFloat(e).toPrecision(12);i.indexOf("e+")===-1&&(e=+i)}}return e}}}),wE=Le({"src/lib/clean_number.js"(Z,H){"use strict";var g=zn(),x=$n().BADNUM,A=/^['"%,$#\s']+|[, ]|['"%,$#\s']+$/g;H.exports=function(e){return typeof e=="string"&&(e=e.replace(A,"")),g(e)?Number(e):x}}}),ni=Le({"src/lib/index.js"(Z,H){"use strict";var g=Ji(),x=Ia().utcFormat,A=To().format,S=zn(),e=$n(),t=e.FP_SAFE,r=-t,o=e.BADNUM,i=H.exports={};i.adjustFormat=function(ae){return!ae||/^\d[.]\df/.test(ae)||/[.]\d%/.test(ae)?ae:ae==="0.f"?"~f":/^\d%/.test(ae)?"~%":/^\ds/.test(ae)?"~s":!/^[~,.0$]/.test(ae)&&/[&fps]/.test(ae)?"~"+ae:ae};var n={};i.warnBadFormat=function(re){var ae=String(re);n[ae]||(n[ae]=1,i.warn('encountered bad format: "'+ae+'"'))},i.noFormat=function(re){return String(re)},i.numberFormat=function(re){var ae;try{ae=A(i.adjustFormat(re))}catch{return i.warnBadFormat(re),i.noFormat}return ae},i.nestedProperty=jl(),i.keyedContainer=lu(),i.relativeAttr=uf(),i.isPlainObject=$s(),i.toLogRange=ju(),i.relinkPrivateKeys=Tc();var a=cl();i.isArrayBuffer=a.isArrayBuffer,i.isTypedArray=a.isTypedArray,i.isArrayOrTypedArray=a.isArrayOrTypedArray,i.isArray1D=a.isArray1D,i.ensureArray=a.ensureArray,i.concat=a.concat,i.maxRowLength=a.maxRowLength,i.minRowLength=a.minRowLength;var s=Vu();i.mod=s.mod,i.modHalf=s.modHalf;var c=Ro();i.valObjectMeta=c.valObjectMeta,i.coerce=c.coerce,i.coerce2=c.coerce2,i.coerceFont=c.coerceFont,i.coercePattern=c.coercePattern,i.coerceHoverinfo=c.coerceHoverinfo,i.coerceSelectionMarkerOpacity=c.coerceSelectionMarkerOpacity,i.validate=c.validate;var h=cE();i.dateTime2ms=h.dateTime2ms,i.isDateTime=h.isDateTime,i.ms2DateTime=h.ms2DateTime,i.ms2DateTimeLocal=h.ms2DateTimeLocal,i.cleanDate=h.cleanDate,i.isJSDate=h.isJSDate,i.formatDate=h.formatDate,i.incrementMonth=h.incrementMonth,i.dateTick0=h.dateTick0,i.dfltRange=h.dfltRange,i.findExactDates=h.findExactDates,i.MIN_MS=h.MIN_MS,i.MAX_MS=h.MAX_MS;var p=g_();i.findBin=p.findBin,i.sorterAsc=p.sorterAsc,i.sorterDes=p.sorterDes,i.distinctVals=p.distinctVals,i.roundUp=p.roundUp,i.sort=p.sort,i.findIndexOfMin=p.findIndexOfMin,i.sortObjectKeys=Up();var d=fE();i.aggNums=d.aggNums,i.len=d.len,i.mean=d.mean,i.geometricMean=d.geometricMean,i.median=d.median,i.midRange=d.midRange,i.variance=d.variance,i.stdev=d.stdev,i.interp=d.interp;var T=v_();i.init2dArray=T.init2dArray,i.transposeRagged=T.transposeRagged,i.dot=T.dot,i.translationMatrix=T.translationMatrix,i.rotationMatrix=T.rotationMatrix,i.rotationXYMatrix=T.rotationXYMatrix,i.apply3DTransform=T.apply3DTransform,i.apply2DTransform=T.apply2DTransform,i.apply2DTransform2=T.apply2DTransform2,i.convertCssMatrix=T.convertCssMatrix,i.inverseTransformMatrix=T.inverseTransformMatrix;var l=hE();i.deg2rad=l.deg2rad,i.rad2deg=l.rad2deg,i.angleDelta=l.angleDelta,i.angleDist=l.angleDist,i.isFullCircle=l.isFullCircle,i.isAngleInsideSector=l.isAngleInsideSector,i.isPtInsideSector=l.isPtInsideSector,i.pathArc=l.pathArc,i.pathSector=l.pathSector,i.pathAnnulus=l.pathAnnulus;var _=dE();i.isLeftAnchor=_.isLeftAnchor,i.isCenterAnchor=_.isCenterAnchor,i.isRightAnchor=_.isRightAnchor,i.isTopAnchor=_.isTopAnchor,i.isMiddleAnchor=_.isMiddleAnchor,i.isBottomAnchor=_.isBottomAnchor;var w=vE();i.segmentsIntersect=w.segmentsIntersect,i.segmentDistance=w.segmentDistance,i.getTextLocation=w.getTextLocation,i.clearLocationCache=w.clearLocationCache,i.getVisibleSegment=w.getVisibleSegment,i.findPointOnPath=w.findPointOnPath;var M=ho();i.extendFlat=M.extendFlat,i.extendDeep=M.extendDeep,i.extendDeepAll=M.extendDeepAll,i.extendDeepNoArrays=M.extendDeepNoArrays;var E=ua();i.log=E.log,i.warn=E.warn,i.error=E.error;var m=no();i.counterRegex=m.counter;var b=y_();i.throttle=b.throttle,i.throttleDone=b.done,i.clearThrottle=b.clear;var v=iy();i.getGraphDiv=v.getGraphDiv,i.isPlotDiv=v.isPlotDiv,i.removeElement=v.removeElement,i.addStyleRule=v.addStyleRule,i.addRelatedStyleRule=v.addRelatedStyleRule,i.deleteRelatedStyleRule=v.deleteRelatedStyleRule,i.setStyleOnHover=v.setStyleOnHover,i.getFullTransformMatrix=v.getFullTransformMatrix,i.getElementTransformMatrix=v.getElementTransformMatrix,i.getElementAndAncestors=v.getElementAndAncestors,i.equalDomRects=v.equalDomRects,i.clearResponsive=pE(),i.preserveDrawingBuffer=gE(),i.makeTraceGroups=yE(),i._=_E(),i.notifier=ta(),i.filterUnique=Bw(),i.filterVisible=xE(),i.pushUnique=ms(),i.increment=bE(),i.cleanNumber=wE(),i.ensureNumber=function(ae){return S(ae)?(ae=Number(ae),ae>t||ae<r?o:ae):o},i.isIndex=function(re,ae){return ae!==void 0&&re>=ae?!1:S(re)&&re>=0&&re%1===0},i.noop=jo(),i.identity=ay(),i.repeat=function(re,ae){for(var j=new Array(ae),ee=0;ee<ae;ee++)j[ee]=re;return j},i.swapAttrs=function(re,ae,j,ee){j||(j="x"),ee||(ee="y");for(var ne=0;ne<ae.length;ne++){var ce=ae[ne],_e=i.nestedProperty(re,ce.replace("?",j)),we=i.nestedProperty(re,ce.replace("?",ee)),Oe=_e.get();_e.set(we.get()),we.set(Oe)}},i.raiseToTop=function(ae){ae.parentNode.appendChild(ae)},i.cancelTransition=function(re){return re.transition().duration(0)},i.constrain=function(re,ae,j){return ae>j?Math.max(j,Math.min(ae,re)):Math.max(ae,Math.min(j,re))},i.bBoxIntersect=function(re,ae,j){return j=j||0,re.left<=ae.right+j&&ae.left<=re.right+j&&re.top<=ae.bottom+j&&ae.top<=re.bottom+j},i.simpleMap=function(re,ae,j,ee,ne){for(var ce=re.length,_e=new Array(ce),we=0;we<ce;we++)_e[we]=ae(re[we],j,ee,ne);return _e},i.randstr=function re(ae,j,ee,ne){if(ee||(ee=16),j===void 0&&(j=24),j<=0)return"0";var ce=Math.log(Math.pow(2,j))/Math.log(ee),_e="",we,Oe,Ie;for(we=2;ce===1/0;we*=2)ce=Math.log(Math.pow(2,j/we))/Math.log(ee)*we;var Xe=ce-Math.floor(ce);for(we=0;we<Math.floor(ce);we++)Ie=Math.floor(Math.random()*ee).toString(ee),_e=Ie+_e;Xe&&(Oe=Math.pow(ee,Xe),Ie=Math.floor(Math.random()*Oe).toString(ee),_e=Ie+_e);var tt=parseInt(_e,ee);return ae&&ae[_e]||tt!==1/0&&tt>=Math.pow(2,j)?ne>10?(i.warn("randstr failed uniqueness"),_e):re(ae,j,ee,(ne||0)+1):_e},i.OptionControl=function(re,ae){re||(re={}),ae||(ae="opt");var j={};return j.optionList=[],j._newoption=function(ee){ee[ae]=re,j[ee.name]=ee,j.optionList.push(ee)},j["_"+ae]=re,j},i.smooth=function(re,ae){if(ae=Math.round(ae)||0,ae<2)return re;var j=re.length,ee=2*j,ne=2*ae-1,ce=new Array(ne),_e=new Array(j),we,Oe,Ie,Xe;for(we=0;we<ne;we++)ce[we]=(1-Math.cos(Math.PI*(we+1)/ae))/(2*ae);for(we=0;we<j;we++){for(Xe=0,Oe=0;Oe<ne;Oe++)Ie=we+Oe+1-ae,Ie<-j?Ie-=ee*Math.round(Ie/ee):Ie>=ee&&(Ie-=ee*Math.floor(Ie/ee)),Ie<0?Ie=-1-Ie:Ie>=j&&(Ie=ee-1-Ie),Xe+=re[Ie]*ce[Oe];_e[we]=Xe}return _e},i.syncOrAsync=function(re,ae,j){var ee,ne;function ce(){return i.syncOrAsync(re,ae,j)}for(;re.length;)if(ne=re.splice(0,1)[0],ee=ne(ae),ee&&ee.then)return ee.then(ce);return j&&j(ae)},i.stripTrailingSlash=function(re){return re.substr(-1)==="/"?re.substr(0,re.length-1):re},i.noneOrAll=function(re,ae,j){if(re){var ee=!1,ne=!0,ce,_e;for(ce=0;ce<j.length;ce++)_e=re[j[ce]],_e!=null?ee=!0:ne=!1;if(ee&&!ne)for(ce=0;ce<j.length;ce++)re[j[ce]]=ae[j[ce]]}},i.mergeArray=function(re,ae,j,ee){var ne=typeof ee=="function";if(i.isArrayOrTypedArray(re))for(var ce=Math.min(re.length,ae.length),_e=0;_e<ce;_e++){var we=re[_e];ae[_e][j]=ne?ee(we):we}},i.mergeArrayCastPositive=function(re,ae,j){return i.mergeArray(re,ae,j,function(ee){var ne=+ee;return isFinite(ne)&&ne>0?ne:0})},i.fillArray=function(re,ae,j,ee){if(ee=ee||i.identity,i.isArrayOrTypedArray(re))for(var ne=0;ne<ae.length;ne++)ae[ne][j]=ee(re[ne])},i.castOption=function(re,ae,j,ee){ee=ee||i.identity;var ne=i.nestedProperty(re,j).get();return i.isArrayOrTypedArray(ne)?Array.isArray(ae)&&i.isArrayOrTypedArray(ne[ae[0]])?ee(ne[ae[0]][ae[1]]):ee(ne[ae]):ne},i.extractOption=function(re,ae,j,ee){if(j in re)return re[j];var ne=i.nestedProperty(ae,ee).get();if(!Array.isArray(ne))return ne};function u(re){var ae={};for(var j in re)for(var ee=re[j],ne=0;ne<ee.length;ne++)ae[ee[ne]]=+j;return ae}i.tagSelected=function(re,ae,j){var ee=ae.selectedpoints,ne=ae._indexToPoints,ce;ne&&(ce=u(ne));function _e(tt){return tt!==void 0&&tt<re.length}for(var we=0;we<ee.length;we++){var Oe=ee[we];if(i.isIndex(Oe)||i.isArrayOrTypedArray(Oe)&&i.isIndex(Oe[0])&&i.isIndex(Oe[1])){var Ie=ce?ce[Oe]:Oe,Xe=j?j[Ie]:Ie;_e(Xe)&&(re[Xe].selected=1)}}},i.selIndices2selPoints=function(re){var ae=re.selectedpoints,j=re._indexToPoints;if(j){for(var ee=u(j),ne=[],ce=0;ce<ae.length;ce++){var _e=ae[ce];if(i.isIndex(_e)){var we=ee[_e];i.isIndex(we)&&ne.push(we)}}return ne}else return ae},i.getTargetArray=function(re,ae){var j=ae.target;if(typeof j=="string"&&j){var ee=i.nestedProperty(re,j).get();return i.isArrayOrTypedArray(ee)?ee:!1}else if(i.isArrayOrTypedArray(j))return j;return!1};function y(re,ae,j){var ee={};typeof ae!="object"&&(ae={});var ne=j==="pieLike"?-1:3,ce=Object.keys(re),_e,we,Oe;for(_e=0;_e<ce.length;_e++)we=ce[_e],Oe=re[we],!(we.charAt(0)==="_"||typeof Oe=="function")&&(we==="module"?ee[we]=Oe:Array.isArray(Oe)?we==="colorscale"||ne===-1?ee[we]=Oe.slice():ee[we]=Oe.slice(0,ne):i.isTypedArray(Oe)?ne===-1?ee[we]=Oe.subarray():ee[we]=Oe.subarray(0,ne):Oe&&typeof Oe=="object"?ee[we]=y(re[we],ae[we],j):ee[we]=Oe);for(ce=Object.keys(ae),_e=0;_e<ce.length;_e++)we=ce[_e],Oe=ae[we],(typeof Oe!="object"||!(we in ee)||typeof ee[we]!="object")&&(ee[we]=Oe);return ee}i.minExtend=y,i.titleCase=function(re){return re.charAt(0).toUpperCase()+re.substr(1)},i.containsAny=function(re,ae){for(var j=0;j<ae.length;j++)if(re.indexOf(ae[j])!==-1)return!0;return!1};var f=/Version\/[\d\.]+.*Safari/;i.isSafari=function(){return f.test(window.navigator.userAgent)};var P=/iPad|iPhone|iPod/;i.isIOS=function(){return P.test(window.navigator.userAgent)};var L=/Firefox\/(\d+)\.\d+/;i.getFirefoxVersion=function(){var re=L.exec(window.navigator.userAgent);if(re&&re.length===2){var ae=parseInt(re[1]);if(!isNaN(ae))return ae}return null},i.isD3Selection=function(re){return re instanceof g.selection},i.ensureSingle=function(re,ae,j,ee){var ne=re.select(ae+(j?"."+j:""));if(ne.size())return ne;var ce=re.append(ae);return j&&ce.classed(j,!0),ee&&ce.call(ee),ce},i.ensureSingleById=function(re,ae,j,ee){var ne=re.select(ae+"#"+j);if(ne.size())return ne;var ce=re.append(ae).attr("id",j);return ee&&ce.call(ee),ce},i.objectFromPath=function(re,ae){for(var j=re.split("."),ee,ne=ee={},ce=0;ce<j.length;ce++){var _e=j[ce],we=null,Oe=j[ce].match(/(.*)\[([0-9]+)\]/);Oe?(_e=Oe[1],we=Oe[2],ee=ee[_e]=[],ce===j.length-1?ee[we]=ae:ee[we]={},ee=ee[we]):(ce===j.length-1?ee[_e]=ae:ee[_e]={},ee=ee[_e])}return ne};var z=/^([^\[\.]+)\.(.+)?/,F=/^([^\.]+)\[([0-9]+)\](\.)?(.+)?/;function O(re){return re.slice(0,2)==="__"}i.expandObjectPaths=function(re){var ae,j,ee,ne,ce,_e,we;if(typeof re=="object"&&!Array.isArray(re)){for(j in re)if(re.hasOwnProperty(j))if(ae=j.match(z)){if(ne=re[j],ee=ae[1],O(ee))continue;delete re[j],re[ee]=i.extendDeepNoArrays(re[ee]||{},i.objectFromPath(j,i.expandObjectPaths(ne))[ee])}else if(ae=j.match(F)){if(ne=re[j],ee=ae[1],O(ee))continue;if(ce=parseInt(ae[2]),delete re[j],re[ee]=re[ee]||[],ae[3]===".")we=ae[4],_e=re[ee][ce]=re[ee][ce]||{},i.extendDeepNoArrays(_e,i.objectFromPath(we,i.expandObjectPaths(ne)));else{if(O(ee))continue;re[ee][ce]=i.expandObjectPaths(ne)}}else{if(O(j))continue;re[j]=i.expandObjectPaths(re[j])}}return re},i.numSeparate=function(re,ae,j){if(j||(j=!1),typeof ae!="string"||ae.length===0)throw new Error("Separator string required for formatting!");typeof re=="number"&&(re=String(re));var ee=/(\d+)(\d{3})/,ne=ae.charAt(0),ce=ae.charAt(1),_e=re.split("."),we=_e[0],Oe=_e.length>1?ne+_e[1]:"";if(ce&&(_e.length>1||we.length>4||j))for(;ee.test(we);)we=we.replace(ee,"$1"+ce+"$2");return we+Oe},i.TEMPLATE_STRING_REGEX=/%{([^\s%{}:]*)([:|\|][^}]*)?}/g;var B=/^\w*$/;i.templateString=function(re,ae){var j={};return re.replace(i.TEMPLATE_STRING_REGEX,function(ee,ne){var ce;return B.test(ne)?ce=ae[ne]:(j[ne]=j[ne]||i.nestedProperty(ae,ne).get,ce=j[ne](!0)),ce!==void 0?ce:""})};var I={max:10,count:0,name:"hovertemplate"};i.hovertemplateString=function(){return se.apply(I,arguments)};var N={max:10,count:0,name:"texttemplate"};i.texttemplateString=function(){return se.apply(N,arguments)};var U=/^(\S+)([\*\/])(-?\d+(\.\d+)?)$/;function W(re){var ae=re.match(U);return ae?{key:ae[1],op:ae[2],number:Number(ae[3])}:{key:re,op:null,number:null}}var Q={max:10,count:0,name:"texttemplate",parseMultDiv:!0};i.texttemplateStringForShapes=function(){return se.apply(Q,arguments)};var le=/^[:|\|]/;function se(re,ae,j){var ee=this,ne=arguments;return ae||(ae={}),re.replace(i.TEMPLATE_STRING_REGEX,function(ce,_e,we){var Oe=_e==="xother"||_e==="yother",Ie=_e==="_xother"||_e==="_yother",Xe=_e==="_xother_"||_e==="_yother_",tt=_e==="xother_"||_e==="yother_",rt=Oe||Ie||tt||Xe,Je=_e;(Ie||Xe)&&(Je=Je.substring(1)),(tt||Xe)&&(Je=Je.substring(0,Je.length-1));var ot=null,Me=null;if(ee.parseMultDiv){var pe=W(Je);Je=pe.key,ot=pe.op,Me=pe.number}var ue;if(rt){if(ue=ae[Je],ue===void 0)return""}else{var ze,Qe;for(Qe=3;Qe<ne.length;Qe++)if(ze=ne[Qe],!!ze){if(ze.hasOwnProperty(Je)){ue=ze[Je];break}if(B.test(Je)||(ue=i.nestedProperty(ze,Je).get(!0)),ue!==void 0)break}}if(ue!==void 0&&(ot==="*"&&(ue*=Me),ot==="/"&&(ue/=Me)),ue===void 0&&ee)return ee.count<ee.max&&(i.warn("Variable '"+Je+"' in "+ee.name+" could not be found!"),ue=ce),ee.count===ee.max&&i.warn("Too many "+ee.name+" warnings - additional warnings will be suppressed"),ee.count++,ce;if(we){var it;if(we[0]===":"&&(it=j?j.numberFormat:i.numberFormat,ue!==""&&(ue=it(we.replace(le,""))(ue))),we[0]==="|"){it=j?j.timeFormat:x;var $e=i.dateTime2ms(ue);ue=i.formatDate($e,we.replace(le,""),!1,it)}}else{var kt=Je+"Label";ae.hasOwnProperty(kt)&&(ue=ae[kt])}return rt&&(ue="("+ue+")",(Ie||Xe)&&(ue=" "+ue),(tt||Xe)&&(ue=ue+" ")),ue})}var fe=48,G=57;i.subplotSort=function(re,ae){for(var j=Math.min(re.length,ae.length)+1,ee=0,ne=0,ce=0;ce<j;ce++){var _e=re.charCodeAt(ce)||0,we=ae.charCodeAt(ce)||0,Oe=_e>=fe&&_e<=G,Ie=we>=fe&&we<=G;if(Oe&&(ee=10*ee+_e-fe),Ie&&(ne=10*ne+we-fe),!Oe||!Ie){if(ee!==ne)return ee-ne;if(_e!==we)return _e-we}}return ne-ee};var J=2e9;i.seedPseudoRandom=function(){J=2e9},i.pseudoRandom=function(){var re=J;return J=(69069*J+1)%4294967296,Math.abs(J-re)<429496729?i.pseudoRandom():J/4294967296},i.fillText=function(re,ae,j){var ee=Array.isArray(j)?function(_e){j.push(_e)}:function(_e){j.text=_e},ne=i.extractOption(re,ae,"htx","hovertext");if(i.isValidTextValue(ne))return ee(ne);var ce=i.extractOption(re,ae,"tx","text");if(i.isValidTextValue(ce))return ee(ce)},i.isValidTextValue=function(re){return re||re===0},i.formatPercent=function(re,ae){ae=ae||0;for(var j=(Math.round(100*re*Math.pow(10,ae))*Math.pow(.1,ae)).toFixed(ae)+"%",ee=0;ee<ae;ee++)j.indexOf(".")!==-1&&(j=j.replace("0%","%"),j=j.replace(".%","%"));return j},i.isHidden=function(re){var ae=window.getComputedStyle(re).display;return!ae||ae==="none"},i.strTranslate=function(re,ae){return re||ae?"translate("+re+","+ae+")":""},i.strRotate=function(re){return re?"rotate("+re+")":""},i.strScale=function(re){return re!==1?"scale("+re+")":""},i.getTextTransform=function(re){var ae=re.noCenter,j=re.textX,ee=re.textY,ne=re.targetX,ce=re.targetY,_e=re.anchorX||0,we=re.anchorY||0,Oe=re.rotate,Ie=re.scale;return Ie?Ie>1&&(Ie=1):Ie=0,i.strTranslate(ne-Ie*(j+_e),ce-Ie*(ee+we))+i.strScale(Ie)+(Oe?"rotate("+Oe+(ae?"":" "+j+" "+ee)+")":"")},i.setTransormAndDisplay=function(re,ae){re.attr("transform",i.getTextTransform(ae)),re.style("display",ae.scale?null:"none")},i.ensureUniformFontSize=function(re,ae){var j=i.extendFlat({},ae);return j.size=Math.max(ae.size,re._fullLayout.uniformtext.minsize||0),j},i.join2=function(re,ae,j){var ee=re.length;return ee>1?re.slice(0,-1).join(ae)+j+re[ee-1]:re.join(ae)},i.bigFont=function(re){return Math.round(1.2*re)};var $=i.getFirefoxVersion(),X=$!==null&&$<86;i.getPositionFromD3Event=function(){return X?[g.event.layerX,g.event.layerY]:[g.event.offsetX,g.event.offsetY]}}}),TE=Le({"build/plotcss.js"(){"use strict";var Z=ni(),H={"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 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(x in H)g=x.replace(/^,/," ,").replace(/X/g,".js-plotly-plot .plotly").replace(/Y/g,".plotly-notifier"),Z.addStyleRule(g,H[x]);var g,x}}),Ow=Le({"node_modules/is-browser/client.js"(Z,H){H.exports=!0}}),Nw=Le({"node_modules/has-hover/index.js"(Z,H){"use strict";var g=Ow(),x;typeof window.matchMedia=="function"?x=!window.matchMedia("(hover: none)").matches:x=g,H.exports=x}}),Om=Le({"node_modules/events/events.js"(Z,H){"use strict";var g=typeof Reflect=="object"?Reflect:null,x=g&&typeof g.apply=="function"?g.apply:function(E,m,b){return Function.prototype.apply.call(E,m,b)},A;g&&typeof g.ownKeys=="function"?A=g.ownKeys:Object.getOwnPropertySymbols?A=function(E){return Object.getOwnPropertyNames(E).concat(Object.getOwnPropertySymbols(E))}:A=function(E){return Object.getOwnPropertyNames(E)};function S(M){console&&console.warn&&console.warn(M)}var e=Number.isNaN||function(E){return E!==E};function t(){t.init.call(this)}H.exports=t,H.exports.once=l,t.EventEmitter=t,t.prototype._events=void 0,t.prototype._eventsCount=0,t.prototype._maxListeners=void 0;var r=10;function o(M){if(typeof M!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof M)}Object.defineProperty(t,"defaultMaxListeners",{enumerable:!0,get:function(){return r},set:function(M){if(typeof M!="number"||M<0||e(M))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+M+".");r=M}}),t.init=function(){(this._events===void 0||this._events===Object.getPrototypeOf(this)._events)&&(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},t.prototype.setMaxListeners=function(E){if(typeof E!="number"||E<0||e(E))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+E+".");return this._maxListeners=E,this};function i(M){return M._maxListeners===void 0?t.defaultMaxListeners:M._maxListeners}t.prototype.getMaxListeners=function(){return i(this)},t.prototype.emit=function(E){for(var m=[],b=1;b<arguments.length;b++)m.push(arguments[b]);var v=E==="error",u=this._events;if(u!==void 0)v=v&&u.error===void 0;else if(!v)return!1;if(v){var y;if(m.length>0&&(y=m[0]),y instanceof Error)throw y;var f=new Error("Unhandled error."+(y?" ("+y.message+")":""));throw f.context=y,f}var P=u[E];if(P===void 0)return!1;if(typeof P=="function")x(P,this,m);else for(var L=P.length,z=p(P,L),b=0;b<L;++b)x(z[b],this,m);return!0};function n(M,E,m,b){var v,u,y;if(o(m),u=M._events,u===void 0?(u=M._events=Object.create(null),M._eventsCount=0):(u.newListener!==void 0&&(M.emit("newListener",E,m.listener?m.listener:m),u=M._events),y=u[E]),y===void 0)y=u[E]=m,++M._eventsCount;else if(typeof y=="function"?y=u[E]=b?[m,y]:[y,m]:b?y.unshift(m):y.push(m),v=i(M),v>0&&y.length>v&&!y.warned){y.warned=!0;var f=new Error("Possible EventEmitter memory leak detected. "+y.length+" "+String(E)+" listeners added. Use emitter.setMaxListeners() to increase limit");f.name="MaxListenersExceededWarning",f.emitter=M,f.type=E,f.count=y.length,S(f)}return M}t.prototype.addListener=function(E,m){return n(this,E,m,!1)},t.prototype.on=t.prototype.addListener,t.prototype.prependListener=function(E,m){return n(this,E,m,!0)};function a(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length===0?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function s(M,E,m){var b={fired:!1,wrapFn:void 0,target:M,type:E,listener:m},v=a.bind(b);return v.listener=m,b.wrapFn=v,v}t.prototype.once=function(E,m){return o(m),this.on(E,s(this,E,m)),this},t.prototype.prependOnceListener=function(E,m){return o(m),this.prependListener(E,s(this,E,m)),this},t.prototype.removeListener=function(E,m){var b,v,u,y,f;if(o(m),v=this._events,v===void 0)return this;if(b=v[E],b===void 0)return this;if(b===m||b.listener===m)--this._eventsCount===0?this._events=Object.create(null):(delete v[E],v.removeListener&&this.emit("removeListener",E,b.listener||m));else if(typeof b!="function"){for(u=-1,y=b.length-1;y>=0;y--)if(b[y]===m||b[y].listener===m){f=b[y].listener,u=y;break}if(u<0)return this;u===0?b.shift():d(b,u),b.length===1&&(v[E]=b[0]),v.removeListener!==void 0&&this.emit("removeListener",E,f||m)}return this},t.prototype.off=t.prototype.removeListener,t.prototype.removeAllListeners=function(E){var m,b,v;if(b=this._events,b===void 0)return this;if(b.removeListener===void 0)return arguments.length===0?(this._events=Object.create(null),this._eventsCount=0):b[E]!==void 0&&(--this._eventsCount===0?this._events=Object.create(null):delete b[E]),this;if(arguments.length===0){var u=Object.keys(b),y;for(v=0;v<u.length;++v)y=u[v],y!=="removeListener"&&this.removeAllListeners(y);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if(m=b[E],typeof m=="function")this.removeListener(E,m);else if(m!==void 0)for(v=m.length-1;v>=0;v--)this.removeListener(E,m[v]);return this};function c(M,E,m){var b=M._events;if(b===void 0)return[];var v=b[E];return v===void 0?[]:typeof v=="function"?m?[v.listener||v]:[v]:m?T(v):p(v,v.length)}t.prototype.listeners=function(E){return c(this,E,!0)},t.prototype.rawListeners=function(E){return c(this,E,!1)},t.listenerCount=function(M,E){return typeof M.listenerCount=="function"?M.listenerCount(E):h.call(M,E)},t.prototype.listenerCount=h;function h(M){var E=this._events;if(E!==void 0){var m=E[M];if(typeof m=="function")return 1;if(m!==void 0)return m.length}return 0}t.prototype.eventNames=function(){return this._eventsCount>0?A(this._events):[]};function p(M,E){for(var m=new Array(E),b=0;b<E;++b)m[b]=M[b];return m}function d(M,E){for(;E+1<M.length;E++)M[E]=M[E+1];M.pop()}function T(M){for(var E=new Array(M.length),m=0;m<E.length;++m)E[m]=M[m].listener||M[m];return E}function l(M,E){return new Promise(function(m,b){function v(y){M.removeListener(E,u),b(y)}function u(){typeof M.removeListener=="function"&&M.removeListener("error",v),m([].slice.call(arguments))}w(M,E,u,{once:!0}),E!=="error"&&_(M,v,{once:!0})})}function _(M,E,m){typeof M.on=="function"&&w(M,"error",E,m)}function w(M,E,m,b){if(typeof M.on=="function")b.once?M.once(E,m):M.on(E,m);else if(typeof M.addEventListener=="function")M.addEventListener(E,function v(u){b.once&&M.removeEventListener(E,v),m(u)});else throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof M)}}}),Wg=Le({"src/lib/events.js"(Z,H){"use strict";var g=Om().EventEmitter,x={init:function(A){if(A._ev instanceof g)return A;var S=new g,e=new g;return A._ev=S,A._internalEv=e,A.on=S.on.bind(S),A.once=S.once.bind(S),A.removeListener=S.removeListener.bind(S),A.removeAllListeners=S.removeAllListeners.bind(S),A._internalOn=e.on.bind(e),A._internalOnce=e.once.bind(e),A._removeInternalListener=e.removeListener.bind(e),A._removeAllInternalListeners=e.removeAllListeners.bind(e),A.emit=function(t,r){S.emit(t,r),e.emit(t,r)},A},triggerHandler:function(A,S,e){var t,r=A._ev;if(!r)return;var o=r._events[S];if(!o)return;function i(a){if(a.listener){if(r.removeListener(S,a.listener),!a.fired)return a.fired=!0,a.listener.apply(r,[e])}else return a.apply(r,[e])}o=Array.isArray(o)?o:[o];var n;for(n=0;n<o.length-1;n++)i(o[n]);return t=i(o[n]),t},purge:function(A){return delete A._ev,delete A.on,delete A.once,delete A.removeListener,delete A.removeAllListeners,delete A.emit,delete A._ev,delete A._internalEv,delete A._internalOn,delete A._internalOnce,delete A._removeInternalListener,delete A._removeAllInternalListeners,A}};H.exports=x}}),AE=Le({"src/lib/queue.js"(Z,H){"use strict";var g=ni(),x=Qn().dfltConfig;function A(e,t){for(var r=[],o,i=0;i<t.length;i++)o=t[i],o===e?r[i]=o:typeof o=="object"?r[i]=Array.isArray(o)?g.extendDeep([],o):g.extendDeepAll({},o):r[i]=o;return r}var S={};S.add=function(e,t,r,o,i){var n,a;if(e.undoQueue=e.undoQueue||{index:0,queue:[],sequence:!1},a=e.undoQueue.index,e.autoplay){e.undoQueue.inSequence||(e.autoplay=!1);return}!e.undoQueue.sequence||e.undoQueue.beginSequence?(n={undo:{calls:[],args:[]},redo:{calls:[],args:[]}},e.undoQueue.queue.splice(a,e.undoQueue.queue.length-a,n),e.undoQueue.index+=1):n=e.undoQueue.queue[a-1],e.undoQueue.beginSequence=!1,n&&(n.undo.calls.unshift(t),n.undo.args.unshift(r),n.redo.calls.push(o),n.redo.args.push(i)),e.undoQueue.queue.length>x.queueLength&&(e.undoQueue.queue.shift(),e.undoQueue.index--)},S.startSequence=function(e){e.undoQueue=e.undoQueue||{index:0,queue:[],sequence:!1},e.undoQueue.sequence=!0,e.undoQueue.beginSequence=!0},S.stopSequence=function(e){e.undoQueue=e.undoQueue||{index:0,queue:[],sequence:!1},e.undoQueue.sequence=!1,e.undoQueue.beginSequence=!1},S.undo=function(t){var r,o;if(!(t.undoQueue===void 0||isNaN(t.undoQueue.index)||t.undoQueue.index<=0)){for(t.undoQueue.index--,r=t.undoQueue.queue[t.undoQueue.index],t.undoQueue.inSequence=!0,o=0;o<r.undo.calls.length;o++)S.plotDo(t,r.undo.calls[o],r.undo.args[o]);t.undoQueue.inSequence=!1,t.autoplay=!1}},S.redo=function(t){var r,o;if(!(t.undoQueue===void 0||isNaN(t.undoQueue.index)||t.undoQueue.index>=t.undoQueue.queue.length)){for(r=t.undoQueue.queue[t.undoQueue.index],t.undoQueue.inSequence=!0,o=0;o<r.redo.calls.length;o++)S.plotDo(t,r.redo.calls[o],r.redo.args[o]);t.undoQueue.inSequence=!1,t.autoplay=!1,t.undoQueue.index++}},S.plotDo=function(e,t,r){e.autoplay=!0,r=A(e,r),t.apply(null,r)},H.exports=S}}),Uw=Le({"src/plots/frame_attributes.js"(Z,H){"use strict";H.exports={_isLinkedToArray:"frames_entry",group:{valType:"string"},name:{valType:"string"},traces:{valType:"any"},baseframe:{valType:"string"},data:{valType:"any"},layout:{valType:"any"}}}}),Xg=Le({"src/plot_api/plot_schema.js"(Z){"use strict";var H=so(),g=ni(),x=Sl(),A=Gg(),S=Uw(),e=ny(),t=Qn().configAttributes,r=qu(),o=g.extendDeepAll,i=g.isPlainObject,n=g.isArrayOrTypedArray,a=g.nestedProperty,s=g.valObjectMeta,c="_isSubplotObj",h="_isLinkedToArray",p="_arrayAttrRegexps",d="_deprecated",T=[c,h,p,d];Z.IS_SUBPLOT_OBJ=c,Z.IS_LINKED_TO_ARRAY=h,Z.DEPRECATED=d,Z.UNDERSCORE_ATTRS=T,Z.get=function(){var L={};return H.allTypes.forEach(function(z){L[z]=M(z)}),{defs:{valObjects:s,metaKeys:T.concat(["description","role","editType","impliedEdits"]),editType:{traces:r.traces,layout:r.layout},impliedEdits:{}},traces:L,layout:E(),frames:m(),animation:b(e),config:b(t)}},Z.crawl=function(L,z,F,O){var B=F||0;O=O||"",Object.keys(L).forEach(function(I){var N=L[I];if(T.indexOf(I)===-1){var U=(O?O+".":"")+I;z(N,I,L,B,U),!Z.isValObject(N)&&i(N)&&I!=="impliedEdits"&&Z.crawl(N,z,B+1,U)}})},Z.isValObject=function(L){return L&&L.valType!==void 0},Z.findArrayAttributes=function(L){var z=[],F=[],O=[],B,I;function N(W,Q,le,se){F=F.slice(0,se).concat([Q]),O=O.slice(0,se).concat([W&&W._isLinkedToArray]);var fe=W&&(W.valType==="data_array"||W.arrayOk===!0)&&!(F[se-1]==="colorbar"&&(Q==="ticktext"||Q==="tickvals"));fe&&U(B,0,"")}function U(W,Q,le){var se=W[F[Q]],fe=le+F[Q];if(Q===F.length-1)n(se)&&z.push(I+fe);else if(O[Q]){if(Array.isArray(se))for(var G=0;G<se.length;G++)i(se[G])&&U(se[G],Q+1,fe+"["+G+"].")}else i(se)&&U(se,Q+1,fe+".")}return B=L,I="",Z.crawl(x,N),L._module&&L._module.attributes&&Z.crawl(L._module.attributes,N),z},Z.getTraceValObject=function(L,z){var F=z[0],O=1,B,I,N=L._module;if(N||(N=(H.modules[L.type||x.type.dflt]||{})._module),!N)return!1;if(B=N.attributes,I=B&&B[F],!I){var U=N.basePlotModule;U&&U.attributes&&(I=U.attributes[F])}return I||(I=x[F]),_(I,z,O)},Z.getLayoutValObject=function(L,z){var F=l(L,z[0]);return _(F,z,1)};function l(L,z){var F,O,B,I,N=L._basePlotModules;if(N){var U;for(F=0;F<N.length;F++){if(B=N[F],B.attrRegex&&B.attrRegex.test(z)){if(B.layoutAttrOverrides)return B.layoutAttrOverrides;!U&&B.layoutAttributes&&(U=B.layoutAttributes)}var W=B.baseLayoutAttrOverrides;if(W&&z in W)return W[z]}if(U)return U}var Q=L._modules;if(Q){for(F=0;F<Q.length;F++)if(I=Q[F].layoutAttributes,I&&z in I)return I[z]}for(O in H.componentsRegistry){if(B=H.componentsRegistry[O],B.name==="colorscale"&&z.indexOf("coloraxis")===0)return B.layoutAttributes[z];if(!B.schema&&z===B.name)return B.layoutAttributes}return z in A?A[z]:!1}function _(L,z,F){if(!L)return!1;if(L._isLinkedToArray){if(w(z[F]))F++;else if(F<z.length)return!1}for(;F<z.length;F++){var O=L[z[F]];if(i(O))L=O;else break;if(F===z.length-1)break;if(L._isLinkedToArray){if(F++,!w(z[F]))return!1}else if(L.valType==="info_array"){F++;var B=z[F];if(!w(B))return!1;var I=L.items;if(Array.isArray(I)){if(B>=I.length)return!1;if(L.dimensions===2){if(F++,z.length===F)return L;var N=z[F];if(!w(N))return!1;L=I[B][N]}else L=I[B]}else L=I}}return L}function w(L){return L===Math.round(L)&&L>=0}function M(L){var z,F;z=H.modules[L]._module,F=z.basePlotModule;var O={};O.type=null;var B=o({},x),I=o({},z.attributes);Z.crawl(I,function(W,Q,le,se,fe){a(B,fe).set(void 0),W===void 0&&a(I,fe).set(void 0)}),o(O,B),H.traceIs(L,"noOpacity")&&delete O.opacity,H.traceIs(L,"showLegend")||(delete O.showlegend,delete O.legendgroup),H.traceIs(L,"noHover")&&(delete O.hoverinfo,delete O.hoverlabel),z.selectPoints||delete O.selectedpoints,o(O,I),F.attributes&&o(O,F.attributes),O.type=L;var N={meta:z.meta||{},categories:z.categories||{},animatable:!!z.animatable,type:L,attributes:b(O)};if(z.layoutAttributes){var U={};o(U,z.layoutAttributes),N.layoutAttributes=b(U)}return z.animatable||Z.crawl(N,function(W){Z.isValObject(W)&&"anim"in W&&delete W.anim}),N}function E(){var L={},z,F;o(L,A);for(z in H.subplotsRegistry)if(F=H.subplotsRegistry[z],!!F.layoutAttributes)if(Array.isArray(F.attr))for(var O=0;O<F.attr.length;O++)f(L,F,F.attr[O]);else{var B=F.attr==="subplot"?F.name:F.attr;f(L,F,B)}for(z in H.componentsRegistry){F=H.componentsRegistry[z];var I=F.schema;if(I&&(I.subplots||I.layout)){var N=I.subplots;if(N&&N.xaxis&&!N.yaxis)for(var U in N.xaxis)delete L.yaxis[U];delete L.xaxis.shift,delete L.xaxis.autoshift}else F.name==="colorscale"?o(L,F.layoutAttributes):F.layoutAttributes&&P(L,F.layoutAttributes,F.name)}return{layoutAttributes:b(L)}}function m(){var L={frames:o({},S)};return b(L),L.frames}function b(L){return v(L),u(L),y(L),L}function v(L){function z(O){return{valType:"string",editType:"none"}}function F(O,B,I){Z.isValObject(O)?(O.arrayOk===!0||O.valType==="data_array")&&(I[B+"src"]=z(B)):i(O)&&(O.role="object")}Z.crawl(L,F)}function u(L){function z(F,O,B){if(F){var I=F[h];I&&(delete F[h],B[O]={items:{}},B[O].items[I]=F,B[O].role="object")}}Z.crawl(L,z)}function y(L){function z(F){for(var O in F)if(i(F[O]))z(F[O]);else if(Array.isArray(F[O]))for(var B=0;B<F[O].length;B++)z(F[O][B]);else F[O]instanceof RegExp&&(F[O]=F[O].toString())}z(L)}function f(L,z,F){var O=a(L,F),B=o({},z.layoutAttributes);B[c]=!0,O.set(B)}function P(L,z,F){var O=a(L,F);O.set(o(O.get()||{},z))}}}),wl=Le({"src/plot_api/plot_template.js"(Z){"use strict";var H=ni(),g=Sl(),x="templateitemname",A={name:{valType:"string",editType:"none"}};A[x]={valType:"string",editType:"calc"},Z.templatedArray=function(t,r){return r._isLinkedToArray=t,r.name=A.name,r[x]=A[x],r},Z.traceTemplater=function(t){var r={},o,i;for(o in t)i=t[o],Array.isArray(i)&&i.length&&(r[o]=0);function n(a){o=H.coerce(a,{},g,"type");var s={type:o,_template:null};if(o in r){i=t[o];var c=r[o]%i.length;r[o]++,s._template=i[c]}return s}return{newTrace:n}},Z.newContainer=function(t,r,o){var i=t._template,n=i&&(i[r]||o&&i[o]);H.isPlainObject(n)||(n=null);var a=t[r]={_template:n};return a},Z.arrayTemplater=function(t,r,o){var i=t._template,n=i&&i[e(r)],a=i&&i[r];(!Array.isArray(a)||!a.length)&&(a=[]);var s={};function c(p){var d={name:p.name,_input:p},T=d[x]=p[x];if(!S(T))return d._template=n,d;for(var l=0;l<a.length;l++){var _=a[l];if(_.name===T)return s[T]=1,d._template=_,d}return d[o]=p[o]||!1,d._template=!1,d}function h(){for(var p=[],d=0;d<a.length;d++){var T=a[d],l=T.name;if(S(l)&&!s[l]){var _={_template:T,name:l,_input:{_templateitemname:l}};_[x]=T[x],p.push(_),s[l]=1}}return p}return{newItem:c,defaultItems:h}};function S(t){return t&&typeof t=="string"}function e(t){var r=t.length-1;return t.charAt(r)!=="s"&&H.warn("bad argument to arrayDefaultKey: "+t),t.substr(0,t.length-1)+"defaults"}Z.arrayDefaultKey=e,Z.arrayEditor=function(t,r,o){var i=(H.nestedProperty(t,r).get()||[]).length,n=o._index,a=n>=i&&(o._input||{})._templateitemname;a&&(n=i);var s=r+"["+n+"]",c;function h(){c={},a&&(c[s]={},c[s][x]=a)}h();function p(_,w){c[_]=w}function d(_,w){a?H.nestedProperty(c[s],_).set(w):c[s+"."+_]=w}function T(){var _=c;return h(),_}function l(_,w){_&&d(_,w);var M=T();for(var E in M)H.nestedProperty(t,E).set(M[E])}return{modifyBase:p,modifyItem:d,getUpdateObj:T,applyUpdate:l}}}}),ch=Le({"src/plots/cartesian/constants.js"(Z,H){"use strict";var g=no().counter;H.exports={idRegex:{x:g("x","( domain)?"),y:g("y","( domain)?")},attrRegex:g("[xy]axis"),xAxisMatch:g("xaxis"),yAxisMatch:g("yaxis"),AX_ID_PATTERN:/^[xyz][0-9]*( domain)?$/,AX_NAME_PATTERN:/^[xyz]axis[0-9]*$/,SUBPLOT_PATTERN:/^x([0-9]*)y([0-9]*)$/,HOUR_PATTERN:"hour",WEEKDAY_PATTERN:"day of week",MINDRAG:8,MINZOOM:20,DRAGGERSIZE:20,REDRAWDELAY:50,DFLTRANGEX:[-1,6],DFLTRANGEY:[-1,4],traceLayerClasses:["imagelayer","heatmaplayer","contourcarpetlayer","contourlayer","funnellayer","waterfalllayer","barlayer","carpetlayer","violinlayer","boxlayer","ohlclayer","scattercarpetlayer","scatterlayer"],clipOnAxisFalseQuery:[".scatterlayer",".barlayer",".funnellayer",".waterfalllayer"],layerValue2layerClass:{"above traces":"above","below traces":"below"},zindexSeparator:"z"}}}),Kc=Le({"src/plots/cartesian/axis_ids.js"(Z){"use strict";var H=so(),g=ch();Z.id2name=function(S){if(!(typeof S!="string"||!S.match(g.AX_ID_PATTERN))){var e=S.split(" ")[0].substr(1);return e==="1"&&(e=""),S.charAt(0)+"axis"+e}},Z.name2id=function(S){if(S.match(g.AX_NAME_PATTERN)){var e=S.substr(5);return e==="1"&&(e=""),S.charAt(0)+e}},Z.cleanId=function(S,e,t){var r=/( domain)$/.test(S);if(!(typeof S!="string"||!S.match(g.AX_ID_PATTERN))&&!(e&&S.charAt(0)!==e)&&!(r&&!t)){var o=S.split(" ")[0].substr(1).replace(/^0+/,"");return o==="1"&&(o=""),S.charAt(0)+o+(r&&t?" domain":"")}},Z.list=function(A,S,e){var t=A._fullLayout;if(!t)return[];var r=Z.listIds(A,S),o=new Array(r.length),i;for(i=0;i<r.length;i++){var n=r[i];o[i]=t[n.charAt(0)+"axis"+n.substr(1)]}if(!e){var a=t._subplots.gl3d||[];for(i=0;i<a.length;i++){var s=t[a[i]];S?o.push(s[S+"axis"]):o.push(s.xaxis,s.yaxis,s.zaxis)}}return o},Z.listIds=function(A,S){var e=A._fullLayout;if(!e)return[];var t=e._subplots;return S?t[S+"axis"]:t.xaxis.concat(t.yaxis)},Z.getFromId=function(A,S,e){var t=A._fullLayout;return S=S===void 0||typeof S!="string"?S:S.replace(" domain",""),e==="x"?S=S.replace(/y[0-9]*/,""):e==="y"&&(S=S.replace(/x[0-9]*/,"")),t[Z.id2name(S)]},Z.getFromTrace=function(A,S,e){var t=A._fullLayout,r=null;if(H.traceIs(S,"gl3d")){var o=S.scene;o.substr(0,5)==="scene"&&(r=t[o][e+"axis"])}else r=Z.getFromId(A,S[e+"axis"]||e);return r},Z.idSort=function(A,S){var e=A.charAt(0),t=S.charAt(0);return e!==t?e>t?1:-1:+(A.substr(1)||1)-+(S.substr(1)||1)},Z.ref2id=function(A){return/^[xyz]/.test(A)?A.split(" ")[0]:!1};function x(A,S){if(S&&S.length){for(var e=0;e<S.length;e++)if(S[e][A])return!0}return!1}Z.isLinked=function(A,S){return x(S,A._axisMatchGroups)||x(S,A._axisConstraintGroups)}}}),jp=Le({"src/components/shapes/handle_outline.js"(Z,H){"use strict";function g(A){var S=A._fullLayout._zoomlayer;S&&S.selectAll(".outline-controllers").remove()}function x(A){var S=A._fullLayout._zoomlayer;S&&S.selectAll(".select-outline").remove(),A._fullLayout._outlining=!1}H.exports={clearOutlineControllers:g,clearOutline:x}}}),__=Le({"src/traces/scatter/layout_attributes.js"(Z,H){"use strict";H.exports={scattermode:{valType:"enumerated",values:["group","overlay"],dflt:"overlay",editType:"calc"},scattergap:{valType:"number",min:0,max:1,editType:"calc"}}}}),Mh=Le({"src/plots/get_data.js"(Z){"use strict";var H=so(),g=ch().SUBPLOT_PATTERN;Z.getSubplotCalcData=function(x,A,S){var e=H.subplotsRegistry[A];if(!e)return[];for(var t=e.attr,r=[],o=0;o<x.length;o++){var i=x[o],n=i[0].trace;n[t]===S&&r.push(i)}return r},Z.getModuleCalcData=function(x,A,S){var e=[],t=[],r;if(typeof A=="string"?r=H.getModule(A).plot:typeof A=="function"?r=A:r=A.plot,!r)return[e,x];for(var o=S,i=0;i<x.length;i++){var n=x[i],a=n[0].trace,s=a.zorder!==void 0;a.visible!==!0||a._length===0||(a._module&&a._module.plot===r&&(!s||a.zorder===o)?e.push(n):t.push(n))}return[e,t]},Z.getSubplotData=function(A,S,e){if(!H.subplotsRegistry[S])return[];for(var t=H.subplotsRegistry[S].attr,r=[],o,i,n,a=0;a<A.length;a++)o=A[a],o[t]===e&&r.push(o);return r}}}),ME=Le({"src/plots/command.js"(Z){"use strict";var H=so(),g=ni();Z.manageCommandObserver=function(r,o,i,n){var a={},s=!0;o&&o._commandObserver&&(a=o._commandObserver),a.cache||(a.cache={}),a.lookupTable={};var c=Z.hasSimpleAPICommandBindings(r,i,a.lookupTable);if(o&&o._commandObserver){if(c)return a;if(o._commandObserver.remove)return o._commandObserver.remove(),o._commandObserver=null,a}if(c){x(r,c,a.cache),a.check=function(){if(s){var T=x(r,c,a.cache);return T.changed&&n&&a.lookupTable[T.value]!==void 0&&(a.disable(),Promise.resolve(n({value:T.value,type:c.type,prop:c.prop,traces:c.traces,index:a.lookupTable[T.value]})).then(a.enable,a.enable)),T.changed}};for(var h=["plotly_relayout","plotly_redraw","plotly_restyle","plotly_update","plotly_animatingframe","plotly_afterplot"],p=0;p<h.length;p++)r._internalOn(h[p],a.check);a.remove=function(){for(var d=0;d<h.length;d++)r._removeInternalListener(h[d],a.check)}}else g.log("Unable to automatically bind plot updates to API command"),a.lookupTable={},a.remove=function(){};return a.disable=function(){s=!1},a.enable=function(){s=!0},o&&(o._commandObserver=a),a},Z.hasSimpleAPICommandBindings=function(r,o,i){var n,a=o.length,s;for(n=0;n<a;n++){var c,h=o[n],p=h.method,d=h.args;if(Array.isArray(d)||(d=[]),!p)return!1;var T=Z.computeAPICommandBindings(r,p,d);if(T.length!==1)return!1;if(!s)s=T[0],Array.isArray(s.traces)&&s.traces.sort();else{if(c=T[0],c.type!==s.type||c.prop!==s.prop)return!1;if(Array.isArray(s.traces))if(Array.isArray(c.traces)){c.traces.sort();for(var l=0;l<s.traces.length;l++)if(s.traces[l]!==c.traces[l])return!1}else return!1;else if(c.prop!==s.prop)return!1}c=T[0];var _=c.value;if(Array.isArray(_))if(_.length===1)_=_[0];else return!1;i&&(i[_]=n)}return s};function x(r,o,i){var n,a,s,c=!1;if(o.type==="data")n=r._fullData[o.traces!==null?o.traces[0]:0];else if(o.type==="layout")n=r._fullLayout;else return!1;return a=g.nestedProperty(n,o.prop).get(),s=i[o.type]=i[o.type]||{},s.hasOwnProperty(o.prop)&&s[o.prop]!==a&&(c=!0),s[o.prop]=a,{changed:c,value:a}}Z.executeAPICommand=function(r,o,i){if(o==="skip")return Promise.resolve();var n=H.apiMethodRegistry[o],a=[r];Array.isArray(i)||(i=[]);for(var s=0;s<i.length;s++)a.push(i[s]);return n.apply(null,a).catch(function(c){return g.warn("API call to Plotly."+o+" rejected.",c),Promise.reject(c)})},Z.computeAPICommandBindings=function(r,o,i){var n;switch(Array.isArray(i)||(i=[]),o){case"restyle":n=e(r,i);break;case"relayout":n=S(r,i);break;case"update":n=e(r,[i[0],i[2]]).concat(S(r,[i[1]]));break;case"animate":n=A(r,i);break;default:n=[]}return n};function A(r,o){return Array.isArray(o[0])&&o[0].length===1&&["string","number"].indexOf(typeof o[0][0])!==-1?[{type:"layout",prop:"_currentFrame",value:o[0][0].toString()}]:[]}function S(r,o){var i=[],n=o[0],a={};if(typeof n=="string")a[n]=o[1];else if(g.isPlainObject(n))a=n;else return i;return t(a,function(s,c,h){i.push({type:"layout",prop:s,value:h})},"",0),i}function e(r,o){var i,n,a,s,c=[];if(n=o[0],a=o[1],i=o[2],s={},typeof n=="string")s[n]=a;else if(g.isPlainObject(n))s=n,i===void 0&&(i=a);else return c;return i===void 0&&(i=null),t(s,function(h,p,d){var T,l;if(Array.isArray(d)){l=d.slice();var _=Math.min(l.length,r.data.length);i&&(_=Math.min(_,i.length)),T=[];for(var w=0;w<_;w++)T[w]=i?i[w]:w}else l=d,T=i?i.slice():null;if(T===null)Array.isArray(l)&&(l=l[0]);else if(Array.isArray(T)){if(!Array.isArray(l)){var M=l;l=[];for(var E=0;E<T.length;E++)l[E]=M}l.length=Math.min(T.length,l.length)}c.push({type:"data",prop:h,traces:T,value:l})},"",0),c}function t(r,o,i,n){Object.keys(r).forEach(function(a){var s=r[a];if(a[0]!=="_"){var c=i+(n>0?".":"")+a;g.isPlainObject(s)?t(s,o,c,n+1):o(c,a,s)}})}}}),Ku=Le({"src/plots/plots.js"(Z,H){"use strict";var g=Ji(),x=Ia().timeFormatLocale,A=To().formatLocale,S=zn(),e=Ao(),t=so(),r=Xg(),o=wl(),i=ni(),n=$a(),a=$n().BADNUM,s=Kc(),c=jp().clearOutline,h=__(),p=ny(),d=Uw(),T=Mh().getModuleCalcData,l=i.relinkPrivateKeys,_=i._,w=H.exports={};i.extendFlat(w,t),w.attributes=Sl(),w.attributes.type.values=w.allTypes,w.fontAttrs=bl(),w.layoutAttributes=Gg();var M=ME();w.executeAPICommand=M.executeAPICommand,w.computeAPICommandBindings=M.computeAPICommandBindings,w.manageCommandObserver=M.manageCommandObserver,w.hasSimpleAPICommandBindings=M.hasSimpleAPICommandBindings,w.redrawText=function(G){return G=i.getGraphDiv(G),new Promise(function(J){setTimeout(function(){G._fullLayout&&(t.getComponentMethod("annotations","draw")(G),t.getComponentMethod("legend","draw")(G),t.getComponentMethod("colorbar","draw")(G),J(w.previousPromises(G)))},300)})},w.resize=function(G){G=i.getGraphDiv(G);var J,$=new Promise(function(X,re){(!G||i.isHidden(G))&&re(new Error("Resize must be passed a displayed plot div element.")),G._redrawTimer&&clearTimeout(G._redrawTimer),G._resolveResize&&(J=G._resolveResize),G._resolveResize=X,G._redrawTimer=setTimeout(function(){if(!G.layout||G.layout.width&&G.layout.height||i.isHidden(G)){X(G);return}delete G.layout.width,delete G.layout.height;var ae=G.changed;G.autoplay=!0,t.call("relayout",G,{autosize:!0}).then(function(){G.changed=ae,G._resolveResize===X&&(delete G._resolveResize,X(G))})},100)});return J&&J($),$},w.previousPromises=function(G){if((G._promises||[]).length)return Promise.all(G._promises).then(function(){G._promises=[]})},w.addLinks=function(G){if(!(!G._context.showLink&&!G._context.showSources)){var J=G._fullLayout,$=i.ensureSingle(J._paper,"text","js-plot-link-container",function(ne){ne.style({"font-family":'"Open Sans", Arial, sans-serif',"font-size":"12px",fill:n.defaultLine,"pointer-events":"all"}).each(function(){var ce=g.select(this);ce.append("tspan").classed("js-link-to-tool",!0),ce.append("tspan").classed("js-link-spacer",!0),ce.append("tspan").classed("js-sourcelinks",!0)})}),X=$.node(),re={y:J._paper.attr("height")-9};document.body.contains(X)&&X.getComputedTextLength()>=J.width-20?(re["text-anchor"]="start",re.x=5):(re["text-anchor"]="end",re.x=J._paper.attr("width")-7),$.attr(re);var ae=$.select(".js-link-to-tool"),j=$.select(".js-link-spacer"),ee=$.select(".js-sourcelinks");G._context.showSources&&G._context.showSources(G),G._context.showLink&&E(G,ae),j.text(ae.text()&&ee.text()?" - ":"")}};function E(G,J){J.text("");var $=J.append("a").attr({"xlink:xlink:href":"#",class:"link--impt link--embedview","font-weight":"bold"}).text(G._context.linkText+" \xBB");if(G._context.sendData)$.on("click",function(){w.sendDataToCloud(G)});else{var X=window.location.pathname.split("/"),re=window.location.search;$.attr({"xlink:xlink:show":"new","xlink:xlink:href":"/"+X[2].split(".")[0]+"/"+X[1]+re})}}w.sendDataToCloud=function(G){var J=(window.PLOTLYENV||{}).BASE_URL||G._context.plotlyServerURL;if(J){G.emit("plotly_beforeexport");var $=g.select(G).append("div").attr("id","hiddenform").style("display","none"),X=$.append("form").attr({action:J+"/external",method:"post",target:"_blank"}),re=X.append("input").attr({type:"text",name:"data"});return re.node().value=w.graphJson(G,!1,"keepdata"),X.node().submit(),$.remove(),G.emit("plotly_afterexport"),!1}};var m=["days","shortDays","months","shortMonths","periods","dateTime","date","time","decimal","thousands","grouping","currency"],b=["year","month","dayMonth","dayMonthYear"];w.supplyDefaults=function(G,J){var $=J&&J.skipUpdateCalc,X=G._fullLayout||{};if(X._skipDefaults){delete X._skipDefaults;return}var re=G._fullLayout={},ae=G.layout||{},j=G._fullData||[],ee=G._fullData=[],ne=G.data||[],ce=G.calcdata||[],_e=G._context||{},we;G._transitionData||w.createTransitionData(G),re._dfltTitle={plot:_(G,"Click to enter Plot title"),subtitle:_(G,"Click to enter Plot subtitle"),x:_(G,"Click to enter X axis title"),y:_(G,"Click to enter Y axis title"),colorbar:_(G,"Click to enter Colorscale title"),annotation:_(G,"new text")},re._traceWord=_(G,"trace");var Oe=y(G,m);if(re._mapboxAccessToken=_e.mapboxAccessToken,X._initialAutoSizeIsDone){var Ie=X.width,Xe=X.height;w.supplyLayoutGlobalDefaults(ae,re,Oe),ae.width||(re.width=Ie),ae.height||(re.height=Xe),w.sanitizeMargins(re)}else{w.supplyLayoutGlobalDefaults(ae,re,Oe);var tt=!ae.width||!ae.height,rt=re.autosize,Je=_e.autosizable,ot=tt&&(rt||Je);ot?w.plotAutoSize(G,ae,re):tt&&w.sanitizeMargins(re),!rt&&tt&&(ae.width=re.width,ae.height=re.height)}re._d3locale=f(Oe,re.separators),re._extraFormat=y(G,b),re._initialAutoSizeIsDone=!0,re._dataLength=ne.length,re._modules=[],re._visibleModules=[],re._basePlotModules=[];var Me=re._subplots=u(),pe=re._splomAxes={x:{},y:{}},ue=re._splomSubplots={};re._splomGridDflt={},re._scatterStackOpts={},re._firstScatter={},re._alignmentOpts={},re._colorAxes={},re._requestRangeslider={},re._traceUids=v(j,ne),w.supplyDataDefaults(ne,ee,ae,re);var ze=Object.keys(pe.x),Qe=Object.keys(pe.y);if(ze.length>1&&Qe.length>1){for(t.getComponentMethod("grid","sizeDefaults")(ae,re),we=0;we<ze.length;we++)i.pushUnique(Me.xaxis,ze[we]);for(we=0;we<Qe.length;we++)i.pushUnique(Me.yaxis,Qe[we]);for(var it in ue)i.pushUnique(Me.cartesian,it)}if(re._has=w._hasPlotType.bind(re),j.length===ee.length)for(we=0;we<ee.length;we++)l(ee[we],j[we]);w.supplyLayoutModuleDefaults(ae,re,ee,G._transitionData);var $e=re._visibleModules,kt=[];for(we=0;we<$e.length;we++){var Mt=$e[we].crossTraceDefaults;Mt&&i.pushUnique(kt,Mt)}for(we=0;we<kt.length;we++)kt[we](ee,re);re._hasOnlyLargeSploms=re._basePlotModules.length===1&&re._basePlotModules[0].name==="splom"&&ze.length>15&&Qe.length>15&&re.shapes.length===0&&re.images.length===0,w.linkSubplots(ee,re,j,X),w.cleanPlot(ee,re,j,X);var Bt=!!(X._has&&X._has("cartesian")),jt=!!(re._has&&re._has("cartesian")),cr=Bt,nr=jt;cr&&!nr?X._bgLayer.remove():nr&&!cr&&(re._shouldCreateBgLayer=!0),X._zoomlayer&&!G._dragging&&c({_fullLayout:X}),P(ee,re),l(re,X),t.getComponentMethod("colorscale","crossTraceDefaults")(ee,re),re._preGUI||(re._preGUI={}),re._tracePreGUI||(re._tracePreGUI={});var Lr=re._tracePreGUI,mr={},xr;for(xr in Lr)mr[xr]="old";for(we=0;we<ee.length;we++)xr=ee[we]._fullInput.uid,mr[xr]||(Lr[xr]={}),mr[xr]="new";for(xr in mr)mr[xr]==="old"&&delete Lr[xr];F(re),t.getComponentMethod("rangeslider","makeData")(re),!$&&ce.length===ee.length&&w.supplyDefaultsUpdateCalc(ce,ee)},w.supplyDefaultsUpdateCalc=function(G,J){for(var $=0;$<J.length;$++){var X=J[$],re=(G[$]||[])[0];if(re&&re.trace){var ae=re.trace;if(ae._hasCalcTransform){var j=ae._arrayAttrs,ee,ne,ce;for(ee=0;ee<j.length;ee++)ne=j[ee],ce=i.nestedProperty(ae,ne).get().slice(),i.nestedProperty(X,ne).set(ce)}re.trace=X}}};function v(G,J){var $=J.length,X=[],re,ae;for(re=0;re<G.length;re++){var j=G[re]._fullInput;j!==ae&&X.push(j),ae=j}var ee=X.length,ne=new Array($),ce={};function _e(Ie,Xe){ne[Xe]=Ie,ce[Ie]=1}function we(Ie,Xe){if(Ie&&typeof Ie=="string"&&!ce[Ie])return _e(Ie,Xe),!0}for(re=0;re<$;re++){var Oe=J[re].uid;typeof Oe=="number"&&(Oe=String(Oe)),!we(Oe,re)&&(re<ee&&we(X[re].uid,re)||_e(i.randstr(ce),re))}return ne}function u(){var G=t.collectableSubplotTypes,J={},$,X;if(!G){G=[];var re=t.subplotsRegistry;for(var ae in re){var j=re[ae],ee=j.attr;if(ee&&(G.push(ae),Array.isArray(ee)))for(X=0;X<ee.length;X++)i.pushUnique(G,ee[X])}}for($=0;$<G.length;$++)J[G[$]]=[];return J}function y(G,J){var $=G._context.locale;$||($="en-US");var X=!1,re={};function ae(we){for(var Oe=!0,Ie=0;Ie<J.length;Ie++){var Xe=J[Ie];re[Xe]||(we[Xe]?re[Xe]=we[Xe]:Oe=!1)}Oe&&(X=!0)}for(var j=0;j<2;j++){for(var ee=G._context.locales,ne=0;ne<2;ne++){var ce=(ee[$]||{}).format;if(ce&&(ae(ce),X))break;ee=t.localeRegistry}var _e=$.split("-")[0];if(X||_e===$)break;$=_e}return X||ae(t.localeRegistry.en.format),re}function f(G,J){return G.decimal=J.charAt(0),G.thousands=J.charAt(1),{numberFormat:function($){try{$=A(G).format(i.adjustFormat($))}catch{return i.warnBadFormat($),i.noFormat}return $},timeFormat:x(G).utcFormat}}function P(G,J){var $,X=[];J.meta&&($=J._meta={meta:J.meta,layout:{meta:J.meta}});for(var re=0;re<G.length;re++){var ae=G[re];ae.meta?X[ae.index]=ae._meta={meta:ae.meta}:J.meta&&(ae._meta={meta:J.meta}),J.meta&&(ae._meta.layout={meta:J.meta})}X.length&&($||($=J._meta={}),$.data=X)}w.createTransitionData=function(G){G._transitionData||(G._transitionData={}),G._transitionData._frames||(G._transitionData._frames=[]),G._transitionData._frameHash||(G._transitionData._frameHash={}),G._transitionData._counter||(G._transitionData._counter=0),G._transitionData._interruptCallbacks||(G._transitionData._interruptCallbacks=[])},w._hasPlotType=function(G){var J,$=this._basePlotModules||[];for(J=0;J<$.length;J++)if($[J].name===G)return!0;var X=this._modules||[];for(J=0;J<X.length;J++){var re=X[J].name;if(re===G)return!0;var ae=t.modules[re];if(ae&&ae.categories[G])return!0}return!1},w.cleanPlot=function(G,J,$,X){var re,ae,j=X._basePlotModules||[];for(re=0;re<j.length;re++){var ee=j[re];ee.clean&&ee.clean(G,J,$,X)}var ne=X._has&&X._has("gl"),ce=J._has&&J._has("gl");ne&&!ce&&X._glcontainer!==void 0&&(X._glcontainer.selectAll(".gl-canvas").remove(),X._glcontainer.selectAll(".no-webgl").remove(),X._glcanvas=null);var _e=!!X._infolayer;e:for(re=0;re<$.length;re++){var we=$[re],Oe=we.uid;for(ae=0;ae<G.length;ae++){var Ie=G[ae];if(Oe===Ie.uid)continue e}_e&&X._infolayer.select(".cb"+Oe).remove()}},w.linkSubplots=function(G,J,$,X){var re,ae,j=X._plots||{},ee=J._plots={},ne=J._subplots,ce={_fullData:G,_fullLayout:J},_e=ne.cartesian||[];for(re=0;re<_e.length;re++){var we=_e[re],Oe=j[we],Ie=s.getFromId(ce,we,"x"),Xe=s.getFromId(ce,we,"y"),tt;for(Oe?tt=ee[we]=Oe:(tt=ee[we]={},tt.id=we),Ie._counterAxes.push(Xe._id),Xe._counterAxes.push(Ie._id),Ie._subplotsWith.push(we),Xe._subplotsWith.push(we),tt.xaxis=Ie,tt.yaxis=Xe,tt._hasClipOnAxisFalse=!1,ae=0;ae<G.length;ae++){var rt=G[ae];if(rt.xaxis===tt.xaxis._id&&rt.yaxis===tt.yaxis._id&&rt.cliponaxis===!1){tt._hasClipOnAxisFalse=!0;break}}}var Je=s.list(ce,null,!0),ot;for(re=0;re<Je.length;re++){ot=Je[re];var Me=null;ot.overlaying&&(Me=s.getFromId(ce,ot.overlaying),Me&&Me.overlaying&&(ot.overlaying=!1,Me=null)),ot._mainAxis=Me||ot,Me&&(ot.domain=Me.domain.slice()),ot._anchorAxis=ot.anchor==="free"?null:s.getFromId(ce,ot.anchor)}for(re=0;re<Je.length;re++)if(ot=Je[re],ot._counterAxes.sort(s.idSort),ot._subplotsWith.sort(i.subplotSort),ot._mainSubplot=L(ot,J),ot._counterAxes.length&&(ot.spikemode&&ot.spikemode.indexOf("across")!==-1||ot.automargin&&ot.mirror&&ot.anchor!=="free"||t.getComponentMethod("rangeslider","isVisible")(ot))){var pe=1,ue=0;for(ae=0;ae<ot._counterAxes.length;ae++){var ze=s.getFromId(ce,ot._counterAxes[ae]);pe=Math.min(pe,ze.domain[0]),ue=Math.max(ue,ze.domain[1])}pe<ue&&(ot._counterDomainMin=pe,ot._counterDomainMax=ue)}};function L(G,J){var $={_fullLayout:J},X=G._id.charAt(0)==="x",re=G._mainAxis._anchorAxis,ae="",j="",ee="";if(re&&(ee=re._mainAxis._id,ae=X?G._id+ee:ee+G._id),!ae||!J._plots[ae]){ae="";for(var ne=G._counterAxes,ce=0;ce<ne.length;ce++){var _e=ne[ce],we=X?G._id+_e:_e+G._id;j||(j=we);var Oe=s.getFromId($,_e);if(ee&&Oe.overlaying===ee){ae=we;break}}}return ae||j}w.clearExpandedTraceDefaultColors=function(G){var J,$,X;function re(j,ee,ne,ce){$[ce]=ee,$.length=ce+1,j.valType==="color"&&j.dflt===void 0&&J.push($.join("."))}for($=[],J=G._module._colorAttrs,J||(G._module._colorAttrs=J=[],r.crawl(G._module.attributes,re)),X=0;X<J.length;X++){var ae=i.nestedProperty(G,"_input."+J[X]);ae.get()||i.nestedProperty(G,J[X]).set(null)}},w.supplyDataDefaults=function(G,J,$,X){var re=X._modules,ae=X._visibleModules,j=X._basePlotModules,ee=0,ne=0,ce,_e,we;X._transformModules=[];function Oe(ot){J.push(ot);var Me=ot._module;Me&&(i.pushUnique(re,Me),ot.visible===!0&&i.pushUnique(ae,Me),i.pushUnique(j,ot._module.basePlotModule),ee++,ot._input.visible!==!1&&ne++)}var Ie={},Xe=[],tt=($.template||{}).data||{},rt=o.traceTemplater(tt);for(ce=0;ce<G.length;ce++)we=G[ce],_e=rt.newTrace(we),_e.uid=X._traceUids[ce],w.supplyTraceDefaults(we,_e,ne,X,ce),_e.index=ce,_e._input=we,_e._fullInput=_e,Oe(_e),t.traceIs(_e,"carpetAxis")&&(Ie[_e.carpet]=_e),t.traceIs(_e,"carpetDependent")&&Xe.push(ce);for(ce=0;ce<Xe.length;ce++)if(_e=J[Xe[ce]],!!_e.visible){var Je=Ie[_e.carpet];if(_e._carpet=Je,!Je||!Je.visible){_e.visible=!1;continue}_e.xaxis=Je.xaxis,_e.yaxis=Je.yaxis}},w.supplyAnimationDefaults=function(G){G=G||{};var J,$={};function X(re,ae){return i.coerce(G||{},$,p,re,ae)}if(X("mode"),X("direction"),X("fromcurrent"),Array.isArray(G.frame))for($.frame=[],J=0;J<G.frame.length;J++)$.frame[J]=w.supplyAnimationFrameDefaults(G.frame[J]||{});else $.frame=w.supplyAnimationFrameDefaults(G.frame||{});if(Array.isArray(G.transition))for($.transition=[],J=0;J<G.transition.length;J++)$.transition[J]=w.supplyAnimationTransitionDefaults(G.transition[J]||{});else $.transition=w.supplyAnimationTransitionDefaults(G.transition||{});return $},w.supplyAnimationFrameDefaults=function(G){var J={};function $(X,re){return i.coerce(G||{},J,p.frame,X,re)}return $("duration"),$("redraw"),J},w.supplyAnimationTransitionDefaults=function(G){var J={};function $(X,re){return i.coerce(G||{},J,p.transition,X,re)}return $("duration"),$("easing"),J},w.supplyFrameDefaults=function(G){var J={};function $(X,re){return i.coerce(G,J,d,X,re)}return $("group"),$("name"),$("traces"),$("baseframe"),$("data"),$("layout"),J},w.supplyTraceDefaults=function(G,J,$,X,re){var ae=X.colorway||n.defaults,j=ae[$%ae.length],ee;function ne(Me,pe){return i.coerce(G,J,w.attributes,Me,pe)}var ce=ne("visible");ne("type"),ne("name",X._traceWord+" "+re),ne("uirevision",X.uirevision);var _e=w.getModule(J);if(J._module=_e,_e){var we=_e.basePlotModule,Oe=we.attr,Ie=we.attributes;if(Oe&&Ie){var Xe=X._subplots,tt="";if(Array.isArray(Oe))for(ee=0;ee<Oe.length;ee++){var rt=Oe[ee],Je=i.coerce(G,J,Ie,rt);Xe[rt]&&i.pushUnique(Xe[rt],Je),tt+=Je}else tt=i.coerce(G,J,Ie,Oe);Xe[we.name]&&i.pushUnique(Xe[we.name],tt)}}if(ce&&(ne("customdata"),ne("ids"),ne("meta"),t.traceIs(J,"showLegend")?(i.coerce(G,J,_e.attributes.showlegend?_e.attributes:w.attributes,"showlegend"),ne("legend"),ne("legendwidth"),ne("legendgroup"),ne("legendgrouptitle.text"),ne("legendrank"),J._dfltShowLegend=!0):J._dfltShowLegend=!1,_e&&_e.supplyDefaults(G,J,j,X),t.traceIs(J,"noOpacity")||ne("opacity"),t.traceIs(J,"notLegendIsolatable")&&(J.visible=!!J.visible),t.traceIs(J,"noHover")||(J.hovertemplate||i.coerceHoverinfo(G,J,X),J.type!=="parcats"&&t.getComponentMethod("fx","supplyDefaults")(G,J,j,X)),_e&&_e.selectPoints)){var ot=ne("selectedpoints");i.isTypedArray(ot)&&(J.selectedpoints=Array.from(ot))}return J},w.supplyLayoutGlobalDefaults=function(G,J,$){function X(we,Oe){return i.coerce(G,J,w.layoutAttributes,we,Oe)}var re=G.template;i.isPlainObject(re)&&(J.template=re,J._template=re.layout,J._dataTemplate=re.data),X("autotypenumbers");var ae=i.coerceFont(X,"font"),j=ae.size;i.coerceFont(X,"title.font",ae,{overrideDflt:{size:Math.round(j*1.4)}}),X("title.text",J._dfltTitle.plot),X("title.xref");var ee=X("title.yref");X("title.pad.t"),X("title.pad.r"),X("title.pad.b"),X("title.pad.l");var ne=X("title.automargin");X("title.x"),X("title.xanchor"),X("title.y"),X("title.yanchor"),X("title.subtitle.text",J._dfltTitle.subtitle),i.coerceFont(X,"title.subtitle.font",ae,{overrideDflt:{size:Math.round(J.title.font.size*.7)}}),ne&&(ee==="paper"&&(J.title.y!==0&&(J.title.y=1),J.title.yanchor==="auto"&&(J.title.yanchor=J.title.y===0?"top":"bottom")),ee==="container"&&(J.title.y==="auto"&&(J.title.y=1),J.title.yanchor==="auto"&&(J.title.yanchor=J.title.y<.5?"bottom":"top")));var ce=X("uniformtext.mode");ce&&X("uniformtext.minsize"),X("autosize",!(G.width&&G.height)),X("width"),X("height"),X("minreducedwidth"),X("minreducedheight"),X("margin.l"),X("margin.r"),X("margin.t"),X("margin.b"),X("margin.pad"),X("margin.autoexpand"),G.width&&G.height&&w.sanitizeMargins(J),t.getComponentMethod("grid","sizeDefaults")(G,J),X("paper_bgcolor"),X("separators",$.decimal+$.thousands),X("hidesources"),X("colorway"),X("datarevision");var _e=X("uirevision");X("editrevision",_e),X("selectionrevision",_e),t.getComponentMethod("modebar","supplyLayoutDefaults")(G,J),t.getComponentMethod("shapes","supplyDrawNewShapeDefaults")(G,J,X),t.getComponentMethod("selections","supplyDrawNewSelectionDefaults")(G,J,X),X("meta"),i.isPlainObject(G.transition)&&(X("transition.duration"),X("transition.easing"),X("transition.ordering")),t.getComponentMethod("calendars","handleDefaults")(G,J,"calendar"),t.getComponentMethod("fx","supplyLayoutGlobalDefaults")(G,J,X),i.coerce(G,J,h,"scattermode")};function z(G){return typeof G=="string"&&G.substr(G.length-2)==="px"&&parseFloat(G)}w.plotAutoSize=function(J,$,X){var re=J._context||{},ae=re.frameMargins,j,ee,ne=i.isPlotDiv(J);if(ne&&J.emit("plotly_autosize"),re.fillFrame)j=window.innerWidth,ee=window.innerHeight,document.body.style.overflow="hidden";else{var ce=ne?window.getComputedStyle(J):{};if(j=z(ce.width)||z(ce.maxWidth)||X.width,ee=z(ce.height)||z(ce.maxHeight)||X.height,S(ae)&&ae>0){var _e=1-2*ae;j=Math.round(_e*j),ee=Math.round(_e*ee)}}var we=w.layoutAttributes.width.min,Oe=w.layoutAttributes.height.min;j<we&&(j=we),ee<Oe&&(ee=Oe);var Ie=!$.width&&Math.abs(X.width-j)>1,Xe=!$.height&&Math.abs(X.height-ee)>1;(Xe||Ie)&&(Ie&&(X.width=j),Xe&&(X.height=ee)),J._initialAutoSize||(J._initialAutoSize={width:j,height:ee}),w.sanitizeMargins(X)},w.supplyLayoutModuleDefaults=function(G,J,$,X){var re=t.componentsRegistry,ae=J._basePlotModules,j,ee,ne,ce=t.subplotsRegistry.cartesian;for(j in re)ne=re[j],ne.includeBasePlot&&ne.includeBasePlot(G,J);ae.length||ae.push(ce),J._has("cartesian")&&(t.getComponentMethod("grid","contentDefaults")(G,J),ce.finalizeSubplots(G,J));for(var _e in J._subplots)J._subplots[_e].sort(i.subplotSort);for(ee=0;ee<ae.length;ee++)ne=ae[ee],ne.supplyLayoutDefaults&&ne.supplyLayoutDefaults(G,J,$);var we=J._modules;for(ee=0;ee<we.length;ee++)ne=we[ee],ne.supplyLayoutDefaults&&ne.supplyLayoutDefaults(G,J,$);var Oe=J._transformModules;for(ee=0;ee<Oe.length;ee++)ne=Oe[ee],ne.supplyLayoutDefaults&&ne.supplyLayoutDefaults(G,J,$,X);for(j in re)ne=re[j],ne.supplyLayoutDefaults&&ne.supplyLayoutDefaults(G,J,$)},w.purge=function(G){var J=G._fullLayout||{};J._glcontainer!==void 0&&(J._glcontainer.selectAll(".gl-canvas").remove(),J._glcontainer.remove(),J._glcanvas=null),J._modeBar&&J._modeBar.destroy(),G._transitionData&&(G._transitionData._interruptCallbacks&&(G._transitionData._interruptCallbacks.length=0),G._transitionData._animationRaf&&window.cancelAnimationFrame(G._transitionData._animationRaf)),i.clearThrottle(),i.clearResponsive(G),delete G.data,delete G.layout,delete G._fullData,delete G._fullLayout,delete G.calcdata,delete G.empty,delete G.fid,delete G.undoqueue,delete G.undonum,delete G.autoplay,delete G.changed,delete G._promises,delete G._redrawTimer,delete G._hmlumcount,delete G._hmpixcount,delete G._transitionData,delete G._transitioning,delete G._initialAutoSize,delete G._transitioningWithDuration,delete G._dragging,delete G._dragged,delete G._dragdata,delete G._hoverdata,delete G._snapshotInProgress,delete G._editing,delete G._mouseDownTime,delete G._legendMouseDownTime,G.removeAllListeners&&G.removeAllListeners()},w.style=function(G){var J=G._fullLayout._visibleModules,$=[],X;for(X=0;X<J.length;X++){var re=J[X];re.style&&i.pushUnique($,re.style)}for(X=0;X<$.length;X++)$[X](G)},w.sanitizeMargins=function(G){if(!(!G||!G.margin)){var J=G.width,$=G.height,X=G.margin,re=J-(X.l+X.r),ae=$-(X.t+X.b),j;re<0&&(j=(J-1)/(X.l+X.r),X.l=Math.floor(j*X.l),X.r=Math.floor(j*X.r)),ae<0&&(j=($-1)/(X.t+X.b),X.t=Math.floor(j*X.t),X.b=Math.floor(j*X.b))}},w.clearAutoMarginIds=function(G){G._fullLayout._pushmarginIds={}},w.allowAutoMargin=function(G,J){G._fullLayout._pushmarginIds[J]=1};function F(G){var J=G.margin;if(!G._size){var $=G._size={l:Math.round(J.l),r:Math.round(J.r),t:Math.round(J.t),b:Math.round(J.b),p:Math.round(J.pad)};$.w=Math.round(G.width)-$.l-$.r,$.h=Math.round(G.height)-$.t-$.b}G._pushmargin||(G._pushmargin={}),G._pushmarginIds||(G._pushmarginIds={}),G._reservedMargin||(G._reservedMargin={})}var O=2,B=2;w.autoMargin=function(G,J,$){var X=G._fullLayout,re=X.width,ae=X.height,j=X.margin,ee=X.minreducedwidth,ne=X.minreducedheight,ce=i.constrain(re-j.l-j.r,O,ee),_e=i.constrain(ae-j.t-j.b,B,ne),we=Math.max(0,re-ce),Oe=Math.max(0,ae-_e),Ie=X._pushmargin,Xe=X._pushmarginIds;if(j.autoexpand!==!1){if(!$)delete Ie[J],delete Xe[J];else{var tt=$.pad;if(tt===void 0&&(tt=Math.min(12,j.l,j.r,j.t,j.b)),we){var rt=($.l+$.r)/we;rt>1&&($.l/=rt,$.r/=rt)}if(Oe){var Je=($.t+$.b)/Oe;Je>1&&($.t/=Je,$.b/=Je)}var ot=$.xl!==void 0?$.xl:$.x,Me=$.xr!==void 0?$.xr:$.x,pe=$.yt!==void 0?$.yt:$.y,ue=$.yb!==void 0?$.yb:$.y;Ie[J]={l:{val:ot,size:$.l+tt},r:{val:Me,size:$.r+tt},b:{val:ue,size:$.b+tt},t:{val:pe,size:$.t+tt}},Xe[J]=1}if(!X._replotting)return w.doAutoMargin(G)}};function I(G){if("_redrawFromAutoMarginCount"in G._fullLayout)return!1;var J=s.list(G,"",!0);for(var $ in J)if(J[$].autoshift||J[$].shift)return!0;return!1}w.doAutoMargin=function(G){var J=G._fullLayout,$=J.width,X=J.height;J._size||(J._size={}),F(J);var re=J._size,ae=J.margin,j={t:0,b:0,l:0,r:0},ee=i.extendFlat({},re),ne=ae.l,ce=ae.r,_e=ae.t,we=ae.b,Oe=J._pushmargin,Ie=J._pushmarginIds,Xe=J.minreducedwidth,tt=J.minreducedheight;if(ae.autoexpand!==!1){for(var rt in Oe)Ie[rt]||delete Oe[rt];var Je=G._fullLayout._reservedMargin;for(var ot in Je)for(var Me in Je[ot]){var pe=Je[ot][Me];j[Me]=Math.max(j[Me],pe)}Oe.base={l:{val:0,size:ne},r:{val:1,size:ce},t:{val:1,size:_e},b:{val:0,size:we}};for(var ue in j){var ze=0;for(var Qe in Oe)Qe!=="base"&&S(Oe[Qe][ue].size)&&(ze=Oe[Qe][ue].size>ze?Oe[Qe][ue].size:ze);var it=Math.max(0,ae[ue]-ze);j[ue]=Math.max(0,j[ue]-it)}for(var $e in Oe){var kt=Oe[$e].l||{},Mt=Oe[$e].b||{},Bt=kt.val,jt=kt.size,cr=Mt.val,nr=Mt.size,Lr=$-j.r-j.l,mr=X-j.t-j.b;for(var xr in Oe){if(S(jt)&&Oe[xr].r){var mt=Oe[xr].r.val,Fe=Oe[xr].r.size;if(mt>Bt){var Ze=(jt*mt+(Fe-Lr)*Bt)/(mt-Bt),Ne=(Fe*(1-Bt)+(jt-Lr)*(1-mt))/(mt-Bt);Ze+Ne>ne+ce&&(ne=Ze,ce=Ne)}}if(S(nr)&&Oe[xr].t){var Se=Oe[xr].t.val,Ve=Oe[xr].t.size;if(Se>cr){var Ee=(nr*Se+(Ve-mr)*cr)/(Se-cr),be=(Ve*(1-cr)+(nr-mr)*(1-Se))/(Se-cr);Ee+be>we+_e&&(we=Ee,_e=be)}}}}}var Ce=i.constrain($-ae.l-ae.r,O,Xe),et=i.constrain(X-ae.t-ae.b,B,tt),ht=Math.max(0,$-Ce),yt=Math.max(0,X-et);if(ht){var Pt=(ne+ce)/ht;Pt>1&&(ne/=Pt,ce/=Pt)}if(yt){var Ot=(we+_e)/yt;Ot>1&&(we/=Ot,_e/=Ot)}if(re.l=Math.round(ne)+j.l,re.r=Math.round(ce)+j.r,re.t=Math.round(_e)+j.t,re.b=Math.round(we)+j.b,re.p=Math.round(ae.pad),re.w=Math.round($)-re.l-re.r,re.h=Math.round(X)-re.t-re.b,!J._replotting&&(w.didMarginChange(ee,re)||I(G))){"_redrawFromAutoMarginCount"in J?J._redrawFromAutoMarginCount++:J._redrawFromAutoMarginCount=1;var Wt=3*(1+Object.keys(Ie).length);if(J._redrawFromAutoMarginCount<Wt)return t.call("_doPlot",G);J._size=ee,i.warn("Too many auto-margin redraws.")}N(G)};function N(G){var J=s.list(G,"",!0);["_adjustTickLabelsOverflow","_hideCounterAxisInsideTickLabels"].forEach(function($){for(var X=0;X<J.length;X++){var re=J[X][$];re&&re()}})}var U=["l","r","t","b","p","w","h"];w.didMarginChange=function(G,J){for(var $=0;$<U.length;$++){var X=U[$],re=G[X],ae=J[X];if(!S(re)||Math.abs(ae-re)>1)return!0}return!1},w.graphJson=function(G,J,$,X,re,ae){(re&&J&&!G._fullData||re&&!J&&!G._fullLayout)&&w.supplyDefaults(G);var j=re?G._fullData:G.data,ee=re?G._fullLayout:G.layout,ne=(G._transitionData||{})._frames;function ce(Oe,Ie){if(typeof Oe=="function")return Ie?"_function_":null;if(i.isPlainObject(Oe)){var Xe={},tt;return Object.keys(Oe).sort().forEach(function(Me){if(["_","["].indexOf(Me.charAt(0))===-1){if(typeof Oe[Me]=="function"){Ie&&(Xe[Me]="_function");return}if($==="keepdata"){if(Me.substr(Me.length-3)==="src")return}else if($==="keepstream"){if(tt=Oe[Me+"src"],typeof tt=="string"&&tt.indexOf(":")>0&&!i.isPlainObject(Oe.stream))return}else if($!=="keepall"&&(tt=Oe[Me+"src"],typeof tt=="string"&&tt.indexOf(":")>0))return;Xe[Me]=ce(Oe[Me],Ie)}}),Xe}var rt=Array.isArray(Oe),Je=i.isTypedArray(Oe);if((rt||Je)&&Oe.dtype&&Oe.shape){var ot=Oe.bdata;return ce({dtype:Oe.dtype,shape:Oe.shape,bdata:i.isArrayBuffer(ot)?e.encode(ot):ot},Ie)}return rt?Oe.map(function(Me){return ce(Me,Ie)}):Je?i.simpleMap(Oe,i.identity):i.isJSDate(Oe)?i.ms2DateTimeLocal(+Oe):Oe}var _e={data:(j||[]).map(function(Oe){var Ie=ce(Oe);return J&&delete Ie.fit,Ie})};if(!J&&(_e.layout=ce(ee),re)){var we=ee._size;_e.layout.computed={margin:{b:we.b,l:we.l,r:we.r,t:we.t}}}return ne&&(_e.frames=ce(ne)),ae&&(_e.config=ce(G._context,!0)),X==="object"?_e:JSON.stringify(_e)},w.modifyFrames=function(G,J){var $,X,re,ae=G._transitionData._frames,j=G._transitionData._frameHash;for($=0;$<J.length;$++)switch(X=J[$],X.type){case"replace":re=X.value;var ee=(ae[X.index]||{}).name,ne=re.name;ae[X.index]=j[ne]=re,ne!==ee&&(delete j[ee],j[ne]=re);break;case"insert":re=X.value,j[re.name]=re,ae.splice(X.index,0,re);break;case"delete":re=ae[X.index],delete j[re.name],ae.splice(X.index,1);break}return Promise.resolve()},w.computeFrame=function(G,J){var $=G._transitionData._frameHash,X,re,ae,j;if(!J)throw new Error("computeFrame must be given a string frame name");var ee=$[J.toString()];if(!ee)return!1;for(var ne=[ee],ce=[ee.name];ee.baseframe&&(ee=$[ee.baseframe.toString()])&&ce.indexOf(ee.name)===-1;)ne.push(ee),ce.push(ee.name);for(var _e={};ee=ne.pop();)if(ee.layout&&(_e.layout=w.extendLayout(_e.layout,ee.layout)),ee.data){if(_e.data||(_e.data=[]),re=ee.traces,!re)for(re=[],X=0;X<ee.data.length;X++)re[X]=X;for(_e.traces||(_e.traces=[]),X=0;X<ee.data.length;X++)ae=re[X],ae!=null&&(j=_e.traces.indexOf(ae),j===-1&&(j=_e.data.length,_e.traces[j]=ae),_e.data[j]=w.extendTrace(_e.data[j],ee.data[X]))}return _e},w.recomputeFrameHash=function(G){for(var J=G._transitionData._frameHash={},$=G._transitionData._frames,X=0;X<$.length;X++){var re=$[X];re&&re.name&&(J[re.name]=re)}},w.extendObjectWithContainers=function(G,J,$){var X,re,ae,j,ee,ne,ce,_e,we=i.extendDeepNoArrays({},J||{}),Oe=i.expandObjectPaths(we),Ie={};if($&&$.length)for(ae=0;ae<$.length;ae++)X=i.nestedProperty(Oe,$[ae]),re=X.get(),re===void 0?i.nestedProperty(Ie,$[ae]).set(null):(X.set(null),i.nestedProperty(Ie,$[ae]).set(re));if(G=i.extendDeepNoArrays(G||{},Oe),$&&$.length){for(ae=0;ae<$.length;ae++)if(ee=i.nestedProperty(Ie,$[ae]),ce=ee.get(),!!ce){for(ne=i.nestedProperty(G,$[ae]),_e=ne.get(),Array.isArray(_e)||(_e=[],ne.set(_e)),j=0;j<ce.length;j++){var Xe=ce[j];Xe===null?_e[j]=null:_e[j]=w.extendObjectWithContainers(_e[j],Xe)}ne.set(_e)}}return G},w.dataArrayContainers=["transforms","dimensions"],w.layoutArrayContainers=t.layoutArrayContainers,w.extendTrace=function(G,J){return w.extendObjectWithContainers(G,J,w.dataArrayContainers)},w.extendLayout=function(G,J){return w.extendObjectWithContainers(G,J,w.layoutArrayContainers)},w.transition=function(G,J,$,X,re,ae){var j={redraw:re.redraw},ee={},ne=[];return j.prepareFn=function(){for(var ce=Array.isArray(J)?J.length:0,_e=X.slice(0,ce),we=0;we<_e.length;we++){var Oe=_e[we],Ie=G._fullData[Oe],Xe=Ie._module;if(Xe){if(Xe.animatable){var tt=Xe.basePlotModule.name;ee[tt]||(ee[tt]=[]),ee[tt].push(Oe)}G.data[_e[we]]=w.extendTrace(G.data[_e[we]],J[we])}}var rt=i.expandObjectPaths(i.extendDeepNoArrays({},$)),Je=/^[xy]axis[0-9]*$/;for(var ot in rt)Je.test(ot)&&delete rt[ot].range;w.extendLayout(G.layout,rt),delete G.calcdata,w.supplyDefaults(G),w.doCalcdata(G);var Me=i.expandObjectPaths($);if(Me){var pe=G._fullLayout._plots;for(var ue in pe){var ze=pe[ue],Qe=ze.xaxis,it=ze.yaxis,$e=Qe.range.slice(),kt=it.range.slice(),Mt=null,Bt=null,jt=null,cr=null;Array.isArray(Me[Qe._name+".range"])?Mt=Me[Qe._name+".range"].slice():Array.isArray((Me[Qe._name]||{}).range)&&(Mt=Me[Qe._name].range.slice()),Array.isArray(Me[it._name+".range"])?Bt=Me[it._name+".range"].slice():Array.isArray((Me[it._name]||{}).range)&&(Bt=Me[it._name].range.slice()),$e&&Mt&&(Qe.r2l($e[0])!==Qe.r2l(Mt[0])||Qe.r2l($e[1])!==Qe.r2l(Mt[1]))&&(jt={xr0:$e,xr1:Mt}),kt&&Bt&&(it.r2l(kt[0])!==it.r2l(Bt[0])||it.r2l(kt[1])!==it.r2l(Bt[1]))&&(cr={yr0:kt,yr1:Bt}),(jt||cr)&&ne.push(i.extendFlat({plotinfo:ze},jt,cr))}}return Promise.resolve()},j.runFn=function(ce){var _e,we=G._fullLayout._basePlotModules,Oe=ne.length,Ie;if($)for(Ie=0;Ie<we.length;Ie++)we[Ie].transitionAxes&&we[Ie].transitionAxes(G,ne,ae,ce);Oe?(_e=i.extendFlat({},ae),_e.duration=0,delete ee.cartesian):_e=ae;for(var Xe in ee){var tt=ee[Xe],rt=G._fullData[tt[0]]._module;rt.basePlotModule.plot(G,tt,_e,ce)}},W(G,ae,j)},w.transitionFromReact=function(G,J,$,X){var re=G._fullLayout,ae=re.transition,j={},ee=[];return j.prepareFn=function(){var ne=re._plots;j.redraw=!1,J.anim==="some"&&(j.redraw=!0),$.anim==="some"&&(j.redraw=!0);for(var ce in ne){var _e=ne[ce],we=_e.xaxis,Oe=_e.yaxis,Ie=X[we._name].range.slice(),Xe=X[Oe._name].range.slice(),tt=we.range.slice(),rt=Oe.range.slice();we.setScale(),Oe.setScale();var Je=null,ot=null;(we.r2l(Ie[0])!==we.r2l(tt[0])||we.r2l(Ie[1])!==we.r2l(tt[1]))&&(Je={xr0:Ie,xr1:tt}),(Oe.r2l(Xe[0])!==Oe.r2l(rt[0])||Oe.r2l(Xe[1])!==Oe.r2l(rt[1]))&&(ot={yr0:Xe,yr1:rt}),(Je||ot)&&ee.push(i.extendFlat({plotinfo:_e},Je,ot))}return Promise.resolve()},j.runFn=function(ne){for(var ce=G._fullData,_e=G._fullLayout,we=_e._basePlotModules,Oe,Ie,Xe,tt=[],rt=0;rt<ce.length;rt++)tt.push(rt);function Je(){if(G._fullLayout)for(var Me=0;Me<we.length;Me++)we[Me].transitionAxes&&we[Me].transitionAxes(G,ee,Oe,ne)}function ot(){if(G._fullLayout)for(var Me=0;Me<we.length;Me++)we[Me].plot(G,Xe,Ie,ne)}ee.length&&J.anim?ae.ordering==="traces first"?(Oe=i.extendFlat({},ae,{duration:0}),Xe=tt,Ie=ae,setTimeout(Je,ae.duration),ot()):(Oe=ae,Xe=null,Ie=i.extendFlat({},ae,{duration:0}),setTimeout(ot,Oe.duration),Je()):ee.length?(Oe=ae,Je()):J.anim&&(Xe=tt,Ie=ae,ot())},W(G,ae,j)};function W(G,J,$){var X=!1;function re(we){var Oe=Promise.resolve();if(!we)return Oe;for(;we.length;)Oe=Oe.then(we.shift());return Oe}function ae(we){if(we)for(;we.length;)we.shift()}function j(){return G.emit("plotly_transitioning",[]),new Promise(function(we){G._transitioning=!0,J.duration>0&&(G._transitioningWithDuration=!0),G._transitionData._interruptCallbacks.push(function(){X=!0}),$.redraw&&G._transitionData._interruptCallbacks.push(function(){return t.call("redraw",G)}),G._transitionData._interruptCallbacks.push(function(){G.emit("plotly_transitioninterrupted",[])});var Oe=0,Ie=0;function Xe(){return Oe++,function(){Ie++,!X&&Ie===Oe&&ee(we)}}$.runFn(Xe),setTimeout(Xe())})}function ee(we){if(G._transitionData)return ae(G._transitionData._interruptCallbacks),Promise.resolve().then(function(){if($.redraw)return t.call("redraw",G)}).then(function(){G._transitioning=!1,G._transitioningWithDuration=!1,G.emit("plotly_transitioned",[])}).then(we)}function ne(){if(G._transitionData)return G._transitioning=!1,re(G._transitionData._interruptCallbacks)}var ce=[w.previousPromises,ne,$.prepareFn,w.rehover,w.reselect,j],_e=i.syncOrAsync(ce,G);return(!_e||!_e.then)&&(_e=Promise.resolve()),_e.then(function(){return G})}w.doCalcdata=function(G,J){var $=s.list(G),X=G._fullData,re=G._fullLayout,ae,j,ee,ne,ce=new Array(X.length),_e=(G.calcdata||[]).slice();for(G.calcdata=ce,re._numBoxes=0,re._numViolins=0,re._violinScaleGroupStats={},G._hmpixcount=0,G._hmlumcount=0,re._piecolormap={},re._sunburstcolormap={},re._treemapcolormap={},re._iciclecolormap={},re._funnelareacolormap={},ee=0;ee<X.length;ee++)if(Array.isArray(J)&&J.indexOf(ee)===-1){ce[ee]=_e[ee];continue}for(ee=0;ee<X.length;ee++)ae=X[ee],ae._arrayAttrs=r.findArrayAttributes(ae),ae._extremes={};var we=re._subplots.polar||[];for(ee=0;ee<we.length;ee++)$.push(re[we[ee]].radialaxis,re[we[ee]].angularaxis);for(var Oe in re._colorAxes){var Ie=re[Oe];Ie.cauto!==!1&&(delete Ie.cmin,delete Ie.cmax)}var Xe=!1;function tt(ot){if(ae=X[ot],j=ae._module,ae.visible===!0&&ae.transforms){if(j&&j.calc){var Me=j.calc(G,ae);Me[0]&&Me[0].t&&Me[0].t._scene&&delete Me[0].t._scene.dirty}for(ne=0;ne<ae.transforms.length;ne++){var pe=ae.transforms[ne];j=transformsRegistry[pe.type],j&&j.calcTransform&&(ae._hasCalcTransform=!0,Xe=!0,j.calcTransform(G,ae,pe))}}}function rt(ot,Me){if(ae=X[ot],j=ae._module,!!j.isContainer===Me){var pe=[];if(ae.visible===!0&&ae._length!==0){delete ae._indexToPoints;var ue=ae.transforms||[];for(ne=ue.length-1;ne>=0;ne--)if(ue[ne].enabled){ae._indexToPoints=ue[ne]._indexToPoints;break}j&&j.calc&&(pe=j.calc(G,ae))}(!Array.isArray(pe)||!pe[0])&&(pe=[{x:a,y:a}]),pe[0].t||(pe[0].t={}),pe[0].trace=ae,ce[ot]=pe}}for(se($,X,re),ee=0;ee<X.length;ee++)rt(ee,!0);for(ee=0;ee<X.length;ee++)tt(ee);for(Xe&&se($,X,re),ee=0;ee<X.length;ee++)rt(ee,!0);for(ee=0;ee<X.length;ee++)rt(ee,!1);fe(G);var Je=le($,G);if(Je.length){for(re._numBoxes=0,re._numViolins=0,ee=0;ee<Je.length;ee++)rt(Je[ee],!0);for(ee=0;ee<Je.length;ee++)rt(Je[ee],!1);fe(G)}t.getComponentMethod("fx","calc")(G),t.getComponentMethod("errorbars","calc")(G)};var Q=/(total|sum|min|max|mean|geometric mean|median) (ascending|descending)/;function le(G,J){var $=[],X,re,ae,j,ee;function ne(xr,mt,Fe){var Ze=mt._id.charAt(0);if(xr==="histogram2dcontour"){var Ne=mt._counterAxes[0],Se=s.getFromId(J,Ne),Ve=Ze==="x"||Ne==="x"&&Se.type==="category",Ee=Ze==="y"||Ne==="y"&&Se.type==="category";return function(be,Ce){return be===0||Ce===0||Ve&&be===Fe[Ce].length-1||Ee&&Ce===Fe.length-1?-1:(Ze==="y"?Ce:be)-1}}else return function(be,Ce){return Ze==="y"?Ce:be}}var ce={min:function(xr){return i.aggNums(Math.min,null,xr)},max:function(xr){return i.aggNums(Math.max,null,xr)},sum:function(xr){return i.aggNums(function(mt,Fe){return mt+Fe},null,xr)},total:function(xr){return i.aggNums(function(mt,Fe){return mt+Fe},null,xr)},mean:function(xr){return i.mean(xr)},"geometric mean":function(xr){return i.geometricMean(xr)},median:function(xr){return i.median(xr)}};function _e(xr,mt){return xr[1]-mt[1]}function we(xr,mt){return mt[1]-xr[1]}for(X=0;X<G.length;X++){var Oe=G[X];if(Oe.type==="category"){var Ie=Oe.categoryorder.match(Q);if(Ie){var Xe=Ie[1],tt=Ie[2],rt=Oe._id.charAt(0),Je=rt==="x",ot=[];for(re=0;re<Oe._categories.length;re++)ot.push([Oe._categories[re],[]]);for(re=0;re<Oe._traceIndices.length;re++){var Me=Oe._traceIndices[re],pe=J._fullData[Me];if(pe.visible===!0){var ue=pe.type;t.traceIs(pe,"histogram")&&(delete pe._xautoBinFinished,delete pe._yautoBinFinished);var ze=ue==="splom",Qe=ue==="scattergl",it=J.calcdata[Me];for(ae=0;ae<it.length;ae++){var $e=it[ae],kt,Mt;if(ze){var Bt=pe._axesDim[Oe._id];if(!Je){var jt=pe._diag[Bt][0];jt&&(Oe=J._fullLayout[s.id2name(jt)])}var cr=$e.trace.dimensions[Bt].values;for(j=0;j<cr.length;j++)for(kt=Oe._categoriesMap[cr[j]],ee=0;ee<$e.trace.dimensions.length;ee++)if(ee!==Bt){var nr=$e.trace.dimensions[ee];ot[kt][1].push(nr.values[j])}}else if(Qe){for(j=0;j<$e.t.x.length;j++)Je?(kt=$e.t.x[j],Mt=$e.t.y[j]):(kt=$e.t.y[j],Mt=$e.t.x[j]),ot[kt][1].push(Mt);$e.t&&$e.t._scene&&delete $e.t._scene.dirty}else if($e.hasOwnProperty("z")){Mt=$e.z;var Lr=ne(pe.type,Oe,Mt);for(j=0;j<Mt.length;j++)for(ee=0;ee<Mt[j].length;ee++)kt=Lr(ee,j),kt+1&&ot[kt][1].push(Mt[j][ee])}else for(kt=$e.p,kt===void 0&&(kt=$e[rt]),Mt=$e.s,Mt===void 0&&(Mt=$e.v),Mt===void 0&&(Mt=Je?$e.y:$e.x),Array.isArray(Mt)||(Mt===void 0?Mt=[]:Mt=[Mt]),j=0;j<Mt.length;j++)ot[kt][1].push(Mt[j])}}}Oe._categoriesValue=ot;var mr=[];for(re=0;re<ot.length;re++)mr.push([ot[re][0],ce[Xe](ot[re][1])]);mr.sort(tt==="descending"?we:_e),Oe._categoriesAggregatedValue=mr,Oe._initialCategories=mr.map(function(xr){return xr[0]}),$=$.concat(Oe.sortByInitialCategories())}}}return $}function se(G,J,$){var X={};function re(ne){ne.clearCalc(),ne.type==="multicategory"&&ne.setupMultiCategory(J),X[ne._id]=1}i.simpleMap(G,re);for(var ae=$._axisMatchGroups||[],j=0;j<ae.length;j++)for(var ee in ae[j])X[ee]||re($[s.id2name(ee)])}function fe(G){var J=G._fullLayout,$=J._visibleModules,X={},re,ae,j;for(ae=0;ae<$.length;ae++){var ee=$[ae],ne=ee.crossTraceCalc;if(ne){var ce=ee.basePlotModule.name;X[ce]?i.pushUnique(X[ce],ne):X[ce]=[ne]}}for(j in X){var _e=X[j],we=J._subplots[j];if(Array.isArray(we))for(re=0;re<we.length;re++){var Oe=we[re],Ie=j==="cartesian"?J._plots[Oe]:J[Oe];for(ae=0;ae<_e.length;ae++)_e[ae](G,Ie,Oe)}else for(ae=0;ae<_e.length;ae++)_e[ae](G)}}w.rehover=function(G){G._fullLayout._rehover&&G._fullLayout._rehover()},w.redrag=function(G){G._fullLayout._redrag&&G._fullLayout._redrag()},w.reselect=function(G){var J=G._fullLayout,$=(G.layout||{}).selections,X=J._previousSelections;J._previousSelections=$;var re=J._reselect||JSON.stringify($)!==JSON.stringify(X);t.getComponentMethod("selections","reselect")(G,re)},w.generalUpdatePerTraceModule=function(G,J,$,X){var re=J.traceHash,ae={},j;for(j=0;j<$.length;j++){var ee=$[j],ne=ee[0].trace;ne.visible&&(ae[ne.type]=ae[ne.type]||[],ae[ne.type].push(ee))}for(var ce in re)if(!ae[ce]){var _e=re[ce][0],we=_e[0].trace;we.visible=!1,ae[ce]=[_e]}for(var Oe in ae){var Ie=ae[Oe],Xe=Ie[0][0].trace._module;Xe.plot(G,J,i.filterVisible(Ie),X)}J.traceHash=ae},w.plotBasePlot=function(G,J,$,X,re){var ae=t.getModule(G),j=T(J.calcdata,ae)[0];ae.plot(J,j,X,re)},w.cleanBasePlot=function(G,J,$,X,re){var ae=re._has&&re._has(G),j=$._has&&$._has(G);ae&&!j&&re["_"+G+"layer"].selectAll("g.trace").remove()}}}),Bd=Le({"src/constants/xmlns_namespaces.js"(Z){"use strict";Z.xmlns="http://www.w3.org/2000/xmlns/",Z.svg="http://www.w3.org/2000/svg",Z.xlink="http://www.w3.org/1999/xlink",Z.svgAttrs={xmlns:Z.svg,"xmlns:xlink":Z.xlink}}}),eh=Le({"src/constants/alignment.js"(Z,H){"use strict";H.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"}}}}),$l=Le({"src/lib/svg_text_utils.js"(Z){"use strict";var H=Ji(),g=ni(),x=g.strTranslate,A=Bd(),S=eh().LINE_SPACING,e=/([^$]*)([$]+[^$]*[$]+)([^$]*)/;Z.convertToTspans=function(B,I,N){var U=B.text(),W=!B.attr("data-notex")&&I&&I._context.typesetMath&&typeof MathJax<"u"&&U.match(e),Q=H.select(B.node().parentNode);if(Q.empty())return;var le=B.attr("class")?B.attr("class").split(" ")[0]:"text";le+="-math",Q.selectAll("svg."+le).remove(),Q.selectAll("g."+le+"-group").remove(),B.style("display",null).attr({"data-unformatted":U,"data-math":"N"});function se(){Q.empty()||(le=B.attr("class")+"-math",Q.select("svg."+le).remove()),B.text("").style("white-space","pre");var fe=L(B.node(),U);fe&&B.style("pointer-events","all"),Z.positionText(B),N&&N.call(B)}return W?(I&&I._promises||[]).push(new Promise(function(fe){B.style("display","none");var G=parseInt(B.node().style.fontSize,10),J={fontSize:G};n(W[2],J,function($,X,re){Q.selectAll("svg."+le).remove(),Q.selectAll("g."+le+"-group").remove();var ae=$&&$.select("svg");if(!ae||!ae.node()){se(),fe();return}var j=Q.append("g").classed(le+"-group",!0).attr({"pointer-events":"none","data-unformatted":U,"data-math":"Y"});j.node().appendChild(ae.node()),X&&X.node()&&ae.node().insertBefore(X.node().cloneNode(!0),ae.node().firstChild);var ee=re.width,ne=re.height;ae.attr({class:le,height:ne,preserveAspectRatio:"xMinYMin meet"}).style({overflow:"visible","pointer-events":"none"});var ce=B.node().style.fill||"black",_e=ae.select("g");_e.attr({fill:ce,stroke:ce});var we=_e.node().getBoundingClientRect(),Oe=we.width,Ie=we.height;(Oe>ee||Ie>ne)&&(ae.style("overflow","hidden"),we=ae.node().getBoundingClientRect(),Oe=we.width,Ie=we.height);var Xe=+B.attr("x"),tt=+B.attr("y"),rt=G||B.node().getBoundingClientRect().height,Je=-rt/4;if(le[0]==="y")j.attr({transform:"rotate("+[-90,Xe,tt]+")"+x(-Oe/2,Je-Ie/2)});else if(le[0]==="l")tt=Je-Ie/2;else if(le[0]==="a"&&le.indexOf("atitle")!==0)Xe=0,tt=Je;else{var ot=B.attr("text-anchor");Xe=Xe-Oe*(ot==="middle"?.5:ot==="end"?1:0),tt=tt+Je-Ie/2}ae.attr({x:Xe,y:tt}),N&&N.call(B,j),fe(j)})})):se(),B};var t=/(<|&lt;|&#60;)/g,r=/(>|&gt;|&#62;)/g;function o(B){return B.replace(t,"\\lt ").replace(r,"\\gt ")}var i=[["$","$"],["\\(","\\)"]];function n(B,I,N){var U=parseInt((MathJax.version||"").split(".")[0]);if(U!==2&&U!==3){g.warn("No MathJax version:",MathJax.version);return}var W,Q,le,se,fe=function(){return Q=g.extendDeepAll({},MathJax.Hub.config),le=MathJax.Hub.processSectionDelay,MathJax.Hub.processSectionDelay!==void 0&&(MathJax.Hub.processSectionDelay=0),MathJax.Hub.Config({messageStyle:"none",tex2jax:{inlineMath:i},displayAlign:"left"})},G=function(){Q=g.extendDeepAll({},MathJax.config),MathJax.config.tex||(MathJax.config.tex={}),MathJax.config.tex.inlineMath=i},J=function(){if(W=MathJax.Hub.config.menuSettings.renderer,W!=="SVG")return MathJax.Hub.setRenderer("SVG")},$=function(){W=MathJax.config.startup.output,W!=="svg"&&(MathJax.config.startup.output="svg")},X=function(){var ce="math-output-"+g.randstr({},64);se=H.select("body").append("div").attr({id:ce}).style({visibility:"hidden",position:"absolute","font-size":I.fontSize+"px"}).text(o(B));var _e=se.node();return U===2?MathJax.Hub.Typeset(_e):MathJax.typeset([_e])},re=function(){var ce=se.select(U===2?".MathJax_SVG":".MathJax"),_e=!ce.empty()&&se.select("svg").node();if(!_e)g.log("There was an error in the tex syntax.",B),N();else{var we=_e.getBoundingClientRect(),Oe;U===2?Oe=H.select("body").select("#MathJax_SVG_glyphs"):Oe=ce.select("defs"),N(ce,Oe,we)}se.remove()},ae=function(){if(W!=="SVG")return MathJax.Hub.setRenderer(W)},j=function(){W!=="svg"&&(MathJax.config.startup.output=W)},ee=function(){return le!==void 0&&(MathJax.Hub.processSectionDelay=le),MathJax.Hub.Config(Q)},ne=function(){MathJax.config=Q};U===2?MathJax.Hub.Queue(fe,J,X,re,ae,ee):U===3&&(G(),$(),MathJax.startup.defaultReady(),MathJax.startup.promise.then(function(){X(),re(),j(),ne()}))}var a={sup:"font-size:70%",sub:"font-size:70%",s:"text-decoration:line-through",u:"text-decoration:underline",b:"font-weight:bold",i:"font-style:italic",a:"cursor:pointer",span:"",em:"font-style:italic;font-weight:bold"},s={sub:"0.3em",sup:"-0.6em"},c={sub:"-0.21em",sup:"0.42em"},h="\u200B",p=["http:","https:","mailto:","",void 0,":"],d=Z.NEWLINES=/(\r\n?|\n)/g,T=/(<[^<>]*>)/,l=/<(\/?)([^ >]*)(\s+(.*))?>/i,_=/<br(\s+.*)?>/i;Z.BR_TAG_ALL=/<br(\s+.*)?>/gi;var w=/(^|[\s"'])style\s*=\s*("([^"]*);?"|'([^']*);?')/i,M=/(^|[\s"'])href\s*=\s*("([^"]*)"|'([^']*)')/i,E=/(^|[\s"'])target\s*=\s*("([^"\s]*)"|'([^'\s]*)')/i,m=/(^|[\s"'])popup\s*=\s*("([\w=,]*)"|'([\w=,]*)')/i;function b(B,I){if(!B)return null;var N=B.match(I),U=N&&(N[3]||N[4]);return U&&f(U)}var v=/(^|;)\s*color:/;Z.plainText=function(B,I){I=I||{};for(var N=I.len!==void 0&&I.len!==-1?I.len:1/0,U=I.allowedTags!==void 0?I.allowedTags:["br"],W="...",Q=W.length,le=B.split(T),se=[],fe="",G=0,J=0;J<le.length;J++){var $=le[J],X=$.match(l),re=X&&X[2].toLowerCase();if(re)U.indexOf(re)!==-1&&(se.push($),fe=re);else{var ae=$.length;if(G+ae<N)se.push($),G+=ae;else if(G<N){var j=N-G;fe&&(fe!=="br"||j<=Q||ae<=Q)&&se.pop(),N>Q?se.push($.substr(0,j-Q)+W):se.push($.substr(0,j));break}fe=""}}return se.join("")};var u={mu:"\u03BC",amp:"&",lt:"<",gt:">",nbsp:"\xA0",times:"\xD7",plusmn:"\xB1",deg:"\xB0"},y=/&(#\d+|#x[\da-fA-F]+|[a-z]+);/g;function f(B){return B.replace(y,function(I,N){var U;return N.charAt(0)==="#"?U=P(N.charAt(1)==="x"?parseInt(N.substr(2),16):parseInt(N.substr(1),10)):U=u[N],U||I})}Z.convertEntities=f;function P(B){if(!(B>1114111)){var I=String.fromCodePoint;if(I)return I(B);var N=String.fromCharCode;return B<=65535?N(B):N((B>>10)+55232,B%1024+56320)}}function L(B,I){I=I.replace(d," ");var N=!1,U=[],W,Q=-1;function le(){Q++;var Ie=document.createElementNS(A.svg,"tspan");H.select(Ie).attr({class:"line",dy:Q*S+"em"}),B.appendChild(Ie),W=Ie;var Xe=U;if(U=[{node:Ie}],Xe.length>1)for(var tt=1;tt<Xe.length;tt++)se(Xe[tt])}function se(Ie){var Xe=Ie.type,tt={},rt;if(Xe==="a"){rt="a";var Je=Ie.target,ot=Ie.href,Me=Ie.popup;ot&&(tt={"xlink:xlink:show":Je==="_blank"||Je.charAt(0)!=="_"?"new":"replace",target:Je,"xlink:xlink:href":ot},Me&&(tt.onclick='window.open(this.href.baseVal,this.target.baseVal,"'+Me+'");return false;'))}else rt="tspan";Ie.style&&(tt.style=Ie.style);var pe=document.createElementNS(A.svg,rt);if(Xe==="sup"||Xe==="sub"){fe(W,h),W.appendChild(pe);var ue=document.createElementNS(A.svg,"tspan");fe(ue,h),H.select(ue).attr("dy",c[Xe]),tt.dy=s[Xe],W.appendChild(pe),W.appendChild(ue)}else W.appendChild(pe);H.select(pe).attr(tt),W=Ie.node=pe,U.push(Ie)}function fe(Ie,Xe){Ie.appendChild(document.createTextNode(Xe))}function G(Ie){if(U.length===1){g.log("Ignoring unexpected end tag </"+Ie+">.",I);return}var Xe=U.pop();Ie!==Xe.type&&g.log("Start tag <"+Xe.type+"> doesnt match end tag <"+Ie+">. Pretending it did match.",I),W=U[U.length-1].node}var J=_.test(I);J?le():(W=B,U=[{node:B}]);for(var $=I.split(T),X=0;X<$.length;X++){var re=$[X],ae=re.match(l),j=ae&&ae[2].toLowerCase(),ee=a[j];if(j==="br")le();else if(ee===void 0)fe(W,f(re));else if(ae[1])G(j);else{var ne=ae[4],ce={type:j},_e=b(ne,w);if(_e?(_e=_e.replace(v,"$1 fill:"),ee&&(_e+=";"+ee)):ee&&(_e=ee),_e&&(ce.style=_e),j==="a"){N=!0;var we=b(ne,M);if(we){var Oe=z(we);Oe&&(ce.href=Oe,ce.target=b(ne,E)||"_blank",ce.popup=b(ne,m))}}se(ce)}}return N}function z(B){var I=encodeURI(decodeURI(B)),N=document.createElement("a"),U=document.createElement("a");N.href=B,U.href=I;var W=N.protocol,Q=U.protocol;return p.indexOf(W)!==-1&&p.indexOf(Q)!==-1?I:""}Z.sanitizeHTML=function(I){I=I.replace(d," ");for(var N=document.createElement("p"),U=N,W=[],Q=I.split(T),le=0;le<Q.length;le++){var se=Q[le],fe=se.match(l),G=fe&&fe[2].toLowerCase();if(G in a)if(fe[1])W.length&&(U=W.pop());else{var J=fe[4],$=b(J,w),X=$?{style:$}:{};if(G==="a"){var re=b(J,M);if(re){var ae=z(re);if(ae){X.href=ae;var j=b(J,E);j&&(X.target=j)}}}var ee=document.createElement(G);U.appendChild(ee),H.select(ee).attr(X),U=ee,W.push(ee)}else U.appendChild(document.createTextNode(f(se)))}var ne="innerHTML";return N[ne]},Z.lineCount=function(I){return I.selectAll("tspan.line").size()||1},Z.positionText=function(I,N,U){return I.each(function(){var W=H.select(this);function Q(fe,G){return G===void 0?(G=W.attr(fe),G===null&&(W.attr(fe,0),G=0)):W.attr(fe,G),G}var le=Q("x",N),se=Q("y",U);this.nodeName==="text"&&W.selectAll("tspan.line").attr({x:le,y:se})})};function F(B,I,N){var U=N.horizontalAlign,W=N.verticalAlign||"top",Q=B.node().getBoundingClientRect(),le=I.node().getBoundingClientRect(),se,fe,G;return W==="bottom"?fe=function(){return Q.bottom-se.height}:W==="middle"?fe=function(){return Q.top+(Q.height-se.height)/2}:fe=function(){return Q.top},U==="right"?G=function(){return Q.right-se.width}:U==="center"?G=function(){return Q.left+(Q.width-se.width)/2}:G=function(){return Q.left},function(){se=this.node().getBoundingClientRect();var J=G()-le.left,$=fe()-le.top,X=N.gd||{};if(N.gd){X._fullLayout._calcInverseTransform(X);var re=g.apply3DTransform(X._fullLayout._invTransform)(J,$);J=re[0],$=re[1]}return this.style({top:$+"px",left:J+"px","z-index":1e3}),this}}var O="1px ";Z.makeTextShadow=function(B){var I=O,N=O,U=O;return I+N+U+B+", -"+I+"-"+N+U+B+", "+I+"-"+N+U+B+", -"+I+N+U+B},Z.makeEditable=function(B,I){var N=I.gd,U=I.delegate,W=H.dispatch("edit","input","cancel"),Q=U||B;if(B.style({"pointer-events":U?"none":"all"}),B.size()!==1)throw new Error("boo");function le(){fe(),B.style({opacity:0});var G=Q.attr("class"),J;G?J="."+G.split(" ")[0]+"-math-group":J="[class*=-math-group]",J&&H.select(B.node().parentNode).select(J).style({opacity:0})}function se(G){var J=G.node(),$=document.createRange();$.selectNodeContents(J);var X=window.getSelection();X.removeAllRanges(),X.addRange($),J.focus()}function fe(){var G=H.select(N),J=G.select(".svg-container"),$=J.append("div"),X=B.node().style,re=parseFloat(X.fontSize||12),ae=I.text;ae===void 0&&(ae=B.attr("data-unformatted")),$.classed("plugin-editable editable",!0).style({position:"absolute","font-family":X.fontFamily||"Arial","font-size":re,color:I.fill||X.fill||"black",opacity:1,"background-color":I.background||"transparent",outline:"#ffffff33 1px solid",margin:[-re/8+1,0,0,-1].join("px ")+"px",padding:"0","box-sizing":"border-box"}).attr({contenteditable:!0}).text(ae).call(F(B,J,I)).on("blur",function(){N._editing=!1,B.text(this.textContent).style({opacity:1});var j=H.select(this).attr("class"),ee;j?ee="."+j.split(" ")[0]+"-math-group":ee="[class*=-math-group]",ee&&H.select(B.node().parentNode).select(ee).style({opacity:0});var ne=this.textContent;H.select(this).transition().duration(0).remove(),H.select(document).on("mouseup",null),W.edit.call(B,ne)}).on("focus",function(){var j=this;N._editing=!0,H.select(document).on("mouseup",function(){if(H.event.target===j)return!1;document.activeElement===$.node()&&$.node().blur()})}).on("keyup",function(){H.event.which===27?(N._editing=!1,B.style({opacity:1}),H.select(this).style({opacity:0}).on("blur",function(){return!1}).transition().remove(),W.cancel.call(B,this.textContent)):(W.input.call(B,this.textContent),H.select(this).call(F(B,J,I)))}).on("keydown",function(){H.event.which===13&&this.blur()}).call(se)}return I.immediate?le():Q.on("click",le),H.rebind(B,W,"on")}}}),ud=Le({"src/components/colorscale/helpers.js"(Z,H){"use strict";var g=Ji(),x=Vl(),A=zn(),S=ni(),e=$a(),t=lp().isValid;function r(d,T,l){var _=T?S.nestedProperty(d,T).get()||{}:d,w=_[l||"color"];w&&w._inputArray&&(w=w._inputArray);var M=!1;if(S.isArrayOrTypedArray(w)){for(var E=0;E<w.length;E++)if(A(w[E])){M=!0;break}}return S.isPlainObject(_)&&(M||_.showscale===!0||A(_.cmin)&&A(_.cmax)||t(_.colorscale)||S.isPlainObject(_.colorbar))}var o=["showscale","autocolorscale","colorscale","reversescale","colorbar"],i=["min","max","mid","auto"];function n(d){var T=d._colorAx,l=T||d,_={},w,M,E;for(M=0;M<o.length;M++)E=o[M],_[E]=l[E];if(T)for(w="c",M=0;M<i.length;M++)E=i[M],_[E]=l["c"+E];else{var m;for(M=0;M<i.length;M++){if(E=i[M],m="c"+E,m in l){_[E]=l[m];continue}m="z"+E,m in l&&(_[E]=l[m])}w=m.charAt(0)}return _._sync=function(b,v){var u=i.indexOf(b)!==-1?w+b:b;l[u]=l["_"+u]=v},_}function a(d){for(var T=n(d),l=T.min,_=T.max,w=T.reversescale?s(T.colorscale):T.colorscale,M=w.length,E=new Array(M),m=new Array(M),b=0;b<M;b++){var v=w[b];E[b]=l+v[0]*(_-l),m[b]=v[1]}return{domain:E,range:m}}function s(d){for(var T=d.length,l=new Array(T),_=T-1,w=0;_>=0;_--,w++){var M=d[_];l[w]=[1-M[0],M[1]]}return l}function c(d,T){T=T||{};for(var l=d.domain,_=d.range,w=_.length,M=new Array(w),E=0;E<w;E++){var m=x(_[E]).toRgb();M[E]=[m.r,m.g,m.b,m.a]}var b=g.scale.linear().domain(l).range(M).clamp(!0),v=T.noNumericCheck,u=T.returnArray,y;return v&&u?y=b:v?y=function(f){return p(b(f))}:u?y=function(f){return A(f)?b(f):x(f).isValid()?f:e.defaultLine}:y=function(f){return A(f)?p(b(f)):x(f).isValid()?f:e.defaultLine},y.domain=b.domain,y.range=function(){return _},y}function h(d,T){return c(a(d),T)}function p(d){var T={r:d[0],g:d[1],b:d[2],a:d[3]};return x(T).toRgbString()}H.exports={hasColorscale:r,extractOpts:n,extractScale:a,flipScale:s,makeColorScaleFunc:c,makeColorScaleFuncFromTrace:h}}}),Rc=Le({"src/plots/cartesian/axis_format_attributes.js"(Z,H){"use strict";var g=Fw(),x=g.FORMAT_LINK,A=g.DATE_FORMAT_LINK;function S(r,o){return{valType:"string",dflt:"",editType:"none",description:(o?e:t)("hover text",r)+["By default the values are formatted using "+(o?"generic number format":"`"+r+"axis.hoverformat`")+"."].join(" ")}}function e(r,o){return["Sets the "+r+" formatting rule"+(o?"for `"+o+"` ":""),"using d3 formatting mini-languages","which are very similar to those in Python. For numbers, see: "+x+"."].join(" ")}function t(r,o){return e(r,o)+[" And for dates see: "+A+".","We add two items to d3's date formatter:","*%h* for half of the year as a decimal number as well as","*%{n}f* for fractional seconds","with n digits. For example, *2016-10-13 09:15:23.456* with tickformat","*%H~%M~%S.%2f* would display *09~15~23.46*"].join(" ")}H.exports={axisHoverFormat:S,descriptionOnlyNumbers:e,descriptionWithDates:t}}}),Sh=Le({"src/plots/cartesian/layout_attributes.js"(Z,H){"use strict";var g=bl(),x=gf(),A=Ah().dash,S=ho().extendFlat,e=wl().templatedArray,t=Rc().descriptionWithDates,r=$n().ONEDAY,o=ch(),i=o.HOUR_PATTERN,n=o.WEEKDAY_PATTERN,a={valType:"enumerated",values:["auto","linear","array"],editType:"ticks",impliedEdits:{tick0:void 0,dtick:void 0}},s=S({},a,{values:a.values.slice().concat(["sync"])});function c(v){return{valType:"integer",min:0,dflt:v?5:0,editType:"ticks"}}var h={valType:"any",editType:"ticks",impliedEdits:{tickmode:"linear"}},p={valType:"any",editType:"ticks",impliedEdits:{tickmode:"linear"}},d={valType:"data_array",editType:"ticks"},T={valType:"enumerated",values:["outside","inside",""],editType:"ticks"};function l(v){var u={valType:"number",min:0,editType:"ticks"};return v||(u.dflt=5),u}function _(v){var u={valType:"number",min:0,editType:"ticks"};return v||(u.dflt=1),u}var w={valType:"color",dflt:x.defaultLine,editType:"ticks"},M={valType:"color",dflt:x.lightLine,editType:"ticks"};function E(v){var u={valType:"number",min:0,editType:"ticks"};return v||(u.dflt=1),u}var m=S({},A,{editType:"ticks"}),b={valType:"boolean",editType:"ticks"};H.exports={visible:{valType:"boolean",editType:"plot"},color:{valType:"color",dflt:x.defaultLine,editType:"ticks"},title:{text:{valType:"string",editType:"ticks"},font:g({editType:"ticks"}),standoff:{valType:"number",min:0,editType:"ticks"},editType:"ticks"},type:{valType:"enumerated",values:["-","linear","log","date","category","multicategory"],dflt:"-",editType:"calc",_noTemplating:!0},autotypenumbers:{valType:"enumerated",values:["convert types","strict"],dflt:"convert types",editType:"calc"},autorange:{valType:"enumerated",values:[!0,!1,"reversed","min reversed","max reversed","min","max"],dflt:!0,editType:"axrange",impliedEdits:{"range[0]":void 0,"range[1]":void 0}},autorangeoptions:{minallowed:{valType:"any",editType:"plot",impliedEdits:{"range[0]":void 0,"range[1]":void 0}},maxallowed:{valType:"any",editType:"plot",impliedEdits:{"range[0]":void 0,"range[1]":void 0}},clipmin:{valType:"any",editType:"plot",impliedEdits:{"range[0]":void 0,"range[1]":void 0}},clipmax:{valType:"any",editType:"plot",impliedEdits:{"range[0]":void 0,"range[1]":void 0}},include:{valType:"any",arrayOk:!0,editType:"plot",impliedEdits:{"range[0]":void 0,"range[1]":void 0}},editType:"plot"},rangemode:{valType:"enumerated",values:["normal","tozero","nonnegative"],dflt:"normal",editType:"plot"},range:{valType:"info_array",items:[{valType:"any",editType:"axrange",impliedEdits:{"^autorange":!1},anim:!0},{valType:"any",editType:"axrange",impliedEdits:{"^autorange":!1},anim:!0}],editType:"axrange",impliedEdits:{autorange:!1},anim:!0},minallowed:{valType:"any",editType:"plot",impliedEdits:{"^autorange":!1}},maxallowed:{valType:"any",editType:"plot",impliedEdits:{"^autorange":!1}},fixedrange:{valType:"boolean",dflt:!1,editType:"calc"},insiderange:{valType:"info_array",items:[{valType:"any",editType:"plot"},{valType:"any",editType:"plot"}],editType:"plot"},scaleanchor:{valType:"enumerated",values:[o.idRegex.x.toString(),o.idRegex.y.toString(),!1],editType:"plot"},scaleratio:{valType:"number",min:0,dflt:1,editType:"plot"},constrain:{valType:"enumerated",values:["range","domain"],editType:"plot"},constraintoward:{valType:"enumerated",values:["left","center","right","top","middle","bottom"],editType:"plot"},matches:{valType:"enumerated",values:[o.idRegex.x.toString(),o.idRegex.y.toString()],editType:"calc"},rangebreaks:e("rangebreak",{enabled:{valType:"boolean",dflt:!0,editType:"calc"},bounds:{valType:"info_array",items:[{valType:"any",editType:"calc"},{valType:"any",editType:"calc"}],editType:"calc"},pattern:{valType:"enumerated",values:[n,i,""],editType:"calc"},values:{valType:"info_array",freeLength:!0,editType:"calc",items:{valType:"any",editType:"calc"}},dvalue:{valType:"number",editType:"calc",min:0,dflt:r},editType:"calc"}),tickmode:s,nticks:c(),tick0:h,dtick:p,ticklabelstep:{valType:"integer",min:1,dflt:1,editType:"ticks"},tickvals:d,ticktext:{valType:"data_array",editType:"ticks"},ticks:T,tickson:{valType:"enumerated",values:["labels","boundaries"],dflt:"labels",editType:"ticks"},ticklabelmode:{valType:"enumerated",values:["instant","period"],dflt:"instant",editType:"ticks"},ticklabelposition:{valType:"enumerated",values:["outside","inside","outside top","inside top","outside left","inside left","outside right","inside right","outside bottom","inside bottom"],dflt:"outside",editType:"calc"},ticklabeloverflow:{valType:"enumerated",values:["allow","hide past div","hide past domain"],editType:"calc"},ticklabelshift:{valType:"integer",dflt:0,editType:"ticks"},ticklabelstandoff:{valType:"integer",dflt:0,editType:"ticks"},ticklabelindex:{valType:"integer",arrayOk:!0,editType:"calc"},mirror:{valType:"enumerated",values:[!0,"ticks",!1,"all","allticks"],dflt:!1,editType:"ticks+layoutstyle"},ticklen:l(),tickwidth:_(),tickcolor:w,showticklabels:{valType:"boolean",dflt:!0,editType:"ticks"},labelalias:{valType:"any",dflt:!1,editType:"ticks"},automargin:{valType:"flaglist",flags:["height","width","left","right","top","bottom"],extras:[!0,!1],dflt:!1,editType:"ticks"},showspikes:{valType:"boolean",dflt:!1,editType:"modebar"},spikecolor:{valType:"color",dflt:null,editType:"none"},spikethickness:{valType:"number",dflt:3,editType:"none"},spikedash:S({},A,{dflt:"dash",editType:"none"}),spikemode:{valType:"flaglist",flags:["toaxis","across","marker"],dflt:"toaxis",editType:"none"},spikesnap:{valType:"enumerated",values:["data","cursor","hovered data"],dflt:"hovered data",editType:"none"},tickfont:g({editType:"ticks"}),tickangle:{valType:"angle",dflt:"auto",editType:"ticks"},autotickangles:{valType:"info_array",freeLength:!0,items:{valType:"angle"},dflt:[0,30,90],editType:"ticks"},tickprefix:{valType:"string",dflt:"",editType:"ticks"},showtickprefix:{valType:"enumerated",values:["all","first","last","none"],dflt:"all",editType:"ticks"},ticksuffix:{valType:"string",dflt:"",editType:"ticks"},showticksuffix:{valType:"enumerated",values:["all","first","last","none"],dflt:"all",editType:"ticks"},showexponent:{valType:"enumerated",values:["all","first","last","none"],dflt:"all",editType:"ticks"},exponentformat:{valType:"enumerated",values:["none","e","E","power","SI","B"],dflt:"B",editType:"ticks"},minexponent:{valType:"number",dflt:3,min:0,editType:"ticks"},separatethousands:{valType:"boolean",dflt:!1,editType:"ticks"},tickformat:{valType:"string",dflt:"",editType:"ticks",description:t("tick label")},tickformatstops:e("tickformatstop",{enabled:{valType:"boolean",dflt:!0,editType:"ticks"},dtickrange:{valType:"info_array",items:[{valType:"any",editType:"ticks"},{valType:"any",editType:"ticks"}],editType:"ticks"},value:{valType:"string",dflt:"",editType:"ticks"},editType:"ticks"}),hoverformat:{valType:"string",dflt:"",editType:"none",description:t("hover text")},showline:{valType:"boolean",dflt:!1,editType:"ticks+layoutstyle"},linecolor:{valType:"color",dflt:x.defaultLine,editType:"layoutstyle"},linewidth:{valType:"number",min:0,dflt:1,editType:"ticks+layoutstyle"},showgrid:b,gridcolor:M,gridwidth:E(),griddash:m,zeroline:{valType:"boolean",editType:"ticks"},zerolinecolor:{valType:"color",dflt:x.defaultLine,editType:"ticks"},zerolinewidth:{valType:"number",dflt:1,editType:"ticks"},showdividers:{valType:"boolean",dflt:!0,editType:"ticks"},dividercolor:{valType:"color",dflt:x.defaultLine,editType:"ticks"},dividerwidth:{valType:"number",dflt:1,editType:"ticks"},anchor:{valType:"enumerated",values:["free",o.idRegex.x.toString(),o.idRegex.y.toString()],editType:"plot"},side:{valType:"enumerated",values:["top","bottom","left","right"],editType:"plot"},overlaying:{valType:"enumerated",values:["free",o.idRegex.x.toString(),o.idRegex.y.toString()],editType:"plot"},minor:{tickmode:a,nticks:c("minor"),tick0:h,dtick:p,tickvals:d,ticks:T,ticklen:l("minor"),tickwidth:_("minor"),tickcolor:w,gridcolor:M,gridwidth:E("minor"),griddash:m,showgrid:b,editType:"ticks"},layer:{valType:"enumerated",values:["above traces","below traces"],dflt:"above traces",editType:"plot"},domain:{valType:"info_array",items:[{valType:"number",min:0,max:1,editType:"plot"},{valType:"number",min:0,max:1,editType:"plot"}],dflt:[0,1],editType:"plot"},position:{valType:"number",min:0,max:1,dflt:0,editType:"plot"},autoshift:{valType:"boolean",dflt:!1,editType:"plot"},shift:{valType:"number",editType:"plot"},categoryorder:{valType:"enumerated",values:["trace","category ascending","category descending","array","total ascending","total descending","min ascending","min descending","max ascending","max descending","sum ascending","sum descending","mean ascending","mean descending","geometric mean ascending","geometric mean descending","median ascending","median descending"],dflt:"trace",editType:"calc"},categoryarray:{valType:"data_array",editType:"calc"},uirevision:{valType:"any",editType:"none"},editType:"calc"}}}),x_=Le({"src/components/colorbar/attributes.js"(Z,H){"use strict";var g=Sh(),x=bl(),A=ho().extendFlat,S=qu().overrideAll;H.exports=S({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:g.linecolor,outlinewidth:g.linewidth,bordercolor:g.linecolor,borderwidth:{valType:"number",min:0,dflt:0},bgcolor:{valType:"color",dflt:"rgba(0,0,0,0)"},tickmode:g.minor.tickmode,nticks:g.nticks,tick0:g.tick0,dtick:g.dtick,tickvals:g.tickvals,ticktext:g.ticktext,ticks:A({},g.ticks,{dflt:""}),ticklabeloverflow:A({},g.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:g.ticklen,tickwidth:g.tickwidth,tickcolor:g.tickcolor,ticklabelstep:g.ticklabelstep,showticklabels:g.showticklabels,labelalias:g.labelalias,tickfont:x({}),tickangle:g.tickangle,tickformat:g.tickformat,tickformatstops:g.tickformatstops,tickprefix:g.tickprefix,showtickprefix:g.showtickprefix,ticksuffix:g.ticksuffix,showticksuffix:g.showticksuffix,separatethousands:g.separatethousands,exponentformat:g.exponentformat,minexponent:g.minexponent,showexponent:g.showexponent,title:{text:{valType:"string"},font:x({}),side:{valType:"enumerated",values:["right","top","bottom"]}}},"colorbars","from-root")}}),uu=Le({"src/components/colorscale/attributes.js"(Z,H){"use strict";var g=x_(),x=no().counter,A=Up(),S=lp().scales,e=A(S);function t(r){return"`"+r+"`"}H.exports=function(o,i){o=o||"",i=i||{};var n=i.cLetter||"c",a="onlyIfNumerical"in i?i.onlyIfNumerical:!!o,s="noScale"in i?i.noScale:o==="marker.line",c="showScaleDflt"in i?i.showScaleDflt:n==="z",h=typeof i.colorscaleDflt=="string"?S[i.colorscaleDflt]:null,p=i.editTypeOverride||"",d=o?o+".":"",T,l;"colorAttr"in i?(T=i.colorAttr,l=i.colorAttr):(T={z:"z",c:"color"}[n],l="in "+t(d+T));var _=a?" Has an effect only if "+l+" is set to a numerical array.":"",w=n+"auto",M=n+"min",E=n+"max",m=n+"mid",b=t(d+w),v=t(d+M),u=t(d+E),y=v+" and "+u,f={};f[M]=f[E]=void 0;var P={};P[w]=!1;var L={};return T==="color"&&(L.color={valType:"color",arrayOk:!0,editType:p||"style"},i.anim&&(L.color.anim=!0)),L[w]={valType:"boolean",dflt:!0,editType:"calc",impliedEdits:f},L[M]={valType:"number",dflt:null,editType:p||"plot",impliedEdits:P},L[E]={valType:"number",dflt:null,editType:p||"plot",impliedEdits:P},L[m]={valType:"number",dflt:null,editType:"calc",impliedEdits:f},L.colorscale={valType:"colorscale",editType:"calc",dflt:h,impliedEdits:{autocolorscale:!1}},L.autocolorscale={valType:"boolean",dflt:i.autoColorDflt!==!1,editType:"calc",impliedEdits:{colorscale:void 0}},L.reversescale={valType:"boolean",dflt:!1,editType:"plot"},s||(L.showscale={valType:"boolean",dflt:c,editType:"calc"},L.colorbar=g),i.noColorAxis||(L.coloraxis={valType:"subplotid",regex:x("coloraxis"),dflt:null,editType:"calc"}),L}}}),jw=Le({"src/components/colorscale/layout_attributes.js"(Z,H){"use strict";var g=ho().extendFlat,x=uu(),A=lp().scales;H.exports={editType:"calc",colorscale:{editType:"calc",sequential:{valType:"colorscale",dflt:A.Reds,editType:"calc"},sequentialminus:{valType:"colorscale",dflt:A.Blues,editType:"calc"},diverging:{valType:"colorscale",dflt:A.RdBu,editType:"calc"}},coloraxis:g({_isSubplotObj:!0,editType:"calc"},x("",{colorAttr:"corresponding trace color array(s)",noColorAxis:!0,showScaleDflt:!0}))}}}),Vw=Le({"src/components/colorbar/has_colorbar.js"(Z,H){"use strict";var g=ni();H.exports=function(A){return g.isPlainObject(A.colorbar)}}}),qw=Le({"src/plots/cartesian/clean_ticks.js"(Z){"use strict";var H=zn(),g=ni(),x=$n(),A=x.ONEDAY,S=x.ONEWEEK;Z.dtick=function(e,t){var r=t==="log",o=t==="date",i=t==="category",n=o?A:1;if(!e)return n;if(H(e))return e=Number(e),e<=0?n:i?Math.max(1,Math.round(e)):o?Math.max(.1,e):e;if(typeof e!="string"||!(o||r))return n;var a=e.charAt(0),s=e.substr(1);return s=H(s)?Number(s):0,s<=0||!(o&&a==="M"&&s===Math.round(s)||r&&a==="L"||r&&a==="D"&&(s===1||s===2))?n:e},Z.tick0=function(e,t,r,o){if(t==="date")return g.cleanDate(e,g.dateTick0(r,o%S===0?1:0));if(!(o==="D1"||o==="D2"))return H(e)?Number(e):0}}}),Nm=Le({"src/plots/cartesian/tick_value_defaults.js"(Z,H){"use strict";var g=qw(),x=ni().isArrayOrTypedArray,A=cl().isTypedArraySpec,S=cl().decodeTypedArraySpec;H.exports=function(t,r,o,i,n){n||(n={});var a=n.isMinor,s=a?t.minor||{}:t,c=a?r.minor:r,h=a?"minor.":"";function p(m){var b=s[m];return A(b)&&(b=S(b)),b!==void 0?b:(c._template||{})[m]}var d=p("tick0"),T=p("dtick"),l=p("tickvals"),_=x(l)?"array":T?"linear":"auto",w=o(h+"tickmode",_);if(w==="auto"||w==="sync")o(h+"nticks");else if(w==="linear"){var M=c.dtick=g.dtick(T,i);c.tick0=g.tick0(d,i,r.calendar,M)}else if(i!=="multicategory"){var E=o(h+"tickvals");E===void 0?c.tickmode="auto":a||o("ticktext")}}}}),Zg=Le({"src/plots/cartesian/tick_mark_defaults.js"(Z,H){"use strict";var g=ni(),x=Sh();H.exports=function(S,e,t,r){var o=r.isMinor,i=o?S.minor||{}:S,n=o?e.minor:e,a=o?x.minor:x,s=o?"minor.":"",c=g.coerce2(i,n,a,"ticklen",o?(e.ticklen||5)*.6:void 0),h=g.coerce2(i,n,a,"tickwidth",o?e.tickwidth||1:void 0),p=g.coerce2(i,n,a,"tickcolor",(o?e.tickcolor:void 0)||n.color),d=t(s+"ticks",!o&&r.outerTicks||c||h||p?"outside":"");d||(delete n.ticklen,delete n.tickwidth,delete n.tickcolor)}}}),Hw=Le({"src/plots/cartesian/show_dflt.js"(Z,H){"use strict";H.exports=function(x){var A=["showexponent","showtickprefix","showticksuffix"],S=A.filter(function(t){return x[t]!==void 0}),e=function(t){return x[t]===x[S[0]]};if(S.every(e)||S.length===1)return x[S[0]]}}}),Nh=Le({"src/plots/array_container_defaults.js"(Z,H){"use strict";var g=ni(),x=wl();H.exports=function(S,e,t){var r=t.name,o=t.inclusionAttr||"visible",i=e[r],n=g.isArrayOrTypedArray(S[r])?S[r]:[],a=e[r]=[],s=x.arrayTemplater(e,r,o),c,h;for(c=0;c<n.length;c++){var p=n[c];g.isPlainObject(p)?h=s.newItem(p):(h=s.newItem({}),h[o]=!1),h._index=c,h[o]!==!1&&t.handleItemDefaults(p,h,e,t),a.push(h)}var d=s.defaultItems();for(c=0;c<d.length;c++)h=d[c],h._index=a.length,t.handleItemDefaults({},h,e,t,{}),a.push(h);if(g.isArrayOrTypedArray(i)){var T=Math.min(i.length,a.length);for(c=0;c<T;c++)g.relinkPrivateKeys(a[c],i[c])}return a}}}),Vp=Le({"src/plots/cartesian/tick_label_defaults.js"(Z,H){"use strict";var g=ni(),x=$a().contrast,A=Sh(),S=Hw(),e=Nh();H.exports=function(o,i,n,a,s){s||(s={});var c=n("labelalias");g.isPlainObject(c)||delete i.labelalias;var h=S(o),p=n("showticklabels");if(p){s.noTicklabelshift||n("ticklabelshift"),s.noTicklabelstandoff||n("ticklabelstandoff");var d=s.font||{},T=i.color,l=i.ticklabelposition||"",_=l.indexOf("inside")!==-1?x(s.bgColor):T&&T!==A.color.dflt?T:d.color;if(g.coerceFont(n,"tickfont",d,{overrideDflt:{color:_}}),!s.noTicklabelstep&&a!=="multicategory"&&a!=="log"&&n("ticklabelstep"),!s.noAng){var w=n("tickangle");!s.noAutotickangles&&w==="auto"&&n("autotickangles")}if(a!=="category"){var M=n("tickformat");e(o,i,{name:"tickformatstops",inclusionAttr:"enabled",handleItemDefaults:t}),i.tickformatstops.length||delete i.tickformatstops,!s.noExp&&!M&&a!=="date"&&(n("showexponent",h),n("exponentformat"),n("minexponent"),n("separatethousands"))}}};function t(r,o){function i(a,s){return g.coerce(r,o,A.tickformatstops,a,s)}var n=i("enabled");n&&(i("dtickrange"),i("value"))}}}),qp=Le({"src/plots/cartesian/prefix_suffix_defaults.js"(Z,H){"use strict";var g=Hw();H.exports=function(A,S,e,t,r){r||(r={});var o=r.tickSuffixDflt,i=g(A),n=e("tickprefix");n&&e("showtickprefix",i);var a=e("ticksuffix",o);a&&e("showticksuffix",i)}}}),Gw=Le({"src/components/colorbar/defaults.js"(Z,H){"use strict";var g=ni(),x=wl(),A=Nm(),S=Zg(),e=Vp(),t=qp(),r=x_();H.exports=function(i,n,a){var s=x.newContainer(n,"colorbar"),c=i.colorbar||{};function h(I,N){return g.coerce(c,s,r,I,N)}var p=a.margin||{t:0,b:0,l:0,r:0},d=a.width-p.l-p.r,T=a.height-p.t-p.b,l=h("orientation"),_=l==="v",w=h("thicknessmode");h("thickness",w==="fraction"?30/(_?d:T):30);var M=h("lenmode");h("len",M==="fraction"?1:_?T:d);var E=h("yref"),m=h("xref"),b=E==="paper",v=m==="paper",u,y,f,P="left";_?(f="middle",P=v?"left":"right",u=v?1.02:1,y=.5):(f=b?"bottom":"top",P="center",u=.5,y=b?1.02:1),g.coerce(c,s,{x:{valType:"number",min:v?-2:0,max:v?3:1,dflt:u}},"x"),g.coerce(c,s,{y:{valType:"number",min:b?-2:0,max:b?3:1,dflt:y}},"y"),h("xanchor",P),h("xpad"),h("yanchor",f),h("ypad"),g.noneOrAll(c,s,["x","y"]),h("outlinecolor"),h("outlinewidth"),h("bordercolor"),h("borderwidth"),h("bgcolor");var L=g.coerce(c,s,{ticklabelposition:{valType:"enumerated",dflt:"outside",values:_?["outside","inside","outside top","inside top","outside bottom","inside bottom"]:["outside","inside","outside left","inside left","outside right","inside right"]}},"ticklabelposition");h("ticklabeloverflow",L.indexOf("inside")!==-1?"hide past domain":"hide past div"),A(c,s,h,"linear");var z=a.font,F={noAutotickangles:!0,noTicklabelshift:!0,noTicklabelstandoff:!0,outerTicks:!1,font:z};L.indexOf("inside")!==-1&&(F.bgColor="black"),t(c,s,h,"linear",F),e(c,s,h,"linear",F),S(c,s,h,"linear",F),h("title.text",a._dfltTitle.colorbar);var O=s.showticklabels?s.tickfont:z,B=g.extendFlat({},z,{family:O.family,size:g.bigFont(O.size)});g.coerceFont(h,"title.font",B),h("title.side",_?"top":"right")}}}),th=Le({"src/components/colorscale/defaults.js"(Z,H){"use strict";var g=zn(),x=ni(),A=Vw(),S=Gw(),e=lp().isValid,t=so().traceIs;function r(o,i){var n=i.slice(0,i.length-1);return i?x.nestedProperty(o,n).get()||{}:o}H.exports=function o(i,n,a,s,c){var h=c.prefix,p=c.cLetter,d="_module"in n,T=r(i,h),l=r(n,h),_=r(n._template||{},h)||{},w=function(){return delete i.coloraxis,delete n.coloraxis,o(i,n,a,s,c)};if(d){var M=a._colorAxes||{},E=s(h+"coloraxis");if(E){var m=t(n,"contour")&&x.nestedProperty(n,"contours.coloring").get()||"heatmap",b=M[E];b?(b[2].push(w),b[0]!==m&&(b[0]=!1,x.warn(["Ignoring coloraxis:",E,"setting","as it is linked to incompatible colorscales."].join(" ")))):M[E]=[m,n,[w]];return}}var v=T[p+"min"],u=T[p+"max"],y=g(v)&&g(u)&&v<u,f=s(h+p+"auto",!y);f?s(h+p+"mid"):(s(h+p+"min"),s(h+p+"max"));var P=T.colorscale,L=_.colorscale,z;if(P!==void 0&&(z=!e(P)),L!==void 0&&(z=!e(L)),s(h+"autocolorscale",z),s(h+"colorscale"),s(h+"reversescale"),h!=="marker.line."){var F;h&&d&&(F=A(T));var O=s(h+"showscale",F);O&&(h&&_&&(l._template=_),S(T,l,a))}}}}),SE=Le({"src/components/colorscale/layout_defaults.js"(Z,H){"use strict";var g=ni(),x=wl(),A=jw(),S=th();H.exports=function(t,r){function o(d,T){return g.coerce(t,r,A,d,T)}o("colorscale.sequential"),o("colorscale.sequentialminus"),o("colorscale.diverging");var i=r._colorAxes,n,a;function s(d,T){return g.coerce(n,a,A.coloraxis,d,T)}for(var c in i){var h=i[c];if(h[0])n=t[c]||{},a=x.newContainer(r,c,"coloraxis"),a._name=c,S(n,a,r,s,{prefix:"",cLetter:"c"});else{for(var p=0;p<h[2].length;p++)h[2][p]();delete r._colorAxes[c]}}}}}),EE=Le({"src/components/colorscale/cross_trace_defaults.js"(Z,H){"use strict";var g=ni(),x=ud().hasColorscale,A=ud().extractOpts;H.exports=function(e,t){function r(h,p){var d=h["_"+p];d!==void 0&&(h[p]=d)}function o(h,p){var d=p.container?g.nestedProperty(h,p.container).get():h;if(d)if(d.coloraxis)d._colorAx=t[d.coloraxis];else{var T=A(d),l=T.auto;(l||T.min===void 0)&&r(d,p.min),(l||T.max===void 0)&&r(d,p.max),T.autocolorscale&&r(d,"colorscale")}}for(var i=0;i<e.length;i++){var n=e[i],a=n._module.colorbar;if(a)if(Array.isArray(a))for(var s=0;s<a.length;s++)o(n,a[s]);else o(n,a);x(n,"marker.line")&&o(n,{container:"marker.line",min:"cmin",max:"cmax"})}for(var c in t._colorAxes)o(t[c],{min:"cmin",max:"cmax"})}}}),cd=Le({"src/components/colorscale/calc.js"(Z,H){"use strict";var g=zn(),x=ni(),A=ud().extractOpts;H.exports=function(e,t,r){var o=e._fullLayout,i=r.vals,n=r.containerStr,a=n?x.nestedProperty(t,n).get():t,s=A(a),c=s.auto!==!1,h=s.min,p=s.max,d=s.mid,T=function(){return x.aggNums(Math.min,null,i)},l=function(){return x.aggNums(Math.max,null,i)};if(h===void 0?h=T():c&&(a._colorAx&&g(h)?h=Math.min(h,T()):h=T()),p===void 0?p=l():c&&(a._colorAx&&g(p)?p=Math.max(p,l()):p=l()),c&&d!==void 0&&(p-d>d-h?h=d-(p-d):p-d<d-h&&(p=d+(d-h))),h===p&&(h-=.5,p+=.5),s._sync("min",h),s._sync("max",p),s.autocolorscale){var _;h*p<0?_=o.colorscale.diverging:h>=0?_=o.colorscale.sequential:_=o.colorscale.sequentialminus,s._sync("colorscale",_)}}}}),Cu=Le({"src/components/colorscale/index.js"(Z,H){"use strict";var g=lp(),x=ud();H.exports={moduleType:"component",name:"colorscale",attributes:uu(),layoutAttributes:jw(),supplyLayoutDefaults:SE(),handleDefaults:th(),crossTraceDefaults:EE(),calc:cd(),scales:g.scales,defaultScale:g.defaultScale,getScale:g.get,isValidScale:g.isValid,hasColorscale:x.hasColorscale,extractOpts:x.extractOpts,extractScale:x.extractScale,flipScale:x.flipScale,makeColorScaleFunc:x.makeColorScaleFunc,makeColorScaleFuncFromTrace:x.makeColorScaleFuncFromTrace}}}),gu=Le({"src/traces/scatter/subtypes.js"(Z,H){"use strict";var g=ni(),x=cl().isTypedArraySpec;H.exports={hasLines:function(A){return A.visible&&A.mode&&A.mode.indexOf("lines")!==-1},hasMarkers:function(A){return A.visible&&(A.mode&&A.mode.indexOf("markers")!==-1||A.type==="splom")},hasText:function(A){return A.visible&&A.mode&&A.mode.indexOf("text")!==-1},isBubble:function(A){var S=A.marker;return g.isPlainObject(S)&&(g.isArrayOrTypedArray(S.size)||x(S.size))}}}}),Yg=Le({"src/traces/scatter/make_bubble_size_func.js"(Z,H){"use strict";var g=zn();H.exports=function(A,S){S||(S=2);var e=A.marker,t=e.sizeref||1,r=e.sizemin||0,o=e.sizemode==="area"?function(i){return Math.sqrt(i/t)}:function(i){return i/t};return function(i){var n=o(i/S);return g(n)&&n>0?Math.max(n,r):0}}}}),Td=Le({"src/components/fx/helpers.js"(Z){"use strict";var H=ni();Z.getSubplot=function(t){return t.subplot||t.xaxis+t.yaxis||t.geo},Z.isTraceInSubplots=function(t,r){if(t.type==="splom"){for(var o=t.xaxes||[],i=t.yaxes||[],n=0;n<o.length;n++)for(var a=0;a<i.length;a++)if(r.indexOf(o[n]+i[a])!==-1)return!0;return!1}return r.indexOf(Z.getSubplot(t))!==-1},Z.flat=function(t,r){for(var o=new Array(t.length),i=0;i<t.length;i++)o[i]=r;return o},Z.p2c=function(t,r){for(var o=new Array(t.length),i=0;i<t.length;i++)o[i]=t[i].p2c(r);return o},Z.getDistanceFunction=function(t,r,o,i){return t==="closest"?i||Z.quadrature(r,o):t.charAt(0)==="x"?r:o},Z.getClosest=function(t,r,o){if(o.index!==!1)o.index>=0&&o.index<t.length?o.distance=0:o.index=!1;else for(var i=1/0,n=t.length,a=0;a<n;a++)i=r(t[a]),i<=o.distance&&(o.index=a,o.distance=i);return o},Z.inbox=function(t,r,o){return t*r<0||t===0?o:1/0},Z.quadrature=function(t,r){return function(o){var i=t(o),n=r(o);return Math.sqrt(i*i+n*n)}},Z.makeEventData=function(t,r,o){var i="index"in t?t.index:t.pointNumber,n={data:r._input,fullData:r,curveNumber:r.index,pointNumber:i};if(r._indexToPoints){var a=r._indexToPoints[i];a.length===1?n.pointIndex=a[0]:n.pointIndices=a}else n.pointIndex=i;return r._module.eventData?n=r._module.eventData(n,t,r,o,i):("xVal"in t?n.x=t.xVal:"x"in t&&(n.x=t.x),"yVal"in t?n.y=t.yVal:"y"in t&&(n.y=t.y),t.xa&&(n.xaxis=t.xa),t.ya&&(n.yaxis=t.ya),t.zLabelVal!==void 0&&(n.z=t.zLabelVal)),Z.appendArrayPointValue(n,r,i),n},Z.appendArrayPointValue=function(t,r,o){var i=r._arrayAttrs;if(i)for(var n=0;n<i.length;n++){var a=i[n],s=x(a);if(t[s]===void 0){var c=H.nestedProperty(r,a).get(),h=A(c,o);h!==void 0&&(t[s]=h)}}},Z.appendArrayMultiPointValues=function(t,r,o){var i=r._arrayAttrs;if(i)for(var n=0;n<i.length;n++){var a=i[n],s=x(a);if(t[s]===void 0){for(var c=H.nestedProperty(r,a).get(),h=new Array(o.length),p=0;p<o.length;p++)h[p]=A(c,o[p]);t[s]=h}}};var g={ids:"id",locations:"location",labels:"label",values:"value","marker.colors":"color",parents:"parent"};function x(t){return g[t]||t}function A(t,r){if(Array.isArray(r)){if(Array.isArray(t)&&Array.isArray(t[r[0]]))return t[r[0]][r[1]]}else return t[r]}var S={x:!0,y:!0},e={"x unified":!0,"y unified":!0};Z.isUnifiedHover=function(t){return typeof t!="string"?!1:!!e[t]},Z.isXYhover=function(t){return typeof t!="string"?!1:!!S[t]}}}),oy=Le({"node_modules/parse-svg-path/index.js"(Z,H){H.exports=A;var g={a:7,c:6,h:1,l:2,m:2,q:4,s:4,t:2,v:1,z:0},x=/([astvzqmhlc])([^astvzqmhlc]*)/ig;function A(t){var r=[];return t.replace(x,function(o,i,n){var a=i.toLowerCase();for(n=e(n),a=="m"&&n.length>2&&(r.push([i].concat(n.splice(0,2))),a="l",i=i=="m"?"l":"L");;){if(n.length==g[a])return n.unshift(i),r.push(n);if(n.length<g[a])throw new Error("malformed path data");r.push([i].concat(n.splice(0,g[a])))}}),r}var S=/-?[0-9]*\.?[0-9]+(?:e[-+]?\d+)?/ig;function e(t){var r=t.match(S);return r?r.map(Number):[]}}}),kE=Le({"src/components/drawing/symbol_defs.js"(Z,H){"use strict";var g=oy(),x=function(p,d){return d?Math.round(p*(d=Math.pow(10,d)))/d:Math.round(p)},A="M0,0Z",S=Math.sqrt(2),e=Math.sqrt(3),t=Math.PI,r=Math.cos,o=Math.sin;H.exports={circle:{n:0,f:function(p,d,T){if(i(d))return A;var l=x(p,2),_="M"+l+",0A"+l+","+l+" 0 1,1 0,-"+l+"A"+l+","+l+" 0 0,1 "+l+",0Z";return T?h(d,T,_):_}},square:{n:1,f:function(p,d,T){if(i(d))return A;var l=x(p,2);return h(d,T,"M"+l+","+l+"H-"+l+"V-"+l+"H"+l+"Z")}},diamond:{n:2,f:function(p,d,T){if(i(d))return A;var l=x(p*1.3,2);return h(d,T,"M"+l+",0L0,"+l+"L-"+l+",0L0,-"+l+"Z")}},cross:{n:3,f:function(p,d,T){if(i(d))return A;var l=x(p*.4,2),_=x(p*1.2,2);return h(d,T,"M"+_+","+l+"H"+l+"V"+_+"H-"+l+"V"+l+"H-"+_+"V-"+l+"H-"+l+"V-"+_+"H"+l+"V-"+l+"H"+_+"Z")}},x:{n:4,f:function(p,d,T){if(i(d))return A;var l=x(p*.8/S,2),_="l"+l+","+l,w="l"+l+",-"+l,M="l-"+l+",-"+l,E="l-"+l+","+l;return h(d,T,"M0,"+l+_+w+M+w+M+E+M+E+_+E+_+"Z")}},"triangle-up":{n:5,f:function(p,d,T){if(i(d))return A;var l=x(p*2/e,2),_=x(p/2,2),w=x(p,2);return h(d,T,"M-"+l+","+_+"H"+l+"L0,-"+w+"Z")}},"triangle-down":{n:6,f:function(p,d,T){if(i(d))return A;var l=x(p*2/e,2),_=x(p/2,2),w=x(p,2);return h(d,T,"M-"+l+",-"+_+"H"+l+"L0,"+w+"Z")}},"triangle-left":{n:7,f:function(p,d,T){if(i(d))return A;var l=x(p*2/e,2),_=x(p/2,2),w=x(p,2);return h(d,T,"M"+_+",-"+l+"V"+l+"L-"+w+",0Z")}},"triangle-right":{n:8,f:function(p,d,T){if(i(d))return A;var l=x(p*2/e,2),_=x(p/2,2),w=x(p,2);return h(d,T,"M-"+_+",-"+l+"V"+l+"L"+w+",0Z")}},"triangle-ne":{n:9,f:function(p,d,T){if(i(d))return A;var l=x(p*.6,2),_=x(p*1.2,2);return h(d,T,"M-"+_+",-"+l+"H"+l+"V"+_+"Z")}},"triangle-se":{n:10,f:function(p,d,T){if(i(d))return A;var l=x(p*.6,2),_=x(p*1.2,2);return h(d,T,"M"+l+",-"+_+"V"+l+"H-"+_+"Z")}},"triangle-sw":{n:11,f:function(p,d,T){if(i(d))return A;var l=x(p*.6,2),_=x(p*1.2,2);return h(d,T,"M"+_+","+l+"H-"+l+"V-"+_+"Z")}},"triangle-nw":{n:12,f:function(p,d,T){if(i(d))return A;var l=x(p*.6,2),_=x(p*1.2,2);return h(d,T,"M-"+l+","+_+"V-"+l+"H"+_+"Z")}},pentagon:{n:13,f:function(p,d,T){if(i(d))return A;var l=x(p*.951,2),_=x(p*.588,2),w=x(-p,2),M=x(p*-.309,2),E=x(p*.809,2);return h(d,T,"M"+l+","+M+"L"+_+","+E+"H-"+_+"L-"+l+","+M+"L0,"+w+"Z")}},hexagon:{n:14,f:function(p,d,T){if(i(d))return A;var l=x(p,2),_=x(p/2,2),w=x(p*e/2,2);return h(d,T,"M"+w+",-"+_+"V"+_+"L0,"+l+"L-"+w+","+_+"V-"+_+"L0,-"+l+"Z")}},hexagon2:{n:15,f:function(p,d,T){if(i(d))return A;var l=x(p,2),_=x(p/2,2),w=x(p*e/2,2);return h(d,T,"M-"+_+","+w+"H"+_+"L"+l+",0L"+_+",-"+w+"H-"+_+"L-"+l+",0Z")}},octagon:{n:16,f:function(p,d,T){if(i(d))return A;var l=x(p*.924,2),_=x(p*.383,2);return h(d,T,"M-"+_+",-"+l+"H"+_+"L"+l+",-"+_+"V"+_+"L"+_+","+l+"H-"+_+"L-"+l+","+_+"V-"+_+"Z")}},star:{n:17,f:function(p,d,T){if(i(d))return A;var l=p*1.4,_=x(l*.225,2),w=x(l*.951,2),M=x(l*.363,2),E=x(l*.588,2),m=x(-l,2),b=x(l*-.309,2),v=x(l*.118,2),u=x(l*.809,2),y=x(l*.382,2);return h(d,T,"M"+_+","+b+"H"+w+"L"+M+","+v+"L"+E+","+u+"L0,"+y+"L-"+E+","+u+"L-"+M+","+v+"L-"+w+","+b+"H-"+_+"L0,"+m+"Z")}},hexagram:{n:18,f:function(p,d,T){if(i(d))return A;var l=x(p*.66,2),_=x(p*.38,2),w=x(p*.76,2);return h(d,T,"M-"+w+",0l-"+_+",-"+l+"h"+w+"l"+_+",-"+l+"l"+_+","+l+"h"+w+"l-"+_+","+l+"l"+_+","+l+"h-"+w+"l-"+_+","+l+"l-"+_+",-"+l+"h-"+w+"Z")}},"star-triangle-up":{n:19,f:function(p,d,T){if(i(d))return A;var l=x(p*e*.8,2),_=x(p*.8,2),w=x(p*1.6,2),M=x(p*4,2),E="A "+M+","+M+" 0 0 1 ";return h(d,T,"M-"+l+","+_+E+l+","+_+E+"0,-"+w+E+"-"+l+","+_+"Z")}},"star-triangle-down":{n:20,f:function(p,d,T){if(i(d))return A;var l=x(p*e*.8,2),_=x(p*.8,2),w=x(p*1.6,2),M=x(p*4,2),E="A "+M+","+M+" 0 0 1 ";return h(d,T,"M"+l+",-"+_+E+"-"+l+",-"+_+E+"0,"+w+E+l+",-"+_+"Z")}},"star-square":{n:21,f:function(p,d,T){if(i(d))return A;var l=x(p*1.1,2),_=x(p*2,2),w="A "+_+","+_+" 0 0 1 ";return h(d,T,"M-"+l+",-"+l+w+"-"+l+","+l+w+l+","+l+w+l+",-"+l+w+"-"+l+",-"+l+"Z")}},"star-diamond":{n:22,f:function(p,d,T){if(i(d))return A;var l=x(p*1.4,2),_=x(p*1.9,2),w="A "+_+","+_+" 0 0 1 ";return h(d,T,"M-"+l+",0"+w+"0,"+l+w+l+",0"+w+"0,-"+l+w+"-"+l+",0Z")}},"diamond-tall":{n:23,f:function(p,d,T){if(i(d))return A;var l=x(p*.7,2),_=x(p*1.4,2);return h(d,T,"M0,"+_+"L"+l+",0L0,-"+_+"L-"+l+",0Z")}},"diamond-wide":{n:24,f:function(p,d,T){if(i(d))return A;var l=x(p*1.4,2),_=x(p*.7,2);return h(d,T,"M0,"+_+"L"+l+",0L0,-"+_+"L-"+l+",0Z")}},hourglass:{n:25,f:function(p,d,T){if(i(d))return A;var l=x(p,2);return h(d,T,"M"+l+","+l+"H-"+l+"L"+l+",-"+l+"H-"+l+"Z")},noDot:!0},bowtie:{n:26,f:function(p,d,T){if(i(d))return A;var l=x(p,2);return h(d,T,"M"+l+","+l+"V-"+l+"L-"+l+","+l+"V-"+l+"Z")},noDot:!0},"circle-cross":{n:27,f:function(p,d,T){if(i(d))return A;var l=x(p,2);return h(d,T,"M0,"+l+"V-"+l+"M"+l+",0H-"+l+"M"+l+",0A"+l+","+l+" 0 1,1 0,-"+l+"A"+l+","+l+" 0 0,1 "+l+",0Z")},needLine:!0,noDot:!0},"circle-x":{n:28,f:function(p,d,T){if(i(d))return A;var l=x(p,2),_=x(p/S,2);return h(d,T,"M"+_+","+_+"L-"+_+",-"+_+"M"+_+",-"+_+"L-"+_+","+_+"M"+l+",0A"+l+","+l+" 0 1,1 0,-"+l+"A"+l+","+l+" 0 0,1 "+l+",0Z")},needLine:!0,noDot:!0},"square-cross":{n:29,f:function(p,d,T){if(i(d))return A;var l=x(p,2);return h(d,T,"M0,"+l+"V-"+l+"M"+l+",0H-"+l+"M"+l+","+l+"H-"+l+"V-"+l+"H"+l+"Z")},needLine:!0,noDot:!0},"square-x":{n:30,f:function(p,d,T){if(i(d))return A;var l=x(p,2);return h(d,T,"M"+l+","+l+"L-"+l+",-"+l+"M"+l+",-"+l+"L-"+l+","+l+"M"+l+","+l+"H-"+l+"V-"+l+"H"+l+"Z")},needLine:!0,noDot:!0},"diamond-cross":{n:31,f:function(p,d,T){if(i(d))return A;var l=x(p*1.3,2);return h(d,T,"M"+l+",0L0,"+l+"L-"+l+",0L0,-"+l+"ZM0,-"+l+"V"+l+"M-"+l+",0H"+l)},needLine:!0,noDot:!0},"diamond-x":{n:32,f:function(p,d,T){if(i(d))return A;var l=x(p*1.3,2),_=x(p*.65,2);return h(d,T,"M"+l+",0L0,"+l+"L-"+l+",0L0,-"+l+"ZM-"+_+",-"+_+"L"+_+","+_+"M-"+_+","+_+"L"+_+",-"+_)},needLine:!0,noDot:!0},"cross-thin":{n:33,f:function(p,d,T){if(i(d))return A;var l=x(p*1.4,2);return h(d,T,"M0,"+l+"V-"+l+"M"+l+",0H-"+l)},needLine:!0,noDot:!0,noFill:!0},"x-thin":{n:34,f:function(p,d,T){if(i(d))return A;var l=x(p,2);return h(d,T,"M"+l+","+l+"L-"+l+",-"+l+"M"+l+",-"+l+"L-"+l+","+l)},needLine:!0,noDot:!0,noFill:!0},asterisk:{n:35,f:function(p,d,T){if(i(d))return A;var l=x(p*1.2,2),_=x(p*.85,2);return h(d,T,"M0,"+l+"V-"+l+"M"+l+",0H-"+l+"M"+_+","+_+"L-"+_+",-"+_+"M"+_+",-"+_+"L-"+_+","+_)},needLine:!0,noDot:!0,noFill:!0},hash:{n:36,f:function(p,d,T){if(i(d))return A;var l=x(p/2,2),_=x(p,2);return h(d,T,"M"+l+","+_+"V-"+_+"M"+(l-_)+",-"+_+"V"+_+"M"+_+","+l+"H-"+_+"M-"+_+","+(l-_)+"H"+_)},needLine:!0,noFill:!0},"y-up":{n:37,f:function(p,d,T){if(i(d))return A;var l=x(p*1.2,2),_=x(p*1.6,2),w=x(p*.8,2);return h(d,T,"M-"+l+","+w+"L0,0M"+l+","+w+"L0,0M0,-"+_+"L0,0")},needLine:!0,noDot:!0,noFill:!0},"y-down":{n:38,f:function(p,d,T){if(i(d))return A;var l=x(p*1.2,2),_=x(p*1.6,2),w=x(p*.8,2);return h(d,T,"M-"+l+",-"+w+"L0,0M"+l+",-"+w+"L0,0M0,"+_+"L0,0")},needLine:!0,noDot:!0,noFill:!0},"y-left":{n:39,f:function(p,d,T){if(i(d))return A;var l=x(p*1.2,2),_=x(p*1.6,2),w=x(p*.8,2);return h(d,T,"M"+w+","+l+"L0,0M"+w+",-"+l+"L0,0M-"+_+",0L0,0")},needLine:!0,noDot:!0,noFill:!0},"y-right":{n:40,f:function(p,d,T){if(i(d))return A;var l=x(p*1.2,2),_=x(p*1.6,2),w=x(p*.8,2);return h(d,T,"M-"+w+","+l+"L0,0M-"+w+",-"+l+"L0,0M"+_+",0L0,0")},needLine:!0,noDot:!0,noFill:!0},"line-ew":{n:41,f:function(p,d,T){if(i(d))return A;var l=x(p*1.4,2);return h(d,T,"M"+l+",0H-"+l)},needLine:!0,noDot:!0,noFill:!0},"line-ns":{n:42,f:function(p,d,T){if(i(d))return A;var l=x(p*1.4,2);return h(d,T,"M0,"+l+"V-"+l)},needLine:!0,noDot:!0,noFill:!0},"line-ne":{n:43,f:function(p,d,T){if(i(d))return A;var l=x(p,2);return h(d,T,"M"+l+",-"+l+"L-"+l+","+l)},needLine:!0,noDot:!0,noFill:!0},"line-nw":{n:44,f:function(p,d,T){if(i(d))return A;var l=x(p,2);return h(d,T,"M"+l+","+l+"L-"+l+",-"+l)},needLine:!0,noDot:!0,noFill:!0},"arrow-up":{n:45,f:function(p,d,T){if(i(d))return A;var l=x(p,2),_=x(p*2,2);return h(d,T,"M0,0L-"+l+","+_+"H"+l+"Z")},backoff:1,noDot:!0},"arrow-down":{n:46,f:function(p,d,T){if(i(d))return A;var l=x(p,2),_=x(p*2,2);return h(d,T,"M0,0L-"+l+",-"+_+"H"+l+"Z")},noDot:!0},"arrow-left":{n:47,f:function(p,d,T){if(i(d))return A;var l=x(p*2,2),_=x(p,2);return h(d,T,"M0,0L"+l+",-"+_+"V"+_+"Z")},noDot:!0},"arrow-right":{n:48,f:function(p,d,T){if(i(d))return A;var l=x(p*2,2),_=x(p,2);return h(d,T,"M0,0L-"+l+",-"+_+"V"+_+"Z")},noDot:!0},"arrow-bar-up":{n:49,f:function(p,d,T){if(i(d))return A;var l=x(p,2),_=x(p*2,2);return h(d,T,"M-"+l+",0H"+l+"M0,0L-"+l+","+_+"H"+l+"Z")},backoff:1,needLine:!0,noDot:!0},"arrow-bar-down":{n:50,f:function(p,d,T){if(i(d))return A;var l=x(p,2),_=x(p*2,2);return h(d,T,"M-"+l+",0H"+l+"M0,0L-"+l+",-"+_+"H"+l+"Z")},needLine:!0,noDot:!0},"arrow-bar-left":{n:51,f:function(p,d,T){if(i(d))return A;var l=x(p*2,2),_=x(p,2);return h(d,T,"M0,-"+_+"V"+_+"M0,0L"+l+",-"+_+"V"+_+"Z")},needLine:!0,noDot:!0},"arrow-bar-right":{n:52,f:function(p,d,T){if(i(d))return A;var l=x(p*2,2),_=x(p,2);return h(d,T,"M0,-"+_+"V"+_+"M0,0L-"+l+",-"+_+"V"+_+"Z")},needLine:!0,noDot:!0},arrow:{n:53,f:function(p,d,T){if(i(d))return A;var l=t/2.5,_=2*p*r(l),w=2*p*o(l);return h(d,T,"M0,0L"+-_+","+w+"L"+_+","+w+"Z")},backoff:.9,noDot:!0},"arrow-wide":{n:54,f:function(p,d,T){if(i(d))return A;var l=t/4,_=2*p*r(l),w=2*p*o(l);return h(d,T,"M0,0L"+-_+","+w+"A "+2*p+","+2*p+" 0 0 1 "+_+","+w+"Z")},backoff:.4,noDot:!0}};function i(p){return p===null}var n,a,s,c;function h(p,d,T){if((!p||p%360===0)&&!d)return T;if(s===p&&c===d&&n===T)return a;s=p,c=d,n=T;function l(z,F){var O=r(z),B=o(z),I=F[0],N=F[1]+(d||0);return[I*O-N*B,I*B+N*O]}for(var _=p/180*t,w=0,M=0,E=g(T),m="",b=0;b<E.length;b++){var v=E[b],u=v[0],y=w,f=M;if(u==="M"||u==="L")w=+v[1],M=+v[2];else if(u==="m"||u==="l")w+=+v[1],M+=+v[2];else if(u==="H")w=+v[1];else if(u==="h")w+=+v[1];else if(u==="V")M=+v[1];else if(u==="v")M+=+v[1];else if(u==="A"){w=+v[1],M=+v[2];var P=l(_,[+v[6],+v[7]]);v[6]=P[0],v[7]=P[1],v[3]=+v[3]+p}(u==="H"||u==="V")&&(u="L"),(u==="h"||u==="v")&&(u="l"),(u==="m"||u==="l")&&(w-=y,M-=f);var L=l(_,[w,M]);(u==="H"||u==="V")&&(u="L"),(u==="M"||u==="L"||u==="m"||u==="l")&&(v[1]=L[0],v[2]=L[1]),v[0]=u,m+=v[0]+v.slice(1).join(",")}return a=m,m}}}),rs=Le({"src/components/drawing/index.js"(Z,H){"use strict";var g=Ji(),x=ni(),A=x.numberFormat,S=zn(),e=Vl(),t=so(),r=$a(),o=Cu(),i=x.strTranslate,n=$l(),a=Bd(),s=eh(),c=s.LINE_SPACING,h=Iv().DESELECTDIM,p=gu(),d=Yg(),T=Td().appendArrayPointValue,l=H.exports={};l.font=function(Me,pe){var ue=pe.variant,ze=pe.style,Qe=pe.weight,it=pe.color,$e=pe.size,kt=pe.family,Mt=pe.shadow,Bt=pe.lineposition,jt=pe.textcase;kt&&Me.style("font-family",kt),$e+1&&Me.style("font-size",$e+"px"),it&&Me.call(r.fill,it),Qe&&Me.style("font-weight",Qe),ze&&Me.style("font-style",ze),ue&&Me.style("font-variant",ue),jt&&Me.style("text-transform",_(M(jt))),Mt&&Me.style("text-shadow",Mt==="auto"?n.makeTextShadow(r.contrast(it)):_(Mt)),Bt&&Me.style("text-decoration-line",_(E(Bt)))};function _(Me){return Me==="none"?void 0:Me}var w={normal:"none",lower:"lowercase",upper:"uppercase","word caps":"capitalize"};function M(Me){return w[Me]}function E(Me){return Me.replace("under","underline").replace("over","overline").replace("through","line-through").split("+").join(" ")}l.setPosition=function(Me,pe,ue){Me.attr("x",pe).attr("y",ue)},l.setSize=function(Me,pe,ue){Me.attr("width",pe).attr("height",ue)},l.setRect=function(Me,pe,ue,ze,Qe){Me.call(l.setPosition,pe,ue).call(l.setSize,ze,Qe)},l.translatePoint=function(Me,pe,ue,ze){var Qe=ue.c2p(Me.x),it=ze.c2p(Me.y);if(S(Qe)&&S(it)&&pe.node())pe.node().nodeName==="text"?pe.attr("x",Qe).attr("y",it):pe.attr("transform",i(Qe,it));else return!1;return!0},l.translatePoints=function(Me,pe,ue){Me.each(function(ze){var Qe=g.select(this);l.translatePoint(ze,Qe,pe,ue)})},l.hideOutsideRangePoint=function(Me,pe,ue,ze,Qe,it){pe.attr("display",ue.isPtWithinRange(Me,Qe)&&ze.isPtWithinRange(Me,it)?null:"none")},l.hideOutsideRangePoints=function(Me,pe){if(pe._hasClipOnAxisFalse){var ue=pe.xaxis,ze=pe.yaxis;Me.each(function(Qe){var it=Qe[0].trace,$e=it.xcalendar,kt=it.ycalendar,Mt=t.traceIs(it,"bar-like")?".bartext":".point,.textpoint";Me.selectAll(Mt).each(function(Bt){l.hideOutsideRangePoint(Bt,g.select(this),ue,ze,$e,kt)})})}},l.crispRound=function(Me,pe,ue){return!pe||!S(pe)?ue||0:Me._context.staticPlot?pe:pe<1?1:Math.round(pe)},l.singleLineStyle=function(Me,pe,ue,ze,Qe){pe.style("fill","none");var it=(((Me||[])[0]||{}).trace||{}).line||{},$e=ue||it.width||0,kt=Qe||it.dash||"";r.stroke(pe,ze||it.color),l.dashLine(pe,kt,$e)},l.lineGroupStyle=function(Me,pe,ue,ze){Me.style("fill","none").each(function(Qe){var it=(((Qe||[])[0]||{}).trace||{}).line||{},$e=pe||it.width||0,kt=ze||it.dash||"";g.select(this).call(r.stroke,ue||it.color).call(l.dashLine,kt,$e)})},l.dashLine=function(Me,pe,ue){ue=+ue||0,pe=l.dashStyle(pe,ue),Me.style({"stroke-dasharray":pe,"stroke-width":ue+"px"})},l.dashStyle=function(Me,pe){pe=+pe||1;var ue=Math.max(pe,3);return Me==="solid"?Me="":Me==="dot"?Me=ue+"px,"+ue+"px":Me==="dash"?Me=3*ue+"px,"+3*ue+"px":Me==="longdash"?Me=5*ue+"px,"+5*ue+"px":Me==="dashdot"?Me=3*ue+"px,"+ue+"px,"+ue+"px,"+ue+"px":Me==="longdashdot"&&(Me=5*ue+"px,"+2*ue+"px,"+ue+"px,"+2*ue+"px"),Me};function m(Me,pe,ue,ze){var Qe=pe.fillpattern,it=pe.fillgradient,$e=Qe&&l.getPatternAttr(Qe.shape,0,"");if($e){var kt=l.getPatternAttr(Qe.bgcolor,0,null),Mt=l.getPatternAttr(Qe.fgcolor,0,null),Bt=Qe.fgopacity,jt=l.getPatternAttr(Qe.size,0,8),cr=l.getPatternAttr(Qe.solidity,0,.3),nr=pe.uid;l.pattern(Me,"point",ue,nr,$e,jt,cr,void 0,Qe.fillmode,kt,Mt,Bt)}else if(it&&it.type!=="none"){var Lr=it.type,mr="scatterfill-"+pe.uid;if(ze&&(mr="legendfill-"+pe.uid),!ze&&(it.start!==void 0||it.stop!==void 0)){var xr,mt;Lr==="horizontal"?(xr={x:it.start,y:0},mt={x:it.stop,y:0}):Lr==="vertical"&&(xr={x:0,y:it.start},mt={x:0,y:it.stop}),xr.x=pe._xA.c2p(xr.x===void 0?pe._extremes.x.min[0].val:xr.x,!0),xr.y=pe._yA.c2p(xr.y===void 0?pe._extremes.y.min[0].val:xr.y,!0),mt.x=pe._xA.c2p(mt.x===void 0?pe._extremes.x.max[0].val:mt.x,!0),mt.y=pe._yA.c2p(mt.y===void 0?pe._extremes.y.max[0].val:mt.y,!0),Me.call(L,ue,mr,"linear",it.colorscale,"fill",xr,mt,!0,!1)}else Lr==="horizontal"&&(Lr=Lr+"reversed"),Me.call(l.gradient,ue,mr,Lr,it.colorscale,"fill")}else pe.fillcolor&&Me.call(r.fill,pe.fillcolor)}l.singleFillStyle=function(Me,pe){var ue=g.select(Me.node()),ze=ue.data(),Qe=((ze[0]||[])[0]||{}).trace||{};m(Me,Qe,pe,!1)},l.fillGroupStyle=function(Me,pe,ue){Me.style("stroke-width",0).each(function(ze){var Qe=g.select(this);ze[0].trace&&m(Qe,ze[0].trace,pe,ue)})};var b=kE();l.symbolNames=[],l.symbolFuncs=[],l.symbolBackOffs=[],l.symbolNeedLines={},l.symbolNoDot={},l.symbolNoFill={},l.symbolList=[],Object.keys(b).forEach(function(Me){var pe=b[Me],ue=pe.n;l.symbolList.push(ue,String(ue),Me,ue+100,String(ue+100),Me+"-open"),l.symbolNames[ue]=Me,l.symbolFuncs[ue]=pe.f,l.symbolBackOffs[ue]=pe.backoff||0,pe.needLine&&(l.symbolNeedLines[ue]=!0),pe.noDot?l.symbolNoDot[ue]=!0:l.symbolList.push(ue+200,String(ue+200),Me+"-dot",ue+300,String(ue+300),Me+"-open-dot"),pe.noFill&&(l.symbolNoFill[ue]=!0)});var v=l.symbolNames.length,u="M0,0.5L0.5,0L0,-0.5L-0.5,0Z";l.symbolNumber=function(Me){if(S(Me))Me=+Me;else if(typeof Me=="string"){var pe=0;Me.indexOf("-open")>0&&(pe=100,Me=Me.replace("-open","")),Me.indexOf("-dot")>0&&(pe+=200,Me=Me.replace("-dot","")),Me=l.symbolNames.indexOf(Me),Me>=0&&(Me+=pe)}return Me%100>=v||Me>=400?0:Math.floor(Math.max(Me,0))};function y(Me,pe,ue,ze){var Qe=Me%100;return l.symbolFuncs[Qe](pe,ue,ze)+(Me>=200?u:"")}var f=A("~f"),P={radial:{type:"radial"},radialreversed:{type:"radial",reversed:!0},horizontal:{type:"linear",start:{x:1,y:0},stop:{x:0,y:0}},horizontalreversed:{type:"linear",start:{x:1,y:0},stop:{x:0,y:0},reversed:!0},vertical:{type:"linear",start:{x:0,y:1},stop:{x:0,y:0}},verticalreversed:{type:"linear",start:{x:0,y:1},stop:{x:0,y:0},reversed:!0}};l.gradient=function(Me,pe,ue,ze,Qe,it){var $e=P[ze];return L(Me,pe,ue,$e.type,Qe,it,$e.start,$e.stop,!1,$e.reversed)};function L(Me,pe,ue,ze,Qe,it,$e,kt,Mt,Bt){var jt=Qe.length,cr;ze==="linear"?cr={node:"linearGradient",attrs:{x1:$e.x,y1:$e.y,x2:kt.x,y2:kt.y,gradientUnits:Mt?"userSpaceOnUse":"objectBoundingBox"},reversed:Bt}:ze==="radial"&&(cr={node:"radialGradient",reversed:Bt});for(var nr=new Array(jt),Lr=0;Lr<jt;Lr++)cr.reversed?nr[jt-1-Lr]=[f((1-Qe[Lr][0])*100),Qe[Lr][1]]:nr[Lr]=[f(Qe[Lr][0]*100),Qe[Lr][1]];var mr=pe._fullLayout,xr="g"+mr._uid+"-"+ue,mt=mr._defs.select(".gradients").selectAll("#"+xr).data([ze+nr.join(";")],x.identity);mt.exit().remove(),mt.enter().append(cr.node).each(function(){var Fe=g.select(this);cr.attrs&&Fe.attr(cr.attrs),Fe.attr("id",xr);var Ze=Fe.selectAll("stop").data(nr);Ze.exit().remove(),Ze.enter().append("stop"),Ze.each(function(Ne){var Se=e(Ne[1]);g.select(this).attr({offset:Ne[0]+"%","stop-color":r.tinyRGB(Se),"stop-opacity":Se.getAlpha()})})}),Me.style(it,re(xr,pe)).style(it+"-opacity",null),Me.classed("gradient_filled",!0)}l.pattern=function(Me,pe,ue,ze,Qe,it,$e,kt,Mt,Bt,jt,cr){var nr=pe==="legend";kt&&(Mt==="overlay"?(Bt=kt,jt=r.contrast(Bt)):(Bt=void 0,jt=kt));var Lr=ue._fullLayout,mr="p"+Lr._uid+"-"+ze,xr,mt,Fe=function(Ot,Wt,$t,lr,fi){return lr+(fi-lr)*(Ot-Wt)/($t-Wt)},Ze,Ne,Se,Ve,Ee={},be=e(jt),Ce=r.tinyRGB(be),et=be.getAlpha(),ht=cr*et;switch(Qe){case"/":xr=it*Math.sqrt(2),mt=it*Math.sqrt(2),Ze="M-"+xr/4+","+mt/4+"l"+xr/2+",-"+mt/2+"M0,"+mt+"L"+xr+",0M"+xr/4*3+","+mt/4*5+"l"+xr/2+",-"+mt/2,Ne=$e*it,Ve="path",Ee={d:Ze,opacity:ht,stroke:Ce,"stroke-width":Ne+"px"};break;case"\\":xr=it*Math.sqrt(2),mt=it*Math.sqrt(2),Ze="M"+xr/4*3+",-"+mt/4+"l"+xr/2+","+mt/2+"M0,0L"+xr+","+mt+"M-"+xr/4+","+mt/4*3+"l"+xr/2+","+mt/2,Ne=$e*it,Ve="path",Ee={d:Ze,opacity:ht,stroke:Ce,"stroke-width":Ne+"px"};break;case"x":xr=it*Math.sqrt(2),mt=it*Math.sqrt(2),Ze="M-"+xr/4+","+mt/4+"l"+xr/2+",-"+mt/2+"M0,"+mt+"L"+xr+",0M"+xr/4*3+","+mt/4*5+"l"+xr/2+",-"+mt/2+"M"+xr/4*3+",-"+mt/4+"l"+xr/2+","+mt/2+"M0,0L"+xr+","+mt+"M-"+xr/4+","+mt/4*3+"l"+xr/2+","+mt/2,Ne=it-it*Math.sqrt(1-$e),Ve="path",Ee={d:Ze,opacity:ht,stroke:Ce,"stroke-width":Ne+"px"};break;case"|":xr=it,mt=it,Ve="path",Ze="M"+xr/2+",0L"+xr/2+","+mt,Ne=$e*it,Ve="path",Ee={d:Ze,opacity:ht,stroke:Ce,"stroke-width":Ne+"px"};break;case"-":xr=it,mt=it,Ve="path",Ze="M0,"+mt/2+"L"+xr+","+mt/2,Ne=$e*it,Ve="path",Ee={d:Ze,opacity:ht,stroke:Ce,"stroke-width":Ne+"px"};break;case"+":xr=it,mt=it,Ve="path",Ze="M"+xr/2+",0L"+xr/2+","+mt+"M0,"+mt/2+"L"+xr+","+mt/2,Ne=it-it*Math.sqrt(1-$e),Ve="path",Ee={d:Ze,opacity:ht,stroke:Ce,"stroke-width":Ne+"px"};break;case".":xr=it,mt=it,$e<Math.PI/4?Se=Math.sqrt($e*it*it/Math.PI):Se=Fe($e,Math.PI/4,1,it/2,it/Math.sqrt(2)),Ve="circle",Ee={cx:xr/2,cy:mt/2,r:Se,opacity:ht,fill:Ce};break}var yt=[Qe||"noSh",Bt||"noBg",jt||"noFg",it,$e].join(";"),Pt=Lr._defs.select(".patterns").selectAll("#"+mr).data([yt],x.identity);Pt.exit().remove(),Pt.enter().append("pattern").each(function(){var Ot=g.select(this);if(Ot.attr({id:mr,width:xr+"px",height:mt+"px",patternUnits:"userSpaceOnUse",patternTransform:nr?"scale(0.8)":""}),Bt){var Wt=e(Bt),$t=r.tinyRGB(Wt),lr=Wt.getAlpha(),fi=Ot.selectAll("rect").data([0]);fi.exit().remove(),fi.enter().append("rect").attr({width:xr+"px",height:mt+"px",fill:$t,"fill-opacity":lr})}var Pi=Ot.selectAll(Ve).data([0]);Pi.exit().remove(),Pi.enter().append(Ve).attr(Ee)}),Me.style("fill",re(mr,ue)).style("fill-opacity",null),Me.classed("pattern_filled",!0)},l.initGradients=function(Me){var pe=Me._fullLayout,ue=x.ensureSingle(pe._defs,"g","gradients");ue.selectAll("linearGradient,radialGradient").remove(),g.select(Me).selectAll(".gradient_filled").classed("gradient_filled",!1)},l.initPatterns=function(Me){var pe=Me._fullLayout,ue=x.ensureSingle(pe._defs,"g","patterns");ue.selectAll("pattern").remove(),g.select(Me).selectAll(".pattern_filled").classed("pattern_filled",!1)},l.getPatternAttr=function(Me,pe,ue){return Me&&x.isArrayOrTypedArray(Me)?pe<Me.length?Me[pe]:ue:Me},l.pointStyle=function(Me,pe,ue,ze){if(Me.size()){var Qe=l.makePointStyleFns(pe);Me.each(function(it){l.singlePointStyle(it,g.select(this),pe,Qe,ue,ze)})}},l.singlePointStyle=function(Me,pe,ue,ze,Qe,it){var $e=ue.marker,kt=$e.line;if(it&&it.i>=0&&Me.i===void 0&&(Me.i=it.i),pe.style("opacity",ze.selectedOpacityFn?ze.selectedOpacityFn(Me):Me.mo===void 0?$e.opacity:Me.mo),ze.ms2mrc){var Mt;Me.ms==="various"||$e.size==="various"?Mt=3:Mt=ze.ms2mrc(Me.ms),Me.mrc=Mt,ze.selectedSizeFn&&(Mt=Me.mrc=ze.selectedSizeFn(Me));var Bt=l.symbolNumber(Me.mx||$e.symbol)||0;Me.om=Bt%200>=100;var jt=ot(Me,ue),cr=ee(Me,ue);pe.attr("d",y(Bt,Mt,jt,cr))}var nr=!1,Lr,mr,xr;if(Me.so)xr=kt.outlierwidth,mr=kt.outliercolor,Lr=$e.outliercolor;else{var mt=(kt||{}).width;xr=(Me.mlw+1||mt+1||(Me.trace?(Me.trace.marker.line||{}).width:0)+1)-1||0,"mlc"in Me?mr=Me.mlcc=ze.lineScale(Me.mlc):x.isArrayOrTypedArray(kt.color)?mr=r.defaultLine:mr=kt.color,x.isArrayOrTypedArray($e.color)&&(Lr=r.defaultLine,nr=!0),"mc"in Me?Lr=Me.mcc=ze.markerScale(Me.mc):Lr=$e.color||$e.colors||"rgba(0,0,0,0)",ze.selectedColorFn&&(Lr=ze.selectedColorFn(Me))}if(Me.om)pe.call(r.stroke,Lr).style({"stroke-width":(xr||1)+"px",fill:"none"});else{pe.style("stroke-width",(Me.isBlank?0:xr)+"px");var Fe=$e.gradient,Ze=Me.mgt;Ze?nr=!0:Ze=Fe&&Fe.type,x.isArrayOrTypedArray(Ze)&&(Ze=Ze[0],P[Ze]||(Ze=0));var Ne=$e.pattern,Se=Ne&&l.getPatternAttr(Ne.shape,Me.i,"");if(Ze&&Ze!=="none"){var Ve=Me.mgc;Ve?nr=!0:Ve=Fe.color;var Ee=ue.uid;nr&&(Ee+="-"+Me.i),l.gradient(pe,Qe,Ee,Ze,[[0,Ve],[1,Lr]],"fill")}else if(Se){var be=!1,Ce=Ne.fgcolor;!Ce&&it&&it.color&&(Ce=it.color,be=!0);var et=l.getPatternAttr(Ce,Me.i,it&&it.color||null),ht=l.getPatternAttr(Ne.bgcolor,Me.i,null),yt=Ne.fgopacity,Pt=l.getPatternAttr(Ne.size,Me.i,8),Ot=l.getPatternAttr(Ne.solidity,Me.i,.3);be=be||Me.mcc||x.isArrayOrTypedArray(Ne.shape)||x.isArrayOrTypedArray(Ne.bgcolor)||x.isArrayOrTypedArray(Ne.fgcolor)||x.isArrayOrTypedArray(Ne.size)||x.isArrayOrTypedArray(Ne.solidity);var Wt=ue.uid;be&&(Wt+="-"+Me.i),l.pattern(pe,"point",Qe,Wt,Se,Pt,Ot,Me.mcc,Ne.fillmode,ht,et,yt)}else x.isArrayOrTypedArray(Lr)?r.fill(pe,Lr[Me.i]):r.fill(pe,Lr);xr&&r.stroke(pe,mr)}},l.makePointStyleFns=function(Me){var pe={},ue=Me.marker;return pe.markerScale=l.tryColorscale(ue,""),pe.lineScale=l.tryColorscale(ue,"line"),t.traceIs(Me,"symbols")&&(pe.ms2mrc=p.isBubble(Me)?d(Me):function(){return(ue.size||6)/2}),Me.selectedpoints&&x.extendFlat(pe,l.makeSelectedPointStyleFns(Me)),pe},l.makeSelectedPointStyleFns=function(Me){var pe={},ue=Me.selected||{},ze=Me.unselected||{},Qe=Me.marker||{},it=ue.marker||{},$e=ze.marker||{},kt=Qe.opacity,Mt=it.opacity,Bt=$e.opacity,jt=Mt!==void 0,cr=Bt!==void 0;(x.isArrayOrTypedArray(kt)||jt||cr)&&(pe.selectedOpacityFn=function(Se){var Ve=Se.mo===void 0?Qe.opacity:Se.mo;return Se.selected?jt?Mt:Ve:cr?Bt:h*Ve});var nr=Qe.color,Lr=it.color,mr=$e.color;(Lr||mr)&&(pe.selectedColorFn=function(Se){var Ve=Se.mcc||nr;return Se.selected?Lr||Ve:mr||Ve});var xr=Qe.size,mt=it.size,Fe=$e.size,Ze=mt!==void 0,Ne=Fe!==void 0;return t.traceIs(Me,"symbols")&&(Ze||Ne)&&(pe.selectedSizeFn=function(Se){var Ve=Se.mrc||xr/2;return Se.selected?Ze?mt/2:Ve:Ne?Fe/2:Ve}),pe},l.makeSelectedTextStyleFns=function(Me){var pe={},ue=Me.selected||{},ze=Me.unselected||{},Qe=Me.textfont||{},it=ue.textfont||{},$e=ze.textfont||{},kt=Qe.color,Mt=it.color,Bt=$e.color;return pe.selectedTextColorFn=function(jt){var cr=jt.tc||kt;return jt.selected?Mt||cr:Bt||(Mt?cr:r.addOpacity(cr,h))},pe},l.selectedPointStyle=function(Me,pe){if(!(!Me.size()||!pe.selectedpoints)){var ue=l.makeSelectedPointStyleFns(pe),ze=pe.marker||{},Qe=[];ue.selectedOpacityFn&&Qe.push(function(it,$e){it.style("opacity",ue.selectedOpacityFn($e))}),ue.selectedColorFn&&Qe.push(function(it,$e){r.fill(it,ue.selectedColorFn($e))}),ue.selectedSizeFn&&Qe.push(function(it,$e){var kt=$e.mx||ze.symbol||0,Mt=ue.selectedSizeFn($e);it.attr("d",y(l.symbolNumber(kt),Mt,ot($e,pe),ee($e,pe))),$e.mrc2=Mt}),Qe.length&&Me.each(function(it){for(var $e=g.select(this),kt=0;kt<Qe.length;kt++)Qe[kt]($e,it)})}},l.tryColorscale=function(Me,pe){var ue=pe?x.nestedProperty(Me,pe).get():Me;if(ue){var ze=ue.color;if((ue.colorscale||ue._colorAx)&&x.isArrayOrTypedArray(ze))return o.makeColorScaleFuncFromTrace(ue)}return x.identity};var z={start:1,end:-1,middle:0,bottom:1,top:-1};function F(Me,pe,ue,ze,Qe){var it=g.select(Me.node().parentNode),$e=pe.indexOf("top")!==-1?"top":pe.indexOf("bottom")!==-1?"bottom":"middle",kt=pe.indexOf("left")!==-1?"end":pe.indexOf("right")!==-1?"start":"middle",Mt=ze?ze/.8+1:0,Bt=(n.lineCount(Me)-1)*c+1,jt=z[kt]*Mt,cr=ue*.75+z[$e]*Mt+(z[$e]-1)*Bt*ue/2;Me.attr("text-anchor",kt),Qe||it.attr("transform",i(jt,cr))}function O(Me,pe){var ue=Me.ts||pe.textfont.size;return S(ue)&&ue>0?ue:0}l.textPointStyle=function(Me,pe,ue){if(Me.size()){var ze;if(pe.selectedpoints){var Qe=l.makeSelectedTextStyleFns(pe);ze=Qe.selectedTextColorFn}var it=pe.texttemplate,$e=ue._fullLayout;Me.each(function(kt){var Mt=g.select(this),Bt=it?x.extractOption(kt,pe,"txt","texttemplate"):x.extractOption(kt,pe,"tx","text");if(!Bt&&Bt!==0){Mt.remove();return}if(it){var jt=pe._module.formatLabels,cr=jt?jt(kt,pe,$e):{},nr={};T(nr,pe,kt.i);var Lr=pe._meta||{};Bt=x.texttemplateString(Bt,cr,$e._d3locale,nr,kt,Lr)}var mr=kt.tp||pe.textposition,xr=O(kt,pe),mt=ze?ze(kt):kt.tc||pe.textfont.color;Mt.call(l.font,{family:kt.tf||pe.textfont.family,weight:kt.tw||pe.textfont.weight,style:kt.ty||pe.textfont.style,variant:kt.tv||pe.textfont.variant,textcase:kt.tC||pe.textfont.textcase,lineposition:kt.tE||pe.textfont.lineposition,shadow:kt.tS||pe.textfont.shadow,size:xr,color:mt}).text(Bt).call(n.convertToTspans,ue).call(F,mr,xr,kt.mrc)})}},l.selectedTextStyle=function(Me,pe){if(!(!Me.size()||!pe.selectedpoints)){var ue=l.makeSelectedTextStyleFns(pe);Me.each(function(ze){var Qe=g.select(this),it=ue.selectedTextColorFn(ze),$e=ze.tp||pe.textposition,kt=O(ze,pe);r.fill(Qe,it);var Mt=t.traceIs(pe,"bar-like");F(Qe,$e,kt,ze.mrc2||ze.mrc,Mt)})}};var B=.5;l.smoothopen=function(Me,pe){if(Me.length<3)return"M"+Me.join("L");var ue="M"+Me[0],ze=[],Qe;for(Qe=1;Qe<Me.length-1;Qe++)ze.push(le(Me[Qe-1],Me[Qe],Me[Qe+1],pe));for(ue+="Q"+ze[0][0]+" "+Me[1],Qe=2;Qe<Me.length-1;Qe++)ue+="C"+ze[Qe-2][1]+" "+ze[Qe-1][0]+" "+Me[Qe];return ue+="Q"+ze[Me.length-3][1]+" "+Me[Me.length-1],ue},l.smoothclosed=function(Me,pe){if(Me.length<3)return"M"+Me.join("L")+"Z";var ue="M"+Me[0],ze=Me.length-1,Qe=[le(Me[ze],Me[0],Me[1],pe)],it;for(it=1;it<ze;it++)Qe.push(le(Me[it-1],Me[it],Me[it+1],pe));for(Qe.push(le(Me[ze-1],Me[ze],Me[0],pe)),it=1;it<=ze;it++)ue+="C"+Qe[it-1][1]+" "+Qe[it][0]+" "+Me[it];return ue+="C"+Qe[ze][1]+" "+Qe[0][0]+" "+Me[0]+"Z",ue};var I,N;function U(Me,pe,ue){return ue&&(Me=G(Me)),pe?Q(Me[1]):W(Me[0])}function W(Me){var pe=g.round(Me,2);return I=pe,pe}function Q(Me){var pe=g.round(Me,2);return N=pe,pe}function le(Me,pe,ue,ze){var Qe=Me[0]-pe[0],it=Me[1]-pe[1],$e=ue[0]-pe[0],kt=ue[1]-pe[1],Mt=Math.pow(Qe*Qe+it*it,B/2),Bt=Math.pow($e*$e+kt*kt,B/2),jt=(Bt*Bt*Qe-Mt*Mt*$e)*ze,cr=(Bt*Bt*it-Mt*Mt*kt)*ze,nr=3*Bt*(Mt+Bt),Lr=3*Mt*(Mt+Bt);return[[W(pe[0]+(nr&&jt/nr)),Q(pe[1]+(nr&&cr/nr))],[W(pe[0]-(Lr&&jt/Lr)),Q(pe[1]-(Lr&&cr/Lr))]]}var se={hv:function(Me,pe,ue){return"H"+W(pe[0])+"V"+U(pe,1,ue)},vh:function(Me,pe,ue){return"V"+Q(pe[1])+"H"+U(pe,0,ue)},hvh:function(Me,pe,ue){return"H"+W((Me[0]+pe[0])/2)+"V"+Q(pe[1])+"H"+U(pe,0,ue)},vhv:function(Me,pe,ue){return"V"+Q((Me[1]+pe[1])/2)+"H"+W(pe[0])+"V"+U(pe,1,ue)}},fe=function(Me,pe,ue){return"L"+U(pe,0,ue)+","+U(pe,1,ue)};l.steps=function(Me){var pe=se[Me]||fe;return function(ue){for(var ze="M"+W(ue[0][0])+","+Q(ue[0][1]),Qe=ue.length,it=1;it<Qe;it++)ze+=pe(ue[it-1],ue[it],it===Qe-1);return ze}};function G(Me,pe){var ue=Me.backoff,ze=Me.trace,Qe=Me.d,it=Me.i;if(ue&&ze&&ze.marker&&ze.marker.angle%360===0&&ze.line&&ze.line.shape!=="spline"){var $e=x.isArrayOrTypedArray(ue),kt=Me,Mt=pe?pe[0]:I||0,Bt=pe?pe[1]:N||0,jt=kt[0],cr=kt[1],nr=jt-Mt,Lr=cr-Bt,mr=Math.atan2(Lr,nr),xr=$e?ue[it]:ue;if(xr==="auto"){var mt=kt.i;ze.type==="scatter"&&mt--;var Fe=kt.marker,Ze=Fe.symbol;x.isArrayOrTypedArray(Ze)&&(Ze=Ze[mt]);var Ne=Fe.size;x.isArrayOrTypedArray(Ne)&&(Ne=Ne[mt]),xr=Fe?l.symbolBackOffs[l.symbolNumber(Ze)]*Ne:0,xr+=l.getMarkerStandoff(Qe[mt],ze)||0}var Se=jt-xr*Math.cos(mr),Ve=cr-xr*Math.sin(mr);(Se<=jt&&Se>=Mt||Se>=jt&&Se<=Mt)&&(Ve<=cr&&Ve>=Bt||Ve>=cr&&Ve<=Bt)&&(Me=[Se,Ve])}return Me}l.applyBackoff=G,l.makeTester=function(){var Me=x.ensureSingleById(g.select("body"),"svg","js-plotly-tester",function(ue){ue.attr(a.svgAttrs).style({position:"absolute",left:"-10000px",top:"-10000px",width:"9000px",height:"9000px","z-index":"1"})}),pe=x.ensureSingle(Me,"path","js-reference-point",function(ue){ue.attr("d","M0,0H1V1H0Z").style({"stroke-width":0,fill:"black"})});l.tester=Me,l.testref=pe},l.savedBBoxes={};var J=0,$=1e4;l.bBox=function(Me,pe,ue){ue||(ue=X(Me));var ze;if(ue){if(ze=l.savedBBoxes[ue],ze)return x.extendFlat({},ze)}else if(Me.childNodes.length===1){var Qe=Me.childNodes[0];if(ue=X(Qe),ue){var it=+Qe.getAttribute("x")||0,$e=+Qe.getAttribute("y")||0,kt=Qe.getAttribute("transform");if(!kt){var Mt=l.bBox(Qe,!1,ue);return it&&(Mt.left+=it,Mt.right+=it),$e&&(Mt.top+=$e,Mt.bottom+=$e),Mt}if(ue+="~"+it+"~"+$e+"~"+kt,ze=l.savedBBoxes[ue],ze)return x.extendFlat({},ze)}}var Bt,jt;pe?Bt=Me:(jt=l.tester.node(),Bt=Me.cloneNode(!0),jt.appendChild(Bt)),g.select(Bt).attr("transform",null).call(n.positionText,0,0);var cr=Bt.getBoundingClientRect(),nr=l.testref.node().getBoundingClientRect();pe||jt.removeChild(Bt);var Lr={height:cr.height,width:cr.width,left:cr.left-nr.left,top:cr.top-nr.top,right:cr.right-nr.left,bottom:cr.bottom-nr.top};return J>=$&&(l.savedBBoxes={},J=0),ue&&(l.savedBBoxes[ue]=Lr),J++,x.extendFlat({},Lr)};function X(Me){var pe=Me.getAttribute("data-unformatted");if(pe!==null)return pe+Me.getAttribute("data-math")+Me.getAttribute("text-anchor")+Me.getAttribute("style")}l.setClipUrl=function(Me,pe,ue){Me.attr("clip-path",re(pe,ue))};function re(Me,pe){if(!Me)return null;var ue=pe._context,ze=ue._exportedPlot?"":ue._baseUrl||"";return ze?"url('"+ze+"#"+Me+"')":"url(#"+Me+")"}l.getTranslate=function(Me){var pe=/.*\btranslate\((-?\d*\.?\d*)[^-\d]*(-?\d*\.?\d*)[^\d].*/,ue=Me.attr?"attr":"getAttribute",ze=Me[ue]("transform")||"",Qe=ze.replace(pe,function(it,$e,kt){return[$e,kt].join(" ")}).split(" ");return{x:+Qe[0]||0,y:+Qe[1]||0}},l.setTranslate=function(Me,pe,ue){var ze=/(\btranslate\(.*?\);?)/,Qe=Me.attr?"attr":"getAttribute",it=Me.attr?"attr":"setAttribute",$e=Me[Qe]("transform")||"";return pe=pe||0,ue=ue||0,$e=$e.replace(ze,"").trim(),$e+=i(pe,ue),$e=$e.trim(),Me[it]("transform",$e),$e},l.getScale=function(Me){var pe=/.*\bscale\((\d*\.?\d*)[^\d]*(\d*\.?\d*)[^\d].*/,ue=Me.attr?"attr":"getAttribute",ze=Me[ue]("transform")||"",Qe=ze.replace(pe,function(it,$e,kt){return[$e,kt].join(" ")}).split(" ");return{x:+Qe[0]||1,y:+Qe[1]||1}},l.setScale=function(Me,pe,ue){var ze=/(\bscale\(.*?\);?)/,Qe=Me.attr?"attr":"getAttribute",it=Me.attr?"attr":"setAttribute",$e=Me[Qe]("transform")||"";return pe=pe||1,ue=ue||1,$e=$e.replace(ze,"").trim(),$e+="scale("+pe+","+ue+")",$e=$e.trim(),Me[it]("transform",$e),$e};var ae=/\s*sc.*/;l.setPointGroupScale=function(Me,pe,ue){if(pe=pe||1,ue=ue||1,!!Me){var ze=pe===1&&ue===1?"":"scale("+pe+","+ue+")";Me.each(function(){var Qe=(this.getAttribute("transform")||"").replace(ae,"");Qe+=ze,Qe=Qe.trim(),this.setAttribute("transform",Qe)})}};var j=/translate\([^)]*\)\s*$/;l.setTextPointsScale=function(Me,pe,ue){Me&&Me.each(function(){var ze,Qe=g.select(this),it=Qe.select("text");if(it.node()){var $e=parseFloat(it.attr("x")||0),kt=parseFloat(it.attr("y")||0),Mt=(Qe.attr("transform")||"").match(j);pe===1&&ue===1?ze=[]:ze=[i($e,kt),"scale("+pe+","+ue+")",i(-$e,-kt)],Mt&&ze.push(Mt),Qe.attr("transform",ze.join(""))}})};function ee(Me,pe){var ue;return Me&&(ue=Me.mf),ue===void 0&&(ue=pe.marker&&pe.marker.standoff||0),!pe._geo&&!pe._xA?-ue:ue}l.getMarkerStandoff=ee;var ne=Math.atan2,ce=Math.cos,_e=Math.sin;function we(Me,pe){var ue=pe[0],ze=pe[1];return[ue*ce(Me)-ze*_e(Me),ue*_e(Me)+ze*ce(Me)]}var Oe,Ie,Xe,tt,rt,Je;function ot(Me,pe){var ue=Me.ma;ue===void 0&&(ue=pe.marker.angle,(!ue||x.isArrayOrTypedArray(ue))&&(ue=0));var ze,Qe,it=pe.marker.angleref;if(it==="previous"||it==="north"){if(pe._geo){var $e=pe._geo.project(Me.lonlat);ze=$e[0],Qe=$e[1]}else{var kt=pe._xA,Mt=pe._yA;if(kt&&Mt)ze=kt.c2p(Me.x),Qe=Mt.c2p(Me.y);else return 90}if(pe._geo){var Bt=Me.lonlat[0],jt=Me.lonlat[1],cr=pe._geo.project([Bt,jt+1e-5]),nr=pe._geo.project([Bt+1e-5,jt]),Lr=ne(nr[1]-Qe,nr[0]-ze),mr=ne(cr[1]-Qe,cr[0]-ze),xr;if(it==="north")xr=ue/180*Math.PI;else if(it==="previous"){var mt=Bt/180*Math.PI,Fe=jt/180*Math.PI,Ze=Oe/180*Math.PI,Ne=Ie/180*Math.PI,Se=Ze-mt,Ve=ce(Ne)*_e(Se),Ee=_e(Ne)*ce(Fe)-ce(Ne)*_e(Fe)*ce(Se);xr=-ne(Ve,Ee)-Math.PI,Oe=Bt,Ie=jt}var be=we(Lr,[ce(xr),0]),Ce=we(mr,[_e(xr),0]);ue=ne(be[1]+Ce[1],be[0]+Ce[0])/Math.PI*180,it==="previous"&&!(Je===pe.uid&&Me.i===rt+1)&&(ue=null)}if(it==="previous"&&!pe._geo)if(Je===pe.uid&&Me.i===rt+1&&S(ze)&&S(Qe)){var et=ze-Xe,ht=Qe-tt,yt=pe.line&&pe.line.shape||"",Pt=yt.slice(yt.length-1);Pt==="h"&&(ht=0),Pt==="v"&&(et=0),ue+=ne(ht,et)/Math.PI*180+90}else ue=null}return Xe=ze,tt=Qe,rt=Me.i,Je=pe.uid,ue}l.getMarkerAngle=ot}}),Um=Le({"src/components/titles/index.js"(Z,H){"use strict";var g=Ji(),x=zn(),A=Ku(),S=so(),e=ni(),t=e.strTranslate,r=rs(),o=$a(),i=$l(),n=Iv(),a=eh().OPPOSITE_SIDE,s=/ [XY][0-9]* /,c=1.6,h=1.6;function p(d,T,l){var _=d._fullLayout,w=l.propContainer,M=l.propName,E=l.placeholder,m=l.traceIndex,b=l.avoid||{},v=l.attributes,u=l.transform,y=l.containerGroup,f=1,P=w.title,L=(P&&P.text?P.text:"").trim(),z=!1,F=P&&P.font?P.font:{},O=F.family,B=F.size,I=F.color,N=F.weight,U=F.style,W=F.variant,Q=F.textcase,le=F.lineposition,se=F.shadow,fe=l.subtitlePropName,G=!!fe,J=l.subtitlePlaceholder,$=(w.title||{}).subtitle||{text:"",font:{}},X=$.text.trim(),re=!1,ae=1,j=$.font,ee=j.family,ne=j.size,ce=j.color,_e=j.weight,we=j.style,Oe=j.variant,Ie=j.textcase,Xe=j.lineposition,tt=j.shadow,rt;M==="title.text"?rt="titleText":M.indexOf("axis")!==-1?rt="axisTitleText":M.indexOf("colorbar"!==-1)&&(rt="colorbarTitleText");var Je=d._context.edits[rt];function ot(nr,Lr){return nr===void 0||Lr===void 0?!1:nr.replace(s," % ")===Lr.replace(s," % ")}L===""?f=0:ot(L,E)&&(Je||(L=""),f=.2,z=!0),G&&(X===""?ae=0:ot(X,J)&&(Je||(X=""),ae=.2,re=!0)),l._meta?L=e.templateString(L,l._meta):_._meta&&(L=e.templateString(L,_._meta));var Me=L||X||Je,pe;y||(y=e.ensureSingle(_._infolayer,"g","g-"+T),pe=_._hColorbarMoveTitle);var ue=y.selectAll("text."+T).data(Me?[0]:[]);ue.enter().append("text"),ue.text(L).attr("class",T),ue.exit().remove();var ze=null,Qe=T+"-subtitle",it=X||Je;if(G&&it&&(ze=y.selectAll("text."+Qe).data(it?[0]:[]),ze.enter().append("text"),ze.text(X).attr("class",Qe),ze.exit().remove()),!Me)return y;function $e(nr,Lr){e.syncOrAsync([kt,Mt],{title:nr,subtitle:Lr})}function kt(nr){var Lr=nr.title,mr=nr.subtitle,xr;!u&&pe&&(u={}),u?(xr="",u.rotate&&(xr+="rotate("+[u.rotate,v.x,v.y]+")"),(u.offset||pe)&&(xr+=t(0,(u.offset||0)-(pe||0)))):xr=null,Lr.attr("transform",xr);function mt(Ee){if(Ee){var be=g.select(Ee.node().parentNode).select("."+Qe);if(!be.empty()){var Ce=Ee.node().getBBox();if(Ce.height){var et=Ce.y+Ce.height+c*ne;be.attr("y",et)}}}}if(Lr.style("opacity",f*o.opacity(I)).call(r.font,{color:o.rgb(I),size:g.round(B,2),family:O,weight:N,style:U,variant:W,textcase:Q,shadow:se,lineposition:le}).attr(v).call(i.convertToTspans,d,mt),mr){var Fe=y.select("."+T+"-math-group"),Ze=Lr.node().getBBox(),Ne=Fe.node()?Fe.node().getBBox():void 0,Se=Ne?Ne.y+Ne.height+c*ne:Ze.y+Ze.height+h*ne,Ve=e.extendFlat({},v,{y:Se});mr.attr("transform",xr),mr.style("opacity",ae*o.opacity(ce)).call(r.font,{color:o.rgb(ce),size:g.round(ne,2),family:ee,weight:_e,style:we,variant:Oe,textcase:Ie,shadow:tt,lineposition:Xe}).attr(Ve).call(i.convertToTspans,d)}return A.previousPromises(d)}function Mt(nr){var Lr=nr.title,mr=g.select(Lr.node().parentNode);if(b&&b.selection&&b.side&&L){mr.attr("transform",null);var xr=a[b.side],mt=b.side==="left"||b.side==="top"?-1:1,Fe=x(b.pad)?b.pad:2,Ze=r.bBox(mr.node()),Ne={t:0,b:0,l:0,r:0},Se=d._fullLayout._reservedMargin;for(var Ve in Se)for(var Ee in Se[Ve]){var be=Se[Ve][Ee];Ne[Ee]=Math.max(Ne[Ee],be)}var Ce={left:Ne.l,top:Ne.t,right:_.width-Ne.r,bottom:_.height-Ne.b},et=b.maxShift||mt*(Ce[b.side]-Ze[b.side]),ht=0;if(et<0)ht=et;else{var yt=b.offsetLeft||0,Pt=b.offsetTop||0;Ze.left-=yt,Ze.right-=yt,Ze.top-=Pt,Ze.bottom-=Pt,b.selection.each(function(){var Wt=r.bBox(this);e.bBoxIntersect(Ze,Wt,Fe)&&(ht=Math.max(ht,mt*(Wt[b.side]-Ze[xr])+Fe))}),ht=Math.min(et,ht),w._titleScoot=Math.abs(ht)}if(ht>0||et<0){var Ot={left:[-ht,0],right:[ht,0],top:[0,-ht],bottom:[0,ht]}[b.side];mr.attr("transform",t(Ot[0],Ot[1]))}}}ue.call($e,ze);function Bt(nr,Lr){nr.text(Lr).on("mouseover.opacity",function(){g.select(this).transition().duration(n.SHOW_PLACEHOLDER).style("opacity",1)}).on("mouseout.opacity",function(){g.select(this).transition().duration(n.HIDE_PLACEHOLDER).style("opacity",0)})}if(Je&&(L?ue.on(".opacity",null):(Bt(ue,E),z=!0),ue.call(i.makeEditable,{gd:d}).on("edit",function(nr){m!==void 0?S.call("_guiRestyle",d,M,nr,m):S.call("_guiRelayout",d,M,nr)}).on("cancel",function(){this.text(this.attr("data-unformatted")).call($e)}).on("input",function(nr){this.text(nr||" ").call(i.positionText,v.x,v.y)}),G)){if(G&&!L){var jt=ue.node().getBBox(),cr=jt.y+jt.height+h*ne;ze.attr("y",cr)}X?ze.on(".opacity",null):(Bt(ze,J),re=!0),ze.call(i.makeEditable,{gd:d}).on("edit",function(nr){S.call("_guiRelayout",d,"title.subtitle.text",nr)}).on("cancel",function(){this.text(this.attr("data-unformatted")).call($e)}).on("input",function(nr){this.text(nr||" ").call(i.positionText,ze.attr("x"),ze.attr("y"))})}return ue.classed("js-placeholder",z),ze&&ze.classed("js-placeholder",re),y}H.exports={draw:p,SUBTITLE_PADDING_EM:h,SUBTITLE_PADDING_MATHJAX_EM:c}}}),Rv=Le({"src/plots/cartesian/set_convert.js"(Z,H){"use strict";var g=Ji(),x=Ia().utcFormat,A=ni(),S=A.numberFormat,e=zn(),t=A.cleanNumber,r=A.ms2DateTime,o=A.dateTime2ms,i=A.ensureNumber,n=A.isArrayOrTypedArray,a=$n(),s=a.FP_SAFE,c=a.BADNUM,h=a.LOG_CLIP,p=a.ONEWEEK,d=a.ONEDAY,T=a.ONEHOUR,l=a.ONEMIN,_=a.ONESEC,w=Kc(),M=ch(),E=M.HOUR_PATTERN,m=M.WEEKDAY_PATTERN;function b(u){return Math.pow(10,u)}function v(u){return u!=null}H.exports=function(y,f){f=f||{};var P=y._id||"x",L=P.charAt(0);function z(X,re){if(X>0)return Math.log(X)/Math.LN10;if(X<=0&&re&&y.range&&y.range.length===2){var ae=y.range[0],j=y.range[1];return .5*(ae+j-2*h*Math.abs(ae-j))}else return c}function F(X,re,ae,j){if((j||{}).msUTC&&e(X))return+X;var ee=o(X,ae||y.calendar);if(ee===c)if(e(X)){X=+X;var ne=Math.floor(A.mod(X+.05,1)*10),ce=Math.round(X-ne/10);ee=o(new Date(ce))+ne/10}else return c;return ee}function O(X,re,ae){return r(X,re,ae||y.calendar)}function B(X){return y._categories[Math.round(X)]}function I(X){if(v(X)){if(y._categoriesMap===void 0&&(y._categoriesMap={}),y._categoriesMap[X]!==void 0)return y._categoriesMap[X];y._categories.push(typeof X=="number"?String(X):X);var re=y._categories.length-1;return y._categoriesMap[X]=re,re}return c}function N(X,re){for(var ae=new Array(re),j=0;j<re;j++){var ee=(X[0]||[])[j],ne=(X[1]||[])[j];ae[j]=U([ee,ne])}return ae}function U(X){if(y._categoriesMap)return y._categoriesMap[X]}function W(X){var re=U(X);if(re!==void 0)return re;if(e(X))return+X}function Q(X){return e(X)?+X:U(X)}function le(X,re,ae){return g.round(ae+re*X,2)}function se(X,re,ae){return(X-ae)/re}var fe=function(re){return e(re)?le(re,y._m,y._b):c},G=function(X){return se(X,y._m,y._b)};if(y.rangebreaks){var J=L==="y";fe=function(X){if(!e(X))return c;var re=y._rangebreaks.length;if(!re)return le(X,y._m,y._b);var ae=J;y.range[0]>y.range[1]&&(ae=!ae);for(var j=ae?-1:1,ee=j*X,ne=0,ce=0;ce<re;ce++){var _e=j*y._rangebreaks[ce].min,we=j*y._rangebreaks[ce].max;if(ee<_e)break;if(ee>we)ne=ce+1;else{ne=ee<(_e+we)/2?ce:ce+1;break}}var Oe=y._B[ne]||0;return isFinite(Oe)?le(X,y._m2,Oe):0},G=function(X){var re=y._rangebreaks.length;if(!re)return se(X,y._m,y._b);for(var ae=0,j=0;j<re&&!(X<y._rangebreaks[j].pmin);j++)X>y._rangebreaks[j].pmax&&(ae=j+1);return se(X,y._m2,y._B[ae])}}y.c2l=y.type==="log"?z:i,y.l2c=y.type==="log"?b:i,y.l2p=fe,y.p2l=G,y.c2p=y.type==="log"?function(X,re){return fe(z(X,re))}:fe,y.p2c=y.type==="log"?function(X){return b(G(X))}:G,["linear","-"].indexOf(y.type)!==-1?(y.d2r=y.r2d=y.d2c=y.r2c=y.d2l=y.r2l=t,y.c2d=y.c2r=y.l2d=y.l2r=i,y.d2p=y.r2p=function(X){return y.l2p(t(X))},y.p2d=y.p2r=G,y.cleanPos=i):y.type==="log"?(y.d2r=y.d2l=function(X,re){return z(t(X),re)},y.r2d=y.r2c=function(X){return b(t(X))},y.d2c=y.r2l=t,y.c2d=y.l2r=i,y.c2r=z,y.l2d=b,y.d2p=function(X,re){return y.l2p(y.d2r(X,re))},y.p2d=function(X){return b(G(X))},y.r2p=function(X){return y.l2p(t(X))},y.p2r=G,y.cleanPos=i):y.type==="date"?(y.d2r=y.r2d=A.identity,y.d2c=y.r2c=y.d2l=y.r2l=F,y.c2d=y.c2r=y.l2d=y.l2r=O,y.d2p=y.r2p=function(X,re,ae){return y.l2p(F(X,0,ae))},y.p2d=y.p2r=function(X,re,ae){return O(G(X),re,ae)},y.cleanPos=function(X){return A.cleanDate(X,c,y.calendar)}):y.type==="category"?(y.d2c=y.d2l=I,y.r2d=y.c2d=y.l2d=B,y.d2r=y.d2l_noadd=W,y.r2c=function(X){var re=Q(X);return re!==void 0?re:y.fraction2r(.5)},y.l2r=y.c2r=i,y.r2l=Q,y.d2p=function(X){return y.l2p(y.r2c(X))},y.p2d=function(X){return B(G(X))},y.r2p=y.d2p,y.p2r=G,y.cleanPos=function(X){return typeof X=="string"&&X!==""?X:i(X)}):y.type==="multicategory"&&(y.r2d=y.c2d=y.l2d=B,y.d2r=y.d2l_noadd=W,y.r2c=function(X){var re=W(X);return re!==void 0?re:y.fraction2r(.5)},y.r2c_just_indices=U,y.l2r=y.c2r=i,y.r2l=W,y.d2p=function(X){return y.l2p(y.r2c(X))},y.p2d=function(X){return B(G(X))},y.r2p=y.d2p,y.p2r=G,y.cleanPos=function(X){return Array.isArray(X)||typeof X=="string"&&X!==""?X:i(X)},y.setupMultiCategory=function(X){var re=y._traceIndices,ae,j,ee=y._matchGroup;if(ee&&y._categories.length===0){for(var ne in ee)if(ne!==P){var ce=f[w.id2name(ne)];re=re.concat(ce._traceIndices)}}var _e=[[0,{}],[0,{}]],we=[];for(ae=0;ae<re.length;ae++){var Oe=X[re[ae]];if(L in Oe){var Ie=Oe[L],Xe=Oe._length||A.minRowLength(Ie);if(n(Ie[0])&&n(Ie[1]))for(j=0;j<Xe;j++){var tt=Ie[0][j],rt=Ie[1][j];v(tt)&&v(rt)&&(we.push([tt,rt]),tt in _e[0][1]||(_e[0][1][tt]=_e[0][0]++),rt in _e[1][1]||(_e[1][1][rt]=_e[1][0]++))}}}for(we.sort(function(Je,ot){var Me=_e[0][1],pe=Me[Je[0]]-Me[ot[0]];if(pe)return pe;var ue=_e[1][1];return ue[Je[1]]-ue[ot[1]]}),ae=0;ae<we.length;ae++)I(we[ae])}),y.fraction2r=function(X){var re=y.r2l(y.range[0]),ae=y.r2l(y.range[1]);return y.l2r(re+X*(ae-re))},y.r2fraction=function(X){var re=y.r2l(y.range[0]),ae=y.r2l(y.range[1]);return(y.r2l(X)-re)/(ae-re)},y.limitRange=function(X){var re=y.minallowed,ae=y.maxallowed;if(!(re===void 0&&ae===void 0)){X||(X="range");var j=A.nestedProperty(y,X).get(),ee=A.simpleMap(j,y.r2l),ne=ee[1]<ee[0];ne&&ee.reverse();var ce=A.simpleMap([re,ae],y.r2l);if(re!==void 0&&ee[0]<ce[0]&&(j[ne?1:0]=re),ae!==void 0&&ee[1]>ce[1]&&(j[ne?0:1]=ae),j[0]===j[1]){var _e=y.l2r(re),we=y.l2r(ae);if(re!==void 0){var Oe=_e+1;ae!==void 0&&(Oe=Math.min(Oe,we)),j[ne?1:0]=Oe}if(ae!==void 0){var Ie=we+1;re!==void 0&&(Ie=Math.max(Ie,_e)),j[ne?0:1]=Ie}}}},y.cleanRange=function(X,re){y._cleanRange(X,re),y.limitRange(X)},y._cleanRange=function(X,re){re||(re={}),X||(X="range");var ae=A.nestedProperty(y,X).get(),j,ee;if(y.type==="date"?ee=A.dfltRange(y.calendar):L==="y"?ee=M.DFLTRANGEY:y._name==="realaxis"?ee=[0,1]:ee=re.dfltRange||M.DFLTRANGEX,ee=ee.slice(),(y.rangemode==="tozero"||y.rangemode==="nonnegative")&&(ee[0]=0),!ae||ae.length!==2){A.nestedProperty(y,X).set(ee);return}var ne=ae[0]===null,ce=ae[1]===null;for(y.type==="date"&&!y.autorange&&(ae[0]=A.cleanDate(ae[0],c,y.calendar),ae[1]=A.cleanDate(ae[1],c,y.calendar)),j=0;j<2;j++)if(y.type==="date"){if(!A.isDateTime(ae[j],y.calendar)){y[X]=ee;break}if(y.r2l(ae[0])===y.r2l(ae[1])){var _e=A.constrain(y.r2l(ae[0]),A.MIN_MS+1e3,A.MAX_MS-1e3);ae[0]=y.l2r(_e-1e3),ae[1]=y.l2r(_e+1e3);break}}else{if(!e(ae[j]))if(!(ne||ce)&&e(ae[1-j]))ae[j]=ae[1-j]*(j?10:.1);else{y[X]=ee;break}if(ae[j]<-s?ae[j]=-s:ae[j]>s&&(ae[j]=s),ae[0]===ae[1]){var we=Math.max(1,Math.abs(ae[0]*1e-6));ae[0]-=we,ae[1]+=we}}},y.setScale=function(X){var re=f._size;if(y.overlaying){var ae=w.getFromId({_fullLayout:f},y.overlaying);y.domain=ae.domain}var j=X&&y._r?"_r":"range",ee=y.calendar;y.cleanRange(j);var ne=y.r2l(y[j][0],ee),ce=y.r2l(y[j][1],ee),_e=L==="y";if(_e?(y._offset=re.t+(1-y.domain[1])*re.h,y._length=re.h*(y.domain[1]-y.domain[0]),y._m=y._length/(ne-ce),y._b=-y._m*ce):(y._offset=re.l+y.domain[0]*re.w,y._length=re.w*(y.domain[1]-y.domain[0]),y._m=y._length/(ce-ne),y._b=-y._m*ne),y._rangebreaks=[],y._lBreaks=0,y._m2=0,y._B=[],y.rangebreaks){var we,Oe;if(y._rangebreaks=y.locateBreaks(Math.min(ne,ce),Math.max(ne,ce)),y._rangebreaks.length){for(we=0;we<y._rangebreaks.length;we++)Oe=y._rangebreaks[we],y._lBreaks+=Math.abs(Oe.max-Oe.min);var Ie=_e;ne>ce&&(Ie=!Ie),Ie&&y._rangebreaks.reverse();var Xe=Ie?-1:1;for(y._m2=Xe*y._length/(Math.abs(ce-ne)-y._lBreaks),y._B.push(-y._m2*(_e?ce:ne)),we=0;we<y._rangebreaks.length;we++)Oe=y._rangebreaks[we],y._B.push(y._B[y._B.length-1]-Xe*y._m2*(Oe.max-Oe.min));for(we=0;we<y._rangebreaks.length;we++)Oe=y._rangebreaks[we],Oe.pmin=fe(Oe.min),Oe.pmax=fe(Oe.max)}}if(!isFinite(y._m)||!isFinite(y._b)||y._length<0)throw f._replotting=!1,new Error("Something went wrong with axis scaling")},y.maskBreaks=function(X){var re=y.rangebreaks||[],ae,j,ee,ne,ce;re._cachedPatterns||(re._cachedPatterns=re.map(function(Me){return Me.enabled&&Me.bounds?A.simpleMap(Me.bounds,Me.pattern?t:y.d2c):null})),re._cachedValues||(re._cachedValues=re.map(function(Me){return Me.enabled&&Me.values?A.simpleMap(Me.values,y.d2c).sort(A.sorterAsc):null}));for(var _e=0;_e<re.length;_e++){var we=re[_e];if(we.enabled){if(we.bounds){var Oe=we.pattern;switch(ae=re._cachedPatterns[_e],j=ae[0],ee=ae[1],Oe){case m:ce=new Date(X),ne=ce.getUTCDay(),j>ee&&(ee+=7,ne<j&&(ne+=7));break;case E:ce=new Date(X);var Ie=ce.getUTCHours(),Xe=ce.getUTCMinutes(),tt=ce.getUTCSeconds(),rt=ce.getUTCMilliseconds();ne=Ie+(Xe/60+tt/3600+rt/36e5),j>ee&&(ee+=24,ne<j&&(ne+=24));break;case"":ne=X;break}if(ne>=j&&ne<ee)return c}else for(var Je=re._cachedValues[_e],ot=0;ot<Je.length;ot++)if(j=Je[ot],ee=j+we.dvalue,X>=j&&X<ee)return c}}return X},y.locateBreaks=function(X,re){var ae,j,ee,ne,ce=[];if(!y.rangebreaks)return ce;var _e=y.rangebreaks.slice().sort(function(ue,ze){return ue.pattern===m&&ze.pattern===E?-1:ze.pattern===m&&ue.pattern===E?1:0}),we=function(ue,ze){if(ue=A.constrain(ue,X,re),ze=A.constrain(ze,X,re),ue!==ze){for(var Qe=!0,it=0;it<ce.length;it++){var $e=ce[it];ue<$e.max&&ze>=$e.min&&(ue<$e.min&&($e.min=ue),ze>$e.max&&($e.max=ze),Qe=!1)}Qe&&ce.push({min:ue,max:ze})}};for(ae=0;ae<_e.length;ae++){var Oe=_e[ae];if(Oe.enabled)if(Oe.bounds){var Ie=X,Xe=re;Oe.pattern&&(Ie=Math.floor(Ie)),j=A.simpleMap(Oe.bounds,Oe.pattern?t:y.r2l),ee=j[0],ne=j[1];var tt=new Date(Ie),rt,Je;switch(Oe.pattern){case m:Je=p,rt=((ne<ee?7:0)+(ne-ee))*d,Ie+=ee*d-(tt.getUTCDay()*d+tt.getUTCHours()*T+tt.getUTCMinutes()*l+tt.getUTCSeconds()*_+tt.getUTCMilliseconds());break;case E:Je=d,rt=((ne<ee?24:0)+(ne-ee))*T,Ie+=ee*T-(tt.getUTCHours()*T+tt.getUTCMinutes()*l+tt.getUTCSeconds()*_+tt.getUTCMilliseconds());break;default:Ie=Math.min(j[0],j[1]),Xe=Math.max(j[0],j[1]),Je=Xe-Ie,rt=Je}for(var ot=Ie;ot<Xe;ot+=Je)we(ot,ot+rt)}else for(var Me=A.simpleMap(Oe.values,y.d2c),pe=0;pe<Me.length;pe++)ee=Me[pe],ne=ee+Oe.dvalue,we(ee,ne)}return ce.sort(function(ue,ze){return ue.min-ze.min}),ce},y.makeCalcdata=function(X,re,ae){var j,ee,ne,ce,_e=y.type,we=_e==="date"&&X[re+"calendar"];if(re in X){if(j=X[re],ce=X._length||A.minRowLength(j),A.isTypedArray(j)&&(_e==="linear"||_e==="log")){if(ce===j.length)return j;if(j.subarray)return j.subarray(0,ce)}if(_e==="multicategory")return N(j,ce);for(ee=new Array(ce),ne=0;ne<ce;ne++)ee[ne]=y.d2c(j[ne],0,we,ae)}else{var Oe=re+"0"in X?y.d2c(X[re+"0"],0,we):0,Ie=X["d"+re]?Number(X["d"+re]):1;for(j=X[{x:"y",y:"x"}[re]],ce=X._length||j.length,ee=new Array(ce),ne=0;ne<ce;ne++)ee[ne]=Oe+ne*Ie}if(y.rangebreaks)for(ne=0;ne<ce;ne++)ee[ne]=y.maskBreaks(ee[ne]);return ee},y.isValidRange=function(X,re){return Array.isArray(X)&&X.length===2&&(re&&X[0]===null||e(y.r2l(X[0])))&&(re&&X[1]===null||e(y.r2l(X[1])))},y.getAutorangeDflt=function(X,re){var ae=!y.isValidRange(X,"nullOk");return ae&&re&&re.reverseDflt?ae="reversed":X&&(X[0]===null&&X[1]===null?ae=!0:X[0]===null&&X[1]!==null?ae="min":X[0]!==null&&X[1]===null&&(ae="max")),ae},y.isReversed=function(){var X=y.autorange;return X==="reversed"||X==="min reversed"||X==="max reversed"},y.isPtWithinRange=function(X,re){var ae=y.c2l(X[L],null,re),j=y.r2l(y.range[0]),ee=y.r2l(y.range[1]);return j<ee?j<=ae&&ae<=ee:ee<=ae&&ae<=j},y._emptyCategories=function(){y._categories=[],y._categoriesMap={}},y.clearCalc=function(){var X=y._matchGroup;if(X){var re=null,ae=null;for(var j in X){var ee=f[w.id2name(j)];if(ee._categories){re=ee._categories,ae=ee._categoriesMap;break}}re&&ae?(y._categories=re,y._categoriesMap=ae):y._emptyCategories()}else y._emptyCategories();if(y._initialCategories)for(var ne=0;ne<y._initialCategories.length;ne++)I(y._initialCategories[ne])},y.sortByInitialCategories=function(){var X=[];if(y._emptyCategories(),y._initialCategories)for(var re=0;re<y._initialCategories.length;re++)I(y._initialCategories[re]);X=X.concat(y._traceIndices);var ae=y._matchGroup;for(var j in ae)if(P!==j){var ee=f[w.id2name(j)];ee._categories=y._categories,ee._categoriesMap=y._categoriesMap,X=X.concat(ee._traceIndices)}return X};var $=f._d3locale;y.type==="date"&&(y._dateFormat=$?$.timeFormat:x,y._extraFormat=f._extraFormat),y._separators=f.separators,y._numFormat=$?$.numberFormat:S,delete y._minDtick,delete y._forceTick0}}}),Kg=Le({"src/plots/cartesian/axis_autotype.js"(Z,H){"use strict";var g=zn(),x=ni(),A=$n().BADNUM,S=x.isArrayOrTypedArray,e=x.isDateTime,t=x.cleanNumber,r=Math.round;H.exports=function(p,d,T){var l=p,_=T.noMultiCategory;if(S(l)&&!l.length)return"-";if(!_&&c(l))return"multicategory";if(_&&Array.isArray(l[0])){for(var w=[],M=0;M<l.length;M++)if(S(l[M]))for(var E=0;E<l[M].length;E++)w.push(l[M][E]);l=w}if(n(l,d))return"date";var m=T.autotypenumbers!=="strict";return s(l,m)?"category":i(l,m)?"linear":"-"};function o(h,p){return p?g(h):typeof h=="number"}function i(h,p){for(var d=h.length,T=0;T<d;T++)if(o(h[T],p))return!0;return!1}function n(h,p){for(var d=h.length,T=a(d),l=0,_=0,w={},M=0;M<d;M+=T){var E=r(M),m=h[E],b=String(m);w[b]||(w[b]=1,e(m,p)&&l++,g(m)&&_++)}return l>_*2}function a(h){return Math.max(1,(h-1)/1e3)}function s(h,p){for(var d=h.length,T=a(d),l=0,_=0,w={},M=0;M<d;M+=T){var E=r(M),m=h[E],b=String(m);if(!w[b]){w[b]=1;var v=typeof m;v==="boolean"?_++:(p?t(m)!==A:v==="number")?l++:v==="string"&&_++}}return _>l*2}function c(h){return S(h[0])&&S(h[1])}}}),cv=Le({"src/plots/cartesian/autorange.js"(Z,H){"use strict";var g=Ji(),x=zn(),A=ni(),S=$n().FP_SAFE,e=so(),t=rs(),r=Kc(),o=r.getFromId,i=r.isLinked;H.exports={applyAutorangeOptions:y,getAutoRange:n,makePadFn:s,doAutoRange:d,findExtremes:T,concatExtremes:p};function n(f,P){var L,z,F=[],O=f._fullLayout,B=s(O,P,0),I=s(O,P,1),N=p(f,P),U=N.min,W=N.max;if(U.length===0||W.length===0)return A.simpleMap(P.range,P.r2l);var Q=U[0].val,le=W[0].val;for(L=1;L<U.length&&Q===le;L++)Q=Math.min(Q,U[L].val);for(L=1;L<W.length&&Q===le;L++)le=Math.max(le,W[L].val);var se=P.autorange,fe=se==="reversed"||se==="min reversed"||se==="max reversed";if(!fe&&P.range){var G=A.simpleMap(P.range,P.r2l);fe=G[1]<G[0]}P.autorange==="reversed"&&(P.autorange=!0);var J=P.rangemode,$=J==="tozero",X=J==="nonnegative",re=P._length,ae=re/10,j=0,ee,ne,ce,_e,we,Oe;for(L=0;L<U.length;L++)for(ee=U[L],z=0;z<W.length;z++)ne=W[z],Oe=ne.val-ee.val-a(P,ee.val,ne.val),Oe>0&&(we=re-B(ee)-I(ne),we>ae?Oe/we>j&&(ce=ee,_e=ne,j=Oe/we):Oe/re>j&&(ce={val:ee.val,nopad:1},_e={val:ne.val,nopad:1},j=Oe/re));function Ie(ot,Me){return Math.max(ot,I(Me))}if(Q===le){var Xe=Q-1,tt=Q+1;if($)if(Q===0)F=[0,1];else{var rt=(Q>0?W:U).reduce(Ie,0),Je=Q/(1-Math.min(.5,rt/re));F=Q>0?[0,Je]:[Je,0]}else X?F=[Math.max(0,Xe),Math.max(1,tt)]:F=[Xe,tt]}else $?(ce.val>=0&&(ce={val:0,nopad:1}),_e.val<=0&&(_e={val:0,nopad:1})):X&&(ce.val-j*B(ce)<0&&(ce={val:0,nopad:1}),_e.val<=0&&(_e={val:1,nopad:1})),j=(_e.val-ce.val-a(P,ee.val,ne.val))/(re-B(ce)-I(_e)),F=[ce.val-j*B(ce),_e.val+j*I(_e)];return F=y(F,P),P.limitRange&&P.limitRange(),fe&&F.reverse(),A.simpleMap(F,P.l2r||Number)}function a(f,P,L){var z=0;if(f.rangebreaks)for(var F=f.locateBreaks(P,L),O=0;O<F.length;O++){var B=F[O];z+=B.max-B.min}return z}function s(f,P,L){var z=.05*P._length,F=P._anchorAxis||{};if((P.ticklabelposition||"").indexOf("inside")!==-1||(F.ticklabelposition||"").indexOf("inside")!==-1){var O=P.isReversed();if(!O){var B=A.simpleMap(P.range,P.r2l);O=B[1]<B[0]}O&&(L=!L)}var I=0;return i(f,P._id)||(I=h(f,P,L)),z=Math.max(I,z),P.constrain==="domain"&&P._inputDomain&&(z*=(P._inputDomain[1]-P._inputDomain[0])/(P.domain[1]-P.domain[0])),function(U){return U.nopad?0:U.pad+(U.extrapad?z:I)}}var c=3;function h(f,P,L){var z=0,F=P._id.charAt(0)==="x";for(var O in f._plots){var B=f._plots[O];if(!(P._id!==B.xaxis._id&&P._id!==B.yaxis._id)){var I=(F?B.yaxis:B.xaxis)||{};if((I.ticklabelposition||"").indexOf("inside")!==-1&&(!L&&(I.side==="left"||I.side==="bottom")||L&&(I.side==="top"||I.side==="right"))){if(I._vals){var N=A.deg2rad(I._tickAngles[I._id+"tick"]||0),U=Math.abs(Math.cos(N)),W=Math.abs(Math.sin(N));if(!I._vals[0].bb){var Q=I._id+"tick",le=I._selections[Q];le.each(function(X){var re=g.select(this),ae=re.select(".text-math-group");ae.empty()&&(X.bb=t.bBox(re.node()))})}for(var se=0;se<I._vals.length;se++){var fe=I._vals[se],G=fe.bb;if(G){var J=2*c+G.width,$=2*c+G.height;z=Math.max(z,F?Math.max(J*U,$*W):Math.max($*U,J*W))}}}I.ticks==="inside"&&I.ticklabelposition==="inside"&&(z+=I.ticklen||0)}}}return z}function p(f,P,L){var z=P._id,F=f._fullData,O=f._fullLayout,B=[],I=[],N,U,W;function Q(J,$){for(N=0;N<$.length;N++){var X=J[$[N]],re=(X._extremes||{})[z];if(X.visible===!0&&re){for(U=0;U<re.min.length;U++)W=re.min[U],l(B,W.val,W.pad,{extrapad:W.extrapad});for(U=0;U<re.max.length;U++)W=re.max[U],_(I,W.val,W.pad,{extrapad:W.extrapad})}}}if(Q(F,P._traceIndices),Q(O.annotations||[],P._annIndices||[]),Q(O.shapes||[],P._shapeIndices||[]),P._matchGroup&&!L){for(var le in P._matchGroup)if(le!==P._id){var se=o(f,le),fe=p(f,se,!0),G=P._length/se._length;for(U=0;U<fe.min.length;U++)W=fe.min[U],l(B,W.val,W.pad*G,{extrapad:W.extrapad});for(U=0;U<fe.max.length;U++)W=fe.max[U],_(I,W.val,W.pad*G,{extrapad:W.extrapad})}}return{min:B,max:I}}function d(f,P,L){if(P.setScale(),P.autorange){P.range=L?L.slice():n(f,P),P._r=P.range.slice(),P._rl=A.simpleMap(P._r,P.r2l);var z=P._input,F={};F[P._attr+".range"]=P.range,F[P._attr+".autorange"]=P.autorange,e.call("_storeDirectGUIEdit",f.layout,f._fullLayout._preGUI,F),z.range=P.range.slice(),z.autorange=P.autorange}var O=P._anchorAxis;if(O&&O.rangeslider){var B=O.rangeslider[P._name];B&&B.rangemode==="auto"&&(B.range=n(f,P)),O._input.rangeslider[P._name]=A.extendFlat({},B)}}function T(f,P,L){L||(L={}),f._m||f.setScale();var z=[],F=[],O=P.length,B=L.padded||!1,I=L.tozero&&(f.type==="linear"||f.type==="-"),N=f.type==="log",U=!1,W=L.vpadLinearized||!1,Q,le,se,fe,G,J,$,X,re;function ae(Ie){if(Array.isArray(Ie))return U=!0,function(tt){return Math.max(Number(Ie[tt]||0),0)};var Xe=Math.max(Number(Ie||0),0);return function(){return Xe}}var j=ae((f._m>0?L.ppadplus:L.ppadminus)||L.ppad||0),ee=ae((f._m>0?L.ppadminus:L.ppadplus)||L.ppad||0),ne=ae(L.vpadplus||L.vpad),ce=ae(L.vpadminus||L.vpad);if(!U){if(X=1/0,re=-1/0,N)for(Q=0;Q<O;Q++)le=P[Q],le<X&&le>0&&(X=le),le>re&&le<S&&(re=le);else for(Q=0;Q<O;Q++)le=P[Q],le<X&&le>-S&&(X=le),le>re&&le<S&&(re=le);P=[X,re],O=2}var _e={tozero:I,extrapad:B};function we(Ie){se=P[Ie],x(se)&&(J=j(Ie),$=ee(Ie),W?(fe=f.c2l(se)-ce(Ie),G=f.c2l(se)+ne(Ie)):(X=se-ce(Ie),re=se+ne(Ie),N&&X<re/10&&(X=re/10),fe=f.c2l(X),G=f.c2l(re)),I&&(fe=Math.min(0,fe),G=Math.max(0,G)),M(fe)&&l(z,fe,$,_e),M(G)&&_(F,G,J,_e))}var Oe=Math.min(6,O);for(Q=0;Q<Oe;Q++)we(Q);for(Q=O-1;Q>=Oe;Q--)we(Q);return{min:z,max:F,opts:L}}function l(f,P,L,z){w(f,P,L,z,E)}function _(f,P,L,z){w(f,P,L,z,m)}function w(f,P,L,z,F){for(var O=z.tozero,B=z.extrapad,I=!0,N=0;N<f.length&&I;N++){var U=f[N];if(F(U.val,P)&&U.pad>=L&&(U.extrapad||!B)){I=!1;break}else F(P,U.val)&&U.pad<=L&&(B||!U.extrapad)&&(f.splice(N,1),N--)}if(I){var W=O&&P===0;f.push({val:P,pad:W?0:L,extrapad:W?!1:B})}}function M(f){return x(f)&&Math.abs(f)<S}function E(f,P){return f<=P}function m(f,P){return f>=P}function b(f,P){var L=P.autorangeoptions;return L&&L.minallowed!==void 0&&u(P,L.minallowed,L.maxallowed)?L.minallowed:L&&L.clipmin!==void 0&&u(P,L.clipmin,L.clipmax)?Math.max(f,P.d2l(L.clipmin)):f}function v(f,P){var L=P.autorangeoptions;return L&&L.maxallowed!==void 0&&u(P,L.minallowed,L.maxallowed)?L.maxallowed:L&&L.clipmax!==void 0&&u(P,L.clipmin,L.clipmax)?Math.min(f,P.d2l(L.clipmax)):f}function u(f,P,L){return P!==void 0&&L!==void 0?(P=f.d2l(P),L=f.d2l(L),P<L):!0}function y(f,P){if(!P||!P.autorangeoptions)return f;var L=f[0],z=f[1],F=P.autorangeoptions.include;if(F!==void 0){var O=P.d2l(L),B=P.d2l(z);A.isArrayOrTypedArray(F)||(F=[F]);for(var I=0;I<F.length;I++){var N=P.d2l(F[I]);O>=N&&(O=N,L=N),B<=N&&(B=N,z=N)}}return L=b(L,P),z=v(z,P),[L,z]}}}),Zo=Le({"src/plots/cartesian/axes.js"(Z,H){"use strict";var g=Ji(),x=zn(),A=Ku(),S=so(),e=ni(),t=e.strTranslate,r=$l(),o=Um(),i=$a(),n=rs(),a=Sh(),s=qw(),c=$n(),h=c.ONEMAXYEAR,p=c.ONEAVGYEAR,d=c.ONEMINYEAR,T=c.ONEMAXQUARTER,l=c.ONEAVGQUARTER,_=c.ONEMINQUARTER,w=c.ONEMAXMONTH,M=c.ONEAVGMONTH,E=c.ONEMINMONTH,m=c.ONEWEEK,b=c.ONEDAY,v=b/2,u=c.ONEHOUR,y=c.ONEMIN,f=c.ONESEC,P=c.ONEMILLI,L=c.ONEMICROSEC,z=c.MINUS_SIGN,F=c.BADNUM,O={K:"zeroline"},B={K:"gridline",L:"path"},I={K:"minor-gridline",L:"path"},N={K:"tick",L:"path"},U={K:"tick",L:"text"},W={width:["x","r","l","xl","xr"],height:["y","t","b","yt","yb"],right:["r","xr"],left:["l","xl"],top:["t","yt"],bottom:["b","yb"]},Q=eh(),le=Q.MID_SHIFT,se=Q.CAP_SHIFT,fe=Q.LINE_SPACING,G=Q.OPPOSITE_SIDE,J=3,$=H.exports={};$.setConvert=Rv();var X=Kg(),re=Kc(),ae=re.idSort,j=re.isLinked;$.id2name=re.id2name,$.name2id=re.name2id,$.cleanId=re.cleanId,$.list=re.list,$.listIds=re.listIds,$.getFromId=re.getFromId,$.getFromTrace=re.getFromTrace;var ee=cv();$.getAutoRange=ee.getAutoRange,$.findExtremes=ee.findExtremes;var ne=1e-4;function ce(vt){var pt=(vt[1]-vt[0])*ne;return[vt[0]-pt,vt[1]+pt]}$.coerceRef=function(vt,pt,kr,Cr,wr,Ar){var Er=Cr.charAt(Cr.length-1),Br=kr._fullLayout._subplots[Er+"axis"],Pr=Cr+"ref",Qr={};return wr||(wr=Br[0]||(typeof Ar=="string"?Ar:Ar[0])),Ar||(Ar=wr),Br=Br.concat(Br.map(function(ci){return ci+" domain"})),Qr[Pr]={valType:"enumerated",values:Br.concat(Ar?typeof Ar=="string"?[Ar]:Ar:[]),dflt:wr},e.coerce(vt,pt,Qr,Pr)},$.getRefType=function(vt){return vt===void 0?vt:vt==="paper"?"paper":vt==="pixel"?"pixel":/( domain)$/.test(vt)?"domain":"range"},$.coercePosition=function(vt,pt,kr,Cr,wr,Ar){var Er,Br,Pr=$.getRefType(Cr);if(Pr!=="range")Er=e.ensureNumber,Br=kr(wr,Ar);else{var Qr=$.getFromId(pt,Cr);Ar=Qr.fraction2r(Ar),Br=kr(wr,Ar),Er=Qr.cleanPos}vt[wr]=Er(Br)},$.cleanPosition=function(vt,pt,kr){var Cr=kr==="paper"||kr==="pixel"?e.ensureNumber:$.getFromId(pt,kr).cleanPos;return Cr(vt)},$.redrawComponents=function(vt,pt){pt=pt||$.listIds(vt);var kr=vt._fullLayout;function Cr(wr,Ar,Er,Br){for(var Pr=S.getComponentMethod(wr,Ar),Qr={},ci=0;ci<pt.length;ci++)for(var mi=kr[$.id2name(pt[ci])],Et=mi[Er],ar=0;ar<Et.length;ar++){var gr=Et[ar];if(!Qr[gr]&&(Pr(vt,gr),Qr[gr]=1,Br))return}}Cr("annotations","drawOne","_annIndices"),Cr("shapes","drawOne","_shapeIndices"),Cr("images","draw","_imgIndices",!0),Cr("selections","drawOne","_selectionIndices")};var _e=$.getDataConversions=function(vt,pt,kr,Cr){var wr,Ar=kr==="x"||kr==="y"||kr==="z"?kr:Cr;if(e.isArrayOrTypedArray(Ar)){if(wr={type:X(Cr,void 0,{autotypenumbers:vt._fullLayout.autotypenumbers}),_categories:[]},$.setConvert(wr),wr.type==="category")for(var Er=0;Er<Cr.length;Er++)wr.d2c(Cr[Er])}else wr=$.getFromTrace(vt,pt,Ar);return wr?{d2c:wr.d2c,c2d:wr.c2d}:Ar==="ids"?{d2c:Oe,c2d:Oe}:{d2c:we,c2d:we}};function we(vt){return+vt}function Oe(vt){return String(vt)}$.getDataToCoordFunc=function(vt,pt,kr,Cr){return _e(vt,pt,kr,Cr).d2c},$.counterLetter=function(vt){var pt=vt.charAt(0);if(pt==="x")return"y";if(pt==="y")return"x"},$.minDtick=function(vt,pt,kr,Cr){["log","category","multicategory"].indexOf(vt.type)!==-1||!Cr?vt._minDtick=0:vt._minDtick===void 0?(vt._minDtick=pt,vt._forceTick0=kr):vt._minDtick&&((vt._minDtick/pt+1e-6)%1<2e-6&&((kr-vt._forceTick0)/pt%1+1.000001)%1<2e-6?(vt._minDtick=pt,vt._forceTick0=kr):((pt/vt._minDtick+1e-6)%1>2e-6||((kr-vt._forceTick0)/vt._minDtick%1+1.000001)%1>2e-6)&&(vt._minDtick=0))},$.saveRangeInitial=function(vt,pt){for(var kr=$.list(vt,"",!0),Cr=!1,wr=0;wr<kr.length;wr++){var Ar=kr[wr],Er=Ar._rangeInitial0===void 0&&Ar._rangeInitial1===void 0,Br=Er||Ar.range[0]!==Ar._rangeInitial0||Ar.range[1]!==Ar._rangeInitial1,Pr=Ar.autorange;(Er&&Pr!==!0||pt&&Br)&&(Ar._rangeInitial0=Pr==="min"||Pr==="max reversed"?void 0:Ar.range[0],Ar._rangeInitial1=Pr==="max"||Pr==="min reversed"?void 0:Ar.range[1],Ar._autorangeInitial=Pr,Cr=!0)}return Cr},$.saveShowSpikeInitial=function(vt,pt){for(var kr=$.list(vt,"",!0),Cr=!1,wr="on",Ar=0;Ar<kr.length;Ar++){var Er=kr[Ar],Br=Er._showSpikeInitial===void 0,Pr=Br||Er.showspikes!==Er._showspikes;(Br||pt&&Pr)&&(Er._showSpikeInitial=Er.showspikes,Cr=!0),wr==="on"&&!Er.showspikes&&(wr="off")}return vt._fullLayout._cartesianSpikesEnabled=wr,Cr},$.autoBin=function(vt,pt,kr,Cr,wr,Ar){var Er=e.aggNums(Math.min,null,vt),Br=e.aggNums(Math.max,null,vt);if(pt.type==="category"||pt.type==="multicategory")return{start:Er-.5,end:Br+.5,size:Math.max(1,Math.round(Ar)||1),_dataSpan:Br-Er};wr||(wr=pt.calendar);var Pr;if(pt.type==="log"?Pr={type:"linear",range:[Er,Br]}:Pr={type:pt.type,range:e.simpleMap([Er,Br],pt.c2r,0,wr),calendar:wr},$.setConvert(Pr),Ar=Ar&&s.dtick(Ar,Pr.type),Ar)Pr.dtick=Ar,Pr.tick0=s.tick0(void 0,Pr.type,wr);else{var Qr;if(kr)Qr=(Br-Er)/kr;else{var ci=e.distinctVals(vt),mi=Math.pow(10,Math.floor(Math.log(ci.minDiff)/Math.LN10)),Et=mi*e.roundUp(ci.minDiff/mi,[.9,1.9,4.9,9.9],!0);Qr=Math.max(Et,2*e.stdev(vt)/Math.pow(vt.length,Cr?.25:.4)),x(Qr)||(Qr=1)}$.autoTicks(Pr,Qr)}var ar=Pr.dtick,gr=$.tickIncrement($.tickFirst(Pr),ar,"reverse",wr),ti,wi;if(typeof ar=="number")gr=Ie(gr,vt,Pr,Er,Br),wi=1+Math.floor((Br-gr)/ar),ti=gr+wi*ar;else for(Pr.dtick.charAt(0)==="M"&&(gr=Xe(gr,vt,ar,Er,wr)),ti=gr,wi=0;ti<=Br;)ti=$.tickIncrement(ti,ar,!1,wr),wi++;return{start:pt.c2r(gr,0,wr),end:pt.c2r(ti,0,wr),size:ar,_dataSpan:Br-Er}};function Ie(vt,pt,kr,Cr,wr){var Ar=0,Er=0,Br=0,Pr=0;function Qr(ar){return(1+(ar-vt)*100/kr.dtick)%100<2}for(var ci=0;ci<pt.length;ci++)pt[ci]%1===0?Br++:x(pt[ci])||Pr++,Qr(pt[ci])&&Ar++,Qr(pt[ci]+kr.dtick/2)&&Er++;var mi=pt.length-Pr;if(Br===mi&&kr.type!=="date")kr.dtick<1?vt=Cr-.5*kr.dtick:(vt-=.5,vt+kr.dtick<Cr&&(vt+=kr.dtick));else if(Er<mi*.1&&(Ar>mi*.3||Qr(Cr)||Qr(wr))){var Et=kr.dtick/2;vt+=vt+Et<Cr?Et:-Et}return vt}function Xe(vt,pt,kr,Cr,wr){var Ar=e.findExactDates(pt,wr),Er=.8;if(Ar.exactDays>Er){var Br=Number(kr.substr(1));Ar.exactYears>Er&&Br%12===0?vt=$.tickIncrement(vt,"M6","reverse")+b*1.5:Ar.exactMonths>Er?vt=$.tickIncrement(vt,"M1","reverse")+b*15.5:vt-=v;var Pr=$.tickIncrement(vt,kr);if(Pr<=Cr)return Pr}return vt}$.prepMinorTicks=function(vt,pt,kr){if(!pt.minor.dtick){delete vt.dtick;var Cr=pt.dtick&&x(pt._tmin),wr;if(Cr){var Ar=$.tickIncrement(pt._tmin,pt.dtick,!0);wr=[pt._tmin,Ar*.99+pt._tmin*.01]}else{var Er=e.simpleMap(pt.range,pt.r2l);wr=[Er[0],.8*Er[0]+.2*Er[1]]}if(vt.range=e.simpleMap(wr,pt.l2r),vt._isMinor=!0,$.prepTicks(vt,kr),Cr){var Br=x(pt.dtick),Pr=x(vt.dtick),Qr=Br?pt.dtick:+pt.dtick.substring(1),ci=Pr?vt.dtick:+vt.dtick.substring(1);Br&&Pr?tt(Qr,ci)?Qr===2*m&&ci===2*b&&(vt.dtick=m):Qr===2*m&&ci===3*b?vt.dtick=m:Qr===m&&!(pt._input.minor||{}).nticks?vt.dtick=b:rt(Qr/ci,2.5)?vt.dtick=Qr/2:vt.dtick=Qr:String(pt.dtick).charAt(0)==="M"?Pr?vt.dtick="M1":tt(Qr,ci)?Qr>=12&&ci===2&&(vt.dtick="M3"):vt.dtick=pt.dtick:String(vt.dtick).charAt(0)==="L"?String(pt.dtick).charAt(0)==="L"?tt(Qr,ci)||(vt.dtick=rt(Qr/ci,2.5)?pt.dtick/2:pt.dtick):vt.dtick="D1":vt.dtick==="D2"&&+pt.dtick>1&&(vt.dtick=1)}vt.range=pt.range}pt.minor._tick0Init===void 0&&(vt.tick0=pt.tick0)};function tt(vt,pt){return Math.abs((vt/pt+.5)%1-.5)<.001}function rt(vt,pt){return Math.abs(vt/pt-1)<.001}$.prepTicks=function(vt,pt){var kr=e.simpleMap(vt.range,vt.r2l,void 0,void 0,pt);if(vt.tickmode==="auto"||!vt.dtick){var Cr=vt.nticks,wr;Cr||(vt.type==="category"||vt.type==="multicategory"?(wr=vt.tickfont?e.bigFont(vt.tickfont.size||12):15,Cr=vt._length/wr):(wr=vt._id.charAt(0)==="y"?40:80,Cr=e.constrain(vt._length/wr,4,9)+1),vt._name==="radialaxis"&&(Cr*=2)),vt.minor&&vt.minor.tickmode!=="array"||vt.tickmode==="array"&&(Cr*=100),vt._roughDTick=Math.abs(kr[1]-kr[0])/Cr,$.autoTicks(vt,vt._roughDTick),vt._minDtick>0&&vt.dtick<vt._minDtick*2&&(vt.dtick=vt._minDtick,vt.tick0=vt.l2r(vt._forceTick0))}vt.ticklabelmode==="period"&&ot(vt),vt.tick0||(vt.tick0=vt.type==="date"?"2000-01-01":0),vt.type==="date"&&vt.dtick<.1&&(vt.dtick=.1),nr(vt)};function Je(vt){return+vt.substring(1)}function ot(vt){var pt;function kr(){return!(x(vt.dtick)||vt.dtick.charAt(0)!=="M")}var Cr=kr(),wr=$.getTickFormat(vt);if(wr){var Ar=vt._dtickInit!==vt.dtick;/%[fLQsSMX]/.test(wr)||(/%[HI]/.test(wr)?(pt=u,Ar&&!Cr&&vt.dtick<u&&(vt.dtick=u)):/%p/.test(wr)?(pt=v,Ar&&!Cr&&vt.dtick<v&&(vt.dtick=v)):/%[Aadejuwx]/.test(wr)?(pt=b,Ar&&!Cr&&vt.dtick<b&&(vt.dtick=b)):/%[UVW]/.test(wr)?(pt=m,Ar&&!Cr&&vt.dtick<m&&(vt.dtick=m)):/%[Bbm]/.test(wr)?(pt=M,Ar&&(Cr?Je(vt.dtick)<1:vt.dtick<E)&&(vt.dtick="M1")):/%[q]/.test(wr)?(pt=l,Ar&&(Cr?Je(vt.dtick)<3:vt.dtick<_)&&(vt.dtick="M3")):/%[Yy]/.test(wr)&&(pt=p,Ar&&(Cr?Je(vt.dtick)<12:vt.dtick<d)&&(vt.dtick="M12")))}Cr=kr(),Cr&&vt.tick0===vt._dowTick0&&(vt.tick0=vt._rawTick0),vt._definedDelta=pt}function Me(vt,pt,kr){for(var Cr=0;Cr<vt.length;Cr++){var wr=vt[Cr].value,Ar=Cr,Er=Cr+1;Cr<vt.length-1?(Ar=Cr,Er=Cr+1):Cr>0?(Ar=Cr-1,Er=Cr):(Ar=Cr,Er=Cr);var Br=vt[Ar].value,Pr=vt[Er].value,Qr=Math.abs(Pr-Br),ci=kr||Qr,mi=0;ci>=d?Qr>=d&&Qr<=h?mi=Qr:mi=p:kr===l&&ci>=_?Qr>=_&&Qr<=T?mi=Qr:mi=l:ci>=E?Qr>=E&&Qr<=w?mi=Qr:mi=M:kr===m&&ci>=m?mi=m:ci>=b?mi=b:kr===v&&ci>=v?mi=v:kr===u&&ci>=u&&(mi=u);var Et;mi>=Qr&&(mi=Qr,Et=!0);var ar=wr+mi;if(pt.rangebreaks&&mi>0){for(var gr=84,ti=0,wi=0;wi<gr;wi++){var Gi=(wi+.5)/gr;pt.maskBreaks(wr*(1-Gi)+Gi*ar)!==F&&ti++}mi*=ti/gr,mi||(vt[Cr].drop=!0),Et&&Qr>m&&(mi=Qr)}(mi>0||Cr===0)&&(vt[Cr].periodX=wr+mi/2)}}$.calcTicks=function(pt,kr){for(var Cr=pt.type,wr=pt.calendar,Ar=pt.ticklabelstep,Er=pt.ticklabelmode==="period",Br=pt.range[0]>pt.range[1],Pr=!pt.ticklabelindex||e.isArrayOrTypedArray(pt.ticklabelindex)?pt.ticklabelindex:[pt.ticklabelindex],Qr=e.simpleMap(pt.range,pt.r2l,void 0,void 0,kr),ci=Qr[1]<Qr[0],mi=Math.min(Qr[0],Qr[1]),Et=Math.max(Qr[0],Qr[1]),ar=Math.max(1e3,pt._length||0),gr=[],ti=[],wi=[],Gi=[],Fi=[],xi=pt.minor&&(pt.minor.ticks||pt.minor.showgrid),Ii=1;Ii>=(xi?0:1);Ii--){var Bn=!Ii;Ii?(pt._dtickInit=pt.dtick,pt._tick0Init=pt.tick0):(pt.minor._dtickInit=pt.minor.dtick,pt.minor._tick0Init=pt.minor.tick0);var hn=Ii?pt:e.extendFlat({},pt,pt.minor);if(Bn?$.prepMinorTicks(hn,pt,kr):$.prepTicks(hn,kr),hn.tickmode==="array"){Ii?(wi=[],gr=ze(pt,!Bn)):(Gi=[],ti=ze(pt,!Bn));continue}if(hn.tickmode==="sync"){wi=[],gr=ue(pt);continue}var ba=ce(Qr),Aa=ba[0],Va=ba[1],Qa=x(hn.dtick),yo=Cr==="log"&&!(Qa||hn.dtick.charAt(0)==="L"),Ga=$.tickFirst(hn,kr);if(Ii){if(pt._tmin=Ga,Ga<Aa!==ci)break;(Cr==="category"||Cr==="multicategory")&&(Va=ci?Math.max(-.5,Va):Math.min(pt._categories.length-.5,Va))}var Yo=null,da=Ga,vs;if(Ii){var es;Qa?es=pt.dtick:Cr==="date"?typeof pt.dtick=="string"&&pt.dtick.charAt(0)==="M"&&(es=M*pt.dtick.substring(1)):es=pt._roughDTick,vs=Math.round((pt.r2l(da)-pt.r2l(pt.tick0))/es)-1}var bs=hn.dtick;for(hn.rangebreaks&&hn._tick0Init!==hn.tick0&&(da=Yr(da,pt),ci||(da=$.tickIncrement(da,bs,!ci,wr))),Ii&&Er&&(da=$.tickIncrement(da,bs,!ci,wr),vs--);ci?da>=Va:da<=Va;da=$.tickIncrement(da,bs,ci,wr)){if(Ii&&vs++,hn.rangebreaks&&!ci){if(da<Aa)continue;if(hn.maskBreaks(da)===F&&Yr(da,hn)>=Et)break}if(wi.length>ar||da===Yo)break;Yo=da;var Xa={value:da};Ii?(yo&&da!==(da|0)&&(Xa.simpleLabel=!0),Ar>1&&vs%Ar&&(Xa.skipLabel=!0),wi.push(Xa)):(Xa.minor=!0,Gi.push(Xa))}}if(!Gi||Gi.length<2)Pr=!1;else{var Bo=(Gi[1].value-Gi[0].value)*(Br?-1:1);sn(Bo,pt.tickformat)||(Pr=!1)}if(!Pr)Fi=wi;else{var Za=wi.concat(Gi);Er&&wi.length&&(Za=Za.slice(1)),Za=Za.sort(function(po,zs){return po.value-zs.value}).filter(function(po,zs,hs){return zs===0||po.value!==hs[zs-1].value});var Qo=Za.map(function(po,zs){return po.minor===void 0&&!po.skipLabel?zs:null}).filter(function(po){return po!==null});Qo.forEach(function(po){Pr.map(function(zs){var hs=po+zs;hs>=0&&hs<Za.length&&e.pushUnique(Fi,Za[hs])})})}if(xi){var ss=pt.minor.ticks==="inside"&&pt.ticks==="outside"||pt.minor.ticks==="outside"&&pt.ticks==="inside";if(!ss){for(var gs=wi.map(function(po){return po.value}),vo=[],zo=0;zo<Gi.length;zo++){var Ds=Gi[zo],Hs=Ds.value;if(gs.indexOf(Hs)===-1){for(var Zs=!1,ps=0;!Zs&&ps<wi.length;ps++)1e7+wi[ps].value===1e7+Hs&&(Zs=!0);Zs||vo.push(Ds)}}Gi=vo}}Er&&Me(Fi,pt,pt._definedDelta);var bn;if(pt.rangebreaks){var Ra=pt._id.charAt(0)==="y",_l=1;pt.tickmode==="auto"&&(_l=pt.tickfont?pt.tickfont.size:12);var Ys=NaN;for(bn=wi.length-1;bn>-1;bn--){if(wi[bn].drop){wi.splice(bn,1);continue}wi[bn].value=Yr(wi[bn].value,pt);var ko=pt.c2p(wi[bn].value);(Ra?Ys>ko-_l:Ys<ko+_l)?wi.splice(ci?bn+1:bn,1):Ys=ko}}_i(pt)&&Math.abs(Qr[1]-Qr[0])===360&&wi.pop(),pt._tmax=(wi[wi.length-1]||{}).value,pt._prevDateHead="",pt._inCalcTicks=!0;var Js,ks=function(po){po.text="",pt._prevDateHead=Js};wi=wi.concat(Gi);function ml(po,zs){var hs=$.tickText(po,zs.value,!1,zs.simpleLabel),to=zs.periodX;return to!==void 0&&(hs.periodX=to,(to>Et||to<mi)&&(to>Et&&(hs.periodX=Et),to<mi&&(hs.periodX=mi),ks(hs))),hs}var El;for(bn=0;bn<wi.length;bn++){var aa=wi[bn].minor,Ho=wi[bn].value;aa?(Pr&&Fi.indexOf(wi[bn])!==-1?El=ml(pt,wi[bn]):El={x:Ho},El.minor=!0,ti.push(El)):(Js=pt._prevDateHead,El=ml(pt,wi[bn]),(wi[bn].skipLabel||Pr&&Fi.indexOf(wi[bn])===-1)&&ks(El),gr.push(El))}return gr=gr.concat(ti),pt._inCalcTicks=!1,Er&&gr.length&&(gr[0].noTick=!0),gr};function pe(vt,pt){return vt.rangebreaks&&(pt=pt.filter(function(kr){return vt.maskBreaks(kr.x)!==F})),pt}function ue(vt){var pt=vt._mainAxis,kr=[];if(pt._vals){for(var Cr=0;Cr<pt._vals.length;Cr++)if(!pt._vals[Cr].noTick){var wr=pt.l2p(pt._vals[Cr].x),Ar=vt.p2l(wr),Er=$.tickText(vt,Ar);pt._vals[Cr].minor&&(Er.minor=!0,Er.text=""),kr.push(Er)}}return kr=pe(vt,kr),kr}function ze(vt,pt){var kr=e.simpleMap(vt.range,vt.r2l),Cr=ce(kr),wr=Math.min(Cr[0],Cr[1]),Ar=Math.max(Cr[0],Cr[1]),Er=vt.type==="category"?vt.d2l_noadd:vt.d2l;vt.type==="log"&&String(vt.dtick).charAt(0)!=="L"&&(vt.dtick="L"+Math.pow(10,Math.floor(Math.min(vt.range[0],vt.range[1]))-1));for(var Br=[],Pr=0;Pr<=1;Pr++)if(!(pt!==void 0&&(pt&&Pr||pt===!1&&!Pr))&&!(Pr&&!vt.minor)){var Qr=Pr?vt.minor.tickvals:vt.tickvals,ci=Pr?[]:vt.ticktext;if(Qr){e.isArrayOrTypedArray(ci)||(ci=[]);for(var mi=0;mi<Qr.length;mi++){var Et=Er(Qr[mi]);if(Et>wr&&Et<Ar){var ar=$.tickText(vt,Et,!1,String(ci[mi]));Pr&&(ar.minor=!0,ar.text=""),Br.push(ar)}}}}return Br=pe(vt,Br),Br}var Qe=[2,5,10],it=[1,2,3,6,12],$e=[1,2,5,10,15,30],kt=[1,2,3,7,14],Mt=[-.046,0,.301,.477,.602,.699,.778,.845,.903,.954,1],Bt=[-.301,0,.301,.699,1],jt=[15,30,45,90,180];function cr(vt,pt,kr){return pt*e.roundUp(vt/pt,kr)}$.autoTicks=function(vt,pt,kr){var Cr;function wr(mi){return Math.pow(mi,Math.floor(Math.log(pt)/Math.LN10))}if(vt.type==="date"){vt.tick0=e.dateTick0(vt.calendar,0);var Ar=2*pt;if(Ar>p)pt/=p,Cr=wr(10),vt.dtick="M"+12*cr(pt,Cr,Qe);else if(Ar>M)pt/=M,vt.dtick="M"+cr(pt,1,it);else if(Ar>b){if(vt.dtick=cr(pt,b,vt._hasDayOfWeekBreaks?[1,2,7,14]:kt),!kr){var Er=$.getTickFormat(vt),Br=vt.ticklabelmode==="period";Br&&(vt._rawTick0=vt.tick0),/%[uVW]/.test(Er)?vt.tick0=e.dateTick0(vt.calendar,2):vt.tick0=e.dateTick0(vt.calendar,1),Br&&(vt._dowTick0=vt.tick0)}}else Ar>u?vt.dtick=cr(pt,u,it):Ar>y?vt.dtick=cr(pt,y,$e):Ar>f?vt.dtick=cr(pt,f,$e):(Cr=wr(10),vt.dtick=cr(pt,Cr,Qe))}else if(vt.type==="log"){vt.tick0=0;var Pr=e.simpleMap(vt.range,vt.r2l);if(vt._isMinor&&(pt*=1.5),pt>.7)vt.dtick=Math.ceil(pt);else if(Math.abs(Pr[1]-Pr[0])<1){var Qr=1.5*Math.abs((Pr[1]-Pr[0])/pt);pt=Math.abs(Math.pow(10,Pr[1])-Math.pow(10,Pr[0]))/Qr,Cr=wr(10),vt.dtick="L"+cr(pt,Cr,Qe)}else vt.dtick=pt>.3?"D2":"D1"}else vt.type==="category"||vt.type==="multicategory"?(vt.tick0=0,vt.dtick=Math.ceil(Math.max(pt,1))):_i(vt)?(vt.tick0=0,Cr=1,vt.dtick=cr(pt,Cr,jt)):(vt.tick0=0,Cr=wr(10),vt.dtick=cr(pt,Cr,Qe));if(vt.dtick===0&&(vt.dtick=1),!x(vt.dtick)&&typeof vt.dtick!="string"){var ci=vt.dtick;throw vt.dtick=1,"ax.dtick error: "+String(ci)}};function nr(vt){var pt=vt.dtick;if(vt._tickexponent=0,!x(pt)&&typeof pt!="string"&&(pt=1),(vt.type==="category"||vt.type==="multicategory")&&(vt._tickround=null),vt.type==="date"){var kr=vt.r2l(vt.tick0),Cr=vt.l2r(kr).replace(/(^-|i)/g,""),wr=Cr.length;if(String(pt).charAt(0)==="M")wr>10||Cr.substr(5)!=="01-01"?vt._tickround="d":vt._tickround=+pt.substr(1)%12===0?"y":"m";else if(pt>=b&&wr<=10||pt>=b*15)vt._tickround="d";else if(pt>=y&&wr<=16||pt>=u)vt._tickround="M";else if(pt>=f&&wr<=19||pt>=y)vt._tickround="S";else{var Ar=vt.l2r(kr+pt).replace(/^-/,"").length;vt._tickround=Math.max(wr,Ar)-20,vt._tickround<0&&(vt._tickround=4)}}else if(x(pt)||pt.charAt(0)==="L"){var Er=vt.range.map(vt.r2d||Number);x(pt)||(pt=Number(pt.substr(1))),vt._tickround=2-Math.floor(Math.log(pt)/Math.LN10+.01);var Br=Math.max(Math.abs(Er[0]),Math.abs(Er[1])),Pr=Math.floor(Math.log(Br)/Math.LN10+.01),Qr=vt.minexponent===void 0?3:vt.minexponent;Math.abs(Pr)>Qr&&(Ee(vt.exponentformat)&&!be(Pr)?vt._tickexponent=3*Math.round((Pr-1)/3):vt._tickexponent=Pr)}else vt._tickround=null}$.tickIncrement=function(vt,pt,kr,Cr){var wr=kr?-1:1;if(x(pt))return e.increment(vt,wr*pt);var Ar=pt.charAt(0),Er=wr*Number(pt.substr(1));if(Ar==="M")return e.incrementMonth(vt,Er,Cr);if(Ar==="L")return Math.log(Math.pow(10,vt)+Er)/Math.LN10;if(Ar==="D"){var Br=pt==="D2"?Bt:Mt,Pr=vt+wr*.01,Qr=e.roundUp(e.mod(Pr,1),Br,kr);return Math.floor(Pr)+Math.log(g.round(Math.pow(10,Qr),1))/Math.LN10}throw"unrecognized dtick "+String(pt)},$.tickFirst=function(vt,pt){var kr=vt.r2l||Number,Cr=e.simpleMap(vt.range,kr,void 0,void 0,pt),wr=Cr[1]<Cr[0],Ar=wr?Math.floor:Math.ceil,Er=ce(Cr)[0],Br=vt.dtick,Pr=kr(vt.tick0);if(x(Br)){var Qr=Ar((Er-Pr)/Br)*Br+Pr;return(vt.type==="category"||vt.type==="multicategory")&&(Qr=e.constrain(Qr,0,vt._categories.length-1)),Qr}var ci=Br.charAt(0),mi=Number(Br.substr(1));if(ci==="M"){for(var Et=0,ar=Pr,gr,ti,wi;Et<10;){if(gr=$.tickIncrement(ar,Br,wr,vt.calendar),(gr-Er)*(ar-Er)<=0)return wr?Math.min(ar,gr):Math.max(ar,gr);ti=(Er-(ar+gr)/2)/(gr-ar),wi=ci+(Math.abs(Math.round(ti))||1)*mi,ar=$.tickIncrement(ar,wi,ti<0?!wr:wr,vt.calendar),Et++}return e.error("tickFirst did not converge",vt),ar}else{if(ci==="L")return Math.log(Ar((Math.pow(10,Er)-Pr)/mi)*mi+Pr)/Math.LN10;if(ci==="D"){var Gi=Br==="D2"?Bt:Mt,Fi=e.roundUp(e.mod(Er,1),Gi,wr);return Math.floor(Er)+Math.log(g.round(Math.pow(10,Fi),1))/Math.LN10}else throw"unrecognized dtick "+String(Br)}},$.tickText=function(vt,pt,kr,Cr){var wr=Lr(vt,pt),Ar=vt.tickmode==="array",Er=kr||Ar,Br=vt.type,Pr=Br==="category"?vt.d2l_noadd:vt.d2l,Qr,ci=function(wi){var Gi=vt.l2p(wi);return Gi>=0&&Gi<=vt._length?wi:null};if(Ar&&e.isArrayOrTypedArray(vt.ticktext)){var mi=e.simpleMap(vt.range,vt.r2l),Et=(Math.abs(mi[1]-mi[0])-(vt._lBreaks||0))/1e4;for(Qr=0;Qr<vt.ticktext.length&&!(Math.abs(pt-Pr(vt.tickvals[Qr]))<Et);Qr++);if(Qr<vt.ticktext.length)return wr.text=String(vt.ticktext[Qr]),wr.xbnd=[ci(wr.x-.5),ci(wr.x+vt.dtick-.5)],wr}function ar(wi){if(wi===void 0)return!0;if(kr)return wi==="none";var Gi={first:vt._tmin,last:vt._tmax}[wi];return wi!=="all"&&pt!==Gi}var gr=kr?"never":vt.exponentformat!=="none"&&ar(vt.showexponent)?"hide":"";if(Br==="date"?mr(vt,wr,kr,Er):Br==="log"?xr(vt,wr,kr,Er,gr):Br==="category"?mt(vt,wr):Br==="multicategory"?Fe(vt,wr,kr):_i(vt)?Ne(vt,wr,kr,Er,gr):Ze(vt,wr,kr,Er,gr),Cr||(vt.tickprefix&&!ar(vt.showtickprefix)&&(wr.text=vt.tickprefix+wr.text),vt.ticksuffix&&!ar(vt.showticksuffix)&&(wr.text+=vt.ticksuffix)),vt.labelalias&&vt.labelalias.hasOwnProperty(wr.text)){var ti=vt.labelalias[wr.text];typeof ti=="string"&&(wr.text=ti)}return(vt.tickson==="boundaries"||vt.showdividers)&&(wr.xbnd=[ci(wr.x-.5),ci(wr.x+vt.dtick-.5)]),wr},$.hoverLabelText=function(vt,pt,kr){kr&&(vt=e.extendFlat({},vt,{hoverformat:kr}));var Cr=e.isArrayOrTypedArray(pt)?pt[0]:pt,wr=e.isArrayOrTypedArray(pt)?pt[1]:void 0;if(wr!==void 0&&wr!==Cr)return $.hoverLabelText(vt,Cr,kr)+" - "+$.hoverLabelText(vt,wr,kr);var Ar=vt.type==="log"&&Cr<=0,Er=$.tickText(vt,vt.c2l(Ar?-Cr:Cr),"hover").text;return Ar?Cr===0?"0":z+Er:Er};function Lr(vt,pt,kr){var Cr=vt.tickfont||{};return{x:pt,dx:0,dy:0,text:kr||"",fontSize:Cr.size,font:Cr.family,fontWeight:Cr.weight,fontStyle:Cr.style,fontVariant:Cr.variant,fontTextcase:Cr.textcase,fontLineposition:Cr.lineposition,fontShadow:Cr.shadow,fontColor:Cr.color}}function mr(vt,pt,kr,Cr){var wr=vt._tickround,Ar=kr&&vt.hoverformat||$.getTickFormat(vt);Cr=!Ar&&Cr,Cr&&(x(wr)?wr=4:wr={y:"m",m:"d",d:"M",M:"S",S:4}[wr]);var Er=e.formatDate(pt.x,Ar,wr,vt._dateFormat,vt.calendar,vt._extraFormat),Br,Pr=Er.indexOf(`
+`);if(Pr!==-1&&(Br=Er.substr(Pr+1),Er=Er.substr(0,Pr)),Cr&&(Br!==void 0&&(Er==="00:00:00"||Er==="00:00")?(Er=Br,Br=""):Er.length===8&&(Er=Er.replace(/:00$/,""))),Br)if(kr)wr==="d"?Er+=", "+Br:Er=Br+(Er?", "+Er:"");else if(!vt._inCalcTicks||vt._prevDateHead!==Br)vt._prevDateHead=Br,Er+="<br>"+Br;else{var Qr=Di(vt),ci=vt._trueSide||vt.side;(!Qr&&ci==="top"||Qr&&ci==="bottom")&&(Er+="<br> ")}pt.text=Er}function xr(vt,pt,kr,Cr,wr){var Ar=vt.dtick,Er=pt.x,Br=vt.tickformat,Pr=typeof Ar=="string"&&Ar.charAt(0);if(wr==="never"&&(wr=""),Cr&&Pr!=="L"&&(Ar="L3",Pr="L"),Br||Pr==="L")pt.text=Ce(Math.pow(10,Er),vt,wr,Cr);else if(x(Ar)||Pr==="D"&&e.mod(Er+.01,1)<.1){var Qr=Math.round(Er),ci=Math.abs(Qr),mi=vt.exponentformat;mi==="power"||Ee(mi)&&be(Qr)?(Qr===0?pt.text=1:Qr===1?pt.text="10":pt.text="10<sup>"+(Qr>1?"":z)+ci+"</sup>",pt.fontSize*=1.25):(mi==="e"||mi==="E")&&ci>2?pt.text="1"+mi+(Qr>0?"+":z)+ci:(pt.text=Ce(Math.pow(10,Er),vt,"","fakehover"),Ar==="D1"&&vt._id.charAt(0)==="y"&&(pt.dy-=pt.fontSize/6))}else if(Pr==="D")pt.text=String(Math.round(Math.pow(10,e.mod(Er,1)))),pt.fontSize*=.75;else throw"unrecognized dtick "+String(Ar);if(vt.dtick==="D1"){var Et=String(pt.text).charAt(0);(Et==="0"||Et==="1")&&(vt._id.charAt(0)==="y"?pt.dx-=pt.fontSize/4:(pt.dy+=pt.fontSize/2,pt.dx+=(vt.range[1]>vt.range[0]?1:-1)*pt.fontSize*(Er<0?.5:.25)))}}function mt(vt,pt){var kr=vt._categories[Math.round(pt.x)];kr===void 0&&(kr=""),pt.text=String(kr)}function Fe(vt,pt,kr){var Cr=Math.round(pt.x),wr=vt._categories[Cr]||[],Ar=wr[1]===void 0?"":String(wr[1]),Er=wr[0]===void 0?"":String(wr[0]);kr?pt.text=Er+" - "+Ar:(pt.text=Ar,pt.text2=Er)}function Ze(vt,pt,kr,Cr,wr){wr==="never"?wr="":vt.showexponent==="all"&&Math.abs(pt.x/vt.dtick)<1e-6&&(wr="hide"),pt.text=Ce(pt.x,vt,wr,Cr)}function Ne(vt,pt,kr,Cr,wr){if(vt.thetaunit==="radians"&&!kr){var Ar=pt.x/180;if(Ar===0)pt.text="0";else{var Er=Se(Ar);if(Er[1]>=100)pt.text=Ce(e.deg2rad(pt.x),vt,wr,Cr);else{var Br=pt.x<0;Er[1]===1?Er[0]===1?pt.text="\u03C0":pt.text=Er[0]+"\u03C0":pt.text=["<sup>",Er[0],"</sup>","\u2044","<sub>",Er[1],"</sub>","\u03C0"].join(""),Br&&(pt.text=z+pt.text)}}}else pt.text=Ce(pt.x,vt,wr,Cr)}function Se(vt){function pt(Br,Pr){return Math.abs(Br-Pr)<=1e-6}function kr(Br,Pr){return pt(Pr,0)?Br:kr(Pr,Br%Pr)}function Cr(Br){for(var Pr=1;!pt(Math.round(Br*Pr)/Pr,Br);)Pr*=10;return Pr}var wr=Cr(vt),Ar=vt*wr,Er=Math.abs(kr(Ar,wr));return[Math.round(Ar/Er),Math.round(wr/Er)]}var Ve=["f","p","n","\u03BC","m","","k","M","G","T"];function Ee(vt){return vt==="SI"||vt==="B"}function be(vt){return vt>14||vt<-15}function Ce(vt,pt,kr,Cr){var wr=vt<0,Ar=pt._tickround,Er=kr||pt.exponentformat||"B",Br=pt._tickexponent,Pr=$.getTickFormat(pt),Qr=pt.separatethousands;if(Cr){var ci={exponentformat:Er,minexponent:pt.minexponent,dtick:pt.showexponent==="none"?pt.dtick:x(vt)&&Math.abs(vt)||1,range:pt.showexponent==="none"?pt.range.map(pt.r2d):[0,vt||1]};nr(ci),Ar=(Number(ci._tickround)||0)+4,Br=ci._tickexponent,pt.hoverformat&&(Pr=pt.hoverformat)}if(Pr)return pt._numFormat(Pr)(vt).replace(/-/g,z);var mi=Math.pow(10,-Ar)/2;if(Er==="none"&&(Br=0),vt=Math.abs(vt),vt<mi)vt="0",wr=!1;else{if(vt+=mi,Br&&(vt*=Math.pow(10,-Br),Ar+=Br),Ar===0)vt=String(Math.floor(vt));else if(Ar<0){vt=String(Math.round(vt)),vt=vt.substr(0,vt.length+Ar);for(var Et=Ar;Et<0;Et++)vt+="0"}else{vt=String(vt);var ar=vt.indexOf(".")+1;ar&&(vt=vt.substr(0,ar+Ar).replace(/\.?0+$/,""))}vt=e.numSeparate(vt,pt._separators,Qr)}if(Br&&Er!=="hide"){Ee(Er)&&be(Br)&&(Er="power");var gr;Br<0?gr=z+-Br:Er!=="power"?gr="+"+Br:gr=String(Br),Er==="e"||Er==="E"?vt+=Er+gr:Er==="power"?vt+="\xD710<sup>"+gr+"</sup>":Er==="B"&&Br===9?vt+="B":Ee(Er)&&(vt+=Ve[Br/3+5])}return wr?z+vt:vt}$.getTickFormat=function(vt){var pt;function kr(Pr){return typeof Pr!="string"?Pr:Number(Pr.replace("M",""))*M}function Cr(Pr,Qr){var ci=["L","D"];if(typeof Pr==typeof Qr){if(typeof Pr=="number")return Pr-Qr;var mi=ci.indexOf(Pr.charAt(0)),Et=ci.indexOf(Qr.charAt(0));return mi===Et?Number(Pr.replace(/(L|D)/g,""))-Number(Qr.replace(/(L|D)/g,"")):mi-Et}else return typeof Pr=="number"?1:-1}function wr(Pr,Qr,ci){var mi=ci||function(gr){return gr},Et=Qr[0],ar=Qr[1];return(!Et&&typeof Et!="number"||mi(Et)<=mi(Pr))&&(!ar&&typeof ar!="number"||mi(ar)>=mi(Pr))}function Ar(Pr,Qr){var ci=Qr[0]===null,mi=Qr[1]===null,Et=Cr(Pr,Qr[0])>=0,ar=Cr(Pr,Qr[1])<=0;return(ci||Et)&&(mi||ar)}var Er,Br;if(vt.tickformatstops&&vt.tickformatstops.length>0)switch(vt.type){case"date":case"linear":{for(pt=0;pt<vt.tickformatstops.length;pt++)if(Br=vt.tickformatstops[pt],Br.enabled&&wr(vt.dtick,Br.dtickrange,kr)){Er=Br;break}break}case"log":{for(pt=0;pt<vt.tickformatstops.length;pt++)if(Br=vt.tickformatstops[pt],Br.enabled&&Ar(vt.dtick,Br.dtickrange)){Er=Br;break}break}default:}return Er?Er.value:vt.tickformat},$.getSubplots=function(vt,pt){var kr=vt._fullLayout._subplots,Cr=kr.cartesian.concat(kr.gl2d||[]),wr=pt?$.findSubplotsWithAxis(Cr,pt):Cr;return wr.sort(function(Ar,Er){var Br=Ar.substr(1).split("y"),Pr=Er.substr(1).split("y");return Br[0]===Pr[0]?+Br[1]-+Pr[1]:+Br[0]-+Pr[0]}),wr},$.findSubplotsWithAxis=function(vt,pt){for(var kr=new RegExp(pt._id.charAt(0)==="x"?"^"+pt._id+"y":pt._id+"$"),Cr=[],wr=0;wr<vt.length;wr++){var Ar=vt[wr];kr.test(Ar)&&Cr.push(Ar)}return Cr},$.makeClipPaths=function(vt){var pt=vt._fullLayout;if(!pt._hasOnlyLargeSploms){var kr={_offset:0,_length:pt.width,_id:""},Cr={_offset:0,_length:pt.height,_id:""},wr=$.list(vt,"x",!0),Ar=$.list(vt,"y",!0),Er=[],Br,Pr;for(Br=0;Br<wr.length;Br++)for(Er.push({x:wr[Br],y:Cr}),Pr=0;Pr<Ar.length;Pr++)Br===0&&Er.push({x:kr,y:Ar[Pr]}),Er.push({x:wr[Br],y:Ar[Pr]});var Qr=pt._clips.selectAll(".axesclip").data(Er,function(ci){return ci.x._id+ci.y._id});Qr.enter().append("clipPath").classed("axesclip",!0).attr("id",function(ci){return"clip"+pt._uid+ci.x._id+ci.y._id}).append("rect"),Qr.exit().remove(),Qr.each(function(ci){g.select(this).select("rect").attr({x:ci.x._offset||0,y:ci.y._offset||0,width:ci.x._length||1,height:ci.y._length||1})})}},$.draw=function(vt,pt,kr){var Cr=vt._fullLayout;pt==="redraw"&&Cr._paper.selectAll("g.subplot").each(function(Pr){var Qr=Pr[0],ci=Cr._plots[Qr];if(ci){var mi=ci.xaxis,Et=ci.yaxis;ci.xaxislayer.selectAll("."+mi._id+"tick").remove(),ci.yaxislayer.selectAll("."+Et._id+"tick").remove(),ci.xaxislayer.selectAll("."+mi._id+"tick2").remove(),ci.yaxislayer.selectAll("."+Et._id+"tick2").remove(),ci.xaxislayer.selectAll("."+mi._id+"divider").remove(),ci.yaxislayer.selectAll("."+Et._id+"divider").remove(),ci.minorGridlayer&&ci.minorGridlayer.selectAll("path").remove(),ci.gridlayer&&ci.gridlayer.selectAll("path").remove(),ci.zerolinelayer&&ci.zerolinelayer.selectAll("path").remove(),Cr._infolayer.select(".g-"+mi._id+"title").remove(),Cr._infolayer.select(".g-"+Et._id+"title").remove()}});var wr=!pt||pt==="redraw"?$.listIds(vt):pt,Ar=$.list(vt),Er=Ar.filter(function(Pr){return Pr.autoshift}).map(function(Pr){return Pr.overlaying});wr.map(function(Pr){var Qr=$.getFromId(vt,Pr);if(Qr.tickmode==="sync"&&Qr.overlaying){var ci=wr.findIndex(function(mi){return mi===Qr.overlaying});ci>=0&&wr.unshift(wr.splice(ci,1).shift())}});var Br={false:{left:0,right:0}};return e.syncOrAsync(wr.map(function(Pr){return function(){if(Pr){var Qr=$.getFromId(vt,Pr);kr||(kr={}),kr.axShifts=Br,kr.overlayingShiftedAx=Er;var ci=$.drawOne(vt,Qr,kr);return Qr._shiftPusher&&$i(Qr,Qr._fullDepth||0,Br,!0),Qr._r=Qr.range.slice(),Qr._rl=e.simpleMap(Qr._r,Qr.r2l),ci}}}))},$.drawOne=function(vt,pt,kr){kr=kr||{};var Cr=kr.axShifts||{},wr=kr.overlayingShiftedAx||[],Ar,Er,Br;pt.setScale();var Pr=vt._fullLayout,Qr=pt._id,ci=Qr.charAt(0),mi=$.counterLetter(Qr),Et=Pr._plots[pt._mainSubplot];if(!Et)return;if(pt._shiftPusher=pt.autoshift||wr.indexOf(pt._id)!==-1||wr.indexOf(pt.overlaying)!==-1,pt._shiftPusher&pt.anchor==="free"){var ar=pt.linewidth/2||0;pt.ticks==="inside"&&(ar+=pt.ticklen),$i(pt,ar,Cr,!0),$i(pt,pt.shift||0,Cr,!1)}(kr.skipTitle!==!0||pt._shift===void 0)&&(pt._shift=Mi(pt,Cr));var gr=Et[ci+"axislayer"],ti=pt._mainLinePosition,wi=ti+=pt._shift,Gi=pt._mainMirrorPosition,Fi=pt._vals=$.calcTicks(pt),xi=[pt.mirror,wi,Gi].join("_");for(Ar=0;Ar<Fi.length;Ar++)Fi[Ar].axInfo=xi;pt._selections={},pt._tickAngles&&(pt._prevTickAngles=pt._tickAngles),pt._tickAngles={},pt._depth=null;var Ii={};function Bn(aa){var Ho=Qr+(aa||"tick");return Ii[Ho]||(Ii[Ho]=Ot(pt,Ho,wi)),Ii[Ho]}if(pt.visible){var hn=$.makeTransTickFn(pt),ba=$.makeTransTickLabelFn(pt),Aa,Va,Qa=pt.ticks==="inside",yo=pt.ticks==="outside";if(pt.tickson==="boundaries"){var Ga=ht(pt,Fi);Va=$.clipEnds(pt,Ga),Aa=Qa?Va:Ga}else Va=$.clipEnds(pt,Fi),Aa=Qa&&pt.ticklabelmode!=="period"?Va:Fi;var Yo=pt._gridVals=Va,da=Pt(pt,Fi);if(!Pr._hasOnlyLargeSploms){var vs=pt._subplotsWith,es={};for(Ar=0;Ar<vs.length;Ar++){Er=vs[Ar],Br=Pr._plots[Er];var bs=Br[mi+"axis"],Xa=bs._mainAxis._id;if(!es[Xa]){es[Xa]=1;var Bo=ci==="x"?"M0,"+bs._offset+"v"+bs._length:"M"+bs._offset+",0h"+bs._length;$.drawGrid(vt,pt,{vals:Yo,counterAxis:bs,layer:Br.gridlayer.select("."+Qr),minorLayer:Br.minorGridlayer.select("."+Qr),path:Bo,transFn:hn}),$.drawZeroLine(vt,pt,{counterAxis:bs,layer:Br.zerolinelayer,path:Bo,transFn:hn})}}}var Za,Qo=$.getTickSigns(pt),ss=$.getTickSigns(pt,"minor");if(pt.ticks||pt.minor&&pt.minor.ticks){var gs=$.makeTickPath(pt,wi,Qo[2]),vo=$.makeTickPath(pt,wi,ss[2],{minor:!0}),zo,Ds,Hs,Zs;if(pt._anchorAxis&&pt.mirror&&pt.mirror!==!0?(zo=$.makeTickPath(pt,Gi,Qo[3]),Ds=$.makeTickPath(pt,Gi,ss[3],{minor:!0}),Hs=gs+zo,Zs=vo+Ds):(zo="",Ds="",Hs=gs,Zs=vo),pt.showdividers&&yo&&pt.tickson==="boundaries"){var ps={};for(Ar=0;Ar<da.length;Ar++)ps[da[Ar].x]=1;Za=function(aa){return ps[aa.x]?zo:Hs}}else Za=function(aa){return aa.minor?Zs:Hs}}if($.drawTicks(vt,pt,{vals:Aa,layer:gr,path:Za,transFn:hn}),pt.mirror==="allticks"){var bn=Object.keys(pt._linepositions||{});for(Ar=0;Ar<bn.length;Ar++){Er=bn[Ar],Br=Pr._plots[Er];var Ra=pt._linepositions[Er]||[],_l=Ra[0],Ys=Ra[1],ko=Ra[2],Js=$.makeTickPath(pt,_l,ko?Qo[0]:ss[0],{minor:ko})+$.makeTickPath(pt,Ys,ko?Qo[1]:ss[1],{minor:ko});$.drawTicks(vt,pt,{vals:Aa,layer:Br[ci+"axislayer"],path:Js,transFn:hn})}}var ks=[];if(ks.push(function(){return $.drawLabels(vt,pt,{vals:Fi,layer:gr,plotinfo:Br,transFn:ba,labelFns:$.makeLabelFns(pt,wi)})}),pt.type==="multicategory"){var ml={x:2,y:10}[ci];ks.push(function(){var aa={x:"height",y:"width"}[ci],Ho=Bn()[aa]+ml+(pt._tickAngles[Qr+"tick"]?pt.tickfont.size*fe:0);return $.drawLabels(vt,pt,{vals:yt(pt,Fi),layer:gr,cls:Qr+"tick2",repositionOnUpdate:!0,secondary:!0,transFn:hn,labelFns:$.makeLabelFns(pt,wi+Ho*Qo[4])})}),ks.push(function(){return pt._depth=Qo[4]*(Bn("tick2")[pt.side]-wi),fi(vt,pt,{vals:da,layer:gr,path:$.makeTickPath(pt,wi,Qo[4],{len:pt._depth}),transFn:hn})})}else pt.title.hasOwnProperty("standoff")&&ks.push(function(){pt._depth=Qo[4]*(Bn()[pt.side]-wi)});var El=S.getComponentMethod("rangeslider","isVisible")(pt);return!kr.skipTitle&&!(El&&pt.side==="bottom")&&ks.push(function(){return Bi(vt,pt)}),ks.push(function(){var aa=pt.side.charAt(0),Ho=G[pt.side].charAt(0),po=$.getPxPosition(vt,pt),zs=yo?pt.ticklen:0,hs,to,tu,Ju;(pt.automargin||El||pt._shiftPusher)&&(pt.type==="multicategory"?hs=Bn("tick2"):(hs=Bn(),ci==="x"&&aa==="b"&&(pt._depth=Math.max(hs.width>0?hs.bottom-po:0,zs))));var kl=0,Hu=0;if(pt._shiftPusher&&(kl=Math.max(zs,hs.height>0?aa==="l"?po-hs.left:hs.right-po:0),pt.title.text!==Pr._dfltTitle[ci]&&(Hu=(pt._titleStandoff||0)+(pt._titleScoot||0),aa==="l"&&(Hu+=Pi(pt))),pt._fullDepth=Math.max(kl,Hu)),pt.automargin){to={x:0,y:0,r:0,l:0,t:0,b:0};var Bl=[0,1],rl=typeof pt._shift=="number"?pt._shift:0;if(ci==="x"){if(aa==="b"?to[aa]=pt._depth:(to[aa]=pt._depth=Math.max(hs.width>0?po-hs.top:0,zs),Bl.reverse()),hs.width>0){var au=hs.right-(pt._offset+pt._length);au>0&&(to.xr=1,to.r=au);var Gu=pt._offset-hs.left;Gu>0&&(to.xl=0,to.l=Gu)}}else if(aa==="l"?(pt._depth=Math.max(hs.height>0?po-hs.left:0,zs),to[aa]=pt._depth-rl):(pt._depth=Math.max(hs.height>0?hs.right-po:0,zs),to[aa]=pt._depth+rl,Bl.reverse()),hs.height>0){var Fc=hs.bottom-(pt._offset+pt._length);Fc>0&&(to.yb=0,to.b=Fc);var Qu=pt._offset-hs.top;Qu>0&&(to.yt=1,to.t=Qu)}to[mi]=pt.anchor==="free"?pt.position:pt._anchorAxis.domain[Bl[0]],pt.title.text!==Pr._dfltTitle[ci]&&(to[aa]+=Pi(pt)+(pt.title.standoff||0)),pt.mirror&&pt.anchor!=="free"&&(tu={x:0,y:0,r:0,l:0,t:0,b:0},tu[Ho]=pt.linewidth,pt.mirror&&pt.mirror!==!0&&(tu[Ho]+=zs),pt.mirror===!0||pt.mirror==="ticks"?tu[mi]=pt._anchorAxis.domain[Bl[1]]:(pt.mirror==="all"||pt.mirror==="allticks")&&(tu[mi]=[pt._counterDomainMin,pt._counterDomainMax][Bl[1]]))}El&&(Ju=S.getComponentMethod("rangeslider","autoMarginOpts")(vt,pt)),typeof pt.automargin=="string"&&(et(to,pt.automargin),et(tu,pt.automargin)),A.autoMargin(vt,vn(pt),to),A.autoMargin(vt,Xt(pt),tu),A.autoMargin(vt,Dt(pt),Ju)}),e.syncOrAsync(ks)}};function et(vt,pt){if(vt){var kr=Object.keys(W).reduce(function(Cr,wr){return pt.indexOf(wr)!==-1&&W[wr].forEach(function(Ar){Cr[Ar]=1}),Cr},{});Object.keys(vt).forEach(function(Cr){kr[Cr]||(Cr.length===1?vt[Cr]=0:delete vt[Cr])})}}function ht(vt,pt){var kr=[],Cr,wr=function(Ar,Er){var Br=Ar.xbnd[Er];Br!==null&&kr.push(e.extendFlat({},Ar,{x:Br}))};if(pt.length){for(Cr=0;Cr<pt.length;Cr++)wr(pt[Cr],0);wr(pt[Cr-1],1)}return kr}function yt(vt,pt){for(var kr=[],Cr={},wr=0;wr<pt.length;wr++){var Ar=pt[wr];Cr[Ar.text2]?Cr[Ar.text2].push(Ar.x):Cr[Ar.text2]=[Ar.x]}for(var Er in Cr)kr.push(Lr(vt,e.interp(Cr[Er],.5),Er));return kr}function Pt(vt,pt){var kr=[],Cr,wr,Ar=pt.length&&pt[pt.length-1].x<pt[0].x,Er=function(Pr,Qr){var ci=Pr.xbnd[Qr];ci!==null&&kr.push(e.extendFlat({},Pr,{x:ci}))};if(vt.showdividers&&pt.length){for(Cr=0;Cr<pt.length;Cr++){var Br=pt[Cr];Br.text2!==wr&&Er(Br,Ar?1:0),wr=Br.text2}Er(pt[Cr-1],Ar?0:1)}return kr}function Ot(vt,pt,kr){var Cr,wr,Ar,Er;if(vt._selections[pt].size())Cr=1/0,wr=-1/0,Ar=1/0,Er=-1/0,vt._selections[pt].each(function(){var Pr=Zi(this),Qr=n.bBox(Pr.node().parentNode);Cr=Math.min(Cr,Qr.top),wr=Math.max(wr,Qr.bottom),Ar=Math.min(Ar,Qr.left),Er=Math.max(Er,Qr.right)});else{var Br=$.makeLabelFns(vt,kr);Cr=wr=Br.yFn({dx:0,dy:0,fontSize:0}),Ar=Er=Br.xFn({dx:0,dy:0,fontSize:0})}return{top:Cr,bottom:wr,left:Ar,right:Er,height:wr-Cr,width:Er-Ar}}$.getTickSigns=function(vt,pt){var kr=vt._id.charAt(0),Cr={x:"top",y:"right"}[kr],wr=vt.side===Cr?1:-1,Ar=[-1,1,wr,-wr],Er=pt?(vt.minor||{}).ticks:vt.ticks;return Er!=="inside"==(kr==="x")&&(Ar=Ar.map(function(Br){return-Br})),vt.side&&Ar.push({l:-1,t:-1,r:1,b:1}[vt.side.charAt(0)]),Ar},$.makeTransTickFn=function(vt){return vt._id.charAt(0)==="x"?function(pt){return t(vt._offset+vt.l2p(pt.x),0)}:function(pt){return t(0,vt._offset+vt.l2p(pt.x))}},$.makeTransTickLabelFn=function(vt){var pt=$t(vt),kr=vt.ticklabelshift||0,Cr=vt.ticklabelstandoff||0,wr=pt[0],Ar=pt[1],Er=vt.range[0]>vt.range[1],Br=vt.ticklabelposition&&vt.ticklabelposition.indexOf("inside")!==-1,Pr=!Br;if(kr){var Qr=Er?-1:1;kr=kr*Qr}if(Cr){var ci=vt.side,mi=Br&&(ci==="top"||ci==="left")||Pr&&(ci==="bottom"||ci==="right")?1:-1;Cr=Cr*mi}return vt._id.charAt(0)==="x"?function(Et){return t(wr+vt._offset+vt.l2p(Wt(Et))+kr,Ar+Cr)}:function(Et){return t(Ar+Cr,wr+vt._offset+vt.l2p(Wt(Et))+kr)}};function Wt(vt){return vt.periodX!==void 0?vt.periodX:vt.x}function $t(vt){var pt=vt.ticklabelposition||"",kr=function(ar){return pt.indexOf(ar)!==-1},Cr=kr("top"),wr=kr("left"),Ar=kr("right"),Er=kr("bottom"),Br=kr("inside"),Pr=Er||wr||Cr||Ar;if(!Pr&&!Br)return[0,0];var Qr=vt.side,ci=Pr?(vt.tickwidth||0)/2:0,mi=J,Et=vt.tickfont?vt.tickfont.size:12;return(Er||Cr)&&(ci+=Et*se,mi+=(vt.linewidth||0)/2),(wr||Ar)&&(ci+=(vt.linewidth||0)/2,mi+=J),Br&&Qr==="top"&&(mi-=Et*(1-se)),(wr||Cr)&&(ci=-ci),(Qr==="bottom"||Qr==="right")&&(mi=-mi),[Pr?ci:0,Br?mi:0]}$.makeTickPath=function(vt,pt,kr,Cr){Cr||(Cr={});var wr=Cr.minor;if(wr&&!vt.minor)return"";var Ar=Cr.len!==void 0?Cr.len:wr?vt.minor.ticklen:vt.ticklen,Er=vt._id.charAt(0),Br=(vt.linewidth||1)/2;return Er==="x"?"M0,"+(pt+Br*kr)+"v"+Ar*kr:"M"+(pt+Br*kr)+",0h"+Ar*kr},$.makeLabelFns=function(vt,pt,kr){var Cr=vt.ticklabelposition||"",wr=function(Ga){return Cr.indexOf(Ga)!==-1},Ar=wr("top"),Er=wr("left"),Br=wr("right"),Pr=wr("bottom"),Qr=Pr||Er||Ar||Br,ci=wr("inside"),mi=Cr==="inside"&&vt.ticks==="inside"||!ci&&vt.ticks==="outside"&&vt.tickson!=="boundaries",Et=0,ar=0,gr=mi?vt.ticklen:0;if(ci?gr*=-1:Qr&&(gr=0),mi&&(Et+=gr,kr)){var ti=e.deg2rad(kr);Et=gr*Math.cos(ti)+1,ar=gr*Math.sin(ti)}vt.showticklabels&&(mi||vt.showline)&&(Et+=.2*vt.tickfont.size),Et+=(vt.linewidth||1)/2*(ci?-1:1);var wi={labelStandoff:Et,labelShift:ar},Gi,Fi,xi,Ii,Bn=0,hn=vt.side,ba=vt._id.charAt(0),Aa=vt.tickangle,Va;if(ba==="x")Va=!ci&&hn==="bottom"||ci&&hn==="top",Ii=Va?1:-1,ci&&(Ii*=-1),Gi=ar*Ii,Fi=pt+Et*Ii,xi=Va?1:-.2,Math.abs(Aa)===90&&(ci?xi+=le:Aa===-90&&hn==="bottom"?xi=se:Aa===90&&hn==="top"?xi=le:xi=.5,Bn=le/2*(Aa/90)),wi.xFn=function(Ga){return Ga.dx+Gi+Bn*Ga.fontSize},wi.yFn=function(Ga){return Ga.dy+Fi+Ga.fontSize*xi},wi.anchorFn=function(Ga,Yo){if(Qr){if(Er)return"end";if(Br)return"start"}return!x(Yo)||Yo===0||Yo===180?"middle":Yo*Ii<0!==ci?"end":"start"},wi.heightFn=function(Ga,Yo,da){return Yo<-60||Yo>60?-.5*da:vt.side==="top"!==ci?-da:0};else if(ba==="y"){if(Va=!ci&&hn==="left"||ci&&hn==="right",Ii=Va?1:-1,ci&&(Ii*=-1),Gi=Et,Fi=ar*Ii,xi=0,!ci&&Math.abs(Aa)===90&&(Aa===-90&&hn==="left"||Aa===90&&hn==="right"?xi=se:xi=.5),ci){var Qa=x(Aa)?+Aa:0;if(Qa!==0){var yo=e.deg2rad(Qa);Bn=Math.abs(Math.sin(yo))*se*Ii,xi=0}}wi.xFn=function(Ga){return Ga.dx+pt-(Gi+Ga.fontSize*xi)*Ii+Bn*Ga.fontSize},wi.yFn=function(Ga){return Ga.dy+Fi+Ga.fontSize*le},wi.anchorFn=function(Ga,Yo){return x(Yo)&&Math.abs(Yo)===90?"middle":Va?"end":"start"},wi.heightFn=function(Ga,Yo,da){return vt.side==="right"&&(Yo*=-1),Yo<-30?-da:Yo<30?-.5*da:0}}return wi};function lr(vt){return[vt.text,vt.x,vt.axInfo,vt.font,vt.fontSize,vt.fontColor].join("_")}$.drawTicks=function(vt,pt,kr){kr=kr||{};var Cr=pt._id+"tick",wr=[].concat(pt.minor&&pt.minor.ticks?kr.vals.filter(function(Er){return Er.minor&&!Er.noTick}):[]).concat(pt.ticks?kr.vals.filter(function(Er){return!Er.minor&&!Er.noTick}):[]),Ar=kr.layer.selectAll("path."+Cr).data(wr,lr);Ar.exit().remove(),Ar.enter().append("path").classed(Cr,1).classed("ticks",1).classed("crisp",kr.crisp!==!1).each(function(Er){return i.stroke(g.select(this),Er.minor?pt.minor.tickcolor:pt.tickcolor)}).style("stroke-width",function(Er){return n.crispRound(vt,Er.minor?pt.minor.tickwidth:pt.tickwidth,1)+"px"}).attr("d",kr.path).style("display",null),qi(pt,[N]),Ar.attr("transform",kr.transFn)},$.drawGrid=function(vt,pt,kr){if(kr=kr||{},pt.tickmode!=="sync"){var Cr=pt._id+"grid",wr=pt.minor&&pt.minor.showgrid,Ar=wr?kr.vals.filter(function(Gi){return Gi.minor}):[],Er=pt.showgrid?kr.vals.filter(function(Gi){return!Gi.minor}):[],Br=kr.counterAxis;if(Br&&$.shouldShowZeroLine(vt,pt,Br))for(var Pr=pt.tickmode==="array",Qr=0;Qr<Er.length;Qr++){var ci=Er[Qr].x;if(Pr?!ci:Math.abs(ci)<pt.dtick/100)if(Er=Er.slice(0,Qr).concat(Er.slice(Qr+1)),Pr)Qr--;else break}pt._gw=n.crispRound(vt,pt.gridwidth,1);for(var mi=wr?n.crispRound(vt,pt.minor.gridwidth,1):0,Et=kr.layer,ar=kr.minorLayer,gr=1;gr>=0;gr--){var ti=gr?Et:ar;if(ti){var wi=ti.selectAll("path."+Cr).data(gr?Er:Ar,lr);wi.exit().remove(),wi.enter().append("path").classed(Cr,1).classed("crisp",kr.crisp!==!1),wi.attr("transform",kr.transFn).attr("d",kr.path).each(function(Gi){return i.stroke(g.select(this),Gi.minor?pt.minor.gridcolor:pt.gridcolor||"#ddd")}).style("stroke-dasharray",function(Gi){return n.dashStyle(Gi.minor?pt.minor.griddash:pt.griddash,Gi.minor?pt.minor.gridwidth:pt.gridwidth)}).style("stroke-width",function(Gi){return(Gi.minor?mi:pt._gw)+"px"}).style("display",null),typeof kr.path=="function"&&wi.attr("d",kr.path)}}qi(pt,[B,I])}},$.drawZeroLine=function(vt,pt,kr){kr=kr||kr;var Cr=pt._id+"zl",wr=$.shouldShowZeroLine(vt,pt,kr.counterAxis),Ar=kr.layer.selectAll("path."+Cr).data(wr?[{x:0,id:pt._id}]:[]);Ar.exit().remove(),Ar.enter().append("path").classed(Cr,1).classed("zl",1).classed("crisp",kr.crisp!==!1).each(function(){kr.layer.selectAll("path").sort(function(Er,Br){return ae(Er.id,Br.id)})}),Ar.attr("transform",kr.transFn).attr("d",kr.path).call(i.stroke,pt.zerolinecolor||i.defaultLine).style("stroke-width",n.crispRound(vt,pt.zerolinewidth,pt._gw||1)+"px").style("display",null),qi(pt,[O])},$.drawLabels=function(vt,pt,kr){kr=kr||{};var Cr=vt._fullLayout,wr=pt._id,Ar=kr.cls||wr+"tick",Er=kr.vals.filter(function(Xa){return Xa.text}),Br=kr.labelFns,Pr=kr.secondary?0:pt.tickangle,Qr=(pt._prevTickAngles||{})[Ar],ci=kr.layer.selectAll("g."+Ar).data(pt.showticklabels?Er:[],lr),mi=[];ci.enter().append("g").classed(Ar,1).append("text").attr("text-anchor","middle").each(function(Xa){var Bo=g.select(this),Za=vt._promises.length;Bo.call(r.positionText,Br.xFn(Xa),Br.yFn(Xa)).call(n.font,{family:Xa.font,size:Xa.fontSize,color:Xa.fontColor,weight:Xa.fontWeight,style:Xa.fontStyle,variant:Xa.fontVariant,textcase:Xa.fontTextcase,lineposition:Xa.fontLineposition,shadow:Xa.fontShadow}).text(Xa.text).call(r.convertToTspans,vt),vt._promises[Za]?mi.push(vt._promises.pop().then(function(){Et(Bo,Pr)})):Et(Bo,Pr)}),qi(pt,[U]),ci.exit().remove(),kr.repositionOnUpdate&&ci.each(function(Xa){g.select(this).select("text").call(r.positionText,Br.xFn(Xa),Br.yFn(Xa))});function Et(Xa,Bo){Xa.each(function(Za){var Qo=g.select(this),ss=Qo.select(".text-math-group"),gs=Br.anchorFn(Za,Bo),vo=kr.transFn.call(Qo.node(),Za)+(x(Bo)&&+Bo!=0?" rotate("+Bo+","+Br.xFn(Za)+","+(Br.yFn(Za)-Za.fontSize/2)+")":""),zo=r.lineCount(Qo),Ds=fe*Za.fontSize,Hs=Br.heightFn(Za,x(Bo)?+Bo:0,(zo-1)*Ds);if(Hs&&(vo+=t(0,Hs)),ss.empty()){var Zs=Qo.select("text");Zs.attr({transform:vo,"text-anchor":gs}),Zs.style("opacity",1),pt._adjustTickLabelsOverflow&&pt._adjustTickLabelsOverflow()}else{var ps=n.bBox(ss.node()).width,bn=ps*{end:-.5,start:.5}[gs];ss.attr("transform",vo+t(bn,0))}})}pt._adjustTickLabelsOverflow=function(){var Xa=pt.ticklabeloverflow;if(!(!Xa||Xa==="allow")){var Bo=Xa.indexOf("hide")!==-1,Za=pt._id.charAt(0)==="x",Qo=0,ss=Za?vt._fullLayout.width:vt._fullLayout.height;if(Xa.indexOf("domain")!==-1){var gs=e.simpleMap(pt.range,pt.r2l);Qo=pt.l2p(gs[0])+pt._offset,ss=pt.l2p(gs[1])+pt._offset}var vo=Math.min(Qo,ss),zo=Math.max(Qo,ss),Ds=pt.side,Hs=1/0,Zs=-1/0;ci.each(function(_l){var Ys=g.select(this),ko=Ys.select(".text-math-group");if(ko.empty()){var Js=n.bBox(Ys.node()),ks=0;Za?(Js.right>zo||Js.left<vo)&&(ks=1):(Js.bottom>zo||Js.top+(pt.tickangle?0:_l.fontSize/4)<vo)&&(ks=1);var ml=Ys.select("text");ks?Bo&&ml.style("opacity",0):(ml.style("opacity",1),Ds==="bottom"||Ds==="right"?Hs=Math.min(Hs,Za?Js.top:Js.left):Hs=-1/0,Ds==="top"||Ds==="left"?Zs=Math.max(Zs,Za?Js.bottom:Js.right):Zs=1/0)}});for(var ps in Cr._plots){var bn=Cr._plots[ps];if(!(pt._id!==bn.xaxis._id&&pt._id!==bn.yaxis._id)){var Ra=Za?bn.yaxis:bn.xaxis;Ra&&(Ra["_visibleLabelMin_"+pt._id]=Hs,Ra["_visibleLabelMax_"+pt._id]=Zs)}}}},pt._hideCounterAxisInsideTickLabels=function(Xa){var Bo=pt._id.charAt(0)==="x",Za=[];for(var Qo in Cr._plots){var ss=Cr._plots[Qo];pt._id!==ss.xaxis._id&&pt._id!==ss.yaxis._id||Za.push(Bo?ss.yaxis:ss.xaxis)}Za.forEach(function(gs,vo){gs&&Di(gs)&&(Xa||[O,I,B,N,U]).forEach(function(zo){var Ds=zo.K==="tick"&&zo.L==="text"&&pt.ticklabelmode==="period",Hs=Cr._plots[pt._mainSubplot],Zs;zo.K===O.K?Zs=Hs.zerolinelayer.selectAll("."+pt._id+"zl"):zo.K===I.K?Zs=Hs.minorGridlayer.selectAll("."+pt._id):zo.K===B.K?Zs=Hs.gridlayer.selectAll("."+pt._id):Zs=Hs[pt._id.charAt(0)+"axislayer"],Zs.each(function(){var ps=g.select(this);zo.L&&(ps=ps.selectAll(zo.L)),ps.each(function(bn){var Ra=pt.l2p(Ds?Wt(bn):bn.x)+pt._offset,_l=g.select(this);Ra<pt["_visibleLabelMax_"+gs._id]&&Ra>pt["_visibleLabelMin_"+gs._id]?_l.style("display","none"):zo.K==="tick"&&!vo&&_l.style("display",null)})})})})},Et(ci,Qr+1?Qr:Pr);function ar(){return mi.length&&Promise.all(mi)}var gr=null;function ti(){if(Et(ci,Pr),Er.length&&pt.autotickangles&&(pt.type!=="log"||String(pt.dtick).charAt(0)!=="D")){gr=pt.autotickangles[0];var Xa=0,Bo=[],Za,Qo=1;ci.each(function(hs){Xa=Math.max(Xa,hs.fontSize);var to=pt.l2p(hs.x),tu=Zi(this),Ju=n.bBox(tu.node());Qo=Math.max(Qo,r.lineCount(tu)),Bo.push({top:0,bottom:10,height:10,left:to-Ju.width/2,right:to+Ju.width/2+2,width:Ju.width+2})});var ss=(pt.tickson==="boundaries"||pt.showdividers)&&!kr.secondary,gs=Er.length,vo=Math.abs((Er[gs-1].x-Er[0].x)*pt._m)/(gs-1),zo=ss?vo/2:vo,Ds=ss?pt.ticklen:Xa*1.25*Qo,Hs=Math.sqrt(Math.pow(zo,2)+Math.pow(Ds,2)),Zs=zo/Hs,ps=pt.autotickangles.map(function(hs){return hs*Math.PI/180}),bn=ps.find(function(hs){return Math.abs(Math.cos(hs))<=Zs});bn===void 0&&(bn=ps.reduce(function(hs,to){return Math.abs(Math.cos(hs))<Math.abs(Math.cos(to))?hs:to},ps[0]));var Ra=bn*(180/Math.PI);if(ss){var _l=2;for(pt.ticks&&(_l+=pt.tickwidth/2),Za=0;Za<Bo.length;Za++){var Ys=Er[Za].xbnd,ko=Bo[Za];if(Ys[0]!==null&&ko.left-pt.l2p(Ys[0])<_l||Ys[1]!==null&&pt.l2p(Ys[1])-ko.right<_l){gr=Ra;break}}}else{var Js=pt.ticklabelposition||"",ks=function(hs){return Js.indexOf(hs)!==-1},ml=ks("top"),El=ks("left"),aa=ks("right"),Ho=ks("bottom"),po=Ho||El||ml||aa,zs=po?(pt.tickwidth||0)+2*J:0;for(Za=0;Za<Bo.length-1;Za++)if(e.bBoxIntersect(Bo[Za],Bo[Za+1],zs)){gr=Ra;break}}gr&&Et(ci,gr)}}pt._selections&&(pt._selections[Ar]=ci);var wi=[ar];pt.automargin&&Cr._redrawFromAutoMarginCount&&Qr===90?(gr=Qr,wi.push(function(){Et(ci,Qr)})):wi.push(ti),pt._tickAngles&&wi.push(function(){pt._tickAngles[Ar]=gr===null?x(Pr)?Pr:0:gr});var Gi=function(){var Xa=0,Bo=0;return ci.each(function(Za,Qo){var ss=Zi(this),gs=ss.select(".text-math-group");if(gs.empty()){var vo;pt._vals[Qo]&&(vo=pt._vals[Qo].bb||n.bBox(ss.node()),pt._vals[Qo].bb=vo),Xa=Math.max(Xa,vo.width),Bo=Math.max(Bo,vo.height)}}),{labelsMaxW:Xa,labelsMaxH:Bo}},Fi=pt._anchorAxis;if(Fi&&(Fi.autorange||Fi.insiderange)&&Di(pt)&&!j(Cr,pt._id)&&(Cr._insideTickLabelsUpdaterange||(Cr._insideTickLabelsUpdaterange={}),Fi.autorange&&(Cr._insideTickLabelsUpdaterange[Fi._name+".autorange"]=Fi.autorange,wi.push(Gi)),Fi.insiderange)){var xi=Gi(),Ii=pt._id.charAt(0)==="y"?xi.labelsMaxW:xi.labelsMaxH;Ii+=2*J,pt.ticklabelposition==="inside"&&(Ii+=pt.ticklen||0);var Bn=pt.side==="right"||pt.side==="top"?1:-1,hn=Bn===1?1:0,ba=Bn===1?0:1,Aa=[];Aa[ba]=Fi.range[ba];var Va=Fi.range,Qa=Fi.r2p(Va[hn]),yo=Fi.r2p(Va[ba]),Ga=Cr._insideTickLabelsUpdaterange[Fi._name+".range"];if(Ga){var Yo=Fi.r2p(Ga[hn]),da=Fi.r2p(Ga[ba]),vs=Bn*(pt._id.charAt(0)==="y"?1:-1);vs*Qa<vs*Yo&&(Qa=Yo,Aa[hn]=Va[hn]=Ga[hn]),vs*yo>vs*da&&(yo=da,Aa[ba]=Va[ba]=Ga[ba])}var es=Math.abs(yo-Qa);es-Ii>0?(es-=Ii,Ii*=1+Ii/es):Ii=0,pt._id.charAt(0)!=="y"&&(Ii=-Ii),Aa[hn]=Fi.p2r(Fi.r2p(Va[hn])+Bn*Ii),Fi.autorange==="min"||Fi.autorange==="max reversed"?(Aa[0]=null,Fi._rangeInitial0=void 0,Fi._rangeInitial1=void 0):(Fi.autorange==="max"||Fi.autorange==="min reversed")&&(Aa[1]=null,Fi._rangeInitial0=void 0,Fi._rangeInitial1=void 0),Cr._insideTickLabelsUpdaterange[Fi._name+".range"]=Aa}var bs=e.syncOrAsync(wi);return bs&&bs.then&&vt._promises.push(bs),bs};function fi(vt,pt,kr){var Cr=pt._id+"divider",wr=kr.vals,Ar=kr.layer.selectAll("path."+Cr).data(wr,lr);Ar.exit().remove(),Ar.enter().insert("path",":first-child").classed(Cr,1).classed("crisp",1).call(i.stroke,pt.dividercolor).style("stroke-width",n.crispRound(vt,pt.dividerwidth,1)+"px"),Ar.attr("transform",kr.transFn).attr("d",kr.path)}$.getPxPosition=function(vt,pt){var kr=vt._fullLayout._size,Cr=pt._id.charAt(0),wr=pt.side,Ar;if(pt.anchor!=="free"?Ar=pt._anchorAxis:Cr==="x"?Ar={_offset:kr.t+(1-(pt.position||0))*kr.h,_length:0}:Cr==="y"&&(Ar={_offset:kr.l+(pt.position||0)*kr.w+pt._shift,_length:0}),wr==="top"||wr==="left")return Ar._offset;if(wr==="bottom"||wr==="right")return Ar._offset+Ar._length};function Pi(vt){var pt=vt.title.font.size,kr=(vt.title.text.match(r.BR_TAG_ALL)||[]).length;return vt.title.hasOwnProperty("standoff")?pt*(se+kr*fe):kr?pt*(kr+1)*fe:pt}function Bi(vt,pt){var kr=vt._fullLayout,Cr=pt._id,wr=Cr.charAt(0),Ar=pt.title.font.size,Er,Br=(pt.title.text.match(r.BR_TAG_ALL)||[]).length;if(pt.title.hasOwnProperty("standoff"))pt.side==="bottom"||pt.side==="right"?Er=pt._depth+pt.title.standoff+Ar*se:(pt.side==="top"||pt.side==="left")&&(Er=pt._depth+pt.title.standoff+Ar*(le+Br*fe));else{var Pr=Di(pt);if(pt.type==="multicategory")Er=pt._depth;else{var Qr=1.5*Ar;Pr&&(Qr=.5*Ar,pt.ticks==="outside"&&(Qr+=pt.ticklen)),Er=10+Qr+(pt.linewidth?pt.linewidth-1:0)}Pr||(wr==="x"?Er+=pt.side==="top"?Ar*(pt.showticklabels?1:0):Ar*(pt.showticklabels?1.5:.5):Er+=pt.side==="right"?Ar*(pt.showticklabels?1:.5):Ar*(pt.showticklabels?.5:0))}var ci=$.getPxPosition(vt,pt),mi,Et,ar;wr==="x"?(Et=pt._offset+pt._length/2,ar=pt.side==="top"?ci-Er:ci+Er):(ar=pt._offset+pt._length/2,Et=pt.side==="right"?ci+Er:ci-Er,mi={rotate:"-90",offset:0});var gr;if(pt.type!=="multicategory"){var ti=pt._selections[pt._id+"tick"];if(gr={selection:ti,side:pt.side},ti&&ti.node()&&ti.node().parentNode){var wi=n.getTranslate(ti.node().parentNode);gr.offsetLeft=wi.x,gr.offsetTop=wi.y}pt.title.hasOwnProperty("standoff")&&(gr.pad=0)}return pt._titleStandoff=Er,o.draw(vt,Cr+"title",{propContainer:pt,propName:pt._name+".title.text",placeholder:kr._dfltTitle[wr],avoid:gr,transform:mi,attributes:{x:Et,y:ar,"text-anchor":"middle"}})}$.shouldShowZeroLine=function(vt,pt,kr){var Cr=e.simpleMap(pt.range,pt.r2l);return Cr[0]*Cr[1]<=0&&pt.zeroline&&(pt.type==="linear"||pt.type==="-")&&!(pt.rangebreaks&&pt.maskBreaks(0)===F)&&(zi(pt,0)||!en(vt,pt,kr,Cr)||Ri(vt,pt))},$.clipEnds=function(vt,pt){return pt.filter(function(kr){return zi(vt,kr.x)})};function zi(vt,pt){var kr=vt.l2p(pt);return kr>1&&kr<vt._length-1}function en(vt,pt,kr,Cr){var wr=kr._mainAxis;if(!wr)return;var Ar=vt._fullLayout,Er=pt._id.charAt(0),Br=$.counterLetter(pt._id),Pr=pt._offset+(Math.abs(Cr[0])<Math.abs(Cr[1])==(Er==="x")?0:pt._length);function Qr(gr){if(!gr.showline||!gr.linewidth)return!1;var ti=Math.max((gr.linewidth+pt.zerolinewidth)/2,1);function wi(xi){return typeof xi=="number"&&Math.abs(xi-Pr)<ti}if(wi(gr._mainLinePosition)||wi(gr._mainMirrorPosition))return!0;var Gi=gr._linepositions||{};for(var Fi in Gi)if(wi(Gi[Fi][0])||wi(Gi[Fi][1]))return!0}var ci=Ar._plots[kr._mainSubplot];if(!(ci.mainplotinfo||ci).overlays.length)return Qr(kr,Pr);for(var mi=$.list(vt,Br),Et=0;Et<mi.length;Et++){var ar=mi[Et];if(ar._mainAxis===wr&&Qr(ar,Pr))return!0}}function Ri(vt,pt){for(var kr=vt._fullData,Cr=pt._mainSubplot,wr=pt._id.charAt(0),Ar=0;Ar<kr.length;Ar++){var Er=kr[Ar];if(Er.visible===!0&&Er.xaxis+Er.yaxis===Cr&&(S.traceIs(Er,"bar-like")&&Er.orientation==={x:"h",y:"v"}[wr]||Er.fill&&Er.fill.charAt(Er.fill.length-1)===wr))return!0}return!1}function Zi(vt){var pt=g.select(vt),kr=pt.select(".text-math-group");return kr.empty()?pt.select("text"):kr}$.allowAutoMargin=function(vt){for(var pt=$.list(vt,"",!0),kr=0;kr<pt.length;kr++){var Cr=pt[kr];Cr.automargin&&(A.allowAutoMargin(vt,vn(Cr)),Cr.mirror&&A.allowAutoMargin(vt,Xt(Cr))),S.getComponentMethod("rangeslider","isVisible")(Cr)&&A.allowAutoMargin(vt,Dt(Cr))}};function vn(vt){return vt._id+".automargin"}function Xt(vt){return vn(vt)+".mirror"}function Dt(vt){return vt._id+".rangeslider"}$.swap=function(vt,pt){for(var kr=qt(vt,pt),Cr=0;Cr<kr.length;Cr++)br(vt,kr[Cr].x,kr[Cr].y)};function qt(vt,pt){var kr=[],Cr,wr;for(Cr=0;Cr<pt.length;Cr++){var Ar=[],Er=vt._fullData[pt[Cr]].xaxis,Br=vt._fullData[pt[Cr]].yaxis;if(!(!Er||!Br)){for(wr=0;wr<kr.length;wr++)(kr[wr].x.indexOf(Er)!==-1||kr[wr].y.indexOf(Br)!==-1)&&Ar.push(wr);if(!Ar.length){kr.push({x:[Er],y:[Br]});continue}var Pr=kr[Ar[0]],Qr;if(Ar.length>1)for(wr=1;wr<Ar.length;wr++)Qr=kr[Ar[wr]],Ut(Pr.x,Qr.x),Ut(Pr.y,Qr.y);Ut(Pr.x,[Er]),Ut(Pr.y,[Br])}}return kr}function Ut(vt,pt){for(var kr=0;kr<pt.length;kr++)vt.indexOf(pt[kr])===-1&&vt.push(pt[kr])}function br(vt,pt,kr){var Cr=[],wr=[],Ar=vt.layout,Er,Br;for(Er=0;Er<pt.length;Er++)Cr.push($.getFromId(vt,pt[Er]));for(Er=0;Er<kr.length;Er++)wr.push($.getFromId(vt,kr[Er]));var Pr=Object.keys(a),Qr=["anchor","domain","overlaying","position","side","tickangle","editType"],ci=["linear","log"];for(Er=0;Er<Pr.length;Er++){var mi=Pr[Er],Et=Cr[0][mi],ar=wr[0][mi],gr=!0,ti=!1,wi=!1;if(!(mi.charAt(0)==="_"||typeof Et=="function"||Qr.indexOf(mi)!==-1)){for(Br=1;Br<Cr.length&&gr;Br++){var Gi=Cr[Br][mi];mi==="type"&&ci.indexOf(Et)!==-1&&ci.indexOf(Gi)!==-1&&Et!==Gi?ti=!0:Gi!==Et&&(gr=!1)}for(Br=1;Br<wr.length&&gr;Br++){var Fi=wr[Br][mi];mi==="type"&&ci.indexOf(ar)!==-1&&ci.indexOf(Fi)!==-1&&ar!==Fi?wi=!0:wr[Br][mi]!==ar&&(gr=!1)}gr&&(ti&&(Ar[Cr[0]._name].type="linear"),wi&&(Ar[wr[0]._name].type="linear"),Zr(Ar,mi,Cr,wr,vt._fullLayout._dfltTitle))}}for(Er=0;Er<vt._fullLayout.annotations.length;Er++){var xi=vt._fullLayout.annotations[Er];pt.indexOf(xi.xref)!==-1&&kr.indexOf(xi.yref)!==-1&&e.swapAttrs(Ar.annotations[Er],["?"])}}function Zr(vt,pt,kr,Cr,wr){var Ar=e.nestedProperty,Er=Ar(vt[kr[0]._name],pt).get(),Br=Ar(vt[Cr[0]._name],pt).get(),Pr;for(pt==="title"&&(Er&&Er.text===wr.x&&(Er.text=wr.y),Br&&Br.text===wr.y&&(Br.text=wr.x)),Pr=0;Pr<kr.length;Pr++)Ar(vt,kr[Pr]._name+"."+pt).set(Br);for(Pr=0;Pr<Cr.length;Pr++)Ar(vt,Cr[Pr]._name+"."+pt).set(Er)}function _i(vt){return vt._id==="angularaxis"}function Yr(vt,pt){for(var kr=pt._rangebreaks.length,Cr=0;Cr<kr;Cr++){var wr=pt._rangebreaks[Cr];if(vt>=wr.min&&vt<wr.max)return wr.max}return vt}function Di(vt){return(vt.ticklabelposition||"").indexOf("inside")!==-1}function qi(vt,pt){Di(vt._anchorAxis||{})&&vt._hideCounterAxisInsideTickLabels&&vt._hideCounterAxisInsideTickLabels(pt)}function $i(vt,pt,kr,Cr){var wr=vt.anchor!=="free"&&(vt.overlaying===void 0||vt.overlaying===!1)?vt._id:vt.overlaying,Ar;Cr?Ar=vt.side==="right"?pt:-pt:Ar=pt,wr in kr||(kr[wr]={}),vt.side in kr[wr]||(kr[wr][vt.side]=0),kr[wr][vt.side]+=Ar}function Mi(vt,pt){return vt.autoshift?pt[vt.overlaying][vt.side]:vt.shift||0}function sn(vt,pt){return/%f/.test(pt)?vt>=L:/%L/.test(pt)?vt>=P:/%[SX]/.test(pt)?vt>=f:/%M/.test(pt)?vt>=y:/%[HI]/.test(pt)?vt>=u:/%p/.test(pt)?vt>=v:/%[Aadejuwx]/.test(pt)?vt>=b:/%[UVW]/.test(pt)?vt>=m:/%[Bbm]/.test(pt)?vt>=E:/%[q]/.test(pt)?vt>=_:/%[Yy]/.test(pt)?vt>=d:!0}}}),Ww=Le({"src/plots/cartesian/autorange_options_defaults.js"(Z,H){"use strict";H.exports=function(x,A,S){var e,t;if(S){var r=A==="reversed"||A==="min reversed"||A==="max reversed";e=S[r?1:0],t=S[r?0:1]}var o=x("autorangeoptions.minallowed",t===null?e:void 0),i=x("autorangeoptions.maxallowed",e===null?t:void 0);o===void 0&&x("autorangeoptions.clipmin"),i===void 0&&x("autorangeoptions.clipmax"),x("autorangeoptions.include")}}}),Xw=Le({"src/plots/cartesian/range_defaults.js"(Z,H){"use strict";var g=Ww();H.exports=function(A,S,e,t){var r=S._template||{},o=S.type||r.type||"-";e("minallowed"),e("maxallowed");var i=e("range");if(!i){var n;!t.noInsiderange&&o!=="log"&&(n=e("insiderange"),n&&(n[0]===null||n[1]===null)&&(S.insiderange=!1,n=void 0),n&&(i=e("range",n)))}var a=S.getAutorangeDflt(i,t),s=e("autorange",a),c;i&&(i[0]===null&&i[1]===null||(i[0]===null||i[1]===null)&&(s==="reversed"||s===!0)||i[0]!==null&&(s==="min"||s==="max reversed")||i[1]!==null&&(s==="max"||s==="min reversed"))&&(i=void 0,delete S.range,S.autorange=!0,c=!0),c||(a=S.getAutorangeDflt(i,t),s=e("autorange",a)),s&&(g(e,s,i),(o==="linear"||o==="-")&&e("rangemode")),S.cleanRange()}}}),CE=Le({"node_modules/mouse-event-offset/index.js"(Z,H){var g={left:0,top:0};H.exports=x;function x(S,e,t){e=e||S.currentTarget||S.srcElement,Array.isArray(t)||(t=[0,0]);var r=S.clientX||0,o=S.clientY||0,i=A(e);return t[0]=r-i.left,t[1]=o-i.top,t}function A(S){return S===window||S===document||S===document.body?g:S.getBoundingClientRect()}}}),b_=Le({"node_modules/has-passive-events/index.js"(Z,H){"use strict";var g=Ow();function x(){var A=!1;try{var S=Object.defineProperty({},"passive",{get:function(){A=!0}});window.addEventListener("test",null,S),window.removeEventListener("test",null,S)}catch{A=!1}return A}H.exports=g&&x()}}),LE=Le({"src/components/dragelement/align.js"(Z,H){"use strict";H.exports=function(x,A,S,e,t){var r=(x-S)/(e-S),o=r+A/(e-S),i=(r+o)/2;return t==="left"||t==="bottom"?r:t==="center"||t==="middle"?i:t==="right"||t==="top"?o:r<2/3-i?r:o>4/3-i?o:i}}}),PE=Le({"src/components/dragelement/cursor.js"(Z,H){"use strict";var g=ni(),x=[["sw-resize","s-resize","se-resize"],["w-resize","move","e-resize"],["nw-resize","n-resize","ne-resize"]];H.exports=function(S,e,t,r){return t==="left"?S=0:t==="center"?S=1:t==="right"?S=2:S=g.constrain(Math.floor(S*3),0,2),r==="bottom"?e=0:r==="middle"?e=1:r==="top"?e=2:e=g.constrain(Math.floor(e*3),0,2),x[e][S]}}}),IE=Le({"src/components/dragelement/unhover.js"(Z,H){"use strict";var g=Wg(),x=y_(),A=iy().getGraphDiv,S=Bm(),e=H.exports={};e.wrapped=function(t,r,o){t=A(t),t._fullLayout&&x.clear(t._fullLayout._uid+S.HOVERID),e.raw(t,r,o)},e.raw=function(r,o){var i=r._fullLayout,n=r._hoverdata;o||(o={}),!(o.target&&!r._dragged&&g.triggerHandler(r,"plotly_beforehover",o)===!1)&&(i._hoverlayer.selectAll("g").remove(),i._hoverlayer.selectAll("line").remove(),i._hoverlayer.selectAll("circle").remove(),r._hoverdata=void 0,o.target&&n&&r.emit("plotly_unhover",{event:o,points:n}))}}}),Kh=Le({"src/components/dragelement/index.js"(Z,H){"use strict";var g=CE(),x=Nw(),A=b_(),S=ni().removeElement,e=ch(),t=H.exports={};t.align=LE(),t.getCursor=PE();var r=IE();t.unhover=r.wrapped,t.unhoverRaw=r.raw,t.init=function(a){var s=a.gd,c=1,h=s._context.doubleClickDelay,p=a.element,d,T,l,_,w,M,E,m;s._mouseDownTime||(s._mouseDownTime=0),p.style.pointerEvents="all",p.onmousedown=u,A?(p._ontouchstart&&p.removeEventListener("touchstart",p._ontouchstart),p._ontouchstart=u,p.addEventListener("touchstart",u,{passive:!1})):p.ontouchstart=u;function b(P,L,z){return Math.abs(P)<z&&(P=0),Math.abs(L)<z&&(L=0),[P,L]}var v=a.clampFn||b;function u(P){s._dragged=!1,s._dragging=!0;var L=i(P);d=L[0],T=L[1],E=P.target,M=P,m=P.buttons===2||P.ctrlKey,typeof P.clientX>"u"&&typeof P.clientY>"u"&&(P.clientX=d,P.clientY=T),l=new Date().getTime(),l-s._mouseDownTime<h?c+=1:(c=1,s._mouseDownTime=l),a.prepFn&&a.prepFn(P,d,T),x&&!m?(w=o(),w.style.cursor=window.getComputedStyle(p).cursor):x||(w=document,_=window.getComputedStyle(document.documentElement).cursor,document.documentElement.style.cursor=window.getComputedStyle(p).cursor),document.addEventListener("mouseup",f),document.addEventListener("touchend",f),a.dragmode!==!1&&(P.preventDefault(),document.addEventListener("mousemove",y),document.addEventListener("touchmove",y,{passive:!1}))}function y(P){P.preventDefault();var L=i(P),z=a.minDrag||e.MINDRAG,F=v(L[0]-d,L[1]-T,z),O=F[0],B=F[1];(O||B)&&(s._dragged=!0,t.unhover(s,P)),s._dragged&&a.moveFn&&!m&&(s._dragdata={element:p,dx:O,dy:B},a.moveFn(O,B))}function f(P){if(delete s._dragdata,a.dragmode!==!1&&(P.preventDefault(),document.removeEventListener("mousemove",y),document.removeEventListener("touchmove",y)),document.removeEventListener("mouseup",f),document.removeEventListener("touchend",f),x?S(w):_&&(w.documentElement.style.cursor=_,_=null),!s._dragging){s._dragged=!1;return}if(s._dragging=!1,new Date().getTime()-s._mouseDownTime>h&&(c=Math.max(c-1,1)),s._dragged)a.doneFn&&a.doneFn();else{var L;M.target===E?L=M:(L={target:E,srcElement:E,toElement:E},Object.keys(M).concat(Object.keys(M.__proto__)).forEach(z=>{var F=M[z];!L[z]&&typeof F!="function"&&(L[z]=F)})),a.clickFn&&a.clickFn(c,L),m||E.dispatchEvent(new MouseEvent("click",P))}s._dragging=!1,s._dragged=!1}};function o(){var n=document.createElement("div");n.className="dragcover";var a=n.style;return a.position="fixed",a.left=0,a.right=0,a.top=0,a.bottom=0,a.zIndex=999999999,a.background="none",document.body.appendChild(n),n}t.coverSlip=o;function i(n){return g(n.changedTouches?n.changedTouches[0]:n,document.body)}}}),fv=Le({"src/lib/setcursor.js"(Z,H){"use strict";H.exports=function(x,A){(x.attr("class")||"").split(" ").forEach(function(S){S.indexOf("cursor-")===0&&x.classed(S,!1)}),A&&x.classed("cursor-"+A,!0)}}}),RE=Le({"src/lib/override_cursor.js"(Z,H){"use strict";var g=fv(),x="data-savedcursor",A="!!";H.exports=function(e,t){var r=e.attr(x);if(t){if(!r){for(var o=(e.attr("class")||"").split(" "),i=0;i<o.length;i++){var n=o[i];n.indexOf("cursor-")===0&&e.attr(x,n.substr(7)).classed(n,!1)}e.attr(x)||e.attr(x,A)}g(e,t)}else r&&(e.attr(x,null),r===A?g(e):g(e,r))}}}),Zw=Le({"src/components/legend/attributes.js"(Z,H){"use strict";var g=bl(),x=gf();H.exports={_isSubplotObj:!0,visible:{valType:"boolean",dflt:!0,editType:"legend"},bgcolor:{valType:"color",editType:"legend"},bordercolor:{valType:"color",dflt:x.defaultLine,editType:"legend"},borderwidth:{valType:"number",min:0,dflt:0,editType:"legend"},font:g({editType:"legend"}),grouptitlefont:g({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"},indentation:{valType:"number",min:-15,dflt:0,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:g({editType:"legend"}),side:{valType:"enumerated",values:["top","left","top left","top center","top right"],editType:"legend"},editType:"legend"},editType:"legend"}}}),w_=Le({"src/components/legend/helpers.js"(Z){"use strict";Z.isGrouped=function(g){return(g.traceorder||"").indexOf("grouped")!==-1},Z.isVertical=function(g){return g.orientation!=="h"},Z.isReversed=function(g){return(g.traceorder||"").indexOf("reversed")!==-1}}}),Yw=Le({"src/components/legend/defaults.js"(Z,H){"use strict";var g=so(),x=ni(),A=wl(),S=Sl(),e=Zw(),t=Gg(),r=w_();function o(i,n,a,s){var c=n[i]||{},h=A.newContainer(a,i);function p(fe,G){return x.coerce(c,h,e,fe,G)}var d=x.coerceFont(p,"font",a.font);p("bgcolor",a.paper_bgcolor),p("bordercolor");var T=p("visible");if(T){for(var l,_=function(fe,G){var J=l._input,$=l;return x.coerce(J,$,S,fe,G)},w=a.font||{},M=x.coerceFont(p,"grouptitlefont",w,{overrideDflt:{size:Math.round(w.size*1.1)}}),E=0,m=!1,b="normal",v=(a.shapes||[]).filter(function(fe){return fe.showlegend}),u=s.concat(v).filter(function(fe){return i===(fe.legend||"legend")}),y=0;y<u.length;y++)if(l=u[y],!!l.visible){var f=l._isShape;(l.showlegend||l._dfltShowLegend&&!(l._module&&l._module.attributes&&l._module.attributes.showlegend&&l._module.attributes.showlegend.dflt===!1))&&(E++,l.showlegend&&(m=!0,(!f&&g.traceIs(l,"pie-like")||l._input.showlegend===!0)&&E++),x.coerceFont(_,"legendgrouptitle.font",M)),(!f&&g.traceIs(l,"bar")&&a.barmode==="stack"||["tonextx","tonexty"].indexOf(l.fill)!==-1)&&(b=r.isGrouped({traceorder:b})?"grouped+reversed":"reversed"),l.legendgroup!==void 0&&l.legendgroup!==""&&(b=r.isReversed({traceorder:b})?"reversed+grouped":"grouped")}var P=x.coerce(n,a,t,"showlegend",m&&E>(i==="legend"?1:0));if(P===!1&&(a[i]=void 0),!(P===!1&&!c.uirevision)&&(p("uirevision",a.uirevision),P!==!1)){p("borderwidth");var L=p("orientation"),z=p("yref"),F=p("xref"),O=L==="h",B=z==="paper",I=F==="paper",N,U,W,Q="left";O?(N=0,g.getComponentMethod("rangeslider","isVisible")(n.xaxis)?B?(U=1.1,W="bottom"):(U=1,W="top"):B?(U=-.1,W="top"):(U=0,W="bottom")):(U=1,W="auto",I?N=1.02:(N=1,Q="right")),x.coerce(c,h,{x:{valType:"number",editType:"legend",min:I?-2:0,max:I?3:1,dflt:N}},"x"),x.coerce(c,h,{y:{valType:"number",editType:"legend",min:B?-2:0,max:B?3:1,dflt:U}},"y"),p("traceorder",b),r.isGrouped(a[i])&&p("tracegroupgap"),p("entrywidth"),p("entrywidthmode"),p("indentation"),p("itemsizing"),p("itemwidth"),p("itemclick"),p("itemdoubleclick"),p("groupclick"),p("xanchor",Q),p("yanchor",W),p("valign"),x.noneOrAll(c,h,["x","y"]);var le=p("title.text");if(le){p("title.side",O?"left":"top");var se=x.extendFlat({},d,{size:x.bigFont(d.size)});x.coerceFont(p,"title.font",se)}}}}H.exports=function(n,a,s){var c,h=s.slice(),p=a.shapes;if(p)for(c=0;c<p.length;c++){var d=p[c];if(d.showlegend){var T={_input:d._input,visible:d.visible,showlegend:d.showlegend,legend:d.legend};h.push(T)}}var l=["legend"];for(c=0;c<h.length;c++)x.pushUnique(l,h[c].legend);for(a._legends=[],c=0;c<l.length;c++){var _=l[c];o(_,n,a,h),a[_]&&a[_].visible&&(a[_]._id=_),a._legends.push(_)}}}}),DE=Le({"src/components/legend/handle_click.js"(Z,H){"use strict";var g=so(),x=ni(),A=x.pushUnique,S=!0;H.exports=function(t,r,o){var i=r._fullLayout;if(r._dragged||r._editing)return;var n=i.legend.itemclick,a=i.legend.itemdoubleclick,s=i.legend.groupclick;o===1&&n==="toggle"&&a==="toggleothers"&&S&&r.data&&r._context.showTips&&x.notifier(x._(r,"Double-click on legend to isolate one trace"),"long"),S=!1;var c;if(o===1?c=n:o===2&&(c=a),!c)return;var h=s==="togglegroup",p=i.hiddenlabels?i.hiddenlabels.slice():[],d=t.data()[0][0];if(d.groupTitle&&d.noClick)return;var T=r._fullData,l=(i.shapes||[]).filter(function(Me){return Me.showlegend}),_=T.concat(l),w=d.trace;w._isShape&&(w=w._fullInput);var M=w.legendgroup,E,m,b,v,u,y,f={},P=[],L=[],z=[];function F(Me,pe){var ue=P.indexOf(Me),ze=f.visible;return ze||(ze=f.visible=[]),P.indexOf(Me)===-1&&(P.push(Me),ue=P.length-1),ze[ue]=pe,ue}var O=(i.shapes||[]).map(function(Me){return Me._input}),B=!1;function I(Me,pe){O[Me].visible=pe,B=!0}function N(Me,pe){if(!(d.groupTitle&&!h)){var ue=Me._fullInput||Me,ze=ue._isShape,Qe=ue.index;Qe===void 0&&(Qe=ue._index);var it=ue.visible===!1?!1:pe;ze?I(Qe,it):F(Qe,it)}}var U=w.legend,W=w._fullInput,Q=W&&W._isShape;if(!Q&&g.traceIs(w,"pie-like")){var le=d.label,se=p.indexOf(le);if(c==="toggle")se===-1?p.push(le):p.splice(se,1);else if(c==="toggleothers"){var fe=se!==-1,G=[];for(E=0;E<r.calcdata.length;E++){var J=r.calcdata[E];for(m=0;m<J.length;m++){var $=J[m],X=$.label;U===J[0].trace.legend&&le!==X&&(p.indexOf(X)===-1&&(fe=!0),A(p,X),G.push(X))}}if(!fe)for(var re=0;re<G.length;re++){var ae=p.indexOf(G[re]);ae!==-1&&p.splice(ae,1)}}g.call("_guiRelayout",r,"hiddenlabels",p)}else{var j=M&&M.length,ee=[],ne;if(j)for(E=0;E<_.length;E++)ne=_[E],ne.visible&&ne.legendgroup===M&&ee.push(E);if(c==="toggle"){var ce;switch(w.visible){case!0:ce="legendonly";break;case!1:ce=!1;break;case"legendonly":ce=!0;break}if(j)if(h)for(E=0;E<_.length;E++){var _e=_[E];_e.visible!==!1&&_e.legendgroup===M&&N(_e,ce)}else N(w,ce);else N(w,ce)}else if(c==="toggleothers"){var we,Oe,Ie,Xe,tt,rt=!0;for(E=0;E<_.length;E++)if(tt=_[E],we=tt===w,Ie=tt.showlegend!==!0,!(we||Ie)&&(Oe=j&&tt.legendgroup===M,!Oe&&tt.legend===U&&tt.visible===!0&&!g.traceIs(tt,"notLegendIsolatable"))){rt=!1;break}for(E=0;E<_.length;E++)if(tt=_[E],!(tt.visible===!1||tt.legend!==U)&&!g.traceIs(tt,"notLegendIsolatable"))switch(w.visible){case"legendonly":N(tt,!0);break;case!0:Xe=rt?!0:"legendonly",we=tt===w,Ie=tt.showlegend!==!0&&!tt.legendgroup,Oe=we||j&&tt.legendgroup===M,N(tt,Oe||Ie?!0:Xe);break}}for(E=0;E<L.length;E++)if(b=L[E],!!b){var Je=b.constructUpdate(),ot=Object.keys(Je);for(m=0;m<ot.length;m++)v=ot[m],y=f[v]=f[v]||[],y[z[E]]=Je[v]}for(u=Object.keys(f),E=0;E<u.length;E++)for(v=u[E],m=0;m<P.length;m++)f[v].hasOwnProperty(m)||(f[v][m]=void 0);B?g.call("_guiUpdate",r,f,{shapes:O},P):g.call("_guiRestyle",r,f,P)}}}}),Kw=Le({"src/components/legend/constants.js"(Z,H){"use strict";H.exports={scrollBarWidth:6,scrollBarMinHeight:20,scrollBarColor:"#808BA4",scrollBarMargin:4,scrollBarEnterAttrs:{rx:20,ry:3,width:0,height:0},titlePad:2,itemGap:5}}}),zE=Le({"src/components/legend/get_legend_data.js"(Z,H){"use strict";var g=so(),x=w_();H.exports=function(S,e,t){var r=e._inHover,o=x.isGrouped(e),i=x.isReversed(e),n={},a=[],s=!1,c={},h=0,p=0,d,T;function l(N,U,W){if(e.visible!==!1&&!(t&&N!==e._id))if(U===""||!x.isGrouped(e)){var Q="~~i"+h;a.push(Q),n[Q]=[W],h++}else a.indexOf(U)===-1?(a.push(U),s=!0,n[U]=[W]):n[U].push(W)}for(d=0;d<S.length;d++){var _=S[d],w=_[0],M=w.trace,E=M.legend,m=M.legendgroup;if(!(!r&&(!M.visible||!M.showlegend)))if(g.traceIs(M,"pie-like"))for(c[m]||(c[m]={}),T=0;T<_.length;T++){var b=_[T].label;c[m][b]||(l(E,m,{label:b,color:_[T].color,i:_[T].i,trace:M,pts:_[T].pts}),c[m][b]=!0,p=Math.max(p,(b||"").length))}else l(E,m,w),p=Math.max(p,(M.name||"").length)}if(!a.length)return[];var v=!s||!o,u=[];for(d=0;d<a.length;d++){var y=n[a[d]];v?u.push(y[0]):u.push(y)}for(v&&(u=[u]),d=0;d<u.length;d++){var f=1/0;for(T=0;T<u[d].length;T++){var P=u[d][T].trace.legendrank;f>P&&(f=P)}u[d][0]._groupMinRank=f,u[d][0]._preGroupSort=d}var L=function(N,U){return N[0]._groupMinRank-U[0]._groupMinRank||N[0]._preGroupSort-U[0]._preGroupSort},z=function(N,U){return N.trace.legendrank-U.trace.legendrank||N._preSort-U._preSort};for(u.forEach(function(N,U){N[0]._preGroupSort=U}),u.sort(L),d=0;d<u.length;d++){u[d].forEach(function(N,U){N._preSort=U}),u[d].sort(z);var F=u[d][0].trace,O=null;for(T=0;T<u[d].length;T++){var B=u[d][T].trace.legendgrouptitle;if(B&&B.text){O=B,r&&(B.font=e._groupTitleFont);break}}if(i&&u[d].reverse(),O){var I=!1;for(T=0;T<u[d].length;T++)if(g.traceIs(u[d][T].trace,"pie-like")){I=!0;break}u[d].unshift({i:-1,groupTitle:O,noClick:I,trace:{showlegend:F.showlegend,legendgroup:F.legendgroup,visible:e.groupclick==="toggleitem"?!0:F.visible}})}for(T=0;T<u[d].length;T++)u[d][T]=[u[d][T]]}return e._lgroupsLength=u.length,e._maxNameLength=p,u}}}),Hp=Le({"src/traces/pie/helpers.js"(Z){"use strict";var H=ni();function g(x){return x.indexOf("e")!==-1?x.replace(/[.]?0+e/,"e"):x.indexOf(".")!==-1?x.replace(/[.]?0+$/,""):x}Z.formatPiePercent=function(A,S){var e=g((A*100).toPrecision(3));return H.numSeparate(e,S)+"%"},Z.formatPieValue=function(A,S){var e=g(A.toPrecision(10));return H.numSeparate(e,S)},Z.getFirstFilled=function(A,S){if(H.isArrayOrTypedArray(A))for(var e=0;e<S.length;e++){var t=A[S[e]];if(t||t===0||t==="")return t}},Z.castOption=function(A,S){if(H.isArrayOrTypedArray(A))return Z.getFirstFilled(A,S);if(A)return A},Z.getRotationAngle=function(x){return(x==="auto"?0:x)*Math.PI/180}}}),FE=Le({"src/traces/pie/fill_one.js"(Z,H){"use strict";var g=rs(),x=$a();H.exports=function(S,e,t,r){var o=t.marker.pattern;o&&o.shape?g.pointStyle(S,t,r,e):x.fill(S,e.color)}}}),$g=Le({"src/traces/pie/style_one.js"(Z,H){"use strict";var g=$a(),x=Hp().castOption,A=FE();H.exports=function(e,t,r,o){var i=r.marker.line,n=x(i.color,t.pts)||g.defaultLine,a=x(i.width,t.pts)||0;e.call(A,t,r,o).style("stroke-width",a).call(g.stroke,n)}}}),$w=Le({"src/components/legend/style.js"(Z,H){"use strict";var g=Ji(),x=so(),A=ni(),S=A.strTranslate,e=rs(),t=$a(),r=ud().extractOpts,o=gu(),i=$g(),n=Hp().castOption,a=Kw(),s=12,c=5,h=2,p=10,d=5;H.exports=function(M,E,m){var b=E._fullLayout;m||(m=b.legend);var v=m.itemsizing==="constant",u=m.itemwidth,y=(u+a.itemGap*2)/2,f=S(y,0),P=function(G,J,$,X){var re;if(G+1)re=G;else if(J&&J.width>0)re=J.width;else return 0;return v?X:Math.min(re,$)};M.each(function(G){var J=g.select(this),$=A.ensureSingle(J,"g","layers");$.style("opacity",G[0].trace.opacity);var X=m.indentation,re=m.valign,ae=G[0].lineHeight,j=G[0].height;if(re==="middle"&&X===0||!ae||!j)$.attr("transform",null);else{var ee={top:1,bottom:-1}[re],ne=ee*(.5*(ae-j+3))||0,ce=m.indentation;$.attr("transform",S(ce,ne))}var _e=$.selectAll("g.legendfill").data([G]);_e.enter().append("g").classed("legendfill",!0);var we=$.selectAll("g.legendlines").data([G]);we.enter().append("g").classed("legendlines",!0);var Oe=$.selectAll("g.legendsymbols").data([G]);Oe.enter().append("g").classed("legendsymbols",!0),Oe.selectAll("g.legendpoints").data([G]).enter().append("g").classed("legendpoints",!0)}).each(fe).each(F).each(B).each(O).each(N).each(le).each(Q).each(L).each(z).each(U).each(W);function L(G){var J=l(G),$=J.showFill,X=J.showLine,re=J.showGradientLine,ae=J.showGradientFill,j=J.anyFill,ee=J.anyLine,ne=G[0],ce=ne.trace,_e,we,Oe=r(ce),Ie=Oe.colorscale,Xe=Oe.reversescale,tt=function(ze){if(ze.size())if($)e.fillGroupStyle(ze,E,!0);else{var Qe="legendfill-"+ce.uid;e.gradient(ze,E,Qe,T(Xe),Ie,"fill")}},rt=function(ze){if(ze.size()){var Qe="legendline-"+ce.uid;e.lineGroupStyle(ze),e.gradient(ze,E,Qe,T(Xe),Ie,"stroke")}},Je=o.hasMarkers(ce)||!j?"M5,0":ee?"M5,-2":"M5,-3",ot=g.select(this),Me=ot.select(".legendfill").selectAll("path").data($||ae?[G]:[]);if(Me.enter().append("path").classed("js-fill",!0),Me.exit().remove(),Me.attr("d",Je+"h"+u+"v6h-"+u+"z").call(tt),X||re){var pe=P(void 0,ce.line,p,c);we=A.minExtend(ce,{line:{width:pe}}),_e=[A.minExtend(ne,{trace:we})]}var ue=ot.select(".legendlines").selectAll("path").data(X||re?[_e]:[]);ue.enter().append("path").classed("js-line",!0),ue.exit().remove(),ue.attr("d",Je+(re?"l"+u+",0.0001":"h"+u)).call(X?e.lineGroupStyle:rt)}function z(G){var J=l(G),$=J.anyFill,X=J.anyLine,re=J.showLine,ae=J.showMarker,j=G[0],ee=j.trace,ne=!ae&&!X&&!$&&o.hasText(ee),ce,_e;function we(Me,pe,ue,ze){var Qe=A.nestedProperty(ee,Me).get(),it=A.isArrayOrTypedArray(Qe)&&pe?pe(Qe):Qe;if(v&&it&&ze!==void 0&&(it=ze),ue){if(it<ue[0])return ue[0];if(it>ue[1])return ue[1]}return it}function Oe(Me){return j._distinct&&j.index&&Me[j.index]?Me[j.index]:Me[0]}if(ae||ne||re){var Ie={},Xe={};if(ae){Ie.mc=we("marker.color",Oe),Ie.mx=we("marker.symbol",Oe),Ie.mo=we("marker.opacity",A.mean,[.2,1]),Ie.mlc=we("marker.line.color",Oe),Ie.mlw=we("marker.line.width",A.mean,[0,5],h),Xe.marker={sizeref:1,sizemin:1,sizemode:"diameter"};var tt=we("marker.size",A.mean,[2,16],s);Ie.ms=tt,Xe.marker.size=tt}re&&(Xe.line={width:we("line.width",Oe,[0,10],c)}),ne&&(Ie.tx="Aa",Ie.tp=we("textposition",Oe),Ie.ts=10,Ie.tc=we("textfont.color",Oe),Ie.tf=we("textfont.family",Oe),Ie.tw=we("textfont.weight",Oe),Ie.ty=we("textfont.style",Oe),Ie.tv=we("textfont.variant",Oe),Ie.tC=we("textfont.textcase",Oe),Ie.tE=we("textfont.lineposition",Oe),Ie.tS=we("textfont.shadow",Oe)),ce=[A.minExtend(j,Ie)],_e=A.minExtend(ee,Xe),_e.selectedpoints=null,_e.texttemplate=null}var rt=g.select(this).select("g.legendpoints"),Je=rt.selectAll("path.scatterpts").data(ae?ce:[]);Je.enter().insert("path",":first-child").classed("scatterpts",!0).attr("transform",f),Je.exit().remove(),Je.call(e.pointStyle,_e,E),ae&&(ce[0].mrc=3);var ot=rt.selectAll("g.pointtext").data(ne?ce:[]);ot.enter().append("g").classed("pointtext",!0).append("text").attr("transform",f),ot.exit().remove(),ot.selectAll("text").call(e.textPointStyle,_e,E)}function F(G){var J=G[0].trace,$=J.type==="waterfall";if(G[0]._distinct&&$){var X=G[0].trace[G[0].dir].marker;return G[0].mc=X.color,G[0].mlw=X.line.width,G[0].mlc=X.line.color,I(G,this,"waterfall")}var re=[];J.visible&&$&&(re=G[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 ae=g.select(this).select("g.legendpoints").selectAll("path.legendwaterfall").data(re);ae.enter().append("path").classed("legendwaterfall",!0).attr("transform",f).style("stroke-miterlimit",1),ae.exit().remove(),ae.each(function(j){var ee=g.select(this),ne=J[j[0]].marker,ce=P(void 0,ne.line,d,h);ee.attr("d",j[1]).style("stroke-width",ce+"px").call(t.fill,ne.color),ce&&ee.call(t.stroke,ne.line.color)})}function O(G){I(G,this)}function B(G){I(G,this,"funnel")}function I(G,J,$){var X=G[0].trace,re=X.marker||{},ae=re.line||{},j=re.cornerradius?"M6,3a3,3,0,0,1-3,3H-3a3,3,0,0,1-3-3V-3a3,3,0,0,1,3-3H3a3,3,0,0,1,3,3Z":"M6,6H-6V-6H6Z",ee=$?X.visible&&X.type===$:x.traceIs(X,"bar"),ne=g.select(J).select("g.legendpoints").selectAll("path.legend"+$).data(ee?[G]:[]);ne.enter().append("path").classed("legend"+$,!0).attr("d",j).attr("transform",f),ne.exit().remove(),ne.each(function(ce){var _e=g.select(this),we=ce[0],Oe=P(we.mlw,re.line,d,h);_e.style("stroke-width",Oe+"px");var Ie=we.mcc;if(!m._inHover&&"mc"in we){var Xe=r(re),tt=Xe.mid;tt===void 0&&(tt=(Xe.max+Xe.min)/2),Ie=e.tryColorscale(re,"")(tt)}var rt=Ie||we.mc||re.color,Je=re.pattern,ot=Je&&e.getPatternAttr(Je.shape,0,"");if(ot){var Me=e.getPatternAttr(Je.bgcolor,0,null),pe=e.getPatternAttr(Je.fgcolor,0,null),ue=Je.fgopacity,ze=_(Je.size,8,10),Qe=_(Je.solidity,.5,1),it="legend-"+X.uid;_e.call(e.pattern,"legend",E,it,ot,ze,Qe,Ie,Je.fillmode,Me,pe,ue)}else _e.call(t.fill,rt);Oe&&t.stroke(_e,we.mlc||ae.color)})}function N(G){var J=G[0].trace,$=g.select(this).select("g.legendpoints").selectAll("path.legendbox").data(J.visible&&x.traceIs(J,"box-violin")?[G]:[]);$.enter().append("path").classed("legendbox",!0).attr("d","M6,6H-6V-6H6Z").attr("transform",f),$.exit().remove(),$.each(function(){var X=g.select(this);if((J.boxpoints==="all"||J.points==="all")&&t.opacity(J.fillcolor)===0&&t.opacity((J.line||{}).color)===0){var re=A.minExtend(J,{marker:{size:v?s:A.constrain(J.marker.size,2,16),sizeref:1,sizemin:1,sizemode:"diameter"}});$.call(e.pointStyle,re,E)}else{var ae=P(void 0,J.line,d,h);X.style("stroke-width",ae+"px").call(t.fill,J.fillcolor),ae&&t.stroke(X,J.line.color)}})}function U(G){var J=G[0].trace,$=g.select(this).select("g.legendpoints").selectAll("path.legendcandle").data(J.visible&&J.type==="candlestick"?[G,G]:[]);$.enter().append("path").classed("legendcandle",!0).attr("d",function(X,re){return re?"M-15,0H-8M-8,6V-6H8Z":"M15,0H8M8,-6V6H-8Z"}).attr("transform",f).style("stroke-miterlimit",1),$.exit().remove(),$.each(function(X,re){var ae=g.select(this),j=J[re?"increasing":"decreasing"],ee=P(void 0,j.line,d,h);ae.style("stroke-width",ee+"px").call(t.fill,j.fillcolor),ee&&t.stroke(ae,j.line.color)})}function W(G){var J=G[0].trace,$=g.select(this).select("g.legendpoints").selectAll("path.legendohlc").data(J.visible&&J.type==="ohlc"?[G,G]:[]);$.enter().append("path").classed("legendohlc",!0).attr("d",function(X,re){return re?"M-15,0H0M-8,-6V0":"M15,0H0M8,6V0"}).attr("transform",f).style("stroke-miterlimit",1),$.exit().remove(),$.each(function(X,re){var ae=g.select(this),j=J[re?"increasing":"decreasing"],ee=P(void 0,j.line,d,h);ae.style("fill","none").call(e.dashLine,j.line.dash,ee),ee&&t.stroke(ae,j.line.color)})}function Q(G){se(G,this,"pie")}function le(G){se(G,this,"funnelarea")}function se(G,J,$){var X=G[0],re=X.trace,ae=$?re.visible&&re.type===$:x.traceIs(re,$),j=g.select(J).select("g.legendpoints").selectAll("path.legend"+$).data(ae?[G]:[]);if(j.enter().append("path").classed("legend"+$,!0).attr("d","M6,6H-6V-6H6Z").attr("transform",f),j.exit().remove(),j.size()){var ee=re.marker||{},ne=P(n(ee.line.width,X.pts),ee.line,d,h),ce="pieLike",_e=A.minExtend(re,{marker:{line:{width:ne}}},ce),we=A.minExtend(X,{trace:_e},ce);i(j,we,_e,E)}}function fe(G){var J=G[0].trace,$,X=[];if(J.visible)switch(J.type){case"histogram2d":case"heatmap":X=[["M-15,-2V4H15V-2Z"]],$=!0;break;case"choropleth":case"choroplethmapbox":case"choroplethmap":X=[["M-6,-6V6H6V-6Z"]],$=!0;break;case"densitymapbox":case"densitymap":X=[["M-6,0 a6,6 0 1,0 12,0 a 6,6 0 1,0 -12,0"]],$="radial";break;case"cone":X=[["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"]],$=!1;break;case"streamtube":X=[["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"]],$=!1;break;case"surface":X=[["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"]],$=!0;break;case"mesh3d":X=[["M-6,6H0L-6,-6Z"],["M6,6H0L6,-6Z"],["M-6,-6H6L0,6Z"]],$=!1;break;case"volume":X=[["M-6,6H0L-6,-6Z"],["M6,6H0L6,-6Z"],["M-6,-6H6L0,6Z"]],$=!0;break;case"isosurface":X=[["M-6,6H0L-6,-6Z"],["M6,6H0L6,-6Z"],["M-6,-6 A12,24 0 0,0 6,-6 L0,6Z"]],$=!1;break}var re=g.select(this).select("g.legendpoints").selectAll("path.legend3dandfriends").data(X);re.enter().append("path").classed("legend3dandfriends",!0).attr("transform",f).style("stroke-miterlimit",1),re.exit().remove(),re.each(function(ae,j){var ee=g.select(this),ne=r(J),ce=ne.colorscale,_e=ne.reversescale,we=function(tt){if(tt.size()){var rt="legendfill-"+J.uid;e.gradient(tt,E,rt,T(_e,$==="radial"),ce,"fill")}},Oe;if(ce){if(!$){var Xe=ce.length;Oe=j===0?ce[_e?Xe-1:0][1]:j===1?ce[_e?0:Xe-1][1]:ce[Math.floor((Xe-1)/2)][1]}}else{var Ie=J.vertexcolor||J.facecolor||J.color;Oe=A.isArrayOrTypedArray(Ie)?Ie[j]||Ie[0]:Ie}ee.attr("d",ae[0]),Oe?ee.call(t.fill,Oe):ee.call(we)})}};function T(w,M){var E=M?"radial":"horizontal";return E+(w?"":"reversed")}function l(w){var M=w[0].trace,E=M.contours,m=o.hasLines(M),b=o.hasMarkers(M),v=M.visible&&M.fill&&M.fill!=="none",u=!1,y=!1;if(E){var f=E.coloring;f==="lines"?u=!0:m=f==="none"||f==="heatmap"||E.showlines,E.type==="constraint"?v=E._operation!=="=":(f==="fill"||f==="heatmap")&&(y=!0)}return{showMarker:b,showLine:m,showFill:v,showGradientLine:u,showGradientFill:y,anyLine:m||u,anyFill:v||y}}function _(w,M,E){return w&&A.isArrayOrTypedArray(w)?M:w>E?E:w}}}),Jw=Le({"src/components/legend/draw.js"(Z,H){"use strict";var g=Ji(),x=ni(),A=Ku(),S=so(),e=Wg(),t=Kh(),r=rs(),o=$a(),i=$l(),n=DE(),a=Kw(),s=eh(),c=s.LINE_SPACING,h=s.FROM_TL,p=s.FROM_BR,d=zE(),T=$w(),l=w_(),_=1,w=/^legend[0-9]*$/;H.exports=function(U,W){if(W)E(U,W);else{var Q=U._fullLayout,le=Q._legends,se=Q._infolayer.selectAll('[class^="legend"]');se.each(function(){var $=g.select(this),X=$.attr("class"),re=X.split(" ")[0];re.match(w)&&le.indexOf(re)===-1&&$.remove()});for(var fe=0;fe<le.length;fe++){var G=le[fe],J=U._fullLayout[G];E(U,J)}}};function M(N,U,W){if(!(U.title.side!=="top center"&&U.title.side!=="top right")){var Q=U.title.font,le=Q.size*c,se=0,fe=N.node(),G=r.bBox(fe).width;U.title.side==="top center"?se=.5*(U._width-2*W-2*a.titlePad-G):U.title.side==="top right"&&(se=U._width-2*W-2*a.titlePad-G),i.positionText(N,W+a.titlePad+se,W+le)}}function E(N,U){var W=U||{},Q=N._fullLayout,le=I(W),se,fe,G=W._inHover;if(G?(fe=W.layer,se="hover"):(fe=Q._infolayer,se=le),!!fe){se+=Q._uid,N._legendMouseDownTime||(N._legendMouseDownTime=0);var J;if(G){if(!W.entries)return;J=d(W.entries,W)}else{for(var $=(N.calcdata||[]).slice(),X=Q.shapes,re=0;re<X.length;re++){var ae=X[re];if(ae.showlegend){var j={_isShape:!0,_fullInput:ae,index:ae._index,name:ae.name||ae.label.text||"shape "+ae._index,legend:ae.legend,legendgroup:ae.legendgroup,legendgrouptitle:ae.legendgrouptitle,legendrank:ae.legendrank,legendwidth:ae.legendwidth,showlegend:ae.showlegend,visible:ae.visible,opacity:ae.opacity,mode:ae.type==="line"?"lines":"markers",line:ae.line,marker:{line:ae.line,color:ae.fillcolor,size:12,symbol:ae.type==="rect"?"square":ae.type==="circle"?"circle":"hexagon2"}};$.push([{trace:j}])}}J=Q.showlegend&&d($,W,Q._legends.length>1)}var ee=Q.hiddenlabels||[];if(!G&&(!Q.showlegend||!J.length))return fe.selectAll("."+le).remove(),Q._topdefs.select("#"+se).remove(),A.autoMargin(N,le);var ne=x.ensureSingle(fe,"g",le,function(Je){G||Je.attr("pointer-events","all")}),ce=x.ensureSingleById(Q._topdefs,"clipPath",se,function(Je){Je.append("rect")}),_e=x.ensureSingle(ne,"rect","bg",function(Je){Je.attr("shape-rendering","crispEdges")});_e.call(o.stroke,W.bordercolor).call(o.fill,W.bgcolor).style("stroke-width",W.borderwidth+"px");var we=x.ensureSingle(ne,"g","scrollbox"),Oe=W.title;W._titleWidth=0,W._titleHeight=0;var Ie;Oe.text?(Ie=x.ensureSingle(we,"text",le+"titletext"),Ie.attr("text-anchor","start").call(r.font,Oe.font).text(Oe.text),f(Ie,we,N,W,_)):we.selectAll("."+le+"titletext").remove();var Xe=x.ensureSingle(ne,"rect","scrollbar",function(Je){Je.attr(a.scrollBarEnterAttrs).call(o.fill,a.scrollBarColor)}),tt=we.selectAll("g.groups").data(J);tt.enter().append("g").attr("class","groups"),tt.exit().remove();var rt=tt.selectAll("g.traces").data(x.identity);rt.enter().append("g").attr("class","traces"),rt.exit().remove(),rt.style("opacity",function(Je){var ot=Je[0].trace;return S.traceIs(ot,"pie-like")?ee.indexOf(Je[0].label)!==-1?.5:1:ot.visible==="legendonly"?.5:1}).each(function(){g.select(this).call(v,N,W)}).call(T,N,W).each(function(){G||g.select(this).call(y,N,le)}),x.syncOrAsync([A.previousPromises,function(){return z(N,tt,rt,W)},function(){var Je=Q._size,ot=W.borderwidth,Me=W.xref==="paper",pe=W.yref==="paper";if(Oe.text&&M(Ie,W,ot),!G){var ue,ze;Me?ue=Je.l+Je.w*W.x-h[O(W)]*W._width:ue=Q.width*W.x-h[O(W)]*W._width,pe?ze=Je.t+Je.h*(1-W.y)-h[B(W)]*W._effHeight:ze=Q.height*(1-W.y)-h[B(W)]*W._effHeight;var Qe=F(N,le,ue,ze);if(Qe)return;if(Q.margin.autoexpand){var it=ue,$e=ze;ue=Me?x.constrain(ue,0,Q.width-W._width):it,ze=pe?x.constrain(ze,0,Q.height-W._effHeight):$e,ue!==it&&x.log("Constrain "+le+".x to make legend fit inside graph"),ze!==$e&&x.log("Constrain "+le+".y to make legend fit inside graph")}r.setTranslate(ne,ue,ze)}if(Xe.on(".drag",null),ne.on("wheel",null),G||W._height<=W._maxHeight||N._context.staticPlot){var kt=W._effHeight;G&&(kt=W._height),_e.attr({width:W._width-ot,height:kt-ot,x:ot/2,y:ot/2}),r.setTranslate(we,0,0),ce.select("rect").attr({width:W._width-2*ot,height:kt-2*ot,x:ot,y:ot}),r.setClipUrl(we,se,N),r.setRect(Xe,0,0,0,0),delete W._scrollY}else{var Mt=Math.max(a.scrollBarMinHeight,W._effHeight*W._effHeight/W._height),Bt=W._effHeight-Mt-2*a.scrollBarMargin,jt=W._height-W._effHeight,cr=Bt/jt,nr=Math.min(W._scrollY||0,jt);_e.attr({width:W._width-2*ot+a.scrollBarWidth+a.scrollBarMargin,height:W._effHeight-ot,x:ot/2,y:ot/2}),ce.select("rect").attr({width:W._width-2*ot+a.scrollBarWidth+a.scrollBarMargin,height:W._effHeight-2*ot,x:ot,y:ot+nr}),r.setClipUrl(we,se,N),Se(nr,Mt,cr),ne.on("wheel",function(){nr=x.constrain(W._scrollY+g.event.deltaY/Bt*jt,0,jt),Se(nr,Mt,cr),nr!==0&&nr!==jt&&g.event.preventDefault()});var Lr,mr,xr,mt=function(et,ht,yt){var Pt=(yt-ht)/cr+et;return x.constrain(Pt,0,jt)},Fe=function(et,ht,yt){var Pt=(ht-yt)/cr+et;return x.constrain(Pt,0,jt)},Ze=g.behavior.drag().on("dragstart",function(){var et=g.event.sourceEvent;et.type==="touchstart"?Lr=et.changedTouches[0].clientY:Lr=et.clientY,xr=nr}).on("drag",function(){var et=g.event.sourceEvent;et.buttons===2||et.ctrlKey||(et.type==="touchmove"?mr=et.changedTouches[0].clientY:mr=et.clientY,nr=mt(xr,Lr,mr),Se(nr,Mt,cr))});Xe.call(Ze);var Ne=g.behavior.drag().on("dragstart",function(){var et=g.event.sourceEvent;et.type==="touchstart"&&(Lr=et.changedTouches[0].clientY,xr=nr)}).on("drag",function(){var et=g.event.sourceEvent;et.type==="touchmove"&&(mr=et.changedTouches[0].clientY,nr=Fe(xr,Lr,mr),Se(nr,Mt,cr))});we.call(Ne)}function Se(et,ht,yt){W._scrollY=N._fullLayout[le]._scrollY=et,r.setTranslate(we,0,-et),r.setRect(Xe,W._width,a.scrollBarMargin+et*yt,a.scrollBarWidth,ht),ce.select("rect").attr("y",ot+et)}if(N._context.edits.legendPosition){var Ve,Ee,be,Ce;ne.classed("cursor-move",!0),t.init({element:ne.node(),gd:N,prepFn:function(et){if(et.target!==Xe.node()){var ht=r.getTranslate(ne);be=ht.x,Ce=ht.y}},moveFn:function(et,ht){if(be!==void 0&&Ce!==void 0){var yt=be+et,Pt=Ce+ht;r.setTranslate(ne,yt,Pt),Ve=t.align(yt,W._width,Je.l,Je.l+Je.w,W.xanchor),Ee=t.align(Pt+W._height,-W._height,Je.t+Je.h,Je.t,W.yanchor)}},doneFn:function(){if(Ve!==void 0&&Ee!==void 0){var et={};et[le+".x"]=Ve,et[le+".y"]=Ee,S.call("_guiRelayout",N,et)}},clickFn:function(et,ht){var yt=fe.selectAll("g.traces").filter(function(){var Pt=this.getBoundingClientRect();return ht.clientX>=Pt.left&&ht.clientX<=Pt.right&&ht.clientY>=Pt.top&&ht.clientY<=Pt.bottom});yt.size()>0&&b(N,ne,yt,et,ht)}})}}],N)}}function m(N,U,W){var Q=N[0],le=Q.width,se=U.entrywidthmode,fe=Q.trace.legendwidth||U.entrywidth;return se==="fraction"?U._maxWidth*fe:W+(fe||le)}function b(N,U,W,Q,le){var se=W.data()[0][0].trace,fe={event:le,node:W.node(),curveNumber:se.index,expandedIndex:se.index,data:N.data,layout:N.layout,frames:N._transitionData._frames,config:N._context,fullData:N._fullData,fullLayout:N._fullLayout};se._group&&(fe.group=se._group),S.traceIs(se,"pie-like")&&(fe.label=W.datum()[0].label);var G=e.triggerHandler(N,"plotly_legendclick",fe);if(Q===1){if(G===!1)return;U._clickTimeout=setTimeout(function(){N._fullLayout&&n(W,N,Q)},N._context.doubleClickDelay)}else if(Q===2){U._clickTimeout&&clearTimeout(U._clickTimeout),N._legendMouseDownTime=0;var J=e.triggerHandler(N,"plotly_legenddoubleclick",fe);J!==!1&&G!==!1&&n(W,N,Q)}}function v(N,U,W){var Q=I(W),le=N.data()[0][0],se=le.trace,fe=S.traceIs(se,"pie-like"),G=!W._inHover&&U._context.edits.legendText&&!fe,J=W._maxNameLength,$,X;le.groupTitle?($=le.groupTitle.text,X=le.groupTitle.font):(X=W.font,W.entries?$=le.text:($=fe?le.label:se.name,se._meta&&($=x.templateString($,se._meta))));var re=x.ensureSingle(N,"text",Q+"text");re.attr("text-anchor","start").call(r.font,X).text(G?u($,J):$);var ae=W.indentation+W.itemwidth+a.itemGap*2;i.positionText(re,ae,0),G?re.call(i.makeEditable,{gd:U,text:$}).call(f,N,U,W).on("edit",function(j){this.text(u(j,J)).call(f,N,U,W);var ee=le.trace._fullInput||{},ne={};return ne.name=j,ee._isShape?S.call("_guiRelayout",U,"shapes["+se.index+"].name",ne.name):S.call("_guiRestyle",U,ne,se.index)}):f(re,N,U,W)}function u(N,U){var W=Math.max(4,U);if(N&&N.trim().length>=W/2)return N;N=N||"";for(var Q=W-N.length;Q>0;Q--)N+=" ";return N}function y(N,U,W){var Q=U._context.doubleClickDelay,le,se=1,fe=x.ensureSingle(N,"rect",W+"toggle",function(G){U._context.staticPlot||G.style("cursor","pointer").attr("pointer-events","all"),G.call(o.fill,"rgba(0,0,0,0)")});U._context.staticPlot||(fe.on("mousedown",function(){le=new Date().getTime(),le-U._legendMouseDownTime<Q?se+=1:(se=1,U._legendMouseDownTime=le)}),fe.on("mouseup",function(){if(!(U._dragged||U._editing)){var G=U._fullLayout[W];new Date().getTime()-U._legendMouseDownTime>Q&&(se=Math.max(se-1,1)),b(U,G,N,se,g.event)}}))}function f(N,U,W,Q,le){Q._inHover&&N.attr("data-notex",!0),i.convertToTspans(N,W,function(){P(U,W,Q,le)})}function P(N,U,W,Q){var le=N.data()[0][0];if(!W._inHover&&le&&!le.trace.showlegend){N.remove();return}var se=N.select("g[class*=math-group]"),fe=se.node(),G=I(W);W||(W=U._fullLayout[G]);var J=W.borderwidth,$;Q===_?$=W.title.font:le.groupTitle?$=le.groupTitle.font:$=W.font;var X=$.size*c,re,ae;if(fe){var j=r.bBox(fe);re=j.height,ae=j.width,Q===_?r.setTranslate(se,J,J+re*.75):r.setTranslate(se,0,re*.25)}else{var ee="."+G+(Q===_?"title":"")+"text",ne=N.select(ee),ce=i.lineCount(ne),_e=ne.node();if(re=X*ce,ae=_e?r.bBox(_e).width:0,Q===_)W.title.side==="left"&&(ae+=a.itemGap*2),i.positionText(ne,J+a.titlePad,J+X);else{var we=a.itemGap*2+W.indentation+W.itemwidth;le.groupTitle&&(we=a.itemGap,ae-=W.indentation+W.itemwidth),i.positionText(ne,we,-X*((ce-1)/2-.3))}}Q===_?(W._titleWidth=ae,W._titleHeight=re):(le.lineHeight=X,le.height=Math.max(re,16)+3,le.width=ae)}function L(N){var U=0,W=0,Q=N.title.side;return Q&&(Q.indexOf("left")!==-1&&(U=N._titleWidth),Q.indexOf("top")!==-1&&(W=N._titleHeight)),[U,W]}function z(N,U,W,Q){var le=N._fullLayout,se=I(Q);Q||(Q=le[se]);var fe=le._size,G=l.isVertical(Q),J=l.isGrouped(Q),$=Q.entrywidthmode==="fraction",X=Q.borderwidth,re=2*X,ae=a.itemGap,j=Q.indentation+Q.itemwidth+ae*2,ee=2*(X+ae),ne=B(Q),ce=Q.y<0||Q.y===0&&ne==="top",_e=Q.y>1||Q.y===1&&ne==="bottom",we=Q.tracegroupgap,Oe={};Q._maxHeight=Math.max(ce||_e?le.height/2:fe.h,30);var Ie=0;Q._width=0,Q._height=0;var Xe=L(Q);if(G)W.each(function(xr){var mt=xr[0].height;r.setTranslate(this,X+Xe[0],X+Xe[1]+Q._height+mt/2+ae),Q._height+=mt,Q._width=Math.max(Q._width,xr[0].width)}),Ie=j+Q._width,Q._width+=ae+j+re,Q._height+=ee,J&&(U.each(function(xr,mt){r.setTranslate(this,0,mt*Q.tracegroupgap)}),Q._height+=(Q._lgroupsLength-1)*Q.tracegroupgap);else{var tt=O(Q),rt=Q.x<0||Q.x===0&&tt==="right",Je=Q.x>1||Q.x===1&&tt==="left",ot=_e||ce,Me=le.width/2;Q._maxWidth=Math.max(rt?ot&&tt==="left"?fe.l+fe.w:Me:Je?ot&&tt==="right"?fe.r+fe.w:Me:fe.w,2*j);var pe=0,ue=0;W.each(function(xr){var mt=m(xr,Q,j);pe=Math.max(pe,mt),ue+=mt}),Ie=null;var ze=0;if(J){var Qe=0,it=0,$e=0;U.each(function(){var xr=0,mt=0;g.select(this).selectAll("g.traces").each(function(Ze){var Ne=m(Ze,Q,j),Se=Ze[0].height;r.setTranslate(this,Xe[0],Xe[1]+X+ae+Se/2+mt),mt+=Se,xr=Math.max(xr,Ne),Oe[Ze[0].trace.legendgroup]=xr});var Fe=xr+ae;it>0&&Fe+X+it>Q._maxWidth?(ze=Math.max(ze,it),it=0,$e+=Qe+we,Qe=mt):Qe=Math.max(Qe,mt),r.setTranslate(this,it,$e),it+=Fe}),Q._width=Math.max(ze,it)+X,Q._height=$e+Qe+ee}else{var kt=W.size(),Mt=ue+re+(kt-1)*ae<Q._maxWidth,Bt=0,jt=0,cr=0,nr=0;W.each(function(xr){var mt=xr[0].height,Fe=m(xr,Q,j,J),Ze=Mt?Fe:pe;$||(Ze+=ae),Ze+X+jt-ae>=Q._maxWidth&&(ze=Math.max(ze,nr),jt=0,cr+=Bt,Q._height+=Bt,Bt=0),r.setTranslate(this,Xe[0]+X+jt,Xe[1]+X+cr+mt/2+ae),nr=jt+Fe+ae,jt+=Ze,Bt=Math.max(Bt,mt)}),Mt?(Q._width=jt+re,Q._height=Bt+ee):(Q._width=Math.max(ze,nr)+re,Q._height+=Bt+ee)}}Q._width=Math.ceil(Math.max(Q._width+Xe[0],Q._titleWidth+2*(X+a.titlePad))),Q._height=Math.ceil(Math.max(Q._height+Xe[1],Q._titleHeight+2*(X+a.itemGap))),Q._effHeight=Math.min(Q._height,Q._maxHeight);var Lr=N._context.edits,mr=Lr.legendText||Lr.legendPosition;W.each(function(xr){var mt=g.select(this).select("."+se+"toggle"),Fe=xr[0].height,Ze=xr[0].trace.legendgroup,Ne=m(xr,Q,j);J&&Ze!==""&&(Ne=Oe[Ze]);var Se=mr?j:Ie||Ne;!G&&!$&&(Se+=ae/2),r.setRect(mt,0,-Fe/2,Se,Fe)})}function F(N,U,W,Q){var le=N._fullLayout,se=le[U],fe=O(se),G=B(se),J=se.xref==="paper",$=se.yref==="paper";N._fullLayout._reservedMargin[U]={};var X=se.y<.5?"b":"t",re=se.x<.5?"l":"r",ae={r:le.width-W,l:W+se._width,b:le.height-Q,t:Q+se._effHeight};if(J&&$)return A.autoMargin(N,U,{x:se.x,y:se.y,l:se._width*h[fe],r:se._width*p[fe],b:se._effHeight*p[G],t:se._effHeight*h[G]});J?N._fullLayout._reservedMargin[U][X]=ae[X]:$||se.orientation==="v"?N._fullLayout._reservedMargin[U][re]=ae[re]:N._fullLayout._reservedMargin[U][X]=ae[X]}function O(N){return x.isRightAnchor(N)?"right":x.isCenterAnchor(N)?"center":"left"}function B(N){return x.isBottomAnchor(N)?"bottom":x.isMiddleAnchor(N)?"middle":"top"}function I(N){return N._id||"legend"}}}),Qw=Le({"src/components/fx/hover.js"(Z){"use strict";var H=Ji(),g=zn(),x=Vl(),A=ni(),S=A.pushUnique,e=A.strTranslate,t=A.strRotate,r=Wg(),o=$l(),i=RE(),n=rs(),a=$a(),s=Kh(),c=Zo(),h=ch().zindexSeparator,p=so(),d=Td(),T=Bm(),l=Yw(),_=Jw(),w=T.YANGLE,M=Math.PI*w/180,E=1/Math.sin(M),m=Math.cos(M),b=Math.sin(M),v=T.HOVERARROWSIZE,u=T.HOVERTEXTPAD,y={box:!0,ohlc:!0,violin:!0,candlestick:!0},f={scatter:!0,scattergl:!0,splom:!0};function P(j,ee){return j.distance-ee.distance}Z.hover=function(ee,ne,ce,_e){ee=A.getGraphDiv(ee);var we=ne.target;A.throttle(ee._fullLayout._uid+T.HOVERID,T.HOVERMINTIME,function(){L(ee,ne,ce,_e,we)})},Z.loneHover=function(ee,ne){var ce=!0;Array.isArray(ee)||(ce=!1,ee=[ee]);var _e=ne.gd,we=X(_e),Oe=re(_e),Ie=ee.map(function(ze){var Qe=ze._x0||ze.x0||ze.x||0,it=ze._x1||ze.x1||ze.x||0,$e=ze._y0||ze.y0||ze.y||0,kt=ze._y1||ze.y1||ze.y||0,Mt=ze.eventData;if(Mt){var Bt=Math.min(Qe,it),jt=Math.max(Qe,it),cr=Math.min($e,kt),nr=Math.max($e,kt),Lr=ze.trace;if(p.traceIs(Lr,"gl3d")){var mr=_e._fullLayout[Lr.scene]._scene.container,xr=mr.offsetLeft,mt=mr.offsetTop;Bt+=xr,jt+=xr,cr+=mt,nr+=mt}Mt.bbox={x0:Bt+Oe,x1:jt+Oe,y0:cr+we,y1:nr+we},ne.inOut_bbox&&ne.inOut_bbox.push(Mt.bbox)}else Mt=!1;return{color:ze.color||a.defaultLine,x0:ze.x0||ze.x||0,x1:ze.x1||ze.x||0,y0:ze.y0||ze.y||0,y1:ze.y1||ze.y||0,xLabel:ze.xLabel,yLabel:ze.yLabel,zLabel:ze.zLabel,text:ze.text,name:ze.name,idealAlign:ze.idealAlign,borderColor:ze.borderColor,fontFamily:ze.fontFamily,fontSize:ze.fontSize,fontColor:ze.fontColor,fontWeight:ze.fontWeight,fontStyle:ze.fontStyle,fontVariant:ze.fontVariant,nameLength:ze.nameLength,textAlign:ze.textAlign,trace:ze.trace||{index:0,hoverinfo:""},xa:{_offset:0},ya:{_offset:0},index:0,hovertemplate:ze.hovertemplate||!1,hovertemplateLabels:ze.hovertemplateLabels||!1,eventData:Mt}}),Xe=!1,tt=O(Ie,{gd:_e,hovermode:"closest",rotateLabels:Xe,bgColor:ne.bgColor||a.background,container:H.select(ne.container),outerContainer:ne.outerContainer||ne.container}),rt=tt.hoverLabels,Je=5,ot=0,Me=0;rt.sort(function(ze,Qe){return ze.y0-Qe.y0}).each(function(ze,Qe){var it=ze.y0-ze.by/2;it-Je<ot?ze.offset=ot-it+Je:ze.offset=0,ot=it+ze.by+ze.offset,Qe===ne.anchorIndex&&(Me=ze.offset)}).each(function(ze){ze.offset-=Me});var pe=_e._fullLayout._invScaleX,ue=_e._fullLayout._invScaleY;return W(rt,Xe,pe,ue),ce?rt:rt.node()};function L(j,ee,ne,ce,_e){ne||(ne="xy"),typeof ne=="string"&&(ne=ne.split(h)[0]);var we=Array.isArray(ne)?ne:[ne],Oe,Ie=j._fullLayout,Xe=Ie.hoversubplots,tt=Ie._plots||[],rt=tt[ne],Je=Ie._has("cartesian"),ot=ee.hovermode||Ie.hovermode,Me=(ot||"").charAt(0)==="x",pe=(ot||"").charAt(0)==="y",ue,ze;if(Je&&(Me||pe)&&Xe==="axis"){for(var Qe=we.length,it=0;it<Qe;it++)if(Oe=we[it],tt[Oe]){ue=c.getFromId(j,Oe,"x"),ze=c.getFromId(j,Oe,"y");var $e=(Me?ue:ze)._subplotsWith;if($e&&$e.length)for(var kt=0;kt<$e.length;kt++)S(we,$e[kt])}}if(rt&&Xe!=="single"){var Mt=rt.overlays.map(function(da){return da.id});we=we.concat(Mt)}for(var Bt=we.length,jt=new Array(Bt),cr=new Array(Bt),nr=!1,Lr=0;Lr<Bt;Lr++)if(Oe=we[Lr],tt[Oe])nr=!0,jt[Lr]=tt[Oe].xaxis,cr[Lr]=tt[Oe].yaxis;else if(Ie[Oe]&&Ie[Oe]._subplot){var mr=Ie[Oe]._subplot;jt[Lr]=mr.xaxis,cr[Lr]=mr.yaxis}else{A.warn("Unrecognized subplot: "+Oe);return}if(ot&&!nr&&(ot="closest"),["x","y","closest","x unified","y unified"].indexOf(ot)===-1||!j.calcdata||j.querySelector(".zoombox")||j._dragging)return s.unhoverRaw(j,ee);var xr=Ie.hoverdistance;xr===-1&&(xr=1/0);var mt=Ie.spikedistance;mt===-1&&(mt=1/0);var Fe=[],Ze=[],Ne,Se,Ve,Ee,be,Ce,et,ht,yt,Pt,Ot,Wt,$t,lr={hLinePoint:null,vLinePoint:null},fi=!1;if(Array.isArray(ee))for(ot="array",Ve=0;Ve<ee.length;Ve++)be=j.calcdata[ee[Ve].curveNumber||0],be&&(Ce=be[0].trace,be[0].trace.hoverinfo!=="skip"&&(Ze.push(be),Ce.orientation==="h"&&(fi=!0)));else{var Pi=j.calcdata.slice();for(Pi.sort(function(da,vs){var es=da[0].trace.zorder||0,bs=vs[0].trace.zorder||0;return es-bs}),Ee=0;Ee<Pi.length;Ee++)be=Pi[Ee],Ce=be[0].trace,Ce.hoverinfo!=="skip"&&d.isTraceInSubplots(Ce,we)&&(Ze.push(be),Ce.orientation==="h"&&(fi=!0));var Bi=!_e,zi,en;if(Bi)"xpx"in ee?zi=ee.xpx:zi=jt[0]._length/2,"ypx"in ee?en=ee.ypx:en=cr[0]._length/2;else{if(r.triggerHandler(j,"plotly_beforehover",ee)===!1)return;var Ri=_e.getBoundingClientRect();zi=ee.clientX-Ri.left,en=ee.clientY-Ri.top,Ie._calcInverseTransform(j);var Zi=A.apply3DTransform(Ie._invTransform)(zi,en);if(zi=Zi[0],en=Zi[1],zi<0||zi>jt[0]._length||en<0||en>cr[0]._length)return s.unhoverRaw(j,ee)}if(ee.pointerX=zi+jt[0]._offset,ee.pointerY=en+cr[0]._offset,"xval"in ee?Ne=d.flat(we,ee.xval):Ne=d.p2c(jt,zi),"yval"in ee?Se=d.flat(we,ee.yval):Se=d.p2c(cr,en),!g(Ne[0])||!g(Se[0]))return A.warn("Fx.hover failed",ee,j),s.unhoverRaw(j,ee)}var vn=1/0;function Xt(da,vs){for(Ee=0;Ee<Ze.length;Ee++)if(be=Ze[Ee],!(!be||!be[0]||!be[0].trace)&&(Ce=be[0].trace,!(Ce.visible!==!0||Ce._length===0)&&["carpet","contourcarpet"].indexOf(Ce._module.name)===-1)){if(yt=ot,d.isUnifiedHover(yt)&&(yt=yt.charAt(0)),Ce.type==="splom"?(ht=0,et=we[ht]):(et=d.getSubplot(Ce),ht=we.indexOf(et)),Wt={cd:be,trace:Ce,xa:jt[ht],ya:cr[ht],maxHoverDistance:xr,maxSpikeDistance:mt,index:!1,distance:Math.min(vn,xr),spikeDistance:1/0,xSpike:void 0,ySpike:void 0,color:a.defaultLine,name:Ce.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},Ie[et]&&(Wt.subplot=Ie[et]._subplot),Ie._splomScenes&&Ie._splomScenes[Ce.uid]&&(Wt.scene=Ie._splomScenes[Ce.uid]),yt==="array"){var es=ee[Ee];"pointNumber"in es?(Wt.index=es.pointNumber,yt="closest"):(yt="","xval"in es&&(Pt=es.xval,yt="x"),"yval"in es&&(Ot=es.yval,yt=yt?"closest":"y"))}else da!==void 0&&vs!==void 0?(Pt=da,Ot=vs):(Pt=Ne[ht],Ot=Se[ht]);if($t=Fe.length,xr!==0)if(Ce._module&&Ce._module.hoverPoints){var bs=Ce._module.hoverPoints(Wt,Pt,Ot,yt,{finiteRange:!0,hoverLayer:Ie._hoverlayer,hoversubplots:Xe,gd:j});if(bs)for(var Xa,Bo=0;Bo<bs.length;Bo++)Xa=bs[Bo],g(Xa.x0)&&g(Xa.y0)&&Fe.push(Q(Xa,ot))}else A.log("Unrecognized trace type in hover:",Ce);if(ot==="closest"&&Fe.length>$t&&(Fe.splice(0,$t),vn=Fe[0].distance),Je&&mt!==0&&Fe.length===0){Wt.distance=mt,Wt.index=!1;var Za=Ce._module.hoverPoints(Wt,Pt,Ot,"closest",{hoverLayer:Ie._hoverlayer});if(Za&&(Za=Za.filter(function(Ds){return Ds.spikeDistance<=mt})),Za&&Za.length){var Qo,ss=Za.filter(function(Ds){return Ds.xa.showspikes&&Ds.xa.spikesnap!=="hovered data"});if(ss.length){var gs=ss[0];g(gs.x0)&&g(gs.y0)&&(Qo=qt(gs),(!lr.vLinePoint||lr.vLinePoint.spikeDistance>Qo.spikeDistance)&&(lr.vLinePoint=Qo))}var vo=Za.filter(function(Ds){return Ds.ya.showspikes&&Ds.ya.spikesnap!=="hovered data"});if(vo.length){var zo=vo[0];g(zo.x0)&&g(zo.y0)&&(Qo=qt(zo),(!lr.hLinePoint||lr.hLinePoint.spikeDistance>Qo.spikeDistance)&&(lr.hLinePoint=Qo))}}}}}Xt();function Dt(da,vs,es){for(var bs=null,Xa=1/0,Bo,Za=0;Za<da.length;Za++)ue&&ue._id!==da[Za].xa._id||ze&&ze._id!==da[Za].ya._id||(Bo=da[Za].spikeDistance,es&&Za===0&&(Bo=-1/0),Bo<=Xa&&Bo<=vs&&(bs=da[Za],Xa=Bo));return bs}function qt(da){return da?{xa:da.xa,ya:da.ya,x:da.xSpike!==void 0?da.xSpike:(da.x0+da.x1)/2,y:da.ySpike!==void 0?da.ySpike:(da.y0+da.y1)/2,distance:da.distance,spikeDistance:da.spikeDistance,curveNumber:da.trace.index,color:da.color,pointNumber:da.index}:null}var Ut={fullLayout:Ie,container:Ie._hoverlayer,event:ee},br=j._spikepoints,Zr={vLinePoint:lr.vLinePoint,hLinePoint:lr.hLinePoint};j._spikepoints=Zr;var _i=function(){var da=Fe.filter(function(es){return ue&&ue._id===es.xa._id&&ze&&ze._id===es.ya._id}),vs=Fe.filter(function(es){return!(ue&&ue._id===es.xa._id&&ze&&ze._id===es.ya._id)});da.sort(P),vs.sort(P),Fe=da.concat(vs),Fe=J(Fe,ot)};_i();var Yr=ot.charAt(0),Di=(Yr==="x"||Yr==="y")&&Fe[0]&&f[Fe[0].trace.type];if(Je&&mt!==0&&Fe.length!==0){var qi=Fe.filter(function(da){return da.ya.showspikes}),$i=Dt(qi,mt,Di);lr.hLinePoint=qt($i);var Mi=Fe.filter(function(da){return da.xa.showspikes}),sn=Dt(Mi,mt,Di);lr.vLinePoint=qt(sn)}if(Fe.length===0){var vt=s.unhoverRaw(j,ee);return Je&&(lr.hLinePoint!==null||lr.vLinePoint!==null)&&fe(br)&&le(j,lr,Ut),vt}if(Je&&fe(br)&&le(j,lr,Ut),d.isXYhover(yt)&&Fe[0].length!==0&&Fe[0].trace.type!=="splom"){var pt=Fe[0];y[pt.trace.type]?Fe=Fe.filter(function(da){return da.trace.index===pt.trace.index}):Fe=[pt];var kr=Fe.length,Cr=$("x",pt,Ie),wr=$("y",pt,Ie);Xt(Cr,wr);var Ar=[],Er={},Br=0,Pr=function(da){var vs=y[da.trace.type]?z(da):da.trace.index;if(!Er[vs])Br++,Er[vs]=Br,Ar.push(da);else{var es=Er[vs]-1,bs=Ar[es];es>0&&Math.abs(da.distance)<Math.abs(bs.distance)&&(Ar[es]=da)}},Qr;for(Qr=0;Qr<kr;Qr++)Pr(Fe[Qr]);for(Qr=Fe.length-1;Qr>kr-1;Qr--)Pr(Fe[Qr]);Fe=Ar,_i()}var ci=j._hoverdata,mi=[],Et=X(j),ar=re(j);for(Ve=0;Ve<Fe.length;Ve++){var gr=Fe[Ve],ti=d.makeEventData(gr,gr.trace,gr.cd);if(gr.hovertemplate!==!1){var wi=!1;gr.cd[gr.index]&&gr.cd[gr.index].ht&&(wi=gr.cd[gr.index].ht),gr.hovertemplate=wi||gr.trace.hovertemplate||!1}if(gr.xa&&gr.ya){var Gi=gr.x0+gr.xa._offset,Fi=gr.x1+gr.xa._offset,xi=gr.y0+gr.ya._offset,Ii=gr.y1+gr.ya._offset,Bn=Math.min(Gi,Fi),hn=Math.max(Gi,Fi),ba=Math.min(xi,Ii),Aa=Math.max(xi,Ii);ti.bbox={x0:Bn+ar,x1:hn+ar,y0:ba+Et,y1:Aa+Et}}gr.eventData=[ti],mi.push(ti)}j._hoverdata=mi;var Va=ot==="y"&&(Ze.length>1||Fe.length>1)||ot==="closest"&&fi&&Fe.length>1,Qa=a.combine(Ie.plot_bgcolor||a.background,Ie.paper_bgcolor),yo=O(Fe,{gd:j,hovermode:ot,rotateLabels:Va,bgColor:Qa,container:Ie._hoverlayer,outerContainer:Ie._paper.node(),commonLabelOpts:Ie.hoverlabel,hoverdistance:Ie.hoverdistance}),Ga=yo.hoverLabels;if(d.isUnifiedHover(ot)||(I(Ga,Va,Ie,yo.commonLabelBoundingBox),W(Ga,Va,Ie._invScaleX,Ie._invScaleY)),_e&&_e.tagName){var Yo=p.getComponentMethod("annotations","hasClickToShow")(j,mi);i(H.select(_e),Yo?"pointer":"")}!_e||ce||!se(j,ee,ci)||(ci&&j.emit("plotly_unhover",{event:ee,points:ci}),j.emit("plotly_hover",{event:ee,points:j._hoverdata,xaxes:jt,yaxes:cr,xvals:Ne,yvals:Se}))}function z(j){return[j.trace.index,j.index,j.x0,j.y0,j.name,j.attr,j.xa?j.xa._id:"",j.ya?j.ya._id:""].join(",")}var F=/<extra>([\s\S]*)<\/extra>/;function O(j,ee){var ne=ee.gd,ce=ne._fullLayout,_e=ee.hovermode,we=ee.rotateLabels,Oe=ee.bgColor,Ie=ee.container,Xe=ee.outerContainer,tt=ee.commonLabelOpts||{};if(j.length===0)return[[]];var rt=ee.fontFamily||T.HOVERFONT,Je=ee.fontSize||T.HOVERFONTSIZE,ot=ee.fontWeight||ce.font.weight,Me=ee.fontStyle||ce.font.style,pe=ee.fontVariant||ce.font.variant,ue=ee.fontTextcase||ce.font.textcase,ze=ee.fontLineposition||ce.font.lineposition,Qe=ee.fontShadow||ce.font.shadow,it=j[0],$e=it.xa,kt=it.ya,Mt=_e.charAt(0),Bt=Mt+"Label",jt=it[Bt];if(jt===void 0&&$e.type==="multicategory")for(var cr=0;cr<j.length&&(jt=j[cr][Bt],jt===void 0);cr++);var nr=ae(ne,Xe),Lr=nr.top,mr=nr.width,xr=nr.height,mt=jt!==void 0&&it.distance<=ee.hoverdistance&&(_e==="x"||_e==="y");if(mt){var Fe=!0,Ze,Ne;for(Ze=0;Ze<j.length;Ze++)if(Fe&&j[Ze].zLabel===void 0&&(Fe=!1),Ne=j[Ze].hoverinfo||j[Ze].trace.hoverinfo,Ne){var Se=Array.isArray(Ne)?Ne:Ne.split("+");if(Se.indexOf("all")===-1&&Se.indexOf(_e)===-1){mt=!1;break}}Fe&&(mt=!1)}var Ve=Ie.selectAll("g.axistext").data(mt?[0]:[]);Ve.enter().append("g").classed("axistext",!0),Ve.exit().remove();var Ee={minX:0,maxX:0,minY:0,maxY:0};if(Ve.each(function(){var Mi=H.select(this),sn=A.ensureSingle(Mi,"path","",function(Bn){Bn.style({"stroke-width":"1px"})}),vt=A.ensureSingle(Mi,"text","",function(Bn){Bn.attr("data-notex",1)}),pt=tt.bgcolor||a.defaultLine,kr=tt.bordercolor||a.contrast(pt),Cr=a.contrast(pt),wr=tt.font,Ar={weight:wr.weight||ot,style:wr.style||Me,variant:wr.variant||pe,textcase:wr.textcase||ue,lineposition:wr.lineposition||ze,shadow:wr.shadow||Qe,family:wr.family||rt,size:wr.size||Je,color:wr.color||Cr};sn.style({fill:pt,stroke:kr}),vt.text(jt).call(n.font,Ar).call(o.positionText,0,0).call(o.convertToTspans,ne),Mi.attr("transform","");var Er=ae(ne,vt.node()),Br,Pr;if(_e==="x"){var Qr=$e.side==="top"?"-":"";vt.attr("text-anchor","middle").call(o.positionText,0,$e.side==="top"?Lr-Er.bottom-v-u:Lr-Er.top+v+u),Br=$e._offset+(it.x0+it.x1)/2,Pr=kt._offset+($e.side==="top"?0:kt._length);var ci=Er.width/2+u,mi=Br;Br<ci?mi=ci:Br>ce.width-ci&&(mi=ce.width-ci),sn.attr("d","M"+(Br-mi)+",0L"+(Br-mi+v)+","+Qr+v+"H"+ci+"v"+Qr+(u*2+Er.height)+"H"+-ci+"V"+Qr+v+"H"+(Br-mi-v)+"Z"),Br=mi,Ee.minX=Br-ci,Ee.maxX=Br+ci,$e.side==="top"?(Ee.minY=Pr-(u*2+Er.height),Ee.maxY=Pr-u):(Ee.minY=Pr+u,Ee.maxY=Pr+(u*2+Er.height))}else{var Et,ar,gr;kt.side==="right"?(Et="start",ar=1,gr="",Br=$e._offset+$e._length):(Et="end",ar=-1,gr="-",Br=$e._offset),Pr=kt._offset+(it.y0+it.y1)/2,vt.attr("text-anchor",Et),sn.attr("d","M0,0L"+gr+v+","+v+"V"+(u+Er.height/2)+"h"+gr+(u*2+Er.width)+"V-"+(u+Er.height/2)+"H"+gr+v+"V-"+v+"Z"),Ee.minY=Pr-(u+Er.height/2),Ee.maxY=Pr+(u+Er.height/2),kt.side==="right"?(Ee.minX=Br+v,Ee.maxX=Br+v+(u*2+Er.width)):(Ee.minX=Br-v-(u*2+Er.width),Ee.maxX=Br-v);var ti=Er.height/2,wi=Lr-Er.top-ti,Gi="clip"+ce._uid+"commonlabel"+kt._id,Fi;if(Br<Er.width+2*u+v){Fi="M-"+(v+u)+"-"+ti+"h-"+(Er.width-u)+"V"+ti+"h"+(Er.width-u)+"Z";var xi=Er.width-Br+u;o.positionText(vt,xi,wi),Et==="end"&&vt.selectAll("tspan").each(function(){var Bn=H.select(this),hn=n.tester.append("text").text(Bn.text()).call(n.font,Ar),ba=ae(ne,hn.node());Math.round(ba.width)<Math.round(Er.width)&&Bn.attr("x",xi-ba.width),hn.remove()})}else o.positionText(vt,ar*(u+v),wi),Fi=null;var Ii=ce._topclips.selectAll("#"+Gi).data(Fi?[0]:[]);Ii.enter().append("clipPath").attr("id",Gi).append("path"),Ii.exit().remove(),Ii.select("path").attr("d",Fi),n.setClipUrl(vt,Fi?Gi:null,ne)}Mi.attr("transform",e(Br,Pr))}),d.isUnifiedHover(_e)){Ie.selectAll("g.hovertext").remove();var be=j.filter(function(Mi){return Mi.hoverinfo!=="none"});if(be.length===0)return[];var Ce=ce.hoverlabel,et=Ce.font,ht={showlegend:!0,legend:{title:{text:jt,font:et},font:et,bgcolor:Ce.bgcolor,bordercolor:Ce.bordercolor,borderwidth:1,tracegroupgap:7,traceorder:ce.legend?ce.legend.traceorder:void 0,orientation:"v"}},yt={font:et};l(ht,yt,ne._fullData);var Pt=yt.legend;Pt.entries=[];for(var Ot=0;Ot<be.length;Ot++){var Wt=be[Ot];if(Wt.hoverinfo!=="none"){var $t=B(Wt,!0,_e,ce,jt),lr=$t[0],fi=$t[1];Wt.name=fi,fi!==""?Wt.text=fi+" : "+lr:Wt.text=lr;var Pi=Wt.cd[Wt.index];Pi&&(Pi.mc&&(Wt.mc=Pi.mc),Pi.mcc&&(Wt.mc=Pi.mcc),Pi.mlc&&(Wt.mlc=Pi.mlc),Pi.mlcc&&(Wt.mlc=Pi.mlcc),Pi.mlw&&(Wt.mlw=Pi.mlw),Pi.mrc&&(Wt.mrc=Pi.mrc),Pi.dir&&(Wt.dir=Pi.dir)),Wt._distinct=!0,Pt.entries.push([Wt])}}Pt.entries.sort(function(Mi,sn){return Mi[0].trace.index-sn[0].trace.index}),Pt.layer=Ie,Pt._inHover=!0,Pt._groupTitleFont=Ce.grouptitlefont,_(ne,Pt);var Bi=Ie.select("g.legend"),zi=ae(ne,Bi.node()),en=zi.width+2*u,Ri=zi.height+2*u,Zi=be[0],vn=(Zi.x0+Zi.x1)/2,Xt=(Zi.y0+Zi.y1)/2,Dt=!(p.traceIs(Zi.trace,"bar-like")||p.traceIs(Zi.trace,"box-violin")),qt,Ut;Mt==="y"?Dt?(Ut=Xt-u,qt=Xt+u):(Ut=Math.min.apply(null,be.map(function(Mi){return Math.min(Mi.y0,Mi.y1)})),qt=Math.max.apply(null,be.map(function(Mi){return Math.max(Mi.y0,Mi.y1)}))):Ut=qt=A.mean(be.map(function(Mi){return(Mi.y0+Mi.y1)/2}))-Ri/2;var br,Zr;Mt==="x"?Dt?(br=vn+u,Zr=vn-u):(br=Math.max.apply(null,be.map(function(Mi){return Math.max(Mi.x0,Mi.x1)})),Zr=Math.min.apply(null,be.map(function(Mi){return Math.min(Mi.x0,Mi.x1)}))):br=Zr=A.mean(be.map(function(Mi){return(Mi.x0+Mi.x1)/2}))-en/2;var _i=$e._offset,Yr=kt._offset;qt+=Yr,br+=_i,Zr+=_i-en,Ut+=Yr-Ri;var Di,qi;return br+en<mr&&br>=0?Di=br:Zr+en<mr&&Zr>=0?Di=Zr:_i+en<mr?Di=_i:br-vn<vn-Zr+en?Di=mr-en:Di=0,Di+=u,qt+Ri<xr&&qt>=0?qi=qt:Ut+Ri<xr&&Ut>=0?qi=Ut:Yr+Ri<xr?qi=Yr:qt-Xt<Xt-Ut+Ri?qi=xr-Ri:qi=0,qi+=u,Bi.attr("transform",e(Di-1,qi-1)),Bi}var $i=Ie.selectAll("g.hovertext").data(j,function(Mi){return z(Mi)});return $i.enter().append("g").classed("hovertext",!0).each(function(){var Mi=H.select(this);Mi.append("rect").call(a.fill,a.addOpacity(Oe,.8)),Mi.append("text").classed("name",!0),Mi.append("path").style("stroke-width","1px"),Mi.append("text").classed("nums",!0).call(n.font,{weight:ot,style:Me,variant:pe,textcase:ue,lineposition:ze,shadow:Qe,family:rt,size:Je})}),$i.exit().remove(),$i.each(function(Mi){var sn=H.select(this).attr("transform",""),vt=Mi.color;Array.isArray(vt)&&(vt=vt[Mi.eventData[0].pointNumber]);var pt=Mi.bgcolor||vt,kr=a.combine(a.opacity(pt)?pt:a.defaultLine,Oe),Cr=a.combine(a.opacity(vt)?vt:a.defaultLine,Oe),wr=Mi.borderColor||a.contrast(kr),Ar=B(Mi,mt,_e,ce,jt,sn),Er=Ar[0],Br=Ar[1],Pr=sn.select("text.nums").call(n.font,{family:Mi.fontFamily||rt,size:Mi.fontSize||Je,color:Mi.fontColor||wr,weight:Mi.fontWeight||ot,style:Mi.fontStyle||Me,variant:Mi.fontVariant||pe,textcase:Mi.fontTextcase||ue,lineposition:Mi.fontLineposition||ze,shadow:Mi.fontShadow||Qe}).text(Er).attr("data-notex",1).call(o.positionText,0,0).call(o.convertToTspans,ne),Qr=sn.select("text.name"),ci=0,mi=0;if(Br&&Br!==Er){Qr.call(n.font,{family:Mi.fontFamily||rt,size:Mi.fontSize||Je,color:Cr,weight:Mi.fontWeight||ot,style:Mi.fontStyle||Me,variant:Mi.fontVariant||pe,textcase:Mi.fontTextcase||ue,lineposition:Mi.fontLineposition||ze,shadow:Mi.fontShadow||Qe}).text(Br).attr("data-notex",1).call(o.positionText,0,0).call(o.convertToTspans,ne);var Et=ae(ne,Qr.node());ci=Et.width+2*u,mi=Et.height+2*u}else Qr.remove(),sn.select("rect").remove();sn.select("path").style({fill:kr,stroke:wr});var ar=Mi.xa._offset+(Mi.x0+Mi.x1)/2,gr=Mi.ya._offset+(Mi.y0+Mi.y1)/2,ti=Math.abs(Mi.x1-Mi.x0),wi=Math.abs(Mi.y1-Mi.y0),Gi=ae(ne,Pr.node()),Fi=Gi.width/ce._invScaleX,xi=Gi.height/ce._invScaleY;Mi.ty0=(Lr-Gi.top)/ce._invScaleY,Mi.bx=Fi+2*u,Mi.by=Math.max(xi+2*u,mi),Mi.anchor="start",Mi.txwidth=Fi,Mi.tx2width=ci,Mi.offset=0;var Ii=(Fi+v+u+ci)*ce._invScaleX,Bn,hn;if(we)Mi.pos=ar,Bn=gr+wi/2+Ii<=xr,hn=gr-wi/2-Ii>=0,(Mi.idealAlign==="top"||!Bn)&&hn?(gr-=wi/2,Mi.anchor="end"):Bn?(gr+=wi/2,Mi.anchor="start"):Mi.anchor="middle",Mi.crossPos=gr;else{if(Mi.pos=gr,Bn=ar+ti/2+Ii<=mr,hn=ar-ti/2-Ii>=0,(Mi.idealAlign==="left"||!Bn)&&hn)ar-=ti/2,Mi.anchor="end";else if(Bn)ar+=ti/2,Mi.anchor="start";else{Mi.anchor="middle";var ba=Ii/2,Aa=ar+ba-mr,Va=ar-ba;Aa>0&&(ar-=Aa),Va<0&&(ar+=-Va)}Mi.crossPos=ar}Pr.attr("text-anchor",Mi.anchor),ci&&Qr.attr("text-anchor",Mi.anchor),sn.attr("transform",e(ar,gr)+(we?t(w):""))}),{hoverLabels:$i,commonLabelBoundingBox:Ee}}function B(j,ee,ne,ce,_e,we){var Oe="",Ie="";j.nameOverride!==void 0&&(j.name=j.nameOverride),j.name&&(j.trace._meta&&(j.name=A.templateString(j.name,j.trace._meta)),Oe=G(j.name,j.nameLength));var Xe=ne.charAt(0),tt=Xe==="x"?"y":"x";j.zLabel!==void 0?(j.xLabel!==void 0&&(Ie+="x: "+j.xLabel+"<br>"),j.yLabel!==void 0&&(Ie+="y: "+j.yLabel+"<br>"),j.trace.type!=="choropleth"&&j.trace.type!=="choroplethmapbox"&&j.trace.type!=="choroplethmap"&&(Ie+=(Ie?"z: ":"")+j.zLabel)):ee&&j[Xe+"Label"]===_e?Ie=j[tt+"Label"]||"":j.xLabel===void 0?j.yLabel!==void 0&&j.trace.type!=="scattercarpet"&&(Ie=j.yLabel):j.yLabel===void 0?Ie=j.xLabel:Ie="("+j.xLabel+", "+j.yLabel+")",(j.text||j.text===0)&&!Array.isArray(j.text)&&(Ie+=(Ie?"<br>":"")+j.text),j.extraText!==void 0&&(Ie+=(Ie?"<br>":"")+j.extraText),we&&Ie===""&&!j.hovertemplate&&(Oe===""&&we.remove(),Ie=Oe);var rt=j.hovertemplate||!1;if(rt){var Je=j.hovertemplateLabels||j;j[Xe+"Label"]!==_e&&(Je[Xe+"other"]=Je[Xe+"Val"],Je[Xe+"otherLabel"]=Je[Xe+"Label"]),Ie=A.hovertemplateString(rt,Je,ce._d3locale,j.eventData[0]||{},j.trace._meta),Ie=Ie.replace(F,function(ot,Me){return Oe=G(Me,j.nameLength),""})}return[Ie,Oe]}function I(j,ee,ne,ce){var _e=ee?"xa":"ya",we=ee?"ya":"xa",Oe=0,Ie=1,Xe=j.size(),tt=new Array(Xe),rt=0,Je=ce.minX,ot=ce.maxX,Me=ce.minY,pe=ce.maxY,ue=function(Ne){return Ne*ne._invScaleX},ze=function(Ne){return Ne*ne._invScaleY};j.each(function(Ne){var Se=Ne[_e],Ve=Ne[we],Ee=Se._id.charAt(0)==="x",be=Se.range;rt===0&&be&&be[0]>be[1]!==Ee&&(Ie=-1);var Ce=0,et=Ee?ne.width:ne.height;if(ne.hovermode==="x"||ne.hovermode==="y"){var ht=N(Ne,ee),yt=Ne.anchor,Pt=yt==="end"?-1:1,Ot,Wt;if(yt==="middle")Ot=Ne.crossPos+(Ee?ze(ht.y-Ne.by/2):ue(Ne.bx/2+Ne.tx2width/2)),Wt=Ot+(Ee?ze(Ne.by):ue(Ne.bx));else if(Ee)Ot=Ne.crossPos+ze(v+ht.y)-ze(Ne.by/2-v),Wt=Ot+ze(Ne.by);else{var $t=ue(Pt*v+ht.x),lr=$t+ue(Pt*Ne.bx);Ot=Ne.crossPos+Math.min($t,lr),Wt=Ne.crossPos+Math.max($t,lr)}Ee?Me!==void 0&&pe!==void 0&&Math.min(Wt,pe)-Math.max(Ot,Me)>1&&(Ve.side==="left"?(Ce=Ve._mainLinePosition,et=ne.width):et=Ve._mainLinePosition):Je!==void 0&&ot!==void 0&&Math.min(Wt,ot)-Math.max(Ot,Je)>1&&(Ve.side==="top"?(Ce=Ve._mainLinePosition,et=ne.height):et=Ve._mainLinePosition)}tt[rt++]=[{datum:Ne,traceIndex:Ne.trace.index,dp:0,pos:Ne.pos,posref:Ne.posref,size:Ne.by*(Ee?E:1)/2,pmin:Ce,pmax:et}]}),tt.sort(function(Ne,Se){return Ne[0].posref-Se[0].posref||Ie*(Se[0].traceIndex-Ne[0].traceIndex)});var Qe,it,$e,kt,Mt,Bt,jt;function cr(Ne){var Se=Ne[0],Ve=Ne[Ne.length-1];if(it=Se.pmin-Se.pos-Se.dp+Se.size,$e=Ve.pos+Ve.dp+Ve.size-Se.pmax,it>.01){for(Mt=Ne.length-1;Mt>=0;Mt--)Ne[Mt].dp+=it;Qe=!1}if(!($e<.01)){if(it<-.01){for(Mt=Ne.length-1;Mt>=0;Mt--)Ne[Mt].dp-=$e;Qe=!1}if(Qe){var Ee=0;for(kt=0;kt<Ne.length;kt++)Bt=Ne[kt],Bt.pos+Bt.dp+Bt.size>Se.pmax&&Ee++;for(kt=Ne.length-1;kt>=0&&!(Ee<=0);kt--)Bt=Ne[kt],Bt.pos>Se.pmax-1&&(Bt.del=!0,Ee--);for(kt=0;kt<Ne.length&&!(Ee<=0);kt++)if(Bt=Ne[kt],Bt.pos<Se.pmin+1)for(Bt.del=!0,Ee--,$e=Bt.size*2,Mt=Ne.length-1;Mt>=0;Mt--)Ne[Mt].dp-=$e;for(kt=Ne.length-1;kt>=0&&!(Ee<=0);kt--)Bt=Ne[kt],Bt.pos+Bt.dp+Bt.size>Se.pmax&&(Bt.del=!0,Ee--)}}}for(;!Qe&&Oe<=Xe;){for(Oe++,Qe=!0,kt=0;kt<tt.length-1;){var nr=tt[kt],Lr=tt[kt+1],mr=nr[nr.length-1],xr=Lr[0];if(it=mr.pos+mr.dp+mr.size-xr.pos-xr.dp+xr.size,it>.01){for(Mt=Lr.length-1;Mt>=0;Mt--)Lr[Mt].dp+=it;for(nr.push.apply(nr,Lr),tt.splice(kt+1,1),jt=0,Mt=nr.length-1;Mt>=0;Mt--)jt+=nr[Mt].dp;for($e=jt/nr.length,Mt=nr.length-1;Mt>=0;Mt--)nr[Mt].dp-=$e;Qe=!1}else kt++}tt.forEach(cr)}for(kt=tt.length-1;kt>=0;kt--){var mt=tt[kt];for(Mt=mt.length-1;Mt>=0;Mt--){var Fe=mt[Mt],Ze=Fe.datum;Ze.offset=Fe.dp,Ze.del=Fe.del}}}function N(j,ee){var ne=0,ce=j.offset;return ee&&(ce*=-b,ne=j.offset*m),{x:ne,y:ce}}function U(j){var ee={start:1,end:-1,middle:0}[j.anchor],ne=ee*(v+u),ce=ne+ee*(j.txwidth+u),_e=j.anchor==="middle";return _e&&(ne-=j.tx2width/2,ce+=j.txwidth/2+u),{alignShift:ee,textShiftX:ne,text2ShiftX:ce}}function W(j,ee,ne,ce){var _e=function(Oe){return Oe*ne},we=function(Oe){return Oe*ce};j.each(function(Oe){var Ie=H.select(this);if(Oe.del)return Ie.remove();var Xe=Ie.select("text.nums"),tt=Oe.anchor,rt=tt==="end"?-1:1,Je=U(Oe),ot=N(Oe,ee),Me=ot.x,pe=ot.y,ue=tt==="middle";Ie.select("path").attr("d",ue?"M-"+_e(Oe.bx/2+Oe.tx2width/2)+","+we(pe-Oe.by/2)+"h"+_e(Oe.bx)+"v"+we(Oe.by)+"h-"+_e(Oe.bx)+"Z":"M0,0L"+_e(rt*v+Me)+","+we(v+pe)+"v"+we(Oe.by/2-v)+"h"+_e(rt*Oe.bx)+"v-"+we(Oe.by)+"H"+_e(rt*v+Me)+"V"+we(pe-v)+"Z");var ze=Me+Je.textShiftX,Qe=pe+Oe.ty0-Oe.by/2+u,it=Oe.textAlign||"auto";it!=="auto"&&(it==="left"&&tt!=="start"?(Xe.attr("text-anchor","start"),ze=ue?-Oe.bx/2-Oe.tx2width/2+u:-Oe.bx-u):it==="right"&&tt!=="end"&&(Xe.attr("text-anchor","end"),ze=ue?Oe.bx/2-Oe.tx2width/2-u:Oe.bx+u)),Xe.call(o.positionText,_e(ze),we(Qe)),Oe.tx2width&&(Ie.select("text.name").call(o.positionText,_e(Je.text2ShiftX+Je.alignShift*u+Me),we(pe+Oe.ty0-Oe.by/2+u)),Ie.select("rect").call(n.setRect,_e(Je.text2ShiftX+(Je.alignShift-1)*Oe.tx2width/2+Me),we(pe-Oe.by/2-1),_e(Oe.tx2width),we(Oe.by+2)))})}function Q(j,ee){var ne=j.index,ce=j.trace||{},_e=j.cd[0],we=j.cd[ne]||{};function Oe(ot){return ot||g(ot)&&ot===0}var Ie=Array.isArray(ne)?function(ot,Me){var pe=A.castOption(_e,ne,ot);return Oe(pe)?pe:A.extractOption({},ce,"",Me)}:function(ot,Me){return A.extractOption(we,ce,ot,Me)};function Xe(ot,Me,pe){var ue=Ie(Me,pe);Oe(ue)&&(j[ot]=ue)}if(Xe("hoverinfo","hi","hoverinfo"),Xe("bgcolor","hbg","hoverlabel.bgcolor"),Xe("borderColor","hbc","hoverlabel.bordercolor"),Xe("fontFamily","htf","hoverlabel.font.family"),Xe("fontSize","hts","hoverlabel.font.size"),Xe("fontColor","htc","hoverlabel.font.color"),Xe("fontWeight","htw","hoverlabel.font.weight"),Xe("fontStyle","hty","hoverlabel.font.style"),Xe("fontVariant","htv","hoverlabel.font.variant"),Xe("nameLength","hnl","hoverlabel.namelength"),Xe("textAlign","hta","hoverlabel.align"),j.posref=ee==="y"||ee==="closest"&&ce.orientation==="h"?j.xa._offset+(j.x0+j.x1)/2:j.ya._offset+(j.y0+j.y1)/2,j.x0=A.constrain(j.x0,0,j.xa._length),j.x1=A.constrain(j.x1,0,j.xa._length),j.y0=A.constrain(j.y0,0,j.ya._length),j.y1=A.constrain(j.y1,0,j.ya._length),j.xLabelVal!==void 0&&(j.xLabel="xLabel"in j?j.xLabel:c.hoverLabelText(j.xa,j.xLabelVal,ce.xhoverformat),j.xVal=j.xa.c2d(j.xLabelVal)),j.yLabelVal!==void 0&&(j.yLabel="yLabel"in j?j.yLabel:c.hoverLabelText(j.ya,j.yLabelVal,ce.yhoverformat),j.yVal=j.ya.c2d(j.yLabelVal)),j.zLabelVal!==void 0&&j.zLabel===void 0&&(j.zLabel=String(j.zLabelVal)),!isNaN(j.xerr)&&!(j.xa.type==="log"&&j.xerr<=0)){var tt=c.tickText(j.xa,j.xa.c2l(j.xerr),"hover").text;j.xerrneg!==void 0?j.xLabel+=" +"+tt+" / -"+c.tickText(j.xa,j.xa.c2l(j.xerrneg),"hover").text:j.xLabel+=" \xB1 "+tt,ee==="x"&&(j.distance+=1)}if(!isNaN(j.yerr)&&!(j.ya.type==="log"&&j.yerr<=0)){var rt=c.tickText(j.ya,j.ya.c2l(j.yerr),"hover").text;j.yerrneg!==void 0?j.yLabel+=" +"+rt+" / -"+c.tickText(j.ya,j.ya.c2l(j.yerrneg),"hover").text:j.yLabel+=" \xB1 "+rt,ee==="y"&&(j.distance+=1)}var Je=j.hoverinfo||j.trace.hoverinfo;return Je&&Je!=="all"&&(Je=Array.isArray(Je)?Je:Je.split("+"),Je.indexOf("x")===-1&&(j.xLabel=void 0),Je.indexOf("y")===-1&&(j.yLabel=void 0),Je.indexOf("z")===-1&&(j.zLabel=void 0),Je.indexOf("text")===-1&&(j.text=void 0),Je.indexOf("name")===-1&&(j.name=void 0)),j}function le(j,ee,ne){var ce=ne.container,_e=ne.fullLayout,we=_e._size,Oe=ne.event,Ie=!!ee.hLinePoint,Xe=!!ee.vLinePoint,tt,rt;if(ce.selectAll(".spikeline").remove(),!!(Xe||Ie)){var Je=a.combine(_e.plot_bgcolor,_e.paper_bgcolor);if(Ie){var ot=ee.hLinePoint,Me,pe;tt=ot&&ot.xa,rt=ot&&ot.ya;var ue=rt.spikesnap;ue==="cursor"?(Me=Oe.pointerX,pe=Oe.pointerY):(Me=tt._offset+ot.x,pe=rt._offset+ot.y);var ze=x.readability(ot.color,Je)<1.5?a.contrast(Je):ot.color,Qe=rt.spikemode,it=rt.spikethickness,$e=rt.spikecolor||ze,kt=c.getPxPosition(j,rt),Mt,Bt;if(Qe.indexOf("toaxis")!==-1||Qe.indexOf("across")!==-1){if(Qe.indexOf("toaxis")!==-1&&(Mt=kt,Bt=Me),Qe.indexOf("across")!==-1){var jt=rt._counterDomainMin,cr=rt._counterDomainMax;rt.anchor==="free"&&(jt=Math.min(jt,rt.position),cr=Math.max(cr,rt.position)),Mt=we.l+jt*we.w,Bt=we.l+cr*we.w}ce.insert("line",":first-child").attr({x1:Mt,x2:Bt,y1:pe,y2:pe,"stroke-width":it,stroke:$e,"stroke-dasharray":n.dashStyle(rt.spikedash,it)}).classed("spikeline",!0).classed("crisp",!0),ce.insert("line",":first-child").attr({x1:Mt,x2:Bt,y1:pe,y2:pe,"stroke-width":it+2,stroke:Je}).classed("spikeline",!0).classed("crisp",!0)}Qe.indexOf("marker")!==-1&&ce.insert("circle",":first-child").attr({cx:kt+(rt.side!=="right"?it:-it),cy:pe,r:it,fill:$e}).classed("spikeline",!0)}if(Xe){var nr=ee.vLinePoint,Lr,mr;tt=nr&&nr.xa,rt=nr&&nr.ya;var xr=tt.spikesnap;xr==="cursor"?(Lr=Oe.pointerX,mr=Oe.pointerY):(Lr=tt._offset+nr.x,mr=rt._offset+nr.y);var mt=x.readability(nr.color,Je)<1.5?a.contrast(Je):nr.color,Fe=tt.spikemode,Ze=tt.spikethickness,Ne=tt.spikecolor||mt,Se=c.getPxPosition(j,tt),Ve,Ee;if(Fe.indexOf("toaxis")!==-1||Fe.indexOf("across")!==-1){if(Fe.indexOf("toaxis")!==-1&&(Ve=Se,Ee=mr),Fe.indexOf("across")!==-1){var be=tt._counterDomainMin,Ce=tt._counterDomainMax;tt.anchor==="free"&&(be=Math.min(be,tt.position),Ce=Math.max(Ce,tt.position)),Ve=we.t+(1-Ce)*we.h,Ee=we.t+(1-be)*we.h}ce.insert("line",":first-child").attr({x1:Lr,x2:Lr,y1:Ve,y2:Ee,"stroke-width":Ze,stroke:Ne,"stroke-dasharray":n.dashStyle(tt.spikedash,Ze)}).classed("spikeline",!0).classed("crisp",!0),ce.insert("line",":first-child").attr({x1:Lr,x2:Lr,y1:Ve,y2:Ee,"stroke-width":Ze+2,stroke:Je}).classed("spikeline",!0).classed("crisp",!0)}Fe.indexOf("marker")!==-1&&ce.insert("circle",":first-child").attr({cx:Lr,cy:Se-(tt.side!=="top"?Ze:-Ze),r:Ze,fill:Ne}).classed("spikeline",!0)}}}function se(j,ee,ne){if(!ne||ne.length!==j._hoverdata.length)return!0;for(var ce=ne.length-1;ce>=0;ce--){var _e=ne[ce],we=j._hoverdata[ce];if(_e.curveNumber!==we.curveNumber||String(_e.pointNumber)!==String(we.pointNumber)||String(_e.pointNumbers)!==String(we.pointNumbers))return!0}return!1}function fe(j,ee){return!ee||ee.vLinePoint!==j._spikepoints.vLinePoint||ee.hLinePoint!==j._spikepoints.hLinePoint}function G(j,ee){return o.plainText(j||"",{len:ee,allowedTags:["br","sub","sup","b","i","em","s","u"]})}function J(j,ee){for(var ne=ee.charAt(0),ce=[],_e=[],we=[],Oe=0;Oe<j.length;Oe++){var Ie=j[Oe];p.traceIs(Ie.trace,"bar-like")||p.traceIs(Ie.trace,"box-violin")?we.push(Ie):Ie.trace[ne+"period"]?_e.push(Ie):ce.push(Ie)}return ce.concat(_e).concat(we)}function $(j,ee,ne){var ce=ee[j+"a"],_e=ee[j+"Val"],we=ee.cd[0];if(ce.type==="category"||ce.type==="multicategory")_e=ce._categoriesMap[_e];else if(ce.type==="date"){var Oe=ee.trace[j+"periodalignment"];if(Oe){var Ie=ee.cd[ee.index],Xe=Ie[j+"Start"];Xe===void 0&&(Xe=Ie[j]);var tt=Ie[j+"End"];tt===void 0&&(tt=Ie[j]);var rt=tt-Xe;Oe==="end"?_e+=rt:Oe==="middle"&&(_e+=rt/2)}_e=ce.d2c(_e)}return we&&we.t&&we.t.posLetter===ce._id&&(ne.boxmode==="group"||ne.violinmode==="group")&&(_e+=we.t.dPos),_e}function X(j){return j.offsetTop+j.clientTop}function re(j){return j.offsetLeft+j.clientLeft}function ae(j,ee){var ne=j._fullLayout,ce=ee.getBoundingClientRect(),_e=ce.left,we=ce.top,Oe=_e+ce.width,Ie=we+ce.height,Xe=A.apply3DTransform(ne._invTransform)(_e,we),tt=A.apply3DTransform(ne._invTransform)(Oe,Ie),rt=Xe[0],Je=Xe[1],ot=tt[0],Me=tt[1];return{x:rt,y:Je,width:ot-rt,height:Me-Je,top:Math.min(Je,Me),left:Math.min(rt,ot),right:Math.max(rt,ot),bottom:Math.max(Je,Me)}}}}),sy=Le({"src/components/fx/hoverlabel_defaults.js"(Z,H){"use strict";var g=ni(),x=$a(),A=Td().isUnifiedHover;H.exports=function(e,t,r,o){o=o||{};var i=t.legend;function n(a){o.font[a]||(o.font[a]=i?t.legend.font[a]:t.font[a])}t&&A(t.hovermode)&&(o.font||(o.font={}),n("size"),n("family"),n("color"),n("weight"),n("style"),n("variant"),i?(o.bgcolor||(o.bgcolor=x.combine(t.legend.bgcolor,t.paper_bgcolor)),o.bordercolor||(o.bordercolor=t.legend.bordercolor)):o.bgcolor||(o.bgcolor=t.paper_bgcolor)),r("hoverlabel.bgcolor",o.bgcolor),r("hoverlabel.bordercolor",o.bordercolor),r("hoverlabel.namelength",o.namelength),g.coerceFont(r,"hoverlabel.font",o.font),r("hoverlabel.align",o.align)}}}),BE=Le({"src/components/fx/layout_global_defaults.js"(Z,H){"use strict";var g=ni(),x=sy(),A=Pd();H.exports=function(e,t){function r(o,i){return g.coerce(e,t,A,o,i)}x(e,t,r)}}}),OE=Le({"src/components/fx/defaults.js"(Z,H){"use strict";var g=ni(),x=Op(),A=sy();H.exports=function(e,t,r,o){function i(a,s){return g.coerce(e,t,x,a,s)}var n=g.extendFlat({},o.hoverlabel);t.hovertemplate&&(n.namelength=-1),A(e,t,i,n)}}}),e2=Le({"src/components/fx/hovermode_defaults.js"(Z,H){"use strict";var g=ni(),x=Pd();H.exports=function(S,e){function t(r,o){return e[r]!==void 0?e[r]:g.coerce(S,e,x,r,o)}return t("clickmode"),t("hoversubplots"),t("hovermode")}}}),NE=Le({"src/components/fx/layout_defaults.js"(Z,H){"use strict";var g=ni(),x=Pd(),A=e2(),S=sy();H.exports=function(t,r){function o(p,d){return g.coerce(t,r,x,p,d)}var i=A(t,r);i&&(o("hoverdistance"),o("spikedistance"));var n=o("dragmode");n==="select"&&o("selectdirection");var a=r._has("mapbox"),s=r._has("map"),c=r._has("geo"),h=r._basePlotModules.length;r.dragmode==="zoom"&&((a||s||c)&&h===1||(a||s)&&c&&h===2)&&(r.dragmode="pan"),S(t,r,o),g.coerceFont(o,"hoverlabel.grouptitlefont",r.hoverlabel.font)}}}),UE=Le({"src/components/fx/calc.js"(Z,H){"use strict";var g=ni(),x=so();H.exports=function(e){var t=e.calcdata,r=e._fullLayout;function o(c){return function(h){return g.coerceHoverinfo({hoverinfo:h},{_module:c._module},r)}}for(var i=0;i<t.length;i++){var n=t[i],a=n[0].trace;if(!x.traceIs(a,"pie-like")){var s=x.traceIs(a,"2dMap")?A:g.fillArray;s(a.hoverinfo,n,"hi",o(a)),a.hovertemplate&&s(a.hovertemplate,n,"ht"),a.hoverlabel&&(s(a.hoverlabel.bgcolor,n,"hbg"),s(a.hoverlabel.bordercolor,n,"hbc"),s(a.hoverlabel.font.size,n,"hts"),s(a.hoverlabel.font.color,n,"htc"),s(a.hoverlabel.font.family,n,"htf"),s(a.hoverlabel.font.weight,n,"htw"),s(a.hoverlabel.font.style,n,"hty"),s(a.hoverlabel.font.variant,n,"htv"),s(a.hoverlabel.namelength,n,"hnl"),s(a.hoverlabel.align,n,"hta"))}}};function A(S,e,t,r){r=r||g.identity,Array.isArray(S)&&(e[0][t]=r(S))}}}),jE=Le({"src/components/fx/click.js"(Z,H){"use strict";var g=so(),x=Qw().hover;H.exports=function(S,e,t){var r=g.getComponentMethod("annotations","onClick")(S,S._hoverdata);t!==void 0&&x(S,e,t,!0);function o(){S.emit("plotly_click",{points:S._hoverdata,event:e})}S._hoverdata&&e&&e.target&&(r&&r.then?r.then(o):o(),e.stopImmediatePropagation&&e.stopImmediatePropagation())}}}),Dc=Le({"src/components/fx/index.js"(Z,H){"use strict";var g=Ji(),x=ni(),A=Kh(),S=Td(),e=Pd(),t=Qw();H.exports={moduleType:"component",name:"fx",constants:Bm(),schema:{layout:e},attributes:Op(),layoutAttributes:e,supplyLayoutGlobalDefaults:BE(),supplyDefaults:OE(),supplyLayoutDefaults:NE(),calc:UE(),getDistanceFunction:S.getDistanceFunction,getClosest:S.getClosest,inbox:S.inbox,quadrature:S.quadrature,appendArrayPointValue:S.appendArrayPointValue,castHoverOption:o,castHoverinfo:i,hover:t.hover,unhover:A.unhover,loneHover:t.loneHover,loneUnhover:r,click:jE()};function r(n){var a=x.isD3Selection(n)?n:g.select(n);a.selectAll("g.hovertext").remove(),a.selectAll(".spikeline").remove()}function o(n,a,s){return x.castOption(n,a,"hoverlabel."+s)}function i(n,a,s){function c(h){return x.coerceHoverinfo({hoverinfo:h},{_module:n._module},a)}return x.castOption(n,s,"hoverinfo",c)}}}),hv=Le({"src/components/dragelement/helpers.js"(Z){"use strict";Z.selectMode=function(H){return H==="lasso"||H==="select"},Z.drawMode=function(H){return H==="drawclosedpath"||H==="drawopenpath"||H==="drawline"||H==="drawrect"||H==="drawcircle"},Z.openMode=function(H){return H==="drawline"||H==="drawopenpath"},Z.rectMode=function(H){return H==="select"||H==="drawline"||H==="drawrect"||H==="drawcircle"},Z.freeMode=function(H){return H==="lasso"||H==="drawclosedpath"||H==="drawopenpath"},Z.selectingOrDrawing=function(H){return Z.freeMode(H)||Z.rectMode(H)}}}),ly=Le({"src/lib/clear_gl_canvases.js"(Z,H){"use strict";H.exports=function(x){var A=x._fullLayout;A._glcanvas&&A._glcanvas.size()&&A._glcanvas.each(function(S){S.regl&&S.regl.clear({color:!0,depth:!0})})}}}),T_=Le({"src/fonts/ploticon.js"(Z,H){"use strict";H.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:["<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 132 132'>"," <title>plotly-logomark</title>"," <g id='symbol'>","  <rect fill='#000' x='0' y='0' width='132' height='132' rx='18' ry='18'/>","  <circle fill='#9EF' cx='102' cy='30' r='6'/>","  <circle fill='#BAC' cx='78' cy='30' r='6'/>","  <circle fill='#BAC' cx='78' cy='54' r='6'/>","  <circle fill='#D69' cx='54' cy='30' r='6'/>","  <circle fill='#F26' cx='30' cy='30' r='6'/>","  <circle fill='#F26' cx='30' cy='54' r='6'/>","  <path fill='#FFF' d='M30,72a6,6,0,0,0-6,6v24a6,6,0,0,0,12,0V78A6,6,0,0,0,30,72Z'/>","  <path fill='#FFF' d='M78,72a6,6,0,0,0-6,6v24a6,6,0,0,0,12,0V78A6,6,0,0,0,78,72Z'/>","  <path fill='#FFF' d='M54,48a6,6,0,0,0-6,6v48a6,6,0,0,0,12,0V54A6,6,0,0,0,54,48Z'/>","  <path fill='#FFF' d='M102,48a6,6,0,0,0-6,6v48a6,6,0,0,0,12,0V54A6,6,0,0,0,102,48Z'/>"," </g>","</svg>"].join("")}}}}),A_=Le({"src/components/shapes/draw_newshape/constants.js"(Z,H){"use strict";var g=32;H.exports={CIRCLE_SIDES:g,i000:0,i090:g/4,i180:g/2,i270:g/4*3,cos45:Math.cos(Math.PI/4),sin45:Math.sin(Math.PI/4),SQRT2:Math.sqrt(2)}}}),M_=Le({"src/components/selections/helpers.js"(Z,H){"use strict";var g=ni().strTranslate;function x(t,r){switch(t.type){case"log":return t.p2d(r);case"date":return t.p2r(r,0,t.calendar);default:return t.p2r(r)}}function A(t,r){switch(t.type){case"log":return t.d2p(r);case"date":return t.r2p(r,0,t.calendar);default:return t.r2p(r)}}function S(t){var r=t._id.charAt(0)==="y"?1:0;return function(o){return x(t,o[r])}}function e(t){return g(t.xaxis._offset,t.yaxis._offset)}H.exports={p2r:x,r2p:A,axValue:S,getTransform:e}}}),Gp=Le({"src/components/shapes/draw_newshape/helpers.js"(Z){"use strict";var H=oy(),g=A_(),x=g.CIRCLE_SIDES,A=g.SQRT2,S=M_(),e=S.p2r,t=S.r2p,r=[0,3,4,5,6,1,2],o=[0,3,4,1,2];Z.writePaths=function(a){var s=a.length;if(!s)return"M0,0Z";for(var c="",h=0;h<s;h++)for(var p=a[h].length,d=0;d<p;d++){var T=a[h][d][0];if(T==="Z")c+="Z";else for(var l=a[h][d].length,_=0;_<l;_++){var w=_;T==="Q"||T==="S"?w=o[_]:T==="C"&&(w=r[_]),c+=a[h][d][w],_>0&&_<l-1&&(c+=",")}}return c},Z.readPaths=function(a,s,c,h){var p=H(a),d=[],T=-1,l=function(){T++,d[T]=[]},_,w=0,M=0,E,m,b=function(){E=w,m=M};b();for(var v=0;v<p.length;v++){var u=[],y,f,P,L,z=p[v][0],F=z;switch(z){case"M":l(),w=+p[v][1],M=+p[v][2],u.push([F,w,M]),b();break;case"Q":case"S":y=+p[v][1],P=+p[v][2],w=+p[v][3],M=+p[v][4],u.push([F,w,M,y,P]);break;case"C":y=+p[v][1],P=+p[v][2],f=+p[v][3],L=+p[v][4],w=+p[v][5],M=+p[v][6],u.push([F,w,M,y,P,f,L]);break;case"T":case"L":w=+p[v][1],M=+p[v][2],u.push([F,w,M]);break;case"H":F="L",w=+p[v][1],u.push([F,w,M]);break;case"V":F="L",M=+p[v][1],u.push([F,w,M]);break;case"A":F="L";var O=+p[v][1],B=+p[v][2];+p[v][4]||(O=-O,B=-B);var I=w-O,N=M;for(_=1;_<=x/2;_++){var U=2*Math.PI*_/x;u.push([F,I+O*Math.cos(U),N+B*Math.sin(U)])}break;case"Z":(w!==E||M!==m)&&(w=E,M=m,u.push([F,w,M]));break}for(var W=(c||{}).domain,Q=s._fullLayout._size,le=c&&c.xsizemode==="pixel",se=c&&c.ysizemode==="pixel",fe=h===!1,G=0;G<u.length;G++){for(_=0;_+2<7;_+=2){var J=u[G][_+1],$=u[G][_+2];J===void 0||$===void 0||(w=J,M=$,c&&(c.xaxis&&c.xaxis.p2r?(fe&&(J-=c.xaxis._offset),le?J=t(c.xaxis,c.xanchor)+J:J=e(c.xaxis,J)):(fe&&(J-=Q.l),W?J=W.x[0]+J/Q.w:J=J/Q.w),c.yaxis&&c.yaxis.p2r?(fe&&($-=c.yaxis._offset),se?$=t(c.yaxis,c.yanchor)-$:$=e(c.yaxis,$)):(fe&&($-=Q.t),W?$=W.y[1]-$/Q.h:$=1-$/Q.h)),u[G][_+1]=J,u[G][_+2]=$)}d[T].push(u[G].slice())}}return d};function i(a,s){return Math.abs(a-s)<=1e-6}function n(a,s){var c=s[1]-a[1],h=s[2]-a[2];return Math.sqrt(c*c+h*h)}Z.pointsOnRectangle=function(a){var s=a.length;if(s!==5)return!1;for(var c=1;c<3;c++){var h=a[0][c]-a[1][c],p=a[3][c]-a[2][c];if(!i(h,p))return!1;var d=a[0][c]-a[3][c],T=a[1][c]-a[2][c];if(!i(d,T))return!1}return!i(a[0][1],a[1][1])&&!i(a[0][1],a[3][1])?!1:!!(n(a[0],a[1])*n(a[0],a[3]))},Z.pointsOnEllipse=function(a){var s=a.length;if(s!==x+1)return!1;s=x;for(var c=0;c<s;c++){var h=(s*2-c)%s,p=(s/2+h)%s,d=(s/2+c)%s;if(!i(n(a[c],a[d]),n(a[h],a[p])))return!1}return!0},Z.handleEllipse=function(a,s,c){if(!a)return[s,c];var h=Z.ellipseOver({x0:s[0],y0:s[1],x1:c[0],y1:c[1]}),p=(h.x1+h.x0)/2,d=(h.y1+h.y0)/2,T=(h.x1-h.x0)/2,l=(h.y1-h.y0)/2;T||(T=l=l/A),l||(l=T=T/A);for(var _=[],w=0;w<x;w++){var M=w*2*Math.PI/x;_.push([p+T*Math.cos(M),d+l*Math.sin(M)])}return _},Z.ellipseOver=function(a){var s=a.x0,c=a.y0,h=a.x1,p=a.y1,d=h-s,T=p-c;s-=d,c-=T;var l=(s+h)/2,_=(c+p)/2,w=A;return d*=w,T*=w,{x0:l-d,y0:_-T,x1:l+d,y1:_+T}},Z.fixDatesForPaths=function(a,s,c){var h=s.type==="date",p=c.type==="date";if(!h&&!p)return a;for(var d=0;d<a.length;d++)for(var T=0;T<a[d].length;T++)for(var l=0;l+2<a[d][T].length;l+=2)h&&(a[d][T][l+1]=a[d][T][l+1].replace(" ","_")),p&&(a[d][T][l+2]=a[d][T][l+2].replace(" ","_"));return a}}}),S_=Le({"src/components/shapes/draw_newshape/newshapes.js"(Z,H){"use strict";var g=hv(),x=g.drawMode,A=g.openMode,S=A_(),e=S.i000,t=S.i090,r=S.i180,o=S.i270,i=S.cos45,n=S.sin45,a=M_(),s=a.p2r,c=a.r2p,h=jp(),p=h.clearOutline,d=Gp(),T=d.readPaths,l=d.writePaths,_=d.ellipseOver,w=d.fixDatesForPaths;function M(m,b){if(m.length){var v=m[0][0];if(v){var u=b.gd,y=b.isActiveShape,f=b.dragmode,P=(u.layout||{}).shapes||[];if(!x(f)&&y!==void 0){var L=u._fullLayout._activeShapeIndex;if(L<P.length)switch(u._fullLayout.shapes[L].type){case"rect":f="drawrect";break;case"circle":f="drawcircle";break;case"line":f="drawline";break;case"path":var z=P[L].path||"";z[z.length-1]==="Z"?f="drawclosedpath":f="drawopenpath";break}}var F=E(m,b,f);p(u);for(var O=b.editHelpers,B=(O||{}).modifyItem,I=[],N=0;N<P.length;N++){var U=u._fullLayout.shapes[N];if(I[N]=U._input,y!==void 0&&N===u._fullLayout._activeShapeIndex){var W=F;switch(U.type){case"line":case"rect":case"circle":B("x0",W.x0-(U.x0shift||0)),B("x1",W.x1-(U.x1shift||0)),B("y0",W.y0-(U.y0shift||0)),B("y1",W.y1-(U.y1shift||0));break;case"path":B("path",W.path);break}}}return y===void 0?(I.push(F),I):O?O.getUpdateObj():{}}}}function E(m,b,v){var u=m[0][0],y=b.gd,f=u.getAttribute("d"),P=y._fullLayout.newshape,L=b.plotinfo,z=b.isActiveShape,F=L.xaxis,O=L.yaxis,B=!!L.domain||!L.xaxis,I=!!L.domain||!L.yaxis,N=A(v),U=T(f,y,L,z),W={editable:!0,visible:P.visible,name:P.name,showlegend:P.showlegend,legend:P.legend,legendwidth:P.legendwidth,legendgroup:P.legendgroup,legendgrouptitle:{text:P.legendgrouptitle.text,font:P.legendgrouptitle.font},legendrank:P.legendrank,label:P.label,xref:B?"paper":F._id,yref:I?"paper":O._id,layer:P.layer,opacity:P.opacity,line:{color:P.line.color,width:P.line.width,dash:P.line.dash}};N||(W.fillcolor=P.fillcolor,W.fillrule=P.fillrule);var Q;if(U.length===1&&(Q=U[0]),Q&&Q.length===5&&v==="drawrect")W.type="rect",W.x0=Q[0][1],W.y0=Q[0][2],W.x1=Q[2][1],W.y1=Q[2][2];else if(Q&&v==="drawline")W.type="line",W.x0=Q[0][1],W.y0=Q[0][2],W.x1=Q[1][1],W.y1=Q[1][2];else if(Q&&v==="drawcircle"){W.type="circle";var le=Q[e][1],se=Q[t][1],fe=Q[r][1],G=Q[o][1],J=Q[e][2],$=Q[t][2],X=Q[r][2],re=Q[o][2],ae=L.xaxis&&(L.xaxis.type==="date"||L.xaxis.type==="log"),j=L.yaxis&&(L.yaxis.type==="date"||L.yaxis.type==="log");ae&&(le=c(L.xaxis,le),se=c(L.xaxis,se),fe=c(L.xaxis,fe),G=c(L.xaxis,G)),j&&(J=c(L.yaxis,J),$=c(L.yaxis,$),X=c(L.yaxis,X),re=c(L.yaxis,re));var ee=(se+G)/2,ne=(J+X)/2,ce=(G-se+fe-le)/2,_e=(re-$+X-J)/2,we=_({x0:ee,y0:ne,x1:ee+ce*i,y1:ne+_e*n});ae&&(we.x0=s(L.xaxis,we.x0),we.x1=s(L.xaxis,we.x1)),j&&(we.y0=s(L.yaxis,we.y0),we.y1=s(L.yaxis,we.y1)),W.x0=we.x0,W.y0=we.y0,W.x1=we.x1,W.y1=we.y1}else W.type="path",F&&O&&w(U,F,O),W.path=l(U),Q=null;return W}H.exports={newShapes:M,createShapeObj:E}}}),t2=Le({"src/components/selections/draw_newselection/newselections.js"(Z,H){"use strict";var g=hv(),x=g.selectMode,A=jp(),S=A.clearOutline,e=Gp(),t=e.readPaths,r=e.writePaths,o=e.fixDatesForPaths;H.exports=function(n,a){if(n.length){var s=n[0][0];if(s){var c=s.getAttribute("d"),h=a.gd,p=h._fullLayout.newselection,d=a.plotinfo,T=d.xaxis,l=d.yaxis,_=a.isActiveSelection,w=a.dragmode,M=(h.layout||{}).selections||[];if(!x(w)&&_!==void 0){var E=h._fullLayout._activeSelectionIndex;if(E<M.length)switch(h._fullLayout.selections[E].type){case"rect":w="select";break;case"path":w="lasso";break}}var m=t(c,h,d,_),b={xref:T._id,yref:l._id,opacity:p.opacity,line:{color:p.line.color,width:p.line.width,dash:p.line.dash}},v;m.length===1&&(v=m[0]),v&&v.length===5&&w==="select"?(b.type="rect",b.x0=v[0][1],b.y0=v[0][2],b.x1=v[2][1],b.y1=v[2][2]):(b.type="path",T&&l&&o(m,T,l),b.path=r(m),v=null),S(h);for(var u=a.editHelpers,y=(u||{}).modifyItem,f=[],P=0;P<M.length;P++){var L=h._fullLayout.selections[P];if(!L){f[P]=L;continue}if(f[P]=L._input,_!==void 0&&P===h._fullLayout._activeSelectionIndex){var z=b;switch(L.type){case"rect":y("x0",z.x0),y("x1",z.x1),y("y0",z.y0),y("y1",z.y1);break;case"path":y("path",z.path);break}}}return _===void 0?(f.push(b),f):u?u.getUpdateObj():{}}}}}}),uy=Le({"src/components/shapes/constants.js"(Z,H){"use strict";H.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}}}}),Wp=Le({"src/components/shapes/helpers.js"(Z){"use strict";var H=uy(),g=ni(),x=Zo();Z.rangeToShapePosition=function(e){return e.type==="log"?e.r2d:function(t){return t}},Z.shapePositionToRange=function(e){return e.type==="log"?e.d2r:function(t){return t}},Z.decodeDate=function(e){return function(t){return t.replace&&(t=t.replace("_"," ")),e(t)}},Z.encodeDate=function(e){return function(t){return e(t).replace(" ","_")}},Z.extractPathCoords=function(e,t,r){var o=[],i=e.match(H.segmentRE);return i.forEach(function(n){var a=t[n.charAt(0)].drawn;if(a!==void 0){var s=n.substr(1).match(H.paramRE);if(!(!s||s.length<a)){var c=s[a],h=r?c:g.cleanNumber(c);o.push(h)}}}),o},Z.getDataToPixel=function(e,t,r,o,i){var n=e._fullLayout._size,a;if(t)if(i==="domain")a=function(c){return t._length*(o?1-c:c)+t._offset};else{var s=Z.shapePositionToRange(t);a=function(c){var h=S(t,r);return t._offset+t.r2p(s(c,!0))+h},t.type==="date"&&(a=Z.decodeDate(a))}else o?a=function(c){return n.t+n.h*(1-c)}:a=function(c){return n.l+n.w*c};return a},Z.getPixelToData=function(e,t,r,o){var i=e._fullLayout._size,n;if(t)if(o==="domain")n=function(s){var c=(s-t._offset)/t._length;return r?1-c:c};else{var a=Z.rangeToShapePosition(t);n=function(s){return a(t.p2r(s-t._offset))}}else r?n=function(s){return 1-(s-i.t)/i.h}:n=function(s){return(s-i.l)/i.w};return n},Z.roundPositionForSharpStrokeRendering=function(e,t){var r=Math.round(t%2)===1,o=Math.round(e);return r?o+.5:o},Z.makeShapesOptionsAndPlotinfo=function(e,t){var r=e._fullLayout.shapes[t]||{},o=e._fullLayout._plots[r.xref+r.yref],i=!!o;return i?o._hadPlotinfo=!0:(o={},r.xref&&r.xref!=="paper"&&(o.xaxis=e._fullLayout[r.xref+"axis"]),r.yref&&r.yref!=="paper"&&(o.yaxis=e._fullLayout[r.yref+"axis"])),o.xsizemode=r.xsizemode,o.ysizemode=r.ysizemode,o.xanchor=r.xanchor,o.yanchor=r.yanchor,{options:r,plotinfo:o}},Z.makeSelectionsOptionsAndPlotinfo=function(e,t){var r=e._fullLayout.selections[t]||{},o=e._fullLayout._plots[r.xref+r.yref],i=!!o;return i?o._hadPlotinfo=!0:(o={},r.xref&&(o.xaxis=e._fullLayout[r.xref+"axis"]),r.yref&&(o.yaxis=e._fullLayout[r.yref+"axis"])),{options:r,plotinfo:o}},Z.getPathString=function(e,t){var r=t.type,o=x.getRefType(t.xref),i=x.getRefType(t.yref),n=x.getFromId(e,t.xref),a=x.getFromId(e,t.yref),s=e._fullLayout._size,c,h,p,d,T=S(n,t.x0shift),l=S(n,t.x1shift),_=S(a,t.y0shift),w=S(a,t.y1shift),M,E,m,b;if(n?o==="domain"?h=function(B){return n._offset+n._length*B}:(c=Z.shapePositionToRange(n),h=function(B){return n._offset+n.r2p(c(B,!0))}):h=function(B){return s.l+s.w*B},a?i==="domain"?d=function(B){return a._offset+a._length*(1-B)}:(p=Z.shapePositionToRange(a),d=function(B){return a._offset+a.r2p(p(B,!0))}):d=function(B){return s.t+s.h*(1-B)},r==="path")return n&&n.type==="date"&&(h=Z.decodeDate(h)),a&&a.type==="date"&&(d=Z.decodeDate(d)),A(t,h,d);if(t.xsizemode==="pixel"){var v=h(t.xanchor);M=v+t.x0+T,E=v+t.x1+l}else M=h(t.x0)+T,E=h(t.x1)+l;if(t.ysizemode==="pixel"){var u=d(t.yanchor);m=u-t.y0+_,b=u-t.y1+w}else m=d(t.y0)+_,b=d(t.y1)+w;if(r==="line")return"M"+M+","+m+"L"+E+","+b;if(r==="rect")return"M"+M+","+m+"H"+E+"V"+b+"H"+M+"Z";var y=(M+E)/2,f=(m+b)/2,P=Math.abs(y-M),L=Math.abs(f-m),z="A"+P+","+L,F=y+P+","+f,O=y+","+(f-L);return"M"+F+z+" 0 1,1 "+O+z+" 0 0,1 "+F+"Z"};function A(e,t,r){var o=e.path,i=e.xsizemode,n=e.ysizemode,a=e.xanchor,s=e.yanchor;return o.replace(H.segmentRE,function(c){var h=0,p=c.charAt(0),d=H.paramIsX[p],T=H.paramIsY[p],l=H.numParams[p],_=c.substr(1).replace(H.paramRE,function(w){return d[h]?i==="pixel"?w=t(a)+Number(w):w=t(w):T[h]&&(n==="pixel"?w=r(s)-Number(w):w=r(w)),h++,h>l&&(w="X"),w});return h>l&&(_=_.replace(/[\s,]*X.*/,""),g.log("Ignoring extra params in segment "+c)),p+_})}function S(e,t){t=t||0;var r=0;return t&&e&&(e.type==="category"||e.type==="multicategory")&&(r=(e.r2p(1)-e.r2p(0))*t),r}}}),r2=Le({"src/components/shapes/display_labels.js"(Z,H){"use strict";var g=ni(),x=Zo(),A=$l(),S=rs(),e=Gp().readPaths,t=Wp(),r=t.getPathString,o=p_(),i=eh().FROM_TL;H.exports=function(c,h,p,d){if(d.selectAll(".shape-label").remove(),!!(p.label.text||p.label.texttemplate)){var T;if(p.label.texttemplate){var l={};if(p.type!=="path"){var _=x.getFromId(c,p.xref),w=x.getFromId(c,p.yref);for(var M in o){var E=o[M](p,_,w);E!==void 0&&(l[M]=E)}}T=g.texttemplateStringForShapes(p.label.texttemplate,{},c._fullLayout._d3locale,l)}else T=p.label.text;var m={"data-index":h},b=p.label.font,v={"data-notex":1},u=d.append("g").attr(m).classed("shape-label",!0),y=u.append("text").attr(v).classed("shape-label-text",!0).text(T),f,P,L,z;if(p.path){var F=r(c,p),O=e(F,c);f=1/0,L=1/0,P=-1/0,z=-1/0;for(var B=0;B<O.length;B++)for(var I=0;I<O[B].length;I++)for(var N=O[B][I],U=1;U<N.length;U+=2){var W=N[U],Q=N[U+1];f=Math.min(f,W),P=Math.max(P,W),L=Math.min(L,Q),z=Math.max(z,Q)}}else{var le=x.getFromId(c,p.xref),se=p.x0shift,fe=p.x1shift,G=x.getRefType(p.xref),J=x.getFromId(c,p.yref),$=p.y0shift,X=p.y1shift,re=x.getRefType(p.yref),ae=function(Ie,Xe){var tt=t.getDataToPixel(c,le,Xe,!1,G);return tt(Ie)},j=function(Ie,Xe){var tt=t.getDataToPixel(c,J,Xe,!0,re);return tt(Ie)};f=ae(p.x0,se),P=ae(p.x1,fe),L=j(p.y0,$),z=j(p.y1,X)}var ee=p.label.textangle;ee==="auto"&&(p.type==="line"?ee=n(f,L,P,z):ee=0),y.call(function(Ie){return Ie.call(S.font,b).attr({}),A.convertToTspans(Ie,c),Ie});var ne=S.bBox(y.node()),ce=a(f,L,P,z,p,ee,ne),_e=ce.textx,we=ce.texty,Oe=ce.xanchor;y.attr({"text-anchor":{left:"start",center:"middle",right:"end"}[Oe],y:we,x:_e,transform:"rotate("+ee+","+_e+","+we+")"}).call(A.positionText,_e,we)}};function n(s,c,h,p){var d,T;return T=Math.abs(h-s),h>=s?d=c-p:d=p-c,-180/Math.PI*Math.atan2(d,T)}function a(s,c,h,p,d,T,l){var _=d.label.textposition,w=d.label.textangle,M=d.label.padding,E=d.type,m=Math.PI/180*T,b=Math.sin(m),v=Math.cos(m),u=d.label.xanchor,y=d.label.yanchor,f,P,L,z;if(E==="line"){_==="start"?(f=s,P=c):_==="end"?(f=h,P=p):(f=(s+h)/2,P=(c+p)/2),u==="auto"&&(_==="start"?w==="auto"?h>s?u="left":h<s?u="right":u="center":h>s?u="right":h<s?u="left":u="center":_==="end"?w==="auto"?h>s?u="right":h<s?u="left":u="center":h>s?u="left":h<s?u="right":u="center":u="center");var F={left:1,center:0,right:-1},O={bottom:-1,middle:0,top:1};if(w==="auto"){var B=O[y];L=-M*b*B,z=M*v*B}else{var I=F[u],N=O[y];L=M*I,z=M*N}f=f+L,P=P+z}else L=M+3,_.indexOf("right")!==-1?(f=Math.max(s,h)-L,u==="auto"&&(u="right")):_.indexOf("left")!==-1?(f=Math.min(s,h)+L,u==="auto"&&(u="left")):(f=(s+h)/2,u==="auto"&&(u="center")),_.indexOf("top")!==-1?P=Math.min(c,p):_.indexOf("bottom")!==-1?P=Math.max(c,p):P=(c+p)/2,z=M,y==="bottom"?P=P-z:y==="top"&&(P=P+z);var U=i[y],W=d.label.font.size,Q=l.height,le=(Q*U-W)*b,se=-(Q*U-W)*v;return{textx:f+le,texty:P+se,xanchor:u}}}}),E_=Le({"src/components/shapes/display_outlines.js"(Z,H){"use strict";var g=ni(),x=g.strTranslate,A=Kh(),S=hv(),e=S.drawMode,t=S.selectMode,r=so(),o=$a(),i=A_(),n=i.i000,a=i.i090,s=i.i180,c=i.i270,h=jp(),p=h.clearOutlineControllers,d=Gp(),T=d.pointsOnRectangle,l=d.pointsOnEllipse,_=d.writePaths,w=S_().newShapes,M=S_().createShapeObj,E=t2(),m=r2();H.exports=function y(f,P,L,z){z||(z=0);var F=L.gd;function O(){y(f,P,L,z++),(l(f[0])||L.hasText)&&B({redrawing:!0})}function B(Je){var ot={};L.isActiveShape!==void 0&&(L.isActiveShape=!1,ot=w(P,L)),L.isActiveSelection!==void 0&&(L.isActiveSelection=!1,ot=E(P,L),F._fullLayout._reselect=!0),Object.keys(ot).length&&r.call((Je||{}).redrawing?"relayout":"_guiRelayout",F,ot)}var I=F._fullLayout,N=I._zoomlayer,U=L.dragmode,W=e(U),Q=t(U);(W||Q)&&(F._fullLayout._outlining=!0),p(F),P.attr("d",_(f));var le,se,fe,G,J;if(!z&&(L.isActiveShape||L.isActiveSelection)){J=b([],f);var $=N.append("g").attr("class","outline-controllers");_e($),rt()}if(W&&L.hasText){var X=N.select(".label-temp"),re=M(P,L,L.dragmode);m(F,"label-temp",re,X)}function ae(Je){fe=+Je.srcElement.getAttribute("data-i"),G=+Je.srcElement.getAttribute("data-j"),le[fe][G].moveFn=j}function j(Je,ot){if(f.length){var Me=J[fe][G][1],pe=J[fe][G][2],ue=f[fe],ze=ue.length;if(T(ue)){var Qe=Je,it=ot;if(L.isActiveSelection){var $e=v(ue,G);$e[1]===ue[G][1]?it=0:Qe=0}for(var kt=0;kt<ze;kt++)if(kt!==G){var Mt=ue[kt];Mt[1]===ue[G][1]&&(Mt[1]=Me+Qe),Mt[2]===ue[G][2]&&(Mt[2]=pe+it)}if(ue[G][1]=Me+Qe,ue[G][2]=pe+it,!T(ue))for(var Bt=0;Bt<ze;Bt++)for(var jt=0;jt<ue[Bt].length;jt++)ue[Bt][jt]=J[fe][Bt][jt]}else ue[G][1]=Me+Je,ue[G][2]=pe+ot;O()}}function ee(){B()}function ne(){if(f.length&&f[fe]&&f[fe].length){for(var Je=[],ot=0;ot<f[fe].length;ot++)ot!==G&&Je.push(f[fe][ot]);Je.length>1&&!(Je.length===2&&Je[1][0]==="Z")&&(G===0&&(Je[0][0]="M"),f[fe]=Je,O(),B())}}function ce(Je,ot){if(Je===2){fe=+ot.srcElement.getAttribute("data-i"),G=+ot.srcElement.getAttribute("data-j");var Me=f[fe];!T(Me)&&!l(Me)&&ne()}}function _e(Je){le=[];for(var ot=0;ot<f.length;ot++){var Me=f[ot],pe=T(Me),ue=!pe&&l(Me);le[ot]=[];for(var ze=Me.length,Qe=0;Qe<ze;Qe++)if(Me[Qe][0]!=="Z"&&!(ue&&Qe!==n&&Qe!==a&&Qe!==s&&Qe!==c)){var it=pe&&L.isActiveSelection,$e;it&&($e=v(Me,Qe));var kt=Me[Qe][1],Mt=Me[Qe][2],Bt=Je.append(it?"rect":"circle").attr("data-i",ot).attr("data-j",Qe).style({fill:o.background,stroke:o.defaultLine,"stroke-width":1,"shape-rendering":"crispEdges"});if(it){var jt=$e[1]-kt,cr=$e[2]-Mt,nr=cr?5:Math.max(Math.min(25,Math.abs(jt)-5),5),Lr=jt?5:Math.max(Math.min(25,Math.abs(cr)-5),5);Bt.classed(cr?"cursor-ew-resize":"cursor-ns-resize",!0).attr("width",nr).attr("height",Lr).attr("x",kt-nr/2).attr("y",Mt-Lr/2).attr("transform",x(jt/2,cr/2))}else Bt.classed("cursor-grab",!0).attr("r",5).attr("cx",kt).attr("cy",Mt);le[ot][Qe]={element:Bt.node(),gd:F,prepFn:ae,doneFn:ee,clickFn:ce},A.init(le[ot][Qe])}}}function we(Je,ot){if(f.length)for(var Me=0;Me<f.length;Me++)for(var pe=0;pe<f[Me].length;pe++)for(var ue=0;ue+2<f[Me][pe].length;ue+=2)f[Me][pe][ue+1]=J[Me][pe][ue+1]+Je,f[Me][pe][ue+2]=J[Me][pe][ue+2]+ot}function Oe(Je,ot){we(Je,ot),O()}function Ie(Je){fe=+Je.srcElement.getAttribute("data-i"),fe||(fe=0),se[fe].moveFn=Oe}function Xe(){B()}function tt(Je){Je===2&&u(F)}function rt(){if(se=[],!!f.length){var Je=0;se[Je]={element:P[0][0],gd:F,prepFn:Ie,doneFn:Xe,clickFn:tt},A.init(se[Je])}}};function b(y,f){for(var P=0;P<f.length;P++){var L=f[P];y[P]=[];for(var z=0;z<L.length;z++){y[P][z]=[];for(var F=0;F<L[z].length;F++)y[P][z][F]=L[z][F]}}return y}function v(y,f){var P=y[f][1],L=y[f][2],z=y.length,F,O,B;return F=(f+1)%z,O=y[F][1],B=y[F][2],O===P&&B===L&&(F=(f+2)%z,O=y[F][1],B=y[F][2]),[F,O,B]}function u(y){if(t(y._fullLayout.dragmode)){p(y);var f=y._fullLayout._activeSelectionIndex,P=(y.layout||{}).selections||[];if(f<P.length){for(var L=[],z=0;z<P.length;z++)z!==f&&L.push(P[z]);delete y._fullLayout._activeSelectionIndex;var F=y._fullLayout.selections[f];y._fullLayout._deselect={xref:F.xref,yref:F.yref},r.call("_guiRelayout",y,{selections:L})}}}}}),k_=Le({"src/components/shapes/draw.js"(Z,H){"use strict";var g=Ji(),x=so(),A=ni(),S=Zo(),e=Gp().readPaths,t=E_(),r=r2(),o=jp().clearOutlineControllers,i=$a(),n=rs(),a=wl().arrayEditor,s=Kh(),c=fv(),h=uy(),p=Wp(),d=p.getPathString;H.exports={draw:T,drawOne:w,eraseActiveShape:u,drawLabel:r};function T(y){var f=y._fullLayout;f._shapeUpperLayer.selectAll("path").remove(),f._shapeLowerLayer.selectAll("path").remove(),f._shapeUpperLayer.selectAll("text").remove(),f._shapeLowerLayer.selectAll("text").remove();for(var P in f._plots){var L=f._plots[P].shapelayer;L&&(L.selectAll("path").remove(),L.selectAll("text").remove())}for(var z=0;z<f.shapes.length;z++)f.shapes[z].visible===!0&&w(y,z)}function l(y){return!!y._fullLayout._outlining}function _(y){return!y._context.edits.shapePosition}function w(y,f){y._fullLayout._paperdiv.selectAll('.shapelayer [data-index="'+f+'"]').remove();var P=p.makeShapesOptionsAndPlotinfo(y,f),L=P.options,z=P.plotinfo;if(!L._input||L.visible!==!0)return;if(L.layer==="above")O(y._fullLayout._shapeUpperLayer);else if(L.xref==="paper"||L.yref==="paper")O(y._fullLayout._shapeLowerLayer);else if(L.layer==="between")O(z.shapelayerBetween);else if(z._hadPlotinfo){var F=z.mainplotinfo||z;O(F.shapelayer)}else O(y._fullLayout._shapeLowerLayer);function O(B){var I=d(y,L),N={"data-index":f,"fill-rule":L.fillrule,d:I},U=L.opacity,W=L.fillcolor,Q=L.line.width?L.line.color:"rgba(0,0,0,0)",le=L.line.width,se=L.line.dash;!le&&L.editable===!0&&(le=5,se="solid");var fe=I[I.length-1]!=="Z",G=_(y)&&L.editable&&y._fullLayout._activeShapeIndex===f;G&&(W=fe?"rgba(0,0,0,0)":y._fullLayout.activeshape.fillcolor,U=y._fullLayout.activeshape.opacity);var J=B.append("g").classed("shape-group",!0).attr({"data-index":f}),$=J.append("path").attr(N).style("opacity",U).call(i.stroke,Q).call(i.fill,W).call(n.dashLine,se,le);M(J,y,L),r(y,f,L,J);var X;if((G||y._context.edits.shapePosition)&&(X=a(y.layout,"shapes",L)),G){$.style({cursor:"move"});var re={element:$.node(),plotinfo:z,gd:y,editHelpers:X,hasText:L.label.text||L.label.texttemplate,isActiveShape:!0},ae=e(I,y);t(ae,$,re)}else y._context.edits.shapePosition?E(y,$,L,f,B,X):L.editable===!0&&$.style("pointer-events",fe||i.opacity(W)*U<=.5?"stroke":"all");$.node().addEventListener("click",function(){return b(y,$)})}}function M(y,f,P){var L=(P.xref+P.yref).replace(/paper/g,"").replace(/[xyz][1-9]* *domain/g,"");n.setClipUrl(y,L?"clip"+f._fullLayout._uid+L:null,f)}function E(y,f,P,L,z,F){var O=10,B=10,I=P.xsizemode==="pixel",N=P.ysizemode==="pixel",U=P.type==="line",W=P.type==="path",Q=F.modifyItem,le,se,fe,G,J,$,X,re,ae,j,ee,ne,ce,_e,we,Oe=g.select(f.node().parentNode),Ie=S.getFromId(y,P.xref),Xe=S.getRefType(P.xref),tt=S.getFromId(y,P.yref),rt=S.getRefType(P.yref),Je=P.x0shift,ot=P.x1shift,Me=P.y0shift,pe=P.y1shift,ue=function(Se,Ve){var Ee=p.getDataToPixel(y,Ie,Ve,!1,Xe);return Ee(Se)},ze=function(Se,Ve){var Ee=p.getDataToPixel(y,tt,Ve,!0,rt);return Ee(Se)},Qe=p.getPixelToData(y,Ie,!1,Xe),it=p.getPixelToData(y,tt,!0,rt),$e=Bt(),kt={element:$e.node(),gd:y,prepFn:nr,doneFn:Lr,clickFn:mr},Mt;s.init(kt),$e.node().onmousemove=cr;function Bt(){return U?jt():f}function jt(){var Se=10,Ve=Math.max(P.line.width,Se),Ee=z.append("g").attr("data-index",L).attr("drag-helper",!0);Ee.append("path").attr("d",f.attr("d")).style({cursor:"move","stroke-width":Ve,"stroke-opacity":"0"});var be={"fill-opacity":"0"},Ce=Math.max(Ve/2,Se);return Ee.append("circle").attr({"data-line-point":"start-point",cx:I?ue(P.xanchor)+P.x0:ue(P.x0,Je),cy:N?ze(P.yanchor)-P.y0:ze(P.y0,Me),r:Ce}).style(be).classed("cursor-grab",!0),Ee.append("circle").attr({"data-line-point":"end-point",cx:I?ue(P.xanchor)+P.x1:ue(P.x1,ot),cy:N?ze(P.yanchor)-P.y1:ze(P.y1,pe),r:Ce}).style(be).classed("cursor-grab",!0),Ee}function cr(Se){if(l(y)){Mt=null;return}if(U)Se.target.tagName==="path"?Mt="move":Mt=Se.target.attributes["data-line-point"].value==="start-point"?"resize-over-start-point":"resize-over-end-point";else{var Ve=kt.element.getBoundingClientRect(),Ee=Ve.right-Ve.left,be=Ve.bottom-Ve.top,Ce=Se.clientX-Ve.left,et=Se.clientY-Ve.top,ht=!W&&Ee>O&&be>B&&!Se.shiftKey?s.getCursor(Ce/Ee,1-et/be):"move";c(f,ht),Mt=ht.split("-")[0]}}function nr(Se){l(y)||(I&&(J=ue(P.xanchor)),N&&($=ze(P.yanchor)),P.type==="path"?we=P.path:(le=I?P.x0:ue(P.x0),se=N?P.y0:ze(P.y0),fe=I?P.x1:ue(P.x1),G=N?P.y1:ze(P.y1)),le<fe?(ae=le,ce="x0",j=fe,_e="x1"):(ae=fe,ce="x1",j=le,_e="x0"),!N&&se<G||N&&se>G?(X=se,ee="y0",re=G,ne="y1"):(X=G,ee="y1",re=se,ne="y0"),cr(Se),Fe(z,P),Ne(f,P,y),kt.moveFn=Mt==="move"?xr:mt,kt.altKey=Se.altKey)}function Lr(){l(y)||(c(f),Ze(z),M(f,y,P),x.call("_guiRelayout",y,F.getUpdateObj()))}function mr(){l(y)||Ze(z)}function xr(Se,Ve){if(P.type==="path"){var Ee=function(et){return et},be=Ee,Ce=Ee;I?Q("xanchor",P.xanchor=Qe(J+Se)):(be=function(ht){return Qe(ue(ht)+Se)},Ie&&Ie.type==="date"&&(be=p.encodeDate(be))),N?Q("yanchor",P.yanchor=it($+Ve)):(Ce=function(ht){return it(ze(ht)+Ve)},tt&&tt.type==="date"&&(Ce=p.encodeDate(Ce))),Q("path",P.path=m(we,be,Ce))}else I?Q("xanchor",P.xanchor=Qe(J+Se)):(Q("x0",P.x0=Qe(le+Se)),Q("x1",P.x1=Qe(fe+Se))),N?Q("yanchor",P.yanchor=it($+Ve)):(Q("y0",P.y0=it(se+Ve)),Q("y1",P.y1=it(G+Ve)));f.attr("d",d(y,P)),Fe(z,P),r(y,L,P,Oe)}function mt(Se,Ve){if(W){var Ee=function(Ri){return Ri},be=Ee,Ce=Ee;I?Q("xanchor",P.xanchor=Qe(J+Se)):(be=function(Zi){return Qe(ue(Zi)+Se)},Ie&&Ie.type==="date"&&(be=p.encodeDate(be))),N?Q("yanchor",P.yanchor=it($+Ve)):(Ce=function(Zi){return it(ze(Zi)+Ve)},tt&&tt.type==="date"&&(Ce=p.encodeDate(Ce))),Q("path",P.path=m(we,be,Ce))}else if(U){if(Mt==="resize-over-start-point"){var et=le+Se,ht=N?se-Ve:se+Ve;Q("x0",P.x0=I?et:Qe(et)),Q("y0",P.y0=N?ht:it(ht))}else if(Mt==="resize-over-end-point"){var yt=fe+Se,Pt=N?G-Ve:G+Ve;Q("x1",P.x1=I?yt:Qe(yt)),Q("y1",P.y1=N?Pt:it(Pt))}}else{var Ot=function(Ri){return Mt.indexOf(Ri)!==-1},Wt=Ot("n"),$t=Ot("s"),lr=Ot("w"),fi=Ot("e"),Pi=Wt?X+Ve:X,Bi=$t?re+Ve:re,zi=lr?ae+Se:ae,en=fi?j+Se:j;N&&(Wt&&(Pi=X-Ve),$t&&(Bi=re-Ve)),(!N&&Bi-Pi>B||N&&Pi-Bi>B)&&(Q(ee,P[ee]=N?Pi:it(Pi)),Q(ne,P[ne]=N?Bi:it(Bi))),en-zi>O&&(Q(ce,P[ce]=I?zi:Qe(zi)),Q(_e,P[_e]=I?en:Qe(en)))}f.attr("d",d(y,P)),Fe(z,P),r(y,L,P,Oe)}function Fe(Se,Ve){(I||N)&&Ee();function Ee(){var be=Ve.type!=="path",Ce=Se.selectAll(".visual-cue").data([0]),et=1;Ce.enter().append("path").attr({fill:"#fff","fill-rule":"evenodd",stroke:"#000","stroke-width":et}).classed("visual-cue",!0);var ht=ue(I?Ve.xanchor:A.midRange(be?[Ve.x0,Ve.x1]:p.extractPathCoords(Ve.path,h.paramIsX))),yt=ze(N?Ve.yanchor:A.midRange(be?[Ve.y0,Ve.y1]:p.extractPathCoords(Ve.path,h.paramIsY)));if(ht=p.roundPositionForSharpStrokeRendering(ht,et),yt=p.roundPositionForSharpStrokeRendering(yt,et),I&&N){var Pt="M"+(ht-1-et)+","+(yt-1-et)+"h-8v2h8 v8h2v-8 h8v-2h-8 v-8h-2 Z";Ce.attr("d",Pt)}else if(I){var Ot="M"+(ht-1-et)+","+(yt-9-et)+"v18 h2 v-18 Z";Ce.attr("d",Ot)}else{var Wt="M"+(ht-9-et)+","+(yt-1-et)+"h18 v2 h-18 Z";Ce.attr("d",Wt)}}}function Ze(Se){Se.selectAll(".visual-cue").remove()}function Ne(Se,Ve,Ee){var be=Ve.xref,Ce=Ve.yref,et=S.getFromId(Ee,be),ht=S.getFromId(Ee,Ce),yt="";be!=="paper"&&!et.autorange&&(yt+=be),Ce!=="paper"&&!ht.autorange&&(yt+=Ce),n.setClipUrl(Se,yt?"clip"+Ee._fullLayout._uid+yt:null,Ee)}}function m(y,f,P){return y.replace(h.segmentRE,function(L){var z=0,F=L.charAt(0),O=h.paramIsX[F],B=h.paramIsY[F],I=h.numParams[F],N=L.substr(1).replace(h.paramRE,function(U){return z>=I||(O[z]?U=f(U):B[z]&&(U=P(U)),z++),U});return F+N})}function b(y,f){if(_(y)){var P=f.node(),L=+P.getAttribute("data-index");if(L>=0){if(L===y._fullLayout._activeShapeIndex){v(y);return}y._fullLayout._activeShapeIndex=L,y._fullLayout._deactivateShape=v,T(y)}}}function v(y){if(_(y)){var f=y._fullLayout._activeShapeIndex;f>=0&&(o(y),delete y._fullLayout._activeShapeIndex,T(y))}}function u(y){if(_(y)){o(y);var f=y._fullLayout._activeShapeIndex,P=(y.layout||{}).shapes||[];if(f<P.length){for(var L=[],z=0;z<P.length;z++)z!==f&&L.push(P[z]);return delete y._fullLayout._activeShapeIndex,x.call("_guiRelayout",y,{shapes:L})}}}}}),i2=Le({"src/components/modebar/buttons.js"(Z,H){"use strict";var g=so(),x=Ku(),A=Kc(),S=T_(),e=k_().eraseActiveShape,t=ni(),r=t._,o=H.exports={};o.toImage={name:"toImage",title:function(E){var m=E._context.toImageButtonOptions||{},b=m.format||"png";return b==="png"?r(E,"Download plot as a png"):r(E,"Download plot")},icon:S.camera,click:function(E){var m=E._context.toImageButtonOptions,b={format:m.format||"png"};t.notifier(r(E,"Taking snapshot - this may take a few seconds"),"long"),["filename","width","height","scale"].forEach(function(v){v in m&&(b[v]=m[v])}),g.call("downloadImage",E,b).then(function(v){t.notifier(r(E,"Snapshot succeeded")+" - "+v,"long")}).catch(function(){t.notifier(r(E,"Sorry, there was a problem downloading your snapshot!"),"long")})}},o.sendDataToCloud={name:"sendDataToCloud",title:function(E){return r(E,"Edit in Chart Studio")},icon:S.disk,click:function(E){x.sendDataToCloud(E)}},o.editInChartStudio={name:"editInChartStudio",title:function(E){return r(E,"Edit in Chart Studio")},icon:S.pencil,click:function(E){x.sendDataToCloud(E)}},o.zoom2d={name:"zoom2d",_cat:"zoom",title:function(E){return r(E,"Zoom")},attr:"dragmode",val:"zoom",icon:S.zoombox,click:i},o.pan2d={name:"pan2d",_cat:"pan",title:function(E){return r(E,"Pan")},attr:"dragmode",val:"pan",icon:S.pan,click:i},o.select2d={name:"select2d",_cat:"select",title:function(E){return r(E,"Box Select")},attr:"dragmode",val:"select",icon:S.selectbox,click:i},o.lasso2d={name:"lasso2d",_cat:"lasso",title:function(E){return r(E,"Lasso Select")},attr:"dragmode",val:"lasso",icon:S.lasso,click:i},o.drawclosedpath={name:"drawclosedpath",title:function(E){return r(E,"Draw closed freeform")},attr:"dragmode",val:"drawclosedpath",icon:S.drawclosedpath,click:i},o.drawopenpath={name:"drawopenpath",title:function(E){return r(E,"Draw open freeform")},attr:"dragmode",val:"drawopenpath",icon:S.drawopenpath,click:i},o.drawline={name:"drawline",title:function(E){return r(E,"Draw line")},attr:"dragmode",val:"drawline",icon:S.drawline,click:i},o.drawrect={name:"drawrect",title:function(E){return r(E,"Draw rectangle")},attr:"dragmode",val:"drawrect",icon:S.drawrect,click:i},o.drawcircle={name:"drawcircle",title:function(E){return r(E,"Draw circle")},attr:"dragmode",val:"drawcircle",icon:S.drawcircle,click:i},o.eraseshape={name:"eraseshape",title:function(E){return r(E,"Erase active shape")},icon:S.eraseshape,click:e},o.zoomIn2d={name:"zoomIn2d",_cat:"zoomin",title:function(E){return r(E,"Zoom in")},attr:"zoom",val:"in",icon:S.zoom_plus,click:i},o.zoomOut2d={name:"zoomOut2d",_cat:"zoomout",title:function(E){return r(E,"Zoom out")},attr:"zoom",val:"out",icon:S.zoom_minus,click:i},o.autoScale2d={name:"autoScale2d",_cat:"autoscale",title:function(E){return r(E,"Autoscale")},attr:"zoom",val:"auto",icon:S.autoscale,click:i},o.resetScale2d={name:"resetScale2d",_cat:"resetscale",title:function(E){return r(E,"Reset axes")},attr:"zoom",val:"reset",icon:S.home,click:i},o.hoverClosestCartesian={name:"hoverClosestCartesian",_cat:"hoverclosest",title:function(E){return r(E,"Show closest data on hover")},attr:"hovermode",val:"closest",icon:S.tooltip_basic,gravity:"ne",click:i},o.hoverCompareCartesian={name:"hoverCompareCartesian",_cat:"hoverCompare",title:function(E){return r(E,"Compare data on hover")},attr:"hovermode",val:function(E){return E._fullLayout._isHoriz?"y":"x"},icon:S.tooltip_compare,gravity:"ne",click:i};function i(E,m){var b=m.currentTarget,v=b.getAttribute("data-attr"),u=b.getAttribute("data-val")||!0,y=E._fullLayout,f={},P=A.list(E,null,!0),L=y._cartesianSpikesEnabled,z,F;if(v==="zoom"){var O=u==="in"?.5:2,B=(1+O)/2,I=(1-O)/2,N;for(F=0;F<P.length;F++)if(z=P[F],!z.fixedrange)if(N=z._name,u==="auto")f[N+".autorange"]=!0;else if(u==="reset")z._rangeInitial0===void 0&&z._rangeInitial1===void 0?f[N+".autorange"]=!0:z._rangeInitial0===void 0?(f[N+".autorange"]=z._autorangeInitial,f[N+".range"]=[null,z._rangeInitial1]):z._rangeInitial1===void 0?(f[N+".range"]=[z._rangeInitial0,null],f[N+".autorange"]=z._autorangeInitial):f[N+".range"]=[z._rangeInitial0,z._rangeInitial1],z._showSpikeInitial!==void 0&&(f[N+".showspikes"]=z._showSpikeInitial,L==="on"&&!z._showSpikeInitial&&(L="off"));else{var U=[z.r2l(z.range[0]),z.r2l(z.range[1])],W=[B*U[0]+I*U[1],B*U[1]+I*U[0]];f[N+".range[0]"]=z.l2r(W[0]),f[N+".range[1]"]=z.l2r(W[1])}}else v==="hovermode"&&(u==="x"||u==="y")&&(u=y._isHoriz?"y":"x",b.setAttribute("data-val",u)),f[v]=u;y._cartesianSpikesEnabled=L,g.call("_guiRelayout",E,f)}o.zoom3d={name:"zoom3d",_cat:"zoom",title:function(E){return r(E,"Zoom")},attr:"scene.dragmode",val:"zoom",icon:S.zoombox,click:n},o.pan3d={name:"pan3d",_cat:"pan",title:function(E){return r(E,"Pan")},attr:"scene.dragmode",val:"pan",icon:S.pan,click:n},o.orbitRotation={name:"orbitRotation",title:function(E){return r(E,"Orbital rotation")},attr:"scene.dragmode",val:"orbit",icon:S["3d_rotate"],click:n},o.tableRotation={name:"tableRotation",title:function(E){return r(E,"Turntable rotation")},attr:"scene.dragmode",val:"turntable",icon:S["z-axis"],click:n};function n(E,m){for(var b=m.currentTarget,v=b.getAttribute("data-attr"),u=b.getAttribute("data-val")||!0,y=E._fullLayout._subplots.gl3d||[],f={},P=v.split("."),L=0;L<y.length;L++)f[y[L]+"."+P[1]]=u;var z=u==="pan"?u:"zoom";f.dragmode=z,g.call("_guiRelayout",E,f)}o.resetCameraDefault3d={name:"resetCameraDefault3d",_cat:"resetCameraDefault",title:function(E){return r(E,"Reset camera to default")},attr:"resetDefault",icon:S.home,click:a},o.resetCameraLastSave3d={name:"resetCameraLastSave3d",_cat:"resetCameraLastSave",title:function(E){return r(E,"Reset camera to last save")},attr:"resetLastSave",icon:S.movie,click:a};function a(E,m){for(var b=m.currentTarget,v=b.getAttribute("data-attr"),u=v==="resetLastSave",y=v==="resetDefault",f=E._fullLayout,P=f._subplots.gl3d||[],L={},z=0;z<P.length;z++){var F=P[z],O=F+".camera",B=F+".aspectratio",I=F+".aspectmode",N=f[F]._scene,U;u?(L[O+".up"]=N.viewInitial.up,L[O+".eye"]=N.viewInitial.eye,L[O+".center"]=N.viewInitial.center,U=!0):y&&(L[O+".up"]=null,L[O+".eye"]=null,L[O+".center"]=null,U=!0),U&&(L[B+".x"]=N.viewInitial.aspectratio.x,L[B+".y"]=N.viewInitial.aspectratio.y,L[B+".z"]=N.viewInitial.aspectratio.z,L[I]=N.viewInitial.aspectmode)}g.call("_guiRelayout",E,L)}o.hoverClosest3d={name:"hoverClosest3d",_cat:"hoverclosest",title:function(E){return r(E,"Toggle show closest data on hover")},attr:"hovermode",val:null,toggle:!0,icon:S.tooltip_basic,gravity:"ne",click:c};function s(E,m){var b=m.currentTarget,v=b._previousVal,u=E._fullLayout,y=u._subplots.gl3d||[],f=["xaxis","yaxis","zaxis"],P={},L={};if(v)L=v,b._previousVal=null;else{for(var z=0;z<y.length;z++){var F=y[z],O=u[F],B=F+".hovermode";P[B]=O.hovermode,L[B]=!1;for(var I=0;I<3;I++){var N=f[I],U=F+"."+N+".showspikes";L[U]=!1,P[U]=O[N].showspikes}}b._previousVal=P}return L}function c(E,m){var b=s(E,m);g.call("_guiRelayout",E,b)}o.zoomInGeo={name:"zoomInGeo",_cat:"zoomin",title:function(E){return r(E,"Zoom in")},attr:"zoom",val:"in",icon:S.zoom_plus,click:h},o.zoomOutGeo={name:"zoomOutGeo",_cat:"zoomout",title:function(E){return r(E,"Zoom out")},attr:"zoom",val:"out",icon:S.zoom_minus,click:h},o.resetGeo={name:"resetGeo",_cat:"reset",title:function(E){return r(E,"Reset")},attr:"reset",val:null,icon:S.autoscale,click:h},o.hoverClosestGeo={name:"hoverClosestGeo",_cat:"hoverclosest",title:function(E){return r(E,"Toggle show closest data on hover")},attr:"hovermode",val:null,toggle:!0,icon:S.tooltip_basic,gravity:"ne",click:d};function h(E,m){for(var b=m.currentTarget,v=b.getAttribute("data-attr"),u=b.getAttribute("data-val")||!0,y=E._fullLayout,f=y._subplots.geo||[],P=0;P<f.length;P++){var L=f[P],z=y[L];if(v==="zoom"){var F=z.projection.scale,O=u==="in"?2*F:.5*F;g.call("_guiRelayout",E,L+".projection.scale",O)}}v==="reset"&&M(E,"geo")}o.hoverClosestPie={name:"hoverClosestPie",_cat:"hoverclosest",title:function(E){return r(E,"Toggle show closest data on hover")},attr:"hovermode",val:"closest",icon:S.tooltip_basic,gravity:"ne",click:d};function p(E){var m=E._fullLayout;return m.hovermode?!1:m._has("cartesian")?m._isHoriz?"y":"x":"closest"}function d(E){var m=p(E);g.call("_guiRelayout",E,"hovermode",m)}o.resetViewSankey={name:"resetSankeyGroup",title:function(E){return r(E,"Reset view")},icon:S.home,click:function(E){for(var m={"node.groups":[],"node.x":[],"node.y":[]},b=0;b<E._fullData.length;b++){var v=E._fullData[b]._viewInitial;m["node.groups"].push(v.node.groups.slice()),m["node.x"].push(v.node.x.slice()),m["node.y"].push(v.node.y.slice())}g.call("restyle",E,m)}},o.toggleHover={name:"toggleHover",title:function(E){return r(E,"Toggle show closest data on hover")},attr:"hovermode",val:null,toggle:!0,icon:S.tooltip_basic,gravity:"ne",click:function(E,m){var b=s(E,m);b.hovermode=p(E),g.call("_guiRelayout",E,b)}},o.resetViews={name:"resetViews",title:function(E){return r(E,"Reset views")},icon:S.home,click:function(E,m){var b=m.currentTarget;b.setAttribute("data-attr","zoom"),b.setAttribute("data-val","reset"),i(E,m),b.setAttribute("data-attr","resetLastSave"),a(E,m),M(E,"geo"),M(E,"mapbox"),M(E,"map")}},o.toggleSpikelines={name:"toggleSpikelines",title:function(E){return r(E,"Toggle Spike Lines")},icon:S.spikeline,attr:"_cartesianSpikesEnabled",val:"on",click:function(E){var m=E._fullLayout,b=m._cartesianSpikesEnabled;m._cartesianSpikesEnabled=b==="on"?"off":"on",g.call("_guiRelayout",E,T(E))}};function T(E){for(var m=E._fullLayout,b=m._cartesianSpikesEnabled==="on",v=A.list(E,null,!0),u={},y=0;y<v.length;y++){var f=v[y];u[f._name+".showspikes"]=b?!0:f._showSpikeInitial}return u}o.resetViewMapbox={name:"resetViewMapbox",_cat:"resetView",title:function(E){return r(E,"Reset view")},attr:"reset",icon:S.home,click:function(E){M(E,"mapbox")}},o.resetViewMap={name:"resetViewMap",_cat:"resetView",title:function(E){return r(E,"Reset view")},attr:"reset",icon:S.home,click:function(E){M(E,"map")}},o.zoomInMapbox={name:"zoomInMapbox",_cat:"zoomin",title:function(E){return r(E,"Zoom in")},attr:"zoom",val:"in",icon:S.zoom_plus,click:l},o.zoomInMap={name:"zoomInMap",_cat:"zoomin",title:function(E){return r(E,"Zoom in")},attr:"zoom",val:"in",icon:S.zoom_plus,click:_},o.zoomOutMapbox={name:"zoomOutMapbox",_cat:"zoomout",title:function(E){return r(E,"Zoom out")},attr:"zoom",val:"out",icon:S.zoom_minus,click:l},o.zoomOutMap={name:"zoomOutMap",_cat:"zoomout",title:function(E){return r(E,"Zoom out")},attr:"zoom",val:"out",icon:S.zoom_minus,click:_};function l(E,m){w(E,m,"mapbox")}function _(E,m){w(E,m,"map")}function w(E,m,b){for(var v=m.currentTarget,u=v.getAttribute("data-val"),y=E._fullLayout,f=y._subplots[b]||[],P=1.05,L={},z=0;z<f.length;z++){var F=f[z],O=y[F].zoom,B=u==="in"?P*O:O/P;L[F+".zoom"]=B}g.call("_guiRelayout",E,L)}function M(E,m){for(var b=E._fullLayout,v=b._subplots[m]||[],u={},y=0;y<v.length;y++)for(var f=v[y],P=b[f]._subplot,L=P.viewInitial,z=Object.keys(L),F=0;F<z.length;F++){var O=z[F];u[f+"."+O]=L[O]}g.call("_guiRelayout",E,u)}}}),n2=Le({"src/components/modebar/constants.js"(Z,H){"use strict";var g=i2(),x=Object.keys(g),A=["drawline","drawopenpath","drawclosedpath","drawcircle","drawrect","eraseshape"],S=["v1hovermode","hoverclosest","hovercompare","togglehover","togglespikelines"].concat(A),e=[],t=function(r){if(S.indexOf(r._cat||r.name)===-1){var o=r.name,i=(r._cat||r.name).toLowerCase();e.indexOf(o)===-1&&e.push(o),e.indexOf(i)===-1&&e.push(i)}};x.forEach(function(r){t(g[r])}),e.sort(),H.exports={DRAW_MODES:A,backButtons:S,foreButtons:e}}}),a2=Le({"src/components/modebar/attributes.js"(Z,H){"use strict";var g=n2();H.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"}}}}),VE=Le({"src/components/modebar/defaults.js"(Z,H){"use strict";var g=ni(),x=$a(),A=wl(),S=a2();H.exports=function(t,r){var o=t.modebar||{},i=A.newContainer(r,"modebar");function n(s,c){return g.coerce(o,i,S,s,c)}n("orientation"),n("bgcolor",x.addOpacity(r.paper_bgcolor,.5));var a=x.contrast(x.rgb(r.modebar.bgcolor));n("color",x.addOpacity(a,.3)),n("activecolor",x.addOpacity(a,.7)),n("uirevision",r.uirevision),n("add"),n("remove")}}}),qE=Le({"src/components/modebar/modebar.js"(Z,H){"use strict";var g=Ji(),x=zn(),A=ni(),S=T_(),e=gn().version,t=new DOMParser;function r(a){this.container=a.container,this.element=document.createElement("div"),this.update(a.graphInfo,a.buttons),this.container.appendChild(this.element)}var o=r.prototype;o.update=function(a,s){this.graphInfo=a;var c=this.graphInfo._context,h=this.graphInfo._fullLayout,p="modebar-"+h._uid;this.element.setAttribute("id",p),this._uid=p,this.element.className="modebar",c.displayModeBar==="hover"&&(this.element.className+=" modebar--hover ease-bg"),h.modebar.orientation==="v"&&(this.element.className+=" vertical",s=s.reverse());var d=h.modebar,T="#"+p+" .modebar-group";document.querySelectorAll(T).forEach(function(E){E.style.backgroundColor=d.bgcolor});var l=!this.hasButtons(s),_=this.hasLogo!==c.displaylogo,w=this.locale!==c.locale;if(this.locale=c.locale,(l||_||w)&&(this.removeAllButtons(),this.updateButtons(s),c.watermark||c.displaylogo)){var M=this.getLogo();c.watermark&&(M.className=M.className+" watermark"),h.modebar.orientation==="v"?this.element.insertBefore(M,this.element.childNodes[0]):this.element.appendChild(M),this.hasLogo=!0}this.updateActiveButton(),A.setStyleOnHover("#"+p+" .modebar-btn",".active",".icon path","fill: "+d.activecolor,"fill: "+d.color,this.element)},o.updateButtons=function(a){var s=this;this.buttons=a,this.buttonElements=[],this.buttonsNames=[],this.buttons.forEach(function(c){var h=s.createGroup();c.forEach(function(p){var d=p.name;if(!d)throw new Error("must provide button 'name' in button config");if(s.buttonsNames.indexOf(d)!==-1)throw new Error("button name '"+d+"' is taken");s.buttonsNames.push(d);var T=s.createButton(p);s.buttonElements.push(T),h.appendChild(T)}),s.element.appendChild(h)})},o.createGroup=function(){var a=document.createElement("div");a.className="modebar-group";var s=this.graphInfo._fullLayout.modebar;return a.style.backgroundColor=s.bgcolor,a},o.createButton=function(a){var s=this,c=document.createElement("a");c.setAttribute("rel","tooltip"),c.className="modebar-btn";var h=a.title;h===void 0?h=a.name:typeof h=="function"&&(h=h(this.graphInfo)),(h||h===0)&&c.setAttribute("data-title",h),a.attr!==void 0&&c.setAttribute("data-attr",a.attr);var p=a.val;p!==void 0&&(typeof p=="function"&&(p=p(this.graphInfo)),c.setAttribute("data-val",p));var d=a.click;if(typeof d!="function")throw new Error("must provide button 'click' function in button config");c.addEventListener("click",function(l){a.click(s.graphInfo,l),s.updateActiveButton(l.currentTarget)}),c.setAttribute("data-toggle",a.toggle||!1),a.toggle&&g.select(c).classed("active",!0);var T=a.icon;return typeof T=="function"?c.appendChild(T()):c.appendChild(this.createIcon(T||S.question)),c.setAttribute("data-gravity",a.gravity||"n"),c},o.createIcon=function(a){var s=x(a.height)?Number(a.height):a.ascent-a.descent,c="http://www.w3.org/2000/svg",h;if(a.path){h=document.createElementNS(c,"svg"),h.setAttribute("viewBox",[0,0,a.width,s].join(" ")),h.setAttribute("class","icon");var p=document.createElementNS(c,"path");p.setAttribute("d",a.path),a.transform?p.setAttribute("transform",a.transform):a.ascent!==void 0&&p.setAttribute("transform","matrix(1 0 0 -1 0 "+a.ascent+")"),h.appendChild(p)}if(a.svg){var d=t.parseFromString(a.svg,"application/xml");h=d.childNodes[0]}return h.setAttribute("height","1em"),h.setAttribute("width","1em"),h},o.updateActiveButton=function(a){var s=this.graphInfo._fullLayout,c=a!==void 0?a.getAttribute("data-attr"):null;this.buttonElements.forEach(function(h){var p=h.getAttribute("data-val")||!0,d=h.getAttribute("data-attr"),T=h.getAttribute("data-toggle")==="true",l=g.select(h),_=function(E,m){var b=s.modebar,v=E.querySelector(".icon path");v&&(m||E.matches(":hover")?v.style.fill=b.activecolor:v.style.fill=b.color)};if(T){if(d===c){var w=!l.classed("active");l.classed("active",w),_(h,w)}}else{var M=d===null?d:A.nestedProperty(s,d).get();l.classed("active",M===p),_(h,M===p)}})},o.hasButtons=function(a){var s=this.buttons;if(!s||a.length!==s.length)return!1;for(var c=0;c<a.length;++c){if(a[c].length!==s[c].length)return!1;for(var h=0;h<a[c].length;h++)if(a[c][h].name!==s[c][h].name)return!1}return!0};function i(a){return a+" (v"+e+")"}o.getLogo=function(){var a=this.createGroup(),s=document.createElement("a");return s.href="https://plotly.com/",s.target="_blank",s.setAttribute("data-title",i(A._(this.graphInfo,"Produced with Plotly.js"))),s.className="modebar-btn plotlyjsicon modebar-btn--logo",s.appendChild(this.createIcon(S.newplotlylogo)),a.appendChild(s),a},o.removeAllButtons=function(){for(;this.element.firstChild;)this.element.removeChild(this.element.firstChild);this.hasLogo=!1},o.destroy=function(){A.removeElement(this.container.querySelector(".modebar"))};function n(a,s){var c=a._fullLayout,h=new r({graphInfo:a,container:c._modebardiv.node(),buttons:s});return c._privateplot&&g.select(h.element).append("span").classed("badge-private float--left",!0).text("PRIVATE"),h}H.exports=n}}),HE=Le({"src/components/modebar/manage.js"(Z,H){"use strict";var g=Kc(),x=gu(),A=so(),S=Td().isUnifiedHover,e=qE(),t=i2(),r=n2().DRAW_MODES,o=ni().extendDeep;H.exports=function(d){var T=d._fullLayout,l=d._context,_=T._modeBar;if(!l.displayModeBar&&!l.watermark){_&&(_.destroy(),delete T._modeBar);return}if(!Array.isArray(l.modeBarButtonsToRemove))throw new Error(["*modeBarButtonsToRemove* configuration options","must be an array."].join(" "));if(!Array.isArray(l.modeBarButtonsToAdd))throw new Error(["*modeBarButtonsToAdd* configuration options","must be an array."].join(" "));var w=l.modeBarButtons,M;Array.isArray(w)&&w.length?M=h(w):!l.displayModeBar&&l.watermark?M=[]:M=i(d),_?_.update(d,M):T._modeBar=e(d,M)};function i(p){var d=p._fullLayout,T=p._fullData,l=p._context;function _(j,ee){if(typeof ee=="string"){if(ee.toLowerCase()===j.toLowerCase())return!0}else{var ne=ee.name,ce=ee._cat||ee.name;if(ne===j||ce===j.toLowerCase())return!0}return!1}var w=d.modebar.add;typeof w=="string"&&(w=[w]);var M=d.modebar.remove;typeof M=="string"&&(M=[M]);var E=l.modeBarButtonsToAdd.concat(w.filter(function(j){for(var ee=0;ee<l.modeBarButtonsToRemove.length;ee++)if(_(j,l.modeBarButtonsToRemove[ee]))return!1;return!0})),m=l.modeBarButtonsToRemove.concat(M.filter(function(j){for(var ee=0;ee<l.modeBarButtonsToAdd.length;ee++)if(_(j,l.modeBarButtonsToAdd[ee]))return!1;return!0})),b=d._has("cartesian"),v=d._has("gl3d"),u=d._has("geo"),y=d._has("pie"),f=d._has("funnelarea"),P=d._has("ternary"),L=d._has("mapbox"),z=d._has("map"),F=d._has("polar"),O=d._has("smith"),B=d._has("sankey"),I=n(d),N=S(d.hovermode),U=[];function W(j){if(j.length){for(var ee=[],ne=0;ne<j.length;ne++){for(var ce=j[ne],_e=t[ce],we=_e.name.toLowerCase(),Oe=(_e._cat||_e.name).toLowerCase(),Ie=!1,Xe=0;Xe<m.length;Xe++){var tt=m[Xe].toLowerCase();if(tt===we||tt===Oe){Ie=!0;break}}Ie||ee.push(t[ce])}U.push(ee)}}var Q=["toImage"];l.showEditInChartStudio?Q.push("editInChartStudio"):l.showSendToCloud&&Q.push("sendDataToCloud"),W(Q);var le=[],se=[],fe=[],G=[];(b||y||f||P)+u+v+L+z+F+O>1?(se=["toggleHover"],fe=["resetViews"]):u?(le=["zoomInGeo","zoomOutGeo"],se=["hoverClosestGeo"],fe=["resetGeo"]):v?(se=["hoverClosest3d"],fe=["resetCameraDefault3d","resetCameraLastSave3d"]):L?(le=["zoomInMapbox","zoomOutMapbox"],se=["toggleHover"],fe=["resetViewMapbox"]):z?(le=["zoomInMap","zoomOutMap"],se=["toggleHover"],fe=["resetViewMap"]):y?se=["hoverClosestPie"]:B?(se=["hoverClosestCartesian","hoverCompareCartesian"],fe=["resetViewSankey"]):se=["toggleHover"],b&&se.push("toggleSpikelines","hoverClosestCartesian","hoverCompareCartesian"),(s(T)||N)&&(se=[]),b&&!I&&(le=["zoomIn2d","zoomOut2d","autoScale2d"],fe[0]!=="resetViews"&&(fe=["resetScale2d"])),v?G=["zoom3d","pan3d","orbitRotation","tableRotation"]:b&&!I||P?G=["zoom2d","pan2d"]:L||z||u?G=["pan2d"]:F&&(G=["zoom2d"]),a(T)&&G.push("select2d","lasso2d");var J=[],$=function(j){J.indexOf(j)===-1&&se.indexOf(j)!==-1&&J.push(j)};if(Array.isArray(E)){for(var X=[],re=0;re<E.length;re++){var ae=E[re];typeof ae=="string"?(ae=ae.toLowerCase(),r.indexOf(ae)!==-1?(d._has("mapbox")||d._has("map")||d._has("cartesian"))&&G.push(ae):ae==="togglespikelines"?$("toggleSpikelines"):ae==="togglehover"?$("toggleHover"):ae==="hovercompare"?$("hoverCompareCartesian"):ae==="hoverclosest"?($("hoverClosestCartesian"),$("hoverClosestGeo"),$("hoverClosest3d"),$("hoverClosestPie")):ae==="v1hovermode"&&($("hoverClosestCartesian"),$("hoverCompareCartesian"),$("hoverClosestGeo"),$("hoverClosest3d"),$("hoverClosestPie"))):X.push(ae)}E=X}return W(G),W(le.concat(fe)),W(J),c(U,E)}function n(p){for(var d=g.list({_fullLayout:p},null,!0),T=0;T<d.length;T++)if(!d[T].fixedrange)return!1;return!0}function a(p){for(var d=!1,T=0;T<p.length&&!d;T++){var l=p[T];!l._module||!l._module.selectPoints||(A.traceIs(l,"scatter-like")?(x.hasMarkers(l)||x.hasText(l))&&(d=!0):A.traceIs(l,"box-violin")?(l.boxpoints==="all"||l.points==="all")&&(d=!0):d=!0)}return d}function s(p){for(var d=0;d<p.length;d++)if(!A.traceIs(p[d],"noHover"))return!1;return!0}function c(p,d){if(d.length)if(Array.isArray(d[0]))for(var T=0;T<d.length;T++)p.push(d[T]);else p.push(d);return p}function h(p){for(var d=o([],p),T=0;T<d.length;T++)for(var l=d[T],_=0;_<l.length;_++){var w=l[_];if(typeof w=="string")if(t[w]!==void 0)d[T][_]=t[w];else throw new Error(["*modeBarButtons* configuration options","invalid button name"].join(" "))}return d}}}),o2=Le({"src/components/modebar/index.js"(Z,H){"use strict";H.exports={moduleType:"component",name:"modebar",layoutAttributes:a2(),supplyLayoutDefaults:VE(),manage:HE()}}}),s2=Le({"src/plots/cartesian/scale_zoom.js"(Z,H){"use strict";var g=eh().FROM_BL;H.exports=function(A,S,e){e===void 0&&(e=g[A.constraintoward||"center"]);var t=[A.r2l(A.range[0]),A.r2l(A.range[1])],r=t[0]+(t[1]-t[0])*e;A.range=A._input.range=[A.l2r(r+(t[0]-r)*S),A.l2r(r+(t[1]-r)*S)],A.setScale()}}}),jm=Le({"src/plots/cartesian/constraints.js"(Z){"use strict";var H=ni(),g=cv(),x=Kc().id2name,A=Sh(),S=s2(),e=Rv(),t=$n().ALMOST_EQUAL,r=eh().FROM_BL;Z.handleDefaults=function(p,d,T){var l=T.axIds,_=T.axHasImage,w=d._axisConstraintGroups=[],M=d._axisMatchGroups=[],E,m,b,v,u,y,f,P;for(E=0;E<l.length;E++)v=x(l[E]),u=p[v],y=d[v],o(u,y,{axIds:l,layoutOut:d,hasImage:_[v]});function L(Q,le){for(E=0;E<Q.length;E++){m=Q[E];for(b in m)d[x(b)][le]=m}}for(L(M,"_matchGroup"),E=0;E<w.length;E++){m=w[E];for(b in m)if(y=d[x(b)],y.fixedrange){for(var z in m){var F=x(z);(p[F]||{}).fixedrange===!1&&H.warn("fixedrange was specified as false for axis "+F+" but was overridden because another axis in its constraint group has fixedrange true"),d[F].fixedrange=!0}break}}for(E=0;E<w.length;){m=w[E];for(b in m){y=d[x(b)],y._matchGroup&&Object.keys(y._matchGroup).length===Object.keys(m).length&&(w.splice(E,1),E--);break}E++}L(w,"_constraintGroup");var O=["constrain","range","autorange","rangemode","rangebreaks","categoryorder","categoryarray"],B=!1,I=!1;function N(){P=y[f],f==="rangebreaks"&&(I=y._hasDayOfWeekBreaks)}for(E=0;E<M.length;E++){m=M[E];for(var U=0;U<O.length;U++){f=O[U],P=null;var W;for(b in m)if(v=x(b),u=p[v],y=d[v],f in y){if(!y.matches&&(W=y,f in u)){N();break}P===null&&f in u&&N()}if(f==="range"&&P&&u.range&&u.range.length===2&&u.range[0]!==null&&u.range[1]!==null&&(B=!0),f==="autorange"&&P===null&&B&&(P=!1),P===null&&f in W&&(P=W[f]),P!==null)for(b in m)y=d[x(b)],y[f]=f==="range"?P.slice():P,f==="rangebreaks"&&(y._hasDayOfWeekBreaks=I,e(y,d))}}};function o(p,d,T){var l=T.axIds,_=T.layoutOut,w=T.hasImage,M=_._axisConstraintGroups,E=_._axisMatchGroups,m=d._id,b=m.charAt(0),v=((_._splomAxes||{})[b]||{})[m]||{},u=d._id,y=u.charAt(0)==="x";d._matchGroup=null,d._constraintGroup=null;function f(G,J){return H.coerce(p,d,A,G,J)}f("constrain",w?"domain":"range"),H.coerce(p,d,{constraintoward:{valType:"enumerated",values:y?["left","center","right"]:["bottom","middle","top"],dflt:y?"center":"middle"}},"constraintoward");var P=d.type,L,z,F=[];for(L=0;L<l.length;L++)if(z=l[L],z!==u){var O=_[x(z)];O.type===P&&F.push(z)}var B=n(M,u);if(B){var I=[];for(L=0;L<F.length;L++)z=F[L],B[z]||I.push(z);F=I}var N=F.length,U,W;N&&(p.matches||v.matches)&&(U=H.coerce(p,d,{matches:{valType:"enumerated",values:F,dflt:F.indexOf(v.matches)!==-1?v.matches:void 0}},"matches"));var Q=w&&!y?d.anchor:void 0;if(N&&!U&&(p.scaleanchor||Q)&&(W=H.coerce(p,d,{scaleanchor:{valType:"enumerated",values:F.concat([!1])}},"scaleanchor",Q)),U){d._matchGroup=a(E,u,U,1);var le=_[x(U)],se=i(_,d)/i(_,le);y!==(U.charAt(0)==="x")&&(se=(y?"x":"y")+se),a(M,u,U,se)}else p.matches&&l.indexOf(p.matches)!==-1&&H.warn("ignored "+d._name+'.matches: "'+p.matches+'" to avoid an infinite loop');if(W){var fe=f("scaleratio");fe||(fe=d.scaleratio=1),a(M,u,W,fe)}else p.scaleanchor&&l.indexOf(p.scaleanchor)!==-1&&H.warn("ignored "+d._name+'.scaleanchor: "'+p.scaleanchor+'" to avoid either an infinite loop and possibly inconsistent scaleratios, or because this axis declares a *matches* constraint.')}function i(p,d){var T=d.domain;return T||(T=p[x(d.overlaying)].domain),T[1]-T[0]}function n(p,d){for(var T=0;T<p.length;T++)if(p[T][d])return p[T];return null}function a(p,d,T,l){var _,w,M,E,m,b=n(p,d);b===null?(b={},b[d]=1,m=p.length,p.push(b)):m=p.indexOf(b);var v=Object.keys(b);for(_=0;_<p.length;_++)if(M=p[_],_!==m&&M[T]){var u=M[T];for(w=0;w<v.length;w++)E=v[w],M[E]=s(u,s(l,b[E]));p.splice(m,1);return}if(l!==1)for(w=0;w<v.length;w++){var y=v[w];b[y]=s(l,b[y])}b[T]=1}function s(p,d){var T="",l="",_,w;typeof p=="string"&&(T=p.match(/^[xy]*/)[0],_=T.length,p=+p.substr(_)),typeof d=="string"&&(l=d.match(/^[xy]*/)[0],w=l.length,d=+d.substr(w));var M=p*d;return!_&&!w?M:!_||!w||T.charAt(0)===l.charAt(0)?T+l+p*d:_===w?M:(_>w?T.substr(w):l.substr(_))+M}function c(p,d){for(var T=d._size,l=T.h/T.w,_={},w=Object.keys(p),M=0;M<w.length;M++){var E=w[M],m=p[E];if(typeof m=="string"){var b=m.match(/^[xy]*/)[0],v=b.length;m=+m.substr(v);for(var u=b.charAt(0)==="y"?l:1/l,y=0;y<v;y++)m*=u}_[E]=m}return _}Z.enforce=function(d){var T=d._fullLayout,l=T._axisConstraintGroups||[],_,w,M,E,m,b,v,u;for(_=0;_<l.length;_++){M=c(l[_],T);var y=Object.keys(M),f=1/0,P=0,L=1/0,z={},F={},O=!1;for(w=0;w<y.length;w++)E=y[w],F[E]=m=T[x(E)],m._inputDomain?m.domain=m._inputDomain.slice():m._inputDomain=m.domain.slice(),m._inputRange||(m._inputRange=m.range.slice()),m.setScale(),z[E]=b=Math.abs(m._m)/M[E],f=Math.min(f,b),(m.constrain==="domain"||!m._constraintShrinkable)&&(L=Math.min(L,b)),delete m._constraintShrinkable,P=Math.max(P,b),m.constrain==="domain"&&(O=!0);if(!(f>t*P&&!O)){for(w=0;w<y.length;w++)if(E=y[w],b=z[E],m=F[E],v=m.constrain,b!==L||v==="domain")if(u=b/L,v==="range")S(m,u);else{var B=m._inputDomain,I=(m.domain[1]-m.domain[0])/(B[1]-B[0]),N=(m.r2l(m.range[1])-m.r2l(m.range[0]))/(m.r2l(m._inputRange[1])-m.r2l(m._inputRange[0]));if(u/=I,u*N<1){m.domain=m._input.domain=B.slice(),S(m,u);continue}if(N<1&&(m.range=m._input.range=m._inputRange.slice(),u*=N),m.autorange){var U=m.r2l(m.range[0]),W=m.r2l(m.range[1]),Q=(U+W)/2,le=Q,se=Q,fe=Math.abs(W-Q),G=Q-fe*u*1.0001,J=Q+fe*u*1.0001,$=g.makePadFn(T,m,0),X=g.makePadFn(T,m,1);h(m,u);var re=Math.abs(m._m),ae=g.concatExtremes(d,m),j=ae.min,ee=ae.max,ne,ce;for(ce=0;ce<j.length;ce++)ne=j[ce].val-$(j[ce])/re,ne>G&&ne<le&&(le=ne);for(ce=0;ce<ee.length;ce++)ne=ee[ce].val+X(ee[ce])/re,ne<J&&ne>se&&(se=ne);var _e=(se-le)/(2*fe);u/=_e,le=m.l2r(le),se=m.l2r(se),m.range=m._input.range=U<W?[le,se]:[se,le]}h(m,u)}}}},Z.getAxisGroup=function(d,T){for(var l=d._axisMatchGroups,_=0;_<l.length;_++){var w=l[_];if(w[T])return"g"+_}return T},Z.clean=function(d,T){if(T._inputDomain){for(var l=!1,_=T._id,w=d._fullLayout._axisConstraintGroups,M=0;M<w.length;M++)if(w[M][_]){l=!0;break}(!l||T.constrain!=="domain")&&(T._input.domain=T.domain=T._inputDomain,delete T._inputDomain)}};function h(p,d){var T=p._inputDomain,l=r[p.constraintoward],_=T[0]+(T[1]-T[0])*l;p.domain=p._input.domain=[_+(T[0]-_)/d,_+(T[1]-_)/d],p.setScale()}}}),cy=Le({"src/plot_api/subroutines.js"(Z){"use strict";var H=Ji(),g=so(),x=Ku(),A=ni(),S=$l(),e=ly(),t=$a(),r=rs(),o=Um(),i=o2(),n=Zo(),a=eh(),s=jm(),c=s.enforce,h=s.clean,p=cv().doAutoRange,d="start",T="middle",l="end",_=ch().zindexSeparator;Z.layoutStyles=function(B){return A.syncOrAsync([x.doAutoMargin,M],B)};function w(B,I,N){for(var U=0;U<N.length;U++){var W=N[U][0],Q=N[U][1];if(!(W[0]>=B[1]||W[1]<=B[0])&&Q[0]<I[1]&&Q[1]>I[0])return!0}return!1}function M(B){var I=B._fullLayout,N=I._size,U=N.p,W=n.list(B,"",!0),Q,le,se,fe,G,J;if(I._paperdiv.style({width:B._context.responsive&&I.autosize&&!B._context._hasZeroWidth&&!B.layout.width?"100%":I.width+"px",height:B._context.responsive&&I.autosize&&!B._context._hasZeroHeight&&!B.layout.height?"100%":I.height+"px"}).selectAll(".main-svg").call(r.setSize,I.width,I.height),B._context.setBackground(B,I.paper_bgcolor),Z.drawMainTitle(B),i.manage(B),!I._has("cartesian"))return x.previousPromises(B);function $(Ne,Se,Ve){var Ee=Ne._lw/2;if(Ne._id.charAt(0)==="x"){if(Se){if(Ve==="top")return Se._offset-U-Ee}else return N.t+N.h*(1-(Ne.position||0))+Ee%1;return Se._offset+Se._length+U+Ee}if(Se){if(Ve==="right")return Se._offset+Se._length+U+Ee}else return N.l+N.w*(Ne.position||0)+Ee%1;return Se._offset-U-Ee}for(Q=0;Q<W.length;Q++){fe=W[Q];var X=fe._anchorAxis;fe._linepositions={},fe._lw=r.crispRound(B,fe.linewidth,1),fe._mainLinePosition=$(fe,X,fe.side),fe._mainMirrorPosition=fe.mirror&&X?$(fe,X,a.OPPOSITE_SIDE[fe.side]):null}var re=[],ae=[],j=[],ee=t.opacity(I.paper_bgcolor)===1&&t.opacity(I.plot_bgcolor)===1&&I.paper_bgcolor===I.plot_bgcolor;for(le in I._plots)if(se=I._plots[le],se.mainplot)se.bg&&se.bg.remove(),se.bg=void 0;else{var ne=se.xaxis.domain,ce=se.yaxis.domain,_e=se.plotgroup;if(w(ne,ce,j)&&le.indexOf(_)===-1){var we=_e.node(),Oe=se.bg=A.ensureSingle(_e,"rect","bg");we.insertBefore(Oe.node(),we.childNodes[0]),ae.push(le)}else _e.select("rect.bg").remove(),j.push([ne,ce]),ee||(re.push(le),ae.push(le))}var Ie=I._bgLayer.selectAll(".bg").data(re);for(Ie.enter().append("rect").classed("bg",!0),Ie.exit().remove(),Ie.each(function(Ne){I._plots[Ne].bg=H.select(this)}),Q=0;Q<ae.length;Q++)se=I._plots[ae[Q]],G=se.xaxis,J=se.yaxis,se.bg&&G._offset!==void 0&&J._offset!==void 0&&se.bg.call(r.setRect,G._offset-U,J._offset-U,G._length+2*U,J._length+2*U).call(t.fill,I.plot_bgcolor).style("stroke-width",0);if(!I._hasOnlyLargeSploms)for(le in I._plots){se=I._plots[le],G=se.xaxis,J=se.yaxis;var Xe=se.clipId="clip"+I._uid+le+"plot",tt=A.ensureSingleById(I._clips,"clipPath",Xe,function(Ne){Ne.classed("plotclip",!0).append("rect")});se.clipRect=tt.select("rect").attr({width:G._length,height:J._length}),r.setTranslate(se.plot,G._offset,J._offset);var rt,Je;se._hasClipOnAxisFalse?(rt=null,Je=Xe):(rt=Xe,Je=null),r.setClipUrl(se.plot,rt,B),se.layerClipId=Je}var ot,Me,pe,ue,ze,Qe,it,$e,kt,Mt,Bt,jt,cr;function nr(Ne){return"M"+ot+","+Ne+"H"+Me}function Lr(Ne){return"M"+G._offset+","+Ne+"h"+G._length}function mr(Ne){return"M"+Ne+","+$e+"V"+it}function xr(Ne){return J._shift!==void 0&&(Ne+=J._shift),"M"+Ne+","+J._offset+"v"+J._length}function mt(Ne,Se,Ve){if(!Ne.showline||le!==Ne._mainSubplot)return"";if(!Ne._anchorAxis)return Ve(Ne._mainLinePosition);var Ee=Se(Ne._mainLinePosition);return Ne.mirror&&(Ee+=Se(Ne._mainMirrorPosition)),Ee}for(le in I._plots){se=I._plots[le],G=se.xaxis,J=se.yaxis;var Fe="M0,0";E(G,le)&&(ze=b(G,"left",J,W),ot=G._offset-(ze?U+ze:0),Qe=b(G,"right",J,W),Me=G._offset+G._length+(Qe?U+Qe:0),pe=$(G,J,"bottom"),ue=$(G,J,"top"),cr=!G._anchorAxis||le!==G._mainSubplot,cr&&(G.mirror==="allticks"||G.mirror==="all")&&(G._linepositions[le]=[pe,ue]),Fe=mt(G,nr,Lr),cr&&G.showline&&(G.mirror==="all"||G.mirror==="allticks")&&(Fe+=nr(pe)+nr(ue)),se.xlines.style("stroke-width",G._lw+"px").call(t.stroke,G.showline?G.linecolor:"rgba(0,0,0,0)")),se.xlines.attr("d",Fe);var Ze="M0,0";E(J,le)&&(Bt=b(J,"bottom",G,W),it=J._offset+J._length+(Bt?U:0),jt=b(J,"top",G,W),$e=J._offset-(jt?U:0),kt=$(J,G,"left"),Mt=$(J,G,"right"),cr=!J._anchorAxis||le!==J._mainSubplot,cr&&(J.mirror==="allticks"||J.mirror==="all")&&(J._linepositions[le]=[kt,Mt]),Ze=mt(J,mr,xr),cr&&J.showline&&(J.mirror==="all"||J.mirror==="allticks")&&(Ze+=mr(kt)+mr(Mt)),se.ylines.style("stroke-width",J._lw+"px").call(t.stroke,J.showline?J.linecolor:"rgba(0,0,0,0)")),se.ylines.attr("d",Ze)}return n.makeClipPaths(B),x.previousPromises(B)}function E(B,I){return(B.ticks||B.showline)&&(I===B._mainSubplot||B.mirror==="all"||B.mirror==="allticks")}function m(B,I,N){if(!N.showline||!N._lw)return!1;if(N.mirror==="all"||N.mirror==="allticks")return!0;var U=N._anchorAxis;if(!U)return!1;var W=a.FROM_BL[I];return N.side===I?U.domain[W]===B.domain[W]:N.mirror&&U.domain[1-W]===B.domain[1-W]}function b(B,I,N,U){if(m(B,I,N))return N._lw;for(var W=0;W<U.length;W++){var Q=U[W];if(Q._mainAxis===N._mainAxis&&m(B,I,Q))return Q._lw}return 0}Z.drawMainTitle=function(B){var I=B._fullLayout.title,N=B._fullLayout,U=F(N),W=O(N),Q=L(N,W),le=P(N,U);if(o.draw(B,"gtitle",{propContainer:N,propName:"title.text",subtitlePropName:"title.subtitle.text",placeholder:N._dfltTitle.plot,subtitlePlaceholder:N._dfltTitle.subtitle,attributes:{x:le,y:Q,"text-anchor":U,dy:W}}),I.text&&I.automargin){var se=H.selectAll(".gtitle"),fe=r.bBox(H.selectAll(".g-gtitle").node()).height,G=y(B,I,fe);if(G>0){f(B,Q,G,fe),se.attr({x:le,y:Q,"text-anchor":U,dy:z(I.yanchor)}).call(S.positionText,le,Q);var J=(I.text.match(S.BR_TAG_ALL)||[]).length;if(J){var $=a.LINE_SPACING*J+a.MID_SHIFT;I.y===0&&($=-$),se.selectAll(".line").each(function(){var ee=+this.getAttribute("dy").slice(0,-2)-$+"em";this.setAttribute("dy",ee)})}var X=H.selectAll(".gtitle-subtitle");if(X.node()){var re=se.node().getBBox(),ae=re.y+re.height,j=ae+o.SUBTITLE_PADDING_EM*I.subtitle.font.size;X.attr({x:le,y:j,"text-anchor":U,dy:z(I.yanchor)}).call(S.positionText,le,j)}}}};function v(B,I,N,U,W){var Q=I.yref==="paper"?B._fullLayout._size.h:B._fullLayout.height,le=A.isTopAnchor(I)?U:U-W,se=N==="b"?Q-le:le;return A.isTopAnchor(I)&&N==="t"||A.isBottomAnchor(I)&&N==="b"?!1:se<W}function u(B,I,N,U,W){var Q=0;return N==="middle"&&(Q+=W/2),B==="t"?(N==="top"&&(Q+=W),Q+=U-I*U):(N==="bottom"&&(Q+=W),Q+=I*U),Q}function y(B,I,N){var U=I.y,W=I.yanchor,Q=U>.5?"t":"b",le=B._fullLayout.margin[Q],se=0;return I.yref==="paper"?se=N+I.pad.t+I.pad.b:I.yref==="container"&&(se=u(Q,U,W,B._fullLayout.height,N)+I.pad.t+I.pad.b),se>le?se:0}function f(B,I,N,U){var W="title.automargin",Q=B._fullLayout.title,le=Q.y>.5?"t":"b",se={x:Q.x,y:Q.y,t:0,b:0},fe={};Q.yref==="paper"&&v(B,Q,le,I,U)?se[le]=N:Q.yref==="container"&&(fe[le]=N,B._fullLayout._reservedMargin[W]=fe),x.allowAutoMargin(B,W),x.autoMargin(B,W,se)}function P(B,I){var N=B.title,U=B._size,W=0;switch(I===d?W=N.pad.l:I===l&&(W=-N.pad.r),N.xref){case"paper":return U.l+U.w*N.x+W;case"container":default:return B.width*N.x+W}}function L(B,I){var N=B.title,U=B._size,W=0;if(I==="0em"||!I?W=-N.pad.b:I===a.CAP_SHIFT+"em"&&(W=N.pad.t),N.y==="auto")return U.t/2;switch(N.yref){case"paper":return U.t+U.h-U.h*N.y+W;case"container":default:return B.height-B.height*N.y+W}}function z(B){return B==="top"?a.CAP_SHIFT+.3+"em":B==="bottom"?"-0.3em":a.MID_SHIFT+"em"}function F(B){var I=B.title,N=T;return A.isRightAnchor(I)?N=l:A.isLeftAnchor(I)&&(N=d),N}function O(B){var I=B.title,N="0em";return A.isTopAnchor(I)?N=a.CAP_SHIFT+"em":A.isMiddleAnchor(I)&&(N=a.MID_SHIFT+"em"),N}Z.doTraceStyle=function(B){var I=B.calcdata,N=[],U;for(U=0;U<I.length;U++){var W=I[U],Q=W[0]||{},le=Q.trace||{},se=le._module||{},fe=se.arraysToCalcdata;fe&&fe(W,le);var G=se.editStyle;G&&N.push({fn:G,cd0:Q})}if(N.length){for(U=0;U<N.length;U++){var J=N[U];J.fn(B,J.cd0)}e(B),Z.redrawReglTraces(B)}return x.style(B),g.getComponentMethod("legend","draw")(B),x.previousPromises(B)},Z.doColorBars=function(B){return g.getComponentMethod("colorbar","draw")(B),x.previousPromises(B)},Z.layoutReplot=function(B){var I=B.layout;return B.layout=void 0,g.call("_doPlot",B,"",I)},Z.doLegend=function(B){return g.getComponentMethod("legend","draw")(B),x.previousPromises(B)},Z.doTicksRelayout=function(B){return n.draw(B,"redraw"),B._fullLayout._hasOnlyLargeSploms&&(g.subplotsRegistry.splom.updateGrid(B),e(B),Z.redrawReglTraces(B)),Z.drawMainTitle(B),x.previousPromises(B)},Z.doModeBar=function(B){var I=B._fullLayout;i.manage(B);for(var N=0;N<I._basePlotModules.length;N++){var U=I._basePlotModules[N].updateFx;U&&U(B)}return x.previousPromises(B)},Z.doCamera=function(B){for(var I=B._fullLayout,N=I._subplots.gl3d,U=0;U<N.length;U++){var W=I[N[U]],Q=W._scene;Q.setViewport(W)}},Z.drawData=function(B){var I=B._fullLayout;e(B);for(var N=I._basePlotModules,U=0;U<N.length;U++)N[U].plot(B);return Z.redrawReglTraces(B),x.style(B),g.getComponentMethod("selections","draw")(B),g.getComponentMethod("shapes","draw")(B),g.getComponentMethod("annotations","draw")(B),g.getComponentMethod("images","draw")(B),I._replotting=!1,x.previousPromises(B)},Z.redrawReglTraces=function(B){var I=B._fullLayout;if(I._has("regl")){var N=B._fullData,U=[],W=[],Q,le;for(I._hasOnlyLargeSploms&&I._splomGrid.draw(),Q=0;Q<N.length;Q++){var se=N[Q];se.visible===!0&&se._length!==0&&(se.type==="splom"?I._splomScenes[se.uid].draw():se.type==="scattergl"?A.pushUnique(U,se.xaxis+se.yaxis):se.type==="scatterpolargl"&&A.pushUnique(W,se.subplot))}for(Q=0;Q<U.length;Q++)le=I._plots[U[Q]],le._scene&&le._scene.draw();for(Q=0;Q<W.length;Q++)le=I[W[Q]]._subplot,le._scene&&le._scene.draw()}},Z.doAutoRangeAndConstraints=function(B){for(var I=n.list(B,"",!0),N,U={},W=0;W<I.length;W++)if(N=I[W],!U[N._id]){U[N._id]=1,h(B,N),p(B,N);var Q=N._matchGroup;if(Q)for(var le in Q){var se=n.getFromId(B,le);p(B,se,N.range),U[le]=1}}c(B)},Z.finalDraw=function(B){g.getComponentMethod("rangeslider","draw")(B),g.getComponentMethod("rangeselector","draw")(B)},Z.drawMarginPushers=function(B){g.getComponentMethod("legend","draw")(B),g.getComponentMethod("rangeselector","draw")(B),g.getComponentMethod("sliders","draw")(B),g.getComponentMethod("updatemenus","draw")(B),g.getComponentMethod("colorbar","draw")(B)}}}),l2=Le({"src/components/selections/draw.js"(Z,H){"use strict";var g=Gp().readPaths,x=E_(),A=jp().clearOutlineControllers,S=$a(),e=rs(),t=wl().arrayEditor,r=Wp(),o=r.getPathString;H.exports={draw:i,drawOne:a,activateLastSelection:h};function i(d){var T=d._fullLayout;A(d),T._selectionLayer.selectAll("path").remove();for(var l in T._plots){var _=T._plots[l].selectionLayer;_&&_.selectAll("path").remove()}for(var w=0;w<T.selections.length;w++)a(d,w)}function n(d){return d._context.editSelection}function a(d,T){d._fullLayout._paperdiv.selectAll('.selectionlayer [data-index="'+T+'"]').remove();var l=r.makeSelectionsOptionsAndPlotinfo(d,T),_=l.options,w=l.plotinfo;if(!_._input)return;M(d._fullLayout._selectionLayer);function M(E){var m=o(d,_),b={"data-index":T,"fill-rule":"evenodd",d:m},v=_.opacity,u="rgba(0,0,0,0)",y=_.line.color||S.contrast(d._fullLayout.plot_bgcolor),f=_.line.width,P=_.line.dash;f||(f=5,P="solid");var L=n(d)&&d._fullLayout._activeSelectionIndex===T;L&&(u=d._fullLayout.activeselection.fillcolor,v=d._fullLayout.activeselection.opacity);for(var z=[],F=1;F>=0;F--){var O=E.append("path").attr(b).style("opacity",F?.1:v).call(S.stroke,y).call(S.fill,u).call(e.dashLine,F?"solid":P,F?4+f:f);if(s(O,d,_),L){var B=t(d.layout,"selections",_);O.style({cursor:"move"});var I={element:O.node(),plotinfo:w,gd:d,editHelpers:B,isActiveSelection:!0},N=g(m,d);x(N,O,I)}else O.style("pointer-events",F?"all":"none");z[F]=O}var U=z[0],W=z[1];W.node().addEventListener("click",function(){return c(d,U)})}}function s(d,T,l){var _=l.xref+l.yref;e.setClipUrl(d,"clip"+T._fullLayout._uid+_,T)}function c(d,T){if(n(d)){var l=T.node(),_=+l.getAttribute("data-index");if(_>=0){if(_===d._fullLayout._activeSelectionIndex){p(d);return}d._fullLayout._activeSelectionIndex=_,d._fullLayout._deactivateSelection=p,i(d)}}}function h(d){if(n(d)){var T=d._fullLayout.selections.length-1;d._fullLayout._activeSelectionIndex=T,d._fullLayout._deactivateSelection=p,i(d)}}function p(d){if(n(d)){var T=d._fullLayout._activeSelectionIndex;T>=0&&(A(d),delete d._fullLayout._activeSelectionIndex,i(d))}}}}),GE=Le({"node_modules/polybooljs/lib/build-log.js"(Z,H){function g(){var x,A=0,S=!1;function e(t,r){return x.list.push({type:t,data:r?JSON.parse(JSON.stringify(r)):void 0}),x}return x={list:[],segmentId:function(){return A++},checkIntersection:function(t,r){return e("check",{seg1:t,seg2:r})},segmentChop:function(t,r){return e("div_seg",{seg:t,pt:r}),e("chop",{seg:t,pt:r})},statusRemove:function(t){return e("pop_seg",{seg:t})},segmentUpdate:function(t){return e("seg_update",{seg:t})},segmentNew:function(t,r){return e("new_seg",{seg:t,primary:r})},segmentRemove:function(t){return e("rem_seg",{seg:t})},tempStatus:function(t,r,o){return e("temp_status",{seg:t,above:r,below:o})},rewind:function(t){return e("rewind",{seg:t})},status:function(t,r,o){return e("status",{seg:t,above:r,below:o})},vert:function(t){return t===S?x:(S=t,e("vert",{x:t}))},log:function(t){return typeof t!="string"&&(t=JSON.stringify(t,!1,"  ")),e("log",{txt:t})},reset:function(){return e("reset")},selected:function(t){return e("selected",{segs:t})},chainStart:function(t){return e("chain_start",{seg:t})},chainRemoveHead:function(t,r){return e("chain_rem_head",{index:t,pt:r})},chainRemoveTail:function(t,r){return e("chain_rem_tail",{index:t,pt:r})},chainNew:function(t,r){return e("chain_new",{pt1:t,pt2:r})},chainMatch:function(t){return e("chain_match",{index:t})},chainClose:function(t){return e("chain_close",{index:t})},chainAddHead:function(t,r){return e("chain_add_head",{index:t,pt:r})},chainAddTail:function(t,r){return e("chain_add_tail",{index:t,pt:r})},chainConnect:function(t,r){return e("chain_con",{index1:t,index2:r})},chainReverse:function(t){return e("chain_rev",{index:t})},chainJoin:function(t,r){return e("chain_join",{index1:t,index2:r})},done:function(){return e("done")}},x}H.exports=g}}),WE=Le({"node_modules/polybooljs/lib/epsilon.js"(Z,H){function g(x){typeof x!="number"&&(x=1e-10);var A={epsilon:function(S){return typeof S=="number"&&(x=S),x},pointAboveOrOnLine:function(S,e,t){var r=e[0],o=e[1],i=t[0],n=t[1],a=S[0],s=S[1];return(i-r)*(s-o)-(n-o)*(a-r)>=-x},pointBetween:function(S,e,t){var r=S[1]-e[1],o=t[0]-e[0],i=S[0]-e[0],n=t[1]-e[1],a=i*o+r*n;if(a<x)return!1;var s=o*o+n*n;return!(a-s>-x)},pointsSameX:function(S,e){return Math.abs(S[0]-e[0])<x},pointsSameY:function(S,e){return Math.abs(S[1]-e[1])<x},pointsSame:function(S,e){return A.pointsSameX(S,e)&&A.pointsSameY(S,e)},pointsCompare:function(S,e){return A.pointsSameX(S,e)?A.pointsSameY(S,e)?0:S[1]<e[1]?-1:1:S[0]<e[0]?-1:1},pointsCollinear:function(S,e,t){var r=S[0]-e[0],o=S[1]-e[1],i=e[0]-t[0],n=e[1]-t[1];return Math.abs(r*n-i*o)<x},linesIntersect:function(S,e,t,r){var o=e[0]-S[0],i=e[1]-S[1],n=r[0]-t[0],a=r[1]-t[1],s=o*a-i*n;if(Math.abs(s)<x)return!1;var c=S[0]-t[0],h=S[1]-t[1],p=(n*h-a*c)/s,d=(o*h-i*c)/s,T={alongA:0,alongB:0,pt:[S[0]+p*o,S[1]+p*i]};return p<=-x?T.alongA=-2:p<x?T.alongA=-1:p-1<=-x?T.alongA=0:p-1<x?T.alongA=1:T.alongA=2,d<=-x?T.alongB=-2:d<x?T.alongB=-1:d-1<=-x?T.alongB=0:d-1<x?T.alongB=1:T.alongB=2,T},pointInsideRegion:function(S,e){for(var t=S[0],r=S[1],o=e[e.length-1][0],i=e[e.length-1][1],n=!1,a=0;a<e.length;a++){var s=e[a][0],c=e[a][1];c-r>x!=i-r>x&&(o-s)*(r-c)/(i-c)+s-t>x&&(n=!n),o=s,i=c}return n}};return A}H.exports=g}}),XE=Le({"node_modules/polybooljs/lib/linked-list.js"(Z,H){var g={create:function(){var x={root:{root:!0,next:null},exists:function(A){return!(A===null||A===x.root)},isEmpty:function(){return x.root.next===null},getHead:function(){return x.root.next},insertBefore:function(A,S){for(var e=x.root,t=x.root.next;t!==null;){if(S(t)){A.prev=t.prev,A.next=t,t.prev.next=A,t.prev=A;return}e=t,t=t.next}e.next=A,A.prev=e,A.next=null},findTransition:function(A){for(var S=x.root,e=x.root.next;e!==null&&!A(e);)S=e,e=e.next;return{before:S===x.root?null:S,after:e,insert:function(t){return t.prev=S,t.next=e,S.next=t,e!==null&&(e.prev=t),t}}}};return x},node:function(x){return x.prev=null,x.next=null,x.remove=function(){x.prev.next=x.next,x.next&&(x.next.prev=x.prev),x.prev=null,x.next=null},x}};H.exports=g}}),ZE=Le({"node_modules/polybooljs/lib/intersecter.js"(Z,H){var g=XE();function x(A,S,e){function t(T,l){return{id:e?e.segmentId():-1,start:T,end:l,myFill:{above:null,below:null},otherFill:null}}function r(T,l,_){return{id:e?e.segmentId():-1,start:T,end:l,myFill:{above:_.myFill.above,below:_.myFill.below},otherFill:null}}var o=g.create();function i(T,l,_,w,M,E){var m=S.pointsCompare(l,M);return m!==0?m:S.pointsSame(_,E)?0:T!==w?T?1:-1:S.pointAboveOrOnLine(_,w?M:E,w?E:M)?1:-1}function n(T,l){o.insertBefore(T,function(_){var w=i(T.isStart,T.pt,l,_.isStart,_.pt,_.other.pt);return w<0})}function a(T,l){var _=g.node({isStart:!0,pt:T.start,seg:T,primary:l,other:null,status:null});return n(_,T.end),_}function s(T,l,_){var w=g.node({isStart:!1,pt:l.end,seg:l,primary:_,other:T,status:null});T.other=w,n(w,T.pt)}function c(T,l){var _=a(T,l);return s(_,T,l),_}function h(T,l){e&&e.segmentChop(T.seg,l),T.other.remove(),T.seg.end=l,T.other.pt=l,n(T.other,T.pt)}function p(T,l){var _=r(l,T.seg.end,T.seg);return h(T,l),c(_,T.primary)}function d(T,l){var _=g.create();function w(B,I){var N=B.seg.start,U=B.seg.end,W=I.seg.start,Q=I.seg.end;return S.pointsCollinear(N,W,Q)?S.pointsCollinear(U,W,Q)||S.pointAboveOrOnLine(U,W,Q)?1:-1:S.pointAboveOrOnLine(N,W,Q)?1:-1}function M(B){return _.findTransition(function(I){var N=w(B,I.ev);return N>0})}function E(B,I){var N=B.seg,U=I.seg,W=N.start,Q=N.end,le=U.start,se=U.end;e&&e.checkIntersection(N,U);var fe=S.linesIntersect(W,Q,le,se);if(fe===!1){if(!S.pointsCollinear(W,Q,le)||S.pointsSame(W,se)||S.pointsSame(Q,le))return!1;var G=S.pointsSame(W,le),J=S.pointsSame(Q,se);if(G&&J)return I;var $=!G&&S.pointBetween(W,le,se),X=!J&&S.pointBetween(Q,le,se);if(G)return X?p(I,Q):p(B,se),I;$&&(J||(X?p(I,Q):p(B,se)),p(I,W))}else fe.alongA===0&&(fe.alongB===-1?p(B,le):fe.alongB===0?p(B,fe.pt):fe.alongB===1&&p(B,se)),fe.alongB===0&&(fe.alongA===-1?p(I,W):fe.alongA===0?p(I,fe.pt):fe.alongA===1&&p(I,Q));return!1}for(var m=[];!o.isEmpty();){var b=o.getHead();if(e&&e.vert(b.pt[0]),b.isStart){let B=function(){if(y){var I=E(b,y);if(I)return I}return f?E(b,f):!1};var v=B;e&&e.segmentNew(b.seg,b.primary);var u=M(b),y=u.before?u.before.ev:null,f=u.after?u.after.ev:null;e&&e.tempStatus(b.seg,y?y.seg:!1,f?f.seg:!1);var P=B();if(P){if(A){var L;b.seg.myFill.below===null?L=!0:L=b.seg.myFill.above!==b.seg.myFill.below,L&&(P.seg.myFill.above=!P.seg.myFill.above)}else P.seg.otherFill=b.seg.myFill;e&&e.segmentUpdate(P.seg),b.other.remove(),b.remove()}if(o.getHead()!==b){e&&e.rewind(b.seg);continue}if(A){var L;b.seg.myFill.below===null?L=!0:L=b.seg.myFill.above!==b.seg.myFill.below,f?b.seg.myFill.below=f.seg.myFill.above:b.seg.myFill.below=T,L?b.seg.myFill.above=!b.seg.myFill.below:b.seg.myFill.above=b.seg.myFill.below}else if(b.seg.otherFill===null){var z;f?b.primary===f.primary?z=f.seg.otherFill.above:z=f.seg.myFill.above:z=b.primary?l:T,b.seg.otherFill={above:z,below:z}}e&&e.status(b.seg,y?y.seg:!1,f?f.seg:!1),b.other.status=u.insert(g.node({ev:b}))}else{var F=b.status;if(F===null)throw new Error("PolyBool: Zero-length segment detected; your epsilon is probably too small or too large");if(_.exists(F.prev)&&_.exists(F.next)&&E(F.prev.ev,F.next.ev),e&&e.statusRemove(F.ev.seg),F.remove(),!b.primary){var O=b.seg.myFill;b.seg.myFill=b.seg.otherFill,b.seg.otherFill=O}m.push(b.seg)}o.getHead().remove()}return e&&e.done(),m}return A?{addRegion:function(T){for(var l,_=T[T.length-1],w=0;w<T.length;w++){l=_,_=T[w];var M=S.pointsCompare(l,_);M!==0&&c(t(M<0?l:_,M<0?_:l),!0)}},calculate:function(T){return d(T,!1)}}:{calculate:function(T,l,_,w){return T.forEach(function(M){c(r(M.start,M.end,M),!0)}),_.forEach(function(M){c(r(M.start,M.end,M),!1)}),d(l,w)}}}H.exports=x}}),YE=Le({"node_modules/polybooljs/lib/segment-chainer.js"(Z,H){function g(x,A,S){var e=[],t=[];return x.forEach(function(r){var o=r.start,i=r.end;if(A.pointsSame(o,i)){console.warn("PolyBool: Warning: Zero-length segment detected; your epsilon is probably too small or too large");return}S&&S.chainStart(r);var n={index:0,matches_head:!1,matches_pt1:!1},a={index:0,matches_head:!1,matches_pt1:!1},s=n;function c(F,O,B){return s.index=F,s.matches_head=O,s.matches_pt1=B,s===n?(s=a,!1):(s=null,!0)}for(var h=0;h<e.length;h++){var p=e[h],d=p[0],T=p[1],l=p[p.length-1],_=p[p.length-2];if(A.pointsSame(d,o)){if(c(h,!0,!0))break}else if(A.pointsSame(d,i)){if(c(h,!0,!1))break}else if(A.pointsSame(l,o)){if(c(h,!1,!0))break}else if(A.pointsSame(l,i)&&c(h,!1,!1))break}if(s===n){e.push([o,i]),S&&S.chainNew(o,i);return}if(s===a){S&&S.chainMatch(n.index);var w=n.index,M=n.matches_pt1?i:o,E=n.matches_head,p=e[w],m=E?p[0]:p[p.length-1],b=E?p[1]:p[p.length-2],v=E?p[p.length-1]:p[0],u=E?p[p.length-2]:p[1];if(A.pointsCollinear(b,m,M)&&(E?(S&&S.chainRemoveHead(n.index,M),p.shift()):(S&&S.chainRemoveTail(n.index,M),p.pop()),m=b),A.pointsSame(v,M)){e.splice(w,1),A.pointsCollinear(u,v,m)&&(E?(S&&S.chainRemoveTail(n.index,m),p.pop()):(S&&S.chainRemoveHead(n.index,m),p.shift())),S&&S.chainClose(n.index),t.push(p);return}E?(S&&S.chainAddHead(n.index,M),p.unshift(M)):(S&&S.chainAddTail(n.index,M),p.push(M));return}function y(F){S&&S.chainReverse(F),e[F].reverse()}function f(F,O){var B=e[F],I=e[O],N=B[B.length-1],U=B[B.length-2],W=I[0],Q=I[1];A.pointsCollinear(U,N,W)&&(S&&S.chainRemoveTail(F,N),B.pop(),N=U),A.pointsCollinear(N,W,Q)&&(S&&S.chainRemoveHead(O,W),I.shift()),S&&S.chainJoin(F,O),e[F]=B.concat(I),e.splice(O,1)}var P=n.index,L=a.index;S&&S.chainConnect(P,L);var z=e[P].length<e[L].length;n.matches_head?a.matches_head?z?(y(P),f(P,L)):(y(L),f(L,P)):f(L,P):a.matches_head?f(P,L):z?(y(P),f(L,P)):(y(L),f(P,L))}),t}H.exports=g}}),KE=Le({"node_modules/polybooljs/lib/segment-selector.js"(Z,H){function g(A,S,e){var t=[];return A.forEach(function(r){var o=(r.myFill.above?8:0)+(r.myFill.below?4:0)+(r.otherFill&&r.otherFill.above?2:0)+(r.otherFill&&r.otherFill.below?1:0);S[o]!==0&&t.push({id:e?e.segmentId():-1,start:r.start,end:r.end,myFill:{above:S[o]===1,below:S[o]===2},otherFill:null})}),e&&e.selected(t),t}var x={union:function(A,S){return g(A,[0,2,1,0,2,2,0,0,1,0,1,0,0,0,0,0],S)},intersect:function(A,S){return g(A,[0,0,0,0,0,2,0,2,0,0,1,1,0,2,1,0],S)},difference:function(A,S){return g(A,[0,0,0,0,2,0,2,0,1,1,0,0,0,1,2,0],S)},differenceRev:function(A,S){return g(A,[0,2,1,0,0,0,1,1,0,2,0,2,0,0,0,0],S)},xor:function(A,S){return g(A,[0,2,1,0,2,0,0,1,1,0,0,2,0,1,2,0],S)}};H.exports=x}}),$E=Le({"node_modules/polybooljs/lib/geojson.js"(Z,H){var g={toPolygon:function(x,A){function S(r){if(r.length<=0)return x.segments({inverted:!1,regions:[]});function o(a){var s=a.slice(0,a.length-1);return x.segments({inverted:!1,regions:[s]})}for(var i=o(r[0]),n=1;n<r.length;n++)i=x.selectDifference(x.combine(i,o(r[n])));return i}if(A.type==="Polygon")return x.polygon(S(A.coordinates));if(A.type==="MultiPolygon"){for(var e=x.segments({inverted:!1,regions:[]}),t=0;t<A.coordinates.length;t++)e=x.selectUnion(x.combine(e,S(A.coordinates[t])));return x.polygon(e)}throw new Error("PolyBool: Cannot convert GeoJSON object to PolyBool polygon")},fromPolygon:function(x,A,S){S=x.polygon(x.segments(S));function e(p,d){return A.pointInsideRegion([(p[0][0]+p[1][0])*.5,(p[0][1]+p[1][1])*.5],d)}function t(p){return{region:p,children:[]}}var r=t(null);function o(p,d){for(var T=0;T<p.children.length;T++){var l=p.children[T];if(e(d,l.region)){o(l,d);return}}for(var _=t(d),T=0;T<p.children.length;T++){var l=p.children[T];e(l.region,d)&&(_.children.push(l),p.children.splice(T,1),T--)}p.children.push(_)}for(var i=0;i<S.regions.length;i++){var n=S.regions[i];n.length<3||o(r,n)}function a(p,d){for(var T=0,l=p[p.length-1][0],_=p[p.length-1][1],w=[],M=0;M<p.length;M++){var E=p[M][0],m=p[M][1];w.push([E,m]),T+=m*l-E*_,l=E,_=m}var b=T<0;return b!==d&&w.reverse(),w.push([w[0][0],w[0][1]]),w}var s=[];function c(p){var d=[a(p.region,!1)];s.push(d);for(var T=0;T<p.children.length;T++)d.push(h(p.children[T]))}function h(p){for(var d=0;d<p.children.length;d++)c(p.children[d]);return a(p.region,!0)}for(var i=0;i<r.children.length;i++)c(r.children[i]);return s.length<=0?{type:"Polygon",coordinates:[]}:s.length==1?{type:"Polygon",coordinates:s[0]}:{type:"MultiPolygon",coordinates:s}}};H.exports=g}}),JE=Le({"node_modules/polybooljs/index.js"(Z,H){var g=GE(),x=WE(),A=ZE(),S=YE(),e=KE(),t=$E(),r=!1,o=x(),i;i={buildLog:function(a){return a===!0?r=g():a===!1&&(r=!1),r===!1?!1:r.list},epsilon:function(a){return o.epsilon(a)},segments:function(a){var s=A(!0,o,r);return a.regions.forEach(s.addRegion),{segments:s.calculate(a.inverted),inverted:a.inverted}},combine:function(a,s){var c=A(!1,o,r);return{combined:c.calculate(a.segments,a.inverted,s.segments,s.inverted),inverted1:a.inverted,inverted2:s.inverted}},selectUnion:function(a){return{segments:e.union(a.combined,r),inverted:a.inverted1||a.inverted2}},selectIntersect:function(a){return{segments:e.intersect(a.combined,r),inverted:a.inverted1&&a.inverted2}},selectDifference:function(a){return{segments:e.difference(a.combined,r),inverted:a.inverted1&&!a.inverted2}},selectDifferenceRev:function(a){return{segments:e.differenceRev(a.combined,r),inverted:!a.inverted1&&a.inverted2}},selectXor:function(a){return{segments:e.xor(a.combined,r),inverted:a.inverted1!==a.inverted2}},polygon:function(a){return{regions:S(a.segments,o,r),inverted:a.inverted}},polygonFromGeoJSON:function(a){return t.toPolygon(i,a)},polygonToGeoJSON:function(a){return t.fromPolygon(i,o,a)},union:function(a,s){return n(a,s,i.selectUnion)},intersect:function(a,s){return n(a,s,i.selectIntersect)},difference:function(a,s){return n(a,s,i.selectDifference)},differenceRev:function(a,s){return n(a,s,i.selectDifferenceRev)},xor:function(a,s){return n(a,s,i.selectXor)}};function n(a,s,c){var h=i.segments(a),p=i.segments(s),d=i.combine(h,p),T=c(d);return i.polygon(T)}typeof window=="object"&&(window.PolyBool=i),H.exports=i}}),QE=Le({"node_modules/point-in-polygon/nested.js"(Z,H){H.exports=function(x,A,S,e){var t=x[0],r=x[1],o=!1;S===void 0&&(S=0),e===void 0&&(e=A.length);for(var i=e-S,n=0,a=i-1;n<i;a=n++){var s=A[n+S][0],c=A[n+S][1],h=A[a+S][0],p=A[a+S][1],d=c>r!=p>r&&t<(h-s)*(r-c)/(p-c)+s;d&&(o=!o)}return o}}}),fy=Le({"src/lib/polygon.js"(Z,H){"use strict";var g=v_().dot,x=$n().BADNUM,A=H.exports={};A.tester=function(e){var t=e.slice(),r=t[0][0],o=r,i=t[0][1],n=i,a;for((t[t.length-1][0]!==t[0][0]||t[t.length-1][1]!==t[0][1])&&t.push(t[0]),a=1;a<t.length;a++)r=Math.min(r,t[a][0]),o=Math.max(o,t[a][0]),i=Math.min(i,t[a][1]),n=Math.max(n,t[a][1]);var s=!1,c;t.length===5&&(t[0][0]===t[1][0]?t[2][0]===t[3][0]&&t[0][1]===t[3][1]&&t[1][1]===t[2][1]&&(s=!0,c=function(l){return l[0]===t[0][0]}):t[0][1]===t[1][1]&&t[2][1]===t[3][1]&&t[0][0]===t[3][0]&&t[1][0]===t[2][0]&&(s=!0,c=function(l){return l[1]===t[0][1]}));function h(l,_){var w=l[0],M=l[1];return!(w===x||w<r||w>o||M===x||M<i||M>n||_&&c(l))}function p(l,_){var w=l[0],M=l[1];if(w===x||w<r||w>o||M===x||M<i||M>n)return!1;var E=t.length,m=t[0][0],b=t[0][1],v=0,u,y,f,P,L;for(u=1;u<E;u++)if(y=m,f=b,m=t[u][0],b=t[u][1],P=Math.min(y,m),!(w<P||w>Math.max(y,m)||M>Math.max(f,b)))if(M<Math.min(f,b))w!==P&&v++;else{if(m===y?L=M:L=f+(w-y)*(b-f)/(m-y),M===L)return!(u===1&&_);M<=L&&w!==P&&v++}return v%2===1}var d=!0,T=t[0];for(a=1;a<t.length;a++)if(T[0]!==t[a][0]||T[1]!==t[a][1]){d=!1;break}return{xmin:r,xmax:o,ymin:i,ymax:n,pts:t,contains:s?h:p,isRect:s,degenerate:d}},A.isSegmentBent=function(e,t,r,o){var i=e[t],n=[e[r][0]-i[0],e[r][1]-i[1]],a=g(n,n),s=Math.sqrt(a),c=[-n[1]/s,n[0]/s],h,p,d;for(h=t+1;h<r;h++)if(p=[e[h][0]-i[0],e[h][1]-i[1]],d=g(p,n),d<0||d>a||Math.abs(g(p,c))>o)return!0;return!1},A.filter=function(e,t){var r=[e[0]],o=0,i=0;function n(s){e.push(s);var c=r.length,h=o;r.splice(i+1);for(var p=h+1;p<e.length;p++)(p===e.length-1||A.isSegmentBent(e,h,p+1,t))&&(r.push(e[p]),r.length<c-2&&(o=p,i=r.length-1),h=p)}if(e.length>1){var a=e.pop();n(a)}return{addPt:n,raw:e,filtered:r}}}}),e5=Le({"src/components/selections/constants.js"(Z,H){"use strict";H.exports={BENDPX:1.5,MINSELECT:12,SELECTDELAY:100,SELECTID:"-select"}}}),t5=Le({"src/components/selections/select.js"(Z,H){"use strict";var g=JE(),x=QE(),A=so(),S=rs().dashStyle,e=$a(),t=Dc(),r=Td().makeEventData,o=hv(),i=o.freeMode,n=o.rectMode,a=o.drawMode,s=o.openMode,c=o.selectMode,h=Wp(),p=uy(),d=E_(),T=jp().clearOutline,l=Gp(),_=l.handleEllipse,w=l.readPaths,M=S_().newShapes,E=t2(),m=l2().activateLastSelection,b=ni(),v=b.sorterAsc,u=fy(),y=y_(),f=Kc().getFromId,P=ly(),L=cy().redrawReglTraces,z=e5(),F=z.MINSELECT,O=u.filter,B=u.tester,I=M_(),N=I.p2r,U=I.axValue,W=I.getTransform;function Q(Fe){return Fe.subplot!==void 0}function le(Fe,Ze,Ne,Se,Ve){var Ee=!Q(Se),be=i(Ve),Ce=n(Ve),et=s(Ve),ht=a(Ve),yt=c(Ve),Pt=Ve==="drawline",Ot=Ve==="drawcircle",Wt=Pt||Ot,$t=Se.gd,lr=$t._fullLayout,fi=yt&&lr.newselection.mode==="immediate"&&Ee,Pi=lr._zoomlayer,