{
 "cells": [
  {
   "attachments": {
    "rai_banner.png": {
     "image/png": "iVBORw0KGgoAAAANSUhEUgAABjAAAAGMCAIAAAD7qnwpAAAOEmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS41LjAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iCiAgICB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIgogICAgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIgogICB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCAyMy40IChNYWNpbnRvc2gpIgogICB4bXA6Q3JlYXRlRGF0ZT0iMjAyMi0wNy0yN1QxNzoxNzoxMC0wNTowMCIKICAgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyMi0wNy0yOFQxMDoyNToxOC0wNzowMCIKICAgeG1wOk1vZGlmeURhdGU9IjIwMjItMDctMjhUMTA6MjU6MTgtMDc6MDAiCiAgIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiCiAgIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIKICAgZGM6Zm9ybWF0PSJhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIgogICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjQ4YTcyZDkzLTkwMmQtNDZmMi04ZmNkLWNhYmJlZTE4ZjUwYiIKICAgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjJhM2FkYzIxLThkYTAtYzA0OC04ZmVlLWJiNmIxYjIwYzA1OCIKICAgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjVlZTk1NmU2LTljMWUtNDZiZi05YzA0LTFjY2I5MjRhMmYzYiIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgdGlmZjpYUmVzb2x1dGlvbj0iMzAwLzEiCiAgIHRpZmY6WVJlc29sdXRpb249IjMwMC8xIgogICB0aWZmOlJlc29sdXRpb25Vbml0PSIyIgogICB0aWZmOkltYWdlV2lkdGg9IjE1ODQiCiAgIHRpZmY6SW1hZ2VMZW5ndGg9IjM5NiIKICAgZXhpZjpDb2xvclNwYWNlPSIxIgogICBleGlmOlBpeGVsWERpbWVuc2lvbj0iMTU4NCIKICAgZXhpZjpQaXhlbFlEaW1lbnNpb249IjM5NiI+CiAgIDxwaG90b3Nob3A6VGV4dExheWVycz4KICAgIDxyZGY6QmFnPgogICAgIDxyZGY6bGkKICAgICAgcGhvdG9zaG9wOkxheWVyTmFtZT0iLiIKICAgICAgcGhvdG9zaG9wOkxheWVyVGV4dD0iLiIvPgogICAgIDxyZGY6bGkKICAgICAgcGhvdG9zaG9wOkxheWVyTmFtZT0iQnVpbGQgRGF0YSBBcHBzICB3aXRoIEludGVsbGlnZW5jZSIKICAgICAgcGhvdG9zaG9wOkxheWVyVGV4dD0iQnVpbGQgRGF0YSBBcHBzICB3aXRoIEludGVsbGlnZW5jZSIvPgogICAgPC9yZGY6QmFnPgogICA8L3Bob3Rvc2hvcDpUZXh0TGF5ZXJzPgogICA8ZGM6dGl0bGU+CiAgICA8cmRmOkFsdD4KICAgICA8cmRmOmxpIHhtbDpsYW5nPSJ4LWRlZmF1bHQiPmxpbmtlZC1pbi1kcmFmdDQ8L3JkZjpsaT4KICAgIDwvcmRmOkFsdD4KICAgPC9kYzp0aXRsZT4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo1ZWU5NTZlNi05YzFlLTQ2YmYtOWMwNC0xY2NiOTI0YTJmM2IiCiAgICAgIHN0RXZ0OndoZW49IjIwMjItMDctMjdUMTc6MTc6MTAtMDU6MDAiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCAyMy40IChNYWNpbnRvc2gpIi8+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InNhdmVkIgogICAgICBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmJjYjMxYzQxLTJlOTMtNDZlYS05NDlmLTlkMGJjMmY1NjlmYSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyMi0wNy0yN1QxNzoyMTozOS0wNTowMCIKICAgICAgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDIzLjQgKE1hY2ludG9zaCkiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6YTg2NTIwYmItMDI0Yy00MmRmLThlYWMtMjE5NGU0YWE0ZTNhIgogICAgICBzdEV2dDp3aGVuPSIyMDIyLTA3LTI3VDE4OjA5OjIzLTA1OjAwIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjMuNCAoTWFjaW50b3NoKSIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIvPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJjb252ZXJ0ZWQiCiAgICAgIHN0RXZ0OnBhcmFtZXRlcnM9ImZyb20gZG9jdW1lbnQvdm5kLmFkb2JlLmNwc2QrZGN4IHRvIGFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5waG90b3Nob3AiLz4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0iZGVyaXZlZCIKICAgICAgc3RFdnQ6cGFyYW1ldGVycz0iY29udmVydGVkIGZyb20gZG9jdW1lbnQvdm5kLmFkb2JlLmNwc2QrZGN4IHRvIGFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5waG90b3Nob3AiLz4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NDhhNzJkOTMtOTAyZC00NmYyLThmY2QtY2FiYmVlMThmNTBiIgogICAgICBzdEV2dDp3aGVuPSIyMDIyLTA3LTI3VDE4OjA5OjIzLTA1OjAwIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjMuNCAoTWFjaW50b3NoKSIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIvPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJwcm9kdWNlZCIKICAgICAgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWZmaW5pdHkgRGVzaWduZXIgMS4xMC41IgogICAgICBzdEV2dDp3aGVuPSIyMDIyLTA3LTI4VDEwOjI1OjE4LTA3OjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICAgPHhtcE1NOkRlcml2ZWRGcm9tCiAgICBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOmE4NjUyMGJiLTAyNGMtNDJkZi04ZWFjLTIxOTRlNGFhNGUzYSIKICAgIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NWVlOTU2ZTYtOWMxZS00NmJmLTljMDQtMWNjYjkyNGEyZjNiIgogICAgc3RSZWY6b3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjVlZTk1NmU2LTljMWUtNDZiZi05YzA0LTFjY2I5MjRhMmYzYiIvPgogIDwvcmRmOkRlc2NyaXB0aW9uPgog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"
    }
   },
   "cell_type": "markdown",
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "source": [
    "![rai_banner.png](attachment:rai_banner.png) <!--Temporary solution to see the image in Github preview in private repo-->\n",
    "\n",
    "\n",
    "<!-- <img src=\"assets/rai_banner.png\"> This way Github preview should show image correctly for public repo -->\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "source": [
    "\n",
    "# Anti-Money-Laundering (AML) Detection\n",
    "## Using Reasoning and Graph Analytics on Data from Multiple Banks to Detect Money Laundering\n",
    "\n",
    "*Based on the 2020 case study from Banca d’Italia: \"Rule-based Anti-Money Laundering in Financial Intelligence Units: Experience and Vision\".*\n",
    "\n",
    "The high-level decision tasks for the case:\n",
    "\n",
    "1. **Task 1: Suspicion assessment**. Decide whether a financial *transaction* or a *case* meets a definition of \"suspicious\".\n",
    "2. **Task 2: Suspicious offense determination**. Decide whether a suspicious *predicate offense* underlines a transaction or case.\n",
    "\n",
    "Some reasoning rules are designed by financial analysts and domain engineers, while others are learnt from data, e.g., with statistical relational learning approaches.\n",
    "\n",
    "The main subject of the case is a Suspicious Transaction Report (STR) and its assessment per Tasks 1 and 2 above.\n",
    "\n",
    "We define the search for a typical laundering pattern as follows: _A person who is issuing a loan request to a bank of which he/she is the ultimate beneficial owner (UBO), may intend to launder unclean money via the bank._\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "> **Note**. The last section in this notebook is an Appendix with a cell that you can run to perform all of the setup necessary to execute this notebook."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "source": [
    "## Modeling Knowledge Graph Entities and Relationships\n",
    "We start by defining and importing all the Python packages that we will need, including the `relationalai` package. We then define a model object called `AMLDemoSF`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "def install_packages():\n",
    "    import os\n",
    "    os.system('pip install relationalai')\n",
    "\n",
    "install_packages()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": [
     "hide-input"
    ]
   },
   "outputs": [],
   "source": [
    "import relationalai as rai\n",
    "from relationalai.std.graphs import Graph\n",
    "from relationalai.std.aggregates import sum, count, rank_asc\n",
    "from relationalai.std import alias\n",
    "import pandas as pd\n",
    "from typing import Tuple\n",
    "\n",
    "model = rai.Model(\"AMLDemoSF\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "source": [
    "> **Note**. Models represent collections of objects. Objects, like Python objects, have types and properties, which we will define in a bit."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "source": [
    "### Importing Data \n",
    "We import a synthetic dataset (inspired by the paper from 2020 mentioned above) from a set of Snowflake tables. The tables contain information about the direct ownership relationship between financial institutions, companies and people.\n",
    "\n",
    "In the code below, the tables become types, holding instances per table row.\n",
    "\n",
    "**Note: the Appendix at the end of this notebook has some SQL code and a RelationalAI CLI invocation to create the tables in Snowflake and the data stream with RelationalAI. If no one has done those steps for your account yet, be sure to do that before proceeding.**"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "source": [
    "> **Note**. We access data in Snowflake by simply passing our table location as `source` parameter while creating a model type in the format `<my_database.my_schema.my_table>`. `Company`, for instance, contains the data in a database called `RAI_DEMO`, schema `AML` and table `COMPANY`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": [
     "hide-input"
    ]
   },
   "outputs": [],
   "source": [
    "Company = model.Type(\"Company\", source = \"RAI_DEMO.AML.COMPANY\")\n",
    "FinancialInstitution = model.Type(\"FinancialInstitution\", source = \"RAI_DEMO.AML.BANK\")\n",
    "Person = model.Type(\"Person\", source = \"RAI_DEMO.AML.PERSON\")\n",
    "Employment = model.Type(\"Employment\", source = \"RAI_DEMO.AML.EMPLOYMENT\")\n",
    "DirectOwnership = model.Type(\"DirectOwnership\", source = \"RAI_DEMO.AML.OWNERSHIP\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "source": [
    "> **Note**. We connect to Snowflake and create a Snowpark session using the `rai init` command. A `data stream` between the tables and the `AMLDemoSF` model was created to stream the data from Snowflake to the RAI schema."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "source": [
    "Here you can see a visualization of our base model:"
   ]
  },
  {
   "attachments": {
    "ad123871-8860-4df9-877a-22f2c63fcab2.png": {
     "image/png": "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"
    }
   },
   "cell_type": "markdown",
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "source": [
    "![base_model_graph.png](attachment:ad123871-8860-4df9-877a-22f2c63fcab2.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "source": [
    "### Extending model with Types\n",
    "Now we can add our own types to the model and populate them.\n",
    "\n",
    "Note how we extend our `LegalEntity` type with all instances of banks, companies and people. `Employment` and `DirectOwnership` relationships rules can now use it to refer to any of the three and populate properties that hold objects, like `owner`, `employer`, etc.\n",
    "\n",
    "Finally, we create `Family` instances from every value in `Person`.`family_name` property (column)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": [
     "hide-input"
    ]
   },
   "outputs": [],
   "source": [
    "Family = model.Type(\"Family\")\n",
    "LegalEntity = model.Type(\"LegalEntity\")\n",
    "\n",
    "DerivedOwnership = model.Type(\"DerivedOwnership\")\n",
    "TotalOwnership = model.Type(\"TotalOwnership\")\n",
    "Control = model.Type(\"Control\")\n",
    "\n",
    "LegalEntity.extend(Company)\n",
    "LegalEntity.extend(FinancialInstitution)\n",
    "LegalEntity.extend(Person)\n",
    "\n",
    "with model.rule():\n",
    "    e = Employment()\n",
    "    e.set(employer = LegalEntity(id = e.employer_id), employee = Person(id = e.employee_id))\n",
    "\n",
    "with model.rule():\n",
    "    do = DirectOwnership()\n",
    "    do.set(owner = LegalEntity(id = do.owner_id), asset = LegalEntity(id = do.asset_id), part = do.percent/100)\n",
    "\n",
    "with model.rule():\n",
    "    p = Person()\n",
    "    p.set(family = Family.add(name = p.family_name).set(LegalEntity))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Here you can see a visualization of our extended model:"
   ]
  },
  {
   "attachments": {
    "8565210c-3afb-4334-805e-25883b1ec1ab.png": {
     "image/png": "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"
    }
   },
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![extended_model_graph.png](attachment:8565210c-3afb-4334-805e-25883b1ec1ab.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's write some queries now to get to know our data."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": [
     "hide-input"
    ]
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th>id</th>\n",
       "      <th>name</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>11</td>\n",
       "      <td>MyBank</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>12</td>\n",
       "      <td>ACME Trust</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>13</td>\n",
       "      <td>People Bank</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>14</td>\n",
       "      <td>ACME Bank</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>"
      ],
      "text/plain": [
       "<relationalai.dsl.Context at 0x1491e68d0>"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "with model.query() as select:\n",
    "    fi = FinancialInstitution()\n",
    "    res = select(fi.id, fi.name)\n",
    "\n",
    "res"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": [
     "hide-input"
    ]
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th>id</th>\n",
       "      <th>name</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>1</td>\n",
       "      <td>NebulaTech Solutions</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>2</td>\n",
       "      <td>Quantum Dynamics Innovations</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>3</td>\n",
       "      <td>StellarSphere Enterprises</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>4</td>\n",
       "      <td>CyberNexus Systems</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>5</td>\n",
       "      <td>InfinityForge Technologies</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>6</td>\n",
       "      <td>PhoenixRise Ventures</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>7</td>\n",
       "      <td>CelestialWave Industries</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>8</td>\n",
       "      <td>NovaCore Innovations</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>9</td>\n",
       "      <td>DreamScape Enterprises</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>10</td>\n",
       "      <td>ElysiumTech Solutions</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>"
      ],
      "text/plain": [
       "<relationalai.dsl.Context at 0x1491a3c10>"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "with model.query() as select:\n",
    "    c = Company()\n",
    "    res = select(c.id, c.name)\n",
    "\n",
    "res"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": [
     "hide-input"
    ]
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th>sf_person</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>cW6S8m7PKwayYyrUFQOwnA</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>r1MhwkDR9RGGNg07nIf5BQ</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>sAvunE8/tDW5b4Q7IVNIwg</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>sIMZM6956KBcjN/vk1rXzA</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>"
      ],
      "text/plain": [
       "<relationalai.dsl.Context at 0x149265450>"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "with model.query() as select:\n",
    "    p = Person()\n",
    "    res = select(p) # select(p.id, p.name, alias(p.family.name, 'family name'))\n",
    "\n",
    "res"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": [
     "hide-input"
    ]
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>employee</th>\n",
       "      <th>employer</th>\n",
       "      <th>role</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Bob</td>\n",
       "      <td>People Bank</td>\n",
       "      <td>CEO</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  employee     employer role\n",
       "0      Bob  People Bank  CEO"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "with model.query() as select:\n",
    "    e = Employment()\n",
    "    res = select(alias(e.employee.name, 'employee'), alias(e.employer.name, 'employer'), e.role)\n",
    "\n",
    "res.results"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": [
     "hide-input"
    ]
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>owner</th>\n",
       "      <th>asset</th>\n",
       "      <th>percent</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>ACME Trust</td>\n",
       "      <td>MyBank</td>\n",
       "      <td>0.23</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Anna</td>\n",
       "      <td>MyBank</td>\n",
       "      <td>0.32</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>CelestialWave Industries</td>\n",
       "      <td>ACME Bank</td>\n",
       "      <td>0.45</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>MyBank</td>\n",
       "      <td>ACME Bank</td>\n",
       "      <td>0.34</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>MyBank</td>\n",
       "      <td>NebulaTech Solutions</td>\n",
       "      <td>0.70</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>MyBank</td>\n",
       "      <td>Quantum Dynamics Innovations</td>\n",
       "      <td>0.12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>MyBank</td>\n",
       "      <td>StellarSphere Enterprises</td>\n",
       "      <td>0.65</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>NovaCore Innovations</td>\n",
       "      <td>ACME Bank</td>\n",
       "      <td>0.15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>NovaCore Innovations</td>\n",
       "      <td>ElysiumTech Solutions</td>\n",
       "      <td>0.11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>People Bank</td>\n",
       "      <td>ACME Trust</td>\n",
       "      <td>0.93</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>PhoenixRise Ventures</td>\n",
       "      <td>CelestialWave Industries</td>\n",
       "      <td>0.40</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>PhoenixRise Ventures</td>\n",
       "      <td>DreamScape Enterprises</td>\n",
       "      <td>0.03</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>PhoenixRise Ventures</td>\n",
       "      <td>NovaCore Innovations</td>\n",
       "      <td>0.81</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>StellarSphere Enterprises</td>\n",
       "      <td>CyberNexus Systems</td>\n",
       "      <td>1.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>StellarSphere Enterprises</td>\n",
       "      <td>InfinityForge Technologies</td>\n",
       "      <td>0.40</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>StellarSphere Enterprises</td>\n",
       "      <td>PhoenixRise Ventures</td>\n",
       "      <td>0.61</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                        owner                         asset  percent\n",
       "0                  ACME Trust                        MyBank     0.23\n",
       "1                        Anna                        MyBank     0.32\n",
       "2    CelestialWave Industries                     ACME Bank     0.45\n",
       "3                      MyBank                     ACME Bank     0.34\n",
       "4                      MyBank          NebulaTech Solutions     0.70\n",
       "5                      MyBank  Quantum Dynamics Innovations     0.12\n",
       "6                      MyBank     StellarSphere Enterprises     0.65\n",
       "7        NovaCore Innovations                     ACME Bank     0.15\n",
       "8        NovaCore Innovations         ElysiumTech Solutions     0.11\n",
       "9                 People Bank                    ACME Trust     0.93\n",
       "10       PhoenixRise Ventures      CelestialWave Industries     0.40\n",
       "11       PhoenixRise Ventures        DreamScape Enterprises     0.03\n",
       "12       PhoenixRise Ventures          NovaCore Innovations     0.81\n",
       "13  StellarSphere Enterprises            CyberNexus Systems     1.00\n",
       "14  StellarSphere Enterprises    InfinityForge Technologies     0.40\n",
       "15  StellarSphere Enterprises          PhoenixRise Ventures     0.61"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "with model.query() as select:\n",
    "    o = DirectOwnership()\n",
    "    res = select(alias(o.owner.name, \"owner\"), alias(o.asset.name, \"asset\"), alias(o.part, \"percent\"))\n",
    "\n",
    "res.results"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Adding our input parameters\n",
    "Given the data above, we want to check if a person is requesting a loan from a bank which is controlled by that person or his family. So let's see whether this is the case for `Tom` requesting a `loan` from the `ACME Bank`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "activity_type = \"loan\"\n",
    "person_name = \"Tom\"\n",
    "bank_name = \"ACME Bank\""
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Visualizing the input data\n",
    "Let's take a closer look at all the direct ownership relationships. We define a weighted graph called `direct_ownership_graph` and assign legal entities as well people to represent `nodes` in the graph. `Edges` represent the direct ownership relation. We use the ownership percentage as the weight of the relationship.\n",
    "\n",
    "We mark Tom in red and the bank that he is requesting the loan from in yellow. Looking at only the input data, there does not seem to be a connection between the two.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": [
     "hide-input"
    ]
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "  <style>\n",
       "    /* Main divisions */\n",
       "    #iUn6OmQXNRWdlB6Nj-main-div {\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "      padding: 3px;\n",
       "      background-color: white;\n",
       "    }\n",
       "    #iUn6OmQXNRWdlB6Nj-left-div {\n",
       "      float: left;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    #iUn6OmQXNRWdlB6Nj-right-div {\n",
       "      float: left;\n",
       "      height: 100%;\n",
       "      display: none;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    #iUn6OmQXNRWdlB6Nj-right-inner-div {\n",
       "      padding-left: 5px;\n",
       "      padding-right: 2px;\n",
       "      overflow-x: hidden;\n",
       "      overflow-y: auto;\n",
       "      height: 100%;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "\n",
       "    /* Graph and details (contained in left-inner-div) */\n",
       "    #iUn6OmQXNRWdlB6Nj-graph-div {\n",
       "      overflow: hidden;\n",
       "      resize: vertical;\n",
       "      position: relative;\n",
       "      border: 1px solid #ccc;\n",
       "      border-radius: 4px;\n",
       "      box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2);\n",
       "      display: none;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    #iUn6OmQXNRWdlB6Nj-details-div {\n",
       "      overflow: auto;\n",
       "      resize: vertical;\n",
       "      margin-top: 5px;\n",
       "      border: 1px solid #ccc;\n",
       "      border-radius: 4px;\n",
       "      box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2);\n",
       "      display: none;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    #iUn6OmQXNRWdlB6Nj-details-head {\n",
       "      user-select: none;\n",
       "      padding-left: 4px !important;\n",
       "      padding-top: 4px !important;\n",
       "      font-size: 8px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      color: gray;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    #iUn6OmQXNRWdlB6Nj-details-body {\n",
       "      padding: 10px;\n",
       "      padding-top: 6px;\n",
       "      font-size: 10px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "\n",
       "    /* Control menu (contained in right-inner-div) */\n",
       "    .iUn6OmQXNRWdlB6Nj-menu-item-head {\n",
       "      font-size: 11px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      color: black;\n",
       "      cursor: pointer;\n",
       "      padding-left: 5px;\n",
       "      padding-right: 0px;\n",
       "      padding-top: 5px;\n",
       "      padding-bottom: 5px;\n",
       "      margin-bottom: 5px;\n",
       "      border-radius: 4px;\n",
       "      border: 1px solid #ccc;\n",
       "      box-shadow: 0px 0px 3px rgba(0, 0, 0, 0.2);\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    .iUn6OmQXNRWdlB6Nj-menu-item-body {\n",
       "      margin-left: 5px;\n",
       "      margin-bottom: 10px;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    .iUn6OmQXNRWdlB6Nj-menu-subitem-head {\n",
       "      font-size: 9px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      font-weight: 600;\n",
       "      color: #006429;\n",
       "      cursor: default;\n",
       "      margin-bottom: 2px;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    .iUn6OmQXNRWdlB6Nj-menu-subitem-body {\n",
       "      font-size: 8px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      margin-left: 7px;\n",
       "      margin-bottom: 5px;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    .iUn6OmQXNRWdlB6Nj-labeled-input {\n",
       "      all: initial;\n",
       "      display: flex;\n",
       "      align-items: center;\n",
       "      margin-top: 1px;\n",
       "      margin-bottom: 1px;\n",
       "    }\n",
       "    .iUn6OmQXNRWdlB6Nj-label {\n",
       "      all: initial;\n",
       "      font-size: 8px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      font-style: italic;\n",
       "      cursor: pointer;\n",
       "    }\n",
       "    .iUn6OmQXNRWdlB6Nj-slider {\n",
       "      width: 100%;\n",
       "      margin-bottom: 2px;\n",
       "    }\n",
       "    .iUn6OmQXNRWdlB6Nj-slider::-moz-focus-outer {\n",
       "      border: 0;\n",
       "    }\n",
       "    .iUn6OmQXNRWdlB6Nj-slider-text-left {\n",
       "      font-size: 8px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      font-style: italic;\n",
       "      color: black;\n",
       "      float: left;\n",
       "      margin-top: 2px;\n",
       "    }\n",
       "    .iUn6OmQXNRWdlB6Nj-slider-text-right {\n",
       "      font-size: 8px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      color: black;\n",
       "      float: right;\n",
       "    }\n",
       "    .iUn6OmQXNRWdlB6Nj-checkbox {\n",
       "      margin-left: 0px !important;\n",
       "      margin-right: 4px !important;\n",
       "      margin-top: 2px !important;\n",
       "      margin-bottom: 2px !important;\n",
       "      padding: 0px !important;\n",
       "    }\n",
       "    .iUn6OmQXNRWdlB6Nj-select {\n",
       "      cursor: pointer;\n",
       "      outline: none;\n",
       "      font-size: 8px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      color: black;\n",
       "      background-color: #f5f5f5;\n",
       "      width: 100%;\n",
       "      padding-top: 4px !important;\n",
       "      padding-bottom: 4px !important;\n",
       "      padding-left: 5px;\n",
       "      padding-right: 10px;\n",
       "      margin-right: 5px;\n",
       "      margin-top: 2px;\n",
       "      margin-bottom: 2px;\n",
       "      border-radius: 4px;\n",
       "      border: 1.2px solid #bbb;\n",
       "      box-shadow: 0 1px 0 1px rgba(0, 0, 0, 0.04);\n",
       "\n",
       "      -moz-appearance: none;\n",
       "      -webkit-appearance: none;\n",
       "      appearance: none;\n",
       "      background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyOTIuNCIgaGVpZ2h0PSIyOTIuNCI+PHBhdGggZmlsbD0iIzAwMDAwMCIgZD0iTSAtNS4yMDY0NjJlLTYsNjQuNTcyNjU2IDI5Mi4zOTk5OSw2NC41NzI2NTQgMTQ2LjE5OTk3LDIzMy42Mjg0NyAtNS4yMDY0NjJlLTYsNjQuNTcyNjU2Ii8+PC9zdmc+Cg==');\n",
       "      background-repeat: no-repeat;\n",
       "      background-position: right 4px top 50%;\n",
       "      background-size: 6px;\n",
       "    }\n",
       "    @-moz-document url-prefix() {\n",
       "      /* Dirty hack to remove dotted border on focus */\n",
       "      .iUn6OmQXNRWdlB6Nj-select {\n",
       "        color: transparent !important;\n",
       "        text-shadow: 0 0 0 black !important;\n",
       "      }\n",
       "    }\n",
       "    .iUn6OmQXNRWdlB6Nj-select:after {\n",
       "      cursor: pointer;\n",
       "    }\n",
       "    .iUn6OmQXNRWdlB6Nj-button {\n",
       "      cursor: pointer;\n",
       "      outline: none;\n",
       "      font-size: 8px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      color: black;\n",
       "      background-color: #f2f2f2;\n",
       "      padding-top: 4px !important;\n",
       "      padding-bottom: 4px !important;\n",
       "      padding-left: 10px;\n",
       "      padding-right: 10px;\n",
       "      margin-top: 2px;\n",
       "      margin-bottom: 2px;\n",
       "      border-radius: 4px;\n",
       "      border: 1.2px solid #bbb;\n",
       "      box-shadow: 0 1px 0 1px rgba(0, 0, 0, 0.04);\n",
       "    }\n",
       "    .iUn6OmQXNRWdlB6Nj-button:hover {\n",
       "      border: 1.2px solid #999;\n",
       "      background-color: #f2f2f2;\n",
       "    }\n",
       "    .iUn6OmQXNRWdlB6Nj-button:active {\n",
       "      background-color: #ddd;\n",
       "    }\n",
       "    .iUn6OmQXNRWdlB6Nj-button::-moz-focus-inner {\n",
       "      border: 0;\n",
       "    }\n",
       "    /* Hidden menu items */\n",
       "    #iUn6OmQXNRWdlB6Nj-graph-select-div {\n",
       "      display: none;\n",
       "    }\n",
       "    #iUn6OmQXNRWdlB6Nj-node-size-norm-div {\n",
       "      display: none;\n",
       "    }\n",
       "    #iUn6OmQXNRWdlB6Nj-edge-size-norm-div {\n",
       "      display: none;\n",
       "    }\n",
       "\n",
       "    /* Graph */\n",
       "    #iUn6OmQXNRWdlB6Nj-tooltip-div {\n",
       "      font-size: 10px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      z-index: 42001;\n",
       "      opacity: 0;\n",
       "      visibility: hidden;\n",
       "      position: absolute !important;\n",
       "      max-width: 40%;\n",
       "      padding: 5px;\n",
       "      white-space: pre-wrap;\n",
       "      word-break: break-word;\n",
       "      color: black;\n",
       "      background-color: white;\n",
       "      border-radius: 4px;\n",
       "      border: 1px solid #ccc;\n",
       "      box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.2);\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    #iUn6OmQXNRWdlB6Nj-menu-toggle-button, #iUn6OmQXNRWdlB6Nj-details-toggle-button, #iUn6OmQXNRWdlB6Nj-progress-container {\n",
       "      font-size: 14px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      z-index: 42000;\n",
       "      cursor: pointer;\n",
       "      position: absolute;\n",
       "      background-color: white;\n",
       "      border-radius: 4px;\n",
       "      box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.2);\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    #iUn6OmQXNRWdlB6Nj-menu-toggle-button {\n",
       "      top: 0;\n",
       "      right: 0;\n",
       "      padding-left: 6px;\n",
       "      padding-right: 6px;\n",
       "      padding-top: 12px;\n",
       "      padding-bottom: 12px;\n",
       "      border-top: 0px;\n",
       "      border-right: 0px;\n",
       "      border-bottom: 1px solid #ccc;\n",
       "      border-left: 1px solid #ccc;\n",
       "    }\n",
       "    #iUn6OmQXNRWdlB6Nj-details-toggle-button {\n",
       "      bottom: 0;\n",
       "      left: 0;\n",
       "      padding-left: 19px;\n",
       "      padding-right: 19px;\n",
       "      padding-top: 0.5px;\n",
       "      padding-bottom: 2px;\n",
       "      border-top: 1px solid #ccc;\n",
       "      border-right: 1px solid #ccc;\n",
       "      border-bottom: 0px;\n",
       "      border-left: 0px;\n",
       "    }\n",
       "    #iUn6OmQXNRWdlB6Nj-progress-container {\n",
       "      font-size: 10px;\n",
       "      text-align: center;\n",
       "      top: 46%;\n",
       "      left: 15%;\n",
       "      width: 70%;\n",
       "      padding: 8px;\n",
       "      border: none;\n",
       "      box-shadow: none;\n",
       "    }\n",
       "\n",
       "    /* Details */\n",
       "    #iUn6OmQXNRWdlB6Nj-details-user-provided {\n",
       "      margin-top: 3px;\n",
       "      padding-top: 3.5px;\n",
       "      border-top: 0.5px dashed black;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "      white-space: pre-wrap;\n",
       "      word-break: break-word;\n",
       "    }\n",
       "    #iUn6OmQXNRWdlB6Nj-details-user-provided ul {\n",
       "      list-style-position: inside;\n",
       "      padding-left: 6px;\n",
       "    }\n",
       "\n",
       "    /* Unavailable in vis.js and therefore hidden */\n",
       "    #iUn6OmQXNRWdlB6Nj-svg,\n",
       "    #iUn6OmQXNRWdlB6Nj-node-label-rotation,\n",
       "    #iUn6OmQXNRWdlB6Nj-edge-label-rotation {\n",
       "      display: none;\n",
       "    }\n",
       "    /* Specific to vis.js */\n",
       "    div.vis-tooltip {\n",
       "      position: absolute;\n",
       "      visibility: hidden;\n",
       "      pointer-events: none;\n",
       "      z-index: 5;\n",
       "      max-width: 40%;\n",
       "      white-space: pre-wrap;\n",
       "      word-break: break-word;\n",
       "      font-size: 10px;\n",
       "      padding: 5px;\n",
       "      color: black;\n",
       "      background-color: white;\n",
       "      -moz-border-radius: 3px;\n",
       "      -webkit-border-radius: 3px;\n",
       "      border-radius: 3px;\n",
       "      border: 0.5px solid black;\n",
       "      box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.3);\n",
       "    }\n",
       "  </style>\n",
       "\n",
       "  <div id=\"iUn6OmQXNRWdlB6Nj-main-div\">\n",
       "    <div id=\"iUn6OmQXNRWdlB6Nj-tooltip-div\"></div>\n",
       "\n",
       "    <div id=\"iUn6OmQXNRWdlB6Nj-left-div\">\n",
       "      <div id=\"iUn6OmQXNRWdlB6Nj-left-inner-div\">\n",
       "        <div id=\"iUn6OmQXNRWdlB6Nj-graph-div\"></div>\n",
       "        <div id=\"iUn6OmQXNRWdlB6Nj-details-div\">\n",
       "          <div id=\"iUn6OmQXNRWdlB6Nj-details-head\">\n",
       "            Details for selected element\n",
       "          </div>\n",
       "          <div id=\"iUn6OmQXNRWdlB6Nj-details-body\">\n",
       "          </div>\n",
       "        </div>\n",
       "      </div>\n",
       "    </div>\n",
       "\n",
       "    <div id=\"iUn6OmQXNRWdlB6Nj-right-div\">\n",
       "      <div id=\"iUn6OmQXNRWdlB6Nj-right-inner-div\">\n",
       "        <!-- Menu: General -->\n",
       "        <div class=\"iUn6OmQXNRWdlB6Nj-menu-item-head\"\n",
       "             id=\"iUn6OmQXNRWdlB6Nj-general-head\">\n",
       "          General\n",
       "        </div>\n",
       "        <div class=\"iUn6OmQXNRWdlB6Nj-menu-item-body\"\n",
       "             id=\"iUn6OmQXNRWdlB6Nj-general-body\">\n",
       "          <!-- Sub-menu: State -->\n",
       "          <div>\n",
       "            <div class=\"iUn6OmQXNRWdlB6Nj-menu-subitem-head\">\n",
       "              App state\n",
       "            </div>\n",
       "            <div class=\"iUn6OmQXNRWdlB6Nj-menu-subitem-body\">\n",
       "              <button class=\"iUn6OmQXNRWdlB6Nj-button\"\n",
       "                      id=\"iUn6OmQXNRWdlB6Nj-reset\"\n",
       "                      type=\"button\">Reset</button>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Display mode (fullscreen or not) -->\n",
       "          <div>\n",
       "            <div class=\"iUn6OmQXNRWdlB6Nj-menu-subitem-head\">\n",
       "              Display mode\n",
       "            </div>\n",
       "            <div class=\"iUn6OmQXNRWdlB6Nj-menu-subitem-body\">\n",
       "              <button class=\"iUn6OmQXNRWdlB6Nj-button\"\n",
       "                      id=\"iUn6OmQXNRWdlB6Nj-fullscreen-button\"\n",
       "                      type=\"button\">Enter full screen</button>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Export -->\n",
       "          <div>\n",
       "            <div class=\"iUn6OmQXNRWdlB6Nj-menu-subitem-head\">\n",
       "              Export\n",
       "            </div>\n",
       "            <div class=\"iUn6OmQXNRWdlB6Nj-menu-subitem-body\">\n",
       "              <button class=\"iUn6OmQXNRWdlB6Nj-button\"\n",
       "                      id=\"iUn6OmQXNRWdlB6Nj-svg\"\n",
       "                      type=\"button\">SVG</button>\n",
       "              <button class=\"iUn6OmQXNRWdlB6Nj-button\"\n",
       "                      id=\"iUn6OmQXNRWdlB6Nj-png\"\n",
       "                      type=\"button\">PNG</button>\n",
       "              <button class=\"iUn6OmQXNRWdlB6Nj-button\"\n",
       "                      id=\"iUn6OmQXNRWdlB6Nj-jpg\"\n",
       "                      type=\"button\">JPG</button>\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "        <!-- Menu: Data -->\n",
       "        <div class=\"iUn6OmQXNRWdlB6Nj-menu-item-head\"\n",
       "             id=\"iUn6OmQXNRWdlB6Nj-data-head\">\n",
       "          Data selection\n",
       "        </div>\n",
       "        <div class=\"iUn6OmQXNRWdlB6Nj-menu-item-body\"\n",
       "             id=\"iUn6OmQXNRWdlB6Nj-data-body\">\n",
       "          <!-- Sub-menu: Graph (only shown if multiple graphs in data) -->\n",
       "          <div id=\"iUn6OmQXNRWdlB6Nj-graph-select-div\">\n",
       "            <div class=\"iUn6OmQXNRWdlB6Nj-menu-subitem-head\">\n",
       "              Graph\n",
       "            </div>\n",
       "            <div class=\"iUn6OmQXNRWdlB6Nj-menu-subitem-body\">\n",
       "              <select class=\"iUn6OmQXNRWdlB6Nj-select\"\n",
       "                      id=\"iUn6OmQXNRWdlB6Nj-graph-select\"></select>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Node label text -->\n",
       "          <div>\n",
       "            <div class=\"iUn6OmQXNRWdlB6Nj-menu-subitem-head\">\n",
       "              Node label text\n",
       "            </div>\n",
       "            <div class=\"iUn6OmQXNRWdlB6Nj-menu-subitem-body\">\n",
       "              <select class=\"iUn6OmQXNRWdlB6Nj-select\"\n",
       "                      id=\"iUn6OmQXNRWdlB6Nj-node-label-data-source-select\"></select>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Edge label text -->\n",
       "          <div>\n",
       "            <div class=\"iUn6OmQXNRWdlB6Nj-menu-subitem-head\">\n",
       "              Edge label text\n",
       "            </div>\n",
       "            <div class=\"iUn6OmQXNRWdlB6Nj-menu-subitem-body\">\n",
       "              <select class=\"iUn6OmQXNRWdlB6Nj-select\"\n",
       "                      id=\"iUn6OmQXNRWdlB6Nj-edge-label-data-source-select\"></select>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Node size -->\n",
       "          <div class=\"iUn6OmQXNRWdlB6Nj-menu-subitem-head\">\n",
       "            Node size\n",
       "          </div>\n",
       "          <div class=\"iUn6OmQXNRWdlB6Nj-menu-subitem-body\">\n",
       "            <div>\n",
       "              <select class=\"iUn6OmQXNRWdlB6Nj-select\"\n",
       "                      id=\"iUn6OmQXNRWdlB6Nj-node-size-data-source-select\"></select>\n",
       "            </div>\n",
       "            <div class=\"iUn6OmQXNRWdlB6Nj-labeled-input\">\n",
       "              <input class=\"iUn6OmQXNRWdlB6Nj-checkbox\"\n",
       "                     id=\"iUn6OmQXNRWdlB6Nj-node-size-normalization-checkbox\"\n",
       "                     type=\"checkbox\">\n",
       "              <label class=\"iUn6OmQXNRWdlB6Nj-label\"\n",
       "                     for=\"iUn6OmQXNRWdlB6Nj-node-size-normalization-checkbox\">Normalize</label>\n",
       "            </div>\n",
       "            <div id=\"iUn6OmQXNRWdlB6Nj-node-size-norm-div\">\n",
       "              <div>\n",
       "                <span class=\"iUn6OmQXNRWdlB6Nj-slider-text-left\">Minimum</span>\n",
       "                <span class=\"iUn6OmQXNRWdlB6Nj-slider-text-right\"\n",
       "                      id=\"iUn6OmQXNRWdlB6Nj-node-size-normalization-min-text\"></span>\n",
       "                <input class=\"iUn6OmQXNRWdlB6Nj-slider\"\n",
       "                       id=\"iUn6OmQXNRWdlB6Nj-node-size-normalization-min-slider\"\n",
       "                       type=\"range\" min=\"0.01\" max=\"300.0\" step=\"0.01\">\n",
       "              </div>\n",
       "              <div>\n",
       "                <span class=\"iUn6OmQXNRWdlB6Nj-slider-text-left\">Maximum</span>\n",
       "                <span class=\"iUn6OmQXNRWdlB6Nj-slider-text-right\"\n",
       "                      id=\"iUn6OmQXNRWdlB6Nj-node-size-normalization-max-text\"></span>\n",
       "                <input class=\"iUn6OmQXNRWdlB6Nj-slider\"\n",
       "                       id=\"iUn6OmQXNRWdlB6Nj-node-size-normalization-max-slider\"\n",
       "                       type=\"range\" min=\"0.01\" max=\"300.0\" step=\"0.01\">\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Edge size -->\n",
       "          <div class=\"iUn6OmQXNRWdlB6Nj-menu-subitem-head\">\n",
       "            Edge size\n",
       "          </div>\n",
       "          <div class=\"iUn6OmQXNRWdlB6Nj-menu-subitem-body\">\n",
       "            <div>\n",
       "              <select class=\"iUn6OmQXNRWdlB6Nj-select\"\n",
       "                      id=\"iUn6OmQXNRWdlB6Nj-edge-size-data-source-select\"></select>\n",
       "            </div>\n",
       "            <div class=\"iUn6OmQXNRWdlB6Nj-labeled-input\">\n",
       "              <input class=\"iUn6OmQXNRWdlB6Nj-checkbox\"\n",
       "                     id=\"iUn6OmQXNRWdlB6Nj-edge-size-normalization-checkbox\"\n",
       "                     type=\"checkbox\">\n",
       "              <label class=\"iUn6OmQXNRWdlB6Nj-label\"\n",
       "                     for=\"iUn6OmQXNRWdlB6Nj-edge-size-normalization-checkbox\">Normalize</label>\n",
       "            </div>\n",
       "            <div id=\"iUn6OmQXNRWdlB6Nj-edge-size-norm-div\">\n",
       "              <div>\n",
       "                <span class=\"iUn6OmQXNRWdlB6Nj-slider-text-left\">Minimum</span>\n",
       "                <span class=\"iUn6OmQXNRWdlB6Nj-slider-text-right\"\n",
       "                      id=\"iUn6OmQXNRWdlB6Nj-edge-size-normalization-min-text\"></span>\n",
       "                <input class=\"iUn6OmQXNRWdlB6Nj-slider\"\n",
       "                       id=\"iUn6OmQXNRWdlB6Nj-edge-size-normalization-min-slider\"\n",
       "                       type=\"range\" min=\"0.01\" max=\"50.0\" step=\"0.01\">\n",
       "              </div>\n",
       "              <div>\n",
       "                <span class=\"iUn6OmQXNRWdlB6Nj-slider-text-left\">Maximum</span>\n",
       "                <span class=\"iUn6OmQXNRWdlB6Nj-slider-text-right\"\n",
       "                      id=\"iUn6OmQXNRWdlB6Nj-edge-size-normalization-max-text\"></span>\n",
       "                <input class=\"iUn6OmQXNRWdlB6Nj-slider\"\n",
       "                       id=\"iUn6OmQXNRWdlB6Nj-edge-size-normalization-max-slider\"\n",
       "                       type=\"range\" min=\"0.01\" max=\"50.0\" step=\"0.01\">\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "        <!-- Menu: Nodes -->\n",
       "        <div class=\"iUn6OmQXNRWdlB6Nj-menu-item-head\"\n",
       "             id=\"iUn6OmQXNRWdlB6Nj-node-head\">\n",
       "          Nodes\n",
       "        </div>\n",
       "        <div class=\"iUn6OmQXNRWdlB6Nj-menu-item-body\"\n",
       "             id=\"iUn6OmQXNRWdlB6Nj-node-body\">\n",
       "          <!-- Sub-menu: Visibility -->\n",
       "          <div>\n",
       "            <div class=\"iUn6OmQXNRWdlB6Nj-menu-subitem-head\">\n",
       "              Visibility\n",
       "            </div>\n",
       "            <div class=\"iUn6OmQXNRWdlB6Nj-menu-subitem-body\">\n",
       "              <div class=\"iUn6OmQXNRWdlB6Nj-labeled-input\">\n",
       "                <input class=\"iUn6OmQXNRWdlB6Nj-checkbox\"\n",
       "                       id=\"iUn6OmQXNRWdlB6Nj-node-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"iUn6OmQXNRWdlB6Nj-label\"\n",
       "                       for=\"iUn6OmQXNRWdlB6Nj-node-checkbox\">Show nodes</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Size -->\n",
       "          <div>\n",
       "            <div class=\"iUn6OmQXNRWdlB6Nj-menu-subitem-head\">\n",
       "              Size\n",
       "            </div>\n",
       "            <div class=\"iUn6OmQXNRWdlB6Nj-menu-subitem-body\">\n",
       "              <div>\n",
       "                <span class=\"iUn6OmQXNRWdlB6Nj-slider-text-left\">Scaling factor</span>\n",
       "                <span class=\"iUn6OmQXNRWdlB6Nj-slider-text-right\"\n",
       "                      id=\"iUn6OmQXNRWdlB6Nj-node-size-factor-text\"></span>\n",
       "                <input class=\"iUn6OmQXNRWdlB6Nj-slider\"\n",
       "                       id=\"iUn6OmQXNRWdlB6Nj-node-size-factor-slider\"\n",
       "                       type=\"range\" min=\"0.01\" max=\"5.0\" step=\"0.01\">\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Position -->\n",
       "          <div>\n",
       "            <div class=\"iUn6OmQXNRWdlB6Nj-menu-subitem-head\">\n",
       "              Position\n",
       "            </div>\n",
       "            <div class=\"iUn6OmQXNRWdlB6Nj-menu-subitem-body\">\n",
       "              <button class=\"iUn6OmQXNRWdlB6Nj-button\"\n",
       "                      id=\"iUn6OmQXNRWdlB6Nj-node-release-button\"\n",
       "                      type=\"button\">Release fixed nodes</button>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Drag behavior -->\n",
       "          <div>\n",
       "            <div class=\"iUn6OmQXNRWdlB6Nj-menu-subitem-head\">\n",
       "              Drag behavior\n",
       "            </div>\n",
       "            <div class=\"iUn6OmQXNRWdlB6Nj-menu-subitem-body\">\n",
       "              <div class=\"iUn6OmQXNRWdlB6Nj-labeled-input\">\n",
       "                <input class=\"iUn6OmQXNRWdlB6Nj-checkbox\"\n",
       "                       id=\"iUn6OmQXNRWdlB6Nj-node-drag-fix-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"iUn6OmQXNRWdlB6Nj-label\"\n",
       "                       for=\"iUn6OmQXNRWdlB6Nj-node-drag-fix-checkbox\">Fix node position</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Hover behavior -->\n",
       "          <div>\n",
       "            <div class=\"iUn6OmQXNRWdlB6Nj-menu-subitem-head\">\n",
       "              Hover behavior\n",
       "            </div>\n",
       "            <div class=\"iUn6OmQXNRWdlB6Nj-menu-subitem-body\">\n",
       "              <div class=\"iUn6OmQXNRWdlB6Nj-labeled-input\">\n",
       "                <input class=\"iUn6OmQXNRWdlB6Nj-checkbox\"\n",
       "                       id=\"iUn6OmQXNRWdlB6Nj-node-hover-neighborhood-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"iUn6OmQXNRWdlB6Nj-label\"\n",
       "                       for=\"iUn6OmQXNRWdlB6Nj-node-hover-neighborhood-checkbox\">Show neighborhood</label>\n",
       "              </div>\n",
       "              <div class=\"iUn6OmQXNRWdlB6Nj-labeled-input\">\n",
       "                <input class=\"iUn6OmQXNRWdlB6Nj-checkbox\"\n",
       "                       id=\"iUn6OmQXNRWdlB6Nj-node-hover-tooltip-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"iUn6OmQXNRWdlB6Nj-label\"\n",
       "                       for=\"iUn6OmQXNRWdlB6Nj-node-hover-tooltip-checkbox\">Show tooltips (if provided)</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "        <!-- Menu: Node images -->\n",
       "        <div id=\"iUn6OmQXNRWdlB6Nj-node-image-meta-control\">\n",
       "          <div class=\"iUn6OmQXNRWdlB6Nj-menu-item-head\"\n",
       "               id=\"iUn6OmQXNRWdlB6Nj-node-image-head\">\n",
       "            Node images\n",
       "          </div>\n",
       "          <div class=\"iUn6OmQXNRWdlB6Nj-menu-item-body\"\n",
       "               id=\"iUn6OmQXNRWdlB6Nj-node-image-body\">\n",
       "            <!-- Sub-menu: Visibility -->\n",
       "            <div>\n",
       "              <div class=\"iUn6OmQXNRWdlB6Nj-menu-subitem-head\">\n",
       "                Visibility\n",
       "              </div>\n",
       "              <div class=\"iUn6OmQXNRWdlB6Nj-menu-subitem-body\">\n",
       "                <div class=\"iUn6OmQXNRWdlB6Nj-labeled-input\">\n",
       "                  <input class=\"iUn6OmQXNRWdlB6Nj-checkbox\"\n",
       "                         id=\"iUn6OmQXNRWdlB6Nj-node-image-checkbox\"\n",
       "                         type=\"checkbox\">\n",
       "                  <label class=\"iUn6OmQXNRWdlB6Nj-label\"\n",
       "                         for=\"iUn6OmQXNRWdlB6Nj-node-image-checkbox\">Show node images</label>\n",
       "                </div>\n",
       "              </div>\n",
       "            </div>\n",
       "            <!-- Sub-menu: Size -->\n",
       "            <div>\n",
       "              <div class=\"iUn6OmQXNRWdlB6Nj-menu-subitem-head\">\n",
       "                Size\n",
       "              </div>\n",
       "              <div class=\"iUn6OmQXNRWdlB6Nj-menu-subitem-body\">\n",
       "                <span class=\"iUn6OmQXNRWdlB6Nj-slider-text-left\">Scaling factor</span>\n",
       "                <span class=\"iUn6OmQXNRWdlB6Nj-slider-text-right\"\n",
       "                      id=\"iUn6OmQXNRWdlB6Nj-node-image-size-factor-text\"></span>\n",
       "                <input class=\"iUn6OmQXNRWdlB6Nj-slider\"\n",
       "                       id=\"iUn6OmQXNRWdlB6Nj-node-image-size-factor-slider\"\n",
       "                       type=\"range\" min=\"0.01\" max=\"5.0\" step=\"0.01\">\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "        <!-- Menu: Node labels -->\n",
       "        <div class=\"iUn6OmQXNRWdlB6Nj-menu-item-head\"\n",
       "             id=\"iUn6OmQXNRWdlB6Nj-node-label-head\">\n",
       "          Node labels\n",
       "        </div>\n",
       "        <div class=\"iUn6OmQXNRWdlB6Nj-menu-item-body\"\n",
       "             id=\"iUn6OmQXNRWdlB6Nj-node-label-body\">\n",
       "          <!-- Sub-menu: Visibility -->\n",
       "          <div>\n",
       "            <div class=\"iUn6OmQXNRWdlB6Nj-menu-subitem-head\">\n",
       "              Visibility\n",
       "            </div>\n",
       "            <div class=\"iUn6OmQXNRWdlB6Nj-menu-subitem-body\">\n",
       "              <div class=\"iUn6OmQXNRWdlB6Nj-labeled-input\">\n",
       "                <input class=\"iUn6OmQXNRWdlB6Nj-checkbox\"\n",
       "                       id=\"iUn6OmQXNRWdlB6Nj-node-label-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"iUn6OmQXNRWdlB6Nj-label\"\n",
       "                       for=\"iUn6OmQXNRWdlB6Nj-node-label-checkbox\">Show node labels</label>\n",
       "              </div>\n",
       "              <div class=\"iUn6OmQXNRWdlB6Nj-labeled-input\">\n",
       "                <input class=\"iUn6OmQXNRWdlB6Nj-checkbox\"\n",
       "                       id=\"iUn6OmQXNRWdlB6Nj-node-label-border-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"iUn6OmQXNRWdlB6Nj-label\"\n",
       "                       for=\"iUn6OmQXNRWdlB6Nj-node-label-border-checkbox\">Show borders</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Size -->\n",
       "          <div>\n",
       "            <div class=\"iUn6OmQXNRWdlB6Nj-menu-subitem-head\">\n",
       "              Size\n",
       "            </div>\n",
       "            <div class=\"iUn6OmQXNRWdlB6Nj-menu-subitem-body\">\n",
       "              <span class=\"iUn6OmQXNRWdlB6Nj-slider-text-left\">Scaling factor</span>\n",
       "              <span class=\"iUn6OmQXNRWdlB6Nj-slider-text-right\"\n",
       "                    id=\"iUn6OmQXNRWdlB6Nj-node-label-size-factor-text\"></span>\n",
       "              <input class=\"iUn6OmQXNRWdlB6Nj-slider\"\n",
       "                     id=\"iUn6OmQXNRWdlB6Nj-node-label-size-factor-slider\"\n",
       "                     type=\"range\" min=\"0.01\" max=\"5.0\" step=\"0.01\">\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Rotation -->\n",
       "          <div id=\"iUn6OmQXNRWdlB6Nj-node-label-rotation\">\n",
       "            <div class=\"iUn6OmQXNRWdlB6Nj-menu-subitem-head\">\n",
       "              Rotation\n",
       "            </div>\n",
       "            <div class=\"iUn6OmQXNRWdlB6Nj-menu-subitem-body\">\n",
       "              <span class=\"iUn6OmQXNRWdlB6Nj-slider-text-left\">Angle</span>\n",
       "              <span class=\"iUn6OmQXNRWdlB6Nj-slider-text-right\"\n",
       "                    id=\"iUn6OmQXNRWdlB6Nj-node-label-rotation-text\"></span>\n",
       "              <input class=\"iUn6OmQXNRWdlB6Nj-slider\"\n",
       "                     id=\"iUn6OmQXNRWdlB6Nj-node-label-rotation-slider\"\n",
       "                     type=\"range\" min=\"0.0\" max=\"359.0\" step=\"1.0\">\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "        <!-- Menu: Edges -->\n",
       "        <div class=\"iUn6OmQXNRWdlB6Nj-menu-item-head\"\n",
       "             id=\"iUn6OmQXNRWdlB6Nj-edge-head\">\n",
       "          Edges\n",
       "        </div>\n",
       "        <div class=\"iUn6OmQXNRWdlB6Nj-menu-item-body\"\n",
       "             id=\"iUn6OmQXNRWdlB6Nj-edge-body\">\n",
       "          <!-- Sub-menu: Visibility -->\n",
       "          <div>\n",
       "            <div class=\"iUn6OmQXNRWdlB6Nj-menu-subitem-head\">\n",
       "              Visibility\n",
       "            </div>\n",
       "            <div class=\"iUn6OmQXNRWdlB6Nj-menu-subitem-body\">\n",
       "              <div class=\"iUn6OmQXNRWdlB6Nj-labeled-input\">\n",
       "                <input class=\"iUn6OmQXNRWdlB6Nj-checkbox\"\n",
       "                       id=\"iUn6OmQXNRWdlB6Nj-edge-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"iUn6OmQXNRWdlB6Nj-label\"\n",
       "                       for=\"iUn6OmQXNRWdlB6Nj-edge-checkbox\">Show edges</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Size -->\n",
       "          <div>\n",
       "            <div class=\"iUn6OmQXNRWdlB6Nj-menu-subitem-head\">\n",
       "              Size\n",
       "            </div>\n",
       "            <div class=\"iUn6OmQXNRWdlB6Nj-menu-subitem-body\">\n",
       "              <span class=\"iUn6OmQXNRWdlB6Nj-slider-text-left\">Scaling factor</span>\n",
       "              <span class=\"iUn6OmQXNRWdlB6Nj-slider-text-right\"\n",
       "                    id=\"iUn6OmQXNRWdlB6Nj-edge-size-factor-text\"></span>\n",
       "              <input class=\"iUn6OmQXNRWdlB6Nj-slider\"\n",
       "                     id=\"iUn6OmQXNRWdlB6Nj-edge-size-factor-slider\"\n",
       "                     type=\"range\" min=\"0.01\" max=\"5.0\" step=\"0.01\">\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Form -->\n",
       "          <div>\n",
       "            <div class=\"iUn6OmQXNRWdlB6Nj-menu-subitem-head\">\n",
       "              Form\n",
       "            </div>\n",
       "            <div class=\"iUn6OmQXNRWdlB6Nj-menu-subitem-body\">\n",
       "              <span class=\"iUn6OmQXNRWdlB6Nj-slider-text-left\">Curvature</span>\n",
       "              <span class=\"iUn6OmQXNRWdlB6Nj-slider-text-right\"\n",
       "                    id=\"iUn6OmQXNRWdlB6Nj-edge-curvature-text\"></span>\n",
       "              <input class=\"iUn6OmQXNRWdlB6Nj-slider\"\n",
       "                     id=\"iUn6OmQXNRWdlB6Nj-edge-curvature-slider\"\n",
       "                     type=\"range\" min=\"-1.2\" max=\"1.2\" step=\"0.02\">\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Hover behavior -->\n",
       "          <div>\n",
       "            <div class=\"iUn6OmQXNRWdlB6Nj-menu-subitem-head\">\n",
       "              Hover behavior\n",
       "            </div>\n",
       "            <div class=\"iUn6OmQXNRWdlB6Nj-menu-subitem-body\">\n",
       "              <div class=\"iUn6OmQXNRWdlB6Nj-labeled-input\">\n",
       "                <input class=\"iUn6OmQXNRWdlB6Nj-checkbox\"\n",
       "                       id=\"iUn6OmQXNRWdlB6Nj-edge-hover-tooltip-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"iUn6OmQXNRWdlB6Nj-label\"\n",
       "                       for=\"iUn6OmQXNRWdlB6Nj-edge-hover-tooltip-checkbox\">Show tooltips (if provided)</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "        <!-- Menu: Edge labels -->\n",
       "        <div class=\"iUn6OmQXNRWdlB6Nj-menu-item-head\"\n",
       "             id=\"iUn6OmQXNRWdlB6Nj-edge-label-head\">\n",
       "          Edge labels\n",
       "        </div>\n",
       "        <div class=\"iUn6OmQXNRWdlB6Nj-menu-item-body\"\n",
       "             id=\"iUn6OmQXNRWdlB6Nj-edge-label-body\">\n",
       "          <!-- Sub-menu: Visibility -->\n",
       "          <div>\n",
       "            <div class=\"iUn6OmQXNRWdlB6Nj-menu-subitem-head\">\n",
       "              Visibility\n",
       "            </div>\n",
       "            <div class=\"iUn6OmQXNRWdlB6Nj-menu-subitem-body\">\n",
       "              <div class=\"iUn6OmQXNRWdlB6Nj-labeled-input\">\n",
       "                <input class=\"iUn6OmQXNRWdlB6Nj-checkbox\"\n",
       "                       id=\"iUn6OmQXNRWdlB6Nj-edge-label-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"iUn6OmQXNRWdlB6Nj-label\"\n",
       "                       for=\"iUn6OmQXNRWdlB6Nj-edge-label-checkbox\">Show edge labels</label>\n",
       "              </div>\n",
       "              <div class=\"iUn6OmQXNRWdlB6Nj-labeled-input\">\n",
       "                <input class=\"iUn6OmQXNRWdlB6Nj-checkbox\"\n",
       "                       id=\"iUn6OmQXNRWdlB6Nj-edge-label-border-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"iUn6OmQXNRWdlB6Nj-label\"\n",
       "                       for=\"iUn6OmQXNRWdlB6Nj-edge-label-border-checkbox\">Show borders</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Size -->\n",
       "          <div>\n",
       "            <div class=\"iUn6OmQXNRWdlB6Nj-menu-subitem-head\">\n",
       "              Size\n",
       "            </div>\n",
       "            <div class=\"iUn6OmQXNRWdlB6Nj-menu-subitem-body\">\n",
       "              <span class=\"iUn6OmQXNRWdlB6Nj-slider-text-left\">Scaling factor</span>\n",
       "              <span class=\"iUn6OmQXNRWdlB6Nj-slider-text-right\"\n",
       "                    id=\"iUn6OmQXNRWdlB6Nj-edge-label-size-factor-text\"></span>\n",
       "              <input class=\"iUn6OmQXNRWdlB6Nj-slider\"\n",
       "                     id=\"iUn6OmQXNRWdlB6Nj-edge-label-size-factor-slider\"\n",
       "                     type=\"range\" min=\"0.01\" max=\"5.0\" step=\"0.01\">\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Rotation -->\n",
       "          <div id=\"iUn6OmQXNRWdlB6Nj-edge-label-rotation\">\n",
       "            <div class=\"iUn6OmQXNRWdlB6Nj-menu-subitem-head\">\n",
       "              Rotation\n",
       "            </div>\n",
       "            <div class=\"iUn6OmQXNRWdlB6Nj-menu-subitem-body\">\n",
       "              <span class=\"iUn6OmQXNRWdlB6Nj-slider-text-left\">Angle</span>\n",
       "              <span class=\"iUn6OmQXNRWdlB6Nj-slider-text-right\"\n",
       "                      id=\"iUn6OmQXNRWdlB6Nj-edge-label-rotation-text\"></span>\n",
       "              <input class=\"iUn6OmQXNRWdlB6Nj-slider\"\n",
       "                     id=\"iUn6OmQXNRWdlB6Nj-edge-label-rotation-slider\"\n",
       "                     type=\"range\" min=\"0.0\" max=\"359.0\" step=\"1.0\">\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "        <!-- Menu: Layout algorithm -->\n",
       "        <div class=\"iUn6OmQXNRWdlB6Nj-menu-item-head\"\n",
       "             id=\"iUn6OmQXNRWdlB6Nj-layout-algorithm-head\">\n",
       "          Layout algorithm\n",
       "        </div>\n",
       "        <div class=\"iUn6OmQXNRWdlB6Nj-menu-item-body\"\n",
       "             id=\"iUn6OmQXNRWdlB6Nj-layout-algorithm-body\">\n",
       "          <!-- Sub-menu: Simulation -->\n",
       "          <div>\n",
       "            <div class=\"iUn6OmQXNRWdlB6Nj-menu-subitem-head\">\n",
       "              Simulation\n",
       "            </div>\n",
       "            <div class=\"iUn6OmQXNRWdlB6Nj-menu-subitem-body\">\n",
       "              <div class=\"iUn6OmQXNRWdlB6Nj-labeled-input\">\n",
       "                <input class=\"iUn6OmQXNRWdlB6Nj-checkbox\"\n",
       "                       id=\"iUn6OmQXNRWdlB6Nj-simulation-active-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"iUn6OmQXNRWdlB6Nj-label\"\n",
       "                       for=\"iUn6OmQXNRWdlB6Nj-simulation-active-checkbox\">Active</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Algorithm -->\n",
       "          <div>\n",
       "            <div class=\"iUn6OmQXNRWdlB6Nj-menu-subitem-head\">\n",
       "              Algorithm\n",
       "            </div>\n",
       "            <div class=\"iUn6OmQXNRWdlB6Nj-menu-subitem-body\">\n",
       "              <div>\n",
       "                <select class=\"iUn6OmQXNRWdlB6Nj-select\"\n",
       "                        id=\"iUn6OmQXNRWdlB6Nj-layout-algorithm-select\"></select>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Parameters -->\n",
       "          <div>\n",
       "            <div class=\"iUn6OmQXNRWdlB6Nj-menu-subitem-head\">\n",
       "              Parameters\n",
       "            </div>\n",
       "            <div class=\"iUn6OmQXNRWdlB6Nj-menu-subitem-body\">\n",
       "              <div id=\"iUn6OmQXNRWdlB6Nj-gravitational-constant-div\">\n",
       "                <span class=\"iUn6OmQXNRWdlB6Nj-slider-text-left\">Gravitational constant</span>\n",
       "                <span class=\"iUn6OmQXNRWdlB6Nj-slider-text-right\"\n",
       "                      id=\"iUn6OmQXNRWdlB6Nj-gravitational-constant-text\"></span>\n",
       "                <input class=\"iUn6OmQXNRWdlB6Nj-slider\"\n",
       "                       id=\"iUn6OmQXNRWdlB6Nj-gravitational-constant-slider\"\n",
       "                       type=\"range\" min=\"-50000\" max=\"0\" step=\"1\"\n",
       "                       style=\"direction:rtl;\">\n",
       "              </div>\n",
       "              <div id=\"iUn6OmQXNRWdlB6Nj-spring-length-div\">\n",
       "                <span class=\"iUn6OmQXNRWdlB6Nj-slider-text-left\">Spring length</span>\n",
       "                <span class=\"iUn6OmQXNRWdlB6Nj-slider-text-right\"\n",
       "                      id=\"iUn6OmQXNRWdlB6Nj-spring-length-text\"></span>\n",
       "                <input class=\"iUn6OmQXNRWdlB6Nj-slider\"\n",
       "                       id=\"iUn6OmQXNRWdlB6Nj-spring-length-slider\"\n",
       "                       type=\"range\" min=\"0.0\" max=\"500\" step=\"0.1\">\n",
       "              </div>\n",
       "              <div id=\"iUn6OmQXNRWdlB6Nj-spring-constant-div\">\n",
       "                <span class=\"iUn6OmQXNRWdlB6Nj-slider-text-left\">Spring constant</span>\n",
       "                <span class=\"iUn6OmQXNRWdlB6Nj-slider-text-right\"\n",
       "                      id=\"iUn6OmQXNRWdlB6Nj-spring-constant-text\"></span>\n",
       "                <input class=\"iUn6OmQXNRWdlB6Nj-slider\"\n",
       "                       id=\"iUn6OmQXNRWdlB6Nj-spring-constant-slider\"\n",
       "                       type=\"range\" min=\"0.0\" max=\"1.0\" step=\"0.01\">\n",
       "              </div>\n",
       "              <div id=\"iUn6OmQXNRWdlB6Nj-avoid-overlap-div\">\n",
       "                <span class=\"iUn6OmQXNRWdlB6Nj-slider-text-left\">Avoid overlap</span>\n",
       "                <span class=\"iUn6OmQXNRWdlB6Nj-slider-text-right\"\n",
       "                      id=\"iUn6OmQXNRWdlB6Nj-avoid-overlap-text\"></span>\n",
       "                <input class=\"iUn6OmQXNRWdlB6Nj-slider\"\n",
       "                       id=\"iUn6OmQXNRWdlB6Nj-avoid-overlap-slider\"\n",
       "                       type=\"range\" min=\"0.0\" max=\"1.0\" step=\"0.01\">\n",
       "              </div>\n",
       "              <div id=\"iUn6OmQXNRWdlB6Nj-central-gravity-div\">\n",
       "                <span class=\"iUn6OmQXNRWdlB6Nj-slider-text-left\">Central gravity</span>\n",
       "                <span class=\"iUn6OmQXNRWdlB6Nj-slider-text-right\"\n",
       "                      id=\"iUn6OmQXNRWdlB6Nj-central-gravity-text\"></span>\n",
       "                <input class=\"iUn6OmQXNRWdlB6Nj-slider\"\n",
       "                       id=\"iUn6OmQXNRWdlB6Nj-central-gravity-slider\"\n",
       "                       type=\"range\" min=\"0.0\" max=\"10.0\" step=\"0.001\">\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "      </div>\n",
       "    </div>\n",
       "  </div>\n",
       "\n",
       "  <script charset=\"utf-8\" type=\"text/javascript\">\n",
       "    if(typeof(require) === \"undefined\"){\n",
       "      // Project sites:    https://requirejs.org\n",
       "//                   https://github.com/requirejs/requirejs\n",
       "// Code source:      https://requirejs.org/docs/release/2.3.6/minified/require.js - accessed on 19.11.2020\n",
       "// Original license: MIT\n",
       "// Code changes:     None\n",
       "\n",
       "/** vim: et:ts=4:sw=4:sts=4\n",
       " * @license RequireJS 2.3.6 Copyright jQuery Foundation and other contributors.\n",
       " * Released under MIT license, https://github.com/requirejs/requirejs/blob/master/LICENSE\n",
       " */\n",
       "var requirejs,require,define;!function(global,setTimeout){var req,s,head,baseElement,dataMain,src,interactiveScript,currentlyAddingScript,mainScript,subPath,version=\"2.3.6\",commentRegExp=/\\/\\*[\\s\\S]*?\\*\\/|([^:\"'=]|^)\\/\\/.*$/gm,cjsRequireRegExp=/[^.]\\s*require\\s*\\(\\s*[\"']([^'\"\\s]+)[\"']\\s*\\)/g,jsSuffixRegExp=/\\.js$/,currDirRegExp=/^\\.\\//,op=Object.prototype,ostring=op.toString,hasOwn=op.hasOwnProperty,isBrowser=!(\"undefined\"==typeof window||\"undefined\"==typeof navigator||!window.document),isWebWorker=!isBrowser&&\"undefined\"!=typeof importScripts,readyRegExp=isBrowser&&\"PLAYSTATION 3\"===navigator.platform?/^complete$/:/^(complete|loaded)$/,defContextName=\"_\",isOpera=\"undefined\"!=typeof opera&&\"[object Opera]\"===opera.toString(),contexts={},cfg={},globalDefQueue=[],useInteractive=!1;function commentReplace(e,t){return t||\"\"}function isFunction(e){return\"[object Function]\"===ostring.call(e)}function isArray(e){return\"[object Array]\"===ostring.call(e)}function each(e,t){var i;if(e)for(i=0;i<e.length&&(!e[i]||!t(e[i],i,e));i+=1);}function eachReverse(e,t){var i;if(e)for(i=e.length-1;-1<i&&(!e[i]||!t(e[i],i,e));i-=1);}function hasProp(e,t){return hasOwn.call(e,t)}function getOwn(e,t){return hasProp(e,t)&&e[t]}function eachProp(e,t){var i;for(i in e)if(hasProp(e,i)&&t(e[i],i))break}function mixin(i,e,r,n){return e&&eachProp(e,function(e,t){!r&&hasProp(i,t)||(!n||\"object\"!=typeof e||!e||isArray(e)||isFunction(e)||e instanceof RegExp?i[t]=e:(i[t]||(i[t]={}),mixin(i[t],e,r,n)))}),i}function bind(e,t){return function(){return t.apply(e,arguments)}}function scripts(){return document.getElementsByTagName(\"script\")}function defaultOnError(e){throw e}function getGlobal(e){if(!e)return e;var t=global;return each(e.split(\".\"),function(e){t=t[e]}),t}function makeError(e,t,i,r){var n=new Error(t+\"\\nhttps://requirejs.org/docs/errors.html#\"+e);return n.requireType=e,n.requireModules=r,i&&(n.originalError=i),n}if(void 0===define){if(void 0!==requirejs){if(isFunction(requirejs))return;cfg=requirejs,requirejs=void 0}void 0===require||isFunction(require)||(cfg=require,require=void 0),req=requirejs=function(e,t,i,r){var n,o,a=defContextName;return isArray(e)||\"string\"==typeof e||(o=e,isArray(t)?(e=t,t=i,i=r):e=[]),o&&o.context&&(a=o.context),(n=getOwn(contexts,a))||(n=contexts[a]=req.s.newContext(a)),o&&n.configure(o),n.require(e,t,i)},req.config=function(e){return req(e)},req.nextTick=void 0!==setTimeout?function(e){setTimeout(e,4)}:function(e){e()},require||(require=req),req.version=version,req.jsExtRegExp=/^\\/|:|\\?|\\.js$/,req.isBrowser=isBrowser,s=req.s={contexts:contexts,newContext:newContext},req({}),each([\"toUrl\",\"undef\",\"defined\",\"specified\"],function(t){req[t]=function(){var e=contexts[defContextName];return e.require[t].apply(e,arguments)}}),isBrowser&&(head=s.head=document.getElementsByTagName(\"head\")[0],baseElement=document.getElementsByTagName(\"base\")[0],baseElement&&(head=s.head=baseElement.parentNode)),req.onError=defaultOnError,req.createNode=function(e,t,i){var r=e.xhtml?document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"html:script\"):document.createElement(\"script\");return r.type=e.scriptType||\"text/javascript\",r.charset=\"utf-8\",r.async=!0,r},req.load=function(t,i,r){var e,n=t&&t.config||{};if(isBrowser)return(e=req.createNode(n,i,r)).setAttribute(\"data-requirecontext\",t.contextName),e.setAttribute(\"data-requiremodule\",i),!e.attachEvent||e.attachEvent.toString&&e.attachEvent.toString().indexOf(\"[native code\")<0||isOpera?(e.addEventListener(\"load\",t.onScriptLoad,!1),e.addEventListener(\"error\",t.onScriptError,!1)):(useInteractive=!0,e.attachEvent(\"onreadystatechange\",t.onScriptLoad)),e.src=r,n.onNodeCreated&&n.onNodeCreated(e,n,i,r),currentlyAddingScript=e,baseElement?head.insertBefore(e,baseElement):head.appendChild(e),currentlyAddingScript=null,e;if(isWebWorker)try{setTimeout(function(){},0),importScripts(r),t.completeLoad(i)}catch(e){t.onError(makeError(\"importscripts\",\"importScripts failed for \"+i+\" at \"+r,e,[i]))}},isBrowser&&!cfg.skipDataMain&&eachReverse(scripts(),function(e){if(head||(head=e.parentNode),dataMain=e.getAttribute(\"data-main\"))return mainScript=dataMain,cfg.baseUrl||-1!==mainScript.indexOf(\"!\")||(mainScript=(src=mainScript.split(\"/\")).pop(),subPath=src.length?src.join(\"/\")+\"/\":\"./\",cfg.baseUrl=subPath),mainScript=mainScript.replace(jsSuffixRegExp,\"\"),req.jsExtRegExp.test(mainScript)&&(mainScript=dataMain),cfg.deps=cfg.deps?cfg.deps.concat(mainScript):[mainScript],!0}),define=function(e,i,t){var r,n;\"string\"!=typeof e&&(t=i,i=e,e=null),isArray(i)||(t=i,i=null),!i&&isFunction(t)&&(i=[],t.length&&(t.toString().replace(commentRegExp,commentReplace).replace(cjsRequireRegExp,function(e,t){i.push(t)}),i=(1===t.length?[\"require\"]:[\"require\",\"exports\",\"module\"]).concat(i))),useInteractive&&(r=currentlyAddingScript||getInteractiveScript())&&(e||(e=r.getAttribute(\"data-requiremodule\")),n=contexts[r.getAttribute(\"data-requirecontext\")]),n?(n.defQueue.push([e,i,t]),n.defQueueMap[e]=!0):globalDefQueue.push([e,i,t])},define.amd={jQuery:!0},req.exec=function(text){return eval(text)},req(cfg)}function newContext(u){var i,e,l,c,d,g={waitSeconds:7,baseUrl:\"./\",paths:{},bundles:{},pkgs:{},shim:{},config:{}},p={},f={},r={},h=[],m={},n={},v={},x=1,b=1;function q(e,t,i){var r,n,o,a,s,u,c,d,p,f,l=t&&t.split(\"/\"),h=g.map,m=h&&h[\"*\"];if(e&&(u=(e=e.split(\"/\")).length-1,g.nodeIdCompat&&jsSuffixRegExp.test(e[u])&&(e[u]=e[u].replace(jsSuffixRegExp,\"\")),\".\"===e[0].charAt(0)&&l&&(e=l.slice(0,l.length-1).concat(e)),function(e){var t,i;for(t=0;t<e.length;t++)if(\".\"===(i=e[t]))e.splice(t,1),t-=1;else if(\"..\"===i){if(0===t||1===t&&\"..\"===e[2]||\"..\"===e[t-1])continue;0<t&&(e.splice(t-1,2),t-=2)}}(e),e=e.join(\"/\")),i&&h&&(l||m)){e:for(o=(n=e.split(\"/\")).length;0<o;o-=1){if(s=n.slice(0,o).join(\"/\"),l)for(a=l.length;0<a;a-=1)if((r=getOwn(h,l.slice(0,a).join(\"/\")))&&(r=getOwn(r,s))){c=r,d=o;break e}!p&&m&&getOwn(m,s)&&(p=getOwn(m,s),f=o)}!c&&p&&(c=p,d=f),c&&(n.splice(0,d,c),e=n.join(\"/\"))}return getOwn(g.pkgs,e)||e}function E(t){isBrowser&&each(scripts(),function(e){if(e.getAttribute(\"data-requiremodule\")===t&&e.getAttribute(\"data-requirecontext\")===l.contextName)return e.parentNode.removeChild(e),!0})}function w(e){var t=getOwn(g.paths,e);if(t&&isArray(t)&&1<t.length)return t.shift(),l.require.undef(e),l.makeRequire(null,{skipMap:!0})([e]),!0}function y(e){var t,i=e?e.indexOf(\"!\"):-1;return-1<i&&(t=e.substring(0,i),e=e.substring(i+1,e.length)),[t,e]}function S(e,t,i,r){var n,o,a,s,u=null,c=t?t.name:null,d=e,p=!0,f=\"\";return e||(p=!1,e=\"_@r\"+(x+=1)),u=(s=y(e))[0],e=s[1],u&&(u=q(u,c,r),o=getOwn(m,u)),e&&(u?f=i?e:o&&o.normalize?o.normalize(e,function(e){return q(e,c,r)}):-1===e.indexOf(\"!\")?q(e,c,r):e:(u=(s=y(f=q(e,c,r)))[0],f=s[1],i=!0,n=l.nameToUrl(f))),{prefix:u,name:f,parentMap:t,unnormalized:!!(a=!u||o||i?\"\":\"_unnormalized\"+(b+=1)),url:n,originalName:d,isDefine:p,id:(u?u+\"!\"+f:f)+a}}function k(e){var t=e.id,i=getOwn(p,t);return i||(i=p[t]=new l.Module(e)),i}function M(e,t,i){var r=e.id,n=getOwn(p,r);!hasProp(m,r)||n&&!n.defineEmitComplete?(n=k(e)).error&&\"error\"===t?i(n.error):n.on(t,i):\"defined\"===t&&i(m[r])}function O(i,e){var t=i.requireModules,r=!1;e?e(i):(each(t,function(e){var t=getOwn(p,e);t&&(t.error=i,t.events.error&&(r=!0,t.emit(\"error\",i)))}),r||req.onError(i))}function j(){globalDefQueue.length&&(each(globalDefQueue,function(e){var t=e[0];\"string\"==typeof t&&(l.defQueueMap[t]=!0),h.push(e)}),globalDefQueue=[])}function P(e){delete p[e],delete f[e]}function R(){var e,r,t=1e3*g.waitSeconds,n=t&&l.startTime+t<(new Date).getTime(),o=[],a=[],s=!1,u=!0;if(!i){if(i=!0,eachProp(f,function(e){var t=e.map,i=t.id;if(e.enabled&&(t.isDefine||a.push(e),!e.error))if(!e.inited&&n)w(i)?s=r=!0:(o.push(i),E(i));else if(!e.inited&&e.fetched&&t.isDefine&&(s=!0,!t.prefix))return u=!1}),n&&o.length)return(e=makeError(\"timeout\",\"Load timeout for modules: \"+o,null,o)).contextName=l.contextName,O(e);u&&each(a,function(e){!function n(o,a,s){var e=o.map.id;o.error?o.emit(\"error\",o.error):(a[e]=!0,each(o.depMaps,function(e,t){var i=e.id,r=getOwn(p,i);!r||o.depMatched[t]||s[i]||(getOwn(a,i)?(o.defineDep(t,m[i]),o.check()):n(r,a,s))}),s[e]=!0)}(e,{},{})}),n&&!r||!s||!isBrowser&&!isWebWorker||d||(d=setTimeout(function(){d=0,R()},50)),i=!1}}function a(e){hasProp(m,e[0])||k(S(e[0],null,!0)).init(e[1],e[2])}function o(e,t,i,r){e.detachEvent&&!isOpera?r&&e.detachEvent(r,t):e.removeEventListener(i,t,!1)}function s(e){var t=e.currentTarget||e.srcElement;return o(t,l.onScriptLoad,\"load\",\"onreadystatechange\"),o(t,l.onScriptError,\"error\"),{node:t,id:t&&t.getAttribute(\"data-requiremodule\")}}function T(){var e;for(j();h.length;){if(null===(e=h.shift())[0])return O(makeError(\"mismatch\",\"Mismatched anonymous define() module: \"+e[e.length-1]));a(e)}l.defQueueMap={}}return c={require:function(e){return e.require?e.require:e.require=l.makeRequire(e.map)},exports:function(e){if(e.usingExports=!0,e.map.isDefine)return e.exports?m[e.map.id]=e.exports:e.exports=m[e.map.id]={}},module:function(e){return e.module?e.module:e.module={id:e.map.id,uri:e.map.url,config:function(){return getOwn(g.config,e.map.id)||{}},exports:e.exports||(e.exports={})}}},(e=function(e){this.events=getOwn(r,e.id)||{},this.map=e,this.shim=getOwn(g.shim,e.id),this.depExports=[],this.depMaps=[],this.depMatched=[],this.pluginMaps={},this.depCount=0}).prototype={init:function(e,t,i,r){r=r||{},this.inited||(this.factory=t,i?this.on(\"error\",i):this.events.error&&(i=bind(this,function(e){this.emit(\"error\",e)})),this.depMaps=e&&e.slice(0),this.errback=i,this.inited=!0,this.ignore=r.ignore,r.enabled||this.enabled?this.enable():this.check())},defineDep:function(e,t){this.depMatched[e]||(this.depMatched[e]=!0,this.depCount-=1,this.depExports[e]=t)},fetch:function(){if(!this.fetched){this.fetched=!0,l.startTime=(new Date).getTime();var e=this.map;if(!this.shim)return e.prefix?this.callPlugin():this.load();l.makeRequire(this.map,{enableBuildCallback:!0})(this.shim.deps||[],bind(this,function(){return e.prefix?this.callPlugin():this.load()}))}},load:function(){var e=this.map.url;n[e]||(n[e]=!0,l.load(this.map.id,e))},check:function(){if(this.enabled&&!this.enabling){var t,e,i=this.map.id,r=this.depExports,n=this.exports,o=this.factory;if(this.inited){if(this.error)this.emit(\"error\",this.error);else if(!this.defining){if(this.defining=!0,this.depCount<1&&!this.defined){if(isFunction(o)){if(this.events.error&&this.map.isDefine||req.onError!==defaultOnError)try{n=l.execCb(i,o,r,n)}catch(e){t=e}else n=l.execCb(i,o,r,n);if(this.map.isDefine&&void 0===n&&((e=this.module)?n=e.exports:this.usingExports&&(n=this.exports)),t)return t.requireMap=this.map,t.requireModules=this.map.isDefine?[this.map.id]:null,t.requireType=this.map.isDefine?\"define\":\"require\",O(this.error=t)}else n=o;if(this.exports=n,this.map.isDefine&&!this.ignore&&(m[i]=n,req.onResourceLoad)){var a=[];each(this.depMaps,function(e){a.push(e.normalizedMap||e)}),req.onResourceLoad(l,this.map,a)}P(i),this.defined=!0}this.defining=!1,this.defined&&!this.defineEmitted&&(this.defineEmitted=!0,this.emit(\"defined\",this.exports),this.defineEmitComplete=!0)}}else hasProp(l.defQueueMap,i)||this.fetch()}},callPlugin:function(){var u=this.map,c=u.id,e=S(u.prefix);this.depMaps.push(e),M(e,\"defined\",bind(this,function(e){var o,t,i,r=getOwn(v,this.map.id),n=this.map.name,a=this.map.parentMap?this.map.parentMap.name:null,s=l.makeRequire(u.parentMap,{enableBuildCallback:!0});return this.map.unnormalized?(e.normalize&&(n=e.normalize(n,function(e){return q(e,a,!0)})||\"\"),M(t=S(u.prefix+\"!\"+n,this.map.parentMap,!0),\"defined\",bind(this,function(e){this.map.normalizedMap=t,this.init([],function(){return e},null,{enabled:!0,ignore:!0})})),void((i=getOwn(p,t.id))&&(this.depMaps.push(t),this.events.error&&i.on(\"error\",bind(this,function(e){this.emit(\"error\",e)})),i.enable()))):r?(this.map.url=l.nameToUrl(r),void this.load()):((o=bind(this,function(e){this.init([],function(){return e},null,{enabled:!0})})).error=bind(this,function(e){this.inited=!0,(this.error=e).requireModules=[c],eachProp(p,function(e){0===e.map.id.indexOf(c+\"_unnormalized\")&&P(e.map.id)}),O(e)}),o.fromText=bind(this,function(e,t){var i=u.name,r=S(i),n=useInteractive;t&&(e=t),n&&(useInteractive=!1),k(r),hasProp(g.config,c)&&(g.config[i]=g.config[c]);try{req.exec(e)}catch(e){return O(makeError(\"fromtexteval\",\"fromText eval for \"+c+\" failed: \"+e,e,[c]))}n&&(useInteractive=!0),this.depMaps.push(r),l.completeLoad(i),s([i],o)}),void e.load(u.name,s,o,g))})),l.enable(e,this),this.pluginMaps[e.id]=e},enable:function(){(f[this.map.id]=this).enabled=!0,this.enabling=!0,each(this.depMaps,bind(this,function(e,t){var i,r,n;if(\"string\"==typeof e){if(e=S(e,this.map.isDefine?this.map:this.map.parentMap,!1,!this.skipMap),this.depMaps[t]=e,n=getOwn(c,e.id))return void(this.depExports[t]=n(this));this.depCount+=1,M(e,\"defined\",bind(this,function(e){this.undefed||(this.defineDep(t,e),this.check())})),this.errback?M(e,\"error\",bind(this,this.errback)):this.events.error&&M(e,\"error\",bind(this,function(e){this.emit(\"error\",e)}))}i=e.id,r=p[i],hasProp(c,i)||!r||r.enabled||l.enable(e,this)})),eachProp(this.pluginMaps,bind(this,function(e){var t=getOwn(p,e.id);t&&!t.enabled&&l.enable(e,this)})),this.enabling=!1,this.check()},on:function(e,t){var i=this.events[e];i||(i=this.events[e]=[]),i.push(t)},emit:function(e,t){each(this.events[e],function(e){e(t)}),\"error\"===e&&delete this.events[e]}},(l={config:g,contextName:u,registry:p,defined:m,urlFetched:n,defQueue:h,defQueueMap:{},Module:e,makeModuleMap:S,nextTick:req.nextTick,onError:O,configure:function(e){if(e.baseUrl&&\"/\"!==e.baseUrl.charAt(e.baseUrl.length-1)&&(e.baseUrl+=\"/\"),\"string\"==typeof e.urlArgs){var i=e.urlArgs;e.urlArgs=function(e,t){return(-1===t.indexOf(\"?\")?\"?\":\"&\")+i}}var r=g.shim,n={paths:!0,bundles:!0,config:!0,map:!0};eachProp(e,function(e,t){n[t]?(g[t]||(g[t]={}),mixin(g[t],e,!0,!0)):g[t]=e}),e.bundles&&eachProp(e.bundles,function(e,t){each(e,function(e){e!==t&&(v[e]=t)})}),e.shim&&(eachProp(e.shim,function(e,t){isArray(e)&&(e={deps:e}),!e.exports&&!e.init||e.exportsFn||(e.exportsFn=l.makeShimExports(e)),r[t]=e}),g.shim=r),e.packages&&each(e.packages,function(e){var t;t=(e=\"string\"==typeof e?{name:e}:e).name,e.location&&(g.paths[t]=e.location),g.pkgs[t]=e.name+\"/\"+(e.main||\"main\").replace(currDirRegExp,\"\").replace(jsSuffixRegExp,\"\")}),eachProp(p,function(e,t){e.inited||e.map.unnormalized||(e.map=S(t,null,!0))}),(e.deps||e.callback)&&l.require(e.deps||[],e.callback)},makeShimExports:function(t){return function(){var e;return t.init&&(e=t.init.apply(global,arguments)),e||t.exports&&getGlobal(t.exports)}},makeRequire:function(o,a){function s(e,t,i){var r,n;return a.enableBuildCallback&&t&&isFunction(t)&&(t.__requireJsBuild=!0),\"string\"==typeof e?isFunction(t)?O(makeError(\"requireargs\",\"Invalid require call\"),i):o&&hasProp(c,e)?c[e](p[o.id]):req.get?req.get(l,e,o,s):(r=S(e,o,!1,!0).id,hasProp(m,r)?m[r]:O(makeError(\"notloaded\",'Module name \"'+r+'\" has not been loaded yet for context: '+u+(o?\"\":\". Use require([])\")))):(T(),l.nextTick(function(){T(),(n=k(S(null,o))).skipMap=a.skipMap,n.init(e,t,i,{enabled:!0}),R()}),s)}return a=a||{},mixin(s,{isBrowser:isBrowser,toUrl:function(e){var t,i=e.lastIndexOf(\".\"),r=e.split(\"/\")[0];return-1!==i&&(!(\".\"===r||\"..\"===r)||1<i)&&(t=e.substring(i,e.length),e=e.substring(0,i)),l.nameToUrl(q(e,o&&o.id,!0),t,!0)},defined:function(e){return hasProp(m,S(e,o,!1,!0).id)},specified:function(e){return e=S(e,o,!1,!0).id,hasProp(m,e)||hasProp(p,e)}}),o||(s.undef=function(i){j();var e=S(i,o,!0),t=getOwn(p,i);t.undefed=!0,E(i),delete m[i],delete n[e.url],delete r[i],eachReverse(h,function(e,t){e[0]===i&&h.splice(t,1)}),delete l.defQueueMap[i],t&&(t.events.defined&&(r[i]=t.events),P(i))}),s},enable:function(e){getOwn(p,e.id)&&k(e).enable()},completeLoad:function(e){var t,i,r,n=getOwn(g.shim,e)||{},o=n.exports;for(j();h.length;){if(null===(i=h.shift())[0]){if(i[0]=e,t)break;t=!0}else i[0]===e&&(t=!0);a(i)}if(l.defQueueMap={},r=getOwn(p,e),!t&&!hasProp(m,e)&&r&&!r.inited){if(!(!g.enforceDefine||o&&getGlobal(o)))return w(e)?void 0:O(makeError(\"nodefine\",\"No define call for \"+e,null,[e]));a([e,n.deps||[],n.exportsFn])}R()},nameToUrl:function(e,t,i){var r,n,o,a,s,u,c=getOwn(g.pkgs,e);if(c&&(e=c),u=getOwn(v,e))return l.nameToUrl(u,t,i);if(req.jsExtRegExp.test(e))a=e+(t||\"\");else{for(r=g.paths,o=(n=e.split(\"/\")).length;0<o;o-=1)if(s=getOwn(r,n.slice(0,o).join(\"/\"))){isArray(s)&&(s=s[0]),n.splice(0,o,s);break}a=n.join(\"/\"),a=(\"/\"===(a+=t||(/^data\\:|^blob\\:|\\?/.test(a)||i?\"\":\".js\")).charAt(0)||a.match(/^[\\w\\+\\.\\-]+:/)?\"\":g.baseUrl)+a}return g.urlArgs&&!/^blob\\:/.test(a)?a+g.urlArgs(e,a):a},load:function(e,t){req.load(l,e,t)},execCb:function(e,t,i,r){return t.apply(r,i)},onScriptLoad:function(e){if(\"load\"===e.type||readyRegExp.test((e.currentTarget||e.srcElement).readyState)){interactiveScript=null;var t=s(e);l.completeLoad(t.id)}},onScriptError:function(e){var i=s(e);if(!w(i.id)){var r=[];return eachProp(p,function(e,t){0!==t.indexOf(\"_@r\")&&each(e.depMaps,function(e){if(e.id===i.id)return r.push(t),!0})}),O(makeError(\"scripterror\",'Script error for \"'+i.id+(r.length?'\", needed by: '+r.join(\", \"):'\"'),e,[i.id]))}}}).require=l.makeRequire(),l}function getInteractiveScript(){return interactiveScript&&\"interactive\"===interactiveScript.readyState||eachReverse(scripts(),function(e){if(\"interactive\"===e.readyState)return interactiveScript=e}),interactiveScript}}(this,\"undefined\"==typeof setTimeout?void 0:setTimeout);\n",
       "\n",
       "    }\n",
       "    // Project sites:    https://visjs.org\n",
       "//                   https://visjs.github.io/vis-network/docs/network\n",
       "//                   https://github.com/visjs/vis-network\n",
       "// Code source:      https://unpkg.com/vis-network@9.1.0/dist/vis-network.min.js - accessed on 19.11.2021\n",
       "// Original license: Apache 2.0 (and MIT because of dual licensing)\n",
       "// Code changes:     Commented out outermost functions\n",
       "//                   Wrapped all into a require define function\n",
       "\n",
       "//                   Replaced two \"NEL\" (=unescaped newline, Unicode U+0085, which can be entered\n",
       "//                   with Ctrl+Shift+U followed be the 4 digits and Enter) symbols by \"\\n\" to\n",
       "//                   prevent browser error when using sphinx docs in combination with Jupyter\n",
       "//                   notebooks and nbsphinx. This might cause unexpected behavior in other cases.\n",
       "\n",
       "if(!require.defined(\"gravis-vis-network\")){\n",
       "  define(\"gravis-vis-network\", [\"exports\"],\n",
       "\n",
       "  /**\n",
       "   * vis-network\n",
       "   * https://visjs.github.io/vis-network/\n",
       "   *\n",
       "   * A dynamic, browser-based visualization library.\n",
       "   *\n",
       "   * @version 9.1.0\n",
       "   * @date    2021-08-29T08:47:25.454Z\n",
       "   *\n",
       "   * @copyright (c) 2011-2017 Almende B.V, http://almende.com\n",
       "   * @copyright (c) 2017-2019 visjs contributors, https://github.com/visjs\n",
       "   *\n",
       "   * @license\n",
       "   * vis.js is dual licensed under both\n",
       "   *\n",
       "   *   1. The Apache 2.0 License\n",
       "   *      http://www.apache.org/licenses/LICENSE-2.0\n",
       "   *\n",
       "   *   and\n",
       "   *\n",
       "   *   2. The MIT License\n",
       "   *      http://opensource.org/licenses/MIT\n",
       "   *\n",
       "   * vis.js may be distributed under either license.\n",
       "   */\n",
       "  // !function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?e(exports):\n",
       "  // \"function\"==typeof define&&define.amd?define([\"exports\"],e):e((t=\"undefined\"!=typeof globalThis?globalThis:t||self).vis=t.vis||{})}(this,(\n",
       "  function(t){\"use strict\";var e=\"undefined\"!=typeof globalThis?globalThis:\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:{};function i(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,\"default\")?t.default:t}function n(t,e){return t(e={exports:{}},e.exports),e.exports}var o,r,s=function(t){return t&&t.Math==Math&&t},a=s(\"object\"==typeof globalThis&&globalThis)||s(\"object\"==typeof window&&window)||s(\"object\"==typeof self&&self)||s(\"object\"==typeof e&&e)||function(){return this}()||Function(\"return this\")(),h=function(t){try{return!!t()}catch(t){return!0}},l=!h((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]})),d={}.propertyIsEnumerable,c=Object.getOwnPropertyDescriptor,u={f:c&&!d.call({1:2},1)?function(t){var e=c(this,t);return!!e&&e.enumerable}:d},f=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}},p={}.toString,v=function(t){return p.call(t).slice(8,-1)},g=\"\".split,y=h((function(){return!Object(\"z\").propertyIsEnumerable(0)}))?function(t){return\"String\"==v(t)?g.call(t,\"\"):Object(t)}:Object,m=function(t){if(null==t)throw TypeError(\"Can't call method on \"+t);return t},b=function(t){return y(m(t))},w=function(t){return\"object\"==typeof t?null!==t:\"function\"==typeof t},k={},_=function(t){return\"function\"==typeof t?t:void 0},x=function(t,e){return arguments.length<2?_(k[t])||_(a[t]):k[t]&&k[t][e]||a[t]&&a[t][e]},E=x(\"navigator\",\"userAgent\")||\"\",O=a.process,C=a.Deno,S=O&&O.versions||C&&C.version,T=S&&S.v8;T?r=(o=T.split(\".\"))[0]<4?1:o[0]+o[1]:E&&(!(o=E.match(/Edge\\/(\\d+)/))||o[1]>=74)&&(o=E.match(/Chrome\\/(\\d+)/))&&(r=o[1]);var M=r&&+r,P=!!Object.getOwnPropertySymbols&&!h((function(){var t=Symbol();return!String(t)||!(Object(t)instanceof Symbol)||!Symbol.sham&&M&&M<41})),D=P&&!Symbol.sham&&\"symbol\"==typeof Symbol.iterator,I=D?function(t){return\"symbol\"==typeof t}:function(t){var e=x(\"Symbol\");return\"function\"==typeof e&&Object(t)instanceof e},B=\"__core-js_shared__\",z=a[B]||function(t,e){try{Object.defineProperty(a,t,{value:e,configurable:!0,writable:!0})}catch(i){a[t]=e}return e}(B,{}),N=n((function(t){(t.exports=function(t,e){return z[t]||(z[t]=void 0!==e?e:{})})(\"versions\",[]).push({version:\"3.16.1\",mode:\"pure\",copyright:\"© 2021 Denis Pushkarev (zloirock.ru)\"})})),A=function(t){return Object(m(t))},F={}.hasOwnProperty,j=Object.hasOwn||function(t,e){return F.call(A(t),e)},R=0,L=Math.random(),H=function(t){return\"Symbol(\"+String(void 0===t?\"\":t)+\")_\"+(++R+L).toString(36)},W=N(\"wks\"),q=a.Symbol,V=D?q:q&&q.withoutSetter||H,U=function(t){return j(W,t)&&(P||\"string\"==typeof W[t])||(P&&j(q,t)?W[t]=q[t]:W[t]=V(\"Symbol.\"+t)),W[t]},Y=U(\"toPrimitive\"),X=function(t,e){if(!w(t)||I(t))return t;var i,n=t[Y];if(void 0!==n){if(void 0===e&&(e=\"default\"),i=n.call(t,e),!w(i)||I(i))return i;throw TypeError(\"Can't convert object to primitive value\")}return void 0===e&&(e=\"number\"),function(t,e){var i,n;if(\"string\"===e&&\"function\"==typeof(i=t.toString)&&!w(n=i.call(t)))return n;if(\"function\"==typeof(i=t.valueOf)&&!w(n=i.call(t)))return n;if(\"string\"!==e&&\"function\"==typeof(i=t.toString)&&!w(n=i.call(t)))return n;throw TypeError(\"Can't convert object to primitive value\")}(t,e)},G=function(t){var e=X(t,\"string\");return I(e)?e:String(e)},K=a.document,$=w(K)&&w(K.createElement),Z=function(t){return $?K.createElement(t):{}},Q=!l&&!h((function(){return 7!=Object.defineProperty(Z(\"div\"),\"a\",{get:function(){return 7}}).a})),J=Object.getOwnPropertyDescriptor,tt={f:l?J:function(t,e){if(t=b(t),e=G(e),Q)try{return J(t,e)}catch(t){}if(j(t,e))return f(!u.f.call(t,e),t[e])}},et=/#|\\.prototype\\./,it=function(t,e){var i=ot[nt(t)];return i==st||i!=rt&&(\"function\"==typeof e?h(e):!!e)},nt=it.normalize=function(t){return String(t).replace(et,\".\").toLowerCase()},ot=it.data={},rt=it.NATIVE=\"N\",st=it.POLYFILL=\"P\",at=it,ht=function(t){if(\"function\"!=typeof t)throw TypeError(String(t)+\" is not a function\");return t},lt=function(t,e,i){if(ht(t),void 0===e)return t;switch(i){case 0:return function(){return t.call(e)};case 1:return function(i){return t.call(e,i)};case 2:return function(i,n){return t.call(e,i,n)};case 3:return function(i,n,o){return t.call(e,i,n,o)}}return function(){return t.apply(e,arguments)}},dt=function(t){if(!w(t))throw TypeError(String(t)+\" is not an object\");return t},ct=Object.defineProperty,ut={f:l?ct:function(t,e,i){if(dt(t),e=G(e),dt(i),Q)try{return ct(t,e,i)}catch(t){}if(\"get\"in i||\"set\"in i)throw TypeError(\"Accessors not supported\");return\"value\"in i&&(t[e]=i.value),t}},ft=l?function(t,e,i){return ut.f(t,e,f(1,i))}:function(t,e,i){return t[e]=i,t},pt=tt.f,vt=function(t){var e=function(e,i,n){if(this instanceof t){switch(arguments.length){case 0:return new t;case 1:return new t(e);case 2:return new t(e,i)}return new t(e,i,n)}return t.apply(this,arguments)};return e.prototype=t.prototype,e},gt=function(t,e){var i,n,o,r,s,h,l,d,c=t.target,u=t.global,f=t.stat,p=t.proto,v=u?a:f?a[c]:(a[c]||{}).prototype,g=u?k:k[c]||(k[c]={}),y=g.prototype;for(o in e)i=!at(u?o:c+(f?\".\":\"#\")+o,t.forced)&&v&&j(v,o),s=g[o],i&&(h=t.noTargetGet?(d=pt(v,o))&&d.value:v[o]),r=i&&h?h:e[o],i&&typeof s==typeof r||(l=t.bind&&i?lt(r,a):t.wrap&&i?vt(r):p&&\"function\"==typeof r?lt(Function.call,r):r,(t.sham||r&&r.sham||s&&s.sham)&&ft(l,\"sham\",!0),g[o]=l,p&&(j(k,n=c+\"Prototype\")||ft(k,n,{}),k[n][o]=r,t.real&&y&&!y[o]&&ft(y,o,r)))},yt=Math.ceil,mt=Math.floor,bt=function(t){return isNaN(t=+t)?0:(t>0?mt:yt)(t)},wt=Math.min,kt=function(t){return t>0?wt(bt(t),9007199254740991):0},_t=Math.max,xt=Math.min,Et=function(t,e){var i=bt(t);return i<0?_t(i+e,0):xt(i,e)},Ot=function(t){return function(e,i,n){var o,r=b(e),s=kt(r.length),a=Et(n,s);if(t&&i!=i){for(;s>a;)if((o=r[a++])!=o)return!0}else for(;s>a;a++)if((t||a in r)&&r[a]===i)return t||a||0;return!t&&-1}},Ct={includes:Ot(!0),indexOf:Ot(!1)},St={},Tt=Ct.indexOf,Mt=function(t,e){var i,n=b(t),o=0,r=[];for(i in n)!j(St,i)&&j(n,i)&&r.push(i);for(;e.length>o;)j(n,i=e[o++])&&(~Tt(r,i)||r.push(i));return r},Pt=[\"constructor\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"toLocaleString\",\"toString\",\"valueOf\"],Dt=Object.keys||function(t){return Mt(t,Pt)},It={f:Object.getOwnPropertySymbols},Bt=Object.assign,zt=Object.defineProperty,Nt=!Bt||h((function(){if(l&&1!==Bt({b:1},Bt(zt({},\"a\",{enumerable:!0,get:function(){zt(this,\"b\",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var t={},e={},i=Symbol(),n=\"abcdefghijklmnopqrst\";return t[i]=7,n.split(\"\").forEach((function(t){e[t]=t})),7!=Bt({},t)[i]||Dt(Bt({},e)).join(\"\")!=n}))?function(t,e){for(var i=A(t),n=arguments.length,o=1,r=It.f,s=u.f;n>o;)for(var a,h=y(arguments[o++]),d=r?Dt(h).concat(r(h)):Dt(h),c=d.length,f=0;c>f;)a=d[f++],l&&!s.call(h,a)||(i[a]=h[a]);return i}:Bt;gt({target:\"Object\",stat:!0,forced:Object.assign!==Nt},{assign:Nt});var At=k.Object.assign,Ft=[].slice,jt={},Rt=function(t,e,i){if(!(e in jt)){for(var n=[],o=0;o<e;o++)n[o]=\"a[\"+o+\"]\";jt[e]=Function(\"C,a\",\"return new C(\"+n.join(\",\")+\")\")}return jt[e](t,i)},Lt=Function.bind||function(t){var e=ht(this),i=Ft.call(arguments,1),n=function(){var o=i.concat(Ft.call(arguments));return this instanceof n?Rt(e,o.length,o):e.apply(t,o)};return w(e.prototype)&&(n.prototype=e.prototype),n};gt({target:\"Function\",proto:!0},{bind:Lt});var Ht=function(t){return k[t+\"Prototype\"]},Wt=Ht(\"Function\").bind,qt=Function.prototype,Vt=function(t){var e=t.bind;return t===qt||t instanceof Function&&e===qt.bind?Wt:e};function Ut(t,e,i,n){t.beginPath(),t.arc(e,i,n,0,2*Math.PI,!1),t.closePath()}function Yt(t,e,i,n,o,r){var s=Math.PI/180;n-2*r<0&&(r=n/2),o-2*r<0&&(r=o/2),t.beginPath(),t.moveTo(e+r,i),t.lineTo(e+n-r,i),t.arc(e+n-r,i+r,r,270*s,360*s,!1),t.lineTo(e+n,i+o-r),t.arc(e+n-r,i+o-r,r,0,90*s,!1),t.lineTo(e+r,i+o),t.arc(e+r,i+o-r,r,90*s,180*s,!1),t.lineTo(e,i+r),t.arc(e+r,i+r,r,180*s,270*s,!1),t.closePath()}function Xt(t,e,i,n,o){var r=.5522848,s=n/2*r,a=o/2*r,h=e+n,l=i+o,d=e+n/2,c=i+o/2;t.beginPath(),t.moveTo(e,c),t.bezierCurveTo(e,c-a,d-s,i,d,i),t.bezierCurveTo(d+s,i,h,c-a,h,c),t.bezierCurveTo(h,c+a,d+s,l,d,l),t.bezierCurveTo(d-s,l,e,c+a,e,c),t.closePath()}function Gt(t,e,i,n,o){var r=o*(1/3),s=.5522848,a=n/2*s,h=r/2*s,l=e+n,d=i+r,c=e+n/2,u=i+r/2,f=i+(o-r/2),p=i+o;t.beginPath(),t.moveTo(l,u),t.bezierCurveTo(l,u+h,c+a,d,c,d),t.bezierCurveTo(c-a,d,e,u+h,e,u),t.bezierCurveTo(e,u-h,c-a,i,c,i),t.bezierCurveTo(c+a,i,l,u-h,l,u),t.lineTo(l,f),t.bezierCurveTo(l,f+h,c+a,p,c,p),t.bezierCurveTo(c-a,p,e,f+h,e,f),t.lineTo(e,u)}function Kt(t,e,i,n,o,r){t.beginPath(),t.moveTo(e,i);for(var s=r.length,a=n-e,h=o-i,l=h/a,d=Math.sqrt(a*a+h*h),c=0,u=!0,f=0,p=+r[0];d>=.1;)(p=+r[c++%s])>d&&(p=d),f=Math.sqrt(p*p/(1+l*l)),e+=f=a<0?-f:f,i+=l*f,!0===u?t.lineTo(e,i):t.moveTo(e,i),d-=p,u=!u}var $t={circle:Ut,dashedLine:Kt,database:Gt,diamond:function(t,e,i,n){t.beginPath(),t.lineTo(e,i+n),t.lineTo(e+n,i),t.lineTo(e,i-n),t.lineTo(e-n,i),t.closePath()},ellipse:Xt,ellipse_vis:Xt,hexagon:function(t,e,i,n){t.beginPath();var o=2*Math.PI/6;t.moveTo(e+n,i);for(var r=1;r<6;r++)t.lineTo(e+n*Math.cos(o*r),i+n*Math.sin(o*r));t.closePath()},roundRect:Yt,square:function(t,e,i,n){t.beginPath(),t.rect(e-n,i-n,2*n,2*n),t.closePath()},star:function(t,e,i,n){t.beginPath(),i+=.1*(n*=.82);for(var o=0;o<10;o++){var r=o%2==0?1.3*n:.5*n;t.lineTo(e+r*Math.sin(2*o*Math.PI/10),i-r*Math.cos(2*o*Math.PI/10))}t.closePath()},triangle:function(t,e,i,n){t.beginPath(),i+=.275*(n*=1.15);var o=2*n,r=o/2,s=Math.sqrt(3)/6*o,a=Math.sqrt(o*o-r*r);t.moveTo(e,i-(a-s)),t.lineTo(e+r,i+s),t.lineTo(e-r,i+s),t.lineTo(e,i-(a-s)),t.closePath()},triangleDown:function(t,e,i,n){t.beginPath(),i-=.275*(n*=1.15);var o=2*n,r=o/2,s=Math.sqrt(3)/6*o,a=Math.sqrt(o*o-r*r);t.moveTo(e,i+(a-s)),t.lineTo(e+r,i-s),t.lineTo(e-r,i-s),t.lineTo(e,i+(a-s)),t.closePath()}};var Zt=n((function(t){function e(t){if(t)return function(t){for(var i in e.prototype)t[i]=e.prototype[i];return t}(t)}t.exports=e,e.prototype.on=e.prototype.addEventListener=function(t,e){return this._callbacks=this._callbacks||{},(this._callbacks[\"$\"+t]=this._callbacks[\"$\"+t]||[]).push(e),this},e.prototype.once=function(t,e){function i(){this.off(t,i),e.apply(this,arguments)}return i.fn=e,this.on(t,i),this},e.prototype.off=e.prototype.removeListener=e.prototype.removeAllListeners=e.prototype.removeEventListener=function(t,e){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var i,n=this._callbacks[\"$\"+t];if(!n)return this;if(1==arguments.length)return delete this._callbacks[\"$\"+t],this;for(var o=0;o<n.length;o++)if((i=n[o])===e||i.fn===e){n.splice(o,1);break}return 0===n.length&&delete this._callbacks[\"$\"+t],this},e.prototype.emit=function(t){this._callbacks=this._callbacks||{};for(var e=new Array(arguments.length-1),i=this._callbacks[\"$\"+t],n=1;n<arguments.length;n++)e[n-1]=arguments[n];if(i){n=0;for(var o=(i=i.slice(0)).length;n<o;++n)i[n].apply(this,e)}return this},e.prototype.listeners=function(t){return this._callbacks=this._callbacks||{},this._callbacks[\"$\"+t]||[]},e.prototype.hasListeners=function(t){return!!this.listeners(t).length}})),Qt=function(t){if(I(t))throw TypeError(\"Cannot convert a Symbol value to a string\");return String(t)},Jt=function(t){return function(e,i){var n,o,r=Qt(m(e)),s=bt(i),a=r.length;return s<0||s>=a?t?\"\":void 0:(n=r.charCodeAt(s))<55296||n>56319||s+1===a||(o=r.charCodeAt(s+1))<56320||o>57343?t?r.charAt(s):n:t?r.slice(s,s+2):o-56320+(n-55296<<10)+65536}},te={codeAt:Jt(!1),charAt:Jt(!0)},ee=Function.toString;\"function\"!=typeof z.inspectSource&&(z.inspectSource=function(t){return ee.call(t)});var ie,ne,oe,re=z.inspectSource,se=a.WeakMap,ae=\"function\"==typeof se&&/native code/.test(re(se)),he=N(\"keys\"),le=function(t){return he[t]||(he[t]=H(t))},de=\"Object already initialized\",ce=a.WeakMap;if(ae||z.state){var ue=z.state||(z.state=new ce),fe=ue.get,pe=ue.has,ve=ue.set;ie=function(t,e){if(pe.call(ue,t))throw new TypeError(de);return e.facade=t,ve.call(ue,t,e),e},ne=function(t){return fe.call(ue,t)||{}},oe=function(t){return pe.call(ue,t)}}else{var ge=le(\"state\");St[ge]=!0,ie=function(t,e){if(j(t,ge))throw new TypeError(de);return e.facade=t,ft(t,ge,e),e},ne=function(t){return j(t,ge)?t[ge]:{}},oe=function(t){return j(t,ge)}}var ye,me,be,we={set:ie,get:ne,has:oe,enforce:function(t){return oe(t)?ne(t):ie(t,{})},getterFor:function(t){return function(e){var i;if(!w(e)||(i=ne(e)).type!==t)throw TypeError(\"Incompatible receiver, \"+t+\" required\");return i}}},ke=!h((function(){function t(){}return t.prototype.constructor=null,Object.getPrototypeOf(new t)!==t.prototype})),_e=le(\"IE_PROTO\"),xe=Object.prototype,Ee=ke?Object.getPrototypeOf:function(t){return t=A(t),j(t,_e)?t[_e]:\"function\"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?xe:null},Oe=U(\"iterator\"),Ce=!1;[].keys&&(\"next\"in(be=[].keys())?(me=Ee(Ee(be)))!==Object.prototype&&(ye=me):Ce=!0);var Se=null==ye||h((function(){var t={};return ye[Oe].call(t)!==t}));Se&&(ye={}),Se&&!j(ye,Oe)&&ft(ye,Oe,(function(){return this}));var Te,Me={IteratorPrototype:ye,BUGGY_SAFARI_ITERATORS:Ce},Pe=l?Object.defineProperties:function(t,e){dt(t);for(var i,n=Dt(e),o=n.length,r=0;o>r;)ut.f(t,i=n[r++],e[i]);return t},De=x(\"document\",\"documentElement\"),Ie=le(\"IE_PROTO\"),Be=function(){},ze=function(t){return\"<script>\"+t+\"</\"+\"script>\"},Ne=function(t){t.write(ze(\"\")),t.close();var e=t.parentWindow.Object;return t=null,e},Ae=function(){try{Te=new ActiveXObject(\"htmlfile\")}catch(t){}Ae=document.domain&&Te?Ne(Te):function(){var t,e=Z(\"iframe\");if(e.style)return e.style.display=\"none\",De.appendChild(e),e.src=String(\"javascript:\"),(t=e.contentWindow.document).open(),t.write(ze(\"document.F=Object\")),t.close(),t.F}()||Ne(Te);for(var t=Pt.length;t--;)delete Ae.prototype[Pt[t]];return Ae()};St[Ie]=!0;var Fe=Object.create||function(t,e){var i;return null!==t?(Be.prototype=dt(t),i=new Be,Be.prototype=null,i[Ie]=t):i=Ae(),void 0===e?i:Pe(i,e)},je={};je[U(\"toStringTag\")]=\"z\";var Re=\"[object z]\"===String(je),Le=U(\"toStringTag\"),He=\"Arguments\"==v(function(){return arguments}()),We=Re?v:function(t){var e,i,n;return void 0===t?\"Undefined\":null===t?\"Null\":\"string\"==typeof(i=function(t,e){try{return t[e]}catch(t){}}(e=Object(t),Le))?i:He?v(e):\"Object\"==(n=v(e))&&\"function\"==typeof e.callee?\"Arguments\":n},qe=Re?{}.toString:function(){return\"[object \"+We(this)+\"]\"},Ve=ut.f,Ue=U(\"toStringTag\"),Ye=function(t,e,i,n){if(t){var o=i?t:t.prototype;j(o,Ue)||Ve(o,Ue,{configurable:!0,value:e}),n&&!Re&&ft(o,\"toString\",qe)}},Xe={},Ge=Me.IteratorPrototype,Ke=function(){return this},$e=Object.setPrototypeOf||(\"__proto__\"in{}?function(){var t,e=!1,i={};try{(t=Object.getOwnPropertyDescriptor(Object.prototype,\"__proto__\").set).call(i,[]),e=i instanceof Array}catch(t){}return function(i,n){return dt(i),function(t){if(!w(t)&&null!==t)throw TypeError(\"Can't set \"+String(t)+\" as a prototype\")}(n),e?t.call(i,n):i.__proto__=n,i}}():void 0),Ze=function(t,e,i,n){n&&n.enumerable?t[e]=i:ft(t,e,i)},Qe=Me.IteratorPrototype,Je=Me.BUGGY_SAFARI_ITERATORS,ti=U(\"iterator\"),ei=\"keys\",ii=\"values\",ni=\"entries\",oi=function(){return this},ri=function(t,e,i,n,o,r,s){!function(t,e,i){var n=e+\" Iterator\";t.prototype=Fe(Ge,{next:f(1,i)}),Ye(t,n,!1,!0),Xe[n]=Ke}(i,e,n);var a,h,l,d=function(t){if(t===o&&g)return g;if(!Je&&t in p)return p[t];switch(t){case ei:case ii:case ni:return function(){return new i(this,t)}}return function(){return new i(this)}},c=e+\" Iterator\",u=!1,p=t.prototype,v=p[ti]||p[\"@@iterator\"]||o&&p[o],g=!Je&&v||d(o),y=\"Array\"==e&&p.entries||v;if(y&&(a=Ee(y.call(new t)),Qe!==Object.prototype&&a.next&&(Ye(a,c,!0,!0),Xe[c]=oi)),o==ii&&v&&v.name!==ii&&(u=!0,g=function(){return v.call(this)}),s&&p[ti]!==g&&ft(p,ti,g),Xe[e]=g,o)if(h={values:d(ii),keys:r?g:d(ei),entries:d(ni)},s)for(l in h)(Je||u||!(l in p))&&Ze(p,l,h[l]);else gt({target:e,proto:!0,forced:Je||u},h);return h},si=te.charAt,ai=\"String Iterator\",hi=we.set,li=we.getterFor(ai);ri(String,\"String\",(function(t){hi(this,{type:ai,string:Qt(t),index:0})}),(function(){var t,e=li(this),i=e.string,n=e.index;return n>=i.length?{value:void 0,done:!0}:(t=si(i,n),e.index+=t.length,{value:t,done:!1})}));var di=function(t){var e=t.return;if(void 0!==e)return dt(e.call(t)).value},ci=function(t,e,i,n){try{return n?e(dt(i)[0],i[1]):e(i)}catch(e){throw di(t),e}},ui=U(\"iterator\"),fi=Array.prototype,pi=function(t){return void 0!==t&&(Xe.Array===t||fi[ui]===t)},vi=function(t,e,i){var n=G(e);n in t?ut.f(t,n,f(0,i)):t[n]=i},gi=U(\"iterator\"),yi=function(t){if(null!=t)return t[gi]||t[\"@@iterator\"]||Xe[We(t)]},mi=U(\"iterator\"),bi=!1;try{var wi=0,ki={next:function(){return{done:!!wi++}},return:function(){bi=!0}};ki[mi]=function(){return this},Array.from(ki,(function(){throw 2}))}catch(t){}var _i=!function(t,e){if(!e&&!bi)return!1;var i=!1;try{var n={};n[mi]=function(){return{next:function(){return{done:i=!0}}}},t(n)}catch(t){}return i}((function(t){Array.from(t)}));gt({target:\"Array\",stat:!0,forced:_i},{from:function(t){var e,i,n,o,r,s,a=A(t),h=\"function\"==typeof this?this:Array,l=arguments.length,d=l>1?arguments[1]:void 0,c=void 0!==d,u=yi(a),f=0;if(c&&(d=lt(d,l>2?arguments[2]:void 0,2)),null==u||h==Array&&pi(u))for(i=new h(e=kt(a.length));e>f;f++)s=c?d(a[f],f):a[f],vi(i,f,s);else for(r=(o=u.call(a)).next,i=new h;!(n=r.call(o)).done;f++)s=c?ci(o,d,[n.value,f],!0):n.value,vi(i,f,s);return i.length=f,i}});var xi=k.Array.from,Ei=xi,Oi=\"Array Iterator\",Ci=we.set,Si=we.getterFor(Oi);ri(Array,\"Array\",(function(t,e){Ci(this,{type:Oi,target:b(t),index:0,kind:e})}),(function(){var t=Si(this),e=t.target,i=t.kind,n=t.index++;return!e||n>=e.length?(t.target=void 0,{value:void 0,done:!0}):\"keys\"==i?{value:n,done:!1}:\"values\"==i?{value:e[n],done:!1}:{value:[n,e[n]],done:!1}}),\"values\"),Xe.Arguments=Xe.Array;var Ti=yi,Mi=U(\"toStringTag\");for(var Pi in{CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}){var Di=a[Pi],Ii=Di&&Di.prototype;Ii&&We(Ii)!==Mi&&ft(Ii,Mi,Pi),Xe[Pi]=Xe.Array}var Bi=Ti,zi=Array.isArray||function(t){return\"Array\"==v(t)},Ni=Pt.concat(\"length\",\"prototype\"),Ai={f:Object.getOwnPropertyNames||function(t){return Mt(t,Ni)}},Fi=Ai.f,ji={}.toString,Ri=\"object\"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],Li={f:function(t){return Ri&&\"[object Window]\"==ji.call(t)?function(t){try{return Fi(t)}catch(t){return Ri.slice()}}(t):Fi(b(t))}},Hi={f:U},Wi=ut.f,qi=function(t){var e=k.Symbol||(k.Symbol={});j(e,t)||Wi(e,t,{value:Hi.f(t)})},Vi=U(\"species\"),Ui=function(t,e){return new(function(t){var e;return zi(t)&&(\"function\"!=typeof(e=t.constructor)||e!==Array&&!zi(e.prototype)?w(e)&&null===(e=e[Vi])&&(e=void 0):e=void 0),void 0===e?Array:e}(t))(0===e?0:e)},Yi=[].push,Xi=function(t){var e=1==t,i=2==t,n=3==t,o=4==t,r=6==t,s=7==t,a=5==t||r;return function(h,l,d,c){for(var u,f,p=A(h),v=y(p),g=lt(l,d,3),m=kt(v.length),b=0,w=c||Ui,k=e?w(h,m):i||s?w(h,0):void 0;m>b;b++)if((a||b in v)&&(f=g(u=v[b],b,p),t))if(e)k[b]=f;else if(f)switch(t){case 3:return!0;case 5:return u;case 6:return b;case 2:Yi.call(k,u)}else switch(t){case 4:return!1;case 7:Yi.call(k,u)}return r?-1:n||o?o:k}},Gi={forEach:Xi(0),map:Xi(1),filter:Xi(2),some:Xi(3),every:Xi(4),find:Xi(5),findIndex:Xi(6),filterReject:Xi(7)},Ki=Gi.forEach,$i=le(\"hidden\"),Zi=\"Symbol\",Qi=U(\"toPrimitive\"),Ji=we.set,tn=we.getterFor(Zi),en=Object.prototype,nn=a.Symbol,on=x(\"JSON\",\"stringify\"),rn=tt.f,sn=ut.f,an=Li.f,hn=u.f,ln=N(\"symbols\"),dn=N(\"op-symbols\"),cn=N(\"string-to-symbol-registry\"),un=N(\"symbol-to-string-registry\"),fn=N(\"wks\"),pn=a.QObject,vn=!pn||!pn.prototype||!pn.prototype.findChild,gn=l&&h((function(){return 7!=Fe(sn({},\"a\",{get:function(){return sn(this,\"a\",{value:7}).a}})).a}))?function(t,e,i){var n=rn(en,e);n&&delete en[e],sn(t,e,i),n&&t!==en&&sn(en,e,n)}:sn,yn=function(t,e){var i=ln[t]=Fe(nn.prototype);return Ji(i,{type:Zi,tag:t,description:e}),l||(i.description=e),i},mn=function(t,e,i){t===en&&mn(dn,e,i),dt(t);var n=G(e);return dt(i),j(ln,n)?(i.enumerable?(j(t,$i)&&t[$i][n]&&(t[$i][n]=!1),i=Fe(i,{enumerable:f(0,!1)})):(j(t,$i)||sn(t,$i,f(1,{})),t[$i][n]=!0),gn(t,n,i)):sn(t,n,i)},bn=function(t,e){dt(t);var i=b(e),n=Dt(i).concat(xn(i));return Ki(n,(function(e){l&&!wn.call(i,e)||mn(t,e,i[e])})),t},wn=function(t){var e=G(t),i=hn.call(this,e);return!(this===en&&j(ln,e)&&!j(dn,e))&&(!(i||!j(this,e)||!j(ln,e)||j(this,$i)&&this[$i][e])||i)},kn=function(t,e){var i=b(t),n=G(e);if(i!==en||!j(ln,n)||j(dn,n)){var o=rn(i,n);return!o||!j(ln,n)||j(i,$i)&&i[$i][n]||(o.enumerable=!0),o}},_n=function(t){var e=an(b(t)),i=[];return Ki(e,(function(t){j(ln,t)||j(St,t)||i.push(t)})),i},xn=function(t){var e=t===en,i=an(e?dn:b(t)),n=[];return Ki(i,(function(t){!j(ln,t)||e&&!j(en,t)||n.push(ln[t])})),n};if(P||(Ze((nn=function(){if(this instanceof nn)throw TypeError(\"Symbol is not a constructor\");var t=arguments.length&&void 0!==arguments[0]?Qt(arguments[0]):void 0,e=H(t),i=function(t){this===en&&i.call(dn,t),j(this,$i)&&j(this[$i],e)&&(this[$i][e]=!1),gn(this,e,f(1,t))};return l&&vn&&gn(en,e,{configurable:!0,set:i}),yn(e,t)}).prototype,\"toString\",(function(){return tn(this).tag})),Ze(nn,\"withoutSetter\",(function(t){return yn(H(t),t)})),u.f=wn,ut.f=mn,tt.f=kn,Ai.f=Li.f=_n,It.f=xn,Hi.f=function(t){return yn(U(t),t)},l&&sn(nn.prototype,\"description\",{configurable:!0,get:function(){return tn(this).description}})),gt({global:!0,wrap:!0,forced:!P,sham:!P},{Symbol:nn}),Ki(Dt(fn),(function(t){qi(t)})),gt({target:Zi,stat:!0,forced:!P},{for:function(t){var e=Qt(t);if(j(cn,e))return cn[e];var i=nn(e);return cn[e]=i,un[i]=e,i},keyFor:function(t){if(!I(t))throw TypeError(t+\" is not a symbol\");if(j(un,t))return un[t]},useSetter:function(){vn=!0},useSimple:function(){vn=!1}}),gt({target:\"Object\",stat:!0,forced:!P,sham:!l},{create:function(t,e){return void 0===e?Fe(t):bn(Fe(t),e)},defineProperty:mn,defineProperties:bn,getOwnPropertyDescriptor:kn}),gt({target:\"Object\",stat:!0,forced:!P},{getOwnPropertyNames:_n,getOwnPropertySymbols:xn}),gt({target:\"Object\",stat:!0,forced:h((function(){It.f(1)}))},{getOwnPropertySymbols:function(t){return It.f(A(t))}}),on){var En=!P||h((function(){var t=nn();return\"[null]\"!=on([t])||\"{}\"!=on({a:t})||\"{}\"!=on(Object(t))}));gt({target:\"JSON\",stat:!0,forced:En},{stringify:function(t,e,i){for(var n,o=[t],r=1;arguments.length>r;)o.push(arguments[r++]);if(n=e,(w(e)||void 0!==t)&&!I(t))return zi(e)||(e=function(t,e){if(\"function\"==typeof n&&(e=n.call(this,t,e)),!I(e))return e}),o[1]=e,on.apply(null,o)}})}nn.prototype[Qi]||ft(nn.prototype,Qi,nn.prototype.valueOf),Ye(nn,Zi),St[$i]=!0;var On=k.Object.getOwnPropertySymbols,Cn=tt.f,Sn=h((function(){Cn(1)}));gt({target:\"Object\",stat:!0,forced:!l||Sn,sham:!l},{getOwnPropertyDescriptor:function(t,e){return Cn(b(t),e)}});var Tn=n((function(t){var e=k.Object,i=t.exports=function(t,i){return e.getOwnPropertyDescriptor(t,i)};e.getOwnPropertyDescriptor.sham&&(i.sham=!0)})),Mn=Tn,Pn=x(\"Reflect\",\"ownKeys\")||function(t){var e=Ai.f(dt(t)),i=It.f;return i?e.concat(i(t)):e};gt({target:\"Object\",stat:!0,sham:!l},{getOwnPropertyDescriptors:function(t){for(var e,i,n=b(t),o=tt.f,r=Pn(n),s={},a=0;r.length>a;)void 0!==(i=o(n,e=r[a++]))&&vi(s,e,i);return s}});var Dn=k.Object.getOwnPropertyDescriptors;gt({target:\"Object\",stat:!0,forced:!l,sham:!l},{defineProperties:Pe});var In=n((function(t){var e=k.Object,i=t.exports=function(t,i){return e.defineProperties(t,i)};e.defineProperties.sham&&(i.sham=!0)}));gt({target:\"Object\",stat:!0,forced:!l,sham:!l},{defineProperty:ut.f});var Bn=n((function(t){var e=k.Object,i=t.exports=function(t,i,n){return e.defineProperty(t,i,n)};e.defineProperty.sham&&(i.sham=!0)})),zn=Bn,Nn=i(n((function(t){t.exports=function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")},t.exports.default=t.exports,t.exports.__esModule=!0}))),An=Bn,Fn=i(n((function(t){function e(t,e){for(var i=0;i<e.length;i++){var n=e[i];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),An(t,n.key,n)}}t.exports=function(t,i,n){return i&&e(t.prototype,i),n&&e(t,n),t},t.exports.default=t.exports,t.exports.__esModule=!0}))),jn=i(n((function(t){t.exports=function(t,e,i){return e in t?An(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[e]=i,t},t.exports.default=t.exports,t.exports.__esModule=!0})));gt({target:\"Array\",stat:!0},{isArray:zi});var Rn=k.Array.isArray,Ln=Rn,Hn=n((function(t){t.exports=function(t){if(Ln(t))return t},t.exports.default=t.exports,t.exports.__esModule=!0}));i(Hn);var Wn=U(\"species\"),qn=function(t){return M>=51||!h((function(){var e=[];return(e.constructor={})[Wn]=function(){return{foo:1}},1!==e[t](Boolean).foo}))},Vn=U(\"isConcatSpreadable\"),Un=9007199254740991,Yn=\"Maximum allowed index exceeded\",Xn=M>=51||!h((function(){var t=[];return t[Vn]=!1,t.concat()[0]!==t})),Gn=qn(\"concat\"),Kn=function(t){if(!w(t))return!1;var e=t[Vn];return void 0!==e?!!e:zi(t)};gt({target:\"Array\",proto:!0,forced:!Xn||!Gn},{concat:function(t){var e,i,n,o,r,s=A(this),a=Ui(s,0),h=0;for(e=-1,n=arguments.length;e<n;e++)if(Kn(r=-1===e?s:arguments[e])){if(h+(o=kt(r.length))>Un)throw TypeError(Yn);for(i=0;i<o;i++,h++)i in r&&vi(a,h,r[i])}else{if(h>=Un)throw TypeError(Yn);vi(a,h++,r)}return a.length=h,a}}),qi(\"asyncIterator\"),qi(\"hasInstance\"),qi(\"isConcatSpreadable\"),qi(\"iterator\"),qi(\"match\"),qi(\"matchAll\"),qi(\"replace\"),qi(\"search\"),qi(\"species\"),qi(\"split\"),qi(\"toPrimitive\"),qi(\"toStringTag\"),qi(\"unscopables\"),Ye(a.JSON,\"JSON\",!0);var $n=k.Symbol;qi(\"asyncDispose\"),qi(\"dispose\"),qi(\"matcher\"),qi(\"metadata\"),qi(\"observable\"),qi(\"patternMatch\"),qi(\"replaceAll\");var Zn=$n,Qn=n((function(t){t.exports=function(t,e){var i=null==t?null:void 0!==Zn&&Bi(t)||t[\"@@iterator\"];if(null!=i){var n,o,r=[],s=!0,a=!1;try{for(i=i.call(t);!(s=(n=i.next()).done)&&(r.push(n.value),!e||r.length!==e);s=!0);}catch(t){a=!0,o=t}finally{try{s||null==i.return||i.return()}finally{if(a)throw o}}return r}},t.exports.default=t.exports,t.exports.__esModule=!0}));i(Qn);var Jn=qn(\"slice\"),to=U(\"species\"),eo=[].slice,io=Math.max;gt({target:\"Array\",proto:!0,forced:!Jn},{slice:function(t,e){var i,n,o,r=b(this),s=kt(r.length),a=Et(t,s),h=Et(void 0===e?s:e,s);if(zi(r)&&(\"function\"!=typeof(i=r.constructor)||i!==Array&&!zi(i.prototype)?w(i)&&null===(i=i[to])&&(i=void 0):i=void 0,i===Array||void 0===i))return eo.call(r,a,h);for(n=new(void 0===i?Array:i)(io(h-a,0)),o=0;a<h;a++,o++)a in r&&vi(n,o,r[a]);return n.length=o,n}});var no=Ht(\"Array\").slice,oo=Array.prototype,ro=function(t){var e=t.slice;return t===oo||t instanceof Array&&e===oo.slice?no:e},so=ro,ao=xi,ho=n((function(t){t.exports=function(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n},t.exports.default=t.exports,t.exports.__esModule=!0}));i(ho);var lo=n((function(t){t.exports=function(t,e){var i;if(t){if(\"string\"==typeof t)return ho(t,e);var n=so(i=Object.prototype.toString.call(t)).call(i,8,-1);return\"Object\"===n&&t.constructor&&(n=t.constructor.name),\"Map\"===n||\"Set\"===n?ao(t):\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?ho(t,e):void 0}},t.exports.default=t.exports,t.exports.__esModule=!0}));i(lo);var co=n((function(t){t.exports=function(){throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")},t.exports.default=t.exports,t.exports.__esModule=!0}));i(co);var uo=i(n((function(t){t.exports=function(t,e){return Hn(t)||Qn(t,e)||lo(t,e)||co()},t.exports.default=t.exports,t.exports.__esModule=!0}))),fo=Hi.f(\"iterator\"),po=fo,vo=n((function(t){function e(i){return\"function\"==typeof Zn&&\"symbol\"==typeof po?(t.exports=e=function(t){return typeof t},t.exports.default=t.exports,t.exports.__esModule=!0):(t.exports=e=function(t){return t&&\"function\"==typeof Zn&&t.constructor===Zn&&t!==Zn.prototype?\"symbol\":typeof t},t.exports.default=t.exports,t.exports.__esModule=!0),e(i)}t.exports=e,t.exports.default=t.exports,t.exports.__esModule=!0})),go=i(vo),yo=n((function(t){t.exports=function(t){if(Ln(t))return ho(t)},t.exports.default=t.exports,t.exports.__esModule=!0}));i(yo);var mo=n((function(t){t.exports=function(t){if(void 0!==Zn&&null!=Bi(t)||null!=t[\"@@iterator\"])return ao(t)},t.exports.default=t.exports,t.exports.__esModule=!0}));i(mo);var bo=n((function(t){t.exports=function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")},t.exports.default=t.exports,t.exports.__esModule=!0}));i(bo);var wo=i(n((function(t){t.exports=function(t){return yo(t)||mo(t)||lo(t)||bo()},t.exports.default=t.exports,t.exports.__esModule=!0}))),ko=$n,_o=Ht(\"Array\").concat,xo=Array.prototype,Eo=function(t){var e=t.concat;return t===xo||t instanceof Array&&e===xo.concat?_o:e},Oo=ro;gt({target:\"Reflect\",stat:!0},{ownKeys:Pn});var Co=k.Reflect.ownKeys,So=Rn,To=Gi.map,Mo=qn(\"map\");gt({target:\"Array\",proto:!0,forced:!Mo},{map:function(t){return To(this,t,arguments.length>1?arguments[1]:void 0)}});var Po=Ht(\"Array\").map,Do=Array.prototype,Io=function(t){var e=t.map;return t===Do||t instanceof Array&&e===Do.map?Po:e},Bo=h((function(){Dt(1)}));gt({target:\"Object\",stat:!0,forced:Bo},{keys:function(t){return Dt(A(t))}});var zo=k.Object.keys;gt({target:\"Date\",stat:!0},{now:function(){return(new Date).getTime()}});var No=k.Date.now,Ao=function(t,e){var i=[][t];return!!i&&h((function(){i.call(null,e||function(){throw 1},1)}))},Fo=Gi.forEach,jo=Ao(\"forEach\")?[].forEach:function(t){return Fo(this,t,arguments.length>1?arguments[1]:void 0)};gt({target:\"Array\",proto:!0,forced:[].forEach!=jo},{forEach:jo});var Ro=Ht(\"Array\").forEach,Lo=Array.prototype,Ho={DOMTokenList:!0,NodeList:!0},Wo=function(t){var e=t.forEach;return t===Lo||t instanceof Array&&e===Lo.forEach||Ho.hasOwnProperty(We(t))?Ro:e},qo=[].reverse,Vo=[1,2];gt({target:\"Array\",proto:!0,forced:String(Vo)===String(Vo.reverse())},{reverse:function(){return zi(this)&&(this.length=this.length),qo.call(this)}});var Uo=Ht(\"Array\").reverse,Yo=Array.prototype,Xo=function(t){var e=t.reverse;return t===Yo||t instanceof Array&&e===Yo.reverse?Uo:e},Go=qn(\"splice\"),Ko=Math.max,$o=Math.min,Zo=9007199254740991,Qo=\"Maximum allowed length exceeded\";gt({target:\"Array\",proto:!0,forced:!Go},{splice:function(t,e){var i,n,o,r,s,a,h=A(this),l=kt(h.length),d=Et(t,l),c=arguments.length;if(0===c?i=n=0:1===c?(i=0,n=l-d):(i=c-2,n=$o(Ko(bt(e),0),l-d)),l+i-n>Zo)throw TypeError(Qo);for(o=Ui(h,n),r=0;r<n;r++)(s=d+r)in h&&vi(o,r,h[s]);if(o.length=n,i<n){for(r=d;r<l-n;r++)a=r+i,(s=r+n)in h?h[a]=h[s]:delete h[a];for(r=l;r>l-n+i;r--)delete h[r-1]}else if(i>n)for(r=l-n;r>d;r--)a=r+i-1,(s=r+n-1)in h?h[a]=h[s]:delete h[a];for(r=0;r<i;r++)h[r+d]=arguments[r+2];return h.length=l-n+i,o}});var Jo=Ht(\"Array\").splice,tr=Array.prototype,er=function(t){var e=t.splice;return t===tr||t instanceof Array&&e===tr.splice?Jo:e},ir=Ct.includes;gt({target:\"Array\",proto:!0},{includes:function(t){return ir(this,t,arguments.length>1?arguments[1]:void 0)}});var nr=Ht(\"Array\").includes,or=U(\"match\"),rr=function(t){if(function(t){var e;return w(t)&&(void 0!==(e=t[or])?!!e:\"RegExp\"==v(t))}(t))throw TypeError(\"The method doesn't accept regular expressions\");return t},sr=U(\"match\");gt({target:\"String\",proto:!0,forced:!function(t){var e=/./;try{\"/./\"[t](e)}catch(i){try{return e[sr]=!1,\"/./\"[t](e)}catch(t){}}return!1}(\"includes\")},{includes:function(t){return!!~Qt(m(this)).indexOf(Qt(rr(t)),arguments.length>1?arguments[1]:void 0)}});var ar=Ht(\"String\").includes,hr=Array.prototype,lr=String.prototype,dr=function(t){var e=t.includes;return t===hr||t instanceof Array&&e===hr.includes?nr:\"string\"==typeof t||t===lr||t instanceof String&&e===lr.includes?ar:e},cr=h((function(){Ee(1)}));gt({target:\"Object\",stat:!0,forced:cr,sham:!ke},{getPrototypeOf:function(t){return Ee(A(t))}});var ur=k.Object.getPrototypeOf,fr=ur,pr=Gi.filter,vr=qn(\"filter\");gt({target:\"Array\",proto:!0,forced:!vr},{filter:function(t){return pr(this,t,arguments.length>1?arguments[1]:void 0)}});var gr=Ht(\"Array\").filter,yr=Array.prototype,mr=function(t){var e=t.filter;return t===yr||t instanceof Array&&e===yr.filter?gr:e},br=u.f,wr=function(t){return function(e){for(var i,n=b(e),o=Dt(n),r=o.length,s=0,a=[];r>s;)i=o[s++],l&&!br.call(n,i)||a.push(t?[i,n[i]]:n[i]);return a}},kr={entries:wr(!0),values:wr(!1)}.values;gt({target:\"Object\",stat:!0},{values:function(t){return kr(t)}});var _r=k.Object.values,xr=\"\\t\\n\\v\\f\\r                　\\u2028\\u2029\\ufeff\",Er=\"[\"+xr+\"]\",Or=RegExp(\"^\"+Er+Er+\"*\"),Cr=RegExp(Er+Er+\"*$\"),Sr=function(t){return function(e){var i=Qt(m(e));return 1&t&&(i=i.replace(Or,\"\")),2&t&&(i=i.replace(Cr,\"\")),i}},Tr={start:Sr(1),end:Sr(2),trim:Sr(3)},Mr=Tr.trim,Pr=a.parseInt,Dr=/^[+-]?0[Xx]/,Ir=8!==Pr(xr+\"08\")||22!==Pr(xr+\"0x16\")?function(t,e){var i=Mr(Qt(t));return Pr(i,e>>>0||(Dr.test(i)?16:10))}:Pr;gt({global:!0,forced:parseInt!=Ir},{parseInt:Ir});var Br=k.parseInt,zr=Ct.indexOf,Nr=[].indexOf,Ar=!!Nr&&1/[1].indexOf(1,-0)<0,Fr=Ao(\"indexOf\");gt({target:\"Array\",proto:!0,forced:Ar||!Fr},{indexOf:function(t){return Ar?Nr.apply(this,arguments)||0:zr(this,t,arguments.length>1?arguments[1]:void 0)}});var jr,Rr=Ht(\"Array\").indexOf,Lr=Array.prototype,Hr=function(t){var e=t.indexOf;return t===Lr||t instanceof Array&&e===Lr.indexOf?Rr:e},Wr=Tr.trim;gt({target:\"String\",proto:!0,forced:(jr=\"trim\",h((function(){return!!xr[jr]()||\"​\\n᠎\"!=\"​\\n᠎\"[jr]()||xr[jr].name!==jr})))},{trim:function(){return Wr(this)}});var qr=Ht(\"String\").trim,Vr=String.prototype,Ur=function(t){var e=t.trim;return\"string\"==typeof t||t===Vr||t instanceof String&&e===Vr.trim?qr:e};gt({target:\"Object\",stat:!0,sham:!l},{create:Fe});var Yr=k.Object,Xr=function(t,e){return Yr.create(t,e)},Gr=Xr,Kr=x(\"JSON\",\"stringify\"),$r=/[\\uD800-\\uDFFF]/g,Zr=/^[\\uD800-\\uDBFF]$/,Qr=/^[\\uDC00-\\uDFFF]$/,Jr=function(t,e,i){var n=i.charAt(e-1),o=i.charAt(e+1);return Zr.test(t)&&!Qr.test(o)||Qr.test(t)&&!Zr.test(n)?\"\\\\u\"+t.charCodeAt(0).toString(16):t},ts=h((function(){return'\"\\\\udf06\\\\ud834\"'!==Kr(\"\\udf06\\ud834\")||'\"\\\\udead\"'!==Kr(\"\\udead\")}));Kr&&gt({target:\"JSON\",stat:!0,forced:ts},{stringify:function(t,e,i){var n=Kr.apply(null,arguments);return\"string\"==typeof n?n.replace($r,Jr):n}}),k.JSON||(k.JSON={stringify:JSON.stringify});var es=function(t,e,i){return k.JSON.stringify.apply(null,arguments)},is=[].slice,ns=/MSIE .\\./.test(E),os=function(t){return function(e,i){var n=arguments.length>2,o=n?is.call(arguments,2):void 0;return t(n?function(){(\"function\"==typeof e?e:Function(e)).apply(this,o)}:e,i)}};gt({global:!0,bind:!0,forced:ns},{setTimeout:os(a.setTimeout),setInterval:os(a.setInterval)});var rs=k.setTimeout;gt({target:\"Array\",proto:!0},{fill:function(t){for(var e=A(this),i=kt(e.length),n=arguments.length,o=Et(n>1?arguments[1]:void 0,i),r=n>2?arguments[2]:void 0,s=void 0===r?i:Et(r,i);s>o;)e[o++]=t;return e}});var ss=Ht(\"Array\").fill,as=Array.prototype,hs=function(t){var e=t.fill;return t===as||t instanceof Array&&e===as.fill?ss:e};function ls(){return(ls=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var i=arguments[e];for(var n in i)Object.prototype.hasOwnProperty.call(i,n)&&(t[n]=i[n])}return t}).apply(this,arguments)}function ds(t,e){t.prototype=Object.create(e.prototype),t.prototype.constructor=t,t.__proto__=e}function cs(t){if(void 0===t)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return t}var us,fs=\"function\"!=typeof Object.assign?function(t){if(null==t)throw new TypeError(\"Cannot convert undefined or null to object\");for(var e=Object(t),i=1;i<arguments.length;i++){var n=arguments[i];if(null!=n)for(var o in n)n.hasOwnProperty(o)&&(e[o]=n[o])}return e}:Object.assign,ps=[\"\",\"webkit\",\"Moz\",\"MS\",\"ms\",\"o\"],vs=\"undefined\"==typeof document?{style:{}}:document.createElement(\"div\"),gs=Math.round,ys=Math.abs,ms=Date.now;function bs(t,e){for(var i,n,o=e[0].toUpperCase()+e.slice(1),r=0;r<ps.length;){if((n=(i=ps[r])?i+o:e)in t)return n;r++}}us=\"undefined\"==typeof window?{}:window;var ws=bs(vs.style,\"touchAction\"),ks=void 0!==ws;var _s=\"compute\",xs=\"auto\",Es=\"manipulation\",Os=\"none\",Cs=\"pan-x\",Ss=\"pan-y\",Ts=function(){if(!ks)return!1;var t={},e=us.CSS&&us.CSS.supports;return[\"auto\",\"manipulation\",\"pan-y\",\"pan-x\",\"pan-x pan-y\",\"none\"].forEach((function(i){return t[i]=!e||us.CSS.supports(\"touch-action\",i)})),t}(),Ms=\"ontouchstart\"in us,Ps=void 0!==bs(us,\"PointerEvent\"),Ds=Ms&&/mobile|tablet|ip(ad|hone|od)|android/i.test(navigator.userAgent),Is=\"touch\",Bs=\"mouse\",zs=16,Ns=24,As=[\"x\",\"y\"],Fs=[\"clientX\",\"clientY\"];function js(t,e,i){var n;if(t)if(t.forEach)t.forEach(e,i);else if(void 0!==t.length)for(n=0;n<t.length;)e.call(i,t[n],n,t),n++;else for(n in t)t.hasOwnProperty(n)&&e.call(i,t[n],n,t)}function Rs(t,e){return\"function\"==typeof t?t.apply(e&&e[0]||void 0,e):t}function Ls(t,e){return t.indexOf(e)>-1}var Hs=function(){function t(t,e){this.manager=t,this.set(e)}var e=t.prototype;return e.set=function(t){t===_s&&(t=this.compute()),ks&&this.manager.element.style&&Ts[t]&&(this.manager.element.style[ws]=t),this.actions=t.toLowerCase().trim()},e.update=function(){this.set(this.manager.options.touchAction)},e.compute=function(){var t=[];return js(this.manager.recognizers,(function(e){Rs(e.options.enable,[e])&&(t=t.concat(e.getTouchAction()))})),function(t){if(Ls(t,Os))return Os;var e=Ls(t,Cs),i=Ls(t,Ss);return e&&i?Os:e||i?e?Cs:Ss:Ls(t,Es)?Es:xs}(t.join(\" \"))},e.preventDefaults=function(t){var e=t.srcEvent,i=t.offsetDirection;if(this.manager.session.prevented)e.preventDefault();else{var n=this.actions,o=Ls(n,Os)&&!Ts.none,r=Ls(n,Ss)&&!Ts[\"pan-y\"],s=Ls(n,Cs)&&!Ts[\"pan-x\"];if(o){var a=1===t.pointers.length,h=t.distance<2,l=t.deltaTime<250;if(a&&h&&l)return}if(!s||!r)return o||r&&6&i||s&&i&Ns?this.preventSrc(e):void 0}},e.preventSrc=function(t){this.manager.session.prevented=!0,t.preventDefault()},t}();function Ws(t,e){for(;t;){if(t===e)return!0;t=t.parentNode}return!1}function qs(t){var e=t.length;if(1===e)return{x:gs(t[0].clientX),y:gs(t[0].clientY)};for(var i=0,n=0,o=0;o<e;)i+=t[o].clientX,n+=t[o].clientY,o++;return{x:gs(i/e),y:gs(n/e)}}function Vs(t){for(var e=[],i=0;i<t.pointers.length;)e[i]={clientX:gs(t.pointers[i].clientX),clientY:gs(t.pointers[i].clientY)},i++;return{timeStamp:ms(),pointers:e,center:qs(e),deltaX:t.deltaX,deltaY:t.deltaY}}function Us(t,e,i){i||(i=As);var n=e[i[0]]-t[i[0]],o=e[i[1]]-t[i[1]];return Math.sqrt(n*n+o*o)}function Ys(t,e,i){i||(i=As);var n=e[i[0]]-t[i[0]],o=e[i[1]]-t[i[1]];return 180*Math.atan2(o,n)/Math.PI}function Xs(t,e){return t===e?1:ys(t)>=ys(e)?t<0?2:4:e<0?8:zs}function Gs(t,e,i){return{x:e/t||0,y:i/t||0}}function Ks(t,e){var i=t.session,n=e.pointers,o=n.length;i.firstInput||(i.firstInput=Vs(e)),o>1&&!i.firstMultiple?i.firstMultiple=Vs(e):1===o&&(i.firstMultiple=!1);var r=i.firstInput,s=i.firstMultiple,a=s?s.center:r.center,h=e.center=qs(n);e.timeStamp=ms(),e.deltaTime=e.timeStamp-r.timeStamp,e.angle=Ys(a,h),e.distance=Us(a,h),function(t,e){var i=e.center,n=t.offsetDelta||{},o=t.prevDelta||{},r=t.prevInput||{};1!==e.eventType&&4!==r.eventType||(o=t.prevDelta={x:r.deltaX||0,y:r.deltaY||0},n=t.offsetDelta={x:i.x,y:i.y}),e.deltaX=o.x+(i.x-n.x),e.deltaY=o.y+(i.y-n.y)}(i,e),e.offsetDirection=Xs(e.deltaX,e.deltaY);var l,d,c=Gs(e.deltaTime,e.deltaX,e.deltaY);e.overallVelocityX=c.x,e.overallVelocityY=c.y,e.overallVelocity=ys(c.x)>ys(c.y)?c.x:c.y,e.scale=s?(l=s.pointers,Us((d=n)[0],d[1],Fs)/Us(l[0],l[1],Fs)):1,e.rotation=s?function(t,e){return Ys(e[1],e[0],Fs)+Ys(t[1],t[0],Fs)}(s.pointers,n):0,e.maxPointers=i.prevInput?e.pointers.length>i.prevInput.maxPointers?e.pointers.length:i.prevInput.maxPointers:e.pointers.length,function(t,e){var i,n,o,r,s=t.lastInterval||e,a=e.timeStamp-s.timeStamp;if(8!==e.eventType&&(a>25||void 0===s.velocity)){var h=e.deltaX-s.deltaX,l=e.deltaY-s.deltaY,d=Gs(a,h,l);n=d.x,o=d.y,i=ys(d.x)>ys(d.y)?d.x:d.y,r=Xs(h,l),t.lastInterval=e}else i=s.velocity,n=s.velocityX,o=s.velocityY,r=s.direction;e.velocity=i,e.velocityX=n,e.velocityY=o,e.direction=r}(i,e);var u,f=t.element,p=e.srcEvent;Ws(u=p.composedPath?p.composedPath()[0]:p.path?p.path[0]:p.target,f)&&(f=u),e.target=f}function $s(t,e,i){var n=i.pointers.length,o=i.changedPointers.length,r=1&e&&n-o==0,s=12&e&&n-o==0;i.isFirst=!!r,i.isFinal=!!s,r&&(t.session={}),i.eventType=e,Ks(t,i),t.emit(\"hammer.input\",i),t.recognize(i),t.session.prevInput=i}function Zs(t){return t.trim().split(/\\s+/g)}function Qs(t,e,i){js(Zs(e),(function(e){t.addEventListener(e,i,!1)}))}function Js(t,e,i){js(Zs(e),(function(e){t.removeEventListener(e,i,!1)}))}function ta(t){var e=t.ownerDocument||t;return e.defaultView||e.parentWindow||window}var ea=function(){function t(t,e){var i=this;this.manager=t,this.callback=e,this.element=t.element,this.target=t.options.inputTarget,this.domHandler=function(e){Rs(t.options.enable,[t])&&i.handler(e)},this.init()}var e=t.prototype;return e.handler=function(){},e.init=function(){this.evEl&&Qs(this.element,this.evEl,this.domHandler),this.evTarget&&Qs(this.target,this.evTarget,this.domHandler),this.evWin&&Qs(ta(this.element),this.evWin,this.domHandler)},e.destroy=function(){this.evEl&&Js(this.element,this.evEl,this.domHandler),this.evTarget&&Js(this.target,this.evTarget,this.domHandler),this.evWin&&Js(ta(this.element),this.evWin,this.domHandler)},t}();function ia(t,e,i){if(t.indexOf&&!i)return t.indexOf(e);for(var n=0;n<t.length;){if(i&&t[n][i]==e||!i&&t[n]===e)return n;n++}return-1}var na={pointerdown:1,pointermove:2,pointerup:4,pointercancel:8,pointerout:8},oa={2:Is,3:\"pen\",4:Bs,5:\"kinect\"},ra=\"pointerdown\",sa=\"pointermove pointerup pointercancel\";us.MSPointerEvent&&!us.PointerEvent&&(ra=\"MSPointerDown\",sa=\"MSPointerMove MSPointerUp MSPointerCancel\");var aa=function(t){function e(){var i,n=e.prototype;return n.evEl=ra,n.evWin=sa,(i=t.apply(this,arguments)||this).store=i.manager.session.pointerEvents=[],i}return ds(e,t),e.prototype.handler=function(t){var e=this.store,i=!1,n=t.type.toLowerCase().replace(\"ms\",\"\"),o=na[n],r=oa[t.pointerType]||t.pointerType,s=r===Is,a=ia(e,t.pointerId,\"pointerId\");1&o&&(0===t.button||s)?a<0&&(e.push(t),a=e.length-1):12&o&&(i=!0),a<0||(e[a]=t,this.callback(this.manager,o,{pointers:e,changedPointers:[t],pointerType:r,srcEvent:t}),i&&e.splice(a,1))},e}(ea);function ha(t){return Array.prototype.slice.call(t,0)}function la(t,e,i){for(var n=[],o=[],r=0;r<t.length;){var s=e?t[r][e]:t[r];ia(o,s)<0&&n.push(t[r]),o[r]=s,r++}return i&&(n=e?n.sort((function(t,i){return t[e]>i[e]})):n.sort()),n}var da={touchstart:1,touchmove:2,touchend:4,touchcancel:8},ca=\"touchstart touchmove touchend touchcancel\",ua=function(t){function e(){var i;return e.prototype.evTarget=ca,(i=t.apply(this,arguments)||this).targetIds={},i}return ds(e,t),e.prototype.handler=function(t){var e=da[t.type],i=fa.call(this,t,e);i&&this.callback(this.manager,e,{pointers:i[0],changedPointers:i[1],pointerType:Is,srcEvent:t})},e}(ea);function fa(t,e){var i,n,o=ha(t.touches),r=this.targetIds;if(3&e&&1===o.length)return r[o[0].identifier]=!0,[o,o];var s=ha(t.changedTouches),a=[],h=this.target;if(n=o.filter((function(t){return Ws(t.target,h)})),1===e)for(i=0;i<n.length;)r[n[i].identifier]=!0,i++;for(i=0;i<s.length;)r[s[i].identifier]&&a.push(s[i]),12&e&&delete r[s[i].identifier],i++;return a.length?[la(n.concat(a),\"identifier\",!0),a]:void 0}var pa={mousedown:1,mousemove:2,mouseup:4},va=\"mousedown\",ga=\"mousemove mouseup\",ya=function(t){function e(){var i,n=e.prototype;return n.evEl=va,n.evWin=ga,(i=t.apply(this,arguments)||this).pressed=!1,i}return ds(e,t),e.prototype.handler=function(t){var e=pa[t.type];1&e&&0===t.button&&(this.pressed=!0),2&e&&1!==t.which&&(e=4),this.pressed&&(4&e&&(this.pressed=!1),this.callback(this.manager,e,{pointers:[t],changedPointers:[t],pointerType:Bs,srcEvent:t}))},e}(ea);function ma(t){var e=t.changedPointers[0];if(e.identifier===this.primaryTouch){var i={x:e.clientX,y:e.clientY},n=this.lastTouches;this.lastTouches.push(i);setTimeout((function(){var t=n.indexOf(i);t>-1&&n.splice(t,1)}),2500)}}function ba(t,e){1&t?(this.primaryTouch=e.changedPointers[0].identifier,ma.call(this,e)):12&t&&ma.call(this,e)}function wa(t){for(var e=t.srcEvent.clientX,i=t.srcEvent.clientY,n=0;n<this.lastTouches.length;n++){var o=this.lastTouches[n],r=Math.abs(e-o.x),s=Math.abs(i-o.y);if(r<=25&&s<=25)return!0}return!1}var ka=function(){return function(t){function e(e,i){var n;return(n=t.call(this,e,i)||this).handler=function(t,e,i){var o=i.pointerType===Is,r=i.pointerType===Bs;if(!(r&&i.sourceCapabilities&&i.sourceCapabilities.firesTouchEvents)){if(o)ba.call(cs(cs(n)),e,i);else if(r&&wa.call(cs(cs(n)),i))return;n.callback(t,e,i)}},n.touch=new ua(n.manager,n.handler),n.mouse=new ya(n.manager,n.handler),n.primaryTouch=null,n.lastTouches=[],n}return ds(e,t),e.prototype.destroy=function(){this.touch.destroy(),this.mouse.destroy()},e}(ea)}();function _a(t,e,i){return!!Array.isArray(t)&&(js(t,i[e],i),!0)}var xa=32,Ea=1;function Oa(t,e){var i=e.manager;return i?i.get(t):t}function Ca(t){return 16&t?\"cancel\":8&t?\"end\":4&t?\"move\":2&t?\"start\":\"\"}var Sa=function(){function t(t){void 0===t&&(t={}),this.options=ls({enable:!0},t),this.id=Ea++,this.manager=null,this.state=1,this.simultaneous={},this.requireFail=[]}var e=t.prototype;return e.set=function(t){return fs(this.options,t),this.manager&&this.manager.touchAction.update(),this},e.recognizeWith=function(t){if(_a(t,\"recognizeWith\",this))return this;var e=this.simultaneous;return e[(t=Oa(t,this)).id]||(e[t.id]=t,t.recognizeWith(this)),this},e.dropRecognizeWith=function(t){return _a(t,\"dropRecognizeWith\",this)||(t=Oa(t,this),delete this.simultaneous[t.id]),this},e.requireFailure=function(t){if(_a(t,\"requireFailure\",this))return this;var e=this.requireFail;return-1===ia(e,t=Oa(t,this))&&(e.push(t),t.requireFailure(this)),this},e.dropRequireFailure=function(t){if(_a(t,\"dropRequireFailure\",this))return this;t=Oa(t,this);var e=ia(this.requireFail,t);return e>-1&&this.requireFail.splice(e,1),this},e.hasRequireFailures=function(){return this.requireFail.length>0},e.canRecognizeWith=function(t){return!!this.simultaneous[t.id]},e.emit=function(t){var e=this,i=this.state;function n(i){e.manager.emit(i,t)}i<8&&n(e.options.event+Ca(i)),n(e.options.event),t.additionalEvent&&n(t.additionalEvent),i>=8&&n(e.options.event+Ca(i))},e.tryEmit=function(t){if(this.canEmit())return this.emit(t);this.state=xa},e.canEmit=function(){for(var t=0;t<this.requireFail.length;){if(!(33&this.requireFail[t].state))return!1;t++}return!0},e.recognize=function(t){var e=fs({},t);if(!Rs(this.options.enable,[this,e]))return this.reset(),void(this.state=xa);56&this.state&&(this.state=1),this.state=this.process(e),30&this.state&&this.tryEmit(e)},e.process=function(t){},e.getTouchAction=function(){},e.reset=function(){},t}(),Ta=function(t){function e(e){var i;return void 0===e&&(e={}),(i=t.call(this,ls({event:\"tap\",pointers:1,taps:1,interval:300,time:250,threshold:9,posThreshold:10},e))||this).pTime=!1,i.pCenter=!1,i._timer=null,i._input=null,i.count=0,i}ds(e,t);var i=e.prototype;return i.getTouchAction=function(){return[Es]},i.process=function(t){var e=this,i=this.options,n=t.pointers.length===i.pointers,o=t.distance<i.threshold,r=t.deltaTime<i.time;if(this.reset(),1&t.eventType&&0===this.count)return this.failTimeout();if(o&&r&&n){if(4!==t.eventType)return this.failTimeout();var s=!this.pTime||t.timeStamp-this.pTime<i.interval,a=!this.pCenter||Us(this.pCenter,t.center)<i.posThreshold;if(this.pTime=t.timeStamp,this.pCenter=t.center,a&&s?this.count+=1:this.count=1,this._input=t,0===this.count%i.taps)return this.hasRequireFailures()?(this._timer=setTimeout((function(){e.state=8,e.tryEmit()}),i.interval),2):8}return xa},i.failTimeout=function(){var t=this;return this._timer=setTimeout((function(){t.state=xa}),this.options.interval),xa},i.reset=function(){clearTimeout(this._timer)},i.emit=function(){8===this.state&&(this._input.tapCount=this.count,this.manager.emit(this.options.event,this._input))},e}(Sa),Ma=function(t){function e(e){return void 0===e&&(e={}),t.call(this,ls({pointers:1},e))||this}ds(e,t);var i=e.prototype;return i.attrTest=function(t){var e=this.options.pointers;return 0===e||t.pointers.length===e},i.process=function(t){var e=this.state,i=t.eventType,n=6&e,o=this.attrTest(t);return n&&(8&i||!o)?16|e:n||o?4&i?8|e:2&e?4|e:2:xa},e}(Sa);function Pa(t){return t===zs?\"down\":8===t?\"up\":2===t?\"left\":4===t?\"right\":\"\"}var Da=function(t){function e(e){var i;return void 0===e&&(e={}),(i=t.call(this,ls({event:\"pan\",threshold:10,pointers:1,direction:30},e))||this).pX=null,i.pY=null,i}ds(e,t);var i=e.prototype;return i.getTouchAction=function(){var t=this.options.direction,e=[];return 6&t&&e.push(Ss),t&Ns&&e.push(Cs),e},i.directionTest=function(t){var e=this.options,i=!0,n=t.distance,o=t.direction,r=t.deltaX,s=t.deltaY;return o&e.direction||(6&e.direction?(o=0===r?1:r<0?2:4,i=r!==this.pX,n=Math.abs(t.deltaX)):(o=0===s?1:s<0?8:zs,i=s!==this.pY,n=Math.abs(t.deltaY))),t.direction=o,i&&n>e.threshold&&o&e.direction},i.attrTest=function(t){return Ma.prototype.attrTest.call(this,t)&&(2&this.state||!(2&this.state)&&this.directionTest(t))},i.emit=function(e){this.pX=e.deltaX,this.pY=e.deltaY;var i=Pa(e.direction);i&&(e.additionalEvent=this.options.event+i),t.prototype.emit.call(this,e)},e}(Ma),Ia=function(t){function e(e){return void 0===e&&(e={}),t.call(this,ls({event:\"swipe\",threshold:10,velocity:.3,direction:30,pointers:1},e))||this}ds(e,t);var i=e.prototype;return i.getTouchAction=function(){return Da.prototype.getTouchAction.call(this)},i.attrTest=function(e){var i,n=this.options.direction;return 30&n?i=e.overallVelocity:6&n?i=e.overallVelocityX:n&Ns&&(i=e.overallVelocityY),t.prototype.attrTest.call(this,e)&&n&e.offsetDirection&&e.distance>this.options.threshold&&e.maxPointers===this.options.pointers&&ys(i)>this.options.velocity&&4&e.eventType},i.emit=function(t){var e=Pa(t.offsetDirection);e&&this.manager.emit(this.options.event+e,t),this.manager.emit(this.options.event,t)},e}(Ma),Ba=function(t){function e(e){return void 0===e&&(e={}),t.call(this,ls({event:\"pinch\",threshold:0,pointers:2},e))||this}ds(e,t);var i=e.prototype;return i.getTouchAction=function(){return[Os]},i.attrTest=function(e){return t.prototype.attrTest.call(this,e)&&(Math.abs(e.scale-1)>this.options.threshold||2&this.state)},i.emit=function(e){if(1!==e.scale){var i=e.scale<1?\"in\":\"out\";e.additionalEvent=this.options.event+i}t.prototype.emit.call(this,e)},e}(Ma),za=function(t){function e(e){return void 0===e&&(e={}),t.call(this,ls({event:\"rotate\",threshold:0,pointers:2},e))||this}ds(e,t);var i=e.prototype;return i.getTouchAction=function(){return[Os]},i.attrTest=function(e){return t.prototype.attrTest.call(this,e)&&(Math.abs(e.rotation)>this.options.threshold||2&this.state)},e}(Ma),Na=function(t){function e(e){var i;return void 0===e&&(e={}),(i=t.call(this,ls({event:\"press\",pointers:1,time:251,threshold:9},e))||this)._timer=null,i._input=null,i}ds(e,t);var i=e.prototype;return i.getTouchAction=function(){return[xs]},i.process=function(t){var e=this,i=this.options,n=t.pointers.length===i.pointers,o=t.distance<i.threshold,r=t.deltaTime>i.time;if(this._input=t,!o||!n||12&t.eventType&&!r)this.reset();else if(1&t.eventType)this.reset(),this._timer=setTimeout((function(){e.state=8,e.tryEmit()}),i.time);else if(4&t.eventType)return 8;return xa},i.reset=function(){clearTimeout(this._timer)},i.emit=function(t){8===this.state&&(t&&4&t.eventType?this.manager.emit(this.options.event+\"up\",t):(this._input.timeStamp=ms(),this.manager.emit(this.options.event,this._input)))},e}(Sa),Aa={domEvents:!1,touchAction:_s,enable:!0,inputTarget:null,inputClass:null,cssProps:{userSelect:\"none\",touchSelect:\"none\",touchCallout:\"none\",contentZooming:\"none\",userDrag:\"none\",tapHighlightColor:\"rgba(0,0,0,0)\"}},Fa=[[za,{enable:!1}],[Ba,{enable:!1},[\"rotate\"]],[Ia,{direction:6}],[Da,{direction:6},[\"swipe\"]],[Ta],[Ta,{event:\"doubletap\",taps:2},[\"tap\"]],[Na]];function ja(t,e){var i,n=t.element;n.style&&(js(t.options.cssProps,(function(o,r){i=bs(n.style,r),e?(t.oldCssProps[i]=n.style[i],n.style[i]=o):n.style[i]=t.oldCssProps[i]||\"\"})),e||(t.oldCssProps={}))}var Ra=function(){function t(t,e){var i,n=this;this.options=fs({},Aa,e||{}),this.options.inputTarget=this.options.inputTarget||t,this.handlers={},this.session={},this.recognizers=[],this.oldCssProps={},this.element=t,this.input=new((i=this).options.inputClass||(Ps?aa:Ds?ua:Ms?ka:ya))(i,$s),this.touchAction=new Hs(this,this.options.touchAction),ja(this,!0),js(this.options.recognizers,(function(t){var e=n.add(new t[0](t[1]));t[2]&&e.recognizeWith(t[2]),t[3]&&e.requireFailure(t[3])}),this)}var e=t.prototype;return e.set=function(t){return fs(this.options,t),t.touchAction&&this.touchAction.update(),t.inputTarget&&(this.input.destroy(),this.input.target=t.inputTarget,this.input.init()),this},e.stop=function(t){this.session.stopped=t?2:1},e.recognize=function(t){var e=this.session;if(!e.stopped){var i;this.touchAction.preventDefaults(t);var n=this.recognizers,o=e.curRecognizer;(!o||o&&8&o.state)&&(e.curRecognizer=null,o=null);for(var r=0;r<n.length;)i=n[r],2===e.stopped||o&&i!==o&&!i.canRecognizeWith(o)?i.reset():i.recognize(t),!o&&14&i.state&&(e.curRecognizer=i,o=i),r++}},e.get=function(t){if(t instanceof Sa)return t;for(var e=this.recognizers,i=0;i<e.length;i++)if(e[i].options.event===t)return e[i];return null},e.add=function(t){if(_a(t,\"add\",this))return this;var e=this.get(t.options.event);return e&&this.remove(e),this.recognizers.push(t),t.manager=this,this.touchAction.update(),t},e.remove=function(t){if(_a(t,\"remove\",this))return this;var e=this.get(t);if(t){var i=this.recognizers,n=ia(i,e);-1!==n&&(i.splice(n,1),this.touchAction.update())}return this},e.on=function(t,e){if(void 0===t||void 0===e)return this;var i=this.handlers;return js(Zs(t),(function(t){i[t]=i[t]||[],i[t].push(e)})),this},e.off=function(t,e){if(void 0===t)return this;var i=this.handlers;return js(Zs(t),(function(t){e?i[t]&&i[t].splice(ia(i[t],e),1):delete i[t]})),this},e.emit=function(t,e){this.options.domEvents&&function(t,e){var i=document.createEvent(\"Event\");i.initEvent(t,!0,!0),i.gesture=e,e.target.dispatchEvent(i)}(t,e);var i=this.handlers[t]&&this.handlers[t].slice();if(i&&i.length){e.type=t,e.preventDefault=function(){e.srcEvent.preventDefault()};for(var n=0;n<i.length;)i[n](e),n++}},e.destroy=function(){this.element&&ja(this,!1),this.handlers={},this.session={},this.input.destroy(),this.element=null},t}(),La={touchstart:1,touchmove:2,touchend:4,touchcancel:8},Ha=\"touchstart\",Wa=\"touchstart touchmove touchend touchcancel\",qa=function(t){function e(){var i,n=e.prototype;return n.evTarget=Ha,n.evWin=Wa,(i=t.apply(this,arguments)||this).started=!1,i}return ds(e,t),e.prototype.handler=function(t){var e=La[t.type];if(1===e&&(this.started=!0),this.started){var i=Va.call(this,t,e);12&e&&i[0].length-i[1].length==0&&(this.started=!1),this.callback(this.manager,e,{pointers:i[0],changedPointers:i[1],pointerType:Is,srcEvent:t})}},e}(ea);function Va(t,e){var i=ha(t.touches),n=ha(t.changedTouches);return 12&e&&(i=la(i.concat(n),\"identifier\",!0)),[i,n]}function Ua(t,e,i){var n=\"DEPRECATED METHOD: \"+e+\"\\n\"+i+\" AT \\n\";return function(){var e=new Error(\"get-stack-trace\"),i=e&&e.stack?e.stack.replace(/^[^\\(]+?[\\n$]/gm,\"\").replace(/^\\s+at\\s+/gm,\"\").replace(/^Object.<anonymous>\\s*\\(/gm,\"{anonymous}()@\"):\"Unknown Stack Trace\",o=window.console&&(window.console.warn||window.console.log);return o&&o.call(window.console,n,i),t.apply(this,arguments)}}var Ya=Ua((function(t,e,i){for(var n=Object.keys(e),o=0;o<n.length;)(!i||i&&void 0===t[n[o]])&&(t[n[o]]=e[n[o]]),o++;return t}),\"extend\",\"Use `assign`.\"),Xa=Ua((function(t,e){return Ya(t,e,!0)}),\"merge\",\"Use `assign`.\");function Ga(t,e,i){var n,o=e.prototype;(n=t.prototype=Object.create(o)).constructor=t,n._super=o,i&&fs(n,i)}function Ka(t,e){return function(){return t.apply(e,arguments)}}var $a=function(){var t=function(t,e){return void 0===e&&(e={}),new Ra(t,ls({recognizers:Fa.concat()},e))};return t.VERSION=\"2.0.17-rc\",t.DIRECTION_ALL=30,t.DIRECTION_DOWN=zs,t.DIRECTION_LEFT=2,t.DIRECTION_RIGHT=4,t.DIRECTION_UP=8,t.DIRECTION_HORIZONTAL=6,t.DIRECTION_VERTICAL=Ns,t.DIRECTION_NONE=1,t.DIRECTION_DOWN=zs,t.INPUT_START=1,t.INPUT_MOVE=2,t.INPUT_END=4,t.INPUT_CANCEL=8,t.STATE_POSSIBLE=1,t.STATE_BEGAN=2,t.STATE_CHANGED=4,t.STATE_ENDED=8,t.STATE_RECOGNIZED=8,t.STATE_CANCELLED=16,t.STATE_FAILED=xa,t.Manager=Ra,t.Input=ea,t.TouchAction=Hs,t.TouchInput=ua,t.MouseInput=ya,t.PointerEventInput=aa,t.TouchMouseInput=ka,t.SingleTouchInput=qa,t.Recognizer=Sa,t.AttrRecognizer=Ma,t.Tap=Ta,t.Pan=Da,t.Swipe=Ia,t.Pinch=Ba,t.Rotate=za,t.Press=Na,t.on=Qs,t.off=Js,t.each=js,t.merge=Xa,t.extend=Ya,t.bindFn=Ka,t.assign=fs,t.inherit=Ga,t.bindFn=Ka,t.prefixed=bs,t.toArray=ha,t.inArray=ia,t.uniqueArray=la,t.splitStr=Zs,t.boolOrFn=Rs,t.hasParent=Ws,t.addEventListeners=Qs,t.removeEventListeners=Js,t.defaults=fs({},Aa,{preset:Fa}),t}();function Za(t,e){var i=zo(t);if(On){var n=On(t);e&&(n=mr(n).call(n,(function(e){return Mn(t,e).enumerable}))),i.push.apply(i,n)}return i}function Qa(t){for(var e=1;e<arguments.length;e++){var i,n=null!=arguments[e]?arguments[e]:{};if(e%2)Wo(i=Za(Object(n),!0)).call(i,(function(e){jn(t,e,n[e])}));else if(Dn)In(t,Dn(n));else{var o;Wo(o=Za(Object(n))).call(o,(function(e){zn(t,e,Mn(n,e))}))}}return t}function Ja(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return th(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return th(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function th(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}var eh=ko(\"DELETE\");function ih(t){for(var e,i=arguments.length,n=new Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];return nh.apply(void 0,Eo(e=[{},t]).call(e,n))}function nh(){var t=oh.apply(void 0,arguments);return sh(t),t}function oh(){for(var t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];if(e.length<2)return e[0];var n;if(e.length>2)return oh.apply(void 0,Eo(n=[nh(e[0],e[1])]).call(n,wo(Oo(e).call(e,2))));var o,r=e[0],s=e[1],a=Ja(Co(s));try{for(a.s();!(o=a.n()).done;){var h=o.value;Object.prototype.propertyIsEnumerable.call(s,h)&&(s[h]===eh?delete r[h]:null===r[h]||null===s[h]||\"object\"!==go(r[h])||\"object\"!==go(s[h])||So(r[h])||So(s[h])?r[h]=rh(s[h]):r[h]=oh(r[h],s[h]))}}catch(t){a.e(t)}finally{a.f()}return r}function rh(t){return So(t)?Io(t).call(t,(function(t){return rh(t)})):\"object\"===go(t)&&null!==t?oh({},t):t}function sh(t){for(var e=0,i=zo(t);e<i.length;e++){var n=i[e];t[n]===eh?delete t[n]:\"object\"===go(t[n])&&null!==t[n]&&sh(t[n])}}function ah(){for(var t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];return hh(e.length?e:[No()])}function hh(t){var e=function(){for(var t=lh(),e=t(\" \"),i=t(\" \"),n=t(\" \"),o=0;o<arguments.length;o++)(e-=t(o<0||arguments.length<=o?void 0:arguments[o]))<0&&(e+=1),(i-=t(o<0||arguments.length<=o?void 0:arguments[o]))<0&&(i+=1),(n-=t(o<0||arguments.length<=o?void 0:arguments[o]))<0&&(n+=1);return[e,i,n]}(t),i=uo(e,3),n=i[0],o=i[1],r=i[2],s=1,a=function(){var t=2091639*n+2.3283064365386963e-10*s;return n=o,o=r,r=t-(s=0|t)};return a.uint32=function(){return 4294967296*a()},a.fract53=function(){return a()+11102230246251565e-32*(2097152*a()|0)},a.algorithm=\"Alea\",a.seed=t,a.version=\"0.9\",a}function lh(){var t=4022871197;return function(e){for(var i=e.toString(),n=0;n<i.length;n++){var o=.02519603282416938*(t+=i.charCodeAt(n));o-=t=o>>>0,t=(o*=t)>>>0,t+=4294967296*(o-=t)}return 2.3283064365386963e-10*(t>>>0)}}var dh=\"undefined\"!=typeof window?window.Hammer||$a:function(){return{on:t=function(){},off:t,destroy:t,emit:t,get:function(){return{set:t}}};var t};function ch(t){var e,i=this;this._cleanupQueue=[],this.active=!1,this._dom={container:t,overlay:document.createElement(\"div\")},this._dom.overlay.classList.add(\"vis-overlay\"),this._dom.container.appendChild(this._dom.overlay),this._cleanupQueue.push((function(){i._dom.overlay.parentNode.removeChild(i._dom.overlay)}));var n=dh(this._dom.overlay);n.on(\"tap\",Vt(e=this._onTapOverlay).call(e,this)),this._cleanupQueue.push((function(){n.destroy()}));var o=[\"tap\",\"doubletap\",\"press\",\"pinch\",\"pan\",\"panstart\",\"panmove\",\"panend\"];Wo(o).call(o,(function(t){n.on(t,(function(t){t.srcEvent.stopPropagation()}))})),document&&document.body&&(this._onClick=function(e){(function(t,e){for(;t;){if(t===e)return!0;t=t.parentNode}return!1})(e.target,t)||i.deactivate()},document.body.addEventListener(\"click\",this._onClick),this._cleanupQueue.push((function(){document.body.removeEventListener(\"click\",i._onClick)}))),this._escListener=function(t){(\"key\"in t?\"Escape\"===t.key:27===t.keyCode)&&i.deactivate()}}Zt(ch.prototype),ch.current=null,ch.prototype.destroy=function(){var t,e;this.deactivate();var i,n=Ja(Xo(t=er(e=this._cleanupQueue).call(e,0)).call(t));try{for(n.s();!(i=n.n()).done;){(0,i.value)()}}catch(t){n.e(t)}finally{n.f()}},ch.prototype.activate=function(){ch.current&&ch.current.deactivate(),ch.current=this,this.active=!0,this._dom.overlay.style.display=\"none\",this._dom.container.classList.add(\"vis-active\"),this.emit(\"change\"),this.emit(\"activate\"),document.body.addEventListener(\"keydown\",this._escListener)},ch.prototype.deactivate=function(){this.active=!1,this._dom.overlay.style.display=\"block\",this._dom.container.classList.remove(\"vis-active\"),document.body.removeEventListener(\"keydown\",this._escListener),this.emit(\"change\"),this.emit(\"deactivate\")},ch.prototype._onTapOverlay=function(t){this.activate(),t.srcEvent.stopPropagation()};var uh=/^\\/?Date\\((-?\\d+)/i,fh=/^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i,ph=/^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i,vh=/^rgb\\( *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *\\)$/i,gh=/^rgba\\( *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *([01]|0?\\.\\d+) *\\)$/i;function yh(t){return t instanceof Number||\"number\"==typeof t}function mh(t){if(t)for(;!0===t.hasChildNodes();){var e=t.firstChild;e&&(mh(e),t.removeChild(e))}}function bh(t){return t instanceof String||\"string\"==typeof t}function wh(t){return\"object\"===go(t)&&null!==t}function kh(t,e,i,n){var o=!1;!0===n&&(o=null===e[i]&&void 0!==t[i]),o?delete t[i]:t[i]=e[i]}function _h(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];for(var n in t)if(void 0!==e[n])if(null===e[n]||\"object\"!==go(e[n]))kh(t,e,n,i);else{var o=t[n],r=e[n];wh(o)&&wh(r)&&_h(o,r,i)}}var xh=At;function Eh(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(So(i))throw new TypeError(\"Arrays are not supported by deepExtend\");for(var o=0;o<t.length;o++){var r=t[o];if(Object.prototype.hasOwnProperty.call(i,r))if(i[r]&&i[r].constructor===Object)void 0===e[r]&&(e[r]={}),e[r].constructor===Object?Ch(e[r],i[r],!1,n):kh(e,i,r,n);else{if(So(i[r]))throw new TypeError(\"Arrays are not supported by deepExtend\");kh(e,i,r,n)}}return e}function Oh(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(So(i))throw new TypeError(\"Arrays are not supported by deepExtend\");for(var o in i)if(Object.prototype.hasOwnProperty.call(i,o)&&!dr(t).call(t,o))if(i[o]&&i[o].constructor===Object)void 0===e[o]&&(e[o]={}),e[o].constructor===Object?Ch(e[o],i[o]):kh(e,i,o,n);else if(So(i[o])){e[o]=[];for(var r=0;r<i[o].length;r++)e[o].push(i[o][r])}else kh(e,i,o,n);return e}function Ch(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];for(var o in e)if(Object.prototype.hasOwnProperty.call(e,o)||!0===i)if(\"object\"===go(e[o])&&null!==e[o]&&fr(e[o])===Object.prototype)void 0===t[o]?t[o]=Ch({},e[o],i):\"object\"===go(t[o])&&null!==t[o]&&fr(t[o])===Object.prototype?Ch(t[o],e[o],i):kh(t,e,o,n);else if(So(e[o])){var r;t[o]=Oo(r=e[o]).call(r)}else kh(t,e,o,n);return t}function Sh(t,e){var i;return Eo(i=[]).call(i,wo(t),[e])}function Th(t){return Oo(t).call(t)}function Mh(t){return t.getBoundingClientRect().left}function Ph(t){return t.getBoundingClientRect().top}function Dh(t,e){if(So(t))for(var i=t.length,n=0;n<i;n++)e(t[n],n,t);else for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&e(t[o],o,t)}var Ih=_r;function Bh(t,e,i,n){var o;t.addEventListener?(void 0===n&&(n=!1),\"mousewheel\"===e&&dr(o=navigator.userAgent).call(o,\"Firefox\")&&(e=\"DOMMouseScroll\"),t.addEventListener(e,i,n)):t.attachEvent(\"on\"+e,i)}function zh(t,e,i,n){var o;t.removeEventListener?(void 0===n&&(n=!1),\"mousewheel\"===e&&dr(o=navigator.userAgent).call(o,\"Firefox\")&&(e=\"DOMMouseScroll\"),t.removeEventListener(e,i,n)):t.detachEvent(\"on\"+e,i)}var Nh={asBoolean:function(t,e){return\"function\"==typeof t&&(t=t()),null!=t?0!=t:e||null},asNumber:function(t,e){return\"function\"==typeof t&&(t=t()),null!=t?Number(t)||e||null:e||null},asString:function(t,e){return\"function\"==typeof t&&(t=t()),null!=t?String(t):e||null},asSize:function(t,e){return\"function\"==typeof t&&(t=t()),bh(t)?t:yh(t)?t+\"px\":e||null},asElement:function(t,e){return\"function\"==typeof t&&(t=t()),t||e||null}};function Ah(t){var e;switch(t.length){case 3:case 4:return(e=ph.exec(t))?{r:Br(e[1]+e[1],16),g:Br(e[2]+e[2],16),b:Br(e[3]+e[3],16)}:null;case 6:case 7:return(e=fh.exec(t))?{r:Br(e[1],16),g:Br(e[2],16),b:Br(e[3],16)}:null;default:return null}}function Fh(t,e){if(dr(t).call(t,\"rgba\"))return t;if(dr(t).call(t,\"rgb\")){var i=t.substr(Hr(t).call(t,\"(\")+1).replace(\")\",\"\").split(\",\");return\"rgba(\"+i[0]+\",\"+i[1]+\",\"+i[2]+\",\"+e+\")\"}var n=Ah(t);return null==n?t:\"rgba(\"+n.r+\",\"+n.g+\",\"+n.b+\",\"+e+\")\"}function jh(t,e,i){var n;return\"#\"+Oo(n=((1<<24)+(t<<16)+(e<<8)+i).toString(16)).call(n,1)}function Rh(t,e){if(bh(t)){var i=t;if(Xh(i)){var n,o=Io(n=i.substr(4).substr(0,i.length-5).split(\",\")).call(n,(function(t){return Br(t)}));i=jh(o[0],o[1],o[2])}if(!0===Yh(i)){var r=Uh(i),s={h:r.h,s:.8*r.s,v:Math.min(1,1.02*r.v)},a={h:r.h,s:Math.min(1,1.25*r.s),v:.8*r.v},h=Vh(a.h,a.s,a.v),l=Vh(s.h,s.s,s.v);return{background:i,border:h,highlight:{background:l,border:h},hover:{background:l,border:h}}}return{background:i,border:i,highlight:{background:i,border:i},hover:{background:i,border:i}}}return e?{background:t.background||e.background,border:t.border||e.border,highlight:bh(t.highlight)?{border:t.highlight,background:t.highlight}:{background:t.highlight&&t.highlight.background||e.highlight.background,border:t.highlight&&t.highlight.border||e.highlight.border},hover:bh(t.hover)?{border:t.hover,background:t.hover}:{border:t.hover&&t.hover.border||e.hover.border,background:t.hover&&t.hover.background||e.hover.background}}:{background:t.background||void 0,border:t.border||void 0,highlight:bh(t.highlight)?{border:t.highlight,background:t.highlight}:{background:t.highlight&&t.highlight.background||void 0,border:t.highlight&&t.highlight.border||void 0},hover:bh(t.hover)?{border:t.hover,background:t.hover}:{border:t.hover&&t.hover.border||void 0,background:t.hover&&t.hover.background||void 0}}}function Lh(t,e,i){t/=255,e/=255,i/=255;var n=Math.min(t,Math.min(e,i)),o=Math.max(t,Math.max(e,i));return n===o?{h:0,s:0,v:n}:{h:60*((t===n?3:i===n?1:5)-(t===n?e-i:i===n?t-e:i-t)/(o-n))/360,s:(o-n)/o,v:o}}var Hh=function(t){var e,i={};return Wo(e=t.split(\";\")).call(e,(function(t){if(\"\"!=Ur(t).call(t)){var e,n,o=t.split(\":\"),r=Ur(e=o[0]).call(e),s=Ur(n=o[1]).call(n);i[r]=s}})),i},Wh=function(t){var e;return Io(e=zo(t)).call(e,(function(e){return e+\": \"+t[e]})).join(\"; \")};function qh(t,e,i){var n,o,r,s=Math.floor(6*t),a=6*t-s,h=i*(1-e),l=i*(1-a*e),d=i*(1-(1-a)*e);switch(s%6){case 0:n=i,o=d,r=h;break;case 1:n=l,o=i,r=h;break;case 2:n=h,o=i,r=d;break;case 3:n=h,o=l,r=i;break;case 4:n=d,o=h,r=i;break;case 5:n=i,o=h,r=l}return{r:Math.floor(255*n),g:Math.floor(255*o),b:Math.floor(255*r)}}function Vh(t,e,i){var n=qh(t,e,i);return jh(n.r,n.g,n.b)}function Uh(t){var e=Ah(t);if(!e)throw new TypeError(\"'\".concat(t,\"' is not a valid color.\"));return Lh(e.r,e.g,e.b)}function Yh(t){return/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(t)}function Xh(t){return vh.test(t)}function Gh(t){return gh.test(t)}function Kh(t){if(null===t||\"object\"!==go(t))return null;if(t instanceof Element)return t;var e=Gr(t);for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&\"object\"==go(t[i])&&(e[i]=Kh(t[i]));return e}function $h(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},o=function(t){return null!=t},r=function(t){return null!==t&&\"object\"===go(t)},s=function(t){for(var e in t)if(Object.prototype.hasOwnProperty.call(t,e))return!1;return!0};if(!r(t))throw new Error(\"Parameter mergeTarget must be an object\");if(!r(e))throw new Error(\"Parameter options must be an object\");if(!o(i))throw new Error(\"Parameter option must have a value\");if(!r(n))throw new Error(\"Parameter globalOptions must be an object\");var a=function(t,e,i){r(t[i])||(t[i]={});var n=e[i],o=t[i];for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(o[s]=n[s])},h=e[i],l=r(n)&&!s(n),d=l?n[i]:void 0,c=d?d.enabled:void 0;if(void 0!==h){if(\"boolean\"==typeof h)return r(t[i])||(t[i]={}),void(t[i].enabled=h);if(null===h&&!r(t[i])){if(!o(d))return;t[i]=Gr(d)}if(r(h)){var u=!0;void 0!==h.enabled?u=h.enabled:void 0!==c&&(u=d.enabled),a(t,e,i),t[i].enabled=u}}}var Zh={linear:function(t){return t},easeInQuad:function(t){return t*t},easeOutQuad:function(t){return t*(2-t)},easeInOutQuad:function(t){return t<.5?2*t*t:(4-2*t)*t-1},easeInCubic:function(t){return t*t*t},easeOutCubic:function(t){return--t*t*t+1},easeInOutCubic:function(t){return t<.5?4*t*t*t:(t-1)*(2*t-2)*(2*t-2)+1},easeInQuart:function(t){return t*t*t*t},easeOutQuart:function(t){return 1- --t*t*t*t},easeInOutQuart:function(t){return t<.5?8*t*t*t*t:1-8*--t*t*t*t},easeInQuint:function(t){return t*t*t*t*t},easeOutQuint:function(t){return 1+--t*t*t*t*t},easeInOutQuint:function(t){return t<.5?16*t*t*t*t*t:1+16*--t*t*t*t*t}};function Qh(t,e){var i;So(e)||(e=[e]);var n,o=Ja(t);try{for(o.s();!(n=o.n()).done;){var r=n.value;if(r){i=r[e[0]];for(var s=1;s<e.length;s++)i&&(i=i[e[s]]);if(void 0!==i)break}}}catch(t){o.e(t)}finally{o.f()}return i}var Jh={black:\"#000000\",navy:\"#000080\",darkblue:\"#00008B\",mediumblue:\"#0000CD\",blue:\"#0000FF\",darkgreen:\"#006400\",green:\"#008000\",teal:\"#008080\",darkcyan:\"#008B8B\",deepskyblue:\"#00BFFF\",darkturquoise:\"#00CED1\",mediumspringgreen:\"#00FA9A\",lime:\"#00FF00\",springgreen:\"#00FF7F\",aqua:\"#00FFFF\",cyan:\"#00FFFF\",midnightblue:\"#191970\",dodgerblue:\"#1E90FF\",lightseagreen:\"#20B2AA\",forestgreen:\"#228B22\",seagreen:\"#2E8B57\",darkslategray:\"#2F4F4F\",limegreen:\"#32CD32\",mediumseagreen:\"#3CB371\",turquoise:\"#40E0D0\",royalblue:\"#4169E1\",steelblue:\"#4682B4\",darkslateblue:\"#483D8B\",mediumturquoise:\"#48D1CC\",indigo:\"#4B0082\",darkolivegreen:\"#556B2F\",cadetblue:\"#5F9EA0\",cornflowerblue:\"#6495ED\",mediumaquamarine:\"#66CDAA\",dimgray:\"#696969\",slateblue:\"#6A5ACD\",olivedrab:\"#6B8E23\",slategray:\"#708090\",lightslategray:\"#778899\",mediumslateblue:\"#7B68EE\",lawngreen:\"#7CFC00\",chartreuse:\"#7FFF00\",aquamarine:\"#7FFFD4\",maroon:\"#800000\",purple:\"#800080\",olive:\"#808000\",gray:\"#808080\",skyblue:\"#87CEEB\",lightskyblue:\"#87CEFA\",blueviolet:\"#8A2BE2\",darkred:\"#8B0000\",darkmagenta:\"#8B008B\",saddlebrown:\"#8B4513\",darkseagreen:\"#8FBC8F\",lightgreen:\"#90EE90\",mediumpurple:\"#9370D8\",darkviolet:\"#9400D3\",palegreen:\"#98FB98\",darkorchid:\"#9932CC\",yellowgreen:\"#9ACD32\",sienna:\"#A0522D\",brown:\"#A52A2A\",darkgray:\"#A9A9A9\",lightblue:\"#ADD8E6\",greenyellow:\"#ADFF2F\",paleturquoise:\"#AFEEEE\",lightsteelblue:\"#B0C4DE\",powderblue:\"#B0E0E6\",firebrick:\"#B22222\",darkgoldenrod:\"#B8860B\",mediumorchid:\"#BA55D3\",rosybrown:\"#BC8F8F\",darkkhaki:\"#BDB76B\",silver:\"#C0C0C0\",mediumvioletred:\"#C71585\",indianred:\"#CD5C5C\",peru:\"#CD853F\",chocolate:\"#D2691E\",tan:\"#D2B48C\",lightgrey:\"#D3D3D3\",palevioletred:\"#D87093\",thistle:\"#D8BFD8\",orchid:\"#DA70D6\",goldenrod:\"#DAA520\",crimson:\"#DC143C\",gainsboro:\"#DCDCDC\",plum:\"#DDA0DD\",burlywood:\"#DEB887\",lightcyan:\"#E0FFFF\",lavender:\"#E6E6FA\",darksalmon:\"#E9967A\",violet:\"#EE82EE\",palegoldenrod:\"#EEE8AA\",lightcoral:\"#F08080\",khaki:\"#F0E68C\",aliceblue:\"#F0F8FF\",honeydew:\"#F0FFF0\",azure:\"#F0FFFF\",sandybrown:\"#F4A460\",wheat:\"#F5DEB3\",beige:\"#F5F5DC\",whitesmoke:\"#F5F5F5\",mintcream:\"#F5FFFA\",ghostwhite:\"#F8F8FF\",salmon:\"#FA8072\",antiquewhite:\"#FAEBD7\",linen:\"#FAF0E6\",lightgoldenrodyellow:\"#FAFAD2\",oldlace:\"#FDF5E6\",red:\"#FF0000\",fuchsia:\"#FF00FF\",magenta:\"#FF00FF\",deeppink:\"#FF1493\",orangered:\"#FF4500\",tomato:\"#FF6347\",hotpink:\"#FF69B4\",coral:\"#FF7F50\",darkorange:\"#FF8C00\",lightsalmon:\"#FFA07A\",orange:\"#FFA500\",lightpink:\"#FFB6C1\",pink:\"#FFC0CB\",gold:\"#FFD700\",peachpuff:\"#FFDAB9\",navajowhite:\"#FFDEAD\",moccasin:\"#FFE4B5\",bisque:\"#FFE4C4\",mistyrose:\"#FFE4E1\",blanchedalmond:\"#FFEBCD\",papayawhip:\"#FFEFD5\",lavenderblush:\"#FFF0F5\",seashell:\"#FFF5EE\",cornsilk:\"#FFF8DC\",lemonchiffon:\"#FFFACD\",floralwhite:\"#FFFAF0\",snow:\"#FFFAFA\",yellow:\"#FFFF00\",lightyellow:\"#FFFFE0\",ivory:\"#FFFFF0\",white:\"#FFFFFF\"},tl=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;Nn(this,t),this.pixelRatio=e,this.generated=!1,this.centerCoordinates={x:144.5,y:144.5},this.r=289*.49,this.color={r:255,g:255,b:255,a:1},this.hueCircle=void 0,this.initialColor={r:255,g:255,b:255,a:1},this.previousColor=void 0,this.applied=!1,this.updateCallback=function(){},this.closeCallback=function(){},this._create()}return Fn(t,[{key:\"insertTo\",value:function(t){void 0!==this.hammer&&(this.hammer.destroy(),this.hammer=void 0),this.container=t,this.container.appendChild(this.frame),this._bindHammer(),this._setSize()}},{key:\"setUpdateCallback\",value:function(t){if(\"function\"!=typeof t)throw new Error(\"Function attempted to set as colorPicker update callback is not a function.\");this.updateCallback=t}},{key:\"setCloseCallback\",value:function(t){if(\"function\"!=typeof t)throw new Error(\"Function attempted to set as colorPicker closing callback is not a function.\");this.closeCallback=t}},{key:\"_isColorString\",value:function(t){if(\"string\"==typeof t)return Jh[t]}},{key:\"setColor\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(\"none\"!==t){var i,n=this._isColorString(t);if(void 0!==n&&(t=n),!0===bh(t)){if(!0===Xh(t)){var o=t.substr(4).substr(0,t.length-5).split(\",\");i={r:o[0],g:o[1],b:o[2],a:1}}else if(!0===Gh(t)){var r=t.substr(5).substr(0,t.length-6).split(\",\");i={r:r[0],g:r[1],b:r[2],a:r[3]}}else if(!0===Yh(t)){var s=Ah(t);i={r:s.r,g:s.g,b:s.b,a:1}}}else if(t instanceof Object&&void 0!==t.r&&void 0!==t.g&&void 0!==t.b){var a=void 0!==t.a?t.a:\"1.0\";i={r:t.r,g:t.g,b:t.b,a:a}}if(void 0===i)throw new Error(\"Unknown color passed to the colorPicker. Supported are strings: rgb, hex, rgba. Object: rgb ({r:r,g:g,b:b,[a:a]}). Supplied: \"+es(t));this._setColor(i,e)}}},{key:\"show\",value:function(){void 0!==this.closeCallback&&(this.closeCallback(),this.closeCallback=void 0),this.applied=!1,this.frame.style.display=\"block\",this._generateHueCircle()}},{key:\"_hide\",value:function(){var t=this,e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];!0===e&&(this.previousColor=At({},this.color)),!0===this.applied&&this.updateCallback(this.initialColor),this.frame.style.display=\"none\",rs((function(){void 0!==t.closeCallback&&(t.closeCallback(),t.closeCallback=void 0)}),0)}},{key:\"_save\",value:function(){this.updateCallback(this.color),this.applied=!1,this._hide()}},{key:\"_apply\",value:function(){this.applied=!0,this.updateCallback(this.color),this._updatePicker(this.color)}},{key:\"_loadLast\",value:function(){void 0!==this.previousColor?this.setColor(this.previousColor,!1):alert(\"There is no last color to load...\")}},{key:\"_setColor\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];!0===e&&(this.initialColor=At({},t)),this.color=t;var i=Lh(t.r,t.g,t.b),n=2*Math.PI,o=this.r*i.s,r=this.centerCoordinates.x+o*Math.sin(n*i.h),s=this.centerCoordinates.y+o*Math.cos(n*i.h);this.colorPickerSelector.style.left=r-.5*this.colorPickerSelector.clientWidth+\"px\",this.colorPickerSelector.style.top=s-.5*this.colorPickerSelector.clientHeight+\"px\",this._updatePicker(t)}},{key:\"_setOpacity\",value:function(t){this.color.a=t/100,this._updatePicker(this.color)}},{key:\"_setBrightness\",value:function(t){var e=Lh(this.color.r,this.color.g,this.color.b);e.v=t/100;var i=qh(e.h,e.s,e.v);i.a=this.color.a,this.color=i,this._updatePicker()}},{key:\"_updatePicker\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.color,e=Lh(t.r,t.g,t.b),i=this.colorPickerCanvas.getContext(\"2d\");void 0===this.pixelRation&&(this.pixelRatio=(window.devicePixelRatio||1)/(i.webkitBackingStorePixelRatio||i.mozBackingStorePixelRatio||i.msBackingStorePixelRatio||i.oBackingStorePixelRatio||i.backingStorePixelRatio||1)),i.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0);var n=this.colorPickerCanvas.clientWidth,o=this.colorPickerCanvas.clientHeight;i.clearRect(0,0,n,o),i.putImageData(this.hueCircle,0,0),i.fillStyle=\"rgba(0,0,0,\"+(1-e.v)+\")\",i.circle(this.centerCoordinates.x,this.centerCoordinates.y,this.r),hs(i).call(i),this.brightnessRange.value=100*e.v,this.opacityRange.value=100*t.a,this.initialColorDiv.style.backgroundColor=\"rgba(\"+this.initialColor.r+\",\"+this.initialColor.g+\",\"+this.initialColor.b+\",\"+this.initialColor.a+\")\",this.newColorDiv.style.backgroundColor=\"rgba(\"+this.color.r+\",\"+this.color.g+\",\"+this.color.b+\",\"+this.color.a+\")\"}},{key:\"_setSize\",value:function(){this.colorPickerCanvas.style.width=\"100%\",this.colorPickerCanvas.style.height=\"100%\",this.colorPickerCanvas.width=289*this.pixelRatio,this.colorPickerCanvas.height=289*this.pixelRatio}},{key:\"_create\",value:function(){var t,e,i,n;if(this.frame=document.createElement(\"div\"),this.frame.className=\"vis-color-picker\",this.colorPickerDiv=document.createElement(\"div\"),this.colorPickerSelector=document.createElement(\"div\"),this.colorPickerSelector.className=\"vis-selector\",this.colorPickerDiv.appendChild(this.colorPickerSelector),this.colorPickerCanvas=document.createElement(\"canvas\"),this.colorPickerDiv.appendChild(this.colorPickerCanvas),this.colorPickerCanvas.getContext){var o=this.colorPickerCanvas.getContext(\"2d\");this.pixelRatio=(window.devicePixelRatio||1)/(o.webkitBackingStorePixelRatio||o.mozBackingStorePixelRatio||o.msBackingStorePixelRatio||o.oBackingStorePixelRatio||o.backingStorePixelRatio||1),this.colorPickerCanvas.getContext(\"2d\").setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0)}else{var r=document.createElement(\"DIV\");r.style.color=\"red\",r.style.fontWeight=\"bold\",r.style.padding=\"10px\",r.innerText=\"Error: your browser does not support HTML canvas\",this.colorPickerCanvas.appendChild(r)}this.colorPickerDiv.className=\"vis-color\",this.opacityDiv=document.createElement(\"div\"),this.opacityDiv.className=\"vis-opacity\",this.brightnessDiv=document.createElement(\"div\"),this.brightnessDiv.className=\"vis-brightness\",this.arrowDiv=document.createElement(\"div\"),this.arrowDiv.className=\"vis-arrow\",this.opacityRange=document.createElement(\"input\");try{this.opacityRange.type=\"range\",this.opacityRange.min=\"0\",this.opacityRange.max=\"100\"}catch(t){}this.opacityRange.value=\"100\",this.opacityRange.className=\"vis-range\",this.brightnessRange=document.createElement(\"input\");try{this.brightnessRange.type=\"range\",this.brightnessRange.min=\"0\",this.brightnessRange.max=\"100\"}catch(t){}this.brightnessRange.value=\"100\",this.brightnessRange.className=\"vis-range\",this.opacityDiv.appendChild(this.opacityRange),this.brightnessDiv.appendChild(this.brightnessRange);var s=this;this.opacityRange.onchange=function(){s._setOpacity(this.value)},this.opacityRange.oninput=function(){s._setOpacity(this.value)},this.brightnessRange.onchange=function(){s._setBrightness(this.value)},this.brightnessRange.oninput=function(){s._setBrightness(this.value)},this.brightnessLabel=document.createElement(\"div\"),this.brightnessLabel.className=\"vis-label vis-brightness\",this.brightnessLabel.innerText=\"brightness:\",this.opacityLabel=document.createElement(\"div\"),this.opacityLabel.className=\"vis-label vis-opacity\",this.opacityLabel.innerText=\"opacity:\",this.newColorDiv=document.createElement(\"div\"),this.newColorDiv.className=\"vis-new-color\",this.newColorDiv.innerText=\"new\",this.initialColorDiv=document.createElement(\"div\"),this.initialColorDiv.className=\"vis-initial-color\",this.initialColorDiv.innerText=\"initial\",this.cancelButton=document.createElement(\"div\"),this.cancelButton.className=\"vis-button vis-cancel\",this.cancelButton.innerText=\"cancel\",this.cancelButton.onclick=Vt(t=this._hide).call(t,this,!1),this.applyButton=document.createElement(\"div\"),this.applyButton.className=\"vis-button vis-apply\",this.applyButton.innerText=\"apply\",this.applyButton.onclick=Vt(e=this._apply).call(e,this),this.saveButton=document.createElement(\"div\"),this.saveButton.className=\"vis-button vis-save\",this.saveButton.innerText=\"save\",this.saveButton.onclick=Vt(i=this._save).call(i,this),this.loadButton=document.createElement(\"div\"),this.loadButton.className=\"vis-button vis-load\",this.loadButton.innerText=\"load last\",this.loadButton.onclick=Vt(n=this._loadLast).call(n,this),this.frame.appendChild(this.colorPickerDiv),this.frame.appendChild(this.arrowDiv),this.frame.appendChild(this.brightnessLabel),this.frame.appendChild(this.brightnessDiv),this.frame.appendChild(this.opacityLabel),this.frame.appendChild(this.opacityDiv),this.frame.appendChild(this.newColorDiv),this.frame.appendChild(this.initialColorDiv),this.frame.appendChild(this.cancelButton),this.frame.appendChild(this.applyButton),this.frame.appendChild(this.saveButton),this.frame.appendChild(this.loadButton)}},{key:\"_bindHammer\",value:function(){var t=this;this.drag={},this.pinch={},this.hammer=new dh(this.colorPickerCanvas),this.hammer.get(\"pinch\").set({enable:!0}),this.hammer.on(\"hammer.input\",(function(e){e.isFirst&&t._moveSelector(e)})),this.hammer.on(\"tap\",(function(e){t._moveSelector(e)})),this.hammer.on(\"panstart\",(function(e){t._moveSelector(e)})),this.hammer.on(\"panmove\",(function(e){t._moveSelector(e)})),this.hammer.on(\"panend\",(function(e){t._moveSelector(e)}))}},{key:\"_generateHueCircle\",value:function(){if(!1===this.generated){var t=this.colorPickerCanvas.getContext(\"2d\");void 0===this.pixelRation&&(this.pixelRatio=(window.devicePixelRatio||1)/(t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1)),t.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0);var e,i,n,o,r=this.colorPickerCanvas.clientWidth,s=this.colorPickerCanvas.clientHeight;t.clearRect(0,0,r,s),this.centerCoordinates={x:.5*r,y:.5*s},this.r=.49*r;var a,h=2*Math.PI/360,l=1/this.r;for(n=0;n<360;n++)for(o=0;o<this.r;o++)e=this.centerCoordinates.x+o*Math.sin(h*n),i=this.centerCoordinates.y+o*Math.cos(h*n),a=qh(.002777777777777778*n,o*l,1),t.fillStyle=\"rgb(\"+a.r+\",\"+a.g+\",\"+a.b+\")\",t.fillRect(e-.5,i-.5,2,2);t.strokeStyle=\"rgba(0,0,0,1)\",t.circle(this.centerCoordinates.x,this.centerCoordinates.y,this.r),t.stroke(),this.hueCircle=t.getImageData(0,0,r,s)}this.generated=!0}},{key:\"_moveSelector\",value:function(t){var e=this.colorPickerDiv.getBoundingClientRect(),i=t.center.x-e.left,n=t.center.y-e.top,o=.5*this.colorPickerDiv.clientHeight,r=.5*this.colorPickerDiv.clientWidth,s=i-r,a=n-o,h=Math.atan2(s,a),l=.98*Math.min(Math.sqrt(s*s+a*a),r),d=Math.cos(h)*l+o,c=Math.sin(h)*l+r;this.colorPickerSelector.style.top=d-.5*this.colorPickerSelector.clientHeight+\"px\",this.colorPickerSelector.style.left=c-.5*this.colorPickerSelector.clientWidth+\"px\";var u=h/(2*Math.PI);u=u<0?u+1:u;var f=l/this.r,p=Lh(this.color.r,this.color.g,this.color.b);p.h=u,p.s=f;var v=qh(p.h,p.s,p.v);v.a=this.color.a,this.color=v,this.initialColorDiv.style.backgroundColor=\"rgba(\"+this.initialColor.r+\",\"+this.initialColor.g+\",\"+this.initialColor.b+\",\"+this.initialColor.a+\")\",this.newColorDiv.style.backgroundColor=\"rgba(\"+this.color.r+\",\"+this.color.g+\",\"+this.color.b+\",\"+this.color.a+\")\"}}]),t}();function el(){for(var t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];if(e.length<1)throw new TypeError(\"Invalid arguments.\");if(1===e.length)return document.createTextNode(e[0]);var n=document.createElement(e[0]);return n.appendChild(el.apply(void 0,wo(Oo(e).call(e,1)))),n}var il,nl=function(){function t(e,i,n){var o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1,r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:function(){return!1};Nn(this,t),this.parent=e,this.changedOptions=[],this.container=i,this.allowCreation=!1,this.hideOption=r,this.options={},this.initialized=!1,this.popupCounter=0,this.defaultOptions={enabled:!1,filter:!0,container:void 0,showButton:!0},At(this.options,this.defaultOptions),this.configureOptions=n,this.moduleOptions={},this.domElements=[],this.popupDiv={},this.popupLimit=5,this.popupHistory={},this.colorPicker=new tl(o),this.wrapper=void 0}return Fn(t,[{key:\"setOptions\",value:function(t){if(void 0!==t){this.popupHistory={},this._removePopup();var e=!0;if(\"string\"==typeof t)this.options.filter=t;else if(So(t))this.options.filter=t.join();else if(\"object\"===go(t)){if(null==t)throw new TypeError(\"options cannot be null\");void 0!==t.container&&(this.options.container=t.container),void 0!==mr(t)&&(this.options.filter=mr(t)),void 0!==t.showButton&&(this.options.showButton=t.showButton),void 0!==t.enabled&&(e=t.enabled)}else\"boolean\"==typeof t?(this.options.filter=!0,e=t):\"function\"==typeof t&&(this.options.filter=t,e=!0);!1===mr(this.options)&&(e=!1),this.options.enabled=e}this._clean()}},{key:\"setModuleOptions\",value:function(t){this.moduleOptions=t,!0===this.options.enabled&&(this._clean(),void 0!==this.options.container&&(this.container=this.options.container),this._create())}},{key:\"_create\",value:function(){this._clean(),this.changedOptions=[];var t=mr(this.options),e=0,i=!1;for(var n in this.configureOptions)Object.prototype.hasOwnProperty.call(this.configureOptions,n)&&(this.allowCreation=!1,i=!1,\"function\"==typeof t?i=(i=t(n,[]))||this._handleObject(this.configureOptions[n],[n],!0):!0!==t&&-1===Hr(t).call(t,n)||(i=!0),!1!==i&&(this.allowCreation=!0,e>0&&this._makeItem([]),this._makeHeader(n),this._handleObject(this.configureOptions[n],[n])),e++);this._makeButton(),this._push()}},{key:\"_push\",value:function(){this.wrapper=document.createElement(\"div\"),this.wrapper.className=\"vis-configuration-wrapper\",this.container.appendChild(this.wrapper);for(var t=0;t<this.domElements.length;t++)this.wrapper.appendChild(this.domElements[t]);this._showPopupIfNeeded()}},{key:\"_clean\",value:function(){for(var t=0;t<this.domElements.length;t++)this.wrapper.removeChild(this.domElements[t]);void 0!==this.wrapper&&(this.container.removeChild(this.wrapper),this.wrapper=void 0),this.domElements=[],this._removePopup()}},{key:\"_getValue\",value:function(t){for(var e=this.moduleOptions,i=0;i<t.length;i++){if(void 0===e[t[i]]){e=void 0;break}e=e[t[i]]}return e}},{key:\"_makeItem\",value:function(t){if(!0===this.allowCreation){var e=document.createElement(\"div\");e.className=\"vis-configuration vis-config-item vis-config-s\"+t.length;for(var i=arguments.length,n=new Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];return Wo(n).call(n,(function(t){e.appendChild(t)})),this.domElements.push(e),this.domElements.length}return 0}},{key:\"_makeHeader\",value:function(t){var e=document.createElement(\"div\");e.className=\"vis-configuration vis-config-header\",e.innerText=t,this._makeItem([],e)}},{key:\"_makeLabel\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=document.createElement(\"div\");if(n.className=\"vis-configuration vis-config-label vis-config-s\"+e.length,!0===i){for(;n.firstChild;)n.removeChild(n.firstChild);n.appendChild(el(\"i\",\"b\",t))}else n.innerText=t+\":\";return n}},{key:\"_makeDropdown\",value:function(t,e,i){var n=document.createElement(\"select\");n.className=\"vis-configuration vis-config-select\";var o=0;void 0!==e&&-1!==Hr(t).call(t,e)&&(o=Hr(t).call(t,e));for(var r=0;r<t.length;r++){var s=document.createElement(\"option\");s.value=t[r],r===o&&(s.selected=\"selected\"),s.innerText=t[r],n.appendChild(s)}var a=this;n.onchange=function(){a._update(this.value,i)};var h=this._makeLabel(i[i.length-1],i);this._makeItem(i,h,n)}},{key:\"_makeRange\",value:function(t,e,i){var n=t[0],o=t[1],r=t[2],s=t[3],a=document.createElement(\"input\");a.className=\"vis-configuration vis-config-range\";try{a.type=\"range\",a.min=o,a.max=r}catch(t){}a.step=s;var h=\"\",l=0;if(void 0!==e){var d=1.2;e<0&&e*d<o?(a.min=Math.ceil(e*d),l=a.min,h=\"range increased\"):e/d<o&&(a.min=Math.ceil(e/d),l=a.min,h=\"range increased\"),e*d>r&&1!==r&&(a.max=Math.ceil(e*d),l=a.max,h=\"range increased\"),a.value=e}else a.value=n;var c=document.createElement(\"input\");c.className=\"vis-configuration vis-config-rangeinput\",c.value=a.value;var u=this;a.onchange=function(){c.value=this.value,u._update(Number(this.value),i)},a.oninput=function(){c.value=this.value};var f=this._makeLabel(i[i.length-1],i),p=this._makeItem(i,f,a,c);\"\"!==h&&this.popupHistory[p]!==l&&(this.popupHistory[p]=l,this._setupPopup(h,p))}},{key:\"_makeButton\",value:function(){var t=this;if(!0===this.options.showButton){var e=document.createElement(\"div\");e.className=\"vis-configuration vis-config-button\",e.innerText=\"generate options\",e.onclick=function(){t._printOptions()},e.onmouseover=function(){e.className=\"vis-configuration vis-config-button hover\"},e.onmouseout=function(){e.className=\"vis-configuration vis-config-button\"},this.optionsContainer=document.createElement(\"div\"),this.optionsContainer.className=\"vis-configuration vis-config-option-container\",this.domElements.push(this.optionsContainer),this.domElements.push(e)}}},{key:\"_setupPopup\",value:function(t,e){var i=this;if(!0===this.initialized&&!0===this.allowCreation&&this.popupCounter<this.popupLimit){var n=document.createElement(\"div\");n.id=\"vis-configuration-popup\",n.className=\"vis-configuration-popup\",n.innerText=t,n.onclick=function(){i._removePopup()},this.popupCounter+=1,this.popupDiv={html:n,index:e}}}},{key:\"_removePopup\",value:function(){void 0!==this.popupDiv.html&&(this.popupDiv.html.parentNode.removeChild(this.popupDiv.html),clearTimeout(this.popupDiv.hideTimeout),clearTimeout(this.popupDiv.deleteTimeout),this.popupDiv={})}},{key:\"_showPopupIfNeeded\",value:function(){var t=this;if(void 0!==this.popupDiv.html){var e=this.domElements[this.popupDiv.index].getBoundingClientRect();this.popupDiv.html.style.left=e.left+\"px\",this.popupDiv.html.style.top=e.top-30+\"px\",document.body.appendChild(this.popupDiv.html),this.popupDiv.hideTimeout=rs((function(){t.popupDiv.html.style.opacity=0}),1500),this.popupDiv.deleteTimeout=rs((function(){t._removePopup()}),1800)}}},{key:\"_makeCheckbox\",value:function(t,e,i){var n=document.createElement(\"input\");n.type=\"checkbox\",n.className=\"vis-configuration vis-config-checkbox\",n.checked=t,void 0!==e&&(n.checked=e,e!==t&&(\"object\"===go(t)?e!==t.enabled&&this.changedOptions.push({path:i,value:e}):this.changedOptions.push({path:i,value:e})));var o=this;n.onchange=function(){o._update(this.checked,i)};var r=this._makeLabel(i[i.length-1],i);this._makeItem(i,r,n)}},{key:\"_makeTextInput\",value:function(t,e,i){var n=document.createElement(\"input\");n.type=\"text\",n.className=\"vis-configuration vis-config-text\",n.value=e,e!==t&&this.changedOptions.push({path:i,value:e});var o=this;n.onchange=function(){o._update(this.value,i)};var r=this._makeLabel(i[i.length-1],i);this._makeItem(i,r,n)}},{key:\"_makeColorField\",value:function(t,e,i){var n=this,o=t[1],r=document.createElement(\"div\");\"none\"!==(e=void 0===e?o:e)?(r.className=\"vis-configuration vis-config-colorBlock\",r.style.backgroundColor=e):r.className=\"vis-configuration vis-config-colorBlock none\",e=void 0===e?o:e,r.onclick=function(){n._showColorPicker(e,r,i)};var s=this._makeLabel(i[i.length-1],i);this._makeItem(i,s,r)}},{key:\"_showColorPicker\",value:function(t,e,i){var n=this;e.onclick=function(){},this.colorPicker.insertTo(e),this.colorPicker.show(),this.colorPicker.setColor(t),this.colorPicker.setUpdateCallback((function(t){var o=\"rgba(\"+t.r+\",\"+t.g+\",\"+t.b+\",\"+t.a+\")\";e.style.backgroundColor=o,n._update(o,i)})),this.colorPicker.setCloseCallback((function(){e.onclick=function(){n._showColorPicker(t,e,i)}}))}},{key:\"_handleObject\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=!1,o=mr(this.options),r=!1;for(var s in t)if(Object.prototype.hasOwnProperty.call(t,s)){n=!0;var a=t[s],h=Sh(e,s);if(\"function\"==typeof o&&!1===(n=o(s,e))&&!So(a)&&\"string\"!=typeof a&&\"boolean\"!=typeof a&&a instanceof Object&&(this.allowCreation=!1,n=this._handleObject(a,h,!0),this.allowCreation=!1===i),!1!==n){r=!0;var l=this._getValue(h);if(So(a))this._handleArray(a,l,h);else if(\"string\"==typeof a)this._makeTextInput(a,l,h);else if(\"boolean\"==typeof a)this._makeCheckbox(a,l,h);else if(a instanceof Object){if(!this.hideOption(e,s,this.moduleOptions))if(void 0!==a.enabled){var d=Sh(h,\"enabled\"),c=this._getValue(d);if(!0===c){var u=this._makeLabel(s,h,!0);this._makeItem(h,u),r=this._handleObject(a,h)||r}else this._makeCheckbox(a,c,h)}else{var f=this._makeLabel(s,h,!0);this._makeItem(h,f),r=this._handleObject(a,h)||r}}else console.error(\"dont know how to handle\",a,s,h)}}return r}},{key:\"_handleArray\",value:function(t,e,i){\"string\"==typeof t[0]&&\"color\"===t[0]?(this._makeColorField(t,e,i),t[1]!==e&&this.changedOptions.push({path:i,value:e})):\"string\"==typeof t[0]?(this._makeDropdown(t,e,i),t[0]!==e&&this.changedOptions.push({path:i,value:e})):\"number\"==typeof t[0]&&(this._makeRange(t,e,i),t[0]!==e&&this.changedOptions.push({path:i,value:Number(e)}))}},{key:\"_update\",value:function(t,e){var i=this._constructOptions(t,e);this.parent.body&&this.parent.body.emitter&&this.parent.body.emitter.emit&&this.parent.body.emitter.emit(\"configChange\",i),this.initialized=!0,this.parent.setOptions(i)}},{key:\"_constructOptions\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=i;t=\"false\"!==(t=\"true\"===t||t)&&t;for(var o=0;o<e.length;o++)\"global\"!==e[o]&&(void 0===n[e[o]]&&(n[e[o]]={}),o!==e.length-1?n=n[e[o]]:n[e[o]]=t);return i}},{key:\"_printOptions\",value:function(){for(var t=this.getOptions();this.optionsContainer.firstChild;)this.optionsContainer.removeChild(this.optionsContainer.firstChild);this.optionsContainer.appendChild(el(\"pre\",\"const options = \"+es(t,null,2)))}},{key:\"getOptions\",value:function(){for(var t={},e=0;e<this.changedOptions.length;e++)this._constructOptions(this.changedOptions[e].value,this.changedOptions[e].path,t);return t}}]),t}(),ol=!1,rl=\"background: #FFeeee; color: #dd0000\",sl=ch,al=tl,hl=nl,ll=dh,dl=function(){function t(e,i){Nn(this,t),this.container=e,this.overflowMethod=i||\"cap\",this.x=0,this.y=0,this.padding=5,this.hidden=!1,this.frame=document.createElement(\"div\"),this.frame.className=\"vis-tooltip\",this.container.appendChild(this.frame)}return Fn(t,[{key:\"setPosition\",value:function(t,e){this.x=Br(t),this.y=Br(e)}},{key:\"setText\",value:function(t){if(t instanceof Element){for(;this.frame.firstChild;)this.frame.removeChild(this.frame.firstChild);this.frame.appendChild(t)}else this.frame.innerText=t}},{key:\"show\",value:function(t){if(void 0===t&&(t=!0),!0===t){var e=this.frame.clientHeight,i=this.frame.clientWidth,n=this.frame.parentNode.clientHeight,o=this.frame.parentNode.clientWidth,r=0,s=0;if(\"flip\"==this.overflowMethod){var a=!1,h=!0;this.y-e<this.padding&&(h=!1),this.x+i>o-this.padding&&(a=!0),r=a?this.x-i:this.x,s=h?this.y-e:this.y}else(s=this.y-e)+e+this.padding>n&&(s=n-e-this.padding),s<this.padding&&(s=this.padding),(r=this.x)+i+this.padding>o&&(r=o-i-this.padding),r<this.padding&&(r=this.padding);this.frame.style.left=r+\"px\",this.frame.style.top=s+\"px\",this.frame.style.visibility=\"visible\",this.hidden=!1}else this.hide()}},{key:\"hide\",value:function(){this.hidden=!0,this.frame.style.left=\"0\",this.frame.style.top=\"0\",this.frame.style.visibility=\"hidden\"}},{key:\"destroy\",value:function(){this.frame.parentNode.removeChild(this.frame)}}]),t}(),cl=rl,ul=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"validate\",value:function(e,i,n){ol=!1,il=i;var o=i;return void 0!==n&&(o=i[n]),t.parse(e,o,[]),ol}},{key:\"parse\",value:function(e,i,n){for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&t.check(o,e,i,n)}},{key:\"check\",value:function(e,i,n,o){if(void 0!==n[e]||void 0!==n.__any__){var r=e,s=!0;void 0===n[e]&&void 0!==n.__any__&&(r=\"__any__\",s=\"object\"===t.getType(i[e]));var a=n[r];s&&void 0!==a.__type__&&(a=a.__type__),t.checkFields(e,i,n,r,a,o)}else t.getSuggestion(e,n,o)}},{key:\"checkFields\",value:function(e,i,n,o,r,s){var a=function(i){console.error(\"%c\"+i+t.printLocation(s,e),rl)},h=t.getType(i[e]),l=r[h];void 0!==l?\"array\"===t.getType(l)&&-1===Hr(l).call(l,i[e])?(a('Invalid option detected in \"'+e+'\". Allowed values are:'+t.print(l)+' not \"'+i[e]+'\". '),ol=!0):\"object\"===h&&\"__any__\"!==o&&(s=Sh(s,e),t.parse(i[e],n[o],s)):void 0===r.any&&(a('Invalid type received for \"'+e+'\". Expected: '+t.print(zo(r))+\". Received [\"+h+'] \"'+i[e]+'\"'),ol=!0)}},{key:\"getType\",value:function(t){var e=go(t);return\"object\"===e?null===t?\"null\":t instanceof Boolean?\"boolean\":t instanceof Number?\"number\":t instanceof String?\"string\":So(t)?\"array\":t instanceof Date?\"date\":void 0!==t.nodeType?\"dom\":!0===t._isAMomentObject?\"moment\":\"object\":\"number\"===e?\"number\":\"boolean\"===e?\"boolean\":\"string\"===e?\"string\":void 0===e?\"undefined\":e}},{key:\"getSuggestion\",value:function(e,i,n){var o,r=t.findInOptions(e,i,n,!1),s=t.findInOptions(e,il,[],!0);o=void 0!==r.indexMatch?\" in \"+t.printLocation(r.path,e,\"\")+'Perhaps it was incomplete? Did you mean: \"'+r.indexMatch+'\"?\\n\\n':s.distance<=4&&r.distance>s.distance?\" in \"+t.printLocation(r.path,e,\"\")+\"Perhaps it was misplaced? Matching option found at: \"+t.printLocation(s.path,s.closestMatch,\"\"):r.distance<=8?'. Did you mean \"'+r.closestMatch+'\"?'+t.printLocation(r.path,e):\". Did you mean one of these: \"+t.print(zo(i))+t.printLocation(n,e),console.error('%cUnknown option detected: \"'+e+'\"'+o,rl),ol=!0}},{key:\"findInOptions\",value:function(e,i,n){var o=arguments.length>3&&void 0!==arguments[3]&&arguments[3],r=1e9,s=\"\",a=[],h=e.toLowerCase(),l=void 0;for(var d in i){var c=void 0;if(void 0!==i[d].__type__&&!0===o){var u=t.findInOptions(e,i[d],Sh(n,d));r>u.distance&&(s=u.closestMatch,a=u.path,r=u.distance,l=u.indexMatch)}else{var f;-1!==Hr(f=d.toLowerCase()).call(f,h)&&(l=d),r>(c=t.levenshteinDistance(e,d))&&(s=d,a=Th(n),r=c)}}return{closestMatch:s,path:a,distance:r,indexMatch:l}}},{key:\"printLocation\",value:function(t,e){for(var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:\"Problem value found at: \\n\",n=\"\\n\\n\"+i+\"options = {\\n\",o=0;o<t.length;o++){for(var r=0;r<o+1;r++)n+=\"  \";n+=t[o]+\": {\\n\"}for(var s=0;s<t.length+1;s++)n+=\"  \";n+=e+\"\\n\";for(var a=0;a<t.length+1;a++){for(var h=0;h<t.length-a;h++)n+=\"  \";n+=\"}\\n\"}return n+\"\\n\\n\"}},{key:\"print\",value:function(t){return es(t).replace(/(\")|(\\[)|(\\])|(,\"__type__\")/g,\"\").replace(/(,)/g,\", \")}},{key:\"levenshteinDistance\",value:function(t,e){if(0===t.length)return e.length;if(0===e.length)return t.length;var i,n,o=[];for(i=0;i<=e.length;i++)o[i]=[i];for(n=0;n<=t.length;n++)o[0][n]=n;for(i=1;i<=e.length;i++)for(n=1;n<=t.length;n++)e.charAt(i-1)==t.charAt(n-1)?o[i][n]=o[i-1][n-1]:o[i][n]=Math.min(o[i-1][n-1]+1,Math.min(o[i][n-1]+1,o[i-1][n]+1));return o[e.length][t.length]}}]),t}(),fl=Object.freeze({__proto__:null,Activator:sl,Alea:ah,ColorPicker:al,Configurator:hl,DELETE:eh,HSVToHex:Vh,HSVToRGB:qh,Hammer:ll,Popup:dl,RGBToHSV:Lh,RGBToHex:jh,VALIDATOR_PRINT_STYLE:cl,Validator:ul,addClassName:function(t,e){var i=t.className.split(\" \"),n=e.split(\" \");i=Eo(i).call(i,mr(n).call(n,(function(t){return!dr(i).call(i,t)}))),t.className=i.join(\" \")},addCssText:function(t,e){var i=Hh(t.style.cssText),n=Hh(e),o=Qa(Qa({},i),n);t.style.cssText=Wh(o)},addEventListener:Bh,binarySearchCustom:function(t,e,i,n){for(var o=0,r=0,s=t.length-1;r<=s&&o<1e4;){var a=Math.floor((r+s)/2),h=t[a],l=e(void 0===n?h[i]:h[i][n]);if(0==l)return a;-1==l?r=a+1:s=a-1,o++}return-1},binarySearchValue:function(t,e,i,n,o){var r,s,a,h,l=0,d=0,c=t.length-1;for(o=null!=o?o:function(t,e){return t==e?0:t<e?-1:1};d<=c&&l<1e4;){if(h=Math.floor(.5*(c+d)),r=t[Math.max(0,h-1)][i],s=t[h][i],a=t[Math.min(t.length-1,h+1)][i],0==o(s,e))return h;if(o(r,e)<0&&o(s,e)>0)return\"before\"==n?Math.max(0,h-1):h;if(o(s,e)<0&&o(a,e)>0)return\"before\"==n?h:Math.min(t.length-1,h+1);o(s,e)<0?d=h+1:c=h-1,l++}return-1},bridgeObject:Kh,copyAndExtendArray:Sh,copyArray:Th,deepExtend:Ch,deepObjectAssign:nh,easingFunctions:Zh,equalArray:function(t,e){if(t.length!==e.length)return!1;for(var i=0,n=t.length;i<n;i++)if(t[i]!=e[i])return!1;return!0},extend:xh,fillIfDefined:_h,forEach:Dh,getAbsoluteLeft:Mh,getAbsoluteRight:function(t){return t.getBoundingClientRect().right},getAbsoluteTop:Ph,getScrollBarWidth:function(){var t=document.createElement(\"p\");t.style.width=\"100%\",t.style.height=\"200px\";var e=document.createElement(\"div\");e.style.position=\"absolute\",e.style.top=\"0px\",e.style.left=\"0px\",e.style.visibility=\"hidden\",e.style.width=\"200px\",e.style.height=\"150px\",e.style.overflow=\"hidden\",e.appendChild(t),document.body.appendChild(e);var i=t.offsetWidth;e.style.overflow=\"scroll\";var n=t.offsetWidth;return i==n&&(n=e.clientWidth),document.body.removeChild(e),i-n},getTarget:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window.event,e=null;return t&&(t.target?e=t.target:t.srcElement&&(e=t.srcElement)),e instanceof Element&&(null==e.nodeType||3!=e.nodeType||(e=e.parentNode)instanceof Element)?e:null},getType:function(t){var e=go(t);return\"object\"===e?null===t?\"null\":t instanceof Boolean?\"Boolean\":t instanceof Number?\"Number\":t instanceof String?\"String\":So(t)?\"Array\":t instanceof Date?\"Date\":\"Object\":\"number\"===e?\"Number\":\"boolean\"===e?\"Boolean\":\"string\"===e?\"String\":void 0===e?\"undefined\":e},hasParent:function(t,e){for(var i=t;i;){if(i===e)return!0;if(!i.parentNode)return!1;i=i.parentNode}return!1},hexToHSV:Uh,hexToRGB:Ah,insertSort:function(t,e){for(var i=0;i<t.length;i++){var n=t[i],o=void 0;for(o=i;o>0&&e(n,t[o-1])<0;o--)t[o]=t[o-1];t[o]=n}return t},isDate:function(t){if(t instanceof Date)return!0;if(bh(t)){if(uh.exec(t))return!0;if(!isNaN(Date.parse(t)))return!0}return!1},isNumber:yh,isObject:wh,isString:bh,isValidHex:Yh,isValidRGB:Xh,isValidRGBA:Gh,mergeOptions:$h,option:Nh,overrideOpacity:Fh,parseColor:Rh,preventDefault:function(t){t||(t=window.event),t&&(t.preventDefault?t.preventDefault():t.returnValue=!1)},pureDeepObjectAssign:ih,recursiveDOMDelete:mh,removeClassName:function(t,e){var i=t.className.split(\" \"),n=e.split(\" \");i=mr(i).call(i,(function(t){return!dr(n).call(n,t)})),t.className=i.join(\" \")},removeCssText:function(t,e){var i=Hh(t.style.cssText),n=Hh(e);for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&delete i[o];t.style.cssText=Wh(i)},removeEventListener:zh,selectiveBridgeObject:function(t,e){if(null!==e&&\"object\"===go(e)){for(var i=Gr(e),n=0;n<t.length;n++)Object.prototype.hasOwnProperty.call(e,t[n])&&\"object\"==go(e[t[n]])&&(i[t[n]]=Kh(e[t[n]]));return i}return null},selectiveDeepExtend:Eh,selectiveExtend:function(t,e){if(!So(t))throw new Error(\"Array with property names expected as first argument\");for(var i=arguments.length,n=new Array(i>2?i-2:0),o=2;o<i;o++)n[o-2]=arguments[o];for(var r=0,s=n;r<s.length;r++)for(var a=s[r],h=0;h<t.length;h++){var l=t[h];a&&Object.prototype.hasOwnProperty.call(a,l)&&(e[l]=a[l])}return e},selectiveNotDeepExtend:Oh,throttle:function(t){var e=!1;return function(){e||(e=!0,requestAnimationFrame((function(){e=!1,t()})))}},toArray:Ih,topMost:Qh,updateProperty:function(t,e,i){return t[e]!==i&&(t[e]=i,!0)}});function pl(t){return _l=t,function(){var t={};xl=0,void(El=_l.charAt(0)),Nl(),\"strict\"===Ol&&(t.strict=!0,Nl());\"graph\"!==Ol&&\"digraph\"!==Ol||(t.type=Ol,Nl());Cl===bl&&(t.id=Ol,Nl());if(\"{\"!=Ol)throw Hl(\"Angle bracket { expected\");if(Nl(),Al(t),\"}\"!=Ol)throw Hl(\"Angle bracket } expected\");if(Nl(),\"\"!==Ol)throw Hl(\"End of file expected\");return Nl(),delete t.node,delete t.edge,delete t.graph,t}()}var vl={fontsize:\"font.size\",fontcolor:\"font.color\",labelfontcolor:\"font.color\",fontname:\"font.face\",color:[\"color.border\",\"color.background\"],fillcolor:\"color.background\",tooltip:\"title\",labeltooltip:\"title\"},gl=Gr(vl);gl.color=\"color.color\",gl.style=\"dashes\";var yl=0,ml=1,bl=2,wl=3,kl={\"{\":!0,\"}\":!0,\"[\":!0,\"]\":!0,\";\":!0,\"=\":!0,\",\":!0,\"->\":!0,\"--\":!0},_l=\"\",xl=0,El=\"\",Ol=\"\",Cl=yl;function Sl(){xl++,El=_l.charAt(xl)}function Tl(){return _l.charAt(xl+1)}function Ml(t){var e=t.charCodeAt(0);return e<47?35===e||46===e:e<59?e>47:e<91?e>64:e<96?95===e:e<123&&e>96}function Pl(t,e){if(t||(t={}),e)for(var i in e)e.hasOwnProperty(i)&&(t[i]=e[i]);return t}function Dl(t,e,i){for(var n=e.split(\".\"),o=t;n.length;){var r=n.shift();n.length?(o[r]||(o[r]={}),o=o[r]):o[r]=i}}function Il(t,e){for(var i,n,o=null,r=[t],s=t;s.parent;)r.push(s.parent),s=s.parent;if(s.nodes)for(i=0,n=s.nodes.length;i<n;i++)if(e.id===s.nodes[i].id){o=s.nodes[i];break}for(o||(o={id:e.id},t.node&&(o.attr=Pl(o.attr,t.node))),i=r.length-1;i>=0;i--){var a,h=r[i];h.nodes||(h.nodes=[]),-1===Hr(a=h.nodes).call(a,o)&&h.nodes.push(o)}e.attr&&(o.attr=Pl(o.attr,e.attr))}function Bl(t,e){if(t.edges||(t.edges=[]),t.edges.push(e),t.edge){var i=Pl({},t.edge);e.attr=Pl(i,e.attr)}}function zl(t,e,i,n,o){var r={from:e,to:i,type:n};return t.edge&&(r.attr=Pl({},t.edge)),r.attr=Pl(r.attr||{},o),null!=o&&o.hasOwnProperty(\"arrows\")&&null!=o.arrows&&(r.arrows={to:{enabled:!0,type:o.arrows.type}},o.arrows=null),r}function Nl(){for(Cl=yl,Ol=\"\";\" \"===El||\"\\t\"===El||\"\\n\"===El||\"\\r\"===El;)Sl();do{var t=!1;if(\"#\"===El){for(var e=xl-1;\" \"===_l.charAt(e)||\"\\t\"===_l.charAt(e);)e--;if(\"\\n\"===_l.charAt(e)||\"\"===_l.charAt(e)){for(;\"\"!=El&&\"\\n\"!=El;)Sl();t=!0}}if(\"/\"===El&&\"/\"===Tl()){for(;\"\"!=El&&\"\\n\"!=El;)Sl();t=!0}if(\"/\"===El&&\"*\"===Tl()){for(;\"\"!=El;){if(\"*\"===El&&\"/\"===Tl()){Sl(),Sl();break}Sl()}t=!0}for(;\" \"===El||\"\\t\"===El||\"\\n\"===El||\"\\r\"===El;)Sl()}while(t);if(\"\"!==El){var i=El+Tl();if(kl[i])return Cl=ml,Ol=i,Sl(),void Sl();if(kl[El])return Cl=ml,Ol=El,void Sl();if(Ml(El)||\"-\"===El){for(Ol+=El,Sl();Ml(El);)Ol+=El,Sl();return\"false\"===Ol?Ol=!1:\"true\"===Ol?Ol=!0:isNaN(Number(Ol))||(Ol=Number(Ol)),void(Cl=bl)}if('\"'===El){for(Sl();\"\"!=El&&('\"'!=El||'\"'===El&&'\"'===Tl());)'\"'===El?(Ol+=El,Sl()):\"\\\\\"===El&&\"n\"===Tl()?(Ol+=\"\\n\",Sl()):Ol+=El,Sl();if('\"'!=El)throw Hl('End of string \" expected');return Sl(),void(Cl=bl)}for(Cl=wl;\"\"!=El;)Ol+=El,Sl();throw new SyntaxError('Syntax error in part \"'+Wl(Ol,30)+'\"')}Cl=ml}function Al(t){for(;\"\"!==Ol&&\"}\"!=Ol;)Fl(t),\";\"===Ol&&Nl()}function Fl(t){var e=jl(t);if(e)Rl(t,e);else if(!function(t){if(\"node\"===Ol)return Nl(),t.node=Ll(),\"node\";if(\"edge\"===Ol)return Nl(),t.edge=Ll(),\"edge\";if(\"graph\"===Ol)return Nl(),t.graph=Ll(),\"graph\";return null}(t)){if(Cl!=bl)throw Hl(\"Identifier expected\");var i=Ol;if(Nl(),\"=\"===Ol){if(Nl(),Cl!=bl)throw Hl(\"Identifier expected\");t[i]=Ol,Nl()}else!function(t,e){var i={id:e},n=Ll();n&&(i.attr=n);Il(t,i),Rl(t,e)}(t,i)}}function jl(t){var e=null;if(\"subgraph\"===Ol&&((e={}).type=\"subgraph\",Nl(),Cl===bl&&(e.id=Ol,Nl())),\"{\"===Ol){if(Nl(),e||(e={}),e.parent=t,e.node=t.node,e.edge=t.edge,e.graph=t.graph,Al(e),\"}\"!=Ol)throw Hl(\"Angle bracket } expected\");Nl(),delete e.node,delete e.edge,delete e.graph,delete e.parent,t.subgraphs||(t.subgraphs=[]),t.subgraphs.push(e)}return e}function Rl(t,e){for(;\"->\"===Ol||\"--\"===Ol;){var i,n=Ol;Nl();var o=jl(t);if(o)i=o;else{if(Cl!=bl)throw Hl(\"Identifier or subgraph expected\");Il(t,{id:i=Ol}),Nl()}Bl(t,zl(t,e,i,n,Ll())),e=i}}function Ll(){for(var t,e,i=null,n={dashed:!0,solid:!1,dotted:[1,5]},o={dot:\"circle\",box:\"box\",crow:\"crow\",curve:\"curve\",icurve:\"inv_curve\",normal:\"triangle\",inv:\"inv_triangle\",diamond:\"diamond\",tee:\"bar\",vee:\"vee\"},r=new Array,s=new Array;\"[\"===Ol;){for(Nl(),i={};\"\"!==Ol&&\"]\"!=Ol;){if(Cl!=bl)throw Hl(\"Attribute name expected\");var a=Ol;if(Nl(),\"=\"!=Ol)throw Hl(\"Equal sign = expected\");if(Nl(),Cl!=bl)throw Hl(\"Attribute value expected\");var h=Ol;\"style\"===a&&(h=n[h]),\"arrowhead\"===a&&(a=\"arrows\",h={to:{enabled:!0,type:o[h]}}),\"arrowtail\"===a&&(a=\"arrows\",h={from:{enabled:!0,type:o[h]}}),r.push({attr:i,name:a,value:h}),s.push(a),Nl(),\",\"==Ol&&Nl()}if(\"]\"!=Ol)throw Hl(\"Bracket ] expected\");Nl()}if(dr(s).call(s,\"dir\")){var l={arrows:{}};for(t=0;t<r.length;t++)if(\"arrows\"===r[t].name)if(null!=r[t].value.to)l.arrows.to=t;else{if(null==r[t].value.from)throw Hl(\"Invalid value of arrows\");l.arrows.from=t}else\"dir\"===r[t].name&&(l.dir=t);var d,c,u=r[l.dir].value;if(!dr(s).call(s,\"arrows\"))if(\"both\"===u)r.push({attr:r[l.dir].attr,name:\"arrows\",value:{to:{enabled:!0}}}),l.arrows.to=r.length-1,r.push({attr:r[l.dir].attr,name:\"arrows\",value:{from:{enabled:!0}}}),l.arrows.from=r.length-1;else if(\"forward\"===u)r.push({attr:r[l.dir].attr,name:\"arrows\",value:{to:{enabled:!0}}}),l.arrows.to=r.length-1;else if(\"back\"===u)r.push({attr:r[l.dir].attr,name:\"arrows\",value:{from:{enabled:!0}}}),l.arrows.from=r.length-1;else{if(\"none\"!==u)throw Hl('Invalid dir type \"'+u+'\"');r.push({attr:r[l.dir].attr,name:\"arrows\",value:\"\"}),l.arrows.to=r.length-1}if(\"both\"===u)l.arrows.to&&l.arrows.from?(c=r[l.arrows.to].value.to.type,d=r[l.arrows.from].value.from.type,r[l.arrows.to]={attr:r[l.arrows.to].attr,name:r[l.arrows.to].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}},er(r).call(r,l.arrows.from,1)):l.arrows.to?(c=r[l.arrows.to].value.to.type,d=\"arrow\",r[l.arrows.to]={attr:r[l.arrows.to].attr,name:r[l.arrows.to].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}}):l.arrows.from&&(c=\"arrow\",d=r[l.arrows.from].value.from.type,r[l.arrows.from]={attr:r[l.arrows.from].attr,name:r[l.arrows.from].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}});else if(\"back\"===u)l.arrows.to&&l.arrows.from?(c=\"\",d=r[l.arrows.from].value.from.type,r[l.arrows.from]={attr:r[l.arrows.from].attr,name:r[l.arrows.from].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}}):l.arrows.to?(c=\"\",d=\"arrow\",l.arrows.from=l.arrows.to,r[l.arrows.from]={attr:r[l.arrows.from].attr,name:r[l.arrows.from].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}}):l.arrows.from&&(c=\"\",d=r[l.arrows.from].value.from.type,r[l.arrows.to]={attr:r[l.arrows.from].attr,name:r[l.arrows.from].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}}),r[l.arrows.from]={attr:r[l.arrows.from].attr,name:r[l.arrows.from].name,value:{from:{enabled:!0,type:r[l.arrows.from].value.from.type}}};else if(\"none\"===u){var f;r[f=l.arrows.to?l.arrows.to:l.arrows.from]={attr:r[f].attr,name:r[f].name,value:\"\"}}else{if(\"forward\"!==u)throw Hl('Invalid dir type \"'+u+'\"');l.arrows.to&&l.arrows.from||l.arrows.to?(c=r[l.arrows.to].value.to.type,d=\"\",r[l.arrows.to]={attr:r[l.arrows.to].attr,name:r[l.arrows.to].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}}):l.arrows.from&&(c=\"arrow\",d=\"\",l.arrows.to=l.arrows.from,r[l.arrows.to]={attr:r[l.arrows.to].attr,name:r[l.arrows.to].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}}),r[l.arrows.to]={attr:r[l.arrows.to].attr,name:r[l.arrows.to].name,value:{to:{enabled:!0,type:r[l.arrows.to].value.to.type}}}}er(r).call(r,l.dir,1)}if(dr(s).call(s,\"penwidth\")){var p=[];for(e=r.length,t=0;t<e;t++)\"width\"!==r[t].name&&(\"penwidth\"===r[t].name&&(r[t].name=\"width\"),p.push(r[t]));r=p}for(e=r.length,t=0;t<e;t++)Dl(r[t].attr,r[t].name,r[t].value);return i}function Hl(t){return new SyntaxError(t+', got \"'+Wl(Ol,30)+'\" (char '+xl+\")\")}function Wl(t,e){return t.length<=e?t:t.substr(0,27)+\"...\"}function ql(t,e,i){for(var n=e.split(\".\"),o=n.pop(),r=t,s=0;s<n.length;s++){var a=n[s];a in r||(r[a]={}),r=r[a]}return r[o]=i,t}function Vl(t,e){var i={};for(var n in t)if(t.hasOwnProperty(n)){var o=e[n];So(o)?Wo(o).call(o,(function(e){ql(i,e,t[n])})):ql(i,\"string\"==typeof o?o:n,t[n])}return i}function Ul(t){var e,i=pl(t),n={nodes:[],edges:[],options:{}};i.nodes&&Wo(e=i.nodes).call(e,(function(t){var e={id:t.id,label:String(t.label||t.id)};Pl(e,Vl(t.attr,vl)),e.image&&(e.shape=\"image\"),n.nodes.push(e)}));if(i.edges){var o,r=function(t){var e={from:t.from,to:t.to};return Pl(e,Vl(t.attr,gl)),null==e.arrows&&\"->\"===t.type&&(e.arrows=\"to\"),e};Wo(o=i.edges).call(o,(function(t){var e,i,o,s,a,h,l;(e=t.from instanceof Object?t.from.nodes:{id:t.from},i=t.to instanceof Object?t.to.nodes:{id:t.to},t.from instanceof Object&&t.from.edges)&&Wo(o=t.from.edges).call(o,(function(t){var e=r(t);n.edges.push(e)}));(a=i,h=function(e,i){var o=zl(n,e.id,i.id,t.type,t.attr),s=r(o);n.edges.push(s)},So(s=e)?Wo(s).call(s,(function(t){So(a)?Wo(a).call(a,(function(e){h(t,e)})):h(t,a)})):So(a)?Wo(a).call(a,(function(t){h(s,t)})):h(s,a),t.to instanceof Object&&t.to.edges)&&Wo(l=t.to.edges).call(l,(function(t){var e=r(t);n.edges.push(e)}))}))}return i.attr&&(n.options=i.attr),n}var Yl=Object.freeze({__proto__:null,parseDOT:pl,DOTToGraph:Ul});function Xl(t,e){var i,n={edges:{inheritColor:!1},nodes:{fixed:!1,parseColor:!1}};null!=e&&(null!=e.fixed&&(n.nodes.fixed=e.fixed),null!=e.parseColor&&(n.nodes.parseColor=e.parseColor),null!=e.inheritColor&&(n.edges.inheritColor=e.inheritColor));var o=t.edges,r=Io(o).call(o,(function(t){var e={from:t.source,id:t.id,to:t.target};return null!=t.attributes&&(e.attributes=t.attributes),null!=t.label&&(e.label=t.label),null!=t.attributes&&null!=t.attributes.title&&(e.title=t.attributes.title),\"Directed\"===t.type&&(e.arrows=\"to\"),t.color&&!1===n.edges.inheritColor&&(e.color=t.color),e}));return{nodes:Io(i=t.nodes).call(i,(function(t){var e={id:t.id,fixed:n.nodes.fixed&&null!=t.x&&null!=t.y};return null!=t.attributes&&(e.attributes=t.attributes),null!=t.label&&(e.label=t.label),null!=t.size&&(e.size=t.size),null!=t.attributes&&null!=t.attributes.title&&(e.title=t.attributes.title),null!=t.title&&(e.title=t.title),null!=t.x&&(e.x=t.x),null!=t.y&&(e.y=t.y),null!=t.color&&(!0===n.nodes.parseColor?e.color=t.color:e.color={background:t.color,border:t.color,highlight:{background:t.color,border:t.color},hover:{background:t.color,border:t.color}}),e})),edges:r}}var Gl=Object.freeze({__proto__:null,parseGephi:Xl}),Kl=Object.freeze({__proto__:null,en:{addDescription:\"Click in an empty space to place a new node.\",addEdge:\"Add Edge\",addNode:\"Add Node\",back:\"Back\",close:\"Close\",createEdgeError:\"Cannot link edges to a cluster.\",del:\"Delete selected\",deleteClusterError:\"Clusters cannot be deleted.\",edgeDescription:\"Click on a node and drag the edge to another node to connect them.\",edit:\"Edit\",editClusterError:\"Clusters cannot be edited.\",editEdge:\"Edit Edge\",editEdgeDescription:\"Click on the control points and drag them to a node to connect to it.\",editNode:\"Edit Node\"},de:{addDescription:\"Klicke auf eine freie Stelle, um einen neuen Knoten zu plazieren.\",addEdge:\"Kante hinzufügen\",addNode:\"Knoten hinzufügen\",back:\"Zurück\",close:\"Schließen\",createEdgeError:\"Es ist nicht möglich, Kanten mit Clustern zu verbinden.\",del:\"Lösche Auswahl\",deleteClusterError:\"Cluster können nicht gelöscht werden.\",edgeDescription:\"Klicke auf einen Knoten und ziehe die Kante zu einem anderen Knoten, um diese zu verbinden.\",edit:\"Editieren\",editClusterError:\"Cluster können nicht editiert werden.\",editEdge:\"Kante editieren\",editEdgeDescription:\"Klicke auf die Verbindungspunkte und ziehe diese auf einen Knoten, um sie zu verbinden.\",editNode:\"Knoten editieren\"},es:{addDescription:\"Haga clic en un lugar vacío para colocar un nuevo nodo.\",addEdge:\"Añadir arista\",addNode:\"Añadir nodo\",back:\"Atrás\",close:\"Cerrar\",createEdgeError:\"No se puede conectar una arista a un grupo.\",del:\"Eliminar selección\",deleteClusterError:\"No es posible eliminar grupos.\",edgeDescription:\"Haga clic en un nodo y arrastre la arista hacia otro nodo para conectarlos.\",edit:\"Editar\",editClusterError:\"No es posible editar grupos.\",editEdge:\"Editar arista\",editEdgeDescription:\"Haga clic en un punto de control y arrastrelo a un nodo para conectarlo.\",editNode:\"Editar nodo\"},it:{addDescription:\"Clicca per aggiungere un nuovo nodo\",addEdge:\"Aggiungi un vertice\",addNode:\"Aggiungi un nodo\",back:\"Indietro\",close:\"Chiudere\",createEdgeError:\"Non si possono collegare vertici ad un cluster\",del:\"Cancella la selezione\",deleteClusterError:\"I cluster non possono essere cancellati\",edgeDescription:\"Clicca su un nodo e trascinalo ad un altro nodo per connetterli.\",edit:\"Modifica\",editClusterError:\"I clusters non possono essere modificati.\",editEdge:\"Modifica il vertice\",editEdgeDescription:\"Clicca sui Punti di controllo e trascinali ad un nodo per connetterli.\",editNode:\"Modifica il nodo\"},nl:{addDescription:\"Klik op een leeg gebied om een nieuwe node te maken.\",addEdge:\"Link toevoegen\",addNode:\"Node toevoegen\",back:\"Terug\",close:\"Sluiten\",createEdgeError:\"Kan geen link maken naar een cluster.\",del:\"Selectie verwijderen\",deleteClusterError:\"Clusters kunnen niet worden verwijderd.\",edgeDescription:\"Klik op een node en sleep de link naar een andere node om ze te verbinden.\",edit:\"Wijzigen\",editClusterError:\"Clusters kunnen niet worden aangepast.\",editEdge:\"Link wijzigen\",editEdgeDescription:\"Klik op de verbindingspunten en sleep ze naar een node om daarmee te verbinden.\",editNode:\"Node wijzigen\"},pt:{addDescription:\"Clique em um espaço em branco para adicionar um novo nó\",addEdge:\"Adicionar aresta\",addNode:\"Adicionar nó\",back:\"Voltar\",close:\"Fechar\",createEdgeError:\"Não foi possível linkar arestas a um cluster.\",del:\"Remover selecionado\",deleteClusterError:\"Clusters não puderam ser removidos.\",edgeDescription:\"Clique em um nó e arraste a aresta até outro nó para conectá-los\",edit:\"Editar\",editClusterError:\"Clusters não puderam ser editados.\",editEdge:\"Editar aresta\",editEdgeDescription:\"Clique nos pontos de controle e os arraste para um nó para conectá-los\",editNode:\"Editar nó\"},ru:{addDescription:\"Кликните в свободное место, чтобы добавить новый узел.\",addEdge:\"Добавить ребро\",addNode:\"Добавить узел\",back:\"Назад\",close:\"Закрывать\",createEdgeError:\"Невозможно соединить ребра в кластер.\",del:\"Удалить выбранное\",deleteClusterError:\"Кластеры не могут быть удалены\",edgeDescription:\"Кликните на узел и протяните ребро к другому узлу, чтобы соединить их.\",edit:\"Редактировать\",editClusterError:\"Кластеры недоступны для редактирования.\",editEdge:\"Редактировать ребро\",editEdgeDescription:\"Кликните на контрольные точки и перетащите их в узел, чтобы подключиться к нему.\",editNode:\"Редактировать узел\"},cn:{addDescription:\"单击空白处放置新节点。\",addEdge:\"添加连接线\",addNode:\"添加节点\",back:\"返回\",close:\"關閉\",createEdgeError:\"无法将连接线连接到群集。\",del:\"删除选定\",deleteClusterError:\"无法删除群集。\",edgeDescription:\"单击某个节点并将该连接线拖动到另一个节点以连接它们。\",edit:\"编辑\",editClusterError:\"无法编辑群集。\",editEdge:\"编辑连接线\",editEdgeDescription:\"单击控制节点并将它们拖到节点上连接。\",editNode:\"编辑节点\"},uk:{addDescription:\"Kлікніть на вільне місце, щоб додати новий вузол.\",addEdge:\"Додати край\",addNode:\"Додати вузол\",back:\"Назад\",close:\"Закрити\",createEdgeError:\"Не можливо об'єднати краї в групу.\",del:\"Видалити обране\",deleteClusterError:\"Групи не можуть бути видалені.\",edgeDescription:\"Клікніть на вузол і перетягніть край до іншого вузла, щоб їх з'єднати.\",edit:\"Редагувати\",editClusterError:\"Групи недоступні для редагування.\",editEdge:\"Редагувати край\",editEdgeDescription:\"Клікніть на контрольні точки і перетягніть їх у вузол, щоб підключитися до нього.\",editNode:\"Редагувати вузол\"},fr:{addDescription:\"Cliquez dans un endroit vide pour placer un nœud.\",addEdge:\"Ajouter un lien\",addNode:\"Ajouter un nœud\",back:\"Retour\",close:\"Fermer\",createEdgeError:\"Impossible de créer un lien vers un cluster.\",del:\"Effacer la sélection\",deleteClusterError:\"Les clusters ne peuvent pas être effacés.\",edgeDescription:\"Cliquez sur un nœud et glissez le lien vers un autre nœud pour les connecter.\",edit:\"Éditer\",editClusterError:\"Les clusters ne peuvent pas être édités.\",editEdge:\"Éditer le lien\",editEdgeDescription:\"Cliquez sur les points de contrôle et glissez-les pour connecter un nœud.\",editNode:\"Éditer le nœud\"},cs:{addDescription:\"Kluknutím do prázdného prostoru můžete přidat nový vrchol.\",addEdge:\"Přidat hranu\",addNode:\"Přidat vrchol\",back:\"Zpět\",close:\"Zavřít\",createEdgeError:\"Nelze připojit hranu ke shluku.\",del:\"Smazat výběr\",deleteClusterError:\"Nelze mazat shluky.\",edgeDescription:\"Přetažením z jednoho vrcholu do druhého můžete spojit tyto vrcholy novou hranou.\",edit:\"Upravit\",editClusterError:\"Nelze upravovat shluky.\",editEdge:\"Upravit hranu\",editEdgeDescription:\"Přetažením kontrolního vrcholu hrany ji můžete připojit k jinému vrcholu.\",editNode:\"Upravit vrchol\"}});var $l=function(){function t(){Nn(this,t),this.NUM_ITERATIONS=4,this.image=new Image,this.canvas=document.createElement(\"canvas\")}return Fn(t,[{key:\"init\",value:function(){if(!this.initialized()){this.src=this.image.src;var t=this.image.width,e=this.image.height;this.width=t,this.height=e;var i=Math.floor(e/2),n=Math.floor(e/4),o=Math.floor(e/8),r=Math.floor(e/16),s=Math.floor(t/2),a=Math.floor(t/4),h=Math.floor(t/8),l=Math.floor(t/16);this.canvas.width=3*a,this.canvas.height=i,this.coordinates=[[0,0,s,i],[s,0,a,n],[s,n,h,o],[5*h,n,l,r]],this._fillMipMap()}}},{key:\"initialized\",value:function(){return void 0!==this.coordinates}},{key:\"_fillMipMap\",value:function(){var t=this.canvas.getContext(\"2d\"),e=this.coordinates[0];t.drawImage(this.image,e[0],e[1],e[2],e[3]);for(var i=1;i<this.NUM_ITERATIONS;i++){var n=this.coordinates[i-1],o=this.coordinates[i];t.drawImage(this.canvas,n[0],n[1],n[2],n[3],o[0],o[1],o[2],o[3])}}},{key:\"drawImageAtPosition\",value:function(t,e,i,n,o,r){if(this.initialized())if(e>2){e*=.5;for(var s=0;e>2&&s<this.NUM_ITERATIONS;)e*=.5,s+=1;s>=this.NUM_ITERATIONS&&(s=this.NUM_ITERATIONS-1);var a=this.coordinates[s];t.drawImage(this.canvas,a[0],a[1],a[2],a[3],i,n,o,r)}else t.drawImage(this.image,i,n,o,r)}}]),t}(),Zl=function(){function t(e){Nn(this,t),this.images={},this.imageBroken={},this.callback=e}return Fn(t,[{key:\"_tryloadBrokenUrl\",value:function(t,e,i){void 0!==t&&void 0!==i&&(void 0!==e?(i.image.onerror=function(){console.error(\"Could not load brokenImage:\",e)},i.image.src=e):console.warn(\"No broken url image defined\"))}},{key:\"_redrawWithImage\",value:function(t){this.callback&&this.callback(t)}},{key:\"load\",value:function(t,e){var i=this,n=this.images[t];if(n)return n;var o=new $l;return this.images[t]=o,o.image.onload=function(){i._fixImageCoordinates(o.image),o.init(),i._redrawWithImage(o)},o.image.onerror=function(){console.error(\"Could not load image:\",t),i._tryloadBrokenUrl(t,e,o)},o.image.src=t,o}},{key:\"_fixImageCoordinates\",value:function(t){0===t.width&&(document.body.appendChild(t),t.width=t.offsetWidth,t.height=t.offsetHeight,document.body.removeChild(t))}}]),t}(),Ql=!h((function(){return Object.isExtensible(Object.preventExtensions({}))})),Jl=n((function(t){var e=ut.f,i=!1,n=H(\"meta\"),o=0,r=Object.isExtensible||function(){return!0},s=function(t){e(t,n,{value:{objectID:\"O\"+o++,weakData:{}}})},a=t.exports={enable:function(){a.enable=function(){},i=!0;var t=Ai.f,e=[].splice,o={};o[n]=1,t(o).length&&(Ai.f=function(i){for(var o=t(i),r=0,s=o.length;r<s;r++)if(o[r]===n){e.call(o,r,1);break}return o},gt({target:\"Object\",stat:!0,forced:!0},{getOwnPropertyNames:Li.f}))},fastKey:function(t,e){if(!w(t))return\"symbol\"==typeof t?t:(\"string\"==typeof t?\"S\":\"P\")+t;if(!j(t,n)){if(!r(t))return\"F\";if(!e)return\"E\";s(t)}return t[n].objectID},getWeakData:function(t,e){if(!j(t,n)){if(!r(t))return!0;if(!e)return!1;s(t)}return t[n].weakData},onFreeze:function(t){return Ql&&i&&r(t)&&!j(t,n)&&s(t),t}};St[n]=!0}));Jl.enable,Jl.fastKey,Jl.getWeakData,Jl.onFreeze;var td=function(t,e){this.stopped=t,this.result=e},ed=function(t,e,i){var n,o,r,s,a,h,l,d=i&&i.that,c=!(!i||!i.AS_ENTRIES),u=!(!i||!i.IS_ITERATOR),f=!(!i||!i.INTERRUPTED),p=lt(e,d,1+c+f),v=function(t){return n&&di(n),new td(!0,t)},g=function(t){return c?(dt(t),f?p(t[0],t[1],v):p(t[0],t[1])):f?p(t,v):p(t)};if(u)n=t;else{if(\"function\"!=typeof(o=yi(t)))throw TypeError(\"Target is not iterable\");if(pi(o)){for(r=0,s=kt(t.length);s>r;r++)if((a=g(t[r]))&&a instanceof td)return a;return new td(!1)}n=o.call(t)}for(h=n.next;!(l=h.call(n)).done;){try{a=g(l.value)}catch(t){throw di(n),t}if(\"object\"==typeof a&&a&&a instanceof td)return a}return new td(!1)},id=function(t,e,i){if(!(t instanceof e))throw TypeError(\"Incorrect \"+(i?i+\" \":\"\")+\"invocation\");return t},nd=ut.f,od=Gi.forEach,rd=we.set,sd=we.getterFor,ad=function(t,e,i){var n,o=-1!==t.indexOf(\"Map\"),r=-1!==t.indexOf(\"Weak\"),s=o?\"set\":\"add\",d=a[t],c=d&&d.prototype,u={};if(l&&\"function\"==typeof d&&(r||c.forEach&&!h((function(){(new d).entries().next()})))){n=e((function(e,i){rd(id(e,n,t),{type:t,collection:new d}),null!=i&&ed(i,e[s],{that:e,AS_ENTRIES:o})}));var f=sd(t);od([\"add\",\"clear\",\"delete\",\"forEach\",\"get\",\"has\",\"set\",\"keys\",\"values\",\"entries\"],(function(t){var e=\"add\"==t||\"set\"==t;!(t in c)||r&&\"clear\"==t||ft(n.prototype,t,(function(i,n){var o=f(this).collection;if(!e&&r&&!w(i))return\"get\"==t&&void 0;var s=o[t](0===i?0:i,n);return e?this:s}))})),r||nd(n.prototype,\"size\",{configurable:!0,get:function(){return f(this).collection.size}})}else n=i.getConstructor(e,t,o,s),Jl.enable();return Ye(n,t,!1,!0),u[t]=n,gt({global:!0,forced:!0},u),r||i.setStrong(n,t,o),n},hd=function(t,e,i){for(var n in e)i&&i.unsafe&&t[n]?t[n]=e[n]:Ze(t,n,e[n],i);return t},ld=U(\"species\"),dd=ut.f,cd=Jl.fastKey,ud=we.set,fd=we.getterFor,pd={getConstructor:function(t,e,i,n){var o=t((function(t,r){id(t,o,e),ud(t,{type:e,index:Fe(null),first:void 0,last:void 0,size:0}),l||(t.size=0),null!=r&&ed(r,t[n],{that:t,AS_ENTRIES:i})})),r=fd(e),s=function(t,e,i){var n,o,s=r(t),h=a(t,e);return h?h.value=i:(s.last=h={index:o=cd(e,!0),key:e,value:i,previous:n=s.last,next:void 0,removed:!1},s.first||(s.first=h),n&&(n.next=h),l?s.size++:t.size++,\"F\"!==o&&(s.index[o]=h)),t},a=function(t,e){var i,n=r(t),o=cd(e);if(\"F\"!==o)return n.index[o];for(i=n.first;i;i=i.next)if(i.key==e)return i};return hd(o.prototype,{clear:function(){for(var t=r(this),e=t.index,i=t.first;i;)i.removed=!0,i.previous&&(i.previous=i.previous.next=void 0),delete e[i.index],i=i.next;t.first=t.last=void 0,l?t.size=0:this.size=0},delete:function(t){var e=this,i=r(e),n=a(e,t);if(n){var o=n.next,s=n.previous;delete i.index[n.index],n.removed=!0,s&&(s.next=o),o&&(o.previous=s),i.first==n&&(i.first=o),i.last==n&&(i.last=s),l?i.size--:e.size--}return!!n},forEach:function(t){for(var e,i=r(this),n=lt(t,arguments.length>1?arguments[1]:void 0,3);e=e?e.next:i.first;)for(n(e.value,e.key,this);e&&e.removed;)e=e.previous},has:function(t){return!!a(this,t)}}),hd(o.prototype,i?{get:function(t){var e=a(this,t);return e&&e.value},set:function(t,e){return s(this,0===t?0:t,e)}}:{add:function(t){return s(this,t=0===t?0:t,t)}}),l&&dd(o.prototype,\"size\",{get:function(){return r(this).size}}),o},setStrong:function(t,e,i){var n=e+\" Iterator\",o=fd(e),r=fd(n);ri(t,e,(function(t,e){ud(this,{type:n,target:t,state:o(t),kind:e,last:void 0})}),(function(){for(var t=r(this),e=t.kind,i=t.last;i&&i.removed;)i=i.previous;return t.target&&(t.last=i=i?i.next:t.state.first)?\"keys\"==e?{value:i.key,done:!1}:\"values\"==e?{value:i.value,done:!1}:{value:[i.key,i.value],done:!1}:(t.target=void 0,{value:void 0,done:!0})}),i?\"entries\":\"values\",!i,!0),function(t){var e=x(t),i=ut.f;l&&e&&!e[ld]&&i(e,ld,{configurable:!0,get:function(){return this}})}(e)}};ad(\"Map\",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),pd);var vd=k.Map,gd=function(){function t(){Nn(this,t),this.clear(),this._defaultIndex=0,this._groupIndex=0,this._defaultGroups=[{border:\"#2B7CE9\",background:\"#97C2FC\",highlight:{border:\"#2B7CE9\",background:\"#D2E5FF\"},hover:{border:\"#2B7CE9\",background:\"#D2E5FF\"}},{border:\"#FFA500\",background:\"#FFFF00\",highlight:{border:\"#FFA500\",background:\"#FFFFA3\"},hover:{border:\"#FFA500\",background:\"#FFFFA3\"}},{border:\"#FA0A10\",background:\"#FB7E81\",highlight:{border:\"#FA0A10\",background:\"#FFAFB1\"},hover:{border:\"#FA0A10\",background:\"#FFAFB1\"}},{border:\"#41A906\",background:\"#7BE141\",highlight:{border:\"#41A906\",background:\"#A1EC76\"},hover:{border:\"#41A906\",background:\"#A1EC76\"}},{border:\"#E129F0\",background:\"#EB7DF4\",highlight:{border:\"#E129F0\",background:\"#F0B3F5\"},hover:{border:\"#E129F0\",background:\"#F0B3F5\"}},{border:\"#7C29F0\",background:\"#AD85E4\",highlight:{border:\"#7C29F0\",background:\"#D3BDF0\"},hover:{border:\"#7C29F0\",background:\"#D3BDF0\"}},{border:\"#C37F00\",background:\"#FFA807\",highlight:{border:\"#C37F00\",background:\"#FFCA66\"},hover:{border:\"#C37F00\",background:\"#FFCA66\"}},{border:\"#4220FB\",background:\"#6E6EFD\",highlight:{border:\"#4220FB\",background:\"#9B9BFD\"},hover:{border:\"#4220FB\",background:\"#9B9BFD\"}},{border:\"#FD5A77\",background:\"#FFC0CB\",highlight:{border:\"#FD5A77\",background:\"#FFD1D9\"},hover:{border:\"#FD5A77\",background:\"#FFD1D9\"}},{border:\"#4AD63A\",background:\"#C2FABC\",highlight:{border:\"#4AD63A\",background:\"#E6FFE3\"},hover:{border:\"#4AD63A\",background:\"#E6FFE3\"}},{border:\"#990000\",background:\"#EE0000\",highlight:{border:\"#BB0000\",background:\"#FF3333\"},hover:{border:\"#BB0000\",background:\"#FF3333\"}},{border:\"#FF6000\",background:\"#FF6000\",highlight:{border:\"#FF6000\",background:\"#FF6000\"},hover:{border:\"#FF6000\",background:\"#FF6000\"}},{border:\"#97C2FC\",background:\"#2B7CE9\",highlight:{border:\"#D2E5FF\",background:\"#2B7CE9\"},hover:{border:\"#D2E5FF\",background:\"#2B7CE9\"}},{border:\"#399605\",background:\"#255C03\",highlight:{border:\"#399605\",background:\"#255C03\"},hover:{border:\"#399605\",background:\"#255C03\"}},{border:\"#B70054\",background:\"#FF007E\",highlight:{border:\"#B70054\",background:\"#FF007E\"},hover:{border:\"#B70054\",background:\"#FF007E\"}},{border:\"#AD85E4\",background:\"#7C29F0\",highlight:{border:\"#D3BDF0\",background:\"#7C29F0\"},hover:{border:\"#D3BDF0\",background:\"#7C29F0\"}},{border:\"#4557FA\",background:\"#000EA1\",highlight:{border:\"#6E6EFD\",background:\"#000EA1\"},hover:{border:\"#6E6EFD\",background:\"#000EA1\"}},{border:\"#FFC0CB\",background:\"#FD5A77\",highlight:{border:\"#FFD1D9\",background:\"#FD5A77\"},hover:{border:\"#FFD1D9\",background:\"#FD5A77\"}},{border:\"#C2FABC\",background:\"#74D66A\",highlight:{border:\"#E6FFE3\",background:\"#74D66A\"},hover:{border:\"#E6FFE3\",background:\"#74D66A\"}},{border:\"#EE0000\",background:\"#990000\",highlight:{border:\"#FF3333\",background:\"#BB0000\"},hover:{border:\"#FF3333\",background:\"#BB0000\"}}],this.options={},this.defaultOptions={useDefaultGroups:!0},At(this.options,this.defaultOptions)}return Fn(t,[{key:\"setOptions\",value:function(t){var e=[\"useDefaultGroups\"];if(void 0!==t)for(var i in t)if(Object.prototype.hasOwnProperty.call(t,i)&&-1===Hr(e).call(e,i)){var n=t[i];this.add(i,n)}}},{key:\"clear\",value:function(){this._groups=new vd,this._groupNames=[]}},{key:\"get\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this._groups.get(t);if(void 0===i&&e)if(!1===this.options.useDefaultGroups&&this._groupNames.length>0){var n=this._groupIndex%this._groupNames.length;++this._groupIndex,(i={}).color=this._groups.get(this._groupNames[n]),this._groups.set(t,i)}else{var o=this._defaultIndex%this._defaultGroups.length;this._defaultIndex++,(i={}).color=this._defaultGroups[o],this._groups.set(t,i)}return i}},{key:\"add\",value:function(t,e){return this._groups.has(t)||this._groupNames.push(t),this._groups.set(t,e),e}}]),t}();gt({target:\"Number\",stat:!0},{isNaN:function(t){return t!=t}});var yd=k.Number.isNaN,md=a.isFinite,bd=Number.isFinite||function(t){return\"number\"==typeof t&&md(t)};gt({target:\"Number\",stat:!0},{isFinite:bd});var wd=k.Number.isFinite,kd=Gi.some,_d=Ao(\"some\");gt({target:\"Array\",proto:!0,forced:!_d},{some:function(t){return kd(this,t,arguments.length>1?arguments[1]:void 0)}});var xd=Ht(\"Array\").some,Ed=Array.prototype,Od=function(t){var e=t.some;return t===Ed||t instanceof Array&&e===Ed.some?xd:e},Cd=x(\"Reflect\",\"construct\"),Sd=h((function(){function t(){}return!(Cd((function(){}),[],t)instanceof t)})),Td=!h((function(){Cd((function(){}))})),Md=Sd||Td;gt({target:\"Reflect\",stat:!0,forced:Md,sham:Md},{construct:function(t,e){ht(t),dt(e);var i=arguments.length<3?t:ht(arguments[2]);if(Td&&!Sd)return Cd(t,e,i);if(t==i){switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3])}var n=[null];return n.push.apply(n,e),new(Lt.apply(t,n))}var o=i.prototype,r=Fe(w(o)?o:Object.prototype),s=Function.apply.call(t,r,e);return w(s)?s:r}});var Pd=k.Reflect.construct,Dd=n((function(t){t.exports=function(t){if(void 0===t)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return t},t.exports.default=t.exports,t.exports.__esModule=!0})),Id=i(Dd),Bd=Xr;gt({target:\"Object\",stat:!0},{setPrototypeOf:$e});var zd=k.Object.setPrototypeOf,Nd=n((function(t){function e(i,n){return t.exports=e=zd||function(t,e){return t.__proto__=e,t},t.exports.default=t.exports,t.exports.__esModule=!0,e(i,n)}t.exports=e,t.exports.default=t.exports,t.exports.__esModule=!0}));i(Nd);var Ad=i(n((function(t){t.exports=function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Super expression must either be null or a function\");t.prototype=Bd(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&Nd(t,e)},t.exports.default=t.exports,t.exports.__esModule=!0}))),Fd=i(n((function(t){var e=vo.default;t.exports=function(t,i){if(i&&(\"object\"===e(i)||\"function\"==typeof i))return i;if(void 0!==i)throw new TypeError(\"Derived constructors may only return object or undefined\");return Dd(t)},t.exports.default=t.exports,t.exports.__esModule=!0}))),jd=ur,Rd=n((function(t){function e(i){return t.exports=e=zd?jd:function(t){return t.__proto__||jd(t)},t.exports.default=t.exports,t.exports.__esModule=!0,e(i)}t.exports=e,t.exports.default=t.exports,t.exports.__esModule=!0})),Ld=i(Rd),Hd=n((function(t){var e=function(t){var e,i=Object.prototype,n=i.hasOwnProperty,o=\"function\"==typeof Symbol?Symbol:{},r=o.iterator||\"@@iterator\",s=o.asyncIterator||\"@@asyncIterator\",a=o.toStringTag||\"@@toStringTag\";function h(t,e,i){return Object.defineProperty(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{h({},\"\")}catch(t){h=function(t,e,i){return t[e]=i}}function l(t,e,i,n){var o=e&&e.prototype instanceof g?e:g,r=Object.create(o.prototype),s=new T(n||[]);return r._invoke=function(t,e,i){var n=c;return function(o,r){if(n===f)throw new Error(\"Generator is already running\");if(n===p){if(\"throw\"===o)throw r;return P()}for(i.method=o,i.arg=r;;){var s=i.delegate;if(s){var a=O(s,i);if(a){if(a===v)continue;return a}}if(\"next\"===i.method)i.sent=i._sent=i.arg;else if(\"throw\"===i.method){if(n===c)throw n=p,i.arg;i.dispatchException(i.arg)}else\"return\"===i.method&&i.abrupt(\"return\",i.arg);n=f;var h=d(t,e,i);if(\"normal\"===h.type){if(n=i.done?p:u,h.arg===v)continue;return{value:h.arg,done:i.done}}\"throw\"===h.type&&(n=p,i.method=\"throw\",i.arg=h.arg)}}}(t,i,s),r}function d(t,e,i){try{return{type:\"normal\",arg:t.call(e,i)}}catch(t){return{type:\"throw\",arg:t}}}t.wrap=l;var c=\"suspendedStart\",u=\"suspendedYield\",f=\"executing\",p=\"completed\",v={};function g(){}function y(){}function m(){}var b={};b[r]=function(){return this};var w=Object.getPrototypeOf,k=w&&w(w(M([])));k&&k!==i&&n.call(k,r)&&(b=k);var _=m.prototype=g.prototype=Object.create(b);function x(t){[\"next\",\"throw\",\"return\"].forEach((function(e){h(t,e,(function(t){return this._invoke(e,t)}))}))}function E(t,e){function i(o,r,s,a){var h=d(t[o],t,r);if(\"throw\"!==h.type){var l=h.arg,c=l.value;return c&&\"object\"==typeof c&&n.call(c,\"__await\")?e.resolve(c.__await).then((function(t){i(\"next\",t,s,a)}),(function(t){i(\"throw\",t,s,a)})):e.resolve(c).then((function(t){l.value=t,s(l)}),(function(t){return i(\"throw\",t,s,a)}))}a(h.arg)}var o;this._invoke=function(t,n){function r(){return new e((function(e,o){i(t,n,e,o)}))}return o=o?o.then(r,r):r()}}function O(t,i){var n=t.iterator[i.method];if(n===e){if(i.delegate=null,\"throw\"===i.method){if(t.iterator.return&&(i.method=\"return\",i.arg=e,O(t,i),\"throw\"===i.method))return v;i.method=\"throw\",i.arg=new TypeError(\"The iterator does not provide a 'throw' method\")}return v}var o=d(n,t.iterator,i.arg);if(\"throw\"===o.type)return i.method=\"throw\",i.arg=o.arg,i.delegate=null,v;var r=o.arg;return r?r.done?(i[t.resultName]=r.value,i.next=t.nextLoc,\"return\"!==i.method&&(i.method=\"next\",i.arg=e),i.delegate=null,v):r:(i.method=\"throw\",i.arg=new TypeError(\"iterator result is not an object\"),i.delegate=null,v)}function C(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function S(t){var e=t.completion||{};e.type=\"normal\",delete e.arg,t.completion=e}function T(t){this.tryEntries=[{tryLoc:\"root\"}],t.forEach(C,this),this.reset(!0)}function M(t){if(t){var i=t[r];if(i)return i.call(t);if(\"function\"==typeof t.next)return t;if(!isNaN(t.length)){var o=-1,s=function i(){for(;++o<t.length;)if(n.call(t,o))return i.value=t[o],i.done=!1,i;return i.value=e,i.done=!0,i};return s.next=s}}return{next:P}}function P(){return{value:e,done:!0}}return y.prototype=_.constructor=m,m.constructor=y,y.displayName=h(m,a,\"GeneratorFunction\"),t.isGeneratorFunction=function(t){var e=\"function\"==typeof t&&t.constructor;return!!e&&(e===y||\"GeneratorFunction\"===(e.displayName||e.name))},t.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,m):(t.__proto__=m,h(t,a,\"GeneratorFunction\")),t.prototype=Object.create(_),t},t.awrap=function(t){return{__await:t}},x(E.prototype),E.prototype[s]=function(){return this},t.AsyncIterator=E,t.async=function(e,i,n,o,r){void 0===r&&(r=Promise);var s=new E(l(e,i,n,o),r);return t.isGeneratorFunction(i)?s:s.next().then((function(t){return t.done?t.value:s.next()}))},x(_),h(_,a,\"Generator\"),_[r]=function(){return this},_.toString=function(){return\"[object Generator]\"},t.keys=function(t){var e=[];for(var i in t)e.push(i);return e.reverse(),function i(){for(;e.length;){var n=e.pop();if(n in t)return i.value=n,i.done=!1,i}return i.done=!0,i}},t.values=M,T.prototype={constructor:T,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method=\"next\",this.arg=e,this.tryEntries.forEach(S),!t)for(var i in this)\"t\"===i.charAt(0)&&n.call(this,i)&&!isNaN(+i.slice(1))&&(this[i]=e)},stop:function(){this.done=!0;var t=this.tryEntries[0].completion;if(\"throw\"===t.type)throw t.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var i=this;function o(n,o){return a.type=\"throw\",a.arg=t,i.next=n,o&&(i.method=\"next\",i.arg=e),!!o}for(var r=this.tryEntries.length-1;r>=0;--r){var s=this.tryEntries[r],a=s.completion;if(\"root\"===s.tryLoc)return o(\"end\");if(s.tryLoc<=this.prev){var h=n.call(s,\"catchLoc\"),l=n.call(s,\"finallyLoc\");if(h&&l){if(this.prev<s.catchLoc)return o(s.catchLoc,!0);if(this.prev<s.finallyLoc)return o(s.finallyLoc)}else if(h){if(this.prev<s.catchLoc)return o(s.catchLoc,!0)}else{if(!l)throw new Error(\"try statement without catch or finally\");if(this.prev<s.finallyLoc)return o(s.finallyLoc)}}}},abrupt:function(t,e){for(var i=this.tryEntries.length-1;i>=0;--i){var o=this.tryEntries[i];if(o.tryLoc<=this.prev&&n.call(o,\"finallyLoc\")&&this.prev<o.finallyLoc){var r=o;break}}r&&(\"break\"===t||\"continue\"===t)&&r.tryLoc<=e&&e<=r.finallyLoc&&(r=null);var s=r?r.completion:{};return s.type=t,s.arg=e,r?(this.method=\"next\",this.next=r.finallyLoc,v):this.complete(s)},complete:function(t,e){if(\"throw\"===t.type)throw t.arg;return\"break\"===t.type||\"continue\"===t.type?this.next=t.arg:\"return\"===t.type?(this.rval=this.arg=t.arg,this.method=\"return\",this.next=\"end\"):\"normal\"===t.type&&e&&(this.next=e),v},finish:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var i=this.tryEntries[e];if(i.finallyLoc===t)return this.complete(i.completion,i.afterLoc),S(i),v}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var i=this.tryEntries[e];if(i.tryLoc===t){var n=i.completion;if(\"throw\"===n.type){var o=n.arg;S(i)}return o}}throw new Error(\"illegal catch attempt\")},delegateYield:function(t,i,n){return this.delegate={iterator:M(t),resultName:i,nextLoc:n},\"next\"===this.method&&(this.arg=e),v}},t}(t.exports);try{regeneratorRuntime=e}catch(t){Function(\"r\",\"regeneratorRuntime = r\")(e)}})),Wd=function(t){return function(e,i,n,o){ht(i);var r=A(e),s=y(r),a=kt(r.length),h=t?a-1:0,l=t?-1:1;if(n<2)for(;;){if(h in s){o=s[h],h+=l;break}if(h+=l,t?h<0:a<=h)throw TypeError(\"Reduce of empty array with no initial value\")}for(;t?h>=0:a>h;h+=l)h in s&&(o=i(o,s[h],h,r));return o}},qd={left:Wd(!1),right:Wd(!0)},Vd=\"process\"==v(a.process),Ud=qd.left,Yd=Ao(\"reduce\");gt({target:\"Array\",proto:!0,forced:!Yd||!Vd&&M>79&&M<83},{reduce:function(t){return Ud(this,t,arguments.length,arguments.length>1?arguments[1]:void 0)}});var Xd=Ht(\"Array\").reduce,Gd=Array.prototype,Kd=function(t){var e=t.reduce;return t===Gd||t instanceof Array&&e===Gd.reduce?Xd:e},$d=function(t,e,i,n,o,r,s,a){for(var h,l=o,d=0,c=!!s&&lt(s,a,3);d<n;){if(d in i){if(h=c?c(i[d],d,e):i[d],r>0&&zi(h))l=$d(t,e,h,kt(h.length),l,r-1)-1;else{if(l>=9007199254740991)throw TypeError(\"Exceed the acceptable array length\");t[l]=h}l++}d++}return l},Zd=$d;gt({target:\"Array\",proto:!0},{flatMap:function(t){var e,i=A(this),n=kt(i.length);return ht(t),(e=Ui(i,0)).length=Zd(e,i,i,n,0,1,t,arguments.length>1?arguments[1]:void 0),e}});var Qd=Ht(\"Array\").flatMap,Jd=Array.prototype,tc=function(t){var e=t.flatMap;return t===Jd||t instanceof Array&&e===Jd.flatMap?Qd:e};ad(\"Set\",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),pd);var ec=k.Set,ic=fo,nc=function(t){var e=yi(t);if(\"function\"!=typeof e)throw TypeError(String(t)+\" is not iterable\");return dt(e.call(t))},oc=Math.floor,rc=function(t,e){var i=t.length,n=oc(i/2);return i<8?sc(t,e):ac(rc(t.slice(0,n),e),rc(t.slice(n),e),e)},sc=function(t,e){for(var i,n,o=t.length,r=1;r<o;){for(n=r,i=t[r];n&&e(t[n-1],i)>0;)t[n]=t[--n];n!==r++&&(t[n]=i)}return t},ac=function(t,e,i){for(var n=t.length,o=e.length,r=0,s=0,a=[];r<n||s<o;)r<n&&s<o?a.push(i(t[r],e[s])<=0?t[r++]:e[s++]):a.push(r<n?t[r++]:e[s++]);return a},hc=rc,lc=E.match(/firefox\\/(\\d+)/i),dc=!!lc&&+lc[1],cc=/MSIE|Trident/.test(E),uc=E.match(/AppleWebKit\\/(\\d+)\\./),fc=!!uc&&+uc[1],pc=[],vc=pc.sort,gc=h((function(){pc.sort(void 0)})),yc=h((function(){pc.sort(null)})),mc=Ao(\"sort\"),bc=!h((function(){if(M)return M<70;if(!(dc&&dc>3)){if(cc)return!0;if(fc)return fc<603;var t,e,i,n,o=\"\";for(t=65;t<76;t++){switch(e=String.fromCharCode(t),t){case 66:case 69:case 70:case 72:i=3;break;case 68:case 71:i=4;break;default:i=2}for(n=0;n<47;n++)pc.push({k:e+n,v:i})}for(pc.sort((function(t,e){return e.v-t.v})),n=0;n<pc.length;n++)e=pc[n].k.charAt(0),o.charAt(o.length-1)!==e&&(o+=e);return\"DGBEFHACIJK\"!==o}}));gt({target:\"Array\",proto:!0,forced:gc||!yc||!mc||!bc},{sort:function(t){void 0!==t&&ht(t);var e=A(this);if(bc)return void 0===t?vc.call(e):vc.call(e,t);var i,n,o=[],r=kt(e.length);for(n=0;n<r;n++)n in e&&o.push(e[n]);for(i=(o=hc(o,function(t){return function(e,i){return void 0===i?-1:void 0===e?1:void 0!==t?+t(e,i)||0:Qt(e)>Qt(i)?1:-1}}(t))).length,n=0;n<i;)e[n]=o[n++];for(;n<r;)delete e[n++];return e}});var wc,kc=Ht(\"Array\").sort,_c=Array.prototype,xc=function(t){var e=t.sort;return t===_c||t instanceof Array&&e===_c.sort?kc:e},Ec=Ht(\"Array\").keys,Oc=Array.prototype,Cc={DOMTokenList:!0,NodeList:!0},Sc=function(t){var e=t.keys;return t===Oc||t instanceof Array&&e===Oc.keys||Cc.hasOwnProperty(We(t))?Ec:e},Tc=Ht(\"Array\").values,Mc=Array.prototype,Pc={DOMTokenList:!0,NodeList:!0},Dc=function(t){var e=t.values;return t===Mc||t instanceof Array&&e===Mc.values||Pc.hasOwnProperty(We(t))?Tc:e},Ic=Ht(\"Array\").entries,Bc=Array.prototype,zc={DOMTokenList:!0,NodeList:!0},Nc=function(t){var e=t.entries;return t===Bc||t instanceof Array&&e===Bc.entries||zc.hasOwnProperty(We(t))?Ic:e},Ac=new Uint8Array(16);function Fc(){if(!wc&&!(wc=\"undefined\"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||\"undefined\"!=typeof msCrypto&&\"function\"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error(\"crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported\");return wc(Ac)}var jc=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function Rc(t){return\"string\"==typeof t&&jc.test(t)}for(var Lc=[],Hc=0;Hc<256;++Hc)Lc.push((Hc+256).toString(16).substr(1));function Wc(t,e,i){var n=(t=t||{}).random||(t.rng||Fc)();if(n[6]=15&n[6]|64,n[8]=63&n[8]|128,e){i=i||0;for(var o=0;o<16;++o)e[i+o]=n[o];return e}return function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=(Lc[t[e+0]]+Lc[t[e+1]]+Lc[t[e+2]]+Lc[t[e+3]]+\"-\"+Lc[t[e+4]]+Lc[t[e+5]]+\"-\"+Lc[t[e+6]]+Lc[t[e+7]]+\"-\"+Lc[t[e+8]]+Lc[t[e+9]]+\"-\"+Lc[t[e+10]]+Lc[t[e+11]]+Lc[t[e+12]]+Lc[t[e+13]]+Lc[t[e+14]]+Lc[t[e+15]]).toLowerCase();if(!Rc(i))throw TypeError(\"Stringified UUID is invalid\");return i}(n)}function qc(t,e){var i=zo(t);if(On){var n=On(t);e&&(n=mr(n).call(n,(function(e){return Mn(t,e).enumerable}))),i.push.apply(i,n)}return i}function Vc(t){for(var e=1;e<arguments.length;e++){var i,n=null!=arguments[e]?arguments[e]:{};if(e%2)Wo(i=qc(Object(n),!0)).call(i,(function(e){jn(t,e,n[e])}));else if(Dn)In(t,Dn(n));else{var o;Wo(o=qc(Object(n))).call(o,(function(e){zn(t,e,Mn(n,e))}))}}return t}function Uc(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}function Yc(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return Xc(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Xc(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function Xc(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}var Gc=function(){function t(e,i,n){var o,r,s;Nn(this,t),this._source=e,this._transformers=i,this._target=n,this._listeners={add:Vt(o=this._add).call(o,this),remove:Vt(r=this._remove).call(r,this),update:Vt(s=this._update).call(s,this)}}return Fn(t,[{key:\"all\",value:function(){return this._target.update(this._transformItems(this._source.get())),this}},{key:\"start\",value:function(){return this._source.on(\"add\",this._listeners.add),this._source.on(\"remove\",this._listeners.remove),this._source.on(\"update\",this._listeners.update),this}},{key:\"stop\",value:function(){return this._source.off(\"add\",this._listeners.add),this._source.off(\"remove\",this._listeners.remove),this._source.off(\"update\",this._listeners.update),this}},{key:\"_transformItems\",value:function(t){var e;return Kd(e=this._transformers).call(e,(function(t,e){return e(t)}),t)}},{key:\"_add\",value:function(t,e){null!=e&&this._target.add(this._transformItems(this._source.get(e.items)))}},{key:\"_update\",value:function(t,e){null!=e&&this._target.update(this._transformItems(this._source.get(e.items)))}},{key:\"_remove\",value:function(t,e){null!=e&&this._target.remove(this._transformItems(e.oldData))}}]),t}(),Kc=function(){function t(e){Nn(this,t),this._source=e,this._transformers=[]}return Fn(t,[{key:\"filter\",value:function(t){return this._transformers.push((function(e){return mr(e).call(e,t)})),this}},{key:\"map\",value:function(t){return this._transformers.push((function(e){return Io(e).call(e,t)})),this}},{key:\"flatMap\",value:function(t){return this._transformers.push((function(e){return tc(e).call(e,t)})),this}},{key:\"to\",value:function(t){return new Gc(this._source,this._transformers,t)}}]),t}();function $c(t){return\"string\"==typeof t||\"number\"==typeof t}var Zc=function(){function t(e){Nn(this,t),this._queue=[],this._timeout=null,this._extended=null,this.delay=null,this.max=1/0,this.setOptions(e)}return Fn(t,[{key:\"setOptions\",value:function(t){t&&void 0!==t.delay&&(this.delay=t.delay),t&&void 0!==t.max&&(this.max=t.max),this._flushIfNeeded()}},{key:\"destroy\",value:function(){if(this.flush(),this._extended){for(var t=this._extended.object,e=this._extended.methods,i=0;i<e.length;i++){var n=e[i];n.original?t[n.name]=n.original:delete t[n.name]}this._extended=null}}},{key:\"replace\",value:function(t,e){var i=this,n=t[e];if(!n)throw new Error(\"Method \"+e+\" undefined\");t[e]=function(){for(var t=arguments.length,e=new Array(t),o=0;o<t;o++)e[o]=arguments[o];i.queue({args:e,fn:n,context:this})}}},{key:\"queue\",value:function(t){\"function\"==typeof t?this._queue.push({fn:t}):this._queue.push(t),this._flushIfNeeded()}},{key:\"_flushIfNeeded\",value:function(){var t=this;this._queue.length>this.max&&this.flush(),null!=this._timeout&&(clearTimeout(this._timeout),this._timeout=null),this.queue.length>0&&\"number\"==typeof this.delay&&(this._timeout=rs((function(){t.flush()}),this.delay))}},{key:\"flush\",value:function(){var t,e;Wo(t=er(e=this._queue).call(e,0)).call(t,(function(t){t.fn.apply(t.context||t.fn,t.args||[])}))}}],[{key:\"extend\",value:function(e,i){var n=new t(i);if(void 0!==e.flush)throw new Error(\"Target object already has a property flush\");e.flush=function(){n.flush()};var o=[{name:\"flush\",original:void 0}];if(i&&i.replace)for(var r=0;r<i.replace.length;r++){var s=i.replace[r];o.push({name:s,original:e[s]}),n.replace(e,s)}return n._extended={object:e,methods:o},n}}]),t}(),Qc=function(){function t(){Nn(this,t),this._subscribers={\"*\":[],add:[],remove:[],update:[]},this.subscribe=t.prototype.on,this.unsubscribe=t.prototype.off}return Fn(t,[{key:\"_trigger\",value:function(t,e,i){var n,o;if(\"*\"===t)throw new Error(\"Cannot trigger event *\");Wo(n=Eo(o=[]).call(o,wo(this._subscribers[t]),wo(this._subscribers[\"*\"]))).call(n,(function(n){n(t,e,null!=i?i:null)}))}},{key:\"on\",value:function(t,e){\"function\"==typeof e&&this._subscribers[t].push(e)}},{key:\"off\",value:function(t,e){var i;this._subscribers[t]=mr(i=this._subscribers[t]).call(i,(function(t){return t!==e}))}}]),t}(),Jc=function(t){function e(t){Nn(this,e),this._pairs=t}return Fn(e,[{key:t,value:Hd.mark((function t(){var e,i,n,o,r;return Hd.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:e=Yc(this._pairs),t.prev=1,e.s();case 3:if((i=e.n()).done){t.next=9;break}return n=uo(i.value,2),o=n[0],r=n[1],t.next=7,[o,r];case 7:t.next=3;break;case 9:t.next=14;break;case 11:t.prev=11,t.t0=t.catch(1),e.e(t.t0);case 14:return t.prev=14,e.f(),t.finish(14);case 17:case\"end\":return t.stop()}}),t,this,[[1,11,14,17]])}))},{key:\"entries\",value:Hd.mark((function t(){var e,i,n,o,r;return Hd.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:e=Yc(this._pairs),t.prev=1,e.s();case 3:if((i=e.n()).done){t.next=9;break}return n=uo(i.value,2),o=n[0],r=n[1],t.next=7,[o,r];case 7:t.next=3;break;case 9:t.next=14;break;case 11:t.prev=11,t.t0=t.catch(1),e.e(t.t0);case 14:return t.prev=14,e.f(),t.finish(14);case 17:case\"end\":return t.stop()}}),t,this,[[1,11,14,17]])}))},{key:\"keys\",value:Hd.mark((function t(){var e,i,n,o;return Hd.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:e=Yc(this._pairs),t.prev=1,e.s();case 3:if((i=e.n()).done){t.next=9;break}return n=uo(i.value,1),o=n[0],t.next=7,o;case 7:t.next=3;break;case 9:t.next=14;break;case 11:t.prev=11,t.t0=t.catch(1),e.e(t.t0);case 14:return t.prev=14,e.f(),t.finish(14);case 17:case\"end\":return t.stop()}}),t,this,[[1,11,14,17]])}))},{key:\"values\",value:Hd.mark((function t(){var e,i,n,o;return Hd.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:e=Yc(this._pairs),t.prev=1,e.s();case 3:if((i=e.n()).done){t.next=9;break}return n=uo(i.value,2),o=n[1],t.next=7,o;case 7:t.next=3;break;case 9:t.next=14;break;case 11:t.prev=11,t.t0=t.catch(1),e.e(t.t0);case 14:return t.prev=14,e.f(),t.finish(14);case 17:case\"end\":return t.stop()}}),t,this,[[1,11,14,17]])}))},{key:\"toIdArray\",value:function(){var t;return Io(t=wo(this._pairs)).call(t,(function(t){return t[0]}))}},{key:\"toItemArray\",value:function(){var t;return Io(t=wo(this._pairs)).call(t,(function(t){return t[1]}))}},{key:\"toEntryArray\",value:function(){return wo(this._pairs)}},{key:\"toObjectMap\",value:function(){var t,e=Gr(null),i=Yc(this._pairs);try{for(i.s();!(t=i.n()).done;){var n=uo(t.value,2),o=n[0],r=n[1];e[o]=r}}catch(t){i.e(t)}finally{i.f()}return e}},{key:\"toMap\",value:function(){return new vd(this._pairs)}},{key:\"toIdSet\",value:function(){return new ec(this.toIdArray())}},{key:\"toItemSet\",value:function(){return new ec(this.toItemArray())}},{key:\"cache\",value:function(){return new e(wo(this._pairs))}},{key:\"distinct\",value:function(t){var e,i=new ec,n=Yc(this._pairs);try{for(n.s();!(e=n.n()).done;){var o=uo(e.value,2),r=o[0],s=o[1];i.add(t(s,r))}}catch(t){n.e(t)}finally{n.f()}return i}},{key:\"filter\",value:function(t){var i=this._pairs;return new e(jn({},ic,Hd.mark((function e(){var n,o,r,s,a;return Hd.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:n=Yc(i),e.prev=1,n.s();case 3:if((o=n.n()).done){e.next=10;break}if(r=uo(o.value,2),s=r[0],a=r[1],!t(a,s)){e.next=8;break}return e.next=8,[s,a];case 8:e.next=3;break;case 10:e.next=15;break;case 12:e.prev=12,e.t0=e.catch(1),n.e(e.t0);case 15:return e.prev=15,n.f(),e.finish(15);case 18:case\"end\":return e.stop()}}),e,null,[[1,12,15,18]])}))))}},{key:\"forEach\",value:function(t){var e,i=Yc(this._pairs);try{for(i.s();!(e=i.n()).done;){var n=uo(e.value,2),o=n[0];t(n[1],o)}}catch(t){i.e(t)}finally{i.f()}}},{key:\"map\",value:function(t){var i=this._pairs;return new e(jn({},ic,Hd.mark((function e(){var n,o,r,s,a;return Hd.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:n=Yc(i),e.prev=1,n.s();case 3:if((o=n.n()).done){e.next=9;break}return r=uo(o.value,2),s=r[0],a=r[1],e.next=7,[s,t(a,s)];case 7:e.next=3;break;case 9:e.next=14;break;case 11:e.prev=11,e.t0=e.catch(1),n.e(e.t0);case 14:return e.prev=14,n.f(),e.finish(14);case 17:case\"end\":return e.stop()}}),e,null,[[1,11,14,17]])}))))}},{key:\"max\",value:function(t){var e=nc(this._pairs),i=e.next();if(i.done)return null;for(var n=i.value[1],o=t(i.value[1],i.value[0]);!(i=e.next()).done;){var r=uo(i.value,2),s=r[0],a=r[1],h=t(a,s);h>o&&(o=h,n=a)}return n}},{key:\"min\",value:function(t){var e=nc(this._pairs),i=e.next();if(i.done)return null;for(var n=i.value[1],o=t(i.value[1],i.value[0]);!(i=e.next()).done;){var r=uo(i.value,2),s=r[0],a=r[1],h=t(a,s);h<o&&(o=h,n=a)}return n}},{key:\"reduce\",value:function(t,e){var i,n=Yc(this._pairs);try{for(n.s();!(i=n.n()).done;){var o=uo(i.value,2),r=o[0];e=t(e,o[1],r)}}catch(t){n.e(t)}finally{n.f()}return e}},{key:\"sort\",value:function(t){var i=this;return new e(jn({},ic,(function(){var e;return nc(xc(e=wo(i._pairs)).call(e,(function(e,i){var n=uo(e,2),o=n[0],r=n[1],s=uo(i,2),a=s[0],h=s[1];return t(r,h,o,a)})))})))}}]),e}(ic);var tu=function(t){Ad(i,t);var e=Uc(i);function i(t,n){var o;return Nn(this,i),(o=e.call(this))._queue=null,t&&!So(t)&&(n=t,t=[]),o._options=n||{},o._data=new vd,o.length=0,o._idProp=o._options.fieldId||\"id\",t&&t.length&&o.add(t),o.setOptions(n),o}return Fn(i,[{key:\"idProp\",get:function(){return this._idProp}},{key:\"setOptions\",value:function(t){t&&void 0!==t.queue&&(!1===t.queue?this._queue&&(this._queue.destroy(),this._queue=null):(this._queue||(this._queue=Zc.extend(this,{replace:[\"add\",\"update\",\"remove\"]})),t.queue&&\"object\"===go(t.queue)&&this._queue.setOptions(t.queue)))}},{key:\"add\",value:function(t,e){var i,n=this,o=[];if(So(t)){var r=Io(t).call(t,(function(t){return t[n._idProp]}));if(Od(r).call(r,(function(t){return n._data.has(t)})))throw new Error(\"A duplicate id was found in the parameter array.\");for(var s=0,a=t.length;s<a;s++)i=this._addItem(t[s]),o.push(i)}else{if(!t||\"object\"!==go(t))throw new Error(\"Unknown dataType\");i=this._addItem(t),o.push(i)}return o.length&&this._trigger(\"add\",{items:o},e),o}},{key:\"update\",value:function(t,e){var i=this,n=[],o=[],r=[],s=[],a=this._idProp,h=function(t){var e=t[a];if(null!=e&&i._data.has(e)){var h=t,l=At({},i._data.get(e)),d=i._updateItem(h);o.push(d),s.push(h),r.push(l)}else{var c=i._addItem(t);n.push(c)}};if(So(t))for(var l=0,d=t.length;l<d;l++)t[l]&&\"object\"===go(t[l])?h(t[l]):console.warn(\"Ignoring input item, which is not an object at index \"+l);else{if(!t||\"object\"!==go(t))throw new Error(\"Unknown dataType\");h(t)}if(n.length&&this._trigger(\"add\",{items:n},e),o.length){var c={items:o,oldData:r,data:s};this._trigger(\"update\",c,e)}return Eo(n).call(n,o)}},{key:\"updateOnly\",value:function(t,e){var i,n=this;So(t)||(t=[t]);var o=Io(i=Io(t).call(t,(function(t){var e=n._data.get(t[n._idProp]);if(null==e)throw new Error(\"Updating non-existent items is not allowed.\");return{oldData:e,update:t}}))).call(i,(function(t){var e=t.oldData,i=t.update,o=e[n._idProp],r=ih(e,i);return n._data.set(o,r),{id:o,oldData:e,updatedData:r}}));if(o.length){var r={items:Io(o).call(o,(function(t){return t.id})),oldData:Io(o).call(o,(function(t){return t.oldData})),data:Io(o).call(o,(function(t){return t.updatedData}))};return this._trigger(\"update\",r,e),r.items}return[]}},{key:\"get\",value:function(t,e){var i=void 0,n=void 0,o=void 0;$c(t)?(i=t,o=e):So(t)?(n=t,o=e):o=t;var r,s=o&&\"Object\"===o.returnType?\"Object\":\"Array\",a=o&&mr(o),h=[],l=void 0,d=void 0,c=void 0;if(null!=i)(l=this._data.get(i))&&a&&!a(l)&&(l=void 0);else if(null!=n)for(var u=0,f=n.length;u<f;u++)null==(l=this._data.get(n[u]))||a&&!a(l)||h.push(l);else for(var p,v=0,g=(d=wo(Sc(p=this._data).call(p))).length;v<g;v++)c=d[v],null==(l=this._data.get(c))||a&&!a(l)||h.push(l);if(o&&o.order&&null==i&&this._sort(h,o.order),o&&o.fields){var y=o.fields;if(null!=i&&null!=l)l=this._filterFields(l,y);else for(var m=0,b=h.length;m<b;m++)h[m]=this._filterFields(h[m],y)}if(\"Object\"==s){for(var w={},k=0,_=h.length;k<_;k++){var x=h[k];w[x[this._idProp]]=x}return w}return null!=i?null!==(r=l)&&void 0!==r?r:null:h}},{key:\"getIds\",value:function(t){var e=this._data,i=t&&mr(t),n=t&&t.order,o=wo(Sc(e).call(e)),r=[];if(i)if(n){for(var s=[],a=0,h=o.length;a<h;a++){var l=o[a],d=this._data.get(l);null!=d&&i(d)&&s.push(d)}this._sort(s,n);for(var c=0,u=s.length;c<u;c++)r.push(s[c][this._idProp])}else for(var f=0,p=o.length;f<p;f++){var v=o[f],g=this._data.get(v);null!=g&&i(g)&&r.push(g[this._idProp])}else if(n){for(var y=[],m=0,b=o.length;m<b;m++){var w=o[m];y.push(e.get(w))}this._sort(y,n);for(var k=0,_=y.length;k<_;k++)r.push(y[k][this._idProp])}else for(var x=0,E=o.length;x<E;x++){var O=o[x],C=e.get(O);null!=C&&r.push(C[this._idProp])}return r}},{key:\"getDataSet\",value:function(){return this}},{key:\"forEach\",value:function(t,e){var i=e&&mr(e),n=this._data,o=wo(Sc(n).call(n));if(e&&e.order)for(var r=this.get(e),s=0,a=r.length;s<a;s++){var h=r[s];t(h,h[this._idProp])}else for(var l=0,d=o.length;l<d;l++){var c=o[l],u=this._data.get(c);null==u||i&&!i(u)||t(u,c)}}},{key:\"map\",value:function(t,e){for(var i=e&&mr(e),n=[],o=this._data,r=wo(Sc(o).call(o)),s=0,a=r.length;s<a;s++){var h=r[s],l=this._data.get(h);null==l||i&&!i(l)||n.push(t(l,h))}return e&&e.order&&this._sort(n,e.order),n}},{key:\"_filterFields\",value:function(t,e){var i;return t?Kd(i=So(e)?e:zo(e)).call(i,(function(e,i){return e[i]=t[i],e}),{}):t}},{key:\"_sort\",value:function(t,e){if(\"string\"==typeof e){var i=e;xc(t).call(t,(function(t,e){var n=t[i],o=e[i];return n>o?1:n<o?-1:0}))}else{if(\"function\"!=typeof e)throw new TypeError(\"Order must be a function or a string\");xc(t).call(t,e)}}},{key:\"remove\",value:function(t,e){for(var i=[],n=[],o=So(t)?t:[t],r=0,s=o.length;r<s;r++){var a=this._remove(o[r]);if(a){var h=a[this._idProp];null!=h&&(i.push(h),n.push(a))}}return i.length&&this._trigger(\"remove\",{items:i,oldData:n},e),i}},{key:\"_remove\",value:function(t){var e;if($c(t)?e=t:t&&\"object\"===go(t)&&(e=t[this._idProp]),null!=e&&this._data.has(e)){var i=this._data.get(e)||null;return this._data.delete(e),--this.length,i}return null}},{key:\"clear\",value:function(t){for(var e,i=wo(Sc(e=this._data).call(e)),n=[],o=0,r=i.length;o<r;o++)n.push(this._data.get(i[o]));return this._data.clear(),this.length=0,this._trigger(\"remove\",{items:i,oldData:n},t),i}},{key:\"max\",value:function(t){var e,i,n=null,o=null,r=Yc(Dc(e=this._data).call(e));try{for(r.s();!(i=r.n()).done;){var s=i.value,a=s[t];\"number\"==typeof a&&(null==o||a>o)&&(n=s,o=a)}}catch(t){r.e(t)}finally{r.f()}return n||null}},{key:\"min\",value:function(t){var e,i,n=null,o=null,r=Yc(Dc(e=this._data).call(e));try{for(r.s();!(i=r.n()).done;){var s=i.value,a=s[t];\"number\"==typeof a&&(null==o||a<o)&&(n=s,o=a)}}catch(t){r.e(t)}finally{r.f()}return n||null}},{key:\"distinct\",value:function(t){for(var e=this._data,i=wo(Sc(e).call(e)),n=[],o=0,r=0,s=i.length;r<s;r++){for(var a=i[r],h=e.get(a)[t],l=!1,d=0;d<o;d++)if(n[d]==h){l=!0;break}l||void 0===h||(n[o]=h,o++)}return n}},{key:\"_addItem\",value:function(t){var e=function(t,e){return null==t[e]&&(t[e]=Wc()),t}(t,this._idProp),i=e[this._idProp];if(this._data.has(i))throw new Error(\"Cannot add item: item with id \"+i+\" already exists\");return this._data.set(i,e),++this.length,i}},{key:\"_updateItem\",value:function(t){var e=t[this._idProp];if(null==e)throw new Error(\"Cannot update item: item has no id (item: \"+es(t)+\")\");var i=this._data.get(e);if(!i)throw new Error(\"Cannot update item: no item with id \"+e+\" found\");return this._data.set(e,Vc(Vc({},i),t)),e}},{key:\"stream\",value:function(t){if(t){var e=this._data;return new Jc(jn({},ic,Hd.mark((function i(){var n,o,r,s;return Hd.wrap((function(i){for(;;)switch(i.prev=i.next){case 0:n=Yc(t),i.prev=1,n.s();case 3:if((o=n.n()).done){i.next=11;break}if(r=o.value,null==(s=e.get(r))){i.next=9;break}return i.next=9,[r,s];case 9:i.next=3;break;case 11:i.next=16;break;case 13:i.prev=13,i.t0=i.catch(1),n.e(i.t0);case 16:return i.prev=16,n.f(),i.finish(16);case 19:case\"end\":return i.stop()}}),i,null,[[1,13,16,19]])}))))}var i;return new Jc(jn({},ic,Vt(i=Nc(this._data)).call(i,this._data)))}}]),i}(Qc),eu=function(t){Ad(i,t);var e=Uc(i);function i(t,n){var o,r;return Nn(this,i),(r=e.call(this)).length=0,r._ids=new ec,r._options=n||{},r._listener=Vt(o=r._onEvent).call(o,Id(r)),r.setData(t),r}return Fn(i,[{key:\"idProp\",get:function(){return this.getDataSet().idProp}},{key:\"setData\",value:function(t){if(this._data){this._data.off&&this._data.off(\"*\",this._listener);var e=this._data.getIds({filter:mr(this._options)}),i=this._data.get(e);this._ids.clear(),this.length=0,this._trigger(\"remove\",{items:e,oldData:i})}if(null!=t){this._data=t;for(var n=this._data.getIds({filter:mr(this._options)}),o=0,r=n.length;o<r;o++){var s=n[o];this._ids.add(s)}this.length=n.length,this._trigger(\"add\",{items:n})}else this._data=new tu;this._data.on&&this._data.on(\"*\",this._listener)}},{key:\"refresh\",value:function(){for(var t=this._data.getIds({filter:mr(this._options)}),e=wo(this._ids),i={},n=[],o=[],r=[],s=0,a=t.length;s<a;s++){var h=t[s];i[h]=!0,this._ids.has(h)||(n.push(h),this._ids.add(h))}for(var l=0,d=e.length;l<d;l++){var c=e[l],u=this._data.get(c);null==u?console.error(\"If you see this, report it please.\"):i[c]||(o.push(c),r.push(u),this._ids.delete(c))}this.length+=n.length-o.length,n.length&&this._trigger(\"add\",{items:n}),o.length&&this._trigger(\"remove\",{items:o,oldData:r})}},{key:\"get\",value:function(t,e){if(null==this._data)return null;var i,n=null;$c(t)||So(t)?(n=t,i=e):i=t;var o=At({},this._options,i),r=mr(this._options),s=i&&mr(i);return r&&s&&(o.filter=function(t){return r(t)&&s(t)}),null==n?this._data.get(o):this._data.get(n,o)}},{key:\"getIds\",value:function(t){if(this._data.length){var e,i=mr(this._options),n=null!=t?mr(t):null;return e=n?i?function(t){return i(t)&&n(t)}:n:i,this._data.getIds({filter:e,order:t&&t.order})}return[]}},{key:\"forEach\",value:function(t,e){if(this._data){var i,n,o=mr(this._options),r=e&&mr(e);n=r?o?function(t){return o(t)&&r(t)}:r:o,Wo(i=this._data).call(i,t,{filter:n,order:e&&e.order})}}},{key:\"map\",value:function(t,e){if(this._data){var i,n,o=mr(this._options),r=e&&mr(e);return n=r?o?function(t){return o(t)&&r(t)}:r:o,Io(i=this._data).call(i,t,{filter:n,order:e&&e.order})}return[]}},{key:\"getDataSet\",value:function(){return this._data.getDataSet()}},{key:\"stream\",value:function(t){var e;return this._data.stream(t||jn({},ic,Vt(e=Sc(this._ids)).call(e,this._ids)))}},{key:\"dispose\",value:function(){var t;null!==(t=this._data)&&void 0!==t&&t.off&&this._data.off(\"*\",this._listener);var e,n=\"This data view has already been disposed of.\",o={get:function(){throw new Error(n)},set:function(){throw new Error(n)},configurable:!1},r=Yc(Co(i.prototype));try{for(r.s();!(e=r.n()).done;){var s=e.value;zn(this,s,o)}}catch(t){r.e(t)}finally{r.f()}}},{key:\"_onEvent\",value:function(t,e,i){if(e&&e.items&&this._data){var n=e.items,o=[],r=[],s=[],a=[],h=[],l=[];switch(t){case\"add\":for(var d=0,c=n.length;d<c;d++){var u=n[d];this.get(u)&&(this._ids.add(u),o.push(u))}break;case\"update\":for(var f=0,p=n.length;f<p;f++){var v=n[f];this.get(v)?this._ids.has(v)?(r.push(v),h.push(e.data[f]),a.push(e.oldData[f])):(this._ids.add(v),o.push(v)):this._ids.has(v)&&(this._ids.delete(v),s.push(v),l.push(e.oldData[f]))}break;case\"remove\":for(var g=0,y=n.length;g<y;g++){var m=n[g];this._ids.has(m)&&(this._ids.delete(m),s.push(m),l.push(e.oldData[g]))}}this.length+=o.length-s.length,o.length&&this._trigger(\"add\",{items:o},i),r.length&&this._trigger(\"update\",{items:r,oldData:a,data:h},i),s.length&&this._trigger(\"remove\",{items:s,oldData:l},i)}}}]),i}(Qc);function iu(t,e){return\"object\"===go(e)&&null!==e&&t===e.idProp&&\"function\"==typeof e.add&&\"function\"==typeof e.clear&&\"function\"==typeof e.distinct&&\"function\"==typeof Wo(e)&&\"function\"==typeof e.get&&\"function\"==typeof e.getDataSet&&\"function\"==typeof e.getIds&&\"number\"==typeof e.length&&\"function\"==typeof Io(e)&&\"function\"==typeof e.max&&\"function\"==typeof e.min&&\"function\"==typeof e.off&&\"function\"==typeof e.on&&\"function\"==typeof e.remove&&\"function\"==typeof e.setOptions&&\"function\"==typeof e.stream&&\"function\"==typeof e.update&&\"function\"==typeof e.updateOnly}function nu(t,e){return\"object\"===go(e)&&null!==e&&t===e.idProp&&\"function\"==typeof Wo(e)&&\"function\"==typeof e.get&&\"function\"==typeof e.getDataSet&&\"function\"==typeof e.getIds&&\"number\"==typeof e.length&&\"function\"==typeof Io(e)&&\"function\"==typeof e.off&&\"function\"==typeof e.on&&\"function\"==typeof e.stream&&iu(t,e.getDataSet())}var ou=Object.freeze({__proto__:null,DELETE:eh,DataSet:tu,DataStream:Jc,DataView:eu,Queue:Zc,createNewDataPipeFrom:function(t){return new Kc(t)},isDataSetLike:iu,isDataViewLike:nu}),ru=Tr.trim,su=a.parseFloat,au=1/su(xr+\"-0\")!=-1/0?function(t){var e=ru(Qt(t)),i=su(e);return 0===i&&\"-\"==e.charAt(0)?-0:i}:su;gt({global:!0,forced:parseFloat!=au},{parseFloat:au});var hu=k.parseFloat,lu=Li.f,du=h((function(){return!Object.getOwnPropertyNames(1)}));gt({target:\"Object\",stat:!0,forced:du},{getOwnPropertyNames:lu});var cu=k.Object,uu=function(t){return cu.getOwnPropertyNames(t)};function fu(t,e){var i=[\"node\",\"edge\",\"label\"],n=!0,o=Qh(e,\"chosen\");if(\"boolean\"==typeof o)n=o;else if(\"object\"===go(o)){if(-1===Hr(i).call(i,t))throw new Error(\"choosify: subOption '\"+t+\"' should be one of '\"+i.join(\"', '\")+\"'\");var r=Qh(e,[\"chosen\",t]);\"boolean\"!=typeof r&&\"function\"!=typeof r||(n=r)}return n}function pu(t,e,i){if(t.width<=0||t.height<=0)return!1;if(void 0!==i){var n={x:e.x-i.x,y:e.y-i.y};if(0!==i.angle){var o=-i.angle;e={x:Math.cos(o)*n.x-Math.sin(o)*n.y,y:Math.sin(o)*n.x+Math.cos(o)*n.y}}else e=n}var r=t.x+t.width,s=t.y+t.width;return t.left<e.x&&r>e.x&&t.top<e.y&&s>e.y}function vu(t){return\"string\"==typeof t&&\"\"!==t}function gu(t,e,i,n){var o=n.x,r=n.y;if(\"function\"==typeof n.distanceToBorder){var s=n.distanceToBorder(t,e),a=Math.sin(e)*s,h=Math.cos(e)*s;h===s?(o+=s,r=n.y):a===s?(o=n.x,r-=s):(o+=h,r-=a)}else n.shape.width>n.shape.height?(o=n.x+.5*n.shape.width,r=n.y-i):(o=n.x+i,r=n.y-.5*n.shape.height);return{x:o,y:r}}var yu=function(){function t(e){Nn(this,t),this.measureText=e,this.current=0,this.width=0,this.height=0,this.lines=[]}return Fn(t,[{key:\"_add\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:\"normal\";void 0===this.lines[t]&&(this.lines[t]={width:0,height:0,blocks:[]});var n=e;void 0!==e&&\"\"!==e||(n=\" \");var o=this.measureText(n,i),r=At({},Dc(o));r.text=e,r.width=o.width,r.mod=i,void 0!==e&&\"\"!==e||(r.width=0),this.lines[t].blocks.push(r),this.lines[t].width+=r.width}},{key:\"curWidth\",value:function(){var t=this.lines[this.current];return void 0===t?0:t.width}},{key:\"append\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"normal\";this._add(this.current,t,e)}},{key:\"newLine\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"normal\";this._add(this.current,t,e),this.current++}},{key:\"determineLineHeights\",value:function(){for(var t=0;t<this.lines.length;t++){var e=this.lines[t],i=0;if(void 0!==e.blocks)for(var n=0;n<e.blocks.length;n++){var o=e.blocks[n];i<o.height&&(i=o.height)}e.height=i}}},{key:\"determineLabelSize\",value:function(){for(var t=0,e=0,i=0;i<this.lines.length;i++){var n=this.lines[i];n.width>t&&(t=n.width),e+=n.height}this.width=t,this.height=e}},{key:\"removeEmptyBlocks\",value:function(){for(var t=[],e=0;e<this.lines.length;e++){var i=this.lines[e];if(0!==i.blocks.length&&(e!==this.lines.length-1||0!==i.width)){var n={};At(n,i),n.blocks=[];for(var o=void 0,r=[],s=0;s<i.blocks.length;s++){var a=i.blocks[s];0!==a.width?r.push(a):void 0===o&&(o=a)}0===r.length&&void 0!==o&&r.push(o),n.blocks=r,t.push(n)}}return t}},{key:\"finalize\",value:function(){this.determineLineHeights(),this.determineLabelSize();var t=this.removeEmptyBlocks();return{width:this.width,height:this.height,lines:t}}}]),t}(),mu={\"<b>\":/<b>/,\"<i>\":/<i>/,\"<code>\":/<code>/,\"</b>\":/<\\/b>/,\"</i>\":/<\\/i>/,\"</code>\":/<\\/code>/,\"*\":/\\*/,_:/_/,\"`\":/`/,afterBold:/[^*]/,afterItal:/[^_]/,afterMono:/[^`]/},bu=function(){function t(e){Nn(this,t),this.text=e,this.bold=!1,this.ital=!1,this.mono=!1,this.spacing=!1,this.position=0,this.buffer=\"\",this.modStack=[],this.blocks=[]}return Fn(t,[{key:\"mod\",value:function(){return 0===this.modStack.length?\"normal\":this.modStack[0]}},{key:\"modName\",value:function(){return 0===this.modStack.length?\"normal\":\"mono\"===this.modStack[0]?\"mono\":this.bold&&this.ital?\"boldital\":this.bold?\"bold\":this.ital?\"ital\":void 0}},{key:\"emitBlock\",value:function(){this.spacing&&(this.add(\" \"),this.spacing=!1),this.buffer.length>0&&(this.blocks.push({text:this.buffer,mod:this.modName()}),this.buffer=\"\")}},{key:\"add\",value:function(t){\" \"===t&&(this.spacing=!0),this.spacing&&(this.buffer+=\" \",this.spacing=!1),\" \"!=t&&(this.buffer+=t)}},{key:\"parseWS\",value:function(t){return!!/[ \\t]/.test(t)&&(this.mono?this.add(t):this.spacing=!0,!0)}},{key:\"setTag\",value:function(t){this.emitBlock(),this[t]=!0,this.modStack.unshift(t)}},{key:\"unsetTag\",value:function(t){this.emitBlock(),this[t]=!1,this.modStack.shift()}},{key:\"parseStartTag\",value:function(t,e){return!(this.mono||this[t]||!this.match(e))&&(this.setTag(t),!0)}},{key:\"match\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this.prepareRegExp(t),n=uo(i,2),o=n[0],r=n[1],s=o.test(this.text.substr(this.position,r));return s&&e&&(this.position+=r-1),s}},{key:\"parseEndTag\",value:function(t,e,i){var n=this.mod()===t;return!(!(n=\"mono\"===t?n&&this.mono:n&&!this.mono)||!this.match(e))&&(void 0!==i?(this.position===this.text.length-1||this.match(i,!1))&&this.unsetTag(t):this.unsetTag(t),!0)}},{key:\"replace\",value:function(t,e){return!!this.match(t)&&(this.add(e),this.position+=length-1,!0)}},{key:\"prepareRegExp\",value:function(t){var e,i;if(t instanceof RegExp)i=t,e=1;else{var n=mu[t];i=void 0!==n?n:new RegExp(t),e=t.length}return[i,e]}}]),t}(),wu=function(){function t(e,i,n,o){var r=this;Nn(this,t),this.ctx=e,this.parent=i,this.selected=n,this.hover=o;this.lines=new yu((function(t,i){if(void 0===t)return 0;var s=r.parent.getFormattingValues(e,n,o,i),a=0;\"\"!==t&&(a=r.ctx.measureText(t).width);return{width:a,values:s}}))}return Fn(t,[{key:\"process\",value:function(t){if(!vu(t))return this.lines.finalize();var e=this.parent.fontOptions;t=(t=t.replace(/\\r\\n/g,\"\\n\")).replace(/\\r/g,\"\\n\");var i=String(t).split(\"\\n\"),n=i.length;if(e.multi)for(var o=0;o<n;o++){var r=this.splitBlocks(i[o],e.multi);if(void 0!==r)if(0!==r.length){if(e.maxWdt>0)for(var s=0;s<r.length;s++){var a=r[s].mod,h=r[s].text;this.splitStringIntoLines(h,a,!0)}else for(var l=0;l<r.length;l++){var d=r[l].mod,c=r[l].text;this.lines.append(c,d)}this.lines.newLine()}else this.lines.newLine(\"\")}else if(e.maxWdt>0)for(var u=0;u<n;u++)this.splitStringIntoLines(i[u]);else for(var f=0;f<n;f++)this.lines.newLine(i[f]);return this.lines.finalize()}},{key:\"decodeMarkupSystem\",value:function(t){var e=\"none\";return\"markdown\"===t||\"md\"===t?e=\"markdown\":!0!==t&&\"html\"!==t||(e=\"html\"),e}},{key:\"splitHtmlBlocks\",value:function(t){for(var e=new bu(t),i=function(t){return!!/&/.test(t)&&(e.replace(e.text,\"&lt;\",\"<\")||e.replace(e.text,\"&amp;\",\"&\")||e.add(\"&\"),!0)};e.position<e.text.length;){var n=e.text.charAt(e.position);e.parseWS(n)||/</.test(n)&&(e.parseStartTag(\"bold\",\"<b>\")||e.parseStartTag(\"ital\",\"<i>\")||e.parseStartTag(\"mono\",\"<code>\")||e.parseEndTag(\"bold\",\"</b>\")||e.parseEndTag(\"ital\",\"</i>\")||e.parseEndTag(\"mono\",\"</code>\"))||i(n)||e.add(n),e.position++}return e.emitBlock(),e.blocks}},{key:\"splitMarkdownBlocks\",value:function(t){for(var e=this,i=new bu(t),n=!0,o=function(t){return!!/\\\\/.test(t)&&(i.position<e.text.length+1&&(i.position++,t=e.text.charAt(i.position),/ \\t/.test(t)?i.spacing=!0:(i.add(t),n=!1)),!0)};i.position<i.text.length;){var r=i.text.charAt(i.position);i.parseWS(r)||o(r)||(n||i.spacing)&&(i.parseStartTag(\"bold\",\"*\")||i.parseStartTag(\"ital\",\"_\")||i.parseStartTag(\"mono\",\"`\"))||i.parseEndTag(\"bold\",\"*\",\"afterBold\")||i.parseEndTag(\"ital\",\"_\",\"afterItal\")||i.parseEndTag(\"mono\",\"`\",\"afterMono\")||(i.add(r),n=!1),i.position++}return i.emitBlock(),i.blocks}},{key:\"splitBlocks\",value:function(t,e){var i=this.decodeMarkupSystem(e);return\"none\"===i?[{text:t,mod:\"normal\"}]:\"markdown\"===i?this.splitMarkdownBlocks(t):\"html\"===i?this.splitHtmlBlocks(t):void 0}},{key:\"overMaxWidth\",value:function(t){var e=this.ctx.measureText(t).width;return this.lines.curWidth()+e>this.parent.fontOptions.maxWdt}},{key:\"getLongestFit\",value:function(t){for(var e=\"\",i=0;i<t.length;){var n=e+(\"\"===e?\"\":\" \")+t[i];if(this.overMaxWidth(n))break;e=n,i++}return i}},{key:\"getLongestFitWord\",value:function(t){for(var e=0;e<t.length&&!this.overMaxWidth(Oo(t).call(t,0,e));)e++;return e}},{key:\"splitStringIntoLines\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"normal\",i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];this.parent.getFormattingValues(this.ctx,this.selected,this.hover,e);for(var n=(t=(t=t.replace(/^( +)/g,\"$1\\r\")).replace(/([^\\r][^ ]*)( +)/g,\"$1\\r$2\\r\")).split(\"\\r\");n.length>0;){var o=this.getLongestFit(n);if(0===o){var r=n[0],s=this.getLongestFitWord(r);this.lines.newLine(Oo(r).call(r,0,s),e),n[0]=Oo(r).call(r,s)}else{var a=o;\" \"===n[o-1]?o--:\" \"===n[a]&&a++;var h=Oo(n).call(n,0,o).join(\"\");o==n.length&&i?this.lines.append(h,e):this.lines.newLine(h,e),n=Oo(n).call(n,a)}}}}]),t}(),ku=[\"bold\",\"ital\",\"boldital\",\"mono\"],_u=function(){function t(e,i){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];Nn(this,t),this.body=e,this.pointToSelf=!1,this.baseSize=void 0,this.fontOptions={},this.setOptions(i),this.size={top:0,left:0,width:0,height:0,yLine:0},this.isEdgeLabel=n}return Fn(t,[{key:\"setOptions\",value:function(t){if(this.elementOptions=t,this.initFontOptions(t.font),vu(t.label)?this.labelDirty=!0:t.label=void 0,void 0!==t.font&&null!==t.font)if(\"string\"==typeof t.font)this.baseSize=this.fontOptions.size;else if(\"object\"===go(t.font)){var e=t.font.size;void 0!==e&&(this.baseSize=e)}}},{key:\"initFontOptions\",value:function(e){var i=this;Dh(ku,(function(t){i.fontOptions[t]={}})),t.parseFontString(this.fontOptions,e)?this.fontOptions.vadjust=0:Dh(e,(function(t,e){null!=t&&\"object\"!==go(t)&&(i.fontOptions[e]=t)}))}},{key:\"constrain\",value:function(t){var e={constrainWidth:!1,maxWdt:-1,minWdt:-1,constrainHeight:!1,minHgt:-1,valign:\"middle\"},i=Qh(t,\"widthConstraint\");if(\"number\"==typeof i)e.maxWdt=Number(i),e.minWdt=Number(i);else if(\"object\"===go(i)){var n=Qh(t,[\"widthConstraint\",\"maximum\"]);\"number\"==typeof n&&(e.maxWdt=Number(n));var o=Qh(t,[\"widthConstraint\",\"minimum\"]);\"number\"==typeof o&&(e.minWdt=Number(o))}var r=Qh(t,\"heightConstraint\");if(\"number\"==typeof r)e.minHgt=Number(r);else if(\"object\"===go(r)){var s=Qh(t,[\"heightConstraint\",\"minimum\"]);\"number\"==typeof s&&(e.minHgt=Number(s));var a=Qh(t,[\"heightConstraint\",\"valign\"]);\"string\"==typeof a&&(\"top\"!==a&&\"bottom\"!==a||(e.valign=a))}return e}},{key:\"update\",value:function(t,e){this.setOptions(t,!0),this.propagateFonts(e),Ch(this.fontOptions,this.constrain(e)),this.fontOptions.chooser=fu(\"label\",e)}},{key:\"adjustSizes\",value:function(t){var e=t?t.right+t.left:0;this.fontOptions.constrainWidth&&(this.fontOptions.maxWdt-=e,this.fontOptions.minWdt-=e);var i=t?t.top+t.bottom:0;this.fontOptions.constrainHeight&&(this.fontOptions.minHgt-=i)}},{key:\"addFontOptionsToPile\",value:function(t,e){for(var i=0;i<e.length;++i)this.addFontToPile(t,e[i])}},{key:\"addFontToPile\",value:function(t,e){if(void 0!==e&&void 0!==e.font&&null!==e.font){var i=e.font;t.push(i)}}},{key:\"getBasicOptions\",value:function(e){for(var i={},n=0;n<e.length;++n){var o=e[n],r={};t.parseFontString(r,o)&&(o=r),Dh(o,(function(t,e){void 0!==t&&(Object.prototype.hasOwnProperty.call(i,e)||(-1!==Hr(ku).call(ku,e)?i[e]={}:i[e]=t))}))}return i}},{key:\"getFontOption\",value:function(e,i,n){for(var o,r=0;r<e.length;++r){var s=e[r];if(Object.prototype.hasOwnProperty.call(s,i)){if(null==(o=s[i]))continue;var a={};if(t.parseFontString(a,o)&&(o=a),Object.prototype.hasOwnProperty.call(o,n))return o[n]}}if(Object.prototype.hasOwnProperty.call(this.fontOptions,n))return this.fontOptions[n];throw new Error(\"Did not find value for multi-font for property: '\"+n+\"'\")}},{key:\"getFontOptions\",value:function(t,e){for(var i={},n=[\"color\",\"size\",\"face\",\"mod\",\"vadjust\"],o=0;o<n.length;++o){var r=n[o];i[r]=this.getFontOption(t,e,r)}return i}},{key:\"propagateFonts\",value:function(t){var e=this,i=[];this.addFontOptionsToPile(i,t),this.fontOptions=this.getBasicOptions(i);for(var n=function(t){var n=ku[t],o=e.fontOptions[n];Dh(e.getFontOptions(i,n),(function(t,e){o[e]=t})),o.size=Number(o.size),o.vadjust=Number(o.vadjust)},o=0;o<ku.length;++o)n(o)}},{key:\"draw\",value:function(t,e,i,n,o){var r=arguments.length>5&&void 0!==arguments[5]?arguments[5]:\"middle\";if(void 0!==this.elementOptions.label){var s=this.fontOptions.size*this.body.view.scale;this.elementOptions.label&&s<this.elementOptions.scaling.label.drawThreshold-1||(s>=this.elementOptions.scaling.label.maxVisible&&(s=Number(this.elementOptions.scaling.label.maxVisible)/this.body.view.scale),this.calculateLabelSize(t,n,o,e,i,r),this._drawBackground(t),this._drawText(t,e,this.size.yLine,r,s))}}},{key:\"_drawBackground\",value:function(t){if(void 0!==this.fontOptions.background&&\"none\"!==this.fontOptions.background){t.fillStyle=this.fontOptions.background;var e=this.getSize();t.fillRect(e.left,e.top,e.width,e.height)}}},{key:\"_drawText\",value:function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:\"middle\",o=arguments.length>4?arguments[4]:void 0,r=this._setAlignment(t,e,i,n),s=uo(r,2);e=s[0],i=s[1],t.textAlign=\"left\",e-=this.size.width/2,this.fontOptions.valign&&this.size.height>this.size.labelHeight&&(\"top\"===this.fontOptions.valign&&(i-=(this.size.height-this.size.labelHeight)/2),\"bottom\"===this.fontOptions.valign&&(i+=(this.size.height-this.size.labelHeight)/2));for(var a=0;a<this.lineCount;a++){var h=this.lines[a];if(h&&h.blocks){var l=0;this.isEdgeLabel||\"center\"===this.fontOptions.align?l+=(this.size.width-h.width)/2:\"right\"===this.fontOptions.align&&(l+=this.size.width-h.width);for(var d=0;d<h.blocks.length;d++){var c=h.blocks[d];t.font=c.font;var u=this._getColor(c.color,o,c.strokeColor),f=uo(u,2),p=f[0],v=f[1];c.strokeWidth>0&&(t.lineWidth=c.strokeWidth,t.strokeStyle=v,t.lineJoin=\"round\"),t.fillStyle=p,c.strokeWidth>0&&t.strokeText(c.text,e+l,i+c.vadjust),t.fillText(c.text,e+l,i+c.vadjust),l+=c.width}i+=h.height}}}},{key:\"_setAlignment\",value:function(t,e,i,n){if(this.isEdgeLabel&&\"horizontal\"!==this.fontOptions.align&&!1===this.pointToSelf){e=0,i=0;\"top\"===this.fontOptions.align?(t.textBaseline=\"alphabetic\",i-=4):\"bottom\"===this.fontOptions.align?(t.textBaseline=\"hanging\",i+=4):t.textBaseline=\"middle\"}else t.textBaseline=n;return[e,i]}},{key:\"_getColor\",value:function(t,e,i){var n=t||\"#000000\",o=i||\"#ffffff\";if(e<=this.elementOptions.scaling.label.drawThreshold){var r=Math.max(0,Math.min(1,1-(this.elementOptions.scaling.label.drawThreshold-e)));n=Fh(n,r),o=Fh(o,r)}return[n,o]}},{key:\"getTextSize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return this._processLabel(t,e,i),{width:this.size.width,height:this.size.height,lineCount:this.lineCount}}},{key:\"getSize\",value:function(){var t=this.size.left,e=this.size.top-1;if(this.isEdgeLabel){var i=.5*-this.size.width;switch(this.fontOptions.align){case\"middle\":t=i,e=.5*-this.size.height;break;case\"top\":t=i,e=-(this.size.height+2);break;case\"bottom\":t=i,e=2}}return{left:t,top:e,width:this.size.width,height:this.size.height}}},{key:\"calculateLabelSize\",value:function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,r=arguments.length>5&&void 0!==arguments[5]?arguments[5]:\"middle\";this._processLabel(t,e,i),this.size.left=n-.5*this.size.width,this.size.top=o-.5*this.size.height,this.size.yLine=o+.5*(1-this.lineCount)*this.fontOptions.size,\"hanging\"===r&&(this.size.top+=.5*this.fontOptions.size,this.size.top+=4,this.size.yLine+=4)}},{key:\"getFormattingValues\",value:function(t,e,i,n){var o=function(t,e,i){return\"normal\"===e?\"mod\"===i?\"\":t[i]:void 0!==t[e][i]?t[e][i]:t[i]},r={color:o(this.fontOptions,n,\"color\"),size:o(this.fontOptions,n,\"size\"),face:o(this.fontOptions,n,\"face\"),mod:o(this.fontOptions,n,\"mod\"),vadjust:o(this.fontOptions,n,\"vadjust\"),strokeWidth:this.fontOptions.strokeWidth,strokeColor:this.fontOptions.strokeColor};(e||i)&&(\"normal\"===n&&!0===this.fontOptions.chooser&&this.elementOptions.labelHighlightBold?r.mod=\"bold\":\"function\"==typeof this.fontOptions.chooser&&this.fontOptions.chooser(r,this.elementOptions.id,e,i));var s=\"\";return void 0!==r.mod&&\"\"!==r.mod&&(s+=r.mod+\" \"),s+=r.size+\"px \"+r.face,t.font=s.replace(/\"/g,\"\"),r.font=t.font,r.height=r.size,r}},{key:\"differentState\",value:function(t,e){return t!==this.selectedState||e!==this.hoverState}},{key:\"_processLabelText\",value:function(t,e,i,n){return new wu(t,this,e,i).process(n)}},{key:\"_processLabel\",value:function(t,e,i){if(!1!==this.labelDirty||this.differentState(e,i)){var n=this._processLabelText(t,e,i,this.elementOptions.label);this.fontOptions.minWdt>0&&n.width<this.fontOptions.minWdt&&(n.width=this.fontOptions.minWdt),this.size.labelHeight=n.height,this.fontOptions.minHgt>0&&n.height<this.fontOptions.minHgt&&(n.height=this.fontOptions.minHgt),this.lines=n.lines,this.lineCount=n.lines.length,this.size.width=n.width,this.size.height=n.height,this.selectedState=e,this.hoverState=i,this.labelDirty=!1}}},{key:\"visible\",value:function(){return 0!==this.size.width&&0!==this.size.height&&void 0!==this.elementOptions.label&&!(this.fontOptions.size*this.body.view.scale<this.elementOptions.scaling.label.drawThreshold-1)}}],[{key:\"parseFontString\",value:function(t,e){if(!e||\"string\"!=typeof e)return!1;var i=e.split(\" \");return t.size=+i[0].replace(\"px\",\"\"),t.face=i[1],t.color=i[2],!0}}]),t}(),xu=function(){function t(e,i,n){Nn(this,t),this.body=i,this.labelModule=n,this.setOptions(e),this.top=void 0,this.left=void 0,this.height=void 0,this.width=void 0,this.radius=void 0,this.margin=void 0,this.refreshNeeded=!0,this.boundingBox={top:0,left:0,right:0,bottom:0}}return Fn(t,[{key:\"setOptions\",value:function(t){this.options=t}},{key:\"_setMargins\",value:function(t){this.margin={},this.options.margin&&(\"object\"==go(this.options.margin)?(this.margin.top=this.options.margin.top,this.margin.right=this.options.margin.right,this.margin.bottom=this.options.margin.bottom,this.margin.left=this.options.margin.left):(this.margin.top=this.options.margin,this.margin.right=this.options.margin,this.margin.bottom=this.options.margin,this.margin.left=this.options.margin)),t.adjustSizes(this.margin)}},{key:\"_distanceToBorder\",value:function(t,e){var i=this.options.borderWidth;return t&&this.resize(t),Math.min(Math.abs(this.width/2/Math.cos(e)),Math.abs(this.height/2/Math.sin(e)))+i}},{key:\"enableShadow\",value:function(t,e){e.shadow&&(t.shadowColor=e.shadowColor,t.shadowBlur=e.shadowSize,t.shadowOffsetX=e.shadowX,t.shadowOffsetY=e.shadowY)}},{key:\"disableShadow\",value:function(t,e){e.shadow&&(t.shadowColor=\"rgba(0,0,0,0)\",t.shadowBlur=0,t.shadowOffsetX=0,t.shadowOffsetY=0)}},{key:\"enableBorderDashes\",value:function(t,e){if(!1!==e.borderDashes)if(void 0!==t.setLineDash){var i=e.borderDashes;!0===i&&(i=[5,15]),t.setLineDash(i)}else console.warn(\"setLineDash is not supported in this browser. The dashed borders cannot be used.\"),this.options.shapeProperties.borderDashes=!1,e.borderDashes=!1}},{key:\"disableBorderDashes\",value:function(t,e){!1!==e.borderDashes&&(void 0!==t.setLineDash?t.setLineDash([0]):(console.warn(\"setLineDash is not supported in this browser. The dashed borders cannot be used.\"),this.options.shapeProperties.borderDashes=!1,e.borderDashes=!1))}},{key:\"needsRefresh\",value:function(t,e){return!0===this.refreshNeeded?(this.refreshNeeded=!1,!0):void 0===this.width||this.labelModule.differentState(t,e)}},{key:\"initContextForDraw\",value:function(t,e){var i=e.borderWidth/this.body.view.scale;t.lineWidth=Math.min(this.width,i),t.strokeStyle=e.borderColor,t.fillStyle=e.color}},{key:\"performStroke\",value:function(t,e){var i=e.borderWidth/this.body.view.scale;t.save(),i>0&&(this.enableBorderDashes(t,e),t.stroke(),this.disableBorderDashes(t,e)),t.restore()}},{key:\"performFill\",value:function(t,e){t.save(),t.fillStyle=e.color,this.enableShadow(t,e),hs(t).call(t),this.disableShadow(t,e),t.restore(),this.performStroke(t,e)}},{key:\"_addBoundingBoxMargin\",value:function(t){this.boundingBox.left-=t,this.boundingBox.top-=t,this.boundingBox.bottom+=t,this.boundingBox.right+=t}},{key:\"_updateBoundingBox\",value:function(t,e,i,n,o){void 0!==i&&this.resize(i,n,o),this.left=t-this.width/2,this.top=e-this.height/2,this.boundingBox.left=this.left,this.boundingBox.top=this.top,this.boundingBox.bottom=this.top+this.height,this.boundingBox.right=this.left+this.width}},{key:\"updateBoundingBox\",value:function(t,e,i,n,o){this._updateBoundingBox(t,e,i,n,o)}},{key:\"getDimensionsFromLabel\",value:function(t,e,i){this.textSize=this.labelModule.getTextSize(t,e,i);var n=this.textSize.width,o=this.textSize.height;return 0===n&&(n=14,o=14),{width:n,height:o}}}]),t}();function Eu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Ou=function(t){Ad(i,t);var e=Eu(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o))._setMargins(o),r}return Fn(i,[{key:\"resize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(this.needsRefresh(e,i)){var n=this.getDimensionsFromLabel(t,e,i);this.width=n.width+this.margin.right+this.margin.left,this.height=n.height+this.margin.top+this.margin.bottom,this.radius=this.width/2}}},{key:\"draw\",value:function(t,e,i,n,o,r){this.resize(t,n,o),this.left=e-this.width/2,this.top=i-this.height/2,this.initContextForDraw(t,r),Yt(t,this.left,this.top,this.width,this.height,r.borderRadius),this.performFill(t,r),this.updateBoundingBox(e,i,t,n,o),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,n,o)}},{key:\"updateBoundingBox\",value:function(t,e,i,n,o){this._updateBoundingBox(t,e,i,n,o);var r=this.options.shapeProperties.borderRadius;this._addBoundingBoxMargin(r)}},{key:\"distanceToBorder\",value:function(t,e){t&&this.resize(t);var i=this.options.borderWidth;return Math.min(Math.abs(this.width/2/Math.cos(e)),Math.abs(this.height/2/Math.sin(e)))+i}}]),i}(xu);function Cu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Su=function(t){Ad(i,t);var e=Cu(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o)).labelOffset=0,r.selected=!1,r}return Fn(i,[{key:\"setOptions\",value:function(t,e,i){this.options=t,void 0===e&&void 0===i||this.setImages(e,i)}},{key:\"setImages\",value:function(t,e){e&&this.selected?(this.imageObj=e,this.imageObjAlt=t):(this.imageObj=t,this.imageObjAlt=e)}},{key:\"switchImages\",value:function(t){var e=t&&!this.selected||!t&&this.selected;if(this.selected=t,void 0!==this.imageObjAlt&&e){var i=this.imageObj;this.imageObj=this.imageObjAlt,this.imageObjAlt=i}}},{key:\"_getImagePadding\",value:function(){var t={top:0,right:0,bottom:0,left:0};if(this.options.imagePadding){var e=this.options.imagePadding;\"object\"==go(e)?(t.top=e.top,t.right=e.right,t.bottom=e.bottom,t.left=e.left):(t.top=e,t.right=e,t.bottom=e,t.left=e)}return t}},{key:\"_resizeImage\",value:function(){var t,e;if(!1===this.options.shapeProperties.useImageSize){var i=1,n=1;this.imageObj.width&&this.imageObj.height&&(this.imageObj.width>this.imageObj.height?i=this.imageObj.width/this.imageObj.height:n=this.imageObj.height/this.imageObj.width),t=2*this.options.size*i,e=2*this.options.size*n}else{var o=this._getImagePadding();t=this.imageObj.width+o.left+o.right,e=this.imageObj.height+o.top+o.bottom}this.width=t,this.height=e,this.radius=.5*this.width}},{key:\"_drawRawCircle\",value:function(t,e,i,n){this.initContextForDraw(t,n),Ut(t,e,i,n.size),this.performFill(t,n)}},{key:\"_drawImageAtPosition\",value:function(t,e){if(0!=this.imageObj.width){t.globalAlpha=void 0!==e.opacity?e.opacity:1,this.enableShadow(t,e);var i=1;!0===this.options.shapeProperties.interpolation&&(i=this.imageObj.width/this.width/this.body.view.scale);var n=this._getImagePadding(),o=this.left+n.left,r=this.top+n.top,s=this.width-n.left-n.right,a=this.height-n.top-n.bottom;this.imageObj.drawImageAtPosition(t,i,o,r,s,a),this.disableShadow(t,e)}}},{key:\"_drawImageLabel\",value:function(t,e,i,n,o){var r=0;if(void 0!==this.height){r=.5*this.height;var s=this.labelModule.getTextSize(t,n,o);s.lineCount>=1&&(r+=s.height/2)}var a=i+r;this.options.label&&(this.labelOffset=r),this.labelModule.draw(t,e,a,n,o,\"hanging\")}}]),i}(xu);function Tu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Mu=function(t){Ad(i,t);var e=Tu(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o))._setMargins(o),r}return Fn(i,[{key:\"resize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(this.needsRefresh(e,i)){var n=this.getDimensionsFromLabel(t,e,i),o=Math.max(n.width+this.margin.right+this.margin.left,n.height+this.margin.top+this.margin.bottom);this.options.size=o/2,this.width=o,this.height=o,this.radius=this.width/2}}},{key:\"draw\",value:function(t,e,i,n,o,r){this.resize(t,n,o),this.left=e-this.width/2,this.top=i-this.height/2,this._drawRawCircle(t,e,i,r),this.updateBoundingBox(e,i),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,i,n,o)}},{key:\"updateBoundingBox\",value:function(t,e){this.boundingBox.top=e-this.options.size,this.boundingBox.left=t-this.options.size,this.boundingBox.right=t+this.options.size,this.boundingBox.bottom=e+this.options.size}},{key:\"distanceToBorder\",value:function(t){return t&&this.resize(t),.5*this.width}}]),i}(Su);function Pu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Du=function(t){Ad(i,t);var e=Pu(i);function i(t,n,o,r,s){var a;return Nn(this,i),(a=e.call(this,t,n,o)).setImages(r,s),a}return Fn(i,[{key:\"resize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover,n=void 0===this.imageObj.src||void 0===this.imageObj.width||void 0===this.imageObj.height;if(n){var o=2*this.options.size;return this.width=o,this.height=o,void(this.radius=.5*this.width)}this.needsRefresh(e,i)&&this._resizeImage()}},{key:\"draw\",value:function(t,e,i,n,o,r){this.switchImages(n),this.resize();var s=e,a=i;\"top-left\"===this.options.shapeProperties.coordinateOrigin?(this.left=e,this.top=i,s+=this.width/2,a+=this.height/2):(this.left=e-this.width/2,this.top=i-this.height/2),this._drawRawCircle(t,s,a,r),t.save(),t.clip(),this._drawImageAtPosition(t,r),t.restore(),this._drawImageLabel(t,s,a,n,o),this.updateBoundingBox(e,i)}},{key:\"updateBoundingBox\",value:function(t,e){\"top-left\"===this.options.shapeProperties.coordinateOrigin?(this.boundingBox.top=e,this.boundingBox.left=t,this.boundingBox.right=t+2*this.options.size,this.boundingBox.bottom=e+2*this.options.size):(this.boundingBox.top=e-this.options.size,this.boundingBox.left=t-this.options.size,this.boundingBox.right=t+this.options.size,this.boundingBox.bottom=e+this.options.size),this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelOffset)}},{key:\"distanceToBorder\",value:function(t){return t&&this.resize(t),.5*this.width}}]),i}(Su);function Iu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Bu=function(t){Ad(i,t);var e=Iu(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"resize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover,n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{size:this.options.size};if(this.needsRefresh(e,i)){var o,r;this.labelModule.getTextSize(t,e,i);var s=2*n.size;this.width=null!==(o=this.customSizeWidth)&&void 0!==o?o:s,this.height=null!==(r=this.customSizeHeight)&&void 0!==r?r:s,this.radius=.5*this.width}}},{key:\"_drawShape\",value:function(t,e,i,n,o,r,s,a){var h,l=this;return this.resize(t,r,s,a),this.left=n-this.width/2,this.top=o-this.height/2,this.initContextForDraw(t,a),(h=e,Object.prototype.hasOwnProperty.call($t,h)?$t[h]:function(t){for(var e=arguments.length,i=new Array(e>1?e-1:0),n=1;n<e;n++)i[n-1]=arguments[n];CanvasRenderingContext2D.prototype[h].call(t,i)})(t,n,o,a.size),this.performFill(t,a),void 0!==this.options.icon&&void 0!==this.options.icon.code&&(t.font=(r?\"bold \":\"\")+this.height/2+\"px \"+(this.options.icon.face||\"FontAwesome\"),t.fillStyle=this.options.icon.color||\"black\",t.textAlign=\"center\",t.textBaseline=\"middle\",t.fillText(this.options.icon.code,n,o)),{drawExternalLabel:function(){if(void 0!==l.options.label){l.labelModule.calculateLabelSize(t,r,s,n,o,\"hanging\");var e=o+.5*l.height+.5*l.labelModule.size.height;l.labelModule.draw(t,n,e,r,s,\"hanging\")}l.updateBoundingBox(n,o)}}}},{key:\"updateBoundingBox\",value:function(t,e){this.boundingBox.top=e-this.options.size,this.boundingBox.left=t-this.options.size,this.boundingBox.right=t+this.options.size,this.boundingBox.bottom=e+this.options.size,void 0!==this.options.label&&this.labelModule.size.width>0&&(this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelModule.size.height))}}]),i}(xu);function zu(t,e){var i=zo(t);if(On){var n=On(t);e&&(n=mr(n).call(n,(function(e){return Mn(t,e).enumerable}))),i.push.apply(i,n)}return i}function Nu(t){for(var e=1;e<arguments.length;e++){var i,n=null!=arguments[e]?arguments[e]:{};if(e%2)Wo(i=zu(Object(n),!0)).call(i,(function(e){jn(t,e,n[e])}));else if(Dn)In(t,Dn(n));else{var o;Wo(o=zu(Object(n))).call(o,(function(e){zn(t,e,Mn(n,e))}))}}return t}function Au(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Fu=function(t){Ad(i,t);var e=Au(i);function i(t,n,o,r){var s;return Nn(this,i),(s=e.call(this,t,n,o,r)).ctxRenderer=r,s}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){this.resize(t,n,o,r),this.left=e-this.width/2,this.top=i-this.height/2,t.save();var s=this.ctxRenderer({ctx:t,id:this.options.id,x:e,y:i,state:{selected:n,hover:o},style:Nu({},r),label:this.options.label});if(null!=s.drawNode&&s.drawNode(),t.restore(),s.drawExternalLabel){var a=s.drawExternalLabel;s.drawExternalLabel=function(){t.save(),a(),t.restore()}}return s.nodeDimensions&&(this.customSizeWidth=s.nodeDimensions.width,this.customSizeHeight=s.nodeDimensions.height),s}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Bu);function ju(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Ru=function(t){Ad(i,t);var e=ju(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o))._setMargins(o),r}return Fn(i,[{key:\"resize\",value:function(t,e,i){if(this.needsRefresh(e,i)){var n=this.getDimensionsFromLabel(t,e,i).width+this.margin.right+this.margin.left;this.width=n,this.height=n,this.radius=this.width/2}}},{key:\"draw\",value:function(t,e,i,n,o,r){this.resize(t,n,o),this.left=e-this.width/2,this.top=i-this.height/2,this.initContextForDraw(t,r),Gt(t,e-this.width/2,i-this.height/2,this.width,this.height),this.performFill(t,r),this.updateBoundingBox(e,i,t,n,o),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,n,o)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(xu);function Lu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Hu=function(t){Ad(i,t);var e=Lu(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){return this._drawShape(t,\"diamond\",4,e,i,n,o,r)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Bu);function Wu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var qu=function(t){Ad(i,t);var e=Wu(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){return this._drawShape(t,\"circle\",2,e,i,n,o,r)}},{key:\"distanceToBorder\",value:function(t){return t&&this.resize(t),this.options.size}}]),i}(Bu);function Vu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Uu=function(t){Ad(i,t);var e=Vu(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"resize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(this.needsRefresh(e,i)){var n=this.getDimensionsFromLabel(t,e,i);this.height=2*n.height,this.width=n.width+n.height,this.radius=.5*this.width}}},{key:\"draw\",value:function(t,e,i,n,o,r){this.resize(t,n,o),this.left=e-.5*this.width,this.top=i-.5*this.height,this.initContextForDraw(t,r),Xt(t,this.left,this.top,this.width,this.height),this.performFill(t,r),this.updateBoundingBox(e,i,t,n,o),this.labelModule.draw(t,e,i,n,o)}},{key:\"distanceToBorder\",value:function(t,e){t&&this.resize(t);var i=.5*this.width,n=.5*this.height,o=Math.sin(e)*i,r=Math.cos(e)*n;return i*n/Math.sqrt(o*o+r*r)}}]),i}(xu);function Yu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Xu=function(t){Ad(i,t);var e=Yu(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o))._setMargins(o),r}return Fn(i,[{key:\"resize\",value:function(t,e,i){this.needsRefresh(e,i)&&(this.iconSize={width:Number(this.options.icon.size),height:Number(this.options.icon.size)},this.width=this.iconSize.width+this.margin.right+this.margin.left,this.height=this.iconSize.height+this.margin.top+this.margin.bottom,this.radius=.5*this.width)}},{key:\"draw\",value:function(t,e,i,n,o,r){var s=this;return this.resize(t,n,o),this.options.icon.size=this.options.icon.size||50,this.left=e-this.width/2,this.top=i-this.height/2,this._icon(t,e,i,n,o,r),{drawExternalLabel:function(){if(void 0!==s.options.label){s.labelModule.draw(t,s.left+s.iconSize.width/2+s.margin.left,i+s.height/2+5,n)}s.updateBoundingBox(e,i)}}}},{key:\"updateBoundingBox\",value:function(t,e){if(this.boundingBox.top=e-.5*this.options.icon.size,this.boundingBox.left=t-.5*this.options.icon.size,this.boundingBox.right=t+.5*this.options.icon.size,this.boundingBox.bottom=e+.5*this.options.icon.size,void 0!==this.options.label&&this.labelModule.size.width>0){this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelModule.size.height+5)}}},{key:\"_icon\",value:function(t,e,i,n,o,r){var s=Number(this.options.icon.size);void 0!==this.options.icon.code?(t.font=[null!=this.options.icon.weight?this.options.icon.weight:n?\"bold\":\"\",(null!=this.options.icon.weight&&n?5:0)+s+\"px\",this.options.icon.face].join(\" \"),t.fillStyle=this.options.icon.color||\"black\",t.textAlign=\"center\",t.textBaseline=\"middle\",this.enableShadow(t,r),t.fillText(this.options.icon.code,e,i),this.disableShadow(t,r)):console.error(\"When using the icon shape, you need to define the code in the icon options object. This can be done per node or globally.\")}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(xu);function Gu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Ku=function(t){Ad(i,t);var e=Gu(i);function i(t,n,o,r,s){var a;return Nn(this,i),(a=e.call(this,t,n,o)).setImages(r,s),a}return Fn(i,[{key:\"resize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover,n=void 0===this.imageObj.src||void 0===this.imageObj.width||void 0===this.imageObj.height;if(n){var o=2*this.options.size;return this.width=o,void(this.height=o)}this.needsRefresh(e,i)&&this._resizeImage()}},{key:\"draw\",value:function(t,e,i,n,o,r){t.save(),this.switchImages(n),this.resize();var s=e,a=i;if(\"top-left\"===this.options.shapeProperties.coordinateOrigin?(this.left=e,this.top=i,s+=this.width/2,a+=this.height/2):(this.left=e-this.width/2,this.top=i-this.height/2),!0===this.options.shapeProperties.useBorderWithImage){var h=this.options.borderWidth,l=this.options.borderWidthSelected||2*this.options.borderWidth,d=(n?l:h)/this.body.view.scale;t.lineWidth=Math.min(this.width,d),t.beginPath();var c=n?this.options.color.highlight.border:o?this.options.color.hover.border:this.options.color.border,u=n?this.options.color.highlight.background:o?this.options.color.hover.background:this.options.color.background;void 0!==r.opacity&&(c=Fh(c,r.opacity),u=Fh(u,r.opacity)),t.strokeStyle=c,t.fillStyle=u,t.rect(this.left-.5*t.lineWidth,this.top-.5*t.lineWidth,this.width+t.lineWidth,this.height+t.lineWidth),hs(t).call(t),this.performStroke(t,r),t.closePath()}this._drawImageAtPosition(t,r),this._drawImageLabel(t,s,a,n,o),this.updateBoundingBox(e,i),t.restore()}},{key:\"updateBoundingBox\",value:function(t,e){this.resize(),\"top-left\"===this.options.shapeProperties.coordinateOrigin?(this.left=t,this.top=e):(this.left=t-this.width/2,this.top=e-this.height/2),this.boundingBox.left=this.left,this.boundingBox.top=this.top,this.boundingBox.bottom=this.top+this.height,this.boundingBox.right=this.left+this.width,void 0!==this.options.label&&this.labelModule.size.width>0&&(this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelOffset))}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Su);function $u(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Zu=function(t){Ad(i,t);var e=$u(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){return this._drawShape(t,\"square\",2,e,i,n,o,r)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Bu);function Qu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Ju=function(t){Ad(i,t);var e=Qu(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){return this._drawShape(t,\"hexagon\",4,e,i,n,o,r)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Bu);function tf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var ef=function(t){Ad(i,t);var e=tf(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){return this._drawShape(t,\"star\",4,e,i,n,o,r)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Bu);function nf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var of=function(t){Ad(i,t);var e=nf(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o))._setMargins(o),r}return Fn(i,[{key:\"resize\",value:function(t,e,i){this.needsRefresh(e,i)&&(this.textSize=this.labelModule.getTextSize(t,e,i),this.width=this.textSize.width+this.margin.right+this.margin.left,this.height=this.textSize.height+this.margin.top+this.margin.bottom,this.radius=.5*this.width)}},{key:\"draw\",value:function(t,e,i,n,o,r){this.resize(t,n,o),this.left=e-this.width/2,this.top=i-this.height/2,this.enableShadow(t,r),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,n,o),this.disableShadow(t,r),this.updateBoundingBox(e,i,t,n,o)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(xu);function rf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var sf=function(t){Ad(i,t);var e=rf(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){return this._drawShape(t,\"triangle\",3,e,i,n,o,r)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Bu);function af(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var hf=function(t){Ad(i,t);var e=af(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){return this._drawShape(t,\"triangleDown\",3,e,i,n,o,r)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Bu);function lf(t,e){var i=zo(t);if(On){var n=On(t);e&&(n=mr(n).call(n,(function(e){return Mn(t,e).enumerable}))),i.push.apply(i,n)}return i}function df(t){for(var e=1;e<arguments.length;e++){var i,n=null!=arguments[e]?arguments[e]:{};if(e%2)Wo(i=lf(Object(n),!0)).call(i,(function(e){jn(t,e,n[e])}));else if(Dn)In(t,Dn(n));else{var o;Wo(o=lf(Object(n))).call(o,(function(e){zn(t,e,Mn(n,e))}))}}return t}var cf=function(){function t(e,i,n,o,r,s){Nn(this,t),this.options=Kh(r),this.globalOptions=r,this.defaultOptions=s,this.body=i,this.edges=[],this.id=void 0,this.imagelist=n,this.grouplist=o,this.x=void 0,this.y=void 0,this.baseSize=this.options.size,this.baseFontSize=this.options.font.size,this.predefinedPosition=!1,this.selected=!1,this.hover=!1,this.labelModule=new _u(this.body,this.options,!1),this.setOptions(e)}return Fn(t,[{key:\"attachEdge\",value:function(t){var e;-1===Hr(e=this.edges).call(e,t)&&this.edges.push(t)}},{key:\"detachEdge\",value:function(t){var e,i,n=Hr(e=this.edges).call(e,t);-1!=n&&er(i=this.edges).call(i,n,1)}},{key:\"setOptions\",value:function(e){var i=this.options.shape;if(e){if(void 0!==e.color&&(this._localColor=e.color),void 0!==e.id&&(this.id=e.id),void 0===this.id)throw new Error(\"Node must have an id\");t.checkMass(e,this.id),void 0!==e.x&&(null===e.x?(this.x=void 0,this.predefinedPosition=!1):(this.x=Br(e.x),this.predefinedPosition=!0)),void 0!==e.y&&(null===e.y?(this.y=void 0,this.predefinedPosition=!1):(this.y=Br(e.y),this.predefinedPosition=!0)),void 0!==e.size&&(this.baseSize=e.size),void 0!==e.value&&(e.value=hu(e.value)),t.parseOptions(this.options,e,!0,this.globalOptions,this.grouplist);var n=[e,this.options,this.defaultOptions];return this.chooser=fu(\"node\",n),this._load_images(),this.updateLabelModule(e),void 0!==e.opacity&&t.checkOpacity(e.opacity)&&(this.options.opacity=e.opacity),this.updateShape(i),void 0!==e.hidden||void 0!==e.physics}}},{key:\"_load_images\",value:function(){if((\"circularImage\"===this.options.shape||\"image\"===this.options.shape)&&void 0===this.options.image)throw new Error(\"Option image must be defined for node type '\"+this.options.shape+\"'\");if(void 0!==this.options.image){if(void 0===this.imagelist)throw new Error(\"Internal Error: No images provided\");if(\"string\"==typeof this.options.image)this.imageObj=this.imagelist.load(this.options.image,this.options.brokenImage,this.id);else{if(void 0===this.options.image.unselected)throw new Error(\"No unselected image provided\");this.imageObj=this.imagelist.load(this.options.image.unselected,this.options.brokenImage,this.id),void 0!==this.options.image.selected?this.imageObjAlt=this.imagelist.load(this.options.image.selected,this.options.brokenImage,this.id):this.imageObjAlt=void 0}}}},{key:\"getFormattingValues\",value:function(){var t={color:this.options.color.background,opacity:this.options.opacity,borderWidth:this.options.borderWidth,borderColor:this.options.color.border,size:this.options.size,borderDashes:this.options.shapeProperties.borderDashes,borderRadius:this.options.shapeProperties.borderRadius,shadow:this.options.shadow.enabled,shadowColor:this.options.shadow.color,shadowSize:this.options.shadow.size,shadowX:this.options.shadow.x,shadowY:this.options.shadow.y};if(this.selected||this.hover?!0===this.chooser?this.selected?(null!=this.options.borderWidthSelected?t.borderWidth=this.options.borderWidthSelected:t.borderWidth*=2,t.color=this.options.color.highlight.background,t.borderColor=this.options.color.highlight.border,t.shadow=this.options.shadow.enabled):this.hover&&(t.color=this.options.color.hover.background,t.borderColor=this.options.color.hover.border,t.shadow=this.options.shadow.enabled):\"function\"==typeof this.chooser&&(this.chooser(t,this.options.id,this.selected,this.hover),!1===t.shadow&&(t.shadowColor===this.options.shadow.color&&t.shadowSize===this.options.shadow.size&&t.shadowX===this.options.shadow.x&&t.shadowY===this.options.shadow.y||(t.shadow=!0))):t.shadow=this.options.shadow.enabled,void 0!==this.options.opacity){var e=this.options.opacity;t.borderColor=Fh(t.borderColor,e),t.color=Fh(t.color,e),t.shadowColor=Fh(t.shadowColor,e)}return t}},{key:\"updateLabelModule\",value:function(e){void 0!==this.options.label&&null!==this.options.label||(this.options.label=\"\"),t.updateGroupOptions(this.options,df(df({},e),{},{color:e&&e.color||this._localColor||void 0}),this.grouplist);var i=this.grouplist.get(this.options.group,!1),n=[e,this.options,i,this.globalOptions,this.defaultOptions];this.labelModule.update(this.options,n),void 0!==this.labelModule.baseSize&&(this.baseFontSize=this.labelModule.baseSize)}},{key:\"updateShape\",value:function(t){if(t===this.options.shape&&this.shape)this.shape.setOptions(this.options,this.imageObj,this.imageObjAlt);else switch(this.options.shape){case\"box\":this.shape=new Ou(this.options,this.body,this.labelModule);break;case\"circle\":this.shape=new Mu(this.options,this.body,this.labelModule);break;case\"circularImage\":this.shape=new Du(this.options,this.body,this.labelModule,this.imageObj,this.imageObjAlt);break;case\"custom\":this.shape=new Fu(this.options,this.body,this.labelModule,this.options.ctxRenderer);break;case\"database\":this.shape=new Ru(this.options,this.body,this.labelModule);break;case\"diamond\":this.shape=new Hu(this.options,this.body,this.labelModule);break;case\"dot\":this.shape=new qu(this.options,this.body,this.labelModule);break;case\"ellipse\":this.shape=new Uu(this.options,this.body,this.labelModule);break;case\"icon\":this.shape=new Xu(this.options,this.body,this.labelModule);break;case\"image\":this.shape=new Ku(this.options,this.body,this.labelModule,this.imageObj,this.imageObjAlt);break;case\"square\":this.shape=new Zu(this.options,this.body,this.labelModule);break;case\"hexagon\":this.shape=new Ju(this.options,this.body,this.labelModule);break;case\"star\":this.shape=new ef(this.options,this.body,this.labelModule);break;case\"text\":this.shape=new of(this.options,this.body,this.labelModule);break;case\"triangle\":this.shape=new sf(this.options,this.body,this.labelModule);break;case\"triangleDown\":this.shape=new hf(this.options,this.body,this.labelModule);break;default:this.shape=new Uu(this.options,this.body,this.labelModule)}this.needsRefresh()}},{key:\"select\",value:function(){this.selected=!0,this.needsRefresh()}},{key:\"unselect\",value:function(){this.selected=!1,this.needsRefresh()}},{key:\"needsRefresh\",value:function(){this.shape.refreshNeeded=!0}},{key:\"getTitle\",value:function(){return this.options.title}},{key:\"distanceToBorder\",value:function(t,e){return this.shape.distanceToBorder(t,e)}},{key:\"isFixed\",value:function(){return this.options.fixed.x&&this.options.fixed.y}},{key:\"isSelected\",value:function(){return this.selected}},{key:\"getValue\",value:function(){return this.options.value}},{key:\"getLabelSize\",value:function(){return this.labelModule.size()}},{key:\"setValueRange\",value:function(t,e,i){if(void 0!==this.options.value){var n=this.options.scaling.customScalingFunction(t,e,i,this.options.value),o=this.options.scaling.max-this.options.scaling.min;if(!0===this.options.scaling.label.enabled){var r=this.options.scaling.label.max-this.options.scaling.label.min;this.options.font.size=this.options.scaling.label.min+n*r}this.options.size=this.options.scaling.min+n*o}else this.options.size=this.baseSize,this.options.font.size=this.baseFontSize;this.updateLabelModule()}},{key:\"draw\",value:function(t){var e=this.getFormattingValues();return this.shape.draw(t,this.x,this.y,this.selected,this.hover,e)||{}}},{key:\"updateBoundingBox\",value:function(t){this.shape.updateBoundingBox(this.x,this.y,t)}},{key:\"resize\",value:function(t){var e=this.getFormattingValues();this.shape.resize(t,this.selected,this.hover,e)}},{key:\"getItemsOnPoint\",value:function(t){var e=[];return this.labelModule.visible()&&pu(this.labelModule.getSize(),t)&&e.push({nodeId:this.id,labelId:0}),pu(this.shape.boundingBox,t)&&e.push({nodeId:this.id}),e}},{key:\"isOverlappingWith\",value:function(t){return this.shape.left<t.right&&this.shape.left+this.shape.width>t.left&&this.shape.top<t.bottom&&this.shape.top+this.shape.height>t.top}},{key:\"isBoundingBoxOverlappingWith\",value:function(t){return this.shape.boundingBox.left<t.right&&this.shape.boundingBox.right>t.left&&this.shape.boundingBox.top<t.bottom&&this.shape.boundingBox.bottom>t.top}}],[{key:\"checkOpacity\",value:function(t){return 0<=t&&t<=1}},{key:\"checkCoordinateOrigin\",value:function(t){return void 0===t||\"center\"===t||\"top-left\"===t}},{key:\"updateGroupOptions\",value:function(e,i,n){var o;if(void 0!==n){var r=e.group;if(void 0!==i&&void 0!==i.group&&r!==i.group)throw new Error(\"updateGroupOptions: group values in options don't match.\");if(\"number\"==typeof r||\"string\"==typeof r&&\"\"!=r){var s=n.get(r);void 0!==s.opacity&&void 0===i.opacity&&(t.checkOpacity(s.opacity)||(console.error(\"Invalid option for node opacity. Value must be between 0 and 1, found: \"+s.opacity),s.opacity=void 0));var a=mr(o=uu(i)).call(o,(function(t){return null!=i[t]}));a.push(\"font\"),Oh(a,e,s),e.color=Rh(e.color)}}}},{key:\"parseOptions\",value:function(e,i){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},r=arguments.length>4?arguments[4]:void 0,s=[\"color\",\"fixed\",\"shadow\"];if(Oh(s,e,i,n),t.checkMass(i),void 0!==e.opacity&&(t.checkOpacity(e.opacity)||(console.error(\"Invalid option for node opacity. Value must be between 0 and 1, found: \"+e.opacity),e.opacity=void 0)),void 0!==i.opacity&&(t.checkOpacity(i.opacity)||(console.error(\"Invalid option for node opacity. Value must be between 0 and 1, found: \"+i.opacity),i.opacity=void 0)),i.shapeProperties&&!t.checkCoordinateOrigin(i.shapeProperties.coordinateOrigin)&&console.error(\"Invalid option for node coordinateOrigin, found: \"+i.shapeProperties.coordinateOrigin),$h(e,i,\"shadow\",o),void 0!==i.color&&null!==i.color){var a=Rh(i.color);_h(e.color,a)}else!0===n&&null===i.color&&(e.color=Kh(o.color));void 0!==i.fixed&&null!==i.fixed&&(\"boolean\"==typeof i.fixed?(e.fixed.x=i.fixed,e.fixed.y=i.fixed):(void 0!==i.fixed.x&&\"boolean\"==typeof i.fixed.x&&(e.fixed.x=i.fixed.x),void 0!==i.fixed.y&&\"boolean\"==typeof i.fixed.y&&(e.fixed.y=i.fixed.y))),!0===n&&null===i.font&&(e.font=Kh(o.font)),t.updateGroupOptions(e,i,r),void 0!==i.scaling&&$h(e.scaling,i.scaling,\"label\",o.scaling)}},{key:\"checkMass\",value:function(t,e){if(void 0!==t.mass&&t.mass<=0){var i=\"\";void 0!==e&&(i=\" in node id: \"+e),console.error(\"%cNegative or zero mass disallowed\"+i+\", setting mass to 1.\",cl),t.mass=1}}}]),t}();function uf(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return ff(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return ff(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function ff(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}var pf=function(){function t(e,i,n,o){var r,s=this;if(Nn(this,t),this.body=e,this.images=i,this.groups=n,this.layoutEngine=o,this.body.functions.createNode=Vt(r=this.create).call(r,this),this.nodesListeners={add:function(t,e){s.add(e.items)},update:function(t,e){s.update(e.items,e.data,e.oldData)},remove:function(t,e){s.remove(e.items)}},this.defaultOptions={borderWidth:1,borderWidthSelected:void 0,brokenImage:void 0,color:{border:\"#2B7CE9\",background:\"#97C2FC\",highlight:{border:\"#2B7CE9\",background:\"#D2E5FF\"},hover:{border:\"#2B7CE9\",background:\"#D2E5FF\"}},opacity:void 0,fixed:{x:!1,y:!1},font:{color:\"#343434\",size:14,face:\"arial\",background:\"none\",strokeWidth:0,strokeColor:\"#ffffff\",align:\"center\",vadjust:0,multi:!1,bold:{mod:\"bold\"},boldital:{mod:\"bold italic\"},ital:{mod:\"italic\"},mono:{mod:\"\",size:15,face:\"monospace\",vadjust:2}},group:void 0,hidden:!1,icon:{face:\"FontAwesome\",code:void 0,size:50,color:\"#2B7CE9\"},image:void 0,imagePadding:{top:0,right:0,bottom:0,left:0},label:void 0,labelHighlightBold:!0,level:void 0,margin:{top:5,right:5,bottom:5,left:5},mass:1,physics:!0,scaling:{min:10,max:30,label:{enabled:!1,min:14,max:30,maxVisible:30,drawThreshold:5},customScalingFunction:function(t,e,i,n){if(e===t)return.5;var o=1/(e-t);return Math.max(0,(n-t)*o)}},shadow:{enabled:!1,color:\"rgba(0,0,0,0.5)\",size:10,x:5,y:5},shape:\"ellipse\",shapeProperties:{borderDashes:!1,borderRadius:6,interpolation:!0,useImageSize:!1,useBorderWithImage:!1,coordinateOrigin:\"center\"},size:25,title:void 0,value:void 0,x:void 0,y:void 0},this.defaultOptions.mass<=0)throw\"Internal error: mass in defaultOptions of NodesHandler may not be zero or negative\";this.options=Kh(this.defaultOptions),this.bindEventListeners()}return Fn(t,[{key:\"bindEventListeners\",value:function(){var t,e,i=this;this.body.emitter.on(\"refreshNodes\",Vt(t=this.refresh).call(t,this)),this.body.emitter.on(\"refresh\",Vt(e=this.refresh).call(e,this)),this.body.emitter.on(\"destroy\",(function(){Dh(i.nodesListeners,(function(t,e){i.body.data.nodes&&i.body.data.nodes.off(e,t)})),delete i.body.functions.createNode,delete i.nodesListeners.add,delete i.nodesListeners.update,delete i.nodesListeners.remove,delete i.nodesListeners}))}},{key:\"setOptions\",value:function(t){if(void 0!==t){if(cf.parseOptions(this.options,t),void 0!==t.opacity&&(yd(t.opacity)||!wd(t.opacity)||t.opacity<0||t.opacity>1?console.error(\"Invalid option for node opacity. Value must be between 0 and 1, found: \"+t.opacity):this.options.opacity=t.opacity),void 0!==t.shape)for(var e in this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,e)&&this.body.nodes[e].updateShape();if(void 0!==t.font||void 0!==t.widthConstraint||void 0!==t.heightConstraint)for(var i=0,n=zo(this.body.nodes);i<n.length;i++){var o=n[i];this.body.nodes[o].updateLabelModule(),this.body.nodes[o].needsRefresh()}if(void 0!==t.size)for(var r in this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,r)&&this.body.nodes[r].needsRefresh();void 0===t.hidden&&void 0===t.physics||this.body.emitter.emit(\"_dataChanged\")}}},{key:\"setData\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=this.body.data.nodes;if(nu(\"id\",t))this.body.data.nodes=t;else if(So(t))this.body.data.nodes=new tu,this.body.data.nodes.add(t);else{if(t)throw new TypeError(\"Array or DataSet expected\");this.body.data.nodes=new tu}if(i&&Dh(this.nodesListeners,(function(t,e){i.off(e,t)})),this.body.nodes={},this.body.data.nodes){var n=this;Dh(this.nodesListeners,(function(t,e){n.body.data.nodes.on(e,t)}));var o=this.body.data.nodes.getIds();this.add(o,!0)}!1===e&&this.body.emitter.emit(\"_dataChanged\")}},{key:\"add\",value:function(t){for(var e,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=[],o=0;o<t.length;o++){e=t[o];var r=this.body.data.nodes.get(e),s=this.create(r);n.push(s),this.body.nodes[e]=s}this.layoutEngine.positionInitially(n),!1===i&&this.body.emitter.emit(\"_dataChanged\")}},{key:\"update\",value:function(t,e,i){for(var n=this.body.nodes,o=!1,r=0;r<t.length;r++){var s=t[r],a=n[s],h=e[r];void 0!==a?a.setOptions(h)&&(o=!0):(o=!0,a=this.create(h),n[s]=a)}o||void 0===i||(o=Od(e).call(e,(function(t,e){var n=i[e];return n&&n.level!==t.level}))),!0===o?this.body.emitter.emit(\"_dataChanged\"):this.body.emitter.emit(\"_dataUpdated\")}},{key:\"remove\",value:function(t){for(var e=this.body.nodes,i=0;i<t.length;i++){delete e[t[i]]}this.body.emitter.emit(\"_dataChanged\")}},{key:\"create\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:cf;return new e(t,this.body,this.images,this.groups,this.options,this.defaultOptions)}},{key:\"refresh\",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];Dh(this.body.nodes,(function(i,n){var o=t.body.data.nodes.get(n);void 0!==o&&(!0===e&&i.setOptions({x:null,y:null}),i.setOptions({fixed:!1}),i.setOptions(o))}))}},{key:\"getPositions\",value:function(t){var e={};if(void 0!==t){if(!0===So(t)){for(var i=0;i<t.length;i++)if(void 0!==this.body.nodes[t[i]]){var n=this.body.nodes[t[i]];e[t[i]]={x:Math.round(n.x),y:Math.round(n.y)}}}else if(void 0!==this.body.nodes[t]){var o=this.body.nodes[t];e[t]={x:Math.round(o.x),y:Math.round(o.y)}}}else for(var r=0;r<this.body.nodeIndices.length;r++){var s=this.body.nodes[this.body.nodeIndices[r]];e[this.body.nodeIndices[r]]={x:Math.round(s.x),y:Math.round(s.y)}}return e}},{key:\"getPosition\",value:function(t){if(null==t)throw new TypeError(\"No id was specified for getPosition method.\");if(null==this.body.nodes[t])throw new ReferenceError(\"NodeId provided for getPosition does not exist. Provided: \".concat(t));return{x:Math.round(this.body.nodes[t].x),y:Math.round(this.body.nodes[t].y)}}},{key:\"storePositions\",value:function(){var t,e=[],i=this.body.data.nodes.getDataSet(),n=uf(i.get());try{for(n.s();!(t=n.n()).done;){var o=t.value,r=o.id,s=this.body.nodes[r],a=Math.round(s.x),h=Math.round(s.y);o.x===a&&o.y===h||e.push({id:r,x:a,y:h})}}catch(t){n.e(t)}finally{n.f()}i.update(e)}},{key:\"getBoundingBox\",value:function(t){if(void 0!==this.body.nodes[t])return this.body.nodes[t].shape.boundingBox}},{key:\"getConnectedNodes\",value:function(t,e){var i=[];if(void 0!==this.body.nodes[t])for(var n=this.body.nodes[t],o={},r=0;r<n.edges.length;r++){var s=n.edges[r];\"to\"!==e&&s.toId==n.id?void 0===o[s.fromId]&&(i.push(s.fromId),o[s.fromId]=!0):\"from\"!==e&&s.fromId==n.id&&void 0===o[s.toId]&&(i.push(s.toId),o[s.toId]=!0)}return i}},{key:\"getConnectedEdges\",value:function(t){var e=[];if(void 0!==this.body.nodes[t])for(var i=this.body.nodes[t],n=0;n<i.edges.length;n++)e.push(i.edges[n].id);else console.error(\"NodeId provided for getConnectedEdges does not exist. Provided: \",t);return e}},{key:\"moveNode\",value:function(t,e,i){var n=this;void 0!==this.body.nodes[t]?(this.body.nodes[t].x=Number(e),this.body.nodes[t].y=Number(i),rs((function(){n.body.emitter.emit(\"startSimulation\")}),0)):console.error(\"Node id supplied to moveNode does not exist. Provided: \",t)}}]),t}();gt({target:\"Reflect\",stat:!0},{get:function t(e,i){var n,o,r=arguments.length<3?e:arguments[2];return dt(e)===r?e[i]:(n=tt.f(e,i))?j(n,\"value\")?n.value:void 0===n.get?void 0:n.get.call(r):w(o=Ee(e))?t(o,i,r):void 0}});var vf=k.Reflect.get,gf=Tn,yf=n((function(t){t.exports=function(t,e){for(;!Object.prototype.hasOwnProperty.call(t,e)&&null!==(t=Rd(t)););return t},t.exports.default=t.exports,t.exports.__esModule=!0}));i(yf);var mf=i(n((function(t){function e(i,n,o){return\"undefined\"!=typeof Reflect&&vf?(t.exports=e=vf,t.exports.default=t.exports,t.exports.__esModule=!0):(t.exports=e=function(t,e,i){var n=yf(t,e);if(n){var o=gf(n,e);return o.get?o.get.call(i):o.value}},t.exports.default=t.exports,t.exports.__esModule=!0),e(i,n,o||i)}t.exports=e,t.exports.default=t.exports,t.exports.__esModule=!0}))),bf=Math.hypot,wf=Math.abs,kf=Math.sqrt,_f=!!bf&&bf(1/0,NaN)!==1/0;gt({target:\"Math\",stat:!0,forced:_f},{hypot:function(t,e){for(var i,n,o=0,r=0,s=arguments.length,a=0;r<s;)a<(i=wf(arguments[r++]))?(o=o*(n=a/i)*n+1,a=i):o+=i>0?(n=i/a)*n:i;return a===1/0?1/0:a*kf(o)}});var xf=k.Math.hypot;function Ef(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Of=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"transform\",value:function(t,e){So(t)||(t=[t]);for(var i=e.point.x,n=e.point.y,o=e.angle,r=e.length,s=0;s<t.length;++s){var a=t[s],h=a.x*Math.cos(o)-a.y*Math.sin(o),l=a.x*Math.sin(o)+a.y*Math.cos(o);a.x=i+r*h,a.y=n+r*l}}},{key:\"drawPath\",value:function(t,e){t.beginPath(),t.moveTo(e[0].x,e[0].y);for(var i=1;i<e.length;++i)t.lineTo(e[i].x,e[i].y);t.closePath()}}]),t}(),Cf=function(t){Ad(i,t);var e=Ef(i);function i(){return Nn(this,i),e.apply(this,arguments)}return Fn(i,null,[{key:\"draw\",value:function(t,e){if(e.image){t.save(),t.translate(e.point.x,e.point.y),t.rotate(Math.PI/2+e.angle);var i=null!=e.imageWidth?e.imageWidth:e.image.width,n=null!=e.imageHeight?e.imageHeight:e.image.height;e.image.drawImageAtPosition(t,1,-i/2,0,i,n),t.restore()}return!1}}]),i}(Of),Sf=function(t){Ad(i,t);var e=Ef(i);function i(){return Nn(this,i),e.apply(this,arguments)}return Fn(i,null,[{key:\"draw\",value:function(t,e){var i=[{x:0,y:0},{x:-1,y:.3},{x:-.9,y:0},{x:-1,y:-.3}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),i}(Of),Tf=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i=[{x:-1,y:0},{x:0,y:.3},{x:-.4,y:0},{x:0,y:-.3}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),t}(),Mf=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i={x:-.4,y:0};Of.transform(i,e),t.strokeStyle=t.fillStyle,t.fillStyle=\"rgba(0, 0, 0, 0)\";var n=Math.PI,o=e.angle-n/2,r=e.angle+n/2;return t.beginPath(),t.arc(i.x,i.y,.4*e.length,o,r,!1),t.stroke(),!0}}]),t}(),Pf=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i={x:-.3,y:0};Of.transform(i,e),t.strokeStyle=t.fillStyle,t.fillStyle=\"rgba(0, 0, 0, 0)\";var n=Math.PI,o=e.angle+n/2,r=e.angle+3*n/2;return t.beginPath(),t.arc(i.x,i.y,.4*e.length,o,r,!1),t.stroke(),!0}}]),t}(),Df=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i=[{x:.02,y:0},{x:-1,y:.3},{x:-1,y:-.3}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),t}(),If=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i=[{x:0,y:.3},{x:0,y:-.3},{x:-1,y:0}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),t}(),Bf=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i={x:-.4,y:0};return Of.transform(i,e),Ut(t,i.x,i.y,.4*e.length),!0}}]),t}(),zf=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i=[{x:0,y:.5},{x:0,y:-.5},{x:-.15,y:-.5},{x:-.15,y:.5}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),t}(),Nf=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i=[{x:0,y:.3},{x:0,y:-.3},{x:-.6,y:-.3},{x:-.6,y:.3}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),t}(),Af=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i=[{x:0,y:0},{x:-.5,y:-.3},{x:-1,y:0},{x:-.5,y:.3}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),t}(),Ff=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i=[{x:-1,y:.3},{x:-.5,y:0},{x:-1,y:-.3},{x:0,y:0}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),t}(),jf=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i;switch(e.type&&(i=e.type.toLowerCase()),i){case\"image\":return Cf.draw(t,e);case\"circle\":return Bf.draw(t,e);case\"box\":return Nf.draw(t,e);case\"crow\":return Tf.draw(t,e);case\"curve\":return Mf.draw(t,e);case\"diamond\":return Af.draw(t,e);case\"inv_curve\":return Pf.draw(t,e);case\"triangle\":return Df.draw(t,e);case\"inv_triangle\":return If.draw(t,e);case\"bar\":return zf.draw(t,e);case\"vee\":return Ff.draw(t,e);case\"arrow\":default:return Sf.draw(t,e)}}}]),t}();function Rf(t,e){var i=zo(t);if(On){var n=On(t);e&&(n=mr(n).call(n,(function(e){return Mn(t,e).enumerable}))),i.push.apply(i,n)}return i}function Lf(t){for(var e=1;e<arguments.length;e++){var i,n=null!=arguments[e]?arguments[e]:{};if(e%2)Wo(i=Rf(Object(n),!0)).call(i,(function(e){jn(t,e,n[e])}));else if(Dn)In(t,Dn(n));else{var o;Wo(o=Rf(Object(n))).call(o,(function(e){zn(t,e,Mn(n,e))}))}}return t}var Hf=function(){function t(e,i,n){Nn(this,t),this._body=i,this._labelModule=n,this.color={},this.colorDirty=!0,this.hoverWidth=1.5,this.selectionWidth=2,this.setOptions(e),this.fromPoint=this.from,this.toPoint=this.to}return Fn(t,[{key:\"connect\",value:function(){this.from=this._body.nodes[this.options.from],this.to=this._body.nodes[this.options.to]}},{key:\"cleanup\",value:function(){return!1}},{key:\"setOptions\",value:function(t){this.options=t,this.from=this._body.nodes[this.options.from],this.to=this._body.nodes[this.options.to],this.id=this.options.id}},{key:\"drawLine\",value:function(t,e,i,n){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:this.getViaNode();t.strokeStyle=this.getColor(t,e),t.lineWidth=e.width,!1!==e.dashes?this._drawDashedLine(t,e,o):this._drawLine(t,e,o)}},{key:\"_drawLine\",value:function(t,e,i,n,o){if(this.from!=this.to)this._line(t,e,i,n,o);else{var r=this._getCircleData(t),s=uo(r,3),a=s[0],h=s[1],l=s[2];this._circle(t,e,a,h,l)}}},{key:\"_drawDashedLine\",value:function(t,e,i,n,o){t.lineCap=\"round\";var r=So(e.dashes)?e.dashes:[5,5];if(void 0!==t.setLineDash){if(t.save(),t.setLineDash(r),t.lineDashOffset=0,this.from!=this.to)this._line(t,e,i);else{var s=this._getCircleData(t),a=uo(s,3),h=a[0],l=a[1],d=a[2];this._circle(t,e,h,l,d)}t.setLineDash([0]),t.lineDashOffset=0,t.restore()}else{if(this.from!=this.to)Kt(t,this.from.x,this.from.y,this.to.x,this.to.y,r);else{var c=this._getCircleData(t),u=uo(c,3),f=u[0],p=u[1],v=u[2];this._circle(t,e,f,p,v)}this.enableShadow(t,e),t.stroke(),this.disableShadow(t,e)}}},{key:\"findBorderPosition\",value:function(t,e,i){return this.from!=this.to?this._findBorderPosition(t,e,i):this._findBorderPositionCircle(t,e,i)}},{key:\"findBorderPositions\",value:function(t){if(this.from!=this.to)return{from:this._findBorderPosition(this.from,t),to:this._findBorderPosition(this.to,t)};var e,i=Oo(e=this._getCircleData(t)).call(e,0,2),n=uo(i,2),o=n[0],r=n[1];return{from:this._findBorderPositionCircle(this.from,t,{x:o,y:r,low:.25,high:.6,direction:-1}),to:this._findBorderPositionCircle(this.from,t,{x:o,y:r,low:.6,high:.8,direction:1})}}},{key:\"_getCircleData\",value:function(t){var e=this.options.selfReference.size;void 0!==t&&void 0===this.from.shape.width&&this.from.shape.resize(t);var i=gu(t,this.options.selfReference.angle,e,this.from);return[i.x,i.y,e]}},{key:\"_pointOnCircle\",value:function(t,e,i,n){var o=2*n*Math.PI;return{x:t+i*Math.cos(o),y:e-i*Math.sin(o)}}},{key:\"_findBorderPositionCircle\",value:function(t,e,i){var n,o=i.x,r=i.y,s=i.low,a=i.high,h=i.direction,l=this.options.selfReference.size,d=.5*(s+a),c=0;!0===this.options.arrowStrikethrough&&(-1===h?c=this.options.endPointOffset.from:1===h&&(c=this.options.endPointOffset.to));var u=0;do{d=.5*(s+a),n=this._pointOnCircle(o,r,l,d);var f=Math.atan2(t.y-n.y,t.x-n.x),p=t.distanceToBorder(e,f)+c-Math.sqrt(Math.pow(n.x-t.x,2)+Math.pow(n.y-t.y,2));if(Math.abs(p)<.05)break;p>0?h>0?s=d:a=d:h>0?a=d:s=d,++u}while(s<=a&&u<10);return Lf(Lf({},n),{},{t:d})}},{key:\"getLineWidth\",value:function(t,e){return!0===t?Math.max(this.selectionWidth,.3/this._body.view.scale):!0===e?Math.max(this.hoverWidth,.3/this._body.view.scale):Math.max(this.options.width,.3/this._body.view.scale)}},{key:\"getColor\",value:function(t,e){if(!1!==e.inheritsColor){if(\"both\"===e.inheritsColor&&this.from.id!==this.to.id){var i=t.createLinearGradient(this.from.x,this.from.y,this.to.x,this.to.y),n=this.from.options.color.highlight.border,o=this.to.options.color.highlight.border;return!1===this.from.selected&&!1===this.to.selected?(n=Fh(this.from.options.color.border,e.opacity),o=Fh(this.to.options.color.border,e.opacity)):!0===this.from.selected&&!1===this.to.selected?o=this.to.options.color.border:!1===this.from.selected&&!0===this.to.selected&&(n=this.from.options.color.border),i.addColorStop(0,n),i.addColorStop(1,o),i}return\"to\"===e.inheritsColor?Fh(this.to.options.color.border,e.opacity):Fh(this.from.options.color.border,e.opacity)}return Fh(e.color,e.opacity)}},{key:\"_circle\",value:function(t,e,i,n,o){this.enableShadow(t,e);var r=0,s=2*Math.PI;if(!this.options.selfReference.renderBehindTheNode){var a=this.options.selfReference.angle,h=this.options.selfReference.angle+Math.PI,l=this._findBorderPositionCircle(this.from,t,{x:i,y:n,low:a,high:h,direction:-1}),d=this._findBorderPositionCircle(this.from,t,{x:i,y:n,low:a,high:h,direction:1});r=Math.atan2(l.y-n,l.x-i),s=Math.atan2(d.y-n,d.x-i)}t.beginPath(),t.arc(i,n,o,r,s,!1),t.stroke(),this.disableShadow(t,e)}},{key:\"getDistanceToEdge\",value:function(t,e,i,n,o,r){if(this.from!=this.to)return this._getDistanceToEdge(t,e,i,n,o,r);var s=this._getCircleData(void 0),a=uo(s,3),h=a[0],l=a[1],d=a[2],c=h-o,u=l-r;return Math.abs(Math.sqrt(c*c+u*u)-d)}},{key:\"_getDistanceToLine\",value:function(t,e,i,n,o,r){var s=i-t,a=n-e,h=((o-t)*s+(r-e)*a)/(s*s+a*a);h>1?h=1:h<0&&(h=0);var l=t+h*s-o,d=e+h*a-r;return Math.sqrt(l*l+d*d)}},{key:\"getArrowData\",value:function(t,e,i,n,o,r){var s,a,h,l,d,c,u,f=r.width;\"from\"===e?(h=this.from,l=this.to,d=r.fromArrowScale<0,c=Math.abs(r.fromArrowScale),u=r.fromArrowType):\"to\"===e?(h=this.to,l=this.from,d=r.toArrowScale<0,c=Math.abs(r.toArrowScale),u=r.toArrowType):(h=this.to,l=this.from,d=r.middleArrowScale<0,c=Math.abs(r.middleArrowScale),u=r.middleArrowType);var p=15*c+3*f;if(h!=l){var v=p/xf(h.x-l.x,h.y-l.y);if(\"middle\"!==e)if(!0===this.options.smooth.enabled){var g=this._findBorderPosition(h,t,{via:i}),y=this.getPoint(g.t+v*(\"from\"===e?1:-1),i);s=Math.atan2(g.y-y.y,g.x-y.x),a=g}else s=Math.atan2(h.y-l.y,h.x-l.x),a=this._findBorderPosition(h,t);else{var m=(d?-v:v)/2,b=this.getPoint(.5+m,i),w=this.getPoint(.5-m,i);s=Math.atan2(b.y-w.y,b.x-w.x),a=this.getPoint(.5,i)}}else{var k=this._getCircleData(t),_=uo(k,3),x=_[0],E=_[1],O=_[2];if(\"from\"===e){var C=this.options.selfReference.angle,S=this.options.selfReference.angle+Math.PI,T=this._findBorderPositionCircle(this.from,t,{x:x,y:E,low:C,high:S,direction:-1});s=-2*T.t*Math.PI+1.5*Math.PI+.1*Math.PI,a=T}else if(\"to\"===e){var M=this.options.selfReference.angle,P=this.options.selfReference.angle+Math.PI,D=this._findBorderPositionCircle(this.from,t,{x:x,y:E,low:M,high:P,direction:1});s=-2*D.t*Math.PI+1.5*Math.PI-1.1*Math.PI,a=D}else{var I=this.options.selfReference.angle/(2*Math.PI);a=this._pointOnCircle(x,E,O,I),s=-2*I*Math.PI+1.5*Math.PI+.1*Math.PI}}return{point:a,core:{x:a.x-.9*p*Math.cos(s),y:a.y-.9*p*Math.sin(s)},angle:s,length:p,type:u}}},{key:\"drawArrowHead\",value:function(t,e,i,n,o){t.strokeStyle=this.getColor(t,e),t.fillStyle=t.strokeStyle,t.lineWidth=e.width,jf.draw(t,o)&&(this.enableShadow(t,e),hs(t).call(t),this.disableShadow(t,e))}},{key:\"enableShadow\",value:function(t,e){!0===e.shadow&&(t.shadowColor=e.shadowColor,t.shadowBlur=e.shadowSize,t.shadowOffsetX=e.shadowX,t.shadowOffsetY=e.shadowY)}},{key:\"disableShadow\",value:function(t,e){!0===e.shadow&&(t.shadowColor=\"rgba(0,0,0,0)\",t.shadowBlur=0,t.shadowOffsetX=0,t.shadowOffsetY=0)}},{key:\"drawBackground\",value:function(t,e){if(!1!==e.background){var i={strokeStyle:t.strokeStyle,lineWidth:t.lineWidth,dashes:t.dashes};t.strokeStyle=e.backgroundColor,t.lineWidth=e.backgroundSize,this.setStrokeDashed(t,e.backgroundDashes),t.stroke(),t.strokeStyle=i.strokeStyle,t.lineWidth=i.lineWidth,t.dashes=i.dashes,this.setStrokeDashed(t,e.dashes)}}},{key:\"setStrokeDashed\",value:function(t,e){if(!1!==e)if(void 0!==t.setLineDash){var i=So(e)?e:[5,5];t.setLineDash(i)}else console.warn(\"setLineDash is not supported in this browser. The dashed stroke cannot be used.\");else void 0!==t.setLineDash?t.setLineDash([]):console.warn(\"setLineDash is not supported in this browser. The dashed stroke cannot be used.\")}}]),t}();function Wf(t,e){var i=zo(t);if(On){var n=On(t);e&&(n=mr(n).call(n,(function(e){return Mn(t,e).enumerable}))),i.push.apply(i,n)}return i}function qf(t){for(var e=1;e<arguments.length;e++){var i,n=null!=arguments[e]?arguments[e]:{};if(e%2)Wo(i=Wf(Object(n),!0)).call(i,(function(e){jn(t,e,n[e])}));else if(Dn)In(t,Dn(n));else{var o;Wo(o=Wf(Object(n))).call(o,(function(e){zn(t,e,Mn(n,e))}))}}return t}function Vf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Uf=function(t){Ad(i,t);var e=Vf(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"_findBorderPositionBezier\",value:function(t,e){var i,n,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this._getViaCoordinates(),r=10,s=.2,a=!1,h=1,l=0,d=this.to,c=this.options.endPointOffset?this.options.endPointOffset.to:0;t.id===this.from.id&&(d=this.from,a=!0,c=this.options.endPointOffset?this.options.endPointOffset.from:0),!1===this.options.arrowStrikethrough&&(c=0);var u=0;do{n=.5*(l+h),i=this.getPoint(n,o);var f=Math.atan2(d.y-i.y,d.x-i.x),p=d.distanceToBorder(e,f)+c,v=Math.sqrt(Math.pow(i.x-d.x,2)+Math.pow(i.y-d.y,2)),g=p-v;if(Math.abs(g)<s)break;g<0?!1===a?l=n:h=n:!1===a?h=n:l=n,++u}while(l<=h&&u<r);return qf(qf({},i),{},{t:n})}},{key:\"_getDistanceToBezierEdge\",value:function(t,e,i,n,o,r,s){var a,h,l,d,c,u=1e9,f=t,p=e;for(h=1;h<10;h++)l=.1*h,d=Math.pow(1-l,2)*t+2*l*(1-l)*s.x+Math.pow(l,2)*i,c=Math.pow(1-l,2)*e+2*l*(1-l)*s.y+Math.pow(l,2)*n,h>0&&(u=(a=this._getDistanceToLine(f,p,d,c,o,r))<u?a:u),f=d,p=c;return u}},{key:\"_bezierCurve\",value:function(t,e,i,n){t.beginPath(),t.moveTo(this.fromPoint.x,this.fromPoint.y),null!=i&&null!=i.x?null!=n&&null!=n.x?t.bezierCurveTo(i.x,i.y,n.x,n.y,this.toPoint.x,this.toPoint.y):t.quadraticCurveTo(i.x,i.y,this.toPoint.x,this.toPoint.y):t.lineTo(this.toPoint.x,this.toPoint.y),this.drawBackground(t,e),this.enableShadow(t,e),t.stroke(),this.disableShadow(t,e)}},{key:\"getViaNode\",value:function(){return this._getViaCoordinates()}}]),i}(Hf);function Yf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Xf=function(t){Ad(i,t);var e=Yf(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o)).via=r.via,r._boundFunction=function(){r.positionBezierNode()},r._body.emitter.on(\"_repositionBezierNodes\",r._boundFunction),r}return Fn(i,[{key:\"setOptions\",value:function(t){mf(Ld(i.prototype),\"setOptions\",this).call(this,t);var e=!1;this.options.physics!==t.physics&&(e=!0),this.options=t,this.id=this.options.id,this.from=this._body.nodes[this.options.from],this.to=this._body.nodes[this.options.to],this.setupSupportNode(),this.connect(),!0===e&&(this.via.setOptions({physics:this.options.physics}),this.positionBezierNode())}},{key:\"connect\",value:function(){this.from=this._body.nodes[this.options.from],this.to=this._body.nodes[this.options.to],void 0===this.from||void 0===this.to||!1===this.options.physics||this.from.id===this.to.id?this.via.setOptions({physics:!1}):this.via.setOptions({physics:!0})}},{key:\"cleanup\",value:function(){return this._body.emitter.off(\"_repositionBezierNodes\",this._boundFunction),void 0!==this.via&&(delete this._body.nodes[this.via.id],this.via=void 0,!0)}},{key:\"setupSupportNode\",value:function(){if(void 0===this.via){var t=\"edgeId:\"+this.id,e=this._body.functions.createNode({id:t,shape:\"circle\",physics:!0,hidden:!0});this._body.nodes[t]=e,this.via=e,this.via.parentEdgeId=this.id,this.positionBezierNode()}}},{key:\"positionBezierNode\",value:function(){void 0!==this.via&&void 0!==this.from&&void 0!==this.to?(this.via.x=.5*(this.from.x+this.to.x),this.via.y=.5*(this.from.y+this.to.y)):void 0!==this.via&&(this.via.x=0,this.via.y=0)}},{key:\"_line\",value:function(t,e,i){this._bezierCurve(t,e,i)}},{key:\"_getViaCoordinates\",value:function(){return this.via}},{key:\"getViaNode\",value:function(){return this.via}},{key:\"getPoint\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.via;if(this.from===this.to){var i=this._getCircleData(),n=uo(i,3),o=n[0],r=n[1],s=n[2],a=2*Math.PI*(1-t);return{x:o+s*Math.sin(a),y:r+s-s*(1-Math.cos(a))}}return{x:Math.pow(1-t,2)*this.fromPoint.x+2*t*(1-t)*e.x+Math.pow(t,2)*this.toPoint.x,y:Math.pow(1-t,2)*this.fromPoint.y+2*t*(1-t)*e.y+Math.pow(t,2)*this.toPoint.y}}},{key:\"_findBorderPosition\",value:function(t,e){return this._findBorderPositionBezier(t,e,this.via)}},{key:\"_getDistanceToEdge\",value:function(t,e,i,n,o,r){return this._getDistanceToBezierEdge(t,e,i,n,o,r,this.via)}}]),i}(Uf);function Gf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Kf=function(t){Ad(i,t);var e=Gf(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"_line\",value:function(t,e,i){this._bezierCurve(t,e,i)}},{key:\"getViaNode\",value:function(){return this._getViaCoordinates()}},{key:\"_getViaCoordinates\",value:function(){var t,e,i=this.options.smooth.roundness,n=this.options.smooth.type,o=Math.abs(this.from.x-this.to.x),r=Math.abs(this.from.y-this.to.y);if(\"discrete\"===n||\"diagonalCross\"===n){var s,a;s=a=o<=r?i*r:i*o,this.from.x>this.to.x&&(s=-s),this.from.y>=this.to.y&&(a=-a);var h=this.from.x+s,l=this.from.y+a;return\"discrete\"===n&&(o<=r?h=o<i*r?this.from.x:h:l=r<i*o?this.from.y:l),{x:h,y:l}}if(\"straightCross\"===n){var d=(1-i)*o,c=(1-i)*r;return o<=r?(d=0,this.from.y<this.to.y&&(c=-c)):(this.from.x<this.to.x&&(d=-d),c=0),{x:this.to.x+d,y:this.to.y+c}}if(\"horizontal\"===n){var u=(1-i)*o;return this.from.x<this.to.x&&(u=-u),{x:this.to.x+u,y:this.from.y}}if(\"vertical\"===n){var f=(1-i)*r;return this.from.y<this.to.y&&(f=-f),{x:this.from.x,y:this.to.y+f}}if(\"curvedCW\"===n){o=this.to.x-this.from.x,r=this.from.y-this.to.y;var p=Math.sqrt(o*o+r*r),v=Math.PI,g=(Math.atan2(r,o)+(.5*i+.5)*v)%(2*v);return{x:this.from.x+(.5*i+.5)*p*Math.sin(g),y:this.from.y+(.5*i+.5)*p*Math.cos(g)}}if(\"curvedCCW\"===n){o=this.to.x-this.from.x,r=this.from.y-this.to.y;var y=Math.sqrt(o*o+r*r),m=Math.PI,b=(Math.atan2(r,o)+(.5*-i+.5)*m)%(2*m);return{x:this.from.x+(.5*i+.5)*y*Math.sin(b),y:this.from.y+(.5*i+.5)*y*Math.cos(b)}}t=e=o<=r?i*r:i*o,this.from.x>this.to.x&&(t=-t),this.from.y>=this.to.y&&(e=-e);var w=this.from.x+t,k=this.from.y+e;return o<=r?w=this.from.x<=this.to.x?this.to.x<w?this.to.x:w:this.to.x>w?this.to.x:w:k=this.from.y>=this.to.y?this.to.y>k?this.to.y:k:this.to.y<k?this.to.y:k,{x:w,y:k}}},{key:\"_findBorderPosition\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this._findBorderPositionBezier(t,e,i.via)}},{key:\"_getDistanceToEdge\",value:function(t,e,i,n,o,r){var s=arguments.length>6&&void 0!==arguments[6]?arguments[6]:this._getViaCoordinates();return this._getDistanceToBezierEdge(t,e,i,n,o,r,s)}},{key:\"getPoint\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this._getViaCoordinates(),i=t,n=Math.pow(1-i,2)*this.fromPoint.x+2*i*(1-i)*e.x+Math.pow(i,2)*this.toPoint.x,o=Math.pow(1-i,2)*this.fromPoint.y+2*i*(1-i)*e.y+Math.pow(i,2)*this.toPoint.y;return{x:n,y:o}}}]),i}(Uf);function $f(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}function Zf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Qf=function(t){Ad(i,t);var e=Zf(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"_line\",value:function(t,e,i){var n=i[0],o=i[1];this._bezierCurve(t,e,n,o)}},{key:\"_getViaCoordinates\",value:function(){var t,e,i,n,o=this.from.x-this.to.x,r=this.from.y-this.to.y,s=this.options.smooth.roundness;return(Math.abs(o)>Math.abs(r)||!0===this.options.smooth.forceDirection||\"horizontal\"===this.options.smooth.forceDirection)&&\"vertical\"!==this.options.smooth.forceDirection?(e=this.from.y,n=this.to.y,t=this.from.x-s*o,i=this.to.x+s*o):(e=this.from.y-s*r,n=this.to.y+s*r,t=this.from.x,i=this.to.x),[{x:t,y:e},{x:i,y:n}]}},{key:\"getViaNode\",value:function(){return this._getViaCoordinates()}},{key:\"_findBorderPosition\",value:function(t,e){return this._findBorderPositionBezier(t,e)}},{key:\"_getDistanceToEdge\",value:function(t,e,i,n,o,r){var s=arguments.length>6&&void 0!==arguments[6]?arguments[6]:this._getViaCoordinates(),a=uo(s,2),h=a[0],l=a[1];return this._getDistanceToBezierEdge2(t,e,i,n,o,r,h,l)}},{key:\"getPoint\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this._getViaCoordinates(),i=uo(e,2),n=i[0],o=i[1],r=t,s=[Math.pow(1-r,3),3*r*Math.pow(1-r,2),3*Math.pow(r,2)*(1-r),Math.pow(r,3)],a=s[0]*this.fromPoint.x+s[1]*n.x+s[2]*o.x+s[3]*this.toPoint.x,h=s[0]*this.fromPoint.y+s[1]*n.y+s[2]*o.y+s[3]*this.toPoint.y;return{x:a,y:h}}}]),i}(function(t){Ad(i,t);var e=$f(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"_getDistanceToBezierEdge2\",value:function(t,e,i,n,o,r,s,a){for(var h=1e9,l=t,d=e,c=[0,0,0,0],u=1;u<10;u++){var f=.1*u;c[0]=Math.pow(1-f,3),c[1]=3*f*Math.pow(1-f,2),c[2]=3*Math.pow(f,2)*(1-f),c[3]=Math.pow(f,3);var p=c[0]*t+c[1]*s.x+c[2]*a.x+c[3]*i,v=c[0]*e+c[1]*s.y+c[2]*a.y+c[3]*n;if(u>0){var g=this._getDistanceToLine(l,d,p,v,o,r);h=g<h?g:h}l=p,d=v}return h}}]),i}(Uf));function Jf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var tp=function(t){Ad(i,t);var e=Jf(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"_line\",value:function(t,e){t.beginPath(),t.moveTo(this.fromPoint.x,this.fromPoint.y),t.lineTo(this.toPoint.x,this.toPoint.y),this.enableShadow(t,e),t.stroke(),this.disableShadow(t,e)}},{key:\"getViaNode\",value:function(){}},{key:\"getPoint\",value:function(t){return{x:(1-t)*this.fromPoint.x+t*this.toPoint.x,y:(1-t)*this.fromPoint.y+t*this.toPoint.y}}},{key:\"_findBorderPosition\",value:function(t,e){var i=this.to,n=this.from;t.id===this.from.id&&(i=this.from,n=this.to);var o=Math.atan2(i.y-n.y,i.x-n.x),r=i.x-n.x,s=i.y-n.y,a=Math.sqrt(r*r+s*s),h=(a-t.distanceToBorder(e,o))/a;return{x:(1-h)*n.x+h*i.x,y:(1-h)*n.y+h*i.y,t:0}}},{key:\"_getDistanceToEdge\",value:function(t,e,i,n,o,r){return this._getDistanceToLine(t,e,i,n,o,r)}}]),i}(Hf),ep=function(){function t(e,i,n,o,r){if(Nn(this,t),void 0===i)throw new Error(\"No body provided\");this.options=Kh(o),this.globalOptions=o,this.defaultOptions=r,this.body=i,this.imagelist=n,this.id=void 0,this.fromId=void 0,this.toId=void 0,this.selected=!1,this.hover=!1,this.labelDirty=!0,this.baseWidth=this.options.width,this.baseFontSize=this.options.font.size,this.from=void 0,this.to=void 0,this.edgeType=void 0,this.connected=!1,this.labelModule=new _u(this.body,this.options,!0),this.setOptions(e)}return Fn(t,[{key:\"setOptions\",value:function(e){if(e){var i=void 0!==e.physics&&this.options.physics!==e.physics||void 0!==e.hidden&&(this.options.hidden||!1)!==(e.hidden||!1)||void 0!==e.from&&this.options.from!==e.from||void 0!==e.to&&this.options.to!==e.to;t.parseOptions(this.options,e,!0,this.globalOptions),void 0!==e.id&&(this.id=e.id),void 0!==e.from&&(this.fromId=e.from),void 0!==e.to&&(this.toId=e.to),void 0!==e.title&&(this.title=e.title),void 0!==e.value&&(e.value=hu(e.value));var n=[e,this.options,this.defaultOptions];return this.chooser=fu(\"edge\",n),this.updateLabelModule(e),i=this.updateEdgeType()||i,this._setInteractionWidths(),this.connect(),i}}},{key:\"getFormattingValues\",value:function(){var t=!0===this.options.arrows.to||!0===this.options.arrows.to.enabled,e=!0===this.options.arrows.from||!0===this.options.arrows.from.enabled,i=!0===this.options.arrows.middle||!0===this.options.arrows.middle.enabled,n=this.options.color.inherit,o={toArrow:t,toArrowScale:this.options.arrows.to.scaleFactor,toArrowType:this.options.arrows.to.type,toArrowSrc:this.options.arrows.to.src,toArrowImageWidth:this.options.arrows.to.imageWidth,toArrowImageHeight:this.options.arrows.to.imageHeight,middleArrow:i,middleArrowScale:this.options.arrows.middle.scaleFactor,middleArrowType:this.options.arrows.middle.type,middleArrowSrc:this.options.arrows.middle.src,middleArrowImageWidth:this.options.arrows.middle.imageWidth,middleArrowImageHeight:this.options.arrows.middle.imageHeight,fromArrow:e,fromArrowScale:this.options.arrows.from.scaleFactor,fromArrowType:this.options.arrows.from.type,fromArrowSrc:this.options.arrows.from.src,fromArrowImageWidth:this.options.arrows.from.imageWidth,fromArrowImageHeight:this.options.arrows.from.imageHeight,arrowStrikethrough:this.options.arrowStrikethrough,color:n?void 0:this.options.color.color,inheritsColor:n,opacity:this.options.color.opacity,hidden:this.options.hidden,length:this.options.length,shadow:this.options.shadow.enabled,shadowColor:this.options.shadow.color,shadowSize:this.options.shadow.size,shadowX:this.options.shadow.x,shadowY:this.options.shadow.y,dashes:this.options.dashes,width:this.options.width,background:this.options.background.enabled,backgroundColor:this.options.background.color,backgroundSize:this.options.background.size,backgroundDashes:this.options.background.dashes};if(this.selected||this.hover)if(!0===this.chooser){if(this.selected){var r=this.options.selectionWidth;\"function\"==typeof r?o.width=r(o.width):\"number\"==typeof r&&(o.width+=r),o.width=Math.max(o.width,.3/this.body.view.scale),o.color=this.options.color.highlight,o.shadow=this.options.shadow.enabled}else if(this.hover){var s=this.options.hoverWidth;\"function\"==typeof s?o.width=s(o.width):\"number\"==typeof s&&(o.width+=s),o.width=Math.max(o.width,.3/this.body.view.scale),o.color=this.options.color.hover,o.shadow=this.options.shadow.enabled}}else\"function\"==typeof this.chooser&&(this.chooser(o,this.options.id,this.selected,this.hover),void 0!==o.color&&(o.inheritsColor=!1),!1===o.shadow&&(o.shadowColor===this.options.shadow.color&&o.shadowSize===this.options.shadow.size&&o.shadowX===this.options.shadow.x&&o.shadowY===this.options.shadow.y||(o.shadow=!0)));else o.shadow=this.options.shadow.enabled,o.width=Math.max(o.width,.3/this.body.view.scale);return o}},{key:\"updateLabelModule\",value:function(t){var e=[t,this.options,this.globalOptions,this.defaultOptions];this.labelModule.update(this.options,e),void 0!==this.labelModule.baseSize&&(this.baseFontSize=this.labelModule.baseSize)}},{key:\"updateEdgeType\",value:function(){var t=this.options.smooth,e=!1,i=!0;return void 0!==this.edgeType&&((this.edgeType instanceof Xf&&!0===t.enabled&&\"dynamic\"===t.type||this.edgeType instanceof Qf&&!0===t.enabled&&\"cubicBezier\"===t.type||this.edgeType instanceof Kf&&!0===t.enabled&&\"dynamic\"!==t.type&&\"cubicBezier\"!==t.type||this.edgeType instanceof tp&&!1===t.type.enabled)&&(i=!1),!0===i&&(e=this.cleanup())),!0===i?!0===t.enabled?\"dynamic\"===t.type?(e=!0,this.edgeType=new Xf(this.options,this.body,this.labelModule)):\"cubicBezier\"===t.type?this.edgeType=new Qf(this.options,this.body,this.labelModule):this.edgeType=new Kf(this.options,this.body,this.labelModule):this.edgeType=new tp(this.options,this.body,this.labelModule):this.edgeType.setOptions(this.options),e}},{key:\"connect\",value:function(){this.disconnect(),this.from=this.body.nodes[this.fromId]||void 0,this.to=this.body.nodes[this.toId]||void 0,this.connected=void 0!==this.from&&void 0!==this.to,!0===this.connected?(this.from.attachEdge(this),this.to.attachEdge(this)):(this.from&&this.from.detachEdge(this),this.to&&this.to.detachEdge(this)),this.edgeType.connect()}},{key:\"disconnect\",value:function(){this.from&&(this.from.detachEdge(this),this.from=void 0),this.to&&(this.to.detachEdge(this),this.to=void 0),this.connected=!1}},{key:\"getTitle\",value:function(){return this.title}},{key:\"isSelected\",value:function(){return this.selected}},{key:\"getValue\",value:function(){return this.options.value}},{key:\"setValueRange\",value:function(t,e,i){if(void 0!==this.options.value){var n=this.options.scaling.customScalingFunction(t,e,i,this.options.value),o=this.options.scaling.max-this.options.scaling.min;if(!0===this.options.scaling.label.enabled){var r=this.options.scaling.label.max-this.options.scaling.label.min;this.options.font.size=this.options.scaling.label.min+n*r}this.options.width=this.options.scaling.min+n*o}else this.options.width=this.baseWidth,this.options.font.size=this.baseFontSize;this._setInteractionWidths(),this.updateLabelModule()}},{key:\"_setInteractionWidths\",value:function(){\"function\"==typeof this.options.hoverWidth?this.edgeType.hoverWidth=this.options.hoverWidth(this.options.width):this.edgeType.hoverWidth=this.options.hoverWidth+this.options.width,\"function\"==typeof this.options.selectionWidth?this.edgeType.selectionWidth=this.options.selectionWidth(this.options.width):this.edgeType.selectionWidth=this.options.selectionWidth+this.options.width}},{key:\"draw\",value:function(t){var e=this.getFormattingValues();if(!e.hidden){var i=this.edgeType.getViaNode();this.edgeType.drawLine(t,e,this.selected,this.hover,i),this.drawLabel(t,i)}}},{key:\"drawArrows\",value:function(t){var e=this.getFormattingValues();if(!e.hidden){var i=this.edgeType.getViaNode(),n={};this.edgeType.fromPoint=this.edgeType.from,this.edgeType.toPoint=this.edgeType.to,e.fromArrow&&(n.from=this.edgeType.getArrowData(t,\"from\",i,this.selected,this.hover,e),!1===e.arrowStrikethrough&&(this.edgeType.fromPoint=n.from.core),e.fromArrowSrc&&(n.from.image=this.imagelist.load(e.fromArrowSrc)),e.fromArrowImageWidth&&(n.from.imageWidth=e.fromArrowImageWidth),e.fromArrowImageHeight&&(n.from.imageHeight=e.fromArrowImageHeight)),e.toArrow&&(n.to=this.edgeType.getArrowData(t,\"to\",i,this.selected,this.hover,e),!1===e.arrowStrikethrough&&(this.edgeType.toPoint=n.to.core),e.toArrowSrc&&(n.to.image=this.imagelist.load(e.toArrowSrc)),e.toArrowImageWidth&&(n.to.imageWidth=e.toArrowImageWidth),e.toArrowImageHeight&&(n.to.imageHeight=e.toArrowImageHeight)),e.middleArrow&&(n.middle=this.edgeType.getArrowData(t,\"middle\",i,this.selected,this.hover,e),e.middleArrowSrc&&(n.middle.image=this.imagelist.load(e.middleArrowSrc)),e.middleArrowImageWidth&&(n.middle.imageWidth=e.middleArrowImageWidth),e.middleArrowImageHeight&&(n.middle.imageHeight=e.middleArrowImageHeight)),e.fromArrow&&this.edgeType.drawArrowHead(t,e,this.selected,this.hover,n.from),e.middleArrow&&this.edgeType.drawArrowHead(t,e,this.selected,this.hover,n.middle),e.toArrow&&this.edgeType.drawArrowHead(t,e,this.selected,this.hover,n.to)}}},{key:\"drawLabel\",value:function(t,e){if(void 0!==this.options.label){var i,n=this.from,o=this.to;if(this.labelModule.differentState(this.selected,this.hover)&&this.labelModule.getTextSize(t,this.selected,this.hover),n.id!=o.id){this.labelModule.pointToSelf=!1,i=this.edgeType.getPoint(.5,e),t.save();var r=this._getRotation(t);0!=r.angle&&(t.translate(r.x,r.y),t.rotate(r.angle)),this.labelModule.draw(t,i.x,i.y,this.selected,this.hover),t.restore()}else{this.labelModule.pointToSelf=!0;var s=gu(t,this.options.selfReference.angle,this.options.selfReference.size,n);i=this._pointOnCircle(s.x,s.y,this.options.selfReference.size,this.options.selfReference.angle),this.labelModule.draw(t,i.x,i.y,this.selected,this.hover)}}}},{key:\"getItemsOnPoint\",value:function(t){var e=[];if(this.labelModule.visible()){var i=this._getRotation();pu(this.labelModule.getSize(),t,i)&&e.push({edgeId:this.id,labelId:0})}var n={left:t.x,top:t.y};return this.isOverlappingWith(n)&&e.push({edgeId:this.id}),e}},{key:\"isOverlappingWith\",value:function(t){if(this.connected){var e=this.from.x,i=this.from.y,n=this.to.x,o=this.to.y,r=t.left,s=t.top;return this.edgeType.getDistanceToEdge(e,i,n,o,r,s)<10}return!1}},{key:\"_getRotation\",value:function(t){var e=this.edgeType.getViaNode(),i=this.edgeType.getPoint(.5,e);void 0!==t&&this.labelModule.calculateLabelSize(t,this.selected,this.hover,i.x,i.y);var n={x:i.x,y:this.labelModule.size.yLine,angle:0};if(!this.labelModule.visible())return n;if(\"horizontal\"===this.options.font.align)return n;var o=this.from.y-this.to.y,r=this.from.x-this.to.x,s=Math.atan2(o,r);return(s<-1&&r<0||s>0&&r<0)&&(s+=Math.PI),n.angle=s,n}},{key:\"_pointOnCircle\",value:function(t,e,i,n){return{x:t+i*Math.cos(n),y:e-i*Math.sin(n)}}},{key:\"select\",value:function(){this.selected=!0}},{key:\"unselect\",value:function(){this.selected=!1}},{key:\"cleanup\",value:function(){return this.edgeType.cleanup()}},{key:\"remove\",value:function(){this.cleanup(),this.disconnect(),delete this.body.edges[this.id]}},{key:\"endPointsValid\",value:function(){return void 0!==this.body.nodes[this.fromId]&&void 0!==this.body.nodes[this.toId]}}],[{key:\"parseOptions\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},o=arguments.length>4&&void 0!==arguments[4]&&arguments[4],r=[\"endPointOffset\",\"arrowStrikethrough\",\"id\",\"from\",\"hidden\",\"hoverWidth\",\"labelHighlightBold\",\"length\",\"line\",\"opacity\",\"physics\",\"scaling\",\"selectionWidth\",\"selfReferenceSize\",\"selfReference\",\"to\",\"title\",\"value\",\"width\",\"font\",\"chosen\",\"widthConstraint\"];if(Eh(r,t,e,i),void 0!==e.endPointOffset&&void 0!==e.endPointOffset.from&&(wd(e.endPointOffset.from)?t.endPointOffset.from=e.endPointOffset.from:(t.endPointOffset.from=void 0!==n.endPointOffset.from?n.endPointOffset.from:0,console.error(\"endPointOffset.from is not a valid number\"))),void 0!==e.endPointOffset&&void 0!==e.endPointOffset.to&&(wd(e.endPointOffset.to)?t.endPointOffset.to=e.endPointOffset.to:(t.endPointOffset.to=void 0!==n.endPointOffset.to?n.endPointOffset.to:0,console.error(\"endPointOffset.to is not a valid number\"))),vu(e.label)?t.label=e.label:vu(t.label)||(t.label=void 0),$h(t,e,\"smooth\",n),$h(t,e,\"shadow\",n),$h(t,e,\"background\",n),void 0!==e.dashes&&null!==e.dashes?t.dashes=e.dashes:!0===i&&null===e.dashes&&(t.dashes=Gr(n.dashes)),void 0!==e.scaling&&null!==e.scaling?(void 0!==e.scaling.min&&(t.scaling.min=e.scaling.min),void 0!==e.scaling.max&&(t.scaling.max=e.scaling.max),$h(t.scaling,e.scaling,\"label\",n.scaling)):!0===i&&null===e.scaling&&(t.scaling=Gr(n.scaling)),void 0!==e.arrows&&null!==e.arrows)if(\"string\"==typeof e.arrows){var s=e.arrows.toLowerCase();t.arrows.to.enabled=-1!=Hr(s).call(s,\"to\"),t.arrows.middle.enabled=-1!=Hr(s).call(s,\"middle\"),t.arrows.from.enabled=-1!=Hr(s).call(s,\"from\")}else{if(\"object\"!==go(e.arrows))throw new Error(\"The arrow newOptions can only be an object or a string. Refer to the documentation. You used:\"+es(e.arrows));$h(t.arrows,e.arrows,\"to\",n.arrows),$h(t.arrows,e.arrows,\"middle\",n.arrows),$h(t.arrows,e.arrows,\"from\",n.arrows)}else!0===i&&null===e.arrows&&(t.arrows=Gr(n.arrows));if(void 0!==e.color&&null!==e.color){var a=bh(e.color)?{color:e.color,highlight:e.color,hover:e.color,inherit:!1,opacity:1}:e.color,h=t.color;if(o)Ch(h,n.color,!1,i);else for(var l in h)Object.prototype.hasOwnProperty.call(h,l)&&delete h[l];if(bh(h))h.color=h,h.highlight=h,h.hover=h,h.inherit=!1,void 0===a.opacity&&(h.opacity=1);else{var d=!1;void 0!==a.color&&(h.color=a.color,d=!0),void 0!==a.highlight&&(h.highlight=a.highlight,d=!0),void 0!==a.hover&&(h.hover=a.hover,d=!0),void 0!==a.inherit&&(h.inherit=a.inherit),void 0!==a.opacity&&(h.opacity=Math.min(1,Math.max(0,a.opacity))),!0===d?h.inherit=!1:void 0===h.inherit&&(h.inherit=\"from\")}}else!0===i&&null===e.color&&(t.color=Kh(n.color));!0===i&&null===e.font&&(t.font=Kh(n.font)),Object.prototype.hasOwnProperty.call(e,\"selfReferenceSize\")&&(console.warn(\"The selfReferenceSize property has been deprecated. Please use selfReference property instead. The selfReference can be set like thise selfReference:{size:30, angle:Math.PI / 4}\"),t.selfReference.size=e.selfReferenceSize)}}]),t}(),ip=function(){function t(e,i,n){var o,r=this;Nn(this,t),this.body=e,this.images=i,this.groups=n,this.body.functions.createEdge=Vt(o=this.create).call(o,this),this.edgesListeners={add:function(t,e){r.add(e.items)},update:function(t,e){r.update(e.items)},remove:function(t,e){r.remove(e.items)}},this.options={},this.defaultOptions={arrows:{to:{enabled:!1,scaleFactor:1,type:\"arrow\"},middle:{enabled:!1,scaleFactor:1,type:\"arrow\"},from:{enabled:!1,scaleFactor:1,type:\"arrow\"}},endPointOffset:{from:0,to:0},arrowStrikethrough:!0,color:{color:\"#848484\",highlight:\"#848484\",hover:\"#848484\",inherit:\"from\",opacity:1},dashes:!1,font:{color:\"#343434\",size:14,face:\"arial\",background:\"none\",strokeWidth:2,strokeColor:\"#ffffff\",align:\"horizontal\",multi:!1,vadjust:0,bold:{mod:\"bold\"},boldital:{mod:\"bold italic\"},ital:{mod:\"italic\"},mono:{mod:\"\",size:15,face:\"courier new\",vadjust:2}},hidden:!1,hoverWidth:1.5,label:void 0,labelHighlightBold:!0,length:void 0,physics:!0,scaling:{min:1,max:15,label:{enabled:!0,min:14,max:30,maxVisible:30,drawThreshold:5},customScalingFunction:function(t,e,i,n){if(e===t)return.5;var o=1/(e-t);return Math.max(0,(n-t)*o)}},selectionWidth:1.5,selfReference:{size:20,angle:Math.PI/4,renderBehindTheNode:!0},shadow:{enabled:!1,color:\"rgba(0,0,0,0.5)\",size:10,x:5,y:5},background:{enabled:!1,color:\"rgba(111,111,111,1)\",size:10,dashes:!1},smooth:{enabled:!0,type:\"dynamic\",forceDirection:\"none\",roundness:.5},title:void 0,width:1,value:void 0},Ch(this.options,this.defaultOptions),this.bindEventListeners()}return Fn(t,[{key:\"bindEventListeners\",value:function(){var t,e,i=this;this.body.emitter.on(\"_forceDisableDynamicCurves\",(function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];\"dynamic\"===t&&(t=\"continuous\");var n=!1;for(var o in i.body.edges)if(Object.prototype.hasOwnProperty.call(i.body.edges,o)){var r=i.body.edges[o],s=i.body.data.edges.get(o);if(null!=s){var a=s.smooth;void 0!==a&&!0===a.enabled&&\"dynamic\"===a.type&&(void 0===t?r.setOptions({smooth:!1}):r.setOptions({smooth:{type:t}}),n=!0)}}!0===e&&!0===n&&i.body.emitter.emit(\"_dataChanged\")})),this.body.emitter.on(\"_dataUpdated\",(function(){i.reconnectEdges()})),this.body.emitter.on(\"refreshEdges\",Vt(t=this.refresh).call(t,this)),this.body.emitter.on(\"refresh\",Vt(e=this.refresh).call(e,this)),this.body.emitter.on(\"destroy\",(function(){Dh(i.edgesListeners,(function(t,e){i.body.data.edges&&i.body.data.edges.off(e,t)})),delete i.body.functions.createEdge,delete i.edgesListeners.add,delete i.edgesListeners.update,delete i.edgesListeners.remove,delete i.edgesListeners}))}},{key:\"setOptions\",value:function(t){if(void 0!==t){ep.parseOptions(this.options,t,!0,this.defaultOptions,!0);var e=!1;if(void 0!==t.smooth)for(var i in this.body.edges)Object.prototype.hasOwnProperty.call(this.body.edges,i)&&(e=this.body.edges[i].updateEdgeType()||e);if(void 0!==t.font)for(var n in this.body.edges)Object.prototype.hasOwnProperty.call(this.body.edges,n)&&this.body.edges[n].updateLabelModule();void 0===t.hidden&&void 0===t.physics&&!0!==e||this.body.emitter.emit(\"_dataChanged\")}}},{key:\"setData\",value:function(t){var e=this,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=this.body.data.edges;if(nu(\"id\",t))this.body.data.edges=t;else if(So(t))this.body.data.edges=new tu,this.body.data.edges.add(t);else{if(t)throw new TypeError(\"Array or DataSet expected\");this.body.data.edges=new tu}if(n&&Dh(this.edgesListeners,(function(t,e){n.off(e,t)})),this.body.edges={},this.body.data.edges){Dh(this.edgesListeners,(function(t,i){e.body.data.edges.on(i,t)}));var o=this.body.data.edges.getIds();this.add(o,!0)}this.body.emitter.emit(\"_adjustEdgesForHierarchicalLayout\"),!1===i&&this.body.emitter.emit(\"_dataChanged\")}},{key:\"add\",value:function(t){for(var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=this.body.edges,n=this.body.data.edges,o=0;o<t.length;o++){var r=t[o],s=i[r];s&&s.disconnect();var a=n.get(r,{showInternalIds:!0});i[r]=this.create(a)}this.body.emitter.emit(\"_adjustEdgesForHierarchicalLayout\"),!1===e&&this.body.emitter.emit(\"_dataChanged\")}},{key:\"update\",value:function(t){for(var e=this.body.edges,i=this.body.data.edges,n=!1,o=0;o<t.length;o++){var r=t[o],s=i.get(r),a=e[r];void 0!==a?(a.disconnect(),n=a.setOptions(s)||n,a.connect()):(this.body.edges[r]=this.create(s),n=!0)}!0===n?(this.body.emitter.emit(\"_adjustEdgesForHierarchicalLayout\"),this.body.emitter.emit(\"_dataChanged\")):this.body.emitter.emit(\"_dataUpdated\")}},{key:\"remove\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(0!==t.length){var i=this.body.edges;Dh(t,(function(t){var e=i[t];void 0!==e&&e.remove()})),e&&this.body.emitter.emit(\"_dataChanged\")}}},{key:\"refresh\",value:function(){var t=this;Dh(this.body.edges,(function(e,i){var n=t.body.data.edges.get(i);void 0!==n&&e.setOptions(n)}))}},{key:\"create\",value:function(t){return new ep(t,this.body,this.images,this.options,this.defaultOptions)}},{key:\"reconnectEdges\",value:function(){var t,e=this.body.nodes,i=this.body.edges;for(t in e)Object.prototype.hasOwnProperty.call(e,t)&&(e[t].edges=[]);for(t in i)if(Object.prototype.hasOwnProperty.call(i,t)){var n=i[t];n.from=null,n.to=null,n.connect()}}},{key:\"getConnectedNodes\",value:function(t){var e=[];if(void 0!==this.body.edges[t]){var i=this.body.edges[t];void 0!==i.fromId&&e.push(i.fromId),void 0!==i.toId&&e.push(i.toId)}return e}},{key:\"_updateState\",value:function(){this._addMissingEdges(),this._removeInvalidEdges()}},{key:\"_removeInvalidEdges\",value:function(){var t=this,e=[];Dh(this.body.edges,(function(i,n){var o=t.body.nodes[i.toId],r=t.body.nodes[i.fromId];void 0!==o&&!0===o.isCluster||void 0!==r&&!0===r.isCluster||void 0!==o&&void 0!==r||e.push(n)})),this.remove(e,!1)}},{key:\"_addMissingEdges\",value:function(){var t=this.body.data.edges;if(null!=t){var e=this.body.edges,i=[];Wo(t).call(t,(function(t,n){void 0===e[n]&&i.push(n)})),this.add(i,!0)}}}]),t}(),np=function(){function t(e,i,n){Nn(this,t),this.body=e,this.physicsBody=i,this.barnesHutTree,this.setOptions(n),this._rng=ah(\"BARNES HUT SOLVER\")}return Fn(t,[{key:\"setOptions\",value:function(t){this.options=t,this.thetaInversed=1/this.options.theta,this.overlapAvoidanceFactor=1-Math.max(0,Math.min(1,this.options.avoidOverlap))}},{key:\"solve\",value:function(){if(0!==this.options.gravitationalConstant&&this.physicsBody.physicsNodeIndices.length>0){var t,e=this.body.nodes,i=this.physicsBody.physicsNodeIndices,n=i.length,o=this._formBarnesHutTree(e,i);this.barnesHutTree=o;for(var r=0;r<n;r++)(t=e[i[r]]).options.mass>0&&this._getForceContributions(o.root,t)}}},{key:\"_getForceContributions\",value:function(t,e){this._getForceContribution(t.children.NW,e),this._getForceContribution(t.children.NE,e),this._getForceContribution(t.children.SW,e),this._getForceContribution(t.children.SE,e)}},{key:\"_getForceContribution\",value:function(t,e){if(t.childrenCount>0){var i=t.centerOfMass.x-e.x,n=t.centerOfMass.y-e.y,o=Math.sqrt(i*i+n*n);o*t.calcSize>this.thetaInversed?this._calculateForces(o,i,n,e,t):4===t.childrenCount?this._getForceContributions(t,e):t.children.data.id!=e.id&&this._calculateForces(o,i,n,e,t)}}},{key:\"_calculateForces\",value:function(t,e,i,n,o){0===t&&(e=t=.1),this.overlapAvoidanceFactor<1&&n.shape.radius&&(t=Math.max(.1+this.overlapAvoidanceFactor*n.shape.radius,t-n.shape.radius));var r=this.options.gravitationalConstant*o.mass*n.options.mass/Math.pow(t,3),s=e*r,a=i*r;this.physicsBody.forces[n.id].x+=s,this.physicsBody.forces[n.id].y+=a}},{key:\"_formBarnesHutTree\",value:function(t,e){for(var i,n=e.length,o=t[e[0]].x,r=t[e[0]].y,s=t[e[0]].x,a=t[e[0]].y,h=1;h<n;h++){var l=t[e[h]],d=l.x,c=l.y;l.options.mass>0&&(d<o&&(o=d),d>s&&(s=d),c<r&&(r=c),c>a&&(a=c))}var u=Math.abs(s-o)-Math.abs(a-r);u>0?(r-=.5*u,a+=.5*u):(o+=.5*u,s-=.5*u);var f=Math.max(1e-5,Math.abs(s-o)),p=.5*f,v=.5*(o+s),g=.5*(r+a),y={root:{centerOfMass:{x:0,y:0},mass:0,range:{minX:v-p,maxX:v+p,minY:g-p,maxY:g+p},size:f,calcSize:1/f,children:{data:null},maxWidth:0,level:0,childrenCount:4}};this._splitBranch(y.root);for(var m=0;m<n;m++)(i=t[e[m]]).options.mass>0&&this._placeInTree(y.root,i);return y}},{key:\"_updateBranchMass\",value:function(t,e){var i=t.centerOfMass,n=t.mass+e.options.mass,o=1/n;i.x=i.x*t.mass+e.x*e.options.mass,i.x*=o,i.y=i.y*t.mass+e.y*e.options.mass,i.y*=o,t.mass=n;var r=Math.max(Math.max(e.height,e.radius),e.width);t.maxWidth=t.maxWidth<r?r:t.maxWidth}},{key:\"_placeInTree\",value:function(t,e,i){1==i&&void 0!==i||this._updateBranchMass(t,e);var n,o=t.children.NW.range;n=o.maxX>e.x?o.maxY>e.y?\"NW\":\"SW\":o.maxY>e.y?\"NE\":\"SE\",this._placeInRegion(t,e,n)}},{key:\"_placeInRegion\",value:function(t,e,i){var n=t.children[i];switch(n.childrenCount){case 0:n.children.data=e,n.childrenCount=1,this._updateBranchMass(n,e);break;case 1:n.children.data.x===e.x&&n.children.data.y===e.y?(e.x+=this._rng(),e.y+=this._rng()):(this._splitBranch(n),this._placeInTree(n,e));break;case 4:this._placeInTree(n,e)}}},{key:\"_splitBranch\",value:function(t){var e=null;1===t.childrenCount&&(e=t.children.data,t.mass=0,t.centerOfMass.x=0,t.centerOfMass.y=0),t.childrenCount=4,t.children.data=null,this._insertRegion(t,\"NW\"),this._insertRegion(t,\"NE\"),this._insertRegion(t,\"SW\"),this._insertRegion(t,\"SE\"),null!=e&&this._placeInTree(t,e)}},{key:\"_insertRegion\",value:function(t,e){var i,n,o,r,s=.5*t.size;switch(e){case\"NW\":i=t.range.minX,n=t.range.minX+s,o=t.range.minY,r=t.range.minY+s;break;case\"NE\":i=t.range.minX+s,n=t.range.maxX,o=t.range.minY,r=t.range.minY+s;break;case\"SW\":i=t.range.minX,n=t.range.minX+s,o=t.range.minY+s,r=t.range.maxY;break;case\"SE\":i=t.range.minX+s,n=t.range.maxX,o=t.range.minY+s,r=t.range.maxY}t.children[e]={centerOfMass:{x:0,y:0},mass:0,range:{minX:i,maxX:n,minY:o,maxY:r},size:.5*t.size,calcSize:2*t.calcSize,children:{data:null},maxWidth:0,level:t.level+1,childrenCount:0}}},{key:\"_debug\",value:function(t,e){void 0!==this.barnesHutTree&&(t.lineWidth=1,this._drawBranch(this.barnesHutTree.root,t,e))}},{key:\"_drawBranch\",value:function(t,e,i){void 0===i&&(i=\"#FF0000\"),4===t.childrenCount&&(this._drawBranch(t.children.NW,e),this._drawBranch(t.children.NE,e),this._drawBranch(t.children.SE,e),this._drawBranch(t.children.SW,e)),e.strokeStyle=i,e.beginPath(),e.moveTo(t.range.minX,t.range.minY),e.lineTo(t.range.maxX,t.range.minY),e.stroke(),e.beginPath(),e.moveTo(t.range.maxX,t.range.minY),e.lineTo(t.range.maxX,t.range.maxY),e.stroke(),e.beginPath(),e.moveTo(t.range.maxX,t.range.maxY),e.lineTo(t.range.minX,t.range.maxY),e.stroke(),e.beginPath(),e.moveTo(t.range.minX,t.range.maxY),e.lineTo(t.range.minX,t.range.minY),e.stroke()}}]),t}(),op=function(){function t(e,i,n){Nn(this,t),this._rng=ah(\"REPULSION SOLVER\"),this.body=e,this.physicsBody=i,this.setOptions(n)}return Fn(t,[{key:\"setOptions\",value:function(t){this.options=t}},{key:\"solve\",value:function(){for(var t,e,i,n,o,r,s,a,h=this.body.nodes,l=this.physicsBody.physicsNodeIndices,d=this.physicsBody.forces,c=this.options.nodeDistance,u=-2/3/c,f=0;f<l.length-1;f++){s=h[l[f]];for(var p=f+1;p<l.length;p++)t=(a=h[l[p]]).x-s.x,e=a.y-s.y,0===(i=Math.sqrt(t*t+e*e))&&(t=i=.1*this._rng()),i<2*c&&(r=i<.5*c?1:u*i+1.3333333333333333,n=t*(r/=i),o=e*r,d[s.id].x-=n,d[s.id].y-=o,d[a.id].x+=n,d[a.id].y+=o)}}}]),t}(),rp=function(){function t(e,i,n){Nn(this,t),this.body=e,this.physicsBody=i,this.setOptions(n)}return Fn(t,[{key:\"setOptions\",value:function(t){this.options=t,this.overlapAvoidanceFactor=Math.max(0,Math.min(1,this.options.avoidOverlap||0))}},{key:\"solve\",value:function(){for(var t=this.body.nodes,e=this.physicsBody.physicsNodeIndices,i=this.physicsBody.forces,n=this.options.nodeDistance,o=0;o<e.length-1;o++)for(var r=t[e[o]],s=o+1;s<e.length;s++){var a=t[e[s]];if(r.level===a.level){var h=n+this.overlapAvoidanceFactor*((r.shape.radius||0)/2+(a.shape.radius||0)/2),l=a.x-r.x,d=a.y-r.y,c=Math.sqrt(l*l+d*d),u=void 0;u=c<h?-Math.pow(.05*c,2)+Math.pow(.05*h,2):0,0!==c&&(u/=c);var f=l*u,p=d*u;i[r.id].x-=f,i[r.id].y-=p,i[a.id].x+=f,i[a.id].y+=p}}}}]),t}(),sp=function(){function t(e,i,n){Nn(this,t),this.body=e,this.physicsBody=i,this.setOptions(n)}return Fn(t,[{key:\"setOptions\",value:function(t){this.options=t}},{key:\"solve\",value:function(){for(var t,e,i,n,o,r=this.physicsBody.physicsEdgeIndices,s=this.body.edges,a=0;a<r.length;a++)!0===(e=s[r[a]]).connected&&e.toId!==e.fromId&&void 0!==this.body.nodes[e.toId]&&void 0!==this.body.nodes[e.fromId]&&(void 0!==e.edgeType.via?(t=void 0===e.options.length?this.options.springLength:e.options.length,i=e.to,n=e.edgeType.via,o=e.from,this._calculateSpringForce(i,n,.5*t),this._calculateSpringForce(n,o,.5*t)):(t=void 0===e.options.length?1.5*this.options.springLength:e.options.length,this._calculateSpringForce(e.from,e.to,t)))}},{key:\"_calculateSpringForce\",value:function(t,e,i){var n=t.x-e.x,o=t.y-e.y,r=Math.max(Math.sqrt(n*n+o*o),.01),s=this.options.springConstant*(i-r)/r,a=n*s,h=o*s;void 0!==this.physicsBody.forces[t.id]&&(this.physicsBody.forces[t.id].x+=a,this.physicsBody.forces[t.id].y+=h),void 0!==this.physicsBody.forces[e.id]&&(this.physicsBody.forces[e.id].x-=a,this.physicsBody.forces[e.id].y-=h)}}]),t}(),ap=function(){function t(e,i,n){Nn(this,t),this.body=e,this.physicsBody=i,this.setOptions(n)}return Fn(t,[{key:\"setOptions\",value:function(t){this.options=t}},{key:\"solve\",value:function(){for(var t,e,i,n,o,r,s,a,h,l,d=this.body.edges,c=.5,u=this.physicsBody.physicsEdgeIndices,f=this.physicsBody.physicsNodeIndices,p=this.physicsBody.forces,v=0;v<f.length;v++){var g=f[v];p[g].springFx=0,p[g].springFy=0}for(var y=0;y<u.length;y++)!0===(e=d[u[y]]).connected&&(t=void 0===e.options.length?this.options.springLength:e.options.length,i=e.from.x-e.to.x,n=e.from.y-e.to.y,a=0===(a=Math.sqrt(i*i+n*n))?.01:a,o=i*(s=this.options.springConstant*(t-a)/a),r=n*s,e.to.level!=e.from.level?(void 0!==p[e.toId]&&(p[e.toId].springFx-=o,p[e.toId].springFy-=r),void 0!==p[e.fromId]&&(p[e.fromId].springFx+=o,p[e.fromId].springFy+=r)):(void 0!==p[e.toId]&&(p[e.toId].x-=c*o,p[e.toId].y-=c*r),void 0!==p[e.fromId]&&(p[e.fromId].x+=c*o,p[e.fromId].y+=c*r)));s=1;for(var m=0;m<f.length;m++){var b=f[m];h=Math.min(s,Math.max(-s,p[b].springFx)),l=Math.min(s,Math.max(-s,p[b].springFy)),p[b].x+=h,p[b].y+=l}for(var w=0,k=0,_=0;_<f.length;_++){var x=f[_];w+=p[x].x,k+=p[x].y}for(var E=w/f.length,O=k/f.length,C=0;C<f.length;C++){var S=f[C];p[S].x-=E,p[S].y-=O}}}]),t}(),hp=function(){function t(e,i,n){Nn(this,t),this.body=e,this.physicsBody=i,this.setOptions(n)}return Fn(t,[{key:\"setOptions\",value:function(t){this.options=t}},{key:\"solve\",value:function(){for(var t,e,i,n,o=this.body.nodes,r=this.physicsBody.physicsNodeIndices,s=this.physicsBody.forces,a=0;a<r.length;a++){t=-(n=o[r[a]]).x,e=-n.y,i=Math.sqrt(t*t+e*e),this._calculateForces(i,t,e,s,n)}}},{key:\"_calculateForces\",value:function(t,e,i,n,o){var r=0===t?0:this.options.centralGravity/t;n[o.id].x=e*r,n[o.id].y=i*r}}]),t}();function lp(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var dp=function(t){Ad(i,t);var e=lp(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o))._rng=ah(\"FORCE ATLAS 2 BASED REPULSION SOLVER\"),r}return Fn(i,[{key:\"_calculateForces\",value:function(t,e,i,n,o){0===t&&(e=t=.1*this._rng()),this.overlapAvoidanceFactor<1&&n.shape.radius&&(t=Math.max(.1+this.overlapAvoidanceFactor*n.shape.radius,t-n.shape.radius));var r=n.edges.length+1,s=this.options.gravitationalConstant*o.mass*n.options.mass*r/Math.pow(t,2),a=e*s,h=i*s;this.physicsBody.forces[n.id].x+=a,this.physicsBody.forces[n.id].y+=h}}]),i}(np);function cp(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var up=function(t){Ad(i,t);var e=cp(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"_calculateForces\",value:function(t,e,i,n,o){if(t>0){var r=o.edges.length+1,s=this.options.centralGravity*r*o.options.mass;n[o.id].x=e*s,n[o.id].y=i*s}}}]),i}(hp),fp=function(){function t(e){Nn(this,t),this.body=e,this.physicsBody={physicsNodeIndices:[],physicsEdgeIndices:[],forces:{},velocities:{}},this.physicsEnabled=!0,this.simulationInterval=1e3/60,this.requiresTimeout=!0,this.previousStates={},this.referenceState={},this.freezeCache={},this.renderTimer=void 0,this.adaptiveTimestep=!1,this.adaptiveTimestepEnabled=!1,this.adaptiveCounter=0,this.adaptiveInterval=3,this.stabilized=!1,this.startedStabilization=!1,this.stabilizationIterations=0,this.ready=!1,this.options={},this.defaultOptions={enabled:!0,barnesHut:{theta:.5,gravitationalConstant:-2e3,centralGravity:.3,springLength:95,springConstant:.04,damping:.09,avoidOverlap:0},forceAtlas2Based:{theta:.5,gravitationalConstant:-50,centralGravity:.01,springConstant:.08,springLength:100,damping:.4,avoidOverlap:0},repulsion:{centralGravity:.2,springLength:200,springConstant:.05,nodeDistance:100,damping:.09,avoidOverlap:0},hierarchicalRepulsion:{centralGravity:0,springLength:100,springConstant:.01,nodeDistance:120,damping:.09},maxVelocity:50,minVelocity:.75,solver:\"barnesHut\",stabilization:{enabled:!0,iterations:1e3,updateInterval:50,onlyDynamicEdges:!1,fit:!0},timestep:.5,adaptiveTimestep:!0,wind:{x:0,y:0}},At(this.options,this.defaultOptions),this.timestep=.5,this.layoutFailed=!1,this.bindEventListeners()}return Fn(t,[{key:\"bindEventListeners\",value:function(){var t=this;this.body.emitter.on(\"initPhysics\",(function(){t.initPhysics()})),this.body.emitter.on(\"_layoutFailed\",(function(){t.layoutFailed=!0})),this.body.emitter.on(\"resetPhysics\",(function(){t.stopSimulation(),t.ready=!1})),this.body.emitter.on(\"disablePhysics\",(function(){t.physicsEnabled=!1,t.stopSimulation()})),this.body.emitter.on(\"restorePhysics\",(function(){t.setOptions(t.options),!0===t.ready&&t.startSimulation()})),this.body.emitter.on(\"startSimulation\",(function(){!0===t.ready&&t.startSimulation()})),this.body.emitter.on(\"stopSimulation\",(function(){t.stopSimulation()})),this.body.emitter.on(\"destroy\",(function(){t.stopSimulation(!1),t.body.emitter.off()})),this.body.emitter.on(\"_dataChanged\",(function(){t.updatePhysicsData()}))}},{key:\"setOptions\",value:function(t){if(void 0!==t)if(!1===t)this.options.enabled=!1,this.physicsEnabled=!1,this.stopSimulation();else if(!0===t)this.options.enabled=!0,this.physicsEnabled=!0,this.startSimulation();else{this.physicsEnabled=!0,Oh([\"stabilization\"],this.options,t),$h(this.options,t,\"stabilization\"),void 0===t.enabled&&(this.options.enabled=!0),!1===this.options.enabled&&(this.physicsEnabled=!1,this.stopSimulation());var e=this.options.wind;e&&((\"number\"!=typeof e.x||yd(e.x))&&(e.x=0),(\"number\"!=typeof e.y||yd(e.y))&&(e.y=0)),this.timestep=this.options.timestep}this.init()}},{key:\"init\",value:function(){var t;\"forceAtlas2Based\"===this.options.solver?(t=this.options.forceAtlas2Based,this.nodesSolver=new dp(this.body,this.physicsBody,t),this.edgesSolver=new sp(this.body,this.physicsBody,t),this.gravitySolver=new up(this.body,this.physicsBody,t)):\"repulsion\"===this.options.solver?(t=this.options.repulsion,this.nodesSolver=new op(this.body,this.physicsBody,t),this.edgesSolver=new sp(this.body,this.physicsBody,t),this.gravitySolver=new hp(this.body,this.physicsBody,t)):\"hierarchicalRepulsion\"===this.options.solver?(t=this.options.hierarchicalRepulsion,this.nodesSolver=new rp(this.body,this.physicsBody,t),this.edgesSolver=new ap(this.body,this.physicsBody,t),this.gravitySolver=new hp(this.body,this.physicsBody,t)):(t=this.options.barnesHut,this.nodesSolver=new np(this.body,this.physicsBody,t),this.edgesSolver=new sp(this.body,this.physicsBody,t),this.gravitySolver=new hp(this.body,this.physicsBody,t)),this.modelOptions=t}},{key:\"initPhysics\",value:function(){!0===this.physicsEnabled&&!0===this.options.enabled?!0===this.options.stabilization.enabled?this.stabilize():(this.stabilized=!1,this.ready=!0,this.body.emitter.emit(\"fit\",{},this.layoutFailed),this.startSimulation()):(this.ready=!0,this.body.emitter.emit(\"fit\"))}},{key:\"startSimulation\",value:function(){var t;!0===this.physicsEnabled&&!0===this.options.enabled?(this.stabilized=!1,this.adaptiveTimestep=!1,this.body.emitter.emit(\"_resizeNodes\"),void 0===this.viewFunction&&(this.viewFunction=Vt(t=this.simulationStep).call(t,this),this.body.emitter.on(\"initRedraw\",this.viewFunction),this.body.emitter.emit(\"_startRendering\"))):this.body.emitter.emit(\"_redraw\")}},{key:\"stopSimulation\",value:function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.stabilized=!0,!0===t&&this._emitStabilized(),void 0!==this.viewFunction&&(this.body.emitter.off(\"initRedraw\",this.viewFunction),this.viewFunction=void 0,!0===t&&this.body.emitter.emit(\"_stopRendering\"))}},{key:\"simulationStep\",value:function(){var t=No();this.physicsTick(),(No()-t<.4*this.simulationInterval||!0===this.runDoubleSpeed)&&!1===this.stabilized&&(this.physicsTick(),this.runDoubleSpeed=!0),!0===this.stabilized&&this.stopSimulation()}},{key:\"_emitStabilized\",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.stabilizationIterations;(this.stabilizationIterations>1||!0===this.startedStabilization)&&rs((function(){t.body.emitter.emit(\"stabilized\",{iterations:e}),t.startedStabilization=!1,t.stabilizationIterations=0}),0)}},{key:\"physicsStep\",value:function(){this.gravitySolver.solve(),this.nodesSolver.solve(),this.edgesSolver.solve(),this.moveNodes()}},{key:\"adjustTimeStep\",value:function(){!0===this._evaluateStepQuality()?this.timestep=1.2*this.timestep:this.timestep/1.2<this.options.timestep?this.timestep=this.options.timestep:(this.adaptiveCounter=-1,this.timestep=Math.max(this.options.timestep,this.timestep/1.2))}},{key:\"physicsTick\",value:function(){if(this._startStabilizing(),!0!==this.stabilized){if(!0===this.adaptiveTimestep&&!0===this.adaptiveTimestepEnabled)this.adaptiveCounter%this.adaptiveInterval==0?(this.timestep=2*this.timestep,this.physicsStep(),this.revert(),this.timestep=.5*this.timestep,this.physicsStep(),this.physicsStep(),this.adjustTimeStep()):this.physicsStep(),this.adaptiveCounter+=1;else this.timestep=this.options.timestep,this.physicsStep();!0===this.stabilized&&this.revert(),this.stabilizationIterations++}}},{key:\"updatePhysicsData\",value:function(){this.physicsBody.forces={},this.physicsBody.physicsNodeIndices=[],this.physicsBody.physicsEdgeIndices=[];var t=this.body.nodes,e=this.body.edges;for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&!0===t[i].options.physics&&this.physicsBody.physicsNodeIndices.push(t[i].id);for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&!0===e[n].options.physics&&this.physicsBody.physicsEdgeIndices.push(e[n].id);for(var o=0;o<this.physicsBody.physicsNodeIndices.length;o++){var r=this.physicsBody.physicsNodeIndices[o];this.physicsBody.forces[r]={x:0,y:0},void 0===this.physicsBody.velocities[r]&&(this.physicsBody.velocities[r]={x:0,y:0})}for(var s in this.physicsBody.velocities)void 0===t[s]&&delete this.physicsBody.velocities[s]}},{key:\"revert\",value:function(){var t=zo(this.previousStates),e=this.body.nodes,i=this.physicsBody.velocities;this.referenceState={};for(var n=0;n<t.length;n++){var o=t[n];void 0!==e[o]?!0===e[o].options.physics&&(this.referenceState[o]={positions:{x:e[o].x,y:e[o].y}},i[o].x=this.previousStates[o].vx,i[o].y=this.previousStates[o].vy,e[o].x=this.previousStates[o].x,e[o].y=this.previousStates[o].y):delete this.previousStates[o]}}},{key:\"_evaluateStepQuality\",value:function(){var t,e,i=this.body.nodes,n=this.referenceState;for(var o in this.referenceState)if(Object.prototype.hasOwnProperty.call(this.referenceState,o)&&void 0!==i[o]&&(t=i[o].x-n[o].positions.x,e=i[o].y-n[o].positions.y,Math.sqrt(Math.pow(t,2)+Math.pow(e,2))>.3))return!1;return!0}},{key:\"moveNodes\",value:function(){for(var t=this.physicsBody.physicsNodeIndices,e=0,i=0,n=0;n<t.length;n++){var o=t[n],r=this._performStep(o);e=Math.max(e,r),i+=r}this.adaptiveTimestepEnabled=i/t.length<5,this.stabilized=e<this.options.minVelocity}},{key:\"calculateComponentVelocity\",value:function(t,e,i){t+=(e-this.modelOptions.damping*t)/i*this.timestep;var n=this.options.maxVelocity||1e9;return Math.abs(t)>n&&(t=t>0?n:-n),t}},{key:\"_performStep\",value:function(t){var e=this.body.nodes[t],i=this.physicsBody.forces[t];this.options.wind&&(i.x+=this.options.wind.x,i.y+=this.options.wind.y);var n=this.physicsBody.velocities[t];return this.previousStates[t]={x:e.x,y:e.y,vx:n.x,vy:n.y},!1===e.options.fixed.x?(n.x=this.calculateComponentVelocity(n.x,i.x,e.options.mass),e.x+=n.x*this.timestep):(i.x=0,n.x=0),!1===e.options.fixed.y?(n.y=this.calculateComponentVelocity(n.y,i.y,e.options.mass),e.y+=n.y*this.timestep):(i.y=0,n.y=0),Math.sqrt(Math.pow(n.x,2)+Math.pow(n.y,2))}},{key:\"_freezeNodes\",value:function(){var t=this.body.nodes;for(var e in t)if(Object.prototype.hasOwnProperty.call(t,e)&&t[e].x&&t[e].y){var i=t[e].options.fixed;this.freezeCache[e]={x:i.x,y:i.y},i.x=!0,i.y=!0}}},{key:\"_restoreFrozenNodes\",value:function(){var t=this.body.nodes;for(var e in t)Object.prototype.hasOwnProperty.call(t,e)&&void 0!==this.freezeCache[e]&&(t[e].options.fixed.x=this.freezeCache[e].x,t[e].options.fixed.y=this.freezeCache[e].y);this.freezeCache={}}},{key:\"stabilize\",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.options.stabilization.iterations;\"number\"!=typeof e&&(e=this.options.stabilization.iterations,console.error(\"The stabilize method needs a numeric amount of iterations. Switching to default: \",e)),0!==this.physicsBody.physicsNodeIndices.length?(this.adaptiveTimestep=this.options.adaptiveTimestep,this.body.emitter.emit(\"_resizeNodes\"),this.stopSimulation(),this.stabilized=!1,this.body.emitter.emit(\"_blockRedraw\"),this.targetIterations=e,!0===this.options.stabilization.onlyDynamicEdges&&this._freezeNodes(),this.stabilizationIterations=0,rs((function(){return t._stabilizationBatch()}),0)):this.ready=!0}},{key:\"_startStabilizing\",value:function(){return!0!==this.startedStabilization&&(this.body.emitter.emit(\"startStabilizing\"),this.startedStabilization=!0,!0)}},{key:\"_stabilizationBatch\",value:function(){var t=this,e=function(){return!1===t.stabilized&&t.stabilizationIterations<t.targetIterations},i=function(){t.body.emitter.emit(\"stabilizationProgress\",{iterations:t.stabilizationIterations,total:t.targetIterations})};this._startStabilizing()&&i();for(var n,o=0;e()&&o<this.options.stabilization.updateInterval;)this.physicsTick(),o++;(i(),e())?rs(Vt(n=this._stabilizationBatch).call(n,this),0):this._finalizeStabilization()}},{key:\"_finalizeStabilization\",value:function(){this.body.emitter.emit(\"_allowRedraw\"),!0===this.options.stabilization.fit&&this.body.emitter.emit(\"fit\"),!0===this.options.stabilization.onlyDynamicEdges&&this._restoreFrozenNodes(),this.body.emitter.emit(\"stabilizationIterationsDone\"),this.body.emitter.emit(\"_requestRedraw\"),!0===this.stabilized?this._emitStabilized():this.startSimulation(),this.ready=!0}},{key:\"_drawForces\",value:function(t){for(var e=0;e<this.physicsBody.physicsNodeIndices.length;e++){var i=this.physicsBody.physicsNodeIndices[e],n=this.body.nodes[i],o=this.physicsBody.forces[i],r=Math.sqrt(Math.pow(o.x,2)+Math.pow(o.x,2)),s=Math.min(Math.max(5,r),15),a=3*s,h=Vh((180-180*Math.min(1,Math.max(0,.03*r)))/360,1,1),l={x:n.x+20*o.x,y:n.y+20*o.y};t.lineWidth=s,t.strokeStyle=h,t.beginPath(),t.moveTo(n.x,n.y),t.lineTo(l.x,l.y),t.stroke();var d=Math.atan2(o.y,o.x);t.fillStyle=h,jf.draw(t,{type:\"arrow\",point:l,angle:d,length:a}),hs(t).call(t)}}}]),t}(),pp=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"getRange\",value:function(t){var e,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=1e9,o=-1e9,r=1e9,s=-1e9;if(i.length>0)for(var a=0;a<i.length;a++)r>(e=t[i[a]]).shape.boundingBox.left&&(r=e.shape.boundingBox.left),s<e.shape.boundingBox.right&&(s=e.shape.boundingBox.right),n>e.shape.boundingBox.top&&(n=e.shape.boundingBox.top),o<e.shape.boundingBox.bottom&&(o=e.shape.boundingBox.bottom);return 1e9===r&&-1e9===s&&1e9===n&&-1e9===o&&(n=0,o=0,r=0,s=0),{minX:r,maxX:s,minY:n,maxY:o}}},{key:\"getRangeCore\",value:function(t){var e,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=1e9,o=-1e9,r=1e9,s=-1e9;if(i.length>0)for(var a=0;a<i.length;a++)r>(e=t[i[a]]).x&&(r=e.x),s<e.x&&(s=e.x),n>e.y&&(n=e.y),o<e.y&&(o=e.y);return 1e9===r&&-1e9===s&&1e9===n&&-1e9===o&&(n=0,o=0,r=0,s=0),{minX:r,maxX:s,minY:n,maxY:o}}},{key:\"findCenter\",value:function(t){return{x:.5*(t.maxX+t.minX),y:.5*(t.maxY+t.minY)}}},{key:\"cloneOptions\",value:function(t,e){var i={};return void 0===e||\"node\"===e?(Ch(i,t.options,!0),i.x=t.x,i.y=t.y,i.amountOfConnections=t.edges.length):Ch(i,t.options,!0),i}}]),t}();function vp(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var gp=function(t){Ad(i,t);var e=vp(i);function i(t,n,o,r,s,a){var h;return Nn(this,i),(h=e.call(this,t,n,o,r,s,a)).isCluster=!0,h.containedNodes={},h.containedEdges={},h}return Fn(i,[{key:\"_openChildCluster\",value:function(t){var e=this,i=this.body.nodes[t];if(void 0===this.containedNodes[t])throw new Error(\"node with id: \"+t+\" not in current cluster\");if(!i.isCluster)throw new Error(\"node with id: \"+t+\" is not a cluster\");delete this.containedNodes[t],Dh(i.edges,(function(t){delete e.containedEdges[t.id]})),Dh(i.containedNodes,(function(t,i){e.containedNodes[i]=t})),i.containedNodes={},Dh(i.containedEdges,(function(t,i){e.containedEdges[i]=t})),i.containedEdges={},Dh(i.edges,(function(t){Dh(e.edges,(function(i){var n,o,r=Hr(n=i.clusteringEdgeReplacingIds).call(n,t.id);-1!==r&&(Dh(t.clusteringEdgeReplacingIds,(function(t){i.clusteringEdgeReplacingIds.push(t),e.body.edges[t].edgeReplacedById=i.id})),er(o=i.clusteringEdgeReplacingIds).call(o,r,1))}))})),i.edges=[]}}]),i}(cf),yp=function(){function t(e){var i=this;Nn(this,t),this.body=e,this.clusteredNodes={},this.clusteredEdges={},this.options={},this.defaultOptions={},At(this.options,this.defaultOptions),this.body.emitter.on(\"_resetData\",(function(){i.clusteredNodes={},i.clusteredEdges={}}))}return Fn(t,[{key:\"clusterByHubsize\",value:function(t,e){void 0===t?t=this._getHubSize():\"object\"===go(t)&&(e=this._checkOptions(t),t=this._getHubSize());for(var i=[],n=0;n<this.body.nodeIndices.length;n++){var o=this.body.nodes[this.body.nodeIndices[n]];o.edges.length>=t&&i.push(o.id)}for(var r=0;r<i.length;r++)this.clusterByConnection(i[r],e,!0);this.body.emitter.emit(\"_dataChanged\")}},{key:\"cluster\",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},i=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(void 0===e.joinCondition)throw new Error(\"Cannot call clusterByNodeData without a joinCondition function in the options.\");e=this._checkOptions(e);var n={},o={};Dh(this.body.nodes,(function(i,r){i.options&&!0===e.joinCondition(i.options)&&(n[r]=i,Dh(i.edges,(function(e){void 0===t.clusteredEdges[e.id]&&(o[e.id]=e)})))})),this._cluster(n,o,e,i)}},{key:\"clusterByEdgeCount\",value:function(t,e){var i=this,n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];e=this._checkOptions(e);for(var o,r,s,a=[],h={},l=function(n){var l={},d={},c=i.body.nodeIndices[n],u=i.body.nodes[c];if(void 0===h[c]){s=0,r=[];for(var f=0;f<u.edges.length;f++)o=u.edges[f],void 0===i.clusteredEdges[o.id]&&(o.toId!==o.fromId&&s++,r.push(o));if(s===t){for(var p=function(t){if(void 0===e.joinCondition||null===e.joinCondition)return!0;var i=pp.cloneOptions(t);return e.joinCondition(i)},v=!0,g=0;g<r.length;g++){o=r[g];var y=i._getConnectedId(o,c);if(!p(u)){v=!1;break}d[o.id]=o,l[c]=u,l[y]=i.body.nodes[y],h[c]=!0}if(zo(l).length>0&&zo(d).length>0&&!0===v){var m=function(){for(var t=0;t<a.length;++t)for(var e in l)if(void 0!==a[t].nodes[e])return a[t]}();if(void 0!==m){for(var b in l)void 0===m.nodes[b]&&(m.nodes[b]=l[b]);for(var w in d)void 0===m.edges[w]&&(m.edges[w]=d[w])}else a.push({nodes:l,edges:d})}}}},d=0;d<this.body.nodeIndices.length;d++)l(d);for(var c=0;c<a.length;c++)this._cluster(a[c].nodes,a[c].edges,e,!1);!0===n&&this.body.emitter.emit(\"_dataChanged\")}},{key:\"clusterOutliers\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this.clusterByEdgeCount(1,t,e)}},{key:\"clusterBridges\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this.clusterByEdgeCount(2,t,e)}},{key:\"clusterByConnection\",value:function(t,e){var i,n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];if(void 0===t)throw new Error(\"No nodeId supplied to clusterByConnection!\");if(void 0===this.body.nodes[t])throw new Error(\"The nodeId given to clusterByConnection does not exist!\");var o=this.body.nodes[t];void 0===(e=this._checkOptions(e,o)).clusterNodeProperties.x&&(e.clusterNodeProperties.x=o.x),void 0===e.clusterNodeProperties.y&&(e.clusterNodeProperties.y=o.y),void 0===e.clusterNodeProperties.fixed&&(e.clusterNodeProperties.fixed={},e.clusterNodeProperties.fixed.x=o.options.fixed.x,e.clusterNodeProperties.fixed.y=o.options.fixed.y);var r={},s={},a=o.id,h=pp.cloneOptions(o);r[a]=o;for(var l=0;l<o.edges.length;l++){var d=o.edges[l];if(void 0===this.clusteredEdges[d.id]){var c=this._getConnectedId(d,a);if(void 0===this.clusteredNodes[c])if(c!==a)if(void 0===e.joinCondition)s[d.id]=d,r[c]=this.body.nodes[c];else{var u=pp.cloneOptions(this.body.nodes[c]);!0===e.joinCondition(h,u)&&(s[d.id]=d,r[c]=this.body.nodes[c])}else s[d.id]=d}}var f=Io(i=zo(r)).call(i,(function(t){return r[t].id}));for(var p in r)if(Object.prototype.hasOwnProperty.call(r,p))for(var v=r[p],g=0;g<v.edges.length;g++){var y=v.edges[g];Hr(f).call(f,this._getConnectedId(y,v.id))>-1&&(s[y.id]=y)}this._cluster(r,s,e,n)}},{key:\"_createClusterEdges\",value:function(t,e,i,n){for(var o,r,s,a,h,l,d=zo(t),c=[],u=0;u<d.length;u++){s=t[r=d[u]];for(var f=0;f<s.edges.length;f++)o=s.edges[f],void 0===this.clusteredEdges[o.id]&&(o.toId==o.fromId?e[o.id]=o:o.toId==r?(a=i.id,l=h=o.fromId):(a=o.toId,h=i.id,l=a),void 0===t[l]&&c.push({edge:o,fromId:h,toId:a}))}for(var p=[],v=function(t){for(var e=0;e<p.length;e++){var i=p[e],n=t.fromId===i.fromId&&t.toId===i.toId,o=t.fromId===i.toId&&t.toId===i.fromId;if(n||o)return i}return null},g=0;g<c.length;g++){var y=c[g],m=y.edge,b=v(y);null===b?(b=this._createClusteredEdge(y.fromId,y.toId,m,n),p.push(b)):b.clusteringEdgeReplacingIds.push(m.id),this.body.edges[m.id].edgeReplacedById=b.id,this._backupEdgeOptions(m),m.setOptions({physics:!1})}}},{key:\"_checkOptions\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return void 0===t.clusterEdgeProperties&&(t.clusterEdgeProperties={}),void 0===t.clusterNodeProperties&&(t.clusterNodeProperties={}),t}},{key:\"_cluster\",value:function(t,e,i){var n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],o=[];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&void 0!==this.clusteredNodes[r]&&o.push(r);for(var s=0;s<o.length;++s)delete t[o[s]];if(0!=zo(t).length&&(1!=zo(t).length||1==i.clusterNodeProperties.allowSingleNodeCluster)){var a=Ch({},i.clusterNodeProperties);if(void 0!==i.processProperties){var h=[];for(var l in t)if(Object.prototype.hasOwnProperty.call(t,l)){var d=pp.cloneOptions(t[l]);h.push(d)}var c=[];for(var u in e)if(Object.prototype.hasOwnProperty.call(e,u)&&\"clusterEdge:\"!==u.substr(0,12)){var f=pp.cloneOptions(e[u],\"edge\");c.push(f)}if(!(a=i.processProperties(a,h,c)))throw new Error(\"The processProperties function does not return properties!\")}void 0===a.id&&(a.id=\"cluster:\"+Wc());var p=a.id;void 0===a.label&&(a.label=\"cluster\");var v=void 0;void 0===a.x&&(v=this._getClusterPosition(t),a.x=v.x),void 0===a.y&&(void 0===v&&(v=this._getClusterPosition(t)),a.y=v.y),a.id=p;var g=this.body.functions.createNode(a,gp);g.containedNodes=t,g.containedEdges=e,g.clusterEdgeProperties=i.clusterEdgeProperties,this.body.nodes[a.id]=g,this._clusterEdges(t,e,a,i.clusterEdgeProperties),a.id=void 0,!0===n&&this.body.emitter.emit(\"_dataChanged\")}}},{key:\"_backupEdgeOptions\",value:function(t){void 0===this.clusteredEdges[t.id]&&(this.clusteredEdges[t.id]={physics:t.options.physics})}},{key:\"_restoreEdge\",value:function(t){var e=this.clusteredEdges[t.id];void 0!==e&&(t.setOptions({physics:e.physics}),delete this.clusteredEdges[t.id])}},{key:\"isCluster\",value:function(t){return void 0!==this.body.nodes[t]?!0===this.body.nodes[t].isCluster:(console.error(\"Node does not exist.\"),!1)}},{key:\"_getClusterPosition\",value:function(t){for(var e,i=zo(t),n=t[i[0]].x,o=t[i[0]].x,r=t[i[0]].y,s=t[i[0]].y,a=1;a<i.length;a++)n=(e=t[i[a]]).x<n?e.x:n,o=e.x>o?e.x:o,r=e.y<r?e.y:r,s=e.y>s?e.y:s;return{x:.5*(n+o),y:.5*(r+s)}}},{key:\"openCluster\",value:function(t,e){var i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];if(void 0===t)throw new Error(\"No clusterNodeId supplied to openCluster.\");var n=this.body.nodes[t];if(void 0===n)throw new Error(\"The clusterNodeId supplied to openCluster does not exist.\");if(!0!==n.isCluster||void 0===n.containedNodes||void 0===n.containedEdges)throw new Error(\"The node:\"+t+\" is not a valid cluster.\");var o=this.findNode(t),r=Hr(o).call(o,t)-1;if(r>=0){var s=o[r],a=this.body.nodes[s];return a._openChildCluster(t),delete this.body.nodes[t],void(!0===i&&this.body.emitter.emit(\"_dataChanged\"))}var h=n.containedNodes,l=n.containedEdges;if(void 0!==e&&void 0!==e.releaseFunction&&\"function\"==typeof e.releaseFunction){var d={},c={x:n.x,y:n.y};for(var u in h)if(Object.prototype.hasOwnProperty.call(h,u)){var f=this.body.nodes[u];d[u]={x:f.x,y:f.y}}var p=e.releaseFunction(c,d);for(var v in h)if(Object.prototype.hasOwnProperty.call(h,v)){var g=this.body.nodes[v];void 0!==p[v]&&(g.x=void 0===p[v].x?n.x:p[v].x,g.y=void 0===p[v].y?n.y:p[v].y)}}else Dh(h,(function(t){!1===t.options.fixed.x&&(t.x=n.x),!1===t.options.fixed.y&&(t.y=n.y)}));for(var y in h)if(Object.prototype.hasOwnProperty.call(h,y)){var m=this.body.nodes[y];m.vx=n.vx,m.vy=n.vy,m.setOptions({physics:!0}),delete this.clusteredNodes[y]}for(var b=[],w=0;w<n.edges.length;w++)b.push(n.edges[w]);for(var k=0;k<b.length;k++){for(var _=b[k],x=this._getConnectedId(_,t),E=this.clusteredNodes[x],O=0;O<_.clusteringEdgeReplacingIds.length;O++){var C=_.clusteringEdgeReplacingIds[O],S=this.body.edges[C];if(void 0!==S)if(void 0!==E){var T=this.body.nodes[E.clusterId];T.containedEdges[S.id]=S,delete l[S.id];var M=S.fromId,P=S.toId;S.toId==x?P=E.clusterId:M=E.clusterId,this._createClusteredEdge(M,P,S,T.clusterEdgeProperties,{hidden:!1,physics:!0})}else this._restoreEdge(S)}_.remove()}for(var D in l)Object.prototype.hasOwnProperty.call(l,D)&&this._restoreEdge(l[D]);delete this.body.nodes[t],!0===i&&this.body.emitter.emit(\"_dataChanged\")}},{key:\"getNodesInCluster\",value:function(t){var e=[];if(!0===this.isCluster(t)){var i=this.body.nodes[t].containedNodes;for(var n in i)Object.prototype.hasOwnProperty.call(i,n)&&e.push(this.body.nodes[n].id)}return e}},{key:\"findNode\",value:function(t){for(var e,i=[],n=0;void 0!==this.clusteredNodes[t]&&n<100;){if(void 0===(e=this.body.nodes[t]))return[];i.push(e.id),t=this.clusteredNodes[t].clusterId,n++}return void 0===(e=this.body.nodes[t])?[]:(i.push(e.id),Xo(i).call(i),i)}},{key:\"updateClusteredNode\",value:function(t,e){if(void 0===t)throw new Error(\"No clusteredNodeId supplied to updateClusteredNode.\");if(void 0===e)throw new Error(\"No newOptions supplied to updateClusteredNode.\");if(void 0===this.body.nodes[t])throw new Error(\"The clusteredNodeId supplied to updateClusteredNode does not exist.\");this.body.nodes[t].setOptions(e),this.body.emitter.emit(\"_dataChanged\")}},{key:\"updateEdge\",value:function(t,e){if(void 0===t)throw new Error(\"No startEdgeId supplied to updateEdge.\");if(void 0===e)throw new Error(\"No newOptions supplied to updateEdge.\");if(void 0===this.body.edges[t])throw new Error(\"The startEdgeId supplied to updateEdge does not exist.\");for(var i=this.getClusteredEdges(t),n=0;n<i.length;n++){this.body.edges[i[n]].setOptions(e)}this.body.emitter.emit(\"_dataChanged\")}},{key:\"getClusteredEdges\",value:function(t){for(var e=[],i=0;void 0!==t&&void 0!==this.body.edges[t]&&i<100;)e.push(this.body.edges[t].id),t=this.body.edges[t].edgeReplacedById,i++;return Xo(e).call(e),e}},{key:\"getBaseEdge\",value:function(t){return this.getBaseEdges(t)[0]}},{key:\"getBaseEdges\",value:function(t){for(var e=[t],i=[],n=[],o=0;e.length>0&&o<100;){var r=e.pop();if(void 0!==r){var s=this.body.edges[r];if(void 0!==s){o++;var a=s.clusteringEdgeReplacingIds;if(void 0===a)n.push(r);else for(var h=0;h<a.length;++h){var l=a[h];-1===Hr(e).call(e,a)&&-1===Hr(i).call(i,a)&&e.push(l)}i.push(r)}}}return n}},{key:\"_getConnectedId\",value:function(t,e){return t.toId!=e?t.toId:(t.fromId,t.fromId)}},{key:\"_getHubSize\",value:function(){for(var t=0,e=0,i=0,n=0,o=0;o<this.body.nodeIndices.length;o++){var r=this.body.nodes[this.body.nodeIndices[o]];r.edges.length>n&&(n=r.edges.length),t+=r.edges.length,e+=Math.pow(r.edges.length,2),i+=1}t/=i;var s=(e/=i)-Math.pow(t,2),a=Math.sqrt(s),h=Math.floor(t+2*a);return h>n&&(h=n),h}},{key:\"_createClusteredEdge\",value:function(t,e,i,n,o){var r=pp.cloneOptions(i,\"edge\");Ch(r,n),r.from=t,r.to=e,r.id=\"clusterEdge:\"+Wc(),void 0!==o&&Ch(r,o);var s=this.body.functions.createEdge(r);return s.clusteringEdgeReplacingIds=[i.id],s.connect(),this.body.edges[s.id]=s,s}},{key:\"_clusterEdges\",value:function(t,e,i,n){if(e instanceof ep){var o=e,r={};r[o.id]=o,e=r}if(t instanceof cf){var s=t,a={};a[s.id]=s,t=a}if(null==i)throw new Error(\"_clusterEdges: parameter clusterNode required\");for(var h in void 0===n&&(n=i.clusterEdgeProperties),this._createClusterEdges(t,e,i,n),e)if(Object.prototype.hasOwnProperty.call(e,h)&&void 0!==this.body.edges[h]){var l=this.body.edges[h];this._backupEdgeOptions(l),l.setOptions({physics:!1})}for(var d in t)Object.prototype.hasOwnProperty.call(t,d)&&(this.clusteredNodes[d]={clusterId:i.id,node:this.body.nodes[d]},this.body.nodes[d].setOptions({physics:!1}))}},{key:\"_getClusterNodeForNode\",value:function(t){if(void 0!==t){var e=this.clusteredNodes[t];if(void 0!==e){var i=e.clusterId;if(void 0!==i)return this.body.nodes[i]}}}},{key:\"_filter\",value:function(t,e){var i=[];return Dh(t,(function(t){e(t)&&i.push(t)})),i}},{key:\"_updateState\",value:function(){var t,e=this,i=[],n={},o=function(t){Dh(e.body.nodes,(function(e){!0===e.isCluster&&t(e)}))};for(t in this.clusteredNodes){if(Object.prototype.hasOwnProperty.call(this.clusteredNodes,t))void 0===this.body.nodes[t]&&i.push(t)}o((function(t){for(var e=0;e<i.length;e++)delete t.containedNodes[i[e]]}));for(var r=0;r<i.length;r++)delete this.clusteredNodes[i[r]];Dh(this.clusteredEdges,(function(t){var i=e.body.edges[t];void 0!==i&&i.endPointsValid()||(n[t]=t)})),o((function(t){Dh(t.containedEdges,(function(t,e){t.endPointsValid()||n[e]||(n[e]=e)}))})),Dh(this.body.edges,(function(t,i){var o=!0,r=t.clusteringEdgeReplacingIds;if(void 0!==r){var s=0;Dh(r,(function(t){var i=e.body.edges[t];void 0!==i&&i.endPointsValid()&&(s+=1)})),o=s>0}t.endPointsValid()&&o||(n[i]=i)})),o((function(t){Dh(n,(function(i){delete t.containedEdges[i],Dh(t.edges,(function(o,r){o.id!==i?o.clusteringEdgeReplacingIds=e._filter(o.clusteringEdgeReplacingIds,(function(t){return!n[t]})):t.edges[r]=null})),t.edges=e._filter(t.edges,(function(t){return null!==t}))}))})),Dh(n,(function(t){delete e.clusteredEdges[t]})),Dh(n,(function(t){delete e.body.edges[t]})),Dh(zo(this.body.edges),(function(t){var i=e.body.edges[t],n=e._isClusteredNode(i.fromId)||e._isClusteredNode(i.toId);if(n!==e._isClusteredEdge(i.id))if(n){var o=e._getClusterNodeForNode(i.fromId);void 0!==o&&e._clusterEdges(e.body.nodes[i.fromId],i,o);var r=e._getClusterNodeForNode(i.toId);void 0!==r&&e._clusterEdges(e.body.nodes[i.toId],i,r)}else delete e._clusterEdges[t],e._restoreEdge(i)}));for(var s=!1,a=!0,h=function(){var t=[];o((function(e){var i=zo(e.containedNodes).length,n=!0===e.options.allowSingleNodeCluster;(n&&i<1||!n&&i<2)&&t.push(e.id)}));for(var i=0;i<t.length;++i)e.openCluster(t[i],{},!1);a=t.length>0,s=s||a};a;)h();s&&this._updateState()}},{key:\"_isClusteredNode\",value:function(t){return void 0!==this.clusteredNodes[t]}},{key:\"_isClusteredEdge\",value:function(t){return void 0!==this.clusteredEdges[t]}}]),t}();function mp(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return bp(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return bp(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function bp(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}var wp=function(){function t(e,i){var n;Nn(this,t),void 0!==window&&(n=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame),window.requestAnimationFrame=void 0===n?function(t){t()}:n,this.body=e,this.canvas=i,this.redrawRequested=!1,this.renderTimer=void 0,this.requiresTimeout=!0,this.renderingActive=!1,this.renderRequests=0,this.allowRedraw=!0,this.dragging=!1,this.zooming=!1,this.options={},this.defaultOptions={hideEdgesOnDrag:!1,hideEdgesOnZoom:!1,hideNodesOnDrag:!1},At(this.options,this.defaultOptions),this._determineBrowserMethod(),this.bindEventListeners()}return Fn(t,[{key:\"bindEventListeners\",value:function(){var t,e=this;this.body.emitter.on(\"dragStart\",(function(){e.dragging=!0})),this.body.emitter.on(\"dragEnd\",(function(){e.dragging=!1})),this.body.emitter.on(\"zoom\",(function(){e.zooming=!0,window.clearTimeout(e.zoomTimeoutId),e.zoomTimeoutId=rs((function(){var t;e.zooming=!1,Vt(t=e._requestRedraw).call(t,e)()}),250)})),this.body.emitter.on(\"_resizeNodes\",(function(){e._resizeNodes()})),this.body.emitter.on(\"_redraw\",(function(){!1===e.renderingActive&&e._redraw()})),this.body.emitter.on(\"_blockRedraw\",(function(){e.allowRedraw=!1})),this.body.emitter.on(\"_allowRedraw\",(function(){e.allowRedraw=!0,e.redrawRequested=!1})),this.body.emitter.on(\"_requestRedraw\",Vt(t=this._requestRedraw).call(t,this)),this.body.emitter.on(\"_startRendering\",(function(){e.renderRequests+=1,e.renderingActive=!0,e._startRendering()})),this.body.emitter.on(\"_stopRendering\",(function(){e.renderRequests-=1,e.renderingActive=e.renderRequests>0,e.renderTimer=void 0})),this.body.emitter.on(\"destroy\",(function(){e.renderRequests=0,e.allowRedraw=!1,e.renderingActive=!1,!0===e.requiresTimeout?clearTimeout(e.renderTimer):window.cancelAnimationFrame(e.renderTimer),e.body.emitter.off()}))}},{key:\"setOptions\",value:function(t){if(void 0!==t){Eh([\"hideEdgesOnDrag\",\"hideEdgesOnZoom\",\"hideNodesOnDrag\"],this.options,t)}}},{key:\"_requestNextFrame\",value:function(t,e){if(\"undefined\"!=typeof window){var i,n=window;return!0===this.requiresTimeout?i=rs(t,e):n.requestAnimationFrame&&(i=n.requestAnimationFrame(t)),i}}},{key:\"_startRendering\",value:function(){var t;!0===this.renderingActive&&(void 0===this.renderTimer&&(this.renderTimer=this._requestNextFrame(Vt(t=this._renderStep).call(t,this),this.simulationInterval)))}},{key:\"_renderStep\",value:function(){!0===this.renderingActive&&(this.renderTimer=void 0,!0===this.requiresTimeout&&this._startRendering(),this._redraw(),!1===this.requiresTimeout&&this._startRendering())}},{key:\"redraw\",value:function(){this.body.emitter.emit(\"setSize\"),this._redraw()}},{key:\"_requestRedraw\",value:function(){var t=this;!0!==this.redrawRequested&&!1===this.renderingActive&&!0===this.allowRedraw&&(this.redrawRequested=!0,this._requestNextFrame((function(){t._redraw(!1)}),0))}},{key:\"_redraw\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(!0===this.allowRedraw){this.body.emitter.emit(\"initRedraw\"),this.redrawRequested=!1;var e={drawExternalLabels:null};0!==this.canvas.frame.canvas.width&&0!==this.canvas.frame.canvas.height||this.canvas.setSize(),this.canvas.setTransform();var i=this.canvas.getContext(),n=this.canvas.frame.canvas.clientWidth,o=this.canvas.frame.canvas.clientHeight;if(i.clearRect(0,0,n,o),0===this.canvas.frame.clientWidth)return;if(i.save(),i.translate(this.body.view.translation.x,this.body.view.translation.y),i.scale(this.body.view.scale,this.body.view.scale),i.beginPath(),this.body.emitter.emit(\"beforeDrawing\",i),i.closePath(),!1===t&&(!1===this.dragging||!0===this.dragging&&!1===this.options.hideEdgesOnDrag)&&(!1===this.zooming||!0===this.zooming&&!1===this.options.hideEdgesOnZoom)&&this._drawEdges(i),!1===this.dragging||!0===this.dragging&&!1===this.options.hideNodesOnDrag){var r=this._drawNodes(i,t),s=r.drawExternalLabels;e.drawExternalLabels=s}!1===t&&(!1===this.dragging||!0===this.dragging&&!1===this.options.hideEdgesOnDrag)&&(!1===this.zooming||!0===this.zooming&&!1===this.options.hideEdgesOnZoom)&&this._drawArrows(i),null!=e.drawExternalLabels&&e.drawExternalLabels(),!1===t&&this._drawSelectionBox(i),i.beginPath(),this.body.emitter.emit(\"afterDrawing\",i),i.closePath(),i.restore(),!0===t&&i.clearRect(0,0,n,o)}}},{key:\"_resizeNodes\",value:function(){this.canvas.setTransform();var t=this.canvas.getContext();t.save(),t.translate(this.body.view.translation.x,this.body.view.translation.y),t.scale(this.body.view.scale,this.body.view.scale);var e,i=this.body.nodes;for(var n in i)Object.prototype.hasOwnProperty.call(i,n)&&((e=i[n]).resize(t),e.updateBoundingBox(t,e.selected));t.restore()}},{key:\"_drawNodes\",value:function(t){for(var e,i,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],o=this.body.nodes,r=this.body.nodeIndices,s=[],a=[],h=20,l=this.canvas.DOMtoCanvas({x:-h,y:-h}),d=this.canvas.DOMtoCanvas({x:this.canvas.frame.canvas.clientWidth+h,y:this.canvas.frame.canvas.clientHeight+h}),c={top:l.y,left:l.x,bottom:d.y,right:d.x},u=[],f=0;f<r.length;f++)if((e=o[r[f]]).hover)a.push(r[f]);else if(e.isSelected())s.push(r[f]);else if(!0===n){var p=e.draw(t);null!=p.drawExternalLabel&&u.push(p.drawExternalLabel)}else if(!0===e.isBoundingBoxOverlappingWith(c)){var v=e.draw(t);null!=v.drawExternalLabel&&u.push(v.drawExternalLabel)}else e.updateBoundingBox(t,e.selected);var g=s.length,y=a.length;for(i=0;i<g;i++){var m=(e=o[s[i]]).draw(t);null!=m.drawExternalLabel&&u.push(m.drawExternalLabel)}for(i=0;i<y;i++){var b=(e=o[a[i]]).draw(t);null!=b.drawExternalLabel&&u.push(b.drawExternalLabel)}return{drawExternalLabels:function(){var t,e=mp(u);try{for(e.s();!(t=e.n()).done;){(0,t.value)()}}catch(t){e.e(t)}finally{e.f()}}}}},{key:\"_drawEdges\",value:function(t){for(var e=this.body.edges,i=this.body.edgeIndices,n=0;n<i.length;n++){var o=e[i[n]];!0===o.connected&&o.draw(t)}}},{key:\"_drawArrows\",value:function(t){for(var e=this.body.edges,i=this.body.edgeIndices,n=0;n<i.length;n++){var o=e[i[n]];!0===o.connected&&o.drawArrows(t)}}},{key:\"_determineBrowserMethod\",value:function(){if(\"undefined\"!=typeof window){var t=navigator.userAgent.toLowerCase();this.requiresTimeout=!1,(-1!=Hr(t).call(t,\"msie 9.0\")||-1!=Hr(t).call(t,\"safari\")&&Hr(t).call(t,\"chrome\")<=-1)&&(this.requiresTimeout=!0)}else this.requiresTimeout=!0}},{key:\"_drawSelectionBox\",value:function(t){if(this.body.selectionBox.show){t.beginPath();var e=this.body.selectionBox.position.end.x-this.body.selectionBox.position.start.x,i=this.body.selectionBox.position.end.y-this.body.selectionBox.position.start.y;t.rect(this.body.selectionBox.position.start.x,this.body.selectionBox.position.start.y,e,i),t.fillStyle=\"rgba(151, 194, 252, 0.2)\",t.fillRect(this.body.selectionBox.position.start.x,this.body.selectionBox.position.start.y,e,i),t.strokeStyle=\"rgba(151, 194, 252, 1)\",t.stroke()}else t.closePath()}}]),t}(),kp=k.setInterval;function _p(t,e){e.inputHandler=function(t){t.isFirst&&e(t)},t.on(\"hammer.input\",e.inputHandler)}function xp(t,e){return e.inputHandler=function(t){t.isFinal&&e(t)},t.on(\"hammer.input\",e.inputHandler)}var Ep=function(){function t(e){Nn(this,t),this.body=e,this.pixelRatio=1,this.cameraState={},this.initialized=!1,this.canvasViewCenter={},this._cleanupCallbacks=[],this.options={},this.defaultOptions={autoResize:!0,height:\"100%\",width:\"100%\"},At(this.options,this.defaultOptions),this.bindEventListeners()}return Fn(t,[{key:\"bindEventListeners\",value:function(){var t,e=this;this.body.emitter.once(\"resize\",(function(t){0!==t.width&&(e.body.view.translation.x=.5*t.width),0!==t.height&&(e.body.view.translation.y=.5*t.height)})),this.body.emitter.on(\"setSize\",Vt(t=this.setSize).call(t,this)),this.body.emitter.on(\"destroy\",(function(){e.hammerFrame.destroy(),e.hammer.destroy(),e._cleanUp()}))}},{key:\"setOptions\",value:function(t){var e=this;if(void 0!==t){Eh([\"width\",\"height\",\"autoResize\"],this.options,t)}if(this._cleanUp(),!0===this.options.autoResize){var i;if(window.ResizeObserver){var n=new ResizeObserver((function(){!0===e.setSize()&&e.body.emitter.emit(\"_requestRedraw\")})),o=this.frame;n.observe(o),this._cleanupCallbacks.push((function(){n.unobserve(o)}))}else{var r=kp((function(){!0===e.setSize()&&e.body.emitter.emit(\"_requestRedraw\")}),1e3);this._cleanupCallbacks.push((function(){clearInterval(r)}))}var s=Vt(i=this._onResize).call(i,this);Bh(window,\"resize\",s),this._cleanupCallbacks.push((function(){zh(window,\"resize\",s)}))}}},{key:\"_cleanUp\",value:function(){var t,e,i;Wo(t=Xo(e=er(i=this._cleanupCallbacks).call(i,0)).call(e)).call(t,(function(t){try{t()}catch(t){console.error(t)}}))}},{key:\"_onResize\",value:function(){this.setSize(),this.body.emitter.emit(\"_redraw\")}},{key:\"_getCameraState\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.pixelRatio;!0===this.initialized&&(this.cameraState.previousWidth=this.frame.canvas.width/t,this.cameraState.previousHeight=this.frame.canvas.height/t,this.cameraState.scale=this.body.view.scale,this.cameraState.position=this.DOMtoCanvas({x:.5*this.frame.canvas.width/t,y:.5*this.frame.canvas.height/t}))}},{key:\"_setCameraState\",value:function(){if(void 0!==this.cameraState.scale&&0!==this.frame.canvas.clientWidth&&0!==this.frame.canvas.clientHeight&&0!==this.pixelRatio&&this.cameraState.previousWidth>0&&this.cameraState.previousHeight>0){var t=this.frame.canvas.width/this.pixelRatio/this.cameraState.previousWidth,e=this.frame.canvas.height/this.pixelRatio/this.cameraState.previousHeight,i=this.cameraState.scale;1!=t&&1!=e?i=.5*this.cameraState.scale*(t+e):1!=t?i=this.cameraState.scale*t:1!=e&&(i=this.cameraState.scale*e),this.body.view.scale=i;var n=this.DOMtoCanvas({x:.5*this.frame.canvas.clientWidth,y:.5*this.frame.canvas.clientHeight}),o={x:n.x-this.cameraState.position.x,y:n.y-this.cameraState.position.y};this.body.view.translation.x+=o.x*this.body.view.scale,this.body.view.translation.y+=o.y*this.body.view.scale}}},{key:\"_prepareValue\",value:function(t){if(\"number\"==typeof t)return t+\"px\";if(\"string\"==typeof t){if(-1!==Hr(t).call(t,\"%\")||-1!==Hr(t).call(t,\"px\"))return t;if(-1===Hr(t).call(t,\"%\"))return t+\"px\"}throw new Error(\"Could not use the value supplied for width or height:\"+t)}},{key:\"_create\",value:function(){for(;this.body.container.hasChildNodes();)this.body.container.removeChild(this.body.container.firstChild);if(this.frame=document.createElement(\"div\"),this.frame.className=\"vis-network\",this.frame.style.position=\"relative\",this.frame.style.overflow=\"hidden\",this.frame.tabIndex=0,this.frame.canvas=document.createElement(\"canvas\"),this.frame.canvas.style.position=\"relative\",this.frame.appendChild(this.frame.canvas),this.frame.canvas.getContext)this._setPixelRatio(),this.setTransform();else{var t=document.createElement(\"DIV\");t.style.color=\"red\",t.style.fontWeight=\"bold\",t.style.padding=\"10px\",t.innerText=\"Error: your browser does not support HTML canvas\",this.frame.canvas.appendChild(t)}this.body.container.appendChild(this.frame),this.body.view.scale=1,this.body.view.translation={x:.5*this.frame.canvas.clientWidth,y:.5*this.frame.canvas.clientHeight},this._bindHammer()}},{key:\"_bindHammer\",value:function(){var t=this;void 0!==this.hammer&&this.hammer.destroy(),this.drag={},this.pinch={},this.hammer=new ll(this.frame.canvas),this.hammer.get(\"pinch\").set({enable:!0}),this.hammer.get(\"pan\").set({threshold:5,direction:ll.DIRECTION_ALL}),_p(this.hammer,(function(e){t.body.eventListeners.onTouch(e)})),this.hammer.on(\"tap\",(function(e){t.body.eventListeners.onTap(e)})),this.hammer.on(\"doubletap\",(function(e){t.body.eventListeners.onDoubleTap(e)})),this.hammer.on(\"press\",(function(e){t.body.eventListeners.onHold(e)})),this.hammer.on(\"panstart\",(function(e){t.body.eventListeners.onDragStart(e)})),this.hammer.on(\"panmove\",(function(e){t.body.eventListeners.onDrag(e)})),this.hammer.on(\"panend\",(function(e){t.body.eventListeners.onDragEnd(e)})),this.hammer.on(\"pinch\",(function(e){t.body.eventListeners.onPinch(e)})),this.frame.canvas.addEventListener(\"wheel\",(function(e){t.body.eventListeners.onMouseWheel(e)})),this.frame.canvas.addEventListener(\"mousemove\",(function(e){t.body.eventListeners.onMouseMove(e)})),this.frame.canvas.addEventListener(\"contextmenu\",(function(e){t.body.eventListeners.onContext(e)})),this.hammerFrame=new ll(this.frame),xp(this.hammerFrame,(function(e){t.body.eventListeners.onRelease(e)}))}},{key:\"setSize\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.options.width,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.options.height;t=this._prepareValue(t),e=this._prepareValue(e);var i=!1,n=this.frame.canvas.width,o=this.frame.canvas.height,r=this.pixelRatio;if(this._setPixelRatio(),t!=this.options.width||e!=this.options.height||this.frame.style.width!=t||this.frame.style.height!=e)this._getCameraState(r),this.frame.style.width=t,this.frame.style.height=e,this.frame.canvas.style.width=\"100%\",this.frame.canvas.style.height=\"100%\",this.frame.canvas.width=Math.round(this.frame.canvas.clientWidth*this.pixelRatio),this.frame.canvas.height=Math.round(this.frame.canvas.clientHeight*this.pixelRatio),this.options.width=t,this.options.height=e,this.canvasViewCenter={x:.5*this.frame.clientWidth,y:.5*this.frame.clientHeight},i=!0;else{var s=Math.round(this.frame.canvas.clientWidth*this.pixelRatio),a=Math.round(this.frame.canvas.clientHeight*this.pixelRatio);this.frame.canvas.width===s&&this.frame.canvas.height===a||this._getCameraState(r),this.frame.canvas.width!==s&&(this.frame.canvas.width=s,i=!0),this.frame.canvas.height!==a&&(this.frame.canvas.height=a,i=!0)}return!0===i&&(this.body.emitter.emit(\"resize\",{width:Math.round(this.frame.canvas.width/this.pixelRatio),height:Math.round(this.frame.canvas.height/this.pixelRatio),oldWidth:Math.round(n/this.pixelRatio),oldHeight:Math.round(o/this.pixelRatio)}),this._setCameraState()),this.initialized=!0,i}},{key:\"getContext\",value:function(){return this.frame.canvas.getContext(\"2d\")}},{key:\"_determinePixelRatio\",value:function(){var t=this.getContext();if(void 0===t)throw new Error(\"Could not get canvax context\");var e=1;return\"undefined\"!=typeof window&&(e=window.devicePixelRatio||1),e/(t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1)}},{key:\"_setPixelRatio\",value:function(){this.pixelRatio=this._determinePixelRatio()}},{key:\"setTransform\",value:function(){var t=this.getContext();if(void 0===t)throw new Error(\"Could not get canvax context\");t.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0)}},{key:\"_XconvertDOMtoCanvas\",value:function(t){return(t-this.body.view.translation.x)/this.body.view.scale}},{key:\"_XconvertCanvasToDOM\",value:function(t){return t*this.body.view.scale+this.body.view.translation.x}},{key:\"_YconvertDOMtoCanvas\",value:function(t){return(t-this.body.view.translation.y)/this.body.view.scale}},{key:\"_YconvertCanvasToDOM\",value:function(t){return t*this.body.view.scale+this.body.view.translation.y}},{key:\"canvasToDOM\",value:function(t){return{x:this._XconvertCanvasToDOM(t.x),y:this._YconvertCanvasToDOM(t.y)}}},{key:\"DOMtoCanvas\",value:function(t){return{x:this._XconvertDOMtoCanvas(t.x),y:this._YconvertDOMtoCanvas(t.y)}}}]),t}();function Op(t,e){var i=At({nodes:e,minZoomLevel:Number.MIN_VALUE,maxZoomLevel:1},null!=t?t:{});if(!So(i.nodes))throw new TypeError(\"Nodes has to be an array of ids.\");if(0===i.nodes.length&&(i.nodes=e),!(\"number\"==typeof i.minZoomLevel&&i.minZoomLevel>0))throw new TypeError(\"Min zoom level has to be a number higher than zero.\");if(!(\"number\"==typeof i.maxZoomLevel&&i.minZoomLevel<=i.maxZoomLevel))throw new TypeError(\"Max zoom level has to be a number higher than min zoom level.\");return i}var Cp=function(){function t(e,i){var n,o,r=this;Nn(this,t),this.body=e,this.canvas=i,this.animationSpeed=1/this.renderRefreshRate,this.animationEasingFunction=\"easeInOutQuint\",this.easingTime=0,this.sourceScale=0,this.targetScale=0,this.sourceTranslation=0,this.targetTranslation=0,this.lockedOnNodeId=void 0,this.lockedOnNodeOffset=void 0,this.touchTime=0,this.viewFunction=void 0,this.body.emitter.on(\"fit\",Vt(n=this.fit).call(n,this)),this.body.emitter.on(\"animationFinished\",(function(){r.body.emitter.emit(\"_stopRendering\")})),this.body.emitter.on(\"unlockNode\",Vt(o=this.releaseNode).call(o,this))}return Fn(t,[{key:\"setOptions\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.options=t}},{key:\"fit\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];t=Op(t,this.body.nodeIndices);var i,n,o=this.canvas.frame.canvas.clientWidth,r=this.canvas.frame.canvas.clientHeight;if(0===o||0===r)n=1,i=pp.getRange(this.body.nodes,t.nodes);else if(!0===e){var s=0;for(var a in this.body.nodes)if(Object.prototype.hasOwnProperty.call(this.body.nodes,a)){var h=this.body.nodes[a];!0===h.predefinedPosition&&(s+=1)}if(s>.5*this.body.nodeIndices.length)return void this.fit(t,!1);i=pp.getRange(this.body.nodes,t.nodes);var l=this.body.nodeIndices.length;n=12.662/(l+7.4147)+.0964822;var d=Math.min(o/600,r/600);n*=d}else{this.body.emitter.emit(\"_resizeNodes\"),i=pp.getRange(this.body.nodes,t.nodes);var c=1.1*Math.abs(i.maxX-i.minX),u=1.1*Math.abs(i.maxY-i.minY),f=o/c,p=r/u;n=f<=p?f:p}n>t.maxZoomLevel?n=t.maxZoomLevel:n<t.minZoomLevel&&(n=t.minZoomLevel);var v=pp.findCenter(i),g={position:v,scale:n,animation:t.animation};this.moveTo(g)}},{key:\"focus\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(void 0!==this.body.nodes[t]){var i={x:this.body.nodes[t].x,y:this.body.nodes[t].y};e.position=i,e.lockedOnNode=t,this.moveTo(e)}else console.error(\"Node: \"+t+\" cannot be found.\")}},{key:\"moveTo\",value:function(t){if(void 0!==t){if(null!=t.offset){if(null!=t.offset.x){if(t.offset.x=+t.offset.x,!wd(t.offset.x))throw new TypeError('The option \"offset.x\" has to be a finite number.')}else t.offset.x=0;if(null!=t.offset.y){if(t.offset.y=+t.offset.y,!wd(t.offset.y))throw new TypeError('The option \"offset.y\" has to be a finite number.')}else t.offset.x=0}else t.offset={x:0,y:0};if(null!=t.position){if(null!=t.position.x){if(t.position.x=+t.position.x,!wd(t.position.x))throw new TypeError('The option \"position.x\" has to be a finite number.')}else t.position.x=0;if(null!=t.position.y){if(t.position.y=+t.position.y,!wd(t.position.y))throw new TypeError('The option \"position.y\" has to be a finite number.')}else t.position.x=0}else t.position=this.getViewPosition();if(null!=t.scale){if(t.scale=+t.scale,!(t.scale>0))throw new TypeError('The option \"scale\" has to be a number greater than zero.')}else t.scale=this.body.view.scale;void 0===t.animation&&(t.animation={duration:0}),!1===t.animation&&(t.animation={duration:0}),!0===t.animation&&(t.animation={}),void 0===t.animation.duration&&(t.animation.duration=1e3),void 0===t.animation.easingFunction&&(t.animation.easingFunction=\"easeInOutQuad\"),this.animateView(t)}else t={}}},{key:\"animateView\",value:function(t){if(void 0!==t){this.animationEasingFunction=t.animation.easingFunction,this.releaseNode(),!0===t.locked&&(this.lockedOnNodeId=t.lockedOnNode,this.lockedOnNodeOffset=t.offset),0!=this.easingTime&&this._transitionRedraw(!0),this.sourceScale=this.body.view.scale,this.sourceTranslation=this.body.view.translation,this.targetScale=t.scale,this.body.view.scale=this.targetScale;var e,i,n=this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight}),o=n.x-t.position.x,r=n.y-t.position.y;if(this.targetTranslation={x:this.sourceTranslation.x+o*this.targetScale+t.offset.x,y:this.sourceTranslation.y+r*this.targetScale+t.offset.y},0===t.animation.duration)if(null!=this.lockedOnNodeId)this.viewFunction=Vt(e=this._lockedRedraw).call(e,this),this.body.emitter.on(\"initRedraw\",this.viewFunction);else this.body.view.scale=this.targetScale,this.body.view.translation=this.targetTranslation,this.body.emitter.emit(\"_requestRedraw\");else this.animationSpeed=1/(60*t.animation.duration*.001)||1/60,this.animationEasingFunction=t.animation.easingFunction,this.viewFunction=Vt(i=this._transitionRedraw).call(i,this),this.body.emitter.on(\"initRedraw\",this.viewFunction),this.body.emitter.emit(\"_startRendering\")}}},{key:\"_lockedRedraw\",value:function(){var t=this.body.nodes[this.lockedOnNodeId].x,e=this.body.nodes[this.lockedOnNodeId].y,i=this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight}),n=i.x-t,o=i.y-e,r=this.body.view.translation,s={x:r.x+n*this.body.view.scale+this.lockedOnNodeOffset.x,y:r.y+o*this.body.view.scale+this.lockedOnNodeOffset.y};this.body.view.translation=s}},{key:\"releaseNode\",value:function(){void 0!==this.lockedOnNodeId&&void 0!==this.viewFunction&&(this.body.emitter.off(\"initRedraw\",this.viewFunction),this.lockedOnNodeId=void 0,this.lockedOnNodeOffset=void 0)}},{key:\"_transitionRedraw\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.easingTime+=this.animationSpeed,this.easingTime=!0===t?1:this.easingTime;var e=Zh[this.animationEasingFunction](this.easingTime);if(this.body.view.scale=this.sourceScale+(this.targetScale-this.sourceScale)*e,this.body.view.translation={x:this.sourceTranslation.x+(this.targetTranslation.x-this.sourceTranslation.x)*e,y:this.sourceTranslation.y+(this.targetTranslation.y-this.sourceTranslation.y)*e},this.easingTime>=1){var i;if(this.body.emitter.off(\"initRedraw\",this.viewFunction),this.easingTime=0,null!=this.lockedOnNodeId)this.viewFunction=Vt(i=this._lockedRedraw).call(i,this),this.body.emitter.on(\"initRedraw\",this.viewFunction);this.body.emitter.emit(\"animationFinished\")}}},{key:\"getScale\",value:function(){return this.body.view.scale}},{key:\"getViewPosition\",value:function(){return this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight})}}]),t}();function Sp(t){var e,i=t&&t.preventDefault||!1,n=t&&t.container||window,o={},r={keydown:{},keyup:{}},s={};for(e=97;e<=122;e++)s[String.fromCharCode(e)]={code:e-97+65,shift:!1};for(e=65;e<=90;e++)s[String.fromCharCode(e)]={code:e,shift:!0};for(e=0;e<=9;e++)s[\"\"+e]={code:48+e,shift:!1};for(e=1;e<=12;e++)s[\"F\"+e]={code:111+e,shift:!1};for(e=0;e<=9;e++)s[\"num\"+e]={code:96+e,shift:!1};s[\"num*\"]={code:106,shift:!1},s[\"num+\"]={code:107,shift:!1},s[\"num-\"]={code:109,shift:!1},s[\"num/\"]={code:111,shift:!1},s[\"num.\"]={code:110,shift:!1},s.left={code:37,shift:!1},s.up={code:38,shift:!1},s.right={code:39,shift:!1},s.down={code:40,shift:!1},s.space={code:32,shift:!1},s.enter={code:13,shift:!1},s.shift={code:16,shift:void 0},s.esc={code:27,shift:!1},s.backspace={code:8,shift:!1},s.tab={code:9,shift:!1},s.ctrl={code:17,shift:!1},s.alt={code:18,shift:!1},s.delete={code:46,shift:!1},s.pageup={code:33,shift:!1},s.pagedown={code:34,shift:!1},s[\"=\"]={code:187,shift:!1},s[\"-\"]={code:189,shift:!1},s[\"]\"]={code:221,shift:!1},s[\"[\"]={code:219,shift:!1};var a=function(t){l(t,\"keydown\")},h=function(t){l(t,\"keyup\")},l=function(t,e){if(void 0!==r[e][t.keyCode]){for(var n=r[e][t.keyCode],o=0;o<n.length;o++)(void 0===n[o].shift||1==n[o].shift&&1==t.shiftKey||0==n[o].shift&&0==t.shiftKey)&&n[o].fn(t);1==i&&t.preventDefault()}};return o.bind=function(t,e,i){if(void 0===i&&(i=\"keydown\"),void 0===s[t])throw new Error(\"unsupported key: \"+t);void 0===r[i][s[t].code]&&(r[i][s[t].code]=[]),r[i][s[t].code].push({fn:e,shift:s[t].shift})},o.bindAll=function(t,e){for(var i in void 0===e&&(e=\"keydown\"),s)s.hasOwnProperty(i)&&o.bind(i,t,e)},o.getKey=function(t){for(var e in s)if(s.hasOwnProperty(e)){if(1==t.shiftKey&&1==s[e].shift&&t.keyCode==s[e].code)return e;if(0==t.shiftKey&&0==s[e].shift&&t.keyCode==s[e].code)return e;if(t.keyCode==s[e].code&&\"shift\"==e)return e}return\"unknown key, currently not supported\"},o.unbind=function(t,e,i){if(void 0===i&&(i=\"keydown\"),void 0===s[t])throw new Error(\"unsupported key: \"+t);if(void 0!==e){var n=[],o=r[i][s[t].code];if(void 0!==o)for(var a=0;a<o.length;a++)o[a].fn==e&&o[a].shift==s[t].shift||n.push(r[i][s[t].code][a]);r[i][s[t].code]=n}else r[i][s[t].code]=[]},o.reset=function(){r={keydown:{},keyup:{}}},o.destroy=function(){r={keydown:{},keyup:{}},n.removeEventListener(\"keydown\",a,!0),n.removeEventListener(\"keyup\",h,!0)},n.addEventListener(\"keydown\",a,!0),n.addEventListener(\"keyup\",h,!0),o}var Tp=Object.freeze({__proto__:null,default:Sp}),Mp=function(){function t(e,i){var n=this;Nn(this,t),this.body=e,this.canvas=i,this.iconsCreated=!1,this.navigationHammers=[],this.boundFunctions={},this.touchTime=0,this.activated=!1,this.body.emitter.on(\"activate\",(function(){n.activated=!0,n.configureKeyboardBindings()})),this.body.emitter.on(\"deactivate\",(function(){n.activated=!1,n.configureKeyboardBindings()})),this.body.emitter.on(\"destroy\",(function(){void 0!==n.keycharm&&n.keycharm.destroy()})),this.options={}}return Fn(t,[{key:\"setOptions\",value:function(t){void 0!==t&&(this.options=t,this.create())}},{key:\"create\",value:function(){!0===this.options.navigationButtons?!1===this.iconsCreated&&this.loadNavigationElements():!0===this.iconsCreated&&this.cleanNavigation(),this.configureKeyboardBindings()}},{key:\"cleanNavigation\",value:function(){if(0!=this.navigationHammers.length){for(var t=0;t<this.navigationHammers.length;t++)this.navigationHammers[t].destroy();this.navigationHammers=[]}this.navigationDOM&&this.navigationDOM.wrapper&&this.navigationDOM.wrapper.parentNode&&this.navigationDOM.wrapper.parentNode.removeChild(this.navigationDOM.wrapper),this.iconsCreated=!1}},{key:\"loadNavigationElements\",value:function(){var t=this;this.cleanNavigation(),this.navigationDOM={};var e=[\"up\",\"down\",\"left\",\"right\",\"zoomIn\",\"zoomOut\",\"zoomExtends\"],i=[\"_moveUp\",\"_moveDown\",\"_moveLeft\",\"_moveRight\",\"_zoomIn\",\"_zoomOut\",\"_fit\"];this.navigationDOM.wrapper=document.createElement(\"div\"),this.navigationDOM.wrapper.className=\"vis-navigation\",this.canvas.frame.appendChild(this.navigationDOM.wrapper);for(var n=0;n<e.length;n++){this.navigationDOM[e[n]]=document.createElement(\"div\"),this.navigationDOM[e[n]].className=\"vis-button vis-\"+e[n],this.navigationDOM.wrapper.appendChild(this.navigationDOM[e[n]]);var o,r,s=new ll(this.navigationDOM[e[n]]);if(\"_fit\"===i[n])_p(s,Vt(o=this._fit).call(o,this));else _p(s,Vt(r=this.bindToRedraw).call(r,this,i[n]));this.navigationHammers.push(s)}var a=new ll(this.canvas.frame);xp(a,(function(){t._stopMovement()})),this.navigationHammers.push(a),this.iconsCreated=!0}},{key:\"bindToRedraw\",value:function(t){var e;void 0===this.boundFunctions[t]&&(this.boundFunctions[t]=Vt(e=this[t]).call(e,this),this.body.emitter.on(\"initRedraw\",this.boundFunctions[t]),this.body.emitter.emit(\"_startRendering\"))}},{key:\"unbindFromRedraw\",value:function(t){void 0!==this.boundFunctions[t]&&(this.body.emitter.off(\"initRedraw\",this.boundFunctions[t]),this.body.emitter.emit(\"_stopRendering\"),delete this.boundFunctions[t])}},{key:\"_fit\",value:function(){(new Date).valueOf()-this.touchTime>700&&(this.body.emitter.emit(\"fit\",{duration:700}),this.touchTime=(new Date).valueOf())}},{key:\"_stopMovement\",value:function(){for(var t in this.boundFunctions)Object.prototype.hasOwnProperty.call(this.boundFunctions,t)&&(this.body.emitter.off(\"initRedraw\",this.boundFunctions[t]),this.body.emitter.emit(\"_stopRendering\"));this.boundFunctions={}}},{key:\"_moveUp\",value:function(){this.body.view.translation.y+=this.options.keyboard.speed.y}},{key:\"_moveDown\",value:function(){this.body.view.translation.y-=this.options.keyboard.speed.y}},{key:\"_moveLeft\",value:function(){this.body.view.translation.x+=this.options.keyboard.speed.x}},{key:\"_moveRight\",value:function(){this.body.view.translation.x-=this.options.keyboard.speed.x}},{key:\"_zoomIn\",value:function(){var t=this.body.view.scale,e=this.body.view.scale*(1+this.options.keyboard.speed.zoom),i=this.body.view.translation,n=e/t,o=(1-n)*this.canvas.canvasViewCenter.x+i.x*n,r=(1-n)*this.canvas.canvasViewCenter.y+i.y*n;this.body.view.scale=e,this.body.view.translation={x:o,y:r},this.body.emitter.emit(\"zoom\",{direction:\"+\",scale:this.body.view.scale,pointer:null})}},{key:\"_zoomOut\",value:function(){var t=this.body.view.scale,e=this.body.view.scale/(1+this.options.keyboard.speed.zoom),i=this.body.view.translation,n=e/t,o=(1-n)*this.canvas.canvasViewCenter.x+i.x*n,r=(1-n)*this.canvas.canvasViewCenter.y+i.y*n;this.body.view.scale=e,this.body.view.translation={x:o,y:r},this.body.emitter.emit(\"zoom\",{direction:\"-\",scale:this.body.view.scale,pointer:null})}},{key:\"configureKeyboardBindings\",value:function(){var t,e,i,n,o,r,s,a,h,l,d,c,u,f,p,v,g,y,m,b,w,k,_,x,E=this;(void 0!==this.keycharm&&this.keycharm.destroy(),!0===this.options.keyboard.enabled)&&(!0===this.options.keyboard.bindToWindow?this.keycharm=Sp({container:window,preventDefault:!0}):this.keycharm=Sp({container:this.canvas.frame,preventDefault:!0}),this.keycharm.reset(),!0===this.activated&&(Vt(t=this.keycharm).call(t,\"up\",(function(){E.bindToRedraw(\"_moveUp\")}),\"keydown\"),Vt(e=this.keycharm).call(e,\"down\",(function(){E.bindToRedraw(\"_moveDown\")}),\"keydown\"),Vt(i=this.keycharm).call(i,\"left\",(function(){E.bindToRedraw(\"_moveLeft\")}),\"keydown\"),Vt(n=this.keycharm).call(n,\"right\",(function(){E.bindToRedraw(\"_moveRight\")}),\"keydown\"),Vt(o=this.keycharm).call(o,\"=\",(function(){E.bindToRedraw(\"_zoomIn\")}),\"keydown\"),Vt(r=this.keycharm).call(r,\"num+\",(function(){E.bindToRedraw(\"_zoomIn\")}),\"keydown\"),Vt(s=this.keycharm).call(s,\"num-\",(function(){E.bindToRedraw(\"_zoomOut\")}),\"keydown\"),Vt(a=this.keycharm).call(a,\"-\",(function(){E.bindToRedraw(\"_zoomOut\")}),\"keydown\"),Vt(h=this.keycharm).call(h,\"[\",(function(){E.bindToRedraw(\"_zoomOut\")}),\"keydown\"),Vt(l=this.keycharm).call(l,\"]\",(function(){E.bindToRedraw(\"_zoomIn\")}),\"keydown\"),Vt(d=this.keycharm).call(d,\"pageup\",(function(){E.bindToRedraw(\"_zoomIn\")}),\"keydown\"),Vt(c=this.keycharm).call(c,\"pagedown\",(function(){E.bindToRedraw(\"_zoomOut\")}),\"keydown\"),Vt(u=this.keycharm).call(u,\"up\",(function(){E.unbindFromRedraw(\"_moveUp\")}),\"keyup\"),Vt(f=this.keycharm).call(f,\"down\",(function(){E.unbindFromRedraw(\"_moveDown\")}),\"keyup\"),Vt(p=this.keycharm).call(p,\"left\",(function(){E.unbindFromRedraw(\"_moveLeft\")}),\"keyup\"),Vt(v=this.keycharm).call(v,\"right\",(function(){E.unbindFromRedraw(\"_moveRight\")}),\"keyup\"),Vt(g=this.keycharm).call(g,\"=\",(function(){E.unbindFromRedraw(\"_zoomIn\")}),\"keyup\"),Vt(y=this.keycharm).call(y,\"num+\",(function(){E.unbindFromRedraw(\"_zoomIn\")}),\"keyup\"),Vt(m=this.keycharm).call(m,\"num-\",(function(){E.unbindFromRedraw(\"_zoomOut\")}),\"keyup\"),Vt(b=this.keycharm).call(b,\"-\",(function(){E.unbindFromRedraw(\"_zoomOut\")}),\"keyup\"),Vt(w=this.keycharm).call(w,\"[\",(function(){E.unbindFromRedraw(\"_zoomOut\")}),\"keyup\"),Vt(k=this.keycharm).call(k,\"]\",(function(){E.unbindFromRedraw(\"_zoomIn\")}),\"keyup\"),Vt(_=this.keycharm).call(_,\"pageup\",(function(){E.unbindFromRedraw(\"_zoomIn\")}),\"keyup\"),Vt(x=this.keycharm).call(x,\"pagedown\",(function(){E.unbindFromRedraw(\"_zoomOut\")}),\"keyup\")))}}]),t}();function Pp(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return Dp(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Dp(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function Dp(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}var Ip=function(){function t(e,i,n){var o,r,s,a,h,l,d,c,u,f,p,v,g;Nn(this,t),this.body=e,this.canvas=i,this.selectionHandler=n,this.navigationHandler=new Mp(e,i),this.body.eventListeners.onTap=Vt(o=this.onTap).call(o,this),this.body.eventListeners.onTouch=Vt(r=this.onTouch).call(r,this),this.body.eventListeners.onDoubleTap=Vt(s=this.onDoubleTap).call(s,this),this.body.eventListeners.onHold=Vt(a=this.onHold).call(a,this),this.body.eventListeners.onDragStart=Vt(h=this.onDragStart).call(h,this),this.body.eventListeners.onDrag=Vt(l=this.onDrag).call(l,this),this.body.eventListeners.onDragEnd=Vt(d=this.onDragEnd).call(d,this),this.body.eventListeners.onMouseWheel=Vt(c=this.onMouseWheel).call(c,this),this.body.eventListeners.onPinch=Vt(u=this.onPinch).call(u,this),this.body.eventListeners.onMouseMove=Vt(f=this.onMouseMove).call(f,this),this.body.eventListeners.onRelease=Vt(p=this.onRelease).call(p,this),this.body.eventListeners.onContext=Vt(v=this.onContext).call(v,this),this.touchTime=0,this.drag={},this.pinch={},this.popup=void 0,this.popupObj=void 0,this.popupTimer=void 0,this.body.functions.getPointer=Vt(g=this.getPointer).call(g,this),this.options={},this.defaultOptions={dragNodes:!0,dragView:!0,hover:!1,keyboard:{enabled:!1,speed:{x:10,y:10,zoom:.02},bindToWindow:!0,autoFocus:!0},navigationButtons:!1,tooltipDelay:300,zoomView:!0,zoomSpeed:1},At(this.options,this.defaultOptions),this.bindEventListeners()}return Fn(t,[{key:\"bindEventListeners\",value:function(){var t=this;this.body.emitter.on(\"destroy\",(function(){clearTimeout(t.popupTimer),delete t.body.functions.getPointer}))}},{key:\"setOptions\",value:function(t){if(void 0!==t){Oh([\"hideEdgesOnDrag\",\"hideEdgesOnZoom\",\"hideNodesOnDrag\",\"keyboard\",\"multiselect\",\"selectable\",\"selectConnectedEdges\"],this.options,t),$h(this.options,t,\"keyboard\"),t.tooltip&&(At(this.options.tooltip,t.tooltip),t.tooltip.color&&(this.options.tooltip.color=Rh(t.tooltip.color)))}this.navigationHandler.setOptions(this.options)}},{key:\"getPointer\",value:function(t){return{x:t.x-Mh(this.canvas.frame.canvas),y:t.y-Ph(this.canvas.frame.canvas)}}},{key:\"onTouch\",value:function(t){(new Date).valueOf()-this.touchTime>50&&(this.drag.pointer=this.getPointer(t.center),this.drag.pinched=!1,this.pinch.scale=this.body.view.scale,this.touchTime=(new Date).valueOf())}},{key:\"onTap\",value:function(t){var e=this.getPointer(t.center),i=this.selectionHandler.options.multiselect&&(t.changedPointers[0].ctrlKey||t.changedPointers[0].metaKey);this.checkSelectionChanges(e,i),this.selectionHandler.commitAndEmit(e,t),this.selectionHandler.generateClickEvent(\"click\",t,e)}},{key:\"onDoubleTap\",value:function(t){var e=this.getPointer(t.center);this.selectionHandler.generateClickEvent(\"doubleClick\",t,e)}},{key:\"onHold\",value:function(t){var e=this.getPointer(t.center),i=this.selectionHandler.options.multiselect;this.checkSelectionChanges(e,i),this.selectionHandler.commitAndEmit(e,t),this.selectionHandler.generateClickEvent(\"click\",t,e),this.selectionHandler.generateClickEvent(\"hold\",t,e)}},{key:\"onRelease\",value:function(t){if((new Date).valueOf()-this.touchTime>10){var e=this.getPointer(t.center);this.selectionHandler.generateClickEvent(\"release\",t,e),this.touchTime=(new Date).valueOf()}}},{key:\"onContext\",value:function(t){var e=this.getPointer({x:t.clientX,y:t.clientY});this.selectionHandler.generateClickEvent(\"oncontext\",t,e)}},{key:\"checkSelectionChanges\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];!0===e?this.selectionHandler.selectAdditionalOnPoint(t):this.selectionHandler.selectOnPoint(t)}},{key:\"_determineDifference\",value:function(t,e){var i=function(t,e){for(var i=[],n=0;n<t.length;n++){var o=t[n];-1===Hr(e).call(e,o)&&i.push(o)}return i};return{nodes:i(t.nodes,e.nodes),edges:i(t.edges,e.edges)}}},{key:\"onDragStart\",value:function(t){if(!this.drag.dragging){void 0===this.drag.pointer&&this.onTouch(t);var e=this.selectionHandler.getNodeAt(this.drag.pointer);if(this.drag.dragging=!0,this.drag.selection=[],this.drag.translation=At({},this.body.view.translation),this.drag.nodeId=void 0,t.srcEvent.shiftKey){this.body.selectionBox.show=!0;var i=this.getPointer(t.center);this.body.selectionBox.position.start={x:this.canvas._XconvertDOMtoCanvas(i.x),y:this.canvas._YconvertDOMtoCanvas(i.y)},this.body.selectionBox.position.end={x:this.canvas._XconvertDOMtoCanvas(i.x),y:this.canvas._YconvertDOMtoCanvas(i.y)}}if(void 0!==e&&!0===this.options.dragNodes){this.drag.nodeId=e.id,!1===e.isSelected()&&(this.selectionHandler.unselectAll(),this.selectionHandler.selectObject(e)),this.selectionHandler.generateClickEvent(\"dragStart\",t,this.drag.pointer);var n,o=Pp(this.selectionHandler.getSelectedNodes());try{for(o.s();!(n=o.n()).done;){var r=n.value,s={id:r.id,node:r,x:r.x,y:r.y,xFixed:r.options.fixed.x,yFixed:r.options.fixed.y};r.options.fixed.x=!0,r.options.fixed.y=!0,this.drag.selection.push(s)}}catch(t){o.e(t)}finally{o.f()}}else this.selectionHandler.generateClickEvent(\"dragStart\",t,this.drag.pointer,void 0,!0)}}},{key:\"onDrag\",value:function(t){var e=this;if(!0!==this.drag.pinched){this.body.emitter.emit(\"unlockNode\");var i=this.getPointer(t.center),n=this.drag.selection;if(n&&n.length&&!0===this.options.dragNodes){this.selectionHandler.generateClickEvent(\"dragging\",t,i);var o=i.x-this.drag.pointer.x,r=i.y-this.drag.pointer.y;Wo(n).call(n,(function(t){var i=t.node;!1===t.xFixed&&(i.x=e.canvas._XconvertDOMtoCanvas(e.canvas._XconvertCanvasToDOM(t.x)+o)),!1===t.yFixed&&(i.y=e.canvas._YconvertDOMtoCanvas(e.canvas._YconvertCanvasToDOM(t.y)+r))})),this.body.emitter.emit(\"startSimulation\")}else{if(t.srcEvent.shiftKey){if(this.selectionHandler.generateClickEvent(\"dragging\",t,i,void 0,!0),void 0===this.drag.pointer)return void this.onDragStart(t);this.body.selectionBox.position.end={x:this.canvas._XconvertDOMtoCanvas(i.x),y:this.canvas._YconvertDOMtoCanvas(i.y)},this.body.emitter.emit(\"_requestRedraw\")}if(!0===this.options.dragView&&!t.srcEvent.shiftKey){if(this.selectionHandler.generateClickEvent(\"dragging\",t,i,void 0,!0),void 0===this.drag.pointer)return void this.onDragStart(t);var s=i.x-this.drag.pointer.x,a=i.y-this.drag.pointer.y;this.body.view.translation={x:this.drag.translation.x+s,y:this.drag.translation.y+a},this.body.emitter.emit(\"_requestRedraw\")}}}}},{key:\"onDragEnd\",value:function(t){var e=this;if(this.drag.dragging=!1,this.body.selectionBox.show){var i;this.body.selectionBox.show=!1;var n=this.body.selectionBox.position,o={minX:Math.min(n.start.x,n.end.x),minY:Math.min(n.start.y,n.end.y),maxX:Math.max(n.start.x,n.end.x),maxY:Math.max(n.start.y,n.end.y)},r=mr(i=this.body.nodeIndices).call(i,(function(t){var i=e.body.nodes[t];return i.x>=o.minX&&i.x<=o.maxX&&i.y>=o.minY&&i.y<=o.maxY}));Wo(r).call(r,(function(t){return e.selectionHandler.selectObject(e.body.nodes[t])}));var s=this.getPointer(t.center);this.selectionHandler.commitAndEmit(s,t),this.selectionHandler.generateClickEvent(\"dragEnd\",t,this.getPointer(t.center),void 0,!0),this.body.emitter.emit(\"_requestRedraw\")}else{var a=this.drag.selection;a&&a.length?(Wo(a).call(a,(function(t){t.node.options.fixed.x=t.xFixed,t.node.options.fixed.y=t.yFixed})),this.selectionHandler.generateClickEvent(\"dragEnd\",t,this.getPointer(t.center)),this.body.emitter.emit(\"startSimulation\")):(this.selectionHandler.generateClickEvent(\"dragEnd\",t,this.getPointer(t.center),void 0,!0),this.body.emitter.emit(\"_requestRedraw\"))}}},{key:\"onPinch\",value:function(t){var e=this.getPointer(t.center);this.drag.pinched=!0,void 0===this.pinch.scale&&(this.pinch.scale=1);var i=this.pinch.scale*t.scale;this.zoom(i,e)}},{key:\"zoom\",value:function(t,e){if(!0===this.options.zoomView){var i=this.body.view.scale;t<1e-5&&(t=1e-5),t>10&&(t=10);var n=void 0;void 0!==this.drag&&!0===this.drag.dragging&&(n=this.canvas.DOMtoCanvas(this.drag.pointer));var o=this.body.view.translation,r=t/i,s=(1-r)*e.x+o.x*r,a=(1-r)*e.y+o.y*r;if(this.body.view.scale=t,this.body.view.translation={x:s,y:a},null!=n){var h=this.canvas.canvasToDOM(n);this.drag.pointer.x=h.x,this.drag.pointer.y=h.y}this.body.emitter.emit(\"_requestRedraw\"),i<t?this.body.emitter.emit(\"zoom\",{direction:\"+\",scale:this.body.view.scale,pointer:e}):this.body.emitter.emit(\"zoom\",{direction:\"-\",scale:this.body.view.scale,pointer:e})}}},{key:\"onMouseWheel\",value:function(t){if(!0===this.options.zoomView){if(0!==t.deltaY){var e=this.body.view.scale;e*=1+(t.deltaY<0?1:-1)*(.1*this.options.zoomSpeed);var i=this.getPointer({x:t.clientX,y:t.clientY});this.zoom(e,i)}t.preventDefault()}}},{key:\"onMouseMove\",value:function(t){var e=this,i=this.getPointer({x:t.clientX,y:t.clientY}),n=!1;void 0!==this.popup&&(!1===this.popup.hidden&&this._checkHidePopup(i),!1===this.popup.hidden&&(n=!0,this.popup.setPosition(i.x+3,i.y-5),this.popup.show())),this.options.keyboard.autoFocus&&!1===this.options.keyboard.bindToWindow&&!0===this.options.keyboard.enabled&&this.canvas.frame.focus(),!1===n&&(void 0!==this.popupTimer&&(clearInterval(this.popupTimer),this.popupTimer=void 0),this.drag.dragging||(this.popupTimer=rs((function(){return e._checkShowPopup(i)}),this.options.tooltipDelay))),!0===this.options.hover&&this.selectionHandler.hoverObject(t,i)}},{key:\"_checkShowPopup\",value:function(t){var e=this.canvas._XconvertDOMtoCanvas(t.x),i=this.canvas._YconvertDOMtoCanvas(t.y),n={left:e,top:i,right:e,bottom:i},o=void 0===this.popupObj?void 0:this.popupObj.id,r=!1,s=\"node\";if(void 0===this.popupObj){for(var a,h=this.body.nodeIndices,l=this.body.nodes,d=[],c=0;c<h.length;c++)!0===(a=l[h[c]]).isOverlappingWith(n)&&(r=!0,void 0!==a.getTitle()&&d.push(h[c]));d.length>0&&(this.popupObj=l[d[d.length-1]],r=!0)}if(void 0===this.popupObj&&!1===r){for(var u,f=this.body.edgeIndices,p=this.body.edges,v=[],g=0;g<f.length;g++)!0===(u=p[f[g]]).isOverlappingWith(n)&&!0===u.connected&&void 0!==u.getTitle()&&v.push(f[g]);v.length>0&&(this.popupObj=p[v[v.length-1]],s=\"edge\")}void 0!==this.popupObj?this.popupObj.id!==o&&(void 0===this.popup&&(this.popup=new dl(this.canvas.frame)),this.popup.popupTargetType=s,this.popup.popupTargetId=this.popupObj.id,this.popup.setPosition(t.x+3,t.y-5),this.popup.setText(this.popupObj.getTitle()),this.popup.show(),this.body.emitter.emit(\"showPopup\",this.popupObj.id)):void 0!==this.popup&&(this.popup.hide(),this.body.emitter.emit(\"hidePopup\"))}},{key:\"_checkHidePopup\",value:function(t){var e=this.selectionHandler._pointerToPositionObject(t),i=!1;if(\"node\"===this.popup.popupTargetType){if(void 0!==this.body.nodes[this.popup.popupTargetId]&&!0===(i=this.body.nodes[this.popup.popupTargetId].isOverlappingWith(e))){var n=this.selectionHandler.getNodeAt(t);i=void 0!==n&&n.id===this.popup.popupTargetId}}else void 0===this.selectionHandler.getNodeAt(t)&&void 0!==this.body.edges[this.popup.popupTargetId]&&(i=this.body.edges[this.popup.popupTargetId].isOverlappingWith(e));!1===i&&(this.popupObj=void 0,this.popup.hide(),this.body.emitter.emit(\"hidePopup\"))}}]),t}(),Bp=Jl.getWeakData,zp=we.set,Np=we.getterFor,Ap=Gi.find,Fp=Gi.findIndex,jp=0,Rp=function(t){return t.frozen||(t.frozen=new Lp)},Lp=function(){this.entries=[]},Hp=function(t,e){return Ap(t.entries,(function(t){return t[0]===e}))};Lp.prototype={get:function(t){var e=Hp(this,t);if(e)return e[1]},has:function(t){return!!Hp(this,t)},set:function(t,e){var i=Hp(this,t);i?i[1]=e:this.entries.push([t,e])},delete:function(t){var e=Fp(this.entries,(function(e){return e[0]===t}));return~e&&this.entries.splice(e,1),!!~e}};var Wp={getConstructor:function(t,e,i,n){var o=t((function(t,r){id(t,o,e),zp(t,{type:e,id:jp++,frozen:void 0}),null!=r&&ed(r,t[n],{that:t,AS_ENTRIES:i})})),r=Np(e),s=function(t,e,i){var n=r(t),o=Bp(dt(e),!0);return!0===o?Rp(n).set(e,i):o[n.id]=i,t};return hd(o.prototype,{delete:function(t){var e=r(this);if(!w(t))return!1;var i=Bp(t);return!0===i?Rp(e).delete(t):i&&j(i,e.id)&&delete i[e.id]},has:function(t){var e=r(this);if(!w(t))return!1;var i=Bp(t);return!0===i?Rp(e).has(t):i&&j(i,e.id)}}),hd(o.prototype,i?{get:function(t){var e=r(this);if(w(t)){var i=Bp(t);return!0===i?Rp(e).get(t):i?i[e.id]:void 0}},set:function(t,e){return s(this,t,e)}}:{add:function(t){return s(this,t,!0)}}),o}};n((function(t){var e,i=we.enforce,n=!a.ActiveXObject&&\"ActiveXObject\"in a,o=Object.isExtensible,r=function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}},s=t.exports=ad(\"WeakMap\",r,Wp);if(ae&&n){e=Wp.getConstructor(r,\"WeakMap\",!0),Jl.enable();var h=s.prototype,l=h.delete,d=h.has,c=h.get,u=h.set;hd(h,{delete:function(t){if(w(t)&&!o(t)){var n=i(this);return n.frozen||(n.frozen=new e),l.call(this,t)||n.frozen.delete(t)}return l.call(this,t)},has:function(t){if(w(t)&&!o(t)){var n=i(this);return n.frozen||(n.frozen=new e),d.call(this,t)||n.frozen.has(t)}return d.call(this,t)},get:function(t){if(w(t)&&!o(t)){var n=i(this);return n.frozen||(n.frozen=new e),d.call(this,t)?c.call(this,t):n.frozen.get(t)}return c.call(this,t)},set:function(t,n){if(w(t)&&!o(t)){var r=i(this);r.frozen||(r.frozen=new e),d.call(this,t)?u.call(this,t,n):r.frozen.set(t,n)}else u.call(this,t,n);return this}})}}));var qp,Vp,Up,Yp,Xp,Gp=k.WeakMap;function Kp(t,e,i,n){if(\"a\"===i&&!n)throw new TypeError(\"Private accessor was defined without a getter\");if(\"function\"==typeof e?t!==e||!n:!e.has(t))throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");return\"m\"===i?n:\"a\"===i?n.call(t):n?n.value:e.get(t)}function $p(t,e,i,n,o){if(\"m\"===n)throw new TypeError(\"Private method is not writable\");if(\"a\"===n&&!o)throw new TypeError(\"Private accessor was defined without a setter\");if(\"function\"==typeof e?t!==e||!o:!e.has(t))throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");return\"a\"===n?o.call(t,i):o?o.value=i:e.set(t,i),i}function Zp(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return Qp(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Qp(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function Qp(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}function Jp(t,e){var i,n=new ec,o=Zp(e);try{for(o.s();!(i=o.n()).done;){var r=i.value;t.has(r)||n.add(r)}}catch(t){o.e(t)}finally{o.f()}return n}var tv=function(){function t(){Nn(this,t),qp.set(this,new ec),Vp.set(this,new ec)}return Fn(t,[{key:\"size\",get:function(){return Kp(this,Vp,\"f\").size}},{key:\"add\",value:function(){for(var t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];for(var n=0,o=e;n<o.length;n++){var r=o[n];Kp(this,Vp,\"f\").add(r)}}},{key:\"delete\",value:function(){for(var t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];for(var n=0,o=e;n<o.length;n++){var r=o[n];Kp(this,Vp,\"f\").delete(r)}}},{key:\"clear\",value:function(){Kp(this,Vp,\"f\").clear()}},{key:\"getSelection\",value:function(){return wo(Kp(this,Vp,\"f\"))}},{key:\"getChanges\",value:function(){return{added:wo(Jp(Kp(this,qp,\"f\"),Kp(this,Vp,\"f\"))),deleted:wo(Jp(Kp(this,Vp,\"f\"),Kp(this,qp,\"f\"))),previous:wo(new ec(Kp(this,qp,\"f\"))),current:wo(new ec(Kp(this,Vp,\"f\")))}}},{key:\"commit\",value:function(){var t=this.getChanges();$p(this,qp,Kp(this,Vp,\"f\"),\"f\"),$p(this,Vp,new ec(Kp(this,qp,\"f\")),\"f\");var e,i=Zp(t.added);try{for(i.s();!(e=i.n()).done;){e.value.select()}}catch(t){i.e(t)}finally{i.f()}var n,o=Zp(t.deleted);try{for(o.s();!(n=o.n()).done;){n.value.unselect()}}catch(t){o.e(t)}finally{o.f()}return t}}]),t}();qp=new Gp,Vp=new Gp;var ev=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:function(){};Nn(this,t),Up.set(this,new tv),Yp.set(this,new tv),Xp.set(this,void 0),$p(this,Xp,e,\"f\")}return Fn(t,[{key:\"sizeNodes\",get:function(){return Kp(this,Up,\"f\").size}},{key:\"sizeEdges\",get:function(){return Kp(this,Yp,\"f\").size}},{key:\"getNodes\",value:function(){return Kp(this,Up,\"f\").getSelection()}},{key:\"getEdges\",value:function(){return Kp(this,Yp,\"f\").getSelection()}},{key:\"addNodes\",value:function(){var t;(t=Kp(this,Up,\"f\")).add.apply(t,arguments)}},{key:\"addEdges\",value:function(){var t;(t=Kp(this,Yp,\"f\")).add.apply(t,arguments)}},{key:\"deleteNodes\",value:function(t){Kp(this,Up,\"f\").delete(t)}},{key:\"deleteEdges\",value:function(t){Kp(this,Yp,\"f\").delete(t)}},{key:\"clear\",value:function(){Kp(this,Up,\"f\").clear(),Kp(this,Yp,\"f\").clear()}},{key:\"commit\",value:function(){for(var t,e,i={nodes:Kp(this,Up,\"f\").commit(),edges:Kp(this,Yp,\"f\").commit()},n=arguments.length,o=new Array(n),r=0;r<n;r++)o[r]=arguments[r];return(t=Kp(this,Xp,\"f\")).call.apply(t,Eo(e=[this,i]).call(e,o)),i}}]),t}();function iv(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return nv(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return nv(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function nv(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}Up=new Gp,Yp=new Gp,Xp=new Gp;var ov=function(){function t(e,i){var n=this;Nn(this,t),this.body=e,this.canvas=i,this._selectionAccumulator=new ev,this.hoverObj={nodes:{},edges:{}},this.options={},this.defaultOptions={multiselect:!1,selectable:!0,selectConnectedEdges:!0,hoverConnectedEdges:!0},At(this.options,this.defaultOptions),this.body.emitter.on(\"_dataChanged\",(function(){n.updateSelection()}))}return Fn(t,[{key:\"setOptions\",value:function(t){if(void 0!==t){Eh([\"multiselect\",\"hoverConnectedEdges\",\"selectable\",\"selectConnectedEdges\"],this.options,t)}}},{key:\"selectOnPoint\",value:function(t){var e=!1;if(!0===this.options.selectable){var i=this.getNodeAt(t)||this.getEdgeAt(t);this.unselectAll(),void 0!==i&&(e=this.selectObject(i)),this.body.emitter.emit(\"_requestRedraw\")}return e}},{key:\"selectAdditionalOnPoint\",value:function(t){var e=!1;if(!0===this.options.selectable){var i=this.getNodeAt(t)||this.getEdgeAt(t);void 0!==i&&(e=!0,!0===i.isSelected()?this.deselectObject(i):this.selectObject(i),this.body.emitter.emit(\"_requestRedraw\"))}return e}},{key:\"_initBaseEvent\",value:function(t,e){var i={};return i.pointer={DOM:{x:e.x,y:e.y},canvas:this.canvas.DOMtoCanvas(e)},i.event=t,i}},{key:\"generateClickEvent\",value:function(t,e,i,n){var o=arguments.length>4&&void 0!==arguments[4]&&arguments[4],r=this._initBaseEvent(e,i);if(!0===o)r.nodes=[],r.edges=[];else{var s=this.getSelection();r.nodes=s.nodes,r.edges=s.edges}void 0!==n&&(r.previousSelection=n),\"click\"==t&&(r.items=this.getClickedItems(i)),void 0!==e.controlEdge&&(r.controlEdge=e.controlEdge),this.body.emitter.emit(t,r)}},{key:\"selectObject\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.options.selectConnectedEdges;if(void 0!==t){if(t instanceof cf){var i;if(!0===e)(i=this._selectionAccumulator).addEdges.apply(i,wo(t.edges));this._selectionAccumulator.addNodes(t)}else this._selectionAccumulator.addEdges(t);return!0}return!1}},{key:\"deselectObject\",value:function(t){!0===t.isSelected()&&(t.selected=!1,this._removeFromSelection(t))}},{key:\"_getAllNodesOverlappingWith\",value:function(t){for(var e=[],i=this.body.nodes,n=0;n<this.body.nodeIndices.length;n++){var o=this.body.nodeIndices[n];i[o].isOverlappingWith(t)&&e.push(o)}return e}},{key:\"_pointerToPositionObject\",value:function(t){var e=this.canvas.DOMtoCanvas(t);return{left:e.x-1,top:e.y+1,right:e.x+1,bottom:e.y-1}}},{key:\"getNodeAt\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this._pointerToPositionObject(t),n=this._getAllNodesOverlappingWith(i);return n.length>0?!0===e?this.body.nodes[n[n.length-1]]:n[n.length-1]:void 0}},{key:\"_getEdgesOverlappingWith\",value:function(t,e){for(var i=this.body.edges,n=0;n<this.body.edgeIndices.length;n++){var o=this.body.edgeIndices[n];i[o].isOverlappingWith(t)&&e.push(o)}}},{key:\"_getAllEdgesOverlappingWith\",value:function(t){var e=[];return this._getEdgesOverlappingWith(t,e),e}},{key:\"getEdgeAt\",value:function(t){for(var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this.canvas.DOMtoCanvas(t),n=10,o=null,r=this.body.edges,s=0;s<this.body.edgeIndices.length;s++){var a=this.body.edgeIndices[s],h=r[a];if(h.connected){var l=h.from.x,d=h.from.y,c=h.to.x,u=h.to.y,f=h.edgeType.getDistanceToEdge(l,d,c,u,i.x,i.y);f<n&&(o=a,n=f)}}return null!==o?!0===e?this.body.edges[o]:o:void 0}},{key:\"_addToHover\",value:function(t){t instanceof cf?this.hoverObj.nodes[t.id]=t:this.hoverObj.edges[t.id]=t}},{key:\"_removeFromSelection\",value:function(t){var e;t instanceof cf?(this._selectionAccumulator.deleteNodes(t),(e=this._selectionAccumulator).deleteEdges.apply(e,wo(t.edges))):this._selectionAccumulator.deleteEdges(t)}},{key:\"unselectAll\",value:function(){this._selectionAccumulator.clear()}},{key:\"getSelectedNodeCount\",value:function(){return this._selectionAccumulator.sizeNodes}},{key:\"getSelectedEdgeCount\",value:function(){return this._selectionAccumulator.sizeEdges}},{key:\"_hoverConnectedEdges\",value:function(t){for(var e=0;e<t.edges.length;e++){var i=t.edges[e];i.hover=!0,this._addToHover(i)}}},{key:\"emitBlurEvent\",value:function(t,e,i){var n=this._initBaseEvent(t,e);!0===i.hover&&(i.hover=!1,i instanceof cf?(n.node=i.id,this.body.emitter.emit(\"blurNode\",n)):(n.edge=i.id,this.body.emitter.emit(\"blurEdge\",n)))}},{key:\"emitHoverEvent\",value:function(t,e,i){var n=this._initBaseEvent(t,e),o=!1;return!1===i.hover&&(i.hover=!0,this._addToHover(i),o=!0,i instanceof cf?(n.node=i.id,this.body.emitter.emit(\"hoverNode\",n)):(n.edge=i.id,this.body.emitter.emit(\"hoverEdge\",n))),o}},{key:\"hoverObject\",value:function(t,e){var i=this.getNodeAt(e);void 0===i&&(i=this.getEdgeAt(e));var n=!1;for(var o in this.hoverObj.nodes)Object.prototype.hasOwnProperty.call(this.hoverObj.nodes,o)&&(void 0===i||i instanceof cf&&i.id!=o||i instanceof ep)&&(this.emitBlurEvent(t,e,this.hoverObj.nodes[o]),delete this.hoverObj.nodes[o],n=!0);for(var r in this.hoverObj.edges)Object.prototype.hasOwnProperty.call(this.hoverObj.edges,r)&&(!0===n?(this.hoverObj.edges[r].hover=!1,delete this.hoverObj.edges[r]):(void 0===i||i instanceof ep&&i.id!=r||i instanceof cf&&!i.hover)&&(this.emitBlurEvent(t,e,this.hoverObj.edges[r]),delete this.hoverObj.edges[r],n=!0));if(void 0!==i){var s=zo(this.hoverObj.edges).length,a=zo(this.hoverObj.nodes).length;(n||i instanceof ep&&0===s&&0===a||i instanceof cf&&0===s&&0===a)&&(n=this.emitHoverEvent(t,e,i)),i instanceof cf&&!0===this.options.hoverConnectedEdges&&this._hoverConnectedEdges(i)}!0===n&&this.body.emitter.emit(\"_requestRedraw\")}},{key:\"commitWithoutEmitting\",value:function(){this._selectionAccumulator.commit()}},{key:\"commitAndEmit\",value:function(t,e){var i=!1,n=this._selectionAccumulator.commit(),o={nodes:n.nodes.previous,edges:n.edges.previous};n.edges.deleted.length>0&&(this.generateClickEvent(\"deselectEdge\",e,t,o),i=!0),n.nodes.deleted.length>0&&(this.generateClickEvent(\"deselectNode\",e,t,o),i=!0),n.nodes.added.length>0&&(this.generateClickEvent(\"selectNode\",e,t),i=!0),n.edges.added.length>0&&(this.generateClickEvent(\"selectEdge\",e,t),i=!0),!0===i&&this.generateClickEvent(\"select\",e,t)}},{key:\"getSelection\",value:function(){return{nodes:this.getSelectedNodeIds(),edges:this.getSelectedEdgeIds()}}},{key:\"getSelectedNodes\",value:function(){return this._selectionAccumulator.getNodes()}},{key:\"getSelectedEdges\",value:function(){return this._selectionAccumulator.getEdges()}},{key:\"getSelectedNodeIds\",value:function(){var t;return Io(t=this._selectionAccumulator.getNodes()).call(t,(function(t){return t.id}))}},{key:\"getSelectedEdgeIds\",value:function(){var t;return Io(t=this._selectionAccumulator.getEdges()).call(t,(function(t){return t.id}))}},{key:\"setSelection\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!t||!t.nodes&&!t.edges)throw new TypeError(\"Selection must be an object with nodes and/or edges properties\");if((e.unselectAll||void 0===e.unselectAll)&&this.unselectAll(),t.nodes){var i,n=iv(t.nodes);try{for(n.s();!(i=n.n()).done;){var o=i.value,r=this.body.nodes[o];if(!r)throw new RangeError('Node with id \"'+o+'\" not found');this.selectObject(r,e.highlightEdges)}}catch(t){n.e(t)}finally{n.f()}}if(t.edges){var s,a=iv(t.edges);try{for(a.s();!(s=a.n()).done;){var h=s.value,l=this.body.edges[h];if(!l)throw new RangeError('Edge with id \"'+h+'\" not found');this.selectObject(l)}}catch(t){a.e(t)}finally{a.f()}}this.body.emitter.emit(\"_requestRedraw\"),this._selectionAccumulator.commit()}},{key:\"selectNodes\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(!t||void 0===t.length)throw\"Selection must be an array with ids\";this.setSelection({nodes:t},{highlightEdges:e})}},{key:\"selectEdges\",value:function(t){if(!t||void 0===t.length)throw\"Selection must be an array with ids\";this.setSelection({edges:t})}},{key:\"updateSelection\",value:function(){for(var t in this._selectionAccumulator.getNodes())Object.prototype.hasOwnProperty.call(this.body.nodes,t.id)||this._selectionAccumulator.deleteNodes(t);for(var e in this._selectionAccumulator.getEdges())Object.prototype.hasOwnProperty.call(this.body.edges,e.id)||this._selectionAccumulator.deleteEdges(e)}},{key:\"getClickedItems\",value:function(t){for(var e=this.canvas.DOMtoCanvas(t),i=[],n=this.body.nodeIndices,o=this.body.nodes,r=n.length-1;r>=0;r--){var s=o[n[r]].getItemsOnPoint(e);i.push.apply(i,s)}for(var a=this.body.edgeIndices,h=this.body.edges,l=a.length-1;l>=0;l--){var d=h[a[l]].getItemsOnPoint(e);i.push.apply(i,d)}return i}}]),t}(),rv=n((function(t,e){!function(t){function e(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}t.__esModule=!0,t.sort=v;var i=32,n=7,o=256,r=[1,10,100,1e3,1e4,1e5,1e6,1e7,1e8,1e9];function s(t){return t<1e5?t<100?t<10?0:1:t<1e4?t<1e3?2:3:4:t<1e7?t<1e6?5:6:t<1e9?t<1e8?7:8:9}function a(t,e){if(t===e)return 0;if(~~t===t&&~~e===e){if(0===t||0===e)return t<e?-1:1;if(t<0||e<0){if(e>=0)return-1;if(t>=0)return 1;t=-t,e=-e}var i=s(t),n=s(e),o=0;return i<n?(t*=r[n-i-1],e/=10,o=-1):i>n&&(e*=r[i-n-1],t/=10,o=1),t===e?o:t<e?-1:1}var a=String(t),h=String(e);return a===h?0:a<h?-1:1}function h(t){for(var e=0;t>=i;)e|=1&t,t>>=1;return t+e}function l(t,e,i,n){var o=e+1;if(o===i)return 1;if(n(t[o++],t[e])<0){for(;o<i&&n(t[o],t[o-1])<0;)o++;d(t,e,o)}else for(;o<i&&n(t[o],t[o-1])>=0;)o++;return o-e}function d(t,e,i){for(i--;e<i;){var n=t[e];t[e++]=t[i],t[i--]=n}}function c(t,e,i,n,o){for(n===e&&n++;n<i;n++){for(var r=t[n],s=e,a=n;s<a;){var h=s+a>>>1;o(r,t[h])<0?a=h:s=h+1}var l=n-s;switch(l){case 3:t[s+3]=t[s+2];case 2:t[s+2]=t[s+1];case 1:t[s+1]=t[s];break;default:for(;l>0;)t[s+l]=t[s+l-1],l--}t[s]=r}}function u(t,e,i,n,o,r){var s=0,a=0,h=1;if(r(t,e[i+o])>0){for(a=n-o;h<a&&r(t,e[i+o+h])>0;)s=h,(h=1+(h<<1))<=0&&(h=a);h>a&&(h=a),s+=o,h+=o}else{for(a=o+1;h<a&&r(t,e[i+o-h])<=0;)s=h,(h=1+(h<<1))<=0&&(h=a);h>a&&(h=a);var l=s;s=o-h,h=o-l}for(s++;s<h;){var d=s+(h-s>>>1);r(t,e[i+d])>0?s=d+1:h=d}return h}function f(t,e,i,n,o,r){var s=0,a=0,h=1;if(r(t,e[i+o])<0){for(a=o+1;h<a&&r(t,e[i+o-h])<0;)s=h,(h=1+(h<<1))<=0&&(h=a);h>a&&(h=a);var l=s;s=o-h,h=o-l}else{for(a=n-o;h<a&&r(t,e[i+o+h])>=0;)s=h,(h=1+(h<<1))<=0&&(h=a);h>a&&(h=a),s+=o,h+=o}for(s++;s<h;){var d=s+(h-s>>>1);r(t,e[i+d])<0?h=d:s=d+1}return h}var p=function(){function t(i,r){e(this,t),this.array=null,this.compare=null,this.minGallop=n,this.length=0,this.tmpStorageLength=o,this.stackLength=0,this.runStart=null,this.runLength=null,this.stackSize=0,this.array=i,this.compare=r,this.length=i.length,this.length<2*o&&(this.tmpStorageLength=this.length>>>1),this.tmp=new Array(this.tmpStorageLength),this.stackLength=this.length<120?5:this.length<1542?10:this.length<119151?19:40,this.runStart=new Array(this.stackLength),this.runLength=new Array(this.stackLength)}return t.prototype.pushRun=function(t,e){this.runStart[this.stackSize]=t,this.runLength[this.stackSize]=e,this.stackSize+=1},t.prototype.mergeRuns=function(){for(;this.stackSize>1;){var t=this.stackSize-2;if(t>=1&&this.runLength[t-1]<=this.runLength[t]+this.runLength[t+1]||t>=2&&this.runLength[t-2]<=this.runLength[t]+this.runLength[t-1])this.runLength[t-1]<this.runLength[t+1]&&t--;else if(this.runLength[t]>this.runLength[t+1])break;this.mergeAt(t)}},t.prototype.forceMergeRuns=function(){for(;this.stackSize>1;){var t=this.stackSize-2;t>0&&this.runLength[t-1]<this.runLength[t+1]&&t--,this.mergeAt(t)}},t.prototype.mergeAt=function(t){var e=this.compare,i=this.array,n=this.runStart[t],o=this.runLength[t],r=this.runStart[t+1],s=this.runLength[t+1];this.runLength[t]=o+s,t===this.stackSize-3&&(this.runStart[t+1]=this.runStart[t+2],this.runLength[t+1]=this.runLength[t+2]),this.stackSize--;var a=f(i[r],i,n,o,0,e);n+=a,0!=(o-=a)&&0!==(s=u(i[n+o-1],i,r,s,s-1,e))&&(o<=s?this.mergeLow(n,o,r,s):this.mergeHigh(n,o,r,s))},t.prototype.mergeLow=function(t,e,i,o){var r=this.compare,s=this.array,a=this.tmp,h=0;for(h=0;h<e;h++)a[h]=s[t+h];var l=0,d=i,c=t;if(s[c++]=s[d++],0!=--o)if(1!==e){for(var p=this.minGallop;;){var v=0,g=0,y=!1;do{if(r(s[d],a[l])<0){if(s[c++]=s[d++],g++,v=0,0==--o){y=!0;break}}else if(s[c++]=a[l++],v++,g=0,1==--e){y=!0;break}}while((v|g)<p);if(y)break;do{if(0!==(v=f(s[d],a,l,e,0,r))){for(h=0;h<v;h++)s[c+h]=a[l+h];if(c+=v,l+=v,(e-=v)<=1){y=!0;break}}if(s[c++]=s[d++],0==--o){y=!0;break}if(0!==(g=u(a[l],s,d,o,0,r))){for(h=0;h<g;h++)s[c+h]=s[d+h];if(c+=g,d+=g,0==(o-=g)){y=!0;break}}if(s[c++]=a[l++],1==--e){y=!0;break}p--}while(v>=n||g>=n);if(y)break;p<0&&(p=0),p+=2}if(this.minGallop=p,p<1&&(this.minGallop=1),1===e){for(h=0;h<o;h++)s[c+h]=s[d+h];s[c+o]=a[l]}else{if(0===e)throw new Error(\"mergeLow preconditions were not respected\");for(h=0;h<e;h++)s[c+h]=a[l+h]}}else{for(h=0;h<o;h++)s[c+h]=s[d+h];s[c+o]=a[l]}else for(h=0;h<e;h++)s[c+h]=a[l+h]},t.prototype.mergeHigh=function(t,e,i,o){var r=this.compare,s=this.array,a=this.tmp,h=0;for(h=0;h<o;h++)a[h]=s[i+h];var l=t+e-1,d=o-1,c=i+o-1,p=0,v=0;if(s[c--]=s[l--],0!=--e)if(1!==o){for(var g=this.minGallop;;){var y=0,m=0,b=!1;do{if(r(a[d],s[l])<0){if(s[c--]=s[l--],y++,m=0,0==--e){b=!0;break}}else if(s[c--]=a[d--],m++,y=0,1==--o){b=!0;break}}while((y|m)<g);if(b)break;do{if(0!=(y=e-f(a[d],s,t,e,e-1,r))){for(e-=y,v=1+(c-=y),p=1+(l-=y),h=y-1;h>=0;h--)s[v+h]=s[p+h];if(0===e){b=!0;break}}if(s[c--]=a[d--],1==--o){b=!0;break}if(0!=(m=o-u(s[l],a,0,o,o-1,r))){for(o-=m,v=1+(c-=m),p=1+(d-=m),h=0;h<m;h++)s[v+h]=a[p+h];if(o<=1){b=!0;break}}if(s[c--]=s[l--],0==--e){b=!0;break}g--}while(y>=n||m>=n);if(b)break;g<0&&(g=0),g+=2}if(this.minGallop=g,g<1&&(this.minGallop=1),1===o){for(v=1+(c-=e),p=1+(l-=e),h=e-1;h>=0;h--)s[v+h]=s[p+h];s[c]=a[d]}else{if(0===o)throw new Error(\"mergeHigh preconditions were not respected\");for(p=c-(o-1),h=0;h<o;h++)s[p+h]=a[h]}}else{for(v=1+(c-=e),p=1+(l-=e),h=e-1;h>=0;h--)s[v+h]=s[p+h];s[c]=a[d]}else for(p=c-(o-1),h=0;h<o;h++)s[p+h]=a[h]},t}();function v(t,e,n,o){if(!Array.isArray(t))throw new TypeError(\"Can only sort arrays\");e?\"function\"!=typeof e&&(o=n,n=e,e=a):e=a,n||(n=0),o||(o=t.length);var r=o-n;if(!(r<2)){var s=0;if(r<i)c(t,n,o,n+(s=l(t,n,o,e)),e);else{var d=new p(t,e),u=h(r);do{if((s=l(t,n,o,e))<u){var f=r;f>u&&(f=u),c(t,n,n+f,n+s,e),s=f}d.pushRun(n,s),d.mergeRuns(),r-=s,n+=s}while(0!==r);d.forceMergeRuns()}}}}(e)}));i(rv);var sv=rv,av=sv.sort;function hv(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var lv=function(){function t(){Nn(this,t)}return Fn(t,[{key:\"abstract\",value:function(){throw new Error(\"Can't instantiate abstract class!\")}},{key:\"fake_use\",value:function(){}},{key:\"curveType\",value:function(){return this.abstract()}},{key:\"getPosition\",value:function(t){return this.fake_use(t),this.abstract()}},{key:\"setPosition\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;this.fake_use(t,e,i),this.abstract()}},{key:\"getTreeSize\",value:function(t){return this.fake_use(t),this.abstract()}},{key:\"sort\",value:function(t){this.fake_use(t),this.abstract()}},{key:\"fix\",value:function(t,e){this.fake_use(t,e),this.abstract()}},{key:\"shift\",value:function(t,e){this.fake_use(t,e),this.abstract()}}]),t}(),dv=function(t){Ad(i,t);var e=hv(i);function i(t){var n;return Nn(this,i),(n=e.call(this)).layout=t,n}return Fn(i,[{key:\"curveType\",value:function(){return\"horizontal\"}},{key:\"getPosition\",value:function(t){return t.x}},{key:\"setPosition\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;void 0!==i&&this.layout.hierarchical.addToOrdering(t,i),t.x=e}},{key:\"getTreeSize\",value:function(t){var e=this.layout.hierarchical.getTreeSize(this.layout.body.nodes,t);return{min:e.min_x,max:e.max_x}}},{key:\"sort\",value:function(t){av(t,(function(t,e){return t.x-e.x}))}},{key:\"fix\",value:function(t,e){t.y=this.layout.options.hierarchical.levelSeparation*e,t.options.fixed.y=!0}},{key:\"shift\",value:function(t,e){this.layout.body.nodes[t].x+=e}}]),i}(lv),cv=function(t){Ad(i,t);var e=hv(i);function i(t){var n;return Nn(this,i),(n=e.call(this)).layout=t,n}return Fn(i,[{key:\"curveType\",value:function(){return\"vertical\"}},{key:\"getPosition\",value:function(t){return t.y}},{key:\"setPosition\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;void 0!==i&&this.layout.hierarchical.addToOrdering(t,i),t.y=e}},{key:\"getTreeSize\",value:function(t){var e=this.layout.hierarchical.getTreeSize(this.layout.body.nodes,t);return{min:e.min_y,max:e.max_y}}},{key:\"sort\",value:function(t){av(t,(function(t,e){return t.y-e.y}))}},{key:\"fix\",value:function(t,e){t.x=this.layout.options.hierarchical.levelSeparation*e,t.options.fixed.x=!0}},{key:\"shift\",value:function(t,e){this.layout.body.nodes[t].y+=e}}]),i}(lv),uv=Gi.every,fv=Ao(\"every\");gt({target:\"Array\",proto:!0,forced:!fv},{every:function(t){return uv(this,t,arguments.length>1?arguments[1]:void 0)}});var pv=Ht(\"Array\").every,vv=Array.prototype,gv=function(t){var e=t.every;return t===vv||t instanceof Array&&e===vv.every?pv:e};function yv(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return mv(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return mv(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function mv(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}function bv(t,e){var i=new ec;return Wo(t).call(t,(function(t){var e;Wo(e=t.edges).call(e,(function(t){t.connected&&i.add(t)}))})),Wo(i).call(i,(function(t){var i=t.from.id,n=t.to.id;null==e[i]&&(e[i]=0),(null==e[n]||e[i]>=e[n])&&(e[n]=e[i]+1)})),e}function wv(t,e,i,n){var o,r,s=Gr(null),a=Kd(o=wo(Dc(n).call(n))).call(o,(function(t,e){return t+1+e.edges.length}),0),h=i+\"Id\",l=\"to\"===i?1:-1,d=yv(n);try{var c=function(){var o=uo(r.value,2),d=o[0],c=o[1];if(!n.has(d)||!t(c))return\"continue\";s[d]=0;for(var u=[c],f=0,p=void 0,v=function(){var t,o;if(!n.has(d))return\"continue\";var r=s[p.id]+l;if(Wo(t=mr(o=p.edges).call(o,(function(t){return t.connected&&t.to!==t.from&&t[i]!==p&&n.has(t.toId)&&n.has(t.fromId)}))).call(t,(function(t){var n=t[h],o=s[n];(null==o||e(r,o))&&(s[n]=r,u.push(t[i]))})),f>a)return{v:{v:bv(n,s)}};++f};p=u.pop();){var g=v();if(\"continue\"!==g&&\"object\"===go(g))return g.v}};for(d.s();!(r=d.n()).done;){var u=c();if(\"continue\"!==u&&\"object\"===go(u))return u.v}}catch(t){d.e(t)}finally{d.f()}return s}var kv=function(){function t(){Nn(this,t),this.childrenReference={},this.parentReference={},this.trees={},this.distributionOrdering={},this.levels={},this.distributionIndex={},this.isTree=!1,this.treeIndex=-1}return Fn(t,[{key:\"addRelation\",value:function(t,e){void 0===this.childrenReference[t]&&(this.childrenReference[t]=[]),this.childrenReference[t].push(e),void 0===this.parentReference[e]&&(this.parentReference[e]=[]),this.parentReference[e].push(t)}},{key:\"checkIfTree\",value:function(){for(var t in this.parentReference)if(this.parentReference[t].length>1)return void(this.isTree=!1);this.isTree=!0}},{key:\"numTrees\",value:function(){return this.treeIndex+1}},{key:\"setTreeIndex\",value:function(t,e){void 0!==e&&void 0===this.trees[t.id]&&(this.trees[t.id]=e,this.treeIndex=Math.max(e,this.treeIndex))}},{key:\"ensureLevel\",value:function(t){void 0===this.levels[t]&&(this.levels[t]=0)}},{key:\"getMaxLevel\",value:function(t){var e=this,i={};return function t(n){if(void 0!==i[n])return i[n];var o=e.levels[n];if(e.childrenReference[n]){var r=e.childrenReference[n];if(r.length>0)for(var s=0;s<r.length;s++)o=Math.max(o,t(r[s]))}return i[n]=o,o}(t)}},{key:\"levelDownstream\",value:function(t,e){void 0===this.levels[e.id]&&(void 0===this.levels[t.id]&&(this.levels[t.id]=0),this.levels[e.id]=this.levels[t.id]+1)}},{key:\"setMinLevelToZero\",value:function(t){var e=1e9;for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&void 0!==this.levels[i]&&(e=Math.min(this.levels[i],e));for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&void 0!==this.levels[n]&&(this.levels[n]-=e)}},{key:\"getTreeSize\",value:function(t,e){var i=1e9,n=-1e9,o=1e9,r=-1e9;for(var s in this.trees)if(Object.prototype.hasOwnProperty.call(this.trees,s)&&this.trees[s]===e){var a=t[s];i=Math.min(a.x,i),n=Math.max(a.x,n),o=Math.min(a.y,o),r=Math.max(a.y,r)}return{min_x:i,max_x:n,min_y:o,max_y:r}}},{key:\"hasSameParent\",value:function(t,e){var i=this.parentReference[t.id],n=this.parentReference[e.id];if(void 0===i||void 0===n)return!1;for(var o=0;o<i.length;o++)for(var r=0;r<n.length;r++)if(i[o]==n[r])return!0;return!1}},{key:\"inSameSubNetwork\",value:function(t,e){return this.trees[t.id]===this.trees[e.id]}},{key:\"getLevels\",value:function(){return zo(this.distributionOrdering)}},{key:\"addToOrdering\",value:function(t,e){void 0===this.distributionOrdering[e]&&(this.distributionOrdering[e]=[]);var i=!1,n=this.distributionOrdering[e];for(var o in n)if(n[o]===t){i=!0;break}i||(this.distributionOrdering[e].push(t),this.distributionIndex[t.id]=this.distributionOrdering[e].length-1)}}]),t}(),_v=function(){function t(e){Nn(this,t),this.body=e,this._resetRNG(Math.random()+\":\"+No()),this.setPhysics=!1,this.options={},this.optionsBackup={physics:{}},this.defaultOptions={randomSeed:void 0,improvedLayout:!0,clusterThreshold:150,hierarchical:{enabled:!1,levelSeparation:150,nodeSpacing:100,treeSpacing:200,blockShifting:!0,edgeMinimization:!0,parentCentralization:!0,direction:\"UD\",sortMethod:\"hubsize\"}},At(this.options,this.defaultOptions),this.bindEventListeners()}return Fn(t,[{key:\"bindEventListeners\",value:function(){var t=this;this.body.emitter.on(\"_dataChanged\",(function(){t.setupHierarchicalLayout()})),this.body.emitter.on(\"_dataLoaded\",(function(){t.layoutNetwork()})),this.body.emitter.on(\"_resetHierarchicalLayout\",(function(){t.setupHierarchicalLayout()})),this.body.emitter.on(\"_adjustEdgesForHierarchicalLayout\",(function(){if(!0===t.options.hierarchical.enabled){var e=t.direction.curveType();t.body.emitter.emit(\"_forceDisableDynamicCurves\",e,!1)}}))}},{key:\"setOptions\",value:function(t,e){if(void 0!==t){var i=this.options.hierarchical,n=i.enabled;if(Eh([\"randomSeed\",\"improvedLayout\",\"clusterThreshold\"],this.options,t),$h(this.options,t,\"hierarchical\"),void 0!==t.randomSeed&&this._resetRNG(t.randomSeed),!0===i.enabled)return!0===n&&this.body.emitter.emit(\"refresh\",!0),\"RL\"===i.direction||\"DU\"===i.direction?i.levelSeparation>0&&(i.levelSeparation*=-1):i.levelSeparation<0&&(i.levelSeparation*=-1),this.setDirectionStrategy(),this.body.emitter.emit(\"_resetHierarchicalLayout\"),this.adaptAllOptionsForHierarchicalLayout(e);if(!0===n)return this.body.emitter.emit(\"refresh\"),Ch(e,this.optionsBackup)}return e}},{key:\"_resetRNG\",value:function(t){this.initialRandomSeed=t,this._rng=ah(this.initialRandomSeed)}},{key:\"adaptAllOptionsForHierarchicalLayout\",value:function(t){if(!0===this.options.hierarchical.enabled){var e=this.optionsBackup.physics;void 0===t.physics||!0===t.physics?(t.physics={enabled:void 0===e.enabled||e.enabled,solver:\"hierarchicalRepulsion\"},e.enabled=void 0===e.enabled||e.enabled,e.solver=e.solver||\"barnesHut\"):\"object\"===go(t.physics)?(e.enabled=void 0===t.physics.enabled||t.physics.enabled,e.solver=t.physics.solver||\"barnesHut\",t.physics.solver=\"hierarchicalRepulsion\"):!1!==t.physics&&(e.solver=\"barnesHut\",t.physics={solver:\"hierarchicalRepulsion\"});var i=this.direction.curveType();if(void 0===t.edges)this.optionsBackup.edges={smooth:{enabled:!0,type:\"dynamic\"}},t.edges={smooth:!1};else if(void 0===t.edges.smooth)this.optionsBackup.edges={smooth:{enabled:!0,type:\"dynamic\"}},t.edges.smooth=!1;else if(\"boolean\"==typeof t.edges.smooth)this.optionsBackup.edges={smooth:t.edges.smooth},t.edges.smooth={enabled:t.edges.smooth,type:i};else{var n=t.edges.smooth;void 0!==n.type&&\"dynamic\"!==n.type&&(i=n.type),this.optionsBackup.edges={smooth:{enabled:void 0===n.enabled||n.enabled,type:void 0===n.type?\"dynamic\":n.type,roundness:void 0===n.roundness?.5:n.roundness,forceDirection:void 0!==n.forceDirection&&n.forceDirection}},t.edges.smooth={enabled:void 0===n.enabled||n.enabled,type:i,roundness:void 0===n.roundness?.5:n.roundness,forceDirection:void 0!==n.forceDirection&&n.forceDirection}}this.body.emitter.emit(\"_forceDisableDynamicCurves\",i)}return t}},{key:\"positionInitially\",value:function(t){if(!0!==this.options.hierarchical.enabled){this._resetRNG(this.initialRandomSeed);for(var e=t.length+50,i=0;i<t.length;i++){var n=t[i],o=2*Math.PI*this._rng();void 0===n.x&&(n.x=e*Math.cos(o)),void 0===n.y&&(n.y=e*Math.sin(o))}}}},{key:\"layoutNetwork\",value:function(){if(!0!==this.options.hierarchical.enabled&&!0===this.options.improvedLayout){for(var t=this.body.nodeIndices,e=0,i=0;i<t.length;i++){!0===this.body.nodes[t[i]].predefinedPosition&&(e+=1)}if(e<.5*t.length){var n=0,o=this.options.clusterThreshold,r={clusterNodeProperties:{shape:\"ellipse\",label:\"\",group:\"\",font:{multi:!1}},clusterEdgeProperties:{label:\"\",font:{multi:!1},smooth:{enabled:!1}}};if(t.length>o){for(var s=t.length;t.length>o&&n<=10;){n+=1;var a=t.length;if(n%3==0?this.body.modules.clustering.clusterBridges(r):this.body.modules.clustering.clusterOutliers(r),a==t.length&&n%3!=0)return this._declusterAll(),this.body.emitter.emit(\"_layoutFailed\"),void console.info(\"This network could not be positioned by this version of the improved layout algorithm. Please disable improvedLayout for better performance.\")}this.body.modules.kamadaKawai.setOptions({springLength:Math.max(150,2*s)})}n>10&&console.info(\"The clustering didn't succeed within the amount of interations allowed, progressing with partial result.\"),this.body.modules.kamadaKawai.solve(t,this.body.edgeIndices,!0),this._shiftToCenter();for(var h=0;h<t.length;h++){var l=this.body.nodes[t[h]];!1===l.predefinedPosition&&(l.x+=70*(.5-this._rng()),l.y+=70*(.5-this._rng()))}this._declusterAll(),this.body.emitter.emit(\"_repositionBezierNodes\")}}}},{key:\"_shiftToCenter\",value:function(){for(var t=pp.getRangeCore(this.body.nodes,this.body.nodeIndices),e=pp.findCenter(t),i=0;i<this.body.nodeIndices.length;i++){var n=this.body.nodes[this.body.nodeIndices[i]];n.x-=e.x,n.y-=e.y}}},{key:\"_declusterAll\",value:function(){for(var t=!0;!0===t;){t=!1;for(var e=0;e<this.body.nodeIndices.length;e++)!0===this.body.nodes[this.body.nodeIndices[e]].isCluster&&(t=!0,this.body.modules.clustering.openCluster(this.body.nodeIndices[e],{},!1));!0===t&&this.body.emitter.emit(\"_dataChanged\")}}},{key:\"getSeed\",value:function(){return this.initialRandomSeed}},{key:\"setupHierarchicalLayout\",value:function(){if(!0===this.options.hierarchical.enabled&&this.body.nodeIndices.length>0){var t,e,i=!1,n=!1;for(e in this.lastNodeOnLevel={},this.hierarchical=new kv,this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,e)&&(void 0!==(t=this.body.nodes[e]).options.level?(i=!0,this.hierarchical.levels[e]=t.options.level):n=!0);if(!0===n&&!0===i)throw new Error(\"To use the hierarchical layout, nodes require either no predefined levels or levels have to be defined for all nodes.\");if(!0===n){var o=this.options.hierarchical.sortMethod;\"hubsize\"===o?this._determineLevelsByHubsize():\"directed\"===o?this._determineLevelsDirected():\"custom\"===o&&this._determineLevelsCustomCallback()}for(var r in this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,r)&&this.hierarchical.ensureLevel(r);var s=this._getDistribution();this._generateMap(),this._placeNodesByHierarchy(s),this._condenseHierarchy(),this._shiftToCenter()}}},{key:\"_condenseHierarchy\",value:function(){var t=this,e=!1,i={},n=function(e,i){var n=t.hierarchical.trees;for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&n[o]===e&&t.direction.shift(o,i)},o=function(){for(var e=[],i=0;i<t.hierarchical.numTrees();i++)e.push(t.direction.getTreeSize(i));return e},r=function e(i,n){if(!n[i.id]&&(n[i.id]=!0,t.hierarchical.childrenReference[i.id])){var o=t.hierarchical.childrenReference[i.id];if(o.length>0)for(var r=0;r<o.length;r++)e(t.body.nodes[o[r]],n)}},s=function(e){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1e9,n=1e9,o=1e9,r=1e9,s=-1e9;for(var a in e)if(Object.prototype.hasOwnProperty.call(e,a)){var h=t.body.nodes[a],l=t.hierarchical.levels[h.id],d=t.direction.getPosition(h),c=t._getSpaceAroundNode(h,e),u=uo(c,2),f=u[0],p=u[1];n=Math.min(f,n),o=Math.min(p,o),l<=i&&(r=Math.min(d,r),s=Math.max(d,s))}return[r,s,n,o]},a=function(e,i){var n=t.hierarchical.getMaxLevel(e.id),o=t.hierarchical.getMaxLevel(i.id);return Math.min(n,o)},h=function(e,i,n){for(var o=t.hierarchical,r=0;r<i.length;r++){var s=i[r],a=o.distributionOrdering[s];if(a.length>1)for(var h=0;h<a.length-1;h++){var l=a[h],d=a[h+1];o.hasSameParent(l,d)&&o.inSameSubNetwork(l,d)&&e(l,d,n)}}},l=function(i,n){var o=arguments.length>2&&void 0!==arguments[2]&&arguments[2],h=t.direction.getPosition(i),l=t.direction.getPosition(n),d=Math.abs(l-h),c=t.options.hierarchical.nodeSpacing;if(d>c){var u={},f={};r(i,u),r(n,f);var p=a(i,n),v=s(u,p),g=s(f,p),y=v[1],m=g[0],b=g[2],w=Math.abs(y-m);if(w>c){var k=y-m+c;k<-b+c&&(k=-b+c),k<0&&(t._shiftBlock(n.id,k),e=!0,!0===o&&t._centerParent(n))}}},d=function(n,o){for(var a=o.id,h=o.edges,l=t.hierarchical.levels[o.id],d=t.options.hierarchical.levelSeparation*t.options.hierarchical.levelSeparation,c={},u=[],f=0;f<h.length;f++){var p=h[f];if(p.toId!=p.fromId){var v=p.toId==a?p.from:p.to;c[h[f].id]=v,t.hierarchical.levels[v.id]<l&&u.push(p)}}var g=function(e,i){for(var n=0,o=0;o<i.length;o++)if(void 0!==c[i[o].id]){var r=t.direction.getPosition(c[i[o].id])-e;n+=r/Math.sqrt(r*r+d)}return n},y=function(e,i){for(var n=0,o=0;o<i.length;o++)if(void 0!==c[i[o].id]){var r=t.direction.getPosition(c[i[o].id])-e;n-=d*Math.pow(r*r+d,-1.5)}return n},m=function(e,i){for(var n=t.direction.getPosition(o),r={},s=0;s<e;s++){var a=g(n,i),h=y(n,i);if(void 0!==r[n-=Math.max(-40,Math.min(40,Math.round(a/h)))])break;r[n]=s}return n},b=m(n,u);!function(n){var a=t.direction.getPosition(o);if(void 0===i[o.id]){var h={};r(o,h),i[o.id]=h}var l=s(i[o.id]),d=l[2],c=l[3],u=n-a,f=0;u>0?f=Math.min(u,c-t.options.hierarchical.nodeSpacing):u<0&&(f=-Math.min(-u,d-t.options.hierarchical.nodeSpacing)),0!=f&&(t._shiftBlock(o.id,f),e=!0)}(b),function(i){var n=t.direction.getPosition(o),r=t._getSpaceAroundNode(o),s=uo(r,2),a=s[0],h=s[1],l=i-n,d=n;l>0?d=Math.min(n+(h-t.options.hierarchical.nodeSpacing),i):l<0&&(d=Math.max(n-(a-t.options.hierarchical.nodeSpacing),i)),d!==n&&(t.direction.setPosition(o,d),e=!0)}(b=m(n,h))};!0===this.options.hierarchical.blockShifting&&(function(i){var n=t.hierarchical.getLevels();n=Xo(n).call(n);for(var o=0;o<i&&(e=!1,h(l,n,!0),!0===e);o++);}(5),function(){for(var e in t.body.nodes)Object.prototype.hasOwnProperty.call(t.body.nodes,e)&&t._centerParent(t.body.nodes[e])}()),!0===this.options.hierarchical.edgeMinimization&&function(i){var n=t.hierarchical.getLevels();n=Xo(n).call(n);for(var o=0;o<i;o++){e=!1;for(var r=0;r<n.length;r++)for(var s=n[r],a=t.hierarchical.distributionOrdering[s],h=0;h<a.length;h++)d(1e3,a[h]);if(!0!==e)break}}(20),!0===this.options.hierarchical.parentCentralization&&function(){var e=t.hierarchical.getLevels();e=Xo(e).call(e);for(var i=0;i<e.length;i++)for(var n=e[i],o=t.hierarchical.distributionOrdering[n],r=0;r<o.length;r++)t._centerParent(o[r])}(),function(){for(var e=o(),i=0,r=0;r<e.length-1;r++){i+=e[r].max-e[r+1].min+t.options.hierarchical.treeSpacing,n(r+1,i)}}()}},{key:\"_getSpaceAroundNode\",value:function(t,e){var i=!0;void 0===e&&(i=!1);var n=this.hierarchical.levels[t.id];if(void 0!==n){var o=this.hierarchical.distributionIndex[t.id],r=this.direction.getPosition(t),s=this.hierarchical.distributionOrdering[n],a=1e9,h=1e9;if(0!==o){var l=s[o-1];if(!0===i&&void 0===e[l.id]||!1===i)a=r-this.direction.getPosition(l)}if(o!=s.length-1){var d=s[o+1];if(!0===i&&void 0===e[d.id]||!1===i){var c=this.direction.getPosition(d);h=Math.min(h,c-r)}}return[a,h]}return[0,0]}},{key:\"_centerParent\",value:function(t){if(this.hierarchical.parentReference[t.id])for(var e=this.hierarchical.parentReference[t.id],i=0;i<e.length;i++){var n=e[i],o=this.body.nodes[n],r=this.hierarchical.childrenReference[n];if(void 0!==r){var s=this._getCenterPosition(r),a=this.direction.getPosition(o),h=this._getSpaceAroundNode(o),l=uo(h,2),d=l[0],c=l[1],u=a-s;(u<0&&Math.abs(u)<c-this.options.hierarchical.nodeSpacing||u>0&&Math.abs(u)<d-this.options.hierarchical.nodeSpacing)&&this.direction.setPosition(o,s)}}}},{key:\"_placeNodesByHierarchy\",value:function(t){for(var e in this.positionedNodes={},t)if(Object.prototype.hasOwnProperty.call(t,e)){var i,n=zo(t[e]);n=this._indexArrayToNodes(n),xc(i=this.direction).call(i,n);for(var o=0,r=0;r<n.length;r++){var s=n[r];if(void 0===this.positionedNodes[s.id]){var a=this.options.hierarchical.nodeSpacing,h=a*o;o>0&&(h=this.direction.getPosition(n[r-1])+a),this.direction.setPosition(s,h,e),this._validatePositionAndContinue(s,e,h),o++}}}}},{key:\"_placeBranchNodes\",value:function(t,e){var i,n=this.hierarchical.childrenReference[t];if(void 0!==n){for(var o=[],r=0;r<n.length;r++)o.push(this.body.nodes[n[r]]);xc(i=this.direction).call(i,o);for(var s=0;s<o.length;s++){var a=o[s],h=this.hierarchical.levels[a.id];if(!(h>e&&void 0===this.positionedNodes[a.id]))return;var l=this.options.hierarchical.nodeSpacing,d=void 0;d=0===s?this.direction.getPosition(this.body.nodes[t]):this.direction.getPosition(o[s-1])+l,this.direction.setPosition(a,d,h),this._validatePositionAndContinue(a,h,d)}var c=this._getCenterPosition(o);this.direction.setPosition(this.body.nodes[t],c,e)}}},{key:\"_validatePositionAndContinue\",value:function(t,e,i){if(this.hierarchical.isTree){if(void 0!==this.lastNodeOnLevel[e]){var n=this.direction.getPosition(this.body.nodes[this.lastNodeOnLevel[e]]);if(i-n<this.options.hierarchical.nodeSpacing){var o=n+this.options.hierarchical.nodeSpacing-i,r=this._findCommonParent(this.lastNodeOnLevel[e],t.id);this._shiftBlock(r.withChild,o)}}this.lastNodeOnLevel[e]=t.id,this.positionedNodes[t.id]=!0,this._placeBranchNodes(t.id,e)}}},{key:\"_indexArrayToNodes\",value:function(t){for(var e=[],i=0;i<t.length;i++)e.push(this.body.nodes[t[i]]);return e}},{key:\"_getDistribution\",value:function(){var t,e,i={};for(t in this.body.nodes)if(Object.prototype.hasOwnProperty.call(this.body.nodes,t)){e=this.body.nodes[t];var n=void 0===this.hierarchical.levels[t]?0:this.hierarchical.levels[t];this.direction.fix(e,n),void 0===i[n]&&(i[n]={}),i[n][t]=e}return i}},{key:\"_getActiveEdges\",value:function(t){var e=this,i=[];return Dh(t.edges,(function(t){var n;-1!==Hr(n=e.body.edgeIndices).call(n,t.id)&&i.push(t)})),i}},{key:\"_getHubSizes\",value:function(){var t=this,e={};Dh(this.body.nodeIndices,(function(i){var n=t.body.nodes[i],o=t._getActiveEdges(n).length;e[o]=!0}));var i=[];return Dh(e,(function(t){i.push(Number(t))})),xc(sv).call(sv,i,(function(t,e){return e-t})),i}},{key:\"_determineLevelsByHubsize\",value:function(){for(var t=this,e=function(e,i){t.hierarchical.levelDownstream(e,i)},i=this._getHubSizes(),n=function(n){var o=i[n];if(0===o)return\"break\";Dh(t.body.nodeIndices,(function(i){var n=t.body.nodes[i];o===t._getActiveEdges(n).length&&t._crawlNetwork(e,i)}))},o=0;o<i.length;++o){if(\"break\"===n(o))break}}},{key:\"_determineLevelsCustomCallback\",value:function(){var t=this;this._crawlNetwork((function(e,i,n){var o=t.hierarchical.levels[e.id];void 0===o&&(o=t.hierarchical.levels[e.id]=1e5);var r=(pp.cloneOptions(e,\"node\"),pp.cloneOptions(i,\"node\"),void pp.cloneOptions(n,\"edge\"));t.hierarchical.levels[i.id]=o+r})),this.hierarchical.setMinLevelToZero(this.body.nodes)}},{key:\"_determineLevelsDirected\",value:function(){var t,e=this,i=Kd(t=this.body.nodeIndices).call(t,(function(t,i){return t.set(i,e.body.nodes[i]),t}),new vd);\"roots\"===this.options.hierarchical.shakeTowards?this.hierarchical.levels=function(t){return wv((function(e){var i,n;return gv(i=mr(n=e.edges).call(n,(function(e){return t.has(e.toId)}))).call(i,(function(t){return t.from===e}))}),(function(t,e){return e<t}),\"to\",t)}(i):this.hierarchical.levels=function(t){return wv((function(e){var i,n;return gv(i=mr(n=e.edges).call(n,(function(e){return t.has(e.toId)}))).call(i,(function(t){return t.to===e}))}),(function(t,e){return e>t}),\"from\",t)}(i),this.hierarchical.setMinLevelToZero(this.body.nodes)}},{key:\"_generateMap\",value:function(){var t=this;this._crawlNetwork((function(e,i){t.hierarchical.levels[i.id]>t.hierarchical.levels[e.id]&&t.hierarchical.addRelation(e.id,i.id)})),this.hierarchical.checkIfTree()}},{key:\"_crawlNetwork\",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:function(){},i=arguments.length>1?arguments[1]:void 0,n={},o=function i(o,r){if(void 0===n[o.id]){var s;t.hierarchical.setTreeIndex(o,r),n[o.id]=!0;for(var a=t._getActiveEdges(o),h=0;h<a.length;h++){var l=a[h];!0===l.connected&&(s=l.toId==o.id?l.from:l.to,o.id!=s.id&&(e(o,s,l),i(s,r)))}}};if(void 0===i)for(var r=0,s=0;s<this.body.nodeIndices.length;s++){var a=this.body.nodeIndices[s];if(void 0===n[a]){var h=this.body.nodes[a];o(h,r),r+=1}}else{var l=this.body.nodes[i];if(void 0===l)return void console.error(\"Node not found:\",i);o(l)}}},{key:\"_shiftBlock\",value:function(t,e){var i=this,n={};!function t(o){if(!n[o]){n[o]=!0,i.direction.shift(o,e);var r=i.hierarchical.childrenReference[o];if(void 0!==r)for(var s=0;s<r.length;s++)t(r[s])}}(t)}},{key:\"_findCommonParent\",value:function(t,e){var i=this,n={};return function t(e,n){var o=i.hierarchical.parentReference[n];if(void 0!==o)for(var r=0;r<o.length;r++){var s=o[r];e[s]=!0,t(e,s)}}(n,t),function t(e,n){var o=i.hierarchical.parentReference[n];if(void 0!==o)for(var r=0;r<o.length;r++){var s=o[r];if(void 0!==e[s])return{foundParent:s,withChild:n};var a=t(e,s);if(null!==a.foundParent)return a}return{foundParent:null,withChild:n}}(n,e)}},{key:\"setDirectionStrategy\",value:function(){var t=\"UD\"===this.options.hierarchical.direction||\"DU\"===this.options.hierarchical.direction;this.direction=t?new dv(this):new cv(this)}},{key:\"_getCenterPosition\",value:function(t){for(var e=1e9,i=-1e9,n=0;n<t.length;n++){var o=void 0;if(void 0!==t[n].id)o=t[n];else{var r=t[n];o=this.body.nodes[r]}var s=this.direction.getPosition(o);e=Math.min(e,s),i=Math.max(i,s)}return.5*(e+i)}}]),t}();function xv(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return Ev(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Ev(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function Ev(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}var Ov=function(){function t(e,i,n,o){var r,s,a=this;Nn(this,t),this.body=e,this.canvas=i,this.selectionHandler=n,this.interactionHandler=o,this.editMode=!1,this.manipulationDiv=void 0,this.editModeDiv=void 0,this.closeDiv=void 0,this._domEventListenerCleanupQueue=[],this.temporaryUIFunctions={},this.temporaryEventFunctions=[],this.touchTime=0,this.temporaryIds={nodes:[],edges:[]},this.guiEnabled=!1,this.inMode=!1,this.selectedControlNode=void 0,this.options={},this.defaultOptions={enabled:!1,initiallyActive:!1,addNode:!0,addEdge:!0,editNode:void 0,editEdge:!0,deleteNode:!0,deleteEdge:!0,controlNodeStyle:{shape:\"dot\",size:6,color:{background:\"#ff0000\",border:\"#3c3c3c\",highlight:{background:\"#07f968\",border:\"#3c3c3c\"}},borderWidth:2,borderWidthSelected:2}},At(this.options,this.defaultOptions),this.body.emitter.on(\"destroy\",(function(){a._clean()})),this.body.emitter.on(\"_dataChanged\",Vt(r=this._restore).call(r,this)),this.body.emitter.on(\"_resetData\",Vt(s=this._restore).call(s,this))}return Fn(t,[{key:\"_restore\",value:function(){!1!==this.inMode&&(!0===this.options.initiallyActive?this.enableEditMode():this.disableEditMode())}},{key:\"setOptions\",value:function(t,e,i){void 0!==e&&(void 0!==e.locale?this.options.locale=e.locale:this.options.locale=i.locale,void 0!==e.locales?this.options.locales=e.locales:this.options.locales=i.locales),void 0!==t&&(\"boolean\"==typeof t?this.options.enabled=t:(this.options.enabled=!0,Ch(this.options,t)),!0===this.options.initiallyActive&&(this.editMode=!0),this._setup())}},{key:\"toggleEditMode\",value:function(){!0===this.editMode?this.disableEditMode():this.enableEditMode()}},{key:\"enableEditMode\",value:function(){this.editMode=!0,this._clean(),!0===this.guiEnabled&&(this.manipulationDiv.style.display=\"block\",this.closeDiv.style.display=\"block\",this.editModeDiv.style.display=\"none\",this.showManipulatorToolbar())}},{key:\"disableEditMode\",value:function(){this.editMode=!1,this._clean(),!0===this.guiEnabled&&(this.manipulationDiv.style.display=\"none\",this.closeDiv.style.display=\"none\",this.editModeDiv.style.display=\"block\",this._createEditButton())}},{key:\"showManipulatorToolbar\",value:function(){if(this._clean(),this.manipulationDOM={},!0===this.guiEnabled){var t,e;this.editMode=!0,this.manipulationDiv.style.display=\"block\",this.closeDiv.style.display=\"block\";var i=this.selectionHandler.getSelectedNodeCount(),n=this.selectionHandler.getSelectedEdgeCount(),o=i+n,r=this.options.locales[this.options.locale],s=!1;!1!==this.options.addNode&&(this._createAddNodeButton(r),s=!0),!1!==this.options.addEdge&&(!0===s?this._createSeperator(1):s=!0,this._createAddEdgeButton(r)),1===i&&\"function\"==typeof this.options.editNode?(!0===s?this._createSeperator(2):s=!0,this._createEditNodeButton(r)):1===n&&0===i&&!1!==this.options.editEdge&&(!0===s?this._createSeperator(3):s=!0,this._createEditEdgeButton(r)),0!==o&&(i>0&&!1!==this.options.deleteNode||0===i&&!1!==this.options.deleteEdge)&&(!0===s&&this._createSeperator(4),this._createDeleteButton(r)),this._bindElementEvents(this.closeDiv,Vt(t=this.toggleEditMode).call(t,this)),this._temporaryBindEvent(\"select\",Vt(e=this.showManipulatorToolbar).call(e,this))}this.body.emitter.emit(\"_redraw\")}},{key:\"addNodeMode\",value:function(){var t;if(!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode=\"addNode\",!0===this.guiEnabled){var e,i=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(i),this._createSeperator(),this._createDescription(i.addDescription||this.options.locales.en.addDescription),this._bindElementEvents(this.closeDiv,Vt(e=this.toggleEditMode).call(e,this))}this._temporaryBindEvent(\"click\",Vt(t=this._performAddNode).call(t,this))}},{key:\"editNode\",value:function(){var t=this;!0!==this.editMode&&this.enableEditMode(),this._clean();var e=this.selectionHandler.getSelectedNodes()[0];if(void 0!==e){if(this.inMode=\"editNode\",\"function\"!=typeof this.options.editNode)throw new Error(\"No function has been configured to handle the editing of nodes.\");if(!0!==e.isCluster){var i=Ch({},e.options,!1);if(i.x=e.x,i.y=e.y,2!==this.options.editNode.length)throw new Error(\"The function for edit does not support two arguments (data, callback)\");this.options.editNode(i,(function(e){null!=e&&\"editNode\"===t.inMode&&t.body.data.nodes.getDataSet().update(e),t.showManipulatorToolbar()}))}else alert(this.options.locales[this.options.locale].editClusterError||this.options.locales.en.editClusterError)}else this.showManipulatorToolbar()}},{key:\"addEdgeMode\",value:function(){var t,e,i,n,o;if(!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode=\"addEdge\",!0===this.guiEnabled){var r,s=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(s),this._createSeperator(),this._createDescription(s.edgeDescription||this.options.locales.en.edgeDescription),this._bindElementEvents(this.closeDiv,Vt(r=this.toggleEditMode).call(r,this))}this._temporaryBindUI(\"onTouch\",Vt(t=this._handleConnect).call(t,this)),this._temporaryBindUI(\"onDragEnd\",Vt(e=this._finishConnect).call(e,this)),this._temporaryBindUI(\"onDrag\",Vt(i=this._dragControlNode).call(i,this)),this._temporaryBindUI(\"onRelease\",Vt(n=this._finishConnect).call(n,this)),this._temporaryBindUI(\"onDragStart\",Vt(o=this._dragStartEdge).call(o,this)),this._temporaryBindUI(\"onHold\",(function(){}))}},{key:\"editEdgeMode\",value:function(){if(!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode=\"editEdge\",\"object\"!==go(this.options.editEdge)||\"function\"!=typeof this.options.editEdge.editWithoutDrag||(this.edgeBeingEditedId=this.selectionHandler.getSelectedEdgeIds()[0],void 0===this.edgeBeingEditedId)){if(!0===this.guiEnabled){var t,e=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(e),this._createSeperator(),this._createDescription(e.editEdgeDescription||this.options.locales.en.editEdgeDescription),this._bindElementEvents(this.closeDiv,Vt(t=this.toggleEditMode).call(t,this))}if(this.edgeBeingEditedId=this.selectionHandler.getSelectedEdgeIds()[0],void 0!==this.edgeBeingEditedId){var i,n,o,r,s=this.body.edges[this.edgeBeingEditedId],a=this._getNewTargetNode(s.from.x,s.from.y),h=this._getNewTargetNode(s.to.x,s.to.y);this.temporaryIds.nodes.push(a.id),this.temporaryIds.nodes.push(h.id),this.body.nodes[a.id]=a,this.body.nodeIndices.push(a.id),this.body.nodes[h.id]=h,this.body.nodeIndices.push(h.id),this._temporaryBindUI(\"onTouch\",Vt(i=this._controlNodeTouch).call(i,this)),this._temporaryBindUI(\"onTap\",(function(){})),this._temporaryBindUI(\"onHold\",(function(){})),this._temporaryBindUI(\"onDragStart\",Vt(n=this._controlNodeDragStart).call(n,this)),this._temporaryBindUI(\"onDrag\",Vt(o=this._controlNodeDrag).call(o,this)),this._temporaryBindUI(\"onDragEnd\",Vt(r=this._controlNodeDragEnd).call(r,this)),this._temporaryBindUI(\"onMouseMove\",(function(){})),this._temporaryBindEvent(\"beforeDrawing\",(function(t){var e=s.edgeType.findBorderPositions(t);!1===a.selected&&(a.x=e.from.x,a.y=e.from.y),!1===h.selected&&(h.x=e.to.x,h.y=e.to.y)})),this.body.emitter.emit(\"_redraw\")}else this.showManipulatorToolbar()}else{var l=this.body.edges[this.edgeBeingEditedId];this._performEditEdge(l.from.id,l.to.id)}}},{key:\"deleteSelected\",value:function(){var t=this;!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode=\"delete\";var e=this.selectionHandler.getSelectedNodeIds(),i=this.selectionHandler.getSelectedEdgeIds(),n=void 0;if(e.length>0){for(var o=0;o<e.length;o++)if(!0===this.body.nodes[e[o]].isCluster)return void alert(this.options.locales[this.options.locale].deleteClusterError||this.options.locales.en.deleteClusterError);\"function\"==typeof this.options.deleteNode&&(n=this.options.deleteNode)}else i.length>0&&\"function\"==typeof this.options.deleteEdge&&(n=this.options.deleteEdge);if(\"function\"==typeof n){var r={nodes:e,edges:i};if(2!==n.length)throw new Error(\"The function for delete does not support two arguments (data, callback)\");n(r,(function(e){null!=e&&\"delete\"===t.inMode?(t.body.data.edges.getDataSet().remove(e.edges),t.body.data.nodes.getDataSet().remove(e.nodes),t.body.emitter.emit(\"startSimulation\"),t.showManipulatorToolbar()):(t.body.emitter.emit(\"startSimulation\"),t.showManipulatorToolbar())}))}else this.body.data.edges.getDataSet().remove(i),this.body.data.nodes.getDataSet().remove(e),this.body.emitter.emit(\"startSimulation\"),this.showManipulatorToolbar()}},{key:\"_setup\",value:function(){!0===this.options.enabled?(this.guiEnabled=!0,this._createWrappers(),!1===this.editMode?this._createEditButton():this.showManipulatorToolbar()):(this._removeManipulationDOM(),this.guiEnabled=!1)}},{key:\"_createWrappers\",value:function(){var t,e;(void 0===this.manipulationDiv&&(this.manipulationDiv=document.createElement(\"div\"),this.manipulationDiv.className=\"vis-manipulation\",!0===this.editMode?this.manipulationDiv.style.display=\"block\":this.manipulationDiv.style.display=\"none\",this.canvas.frame.appendChild(this.manipulationDiv)),void 0===this.editModeDiv&&(this.editModeDiv=document.createElement(\"div\"),this.editModeDiv.className=\"vis-edit-mode\",!0===this.editMode?this.editModeDiv.style.display=\"none\":this.editModeDiv.style.display=\"block\",this.canvas.frame.appendChild(this.editModeDiv)),void 0===this.closeDiv)&&(this.closeDiv=document.createElement(\"button\"),this.closeDiv.className=\"vis-close\",this.closeDiv.setAttribute(\"aria-label\",null!==(t=null===(e=this.options.locales[this.options.locale])||void 0===e?void 0:e.close)&&void 0!==t?t:this.options.locales.en.close),this.closeDiv.style.display=this.manipulationDiv.style.display,this.canvas.frame.appendChild(this.closeDiv))}},{key:\"_getNewTargetNode\",value:function(t,e){var i=Ch({},this.options.controlNodeStyle);i.id=\"targetNode\"+Wc(),i.hidden=!1,i.physics=!1,i.x=t,i.y=e;var n=this.body.functions.createNode(i);return n.shape.boundingBox={left:t,right:t,top:e,bottom:e},n}},{key:\"_createEditButton\",value:function(){var t;this._clean(),this.manipulationDOM={},mh(this.editModeDiv);var e=this.options.locales[this.options.locale],i=this._createButton(\"editMode\",\"vis-edit vis-edit-mode\",e.edit||this.options.locales.en.edit);this.editModeDiv.appendChild(i),this._bindElementEvents(i,Vt(t=this.toggleEditMode).call(t,this))}},{key:\"_clean\",value:function(){this.inMode=!1,!0===this.guiEnabled&&(mh(this.editModeDiv),mh(this.manipulationDiv),this._cleanupDOMEventListeners()),this._cleanupTemporaryNodesAndEdges(),this._unbindTemporaryUIs(),this._unbindTemporaryEvents(),this.body.emitter.emit(\"restorePhysics\")}},{key:\"_cleanupDOMEventListeners\",value:function(){var t,e,i=xv(er(t=this._domEventListenerCleanupQueue).call(t,0));try{for(i.s();!(e=i.n()).done;){(0,e.value)()}}catch(t){i.e(t)}finally{i.f()}}},{key:\"_removeManipulationDOM\",value:function(){this._clean(),mh(this.manipulationDiv),mh(this.editModeDiv),mh(this.closeDiv),this.manipulationDiv&&this.canvas.frame.removeChild(this.manipulationDiv),this.editModeDiv&&this.canvas.frame.removeChild(this.editModeDiv),this.closeDiv&&this.canvas.frame.removeChild(this.closeDiv),this.manipulationDiv=void 0,this.editModeDiv=void 0,this.closeDiv=void 0}},{key:\"_createSeperator\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;this.manipulationDOM[\"seperatorLineDiv\"+t]=document.createElement(\"div\"),this.manipulationDOM[\"seperatorLineDiv\"+t].className=\"vis-separator-line\",this.manipulationDiv.appendChild(this.manipulationDOM[\"seperatorLineDiv\"+t])}},{key:\"_createAddNodeButton\",value:function(t){var e,i=this._createButton(\"addNode\",\"vis-add\",t.addNode||this.options.locales.en.addNode);this.manipulationDiv.appendChild(i),this._bindElementEvents(i,Vt(e=this.addNodeMode).call(e,this))}},{key:\"_createAddEdgeButton\",value:function(t){var e,i=this._createButton(\"addEdge\",\"vis-connect\",t.addEdge||this.options.locales.en.addEdge);this.manipulationDiv.appendChild(i),this._bindElementEvents(i,Vt(e=this.addEdgeMode).call(e,this))}},{key:\"_createEditNodeButton\",value:function(t){var e,i=this._createButton(\"editNode\",\"vis-edit\",t.editNode||this.options.locales.en.editNode);this.manipulationDiv.appendChild(i),this._bindElementEvents(i,Vt(e=this.editNode).call(e,this))}},{key:\"_createEditEdgeButton\",value:function(t){var e,i=this._createButton(\"editEdge\",\"vis-edit\",t.editEdge||this.options.locales.en.editEdge);this.manipulationDiv.appendChild(i),this._bindElementEvents(i,Vt(e=this.editEdgeMode).call(e,this))}},{key:\"_createDeleteButton\",value:function(t){var e,i;i=this.options.rtl?\"vis-delete-rtl\":\"vis-delete\";var n=this._createButton(\"delete\",i,t.del||this.options.locales.en.del);this.manipulationDiv.appendChild(n),this._bindElementEvents(n,Vt(e=this.deleteSelected).call(e,this))}},{key:\"_createBackButton\",value:function(t){var e,i=this._createButton(\"back\",\"vis-back\",t.back||this.options.locales.en.back);this.manipulationDiv.appendChild(i),this._bindElementEvents(i,Vt(e=this.showManipulatorToolbar).call(e,this))}},{key:\"_createButton\",value:function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:\"vis-label\";return this.manipulationDOM[t+\"Div\"]=document.createElement(\"button\"),this.manipulationDOM[t+\"Div\"].className=\"vis-button \"+e,this.manipulationDOM[t+\"Label\"]=document.createElement(\"div\"),this.manipulationDOM[t+\"Label\"].className=n,this.manipulationDOM[t+\"Label\"].innerText=i,this.manipulationDOM[t+\"Div\"].appendChild(this.manipulationDOM[t+\"Label\"]),this.manipulationDOM[t+\"Div\"]}},{key:\"_createDescription\",value:function(t){this.manipulationDOM.descriptionLabel=document.createElement(\"div\"),this.manipulationDOM.descriptionLabel.className=\"vis-none\",this.manipulationDOM.descriptionLabel.innerText=t,this.manipulationDiv.appendChild(this.manipulationDOM.descriptionLabel)}},{key:\"_temporaryBindEvent\",value:function(t,e){this.temporaryEventFunctions.push({event:t,boundFunction:e}),this.body.emitter.on(t,e)}},{key:\"_temporaryBindUI\",value:function(t,e){if(void 0===this.body.eventListeners[t])throw new Error(\"This UI function does not exist. Typo? You tried: \"+t+\" possible are: \"+es(zo(this.body.eventListeners)));this.temporaryUIFunctions[t]=this.body.eventListeners[t],this.body.eventListeners[t]=e}},{key:\"_unbindTemporaryUIs\",value:function(){for(var t in this.temporaryUIFunctions)Object.prototype.hasOwnProperty.call(this.temporaryUIFunctions,t)&&(this.body.eventListeners[t]=this.temporaryUIFunctions[t],delete this.temporaryUIFunctions[t]);this.temporaryUIFunctions={}}},{key:\"_unbindTemporaryEvents\",value:function(){for(var t=0;t<this.temporaryEventFunctions.length;t++){var e=this.temporaryEventFunctions[t].event,i=this.temporaryEventFunctions[t].boundFunction;this.body.emitter.off(e,i)}this.temporaryEventFunctions=[]}},{key:\"_bindElementEvents\",value:function(t,e){var i=new ll(t,{});_p(i,e),this._domEventListenerCleanupQueue.push((function(){i.destroy()}));var n=function(t){var i=t.keyCode,n=t.key;\"Enter\"!==n&&\" \"!==n&&13!==i&&32!==i||e()};t.addEventListener(\"keyup\",n,!1),this._domEventListenerCleanupQueue.push((function(){t.removeEventListener(\"keyup\",n,!1)}))}},{key:\"_cleanupTemporaryNodesAndEdges\",value:function(){for(var t=0;t<this.temporaryIds.edges.length;t++){var e;this.body.edges[this.temporaryIds.edges[t]].disconnect(),delete this.body.edges[this.temporaryIds.edges[t]];var i,n=Hr(e=this.body.edgeIndices).call(e,this.temporaryIds.edges[t]);if(-1!==n)er(i=this.body.edgeIndices).call(i,n,1)}for(var o=0;o<this.temporaryIds.nodes.length;o++){var r;delete this.body.nodes[this.temporaryIds.nodes[o]];var s,a=Hr(r=this.body.nodeIndices).call(r,this.temporaryIds.nodes[o]);if(-1!==a)er(s=this.body.nodeIndices).call(s,a,1)}this.temporaryIds={nodes:[],edges:[]}}},{key:\"_controlNodeTouch\",value:function(t){this.selectionHandler.unselectAll(),this.lastTouch=this.body.functions.getPointer(t.center),this.lastTouch.translation=At({},this.body.view.translation)}},{key:\"_controlNodeDragStart\",value:function(){var t=this.lastTouch,e=this.selectionHandler._pointerToPositionObject(t),i=this.body.nodes[this.temporaryIds.nodes[0]],n=this.body.nodes[this.temporaryIds.nodes[1]],o=this.body.edges[this.edgeBeingEditedId];this.selectedControlNode=void 0;var r=i.isOverlappingWith(e),s=n.isOverlappingWith(e);!0===r?(this.selectedControlNode=i,o.edgeType.from=i):!0===s&&(this.selectedControlNode=n,o.edgeType.to=n),void 0!==this.selectedControlNode&&this.selectionHandler.selectObject(this.selectedControlNode),this.body.emitter.emit(\"_redraw\")}},{key:\"_controlNodeDrag\",value:function(t){this.body.emitter.emit(\"disablePhysics\");var e=this.body.functions.getPointer(t.center),i=this.canvas.DOMtoCanvas(e);void 0!==this.selectedControlNode?(this.selectedControlNode.x=i.x,this.selectedControlNode.y=i.y):this.interactionHandler.onDrag(t),this.body.emitter.emit(\"_redraw\")}},{key:\"_controlNodeDragEnd\",value:function(t){var e=this.body.functions.getPointer(t.center),i=this.selectionHandler._pointerToPositionObject(e),n=this.body.edges[this.edgeBeingEditedId];if(void 0!==this.selectedControlNode){this.selectionHandler.unselectAll();for(var o=this.selectionHandler._getAllNodesOverlappingWith(i),r=void 0,s=o.length-1;s>=0;s--)if(o[s]!==this.selectedControlNode.id){r=this.body.nodes[o[s]];break}if(void 0!==r&&void 0!==this.selectedControlNode)if(!0===r.isCluster)alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError);else{var a=this.body.nodes[this.temporaryIds.nodes[0]];this.selectedControlNode.id===a.id?this._performEditEdge(r.id,n.to.id):this._performEditEdge(n.from.id,r.id)}else n.updateEdgeType(),this.body.emitter.emit(\"restorePhysics\");this.body.emitter.emit(\"_redraw\")}}},{key:\"_handleConnect\",value:function(t){if((new Date).valueOf()-this.touchTime>100){this.lastTouch=this.body.functions.getPointer(t.center),this.lastTouch.translation=At({},this.body.view.translation),this.interactionHandler.drag.pointer=this.lastTouch,this.interactionHandler.drag.translation=this.lastTouch.translation;var e=this.lastTouch,i=this.selectionHandler.getNodeAt(e);if(void 0!==i)if(!0===i.isCluster)alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError);else{var n=this._getNewTargetNode(i.x,i.y);this.body.nodes[n.id]=n,this.body.nodeIndices.push(n.id);var o=this.body.functions.createEdge({id:\"connectionEdge\"+Wc(),from:i.id,to:n.id,physics:!1,smooth:{enabled:!0,type:\"continuous\",roundness:.5}});this.body.edges[o.id]=o,this.body.edgeIndices.push(o.id),this.temporaryIds.nodes.push(n.id),this.temporaryIds.edges.push(o.id)}this.touchTime=(new Date).valueOf()}}},{key:\"_dragControlNode\",value:function(t){var e=this.body.functions.getPointer(t.center),i=this.selectionHandler._pointerToPositionObject(e),n=void 0;void 0!==this.temporaryIds.edges[0]&&(n=this.body.edges[this.temporaryIds.edges[0]].fromId);for(var o=this.selectionHandler._getAllNodesOverlappingWith(i),r=void 0,s=o.length-1;s>=0;s--){var a;if(-1===Hr(a=this.temporaryIds.nodes).call(a,o[s])){r=this.body.nodes[o[s]];break}}if(t.controlEdge={from:n,to:r?r.id:void 0},this.selectionHandler.generateClickEvent(\"controlNodeDragging\",t,e),void 0!==this.temporaryIds.nodes[0]){var h=this.body.nodes[this.temporaryIds.nodes[0]];h.x=this.canvas._XconvertDOMtoCanvas(e.x),h.y=this.canvas._YconvertDOMtoCanvas(e.y),this.body.emitter.emit(\"_redraw\")}else this.interactionHandler.onDrag(t)}},{key:\"_finishConnect\",value:function(t){var e=this.body.functions.getPointer(t.center),i=this.selectionHandler._pointerToPositionObject(e),n=void 0;void 0!==this.temporaryIds.edges[0]&&(n=this.body.edges[this.temporaryIds.edges[0]].fromId);for(var o=this.selectionHandler._getAllNodesOverlappingWith(i),r=void 0,s=o.length-1;s>=0;s--){var a;if(-1===Hr(a=this.temporaryIds.nodes).call(a,o[s])){r=this.body.nodes[o[s]];break}}this._cleanupTemporaryNodesAndEdges(),void 0!==r&&(!0===r.isCluster?alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError):void 0!==this.body.nodes[n]&&void 0!==this.body.nodes[r.id]&&this._performAddEdge(n,r.id)),t.controlEdge={from:n,to:r?r.id:void 0},this.selectionHandler.generateClickEvent(\"controlNodeDragEnd\",t,e),this.body.emitter.emit(\"_redraw\")}},{key:\"_dragStartEdge\",value:function(t){var e=this.lastTouch;this.selectionHandler.generateClickEvent(\"dragStart\",t,e,void 0,!0)}},{key:\"_performAddNode\",value:function(t){var e=this,i={id:Wc(),x:t.pointer.canvas.x,y:t.pointer.canvas.y,label:\"new\"};if(\"function\"==typeof this.options.addNode){if(2!==this.options.addNode.length)throw this.showManipulatorToolbar(),new Error(\"The function for add does not support two arguments (data,callback)\");this.options.addNode(i,(function(t){null!=t&&\"addNode\"===e.inMode&&e.body.data.nodes.getDataSet().add(t),e.showManipulatorToolbar()}))}else this.body.data.nodes.getDataSet().add(i),this.showManipulatorToolbar()}},{key:\"_performAddEdge\",value:function(t,e){var i=this,n={from:t,to:e};if(\"function\"==typeof this.options.addEdge){if(2!==this.options.addEdge.length)throw new Error(\"The function for connect does not support two arguments (data,callback)\");this.options.addEdge(n,(function(t){null!=t&&\"addEdge\"===i.inMode&&(i.body.data.edges.getDataSet().add(t),i.selectionHandler.unselectAll(),i.showManipulatorToolbar())}))}else this.body.data.edges.getDataSet().add(n),this.selectionHandler.unselectAll(),this.showManipulatorToolbar()}},{key:\"_performEditEdge\",value:function(t,e){var i=this,n={id:this.edgeBeingEditedId,from:t,to:e,label:this.body.data.edges.get(this.edgeBeingEditedId).label},o=this.options.editEdge;if(\"object\"===go(o)&&(o=o.editWithoutDrag),\"function\"==typeof o){if(2!==o.length)throw new Error(\"The function for edit does not support two arguments (data, callback)\");o(n,(function(t){null==t||\"editEdge\"!==i.inMode?(i.body.edges[n.id].updateEdgeType(),i.body.emitter.emit(\"_redraw\"),i.showManipulatorToolbar()):(i.body.data.edges.getDataSet().update(t),i.selectionHandler.unselectAll(),i.showManipulatorToolbar())}))}else this.body.data.edges.getDataSet().update(n),this.selectionHandler.unselectAll(),this.showManipulatorToolbar()}}]),t}(),Cv=\"string\",Sv=\"boolean\",Tv=\"number\",Mv=\"array\",Pv=\"object\",Dv=[\"arrow\",\"bar\",\"box\",\"circle\",\"crow\",\"curve\",\"diamond\",\"image\",\"inv_curve\",\"inv_triangle\",\"triangle\",\"vee\"],Iv={borderWidth:{number:Tv},borderWidthSelected:{number:Tv,undefined:\"undefined\"},brokenImage:{string:Cv,undefined:\"undefined\"},chosen:{label:{boolean:Sv,function:\"function\"},node:{boolean:Sv,function:\"function\"},__type__:{object:Pv,boolean:Sv}},color:{border:{string:Cv},background:{string:Cv},highlight:{border:{string:Cv},background:{string:Cv},__type__:{object:Pv,string:Cv}},hover:{border:{string:Cv},background:{string:Cv},__type__:{object:Pv,string:Cv}},__type__:{object:Pv,string:Cv}},opacity:{number:Tv,undefined:\"undefined\"},fixed:{x:{boolean:Sv},y:{boolean:Sv},__type__:{object:Pv,boolean:Sv}},font:{align:{string:Cv},color:{string:Cv},size:{number:Tv},face:{string:Cv},background:{string:Cv},strokeWidth:{number:Tv},strokeColor:{string:Cv},vadjust:{number:Tv},multi:{boolean:Sv,string:Cv},bold:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},boldital:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},ital:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},mono:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},__type__:{object:Pv,string:Cv}},group:{string:Cv,number:Tv,undefined:\"undefined\"},heightConstraint:{minimum:{number:Tv},valign:{string:Cv},__type__:{object:Pv,boolean:Sv,number:Tv}},hidden:{boolean:Sv},icon:{face:{string:Cv},code:{string:Cv},size:{number:Tv},color:{string:Cv},weight:{string:Cv,number:Tv},__type__:{object:Pv}},id:{string:Cv,number:Tv},image:{selected:{string:Cv,undefined:\"undefined\"},unselected:{string:Cv,undefined:\"undefined\"},__type__:{object:Pv,string:Cv}},imagePadding:{top:{number:Tv},right:{number:Tv},bottom:{number:Tv},left:{number:Tv},__type__:{object:Pv,number:Tv}},label:{string:Cv,undefined:\"undefined\"},labelHighlightBold:{boolean:Sv},level:{number:Tv,undefined:\"undefined\"},margin:{top:{number:Tv},right:{number:Tv},bottom:{number:Tv},left:{number:Tv},__type__:{object:Pv,number:Tv}},mass:{number:Tv},physics:{boolean:Sv},scaling:{min:{number:Tv},max:{number:Tv},label:{enabled:{boolean:Sv},min:{number:Tv},max:{number:Tv},maxVisible:{number:Tv},drawThreshold:{number:Tv},__type__:{object:Pv,boolean:Sv}},customScalingFunction:{function:\"function\"},__type__:{object:Pv}},shadow:{enabled:{boolean:Sv},color:{string:Cv},size:{number:Tv},x:{number:Tv},y:{number:Tv},__type__:{object:Pv,boolean:Sv}},shape:{string:[\"custom\",\"ellipse\",\"circle\",\"database\",\"box\",\"text\",\"image\",\"circularImage\",\"diamond\",\"dot\",\"star\",\"triangle\",\"triangleDown\",\"square\",\"icon\",\"hexagon\"]},ctxRenderer:{function:\"function\"},shapeProperties:{borderDashes:{boolean:Sv,array:Mv},borderRadius:{number:Tv},interpolation:{boolean:Sv},useImageSize:{boolean:Sv},useBorderWithImage:{boolean:Sv},coordinateOrigin:{string:[\"center\",\"top-left\"]},__type__:{object:Pv}},size:{number:Tv},title:{string:Cv,dom:\"dom\",undefined:\"undefined\"},value:{number:Tv,undefined:\"undefined\"},widthConstraint:{minimum:{number:Tv},maximum:{number:Tv},__type__:{object:Pv,boolean:Sv,number:Tv}},x:{number:Tv},y:{number:Tv},__type__:{object:Pv}},Bv={configure:{enabled:{boolean:Sv},filter:{boolean:Sv,string:Cv,array:Mv,function:\"function\"},container:{dom:\"dom\"},showButton:{boolean:Sv},__type__:{object:Pv,boolean:Sv,string:Cv,array:Mv,function:\"function\"}},edges:{arrows:{to:{enabled:{boolean:Sv},scaleFactor:{number:Tv},type:{string:Dv},imageHeight:{number:Tv},imageWidth:{number:Tv},src:{string:Cv},__type__:{object:Pv,boolean:Sv}},middle:{enabled:{boolean:Sv},scaleFactor:{number:Tv},type:{string:Dv},imageWidth:{number:Tv},imageHeight:{number:Tv},src:{string:Cv},__type__:{object:Pv,boolean:Sv}},from:{enabled:{boolean:Sv},scaleFactor:{number:Tv},type:{string:Dv},imageWidth:{number:Tv},imageHeight:{number:Tv},src:{string:Cv},__type__:{object:Pv,boolean:Sv}},__type__:{string:[\"from\",\"to\",\"middle\"],object:Pv}},endPointOffset:{from:{number:Tv},to:{number:Tv},__type__:{object:Pv,number:Tv}},arrowStrikethrough:{boolean:Sv},background:{enabled:{boolean:Sv},color:{string:Cv},size:{number:Tv},dashes:{boolean:Sv,array:Mv},__type__:{object:Pv,boolean:Sv}},chosen:{label:{boolean:Sv,function:\"function\"},edge:{boolean:Sv,function:\"function\"},__type__:{object:Pv,boolean:Sv}},color:{color:{string:Cv},highlight:{string:Cv},hover:{string:Cv},inherit:{string:[\"from\",\"to\",\"both\"],boolean:Sv},opacity:{number:Tv},__type__:{object:Pv,string:Cv}},dashes:{boolean:Sv,array:Mv},font:{color:{string:Cv},size:{number:Tv},face:{string:Cv},background:{string:Cv},strokeWidth:{number:Tv},strokeColor:{string:Cv},align:{string:[\"horizontal\",\"top\",\"middle\",\"bottom\"]},vadjust:{number:Tv},multi:{boolean:Sv,string:Cv},bold:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},boldital:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},ital:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},mono:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},__type__:{object:Pv,string:Cv}},hidden:{boolean:Sv},hoverWidth:{function:\"function\",number:Tv},label:{string:Cv,undefined:\"undefined\"},labelHighlightBold:{boolean:Sv},length:{number:Tv,undefined:\"undefined\"},physics:{boolean:Sv},scaling:{min:{number:Tv},max:{number:Tv},label:{enabled:{boolean:Sv},min:{number:Tv},max:{number:Tv},maxVisible:{number:Tv},drawThreshold:{number:Tv},__type__:{object:Pv,boolean:Sv}},customScalingFunction:{function:\"function\"},__type__:{object:Pv}},selectionWidth:{function:\"function\",number:Tv},selfReferenceSize:{number:Tv},selfReference:{size:{number:Tv},angle:{number:Tv},renderBehindTheNode:{boolean:Sv},__type__:{object:Pv}},shadow:{enabled:{boolean:Sv},color:{string:Cv},size:{number:Tv},x:{number:Tv},y:{number:Tv},__type__:{object:Pv,boolean:Sv}},smooth:{enabled:{boolean:Sv},type:{string:[\"dynamic\",\"continuous\",\"discrete\",\"diagonalCross\",\"straightCross\",\"horizontal\",\"vertical\",\"curvedCW\",\"curvedCCW\",\"cubicBezier\"]},roundness:{number:Tv},forceDirection:{string:[\"horizontal\",\"vertical\",\"none\"],boolean:Sv},__type__:{object:Pv,boolean:Sv}},title:{string:Cv,undefined:\"undefined\"},width:{number:Tv},widthConstraint:{maximum:{number:Tv},__type__:{object:Pv,boolean:Sv,number:Tv}},value:{number:Tv,undefined:\"undefined\"},__type__:{object:Pv}},groups:{useDefaultGroups:{boolean:Sv},__any__:Iv,__type__:{object:Pv}},interaction:{dragNodes:{boolean:Sv},dragView:{boolean:Sv},hideEdgesOnDrag:{boolean:Sv},hideEdgesOnZoom:{boolean:Sv},hideNodesOnDrag:{boolean:Sv},hover:{boolean:Sv},keyboard:{enabled:{boolean:Sv},speed:{x:{number:Tv},y:{number:Tv},zoom:{number:Tv},__type__:{object:Pv}},bindToWindow:{boolean:Sv},autoFocus:{boolean:Sv},__type__:{object:Pv,boolean:Sv}},multiselect:{boolean:Sv},navigationButtons:{boolean:Sv},selectable:{boolean:Sv},selectConnectedEdges:{boolean:Sv},hoverConnectedEdges:{boolean:Sv},tooltipDelay:{number:Tv},zoomView:{boolean:Sv},zoomSpeed:{number:Tv},__type__:{object:Pv}},layout:{randomSeed:{undefined:\"undefined\",number:Tv,string:Cv},improvedLayout:{boolean:Sv},clusterThreshold:{number:Tv},hierarchical:{enabled:{boolean:Sv},levelSeparation:{number:Tv},nodeSpacing:{number:Tv},treeSpacing:{number:Tv},blockShifting:{boolean:Sv},edgeMinimization:{boolean:Sv},parentCentralization:{boolean:Sv},direction:{string:[\"UD\",\"DU\",\"LR\",\"RL\"]},sortMethod:{string:[\"hubsize\",\"directed\"]},shakeTowards:{string:[\"leaves\",\"roots\"]},__type__:{object:Pv,boolean:Sv}},__type__:{object:Pv}},manipulation:{enabled:{boolean:Sv},initiallyActive:{boolean:Sv},addNode:{boolean:Sv,function:\"function\"},addEdge:{boolean:Sv,function:\"function\"},editNode:{function:\"function\"},editEdge:{editWithoutDrag:{function:\"function\"},__type__:{object:Pv,boolean:Sv,function:\"function\"}},deleteNode:{boolean:Sv,function:\"function\"},deleteEdge:{boolean:Sv,function:\"function\"},controlNodeStyle:Iv,__type__:{object:Pv,boolean:Sv}},nodes:Iv,physics:{enabled:{boolean:Sv},barnesHut:{theta:{number:Tv},gravitationalConstant:{number:Tv},centralGravity:{number:Tv},springLength:{number:Tv},springConstant:{number:Tv},damping:{number:Tv},avoidOverlap:{number:Tv},__type__:{object:Pv}},forceAtlas2Based:{theta:{number:Tv},gravitationalConstant:{number:Tv},centralGravity:{number:Tv},springLength:{number:Tv},springConstant:{number:Tv},damping:{number:Tv},avoidOverlap:{number:Tv},__type__:{object:Pv}},repulsion:{centralGravity:{number:Tv},springLength:{number:Tv},springConstant:{number:Tv},nodeDistance:{number:Tv},damping:{number:Tv},__type__:{object:Pv}},hierarchicalRepulsion:{centralGravity:{number:Tv},springLength:{number:Tv},springConstant:{number:Tv},nodeDistance:{number:Tv},damping:{number:Tv},avoidOverlap:{number:Tv},__type__:{object:Pv}},maxVelocity:{number:Tv},minVelocity:{number:Tv},solver:{string:[\"barnesHut\",\"repulsion\",\"hierarchicalRepulsion\",\"forceAtlas2Based\"]},stabilization:{enabled:{boolean:Sv},iterations:{number:Tv},updateInterval:{number:Tv},onlyDynamicEdges:{boolean:Sv},fit:{boolean:Sv},__type__:{object:Pv,boolean:Sv}},timestep:{number:Tv},adaptiveTimestep:{boolean:Sv},wind:{x:{number:Tv},y:{number:Tv},__type__:{object:Pv}},__type__:{object:Pv,boolean:Sv}},autoResize:{boolean:Sv},clickToUse:{boolean:Sv},locale:{string:Cv},locales:{__any__:{any:\"any\"},__type__:{object:Pv}},height:{string:Cv},width:{string:Cv},__type__:{object:Pv}},zv={nodes:{borderWidth:[1,0,10,1],borderWidthSelected:[2,0,10,1],color:{border:[\"color\",\"#2B7CE9\"],background:[\"color\",\"#97C2FC\"],highlight:{border:[\"color\",\"#2B7CE9\"],background:[\"color\",\"#D2E5FF\"]},hover:{border:[\"color\",\"#2B7CE9\"],background:[\"color\",\"#D2E5FF\"]}},opacity:[0,0,1,.1],fixed:{x:!1,y:!1},font:{color:[\"color\",\"#343434\"],size:[14,0,100,1],face:[\"arial\",\"verdana\",\"tahoma\"],background:[\"color\",\"none\"],strokeWidth:[0,0,50,1],strokeColor:[\"color\",\"#ffffff\"]},hidden:!1,labelHighlightBold:!0,physics:!0,scaling:{min:[10,0,200,1],max:[30,0,200,1],label:{enabled:!1,min:[14,0,200,1],max:[30,0,200,1],maxVisible:[30,0,200,1],drawThreshold:[5,0,20,1]}},shadow:{enabled:!1,color:\"rgba(0,0,0,0.5)\",size:[10,0,20,1],x:[5,-30,30,1],y:[5,-30,30,1]},shape:[\"ellipse\",\"box\",\"circle\",\"database\",\"diamond\",\"dot\",\"square\",\"star\",\"text\",\"triangle\",\"triangleDown\",\"hexagon\"],shapeProperties:{borderDashes:!1,borderRadius:[6,0,20,1],interpolation:!0,useImageSize:!1},size:[25,0,200,1]},edges:{arrows:{to:{enabled:!1,scaleFactor:[1,0,3,.05],type:\"arrow\"},middle:{enabled:!1,scaleFactor:[1,0,3,.05],type:\"arrow\"},from:{enabled:!1,scaleFactor:[1,0,3,.05],type:\"arrow\"}},endPointOffset:{from:[0,-10,10,1],to:[0,-10,10,1]},arrowStrikethrough:!0,color:{color:[\"color\",\"#848484\"],highlight:[\"color\",\"#848484\"],hover:[\"color\",\"#848484\"],inherit:[\"from\",\"to\",\"both\",!0,!1],opacity:[1,0,1,.05]},dashes:!1,font:{color:[\"color\",\"#343434\"],size:[14,0,100,1],face:[\"arial\",\"verdana\",\"tahoma\"],background:[\"color\",\"none\"],strokeWidth:[2,0,50,1],strokeColor:[\"color\",\"#ffffff\"],align:[\"horizontal\",\"top\",\"middle\",\"bottom\"]},hidden:!1,hoverWidth:[1.5,0,5,.1],labelHighlightBold:!0,physics:!0,scaling:{min:[1,0,100,1],max:[15,0,100,1],label:{enabled:!0,min:[14,0,200,1],max:[30,0,200,1],maxVisible:[30,0,200,1],drawThreshold:[5,0,20,1]}},selectionWidth:[1.5,0,5,.1],selfReferenceSize:[20,0,200,1],selfReference:{size:[20,0,200,1],angle:[Math.PI/2,-6*Math.PI,6*Math.PI,Math.PI/8],renderBehindTheNode:!0},shadow:{enabled:!1,color:\"rgba(0,0,0,0.5)\",size:[10,0,20,1],x:[5,-30,30,1],y:[5,-30,30,1]},smooth:{enabled:!0,type:[\"dynamic\",\"continuous\",\"discrete\",\"diagonalCross\",\"straightCross\",\"horizontal\",\"vertical\",\"curvedCW\",\"curvedCCW\",\"cubicBezier\"],forceDirection:[\"horizontal\",\"vertical\",\"none\"],roundness:[.5,0,1,.05]},width:[1,0,30,1]},layout:{hierarchical:{enabled:!1,levelSeparation:[150,20,500,5],nodeSpacing:[100,20,500,5],treeSpacing:[200,20,500,5],blockShifting:!0,edgeMinimization:!0,parentCentralization:!0,direction:[\"UD\",\"DU\",\"LR\",\"RL\"],sortMethod:[\"hubsize\",\"directed\"],shakeTowards:[\"leaves\",\"roots\"]}},interaction:{dragNodes:!0,dragView:!0,hideEdgesOnDrag:!1,hideEdgesOnZoom:!1,hideNodesOnDrag:!1,hover:!1,keyboard:{enabled:!1,speed:{x:[10,0,40,1],y:[10,0,40,1],zoom:[.02,0,.1,.005]},bindToWindow:!0,autoFocus:!0},multiselect:!1,navigationButtons:!1,selectable:!0,selectConnectedEdges:!0,hoverConnectedEdges:!0,tooltipDelay:[300,0,1e3,25],zoomView:!0,zoomSpeed:[1,.1,2,.1]},manipulation:{enabled:!1,initiallyActive:!1},physics:{enabled:!0,barnesHut:{theta:[.5,.1,1,.05],gravitationalConstant:[-2e3,-3e4,0,50],centralGravity:[.3,0,10,.05],springLength:[95,0,500,5],springConstant:[.04,0,1.2,.005],damping:[.09,0,1,.01],avoidOverlap:[0,0,1,.01]},forceAtlas2Based:{theta:[.5,.1,1,.05],gravitationalConstant:[-50,-500,0,1],centralGravity:[.01,0,1,.005],springLength:[95,0,500,5],springConstant:[.08,0,1.2,.005],damping:[.4,0,1,.01],avoidOverlap:[0,0,1,.01]},repulsion:{centralGravity:[.2,0,10,.05],springLength:[200,0,500,5],springConstant:[.05,0,1.2,.005],nodeDistance:[100,0,500,5],damping:[.09,0,1,.01]},hierarchicalRepulsion:{centralGravity:[.2,0,10,.05],springLength:[100,0,500,5],springConstant:[.01,0,1.2,.005],nodeDistance:[120,0,500,5],damping:[.09,0,1,.01],avoidOverlap:[0,0,1,.01]},maxVelocity:[50,0,150,1],minVelocity:[.1,.01,.5,.01],solver:[\"barnesHut\",\"forceAtlas2Based\",\"repulsion\",\"hierarchicalRepulsion\"],timestep:[.5,.01,1,.01],wind:{x:[0,-10,10,.1],y:[0,-10,10,.1]}}},Nv=function(t,e,i){var n;return!(!dr(t).call(t,\"physics\")||!dr(n=zv.physics.solver).call(n,e)||i.physics.solver===e||\"wind\"===e)},Av=Object.freeze({__proto__:null,configuratorHideOption:Nv,allOptions:Bv,configureOptions:zv}),Fv=function(){function t(){Nn(this,t)}return Fn(t,[{key:\"getDistances\",value:function(t,e,i){for(var n={},o=t.edges,r=0;r<e.length;r++){var s={};n[e[r]]=s;for(var a=0;a<e.length;a++)s[e[a]]=r==a?0:1e9}for(var h=0;h<i.length;h++){var l=o[i[h]];!0===l.connected&&void 0!==n[l.fromId]&&void 0!==n[l.toId]&&(n[l.fromId][l.toId]=1,n[l.toId][l.fromId]=1)}for(var d=e.length,c=0;c<d;c++)for(var u=e[c],f=n[u],p=0;p<d-1;p++)for(var v=e[p],g=n[v],y=p+1;y<d;y++){var m=e[y],b=n[m],w=Math.min(g[m],g[u]+f[m]);g[m]=w,b[v]=w}return n}}]),t}(),jv=function(){function t(e,i,n){Nn(this,t),this.body=e,this.springLength=i,this.springConstant=n,this.distanceSolver=new Fv}return Fn(t,[{key:\"setOptions\",value:function(t){t&&(t.springLength&&(this.springLength=t.springLength),t.springConstant&&(this.springConstant=t.springConstant))}},{key:\"solve\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=this.distanceSolver.getDistances(this.body,t,e);this._createL_matrix(n),this._createK_matrix(n),this._createE_matrix();for(var o=.01,r=1,s=0,a=Math.max(1e3,Math.min(10*this.body.nodeIndices.length,6e3)),h=5,l=1e9,d=0,c=0,u=0,f=0,p=0;l>o&&s<a;){s+=1;var v=this._getHighestEnergyNode(i),g=uo(v,4);for(d=g[0],l=g[1],c=g[2],u=g[3],f=l,p=0;f>r&&p<h;){p+=1,this._moveNode(d,c,u);var y=this._getEnergy(d),m=uo(y,3);f=m[0],c=m[1],u=m[2]}}}},{key:\"_getHighestEnergyNode\",value:function(t){for(var e=this.body.nodeIndices,i=this.body.nodes,n=0,o=e[0],r=0,s=0,a=0;a<e.length;a++){var h=e[a];if(!0!==i[h].predefinedPosition||!0===i[h].isCluster&&!0===t||!0!==i[h].options.fixed.x||!0!==i[h].options.fixed.y){var l=this._getEnergy(h),d=uo(l,3),c=d[0],u=d[1],f=d[2];n<c&&(n=c,o=h,r=u,s=f)}}return[o,n,r,s]}},{key:\"_getEnergy\",value:function(t){var e=uo(this.E_sums[t],2),i=e[0],n=e[1];return[Math.sqrt(Math.pow(i,2)+Math.pow(n,2)),i,n]}},{key:\"_moveNode\",value:function(t,e,i){for(var n=this.body.nodeIndices,o=this.body.nodes,r=0,s=0,a=0,h=o[t].x,l=o[t].y,d=this.K_matrix[t],c=this.L_matrix[t],u=0;u<n.length;u++){var f=n[u];if(f!==t){var p=o[f].x,v=o[f].y,g=d[f],y=c[f],m=1/Math.pow(Math.pow(h-p,2)+Math.pow(l-v,2),1.5);r+=g*(1-y*Math.pow(l-v,2)*m),s+=g*(y*(h-p)*(l-v)*m),a+=g*(1-y*Math.pow(h-p,2)*m)}}var b=(e/r+i/s)/(s/r-a/s),w=-(s*b+e)/r;o[t].x+=w,o[t].y+=b,this._updateE_matrix(t)}},{key:\"_createL_matrix\",value:function(t){var e=this.body.nodeIndices,i=this.springLength;this.L_matrix=[];for(var n=0;n<e.length;n++){this.L_matrix[e[n]]={};for(var o=0;o<e.length;o++)this.L_matrix[e[n]][e[o]]=i*t[e[n]][e[o]]}}},{key:\"_createK_matrix\",value:function(t){var e=this.body.nodeIndices,i=this.springConstant;this.K_matrix=[];for(var n=0;n<e.length;n++){this.K_matrix[e[n]]={};for(var o=0;o<e.length;o++)this.K_matrix[e[n]][e[o]]=i*Math.pow(t[e[n]][e[o]],-2)}}},{key:\"_createE_matrix\",value:function(){var t=this.body.nodeIndices,e=this.body.nodes;this.E_matrix={},this.E_sums={};for(var i=0;i<t.length;i++)this.E_matrix[t[i]]=[];for(var n=0;n<t.length;n++){for(var o=t[n],r=e[o].x,s=e[o].y,a=0,h=0,l=n;l<t.length;l++){var d=t[l];if(d!==o){var c=e[d].x,u=e[d].y,f=1/Math.sqrt(Math.pow(r-c,2)+Math.pow(s-u,2));this.E_matrix[o][l]=[this.K_matrix[o][d]*(r-c-this.L_matrix[o][d]*(r-c)*f),this.K_matrix[o][d]*(s-u-this.L_matrix[o][d]*(s-u)*f)],this.E_matrix[d][n]=this.E_matrix[o][l],a+=this.E_matrix[o][l][0],h+=this.E_matrix[o][l][1]}}this.E_sums[o]=[a,h]}}},{key:\"_updateE_matrix\",value:function(t){for(var e=this.body.nodeIndices,i=this.body.nodes,n=this.E_matrix[t],o=this.K_matrix[t],r=this.L_matrix[t],s=i[t].x,a=i[t].y,h=0,l=0,d=0;d<e.length;d++){var c=e[d];if(c!==t){var u=n[d],f=u[0],p=u[1],v=i[c].x,g=i[c].y,y=1/Math.sqrt(Math.pow(s-v,2)+Math.pow(a-g,2)),m=o[c]*(s-v-r[c]*(s-v)*y),b=o[c]*(a-g-r[c]*(a-g)*y);n[d]=[m,b],h+=m,l+=b;var w=this.E_sums[c];w[0]+=m-f,w[1]+=b-p}}this.E_sums[t]=[h,l]}}]),t}();function Rv(t,e,i){var n,o,r,s,a=this;if(!(this instanceof Rv))throw new SyntaxError(\"Constructor must be called with the new operator\");this.options={},this.defaultOptions={locale:\"en\",locales:Kl,clickToUse:!1},At(this.options,this.defaultOptions),this.body={container:t,nodes:{},nodeIndices:[],edges:{},edgeIndices:[],emitter:{on:Vt(n=this.on).call(n,this),off:Vt(o=this.off).call(o,this),emit:Vt(r=this.emit).call(r,this),once:Vt(s=this.once).call(s,this)},eventListeners:{onTap:function(){},onTouch:function(){},onDoubleTap:function(){},onHold:function(){},onDragStart:function(){},onDrag:function(){},onDragEnd:function(){},onMouseWheel:function(){},onPinch:function(){},onMouseMove:function(){},onRelease:function(){},onContext:function(){}},data:{nodes:null,edges:null},functions:{createNode:function(){},createEdge:function(){},getPointer:function(){}},modules:{},view:{scale:1,translation:{x:0,y:0}},selectionBox:{show:!1,position:{start:{x:0,y:0},end:{x:0,y:0}}}},this.bindEventListeners(),this.images=new Zl((function(){return a.body.emitter.emit(\"_requestRedraw\")})),this.groups=new gd,this.canvas=new Ep(this.body),this.selectionHandler=new ov(this.body,this.canvas),this.interactionHandler=new Ip(this.body,this.canvas,this.selectionHandler),this.view=new Cp(this.body,this.canvas),this.renderer=new wp(this.body,this.canvas),this.physics=new fp(this.body),this.layoutEngine=new _v(this.body),this.clustering=new yp(this.body),this.manipulation=new Ov(this.body,this.canvas,this.selectionHandler,this.interactionHandler),this.nodesHandler=new pf(this.body,this.images,this.groups,this.layoutEngine),this.edgesHandler=new ip(this.body,this.images,this.groups),this.body.modules.kamadaKawai=new jv(this.body,150,.05),this.body.modules.clustering=this.clustering,this.canvas._create(),this.setOptions(i),this.setData(e)}function Lv(t){for(var e in t)Object.prototype.hasOwnProperty.call(t,e)&&(t[e].redundant=t[e].used,t[e].used=[])}function Hv(t){for(var e in t)if(Object.prototype.hasOwnProperty.call(t,e)&&t[e].redundant){for(var i=0;i<t[e].redundant.length;i++)t[e].redundant[i].parentNode.removeChild(t[e].redundant[i]);t[e].redundant=[]}}function Wv(t,e,i){var n;return Object.prototype.hasOwnProperty.call(e,t)?e[t].redundant.length>0?(n=e[t].redundant[0],e[t].redundant.shift()):(n=document.createElementNS(\"http://www.w3.org/2000/svg\",t),i.appendChild(n)):(n=document.createElementNS(\"http://www.w3.org/2000/svg\",t),e[t]={used:[],redundant:[]},i.appendChild(n)),e[t].used.push(n),n}Zt(Rv.prototype),Rv.prototype.setOptions=function(t){var e=this;if(null===t&&(t=void 0),void 0!==t){!0===ul.validate(t,Bv)&&console.error(\"%cErrors have been found in the supplied options object.\",cl);if(Eh([\"locale\",\"locales\",\"clickToUse\"],this.options,t),void 0!==t.locale&&(t.locale=function(t,e){try{var i=e.split(/[-_ /]/,2),n=uo(i,2),o=n[0],r=n[1],s=null!=o?o.toLowerCase():null,a=null!=r?r.toUpperCase():null;if(s&&a){var h,l=s+\"-\"+a;if(Object.prototype.hasOwnProperty.call(t,l))return l;console.warn(Eo(h=\"Unknown variant \".concat(a,\" of language \")).call(h,s,\".\"))}if(s){var d=s;if(Object.prototype.hasOwnProperty.call(t,d))return d;console.warn(\"Unknown language \".concat(s))}return console.warn(\"Unknown locale \".concat(e,\", falling back to English.\")),\"en\"}catch(t){return console.error(t),console.warn(\"Unexpected error while normalizing locale \".concat(e,\", falling back to English.\")),\"en\"}}(t.locales||this.options.locales,t.locale)),t=this.layoutEngine.setOptions(t.layout,t),this.canvas.setOptions(t),this.groups.setOptions(t.groups),this.nodesHandler.setOptions(t.nodes),this.edgesHandler.setOptions(t.edges),this.physics.setOptions(t.physics),this.manipulation.setOptions(t.manipulation,t,this.options),this.interactionHandler.setOptions(t.interaction),this.renderer.setOptions(t.interaction),this.selectionHandler.setOptions(t.interaction),void 0!==t.groups&&this.body.emitter.emit(\"refreshNodes\"),\"configure\"in t&&(this.configurator||(this.configurator=new hl(this,this.body.container,zv,this.canvas.pixelRatio,Nv)),this.configurator.setOptions(t.configure)),this.configurator&&!0===this.configurator.options.enabled){var i={nodes:{},edges:{},layout:{},interaction:{},manipulation:{},physics:{},global:{}};Ch(i.nodes,this.nodesHandler.options),Ch(i.edges,this.edgesHandler.options),Ch(i.layout,this.layoutEngine.options),Ch(i.interaction,this.selectionHandler.options),Ch(i.interaction,this.renderer.options),Ch(i.interaction,this.interactionHandler.options),Ch(i.manipulation,this.manipulation.options),Ch(i.physics,this.physics.options),Ch(i.global,this.canvas.options),Ch(i.global,this.options),this.configurator.setModuleOptions(i)}void 0!==t.clickToUse?!0===t.clickToUse?void 0===this.activator&&(this.activator=new sl(this.canvas.frame),this.activator.on(\"change\",(function(){e.body.emitter.emit(\"activate\")}))):(void 0!==this.activator&&(this.activator.destroy(),delete this.activator),this.body.emitter.emit(\"activate\")):this.body.emitter.emit(\"activate\"),this.canvas.setSize(),this.body.emitter.emit(\"startSimulation\")}},Rv.prototype._updateVisibleIndices=function(){var t=this.body.nodes,e=this.body.edges;for(var i in this.body.nodeIndices=[],this.body.edgeIndices=[],t)Object.prototype.hasOwnProperty.call(t,i)&&(this.clustering._isClusteredNode(i)||!1!==t[i].options.hidden||this.body.nodeIndices.push(t[i].id));for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){var o=e[n],r=t[o.fromId],s=t[o.toId],a=void 0!==r&&void 0!==s;!this.clustering._isClusteredEdge(n)&&!1===o.options.hidden&&a&&!1===r.options.hidden&&!1===s.options.hidden&&this.body.edgeIndices.push(o.id)}},Rv.prototype.bindEventListeners=function(){var t=this;this.body.emitter.on(\"_dataChanged\",(function(){t.edgesHandler._updateState(),t.body.emitter.emit(\"_dataUpdated\")})),this.body.emitter.on(\"_dataUpdated\",(function(){t.clustering._updateState(),t._updateVisibleIndices(),t._updateValueRange(t.body.nodes),t._updateValueRange(t.body.edges),t.body.emitter.emit(\"startSimulation\"),t.body.emitter.emit(\"_requestRedraw\")}))},Rv.prototype.setData=function(t){if(this.body.emitter.emit(\"resetPhysics\"),this.body.emitter.emit(\"_resetData\"),this.selectionHandler.unselectAll(),t&&t.dot&&(t.nodes||t.edges))throw new SyntaxError('Data must contain either parameter \"dot\" or  parameter pair \"nodes\" and \"edges\", but not both.');if(this.setOptions(t&&t.options),t&&t.dot){console.warn(\"The dot property has been deprecated. Please use the static convertDot method to convert DOT into vis.network format and use the normal data format with nodes and edges. This converter is used like this: var data = vis.network.convertDot(dotString);\");var e=Ul(t.dot);this.setData(e)}else if(t&&t.gephi){console.warn(\"The gephi property has been deprecated. Please use the static convertGephi method to convert gephi into vis.network format and use the normal data format with nodes and edges. This converter is used like this: var data = vis.network.convertGephi(gephiJson);\");var i=Xl(t.gephi);this.setData(i)}else this.nodesHandler.setData(t&&t.nodes,!0),this.edgesHandler.setData(t&&t.edges,!0),this.body.emitter.emit(\"_dataChanged\"),this.body.emitter.emit(\"_dataLoaded\"),this.body.emitter.emit(\"initPhysics\")},Rv.prototype.destroy=function(){for(var t in this.body.emitter.emit(\"destroy\"),this.body.emitter.off(),this.off(),delete this.groups,delete this.canvas,delete this.selectionHandler,delete this.interactionHandler,delete this.view,delete this.renderer,delete this.physics,delete this.layoutEngine,delete this.clustering,delete this.manipulation,delete this.nodesHandler,delete this.edgesHandler,delete this.configurator,delete this.images,this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,t)&&delete this.body.nodes[t];for(var e in this.body.edges)Object.prototype.hasOwnProperty.call(this.body.edges,e)&&delete this.body.edges[e];mh(this.body.container)},Rv.prototype._updateValueRange=function(t){var e,i=void 0,n=void 0,o=0;for(e in t)if(Object.prototype.hasOwnProperty.call(t,e)){var r=t[e].getValue();void 0!==r&&(i=void 0===i?r:Math.min(r,i),n=void 0===n?r:Math.max(r,n),o+=r)}if(void 0!==i&&void 0!==n)for(e in t)Object.prototype.hasOwnProperty.call(t,e)&&t[e].setValueRange(i,n,o)},Rv.prototype.isActive=function(){return!this.activator||this.activator.active},Rv.prototype.setSize=function(){return this.canvas.setSize.apply(this.canvas,arguments)},Rv.prototype.canvasToDOM=function(){return this.canvas.canvasToDOM.apply(this.canvas,arguments)},Rv.prototype.DOMtoCanvas=function(){return this.canvas.DOMtoCanvas.apply(this.canvas,arguments)},Rv.prototype.findNode=function(){return this.clustering.findNode.apply(this.clustering,arguments)},Rv.prototype.isCluster=function(){return this.clustering.isCluster.apply(this.clustering,arguments)},Rv.prototype.openCluster=function(){return this.clustering.openCluster.apply(this.clustering,arguments)},Rv.prototype.cluster=function(){return this.clustering.cluster.apply(this.clustering,arguments)},Rv.prototype.getNodesInCluster=function(){return this.clustering.getNodesInCluster.apply(this.clustering,arguments)},Rv.prototype.clusterByConnection=function(){return this.clustering.clusterByConnection.apply(this.clustering,arguments)},Rv.prototype.clusterByHubsize=function(){return this.clustering.clusterByHubsize.apply(this.clustering,arguments)},Rv.prototype.updateClusteredNode=function(){return this.clustering.updateClusteredNode.apply(this.clustering,arguments)},Rv.prototype.getClusteredEdges=function(){return this.clustering.getClusteredEdges.apply(this.clustering,arguments)},Rv.prototype.getBaseEdge=function(){return this.clustering.getBaseEdge.apply(this.clustering,arguments)},Rv.prototype.getBaseEdges=function(){return this.clustering.getBaseEdges.apply(this.clustering,arguments)},Rv.prototype.updateEdge=function(){return this.clustering.updateEdge.apply(this.clustering,arguments)},Rv.prototype.clusterOutliers=function(){return this.clustering.clusterOutliers.apply(this.clustering,arguments)},Rv.prototype.getSeed=function(){return this.layoutEngine.getSeed.apply(this.layoutEngine,arguments)},Rv.prototype.enableEditMode=function(){return this.manipulation.enableEditMode.apply(this.manipulation,arguments)},Rv.prototype.disableEditMode=function(){return this.manipulation.disableEditMode.apply(this.manipulation,arguments)},Rv.prototype.addNodeMode=function(){return this.manipulation.addNodeMode.apply(this.manipulation,arguments)},Rv.prototype.editNode=function(){return this.manipulation.editNode.apply(this.manipulation,arguments)},Rv.prototype.editNodeMode=function(){return console.warn(\"Deprecated: Please use editNode instead of editNodeMode.\"),this.manipulation.editNode.apply(this.manipulation,arguments)},Rv.prototype.addEdgeMode=function(){return this.manipulation.addEdgeMode.apply(this.manipulation,arguments)},Rv.prototype.editEdgeMode=function(){return this.manipulation.editEdgeMode.apply(this.manipulation,arguments)},Rv.prototype.deleteSelected=function(){return this.manipulation.deleteSelected.apply(this.manipulation,arguments)},Rv.prototype.getPositions=function(){return this.nodesHandler.getPositions.apply(this.nodesHandler,arguments)},Rv.prototype.getPosition=function(){return this.nodesHandler.getPosition.apply(this.nodesHandler,arguments)},Rv.prototype.storePositions=function(){return this.nodesHandler.storePositions.apply(this.nodesHandler,arguments)},Rv.prototype.moveNode=function(){return this.nodesHandler.moveNode.apply(this.nodesHandler,arguments)},Rv.prototype.getBoundingBox=function(){return this.nodesHandler.getBoundingBox.apply(this.nodesHandler,arguments)},Rv.prototype.getConnectedNodes=function(t){return void 0!==this.body.nodes[t]?this.nodesHandler.getConnectedNodes.apply(this.nodesHandler,arguments):this.edgesHandler.getConnectedNodes.apply(this.edgesHandler,arguments)},Rv.prototype.getConnectedEdges=function(){return this.nodesHandler.getConnectedEdges.apply(this.nodesHandler,arguments)},Rv.prototype.startSimulation=function(){return this.physics.startSimulation.apply(this.physics,arguments)},Rv.prototype.stopSimulation=function(){return this.physics.stopSimulation.apply(this.physics,arguments)},Rv.prototype.stabilize=function(){return this.physics.stabilize.apply(this.physics,arguments)},Rv.prototype.getSelection=function(){return this.selectionHandler.getSelection.apply(this.selectionHandler,arguments)},Rv.prototype.setSelection=function(){return this.selectionHandler.setSelection.apply(this.selectionHandler,arguments)},Rv.prototype.getSelectedNodes=function(){return this.selectionHandler.getSelectedNodeIds.apply(this.selectionHandler,arguments)},Rv.prototype.getSelectedEdges=function(){return this.selectionHandler.getSelectedEdgeIds.apply(this.selectionHandler,arguments)},Rv.prototype.getNodeAt=function(){var t=this.selectionHandler.getNodeAt.apply(this.selectionHandler,arguments);return void 0!==t&&void 0!==t.id?t.id:t},Rv.prototype.getEdgeAt=function(){var t=this.selectionHandler.getEdgeAt.apply(this.selectionHandler,arguments);return void 0!==t&&void 0!==t.id?t.id:t},Rv.prototype.selectNodes=function(){return this.selectionHandler.selectNodes.apply(this.selectionHandler,arguments)},Rv.prototype.selectEdges=function(){return this.selectionHandler.selectEdges.apply(this.selectionHandler,arguments)},Rv.prototype.unselectAll=function(){this.selectionHandler.unselectAll.apply(this.selectionHandler,arguments),this.selectionHandler.commitWithoutEmitting.apply(this.selectionHandler),this.redraw()},Rv.prototype.redraw=function(){return this.renderer.redraw.apply(this.renderer,arguments)},Rv.prototype.getScale=function(){return this.view.getScale.apply(this.view,arguments)},Rv.prototype.getViewPosition=function(){return this.view.getViewPosition.apply(this.view,arguments)},Rv.prototype.fit=function(){return this.view.fit.apply(this.view,arguments)},Rv.prototype.moveTo=function(){return this.view.moveTo.apply(this.view,arguments)},Rv.prototype.focus=function(){return this.view.focus.apply(this.view,arguments)},Rv.prototype.releaseNode=function(){return this.view.releaseNode.apply(this.view,arguments)},Rv.prototype.getOptionsFromConfigurator=function(){var t={};return this.configurator&&(t=this.configurator.getOptions.apply(this.configurator)),t};var qv=Object.freeze({__proto__:null,prepareElements:Lv,cleanupElements:Hv,resetElements:function(t){Lv(t),Hv(t),Lv(t)},getSVGElement:Wv,getDOMElement:function(t,e,i,n){var o;return Object.prototype.hasOwnProperty.call(e,t)?e[t].redundant.length>0?(o=e[t].redundant[0],e[t].redundant.shift()):(o=document.createElement(t),void 0!==n?i.insertBefore(o,n):i.appendChild(o)):(o=document.createElement(t),e[t]={used:[],redundant:[]},void 0!==n?i.insertBefore(o,n):i.appendChild(o)),e[t].used.push(o),o},drawPoint:function(t,e,i,n,o,r){var s;if(\"circle\"==i.style?((s=Wv(\"circle\",n,o)).setAttributeNS(null,\"cx\",t),s.setAttributeNS(null,\"cy\",e),s.setAttributeNS(null,\"r\",.5*i.size)):((s=Wv(\"rect\",n,o)).setAttributeNS(null,\"x\",t-.5*i.size),s.setAttributeNS(null,\"y\",e-.5*i.size),s.setAttributeNS(null,\"width\",i.size),s.setAttributeNS(null,\"height\",i.size)),void 0!==i.styles&&s.setAttributeNS(null,\"style\",i.styles),s.setAttributeNS(null,\"class\",i.className+\" vis-point\"),r){var a=Wv(\"text\",n,o);r.xOffset&&(t+=r.xOffset),r.yOffset&&(e+=r.yOffset),r.content&&(a.textContent=r.content),r.className&&a.setAttributeNS(null,\"class\",r.className+\" vis-label\"),a.setAttributeNS(null,\"x\",t),a.setAttributeNS(null,\"y\",e)}return s},drawBar:function(t,e,i,n,o,r,s,a){if(0!=n){n<0&&(e-=n*=-1);var h=Wv(\"rect\",r,s);h.setAttributeNS(null,\"x\",t-.5*i),h.setAttributeNS(null,\"y\",e),h.setAttributeNS(null,\"width\",i),h.setAttributeNS(null,\"height\",n),h.setAttributeNS(null,\"class\",o),a&&h.setAttributeNS(null,\"style\",a)}}}),Vv={Images:Zl,dotparser:Yl,gephiParser:Gl,allOptions:Av,convertDot:Ul,convertGephi:Xl},Uv=Object.freeze({__proto__:null,network:Vv,DOMutil:qv,util:fl,data:ou,Hammer:ll,keycharm:Tp,DataSet:tu,DataView:eu,Queue:Zc,Network:Rv});t.DOMutil=qv,t.DataSet=tu,t.DataView=eu,t.Hammer=ll,t.Network=Rv,t.Queue=Zc,t.data=ou,t.default=Uv,t.keycharm=Tp,t.network=Vv,t.util=fl,Object.defineProperty(t,\"__esModule\",{value:!0})}\n",
       "  // ));\n",
       "  // # sourceMappingURL=vis-network.min.js.map\n",
       "\n",
       "  );\n",
       "}\n",
       "\n",
       "\n",
       "    require([\"gravis-vis-network\"], function(vis){\n",
       "      // Strict mode: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Strict_mode\n",
       "      \"use strict\";\n",
       "\n",
       "      const state = {\n",
       "        manager:{\n",
       "          // Data generation process: 1) Fetch state.rawData, 2) derive state.parsedData, 3) derive state.shownData\n",
       "\n",
       "          // 1) Fetch state.rawData\n",
       "          fetchRawDataFromTemplating(){\n",
       "            state.rawData = [{\"directed\": true, \"metadata\": {\"node_color\": \"black\", \"node_opacity\": 1, \"node_size\": 10, \"node_shape\": \"circle\", \"node_border_color\": \"black\", \"node_border_size\": 1, \"node_label_color\": \"black\", \"node_label_size\": 10, \"edge_color\": \"#999\", \"edge_opacity\": 1, \"edge_size\": 2, \"edge_shape\": \"circle\", \"edge_border_color\": \"#999\", \"edge_border_size\": 1, \"edge_label_color\": \"black\", \"edge_label_size\": 10, \"arrow_size\": 4, \"arrow_color\": \"#999\"}, \"nodes\": {\"r1MhwkDR9RGGNg07nIf5BQ\": {\"label\": \"Tom\", \"metadata\": {\"focus\": \"target\", \"label\": \"Tom\", \"color\": \"#f07f65\", \"size\": 20}}, \"dQIuZHbv+9dqtJ8fO/8rnA\": {\"label\": \"ACME Bank\", \"metadata\": {\"focus\": \"source\", \"label\": \"ACME Bank\", \"color\": \"#edb551\", \"size\": 20}}, \"JIMOIAq9XU0WsAXPLHQRBg\": {\"label\": \"MyBank\", \"metadata\": {\"label\": \"MyBank\", \"color\": \"#92979c\", \"size\": 10}}, \"gb8VMWs5dsc6cteL2DOYCA\": {\"label\": \"ElysiumTech Solutions\", \"metadata\": {\"label\": \"ElysiumTech Solutions\", \"color\": \"#92979c\", \"size\": 10}}, \"nToxQTWUkZ4gv4iAItXSKw\": {\"label\": \"NovaCore Innovations\", \"metadata\": {\"label\": \"NovaCore Innovations\", \"color\": \"#92979c\", \"size\": 10}}, \"DuOTZpKAvOFRrhddS9d3NA\": {\"label\": \"InfinityForge Technologies\", \"metadata\": {\"label\": \"InfinityForge Technologies\", \"color\": \"#92979c\", \"size\": 10}}, \"AOWmwJayFKAjAmmIlk8yOQ\": {\"label\": \"Family Doe\", \"metadata\": {\"label\": \"Family Doe\", \"color\": \"#92979c\", \"size\": 10}}, \"YlVLHV5wCROpp3hW3nbNOQ\": {\"label\": \"PhoenixRise Ventures\", \"metadata\": {\"label\": \"PhoenixRise Ventures\", \"color\": \"#92979c\", \"size\": 10}}, \"MYXtcytg7uj+rAyOjYhBQA\": {\"label\": \"People Bank\", \"metadata\": {\"label\": \"People Bank\", \"color\": \"#92979c\", \"size\": 10}}, \"uVH0cGqXVe7/eDYLCwW6XQ\": {\"label\": \"NebulaTech Solutions\", \"metadata\": {\"label\": \"NebulaTech Solutions\", \"color\": \"#92979c\", \"size\": 10}}, \"249BMZupWCFjqM7zue27iQ\": {\"label\": \"Quantum Dynamics Innovations\", \"metadata\": {\"label\": \"Quantum Dynamics Innovations\", \"color\": \"#92979c\", \"size\": 10}}, \"77IlFbWAmT0DYKSlTSVLjg\": {\"label\": \"CyberNexus Systems\", \"metadata\": {\"label\": \"CyberNexus Systems\", \"color\": \"#92979c\", \"size\": 10}}, \"cW6S8m7PKwayYyrUFQOwnA\": {\"label\": \"Mary\", \"metadata\": {\"label\": \"Mary\", \"color\": \"#92979c\", \"size\": 10}}, \"IWkBDvnHtyJq/z5hVPdgnQ\": {\"label\": \"DreamScape Enterprises\", \"metadata\": {\"label\": \"DreamScape Enterprises\", \"color\": \"#92979c\", \"size\": 10}}, \"B2ENslGgWUXwghQigOV/ng\": {\"label\": \"StellarSphere Enterprises\", \"metadata\": {\"label\": \"StellarSphere Enterprises\", \"color\": \"#92979c\", \"size\": 10}}, \"hZwSJYPIqnQL6SP8CAMJog\": {\"label\": \"CelestialWave Industries\", \"metadata\": {\"label\": \"CelestialWave Industries\", \"color\": \"#92979c\", \"size\": 10}}, \"sAvunE8/tDW5b4Q7IVNIwg\": {\"label\": \"Anna\", \"metadata\": {\"label\": \"Anna\", \"color\": \"#92979c\", \"size\": 10}}, \"Lh2x5E3rMHHKwYTA4a3yyQ\": {\"label\": \"ACME Trust\", \"metadata\": {\"label\": \"ACME Trust\", \"color\": \"#92979c\", \"size\": 10}}, \"sIMZM6956KBcjN/vk1rXzA\": {\"label\": \"Bob\", \"metadata\": {\"label\": \"Bob\", \"color\": \"#92979c\", \"size\": 10}}}, \"edges\": [{\"source\": \"JIMOIAq9XU0WsAXPLHQRBg\", \"target\": \"uVH0cGqXVe7/eDYLCwW6XQ\", \"metadata\": {\"weight\": 0.7, \"color\": \"#92979c\", \"label\": \"70.00%\", \"size\": 3.5}}, {\"source\": \"JIMOIAq9XU0WsAXPLHQRBg\", \"target\": \"249BMZupWCFjqM7zue27iQ\", \"metadata\": {\"weight\": 0.12, \"color\": \"#92979c\", \"label\": \"12.00%\", \"size\": 0.6}}, {\"source\": \"JIMOIAq9XU0WsAXPLHQRBg\", \"target\": \"dQIuZHbv+9dqtJ8fO/8rnA\", \"metadata\": {\"weight\": 0.34, \"color\": \"#92979c\", \"label\": \"34.00%\", \"size\": 1.7000000000000002}}, {\"source\": \"JIMOIAq9XU0WsAXPLHQRBg\", \"target\": \"B2ENslGgWUXwghQigOV/ng\", \"metadata\": {\"weight\": 0.65, \"color\": \"#92979c\", \"label\": \"65.00%\", \"size\": 3.25}}, {\"source\": \"nToxQTWUkZ4gv4iAItXSKw\", \"target\": \"gb8VMWs5dsc6cteL2DOYCA\", \"metadata\": {\"weight\": 0.11, \"color\": \"#92979c\", \"label\": \"11.00%\", \"size\": 0.55}}, {\"source\": \"nToxQTWUkZ4gv4iAItXSKw\", \"target\": \"dQIuZHbv+9dqtJ8fO/8rnA\", \"metadata\": {\"weight\": 0.15, \"color\": \"#92979c\", \"label\": \"15.00%\", \"size\": 0.75}}, {\"source\": \"YlVLHV5wCROpp3hW3nbNOQ\", \"target\": \"nToxQTWUkZ4gv4iAItXSKw\", \"metadata\": {\"weight\": 0.81, \"color\": \"#92979c\", \"label\": \"81.00%\", \"size\": 4.050000000000001}}, {\"source\": \"YlVLHV5wCROpp3hW3nbNOQ\", \"target\": \"IWkBDvnHtyJq/z5hVPdgnQ\", \"metadata\": {\"weight\": 0.03, \"color\": \"#92979c\", \"label\": \"3.00%\", \"size\": 0.15}}, {\"source\": \"YlVLHV5wCROpp3hW3nbNOQ\", \"target\": \"hZwSJYPIqnQL6SP8CAMJog\", \"metadata\": {\"weight\": 0.4, \"color\": \"#92979c\", \"label\": \"40.00%\", \"size\": 2.0}}, {\"source\": \"MYXtcytg7uj+rAyOjYhBQA\", \"target\": \"Lh2x5E3rMHHKwYTA4a3yyQ\", \"metadata\": {\"weight\": 0.93, \"color\": \"#92979c\", \"label\": \"93.00%\", \"size\": 4.65}}, {\"source\": \"B2ENslGgWUXwghQigOV/ng\", \"target\": \"DuOTZpKAvOFRrhddS9d3NA\", \"metadata\": {\"weight\": 0.4, \"color\": \"#92979c\", \"label\": \"40.00%\", \"size\": 2.0}}, {\"source\": \"B2ENslGgWUXwghQigOV/ng\", \"target\": \"YlVLHV5wCROpp3hW3nbNOQ\", \"metadata\": {\"weight\": 0.61, \"color\": \"#92979c\", \"label\": \"61.00%\", \"size\": 3.05}}, {\"source\": \"B2ENslGgWUXwghQigOV/ng\", \"target\": \"77IlFbWAmT0DYKSlTSVLjg\", \"metadata\": {\"weight\": 1.0, \"color\": \"#92979c\", \"label\": \"100.00%\", \"size\": 5.0}}, {\"source\": \"hZwSJYPIqnQL6SP8CAMJog\", \"target\": \"dQIuZHbv+9dqtJ8fO/8rnA\", \"metadata\": {\"weight\": 0.45, \"color\": \"#92979c\", \"label\": \"45.00%\", \"size\": 2.25}}, {\"source\": \"sAvunE8/tDW5b4Q7IVNIwg\", \"target\": \"JIMOIAq9XU0WsAXPLHQRBg\", \"metadata\": {\"weight\": 0.32, \"color\": \"#92979c\", \"label\": \"32.00%\", \"size\": 1.6}}, {\"source\": \"Lh2x5E3rMHHKwYTA4a3yyQ\", \"target\": \"JIMOIAq9XU0WsAXPLHQRBg\", \"metadata\": {\"weight\": 0.23, \"color\": \"#92979c\", \"label\": \"23.00%\", \"size\": 1.1500000000000001}}]}];\n",
       "            // Data selection and normalization\n",
       "            state.nodeSizeDataSource = \"size\";\n",
       "            state.useNodeSizeNormalization = false;\n",
       "            state.nodeSizeNormalizationMin = 5.0;\n",
       "            state.nodeSizeNormalizationMax = 75.0;\n",
       "            state.nodeLabelTextDataSource = \"label\";\n",
       "            state.edgeSizeDataSource = \"size\";\n",
       "            state.useEdgeSizeNormalization = false;\n",
       "            state.edgeSizeNormalizationMin = 0.2;\n",
       "            state.edgeSizeNormalizationMax = 5.0;\n",
       "            state.edgeLabelTextDataSource = \"label\";\n",
       "            // Containers\n",
       "            state.graphContainerHeight = 450;\n",
       "            state.detailsContainerHeight = 100;\n",
       "            state.showDetails = false,\n",
       "            state.showDetailsToggleButton = true,\n",
       "            state.showMenu = false,\n",
       "            state.showMenuToggleButton = true,\n",
       "            // Nodes\n",
       "            state.showNodes = true;\n",
       "            state.nodeSizeFactor = 1.0;\n",
       "            state.nodeDragFix = false;\n",
       "            state.nodeHoverNeighborhood = false;\n",
       "            state.nodeHoverTooltip = true;\n",
       "            state.showNodeImages = true;\n",
       "            state.nodeImageSizeFactor = 1.0;\n",
       "            state.showNodeLabels = true;\n",
       "            state.showNodeLabelBorders = true;\n",
       "            state.nodeLabelSizeFactor = 1.0;\n",
       "            state.nodeLabelRotation = 0.0;\n",
       "            state.nodeLabelFont = \"Arial\";\n",
       "            // Edges\n",
       "            state.showEdges = true;\n",
       "            state.edgeSizeFactor = 1.0;\n",
       "            state.edgeCurvature = 0.4;\n",
       "            state.edgeHoverTooltip = true,\n",
       "            state.showEdgeLabels = true;\n",
       "            state.showEdgeLabelBorders = true;\n",
       "            state.edgeLabelSizeFactor = 1.0;\n",
       "            state.edgeLabelRotation = 0.0;\n",
       "            state.edgeLabelFont = \"Arial\";\n",
       "            // Layout algorithm\n",
       "            state.layoutAlgorithmActive = true;\n",
       "            state.layoutAlgorithm = \"barnesHut\";\n",
       "            state.gravitationalConstant = -2000.0;\n",
       "            state.centralGravity = 0.1;\n",
       "            state.springLength = 70.0;\n",
       "            state.springConstant = 0.1;\n",
       "            state.avoidOverlap = 0.0;\n",
       "            // Other\n",
       "            state.initZoomFactor = 0.75;\n",
       "            state.largeGraphThreshold = 500;\n",
       "          },\n",
       "\n",
       "          // 2) Derive state.parsedData from state.givenData\n",
       "          rawDataParser:{\n",
       "            getBool(obj, prop, def){\n",
       "              try{\n",
       "                const value = obj[prop];\n",
       "                if(value == \"true\" || value == \"True\"){\n",
       "                  value = true;\n",
       "                } else if(value == \"false\" || value == \"False\"){\n",
       "                  value = false;\n",
       "                }\n",
       "                if(value !== true && value !== false){\n",
       "                  throw \"Invalid value. Not a bool.\";\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return def;\n",
       "              }\n",
       "              return def\n",
       "            },\n",
       "\n",
       "            getString(obj, prop, def) {\n",
       "              try{\n",
       "                const value = String(obj[prop]);\n",
       "                if(value === \"undefined\"){\n",
       "                  throw \"Invalid value. Not a proper string.\";\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return def;\n",
       "              }\n",
       "              return def;\n",
       "            },\n",
       "\n",
       "            getArrayLengthOrZero(array){\n",
       "              try{\n",
       "                const value = parseInt(array.length);\n",
       "                if(!((value + 1) > 0)){\n",
       "                  throw \"Invalid value. Not a proper length.\";\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return 0;\n",
       "              }\n",
       "            },\n",
       "\n",
       "            getObjectLengthOrZero(obj){\n",
       "              try{\n",
       "                const value = Object.keys(obj).length;\n",
       "                if(!((value + 1) > 0)){\n",
       "                  throw \"Invalid value. Not a proper length.\";\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return 0;\n",
       "              }\n",
       "            },\n",
       "\n",
       "            createUniqueEdgeId(sourceId, targetId, knownEdgeIds){\n",
       "              let newEdgeIdBase = \"(\" + sourceId + \", \" + targetId + \")\",\n",
       "                newEdgeId = newEdgeIdBase,\n",
       "                multiEdgeCounter = 1;\n",
       "              for(let i=1; knownEdgeIds.has(newEdgeId); i++){\n",
       "                newEdgeId = newEdgeIdBase + \"_\" + String(i);\n",
       "                multiEdgeCounter += 1;\n",
       "              }\n",
       "              knownEdgeIds.add(newEdgeId);\n",
       "              return {\"id\": newEdgeId, \"count\": multiEdgeCounter}\n",
       "            },\n",
       "          },\n",
       "\n",
       "          rawMetadataParser:{\n",
       "            getString(obj, prop, def){\n",
       "              try{\n",
       "                const value = String(obj.metadata[prop]);\n",
       "                if(value === \"undefined\"){\n",
       "                  throw \"Invalid value. Not a proper string.\";\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return def;\n",
       "              }\n",
       "            },\n",
       "            getShape(obj, prop, def){\n",
       "              const givenShape = state.manager.rawMetadataParser.getString(obj, prop, def);\n",
       "              let visShape = def;\n",
       "              if(givenShape === \"circle\"){\n",
       "                visShape = \"dot\";\n",
       "              } else if(givenShape === \"rectangle\"){\n",
       "                visShape = \"square\";\n",
       "              } else if(givenShape === \"hexagon\"){\n",
       "                visShape = \"hexagon\";\n",
       "              }\n",
       "              return visShape;\n",
       "            },\n",
       "            getColor(obj, prop, def){\n",
       "              function isBodyidColor(strColor) {\n",
       "                const sty = new Option().style;\n",
       "                sty.color = strColor;\n",
       "                return sty.color !== \"\";\n",
       "              }\n",
       "              try{\n",
       "                const value = obj.metadata[prop];\n",
       "                if(!isBodyidColor(value)){\n",
       "                  throw \"Invalid value. Not a color.\"\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return def;\n",
       "              }\n",
       "            },\n",
       "            getFiniteNumber(obj, prop, def){\n",
       "              try{\n",
       "                const value = parseFloat(obj.metadata[prop]);\n",
       "                if(!isFinite(value) || value === null){\n",
       "                  throw \"Invalid value. Not a finite number.\"\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return def;\n",
       "              }\n",
       "            },\n",
       "            getFiniteNumberOrNull(obj, prop, def){\n",
       "              try{\n",
       "                const value = parseFloat(obj.metadata[prop]);\n",
       "                if(!isFinite(value)){  // Note: isFinite(null) gives true\n",
       "                  throw \"Invalid value. Not a finite number or null.\"\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return def;\n",
       "              }\n",
       "            },\n",
       "            getFinitePositiveNumber(obj, prop, def){\n",
       "              try{\n",
       "                const value = parseFloat(obj.metadata[prop]);\n",
       "                if(!isFinite(value) || value === null || value < 0.0){\n",
       "                  throw \"Invalid value. Not a finite positive number.\"\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return def;\n",
       "              }\n",
       "            },\n",
       "            collectOtherMetadata(sourceObject, targetObject, definedMetadata){\n",
       "              if(typeof(sourceObject) !== \"undefined\" && typeof(sourceObject.metadata) !== \"undefined\"){\n",
       "                const properties = Object.keys(sourceObject.metadata);\n",
       "                for(let i=0; i<properties.length; i++){\n",
       "                  const property = properties[i];\n",
       "                  if(!definedMetadata.has(property)){\n",
       "                    targetObject[property] = sourceObject.metadata[property];\n",
       "                  }\n",
       "                }\n",
       "              }\n",
       "            },\n",
       "          },\n",
       "\n",
       "          propertyClassifier:{\n",
       "            numeric: null,\n",
       "            nonNumeric: null,\n",
       "            init(){\n",
       "              this.numeric = new Set(),\n",
       "              this.nonNumeric = new Set();\n",
       "            },\n",
       "            isNumeric(d){\n",
       "              return d === null || typeof(d) === \"undefined\" || String(parseFloat(d)) === String(d);\n",
       "            },\n",
       "            inspect(object, property){\n",
       "              const value = object[property];\n",
       "              if(!this.nonNumeric.has(property)){\n",
       "                if(this.isNumeric(value)){\n",
       "                  this.numeric.add(property);\n",
       "                } else{\n",
       "                  this.nonNumeric.add(property);\n",
       "                  this.numeric.delete(property);\n",
       "                }\n",
       "              }\n",
       "            }\n",
       "          },\n",
       "\n",
       "          replaceStringVariables(givenString, givenItem, variables){\n",
       "            let newString = givenString;\n",
       "            for(let i=0; i<variables.length; i++){\n",
       "              let variable = variables[i],\n",
       "                variableText = \"$\" + variable;\n",
       "              if(variable === \"x\"){\n",
       "                variable = \"fx\";\n",
       "              } else if (variable === \"y\"){\n",
       "                variable = \"fy\";\n",
       "              }\n",
       "              let insertedText = String(givenItem[variable]);\n",
       "              if(insertedText === \"undefined\"){\n",
       "                insertedText = \"\";\n",
       "              }\n",
       "              newString = newString.replace(variableText, insertedText);\n",
       "            }\n",
       "            return newString;\n",
       "          },\n",
       "\n",
       "          parseGeneral(givenData, parsedData){\n",
       "            parsedData.general = {\n",
       "              // General\n",
       "              directed: state.manager.rawDataParser.getBool(givenData, \"directed\", true),\n",
       "              label: state.manager.rawDataParser.getString(givenData, \"label\", \"\"),\n",
       "              background_color: state.manager.rawMetadataParser.getColor(givenData, \"background_color\", \"white\"),\n",
       "              arrow_color: state.manager.rawMetadataParser.getColor(givenData, \"arrow_color\", \"black\"),\n",
       "              arrow_size: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"arrow_size\", 10.0),\n",
       "              // Nodes\n",
       "              node_color: state.manager.rawMetadataParser.getColor(givenData, \"node_color\", \"black\"),\n",
       "              node_opacity: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"node_opacity\", 1.0),\n",
       "              node_size: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"node_size\", 10.0),\n",
       "              node_shape: state.manager.rawMetadataParser.getString(givenData, \"node_shape\", \"circle\"),\n",
       "              node_border_color: state.manager.rawMetadataParser.getColor(givenData, \"node_border_color\", \"black\"),\n",
       "              node_border_size: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"node_border_size\", 0.0),\n",
       "              node_label_color: state.manager.rawMetadataParser.getColor(givenData, \"node_label_color\", \"black\"),\n",
       "              node_label_size: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"node_label_size\", 12.0),\n",
       "              node_hover: state.manager.rawMetadataParser.getString(givenData, \"node_hover\", \"\"),\n",
       "              node_click: state.manager.rawMetadataParser.getString(givenData, \"node_click\", \"\"),\n",
       "              node_image: state.manager.rawMetadataParser.getString(givenData, \"node_image\", \"\"),\n",
       "              node_x: state.manager.rawMetadataParser.getFiniteNumberOrNull(givenData, \"node_x\", null),\n",
       "              node_y: state.manager.rawMetadataParser.getFiniteNumberOrNull(givenData, \"node_y\", null),\n",
       "              contains_node_hover: false,\n",
       "              contains_node_click: false,\n",
       "              contains_node_image: false,\n",
       "              // Edges\n",
       "              edge_color: state.manager.rawMetadataParser.getColor(givenData, \"edge_color\", \"black\"),\n",
       "              edge_opacity: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"edge_opacity\", 1.0),\n",
       "              edge_size: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"edge_size\", 1.0),\n",
       "              edge_label_color: state.manager.rawMetadataParser.getColor(givenData, \"edge_label_color\", \"black\"),\n",
       "              edge_label_size: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"edge_label_size\", 8.0),\n",
       "              edge_hover: state.manager.rawMetadataParser.getString(givenData, \"edge_hover\", \"\"),\n",
       "              edge_click: state.manager.rawMetadataParser.getString(givenData, \"edge_click\", \"\"),\n",
       "              contains_edge_hover: false,\n",
       "              contains_edge_click: false,\n",
       "            };\n",
       "            if(!parsedData.general.directed){\n",
       "              parsedData.general.arrow_size = 0.0;\n",
       "            }\n",
       "          },\n",
       "\n",
       "          parseNodes(givenData, parsedData){\n",
       "            const numNodes = state.manager.rawDataParser.getObjectLengthOrZero(givenData.nodes),\n",
       "              nodeIdToObjectMap = new Map(),\n",
       "              nodeDefinedMetadata = new Set(\n",
       "                [\"color\", \"opacity\", \"size\", \"shape\", \"border_color\", \"border_size\",\n",
       "                 \"label_color\", \"label_size\", \"hover\", \"click\", \"image\", \"x\", \"y\"]),\n",
       "              nodeReplacementVariables = [\n",
       "                \"id\", \"label\",\n",
       "                \"color\", \"opacity\", \"size\", \"shape\", \"border_color\", \"border_size\",\n",
       "                \"label_color\", \"label_size\", \"image\", \"x\", \"y\"];\n",
       "            state.manager.propertyClassifier.init();\n",
       "            try {\n",
       "              Object.entries(givenData.nodes);\n",
       "            }\n",
       "            catch(e){\n",
       "               givenData.nodes = {};\n",
       "            }\n",
       "            for (const [givenNodeId, givenNode] of Object.entries(givenData.nodes)) {\n",
       "              const parsedNode = {};\n",
       "              // data: id, label\n",
       "              parsedNode.id = String(givenNodeId);\n",
       "              parsedNode.label = state.manager.rawDataParser.getString(givenNode, \"label\", \"\");\n",
       "              // defined metadata\n",
       "              parsedNode.color = state.manager.rawMetadataParser.getColor(givenNode, \"color\", parsedData.general.node_color);\n",
       "              parsedNode.opacity = state.manager.rawMetadataParser.getFinitePositiveNumber(givenNode, \"opacity\", parsedData.general.node_opacity);\n",
       "              parsedNode.size = state.manager.rawMetadataParser.getFinitePositiveNumber(givenNode, \"size\", parsedData.general.node_size);\n",
       "              parsedNode.shape = state.manager.rawMetadataParser.getShape(givenNode, \"shape\", parsedData.general.node_shape);\n",
       "              parsedNode.border_color = state.manager.rawMetadataParser.getColor(givenNode, \"border_color\", parsedData.general.node_border_color);\n",
       "              parsedNode.border_size = state.manager.rawMetadataParser.getFinitePositiveNumber(givenNode, \"border_size\", parsedData.general.node_border_size);\n",
       "              parsedNode.label_color = state.manager.rawMetadataParser.getColor(givenNode, \"label_color\", parsedData.general.node_label_color);\n",
       "              parsedNode.label_size = state.manager.rawMetadataParser.getFinitePositiveNumber(givenNode, \"label_size\", parsedData.general.node_label_size);\n",
       "              const hover = state.manager.rawMetadataParser.getString(givenNode, \"hover\", parsedData.general.node_hover);\n",
       "              const image = state.manager.rawMetadataParser.getString(givenNode, \"image\", parsedData.general.node_image);\n",
       "              if(image !== \"\"){\n",
       "                parsedNode.image = image;\n",
       "                parsedData.general.contains_node_image = true;\n",
       "              }\n",
       "              if(hover !== \"\"){\n",
       "                parsedNode.hover = hover;\n",
       "                parsedData.general.contains_node_hover = true;\n",
       "              }\n",
       "              const click = state.manager.rawMetadataParser.getString(givenNode, \"click\", parsedData.general.node_click);\n",
       "              if(click !== \"\"){\n",
       "                parsedNode.click = click;\n",
       "                parsedData.general.contains_node_click = true;\n",
       "              }\n",
       "              const x = state.manager.rawMetadataParser.getFiniteNumberOrNull(givenNode, \"x\", parsedData.general.node_x);\n",
       "              const y = state.manager.rawMetadataParser.getFiniteNumberOrNull(givenNode, \"y\", parsedData.general.node_y);\n",
       "              if(x !== null){\n",
       "                parsedNode.fx = x;\n",
       "              }\n",
       "              if(y !== null){\n",
       "                parsedNode.fy = y;\n",
       "              }\n",
       "              // other metadata\n",
       "              const otherMetadata = state.manager.rawMetadataParser.collectOtherMetadata(givenNode, parsedNode, nodeDefinedMetadata);\n",
       "              // feature classification\n",
       "              const parsedNodeProperties = Object.keys(parsedNode);\n",
       "              for(let i=0; i<parsedNodeProperties.length; i++){\n",
       "                const property = parsedNodeProperties[i],\n",
       "                  value = parsedNode[property];\n",
       "                state.manager.propertyClassifier.inspect(parsedNode, property);\n",
       "              }\n",
       "              // variable replacements\n",
       "              if(parsedNode.hover){\n",
       "                parsedNode.hover = state.manager.replaceStringVariables(parsedNode.hover, parsedNode, nodeReplacementVariables);\n",
       "              }\n",
       "              if(parsedNode.click){\n",
       "                parsedNode.click = state.manager.replaceStringVariables(parsedNode.click, parsedNode, nodeReplacementVariables.concat([\"hover\"]));\n",
       "              }\n",
       "              // store the parsed node\n",
       "              parsedData.nodes.push(parsedNode);\n",
       "              // data structure for inserting node object references into edge data\n",
       "              nodeIdToObjectMap.set(parsedNode.id, parsedNode);\n",
       "            }\n",
       "            // Ensure numeric properties (except fx and fy) are stored as numbers and remember their extrema\n",
       "            const numericProperties = Array.from(state.manager.propertyClassifier.numeric).filter(name => name !== \"fx\" && name !== \"fy\"),\n",
       "              nonNumericProperties = Array.from(state.manager.propertyClassifier.nonNumeric),\n",
       "              minima = {},\n",
       "              maxima = {};\n",
       "            for(let i=0; i<numNodes; i++){\n",
       "              const parsedNode = parsedData.nodes[i];\n",
       "              for(let p=0; p<numericProperties.length; p++){\n",
       "                const property = numericProperties[p],\n",
       "                  numericValue = parseFloat(parsedNode[property]);\n",
       "                parsedNode[property] = numericValue;\n",
       "                if(isFinite(numericValue)){\n",
       "                  if(typeof(minima[property]) === \"undefined\" || numericValue < minima[property]){\n",
       "                    minima[property] = numericValue;\n",
       "                  }\n",
       "                  if(typeof(maxima[property]) === \"undefined\" || numericValue > maxima[property]){\n",
       "                    maxima[property] = numericValue;\n",
       "                  }\n",
       "                }\n",
       "              }\n",
       "            }\n",
       "            // Store feature classification and extrema\n",
       "            parsedData.general.node_properties = {\n",
       "              \"node_size_data_sources\": numericProperties,\n",
       "              \"node_label_text_data_sources\": nonNumericProperties.concat(numericProperties),\n",
       "              \"minima\": minima,\n",
       "              \"maxima\": maxima,\n",
       "            }\n",
       "            // Report empty graph\n",
       "            if(!(numNodes > 0)){\n",
       "              console.log(\"Caution: Graph with 0 nodes. The provided data might be in the wrong format.\");\n",
       "            }\n",
       "            return nodeIdToObjectMap;\n",
       "          },\n",
       "\n",
       "          parseEdges(givenData, parsedData, nodeIdToObjectMap){\n",
       "            let numEdges = state.manager.rawDataParser.getArrayLengthOrZero(givenData.edges);\n",
       "            const knownEdgeIds = new Set(),\n",
       "              ignoredEdges = [],\n",
       "              edgeDefinedMetadata = new Set(\n",
       "                [\"color\", \"opacity\", \"size\", \"label_color\", \"label_size\", \"hover\", \"click\"]),\n",
       "              edgeReplacementVariables = [\n",
       "                \"id\", \"label\",\n",
       "                \"color\", \"opacity\", \"size\", \"label_color\", \"label_size\"];\n",
       "            state.manager.propertyClassifier.init();\n",
       "            for(let i=0; i<numEdges; i++){\n",
       "              const givenEdge = givenData.edges[i],\n",
       "                parsedEdge = {},\n",
       "                sourceId = String(givenEdge.source),\n",
       "                targetId = String(givenEdge.target);\n",
       "              // data: source, target, id, multi_edge_counter, label\n",
       "              try{\n",
       "                const sourceObj = nodeIdToObjectMap.get(sourceId);\n",
       "                const targetObj = nodeIdToObjectMap.get(targetId);\n",
       "                if(typeof(sourceObj) === \"undefined\" || typeof(targetObj) === \"undefined\"){\n",
       "                  throw \"Invalid node reference.\";\n",
       "                }\n",
       "                parsedEdge.source = sourceObj;\n",
       "                parsedEdge.target = targetObj;\n",
       "              } catch(e){\n",
       "                const ignoredEdge = {\n",
       "                  index: i,\n",
       "                  source: sourceId,\n",
       "                  target: targetId,\n",
       "                }\n",
       "                ignoredEdges.push(ignoredEdge);\n",
       "                continue;\n",
       "              }\n",
       "              const result = state.manager.rawDataParser.createUniqueEdgeId(sourceId, targetId, knownEdgeIds);\n",
       "              parsedEdge.id = result.id;\n",
       "              parsedEdge.multi_edge_counter = result.count;\n",
       "              parsedEdge.label = state.manager.rawDataParser.getString(givenEdge, \"label\", \"\");\n",
       "              // defined metadata\n",
       "              parsedEdge.color = state.manager.rawMetadataParser.getColor(givenEdge, \"color\", parsedData.general.edge_color);\n",
       "              parsedEdge.opacity = state.manager.rawMetadataParser.getFinitePositiveNumber(givenEdge, \"opacity\", parsedData.general.edge_opacity);\n",
       "              parsedEdge.size = state.manager.rawMetadataParser.getFinitePositiveNumber(givenEdge, \"size\", parsedData.general.edge_size);\n",
       "              parsedEdge.label_color = state.manager.rawMetadataParser.getColor(givenEdge, \"label_color\", parsedData.general.edge_label_color);\n",
       "              parsedEdge.label_size = state.manager.rawMetadataParser.getFinitePositiveNumber(givenEdge, \"label_size\", parsedData.general.edge_label_size);\n",
       "              const hover = state.manager.rawMetadataParser.getString(givenEdge, \"hover\", parsedData.general.edge_hover);\n",
       "              if(hover !== \"\"){\n",
       "                parsedEdge.hover = hover;\n",
       "                parsedData.general.contains_edge_hover = true;\n",
       "              }\n",
       "              const click = state.manager.rawMetadataParser.getString(givenEdge, \"click\", parsedData.general.edge_click);\n",
       "              if(click !== \"\"){\n",
       "                parsedEdge.click = click;\n",
       "                parsedData.general.contains_edge_click = true;\n",
       "              }\n",
       "              // other metadata\n",
       "              const otherMetadata = state.manager.rawMetadataParser.collectOtherMetadata(givenEdge, parsedEdge, edgeDefinedMetadata);\n",
       "              // feature classification\n",
       "              const parsedEdgeProperties = Object.keys(parsedEdge);\n",
       "              for(let i=0; i<parsedEdgeProperties.length; i++){\n",
       "                const property = parsedEdgeProperties[i],\n",
       "                  value = parsedEdge[property];\n",
       "                state.manager.propertyClassifier.inspect(parsedEdge, property);\n",
       "              }\n",
       "              // variable replacements\n",
       "              if(parsedEdge.hover){\n",
       "                parsedEdge.hover = state.manager.replaceStringVariables(parsedEdge.hover, parsedEdge, edgeReplacementVariables);\n",
       "              }\n",
       "              if(parsedEdge.click){\n",
       "                parsedEdge.click = state.manager.replaceStringVariables(parsedEdge.click, parsedEdge, edgeReplacementVariables.concat([\"hover\"]));\n",
       "              }\n",
       "              // store it\n",
       "              parsedData.edges.push(parsedEdge);\n",
       "            }\n",
       "            // Ensure numeric properties are stored as numbers and remember their extrema\n",
       "            const numericProperties = Array.from(state.manager.propertyClassifier.numeric),\n",
       "              nonNumericProperties = Array.from(state.manager.propertyClassifier.nonNumeric),\n",
       "              minima = {},\n",
       "              maxima = {};\n",
       "            numEdges = state.manager.rawDataParser.getArrayLengthOrZero(parsedData.edges);\n",
       "            for(let i=0; i<numEdges; i++){\n",
       "              const parsedEdge = parsedData.edges[i];\n",
       "              for(let p=0; p<numericProperties.length; p++){\n",
       "                const property = numericProperties[p],\n",
       "                  numericValue = parseFloat(parsedEdge[property]);\n",
       "                parsedEdge[property] = numericValue;\n",
       "                if(isFinite(numericValue)){\n",
       "                  if(typeof(minima[property]) === \"undefined\" || numericValue < minima[property]){\n",
       "                    minima[property] = numericValue;\n",
       "                  }\n",
       "                  if(typeof(maxima[property]) === \"undefined\" || numericValue > maxima[property]){\n",
       "                    maxima[property] = numericValue;\n",
       "                  }\n",
       "                }\n",
       "              }\n",
       "            }\n",
       "            // Store feature classification and extrema\n",
       "            parsedData.general.edge_properties = {\n",
       "              \"edge_size_data_sources\": numericProperties.filter(item => item !== \"multi_edge_counter\"),\n",
       "              \"edge_label_text_data_sources\": nonNumericProperties.concat(numericProperties).filter(\n",
       "                item => item !== \"source\" && item !== \"target\" && item !== \"multi_edge_counter\"),\n",
       "              \"minima\": minima,\n",
       "              \"maxima\": maxima,\n",
       "            }\n",
       "            // Report invalid edges\n",
       "            if(ignoredEdges.length > 0){\n",
       "              let message = undefined;\n",
       "              if(ignoredEdges.length == 1){\n",
       "                message = \"Caution: \" + ignoredEdges.length + \" edge was ignored because it \" +\n",
       "                  \"refers to a node that is not part of the node list:\\n\";\n",
       "              } else{\n",
       "                message = \"Caution: \" + ignoredEdges.length + \" edges were ignored because they \" +\n",
       "                  \"refer to a node that is not part of the node list:\\n\";\n",
       "              }\n",
       "              for(let i=0; i<ignoredEdges.length; i++){\n",
       "                const ignoredEdge = ignoredEdges[i];\n",
       "                message += '- Edge with index ' + ignoredEdge.index;\n",
       "                message += ', source \"' + ignoredEdge.source;\n",
       "                message += '\", target \"' + ignoredEdge.target + '\"\\n';\n",
       "                if(i==9){\n",
       "                  message += '...';\n",
       "                  break;\n",
       "                }\n",
       "              }\n",
       "              console.log(message);\n",
       "            }\n",
       "          },\n",
       "\n",
       "          parseChosenData(chosenGraphNumber){\n",
       "            let givenData = state.rawData[chosenGraphNumber],\n",
       "              parsedData = {\n",
       "                general: {},\n",
       "                nodes: [],\n",
       "                edges: [],\n",
       "                adjacency: null,\n",
       "                incidence: null,\n",
       "              };\n",
       "            if(!givenData || givenData === null){\n",
       "              givenData = [];\n",
       "            }\n",
       "            // a) General\n",
       "            state.manager.parseGeneral(givenData, parsedData);\n",
       "            // b) Nodes\n",
       "            const nodeIdToObjectMap = state.manager.parseNodes(givenData, parsedData);\n",
       "            // c) Edges\n",
       "            state.manager.parseEdges(givenData, parsedData, nodeIdToObjectMap);\n",
       "            // Update state\n",
       "            state.parsedData = parsedData;\n",
       "            state.currentGraphParts = {};\n",
       "            // Update UI: show or hide containers\n",
       "            ui.elements.graphContainer.style.display = ui.convert.boolToDisplayStyle(true);\n",
       "            ui.elements.detailsContainer.style.display = ui.convert.boolToDisplayStyle(state.showDetails);\n",
       "            ui.elements.nodeImageMetaControl.style.display = ui.convert.boolToDisplayStyle(parsedData.general.contains_node_image);\n",
       "          },\n",
       "\n",
       "          // 3) Derive state.shownData from state.parsedData\n",
       "          createNodeToAdjacentNodesMap(){\n",
       "            const dataStructure = {\n",
       "              map: new Map(),\n",
       "              add(sourceNode, targetNode){\n",
       "                let adjacentNodes = this.map.get(sourceNode);\n",
       "                if(adjacentNodes){\n",
       "                  adjacentNodes.add(targetNode);\n",
       "                } else{\n",
       "                  adjacentNodes = new Set([targetNode]);\n",
       "                  this.map.set(sourceNode, adjacentNodes);\n",
       "                }\n",
       "              },\n",
       "            }\n",
       "            return dataStructure;\n",
       "          },\n",
       "\n",
       "          createNodeToIncidentEdgesMap(){\n",
       "            const dataStructure = {\n",
       "              map: new Map(),\n",
       "              add(node, edge){\n",
       "                let incidentEdges = this.map.get(node);\n",
       "                if(incidentEdges){\n",
       "                  incidentEdges.add(edge);\n",
       "                } else{\n",
       "                  incidentEdges = new Set([edge]);\n",
       "                  this.map.set(node, incidentEdges);\n",
       "                }\n",
       "              },\n",
       "            }\n",
       "            return dataStructure;\n",
       "          },\n",
       "\n",
       "          hoverTextToHtml(text) {\n",
       "            // https://visjs.github.io/vis-network/examples/network/other/html-in-titles.html\n",
       "            const div = document.createElement(\"div\");\n",
       "            div.innerHTML = text;\n",
       "            return div;\n",
       "          },\n",
       "\n",
       "          prepareShownData(){\n",
       "            const numNodes = state.parsedData.nodes.length,\n",
       "              numEdges = state.parsedData.edges.length;\n",
       "            state.shownData = {\n",
       "              \"general\": null,\n",
       "              \"nodes\": new Array(numNodes),\n",
       "              \"edges\": new Array(numEdges),\n",
       "            }\n",
       "            const nodeIdToObjectMap = new Map(),\n",
       "              nodeSizeNormalizer = state.manager.createNodeSizeNormalizer();\n",
       "            // a) General\n",
       "            state.shownData.general = {\n",
       "              \"background_color\": state.parsedData.general.background_color,\n",
       "              \"arrow_size\": state.parsedData.general.arrow_size,\n",
       "              \"arrow_color\": state.parsedData.general.arrow_color,\n",
       "              \"directed\": state.parsedData.general.directed,\n",
       "            };\n",
       "            // b) Nodes\n",
       "            for(let i=0; i<numNodes; i++){\n",
       "              state.shownData.nodes[i] = {};\n",
       "              const parsedNode = state.parsedData.nodes[i],\n",
       "                shownNode = state.shownData.nodes[i];\n",
       "              shownNode.id = parsedNode.id;\n",
       "              shownNode.label = state.manager.calcSingleNodeLabelText(parsedNode);\n",
       "              shownNode.color = parsedNode.color;\n",
       "              shownNode.opacity = parsedNode.opacity;\n",
       "              shownNode.size = state.manager.calcSingleNodeSize(parsedNode, nodeSizeNormalizer);\n",
       "              shownNode.shape = parsedNode.shape;\n",
       "              shownNode.border_color = parsedNode.border_color;\n",
       "              shownNode.border_size = parsedNode.border_size;\n",
       "              shownNode.label_color = parsedNode.label_color;\n",
       "              shownNode.label_size = state.manager.calcSingleNodeLabelSize(parsedNode);\n",
       "              if(typeof(parsedNode.image) !== \"undefined\"){\n",
       "                shownNode.image = parsedNode.image;\n",
       "              }\n",
       "              if(typeof(parsedNode.hover) !== \"undefined\"){\n",
       "                shownNode.hover = state.manager.hoverTextToHtml(parsedNode.hover);\n",
       "              }\n",
       "              if(typeof(parsedNode.click) !== \"undefined\"){\n",
       "                shownNode.click = parsedNode.click;\n",
       "              }\n",
       "              if(typeof(parsedNode.fx) !== \"undefined\"){\n",
       "                shownNode.fx = parsedNode.fx;\n",
       "              }\n",
       "              if(typeof(parsedNode.fy) !== \"undefined\"){\n",
       "                shownNode.fy = parsedNode.fy;\n",
       "              }\n",
       "              nodeIdToObjectMap.set(shownNode.id, shownNode);\n",
       "              // Derived properties for performance improvement in updateNodePositions\n",
       "              state.manager.calcSingleNodeSizeDerivatives(shownNode);\n",
       "              state.manager.calcSingleNodeBorderSizeDerivatives(shownNode);\n",
       "            }\n",
       "            // c) Edges\n",
       "            const edgeSizeNormalizer = state.manager.createEdgeSizeNormalizer(),\n",
       "              nodeToAdjacentNodesMap = state.manager.createNodeToAdjacentNodesMap(),\n",
       "              nodeToIncidentEdgesMap = state.manager.createNodeToIncidentEdgesMap();\n",
       "            for(let i=0; i<numEdges; i++){\n",
       "              state.shownData.edges[i] = {};\n",
       "              const parsedEdge = state.parsedData.edges[i],\n",
       "                shownEdge = state.shownData.edges[i];\n",
       "              shownEdge.source = nodeIdToObjectMap.get(parsedEdge.source.id);\n",
       "              shownEdge.target = nodeIdToObjectMap.get(parsedEdge.target.id);\n",
       "              shownEdge.id = parsedEdge.id;\n",
       "              shownEdge.label = state.manager.calcSingleEdgeLabelText(parsedEdge);\n",
       "              shownEdge.color = parsedEdge.color;\n",
       "              shownEdge.opacity = parsedEdge.opacity;\n",
       "              shownEdge.size = state.manager.calcSingleEdgeSize(parsedEdge, edgeSizeNormalizer);\n",
       "              shownEdge.label_color = parsedEdge.label_color;\n",
       "              shownEdge.label_size = state.manager.calcSingleEdgeLabelSize(parsedEdge);\n",
       "              if(typeof(parsedEdge.hover) !== \"undefined\"){\n",
       "                shownEdge.hover = state.manager.hoverTextToHtml(parsedEdge.hover);\n",
       "              }\n",
       "              if(typeof(parsedEdge.click) !== \"undefined\"){\n",
       "                shownEdge.click = parsedEdge.click;\n",
       "              }\n",
       "              // Derived properties for performance improvement in updateEdgePositions\n",
       "              shownEdge.multiEdgeCurvatureFactor = state.manager.calcSingleEdgeCurvatureFactor(parsedEdge);\n",
       "              // Data structure for highlighting adjacent nodes and incident edges to this node\n",
       "              nodeToAdjacentNodesMap.add(shownEdge.source, shownEdge.target);\n",
       "              nodeToAdjacentNodesMap.add(shownEdge.target, shownEdge.source);\n",
       "              nodeToIncidentEdgesMap.add(shownEdge.source, shownEdge);\n",
       "              nodeToIncidentEdgesMap.add(shownEdge.target, shownEdge);\n",
       "            }\n",
       "            state.shownData.adjacency = nodeToAdjacentNodesMap;\n",
       "            state.shownData.incidence = nodeToIncidentEdgesMap;\n",
       "          },\n",
       "\n",
       "          calcSingleNodeSize(parsedNode, nodeSizeNormalizer){\n",
       "            const appearanceAdaptionFactor = 0.5;\n",
       "            let nodeSize = nodeSizeNormalizer(parsedNode[state.nodeSizeDataSource]);\n",
       "            if(!isFinite(nodeSize)){\n",
       "              nodeSize = state.parsedData.general.node_size;\n",
       "            }\n",
       "            return nodeSize * state.nodeSizeFactor * appearanceAdaptionFactor;\n",
       "          },\n",
       "\n",
       "          calcSingleNodeSizeDerivatives(shownNode){\n",
       "            shownNode.image_size = shownNode.size / 1.42 * state.nodeImageSizeFactor;\n",
       "          },\n",
       "\n",
       "          calcSingleNodeLabelText(parsedNode){\n",
       "            return String(parsedNode[state.nodeLabelTextDataSource]);\n",
       "          },\n",
       "\n",
       "          calcSingleNodeLabelSize(parsedNode){\n",
       "            return parsedNode.label_size * state.nodeLabelSizeFactor;\n",
       "          },\n",
       "\n",
       "          calcSingleEdgeSize(parsedEdge, edgeSizeNormalizer){\n",
       "            let edgeSize = edgeSizeNormalizer(parsedEdge[state.edgeSizeDataSource]);\n",
       "            if(!isFinite(edgeSize)){\n",
       "              edgeSize = state.parsedData.general.edge_size;\n",
       "            }\n",
       "            return edgeSize * state.edgeSizeFactor;\n",
       "          },\n",
       "\n",
       "          calcSingleEdgeCurvatureFactor(parsedEdge){\n",
       "            // Caution: Currently a single value is used for all edges instead of these here\n",
       "            const appearanceAdaptionFactor = 0.5;\n",
       "            return state.edgeCurvature * parsedEdge.multiEdgeCounter * appearanceAdaptionFactor;\n",
       "          },\n",
       "\n",
       "          calcSingleEdgeLabelText(parsedEdge){\n",
       "            return String(parsedEdge[state.edgeLabelTextDataSource]);\n",
       "          },\n",
       "\n",
       "          calcSingleEdgeLabelSize(parsedEdge){\n",
       "            return parsedEdge.label_size * state.edgeLabelSizeFactor;\n",
       "          },\n",
       "\n",
       "          calcSingleNodeBorderSizeDerivatives(shownNode){\n",
       "            shownNode.border_size_half = shownNode.border_size / 2.0;\n",
       "          },\n",
       "\n",
       "          createNodeSizeNormalizer(){\n",
       "            let normalizer;\n",
       "            if(state.useNodeSizeNormalization){\n",
       "              const dataMin = state.parsedData.general.node_properties.minima[state.nodeSizeDataSource],\n",
       "                dataMax = state.parsedData.general.node_properties.maxima[state.nodeSizeDataSource],\n",
       "                targetMin = state.nodeSizeNormalizationMin,\n",
       "                targetMax = state.nodeSizeNormalizationMax,\n",
       "                dataDiff = dataMax - dataMin,\n",
       "                targetDiff = targetMax - targetMin;\n",
       "              let factor = targetDiff / dataDiff;\n",
       "              if(!isFinite(factor) || factor === null){\n",
       "                factor = 0.0;\n",
       "              }\n",
       "              normalizer = function(val){\n",
       "                return (val - dataMin) * factor + targetMin;\n",
       "              }\n",
       "            } else{\n",
       "              normalizer = function(val){\n",
       "                return val;\n",
       "              }\n",
       "            }\n",
       "            return normalizer;\n",
       "          },\n",
       "\n",
       "          createEdgeSizeNormalizer(){\n",
       "            let normalizer;\n",
       "            if(state.useEdgeSizeNormalization){\n",
       "              const dataMin = state.parsedData.general.edge_properties.minima[state.edgeSizeDataSource],\n",
       "                dataMax = state.parsedData.general.edge_properties.maxima[state.edgeSizeDataSource],\n",
       "                targetMin = state.edgeSizeNormalizationMin,\n",
       "                targetMax = state.edgeSizeNormalizationMax,\n",
       "                dataDiff = dataMax - dataMin,\n",
       "                targetDiff = targetMax - targetMin;\n",
       "              let factor = targetDiff / dataDiff;\n",
       "              if(!isFinite(factor)){\n",
       "                factor = 0.0;\n",
       "              }\n",
       "              normalizer = function(val){\n",
       "                return (val - dataMin) * factor + targetMin;\n",
       "              }\n",
       "            } else{\n",
       "              normalizer = function(val){\n",
       "                return val;\n",
       "              }\n",
       "            }\n",
       "            return normalizer;\n",
       "          },\n",
       "\n",
       "          updateNodeSizes(){\n",
       "            // Data\n",
       "            const nodeSizeNormalizer = state.manager.createNodeSizeNormalizer();\n",
       "            for(let i=0; i<state.parsedData.nodes.length; i++){\n",
       "              const parsedNode = state.parsedData.nodes[i],\n",
       "                shownNode = state.shownData.nodes[i];\n",
       "              shownNode.size = state.manager.calcSingleNodeSize(parsedNode, nodeSizeNormalizer);\n",
       "              state.manager.calcSingleNodeSizeDerivatives(shownNode);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateNodeSizes();\n",
       "          },\n",
       "\n",
       "          updateNodeLabelTexts(){\n",
       "            // Data\n",
       "            for(let i=0; i<state.parsedData.nodes.length; i++){\n",
       "              const parsedNode = state.parsedData.nodes[i],\n",
       "                shownNode = state.shownData.nodes[i];\n",
       "              shownNode.label = state.manager.calcSingleNodeLabelText(parsedNode);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateNodeLabels();\n",
       "          },\n",
       "\n",
       "          updateNodeLabelSizes(){\n",
       "            // Data\n",
       "            for(let i=0; i<state.parsedData.nodes.length; i++){\n",
       "              const parsedNode = state.parsedData.nodes[i],\n",
       "                shownNode = state.shownData.nodes[i];\n",
       "              shownNode.label_size = state.manager.calcSingleNodeLabelSize(parsedNode);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateNodeLabels();\n",
       "          },\n",
       "\n",
       "          updateNodeImages(){\n",
       "            // Data\n",
       "            for(let i=0; i<state.parsedData.nodes.length; i++){\n",
       "              const parsedNode = state.parsedData.nodes[i],\n",
       "                shownNode = state.shownData.nodes[i];\n",
       "              state.manager.calcSingleNodeSizeDerivatives(shownNode);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateNodeImages();\n",
       "          },\n",
       "\n",
       "          updateEdgeSizes(){\n",
       "            // Data\n",
       "            const edgeSizeNormalizer = state.manager.createEdgeSizeNormalizer();\n",
       "            for(let i=0; i<state.parsedData.edges.length; i++){\n",
       "              const parsedEdge = state.parsedData.edges[i],\n",
       "                shownEdge = state.shownData.edges[i];\n",
       "              shownEdge.size = state.manager.calcSingleEdgeSize(parsedEdge, edgeSizeNormalizer);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateEdgeSizes();\n",
       "          },\n",
       "\n",
       "          updateEdgeCurvatures(){\n",
       "            // Data\n",
       "            for(let i=0; i<state.parsedData.edges.length; i++){\n",
       "              const parsedEdge = state.parsedData.edges[i],\n",
       "                shownEdge = state.shownData.edges[i];\n",
       "              shownEdge.multiEdgeCurvatureFactor = state.manager.calcSingleEdgeCurvatureFactor(parsedEdge);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateEdgeCurvatures();\n",
       "          },\n",
       "\n",
       "          updateEdgeLabelTexts(){\n",
       "            // Data\n",
       "            for(let i=0; i<state.parsedData.edges.length; i++){\n",
       "              const parsedEdge = state.parsedData.edges[i],\n",
       "                shownEdge = state.shownData.edges[i];\n",
       "              shownEdge.label = state.manager.calcSingleEdgeLabelText(parsedEdge);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateEdgeLabels();\n",
       "          },\n",
       "\n",
       "          updateEdgeLabelSizes(){\n",
       "            // Data\n",
       "            for(let i=0; i<state.parsedData.edges.length; i++){\n",
       "              const parsedEdge = state.parsedData.edges[i],\n",
       "                shownEdge = state.shownData.edges[i];\n",
       "              shownEdge.label_size = state.manager.calcSingleEdgeLabelSize(parsedEdge);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateEdgeLabels();\n",
       "          },\n",
       "        }\n",
       "      }\n",
       "\n",
       "      const ui = {\n",
       "        symbols:{\n",
       "          // Choice of symbols is influenced by their appearance in different browsers\n",
       "          // Alternatives: \"▼\", \"▽\", \"▾\" / \"▲\", \"△\", \"▴\" / \"▶\", \"▷\", \"▸\" / \"◀\", \"◁\", \"◂\"\n",
       "          // ▶ is rendered strangely on some mobile phone browsers, ▸ remains normal\n",
       "          detailsShown: \"▾\",\n",
       "          detailsHidden: \"▴\",\n",
       "          menuShown: \"▸\",\n",
       "          menuHidden: \"◂\",\n",
       "          menuItemActive: \"▸\",\n",
       "          menuItemInactive: \"▾\",\n",
       "        },\n",
       "\n",
       "        elements:{\n",
       "          // Containers\n",
       "          mainContainer: document.getElementById(\"iUn6OmQXNRWdlB6Nj-main-div\"),\n",
       "          tooltipContainer: document.getElementById(\"iUn6OmQXNRWdlB6Nj-tooltip-div\"),\n",
       "          leftContainer: document.getElementById(\"iUn6OmQXNRWdlB6Nj-left-div\"),\n",
       "          rightContainer: document.getElementById(\"iUn6OmQXNRWdlB6Nj-right-div\"),\n",
       "          graphContainer: document.getElementById(\"iUn6OmQXNRWdlB6Nj-graph-div\"),\n",
       "          detailsContainer: document.getElementById(\"iUn6OmQXNRWdlB6Nj-details-div\"),\n",
       "          detailsHead: document.getElementById(\"iUn6OmQXNRWdlB6Nj-details-head\"),\n",
       "          detailsBody: document.getElementById(\"iUn6OmQXNRWdlB6Nj-details-body\"),\n",
       "          // Data sources\n",
       "          dataHead: document.getElementById(\"iUn6OmQXNRWdlB6Nj-data-head\"),\n",
       "          dataBody: document.getElementById(\"iUn6OmQXNRWdlB6Nj-data-body\"),\n",
       "          graphSelectionContainer: document.getElementById(\"iUn6OmQXNRWdlB6Nj-graph-select-div\"),\n",
       "          graphSelection: document.getElementById(\"iUn6OmQXNRWdlB6Nj-graph-select\"),\n",
       "          nodeSizeDataSourceSelect: document.getElementById(\"iUn6OmQXNRWdlB6Nj-node-size-data-source-select\"),\n",
       "          nodeSizeNormalizationCheckbox: document.getElementById(\"iUn6OmQXNRWdlB6Nj-node-size-normalization-checkbox\"),\n",
       "          nodeSizeNormalizationContainer: document.getElementById(\"iUn6OmQXNRWdlB6Nj-node-size-norm-div\"),\n",
       "          nodeSizeNormalizationMinText: document.getElementById(\"iUn6OmQXNRWdlB6Nj-node-size-normalization-min-text\"),\n",
       "          nodeSizeNormalizationMinSlider: document.getElementById(\"iUn6OmQXNRWdlB6Nj-node-size-normalization-min-slider\"),\n",
       "          nodeSizeNormalizationMaxText: document.getElementById(\"iUn6OmQXNRWdlB6Nj-node-size-normalization-max-text\"),\n",
       "          nodeSizeNormalizationMaxSlider: document.getElementById(\"iUn6OmQXNRWdlB6Nj-node-size-normalization-max-slider\"),\n",
       "          edgeSizeDataSourceSelect: document.getElementById(\"iUn6OmQXNRWdlB6Nj-edge-size-data-source-select\"),\n",
       "          edgeSizeNormalizationCheckbox: document.getElementById(\"iUn6OmQXNRWdlB6Nj-edge-size-normalization-checkbox\"),\n",
       "          edgeSizeNormalizationContainer: document.getElementById(\"iUn6OmQXNRWdlB6Nj-edge-size-norm-div\"),\n",
       "          edgeSizeNormalizationMinText: document.getElementById(\"iUn6OmQXNRWdlB6Nj-edge-size-normalization-min-text\"),\n",
       "          edgeSizeNormalizationMinSlider: document.getElementById(\"iUn6OmQXNRWdlB6Nj-edge-size-normalization-min-slider\"),\n",
       "          edgeSizeNormalizationMaxText: document.getElementById(\"iUn6OmQXNRWdlB6Nj-edge-size-normalization-max-text\"),\n",
       "          edgeSizeNormalizationMaxSlider: document.getElementById(\"iUn6OmQXNRWdlB6Nj-edge-size-normalization-max-slider\"),\n",
       "          // General\n",
       "          generalHead: document.getElementById(\"iUn6OmQXNRWdlB6Nj-general-head\"),\n",
       "          generalBody: document.getElementById(\"iUn6OmQXNRWdlB6Nj-general-body\"),\n",
       "          resetButton: document.getElementById(\"iUn6OmQXNRWdlB6Nj-reset\"),\n",
       "          fullscreenButton: document.getElementById(\"iUn6OmQXNRWdlB6Nj-fullscreen-button\"),\n",
       "          svgExportButton: document.getElementById(\"iUn6OmQXNRWdlB6Nj-svg\"),\n",
       "          pngExportButton: document.getElementById(\"iUn6OmQXNRWdlB6Nj-png\"),\n",
       "          jpgExportButton: document.getElementById(\"iUn6OmQXNRWdlB6Nj-jpg\"),\n",
       "          // Nodes\n",
       "          nodeHead: document.getElementById(\"iUn6OmQXNRWdlB6Nj-node-head\"),\n",
       "          nodeBody: document.getElementById(\"iUn6OmQXNRWdlB6Nj-node-body\"),\n",
       "          nodeCheckbox: document.getElementById(\"iUn6OmQXNRWdlB6Nj-node-checkbox\"),\n",
       "          nodeSizeFactorText: document.getElementById(\"iUn6OmQXNRWdlB6Nj-node-size-factor-text\"),\n",
       "          nodeSizeFactorSlider: document.getElementById(\"iUn6OmQXNRWdlB6Nj-node-size-factor-slider\"),\n",
       "          nodeDragFixCheckbox: document.getElementById(\"iUn6OmQXNRWdlB6Nj-node-drag-fix-checkbox\"),\n",
       "          nodeHoverNeighborhoodCheckbox: document.getElementById(\"iUn6OmQXNRWdlB6Nj-node-hover-neighborhood-checkbox\"),\n",
       "          nodeHoverTooltipCheckbox: document.getElementById(\"iUn6OmQXNRWdlB6Nj-node-hover-tooltip-checkbox\"),\n",
       "          nodeReleaseButton: document.getElementById(\"iUn6OmQXNRWdlB6Nj-node-release-button\"),\n",
       "          // Node images\n",
       "          nodeImageHead: document.getElementById(\"iUn6OmQXNRWdlB6Nj-node-image-head\"),\n",
       "          nodeImageBody: document.getElementById(\"iUn6OmQXNRWdlB6Nj-node-image-body\"),\n",
       "          nodeImageCheckbox: document.getElementById(\"iUn6OmQXNRWdlB6Nj-node-image-checkbox\"),\n",
       "          nodeImageMetaControl: document.getElementById(\"iUn6OmQXNRWdlB6Nj-node-image-meta-control\"),\n",
       "          nodeImageSizeFactorText: document.getElementById(\"iUn6OmQXNRWdlB6Nj-node-image-size-factor-text\"),\n",
       "          nodeImageSizeFactorSlider: document.getElementById(\"iUn6OmQXNRWdlB6Nj-node-image-size-factor-slider\"),\n",
       "          // Node labels\n",
       "          nodeLabelHead: document.getElementById(\"iUn6OmQXNRWdlB6Nj-node-label-head\"),\n",
       "          nodeLabelBody: document.getElementById(\"iUn6OmQXNRWdlB6Nj-node-label-body\"),\n",
       "          nodeLabelCheckbox: document.getElementById(\"iUn6OmQXNRWdlB6Nj-node-label-checkbox\"),\n",
       "          nodeLabelBorderCheckbox: document.getElementById(\"iUn6OmQXNRWdlB6Nj-node-label-border-checkbox\"),\n",
       "          nodeLabelTextDataSourceSelect: document.getElementById(\"iUn6OmQXNRWdlB6Nj-node-label-data-source-select\"),\n",
       "          nodeLabelSizeFactorText: document.getElementById(\"iUn6OmQXNRWdlB6Nj-node-label-size-factor-text\"),\n",
       "          nodeLabelSizeFactorSlider: document.getElementById(\"iUn6OmQXNRWdlB6Nj-node-label-size-factor-slider\"),\n",
       "          nodeLabelRotationText: document.getElementById(\"iUn6OmQXNRWdlB6Nj-node-label-rotation-text\"),\n",
       "          nodeLabelRotationSlider: document.getElementById(\"iUn6OmQXNRWdlB6Nj-node-label-rotation-slider\"),\n",
       "          // Edges\n",
       "          edgeHead: document.getElementById(\"iUn6OmQXNRWdlB6Nj-edge-head\"),\n",
       "          edgeBody: document.getElementById(\"iUn6OmQXNRWdlB6Nj-edge-body\"),\n",
       "          edgeCheckbox: document.getElementById(\"iUn6OmQXNRWdlB6Nj-edge-checkbox\"),\n",
       "          edgeSizeFactorText: document.getElementById(\"iUn6OmQXNRWdlB6Nj-edge-size-factor-text\"),\n",
       "          edgeSizeFactorSlider: document.getElementById(\"iUn6OmQXNRWdlB6Nj-edge-size-factor-slider\"),\n",
       "          edgeCurvatureText: document.getElementById(\"iUn6OmQXNRWdlB6Nj-edge-curvature-text\"),\n",
       "          edgeCurvatureSlider: document.getElementById(\"iUn6OmQXNRWdlB6Nj-edge-curvature-slider\"),\n",
       "          edgeHoverTooltipCheckbox: document.getElementById(\"iUn6OmQXNRWdlB6Nj-edge-hover-tooltip-checkbox\"),\n",
       "          // Edge labels\n",
       "          edgeLabelHead: document.getElementById(\"iUn6OmQXNRWdlB6Nj-edge-label-head\"),\n",
       "          edgeLabelBody: document.getElementById(\"iUn6OmQXNRWdlB6Nj-edge-label-body\"),\n",
       "          edgeLabelCheckbox: document.getElementById(\"iUn6OmQXNRWdlB6Nj-edge-label-checkbox\"),\n",
       "          edgeLabelBorderCheckbox: document.getElementById(\"iUn6OmQXNRWdlB6Nj-edge-label-border-checkbox\"),\n",
       "          edgeLabelTextDataSourceSelect: document.getElementById(\"iUn6OmQXNRWdlB6Nj-edge-label-data-source-select\"),\n",
       "          edgeLabelSizeFactorText: document.getElementById(\"iUn6OmQXNRWdlB6Nj-edge-label-size-factor-text\"),\n",
       "          edgeLabelSizeFactorSlider: document.getElementById(\"iUn6OmQXNRWdlB6Nj-edge-label-size-factor-slider\"),\n",
       "          edgeLabelRotationText: document.getElementById(\"iUn6OmQXNRWdlB6Nj-edge-label-rotation-text\"),\n",
       "          edgeLabelRotationSlider: document.getElementById(\"iUn6OmQXNRWdlB6Nj-edge-label-rotation-slider\"),\n",
       "          // Layout algorithm\n",
       "          layoutAlgorithmHead: document.getElementById(\"iUn6OmQXNRWdlB6Nj-layout-algorithm-head\"),\n",
       "          layoutAlgorithmBody: document.getElementById(\"iUn6OmQXNRWdlB6Nj-layout-algorithm-body\"),\n",
       "          simulationCheckbox: document.getElementById(\"iUn6OmQXNRWdlB6Nj-simulation-active-checkbox\"),\n",
       "          layoutAlgorithmSelection: document.getElementById(\"iUn6OmQXNRWdlB6Nj-layout-algorithm-select\"),\n",
       "          centralGravitySlider: document.getElementById(\"iUn6OmQXNRWdlB6Nj-central-gravity-slider\"),\n",
       "          centralGravityText: document.getElementById(\"iUn6OmQXNRWdlB6Nj-central-gravity-text\"),\n",
       "          springLengthSlider: document.getElementById(\"iUn6OmQXNRWdlB6Nj-spring-length-slider\"),\n",
       "          springLengthText: document.getElementById(\"iUn6OmQXNRWdlB6Nj-spring-length-text\"),\n",
       "          springConstantSlider: document.getElementById(\"iUn6OmQXNRWdlB6Nj-spring-constant-slider\"),\n",
       "          springConstantText: document.getElementById(\"iUn6OmQXNRWdlB6Nj-spring-constant-text\"),\n",
       "          gravitationalConstantContainer: document.getElementById(\"iUn6OmQXNRWdlB6Nj-gravitational-constant-div\"),\n",
       "          gravitationalConstantSlider: document.getElementById(\"iUn6OmQXNRWdlB6Nj-gravitational-constant-slider\"),\n",
       "          gravitationalConstantText: document.getElementById(\"iUn6OmQXNRWdlB6Nj-gravitational-constant-text\"),\n",
       "          avoidOverlapContainer: document.getElementById(\"iUn6OmQXNRWdlB6Nj-avoid-overlap-div\"),\n",
       "          avoidOverlapSlider: document.getElementById(\"iUn6OmQXNRWdlB6Nj-avoid-overlap-slider\"),\n",
       "          avoidOverlapText: document.getElementById(\"iUn6OmQXNRWdlB6Nj-avoid-overlap-text\"),\n",
       "        },\n",
       "\n",
       "        composites:{\n",
       "          responsiveContainer:{\n",
       "            init(){\n",
       "              // Delete all contained items (relevant only for reset, not first creation)\n",
       "              ui.deleteChildElements(ui.elements.graphContainer);\n",
       "              ui.deleteChildElements(ui.elements.detailsBody);\n",
       "              // Menu\n",
       "              if(state.showMenu){\n",
       "                ui.composites.menu.show();\n",
       "              } else{\n",
       "                ui.composites.menu.hide();\n",
       "              }\n",
       "              // Details\n",
       "              if(state.showDetails){\n",
       "                ui.composites.details.show(true);\n",
       "              } else{\n",
       "                ui.composites.details.hide(true);\n",
       "              }\n",
       "              // Divs\n",
       "              ui.composites.responsiveContainer.setInnerHeights();\n",
       "              ui.composites.responsiveContainer.setOuterHeights();\n",
       "              ui.composites.responsiveContainer.getInnerWidths();\n",
       "            },\n",
       "\n",
       "            getInnerWidths(){\n",
       "              state.graphContainerWidth = parseInt(ui.elements.graphContainer.clientWidth);\n",
       "              state.detailsContainerWidth = parseInt(ui.elements.detailsContainer.clientWidth);\n",
       "            },\n",
       "\n",
       "            getInnerHeights(){\n",
       "              state.graphContainerHeight = parseInt(ui.elements.graphContainer.clientHeight);\n",
       "              if(state.showDetails){\n",
       "                state.detailsContainerHeight = parseInt(ui.elements.detailsContainer.clientHeight);\n",
       "              }\n",
       "            },\n",
       "\n",
       "            setInnerHeights(){\n",
       "              ui.elements.graphContainer.style.height = state.graphContainerHeight + \"px\";\n",
       "              ui.elements.detailsContainer.style.height = state.detailsContainerHeight + \"px\";\n",
       "            },\n",
       "\n",
       "            setOuterHeights(){\n",
       "              ui.elements.mainContainer.style.height = ui.elements.leftContainer.offsetHeight + \"px\";\n",
       "            },\n",
       "\n",
       "            getSizes(){\n",
       "              ui.composites.responsiveContainer.getInnerWidths();\n",
       "              ui.composites.responsiveContainer.getInnerHeights();\n",
       "            },\n",
       "\n",
       "            setSizes(){\n",
       "              ui.composites.responsiveContainer.setInnerHeights();\n",
       "              ui.composites.responsiveContainer.setOuterHeights();\n",
       "            },\n",
       "\n",
       "            adaptToResize(){\n",
       "              ui.composites.responsiveContainer.getSizes();\n",
       "              ui.composites.responsiveContainer.setSizes();\n",
       "            },\n",
       "\n",
       "            adaptToFullscreen(){\n",
       "              ui.composites.responsiveContainer.getSizes();\n",
       "              if(document.fullscreenElement){\n",
       "                // On entering fullscreen, remember the current container heights\n",
       "                state.beforeFullscreenGraphContainerHeight = state.graphContainerHeight;\n",
       "                state.beforeFullscreenDetailsContainerHeight = state.detailsContainerHeight;\n",
       "                // and then adapt them to maximum height possible in full screen mode\n",
       "                function calculateFullscreenMaxGraphHeight(){\n",
       "                  let outerHeight = null;\n",
       "                  try{\n",
       "                    const mainDivComputedStyle = window.getComputedStyle(ui.elements.mainContainer),\n",
       "                      graphDivComputedStyle = window.getComputedStyle(ui.elements.graphContainer),\n",
       "                      paddingTop = parseFloat(mainDivComputedStyle.paddingTop),\n",
       "                      borderTop = parseFloat(graphDivComputedStyle.borderTopWidth),\n",
       "                      borderBottom = parseFloat(graphDivComputedStyle.borderBottomWidth),\n",
       "                      paddingBottom = parseFloat(mainDivComputedStyle.paddingBottom);\n",
       "                    outerHeight = paddingTop + borderTop + borderBottom + paddingBottom;\n",
       "                    if(!isFinite(outerHeight) || outerHeight === null){\n",
       "                      throw \"Invalid number\";\n",
       "                    }\n",
       "                  } catch(e){\n",
       "                    // Hard coded fallback, depends on CSS of containers (1px borders, 6px padding)\n",
       "                    outerHeight = 1 + 3 + 3 + 1;\n",
       "                  }\n",
       "                  let graphHeight = screen.height - outerHeight;\n",
       "                  if(state.showDetails){\n",
       "                    graphHeight -= ui.composites.details.calculateHeightDifference();\n",
       "                  }\n",
       "                  return graphHeight;\n",
       "                }\n",
       "                state.graphContainerHeight = calculateFullscreenMaxGraphHeight();\n",
       "              } else{\n",
       "                // On leaving fullscreen, set container heights back to remembered values\n",
       "                state.graphContainerHeight = state.beforeFullscreenGraphContainerHeight;\n",
       "                state.detailsContainerHeight = state.beforeFullscreenDetailsContainerHeight;\n",
       "              }\n",
       "              ui.composites.responsiveContainer.setSizes();\n",
       "            },\n",
       "          },\n",
       "\n",
       "          menu:{\n",
       "            show(){\n",
       "              ui.elements.leftContainer.style.width = \"80%\";\n",
       "              ui.elements.rightContainer.style.width = \"20%\";\n",
       "              ui.elements.rightContainer.style.display = \"block\";\n",
       "            },\n",
       "\n",
       "            hide(){\n",
       "              ui.elements.leftContainer.style.width = \"100%\";\n",
       "              ui.elements.rightContainer.style.width = \"0%\";\n",
       "              ui.elements.rightContainer.style.display = \"none\";\n",
       "            },\n",
       "\n",
       "            toggle(){\n",
       "              // Update menu button\n",
       "              const div = ui.elements.menuToggleDiv;\n",
       "              state.showMenu = !state.showMenu;\n",
       "              if(state.showMenu){\n",
       "                div.innerText = ui.symbols.menuShown;\n",
       "                ui.composites.menu.show();\n",
       "              } else {\n",
       "                div.innerHTML = ui.symbols.menuHidden;\n",
       "                ui.composites.menu.hide();\n",
       "              }\n",
       "\n",
       "              // Update rest of UI\n",
       "              ui.composites.responsiveContainer.getInnerWidths();\n",
       "              ui.composites.responsiveContainer.getInnerHeights();\n",
       "              ui.composites.responsiveContainer.setOuterHeights();\n",
       "              ui.composites.graph.updateGraphDrawingArea();\n",
       "            },\n",
       "\n",
       "            setItem(keyElement, valElement, toActive){\n",
       "              const currentText = keyElement.innerHTML;\n",
       "              let sliceStart = 0;\n",
       "              if(currentText.startsWith(ui.symbols.menuItemActive)){\n",
       "                sliceStart = ui.symbols.menuItemActive.length;\n",
       "              } else if (currentText.startsWith(ui.symbols.menuItemInactive)){\n",
       "                sliceStart = ui.symbols.menuItemInactive.length;\n",
       "              }\n",
       "              if(toActive){\n",
       "                keyElement.innerHTML = ui.symbols.menuItemActive + currentText.slice(sliceStart);\n",
       "                keyElement.style.backgroundColor = \"#f5f5f5\";\n",
       "                keyElement.style.color = \"black\";\n",
       "                keyElement.style.borderColor = \"#999\";\n",
       "                keyElement.style.boxShadow = \"0px 0px 3px rgba(0, 0, 0, 0.35)\";\n",
       "                valElement.style.display = \"block\";\n",
       "              } else {\n",
       "                keyElement.innerHTML = ui.symbols.menuItemInactive + currentText.slice(sliceStart);\n",
       "                keyElement.style.backgroundColor = \"white\";\n",
       "                keyElement.style.color = \"#222\";\n",
       "                keyElement.style.borderColor = \"#ccc\";\n",
       "                keyElement.style.boxShadow = \"0px 0px 3px rgba(0, 0, 0, 0.2)\";\n",
       "                valElement.style.display = \"none\";\n",
       "              }\n",
       "            },\n",
       "\n",
       "            toggleItem(keyElement, valElement){\n",
       "              const toActive = !(valElement.style.display !== \"none\");\n",
       "              ui.composites.menu.setItem(keyElement, valElement, toActive);\n",
       "            },\n",
       "          },\n",
       "\n",
       "          details:{\n",
       "            calculateHeightDifference(){\n",
       "              let outerHeight = null;\n",
       "              try{\n",
       "                const graphContainerComputedStyle = window.getComputedStyle(ui.elements.graphContainer),\n",
       "                  detailsContainerComputedStyle = window.getComputedStyle(ui.elements.detailsContainer),\n",
       "                  border1 = parseFloat(graphContainerComputedStyle.borderBottomWidth),\n",
       "                  margin = parseFloat(detailsContainerComputedStyle.marginTop),\n",
       "                  border2 = parseFloat(detailsContainerComputedStyle.borderTopWidth);\n",
       "                outerHeight = border1 + margin + border2;\n",
       "                if(!isFinite(outerHeight) || outerHeight === null){\n",
       "                  throw \"Invalid number\";\n",
       "                }\n",
       "              } catch(e){\n",
       "                // Hard coded fallback, depends on CSS of containers (1px borders, 5px margin)\n",
       "                outerHeight = 7.0;\n",
       "              }\n",
       "              return state.detailsContainerHeight + outerHeight\n",
       "            },\n",
       "\n",
       "            show(init=false){\n",
       "              // Visibility\n",
       "              ui.elements.detailsContainer.style.display = \"block\";\n",
       "              if(!init){\n",
       "                // Height\n",
       "                const heightDiff = ui.composites.details.calculateHeightDifference();\n",
       "                state.graphContainerHeight -= heightDiff;\n",
       "                if(state.graphContainerHeight < 70){\n",
       "                  state.graphContainerHeight = 70;\n",
       "                }\n",
       "                // Update rest of UI\n",
       "                ui.composites.responsiveContainer.setSizes();\n",
       "                ui.composites.graph.updateGraphDrawingArea();\n",
       "              }\n",
       "            },\n",
       "\n",
       "            hide(init=false){\n",
       "              // Visibility\n",
       "              ui.elements.detailsContainer.style.display = \"none\";\n",
       "              if(!init){\n",
       "                // Height\n",
       "                const heightDiff = ui.composites.details.calculateHeightDifference();\n",
       "                state.graphContainerHeight += heightDiff;\n",
       "                // Update rest of UI\n",
       "                ui.composites.responsiveContainer.setSizes();\n",
       "                ui.composites.graph.updateGraphDrawingArea();\n",
       "              }\n",
       "            },\n",
       "\n",
       "            toggle(){\n",
       "              // Update details button\n",
       "              const toggleDiv = ui.elements.detailsToggleDiv;\n",
       "              state.showDetails = !state.showDetails;\n",
       "              if(state.showDetails){\n",
       "                toggleDiv.innerText = ui.symbols.detailsShown;\n",
       "                ui.composites.details.show();\n",
       "              } else {\n",
       "                toggleDiv.innerHTML = ui.symbols.detailsHidden;\n",
       "                ui.composites.details.hide();\n",
       "              }\n",
       "            },\n",
       "          },\n",
       "\n",
       "          download:{\n",
       "            png(filename){\n",
       "              ui.composites.download._rasterImage(filename, \"png\");\n",
       "            },\n",
       "\n",
       "            jpg(filename){\n",
       "              ui.composites.download._rasterImage(filename, \"jpeg\");\n",
       "            },\n",
       "\n",
       "            _rasterImage(filename, format){\n",
       "              const canvas = ui.elements.graphContainer.getElementsByTagName(\"canvas\")[0],\n",
       "                mimeType = \"image/\" + format;\n",
       "              function finishedBlobCallback(blob){\n",
       "                ui.composites.download._blobToFileDownload(blob, filename);\n",
       "              }\n",
       "              try{\n",
       "                // Blob to overcome size limitations for data URLs (e.g. 4MB in Chrome)\n",
       "                canvas.toBlob(finishedBlobCallback, mimeType, 1.0);\n",
       "              } catch(e){\n",
       "                if(e.name === \"SecurityError\"){\n",
       "                  alert(\"Image creation failed. Some images within the nodes of the graph can \" +\n",
       "                      \"not be fetched from within JavaScript due to security settings of the \" +\n",
       "                      \"server that provides the images.\");\n",
       "                } else{\n",
       "                  throw e;\n",
       "                }\n",
       "              }\n",
       "            },\n",
       "\n",
       "            _blobToFileDownload(blob, filename){\n",
       "              const url = URL.createObjectURL(blob),\n",
       "                a = document.createElement(\"a\");\n",
       "              function handleClick(){\n",
       "                setTimeout(function(){\n",
       "                  // Long waiting time before removal for slow devices like mobile phones\n",
       "                  URL.revokeObjectURL(url);\n",
       "                  this.removeEventListener(\"click\", handleClick);\n",
       "                }, 20000);\n",
       "              };\n",
       "              document.body.appendChild(a);\n",
       "              a.href = url;\n",
       "              a.download = filename;\n",
       "              a.addEventListener(\"click\", handleClick, false);\n",
       "              a.click();\n",
       "              document.body.removeChild(a);\n",
       "            },\n",
       "          },\n",
       "\n",
       "          selection(element, optionList, valueList=undefined) {\n",
       "            while(element.hasChildNodes()){\n",
       "              element.removeChild(element.firstChild);\n",
       "            }\n",
       "            for(let i=0; i<optionList.length; i++){\n",
       "              let text = optionList[i];\n",
       "              let value = text;\n",
       "              if(valueList){\n",
       "                value = valueList[i];\n",
       "              }\n",
       "              let opt = document.createElement(\"option\");\n",
       "              opt.appendChild(document.createTextNode(text));\n",
       "              opt.value = value;\n",
       "              element.appendChild(opt);\n",
       "            }\n",
       "          },\n",
       "\n",
       "          tooltip:{\n",
       "            show(xShift=null, yShift=null){\n",
       "              if(isFinite(xShift) && xShift !== null){\n",
       "                ui.elements.tooltipContainer.style.left =  parseInt(xShift) + \"px\";\n",
       "              }\n",
       "              if(isFinite(yShift) && yShift !== null){\n",
       "                ui.elements.tooltipContainer.style.top = parseInt(yShift) + \"px\";\n",
       "              }\n",
       "              ui.elements.tooltipContainer.style.transition = \"visibility 0s, opacity 0.1s\";\n",
       "              ui.elements.tooltipContainer.style.visibility = \"visible\";\n",
       "              ui.elements.tooltipContainer.style.opacity = 1.0;\n",
       "            },\n",
       "\n",
       "            hide(){\n",
       "              ui.elements.tooltipContainer.style.transition = \"visibility 0.3s, opacity 0.3s ease-in\";\n",
       "              ui.elements.tooltipContainer.style.visibility = \"hidden\";\n",
       "              ui.elements.tooltipContainer.style.opacity = 0.0;\n",
       "            },\n",
       "          },\n",
       "\n",
       "          progressBar:{\n",
       "            create(){\n",
       "              // Main container\n",
       "              this.mainContainer = document.createElement(\"div\");\n",
       "              this.mainContainer.id = \"iUn6OmQXNRWdlB6Nj-progress-container\";\n",
       "              this.mainContainer.style.backgroundColor = state.shownData.general.background_color;\n",
       "              ui.elements.graphContainer.style.backgroundColor = state.shownData.general.background_color;\n",
       "              // Text container\n",
       "              const numNodes = state.parsedData.nodes.length;\n",
       "              this.textContainer = document.createElement(\"div\");\n",
       "              this.textContainer.innerText = \"Large graph with \" + numNodes + \" nodes. Calculating an initial layout before visualizing it.\";\n",
       "              this.textContainer.style.textAlign = \"center\";\n",
       "              // Bar container\n",
       "              this.outerBarContainer = document.createElement(\"div\");\n",
       "              this.outerBarContainer.style.border = \"1px solid black\";\n",
       "              this.outerBarContainer.style.borderRadius = \"4px\";\n",
       "              this.outerBarContainer.style.marginTop = \"1ex\";\n",
       "              this.outerBarContainer.style.padding = \"1px\";\n",
       "              this.innerBarContainer = document.createElement(\"div\");\n",
       "              this.innerBarContainer.style.backgroundColor = \"black\";\n",
       "              this.innerBarContainer.style.width = \"0%\";\n",
       "              this.innerBarContainer.style.height = \"8px\";\n",
       "              this.innerBarContainer.style.borderRadius = \"3px\";\n",
       "              // Add them to DOM\n",
       "              this.outerBarContainer.appendChild(this.innerBarContainer);\n",
       "              this.mainContainer.appendChild(this.textContainer);\n",
       "              this.mainContainer.appendChild(this.outerBarContainer);\n",
       "              ui.elements.graphContainer.appendChild(this.mainContainer);\n",
       "            },\n",
       "\n",
       "            update(percentage){\n",
       "              this.innerBarContainer.style.width = percentage + \"%\";\n",
       "            },\n",
       "\n",
       "            remove(){\n",
       "              ui.elements.graphContainer.removeChild(this.mainContainer);\n",
       "            }\n",
       "          },\n",
       "\n",
       "          graph:{\n",
       "            createGraph(){\n",
       "              // Remove existing elements\n",
       "              ui.deleteChildElements(ui.elements.graphContainer);\n",
       "\n",
       "              // Create new elements\n",
       "              // I) Set graph options\n",
       "              // a) Nodes: https://visjs.github.io/vis-network/docs/network/nodes.html\n",
       "              const data = state.shownData,\n",
       "                visNodes = [];\n",
       "              let graphContainsFixedPositions = false;\n",
       "              for(let i=0; i<data.nodes.length; i++){\n",
       "                const node = data.nodes[i];\n",
       "                let visNode = {\n",
       "                  id: node.id,\n",
       "                  shape: node.shape,\n",
       "                  borderWidth: node.border_size,\n",
       "                  color: {\n",
       "                    background: node.color,\n",
       "                    border: node.border_color,\n",
       "                  },\n",
       "                }\n",
       "                // - Node labels\n",
       "                if(state.showNodeLabels){\n",
       "                  if(typeof(node.label) !== \"undefined\"){\n",
       "                    visNode.label = node.label;\n",
       "                    visNode.font = {\n",
       "                      size: node.label_size,\n",
       "                      color: node.label_color,\n",
       "                      strokeWidth: (state.showNodeLabelBorders ? 1.2 : 0.0),\n",
       "                      strokeColor: data.general.background_color,\n",
       "                    }\n",
       "                  }\n",
       "                }\n",
       "                // - Nodes hidden/shown (\"hidden\" property hides entire graph, using size=0 instead)\n",
       "                if(state.showNodes || (typeof(node.image) !== \"undefined\" && state.showNodeImages)){\n",
       "                  visNode.size = node.size;\n",
       "                } else {\n",
       "                  visNode.size = 0.0;\n",
       "                }\n",
       "                // - Node images\n",
       "                if(typeof(node.image) !== \"undefined\"){\n",
       "                  if(state.showNodeImages){\n",
       "                    visNode.shape = \"image\";\n",
       "                    visNode.image = node.image;\n",
       "                    visNode.size = node.image_size;\n",
       "                    // prevent a visual change of nodes with images upon selection (not deactivatable)\n",
       "                    visNode.color.highlight = {\n",
       "                      background: visNode.color.background,\n",
       "                      border: visNode.color.border,\n",
       "                    };\n",
       "                    visNode.borderWidthSelected = visNode.borderWidth;\n",
       "                  }\n",
       "                }\n",
       "                // - Node positions\n",
       "                const x = node.fx,\n",
       "                  y = node.fy;\n",
       "                if((typeof(x) !== \"undefined\") || (typeof(y) !== \"undefined\")){\n",
       "                  graphContainsFixedPositions = true;\n",
       "                  visNode.fixed = {}\n",
       "                  if(typeof(x) !== \"undefined\"){\n",
       "                    visNode.x = x;\n",
       "                    visNode.fixed.x = true;\n",
       "                  }\n",
       "                  if(typeof(y) !== \"undefined\"){\n",
       "                    visNode.y = y;\n",
       "                    visNode.fixed.y = true;\n",
       "                  }\n",
       "                }\n",
       "                // - Node hover behavior 1: highlight neighborhood\n",
       "                visNode.color.hover = {\n",
       "                  background: visNode.color.background,\n",
       "                  border: visNode.color.background,\n",
       "                };\n",
       "                // - Node hover behavior 2: show tooltip\n",
       "                if(state.nodeHoverTooltip){\n",
       "                  if(typeof(node.hover) !== \"undefined\"){\n",
       "                    visNode.title = node.hover;\n",
       "                  }\n",
       "                }\n",
       "                // - Node click behavior: show details\n",
       "                if(typeof(node.click) !== \"undefined\" && node.click !== \"\"){\n",
       "                  visNode.click = node.click;\n",
       "                }\n",
       "                visNodes.push(visNode);\n",
       "              }\n",
       "\n",
       "              // b) Edges: https://visjs.github.io/vis-network/docs/network/edges.html\n",
       "              const visEdges = [];\n",
       "              for(let i=0; i<data.edges.length; i++){\n",
       "                const edge = data.edges[i];\n",
       "                const visEdge = {\n",
       "                  id: edge.id,\n",
       "                  from: edge.source.id,\n",
       "                  to: edge.target.id,\n",
       "                  color: edge.color,\n",
       "                  width: edge.size,\n",
       "                };\n",
       "                // - Edge labels\n",
       "                if(state.showEdgeLabels){\n",
       "                  if(typeof(edge.label) !== \"undefined\"){\n",
       "                    visEdge.label = edge.label;\n",
       "                    visEdge.font = {\n",
       "                      size: edge.label_size,\n",
       "                      color: edge.label_color,\n",
       "                      strokeWidth: (state.showEdgeLabelBorders ? 1.2 : 0.0),\n",
       "                      strokeColor: data.general.background_color,\n",
       "                    }\n",
       "                  }\n",
       "                }\n",
       "                // - Edges hidden/shown\n",
       "                if(!state.showEdges){\n",
       "                  visEdge.hidden = true;\n",
       "                }\n",
       "                // - Edge hover behavior\n",
       "                if(state.edgeHoverTooltip){\n",
       "                  if(typeof(edge.hover) !== \"undefined\") {\n",
       "                    visEdge.title = edge.hover;\n",
       "                  }\n",
       "                }\n",
       "                // - Edge click behavior\n",
       "                if(typeof(edge.click) !== \"undefined\" && edge.click !== \"\"){\n",
       "                  visEdge.click = edge.click;\n",
       "                }\n",
       "                visEdges.push(visEdge);\n",
       "              }\n",
       "              // c) Options: https://visjs.github.io/vis-network/docs/network/\n",
       "              const options = {};\n",
       "              // - Nodes\n",
       "              options.nodes = {};\n",
       "              options.nodes.chosen = false;\n",
       "              options.nodes.imagePadding = 1.5;\n",
       "              options.nodes.labelHighlightBold = false;\n",
       "              options.nodes.shapeProperties = {};\n",
       "              options.nodes.shapeProperties.useBorderWithImage = true;\n",
       "              // - Node label font family\n",
       "              if(state.nodeLabelFont !== null){\n",
       "                options.nodes.font = {\n",
       "                  \"face\": state.nodeLabelFont,\n",
       "                }\n",
       "              }\n",
       "              // - Edges\n",
       "              options.edges = {};\n",
       "              // - Edges hidden/shown\n",
       "              if(!state.showEdges){\n",
       "                options.edges.hidden = true;\n",
       "              }\n",
       "              // - Edge curvature\n",
       "              if(state.edgeCurvature === 0.0){\n",
       "                options.edges.smooth = false;\n",
       "              } else {\n",
       "                options.edges.smooth = ui.composites.graph.calculateEdgeCurvatureOptions();\n",
       "              }\n",
       "              // - Edge arrows\n",
       "              if(data.general.directed){\n",
       "                options.edges.arrows = {};\n",
       "                options.edges.arrows.to = {};\n",
       "                options.edges.arrows.to.enabled = true;\n",
       "                if(data.general.arrow_size !== 0.0){\n",
       "                  options.edges.arrows.to.scaleFactor = data.general.arrow_size / 10.0;\n",
       "                }\n",
       "              }\n",
       "              // - Edge label font family\n",
       "              if(state.edgeLabelFont !== null){\n",
       "                options.edges.font = {\n",
       "                  \"face\": state.edgeLabelFont,\n",
       "                }\n",
       "              }\n",
       "              // - Drawing area\n",
       "              options.autoResize = false;\n",
       "              // - Interaction\n",
       "              options.interaction = {};\n",
       "              options.interaction.selectable = false;\n",
       "              options.interaction.selectConnectedEdges = false;\n",
       "              options.interaction.tooltipDelay = 0.0;\n",
       "              options.interaction.hover = state.nodeHoverNeighborhood;\n",
       "              options.interaction.hoverConnectedEdges = state.nodeHoverNeighborhood;\n",
       "              // - Layout algorithm\n",
       "              const numNodes = state.parsedData.nodes.length;\n",
       "              options.layout = {};\n",
       "              if(numNodes < 400){\n",
       "                options.layout.improvedLayout = true;\n",
       "              } else{\n",
       "                options.layout.improvedLayout = false;\n",
       "              }\n",
       "              options.physics = {};\n",
       "              options.physics.barnesHut = {\"damping\": 0.25};\n",
       "              options.physics.forceAtlas2Based = {\"damping\": 3.0};\n",
       "              options.physics.repulsion = {};\n",
       "              options.physics.hierarchicalRepulsion = {};\n",
       "              options.physics.stabilization = {};\n",
       "              options.physics.stabilization.enabled = false;\n",
       "              if(numNodes > state.largeGraphThreshold){\n",
       "                let numIterations = 800;\n",
       "                if(numNodes >= 25000){\n",
       "                  numIterations = 100;\n",
       "                } else if(numNodes >= 10000){\n",
       "                  numIterations = 300;\n",
       "                } else if(numNodes >= 5000){\n",
       "                  numIterations = 400;\n",
       "                } else if(numNodes >= 2000){\n",
       "                  numIterations = 500;\n",
       "                } else if(numNodes >= 1000){\n",
       "                  numIterations = 600;\n",
       "                }\n",
       "                options.physics.stabilization = {\n",
       "                  \"enabled\": true,\n",
       "                  \"fit\": true,\n",
       "                  \"iterations\": numIterations,\n",
       "                  \"updateInterval\": 1,\n",
       "                };\n",
       "              }\n",
       "              // II) Create graph\n",
       "              // - DataSet and Network: https://visjs.github.io/vis-network/docs/network\n",
       "              state.visOptions = options;\n",
       "              state.visData = {\n",
       "                nodes: new vis.DataSet(visNodes),\n",
       "                edges: new vis.DataSet(visEdges),\n",
       "              };\n",
       "              state.visGraph = new vis.Network(ui.elements.graphContainer, state.visData, state.visOptions);\n",
       "              // III) Set further graph options after its creation\n",
       "              // - Background: https://github.com/almende/vis/issues/2292\n",
       "              state.visGraph.on(\"beforeDrawing\", function(ctx){\n",
       "                  ctx.save();\n",
       "                  ctx.setTransform(1, 0, 0, 1, 0, 0);\n",
       "                  ctx.fillStyle = data.general.background_color;\n",
       "                  ctx.fillRect(0, 0, ctx.canvas.width, ctx.canvas.height);\n",
       "                  ctx.restore();\n",
       "              })\n",
       "              // - Node positions: node update after graph creation seems to prevent a bug\n",
       "              if(graphContainsFixedPositions){\n",
       "                state.visData.nodes.update(visNodes);\n",
       "              }\n",
       "              // - Graph behavior\n",
       "              ui.composites.graph.setBehavior();\n",
       "\n",
       "              // Menu toggle button\n",
       "              if(state.showMenuToggleButton){\n",
       "                const menuDiv = document.createElement(\"div\");\n",
       "                if(state.showMenu){\n",
       "                  menuDiv.innerText = ui.symbols.menuShown;\n",
       "                } else {\n",
       "                  menuDiv.innerText = ui.symbols.menuHidden;\n",
       "                }\n",
       "                menuDiv.id = \"iUn6OmQXNRWdlB6Nj-menu-toggle-button\";\n",
       "                menuDiv.onclick = ui.composites.menu.toggle;\n",
       "                ui.elements.graphContainer.appendChild(menuDiv);\n",
       "                ui.elements.menuToggleDiv = menuDiv;\n",
       "              }\n",
       "              // Details toggle button\n",
       "              if(state.showDetailsToggleButton){\n",
       "                const detailsDiv = document.createElement(\"div\");\n",
       "                if(state.showDetails){\n",
       "                  detailsDiv.innerText = ui.symbols.detailsShown;\n",
       "                } else {\n",
       "                  detailsDiv.innerText = ui.symbols.detailsHidden;\n",
       "                }\n",
       "                detailsDiv.id = \"iUn6OmQXNRWdlB6Nj-details-toggle-button\";\n",
       "                detailsDiv.onclick = ui.composites.details.toggle;\n",
       "                ui.elements.graphContainer.appendChild(detailsDiv);\n",
       "                ui.elements.detailsToggleDiv = detailsDiv;\n",
       "              }\n",
       "            },\n",
       "\n",
       "            setBehavior(){\n",
       "              // - Progress bar: only if large graph, stops simulation to get initial static image\n",
       "              // https://visjs.github.io/vis-network/examples/network/exampleApplications/loadingBar.html\n",
       "              const numNodes = state.parsedData.nodes.length;\n",
       "              if(numNodes > state.largeGraphThreshold){\n",
       "                // Layout start\n",
       "                ui.composites.progressBar.create();\n",
       "                // Layout update\n",
       "                state.visGraph.on(\"stabilizationProgress\", function(params){\n",
       "                  var progressPercentage = params.iterations / params.total * 100;\n",
       "                  ui.composites.progressBar.update(progressPercentage);\n",
       "                });\n",
       "                // Layout finished\n",
       "                state.visGraph.once(\"stabilizationIterationsDone\", function(){\n",
       "                  setTimeout(function(){\n",
       "                    ui.composites.progressBar.remove();\n",
       "                    ui.composites.graph.simulationManager.stop();\n",
       "                  }, 60);\n",
       "                });\n",
       "              }\n",
       "              // - Node drag behavior: move node, fix its position or release it afterwards\n",
       "              state.visGraph.on(\"dragStart\", function(params){\n",
       "                params.event = \"[original event]\";\n",
       "                const nodeId = this.getNodeAt(params.pointer.DOM);\n",
       "                if(nodeId){\n",
       "                  const visNode = state.visData.nodes.get(nodeId),\n",
       "                    position = state.visGraph.getPositions(nodeId);\n",
       "                  visNode.x = position.x;\n",
       "                  visNode.y = position.y;\n",
       "                  visNode.fixed = false;\n",
       "                  state.visData.nodes.update(visNode);\n",
       "                }\n",
       "              });\n",
       "              state.visGraph.on(\"dragEnd\", function(params){\n",
       "                params.event = \"[original event]\";\n",
       "                const nodeId = this.getNodeAt(params.pointer.DOM);\n",
       "                if(nodeId){\n",
       "                  if(state.nodeDragFix){\n",
       "                    const visNode = state.visData.nodes.get(nodeId),\n",
       "                      position = state.visGraph.getPositions(nodeId);\n",
       "                    visNode.x = position.x;\n",
       "                    visNode.y = position.y;\n",
       "                    visNode.fixed = {\"x\": true, \"y\": true}\n",
       "                    state.visData.nodes.update(visNode);\n",
       "                  }\n",
       "                }\n",
       "              });\n",
       "              // - Node and edge hover behavior: already covered\n",
       "              // - Node and edge click behavior\n",
       "              // https://visjs.github.io/vis-network/examples/network/events/interactionEvents.html\n",
       "              function createNodeText(node){\n",
       "                let htmlText = \"<div>Node: \" + String(node.id) + \"</div>\";\n",
       "                if(typeof(node.click) !== \"undefined\" && node.click !== \"\"){\n",
       "                  htmlText += '<div id=\"iUn6OmQXNRWdlB6Nj-details-user-provided\">' + node.click + '</div>';\n",
       "                }\n",
       "                return htmlText;\n",
       "              }\n",
       "              function createEdgeText(edge){\n",
       "                let htmlText = \"<div>Edge: \" + String(edge.id) + \"</div>\";\n",
       "                if(typeof(edge.click) !== \"undefined\" && edge.click !== \"\"){\n",
       "                  htmlText += '<div id=\"iUn6OmQXNRWdlB6Nj-details-user-provided\">' + edge.click + '</div>';\n",
       "                }\n",
       "                return htmlText;\n",
       "              }\n",
       "              state.visGraph.on(\"click\", function(params){\n",
       "                params.event = \"[original event]\";\n",
       "                let htmlText = \"\";\n",
       "                const nodeId = this.getNodeAt(params.pointer.DOM);\n",
       "                if(nodeId){\n",
       "                  const node = state.visData.nodes.get(nodeId);\n",
       "                  if(node){\n",
       "                    htmlText = createNodeText(node);\n",
       "                  }\n",
       "                } else {\n",
       "                  const edgeId = this.getEdgeAt(params.pointer.DOM);\n",
       "                  if(edgeId){\n",
       "                    const edge = state.visData.edges.get(edgeId);\n",
       "                    if(edge){\n",
       "                      htmlText = createEdgeText(edge);\n",
       "                    }\n",
       "                  }\n",
       "                }\n",
       "                ui.elements.detailsBody.innerHTML = htmlText;\n",
       "              });\n",
       "              // - Simulation behavior\n",
       "              state.visGraph.on(\"startStabilizing\", function(params){\n",
       "                // A manually stopped simulation restarts automatically by dragging a node or\n",
       "                // altering a dataset, immediately triggering this event. So if the simulation\n",
       "                // shall be inactive, any automatic restart can be turned off immediately here.\n",
       "                if(!state.layoutAlgorithmActive){\n",
       "                  state.visGraph.stopSimulation();\n",
       "                }\n",
       "              });\n",
       "              // Start (considers all simulation parameters)\n",
       "              ui.composites.graph.simulationManager.start();\n",
       "            },\n",
       "\n",
       "            // Graph\n",
       "            updateGraphDrawingArea(){\n",
       "              state.visGraph.setSize(state.graphContainerWidth, state.graphContainerHeight);\n",
       "              state.visGraph.redraw();\n",
       "            },\n",
       "\n",
       "            // Nodes\n",
       "            updateNodes(){\n",
       "              const data = state.shownData,\n",
       "                newVisNodes = [];\n",
       "              for(let i=0; i<data.nodes.length; i++){\n",
       "                const node = data.nodes[i],\n",
       "                  visNode = state.visData.nodes.get(node.id);\n",
       "                // Node shape\n",
       "                visNode.shape = node.shape;\n",
       "                // Node size\n",
       "                if(state.showNodes){\n",
       "                  visNode.size = node.size;\n",
       "                } else {\n",
       "                  visNode.size = 0.0;\n",
       "                }\n",
       "                // Node images\n",
       "                if(state.showNodeImages){\n",
       "                  if(typeof(node.image) !== \"undefined\"){\n",
       "                    visNode.size = node.image_size;\n",
       "                    visNode.shape = \"image\";\n",
       "                    visNode.image = node.image;\n",
       "                  }\n",
       "                }\n",
       "                // Prevent node movements: Remove stored positions of nodes once fixed and now released\n",
       "                if(visNode.fixed === false){\n",
       "                  delete visNode.x;\n",
       "                  delete visNode.y;\n",
       "                }\n",
       "                newVisNodes.push(visNode);\n",
       "              }\n",
       "              state.visData.nodes.update(newVisNodes);\n",
       "            },\n",
       "\n",
       "            preventNodeJump(visNode){\n",
       "              if(visNode.fixed === false){\n",
       "                delete visNode.x;\n",
       "                delete visNode.y;\n",
       "              }\n",
       "            },\n",
       "\n",
       "            updateNodeVisibilities(){\n",
       "              ui.composites.graph.updateNodes();\n",
       "            },\n",
       "\n",
       "            updateNodeSizes(){\n",
       "              const data = state.shownData,\n",
       "                newVisNodes = [];\n",
       "              for(let i=0; i<data.nodes.length; i++){\n",
       "                const node = data.nodes[i],\n",
       "                  visNode = state.visData.nodes.get(node.id);\n",
       "                visNode.size = node.size;\n",
       "                if(state.showNodeImages && typeof(node.image) !== \"undefined\"){\n",
       "                  visNode.size = node.image_size;\n",
       "                }\n",
       "                ui.composites.graph.preventNodeJump(visNode);\n",
       "                newVisNodes.push(visNode);\n",
       "              }\n",
       "              state.visData.nodes.update(newVisNodes);\n",
       "            },\n",
       "\n",
       "            updateNodeHoverNeighborhoodBehavior(){\n",
       "              state.visOptions.interaction.hover = state.nodeHoverNeighborhood;\n",
       "              state.visOptions.interaction.hoverConnectedEdges = state.nodeHoverNeighborhood;\n",
       "              state.visGraph.setOptions(state.visOptions);\n",
       "            },\n",
       "\n",
       "            updateNodeHoverTooltipBehavior(){\n",
       "              const data = state.shownData,\n",
       "                newVisNodes = [];\n",
       "              for(let i=0; i<data.nodes.length; i++){\n",
       "                const node = data.nodes[i],\n",
       "                  visNode = state.visData.nodes.get(node.id);\n",
       "                if(typeof(node.hover) !== \"undefined\"){\n",
       "                  visNode.title = state.nodeHoverTooltip ? node.hover : null;\n",
       "                }\n",
       "                newVisNodes.push(visNode);\n",
       "              }\n",
       "              state.visData.nodes.update(newVisNodes);\n",
       "            },\n",
       "\n",
       "            // Node images\n",
       "            updateNodeImages(){\n",
       "              const data = state.shownData,\n",
       "                newVisNodes = [];\n",
       "              for(let i=0; i<data.nodes.length; i++){\n",
       "                const node = data.nodes[i],\n",
       "                  visNode = state.visData.nodes.get(node.id);\n",
       "                visNode.shape = node.shape;\n",
       "                if(state.showNodes){\n",
       "                  visNode.size = node.size;\n",
       "                } else {\n",
       "                  visNode.size = 0.0;\n",
       "                }\n",
       "                if(state.showNodeImages){\n",
       "                  if(typeof(node.image) !== \"undefined\"){\n",
       "                    visNode.size = node.image_size;\n",
       "                    visNode.shape = \"image\";\n",
       "                    visNode.image = node.image;\n",
       "                  }\n",
       "                }\n",
       "                ui.composites.graph.preventNodeJump(visNode);\n",
       "                newVisNodes.push(visNode);\n",
       "              }\n",
       "              state.visData.nodes.update(newVisNodes);\n",
       "            },\n",
       "\n",
       "            // Node labels\n",
       "            updateNodeLabels(){\n",
       "              // Vis data sets: https://visjs.github.io/vis-data/data/dataset.html\n",
       "              const data = state.shownData,\n",
       "                newVisNodes = [];\n",
       "              for(let i=0; i<data.nodes.length; i++){\n",
       "                const node = data.nodes[i];\n",
       "                const visNode = state.visData.nodes.get(node.id);\n",
       "                if(state.showNodeLabels){\n",
       "                  visNode.label = node.label;\n",
       "                  visNode.font = {\n",
       "                    size: node.label_size,\n",
       "                    color: node.label_color,\n",
       "                    strokeWidth: (state.showNodeLabelBorders ? 1.2 : 0.0),\n",
       "                    strokeColor: data.general.background_color,\n",
       "                  }\n",
       "                } else{\n",
       "                  visNode.label = undefined;\n",
       "                }\n",
       "                ui.composites.graph.preventNodeJump(visNode);\n",
       "                newVisNodes.push(visNode);\n",
       "              }\n",
       "              state.visData.nodes.update(newVisNodes);\n",
       "            },\n",
       "\n",
       "            // Edges\n",
       "            calculateEdgeCurvatureOptions(){\n",
       "              const appearanceAdaptionFactor = 0.5,\n",
       "                options = {\n",
       "                \"type\": state.edgeCurvature > 0.0 ? \"curvedCW\" : \"curvedCCW\",\n",
       "                \"roundness\": Math.abs(state.edgeCurvature) * appearanceAdaptionFactor,\n",
       "              };\n",
       "              return options\n",
       "            },\n",
       "\n",
       "            updateEdgeVisibility(){\n",
       "              const data = state.shownData,\n",
       "                newVisEdges = [];\n",
       "              for(let i=0; i<data.edges.length; i++){\n",
       "                const edge = data.edges[i],\n",
       "                  visEdge = state.visData.edges.get(edge.id);\n",
       "                visEdge.hidden = !state.showEdges;\n",
       "                newVisEdges.push(visEdge);\n",
       "              }\n",
       "              state.visData.edges.update(newVisEdges);\n",
       "            },\n",
       "\n",
       "            updateEdgeSizes(){\n",
       "              const data = state.shownData,\n",
       "                newVisEdges = [];\n",
       "              for (let i=0; i<data.edges.length; i++){\n",
       "                const edge = data.edges[i],\n",
       "                  newVisEdge = state.visData.edges.get(edge.id);\n",
       "                newVisEdge.width = edge.size;\n",
       "                newVisEdges.push(newVisEdge);\n",
       "              }\n",
       "              state.visData.edges.update(newVisEdges);\n",
       "            },\n",
       "\n",
       "            updateEdgeCurvatures(){\n",
       "              if(state.edgeCurvature === 0.0){\n",
       "                state.visOptions.edges.smooth = false;\n",
       "              } else {\n",
       "                state.visOptions.edges.smooth = ui.composites.graph.calculateEdgeCurvatureOptions();\n",
       "              }\n",
       "              state.visGraph.setOptions(state.visOptions);\n",
       "            },\n",
       "\n",
       "            updateEdgeHoverTooltipBehavior(){\n",
       "              /* Correct code, but there is a bug that renders null values as empty div (instead of ignoring them)\n",
       "              const data = state.shownData,\n",
       "                newVisEdges = [];\n",
       "              for(let i=0; i<data.edges.length; i++){\n",
       "                const edge = data.edges[i],\n",
       "                  visEdge = state.visData.edges.get(edge.id);\n",
       "                if(typeof(edge.hover) !== \"undefined\"){\n",
       "                  visEdge.title = state.edgeHoverTooltip ? edge.hover : null;\n",
       "                }\n",
       "                newVisEdges.push(visEdge);\n",
       "              }\n",
       "              state.visData.edges.update(newVisEdges);\n",
       "              */\n",
       "              // Workaround code\n",
       "              function cloneObject(obj){\n",
       "                return Object.assign({}, obj);\n",
       "              }\n",
       "              const data = state.shownData,\n",
       "                newVisEdges = [];\n",
       "              for(let i=0; i<data.edges.length; i++){\n",
       "                const edge = data.edges[i],\n",
       "                  visEdge = state.visData.edges.get(edge.id);\n",
       "                if(typeof(edge.hover) !== \"undefined\"){\n",
       "                  if(state.edgeHoverTooltip){\n",
       "                    visEdge.title = edge.hover;\n",
       "                    newVisEdges.push(visEdge);\n",
       "                  } else{\n",
       "                    // edges.update can only add properties, not delete them, hence use of clone/remove/add\n",
       "                    clonedEdge = cloneObject(visEdge);\n",
       "                    delete clonedEdge.title;\n",
       "                    state.visData.edges.remove(edge.id);\n",
       "                    state.visData.edges.add(clonedEdge);\n",
       "                  }\n",
       "                }\n",
       "              }\n",
       "              if(state.edgeHoverTooltip){\n",
       "                state.visData.edges.update(newVisEdges);\n",
       "              }\n",
       "            },\n",
       "\n",
       "            // Edge labels\n",
       "            updateEdgeLabels(){\n",
       "              const data = state.shownData,\n",
       "                newVisEdges = [],\n",
       "                noLabel = \" \";  // undefined, null, \"\" or deleting label property does not work\n",
       "              for(let i=0; i<data.edges.length; i++){\n",
       "                const edge = data.edges[i],\n",
       "                  visEdge = state.visData.edges.get(edge.id);\n",
       "                if(state.showEdgeLabels){\n",
       "                  visEdge.label = edge.label;\n",
       "                  visEdge.font = {\n",
       "                    size: edge.label_size,\n",
       "                    color: edge.label_color,\n",
       "                    strokeWidth: (state.showEdgeLabelBorders ? 1.2 : 0.0),\n",
       "                    strokeColor: data.general.background_color,\n",
       "                  }\n",
       "                } else {\n",
       "                  visEdge.label = noLabel;\n",
       "                }\n",
       "                newVisEdges.push(visEdge);\n",
       "              }\n",
       "              state.visData.edges.update(newVisEdges);\n",
       "            },\n",
       "\n",
       "            // Layout algorithm\n",
       "            simulationManager:{\n",
       "              start(){\n",
       "                state.visGraph.startSimulation();\n",
       "                this.setAlgorithm();\n",
       "                this.setSpringLength();\n",
       "                this.setSpringConstant();\n",
       "                this.setCentralGravity();\n",
       "                this.setGravitationalConstant();\n",
       "                this.setAvoidOverlap();\n",
       "              },\n",
       "              stop(){\n",
       "                state.visGraph.stopSimulation();\n",
       "              },\n",
       "              setActivity(on){\n",
       "                if(on){\n",
       "                  this.start();\n",
       "                } else{\n",
       "                  this.stop();\n",
       "                }\n",
       "              },\n",
       "              setAlgorithm(){\n",
       "                const name = state.layoutAlgorithm;\n",
       "                state.visOptions.physics.solver = name;\n",
       "                state.visGraph.setOptions(state.visOptions);\n",
       "                if(name === \"repulsion\"){\n",
       "                  ui.elements.avoidOverlapContainer.style.opacity = ui.convert.boolToOpacity(false);\n",
       "                  ui.elements.gravitationalConstantContainer.style.opacity = ui.convert.boolToOpacity(false);\n",
       "                } else if(name === \"hierarchicalRepulsion\"){\n",
       "                  ui.elements.avoidOverlapContainer.style.opacity = ui.convert.boolToOpacity(true);\n",
       "                  ui.elements.gravitationalConstantContainer.style.opacity = ui.convert.boolToOpacity(false);\n",
       "                } else {\n",
       "                  ui.elements.avoidOverlapContainer.style.opacity = ui.convert.boolToOpacity(true);\n",
       "                  ui.elements.gravitationalConstantContainer.style.opacity = ui.convert.boolToOpacity(true);\n",
       "                }\n",
       "              },\n",
       "              releaseFixedNodes(){\n",
       "                const data = state.shownData,\n",
       "                  newVisNodes = [];\n",
       "                for(let i=0; i<data.nodes.length; i++){\n",
       "                  const node = data.nodes[i],\n",
       "                    visNode = state.visData.nodes.get(node.id);\n",
       "                  ui.composites.graph.preventNodeJump(visNode);\n",
       "                  visNode.fixed = false;\n",
       "                  // Note: Deletion of x, y and fixed may work too, but .update does not delete props\n",
       "                  newVisNodes.push(visNode);\n",
       "                }\n",
       "                state.visData.nodes.update(newVisNodes);\n",
       "              },\n",
       "              setSpringLength(){\n",
       "                state.visOptions.physics.barnesHut.springLength = state.springLength;\n",
       "                state.visOptions.physics.forceAtlas2Based.springLength = state.springLength;\n",
       "                state.visOptions.physics.repulsion.springLength = state.springLength;\n",
       "                state.visOptions.physics.hierarchicalRepulsion.springLength = state.springLength;\n",
       "                state.visGraph.setOptions(state.visOptions);\n",
       "              },\n",
       "              setSpringConstant(){\n",
       "                state.visOptions.physics.barnesHut.springConstant = state.springConstant / 10.0;\n",
       "                state.visOptions.physics.forceAtlas2Based.springConstant = state.springConstant;\n",
       "                state.visOptions.physics.repulsion.springConstant = state.springConstant;\n",
       "                state.visOptions.physics.hierarchicalRepulsion.springConstant = state.springConstant;\n",
       "                state.visGraph.setOptions(state.visOptions);\n",
       "              },\n",
       "              setCentralGravity(){\n",
       "                state.visOptions.physics.barnesHut.centralGravity = state.centralGravity;\n",
       "                state.visOptions.physics.forceAtlas2Based.centralGravity = state.centralGravity / 100.0;\n",
       "                state.visOptions.physics.repulsion.centralGravity = state.centralGravity;\n",
       "                state.visOptions.physics.hierarchicalRepulsion.centralGravity = state.centralGravity;\n",
       "                state.visGraph.setOptions(state.visOptions);\n",
       "              },\n",
       "              setGravitationalConstant(){\n",
       "                state.visOptions.physics.barnesHut.gravitationalConstant = state.gravitationalConstant;\n",
       "                state.visOptions.physics.forceAtlas2Based.gravitationalConstant = state.gravitationalConstant / 10.0;\n",
       "                // Not a parameter in repulsion and hierarchicalRepulsion\n",
       "                state.visGraph.setOptions(state.visOptions);\n",
       "              },\n",
       "              setAvoidOverlap(){\n",
       "                state.visOptions.physics.barnesHut.avoidOverlap = state.avoidOverlap;\n",
       "                state.visOptions.physics.forceAtlas2Based.avoidOverlap = state.avoidOverlap;\n",
       "                // Not a parameter in repulsion and hierarchicalRepulsion\n",
       "                state.visGraph.setOptions(state.visOptions);\n",
       "              },\n",
       "            }\n",
       "          },\n",
       "        },\n",
       "\n",
       "        init(){\n",
       "          // Containers\n",
       "          ui.composites.responsiveContainer.init();\n",
       "          // Graph selection (only visible if multiple graphs in data)\n",
       "          if(state.rawData.length > 1){\n",
       "            ui.elements.graphSelectionContainer.style.display = ui.convert.boolToDisplayStyle(true);\n",
       "            const optionList = [],\n",
       "              valueList = [];\n",
       "            let label;\n",
       "            for(let i=0; i<state.rawData.length; i++){\n",
       "              const graph = state.rawData[i];\n",
       "              try{\n",
       "                label = String(graph.label);\n",
       "                if(label === \"undefined\" || label === \"\"){\n",
       "                  throw \"Invalid label\";\n",
       "                }\n",
       "              } catch(e){\n",
       "                label = \"Unnamed graph\";\n",
       "              }\n",
       "              const name = String(i+1) + \": \" + label;\n",
       "              optionList.push(name);\n",
       "              valueList.push(String(i));\n",
       "            }\n",
       "            ui.composites.selection(ui.elements.graphSelection, optionList, valueList);\n",
       "          }\n",
       "          // General (menu item)\n",
       "          ui.composites.menu.setItem(ui.elements.generalHead, ui.elements.generalBody, true);\n",
       "          // Data selection (menu item)\n",
       "          ui.composites.menu.setItem(ui.elements.dataHead, ui.elements.dataBody, false);\n",
       "          // - Node size\n",
       "          ui.elements.nodeSizeNormalizationCheckbox.checked = state.useNodeSizeNormalization;\n",
       "          ui.elements.nodeSizeNormalizationContainer.style.display = ui.convert.boolToDisplayStyle(state.useNodeSizeNormalization);\n",
       "          ui.elements.nodeSizeNormalizationMinText.innerHTML = ui.convert.numberToText(state.nodeSizeNormalizationMin);\n",
       "          ui.elements.nodeSizeNormalizationMinSlider.value = state.nodeSizeNormalizationMin;\n",
       "          ui.elements.nodeSizeNormalizationMaxText.innerHTML = ui.convert.numberToText(state.nodeSizeNormalizationMax);\n",
       "          ui.elements.nodeSizeNormalizationMaxSlider.value = state.nodeSizeNormalizationMax;\n",
       "          // - Edge size\n",
       "          ui.elements.edgeSizeNormalizationCheckbox.checked = state.useEdgeSizeNormalization;\n",
       "          ui.elements.edgeSizeNormalizationContainer.style.display = ui.convert.boolToDisplayStyle(state.useEdgeSizeNormalization);\n",
       "          ui.elements.edgeSizeNormalizationMinText.innerHTML = ui.convert.numberToText(state.edgeSizeNormalizationMin);\n",
       "          ui.elements.edgeSizeNormalizationMinSlider.value = state.edgeSizeNormalizationMin;\n",
       "          ui.elements.edgeSizeNormalizationMaxText.innerHTML = ui.convert.numberToText(state.edgeSizeNormalizationMax);\n",
       "          ui.elements.edgeSizeNormalizationMaxSlider.value = state.edgeSizeNormalizationMax;\n",
       "          // Nodes\n",
       "          ui.composites.menu.setItem(ui.elements.nodeHead, ui.elements.nodeBody, false);\n",
       "          ui.elements.nodeCheckbox.checked = state.showNodes;\n",
       "          ui.elements.nodeSizeFactorText.innerHTML = ui.convert.numberToText(state.nodeSizeFactor);\n",
       "          ui.elements.nodeSizeFactorSlider.value = state.nodeSizeFactor;\n",
       "          ui.elements.nodeDragFixCheckbox.checked = state.nodeDragFix;\n",
       "          ui.elements.nodeHoverNeighborhoodCheckbox.checked = state.nodeHoverNeighborhood;\n",
       "          ui.elements.nodeHoverTooltipCheckbox.checked = state.nodeHoverTooltip;\n",
       "          // Node images\n",
       "          ui.composites.menu.setItem(ui.elements.nodeImageHead, ui.elements.nodeImageBody, false);\n",
       "          ui.elements.nodeImageMetaControl.style.display = false;\n",
       "          ui.elements.nodeImageCheckbox.checked = state.showNodeImages;\n",
       "          ui.elements.nodeImageSizeFactorText.innerHTML = ui.convert.numberToText(state.nodeImageSizeFactor);\n",
       "          ui.elements.nodeImageSizeFactorSlider.value = state.nodeImageSizeFactor;\n",
       "          // Node labels\n",
       "          ui.composites.menu.setItem(ui.elements.nodeLabelHead, ui.elements.nodeLabelBody, false);\n",
       "          ui.elements.nodeLabelCheckbox.checked = state.showNodeLabels;\n",
       "          ui.elements.nodeLabelBorderCheckbox.checked = state.showNodeLabelBorders;\n",
       "          ui.elements.nodeLabelSizeFactorText.innerHTML = ui.convert.numberToText(state.nodeLabelSizeFactor);\n",
       "          ui.elements.nodeLabelSizeFactorSlider.value = state.nodeLabelSizeFactor;\n",
       "          ui.elements.nodeLabelRotationText.innerHTML = ui.convert.numberToText(state.nodeLabelRotation);\n",
       "          ui.elements.nodeLabelRotationSlider.value = state.nodeLabelRotation;\n",
       "          // Edges\n",
       "          ui.composites.menu.setItem(ui.elements.edgeHead, ui.elements.edgeBody, false);\n",
       "          ui.elements.edgeCheckbox.checked = state.showEdges;\n",
       "          ui.elements.edgeSizeFactorText.innerHTML = ui.convert.numberToText(state.edgeSizeFactor);\n",
       "          ui.elements.edgeSizeFactorSlider.value = state.edgeSizeFactor;\n",
       "          ui.elements.edgeCurvatureText.innerHTML = ui.convert.numberToText(state.edgeCurvature);\n",
       "          ui.elements.edgeCurvatureSlider.value = state.edgeCurvature;\n",
       "          ui.elements.edgeHoverTooltipCheckbox.checked = state.edgeHoverTooltip;\n",
       "          // Edge labels\n",
       "          ui.composites.menu.setItem(ui.elements.edgeLabelHead, ui.elements.edgeLabelBody, false);\n",
       "          ui.elements.edgeLabelCheckbox.checked = state.showEdgeLabels;\n",
       "          ui.elements.edgeLabelBorderCheckbox.checked = state.showEdgeLabelBorders;\n",
       "          ui.elements.edgeLabelSizeFactorText.innerHTML = ui.convert.numberToText(state.edgeLabelSizeFactor);\n",
       "          ui.elements.edgeLabelSizeFactorSlider.value = state.edgeLabelSizeFactor;\n",
       "          ui.elements.edgeLabelRotationText.innerHTML = ui.convert.numberToText(state.edgeLabelRotation);\n",
       "          ui.elements.edgeLabelRotationSlider.value = state.edgeLabelRotation;\n",
       "          // Layout algorithm\n",
       "          ui.composites.menu.setItem(ui.elements.layoutAlgorithmHead, ui.elements.layoutAlgorithmBody, false);\n",
       "          ui.elements.simulationCheckbox.checked = state.layoutAlgorithmActive;\n",
       "          ui.elements.layoutAlgorithmSelection.value = state.layoutAlgorithm;\n",
       "          ui.elements.centralGravitySlider.value = state.centralGravity;\n",
       "          ui.elements.centralGravityText.innerHTML = ui.convert.numberToText(state.centralGravity);\n",
       "          ui.elements.springLengthSlider.value = state.springLength;\n",
       "          ui.elements.springLengthText.innerHTML = ui.convert.numberToText(state.springLength);\n",
       "          ui.elements.springConstantSlider.value = state.springConstant;\n",
       "          ui.elements.springConstantText.innerHTML = ui.convert.numberToText(state.springConstant);\n",
       "          ui.elements.gravitationalConstantSlider.value = state.gravitationalConstant;\n",
       "          ui.elements.gravitationalConstantText.innerHTML = ui.convert.numberToText(state.gravitationalConstant);\n",
       "          ui.elements.avoidOverlapSlider.value = state.avoidOverlap;\n",
       "          ui.elements.avoidOverlapText.innerHTML = ui.convert.numberToText(state.avoidOverlap);\n",
       "\n",
       "          ui.initSelectionValues();\n",
       "        },\n",
       "\n",
       "        initSelectionValues(){\n",
       "          function setSelectionOptionsAndValue(element, options, value, values=null){\n",
       "            if(values === null){\n",
       "              values = options;\n",
       "            }\n",
       "            if(!values.includes(value)){\n",
       "              value = values[0];\n",
       "            }\n",
       "            ui.composites.selection(element, options, values);\n",
       "            element.value = value;\n",
       "          }\n",
       "          // Node label text data source\n",
       "          setSelectionOptionsAndValue(\n",
       "            ui.elements.nodeLabelTextDataSourceSelect,\n",
       "            state.parsedData.general.node_properties.node_label_text_data_sources,\n",
       "            state.nodeLabelTextDataSource,\n",
       "          );\n",
       "          // Edge label text data source\n",
       "          setSelectionOptionsAndValue(\n",
       "            ui.elements.edgeLabelTextDataSourceSelect,\n",
       "            state.parsedData.general.edge_properties.edge_label_text_data_sources,\n",
       "            state.edgeLabelTextDataSource,\n",
       "          );\n",
       "          // Node size data source\n",
       "          setSelectionOptionsAndValue(\n",
       "            ui.elements.nodeSizeDataSourceSelect,\n",
       "            state.parsedData.general.node_properties.node_size_data_sources,\n",
       "            state.nodeSizeDataSource,\n",
       "          );\n",
       "          // Edge size data source\n",
       "          setSelectionOptionsAndValue(\n",
       "            ui.elements.edgeSizeDataSourceSelect,\n",
       "            state.parsedData.general.edge_properties.edge_size_data_sources,\n",
       "            state.edgeSizeDataSource,\n",
       "          );\n",
       "          // Layout algorithm\n",
       "          setSelectionOptionsAndValue(\n",
       "            ui.elements.layoutAlgorithmSelection,\n",
       "            [\"Barnes-Hut\", \"Force Atlas 2\", \"Repulsion\", \"Hierarchical repulsion\"],\n",
       "            state.layoutAlgorithm,\n",
       "            [\"barnesHut\", \"forceAtlas2Based\", \"repulsion\", \"hierarchicalRepulsion\"],\n",
       "          );\n",
       "        },\n",
       "\n",
       "        deleteChildElements(element){\n",
       "          while(element.firstChild){\n",
       "            // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management\n",
       "            // As of 2019, it is not possible to explicitly or programmatically trigger\n",
       "            // garbage collection in JavaScript.\n",
       "            element.removeChild(element.firstChild);\n",
       "          }\n",
       "        },\n",
       "\n",
       "        convert:{\n",
       "          numberToText(number, numDigits=2) {\n",
       "            return String(Number(number).toFixed(numDigits));\n",
       "          },\n",
       "\n",
       "          boolToDisplayStyle(isVisible){\n",
       "            if(isVisible){\n",
       "              return \"block\";\n",
       "            }\n",
       "            return \"none\";\n",
       "          },\n",
       "\n",
       "          boolToOpacity(isActive){\n",
       "            if(isActive){\n",
       "              return 1.0;\n",
       "            }\n",
       "            return 0.25;\n",
       "          },\n",
       "\n",
       "          boolToTooltipDelay(isActive){\n",
       "            if(isActive){\n",
       "              return 0;\n",
       "            }\n",
       "            return 100000000;\n",
       "          },\n",
       "        },\n",
       "\n",
       "        setBehavior(){\n",
       "          // Window resize (includes ctrl+wheel zoom, landscape/portrait orientation on phones)\n",
       "          window.onresize = function(){\n",
       "            ui.composites.responsiveContainer.adaptToResize();\n",
       "            ui.composites.graph.updateGraphDrawingArea();\n",
       "          }\n",
       "          // Container resize\n",
       "          ui.elements.graphContainer.onmouseup = function(){\n",
       "            const currentHeight = parseInt(ui.elements.graphContainer.clientHeight);\n",
       "            if(currentHeight != state.graphContainerHeight){\n",
       "              ui.composites.responsiveContainer.adaptToResize();\n",
       "              ui.composites.graph.updateGraphDrawingArea();\n",
       "            }\n",
       "          };\n",
       "          ui.elements.detailsContainer.onmouseup = function(){\n",
       "            const currentHeight = parseInt(ui.elements.detailsContainer.clientHeight);\n",
       "            if(currentHeight != state.detailsContainerHeight){\n",
       "              ui.composites.responsiveContainer.adaptToResize();\n",
       "            }\n",
       "          };\n",
       "          // Tooltip\n",
       "          ui.elements.tooltipContainer.onmouseover = function(){\n",
       "            ui.composites.tooltip.show();\n",
       "          }\n",
       "          ui.elements.tooltipContainer.onmouseout = function(){\n",
       "            ui.composites.tooltip.hide();\n",
       "          }\n",
       "          // General menu\n",
       "          ui.elements.generalHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.generalHead, ui.elements.generalBody);\n",
       "          };\n",
       "          ui.elements.resetButton.onclick = function(){\n",
       "            app.restart();\n",
       "          };\n",
       "          ui.elements.fullscreenButton.onclick = function(){\n",
       "            if(document.fullscreenElement){\n",
       "              document.exitFullscreen();\n",
       "            } else{\n",
       "              ui.elements.mainContainer.requestFullscreen()\n",
       "                .catch(function(err){\n",
       "                  alert(\"Error attempting to enable full-screen mode: \" + err.message);\n",
       "                });\n",
       "            }\n",
       "          };\n",
       "          ui.elements.mainContainer.onfullscreenchange = function(){\n",
       "            if(document.fullscreenElement){\n",
       "              ui.elements.fullscreenButton.innerText = \"Exit full screen\";\n",
       "            } else{\n",
       "              ui.elements.fullscreenButton.innerText = \"Enter full screen\";\n",
       "            }\n",
       "            // Wait for browser to switch to fullscreen and resize divs, then adapt to new sizes\n",
       "            setTimeout(function(){\n",
       "              ui.composites.responsiveContainer.adaptToFullscreen();\n",
       "              ui.composites.graph.updateGraphDrawingArea();\n",
       "            }, 250);\n",
       "          };\n",
       "          ui.elements.pngExportButton.onclick = function(){\n",
       "            ui.composites.download.png(\"graph.png\");\n",
       "          };\n",
       "          ui.elements.jpgExportButton.onclick = function(){\n",
       "            ui.composites.download.jpg(\"graph.jpg\");\n",
       "          };\n",
       "          // Data menu\n",
       "          ui.elements.dataHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.dataHead, ui.elements.dataBody);\n",
       "          };\n",
       "          // - Graph selection\n",
       "          ui.elements.graphSelection.onchange = function(){\n",
       "            const chosenGraphIndex = parseInt(this.value);\n",
       "            state.manager.parseChosenData(chosenGraphIndex);\n",
       "            state.manager.prepareShownData();\n",
       "            ui.initSelectionValues();\n",
       "            ui.composites.graph.createGraph();\n",
       "          };\n",
       "          // - Node label text\n",
       "          ui.elements.nodeLabelTextDataSourceSelect.onchange = function(){\n",
       "            state.nodeLabelTextDataSource = this.value;\n",
       "            state.manager.updateNodeLabelTexts();\n",
       "          };\n",
       "          // - Edge label text\n",
       "          ui.elements.edgeLabelTextDataSourceSelect.onchange = function(){\n",
       "            state.edgeLabelTextDataSource = this.value;\n",
       "            state.manager.updateEdgeLabelTexts();\n",
       "          };\n",
       "          // - Node size\n",
       "          ui.elements.nodeSizeDataSourceSelect.onchange = function(){\n",
       "            state.nodeSizeDataSource = this.value;\n",
       "            state.manager.updateNodeSizes();\n",
       "          };\n",
       "          ui.elements.nodeSizeNormalizationCheckbox.onchange = function(){\n",
       "            state.useNodeSizeNormalization = this.checked;\n",
       "            ui.elements.nodeSizeNormalizationContainer.style.display = ui.convert.boolToDisplayStyle(state.useNodeSizeNormalization);\n",
       "            state.manager.updateNodeSizes();\n",
       "          };\n",
       "          ui.elements.nodeSizeNormalizationMinSlider.oninput = function(){\n",
       "            ui.elements.nodeSizeNormalizationMinText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.nodeSizeNormalizationMinSlider.onchange = function(){\n",
       "            state.nodeSizeNormalizationMin = parseFloat(this.value);\n",
       "            if(state.nodeSizeNormalizationMin > state.nodeSizeNormalizationMax){\n",
       "              state.nodeSizeNormalizationMax = state.nodeSizeNormalizationMin;\n",
       "              ui.elements.nodeSizeNormalizationMaxSlider.value = state.nodeSizeNormalizationMax;\n",
       "              ui.elements.nodeSizeNormalizationMaxText.innerHTML = ui.convert.numberToText(state.nodeSizeNormalizationMax);\n",
       "            }\n",
       "            state.manager.updateNodeSizes();\n",
       "          };\n",
       "          ui.elements.nodeSizeNormalizationMaxSlider.oninput = function(){\n",
       "            ui.elements.nodeSizeNormalizationMaxText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.nodeSizeNormalizationMaxSlider.onchange = function(){\n",
       "            state.nodeSizeNormalizationMax = parseFloat(this.value);\n",
       "            if(state.nodeSizeNormalizationMax < state.nodeSizeNormalizationMin){\n",
       "              state.nodeSizeNormalizationMin = state.nodeSizeNormalizationMax;\n",
       "              ui.elements.nodeSizeNormalizationMinSlider.value = state.nodeSizeNormalizationMin;\n",
       "              ui.elements.nodeSizeNormalizationMinText.innerHTML = ui.convert.numberToText(state.nodeSizeNormalizationMin);\n",
       "            }\n",
       "            state.manager.updateNodeSizes();\n",
       "          };\n",
       "          // - Edge size\n",
       "          ui.elements.edgeSizeDataSourceSelect.onchange = function(){\n",
       "            state.edgeSizeDataSource = this.value;\n",
       "            state.manager.updateEdgeSizes();\n",
       "          };\n",
       "          ui.elements.edgeSizeNormalizationCheckbox.onchange = function(){\n",
       "            state.useEdgeSizeNormalization = this.checked;\n",
       "            ui.elements.edgeSizeNormalizationContainer.style.display = ui.convert.boolToDisplayStyle(state.useEdgeSizeNormalization);\n",
       "            state.manager.updateEdgeSizes();\n",
       "          };\n",
       "          ui.elements.edgeSizeNormalizationMinSlider.oninput = function(){\n",
       "            ui.elements.edgeSizeNormalizationMinText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.edgeSizeNormalizationMinSlider.onchange = function(){\n",
       "            state.edgeSizeNormalizationMin = parseFloat(this.value);\n",
       "            if(state.edgeSizeNormalizationMin > state.edgeSizeNormalizationMax){\n",
       "              state.edgeSizeNormalizationMax = state.edgeSizeNormalizationMin;\n",
       "              ui.elements.edgeSizeNormalizationMaxSlider.value = state.edgeSizeNormalizationMax;\n",
       "              ui.elements.edgeSizeNormalizationMaxText.innerHTML = ui.convert.numberToText(state.edgeSizeNormalizationMax);\n",
       "            }\n",
       "            state.manager.updateEdgeSizes();\n",
       "          };\n",
       "          ui.elements.edgeSizeNormalizationMaxSlider.oninput = function(){\n",
       "            ui.elements.edgeSizeNormalizationMaxText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.edgeSizeNormalizationMaxSlider.onchange = function(){\n",
       "            state.edgeSizeNormalizationMax = parseFloat(this.value);\n",
       "            if(state.edgeSizeNormalizationMax < state.edgeSizeNormalizationMin){\n",
       "              state.edgeSizeNormalizationMin = state.edgeSizeNormalizationMax;\n",
       "              ui.elements.edgeSizeNormalizationMinSlider.value = state.edgeSizeNormalizationMin;\n",
       "              ui.elements.edgeSizeNormalizationMinText.innerHTML = ui.convert.numberToText(state.edgeSizeNormalizationMin);\n",
       "            }\n",
       "            state.manager.updateEdgeSizes();\n",
       "          };\n",
       "          // Nodes menu\n",
       "          ui.elements.nodeHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.nodeHead, ui.elements.nodeBody);\n",
       "          };\n",
       "          ui.elements.nodeCheckbox.onchange = function(){\n",
       "            state.showNodes = this.checked;\n",
       "            ui.composites.graph.updateNodeVisibilities();\n",
       "          };\n",
       "          ui.elements.nodeSizeFactorSlider.oninput = function(){\n",
       "            ui.elements.nodeSizeFactorText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.nodeSizeFactorSlider.onchange = function(){\n",
       "            state.nodeSizeFactor = parseFloat(this.value);\n",
       "            state.manager.updateNodeSizes();\n",
       "          };\n",
       "          ui.elements.nodeDragFixCheckbox.onchange = function(){\n",
       "            state.nodeDragFix = this.checked;\n",
       "          };\n",
       "          ui.elements.nodeHoverNeighborhoodCheckbox.onchange = function(){\n",
       "            state.nodeHoverNeighborhood = this.checked;\n",
       "            ui.composites.graph.updateNodeHoverNeighborhoodBehavior();\n",
       "          };\n",
       "          ui.elements.nodeHoverTooltipCheckbox.onchange = function(){\n",
       "            state.nodeHoverTooltip = this.checked;\n",
       "            ui.composites.graph.updateNodeHoverTooltipBehavior();\n",
       "          };\n",
       "          ui.elements.nodeReleaseButton.onclick = function(){\n",
       "            ui.composites.graph.simulationManager.releaseFixedNodes();\n",
       "          };\n",
       "          // Node images menu\n",
       "          ui.elements.nodeImageHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.nodeImageHead, ui.elements.nodeImageBody);\n",
       "          };\n",
       "          ui.elements.nodeImageCheckbox.onchange = function(){\n",
       "            state.showNodeImages = this.checked;\n",
       "            state.manager.updateNodeImages();\n",
       "          };\n",
       "          ui.elements.nodeImageSizeFactorSlider.oninput = function(){\n",
       "            ui.elements.nodeImageSizeFactorText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.nodeImageSizeFactorSlider.onchange = function(){\n",
       "            state.nodeImageSizeFactor = parseFloat(this.value);\n",
       "            state.manager.updateNodeImages();\n",
       "          };\n",
       "          // Node labels menu\n",
       "          ui.elements.nodeLabelHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.nodeLabelHead, ui.elements.nodeLabelBody);\n",
       "          };\n",
       "          ui.elements.nodeLabelCheckbox.onchange = function(){\n",
       "            state.showNodeLabels = this.checked;\n",
       "            ui.composites.graph.updateNodeLabels();\n",
       "          };\n",
       "          ui.elements.nodeLabelBorderCheckbox.onchange = function(){\n",
       "            state.showNodeLabelBorders = this.checked;\n",
       "            ui.composites.graph.updateNodeLabels();\n",
       "          };\n",
       "          ui.elements.nodeLabelSizeFactorSlider.oninput = function(){\n",
       "            ui.elements.nodeLabelSizeFactorText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.nodeLabelSizeFactorSlider.onchange = function(){\n",
       "            state.nodeLabelSizeFactor = parseFloat(this.value);\n",
       "            state.manager.updateNodeLabelSizes();\n",
       "          };\n",
       "          // Edges menu\n",
       "          ui.elements.edgeHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.edgeHead, ui.elements.edgeBody);\n",
       "          };\n",
       "          ui.elements.edgeCheckbox.onchange = function(){\n",
       "            state.showEdges = this.checked;\n",
       "            ui.composites.graph.updateEdgeVisibility();\n",
       "          };\n",
       "          ui.elements.edgeSizeFactorSlider.oninput = function(){\n",
       "            ui.elements.edgeSizeFactorText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.edgeSizeFactorSlider.onchange = function(){\n",
       "            state.edgeSizeFactor = parseFloat(this.value);\n",
       "            state.manager.updateEdgeSizes();\n",
       "          };\n",
       "          ui.elements.edgeCurvatureSlider.oninput = function(){\n",
       "            ui.elements.edgeCurvatureText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.edgeCurvatureSlider.onchange = function(){\n",
       "            state.edgeCurvature = parseFloat(this.value);\n",
       "            state.manager.updateEdgeCurvatures();\n",
       "          };\n",
       "          ui.elements.edgeHoverTooltipCheckbox.onchange = function(){\n",
       "            state.edgeHoverTooltip = this.checked;\n",
       "            ui.composites.graph.updateEdgeHoverTooltipBehavior();\n",
       "          };\n",
       "          // Edge labels menu\n",
       "          ui.elements.edgeLabelHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.edgeLabelHead, ui.elements.edgeLabelBody);\n",
       "          };\n",
       "          ui.elements.edgeLabelCheckbox.onchange = function(){\n",
       "            state.showEdgeLabels = this.checked;\n",
       "            ui.composites.graph.updateEdgeLabels();\n",
       "          };\n",
       "          ui.elements.edgeLabelBorderCheckbox.onchange = function(){\n",
       "            state.showEdgeLabelBorders = this.checked;\n",
       "            ui.composites.graph.updateEdgeLabels();\n",
       "          };\n",
       "          ui.elements.edgeLabelSizeFactorSlider.oninput = function(){\n",
       "            ui.elements.edgeLabelSizeFactorText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.edgeLabelSizeFactorSlider.onchange = function(){\n",
       "            state.edgeLabelSizeFactor = parseFloat(this.value);\n",
       "            state.manager.updateEdgeLabelSizes();\n",
       "          };\n",
       "          // Layout algorithm menu\n",
       "          ui.elements.layoutAlgorithmHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.layoutAlgorithmHead, ui.elements.layoutAlgorithmBody);\n",
       "          };\n",
       "          ui.elements.simulationCheckbox.onchange = function(){\n",
       "            state.layoutAlgorithmActive = !state.layoutAlgorithmActive;\n",
       "            ui.composites.graph.simulationManager.setActivity(state.layoutAlgorithmActive);\n",
       "          };\n",
       "          ui.elements.layoutAlgorithmSelection.onchange = function(){\n",
       "            state.layoutAlgorithm = this.value;\n",
       "            ui.composites.graph.simulationManager.setAlgorithm();\n",
       "          };\n",
       "          ui.elements.centralGravitySlider.oninput = function(){\n",
       "            ui.elements.centralGravityText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.centralGravitySlider.onchange = function(){\n",
       "            state.centralGravity = parseFloat(this.value);\n",
       "            ui.composites.graph.simulationManager.setCentralGravity();\n",
       "          };\n",
       "          ui.elements.springLengthSlider.oninput = function(){\n",
       "            ui.elements.springLengthText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.springLengthSlider.onchange = function(){\n",
       "            state.springLength = parseFloat(this.value);\n",
       "            ui.composites.graph.simulationManager.setSpringLength();\n",
       "          };\n",
       "          ui.elements.springConstantSlider.oninput = function(){\n",
       "            ui.elements.springConstantText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.springConstantSlider.onchange = function(){\n",
       "            state.springConstant = parseFloat(this.value);\n",
       "            ui.composites.graph.simulationManager.setSpringConstant();\n",
       "          };\n",
       "          ui.elements.gravitationalConstantSlider.oninput = function(){\n",
       "            ui.elements.gravitationalConstantText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.gravitationalConstantSlider.onchange = function(){\n",
       "            state.gravitationalConstant = parseFloat(this.value);\n",
       "            ui.composites.graph.simulationManager.setGravitationalConstant();\n",
       "          };\n",
       "          ui.elements.avoidOverlapSlider.oninput = function(){\n",
       "            ui.elements.avoidOverlapText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.avoidOverlapSlider.onchange = function(){\n",
       "            state.avoidOverlap = parseFloat(this.value);\n",
       "            ui.composites.graph.simulationManager.setAvoidOverlap();\n",
       "          };\n",
       "        },\n",
       "      }\n",
       "\n",
       "      const app = {\n",
       "        start(){\n",
       "          state.manager.fetchRawDataFromTemplating();\n",
       "          state.manager.parseChosenData(0);\n",
       "          state.manager.prepareShownData();\n",
       "          ui.init();\n",
       "          // Wait a bit to finish UI rendering, then start potentially slow layout computation\n",
       "          setTimeout(function(){\n",
       "            ui.composites.graph.createGraph();\n",
       "            ui.setBehavior();\n",
       "          }, 400);\n",
       "          // Reduce risk of getting stuck with a wrong drawing area size\n",
       "          function checkIfSizeUpdateRequired(){\n",
       "            if(ui.elements.graphContainer.clientWidth != state.graphContainerWidth){\n",
       "              ui.composites.responsiveContainer.adaptToResize();\n",
       "              ui.composites.graph.updateGraphDrawingArea();\n",
       "            }\n",
       "          }\n",
       "          [1, 2, 5, 8, 12, 15, 20, 25, 30, 35, 40, 45, 50, 60, 90].forEach(function(delay){\n",
       "            setTimeout(checkIfSizeUpdateRequired, delay*1000);\n",
       "          })\n",
       "        },\n",
       "\n",
       "        restart(){\n",
       "          app.start();\n",
       "        },\n",
       "      }\n",
       "\n",
       "      // Start website dynamics\n",
       "      app.start();\n",
       "    });\n",
       "  </script>\n",
       "\n"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "direct_ownership_graph = Graph(model, weighted=True)\n",
    "direct_ownership_graph.Node.extend(LegalEntity, label=LegalEntity.name)\n",
    "\n",
    "with model.rule():\n",
    "    p = Person(name = person_name)\n",
    "    direct_ownership_graph.Node(p).set(focus='target')\n",
    "\n",
    "with model.rule():\n",
    "    direct_ownership_graph.Node(FinancialInstitution(name = bank_name)).set(focus='source')\n",
    "\n",
    "with model.rule():\n",
    "    o = DirectOwnership()\n",
    "    e = direct_ownership_graph.Edge.add(o.owner, o.asset, weight=o.part)\n",
    "    with direct_ownership_graph.Node(o.owner).focus == 'target':\n",
    "        e.set(focus='target')\n",
    "\n",
    "ownership_graph_style = {\n",
    "        \"node\": {\n",
    "            \"color\": lambda n : '#f07f65' if n.get('focus')=='target' else '#edb551' if n.get('focus')=='source' else '#92979c',\n",
    "            \"size\": lambda n: 20 if n.get('focus')in['target','source'] else 10\n",
    "        },\n",
    "        \"edge\": {\n",
    "            \"color\": lambda e: '#f07f65' if e.get('focus')=='target' else \"#92979c\",\n",
    "            \"label\": lambda e: f'{(e.get(\"weight\")*100):.2f}%',\n",
    "            \"size\": lambda e: e['weight'] * 5\n",
    "        }\n",
    "    }\n",
    "\n",
    "direct_ownership_graph.visualize(three=False, show_edge_label = True, style=ownership_graph_style).display(inline=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "source": [
    "> **Tip**. This visualization shows us what known connections we have through ownership, but our Tom is not yet connected to anything in any way. Let's therefore extend our graph with additional knowledge."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Augmenting the Knowledge Graph with additional 'Direct' and 'Indirect Relationships'\n",
    "While Tom might not have any direct association with this bank, he or his family might still control it indirectly, which would be suspicious and we would want to flag. \n",
    "Notice here that the concept of “control” as well as “family” are not explicitly defined in our input data, we thus need to define it as part of our model. So let’s augment our knowledge graph with additional data, to see if this might change.\n",
    "\n",
    "We do this by defining the concept of `control` both at the person as well as the family level.\n",
    "\n",
    "### Extending direct ownership due to 100% control\n",
    "We make the following assumptions on when to extend direct relationships due to 'control' relationships:\n",
    "- If a person is the CEO of a company, it implies that she has 100% control of the company.\n",
    "- A family owns everything that its members own.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "source": [
    "\n",
    "> **Note**. We first create 2 rules, one is looking at `Employment` instances for a `role` of CEO, to connect `employee` and `employer` through `isCeoAt` property. We then use it to say that there is a `DirectOwnership` instance of `1.0` value from CEO to the company.\n",
    "> \n",
    "> Another rule then creates `DirectOwnership` instances of `1.0` from every person's `family` property to himself."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": [
     "hide-input"
    ]
   },
   "outputs": [],
   "source": [
    "with model.rule():\n",
    "    e = Employment(role = \"CEO\")\n",
    "    e.employee.set(isCeoAt = e.employer)\n",
    "\n",
    "# CEO of a company has 100% ownership\n",
    "with model.rule():\n",
    "    p = Person()\n",
    "    DirectOwnership.add(owner = p, asset = p.isCeoAt).set(part = 1.0)\n",
    "\n",
    "    \n",
    "# Family owns everything that its members own\n",
    "with model.rule():\n",
    "    p = Person()\n",
    "    DirectOwnership.add(owner = p.family, asset = p).set(part = 1.0)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "#### Visualizing the new edges due to 100% control from CEO or via family members\n",
    "Notice how knowing the family members, we can determine the overall relationship of family with a financial institution. Given that Tom belongs to the Doe Family, everything he owns is also owned by his family, so we mark the Doe Family node also as red."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": [
     "hide-input"
    ]
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "  <style>\n",
       "    /* Main divisions */\n",
       "    #i0oOcPUlCRlfCP4JG-main-div {\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "      padding: 3px;\n",
       "      background-color: white;\n",
       "    }\n",
       "    #i0oOcPUlCRlfCP4JG-left-div {\n",
       "      float: left;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    #i0oOcPUlCRlfCP4JG-right-div {\n",
       "      float: left;\n",
       "      height: 100%;\n",
       "      display: none;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    #i0oOcPUlCRlfCP4JG-right-inner-div {\n",
       "      padding-left: 5px;\n",
       "      padding-right: 2px;\n",
       "      overflow-x: hidden;\n",
       "      overflow-y: auto;\n",
       "      height: 100%;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "\n",
       "    /* Graph and details (contained in left-inner-div) */\n",
       "    #i0oOcPUlCRlfCP4JG-graph-div {\n",
       "      overflow: hidden;\n",
       "      resize: vertical;\n",
       "      position: relative;\n",
       "      border: 1px solid #ccc;\n",
       "      border-radius: 4px;\n",
       "      box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2);\n",
       "      display: none;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    #i0oOcPUlCRlfCP4JG-details-div {\n",
       "      overflow: auto;\n",
       "      resize: vertical;\n",
       "      margin-top: 5px;\n",
       "      border: 1px solid #ccc;\n",
       "      border-radius: 4px;\n",
       "      box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2);\n",
       "      display: none;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    #i0oOcPUlCRlfCP4JG-details-head {\n",
       "      user-select: none;\n",
       "      padding-left: 4px !important;\n",
       "      padding-top: 4px !important;\n",
       "      font-size: 8px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      color: gray;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    #i0oOcPUlCRlfCP4JG-details-body {\n",
       "      padding: 10px;\n",
       "      padding-top: 6px;\n",
       "      font-size: 10px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "\n",
       "    /* Control menu (contained in right-inner-div) */\n",
       "    .i0oOcPUlCRlfCP4JG-menu-item-head {\n",
       "      font-size: 11px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      color: black;\n",
       "      cursor: pointer;\n",
       "      padding-left: 5px;\n",
       "      padding-right: 0px;\n",
       "      padding-top: 5px;\n",
       "      padding-bottom: 5px;\n",
       "      margin-bottom: 5px;\n",
       "      border-radius: 4px;\n",
       "      border: 1px solid #ccc;\n",
       "      box-shadow: 0px 0px 3px rgba(0, 0, 0, 0.2);\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    .i0oOcPUlCRlfCP4JG-menu-item-body {\n",
       "      margin-left: 5px;\n",
       "      margin-bottom: 10px;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    .i0oOcPUlCRlfCP4JG-menu-subitem-head {\n",
       "      font-size: 9px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      font-weight: 600;\n",
       "      color: #006429;\n",
       "      cursor: default;\n",
       "      margin-bottom: 2px;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    .i0oOcPUlCRlfCP4JG-menu-subitem-body {\n",
       "      font-size: 8px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      margin-left: 7px;\n",
       "      margin-bottom: 5px;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    .i0oOcPUlCRlfCP4JG-labeled-input {\n",
       "      all: initial;\n",
       "      display: flex;\n",
       "      align-items: center;\n",
       "      margin-top: 1px;\n",
       "      margin-bottom: 1px;\n",
       "    }\n",
       "    .i0oOcPUlCRlfCP4JG-label {\n",
       "      all: initial;\n",
       "      font-size: 8px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      font-style: italic;\n",
       "      cursor: pointer;\n",
       "    }\n",
       "    .i0oOcPUlCRlfCP4JG-slider {\n",
       "      width: 100%;\n",
       "      margin-bottom: 2px;\n",
       "    }\n",
       "    .i0oOcPUlCRlfCP4JG-slider::-moz-focus-outer {\n",
       "      border: 0;\n",
       "    }\n",
       "    .i0oOcPUlCRlfCP4JG-slider-text-left {\n",
       "      font-size: 8px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      font-style: italic;\n",
       "      color: black;\n",
       "      float: left;\n",
       "      margin-top: 2px;\n",
       "    }\n",
       "    .i0oOcPUlCRlfCP4JG-slider-text-right {\n",
       "      font-size: 8px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      color: black;\n",
       "      float: right;\n",
       "    }\n",
       "    .i0oOcPUlCRlfCP4JG-checkbox {\n",
       "      margin-left: 0px !important;\n",
       "      margin-right: 4px !important;\n",
       "      margin-top: 2px !important;\n",
       "      margin-bottom: 2px !important;\n",
       "      padding: 0px !important;\n",
       "    }\n",
       "    .i0oOcPUlCRlfCP4JG-select {\n",
       "      cursor: pointer;\n",
       "      outline: none;\n",
       "      font-size: 8px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      color: black;\n",
       "      background-color: #f5f5f5;\n",
       "      width: 100%;\n",
       "      padding-top: 4px !important;\n",
       "      padding-bottom: 4px !important;\n",
       "      padding-left: 5px;\n",
       "      padding-right: 10px;\n",
       "      margin-right: 5px;\n",
       "      margin-top: 2px;\n",
       "      margin-bottom: 2px;\n",
       "      border-radius: 4px;\n",
       "      border: 1.2px solid #bbb;\n",
       "      box-shadow: 0 1px 0 1px rgba(0, 0, 0, 0.04);\n",
       "\n",
       "      -moz-appearance: none;\n",
       "      -webkit-appearance: none;\n",
       "      appearance: none;\n",
       "      background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyOTIuNCIgaGVpZ2h0PSIyOTIuNCI+PHBhdGggZmlsbD0iIzAwMDAwMCIgZD0iTSAtNS4yMDY0NjJlLTYsNjQuNTcyNjU2IDI5Mi4zOTk5OSw2NC41NzI2NTQgMTQ2LjE5OTk3LDIzMy42Mjg0NyAtNS4yMDY0NjJlLTYsNjQuNTcyNjU2Ii8+PC9zdmc+Cg==');\n",
       "      background-repeat: no-repeat;\n",
       "      background-position: right 4px top 50%;\n",
       "      background-size: 6px;\n",
       "    }\n",
       "    @-moz-document url-prefix() {\n",
       "      /* Dirty hack to remove dotted border on focus */\n",
       "      .i0oOcPUlCRlfCP4JG-select {\n",
       "        color: transparent !important;\n",
       "        text-shadow: 0 0 0 black !important;\n",
       "      }\n",
       "    }\n",
       "    .i0oOcPUlCRlfCP4JG-select:after {\n",
       "      cursor: pointer;\n",
       "    }\n",
       "    .i0oOcPUlCRlfCP4JG-button {\n",
       "      cursor: pointer;\n",
       "      outline: none;\n",
       "      font-size: 8px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      color: black;\n",
       "      background-color: #f2f2f2;\n",
       "      padding-top: 4px !important;\n",
       "      padding-bottom: 4px !important;\n",
       "      padding-left: 10px;\n",
       "      padding-right: 10px;\n",
       "      margin-top: 2px;\n",
       "      margin-bottom: 2px;\n",
       "      border-radius: 4px;\n",
       "      border: 1.2px solid #bbb;\n",
       "      box-shadow: 0 1px 0 1px rgba(0, 0, 0, 0.04);\n",
       "    }\n",
       "    .i0oOcPUlCRlfCP4JG-button:hover {\n",
       "      border: 1.2px solid #999;\n",
       "      background-color: #f2f2f2;\n",
       "    }\n",
       "    .i0oOcPUlCRlfCP4JG-button:active {\n",
       "      background-color: #ddd;\n",
       "    }\n",
       "    .i0oOcPUlCRlfCP4JG-button::-moz-focus-inner {\n",
       "      border: 0;\n",
       "    }\n",
       "    /* Hidden menu items */\n",
       "    #i0oOcPUlCRlfCP4JG-graph-select-div {\n",
       "      display: none;\n",
       "    }\n",
       "    #i0oOcPUlCRlfCP4JG-node-size-norm-div {\n",
       "      display: none;\n",
       "    }\n",
       "    #i0oOcPUlCRlfCP4JG-edge-size-norm-div {\n",
       "      display: none;\n",
       "    }\n",
       "\n",
       "    /* Graph */\n",
       "    #i0oOcPUlCRlfCP4JG-tooltip-div {\n",
       "      font-size: 10px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      z-index: 42001;\n",
       "      opacity: 0;\n",
       "      visibility: hidden;\n",
       "      position: absolute !important;\n",
       "      max-width: 40%;\n",
       "      padding: 5px;\n",
       "      white-space: pre-wrap;\n",
       "      word-break: break-word;\n",
       "      color: black;\n",
       "      background-color: white;\n",
       "      border-radius: 4px;\n",
       "      border: 1px solid #ccc;\n",
       "      box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.2);\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    #i0oOcPUlCRlfCP4JG-menu-toggle-button, #i0oOcPUlCRlfCP4JG-details-toggle-button, #i0oOcPUlCRlfCP4JG-progress-container {\n",
       "      font-size: 14px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      z-index: 42000;\n",
       "      cursor: pointer;\n",
       "      position: absolute;\n",
       "      background-color: white;\n",
       "      border-radius: 4px;\n",
       "      box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.2);\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    #i0oOcPUlCRlfCP4JG-menu-toggle-button {\n",
       "      top: 0;\n",
       "      right: 0;\n",
       "      padding-left: 6px;\n",
       "      padding-right: 6px;\n",
       "      padding-top: 12px;\n",
       "      padding-bottom: 12px;\n",
       "      border-top: 0px;\n",
       "      border-right: 0px;\n",
       "      border-bottom: 1px solid #ccc;\n",
       "      border-left: 1px solid #ccc;\n",
       "    }\n",
       "    #i0oOcPUlCRlfCP4JG-details-toggle-button {\n",
       "      bottom: 0;\n",
       "      left: 0;\n",
       "      padding-left: 19px;\n",
       "      padding-right: 19px;\n",
       "      padding-top: 0.5px;\n",
       "      padding-bottom: 2px;\n",
       "      border-top: 1px solid #ccc;\n",
       "      border-right: 1px solid #ccc;\n",
       "      border-bottom: 0px;\n",
       "      border-left: 0px;\n",
       "    }\n",
       "    #i0oOcPUlCRlfCP4JG-progress-container {\n",
       "      font-size: 10px;\n",
       "      text-align: center;\n",
       "      top: 46%;\n",
       "      left: 15%;\n",
       "      width: 70%;\n",
       "      padding: 8px;\n",
       "      border: none;\n",
       "      box-shadow: none;\n",
       "    }\n",
       "\n",
       "    /* Details */\n",
       "    #i0oOcPUlCRlfCP4JG-details-user-provided {\n",
       "      margin-top: 3px;\n",
       "      padding-top: 3.5px;\n",
       "      border-top: 0.5px dashed black;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "      white-space: pre-wrap;\n",
       "      word-break: break-word;\n",
       "    }\n",
       "    #i0oOcPUlCRlfCP4JG-details-user-provided ul {\n",
       "      list-style-position: inside;\n",
       "      padding-left: 6px;\n",
       "    }\n",
       "\n",
       "    /* Unavailable in vis.js and therefore hidden */\n",
       "    #i0oOcPUlCRlfCP4JG-svg,\n",
       "    #i0oOcPUlCRlfCP4JG-node-label-rotation,\n",
       "    #i0oOcPUlCRlfCP4JG-edge-label-rotation {\n",
       "      display: none;\n",
       "    }\n",
       "    /* Specific to vis.js */\n",
       "    div.vis-tooltip {\n",
       "      position: absolute;\n",
       "      visibility: hidden;\n",
       "      pointer-events: none;\n",
       "      z-index: 5;\n",
       "      max-width: 40%;\n",
       "      white-space: pre-wrap;\n",
       "      word-break: break-word;\n",
       "      font-size: 10px;\n",
       "      padding: 5px;\n",
       "      color: black;\n",
       "      background-color: white;\n",
       "      -moz-border-radius: 3px;\n",
       "      -webkit-border-radius: 3px;\n",
       "      border-radius: 3px;\n",
       "      border: 0.5px solid black;\n",
       "      box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.3);\n",
       "    }\n",
       "  </style>\n",
       "\n",
       "  <div id=\"i0oOcPUlCRlfCP4JG-main-div\">\n",
       "    <div id=\"i0oOcPUlCRlfCP4JG-tooltip-div\"></div>\n",
       "\n",
       "    <div id=\"i0oOcPUlCRlfCP4JG-left-div\">\n",
       "      <div id=\"i0oOcPUlCRlfCP4JG-left-inner-div\">\n",
       "        <div id=\"i0oOcPUlCRlfCP4JG-graph-div\"></div>\n",
       "        <div id=\"i0oOcPUlCRlfCP4JG-details-div\">\n",
       "          <div id=\"i0oOcPUlCRlfCP4JG-details-head\">\n",
       "            Details for selected element\n",
       "          </div>\n",
       "          <div id=\"i0oOcPUlCRlfCP4JG-details-body\">\n",
       "          </div>\n",
       "        </div>\n",
       "      </div>\n",
       "    </div>\n",
       "\n",
       "    <div id=\"i0oOcPUlCRlfCP4JG-right-div\">\n",
       "      <div id=\"i0oOcPUlCRlfCP4JG-right-inner-div\">\n",
       "        <!-- Menu: General -->\n",
       "        <div class=\"i0oOcPUlCRlfCP4JG-menu-item-head\"\n",
       "             id=\"i0oOcPUlCRlfCP4JG-general-head\">\n",
       "          General\n",
       "        </div>\n",
       "        <div class=\"i0oOcPUlCRlfCP4JG-menu-item-body\"\n",
       "             id=\"i0oOcPUlCRlfCP4JG-general-body\">\n",
       "          <!-- Sub-menu: State -->\n",
       "          <div>\n",
       "            <div class=\"i0oOcPUlCRlfCP4JG-menu-subitem-head\">\n",
       "              App state\n",
       "            </div>\n",
       "            <div class=\"i0oOcPUlCRlfCP4JG-menu-subitem-body\">\n",
       "              <button class=\"i0oOcPUlCRlfCP4JG-button\"\n",
       "                      id=\"i0oOcPUlCRlfCP4JG-reset\"\n",
       "                      type=\"button\">Reset</button>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Display mode (fullscreen or not) -->\n",
       "          <div>\n",
       "            <div class=\"i0oOcPUlCRlfCP4JG-menu-subitem-head\">\n",
       "              Display mode\n",
       "            </div>\n",
       "            <div class=\"i0oOcPUlCRlfCP4JG-menu-subitem-body\">\n",
       "              <button class=\"i0oOcPUlCRlfCP4JG-button\"\n",
       "                      id=\"i0oOcPUlCRlfCP4JG-fullscreen-button\"\n",
       "                      type=\"button\">Enter full screen</button>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Export -->\n",
       "          <div>\n",
       "            <div class=\"i0oOcPUlCRlfCP4JG-menu-subitem-head\">\n",
       "              Export\n",
       "            </div>\n",
       "            <div class=\"i0oOcPUlCRlfCP4JG-menu-subitem-body\">\n",
       "              <button class=\"i0oOcPUlCRlfCP4JG-button\"\n",
       "                      id=\"i0oOcPUlCRlfCP4JG-svg\"\n",
       "                      type=\"button\">SVG</button>\n",
       "              <button class=\"i0oOcPUlCRlfCP4JG-button\"\n",
       "                      id=\"i0oOcPUlCRlfCP4JG-png\"\n",
       "                      type=\"button\">PNG</button>\n",
       "              <button class=\"i0oOcPUlCRlfCP4JG-button\"\n",
       "                      id=\"i0oOcPUlCRlfCP4JG-jpg\"\n",
       "                      type=\"button\">JPG</button>\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "        <!-- Menu: Data -->\n",
       "        <div class=\"i0oOcPUlCRlfCP4JG-menu-item-head\"\n",
       "             id=\"i0oOcPUlCRlfCP4JG-data-head\">\n",
       "          Data selection\n",
       "        </div>\n",
       "        <div class=\"i0oOcPUlCRlfCP4JG-menu-item-body\"\n",
       "             id=\"i0oOcPUlCRlfCP4JG-data-body\">\n",
       "          <!-- Sub-menu: Graph (only shown if multiple graphs in data) -->\n",
       "          <div id=\"i0oOcPUlCRlfCP4JG-graph-select-div\">\n",
       "            <div class=\"i0oOcPUlCRlfCP4JG-menu-subitem-head\">\n",
       "              Graph\n",
       "            </div>\n",
       "            <div class=\"i0oOcPUlCRlfCP4JG-menu-subitem-body\">\n",
       "              <select class=\"i0oOcPUlCRlfCP4JG-select\"\n",
       "                      id=\"i0oOcPUlCRlfCP4JG-graph-select\"></select>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Node label text -->\n",
       "          <div>\n",
       "            <div class=\"i0oOcPUlCRlfCP4JG-menu-subitem-head\">\n",
       "              Node label text\n",
       "            </div>\n",
       "            <div class=\"i0oOcPUlCRlfCP4JG-menu-subitem-body\">\n",
       "              <select class=\"i0oOcPUlCRlfCP4JG-select\"\n",
       "                      id=\"i0oOcPUlCRlfCP4JG-node-label-data-source-select\"></select>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Edge label text -->\n",
       "          <div>\n",
       "            <div class=\"i0oOcPUlCRlfCP4JG-menu-subitem-head\">\n",
       "              Edge label text\n",
       "            </div>\n",
       "            <div class=\"i0oOcPUlCRlfCP4JG-menu-subitem-body\">\n",
       "              <select class=\"i0oOcPUlCRlfCP4JG-select\"\n",
       "                      id=\"i0oOcPUlCRlfCP4JG-edge-label-data-source-select\"></select>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Node size -->\n",
       "          <div class=\"i0oOcPUlCRlfCP4JG-menu-subitem-head\">\n",
       "            Node size\n",
       "          </div>\n",
       "          <div class=\"i0oOcPUlCRlfCP4JG-menu-subitem-body\">\n",
       "            <div>\n",
       "              <select class=\"i0oOcPUlCRlfCP4JG-select\"\n",
       "                      id=\"i0oOcPUlCRlfCP4JG-node-size-data-source-select\"></select>\n",
       "            </div>\n",
       "            <div class=\"i0oOcPUlCRlfCP4JG-labeled-input\">\n",
       "              <input class=\"i0oOcPUlCRlfCP4JG-checkbox\"\n",
       "                     id=\"i0oOcPUlCRlfCP4JG-node-size-normalization-checkbox\"\n",
       "                     type=\"checkbox\">\n",
       "              <label class=\"i0oOcPUlCRlfCP4JG-label\"\n",
       "                     for=\"i0oOcPUlCRlfCP4JG-node-size-normalization-checkbox\">Normalize</label>\n",
       "            </div>\n",
       "            <div id=\"i0oOcPUlCRlfCP4JG-node-size-norm-div\">\n",
       "              <div>\n",
       "                <span class=\"i0oOcPUlCRlfCP4JG-slider-text-left\">Minimum</span>\n",
       "                <span class=\"i0oOcPUlCRlfCP4JG-slider-text-right\"\n",
       "                      id=\"i0oOcPUlCRlfCP4JG-node-size-normalization-min-text\"></span>\n",
       "                <input class=\"i0oOcPUlCRlfCP4JG-slider\"\n",
       "                       id=\"i0oOcPUlCRlfCP4JG-node-size-normalization-min-slider\"\n",
       "                       type=\"range\" min=\"0.01\" max=\"300.0\" step=\"0.01\">\n",
       "              </div>\n",
       "              <div>\n",
       "                <span class=\"i0oOcPUlCRlfCP4JG-slider-text-left\">Maximum</span>\n",
       "                <span class=\"i0oOcPUlCRlfCP4JG-slider-text-right\"\n",
       "                      id=\"i0oOcPUlCRlfCP4JG-node-size-normalization-max-text\"></span>\n",
       "                <input class=\"i0oOcPUlCRlfCP4JG-slider\"\n",
       "                       id=\"i0oOcPUlCRlfCP4JG-node-size-normalization-max-slider\"\n",
       "                       type=\"range\" min=\"0.01\" max=\"300.0\" step=\"0.01\">\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Edge size -->\n",
       "          <div class=\"i0oOcPUlCRlfCP4JG-menu-subitem-head\">\n",
       "            Edge size\n",
       "          </div>\n",
       "          <div class=\"i0oOcPUlCRlfCP4JG-menu-subitem-body\">\n",
       "            <div>\n",
       "              <select class=\"i0oOcPUlCRlfCP4JG-select\"\n",
       "                      id=\"i0oOcPUlCRlfCP4JG-edge-size-data-source-select\"></select>\n",
       "            </div>\n",
       "            <div class=\"i0oOcPUlCRlfCP4JG-labeled-input\">\n",
       "              <input class=\"i0oOcPUlCRlfCP4JG-checkbox\"\n",
       "                     id=\"i0oOcPUlCRlfCP4JG-edge-size-normalization-checkbox\"\n",
       "                     type=\"checkbox\">\n",
       "              <label class=\"i0oOcPUlCRlfCP4JG-label\"\n",
       "                     for=\"i0oOcPUlCRlfCP4JG-edge-size-normalization-checkbox\">Normalize</label>\n",
       "            </div>\n",
       "            <div id=\"i0oOcPUlCRlfCP4JG-edge-size-norm-div\">\n",
       "              <div>\n",
       "                <span class=\"i0oOcPUlCRlfCP4JG-slider-text-left\">Minimum</span>\n",
       "                <span class=\"i0oOcPUlCRlfCP4JG-slider-text-right\"\n",
       "                      id=\"i0oOcPUlCRlfCP4JG-edge-size-normalization-min-text\"></span>\n",
       "                <input class=\"i0oOcPUlCRlfCP4JG-slider\"\n",
       "                       id=\"i0oOcPUlCRlfCP4JG-edge-size-normalization-min-slider\"\n",
       "                       type=\"range\" min=\"0.01\" max=\"50.0\" step=\"0.01\">\n",
       "              </div>\n",
       "              <div>\n",
       "                <span class=\"i0oOcPUlCRlfCP4JG-slider-text-left\">Maximum</span>\n",
       "                <span class=\"i0oOcPUlCRlfCP4JG-slider-text-right\"\n",
       "                      id=\"i0oOcPUlCRlfCP4JG-edge-size-normalization-max-text\"></span>\n",
       "                <input class=\"i0oOcPUlCRlfCP4JG-slider\"\n",
       "                       id=\"i0oOcPUlCRlfCP4JG-edge-size-normalization-max-slider\"\n",
       "                       type=\"range\" min=\"0.01\" max=\"50.0\" step=\"0.01\">\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "        <!-- Menu: Nodes -->\n",
       "        <div class=\"i0oOcPUlCRlfCP4JG-menu-item-head\"\n",
       "             id=\"i0oOcPUlCRlfCP4JG-node-head\">\n",
       "          Nodes\n",
       "        </div>\n",
       "        <div class=\"i0oOcPUlCRlfCP4JG-menu-item-body\"\n",
       "             id=\"i0oOcPUlCRlfCP4JG-node-body\">\n",
       "          <!-- Sub-menu: Visibility -->\n",
       "          <div>\n",
       "            <div class=\"i0oOcPUlCRlfCP4JG-menu-subitem-head\">\n",
       "              Visibility\n",
       "            </div>\n",
       "            <div class=\"i0oOcPUlCRlfCP4JG-menu-subitem-body\">\n",
       "              <div class=\"i0oOcPUlCRlfCP4JG-labeled-input\">\n",
       "                <input class=\"i0oOcPUlCRlfCP4JG-checkbox\"\n",
       "                       id=\"i0oOcPUlCRlfCP4JG-node-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"i0oOcPUlCRlfCP4JG-label\"\n",
       "                       for=\"i0oOcPUlCRlfCP4JG-node-checkbox\">Show nodes</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Size -->\n",
       "          <div>\n",
       "            <div class=\"i0oOcPUlCRlfCP4JG-menu-subitem-head\">\n",
       "              Size\n",
       "            </div>\n",
       "            <div class=\"i0oOcPUlCRlfCP4JG-menu-subitem-body\">\n",
       "              <div>\n",
       "                <span class=\"i0oOcPUlCRlfCP4JG-slider-text-left\">Scaling factor</span>\n",
       "                <span class=\"i0oOcPUlCRlfCP4JG-slider-text-right\"\n",
       "                      id=\"i0oOcPUlCRlfCP4JG-node-size-factor-text\"></span>\n",
       "                <input class=\"i0oOcPUlCRlfCP4JG-slider\"\n",
       "                       id=\"i0oOcPUlCRlfCP4JG-node-size-factor-slider\"\n",
       "                       type=\"range\" min=\"0.01\" max=\"5.0\" step=\"0.01\">\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Position -->\n",
       "          <div>\n",
       "            <div class=\"i0oOcPUlCRlfCP4JG-menu-subitem-head\">\n",
       "              Position\n",
       "            </div>\n",
       "            <div class=\"i0oOcPUlCRlfCP4JG-menu-subitem-body\">\n",
       "              <button class=\"i0oOcPUlCRlfCP4JG-button\"\n",
       "                      id=\"i0oOcPUlCRlfCP4JG-node-release-button\"\n",
       "                      type=\"button\">Release fixed nodes</button>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Drag behavior -->\n",
       "          <div>\n",
       "            <div class=\"i0oOcPUlCRlfCP4JG-menu-subitem-head\">\n",
       "              Drag behavior\n",
       "            </div>\n",
       "            <div class=\"i0oOcPUlCRlfCP4JG-menu-subitem-body\">\n",
       "              <div class=\"i0oOcPUlCRlfCP4JG-labeled-input\">\n",
       "                <input class=\"i0oOcPUlCRlfCP4JG-checkbox\"\n",
       "                       id=\"i0oOcPUlCRlfCP4JG-node-drag-fix-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"i0oOcPUlCRlfCP4JG-label\"\n",
       "                       for=\"i0oOcPUlCRlfCP4JG-node-drag-fix-checkbox\">Fix node position</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Hover behavior -->\n",
       "          <div>\n",
       "            <div class=\"i0oOcPUlCRlfCP4JG-menu-subitem-head\">\n",
       "              Hover behavior\n",
       "            </div>\n",
       "            <div class=\"i0oOcPUlCRlfCP4JG-menu-subitem-body\">\n",
       "              <div class=\"i0oOcPUlCRlfCP4JG-labeled-input\">\n",
       "                <input class=\"i0oOcPUlCRlfCP4JG-checkbox\"\n",
       "                       id=\"i0oOcPUlCRlfCP4JG-node-hover-neighborhood-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"i0oOcPUlCRlfCP4JG-label\"\n",
       "                       for=\"i0oOcPUlCRlfCP4JG-node-hover-neighborhood-checkbox\">Show neighborhood</label>\n",
       "              </div>\n",
       "              <div class=\"i0oOcPUlCRlfCP4JG-labeled-input\">\n",
       "                <input class=\"i0oOcPUlCRlfCP4JG-checkbox\"\n",
       "                       id=\"i0oOcPUlCRlfCP4JG-node-hover-tooltip-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"i0oOcPUlCRlfCP4JG-label\"\n",
       "                       for=\"i0oOcPUlCRlfCP4JG-node-hover-tooltip-checkbox\">Show tooltips (if provided)</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "        <!-- Menu: Node images -->\n",
       "        <div id=\"i0oOcPUlCRlfCP4JG-node-image-meta-control\">\n",
       "          <div class=\"i0oOcPUlCRlfCP4JG-menu-item-head\"\n",
       "               id=\"i0oOcPUlCRlfCP4JG-node-image-head\">\n",
       "            Node images\n",
       "          </div>\n",
       "          <div class=\"i0oOcPUlCRlfCP4JG-menu-item-body\"\n",
       "               id=\"i0oOcPUlCRlfCP4JG-node-image-body\">\n",
       "            <!-- Sub-menu: Visibility -->\n",
       "            <div>\n",
       "              <div class=\"i0oOcPUlCRlfCP4JG-menu-subitem-head\">\n",
       "                Visibility\n",
       "              </div>\n",
       "              <div class=\"i0oOcPUlCRlfCP4JG-menu-subitem-body\">\n",
       "                <div class=\"i0oOcPUlCRlfCP4JG-labeled-input\">\n",
       "                  <input class=\"i0oOcPUlCRlfCP4JG-checkbox\"\n",
       "                         id=\"i0oOcPUlCRlfCP4JG-node-image-checkbox\"\n",
       "                         type=\"checkbox\">\n",
       "                  <label class=\"i0oOcPUlCRlfCP4JG-label\"\n",
       "                         for=\"i0oOcPUlCRlfCP4JG-node-image-checkbox\">Show node images</label>\n",
       "                </div>\n",
       "              </div>\n",
       "            </div>\n",
       "            <!-- Sub-menu: Size -->\n",
       "            <div>\n",
       "              <div class=\"i0oOcPUlCRlfCP4JG-menu-subitem-head\">\n",
       "                Size\n",
       "              </div>\n",
       "              <div class=\"i0oOcPUlCRlfCP4JG-menu-subitem-body\">\n",
       "                <span class=\"i0oOcPUlCRlfCP4JG-slider-text-left\">Scaling factor</span>\n",
       "                <span class=\"i0oOcPUlCRlfCP4JG-slider-text-right\"\n",
       "                      id=\"i0oOcPUlCRlfCP4JG-node-image-size-factor-text\"></span>\n",
       "                <input class=\"i0oOcPUlCRlfCP4JG-slider\"\n",
       "                       id=\"i0oOcPUlCRlfCP4JG-node-image-size-factor-slider\"\n",
       "                       type=\"range\" min=\"0.01\" max=\"5.0\" step=\"0.01\">\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "        <!-- Menu: Node labels -->\n",
       "        <div class=\"i0oOcPUlCRlfCP4JG-menu-item-head\"\n",
       "             id=\"i0oOcPUlCRlfCP4JG-node-label-head\">\n",
       "          Node labels\n",
       "        </div>\n",
       "        <div class=\"i0oOcPUlCRlfCP4JG-menu-item-body\"\n",
       "             id=\"i0oOcPUlCRlfCP4JG-node-label-body\">\n",
       "          <!-- Sub-menu: Visibility -->\n",
       "          <div>\n",
       "            <div class=\"i0oOcPUlCRlfCP4JG-menu-subitem-head\">\n",
       "              Visibility\n",
       "            </div>\n",
       "            <div class=\"i0oOcPUlCRlfCP4JG-menu-subitem-body\">\n",
       "              <div class=\"i0oOcPUlCRlfCP4JG-labeled-input\">\n",
       "                <input class=\"i0oOcPUlCRlfCP4JG-checkbox\"\n",
       "                       id=\"i0oOcPUlCRlfCP4JG-node-label-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"i0oOcPUlCRlfCP4JG-label\"\n",
       "                       for=\"i0oOcPUlCRlfCP4JG-node-label-checkbox\">Show node labels</label>\n",
       "              </div>\n",
       "              <div class=\"i0oOcPUlCRlfCP4JG-labeled-input\">\n",
       "                <input class=\"i0oOcPUlCRlfCP4JG-checkbox\"\n",
       "                       id=\"i0oOcPUlCRlfCP4JG-node-label-border-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"i0oOcPUlCRlfCP4JG-label\"\n",
       "                       for=\"i0oOcPUlCRlfCP4JG-node-label-border-checkbox\">Show borders</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Size -->\n",
       "          <div>\n",
       "            <div class=\"i0oOcPUlCRlfCP4JG-menu-subitem-head\">\n",
       "              Size\n",
       "            </div>\n",
       "            <div class=\"i0oOcPUlCRlfCP4JG-menu-subitem-body\">\n",
       "              <span class=\"i0oOcPUlCRlfCP4JG-slider-text-left\">Scaling factor</span>\n",
       "              <span class=\"i0oOcPUlCRlfCP4JG-slider-text-right\"\n",
       "                    id=\"i0oOcPUlCRlfCP4JG-node-label-size-factor-text\"></span>\n",
       "              <input class=\"i0oOcPUlCRlfCP4JG-slider\"\n",
       "                     id=\"i0oOcPUlCRlfCP4JG-node-label-size-factor-slider\"\n",
       "                     type=\"range\" min=\"0.01\" max=\"5.0\" step=\"0.01\">\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Rotation -->\n",
       "          <div id=\"i0oOcPUlCRlfCP4JG-node-label-rotation\">\n",
       "            <div class=\"i0oOcPUlCRlfCP4JG-menu-subitem-head\">\n",
       "              Rotation\n",
       "            </div>\n",
       "            <div class=\"i0oOcPUlCRlfCP4JG-menu-subitem-body\">\n",
       "              <span class=\"i0oOcPUlCRlfCP4JG-slider-text-left\">Angle</span>\n",
       "              <span class=\"i0oOcPUlCRlfCP4JG-slider-text-right\"\n",
       "                    id=\"i0oOcPUlCRlfCP4JG-node-label-rotation-text\"></span>\n",
       "              <input class=\"i0oOcPUlCRlfCP4JG-slider\"\n",
       "                     id=\"i0oOcPUlCRlfCP4JG-node-label-rotation-slider\"\n",
       "                     type=\"range\" min=\"0.0\" max=\"359.0\" step=\"1.0\">\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "        <!-- Menu: Edges -->\n",
       "        <div class=\"i0oOcPUlCRlfCP4JG-menu-item-head\"\n",
       "             id=\"i0oOcPUlCRlfCP4JG-edge-head\">\n",
       "          Edges\n",
       "        </div>\n",
       "        <div class=\"i0oOcPUlCRlfCP4JG-menu-item-body\"\n",
       "             id=\"i0oOcPUlCRlfCP4JG-edge-body\">\n",
       "          <!-- Sub-menu: Visibility -->\n",
       "          <div>\n",
       "            <div class=\"i0oOcPUlCRlfCP4JG-menu-subitem-head\">\n",
       "              Visibility\n",
       "            </div>\n",
       "            <div class=\"i0oOcPUlCRlfCP4JG-menu-subitem-body\">\n",
       "              <div class=\"i0oOcPUlCRlfCP4JG-labeled-input\">\n",
       "                <input class=\"i0oOcPUlCRlfCP4JG-checkbox\"\n",
       "                       id=\"i0oOcPUlCRlfCP4JG-edge-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"i0oOcPUlCRlfCP4JG-label\"\n",
       "                       for=\"i0oOcPUlCRlfCP4JG-edge-checkbox\">Show edges</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Size -->\n",
       "          <div>\n",
       "            <div class=\"i0oOcPUlCRlfCP4JG-menu-subitem-head\">\n",
       "              Size\n",
       "            </div>\n",
       "            <div class=\"i0oOcPUlCRlfCP4JG-menu-subitem-body\">\n",
       "              <span class=\"i0oOcPUlCRlfCP4JG-slider-text-left\">Scaling factor</span>\n",
       "              <span class=\"i0oOcPUlCRlfCP4JG-slider-text-right\"\n",
       "                    id=\"i0oOcPUlCRlfCP4JG-edge-size-factor-text\"></span>\n",
       "              <input class=\"i0oOcPUlCRlfCP4JG-slider\"\n",
       "                     id=\"i0oOcPUlCRlfCP4JG-edge-size-factor-slider\"\n",
       "                     type=\"range\" min=\"0.01\" max=\"5.0\" step=\"0.01\">\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Form -->\n",
       "          <div>\n",
       "            <div class=\"i0oOcPUlCRlfCP4JG-menu-subitem-head\">\n",
       "              Form\n",
       "            </div>\n",
       "            <div class=\"i0oOcPUlCRlfCP4JG-menu-subitem-body\">\n",
       "              <span class=\"i0oOcPUlCRlfCP4JG-slider-text-left\">Curvature</span>\n",
       "              <span class=\"i0oOcPUlCRlfCP4JG-slider-text-right\"\n",
       "                    id=\"i0oOcPUlCRlfCP4JG-edge-curvature-text\"></span>\n",
       "              <input class=\"i0oOcPUlCRlfCP4JG-slider\"\n",
       "                     id=\"i0oOcPUlCRlfCP4JG-edge-curvature-slider\"\n",
       "                     type=\"range\" min=\"-1.2\" max=\"1.2\" step=\"0.02\">\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Hover behavior -->\n",
       "          <div>\n",
       "            <div class=\"i0oOcPUlCRlfCP4JG-menu-subitem-head\">\n",
       "              Hover behavior\n",
       "            </div>\n",
       "            <div class=\"i0oOcPUlCRlfCP4JG-menu-subitem-body\">\n",
       "              <div class=\"i0oOcPUlCRlfCP4JG-labeled-input\">\n",
       "                <input class=\"i0oOcPUlCRlfCP4JG-checkbox\"\n",
       "                       id=\"i0oOcPUlCRlfCP4JG-edge-hover-tooltip-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"i0oOcPUlCRlfCP4JG-label\"\n",
       "                       for=\"i0oOcPUlCRlfCP4JG-edge-hover-tooltip-checkbox\">Show tooltips (if provided)</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "        <!-- Menu: Edge labels -->\n",
       "        <div class=\"i0oOcPUlCRlfCP4JG-menu-item-head\"\n",
       "             id=\"i0oOcPUlCRlfCP4JG-edge-label-head\">\n",
       "          Edge labels\n",
       "        </div>\n",
       "        <div class=\"i0oOcPUlCRlfCP4JG-menu-item-body\"\n",
       "             id=\"i0oOcPUlCRlfCP4JG-edge-label-body\">\n",
       "          <!-- Sub-menu: Visibility -->\n",
       "          <div>\n",
       "            <div class=\"i0oOcPUlCRlfCP4JG-menu-subitem-head\">\n",
       "              Visibility\n",
       "            </div>\n",
       "            <div class=\"i0oOcPUlCRlfCP4JG-menu-subitem-body\">\n",
       "              <div class=\"i0oOcPUlCRlfCP4JG-labeled-input\">\n",
       "                <input class=\"i0oOcPUlCRlfCP4JG-checkbox\"\n",
       "                       id=\"i0oOcPUlCRlfCP4JG-edge-label-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"i0oOcPUlCRlfCP4JG-label\"\n",
       "                       for=\"i0oOcPUlCRlfCP4JG-edge-label-checkbox\">Show edge labels</label>\n",
       "              </div>\n",
       "              <div class=\"i0oOcPUlCRlfCP4JG-labeled-input\">\n",
       "                <input class=\"i0oOcPUlCRlfCP4JG-checkbox\"\n",
       "                       id=\"i0oOcPUlCRlfCP4JG-edge-label-border-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"i0oOcPUlCRlfCP4JG-label\"\n",
       "                       for=\"i0oOcPUlCRlfCP4JG-edge-label-border-checkbox\">Show borders</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Size -->\n",
       "          <div>\n",
       "            <div class=\"i0oOcPUlCRlfCP4JG-menu-subitem-head\">\n",
       "              Size\n",
       "            </div>\n",
       "            <div class=\"i0oOcPUlCRlfCP4JG-menu-subitem-body\">\n",
       "              <span class=\"i0oOcPUlCRlfCP4JG-slider-text-left\">Scaling factor</span>\n",
       "              <span class=\"i0oOcPUlCRlfCP4JG-slider-text-right\"\n",
       "                    id=\"i0oOcPUlCRlfCP4JG-edge-label-size-factor-text\"></span>\n",
       "              <input class=\"i0oOcPUlCRlfCP4JG-slider\"\n",
       "                     id=\"i0oOcPUlCRlfCP4JG-edge-label-size-factor-slider\"\n",
       "                     type=\"range\" min=\"0.01\" max=\"5.0\" step=\"0.01\">\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Rotation -->\n",
       "          <div id=\"i0oOcPUlCRlfCP4JG-edge-label-rotation\">\n",
       "            <div class=\"i0oOcPUlCRlfCP4JG-menu-subitem-head\">\n",
       "              Rotation\n",
       "            </div>\n",
       "            <div class=\"i0oOcPUlCRlfCP4JG-menu-subitem-body\">\n",
       "              <span class=\"i0oOcPUlCRlfCP4JG-slider-text-left\">Angle</span>\n",
       "              <span class=\"i0oOcPUlCRlfCP4JG-slider-text-right\"\n",
       "                      id=\"i0oOcPUlCRlfCP4JG-edge-label-rotation-text\"></span>\n",
       "              <input class=\"i0oOcPUlCRlfCP4JG-slider\"\n",
       "                     id=\"i0oOcPUlCRlfCP4JG-edge-label-rotation-slider\"\n",
       "                     type=\"range\" min=\"0.0\" max=\"359.0\" step=\"1.0\">\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "        <!-- Menu: Layout algorithm -->\n",
       "        <div class=\"i0oOcPUlCRlfCP4JG-menu-item-head\"\n",
       "             id=\"i0oOcPUlCRlfCP4JG-layout-algorithm-head\">\n",
       "          Layout algorithm\n",
       "        </div>\n",
       "        <div class=\"i0oOcPUlCRlfCP4JG-menu-item-body\"\n",
       "             id=\"i0oOcPUlCRlfCP4JG-layout-algorithm-body\">\n",
       "          <!-- Sub-menu: Simulation -->\n",
       "          <div>\n",
       "            <div class=\"i0oOcPUlCRlfCP4JG-menu-subitem-head\">\n",
       "              Simulation\n",
       "            </div>\n",
       "            <div class=\"i0oOcPUlCRlfCP4JG-menu-subitem-body\">\n",
       "              <div class=\"i0oOcPUlCRlfCP4JG-labeled-input\">\n",
       "                <input class=\"i0oOcPUlCRlfCP4JG-checkbox\"\n",
       "                       id=\"i0oOcPUlCRlfCP4JG-simulation-active-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"i0oOcPUlCRlfCP4JG-label\"\n",
       "                       for=\"i0oOcPUlCRlfCP4JG-simulation-active-checkbox\">Active</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Algorithm -->\n",
       "          <div>\n",
       "            <div class=\"i0oOcPUlCRlfCP4JG-menu-subitem-head\">\n",
       "              Algorithm\n",
       "            </div>\n",
       "            <div class=\"i0oOcPUlCRlfCP4JG-menu-subitem-body\">\n",
       "              <div>\n",
       "                <select class=\"i0oOcPUlCRlfCP4JG-select\"\n",
       "                        id=\"i0oOcPUlCRlfCP4JG-layout-algorithm-select\"></select>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Parameters -->\n",
       "          <div>\n",
       "            <div class=\"i0oOcPUlCRlfCP4JG-menu-subitem-head\">\n",
       "              Parameters\n",
       "            </div>\n",
       "            <div class=\"i0oOcPUlCRlfCP4JG-menu-subitem-body\">\n",
       "              <div id=\"i0oOcPUlCRlfCP4JG-gravitational-constant-div\">\n",
       "                <span class=\"i0oOcPUlCRlfCP4JG-slider-text-left\">Gravitational constant</span>\n",
       "                <span class=\"i0oOcPUlCRlfCP4JG-slider-text-right\"\n",
       "                      id=\"i0oOcPUlCRlfCP4JG-gravitational-constant-text\"></span>\n",
       "                <input class=\"i0oOcPUlCRlfCP4JG-slider\"\n",
       "                       id=\"i0oOcPUlCRlfCP4JG-gravitational-constant-slider\"\n",
       "                       type=\"range\" min=\"-50000\" max=\"0\" step=\"1\"\n",
       "                       style=\"direction:rtl;\">\n",
       "              </div>\n",
       "              <div id=\"i0oOcPUlCRlfCP4JG-spring-length-div\">\n",
       "                <span class=\"i0oOcPUlCRlfCP4JG-slider-text-left\">Spring length</span>\n",
       "                <span class=\"i0oOcPUlCRlfCP4JG-slider-text-right\"\n",
       "                      id=\"i0oOcPUlCRlfCP4JG-spring-length-text\"></span>\n",
       "                <input class=\"i0oOcPUlCRlfCP4JG-slider\"\n",
       "                       id=\"i0oOcPUlCRlfCP4JG-spring-length-slider\"\n",
       "                       type=\"range\" min=\"0.0\" max=\"500\" step=\"0.1\">\n",
       "              </div>\n",
       "              <div id=\"i0oOcPUlCRlfCP4JG-spring-constant-div\">\n",
       "                <span class=\"i0oOcPUlCRlfCP4JG-slider-text-left\">Spring constant</span>\n",
       "                <span class=\"i0oOcPUlCRlfCP4JG-slider-text-right\"\n",
       "                      id=\"i0oOcPUlCRlfCP4JG-spring-constant-text\"></span>\n",
       "                <input class=\"i0oOcPUlCRlfCP4JG-slider\"\n",
       "                       id=\"i0oOcPUlCRlfCP4JG-spring-constant-slider\"\n",
       "                       type=\"range\" min=\"0.0\" max=\"1.0\" step=\"0.01\">\n",
       "              </div>\n",
       "              <div id=\"i0oOcPUlCRlfCP4JG-avoid-overlap-div\">\n",
       "                <span class=\"i0oOcPUlCRlfCP4JG-slider-text-left\">Avoid overlap</span>\n",
       "                <span class=\"i0oOcPUlCRlfCP4JG-slider-text-right\"\n",
       "                      id=\"i0oOcPUlCRlfCP4JG-avoid-overlap-text\"></span>\n",
       "                <input class=\"i0oOcPUlCRlfCP4JG-slider\"\n",
       "                       id=\"i0oOcPUlCRlfCP4JG-avoid-overlap-slider\"\n",
       "                       type=\"range\" min=\"0.0\" max=\"1.0\" step=\"0.01\">\n",
       "              </div>\n",
       "              <div id=\"i0oOcPUlCRlfCP4JG-central-gravity-div\">\n",
       "                <span class=\"i0oOcPUlCRlfCP4JG-slider-text-left\">Central gravity</span>\n",
       "                <span class=\"i0oOcPUlCRlfCP4JG-slider-text-right\"\n",
       "                      id=\"i0oOcPUlCRlfCP4JG-central-gravity-text\"></span>\n",
       "                <input class=\"i0oOcPUlCRlfCP4JG-slider\"\n",
       "                       id=\"i0oOcPUlCRlfCP4JG-central-gravity-slider\"\n",
       "                       type=\"range\" min=\"0.0\" max=\"10.0\" step=\"0.001\">\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "      </div>\n",
       "    </div>\n",
       "  </div>\n",
       "\n",
       "  <script charset=\"utf-8\" type=\"text/javascript\">\n",
       "    if(typeof(require) === \"undefined\"){\n",
       "      // Project sites:    https://requirejs.org\n",
       "//                   https://github.com/requirejs/requirejs\n",
       "// Code source:      https://requirejs.org/docs/release/2.3.6/minified/require.js - accessed on 19.11.2020\n",
       "// Original license: MIT\n",
       "// Code changes:     None\n",
       "\n",
       "/** vim: et:ts=4:sw=4:sts=4\n",
       " * @license RequireJS 2.3.6 Copyright jQuery Foundation and other contributors.\n",
       " * Released under MIT license, https://github.com/requirejs/requirejs/blob/master/LICENSE\n",
       " */\n",
       "var requirejs,require,define;!function(global,setTimeout){var req,s,head,baseElement,dataMain,src,interactiveScript,currentlyAddingScript,mainScript,subPath,version=\"2.3.6\",commentRegExp=/\\/\\*[\\s\\S]*?\\*\\/|([^:\"'=]|^)\\/\\/.*$/gm,cjsRequireRegExp=/[^.]\\s*require\\s*\\(\\s*[\"']([^'\"\\s]+)[\"']\\s*\\)/g,jsSuffixRegExp=/\\.js$/,currDirRegExp=/^\\.\\//,op=Object.prototype,ostring=op.toString,hasOwn=op.hasOwnProperty,isBrowser=!(\"undefined\"==typeof window||\"undefined\"==typeof navigator||!window.document),isWebWorker=!isBrowser&&\"undefined\"!=typeof importScripts,readyRegExp=isBrowser&&\"PLAYSTATION 3\"===navigator.platform?/^complete$/:/^(complete|loaded)$/,defContextName=\"_\",isOpera=\"undefined\"!=typeof opera&&\"[object Opera]\"===opera.toString(),contexts={},cfg={},globalDefQueue=[],useInteractive=!1;function commentReplace(e,t){return t||\"\"}function isFunction(e){return\"[object Function]\"===ostring.call(e)}function isArray(e){return\"[object Array]\"===ostring.call(e)}function each(e,t){var i;if(e)for(i=0;i<e.length&&(!e[i]||!t(e[i],i,e));i+=1);}function eachReverse(e,t){var i;if(e)for(i=e.length-1;-1<i&&(!e[i]||!t(e[i],i,e));i-=1);}function hasProp(e,t){return hasOwn.call(e,t)}function getOwn(e,t){return hasProp(e,t)&&e[t]}function eachProp(e,t){var i;for(i in e)if(hasProp(e,i)&&t(e[i],i))break}function mixin(i,e,r,n){return e&&eachProp(e,function(e,t){!r&&hasProp(i,t)||(!n||\"object\"!=typeof e||!e||isArray(e)||isFunction(e)||e instanceof RegExp?i[t]=e:(i[t]||(i[t]={}),mixin(i[t],e,r,n)))}),i}function bind(e,t){return function(){return t.apply(e,arguments)}}function scripts(){return document.getElementsByTagName(\"script\")}function defaultOnError(e){throw e}function getGlobal(e){if(!e)return e;var t=global;return each(e.split(\".\"),function(e){t=t[e]}),t}function makeError(e,t,i,r){var n=new Error(t+\"\\nhttps://requirejs.org/docs/errors.html#\"+e);return n.requireType=e,n.requireModules=r,i&&(n.originalError=i),n}if(void 0===define){if(void 0!==requirejs){if(isFunction(requirejs))return;cfg=requirejs,requirejs=void 0}void 0===require||isFunction(require)||(cfg=require,require=void 0),req=requirejs=function(e,t,i,r){var n,o,a=defContextName;return isArray(e)||\"string\"==typeof e||(o=e,isArray(t)?(e=t,t=i,i=r):e=[]),o&&o.context&&(a=o.context),(n=getOwn(contexts,a))||(n=contexts[a]=req.s.newContext(a)),o&&n.configure(o),n.require(e,t,i)},req.config=function(e){return req(e)},req.nextTick=void 0!==setTimeout?function(e){setTimeout(e,4)}:function(e){e()},require||(require=req),req.version=version,req.jsExtRegExp=/^\\/|:|\\?|\\.js$/,req.isBrowser=isBrowser,s=req.s={contexts:contexts,newContext:newContext},req({}),each([\"toUrl\",\"undef\",\"defined\",\"specified\"],function(t){req[t]=function(){var e=contexts[defContextName];return e.require[t].apply(e,arguments)}}),isBrowser&&(head=s.head=document.getElementsByTagName(\"head\")[0],baseElement=document.getElementsByTagName(\"base\")[0],baseElement&&(head=s.head=baseElement.parentNode)),req.onError=defaultOnError,req.createNode=function(e,t,i){var r=e.xhtml?document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"html:script\"):document.createElement(\"script\");return r.type=e.scriptType||\"text/javascript\",r.charset=\"utf-8\",r.async=!0,r},req.load=function(t,i,r){var e,n=t&&t.config||{};if(isBrowser)return(e=req.createNode(n,i,r)).setAttribute(\"data-requirecontext\",t.contextName),e.setAttribute(\"data-requiremodule\",i),!e.attachEvent||e.attachEvent.toString&&e.attachEvent.toString().indexOf(\"[native code\")<0||isOpera?(e.addEventListener(\"load\",t.onScriptLoad,!1),e.addEventListener(\"error\",t.onScriptError,!1)):(useInteractive=!0,e.attachEvent(\"onreadystatechange\",t.onScriptLoad)),e.src=r,n.onNodeCreated&&n.onNodeCreated(e,n,i,r),currentlyAddingScript=e,baseElement?head.insertBefore(e,baseElement):head.appendChild(e),currentlyAddingScript=null,e;if(isWebWorker)try{setTimeout(function(){},0),importScripts(r),t.completeLoad(i)}catch(e){t.onError(makeError(\"importscripts\",\"importScripts failed for \"+i+\" at \"+r,e,[i]))}},isBrowser&&!cfg.skipDataMain&&eachReverse(scripts(),function(e){if(head||(head=e.parentNode),dataMain=e.getAttribute(\"data-main\"))return mainScript=dataMain,cfg.baseUrl||-1!==mainScript.indexOf(\"!\")||(mainScript=(src=mainScript.split(\"/\")).pop(),subPath=src.length?src.join(\"/\")+\"/\":\"./\",cfg.baseUrl=subPath),mainScript=mainScript.replace(jsSuffixRegExp,\"\"),req.jsExtRegExp.test(mainScript)&&(mainScript=dataMain),cfg.deps=cfg.deps?cfg.deps.concat(mainScript):[mainScript],!0}),define=function(e,i,t){var r,n;\"string\"!=typeof e&&(t=i,i=e,e=null),isArray(i)||(t=i,i=null),!i&&isFunction(t)&&(i=[],t.length&&(t.toString().replace(commentRegExp,commentReplace).replace(cjsRequireRegExp,function(e,t){i.push(t)}),i=(1===t.length?[\"require\"]:[\"require\",\"exports\",\"module\"]).concat(i))),useInteractive&&(r=currentlyAddingScript||getInteractiveScript())&&(e||(e=r.getAttribute(\"data-requiremodule\")),n=contexts[r.getAttribute(\"data-requirecontext\")]),n?(n.defQueue.push([e,i,t]),n.defQueueMap[e]=!0):globalDefQueue.push([e,i,t])},define.amd={jQuery:!0},req.exec=function(text){return eval(text)},req(cfg)}function newContext(u){var i,e,l,c,d,g={waitSeconds:7,baseUrl:\"./\",paths:{},bundles:{},pkgs:{},shim:{},config:{}},p={},f={},r={},h=[],m={},n={},v={},x=1,b=1;function q(e,t,i){var r,n,o,a,s,u,c,d,p,f,l=t&&t.split(\"/\"),h=g.map,m=h&&h[\"*\"];if(e&&(u=(e=e.split(\"/\")).length-1,g.nodeIdCompat&&jsSuffixRegExp.test(e[u])&&(e[u]=e[u].replace(jsSuffixRegExp,\"\")),\".\"===e[0].charAt(0)&&l&&(e=l.slice(0,l.length-1).concat(e)),function(e){var t,i;for(t=0;t<e.length;t++)if(\".\"===(i=e[t]))e.splice(t,1),t-=1;else if(\"..\"===i){if(0===t||1===t&&\"..\"===e[2]||\"..\"===e[t-1])continue;0<t&&(e.splice(t-1,2),t-=2)}}(e),e=e.join(\"/\")),i&&h&&(l||m)){e:for(o=(n=e.split(\"/\")).length;0<o;o-=1){if(s=n.slice(0,o).join(\"/\"),l)for(a=l.length;0<a;a-=1)if((r=getOwn(h,l.slice(0,a).join(\"/\")))&&(r=getOwn(r,s))){c=r,d=o;break e}!p&&m&&getOwn(m,s)&&(p=getOwn(m,s),f=o)}!c&&p&&(c=p,d=f),c&&(n.splice(0,d,c),e=n.join(\"/\"))}return getOwn(g.pkgs,e)||e}function E(t){isBrowser&&each(scripts(),function(e){if(e.getAttribute(\"data-requiremodule\")===t&&e.getAttribute(\"data-requirecontext\")===l.contextName)return e.parentNode.removeChild(e),!0})}function w(e){var t=getOwn(g.paths,e);if(t&&isArray(t)&&1<t.length)return t.shift(),l.require.undef(e),l.makeRequire(null,{skipMap:!0})([e]),!0}function y(e){var t,i=e?e.indexOf(\"!\"):-1;return-1<i&&(t=e.substring(0,i),e=e.substring(i+1,e.length)),[t,e]}function S(e,t,i,r){var n,o,a,s,u=null,c=t?t.name:null,d=e,p=!0,f=\"\";return e||(p=!1,e=\"_@r\"+(x+=1)),u=(s=y(e))[0],e=s[1],u&&(u=q(u,c,r),o=getOwn(m,u)),e&&(u?f=i?e:o&&o.normalize?o.normalize(e,function(e){return q(e,c,r)}):-1===e.indexOf(\"!\")?q(e,c,r):e:(u=(s=y(f=q(e,c,r)))[0],f=s[1],i=!0,n=l.nameToUrl(f))),{prefix:u,name:f,parentMap:t,unnormalized:!!(a=!u||o||i?\"\":\"_unnormalized\"+(b+=1)),url:n,originalName:d,isDefine:p,id:(u?u+\"!\"+f:f)+a}}function k(e){var t=e.id,i=getOwn(p,t);return i||(i=p[t]=new l.Module(e)),i}function M(e,t,i){var r=e.id,n=getOwn(p,r);!hasProp(m,r)||n&&!n.defineEmitComplete?(n=k(e)).error&&\"error\"===t?i(n.error):n.on(t,i):\"defined\"===t&&i(m[r])}function O(i,e){var t=i.requireModules,r=!1;e?e(i):(each(t,function(e){var t=getOwn(p,e);t&&(t.error=i,t.events.error&&(r=!0,t.emit(\"error\",i)))}),r||req.onError(i))}function j(){globalDefQueue.length&&(each(globalDefQueue,function(e){var t=e[0];\"string\"==typeof t&&(l.defQueueMap[t]=!0),h.push(e)}),globalDefQueue=[])}function P(e){delete p[e],delete f[e]}function R(){var e,r,t=1e3*g.waitSeconds,n=t&&l.startTime+t<(new Date).getTime(),o=[],a=[],s=!1,u=!0;if(!i){if(i=!0,eachProp(f,function(e){var t=e.map,i=t.id;if(e.enabled&&(t.isDefine||a.push(e),!e.error))if(!e.inited&&n)w(i)?s=r=!0:(o.push(i),E(i));else if(!e.inited&&e.fetched&&t.isDefine&&(s=!0,!t.prefix))return u=!1}),n&&o.length)return(e=makeError(\"timeout\",\"Load timeout for modules: \"+o,null,o)).contextName=l.contextName,O(e);u&&each(a,function(e){!function n(o,a,s){var e=o.map.id;o.error?o.emit(\"error\",o.error):(a[e]=!0,each(o.depMaps,function(e,t){var i=e.id,r=getOwn(p,i);!r||o.depMatched[t]||s[i]||(getOwn(a,i)?(o.defineDep(t,m[i]),o.check()):n(r,a,s))}),s[e]=!0)}(e,{},{})}),n&&!r||!s||!isBrowser&&!isWebWorker||d||(d=setTimeout(function(){d=0,R()},50)),i=!1}}function a(e){hasProp(m,e[0])||k(S(e[0],null,!0)).init(e[1],e[2])}function o(e,t,i,r){e.detachEvent&&!isOpera?r&&e.detachEvent(r,t):e.removeEventListener(i,t,!1)}function s(e){var t=e.currentTarget||e.srcElement;return o(t,l.onScriptLoad,\"load\",\"onreadystatechange\"),o(t,l.onScriptError,\"error\"),{node:t,id:t&&t.getAttribute(\"data-requiremodule\")}}function T(){var e;for(j();h.length;){if(null===(e=h.shift())[0])return O(makeError(\"mismatch\",\"Mismatched anonymous define() module: \"+e[e.length-1]));a(e)}l.defQueueMap={}}return c={require:function(e){return e.require?e.require:e.require=l.makeRequire(e.map)},exports:function(e){if(e.usingExports=!0,e.map.isDefine)return e.exports?m[e.map.id]=e.exports:e.exports=m[e.map.id]={}},module:function(e){return e.module?e.module:e.module={id:e.map.id,uri:e.map.url,config:function(){return getOwn(g.config,e.map.id)||{}},exports:e.exports||(e.exports={})}}},(e=function(e){this.events=getOwn(r,e.id)||{},this.map=e,this.shim=getOwn(g.shim,e.id),this.depExports=[],this.depMaps=[],this.depMatched=[],this.pluginMaps={},this.depCount=0}).prototype={init:function(e,t,i,r){r=r||{},this.inited||(this.factory=t,i?this.on(\"error\",i):this.events.error&&(i=bind(this,function(e){this.emit(\"error\",e)})),this.depMaps=e&&e.slice(0),this.errback=i,this.inited=!0,this.ignore=r.ignore,r.enabled||this.enabled?this.enable():this.check())},defineDep:function(e,t){this.depMatched[e]||(this.depMatched[e]=!0,this.depCount-=1,this.depExports[e]=t)},fetch:function(){if(!this.fetched){this.fetched=!0,l.startTime=(new Date).getTime();var e=this.map;if(!this.shim)return e.prefix?this.callPlugin():this.load();l.makeRequire(this.map,{enableBuildCallback:!0})(this.shim.deps||[],bind(this,function(){return e.prefix?this.callPlugin():this.load()}))}},load:function(){var e=this.map.url;n[e]||(n[e]=!0,l.load(this.map.id,e))},check:function(){if(this.enabled&&!this.enabling){var t,e,i=this.map.id,r=this.depExports,n=this.exports,o=this.factory;if(this.inited){if(this.error)this.emit(\"error\",this.error);else if(!this.defining){if(this.defining=!0,this.depCount<1&&!this.defined){if(isFunction(o)){if(this.events.error&&this.map.isDefine||req.onError!==defaultOnError)try{n=l.execCb(i,o,r,n)}catch(e){t=e}else n=l.execCb(i,o,r,n);if(this.map.isDefine&&void 0===n&&((e=this.module)?n=e.exports:this.usingExports&&(n=this.exports)),t)return t.requireMap=this.map,t.requireModules=this.map.isDefine?[this.map.id]:null,t.requireType=this.map.isDefine?\"define\":\"require\",O(this.error=t)}else n=o;if(this.exports=n,this.map.isDefine&&!this.ignore&&(m[i]=n,req.onResourceLoad)){var a=[];each(this.depMaps,function(e){a.push(e.normalizedMap||e)}),req.onResourceLoad(l,this.map,a)}P(i),this.defined=!0}this.defining=!1,this.defined&&!this.defineEmitted&&(this.defineEmitted=!0,this.emit(\"defined\",this.exports),this.defineEmitComplete=!0)}}else hasProp(l.defQueueMap,i)||this.fetch()}},callPlugin:function(){var u=this.map,c=u.id,e=S(u.prefix);this.depMaps.push(e),M(e,\"defined\",bind(this,function(e){var o,t,i,r=getOwn(v,this.map.id),n=this.map.name,a=this.map.parentMap?this.map.parentMap.name:null,s=l.makeRequire(u.parentMap,{enableBuildCallback:!0});return this.map.unnormalized?(e.normalize&&(n=e.normalize(n,function(e){return q(e,a,!0)})||\"\"),M(t=S(u.prefix+\"!\"+n,this.map.parentMap,!0),\"defined\",bind(this,function(e){this.map.normalizedMap=t,this.init([],function(){return e},null,{enabled:!0,ignore:!0})})),void((i=getOwn(p,t.id))&&(this.depMaps.push(t),this.events.error&&i.on(\"error\",bind(this,function(e){this.emit(\"error\",e)})),i.enable()))):r?(this.map.url=l.nameToUrl(r),void this.load()):((o=bind(this,function(e){this.init([],function(){return e},null,{enabled:!0})})).error=bind(this,function(e){this.inited=!0,(this.error=e).requireModules=[c],eachProp(p,function(e){0===e.map.id.indexOf(c+\"_unnormalized\")&&P(e.map.id)}),O(e)}),o.fromText=bind(this,function(e,t){var i=u.name,r=S(i),n=useInteractive;t&&(e=t),n&&(useInteractive=!1),k(r),hasProp(g.config,c)&&(g.config[i]=g.config[c]);try{req.exec(e)}catch(e){return O(makeError(\"fromtexteval\",\"fromText eval for \"+c+\" failed: \"+e,e,[c]))}n&&(useInteractive=!0),this.depMaps.push(r),l.completeLoad(i),s([i],o)}),void e.load(u.name,s,o,g))})),l.enable(e,this),this.pluginMaps[e.id]=e},enable:function(){(f[this.map.id]=this).enabled=!0,this.enabling=!0,each(this.depMaps,bind(this,function(e,t){var i,r,n;if(\"string\"==typeof e){if(e=S(e,this.map.isDefine?this.map:this.map.parentMap,!1,!this.skipMap),this.depMaps[t]=e,n=getOwn(c,e.id))return void(this.depExports[t]=n(this));this.depCount+=1,M(e,\"defined\",bind(this,function(e){this.undefed||(this.defineDep(t,e),this.check())})),this.errback?M(e,\"error\",bind(this,this.errback)):this.events.error&&M(e,\"error\",bind(this,function(e){this.emit(\"error\",e)}))}i=e.id,r=p[i],hasProp(c,i)||!r||r.enabled||l.enable(e,this)})),eachProp(this.pluginMaps,bind(this,function(e){var t=getOwn(p,e.id);t&&!t.enabled&&l.enable(e,this)})),this.enabling=!1,this.check()},on:function(e,t){var i=this.events[e];i||(i=this.events[e]=[]),i.push(t)},emit:function(e,t){each(this.events[e],function(e){e(t)}),\"error\"===e&&delete this.events[e]}},(l={config:g,contextName:u,registry:p,defined:m,urlFetched:n,defQueue:h,defQueueMap:{},Module:e,makeModuleMap:S,nextTick:req.nextTick,onError:O,configure:function(e){if(e.baseUrl&&\"/\"!==e.baseUrl.charAt(e.baseUrl.length-1)&&(e.baseUrl+=\"/\"),\"string\"==typeof e.urlArgs){var i=e.urlArgs;e.urlArgs=function(e,t){return(-1===t.indexOf(\"?\")?\"?\":\"&\")+i}}var r=g.shim,n={paths:!0,bundles:!0,config:!0,map:!0};eachProp(e,function(e,t){n[t]?(g[t]||(g[t]={}),mixin(g[t],e,!0,!0)):g[t]=e}),e.bundles&&eachProp(e.bundles,function(e,t){each(e,function(e){e!==t&&(v[e]=t)})}),e.shim&&(eachProp(e.shim,function(e,t){isArray(e)&&(e={deps:e}),!e.exports&&!e.init||e.exportsFn||(e.exportsFn=l.makeShimExports(e)),r[t]=e}),g.shim=r),e.packages&&each(e.packages,function(e){var t;t=(e=\"string\"==typeof e?{name:e}:e).name,e.location&&(g.paths[t]=e.location),g.pkgs[t]=e.name+\"/\"+(e.main||\"main\").replace(currDirRegExp,\"\").replace(jsSuffixRegExp,\"\")}),eachProp(p,function(e,t){e.inited||e.map.unnormalized||(e.map=S(t,null,!0))}),(e.deps||e.callback)&&l.require(e.deps||[],e.callback)},makeShimExports:function(t){return function(){var e;return t.init&&(e=t.init.apply(global,arguments)),e||t.exports&&getGlobal(t.exports)}},makeRequire:function(o,a){function s(e,t,i){var r,n;return a.enableBuildCallback&&t&&isFunction(t)&&(t.__requireJsBuild=!0),\"string\"==typeof e?isFunction(t)?O(makeError(\"requireargs\",\"Invalid require call\"),i):o&&hasProp(c,e)?c[e](p[o.id]):req.get?req.get(l,e,o,s):(r=S(e,o,!1,!0).id,hasProp(m,r)?m[r]:O(makeError(\"notloaded\",'Module name \"'+r+'\" has not been loaded yet for context: '+u+(o?\"\":\". Use require([])\")))):(T(),l.nextTick(function(){T(),(n=k(S(null,o))).skipMap=a.skipMap,n.init(e,t,i,{enabled:!0}),R()}),s)}return a=a||{},mixin(s,{isBrowser:isBrowser,toUrl:function(e){var t,i=e.lastIndexOf(\".\"),r=e.split(\"/\")[0];return-1!==i&&(!(\".\"===r||\"..\"===r)||1<i)&&(t=e.substring(i,e.length),e=e.substring(0,i)),l.nameToUrl(q(e,o&&o.id,!0),t,!0)},defined:function(e){return hasProp(m,S(e,o,!1,!0).id)},specified:function(e){return e=S(e,o,!1,!0).id,hasProp(m,e)||hasProp(p,e)}}),o||(s.undef=function(i){j();var e=S(i,o,!0),t=getOwn(p,i);t.undefed=!0,E(i),delete m[i],delete n[e.url],delete r[i],eachReverse(h,function(e,t){e[0]===i&&h.splice(t,1)}),delete l.defQueueMap[i],t&&(t.events.defined&&(r[i]=t.events),P(i))}),s},enable:function(e){getOwn(p,e.id)&&k(e).enable()},completeLoad:function(e){var t,i,r,n=getOwn(g.shim,e)||{},o=n.exports;for(j();h.length;){if(null===(i=h.shift())[0]){if(i[0]=e,t)break;t=!0}else i[0]===e&&(t=!0);a(i)}if(l.defQueueMap={},r=getOwn(p,e),!t&&!hasProp(m,e)&&r&&!r.inited){if(!(!g.enforceDefine||o&&getGlobal(o)))return w(e)?void 0:O(makeError(\"nodefine\",\"No define call for \"+e,null,[e]));a([e,n.deps||[],n.exportsFn])}R()},nameToUrl:function(e,t,i){var r,n,o,a,s,u,c=getOwn(g.pkgs,e);if(c&&(e=c),u=getOwn(v,e))return l.nameToUrl(u,t,i);if(req.jsExtRegExp.test(e))a=e+(t||\"\");else{for(r=g.paths,o=(n=e.split(\"/\")).length;0<o;o-=1)if(s=getOwn(r,n.slice(0,o).join(\"/\"))){isArray(s)&&(s=s[0]),n.splice(0,o,s);break}a=n.join(\"/\"),a=(\"/\"===(a+=t||(/^data\\:|^blob\\:|\\?/.test(a)||i?\"\":\".js\")).charAt(0)||a.match(/^[\\w\\+\\.\\-]+:/)?\"\":g.baseUrl)+a}return g.urlArgs&&!/^blob\\:/.test(a)?a+g.urlArgs(e,a):a},load:function(e,t){req.load(l,e,t)},execCb:function(e,t,i,r){return t.apply(r,i)},onScriptLoad:function(e){if(\"load\"===e.type||readyRegExp.test((e.currentTarget||e.srcElement).readyState)){interactiveScript=null;var t=s(e);l.completeLoad(t.id)}},onScriptError:function(e){var i=s(e);if(!w(i.id)){var r=[];return eachProp(p,function(e,t){0!==t.indexOf(\"_@r\")&&each(e.depMaps,function(e){if(e.id===i.id)return r.push(t),!0})}),O(makeError(\"scripterror\",'Script error for \"'+i.id+(r.length?'\", needed by: '+r.join(\", \"):'\"'),e,[i.id]))}}}).require=l.makeRequire(),l}function getInteractiveScript(){return interactiveScript&&\"interactive\"===interactiveScript.readyState||eachReverse(scripts(),function(e){if(\"interactive\"===e.readyState)return interactiveScript=e}),interactiveScript}}(this,\"undefined\"==typeof setTimeout?void 0:setTimeout);\n",
       "\n",
       "    }\n",
       "    // Project sites:    https://visjs.org\n",
       "//                   https://visjs.github.io/vis-network/docs/network\n",
       "//                   https://github.com/visjs/vis-network\n",
       "// Code source:      https://unpkg.com/vis-network@9.1.0/dist/vis-network.min.js - accessed on 19.11.2021\n",
       "// Original license: Apache 2.0 (and MIT because of dual licensing)\n",
       "// Code changes:     Commented out outermost functions\n",
       "//                   Wrapped all into a require define function\n",
       "\n",
       "//                   Replaced two \"NEL\" (=unescaped newline, Unicode U+0085, which can be entered\n",
       "//                   with Ctrl+Shift+U followed be the 4 digits and Enter) symbols by \"\\n\" to\n",
       "//                   prevent browser error when using sphinx docs in combination with Jupyter\n",
       "//                   notebooks and nbsphinx. This might cause unexpected behavior in other cases.\n",
       "\n",
       "if(!require.defined(\"gravis-vis-network\")){\n",
       "  define(\"gravis-vis-network\", [\"exports\"],\n",
       "\n",
       "  /**\n",
       "   * vis-network\n",
       "   * https://visjs.github.io/vis-network/\n",
       "   *\n",
       "   * A dynamic, browser-based visualization library.\n",
       "   *\n",
       "   * @version 9.1.0\n",
       "   * @date    2021-08-29T08:47:25.454Z\n",
       "   *\n",
       "   * @copyright (c) 2011-2017 Almende B.V, http://almende.com\n",
       "   * @copyright (c) 2017-2019 visjs contributors, https://github.com/visjs\n",
       "   *\n",
       "   * @license\n",
       "   * vis.js is dual licensed under both\n",
       "   *\n",
       "   *   1. The Apache 2.0 License\n",
       "   *      http://www.apache.org/licenses/LICENSE-2.0\n",
       "   *\n",
       "   *   and\n",
       "   *\n",
       "   *   2. The MIT License\n",
       "   *      http://opensource.org/licenses/MIT\n",
       "   *\n",
       "   * vis.js may be distributed under either license.\n",
       "   */\n",
       "  // !function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?e(exports):\n",
       "  // \"function\"==typeof define&&define.amd?define([\"exports\"],e):e((t=\"undefined\"!=typeof globalThis?globalThis:t||self).vis=t.vis||{})}(this,(\n",
       "  function(t){\"use strict\";var e=\"undefined\"!=typeof globalThis?globalThis:\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:{};function i(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,\"default\")?t.default:t}function n(t,e){return t(e={exports:{}},e.exports),e.exports}var o,r,s=function(t){return t&&t.Math==Math&&t},a=s(\"object\"==typeof globalThis&&globalThis)||s(\"object\"==typeof window&&window)||s(\"object\"==typeof self&&self)||s(\"object\"==typeof e&&e)||function(){return this}()||Function(\"return this\")(),h=function(t){try{return!!t()}catch(t){return!0}},l=!h((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]})),d={}.propertyIsEnumerable,c=Object.getOwnPropertyDescriptor,u={f:c&&!d.call({1:2},1)?function(t){var e=c(this,t);return!!e&&e.enumerable}:d},f=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}},p={}.toString,v=function(t){return p.call(t).slice(8,-1)},g=\"\".split,y=h((function(){return!Object(\"z\").propertyIsEnumerable(0)}))?function(t){return\"String\"==v(t)?g.call(t,\"\"):Object(t)}:Object,m=function(t){if(null==t)throw TypeError(\"Can't call method on \"+t);return t},b=function(t){return y(m(t))},w=function(t){return\"object\"==typeof t?null!==t:\"function\"==typeof t},k={},_=function(t){return\"function\"==typeof t?t:void 0},x=function(t,e){return arguments.length<2?_(k[t])||_(a[t]):k[t]&&k[t][e]||a[t]&&a[t][e]},E=x(\"navigator\",\"userAgent\")||\"\",O=a.process,C=a.Deno,S=O&&O.versions||C&&C.version,T=S&&S.v8;T?r=(o=T.split(\".\"))[0]<4?1:o[0]+o[1]:E&&(!(o=E.match(/Edge\\/(\\d+)/))||o[1]>=74)&&(o=E.match(/Chrome\\/(\\d+)/))&&(r=o[1]);var M=r&&+r,P=!!Object.getOwnPropertySymbols&&!h((function(){var t=Symbol();return!String(t)||!(Object(t)instanceof Symbol)||!Symbol.sham&&M&&M<41})),D=P&&!Symbol.sham&&\"symbol\"==typeof Symbol.iterator,I=D?function(t){return\"symbol\"==typeof t}:function(t){var e=x(\"Symbol\");return\"function\"==typeof e&&Object(t)instanceof e},B=\"__core-js_shared__\",z=a[B]||function(t,e){try{Object.defineProperty(a,t,{value:e,configurable:!0,writable:!0})}catch(i){a[t]=e}return e}(B,{}),N=n((function(t){(t.exports=function(t,e){return z[t]||(z[t]=void 0!==e?e:{})})(\"versions\",[]).push({version:\"3.16.1\",mode:\"pure\",copyright:\"© 2021 Denis Pushkarev (zloirock.ru)\"})})),A=function(t){return Object(m(t))},F={}.hasOwnProperty,j=Object.hasOwn||function(t,e){return F.call(A(t),e)},R=0,L=Math.random(),H=function(t){return\"Symbol(\"+String(void 0===t?\"\":t)+\")_\"+(++R+L).toString(36)},W=N(\"wks\"),q=a.Symbol,V=D?q:q&&q.withoutSetter||H,U=function(t){return j(W,t)&&(P||\"string\"==typeof W[t])||(P&&j(q,t)?W[t]=q[t]:W[t]=V(\"Symbol.\"+t)),W[t]},Y=U(\"toPrimitive\"),X=function(t,e){if(!w(t)||I(t))return t;var i,n=t[Y];if(void 0!==n){if(void 0===e&&(e=\"default\"),i=n.call(t,e),!w(i)||I(i))return i;throw TypeError(\"Can't convert object to primitive value\")}return void 0===e&&(e=\"number\"),function(t,e){var i,n;if(\"string\"===e&&\"function\"==typeof(i=t.toString)&&!w(n=i.call(t)))return n;if(\"function\"==typeof(i=t.valueOf)&&!w(n=i.call(t)))return n;if(\"string\"!==e&&\"function\"==typeof(i=t.toString)&&!w(n=i.call(t)))return n;throw TypeError(\"Can't convert object to primitive value\")}(t,e)},G=function(t){var e=X(t,\"string\");return I(e)?e:String(e)},K=a.document,$=w(K)&&w(K.createElement),Z=function(t){return $?K.createElement(t):{}},Q=!l&&!h((function(){return 7!=Object.defineProperty(Z(\"div\"),\"a\",{get:function(){return 7}}).a})),J=Object.getOwnPropertyDescriptor,tt={f:l?J:function(t,e){if(t=b(t),e=G(e),Q)try{return J(t,e)}catch(t){}if(j(t,e))return f(!u.f.call(t,e),t[e])}},et=/#|\\.prototype\\./,it=function(t,e){var i=ot[nt(t)];return i==st||i!=rt&&(\"function\"==typeof e?h(e):!!e)},nt=it.normalize=function(t){return String(t).replace(et,\".\").toLowerCase()},ot=it.data={},rt=it.NATIVE=\"N\",st=it.POLYFILL=\"P\",at=it,ht=function(t){if(\"function\"!=typeof t)throw TypeError(String(t)+\" is not a function\");return t},lt=function(t,e,i){if(ht(t),void 0===e)return t;switch(i){case 0:return function(){return t.call(e)};case 1:return function(i){return t.call(e,i)};case 2:return function(i,n){return t.call(e,i,n)};case 3:return function(i,n,o){return t.call(e,i,n,o)}}return function(){return t.apply(e,arguments)}},dt=function(t){if(!w(t))throw TypeError(String(t)+\" is not an object\");return t},ct=Object.defineProperty,ut={f:l?ct:function(t,e,i){if(dt(t),e=G(e),dt(i),Q)try{return ct(t,e,i)}catch(t){}if(\"get\"in i||\"set\"in i)throw TypeError(\"Accessors not supported\");return\"value\"in i&&(t[e]=i.value),t}},ft=l?function(t,e,i){return ut.f(t,e,f(1,i))}:function(t,e,i){return t[e]=i,t},pt=tt.f,vt=function(t){var e=function(e,i,n){if(this instanceof t){switch(arguments.length){case 0:return new t;case 1:return new t(e);case 2:return new t(e,i)}return new t(e,i,n)}return t.apply(this,arguments)};return e.prototype=t.prototype,e},gt=function(t,e){var i,n,o,r,s,h,l,d,c=t.target,u=t.global,f=t.stat,p=t.proto,v=u?a:f?a[c]:(a[c]||{}).prototype,g=u?k:k[c]||(k[c]={}),y=g.prototype;for(o in e)i=!at(u?o:c+(f?\".\":\"#\")+o,t.forced)&&v&&j(v,o),s=g[o],i&&(h=t.noTargetGet?(d=pt(v,o))&&d.value:v[o]),r=i&&h?h:e[o],i&&typeof s==typeof r||(l=t.bind&&i?lt(r,a):t.wrap&&i?vt(r):p&&\"function\"==typeof r?lt(Function.call,r):r,(t.sham||r&&r.sham||s&&s.sham)&&ft(l,\"sham\",!0),g[o]=l,p&&(j(k,n=c+\"Prototype\")||ft(k,n,{}),k[n][o]=r,t.real&&y&&!y[o]&&ft(y,o,r)))},yt=Math.ceil,mt=Math.floor,bt=function(t){return isNaN(t=+t)?0:(t>0?mt:yt)(t)},wt=Math.min,kt=function(t){return t>0?wt(bt(t),9007199254740991):0},_t=Math.max,xt=Math.min,Et=function(t,e){var i=bt(t);return i<0?_t(i+e,0):xt(i,e)},Ot=function(t){return function(e,i,n){var o,r=b(e),s=kt(r.length),a=Et(n,s);if(t&&i!=i){for(;s>a;)if((o=r[a++])!=o)return!0}else for(;s>a;a++)if((t||a in r)&&r[a]===i)return t||a||0;return!t&&-1}},Ct={includes:Ot(!0),indexOf:Ot(!1)},St={},Tt=Ct.indexOf,Mt=function(t,e){var i,n=b(t),o=0,r=[];for(i in n)!j(St,i)&&j(n,i)&&r.push(i);for(;e.length>o;)j(n,i=e[o++])&&(~Tt(r,i)||r.push(i));return r},Pt=[\"constructor\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"toLocaleString\",\"toString\",\"valueOf\"],Dt=Object.keys||function(t){return Mt(t,Pt)},It={f:Object.getOwnPropertySymbols},Bt=Object.assign,zt=Object.defineProperty,Nt=!Bt||h((function(){if(l&&1!==Bt({b:1},Bt(zt({},\"a\",{enumerable:!0,get:function(){zt(this,\"b\",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var t={},e={},i=Symbol(),n=\"abcdefghijklmnopqrst\";return t[i]=7,n.split(\"\").forEach((function(t){e[t]=t})),7!=Bt({},t)[i]||Dt(Bt({},e)).join(\"\")!=n}))?function(t,e){for(var i=A(t),n=arguments.length,o=1,r=It.f,s=u.f;n>o;)for(var a,h=y(arguments[o++]),d=r?Dt(h).concat(r(h)):Dt(h),c=d.length,f=0;c>f;)a=d[f++],l&&!s.call(h,a)||(i[a]=h[a]);return i}:Bt;gt({target:\"Object\",stat:!0,forced:Object.assign!==Nt},{assign:Nt});var At=k.Object.assign,Ft=[].slice,jt={},Rt=function(t,e,i){if(!(e in jt)){for(var n=[],o=0;o<e;o++)n[o]=\"a[\"+o+\"]\";jt[e]=Function(\"C,a\",\"return new C(\"+n.join(\",\")+\")\")}return jt[e](t,i)},Lt=Function.bind||function(t){var e=ht(this),i=Ft.call(arguments,1),n=function(){var o=i.concat(Ft.call(arguments));return this instanceof n?Rt(e,o.length,o):e.apply(t,o)};return w(e.prototype)&&(n.prototype=e.prototype),n};gt({target:\"Function\",proto:!0},{bind:Lt});var Ht=function(t){return k[t+\"Prototype\"]},Wt=Ht(\"Function\").bind,qt=Function.prototype,Vt=function(t){var e=t.bind;return t===qt||t instanceof Function&&e===qt.bind?Wt:e};function Ut(t,e,i,n){t.beginPath(),t.arc(e,i,n,0,2*Math.PI,!1),t.closePath()}function Yt(t,e,i,n,o,r){var s=Math.PI/180;n-2*r<0&&(r=n/2),o-2*r<0&&(r=o/2),t.beginPath(),t.moveTo(e+r,i),t.lineTo(e+n-r,i),t.arc(e+n-r,i+r,r,270*s,360*s,!1),t.lineTo(e+n,i+o-r),t.arc(e+n-r,i+o-r,r,0,90*s,!1),t.lineTo(e+r,i+o),t.arc(e+r,i+o-r,r,90*s,180*s,!1),t.lineTo(e,i+r),t.arc(e+r,i+r,r,180*s,270*s,!1),t.closePath()}function Xt(t,e,i,n,o){var r=.5522848,s=n/2*r,a=o/2*r,h=e+n,l=i+o,d=e+n/2,c=i+o/2;t.beginPath(),t.moveTo(e,c),t.bezierCurveTo(e,c-a,d-s,i,d,i),t.bezierCurveTo(d+s,i,h,c-a,h,c),t.bezierCurveTo(h,c+a,d+s,l,d,l),t.bezierCurveTo(d-s,l,e,c+a,e,c),t.closePath()}function Gt(t,e,i,n,o){var r=o*(1/3),s=.5522848,a=n/2*s,h=r/2*s,l=e+n,d=i+r,c=e+n/2,u=i+r/2,f=i+(o-r/2),p=i+o;t.beginPath(),t.moveTo(l,u),t.bezierCurveTo(l,u+h,c+a,d,c,d),t.bezierCurveTo(c-a,d,e,u+h,e,u),t.bezierCurveTo(e,u-h,c-a,i,c,i),t.bezierCurveTo(c+a,i,l,u-h,l,u),t.lineTo(l,f),t.bezierCurveTo(l,f+h,c+a,p,c,p),t.bezierCurveTo(c-a,p,e,f+h,e,f),t.lineTo(e,u)}function Kt(t,e,i,n,o,r){t.beginPath(),t.moveTo(e,i);for(var s=r.length,a=n-e,h=o-i,l=h/a,d=Math.sqrt(a*a+h*h),c=0,u=!0,f=0,p=+r[0];d>=.1;)(p=+r[c++%s])>d&&(p=d),f=Math.sqrt(p*p/(1+l*l)),e+=f=a<0?-f:f,i+=l*f,!0===u?t.lineTo(e,i):t.moveTo(e,i),d-=p,u=!u}var $t={circle:Ut,dashedLine:Kt,database:Gt,diamond:function(t,e,i,n){t.beginPath(),t.lineTo(e,i+n),t.lineTo(e+n,i),t.lineTo(e,i-n),t.lineTo(e-n,i),t.closePath()},ellipse:Xt,ellipse_vis:Xt,hexagon:function(t,e,i,n){t.beginPath();var o=2*Math.PI/6;t.moveTo(e+n,i);for(var r=1;r<6;r++)t.lineTo(e+n*Math.cos(o*r),i+n*Math.sin(o*r));t.closePath()},roundRect:Yt,square:function(t,e,i,n){t.beginPath(),t.rect(e-n,i-n,2*n,2*n),t.closePath()},star:function(t,e,i,n){t.beginPath(),i+=.1*(n*=.82);for(var o=0;o<10;o++){var r=o%2==0?1.3*n:.5*n;t.lineTo(e+r*Math.sin(2*o*Math.PI/10),i-r*Math.cos(2*o*Math.PI/10))}t.closePath()},triangle:function(t,e,i,n){t.beginPath(),i+=.275*(n*=1.15);var o=2*n,r=o/2,s=Math.sqrt(3)/6*o,a=Math.sqrt(o*o-r*r);t.moveTo(e,i-(a-s)),t.lineTo(e+r,i+s),t.lineTo(e-r,i+s),t.lineTo(e,i-(a-s)),t.closePath()},triangleDown:function(t,e,i,n){t.beginPath(),i-=.275*(n*=1.15);var o=2*n,r=o/2,s=Math.sqrt(3)/6*o,a=Math.sqrt(o*o-r*r);t.moveTo(e,i+(a-s)),t.lineTo(e+r,i-s),t.lineTo(e-r,i-s),t.lineTo(e,i+(a-s)),t.closePath()}};var Zt=n((function(t){function e(t){if(t)return function(t){for(var i in e.prototype)t[i]=e.prototype[i];return t}(t)}t.exports=e,e.prototype.on=e.prototype.addEventListener=function(t,e){return this._callbacks=this._callbacks||{},(this._callbacks[\"$\"+t]=this._callbacks[\"$\"+t]||[]).push(e),this},e.prototype.once=function(t,e){function i(){this.off(t,i),e.apply(this,arguments)}return i.fn=e,this.on(t,i),this},e.prototype.off=e.prototype.removeListener=e.prototype.removeAllListeners=e.prototype.removeEventListener=function(t,e){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var i,n=this._callbacks[\"$\"+t];if(!n)return this;if(1==arguments.length)return delete this._callbacks[\"$\"+t],this;for(var o=0;o<n.length;o++)if((i=n[o])===e||i.fn===e){n.splice(o,1);break}return 0===n.length&&delete this._callbacks[\"$\"+t],this},e.prototype.emit=function(t){this._callbacks=this._callbacks||{};for(var e=new Array(arguments.length-1),i=this._callbacks[\"$\"+t],n=1;n<arguments.length;n++)e[n-1]=arguments[n];if(i){n=0;for(var o=(i=i.slice(0)).length;n<o;++n)i[n].apply(this,e)}return this},e.prototype.listeners=function(t){return this._callbacks=this._callbacks||{},this._callbacks[\"$\"+t]||[]},e.prototype.hasListeners=function(t){return!!this.listeners(t).length}})),Qt=function(t){if(I(t))throw TypeError(\"Cannot convert a Symbol value to a string\");return String(t)},Jt=function(t){return function(e,i){var n,o,r=Qt(m(e)),s=bt(i),a=r.length;return s<0||s>=a?t?\"\":void 0:(n=r.charCodeAt(s))<55296||n>56319||s+1===a||(o=r.charCodeAt(s+1))<56320||o>57343?t?r.charAt(s):n:t?r.slice(s,s+2):o-56320+(n-55296<<10)+65536}},te={codeAt:Jt(!1),charAt:Jt(!0)},ee=Function.toString;\"function\"!=typeof z.inspectSource&&(z.inspectSource=function(t){return ee.call(t)});var ie,ne,oe,re=z.inspectSource,se=a.WeakMap,ae=\"function\"==typeof se&&/native code/.test(re(se)),he=N(\"keys\"),le=function(t){return he[t]||(he[t]=H(t))},de=\"Object already initialized\",ce=a.WeakMap;if(ae||z.state){var ue=z.state||(z.state=new ce),fe=ue.get,pe=ue.has,ve=ue.set;ie=function(t,e){if(pe.call(ue,t))throw new TypeError(de);return e.facade=t,ve.call(ue,t,e),e},ne=function(t){return fe.call(ue,t)||{}},oe=function(t){return pe.call(ue,t)}}else{var ge=le(\"state\");St[ge]=!0,ie=function(t,e){if(j(t,ge))throw new TypeError(de);return e.facade=t,ft(t,ge,e),e},ne=function(t){return j(t,ge)?t[ge]:{}},oe=function(t){return j(t,ge)}}var ye,me,be,we={set:ie,get:ne,has:oe,enforce:function(t){return oe(t)?ne(t):ie(t,{})},getterFor:function(t){return function(e){var i;if(!w(e)||(i=ne(e)).type!==t)throw TypeError(\"Incompatible receiver, \"+t+\" required\");return i}}},ke=!h((function(){function t(){}return t.prototype.constructor=null,Object.getPrototypeOf(new t)!==t.prototype})),_e=le(\"IE_PROTO\"),xe=Object.prototype,Ee=ke?Object.getPrototypeOf:function(t){return t=A(t),j(t,_e)?t[_e]:\"function\"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?xe:null},Oe=U(\"iterator\"),Ce=!1;[].keys&&(\"next\"in(be=[].keys())?(me=Ee(Ee(be)))!==Object.prototype&&(ye=me):Ce=!0);var Se=null==ye||h((function(){var t={};return ye[Oe].call(t)!==t}));Se&&(ye={}),Se&&!j(ye,Oe)&&ft(ye,Oe,(function(){return this}));var Te,Me={IteratorPrototype:ye,BUGGY_SAFARI_ITERATORS:Ce},Pe=l?Object.defineProperties:function(t,e){dt(t);for(var i,n=Dt(e),o=n.length,r=0;o>r;)ut.f(t,i=n[r++],e[i]);return t},De=x(\"document\",\"documentElement\"),Ie=le(\"IE_PROTO\"),Be=function(){},ze=function(t){return\"<script>\"+t+\"</\"+\"script>\"},Ne=function(t){t.write(ze(\"\")),t.close();var e=t.parentWindow.Object;return t=null,e},Ae=function(){try{Te=new ActiveXObject(\"htmlfile\")}catch(t){}Ae=document.domain&&Te?Ne(Te):function(){var t,e=Z(\"iframe\");if(e.style)return e.style.display=\"none\",De.appendChild(e),e.src=String(\"javascript:\"),(t=e.contentWindow.document).open(),t.write(ze(\"document.F=Object\")),t.close(),t.F}()||Ne(Te);for(var t=Pt.length;t--;)delete Ae.prototype[Pt[t]];return Ae()};St[Ie]=!0;var Fe=Object.create||function(t,e){var i;return null!==t?(Be.prototype=dt(t),i=new Be,Be.prototype=null,i[Ie]=t):i=Ae(),void 0===e?i:Pe(i,e)},je={};je[U(\"toStringTag\")]=\"z\";var Re=\"[object z]\"===String(je),Le=U(\"toStringTag\"),He=\"Arguments\"==v(function(){return arguments}()),We=Re?v:function(t){var e,i,n;return void 0===t?\"Undefined\":null===t?\"Null\":\"string\"==typeof(i=function(t,e){try{return t[e]}catch(t){}}(e=Object(t),Le))?i:He?v(e):\"Object\"==(n=v(e))&&\"function\"==typeof e.callee?\"Arguments\":n},qe=Re?{}.toString:function(){return\"[object \"+We(this)+\"]\"},Ve=ut.f,Ue=U(\"toStringTag\"),Ye=function(t,e,i,n){if(t){var o=i?t:t.prototype;j(o,Ue)||Ve(o,Ue,{configurable:!0,value:e}),n&&!Re&&ft(o,\"toString\",qe)}},Xe={},Ge=Me.IteratorPrototype,Ke=function(){return this},$e=Object.setPrototypeOf||(\"__proto__\"in{}?function(){var t,e=!1,i={};try{(t=Object.getOwnPropertyDescriptor(Object.prototype,\"__proto__\").set).call(i,[]),e=i instanceof Array}catch(t){}return function(i,n){return dt(i),function(t){if(!w(t)&&null!==t)throw TypeError(\"Can't set \"+String(t)+\" as a prototype\")}(n),e?t.call(i,n):i.__proto__=n,i}}():void 0),Ze=function(t,e,i,n){n&&n.enumerable?t[e]=i:ft(t,e,i)},Qe=Me.IteratorPrototype,Je=Me.BUGGY_SAFARI_ITERATORS,ti=U(\"iterator\"),ei=\"keys\",ii=\"values\",ni=\"entries\",oi=function(){return this},ri=function(t,e,i,n,o,r,s){!function(t,e,i){var n=e+\" Iterator\";t.prototype=Fe(Ge,{next:f(1,i)}),Ye(t,n,!1,!0),Xe[n]=Ke}(i,e,n);var a,h,l,d=function(t){if(t===o&&g)return g;if(!Je&&t in p)return p[t];switch(t){case ei:case ii:case ni:return function(){return new i(this,t)}}return function(){return new i(this)}},c=e+\" Iterator\",u=!1,p=t.prototype,v=p[ti]||p[\"@@iterator\"]||o&&p[o],g=!Je&&v||d(o),y=\"Array\"==e&&p.entries||v;if(y&&(a=Ee(y.call(new t)),Qe!==Object.prototype&&a.next&&(Ye(a,c,!0,!0),Xe[c]=oi)),o==ii&&v&&v.name!==ii&&(u=!0,g=function(){return v.call(this)}),s&&p[ti]!==g&&ft(p,ti,g),Xe[e]=g,o)if(h={values:d(ii),keys:r?g:d(ei),entries:d(ni)},s)for(l in h)(Je||u||!(l in p))&&Ze(p,l,h[l]);else gt({target:e,proto:!0,forced:Je||u},h);return h},si=te.charAt,ai=\"String Iterator\",hi=we.set,li=we.getterFor(ai);ri(String,\"String\",(function(t){hi(this,{type:ai,string:Qt(t),index:0})}),(function(){var t,e=li(this),i=e.string,n=e.index;return n>=i.length?{value:void 0,done:!0}:(t=si(i,n),e.index+=t.length,{value:t,done:!1})}));var di=function(t){var e=t.return;if(void 0!==e)return dt(e.call(t)).value},ci=function(t,e,i,n){try{return n?e(dt(i)[0],i[1]):e(i)}catch(e){throw di(t),e}},ui=U(\"iterator\"),fi=Array.prototype,pi=function(t){return void 0!==t&&(Xe.Array===t||fi[ui]===t)},vi=function(t,e,i){var n=G(e);n in t?ut.f(t,n,f(0,i)):t[n]=i},gi=U(\"iterator\"),yi=function(t){if(null!=t)return t[gi]||t[\"@@iterator\"]||Xe[We(t)]},mi=U(\"iterator\"),bi=!1;try{var wi=0,ki={next:function(){return{done:!!wi++}},return:function(){bi=!0}};ki[mi]=function(){return this},Array.from(ki,(function(){throw 2}))}catch(t){}var _i=!function(t,e){if(!e&&!bi)return!1;var i=!1;try{var n={};n[mi]=function(){return{next:function(){return{done:i=!0}}}},t(n)}catch(t){}return i}((function(t){Array.from(t)}));gt({target:\"Array\",stat:!0,forced:_i},{from:function(t){var e,i,n,o,r,s,a=A(t),h=\"function\"==typeof this?this:Array,l=arguments.length,d=l>1?arguments[1]:void 0,c=void 0!==d,u=yi(a),f=0;if(c&&(d=lt(d,l>2?arguments[2]:void 0,2)),null==u||h==Array&&pi(u))for(i=new h(e=kt(a.length));e>f;f++)s=c?d(a[f],f):a[f],vi(i,f,s);else for(r=(o=u.call(a)).next,i=new h;!(n=r.call(o)).done;f++)s=c?ci(o,d,[n.value,f],!0):n.value,vi(i,f,s);return i.length=f,i}});var xi=k.Array.from,Ei=xi,Oi=\"Array Iterator\",Ci=we.set,Si=we.getterFor(Oi);ri(Array,\"Array\",(function(t,e){Ci(this,{type:Oi,target:b(t),index:0,kind:e})}),(function(){var t=Si(this),e=t.target,i=t.kind,n=t.index++;return!e||n>=e.length?(t.target=void 0,{value:void 0,done:!0}):\"keys\"==i?{value:n,done:!1}:\"values\"==i?{value:e[n],done:!1}:{value:[n,e[n]],done:!1}}),\"values\"),Xe.Arguments=Xe.Array;var Ti=yi,Mi=U(\"toStringTag\");for(var Pi in{CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}){var Di=a[Pi],Ii=Di&&Di.prototype;Ii&&We(Ii)!==Mi&&ft(Ii,Mi,Pi),Xe[Pi]=Xe.Array}var Bi=Ti,zi=Array.isArray||function(t){return\"Array\"==v(t)},Ni=Pt.concat(\"length\",\"prototype\"),Ai={f:Object.getOwnPropertyNames||function(t){return Mt(t,Ni)}},Fi=Ai.f,ji={}.toString,Ri=\"object\"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],Li={f:function(t){return Ri&&\"[object Window]\"==ji.call(t)?function(t){try{return Fi(t)}catch(t){return Ri.slice()}}(t):Fi(b(t))}},Hi={f:U},Wi=ut.f,qi=function(t){var e=k.Symbol||(k.Symbol={});j(e,t)||Wi(e,t,{value:Hi.f(t)})},Vi=U(\"species\"),Ui=function(t,e){return new(function(t){var e;return zi(t)&&(\"function\"!=typeof(e=t.constructor)||e!==Array&&!zi(e.prototype)?w(e)&&null===(e=e[Vi])&&(e=void 0):e=void 0),void 0===e?Array:e}(t))(0===e?0:e)},Yi=[].push,Xi=function(t){var e=1==t,i=2==t,n=3==t,o=4==t,r=6==t,s=7==t,a=5==t||r;return function(h,l,d,c){for(var u,f,p=A(h),v=y(p),g=lt(l,d,3),m=kt(v.length),b=0,w=c||Ui,k=e?w(h,m):i||s?w(h,0):void 0;m>b;b++)if((a||b in v)&&(f=g(u=v[b],b,p),t))if(e)k[b]=f;else if(f)switch(t){case 3:return!0;case 5:return u;case 6:return b;case 2:Yi.call(k,u)}else switch(t){case 4:return!1;case 7:Yi.call(k,u)}return r?-1:n||o?o:k}},Gi={forEach:Xi(0),map:Xi(1),filter:Xi(2),some:Xi(3),every:Xi(4),find:Xi(5),findIndex:Xi(6),filterReject:Xi(7)},Ki=Gi.forEach,$i=le(\"hidden\"),Zi=\"Symbol\",Qi=U(\"toPrimitive\"),Ji=we.set,tn=we.getterFor(Zi),en=Object.prototype,nn=a.Symbol,on=x(\"JSON\",\"stringify\"),rn=tt.f,sn=ut.f,an=Li.f,hn=u.f,ln=N(\"symbols\"),dn=N(\"op-symbols\"),cn=N(\"string-to-symbol-registry\"),un=N(\"symbol-to-string-registry\"),fn=N(\"wks\"),pn=a.QObject,vn=!pn||!pn.prototype||!pn.prototype.findChild,gn=l&&h((function(){return 7!=Fe(sn({},\"a\",{get:function(){return sn(this,\"a\",{value:7}).a}})).a}))?function(t,e,i){var n=rn(en,e);n&&delete en[e],sn(t,e,i),n&&t!==en&&sn(en,e,n)}:sn,yn=function(t,e){var i=ln[t]=Fe(nn.prototype);return Ji(i,{type:Zi,tag:t,description:e}),l||(i.description=e),i},mn=function(t,e,i){t===en&&mn(dn,e,i),dt(t);var n=G(e);return dt(i),j(ln,n)?(i.enumerable?(j(t,$i)&&t[$i][n]&&(t[$i][n]=!1),i=Fe(i,{enumerable:f(0,!1)})):(j(t,$i)||sn(t,$i,f(1,{})),t[$i][n]=!0),gn(t,n,i)):sn(t,n,i)},bn=function(t,e){dt(t);var i=b(e),n=Dt(i).concat(xn(i));return Ki(n,(function(e){l&&!wn.call(i,e)||mn(t,e,i[e])})),t},wn=function(t){var e=G(t),i=hn.call(this,e);return!(this===en&&j(ln,e)&&!j(dn,e))&&(!(i||!j(this,e)||!j(ln,e)||j(this,$i)&&this[$i][e])||i)},kn=function(t,e){var i=b(t),n=G(e);if(i!==en||!j(ln,n)||j(dn,n)){var o=rn(i,n);return!o||!j(ln,n)||j(i,$i)&&i[$i][n]||(o.enumerable=!0),o}},_n=function(t){var e=an(b(t)),i=[];return Ki(e,(function(t){j(ln,t)||j(St,t)||i.push(t)})),i},xn=function(t){var e=t===en,i=an(e?dn:b(t)),n=[];return Ki(i,(function(t){!j(ln,t)||e&&!j(en,t)||n.push(ln[t])})),n};if(P||(Ze((nn=function(){if(this instanceof nn)throw TypeError(\"Symbol is not a constructor\");var t=arguments.length&&void 0!==arguments[0]?Qt(arguments[0]):void 0,e=H(t),i=function(t){this===en&&i.call(dn,t),j(this,$i)&&j(this[$i],e)&&(this[$i][e]=!1),gn(this,e,f(1,t))};return l&&vn&&gn(en,e,{configurable:!0,set:i}),yn(e,t)}).prototype,\"toString\",(function(){return tn(this).tag})),Ze(nn,\"withoutSetter\",(function(t){return yn(H(t),t)})),u.f=wn,ut.f=mn,tt.f=kn,Ai.f=Li.f=_n,It.f=xn,Hi.f=function(t){return yn(U(t),t)},l&&sn(nn.prototype,\"description\",{configurable:!0,get:function(){return tn(this).description}})),gt({global:!0,wrap:!0,forced:!P,sham:!P},{Symbol:nn}),Ki(Dt(fn),(function(t){qi(t)})),gt({target:Zi,stat:!0,forced:!P},{for:function(t){var e=Qt(t);if(j(cn,e))return cn[e];var i=nn(e);return cn[e]=i,un[i]=e,i},keyFor:function(t){if(!I(t))throw TypeError(t+\" is not a symbol\");if(j(un,t))return un[t]},useSetter:function(){vn=!0},useSimple:function(){vn=!1}}),gt({target:\"Object\",stat:!0,forced:!P,sham:!l},{create:function(t,e){return void 0===e?Fe(t):bn(Fe(t),e)},defineProperty:mn,defineProperties:bn,getOwnPropertyDescriptor:kn}),gt({target:\"Object\",stat:!0,forced:!P},{getOwnPropertyNames:_n,getOwnPropertySymbols:xn}),gt({target:\"Object\",stat:!0,forced:h((function(){It.f(1)}))},{getOwnPropertySymbols:function(t){return It.f(A(t))}}),on){var En=!P||h((function(){var t=nn();return\"[null]\"!=on([t])||\"{}\"!=on({a:t})||\"{}\"!=on(Object(t))}));gt({target:\"JSON\",stat:!0,forced:En},{stringify:function(t,e,i){for(var n,o=[t],r=1;arguments.length>r;)o.push(arguments[r++]);if(n=e,(w(e)||void 0!==t)&&!I(t))return zi(e)||(e=function(t,e){if(\"function\"==typeof n&&(e=n.call(this,t,e)),!I(e))return e}),o[1]=e,on.apply(null,o)}})}nn.prototype[Qi]||ft(nn.prototype,Qi,nn.prototype.valueOf),Ye(nn,Zi),St[$i]=!0;var On=k.Object.getOwnPropertySymbols,Cn=tt.f,Sn=h((function(){Cn(1)}));gt({target:\"Object\",stat:!0,forced:!l||Sn,sham:!l},{getOwnPropertyDescriptor:function(t,e){return Cn(b(t),e)}});var Tn=n((function(t){var e=k.Object,i=t.exports=function(t,i){return e.getOwnPropertyDescriptor(t,i)};e.getOwnPropertyDescriptor.sham&&(i.sham=!0)})),Mn=Tn,Pn=x(\"Reflect\",\"ownKeys\")||function(t){var e=Ai.f(dt(t)),i=It.f;return i?e.concat(i(t)):e};gt({target:\"Object\",stat:!0,sham:!l},{getOwnPropertyDescriptors:function(t){for(var e,i,n=b(t),o=tt.f,r=Pn(n),s={},a=0;r.length>a;)void 0!==(i=o(n,e=r[a++]))&&vi(s,e,i);return s}});var Dn=k.Object.getOwnPropertyDescriptors;gt({target:\"Object\",stat:!0,forced:!l,sham:!l},{defineProperties:Pe});var In=n((function(t){var e=k.Object,i=t.exports=function(t,i){return e.defineProperties(t,i)};e.defineProperties.sham&&(i.sham=!0)}));gt({target:\"Object\",stat:!0,forced:!l,sham:!l},{defineProperty:ut.f});var Bn=n((function(t){var e=k.Object,i=t.exports=function(t,i,n){return e.defineProperty(t,i,n)};e.defineProperty.sham&&(i.sham=!0)})),zn=Bn,Nn=i(n((function(t){t.exports=function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")},t.exports.default=t.exports,t.exports.__esModule=!0}))),An=Bn,Fn=i(n((function(t){function e(t,e){for(var i=0;i<e.length;i++){var n=e[i];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),An(t,n.key,n)}}t.exports=function(t,i,n){return i&&e(t.prototype,i),n&&e(t,n),t},t.exports.default=t.exports,t.exports.__esModule=!0}))),jn=i(n((function(t){t.exports=function(t,e,i){return e in t?An(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[e]=i,t},t.exports.default=t.exports,t.exports.__esModule=!0})));gt({target:\"Array\",stat:!0},{isArray:zi});var Rn=k.Array.isArray,Ln=Rn,Hn=n((function(t){t.exports=function(t){if(Ln(t))return t},t.exports.default=t.exports,t.exports.__esModule=!0}));i(Hn);var Wn=U(\"species\"),qn=function(t){return M>=51||!h((function(){var e=[];return(e.constructor={})[Wn]=function(){return{foo:1}},1!==e[t](Boolean).foo}))},Vn=U(\"isConcatSpreadable\"),Un=9007199254740991,Yn=\"Maximum allowed index exceeded\",Xn=M>=51||!h((function(){var t=[];return t[Vn]=!1,t.concat()[0]!==t})),Gn=qn(\"concat\"),Kn=function(t){if(!w(t))return!1;var e=t[Vn];return void 0!==e?!!e:zi(t)};gt({target:\"Array\",proto:!0,forced:!Xn||!Gn},{concat:function(t){var e,i,n,o,r,s=A(this),a=Ui(s,0),h=0;for(e=-1,n=arguments.length;e<n;e++)if(Kn(r=-1===e?s:arguments[e])){if(h+(o=kt(r.length))>Un)throw TypeError(Yn);for(i=0;i<o;i++,h++)i in r&&vi(a,h,r[i])}else{if(h>=Un)throw TypeError(Yn);vi(a,h++,r)}return a.length=h,a}}),qi(\"asyncIterator\"),qi(\"hasInstance\"),qi(\"isConcatSpreadable\"),qi(\"iterator\"),qi(\"match\"),qi(\"matchAll\"),qi(\"replace\"),qi(\"search\"),qi(\"species\"),qi(\"split\"),qi(\"toPrimitive\"),qi(\"toStringTag\"),qi(\"unscopables\"),Ye(a.JSON,\"JSON\",!0);var $n=k.Symbol;qi(\"asyncDispose\"),qi(\"dispose\"),qi(\"matcher\"),qi(\"metadata\"),qi(\"observable\"),qi(\"patternMatch\"),qi(\"replaceAll\");var Zn=$n,Qn=n((function(t){t.exports=function(t,e){var i=null==t?null:void 0!==Zn&&Bi(t)||t[\"@@iterator\"];if(null!=i){var n,o,r=[],s=!0,a=!1;try{for(i=i.call(t);!(s=(n=i.next()).done)&&(r.push(n.value),!e||r.length!==e);s=!0);}catch(t){a=!0,o=t}finally{try{s||null==i.return||i.return()}finally{if(a)throw o}}return r}},t.exports.default=t.exports,t.exports.__esModule=!0}));i(Qn);var Jn=qn(\"slice\"),to=U(\"species\"),eo=[].slice,io=Math.max;gt({target:\"Array\",proto:!0,forced:!Jn},{slice:function(t,e){var i,n,o,r=b(this),s=kt(r.length),a=Et(t,s),h=Et(void 0===e?s:e,s);if(zi(r)&&(\"function\"!=typeof(i=r.constructor)||i!==Array&&!zi(i.prototype)?w(i)&&null===(i=i[to])&&(i=void 0):i=void 0,i===Array||void 0===i))return eo.call(r,a,h);for(n=new(void 0===i?Array:i)(io(h-a,0)),o=0;a<h;a++,o++)a in r&&vi(n,o,r[a]);return n.length=o,n}});var no=Ht(\"Array\").slice,oo=Array.prototype,ro=function(t){var e=t.slice;return t===oo||t instanceof Array&&e===oo.slice?no:e},so=ro,ao=xi,ho=n((function(t){t.exports=function(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n},t.exports.default=t.exports,t.exports.__esModule=!0}));i(ho);var lo=n((function(t){t.exports=function(t,e){var i;if(t){if(\"string\"==typeof t)return ho(t,e);var n=so(i=Object.prototype.toString.call(t)).call(i,8,-1);return\"Object\"===n&&t.constructor&&(n=t.constructor.name),\"Map\"===n||\"Set\"===n?ao(t):\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?ho(t,e):void 0}},t.exports.default=t.exports,t.exports.__esModule=!0}));i(lo);var co=n((function(t){t.exports=function(){throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")},t.exports.default=t.exports,t.exports.__esModule=!0}));i(co);var uo=i(n((function(t){t.exports=function(t,e){return Hn(t)||Qn(t,e)||lo(t,e)||co()},t.exports.default=t.exports,t.exports.__esModule=!0}))),fo=Hi.f(\"iterator\"),po=fo,vo=n((function(t){function e(i){return\"function\"==typeof Zn&&\"symbol\"==typeof po?(t.exports=e=function(t){return typeof t},t.exports.default=t.exports,t.exports.__esModule=!0):(t.exports=e=function(t){return t&&\"function\"==typeof Zn&&t.constructor===Zn&&t!==Zn.prototype?\"symbol\":typeof t},t.exports.default=t.exports,t.exports.__esModule=!0),e(i)}t.exports=e,t.exports.default=t.exports,t.exports.__esModule=!0})),go=i(vo),yo=n((function(t){t.exports=function(t){if(Ln(t))return ho(t)},t.exports.default=t.exports,t.exports.__esModule=!0}));i(yo);var mo=n((function(t){t.exports=function(t){if(void 0!==Zn&&null!=Bi(t)||null!=t[\"@@iterator\"])return ao(t)},t.exports.default=t.exports,t.exports.__esModule=!0}));i(mo);var bo=n((function(t){t.exports=function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")},t.exports.default=t.exports,t.exports.__esModule=!0}));i(bo);var wo=i(n((function(t){t.exports=function(t){return yo(t)||mo(t)||lo(t)||bo()},t.exports.default=t.exports,t.exports.__esModule=!0}))),ko=$n,_o=Ht(\"Array\").concat,xo=Array.prototype,Eo=function(t){var e=t.concat;return t===xo||t instanceof Array&&e===xo.concat?_o:e},Oo=ro;gt({target:\"Reflect\",stat:!0},{ownKeys:Pn});var Co=k.Reflect.ownKeys,So=Rn,To=Gi.map,Mo=qn(\"map\");gt({target:\"Array\",proto:!0,forced:!Mo},{map:function(t){return To(this,t,arguments.length>1?arguments[1]:void 0)}});var Po=Ht(\"Array\").map,Do=Array.prototype,Io=function(t){var e=t.map;return t===Do||t instanceof Array&&e===Do.map?Po:e},Bo=h((function(){Dt(1)}));gt({target:\"Object\",stat:!0,forced:Bo},{keys:function(t){return Dt(A(t))}});var zo=k.Object.keys;gt({target:\"Date\",stat:!0},{now:function(){return(new Date).getTime()}});var No=k.Date.now,Ao=function(t,e){var i=[][t];return!!i&&h((function(){i.call(null,e||function(){throw 1},1)}))},Fo=Gi.forEach,jo=Ao(\"forEach\")?[].forEach:function(t){return Fo(this,t,arguments.length>1?arguments[1]:void 0)};gt({target:\"Array\",proto:!0,forced:[].forEach!=jo},{forEach:jo});var Ro=Ht(\"Array\").forEach,Lo=Array.prototype,Ho={DOMTokenList:!0,NodeList:!0},Wo=function(t){var e=t.forEach;return t===Lo||t instanceof Array&&e===Lo.forEach||Ho.hasOwnProperty(We(t))?Ro:e},qo=[].reverse,Vo=[1,2];gt({target:\"Array\",proto:!0,forced:String(Vo)===String(Vo.reverse())},{reverse:function(){return zi(this)&&(this.length=this.length),qo.call(this)}});var Uo=Ht(\"Array\").reverse,Yo=Array.prototype,Xo=function(t){var e=t.reverse;return t===Yo||t instanceof Array&&e===Yo.reverse?Uo:e},Go=qn(\"splice\"),Ko=Math.max,$o=Math.min,Zo=9007199254740991,Qo=\"Maximum allowed length exceeded\";gt({target:\"Array\",proto:!0,forced:!Go},{splice:function(t,e){var i,n,o,r,s,a,h=A(this),l=kt(h.length),d=Et(t,l),c=arguments.length;if(0===c?i=n=0:1===c?(i=0,n=l-d):(i=c-2,n=$o(Ko(bt(e),0),l-d)),l+i-n>Zo)throw TypeError(Qo);for(o=Ui(h,n),r=0;r<n;r++)(s=d+r)in h&&vi(o,r,h[s]);if(o.length=n,i<n){for(r=d;r<l-n;r++)a=r+i,(s=r+n)in h?h[a]=h[s]:delete h[a];for(r=l;r>l-n+i;r--)delete h[r-1]}else if(i>n)for(r=l-n;r>d;r--)a=r+i-1,(s=r+n-1)in h?h[a]=h[s]:delete h[a];for(r=0;r<i;r++)h[r+d]=arguments[r+2];return h.length=l-n+i,o}});var Jo=Ht(\"Array\").splice,tr=Array.prototype,er=function(t){var e=t.splice;return t===tr||t instanceof Array&&e===tr.splice?Jo:e},ir=Ct.includes;gt({target:\"Array\",proto:!0},{includes:function(t){return ir(this,t,arguments.length>1?arguments[1]:void 0)}});var nr=Ht(\"Array\").includes,or=U(\"match\"),rr=function(t){if(function(t){var e;return w(t)&&(void 0!==(e=t[or])?!!e:\"RegExp\"==v(t))}(t))throw TypeError(\"The method doesn't accept regular expressions\");return t},sr=U(\"match\");gt({target:\"String\",proto:!0,forced:!function(t){var e=/./;try{\"/./\"[t](e)}catch(i){try{return e[sr]=!1,\"/./\"[t](e)}catch(t){}}return!1}(\"includes\")},{includes:function(t){return!!~Qt(m(this)).indexOf(Qt(rr(t)),arguments.length>1?arguments[1]:void 0)}});var ar=Ht(\"String\").includes,hr=Array.prototype,lr=String.prototype,dr=function(t){var e=t.includes;return t===hr||t instanceof Array&&e===hr.includes?nr:\"string\"==typeof t||t===lr||t instanceof String&&e===lr.includes?ar:e},cr=h((function(){Ee(1)}));gt({target:\"Object\",stat:!0,forced:cr,sham:!ke},{getPrototypeOf:function(t){return Ee(A(t))}});var ur=k.Object.getPrototypeOf,fr=ur,pr=Gi.filter,vr=qn(\"filter\");gt({target:\"Array\",proto:!0,forced:!vr},{filter:function(t){return pr(this,t,arguments.length>1?arguments[1]:void 0)}});var gr=Ht(\"Array\").filter,yr=Array.prototype,mr=function(t){var e=t.filter;return t===yr||t instanceof Array&&e===yr.filter?gr:e},br=u.f,wr=function(t){return function(e){for(var i,n=b(e),o=Dt(n),r=o.length,s=0,a=[];r>s;)i=o[s++],l&&!br.call(n,i)||a.push(t?[i,n[i]]:n[i]);return a}},kr={entries:wr(!0),values:wr(!1)}.values;gt({target:\"Object\",stat:!0},{values:function(t){return kr(t)}});var _r=k.Object.values,xr=\"\\t\\n\\v\\f\\r                　\\u2028\\u2029\\ufeff\",Er=\"[\"+xr+\"]\",Or=RegExp(\"^\"+Er+Er+\"*\"),Cr=RegExp(Er+Er+\"*$\"),Sr=function(t){return function(e){var i=Qt(m(e));return 1&t&&(i=i.replace(Or,\"\")),2&t&&(i=i.replace(Cr,\"\")),i}},Tr={start:Sr(1),end:Sr(2),trim:Sr(3)},Mr=Tr.trim,Pr=a.parseInt,Dr=/^[+-]?0[Xx]/,Ir=8!==Pr(xr+\"08\")||22!==Pr(xr+\"0x16\")?function(t,e){var i=Mr(Qt(t));return Pr(i,e>>>0||(Dr.test(i)?16:10))}:Pr;gt({global:!0,forced:parseInt!=Ir},{parseInt:Ir});var Br=k.parseInt,zr=Ct.indexOf,Nr=[].indexOf,Ar=!!Nr&&1/[1].indexOf(1,-0)<0,Fr=Ao(\"indexOf\");gt({target:\"Array\",proto:!0,forced:Ar||!Fr},{indexOf:function(t){return Ar?Nr.apply(this,arguments)||0:zr(this,t,arguments.length>1?arguments[1]:void 0)}});var jr,Rr=Ht(\"Array\").indexOf,Lr=Array.prototype,Hr=function(t){var e=t.indexOf;return t===Lr||t instanceof Array&&e===Lr.indexOf?Rr:e},Wr=Tr.trim;gt({target:\"String\",proto:!0,forced:(jr=\"trim\",h((function(){return!!xr[jr]()||\"​\\n᠎\"!=\"​\\n᠎\"[jr]()||xr[jr].name!==jr})))},{trim:function(){return Wr(this)}});var qr=Ht(\"String\").trim,Vr=String.prototype,Ur=function(t){var e=t.trim;return\"string\"==typeof t||t===Vr||t instanceof String&&e===Vr.trim?qr:e};gt({target:\"Object\",stat:!0,sham:!l},{create:Fe});var Yr=k.Object,Xr=function(t,e){return Yr.create(t,e)},Gr=Xr,Kr=x(\"JSON\",\"stringify\"),$r=/[\\uD800-\\uDFFF]/g,Zr=/^[\\uD800-\\uDBFF]$/,Qr=/^[\\uDC00-\\uDFFF]$/,Jr=function(t,e,i){var n=i.charAt(e-1),o=i.charAt(e+1);return Zr.test(t)&&!Qr.test(o)||Qr.test(t)&&!Zr.test(n)?\"\\\\u\"+t.charCodeAt(0).toString(16):t},ts=h((function(){return'\"\\\\udf06\\\\ud834\"'!==Kr(\"\\udf06\\ud834\")||'\"\\\\udead\"'!==Kr(\"\\udead\")}));Kr&&gt({target:\"JSON\",stat:!0,forced:ts},{stringify:function(t,e,i){var n=Kr.apply(null,arguments);return\"string\"==typeof n?n.replace($r,Jr):n}}),k.JSON||(k.JSON={stringify:JSON.stringify});var es=function(t,e,i){return k.JSON.stringify.apply(null,arguments)},is=[].slice,ns=/MSIE .\\./.test(E),os=function(t){return function(e,i){var n=arguments.length>2,o=n?is.call(arguments,2):void 0;return t(n?function(){(\"function\"==typeof e?e:Function(e)).apply(this,o)}:e,i)}};gt({global:!0,bind:!0,forced:ns},{setTimeout:os(a.setTimeout),setInterval:os(a.setInterval)});var rs=k.setTimeout;gt({target:\"Array\",proto:!0},{fill:function(t){for(var e=A(this),i=kt(e.length),n=arguments.length,o=Et(n>1?arguments[1]:void 0,i),r=n>2?arguments[2]:void 0,s=void 0===r?i:Et(r,i);s>o;)e[o++]=t;return e}});var ss=Ht(\"Array\").fill,as=Array.prototype,hs=function(t){var e=t.fill;return t===as||t instanceof Array&&e===as.fill?ss:e};function ls(){return(ls=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var i=arguments[e];for(var n in i)Object.prototype.hasOwnProperty.call(i,n)&&(t[n]=i[n])}return t}).apply(this,arguments)}function ds(t,e){t.prototype=Object.create(e.prototype),t.prototype.constructor=t,t.__proto__=e}function cs(t){if(void 0===t)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return t}var us,fs=\"function\"!=typeof Object.assign?function(t){if(null==t)throw new TypeError(\"Cannot convert undefined or null to object\");for(var e=Object(t),i=1;i<arguments.length;i++){var n=arguments[i];if(null!=n)for(var o in n)n.hasOwnProperty(o)&&(e[o]=n[o])}return e}:Object.assign,ps=[\"\",\"webkit\",\"Moz\",\"MS\",\"ms\",\"o\"],vs=\"undefined\"==typeof document?{style:{}}:document.createElement(\"div\"),gs=Math.round,ys=Math.abs,ms=Date.now;function bs(t,e){for(var i,n,o=e[0].toUpperCase()+e.slice(1),r=0;r<ps.length;){if((n=(i=ps[r])?i+o:e)in t)return n;r++}}us=\"undefined\"==typeof window?{}:window;var ws=bs(vs.style,\"touchAction\"),ks=void 0!==ws;var _s=\"compute\",xs=\"auto\",Es=\"manipulation\",Os=\"none\",Cs=\"pan-x\",Ss=\"pan-y\",Ts=function(){if(!ks)return!1;var t={},e=us.CSS&&us.CSS.supports;return[\"auto\",\"manipulation\",\"pan-y\",\"pan-x\",\"pan-x pan-y\",\"none\"].forEach((function(i){return t[i]=!e||us.CSS.supports(\"touch-action\",i)})),t}(),Ms=\"ontouchstart\"in us,Ps=void 0!==bs(us,\"PointerEvent\"),Ds=Ms&&/mobile|tablet|ip(ad|hone|od)|android/i.test(navigator.userAgent),Is=\"touch\",Bs=\"mouse\",zs=16,Ns=24,As=[\"x\",\"y\"],Fs=[\"clientX\",\"clientY\"];function js(t,e,i){var n;if(t)if(t.forEach)t.forEach(e,i);else if(void 0!==t.length)for(n=0;n<t.length;)e.call(i,t[n],n,t),n++;else for(n in t)t.hasOwnProperty(n)&&e.call(i,t[n],n,t)}function Rs(t,e){return\"function\"==typeof t?t.apply(e&&e[0]||void 0,e):t}function Ls(t,e){return t.indexOf(e)>-1}var Hs=function(){function t(t,e){this.manager=t,this.set(e)}var e=t.prototype;return e.set=function(t){t===_s&&(t=this.compute()),ks&&this.manager.element.style&&Ts[t]&&(this.manager.element.style[ws]=t),this.actions=t.toLowerCase().trim()},e.update=function(){this.set(this.manager.options.touchAction)},e.compute=function(){var t=[];return js(this.manager.recognizers,(function(e){Rs(e.options.enable,[e])&&(t=t.concat(e.getTouchAction()))})),function(t){if(Ls(t,Os))return Os;var e=Ls(t,Cs),i=Ls(t,Ss);return e&&i?Os:e||i?e?Cs:Ss:Ls(t,Es)?Es:xs}(t.join(\" \"))},e.preventDefaults=function(t){var e=t.srcEvent,i=t.offsetDirection;if(this.manager.session.prevented)e.preventDefault();else{var n=this.actions,o=Ls(n,Os)&&!Ts.none,r=Ls(n,Ss)&&!Ts[\"pan-y\"],s=Ls(n,Cs)&&!Ts[\"pan-x\"];if(o){var a=1===t.pointers.length,h=t.distance<2,l=t.deltaTime<250;if(a&&h&&l)return}if(!s||!r)return o||r&&6&i||s&&i&Ns?this.preventSrc(e):void 0}},e.preventSrc=function(t){this.manager.session.prevented=!0,t.preventDefault()},t}();function Ws(t,e){for(;t;){if(t===e)return!0;t=t.parentNode}return!1}function qs(t){var e=t.length;if(1===e)return{x:gs(t[0].clientX),y:gs(t[0].clientY)};for(var i=0,n=0,o=0;o<e;)i+=t[o].clientX,n+=t[o].clientY,o++;return{x:gs(i/e),y:gs(n/e)}}function Vs(t){for(var e=[],i=0;i<t.pointers.length;)e[i]={clientX:gs(t.pointers[i].clientX),clientY:gs(t.pointers[i].clientY)},i++;return{timeStamp:ms(),pointers:e,center:qs(e),deltaX:t.deltaX,deltaY:t.deltaY}}function Us(t,e,i){i||(i=As);var n=e[i[0]]-t[i[0]],o=e[i[1]]-t[i[1]];return Math.sqrt(n*n+o*o)}function Ys(t,e,i){i||(i=As);var n=e[i[0]]-t[i[0]],o=e[i[1]]-t[i[1]];return 180*Math.atan2(o,n)/Math.PI}function Xs(t,e){return t===e?1:ys(t)>=ys(e)?t<0?2:4:e<0?8:zs}function Gs(t,e,i){return{x:e/t||0,y:i/t||0}}function Ks(t,e){var i=t.session,n=e.pointers,o=n.length;i.firstInput||(i.firstInput=Vs(e)),o>1&&!i.firstMultiple?i.firstMultiple=Vs(e):1===o&&(i.firstMultiple=!1);var r=i.firstInput,s=i.firstMultiple,a=s?s.center:r.center,h=e.center=qs(n);e.timeStamp=ms(),e.deltaTime=e.timeStamp-r.timeStamp,e.angle=Ys(a,h),e.distance=Us(a,h),function(t,e){var i=e.center,n=t.offsetDelta||{},o=t.prevDelta||{},r=t.prevInput||{};1!==e.eventType&&4!==r.eventType||(o=t.prevDelta={x:r.deltaX||0,y:r.deltaY||0},n=t.offsetDelta={x:i.x,y:i.y}),e.deltaX=o.x+(i.x-n.x),e.deltaY=o.y+(i.y-n.y)}(i,e),e.offsetDirection=Xs(e.deltaX,e.deltaY);var l,d,c=Gs(e.deltaTime,e.deltaX,e.deltaY);e.overallVelocityX=c.x,e.overallVelocityY=c.y,e.overallVelocity=ys(c.x)>ys(c.y)?c.x:c.y,e.scale=s?(l=s.pointers,Us((d=n)[0],d[1],Fs)/Us(l[0],l[1],Fs)):1,e.rotation=s?function(t,e){return Ys(e[1],e[0],Fs)+Ys(t[1],t[0],Fs)}(s.pointers,n):0,e.maxPointers=i.prevInput?e.pointers.length>i.prevInput.maxPointers?e.pointers.length:i.prevInput.maxPointers:e.pointers.length,function(t,e){var i,n,o,r,s=t.lastInterval||e,a=e.timeStamp-s.timeStamp;if(8!==e.eventType&&(a>25||void 0===s.velocity)){var h=e.deltaX-s.deltaX,l=e.deltaY-s.deltaY,d=Gs(a,h,l);n=d.x,o=d.y,i=ys(d.x)>ys(d.y)?d.x:d.y,r=Xs(h,l),t.lastInterval=e}else i=s.velocity,n=s.velocityX,o=s.velocityY,r=s.direction;e.velocity=i,e.velocityX=n,e.velocityY=o,e.direction=r}(i,e);var u,f=t.element,p=e.srcEvent;Ws(u=p.composedPath?p.composedPath()[0]:p.path?p.path[0]:p.target,f)&&(f=u),e.target=f}function $s(t,e,i){var n=i.pointers.length,o=i.changedPointers.length,r=1&e&&n-o==0,s=12&e&&n-o==0;i.isFirst=!!r,i.isFinal=!!s,r&&(t.session={}),i.eventType=e,Ks(t,i),t.emit(\"hammer.input\",i),t.recognize(i),t.session.prevInput=i}function Zs(t){return t.trim().split(/\\s+/g)}function Qs(t,e,i){js(Zs(e),(function(e){t.addEventListener(e,i,!1)}))}function Js(t,e,i){js(Zs(e),(function(e){t.removeEventListener(e,i,!1)}))}function ta(t){var e=t.ownerDocument||t;return e.defaultView||e.parentWindow||window}var ea=function(){function t(t,e){var i=this;this.manager=t,this.callback=e,this.element=t.element,this.target=t.options.inputTarget,this.domHandler=function(e){Rs(t.options.enable,[t])&&i.handler(e)},this.init()}var e=t.prototype;return e.handler=function(){},e.init=function(){this.evEl&&Qs(this.element,this.evEl,this.domHandler),this.evTarget&&Qs(this.target,this.evTarget,this.domHandler),this.evWin&&Qs(ta(this.element),this.evWin,this.domHandler)},e.destroy=function(){this.evEl&&Js(this.element,this.evEl,this.domHandler),this.evTarget&&Js(this.target,this.evTarget,this.domHandler),this.evWin&&Js(ta(this.element),this.evWin,this.domHandler)},t}();function ia(t,e,i){if(t.indexOf&&!i)return t.indexOf(e);for(var n=0;n<t.length;){if(i&&t[n][i]==e||!i&&t[n]===e)return n;n++}return-1}var na={pointerdown:1,pointermove:2,pointerup:4,pointercancel:8,pointerout:8},oa={2:Is,3:\"pen\",4:Bs,5:\"kinect\"},ra=\"pointerdown\",sa=\"pointermove pointerup pointercancel\";us.MSPointerEvent&&!us.PointerEvent&&(ra=\"MSPointerDown\",sa=\"MSPointerMove MSPointerUp MSPointerCancel\");var aa=function(t){function e(){var i,n=e.prototype;return n.evEl=ra,n.evWin=sa,(i=t.apply(this,arguments)||this).store=i.manager.session.pointerEvents=[],i}return ds(e,t),e.prototype.handler=function(t){var e=this.store,i=!1,n=t.type.toLowerCase().replace(\"ms\",\"\"),o=na[n],r=oa[t.pointerType]||t.pointerType,s=r===Is,a=ia(e,t.pointerId,\"pointerId\");1&o&&(0===t.button||s)?a<0&&(e.push(t),a=e.length-1):12&o&&(i=!0),a<0||(e[a]=t,this.callback(this.manager,o,{pointers:e,changedPointers:[t],pointerType:r,srcEvent:t}),i&&e.splice(a,1))},e}(ea);function ha(t){return Array.prototype.slice.call(t,0)}function la(t,e,i){for(var n=[],o=[],r=0;r<t.length;){var s=e?t[r][e]:t[r];ia(o,s)<0&&n.push(t[r]),o[r]=s,r++}return i&&(n=e?n.sort((function(t,i){return t[e]>i[e]})):n.sort()),n}var da={touchstart:1,touchmove:2,touchend:4,touchcancel:8},ca=\"touchstart touchmove touchend touchcancel\",ua=function(t){function e(){var i;return e.prototype.evTarget=ca,(i=t.apply(this,arguments)||this).targetIds={},i}return ds(e,t),e.prototype.handler=function(t){var e=da[t.type],i=fa.call(this,t,e);i&&this.callback(this.manager,e,{pointers:i[0],changedPointers:i[1],pointerType:Is,srcEvent:t})},e}(ea);function fa(t,e){var i,n,o=ha(t.touches),r=this.targetIds;if(3&e&&1===o.length)return r[o[0].identifier]=!0,[o,o];var s=ha(t.changedTouches),a=[],h=this.target;if(n=o.filter((function(t){return Ws(t.target,h)})),1===e)for(i=0;i<n.length;)r[n[i].identifier]=!0,i++;for(i=0;i<s.length;)r[s[i].identifier]&&a.push(s[i]),12&e&&delete r[s[i].identifier],i++;return a.length?[la(n.concat(a),\"identifier\",!0),a]:void 0}var pa={mousedown:1,mousemove:2,mouseup:4},va=\"mousedown\",ga=\"mousemove mouseup\",ya=function(t){function e(){var i,n=e.prototype;return n.evEl=va,n.evWin=ga,(i=t.apply(this,arguments)||this).pressed=!1,i}return ds(e,t),e.prototype.handler=function(t){var e=pa[t.type];1&e&&0===t.button&&(this.pressed=!0),2&e&&1!==t.which&&(e=4),this.pressed&&(4&e&&(this.pressed=!1),this.callback(this.manager,e,{pointers:[t],changedPointers:[t],pointerType:Bs,srcEvent:t}))},e}(ea);function ma(t){var e=t.changedPointers[0];if(e.identifier===this.primaryTouch){var i={x:e.clientX,y:e.clientY},n=this.lastTouches;this.lastTouches.push(i);setTimeout((function(){var t=n.indexOf(i);t>-1&&n.splice(t,1)}),2500)}}function ba(t,e){1&t?(this.primaryTouch=e.changedPointers[0].identifier,ma.call(this,e)):12&t&&ma.call(this,e)}function wa(t){for(var e=t.srcEvent.clientX,i=t.srcEvent.clientY,n=0;n<this.lastTouches.length;n++){var o=this.lastTouches[n],r=Math.abs(e-o.x),s=Math.abs(i-o.y);if(r<=25&&s<=25)return!0}return!1}var ka=function(){return function(t){function e(e,i){var n;return(n=t.call(this,e,i)||this).handler=function(t,e,i){var o=i.pointerType===Is,r=i.pointerType===Bs;if(!(r&&i.sourceCapabilities&&i.sourceCapabilities.firesTouchEvents)){if(o)ba.call(cs(cs(n)),e,i);else if(r&&wa.call(cs(cs(n)),i))return;n.callback(t,e,i)}},n.touch=new ua(n.manager,n.handler),n.mouse=new ya(n.manager,n.handler),n.primaryTouch=null,n.lastTouches=[],n}return ds(e,t),e.prototype.destroy=function(){this.touch.destroy(),this.mouse.destroy()},e}(ea)}();function _a(t,e,i){return!!Array.isArray(t)&&(js(t,i[e],i),!0)}var xa=32,Ea=1;function Oa(t,e){var i=e.manager;return i?i.get(t):t}function Ca(t){return 16&t?\"cancel\":8&t?\"end\":4&t?\"move\":2&t?\"start\":\"\"}var Sa=function(){function t(t){void 0===t&&(t={}),this.options=ls({enable:!0},t),this.id=Ea++,this.manager=null,this.state=1,this.simultaneous={},this.requireFail=[]}var e=t.prototype;return e.set=function(t){return fs(this.options,t),this.manager&&this.manager.touchAction.update(),this},e.recognizeWith=function(t){if(_a(t,\"recognizeWith\",this))return this;var e=this.simultaneous;return e[(t=Oa(t,this)).id]||(e[t.id]=t,t.recognizeWith(this)),this},e.dropRecognizeWith=function(t){return _a(t,\"dropRecognizeWith\",this)||(t=Oa(t,this),delete this.simultaneous[t.id]),this},e.requireFailure=function(t){if(_a(t,\"requireFailure\",this))return this;var e=this.requireFail;return-1===ia(e,t=Oa(t,this))&&(e.push(t),t.requireFailure(this)),this},e.dropRequireFailure=function(t){if(_a(t,\"dropRequireFailure\",this))return this;t=Oa(t,this);var e=ia(this.requireFail,t);return e>-1&&this.requireFail.splice(e,1),this},e.hasRequireFailures=function(){return this.requireFail.length>0},e.canRecognizeWith=function(t){return!!this.simultaneous[t.id]},e.emit=function(t){var e=this,i=this.state;function n(i){e.manager.emit(i,t)}i<8&&n(e.options.event+Ca(i)),n(e.options.event),t.additionalEvent&&n(t.additionalEvent),i>=8&&n(e.options.event+Ca(i))},e.tryEmit=function(t){if(this.canEmit())return this.emit(t);this.state=xa},e.canEmit=function(){for(var t=0;t<this.requireFail.length;){if(!(33&this.requireFail[t].state))return!1;t++}return!0},e.recognize=function(t){var e=fs({},t);if(!Rs(this.options.enable,[this,e]))return this.reset(),void(this.state=xa);56&this.state&&(this.state=1),this.state=this.process(e),30&this.state&&this.tryEmit(e)},e.process=function(t){},e.getTouchAction=function(){},e.reset=function(){},t}(),Ta=function(t){function e(e){var i;return void 0===e&&(e={}),(i=t.call(this,ls({event:\"tap\",pointers:1,taps:1,interval:300,time:250,threshold:9,posThreshold:10},e))||this).pTime=!1,i.pCenter=!1,i._timer=null,i._input=null,i.count=0,i}ds(e,t);var i=e.prototype;return i.getTouchAction=function(){return[Es]},i.process=function(t){var e=this,i=this.options,n=t.pointers.length===i.pointers,o=t.distance<i.threshold,r=t.deltaTime<i.time;if(this.reset(),1&t.eventType&&0===this.count)return this.failTimeout();if(o&&r&&n){if(4!==t.eventType)return this.failTimeout();var s=!this.pTime||t.timeStamp-this.pTime<i.interval,a=!this.pCenter||Us(this.pCenter,t.center)<i.posThreshold;if(this.pTime=t.timeStamp,this.pCenter=t.center,a&&s?this.count+=1:this.count=1,this._input=t,0===this.count%i.taps)return this.hasRequireFailures()?(this._timer=setTimeout((function(){e.state=8,e.tryEmit()}),i.interval),2):8}return xa},i.failTimeout=function(){var t=this;return this._timer=setTimeout((function(){t.state=xa}),this.options.interval),xa},i.reset=function(){clearTimeout(this._timer)},i.emit=function(){8===this.state&&(this._input.tapCount=this.count,this.manager.emit(this.options.event,this._input))},e}(Sa),Ma=function(t){function e(e){return void 0===e&&(e={}),t.call(this,ls({pointers:1},e))||this}ds(e,t);var i=e.prototype;return i.attrTest=function(t){var e=this.options.pointers;return 0===e||t.pointers.length===e},i.process=function(t){var e=this.state,i=t.eventType,n=6&e,o=this.attrTest(t);return n&&(8&i||!o)?16|e:n||o?4&i?8|e:2&e?4|e:2:xa},e}(Sa);function Pa(t){return t===zs?\"down\":8===t?\"up\":2===t?\"left\":4===t?\"right\":\"\"}var Da=function(t){function e(e){var i;return void 0===e&&(e={}),(i=t.call(this,ls({event:\"pan\",threshold:10,pointers:1,direction:30},e))||this).pX=null,i.pY=null,i}ds(e,t);var i=e.prototype;return i.getTouchAction=function(){var t=this.options.direction,e=[];return 6&t&&e.push(Ss),t&Ns&&e.push(Cs),e},i.directionTest=function(t){var e=this.options,i=!0,n=t.distance,o=t.direction,r=t.deltaX,s=t.deltaY;return o&e.direction||(6&e.direction?(o=0===r?1:r<0?2:4,i=r!==this.pX,n=Math.abs(t.deltaX)):(o=0===s?1:s<0?8:zs,i=s!==this.pY,n=Math.abs(t.deltaY))),t.direction=o,i&&n>e.threshold&&o&e.direction},i.attrTest=function(t){return Ma.prototype.attrTest.call(this,t)&&(2&this.state||!(2&this.state)&&this.directionTest(t))},i.emit=function(e){this.pX=e.deltaX,this.pY=e.deltaY;var i=Pa(e.direction);i&&(e.additionalEvent=this.options.event+i),t.prototype.emit.call(this,e)},e}(Ma),Ia=function(t){function e(e){return void 0===e&&(e={}),t.call(this,ls({event:\"swipe\",threshold:10,velocity:.3,direction:30,pointers:1},e))||this}ds(e,t);var i=e.prototype;return i.getTouchAction=function(){return Da.prototype.getTouchAction.call(this)},i.attrTest=function(e){var i,n=this.options.direction;return 30&n?i=e.overallVelocity:6&n?i=e.overallVelocityX:n&Ns&&(i=e.overallVelocityY),t.prototype.attrTest.call(this,e)&&n&e.offsetDirection&&e.distance>this.options.threshold&&e.maxPointers===this.options.pointers&&ys(i)>this.options.velocity&&4&e.eventType},i.emit=function(t){var e=Pa(t.offsetDirection);e&&this.manager.emit(this.options.event+e,t),this.manager.emit(this.options.event,t)},e}(Ma),Ba=function(t){function e(e){return void 0===e&&(e={}),t.call(this,ls({event:\"pinch\",threshold:0,pointers:2},e))||this}ds(e,t);var i=e.prototype;return i.getTouchAction=function(){return[Os]},i.attrTest=function(e){return t.prototype.attrTest.call(this,e)&&(Math.abs(e.scale-1)>this.options.threshold||2&this.state)},i.emit=function(e){if(1!==e.scale){var i=e.scale<1?\"in\":\"out\";e.additionalEvent=this.options.event+i}t.prototype.emit.call(this,e)},e}(Ma),za=function(t){function e(e){return void 0===e&&(e={}),t.call(this,ls({event:\"rotate\",threshold:0,pointers:2},e))||this}ds(e,t);var i=e.prototype;return i.getTouchAction=function(){return[Os]},i.attrTest=function(e){return t.prototype.attrTest.call(this,e)&&(Math.abs(e.rotation)>this.options.threshold||2&this.state)},e}(Ma),Na=function(t){function e(e){var i;return void 0===e&&(e={}),(i=t.call(this,ls({event:\"press\",pointers:1,time:251,threshold:9},e))||this)._timer=null,i._input=null,i}ds(e,t);var i=e.prototype;return i.getTouchAction=function(){return[xs]},i.process=function(t){var e=this,i=this.options,n=t.pointers.length===i.pointers,o=t.distance<i.threshold,r=t.deltaTime>i.time;if(this._input=t,!o||!n||12&t.eventType&&!r)this.reset();else if(1&t.eventType)this.reset(),this._timer=setTimeout((function(){e.state=8,e.tryEmit()}),i.time);else if(4&t.eventType)return 8;return xa},i.reset=function(){clearTimeout(this._timer)},i.emit=function(t){8===this.state&&(t&&4&t.eventType?this.manager.emit(this.options.event+\"up\",t):(this._input.timeStamp=ms(),this.manager.emit(this.options.event,this._input)))},e}(Sa),Aa={domEvents:!1,touchAction:_s,enable:!0,inputTarget:null,inputClass:null,cssProps:{userSelect:\"none\",touchSelect:\"none\",touchCallout:\"none\",contentZooming:\"none\",userDrag:\"none\",tapHighlightColor:\"rgba(0,0,0,0)\"}},Fa=[[za,{enable:!1}],[Ba,{enable:!1},[\"rotate\"]],[Ia,{direction:6}],[Da,{direction:6},[\"swipe\"]],[Ta],[Ta,{event:\"doubletap\",taps:2},[\"tap\"]],[Na]];function ja(t,e){var i,n=t.element;n.style&&(js(t.options.cssProps,(function(o,r){i=bs(n.style,r),e?(t.oldCssProps[i]=n.style[i],n.style[i]=o):n.style[i]=t.oldCssProps[i]||\"\"})),e||(t.oldCssProps={}))}var Ra=function(){function t(t,e){var i,n=this;this.options=fs({},Aa,e||{}),this.options.inputTarget=this.options.inputTarget||t,this.handlers={},this.session={},this.recognizers=[],this.oldCssProps={},this.element=t,this.input=new((i=this).options.inputClass||(Ps?aa:Ds?ua:Ms?ka:ya))(i,$s),this.touchAction=new Hs(this,this.options.touchAction),ja(this,!0),js(this.options.recognizers,(function(t){var e=n.add(new t[0](t[1]));t[2]&&e.recognizeWith(t[2]),t[3]&&e.requireFailure(t[3])}),this)}var e=t.prototype;return e.set=function(t){return fs(this.options,t),t.touchAction&&this.touchAction.update(),t.inputTarget&&(this.input.destroy(),this.input.target=t.inputTarget,this.input.init()),this},e.stop=function(t){this.session.stopped=t?2:1},e.recognize=function(t){var e=this.session;if(!e.stopped){var i;this.touchAction.preventDefaults(t);var n=this.recognizers,o=e.curRecognizer;(!o||o&&8&o.state)&&(e.curRecognizer=null,o=null);for(var r=0;r<n.length;)i=n[r],2===e.stopped||o&&i!==o&&!i.canRecognizeWith(o)?i.reset():i.recognize(t),!o&&14&i.state&&(e.curRecognizer=i,o=i),r++}},e.get=function(t){if(t instanceof Sa)return t;for(var e=this.recognizers,i=0;i<e.length;i++)if(e[i].options.event===t)return e[i];return null},e.add=function(t){if(_a(t,\"add\",this))return this;var e=this.get(t.options.event);return e&&this.remove(e),this.recognizers.push(t),t.manager=this,this.touchAction.update(),t},e.remove=function(t){if(_a(t,\"remove\",this))return this;var e=this.get(t);if(t){var i=this.recognizers,n=ia(i,e);-1!==n&&(i.splice(n,1),this.touchAction.update())}return this},e.on=function(t,e){if(void 0===t||void 0===e)return this;var i=this.handlers;return js(Zs(t),(function(t){i[t]=i[t]||[],i[t].push(e)})),this},e.off=function(t,e){if(void 0===t)return this;var i=this.handlers;return js(Zs(t),(function(t){e?i[t]&&i[t].splice(ia(i[t],e),1):delete i[t]})),this},e.emit=function(t,e){this.options.domEvents&&function(t,e){var i=document.createEvent(\"Event\");i.initEvent(t,!0,!0),i.gesture=e,e.target.dispatchEvent(i)}(t,e);var i=this.handlers[t]&&this.handlers[t].slice();if(i&&i.length){e.type=t,e.preventDefault=function(){e.srcEvent.preventDefault()};for(var n=0;n<i.length;)i[n](e),n++}},e.destroy=function(){this.element&&ja(this,!1),this.handlers={},this.session={},this.input.destroy(),this.element=null},t}(),La={touchstart:1,touchmove:2,touchend:4,touchcancel:8},Ha=\"touchstart\",Wa=\"touchstart touchmove touchend touchcancel\",qa=function(t){function e(){var i,n=e.prototype;return n.evTarget=Ha,n.evWin=Wa,(i=t.apply(this,arguments)||this).started=!1,i}return ds(e,t),e.prototype.handler=function(t){var e=La[t.type];if(1===e&&(this.started=!0),this.started){var i=Va.call(this,t,e);12&e&&i[0].length-i[1].length==0&&(this.started=!1),this.callback(this.manager,e,{pointers:i[0],changedPointers:i[1],pointerType:Is,srcEvent:t})}},e}(ea);function Va(t,e){var i=ha(t.touches),n=ha(t.changedTouches);return 12&e&&(i=la(i.concat(n),\"identifier\",!0)),[i,n]}function Ua(t,e,i){var n=\"DEPRECATED METHOD: \"+e+\"\\n\"+i+\" AT \\n\";return function(){var e=new Error(\"get-stack-trace\"),i=e&&e.stack?e.stack.replace(/^[^\\(]+?[\\n$]/gm,\"\").replace(/^\\s+at\\s+/gm,\"\").replace(/^Object.<anonymous>\\s*\\(/gm,\"{anonymous}()@\"):\"Unknown Stack Trace\",o=window.console&&(window.console.warn||window.console.log);return o&&o.call(window.console,n,i),t.apply(this,arguments)}}var Ya=Ua((function(t,e,i){for(var n=Object.keys(e),o=0;o<n.length;)(!i||i&&void 0===t[n[o]])&&(t[n[o]]=e[n[o]]),o++;return t}),\"extend\",\"Use `assign`.\"),Xa=Ua((function(t,e){return Ya(t,e,!0)}),\"merge\",\"Use `assign`.\");function Ga(t,e,i){var n,o=e.prototype;(n=t.prototype=Object.create(o)).constructor=t,n._super=o,i&&fs(n,i)}function Ka(t,e){return function(){return t.apply(e,arguments)}}var $a=function(){var t=function(t,e){return void 0===e&&(e={}),new Ra(t,ls({recognizers:Fa.concat()},e))};return t.VERSION=\"2.0.17-rc\",t.DIRECTION_ALL=30,t.DIRECTION_DOWN=zs,t.DIRECTION_LEFT=2,t.DIRECTION_RIGHT=4,t.DIRECTION_UP=8,t.DIRECTION_HORIZONTAL=6,t.DIRECTION_VERTICAL=Ns,t.DIRECTION_NONE=1,t.DIRECTION_DOWN=zs,t.INPUT_START=1,t.INPUT_MOVE=2,t.INPUT_END=4,t.INPUT_CANCEL=8,t.STATE_POSSIBLE=1,t.STATE_BEGAN=2,t.STATE_CHANGED=4,t.STATE_ENDED=8,t.STATE_RECOGNIZED=8,t.STATE_CANCELLED=16,t.STATE_FAILED=xa,t.Manager=Ra,t.Input=ea,t.TouchAction=Hs,t.TouchInput=ua,t.MouseInput=ya,t.PointerEventInput=aa,t.TouchMouseInput=ka,t.SingleTouchInput=qa,t.Recognizer=Sa,t.AttrRecognizer=Ma,t.Tap=Ta,t.Pan=Da,t.Swipe=Ia,t.Pinch=Ba,t.Rotate=za,t.Press=Na,t.on=Qs,t.off=Js,t.each=js,t.merge=Xa,t.extend=Ya,t.bindFn=Ka,t.assign=fs,t.inherit=Ga,t.bindFn=Ka,t.prefixed=bs,t.toArray=ha,t.inArray=ia,t.uniqueArray=la,t.splitStr=Zs,t.boolOrFn=Rs,t.hasParent=Ws,t.addEventListeners=Qs,t.removeEventListeners=Js,t.defaults=fs({},Aa,{preset:Fa}),t}();function Za(t,e){var i=zo(t);if(On){var n=On(t);e&&(n=mr(n).call(n,(function(e){return Mn(t,e).enumerable}))),i.push.apply(i,n)}return i}function Qa(t){for(var e=1;e<arguments.length;e++){var i,n=null!=arguments[e]?arguments[e]:{};if(e%2)Wo(i=Za(Object(n),!0)).call(i,(function(e){jn(t,e,n[e])}));else if(Dn)In(t,Dn(n));else{var o;Wo(o=Za(Object(n))).call(o,(function(e){zn(t,e,Mn(n,e))}))}}return t}function Ja(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return th(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return th(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function th(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}var eh=ko(\"DELETE\");function ih(t){for(var e,i=arguments.length,n=new Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];return nh.apply(void 0,Eo(e=[{},t]).call(e,n))}function nh(){var t=oh.apply(void 0,arguments);return sh(t),t}function oh(){for(var t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];if(e.length<2)return e[0];var n;if(e.length>2)return oh.apply(void 0,Eo(n=[nh(e[0],e[1])]).call(n,wo(Oo(e).call(e,2))));var o,r=e[0],s=e[1],a=Ja(Co(s));try{for(a.s();!(o=a.n()).done;){var h=o.value;Object.prototype.propertyIsEnumerable.call(s,h)&&(s[h]===eh?delete r[h]:null===r[h]||null===s[h]||\"object\"!==go(r[h])||\"object\"!==go(s[h])||So(r[h])||So(s[h])?r[h]=rh(s[h]):r[h]=oh(r[h],s[h]))}}catch(t){a.e(t)}finally{a.f()}return r}function rh(t){return So(t)?Io(t).call(t,(function(t){return rh(t)})):\"object\"===go(t)&&null!==t?oh({},t):t}function sh(t){for(var e=0,i=zo(t);e<i.length;e++){var n=i[e];t[n]===eh?delete t[n]:\"object\"===go(t[n])&&null!==t[n]&&sh(t[n])}}function ah(){for(var t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];return hh(e.length?e:[No()])}function hh(t){var e=function(){for(var t=lh(),e=t(\" \"),i=t(\" \"),n=t(\" \"),o=0;o<arguments.length;o++)(e-=t(o<0||arguments.length<=o?void 0:arguments[o]))<0&&(e+=1),(i-=t(o<0||arguments.length<=o?void 0:arguments[o]))<0&&(i+=1),(n-=t(o<0||arguments.length<=o?void 0:arguments[o]))<0&&(n+=1);return[e,i,n]}(t),i=uo(e,3),n=i[0],o=i[1],r=i[2],s=1,a=function(){var t=2091639*n+2.3283064365386963e-10*s;return n=o,o=r,r=t-(s=0|t)};return a.uint32=function(){return 4294967296*a()},a.fract53=function(){return a()+11102230246251565e-32*(2097152*a()|0)},a.algorithm=\"Alea\",a.seed=t,a.version=\"0.9\",a}function lh(){var t=4022871197;return function(e){for(var i=e.toString(),n=0;n<i.length;n++){var o=.02519603282416938*(t+=i.charCodeAt(n));o-=t=o>>>0,t=(o*=t)>>>0,t+=4294967296*(o-=t)}return 2.3283064365386963e-10*(t>>>0)}}var dh=\"undefined\"!=typeof window?window.Hammer||$a:function(){return{on:t=function(){},off:t,destroy:t,emit:t,get:function(){return{set:t}}};var t};function ch(t){var e,i=this;this._cleanupQueue=[],this.active=!1,this._dom={container:t,overlay:document.createElement(\"div\")},this._dom.overlay.classList.add(\"vis-overlay\"),this._dom.container.appendChild(this._dom.overlay),this._cleanupQueue.push((function(){i._dom.overlay.parentNode.removeChild(i._dom.overlay)}));var n=dh(this._dom.overlay);n.on(\"tap\",Vt(e=this._onTapOverlay).call(e,this)),this._cleanupQueue.push((function(){n.destroy()}));var o=[\"tap\",\"doubletap\",\"press\",\"pinch\",\"pan\",\"panstart\",\"panmove\",\"panend\"];Wo(o).call(o,(function(t){n.on(t,(function(t){t.srcEvent.stopPropagation()}))})),document&&document.body&&(this._onClick=function(e){(function(t,e){for(;t;){if(t===e)return!0;t=t.parentNode}return!1})(e.target,t)||i.deactivate()},document.body.addEventListener(\"click\",this._onClick),this._cleanupQueue.push((function(){document.body.removeEventListener(\"click\",i._onClick)}))),this._escListener=function(t){(\"key\"in t?\"Escape\"===t.key:27===t.keyCode)&&i.deactivate()}}Zt(ch.prototype),ch.current=null,ch.prototype.destroy=function(){var t,e;this.deactivate();var i,n=Ja(Xo(t=er(e=this._cleanupQueue).call(e,0)).call(t));try{for(n.s();!(i=n.n()).done;){(0,i.value)()}}catch(t){n.e(t)}finally{n.f()}},ch.prototype.activate=function(){ch.current&&ch.current.deactivate(),ch.current=this,this.active=!0,this._dom.overlay.style.display=\"none\",this._dom.container.classList.add(\"vis-active\"),this.emit(\"change\"),this.emit(\"activate\"),document.body.addEventListener(\"keydown\",this._escListener)},ch.prototype.deactivate=function(){this.active=!1,this._dom.overlay.style.display=\"block\",this._dom.container.classList.remove(\"vis-active\"),document.body.removeEventListener(\"keydown\",this._escListener),this.emit(\"change\"),this.emit(\"deactivate\")},ch.prototype._onTapOverlay=function(t){this.activate(),t.srcEvent.stopPropagation()};var uh=/^\\/?Date\\((-?\\d+)/i,fh=/^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i,ph=/^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i,vh=/^rgb\\( *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *\\)$/i,gh=/^rgba\\( *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *([01]|0?\\.\\d+) *\\)$/i;function yh(t){return t instanceof Number||\"number\"==typeof t}function mh(t){if(t)for(;!0===t.hasChildNodes();){var e=t.firstChild;e&&(mh(e),t.removeChild(e))}}function bh(t){return t instanceof String||\"string\"==typeof t}function wh(t){return\"object\"===go(t)&&null!==t}function kh(t,e,i,n){var o=!1;!0===n&&(o=null===e[i]&&void 0!==t[i]),o?delete t[i]:t[i]=e[i]}function _h(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];for(var n in t)if(void 0!==e[n])if(null===e[n]||\"object\"!==go(e[n]))kh(t,e,n,i);else{var o=t[n],r=e[n];wh(o)&&wh(r)&&_h(o,r,i)}}var xh=At;function Eh(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(So(i))throw new TypeError(\"Arrays are not supported by deepExtend\");for(var o=0;o<t.length;o++){var r=t[o];if(Object.prototype.hasOwnProperty.call(i,r))if(i[r]&&i[r].constructor===Object)void 0===e[r]&&(e[r]={}),e[r].constructor===Object?Ch(e[r],i[r],!1,n):kh(e,i,r,n);else{if(So(i[r]))throw new TypeError(\"Arrays are not supported by deepExtend\");kh(e,i,r,n)}}return e}function Oh(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(So(i))throw new TypeError(\"Arrays are not supported by deepExtend\");for(var o in i)if(Object.prototype.hasOwnProperty.call(i,o)&&!dr(t).call(t,o))if(i[o]&&i[o].constructor===Object)void 0===e[o]&&(e[o]={}),e[o].constructor===Object?Ch(e[o],i[o]):kh(e,i,o,n);else if(So(i[o])){e[o]=[];for(var r=0;r<i[o].length;r++)e[o].push(i[o][r])}else kh(e,i,o,n);return e}function Ch(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];for(var o in e)if(Object.prototype.hasOwnProperty.call(e,o)||!0===i)if(\"object\"===go(e[o])&&null!==e[o]&&fr(e[o])===Object.prototype)void 0===t[o]?t[o]=Ch({},e[o],i):\"object\"===go(t[o])&&null!==t[o]&&fr(t[o])===Object.prototype?Ch(t[o],e[o],i):kh(t,e,o,n);else if(So(e[o])){var r;t[o]=Oo(r=e[o]).call(r)}else kh(t,e,o,n);return t}function Sh(t,e){var i;return Eo(i=[]).call(i,wo(t),[e])}function Th(t){return Oo(t).call(t)}function Mh(t){return t.getBoundingClientRect().left}function Ph(t){return t.getBoundingClientRect().top}function Dh(t,e){if(So(t))for(var i=t.length,n=0;n<i;n++)e(t[n],n,t);else for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&e(t[o],o,t)}var Ih=_r;function Bh(t,e,i,n){var o;t.addEventListener?(void 0===n&&(n=!1),\"mousewheel\"===e&&dr(o=navigator.userAgent).call(o,\"Firefox\")&&(e=\"DOMMouseScroll\"),t.addEventListener(e,i,n)):t.attachEvent(\"on\"+e,i)}function zh(t,e,i,n){var o;t.removeEventListener?(void 0===n&&(n=!1),\"mousewheel\"===e&&dr(o=navigator.userAgent).call(o,\"Firefox\")&&(e=\"DOMMouseScroll\"),t.removeEventListener(e,i,n)):t.detachEvent(\"on\"+e,i)}var Nh={asBoolean:function(t,e){return\"function\"==typeof t&&(t=t()),null!=t?0!=t:e||null},asNumber:function(t,e){return\"function\"==typeof t&&(t=t()),null!=t?Number(t)||e||null:e||null},asString:function(t,e){return\"function\"==typeof t&&(t=t()),null!=t?String(t):e||null},asSize:function(t,e){return\"function\"==typeof t&&(t=t()),bh(t)?t:yh(t)?t+\"px\":e||null},asElement:function(t,e){return\"function\"==typeof t&&(t=t()),t||e||null}};function Ah(t){var e;switch(t.length){case 3:case 4:return(e=ph.exec(t))?{r:Br(e[1]+e[1],16),g:Br(e[2]+e[2],16),b:Br(e[3]+e[3],16)}:null;case 6:case 7:return(e=fh.exec(t))?{r:Br(e[1],16),g:Br(e[2],16),b:Br(e[3],16)}:null;default:return null}}function Fh(t,e){if(dr(t).call(t,\"rgba\"))return t;if(dr(t).call(t,\"rgb\")){var i=t.substr(Hr(t).call(t,\"(\")+1).replace(\")\",\"\").split(\",\");return\"rgba(\"+i[0]+\",\"+i[1]+\",\"+i[2]+\",\"+e+\")\"}var n=Ah(t);return null==n?t:\"rgba(\"+n.r+\",\"+n.g+\",\"+n.b+\",\"+e+\")\"}function jh(t,e,i){var n;return\"#\"+Oo(n=((1<<24)+(t<<16)+(e<<8)+i).toString(16)).call(n,1)}function Rh(t,e){if(bh(t)){var i=t;if(Xh(i)){var n,o=Io(n=i.substr(4).substr(0,i.length-5).split(\",\")).call(n,(function(t){return Br(t)}));i=jh(o[0],o[1],o[2])}if(!0===Yh(i)){var r=Uh(i),s={h:r.h,s:.8*r.s,v:Math.min(1,1.02*r.v)},a={h:r.h,s:Math.min(1,1.25*r.s),v:.8*r.v},h=Vh(a.h,a.s,a.v),l=Vh(s.h,s.s,s.v);return{background:i,border:h,highlight:{background:l,border:h},hover:{background:l,border:h}}}return{background:i,border:i,highlight:{background:i,border:i},hover:{background:i,border:i}}}return e?{background:t.background||e.background,border:t.border||e.border,highlight:bh(t.highlight)?{border:t.highlight,background:t.highlight}:{background:t.highlight&&t.highlight.background||e.highlight.background,border:t.highlight&&t.highlight.border||e.highlight.border},hover:bh(t.hover)?{border:t.hover,background:t.hover}:{border:t.hover&&t.hover.border||e.hover.border,background:t.hover&&t.hover.background||e.hover.background}}:{background:t.background||void 0,border:t.border||void 0,highlight:bh(t.highlight)?{border:t.highlight,background:t.highlight}:{background:t.highlight&&t.highlight.background||void 0,border:t.highlight&&t.highlight.border||void 0},hover:bh(t.hover)?{border:t.hover,background:t.hover}:{border:t.hover&&t.hover.border||void 0,background:t.hover&&t.hover.background||void 0}}}function Lh(t,e,i){t/=255,e/=255,i/=255;var n=Math.min(t,Math.min(e,i)),o=Math.max(t,Math.max(e,i));return n===o?{h:0,s:0,v:n}:{h:60*((t===n?3:i===n?1:5)-(t===n?e-i:i===n?t-e:i-t)/(o-n))/360,s:(o-n)/o,v:o}}var Hh=function(t){var e,i={};return Wo(e=t.split(\";\")).call(e,(function(t){if(\"\"!=Ur(t).call(t)){var e,n,o=t.split(\":\"),r=Ur(e=o[0]).call(e),s=Ur(n=o[1]).call(n);i[r]=s}})),i},Wh=function(t){var e;return Io(e=zo(t)).call(e,(function(e){return e+\": \"+t[e]})).join(\"; \")};function qh(t,e,i){var n,o,r,s=Math.floor(6*t),a=6*t-s,h=i*(1-e),l=i*(1-a*e),d=i*(1-(1-a)*e);switch(s%6){case 0:n=i,o=d,r=h;break;case 1:n=l,o=i,r=h;break;case 2:n=h,o=i,r=d;break;case 3:n=h,o=l,r=i;break;case 4:n=d,o=h,r=i;break;case 5:n=i,o=h,r=l}return{r:Math.floor(255*n),g:Math.floor(255*o),b:Math.floor(255*r)}}function Vh(t,e,i){var n=qh(t,e,i);return jh(n.r,n.g,n.b)}function Uh(t){var e=Ah(t);if(!e)throw new TypeError(\"'\".concat(t,\"' is not a valid color.\"));return Lh(e.r,e.g,e.b)}function Yh(t){return/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(t)}function Xh(t){return vh.test(t)}function Gh(t){return gh.test(t)}function Kh(t){if(null===t||\"object\"!==go(t))return null;if(t instanceof Element)return t;var e=Gr(t);for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&\"object\"==go(t[i])&&(e[i]=Kh(t[i]));return e}function $h(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},o=function(t){return null!=t},r=function(t){return null!==t&&\"object\"===go(t)},s=function(t){for(var e in t)if(Object.prototype.hasOwnProperty.call(t,e))return!1;return!0};if(!r(t))throw new Error(\"Parameter mergeTarget must be an object\");if(!r(e))throw new Error(\"Parameter options must be an object\");if(!o(i))throw new Error(\"Parameter option must have a value\");if(!r(n))throw new Error(\"Parameter globalOptions must be an object\");var a=function(t,e,i){r(t[i])||(t[i]={});var n=e[i],o=t[i];for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(o[s]=n[s])},h=e[i],l=r(n)&&!s(n),d=l?n[i]:void 0,c=d?d.enabled:void 0;if(void 0!==h){if(\"boolean\"==typeof h)return r(t[i])||(t[i]={}),void(t[i].enabled=h);if(null===h&&!r(t[i])){if(!o(d))return;t[i]=Gr(d)}if(r(h)){var u=!0;void 0!==h.enabled?u=h.enabled:void 0!==c&&(u=d.enabled),a(t,e,i),t[i].enabled=u}}}var Zh={linear:function(t){return t},easeInQuad:function(t){return t*t},easeOutQuad:function(t){return t*(2-t)},easeInOutQuad:function(t){return t<.5?2*t*t:(4-2*t)*t-1},easeInCubic:function(t){return t*t*t},easeOutCubic:function(t){return--t*t*t+1},easeInOutCubic:function(t){return t<.5?4*t*t*t:(t-1)*(2*t-2)*(2*t-2)+1},easeInQuart:function(t){return t*t*t*t},easeOutQuart:function(t){return 1- --t*t*t*t},easeInOutQuart:function(t){return t<.5?8*t*t*t*t:1-8*--t*t*t*t},easeInQuint:function(t){return t*t*t*t*t},easeOutQuint:function(t){return 1+--t*t*t*t*t},easeInOutQuint:function(t){return t<.5?16*t*t*t*t*t:1+16*--t*t*t*t*t}};function Qh(t,e){var i;So(e)||(e=[e]);var n,o=Ja(t);try{for(o.s();!(n=o.n()).done;){var r=n.value;if(r){i=r[e[0]];for(var s=1;s<e.length;s++)i&&(i=i[e[s]]);if(void 0!==i)break}}}catch(t){o.e(t)}finally{o.f()}return i}var Jh={black:\"#000000\",navy:\"#000080\",darkblue:\"#00008B\",mediumblue:\"#0000CD\",blue:\"#0000FF\",darkgreen:\"#006400\",green:\"#008000\",teal:\"#008080\",darkcyan:\"#008B8B\",deepskyblue:\"#00BFFF\",darkturquoise:\"#00CED1\",mediumspringgreen:\"#00FA9A\",lime:\"#00FF00\",springgreen:\"#00FF7F\",aqua:\"#00FFFF\",cyan:\"#00FFFF\",midnightblue:\"#191970\",dodgerblue:\"#1E90FF\",lightseagreen:\"#20B2AA\",forestgreen:\"#228B22\",seagreen:\"#2E8B57\",darkslategray:\"#2F4F4F\",limegreen:\"#32CD32\",mediumseagreen:\"#3CB371\",turquoise:\"#40E0D0\",royalblue:\"#4169E1\",steelblue:\"#4682B4\",darkslateblue:\"#483D8B\",mediumturquoise:\"#48D1CC\",indigo:\"#4B0082\",darkolivegreen:\"#556B2F\",cadetblue:\"#5F9EA0\",cornflowerblue:\"#6495ED\",mediumaquamarine:\"#66CDAA\",dimgray:\"#696969\",slateblue:\"#6A5ACD\",olivedrab:\"#6B8E23\",slategray:\"#708090\",lightslategray:\"#778899\",mediumslateblue:\"#7B68EE\",lawngreen:\"#7CFC00\",chartreuse:\"#7FFF00\",aquamarine:\"#7FFFD4\",maroon:\"#800000\",purple:\"#800080\",olive:\"#808000\",gray:\"#808080\",skyblue:\"#87CEEB\",lightskyblue:\"#87CEFA\",blueviolet:\"#8A2BE2\",darkred:\"#8B0000\",darkmagenta:\"#8B008B\",saddlebrown:\"#8B4513\",darkseagreen:\"#8FBC8F\",lightgreen:\"#90EE90\",mediumpurple:\"#9370D8\",darkviolet:\"#9400D3\",palegreen:\"#98FB98\",darkorchid:\"#9932CC\",yellowgreen:\"#9ACD32\",sienna:\"#A0522D\",brown:\"#A52A2A\",darkgray:\"#A9A9A9\",lightblue:\"#ADD8E6\",greenyellow:\"#ADFF2F\",paleturquoise:\"#AFEEEE\",lightsteelblue:\"#B0C4DE\",powderblue:\"#B0E0E6\",firebrick:\"#B22222\",darkgoldenrod:\"#B8860B\",mediumorchid:\"#BA55D3\",rosybrown:\"#BC8F8F\",darkkhaki:\"#BDB76B\",silver:\"#C0C0C0\",mediumvioletred:\"#C71585\",indianred:\"#CD5C5C\",peru:\"#CD853F\",chocolate:\"#D2691E\",tan:\"#D2B48C\",lightgrey:\"#D3D3D3\",palevioletred:\"#D87093\",thistle:\"#D8BFD8\",orchid:\"#DA70D6\",goldenrod:\"#DAA520\",crimson:\"#DC143C\",gainsboro:\"#DCDCDC\",plum:\"#DDA0DD\",burlywood:\"#DEB887\",lightcyan:\"#E0FFFF\",lavender:\"#E6E6FA\",darksalmon:\"#E9967A\",violet:\"#EE82EE\",palegoldenrod:\"#EEE8AA\",lightcoral:\"#F08080\",khaki:\"#F0E68C\",aliceblue:\"#F0F8FF\",honeydew:\"#F0FFF0\",azure:\"#F0FFFF\",sandybrown:\"#F4A460\",wheat:\"#F5DEB3\",beige:\"#F5F5DC\",whitesmoke:\"#F5F5F5\",mintcream:\"#F5FFFA\",ghostwhite:\"#F8F8FF\",salmon:\"#FA8072\",antiquewhite:\"#FAEBD7\",linen:\"#FAF0E6\",lightgoldenrodyellow:\"#FAFAD2\",oldlace:\"#FDF5E6\",red:\"#FF0000\",fuchsia:\"#FF00FF\",magenta:\"#FF00FF\",deeppink:\"#FF1493\",orangered:\"#FF4500\",tomato:\"#FF6347\",hotpink:\"#FF69B4\",coral:\"#FF7F50\",darkorange:\"#FF8C00\",lightsalmon:\"#FFA07A\",orange:\"#FFA500\",lightpink:\"#FFB6C1\",pink:\"#FFC0CB\",gold:\"#FFD700\",peachpuff:\"#FFDAB9\",navajowhite:\"#FFDEAD\",moccasin:\"#FFE4B5\",bisque:\"#FFE4C4\",mistyrose:\"#FFE4E1\",blanchedalmond:\"#FFEBCD\",papayawhip:\"#FFEFD5\",lavenderblush:\"#FFF0F5\",seashell:\"#FFF5EE\",cornsilk:\"#FFF8DC\",lemonchiffon:\"#FFFACD\",floralwhite:\"#FFFAF0\",snow:\"#FFFAFA\",yellow:\"#FFFF00\",lightyellow:\"#FFFFE0\",ivory:\"#FFFFF0\",white:\"#FFFFFF\"},tl=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;Nn(this,t),this.pixelRatio=e,this.generated=!1,this.centerCoordinates={x:144.5,y:144.5},this.r=289*.49,this.color={r:255,g:255,b:255,a:1},this.hueCircle=void 0,this.initialColor={r:255,g:255,b:255,a:1},this.previousColor=void 0,this.applied=!1,this.updateCallback=function(){},this.closeCallback=function(){},this._create()}return Fn(t,[{key:\"insertTo\",value:function(t){void 0!==this.hammer&&(this.hammer.destroy(),this.hammer=void 0),this.container=t,this.container.appendChild(this.frame),this._bindHammer(),this._setSize()}},{key:\"setUpdateCallback\",value:function(t){if(\"function\"!=typeof t)throw new Error(\"Function attempted to set as colorPicker update callback is not a function.\");this.updateCallback=t}},{key:\"setCloseCallback\",value:function(t){if(\"function\"!=typeof t)throw new Error(\"Function attempted to set as colorPicker closing callback is not a function.\");this.closeCallback=t}},{key:\"_isColorString\",value:function(t){if(\"string\"==typeof t)return Jh[t]}},{key:\"setColor\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(\"none\"!==t){var i,n=this._isColorString(t);if(void 0!==n&&(t=n),!0===bh(t)){if(!0===Xh(t)){var o=t.substr(4).substr(0,t.length-5).split(\",\");i={r:o[0],g:o[1],b:o[2],a:1}}else if(!0===Gh(t)){var r=t.substr(5).substr(0,t.length-6).split(\",\");i={r:r[0],g:r[1],b:r[2],a:r[3]}}else if(!0===Yh(t)){var s=Ah(t);i={r:s.r,g:s.g,b:s.b,a:1}}}else if(t instanceof Object&&void 0!==t.r&&void 0!==t.g&&void 0!==t.b){var a=void 0!==t.a?t.a:\"1.0\";i={r:t.r,g:t.g,b:t.b,a:a}}if(void 0===i)throw new Error(\"Unknown color passed to the colorPicker. Supported are strings: rgb, hex, rgba. Object: rgb ({r:r,g:g,b:b,[a:a]}). Supplied: \"+es(t));this._setColor(i,e)}}},{key:\"show\",value:function(){void 0!==this.closeCallback&&(this.closeCallback(),this.closeCallback=void 0),this.applied=!1,this.frame.style.display=\"block\",this._generateHueCircle()}},{key:\"_hide\",value:function(){var t=this,e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];!0===e&&(this.previousColor=At({},this.color)),!0===this.applied&&this.updateCallback(this.initialColor),this.frame.style.display=\"none\",rs((function(){void 0!==t.closeCallback&&(t.closeCallback(),t.closeCallback=void 0)}),0)}},{key:\"_save\",value:function(){this.updateCallback(this.color),this.applied=!1,this._hide()}},{key:\"_apply\",value:function(){this.applied=!0,this.updateCallback(this.color),this._updatePicker(this.color)}},{key:\"_loadLast\",value:function(){void 0!==this.previousColor?this.setColor(this.previousColor,!1):alert(\"There is no last color to load...\")}},{key:\"_setColor\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];!0===e&&(this.initialColor=At({},t)),this.color=t;var i=Lh(t.r,t.g,t.b),n=2*Math.PI,o=this.r*i.s,r=this.centerCoordinates.x+o*Math.sin(n*i.h),s=this.centerCoordinates.y+o*Math.cos(n*i.h);this.colorPickerSelector.style.left=r-.5*this.colorPickerSelector.clientWidth+\"px\",this.colorPickerSelector.style.top=s-.5*this.colorPickerSelector.clientHeight+\"px\",this._updatePicker(t)}},{key:\"_setOpacity\",value:function(t){this.color.a=t/100,this._updatePicker(this.color)}},{key:\"_setBrightness\",value:function(t){var e=Lh(this.color.r,this.color.g,this.color.b);e.v=t/100;var i=qh(e.h,e.s,e.v);i.a=this.color.a,this.color=i,this._updatePicker()}},{key:\"_updatePicker\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.color,e=Lh(t.r,t.g,t.b),i=this.colorPickerCanvas.getContext(\"2d\");void 0===this.pixelRation&&(this.pixelRatio=(window.devicePixelRatio||1)/(i.webkitBackingStorePixelRatio||i.mozBackingStorePixelRatio||i.msBackingStorePixelRatio||i.oBackingStorePixelRatio||i.backingStorePixelRatio||1)),i.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0);var n=this.colorPickerCanvas.clientWidth,o=this.colorPickerCanvas.clientHeight;i.clearRect(0,0,n,o),i.putImageData(this.hueCircle,0,0),i.fillStyle=\"rgba(0,0,0,\"+(1-e.v)+\")\",i.circle(this.centerCoordinates.x,this.centerCoordinates.y,this.r),hs(i).call(i),this.brightnessRange.value=100*e.v,this.opacityRange.value=100*t.a,this.initialColorDiv.style.backgroundColor=\"rgba(\"+this.initialColor.r+\",\"+this.initialColor.g+\",\"+this.initialColor.b+\",\"+this.initialColor.a+\")\",this.newColorDiv.style.backgroundColor=\"rgba(\"+this.color.r+\",\"+this.color.g+\",\"+this.color.b+\",\"+this.color.a+\")\"}},{key:\"_setSize\",value:function(){this.colorPickerCanvas.style.width=\"100%\",this.colorPickerCanvas.style.height=\"100%\",this.colorPickerCanvas.width=289*this.pixelRatio,this.colorPickerCanvas.height=289*this.pixelRatio}},{key:\"_create\",value:function(){var t,e,i,n;if(this.frame=document.createElement(\"div\"),this.frame.className=\"vis-color-picker\",this.colorPickerDiv=document.createElement(\"div\"),this.colorPickerSelector=document.createElement(\"div\"),this.colorPickerSelector.className=\"vis-selector\",this.colorPickerDiv.appendChild(this.colorPickerSelector),this.colorPickerCanvas=document.createElement(\"canvas\"),this.colorPickerDiv.appendChild(this.colorPickerCanvas),this.colorPickerCanvas.getContext){var o=this.colorPickerCanvas.getContext(\"2d\");this.pixelRatio=(window.devicePixelRatio||1)/(o.webkitBackingStorePixelRatio||o.mozBackingStorePixelRatio||o.msBackingStorePixelRatio||o.oBackingStorePixelRatio||o.backingStorePixelRatio||1),this.colorPickerCanvas.getContext(\"2d\").setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0)}else{var r=document.createElement(\"DIV\");r.style.color=\"red\",r.style.fontWeight=\"bold\",r.style.padding=\"10px\",r.innerText=\"Error: your browser does not support HTML canvas\",this.colorPickerCanvas.appendChild(r)}this.colorPickerDiv.className=\"vis-color\",this.opacityDiv=document.createElement(\"div\"),this.opacityDiv.className=\"vis-opacity\",this.brightnessDiv=document.createElement(\"div\"),this.brightnessDiv.className=\"vis-brightness\",this.arrowDiv=document.createElement(\"div\"),this.arrowDiv.className=\"vis-arrow\",this.opacityRange=document.createElement(\"input\");try{this.opacityRange.type=\"range\",this.opacityRange.min=\"0\",this.opacityRange.max=\"100\"}catch(t){}this.opacityRange.value=\"100\",this.opacityRange.className=\"vis-range\",this.brightnessRange=document.createElement(\"input\");try{this.brightnessRange.type=\"range\",this.brightnessRange.min=\"0\",this.brightnessRange.max=\"100\"}catch(t){}this.brightnessRange.value=\"100\",this.brightnessRange.className=\"vis-range\",this.opacityDiv.appendChild(this.opacityRange),this.brightnessDiv.appendChild(this.brightnessRange);var s=this;this.opacityRange.onchange=function(){s._setOpacity(this.value)},this.opacityRange.oninput=function(){s._setOpacity(this.value)},this.brightnessRange.onchange=function(){s._setBrightness(this.value)},this.brightnessRange.oninput=function(){s._setBrightness(this.value)},this.brightnessLabel=document.createElement(\"div\"),this.brightnessLabel.className=\"vis-label vis-brightness\",this.brightnessLabel.innerText=\"brightness:\",this.opacityLabel=document.createElement(\"div\"),this.opacityLabel.className=\"vis-label vis-opacity\",this.opacityLabel.innerText=\"opacity:\",this.newColorDiv=document.createElement(\"div\"),this.newColorDiv.className=\"vis-new-color\",this.newColorDiv.innerText=\"new\",this.initialColorDiv=document.createElement(\"div\"),this.initialColorDiv.className=\"vis-initial-color\",this.initialColorDiv.innerText=\"initial\",this.cancelButton=document.createElement(\"div\"),this.cancelButton.className=\"vis-button vis-cancel\",this.cancelButton.innerText=\"cancel\",this.cancelButton.onclick=Vt(t=this._hide).call(t,this,!1),this.applyButton=document.createElement(\"div\"),this.applyButton.className=\"vis-button vis-apply\",this.applyButton.innerText=\"apply\",this.applyButton.onclick=Vt(e=this._apply).call(e,this),this.saveButton=document.createElement(\"div\"),this.saveButton.className=\"vis-button vis-save\",this.saveButton.innerText=\"save\",this.saveButton.onclick=Vt(i=this._save).call(i,this),this.loadButton=document.createElement(\"div\"),this.loadButton.className=\"vis-button vis-load\",this.loadButton.innerText=\"load last\",this.loadButton.onclick=Vt(n=this._loadLast).call(n,this),this.frame.appendChild(this.colorPickerDiv),this.frame.appendChild(this.arrowDiv),this.frame.appendChild(this.brightnessLabel),this.frame.appendChild(this.brightnessDiv),this.frame.appendChild(this.opacityLabel),this.frame.appendChild(this.opacityDiv),this.frame.appendChild(this.newColorDiv),this.frame.appendChild(this.initialColorDiv),this.frame.appendChild(this.cancelButton),this.frame.appendChild(this.applyButton),this.frame.appendChild(this.saveButton),this.frame.appendChild(this.loadButton)}},{key:\"_bindHammer\",value:function(){var t=this;this.drag={},this.pinch={},this.hammer=new dh(this.colorPickerCanvas),this.hammer.get(\"pinch\").set({enable:!0}),this.hammer.on(\"hammer.input\",(function(e){e.isFirst&&t._moveSelector(e)})),this.hammer.on(\"tap\",(function(e){t._moveSelector(e)})),this.hammer.on(\"panstart\",(function(e){t._moveSelector(e)})),this.hammer.on(\"panmove\",(function(e){t._moveSelector(e)})),this.hammer.on(\"panend\",(function(e){t._moveSelector(e)}))}},{key:\"_generateHueCircle\",value:function(){if(!1===this.generated){var t=this.colorPickerCanvas.getContext(\"2d\");void 0===this.pixelRation&&(this.pixelRatio=(window.devicePixelRatio||1)/(t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1)),t.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0);var e,i,n,o,r=this.colorPickerCanvas.clientWidth,s=this.colorPickerCanvas.clientHeight;t.clearRect(0,0,r,s),this.centerCoordinates={x:.5*r,y:.5*s},this.r=.49*r;var a,h=2*Math.PI/360,l=1/this.r;for(n=0;n<360;n++)for(o=0;o<this.r;o++)e=this.centerCoordinates.x+o*Math.sin(h*n),i=this.centerCoordinates.y+o*Math.cos(h*n),a=qh(.002777777777777778*n,o*l,1),t.fillStyle=\"rgb(\"+a.r+\",\"+a.g+\",\"+a.b+\")\",t.fillRect(e-.5,i-.5,2,2);t.strokeStyle=\"rgba(0,0,0,1)\",t.circle(this.centerCoordinates.x,this.centerCoordinates.y,this.r),t.stroke(),this.hueCircle=t.getImageData(0,0,r,s)}this.generated=!0}},{key:\"_moveSelector\",value:function(t){var e=this.colorPickerDiv.getBoundingClientRect(),i=t.center.x-e.left,n=t.center.y-e.top,o=.5*this.colorPickerDiv.clientHeight,r=.5*this.colorPickerDiv.clientWidth,s=i-r,a=n-o,h=Math.atan2(s,a),l=.98*Math.min(Math.sqrt(s*s+a*a),r),d=Math.cos(h)*l+o,c=Math.sin(h)*l+r;this.colorPickerSelector.style.top=d-.5*this.colorPickerSelector.clientHeight+\"px\",this.colorPickerSelector.style.left=c-.5*this.colorPickerSelector.clientWidth+\"px\";var u=h/(2*Math.PI);u=u<0?u+1:u;var f=l/this.r,p=Lh(this.color.r,this.color.g,this.color.b);p.h=u,p.s=f;var v=qh(p.h,p.s,p.v);v.a=this.color.a,this.color=v,this.initialColorDiv.style.backgroundColor=\"rgba(\"+this.initialColor.r+\",\"+this.initialColor.g+\",\"+this.initialColor.b+\",\"+this.initialColor.a+\")\",this.newColorDiv.style.backgroundColor=\"rgba(\"+this.color.r+\",\"+this.color.g+\",\"+this.color.b+\",\"+this.color.a+\")\"}}]),t}();function el(){for(var t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];if(e.length<1)throw new TypeError(\"Invalid arguments.\");if(1===e.length)return document.createTextNode(e[0]);var n=document.createElement(e[0]);return n.appendChild(el.apply(void 0,wo(Oo(e).call(e,1)))),n}var il,nl=function(){function t(e,i,n){var o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1,r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:function(){return!1};Nn(this,t),this.parent=e,this.changedOptions=[],this.container=i,this.allowCreation=!1,this.hideOption=r,this.options={},this.initialized=!1,this.popupCounter=0,this.defaultOptions={enabled:!1,filter:!0,container:void 0,showButton:!0},At(this.options,this.defaultOptions),this.configureOptions=n,this.moduleOptions={},this.domElements=[],this.popupDiv={},this.popupLimit=5,this.popupHistory={},this.colorPicker=new tl(o),this.wrapper=void 0}return Fn(t,[{key:\"setOptions\",value:function(t){if(void 0!==t){this.popupHistory={},this._removePopup();var e=!0;if(\"string\"==typeof t)this.options.filter=t;else if(So(t))this.options.filter=t.join();else if(\"object\"===go(t)){if(null==t)throw new TypeError(\"options cannot be null\");void 0!==t.container&&(this.options.container=t.container),void 0!==mr(t)&&(this.options.filter=mr(t)),void 0!==t.showButton&&(this.options.showButton=t.showButton),void 0!==t.enabled&&(e=t.enabled)}else\"boolean\"==typeof t?(this.options.filter=!0,e=t):\"function\"==typeof t&&(this.options.filter=t,e=!0);!1===mr(this.options)&&(e=!1),this.options.enabled=e}this._clean()}},{key:\"setModuleOptions\",value:function(t){this.moduleOptions=t,!0===this.options.enabled&&(this._clean(),void 0!==this.options.container&&(this.container=this.options.container),this._create())}},{key:\"_create\",value:function(){this._clean(),this.changedOptions=[];var t=mr(this.options),e=0,i=!1;for(var n in this.configureOptions)Object.prototype.hasOwnProperty.call(this.configureOptions,n)&&(this.allowCreation=!1,i=!1,\"function\"==typeof t?i=(i=t(n,[]))||this._handleObject(this.configureOptions[n],[n],!0):!0!==t&&-1===Hr(t).call(t,n)||(i=!0),!1!==i&&(this.allowCreation=!0,e>0&&this._makeItem([]),this._makeHeader(n),this._handleObject(this.configureOptions[n],[n])),e++);this._makeButton(),this._push()}},{key:\"_push\",value:function(){this.wrapper=document.createElement(\"div\"),this.wrapper.className=\"vis-configuration-wrapper\",this.container.appendChild(this.wrapper);for(var t=0;t<this.domElements.length;t++)this.wrapper.appendChild(this.domElements[t]);this._showPopupIfNeeded()}},{key:\"_clean\",value:function(){for(var t=0;t<this.domElements.length;t++)this.wrapper.removeChild(this.domElements[t]);void 0!==this.wrapper&&(this.container.removeChild(this.wrapper),this.wrapper=void 0),this.domElements=[],this._removePopup()}},{key:\"_getValue\",value:function(t){for(var e=this.moduleOptions,i=0;i<t.length;i++){if(void 0===e[t[i]]){e=void 0;break}e=e[t[i]]}return e}},{key:\"_makeItem\",value:function(t){if(!0===this.allowCreation){var e=document.createElement(\"div\");e.className=\"vis-configuration vis-config-item vis-config-s\"+t.length;for(var i=arguments.length,n=new Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];return Wo(n).call(n,(function(t){e.appendChild(t)})),this.domElements.push(e),this.domElements.length}return 0}},{key:\"_makeHeader\",value:function(t){var e=document.createElement(\"div\");e.className=\"vis-configuration vis-config-header\",e.innerText=t,this._makeItem([],e)}},{key:\"_makeLabel\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=document.createElement(\"div\");if(n.className=\"vis-configuration vis-config-label vis-config-s\"+e.length,!0===i){for(;n.firstChild;)n.removeChild(n.firstChild);n.appendChild(el(\"i\",\"b\",t))}else n.innerText=t+\":\";return n}},{key:\"_makeDropdown\",value:function(t,e,i){var n=document.createElement(\"select\");n.className=\"vis-configuration vis-config-select\";var o=0;void 0!==e&&-1!==Hr(t).call(t,e)&&(o=Hr(t).call(t,e));for(var r=0;r<t.length;r++){var s=document.createElement(\"option\");s.value=t[r],r===o&&(s.selected=\"selected\"),s.innerText=t[r],n.appendChild(s)}var a=this;n.onchange=function(){a._update(this.value,i)};var h=this._makeLabel(i[i.length-1],i);this._makeItem(i,h,n)}},{key:\"_makeRange\",value:function(t,e,i){var n=t[0],o=t[1],r=t[2],s=t[3],a=document.createElement(\"input\");a.className=\"vis-configuration vis-config-range\";try{a.type=\"range\",a.min=o,a.max=r}catch(t){}a.step=s;var h=\"\",l=0;if(void 0!==e){var d=1.2;e<0&&e*d<o?(a.min=Math.ceil(e*d),l=a.min,h=\"range increased\"):e/d<o&&(a.min=Math.ceil(e/d),l=a.min,h=\"range increased\"),e*d>r&&1!==r&&(a.max=Math.ceil(e*d),l=a.max,h=\"range increased\"),a.value=e}else a.value=n;var c=document.createElement(\"input\");c.className=\"vis-configuration vis-config-rangeinput\",c.value=a.value;var u=this;a.onchange=function(){c.value=this.value,u._update(Number(this.value),i)},a.oninput=function(){c.value=this.value};var f=this._makeLabel(i[i.length-1],i),p=this._makeItem(i,f,a,c);\"\"!==h&&this.popupHistory[p]!==l&&(this.popupHistory[p]=l,this._setupPopup(h,p))}},{key:\"_makeButton\",value:function(){var t=this;if(!0===this.options.showButton){var e=document.createElement(\"div\");e.className=\"vis-configuration vis-config-button\",e.innerText=\"generate options\",e.onclick=function(){t._printOptions()},e.onmouseover=function(){e.className=\"vis-configuration vis-config-button hover\"},e.onmouseout=function(){e.className=\"vis-configuration vis-config-button\"},this.optionsContainer=document.createElement(\"div\"),this.optionsContainer.className=\"vis-configuration vis-config-option-container\",this.domElements.push(this.optionsContainer),this.domElements.push(e)}}},{key:\"_setupPopup\",value:function(t,e){var i=this;if(!0===this.initialized&&!0===this.allowCreation&&this.popupCounter<this.popupLimit){var n=document.createElement(\"div\");n.id=\"vis-configuration-popup\",n.className=\"vis-configuration-popup\",n.innerText=t,n.onclick=function(){i._removePopup()},this.popupCounter+=1,this.popupDiv={html:n,index:e}}}},{key:\"_removePopup\",value:function(){void 0!==this.popupDiv.html&&(this.popupDiv.html.parentNode.removeChild(this.popupDiv.html),clearTimeout(this.popupDiv.hideTimeout),clearTimeout(this.popupDiv.deleteTimeout),this.popupDiv={})}},{key:\"_showPopupIfNeeded\",value:function(){var t=this;if(void 0!==this.popupDiv.html){var e=this.domElements[this.popupDiv.index].getBoundingClientRect();this.popupDiv.html.style.left=e.left+\"px\",this.popupDiv.html.style.top=e.top-30+\"px\",document.body.appendChild(this.popupDiv.html),this.popupDiv.hideTimeout=rs((function(){t.popupDiv.html.style.opacity=0}),1500),this.popupDiv.deleteTimeout=rs((function(){t._removePopup()}),1800)}}},{key:\"_makeCheckbox\",value:function(t,e,i){var n=document.createElement(\"input\");n.type=\"checkbox\",n.className=\"vis-configuration vis-config-checkbox\",n.checked=t,void 0!==e&&(n.checked=e,e!==t&&(\"object\"===go(t)?e!==t.enabled&&this.changedOptions.push({path:i,value:e}):this.changedOptions.push({path:i,value:e})));var o=this;n.onchange=function(){o._update(this.checked,i)};var r=this._makeLabel(i[i.length-1],i);this._makeItem(i,r,n)}},{key:\"_makeTextInput\",value:function(t,e,i){var n=document.createElement(\"input\");n.type=\"text\",n.className=\"vis-configuration vis-config-text\",n.value=e,e!==t&&this.changedOptions.push({path:i,value:e});var o=this;n.onchange=function(){o._update(this.value,i)};var r=this._makeLabel(i[i.length-1],i);this._makeItem(i,r,n)}},{key:\"_makeColorField\",value:function(t,e,i){var n=this,o=t[1],r=document.createElement(\"div\");\"none\"!==(e=void 0===e?o:e)?(r.className=\"vis-configuration vis-config-colorBlock\",r.style.backgroundColor=e):r.className=\"vis-configuration vis-config-colorBlock none\",e=void 0===e?o:e,r.onclick=function(){n._showColorPicker(e,r,i)};var s=this._makeLabel(i[i.length-1],i);this._makeItem(i,s,r)}},{key:\"_showColorPicker\",value:function(t,e,i){var n=this;e.onclick=function(){},this.colorPicker.insertTo(e),this.colorPicker.show(),this.colorPicker.setColor(t),this.colorPicker.setUpdateCallback((function(t){var o=\"rgba(\"+t.r+\",\"+t.g+\",\"+t.b+\",\"+t.a+\")\";e.style.backgroundColor=o,n._update(o,i)})),this.colorPicker.setCloseCallback((function(){e.onclick=function(){n._showColorPicker(t,e,i)}}))}},{key:\"_handleObject\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=!1,o=mr(this.options),r=!1;for(var s in t)if(Object.prototype.hasOwnProperty.call(t,s)){n=!0;var a=t[s],h=Sh(e,s);if(\"function\"==typeof o&&!1===(n=o(s,e))&&!So(a)&&\"string\"!=typeof a&&\"boolean\"!=typeof a&&a instanceof Object&&(this.allowCreation=!1,n=this._handleObject(a,h,!0),this.allowCreation=!1===i),!1!==n){r=!0;var l=this._getValue(h);if(So(a))this._handleArray(a,l,h);else if(\"string\"==typeof a)this._makeTextInput(a,l,h);else if(\"boolean\"==typeof a)this._makeCheckbox(a,l,h);else if(a instanceof Object){if(!this.hideOption(e,s,this.moduleOptions))if(void 0!==a.enabled){var d=Sh(h,\"enabled\"),c=this._getValue(d);if(!0===c){var u=this._makeLabel(s,h,!0);this._makeItem(h,u),r=this._handleObject(a,h)||r}else this._makeCheckbox(a,c,h)}else{var f=this._makeLabel(s,h,!0);this._makeItem(h,f),r=this._handleObject(a,h)||r}}else console.error(\"dont know how to handle\",a,s,h)}}return r}},{key:\"_handleArray\",value:function(t,e,i){\"string\"==typeof t[0]&&\"color\"===t[0]?(this._makeColorField(t,e,i),t[1]!==e&&this.changedOptions.push({path:i,value:e})):\"string\"==typeof t[0]?(this._makeDropdown(t,e,i),t[0]!==e&&this.changedOptions.push({path:i,value:e})):\"number\"==typeof t[0]&&(this._makeRange(t,e,i),t[0]!==e&&this.changedOptions.push({path:i,value:Number(e)}))}},{key:\"_update\",value:function(t,e){var i=this._constructOptions(t,e);this.parent.body&&this.parent.body.emitter&&this.parent.body.emitter.emit&&this.parent.body.emitter.emit(\"configChange\",i),this.initialized=!0,this.parent.setOptions(i)}},{key:\"_constructOptions\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=i;t=\"false\"!==(t=\"true\"===t||t)&&t;for(var o=0;o<e.length;o++)\"global\"!==e[o]&&(void 0===n[e[o]]&&(n[e[o]]={}),o!==e.length-1?n=n[e[o]]:n[e[o]]=t);return i}},{key:\"_printOptions\",value:function(){for(var t=this.getOptions();this.optionsContainer.firstChild;)this.optionsContainer.removeChild(this.optionsContainer.firstChild);this.optionsContainer.appendChild(el(\"pre\",\"const options = \"+es(t,null,2)))}},{key:\"getOptions\",value:function(){for(var t={},e=0;e<this.changedOptions.length;e++)this._constructOptions(this.changedOptions[e].value,this.changedOptions[e].path,t);return t}}]),t}(),ol=!1,rl=\"background: #FFeeee; color: #dd0000\",sl=ch,al=tl,hl=nl,ll=dh,dl=function(){function t(e,i){Nn(this,t),this.container=e,this.overflowMethod=i||\"cap\",this.x=0,this.y=0,this.padding=5,this.hidden=!1,this.frame=document.createElement(\"div\"),this.frame.className=\"vis-tooltip\",this.container.appendChild(this.frame)}return Fn(t,[{key:\"setPosition\",value:function(t,e){this.x=Br(t),this.y=Br(e)}},{key:\"setText\",value:function(t){if(t instanceof Element){for(;this.frame.firstChild;)this.frame.removeChild(this.frame.firstChild);this.frame.appendChild(t)}else this.frame.innerText=t}},{key:\"show\",value:function(t){if(void 0===t&&(t=!0),!0===t){var e=this.frame.clientHeight,i=this.frame.clientWidth,n=this.frame.parentNode.clientHeight,o=this.frame.parentNode.clientWidth,r=0,s=0;if(\"flip\"==this.overflowMethod){var a=!1,h=!0;this.y-e<this.padding&&(h=!1),this.x+i>o-this.padding&&(a=!0),r=a?this.x-i:this.x,s=h?this.y-e:this.y}else(s=this.y-e)+e+this.padding>n&&(s=n-e-this.padding),s<this.padding&&(s=this.padding),(r=this.x)+i+this.padding>o&&(r=o-i-this.padding),r<this.padding&&(r=this.padding);this.frame.style.left=r+\"px\",this.frame.style.top=s+\"px\",this.frame.style.visibility=\"visible\",this.hidden=!1}else this.hide()}},{key:\"hide\",value:function(){this.hidden=!0,this.frame.style.left=\"0\",this.frame.style.top=\"0\",this.frame.style.visibility=\"hidden\"}},{key:\"destroy\",value:function(){this.frame.parentNode.removeChild(this.frame)}}]),t}(),cl=rl,ul=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"validate\",value:function(e,i,n){ol=!1,il=i;var o=i;return void 0!==n&&(o=i[n]),t.parse(e,o,[]),ol}},{key:\"parse\",value:function(e,i,n){for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&t.check(o,e,i,n)}},{key:\"check\",value:function(e,i,n,o){if(void 0!==n[e]||void 0!==n.__any__){var r=e,s=!0;void 0===n[e]&&void 0!==n.__any__&&(r=\"__any__\",s=\"object\"===t.getType(i[e]));var a=n[r];s&&void 0!==a.__type__&&(a=a.__type__),t.checkFields(e,i,n,r,a,o)}else t.getSuggestion(e,n,o)}},{key:\"checkFields\",value:function(e,i,n,o,r,s){var a=function(i){console.error(\"%c\"+i+t.printLocation(s,e),rl)},h=t.getType(i[e]),l=r[h];void 0!==l?\"array\"===t.getType(l)&&-1===Hr(l).call(l,i[e])?(a('Invalid option detected in \"'+e+'\". Allowed values are:'+t.print(l)+' not \"'+i[e]+'\". '),ol=!0):\"object\"===h&&\"__any__\"!==o&&(s=Sh(s,e),t.parse(i[e],n[o],s)):void 0===r.any&&(a('Invalid type received for \"'+e+'\". Expected: '+t.print(zo(r))+\". Received [\"+h+'] \"'+i[e]+'\"'),ol=!0)}},{key:\"getType\",value:function(t){var e=go(t);return\"object\"===e?null===t?\"null\":t instanceof Boolean?\"boolean\":t instanceof Number?\"number\":t instanceof String?\"string\":So(t)?\"array\":t instanceof Date?\"date\":void 0!==t.nodeType?\"dom\":!0===t._isAMomentObject?\"moment\":\"object\":\"number\"===e?\"number\":\"boolean\"===e?\"boolean\":\"string\"===e?\"string\":void 0===e?\"undefined\":e}},{key:\"getSuggestion\",value:function(e,i,n){var o,r=t.findInOptions(e,i,n,!1),s=t.findInOptions(e,il,[],!0);o=void 0!==r.indexMatch?\" in \"+t.printLocation(r.path,e,\"\")+'Perhaps it was incomplete? Did you mean: \"'+r.indexMatch+'\"?\\n\\n':s.distance<=4&&r.distance>s.distance?\" in \"+t.printLocation(r.path,e,\"\")+\"Perhaps it was misplaced? Matching option found at: \"+t.printLocation(s.path,s.closestMatch,\"\"):r.distance<=8?'. Did you mean \"'+r.closestMatch+'\"?'+t.printLocation(r.path,e):\". Did you mean one of these: \"+t.print(zo(i))+t.printLocation(n,e),console.error('%cUnknown option detected: \"'+e+'\"'+o,rl),ol=!0}},{key:\"findInOptions\",value:function(e,i,n){var o=arguments.length>3&&void 0!==arguments[3]&&arguments[3],r=1e9,s=\"\",a=[],h=e.toLowerCase(),l=void 0;for(var d in i){var c=void 0;if(void 0!==i[d].__type__&&!0===o){var u=t.findInOptions(e,i[d],Sh(n,d));r>u.distance&&(s=u.closestMatch,a=u.path,r=u.distance,l=u.indexMatch)}else{var f;-1!==Hr(f=d.toLowerCase()).call(f,h)&&(l=d),r>(c=t.levenshteinDistance(e,d))&&(s=d,a=Th(n),r=c)}}return{closestMatch:s,path:a,distance:r,indexMatch:l}}},{key:\"printLocation\",value:function(t,e){for(var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:\"Problem value found at: \\n\",n=\"\\n\\n\"+i+\"options = {\\n\",o=0;o<t.length;o++){for(var r=0;r<o+1;r++)n+=\"  \";n+=t[o]+\": {\\n\"}for(var s=0;s<t.length+1;s++)n+=\"  \";n+=e+\"\\n\";for(var a=0;a<t.length+1;a++){for(var h=0;h<t.length-a;h++)n+=\"  \";n+=\"}\\n\"}return n+\"\\n\\n\"}},{key:\"print\",value:function(t){return es(t).replace(/(\")|(\\[)|(\\])|(,\"__type__\")/g,\"\").replace(/(,)/g,\", \")}},{key:\"levenshteinDistance\",value:function(t,e){if(0===t.length)return e.length;if(0===e.length)return t.length;var i,n,o=[];for(i=0;i<=e.length;i++)o[i]=[i];for(n=0;n<=t.length;n++)o[0][n]=n;for(i=1;i<=e.length;i++)for(n=1;n<=t.length;n++)e.charAt(i-1)==t.charAt(n-1)?o[i][n]=o[i-1][n-1]:o[i][n]=Math.min(o[i-1][n-1]+1,Math.min(o[i][n-1]+1,o[i-1][n]+1));return o[e.length][t.length]}}]),t}(),fl=Object.freeze({__proto__:null,Activator:sl,Alea:ah,ColorPicker:al,Configurator:hl,DELETE:eh,HSVToHex:Vh,HSVToRGB:qh,Hammer:ll,Popup:dl,RGBToHSV:Lh,RGBToHex:jh,VALIDATOR_PRINT_STYLE:cl,Validator:ul,addClassName:function(t,e){var i=t.className.split(\" \"),n=e.split(\" \");i=Eo(i).call(i,mr(n).call(n,(function(t){return!dr(i).call(i,t)}))),t.className=i.join(\" \")},addCssText:function(t,e){var i=Hh(t.style.cssText),n=Hh(e),o=Qa(Qa({},i),n);t.style.cssText=Wh(o)},addEventListener:Bh,binarySearchCustom:function(t,e,i,n){for(var o=0,r=0,s=t.length-1;r<=s&&o<1e4;){var a=Math.floor((r+s)/2),h=t[a],l=e(void 0===n?h[i]:h[i][n]);if(0==l)return a;-1==l?r=a+1:s=a-1,o++}return-1},binarySearchValue:function(t,e,i,n,o){var r,s,a,h,l=0,d=0,c=t.length-1;for(o=null!=o?o:function(t,e){return t==e?0:t<e?-1:1};d<=c&&l<1e4;){if(h=Math.floor(.5*(c+d)),r=t[Math.max(0,h-1)][i],s=t[h][i],a=t[Math.min(t.length-1,h+1)][i],0==o(s,e))return h;if(o(r,e)<0&&o(s,e)>0)return\"before\"==n?Math.max(0,h-1):h;if(o(s,e)<0&&o(a,e)>0)return\"before\"==n?h:Math.min(t.length-1,h+1);o(s,e)<0?d=h+1:c=h-1,l++}return-1},bridgeObject:Kh,copyAndExtendArray:Sh,copyArray:Th,deepExtend:Ch,deepObjectAssign:nh,easingFunctions:Zh,equalArray:function(t,e){if(t.length!==e.length)return!1;for(var i=0,n=t.length;i<n;i++)if(t[i]!=e[i])return!1;return!0},extend:xh,fillIfDefined:_h,forEach:Dh,getAbsoluteLeft:Mh,getAbsoluteRight:function(t){return t.getBoundingClientRect().right},getAbsoluteTop:Ph,getScrollBarWidth:function(){var t=document.createElement(\"p\");t.style.width=\"100%\",t.style.height=\"200px\";var e=document.createElement(\"div\");e.style.position=\"absolute\",e.style.top=\"0px\",e.style.left=\"0px\",e.style.visibility=\"hidden\",e.style.width=\"200px\",e.style.height=\"150px\",e.style.overflow=\"hidden\",e.appendChild(t),document.body.appendChild(e);var i=t.offsetWidth;e.style.overflow=\"scroll\";var n=t.offsetWidth;return i==n&&(n=e.clientWidth),document.body.removeChild(e),i-n},getTarget:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window.event,e=null;return t&&(t.target?e=t.target:t.srcElement&&(e=t.srcElement)),e instanceof Element&&(null==e.nodeType||3!=e.nodeType||(e=e.parentNode)instanceof Element)?e:null},getType:function(t){var e=go(t);return\"object\"===e?null===t?\"null\":t instanceof Boolean?\"Boolean\":t instanceof Number?\"Number\":t instanceof String?\"String\":So(t)?\"Array\":t instanceof Date?\"Date\":\"Object\":\"number\"===e?\"Number\":\"boolean\"===e?\"Boolean\":\"string\"===e?\"String\":void 0===e?\"undefined\":e},hasParent:function(t,e){for(var i=t;i;){if(i===e)return!0;if(!i.parentNode)return!1;i=i.parentNode}return!1},hexToHSV:Uh,hexToRGB:Ah,insertSort:function(t,e){for(var i=0;i<t.length;i++){var n=t[i],o=void 0;for(o=i;o>0&&e(n,t[o-1])<0;o--)t[o]=t[o-1];t[o]=n}return t},isDate:function(t){if(t instanceof Date)return!0;if(bh(t)){if(uh.exec(t))return!0;if(!isNaN(Date.parse(t)))return!0}return!1},isNumber:yh,isObject:wh,isString:bh,isValidHex:Yh,isValidRGB:Xh,isValidRGBA:Gh,mergeOptions:$h,option:Nh,overrideOpacity:Fh,parseColor:Rh,preventDefault:function(t){t||(t=window.event),t&&(t.preventDefault?t.preventDefault():t.returnValue=!1)},pureDeepObjectAssign:ih,recursiveDOMDelete:mh,removeClassName:function(t,e){var i=t.className.split(\" \"),n=e.split(\" \");i=mr(i).call(i,(function(t){return!dr(n).call(n,t)})),t.className=i.join(\" \")},removeCssText:function(t,e){var i=Hh(t.style.cssText),n=Hh(e);for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&delete i[o];t.style.cssText=Wh(i)},removeEventListener:zh,selectiveBridgeObject:function(t,e){if(null!==e&&\"object\"===go(e)){for(var i=Gr(e),n=0;n<t.length;n++)Object.prototype.hasOwnProperty.call(e,t[n])&&\"object\"==go(e[t[n]])&&(i[t[n]]=Kh(e[t[n]]));return i}return null},selectiveDeepExtend:Eh,selectiveExtend:function(t,e){if(!So(t))throw new Error(\"Array with property names expected as first argument\");for(var i=arguments.length,n=new Array(i>2?i-2:0),o=2;o<i;o++)n[o-2]=arguments[o];for(var r=0,s=n;r<s.length;r++)for(var a=s[r],h=0;h<t.length;h++){var l=t[h];a&&Object.prototype.hasOwnProperty.call(a,l)&&(e[l]=a[l])}return e},selectiveNotDeepExtend:Oh,throttle:function(t){var e=!1;return function(){e||(e=!0,requestAnimationFrame((function(){e=!1,t()})))}},toArray:Ih,topMost:Qh,updateProperty:function(t,e,i){return t[e]!==i&&(t[e]=i,!0)}});function pl(t){return _l=t,function(){var t={};xl=0,void(El=_l.charAt(0)),Nl(),\"strict\"===Ol&&(t.strict=!0,Nl());\"graph\"!==Ol&&\"digraph\"!==Ol||(t.type=Ol,Nl());Cl===bl&&(t.id=Ol,Nl());if(\"{\"!=Ol)throw Hl(\"Angle bracket { expected\");if(Nl(),Al(t),\"}\"!=Ol)throw Hl(\"Angle bracket } expected\");if(Nl(),\"\"!==Ol)throw Hl(\"End of file expected\");return Nl(),delete t.node,delete t.edge,delete t.graph,t}()}var vl={fontsize:\"font.size\",fontcolor:\"font.color\",labelfontcolor:\"font.color\",fontname:\"font.face\",color:[\"color.border\",\"color.background\"],fillcolor:\"color.background\",tooltip:\"title\",labeltooltip:\"title\"},gl=Gr(vl);gl.color=\"color.color\",gl.style=\"dashes\";var yl=0,ml=1,bl=2,wl=3,kl={\"{\":!0,\"}\":!0,\"[\":!0,\"]\":!0,\";\":!0,\"=\":!0,\",\":!0,\"->\":!0,\"--\":!0},_l=\"\",xl=0,El=\"\",Ol=\"\",Cl=yl;function Sl(){xl++,El=_l.charAt(xl)}function Tl(){return _l.charAt(xl+1)}function Ml(t){var e=t.charCodeAt(0);return e<47?35===e||46===e:e<59?e>47:e<91?e>64:e<96?95===e:e<123&&e>96}function Pl(t,e){if(t||(t={}),e)for(var i in e)e.hasOwnProperty(i)&&(t[i]=e[i]);return t}function Dl(t,e,i){for(var n=e.split(\".\"),o=t;n.length;){var r=n.shift();n.length?(o[r]||(o[r]={}),o=o[r]):o[r]=i}}function Il(t,e){for(var i,n,o=null,r=[t],s=t;s.parent;)r.push(s.parent),s=s.parent;if(s.nodes)for(i=0,n=s.nodes.length;i<n;i++)if(e.id===s.nodes[i].id){o=s.nodes[i];break}for(o||(o={id:e.id},t.node&&(o.attr=Pl(o.attr,t.node))),i=r.length-1;i>=0;i--){var a,h=r[i];h.nodes||(h.nodes=[]),-1===Hr(a=h.nodes).call(a,o)&&h.nodes.push(o)}e.attr&&(o.attr=Pl(o.attr,e.attr))}function Bl(t,e){if(t.edges||(t.edges=[]),t.edges.push(e),t.edge){var i=Pl({},t.edge);e.attr=Pl(i,e.attr)}}function zl(t,e,i,n,o){var r={from:e,to:i,type:n};return t.edge&&(r.attr=Pl({},t.edge)),r.attr=Pl(r.attr||{},o),null!=o&&o.hasOwnProperty(\"arrows\")&&null!=o.arrows&&(r.arrows={to:{enabled:!0,type:o.arrows.type}},o.arrows=null),r}function Nl(){for(Cl=yl,Ol=\"\";\" \"===El||\"\\t\"===El||\"\\n\"===El||\"\\r\"===El;)Sl();do{var t=!1;if(\"#\"===El){for(var e=xl-1;\" \"===_l.charAt(e)||\"\\t\"===_l.charAt(e);)e--;if(\"\\n\"===_l.charAt(e)||\"\"===_l.charAt(e)){for(;\"\"!=El&&\"\\n\"!=El;)Sl();t=!0}}if(\"/\"===El&&\"/\"===Tl()){for(;\"\"!=El&&\"\\n\"!=El;)Sl();t=!0}if(\"/\"===El&&\"*\"===Tl()){for(;\"\"!=El;){if(\"*\"===El&&\"/\"===Tl()){Sl(),Sl();break}Sl()}t=!0}for(;\" \"===El||\"\\t\"===El||\"\\n\"===El||\"\\r\"===El;)Sl()}while(t);if(\"\"!==El){var i=El+Tl();if(kl[i])return Cl=ml,Ol=i,Sl(),void Sl();if(kl[El])return Cl=ml,Ol=El,void Sl();if(Ml(El)||\"-\"===El){for(Ol+=El,Sl();Ml(El);)Ol+=El,Sl();return\"false\"===Ol?Ol=!1:\"true\"===Ol?Ol=!0:isNaN(Number(Ol))||(Ol=Number(Ol)),void(Cl=bl)}if('\"'===El){for(Sl();\"\"!=El&&('\"'!=El||'\"'===El&&'\"'===Tl());)'\"'===El?(Ol+=El,Sl()):\"\\\\\"===El&&\"n\"===Tl()?(Ol+=\"\\n\",Sl()):Ol+=El,Sl();if('\"'!=El)throw Hl('End of string \" expected');return Sl(),void(Cl=bl)}for(Cl=wl;\"\"!=El;)Ol+=El,Sl();throw new SyntaxError('Syntax error in part \"'+Wl(Ol,30)+'\"')}Cl=ml}function Al(t){for(;\"\"!==Ol&&\"}\"!=Ol;)Fl(t),\";\"===Ol&&Nl()}function Fl(t){var e=jl(t);if(e)Rl(t,e);else if(!function(t){if(\"node\"===Ol)return Nl(),t.node=Ll(),\"node\";if(\"edge\"===Ol)return Nl(),t.edge=Ll(),\"edge\";if(\"graph\"===Ol)return Nl(),t.graph=Ll(),\"graph\";return null}(t)){if(Cl!=bl)throw Hl(\"Identifier expected\");var i=Ol;if(Nl(),\"=\"===Ol){if(Nl(),Cl!=bl)throw Hl(\"Identifier expected\");t[i]=Ol,Nl()}else!function(t,e){var i={id:e},n=Ll();n&&(i.attr=n);Il(t,i),Rl(t,e)}(t,i)}}function jl(t){var e=null;if(\"subgraph\"===Ol&&((e={}).type=\"subgraph\",Nl(),Cl===bl&&(e.id=Ol,Nl())),\"{\"===Ol){if(Nl(),e||(e={}),e.parent=t,e.node=t.node,e.edge=t.edge,e.graph=t.graph,Al(e),\"}\"!=Ol)throw Hl(\"Angle bracket } expected\");Nl(),delete e.node,delete e.edge,delete e.graph,delete e.parent,t.subgraphs||(t.subgraphs=[]),t.subgraphs.push(e)}return e}function Rl(t,e){for(;\"->\"===Ol||\"--\"===Ol;){var i,n=Ol;Nl();var o=jl(t);if(o)i=o;else{if(Cl!=bl)throw Hl(\"Identifier or subgraph expected\");Il(t,{id:i=Ol}),Nl()}Bl(t,zl(t,e,i,n,Ll())),e=i}}function Ll(){for(var t,e,i=null,n={dashed:!0,solid:!1,dotted:[1,5]},o={dot:\"circle\",box:\"box\",crow:\"crow\",curve:\"curve\",icurve:\"inv_curve\",normal:\"triangle\",inv:\"inv_triangle\",diamond:\"diamond\",tee:\"bar\",vee:\"vee\"},r=new Array,s=new Array;\"[\"===Ol;){for(Nl(),i={};\"\"!==Ol&&\"]\"!=Ol;){if(Cl!=bl)throw Hl(\"Attribute name expected\");var a=Ol;if(Nl(),\"=\"!=Ol)throw Hl(\"Equal sign = expected\");if(Nl(),Cl!=bl)throw Hl(\"Attribute value expected\");var h=Ol;\"style\"===a&&(h=n[h]),\"arrowhead\"===a&&(a=\"arrows\",h={to:{enabled:!0,type:o[h]}}),\"arrowtail\"===a&&(a=\"arrows\",h={from:{enabled:!0,type:o[h]}}),r.push({attr:i,name:a,value:h}),s.push(a),Nl(),\",\"==Ol&&Nl()}if(\"]\"!=Ol)throw Hl(\"Bracket ] expected\");Nl()}if(dr(s).call(s,\"dir\")){var l={arrows:{}};for(t=0;t<r.length;t++)if(\"arrows\"===r[t].name)if(null!=r[t].value.to)l.arrows.to=t;else{if(null==r[t].value.from)throw Hl(\"Invalid value of arrows\");l.arrows.from=t}else\"dir\"===r[t].name&&(l.dir=t);var d,c,u=r[l.dir].value;if(!dr(s).call(s,\"arrows\"))if(\"both\"===u)r.push({attr:r[l.dir].attr,name:\"arrows\",value:{to:{enabled:!0}}}),l.arrows.to=r.length-1,r.push({attr:r[l.dir].attr,name:\"arrows\",value:{from:{enabled:!0}}}),l.arrows.from=r.length-1;else if(\"forward\"===u)r.push({attr:r[l.dir].attr,name:\"arrows\",value:{to:{enabled:!0}}}),l.arrows.to=r.length-1;else if(\"back\"===u)r.push({attr:r[l.dir].attr,name:\"arrows\",value:{from:{enabled:!0}}}),l.arrows.from=r.length-1;else{if(\"none\"!==u)throw Hl('Invalid dir type \"'+u+'\"');r.push({attr:r[l.dir].attr,name:\"arrows\",value:\"\"}),l.arrows.to=r.length-1}if(\"both\"===u)l.arrows.to&&l.arrows.from?(c=r[l.arrows.to].value.to.type,d=r[l.arrows.from].value.from.type,r[l.arrows.to]={attr:r[l.arrows.to].attr,name:r[l.arrows.to].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}},er(r).call(r,l.arrows.from,1)):l.arrows.to?(c=r[l.arrows.to].value.to.type,d=\"arrow\",r[l.arrows.to]={attr:r[l.arrows.to].attr,name:r[l.arrows.to].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}}):l.arrows.from&&(c=\"arrow\",d=r[l.arrows.from].value.from.type,r[l.arrows.from]={attr:r[l.arrows.from].attr,name:r[l.arrows.from].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}});else if(\"back\"===u)l.arrows.to&&l.arrows.from?(c=\"\",d=r[l.arrows.from].value.from.type,r[l.arrows.from]={attr:r[l.arrows.from].attr,name:r[l.arrows.from].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}}):l.arrows.to?(c=\"\",d=\"arrow\",l.arrows.from=l.arrows.to,r[l.arrows.from]={attr:r[l.arrows.from].attr,name:r[l.arrows.from].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}}):l.arrows.from&&(c=\"\",d=r[l.arrows.from].value.from.type,r[l.arrows.to]={attr:r[l.arrows.from].attr,name:r[l.arrows.from].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}}),r[l.arrows.from]={attr:r[l.arrows.from].attr,name:r[l.arrows.from].name,value:{from:{enabled:!0,type:r[l.arrows.from].value.from.type}}};else if(\"none\"===u){var f;r[f=l.arrows.to?l.arrows.to:l.arrows.from]={attr:r[f].attr,name:r[f].name,value:\"\"}}else{if(\"forward\"!==u)throw Hl('Invalid dir type \"'+u+'\"');l.arrows.to&&l.arrows.from||l.arrows.to?(c=r[l.arrows.to].value.to.type,d=\"\",r[l.arrows.to]={attr:r[l.arrows.to].attr,name:r[l.arrows.to].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}}):l.arrows.from&&(c=\"arrow\",d=\"\",l.arrows.to=l.arrows.from,r[l.arrows.to]={attr:r[l.arrows.to].attr,name:r[l.arrows.to].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}}),r[l.arrows.to]={attr:r[l.arrows.to].attr,name:r[l.arrows.to].name,value:{to:{enabled:!0,type:r[l.arrows.to].value.to.type}}}}er(r).call(r,l.dir,1)}if(dr(s).call(s,\"penwidth\")){var p=[];for(e=r.length,t=0;t<e;t++)\"width\"!==r[t].name&&(\"penwidth\"===r[t].name&&(r[t].name=\"width\"),p.push(r[t]));r=p}for(e=r.length,t=0;t<e;t++)Dl(r[t].attr,r[t].name,r[t].value);return i}function Hl(t){return new SyntaxError(t+', got \"'+Wl(Ol,30)+'\" (char '+xl+\")\")}function Wl(t,e){return t.length<=e?t:t.substr(0,27)+\"...\"}function ql(t,e,i){for(var n=e.split(\".\"),o=n.pop(),r=t,s=0;s<n.length;s++){var a=n[s];a in r||(r[a]={}),r=r[a]}return r[o]=i,t}function Vl(t,e){var i={};for(var n in t)if(t.hasOwnProperty(n)){var o=e[n];So(o)?Wo(o).call(o,(function(e){ql(i,e,t[n])})):ql(i,\"string\"==typeof o?o:n,t[n])}return i}function Ul(t){var e,i=pl(t),n={nodes:[],edges:[],options:{}};i.nodes&&Wo(e=i.nodes).call(e,(function(t){var e={id:t.id,label:String(t.label||t.id)};Pl(e,Vl(t.attr,vl)),e.image&&(e.shape=\"image\"),n.nodes.push(e)}));if(i.edges){var o,r=function(t){var e={from:t.from,to:t.to};return Pl(e,Vl(t.attr,gl)),null==e.arrows&&\"->\"===t.type&&(e.arrows=\"to\"),e};Wo(o=i.edges).call(o,(function(t){var e,i,o,s,a,h,l;(e=t.from instanceof Object?t.from.nodes:{id:t.from},i=t.to instanceof Object?t.to.nodes:{id:t.to},t.from instanceof Object&&t.from.edges)&&Wo(o=t.from.edges).call(o,(function(t){var e=r(t);n.edges.push(e)}));(a=i,h=function(e,i){var o=zl(n,e.id,i.id,t.type,t.attr),s=r(o);n.edges.push(s)},So(s=e)?Wo(s).call(s,(function(t){So(a)?Wo(a).call(a,(function(e){h(t,e)})):h(t,a)})):So(a)?Wo(a).call(a,(function(t){h(s,t)})):h(s,a),t.to instanceof Object&&t.to.edges)&&Wo(l=t.to.edges).call(l,(function(t){var e=r(t);n.edges.push(e)}))}))}return i.attr&&(n.options=i.attr),n}var Yl=Object.freeze({__proto__:null,parseDOT:pl,DOTToGraph:Ul});function Xl(t,e){var i,n={edges:{inheritColor:!1},nodes:{fixed:!1,parseColor:!1}};null!=e&&(null!=e.fixed&&(n.nodes.fixed=e.fixed),null!=e.parseColor&&(n.nodes.parseColor=e.parseColor),null!=e.inheritColor&&(n.edges.inheritColor=e.inheritColor));var o=t.edges,r=Io(o).call(o,(function(t){var e={from:t.source,id:t.id,to:t.target};return null!=t.attributes&&(e.attributes=t.attributes),null!=t.label&&(e.label=t.label),null!=t.attributes&&null!=t.attributes.title&&(e.title=t.attributes.title),\"Directed\"===t.type&&(e.arrows=\"to\"),t.color&&!1===n.edges.inheritColor&&(e.color=t.color),e}));return{nodes:Io(i=t.nodes).call(i,(function(t){var e={id:t.id,fixed:n.nodes.fixed&&null!=t.x&&null!=t.y};return null!=t.attributes&&(e.attributes=t.attributes),null!=t.label&&(e.label=t.label),null!=t.size&&(e.size=t.size),null!=t.attributes&&null!=t.attributes.title&&(e.title=t.attributes.title),null!=t.title&&(e.title=t.title),null!=t.x&&(e.x=t.x),null!=t.y&&(e.y=t.y),null!=t.color&&(!0===n.nodes.parseColor?e.color=t.color:e.color={background:t.color,border:t.color,highlight:{background:t.color,border:t.color},hover:{background:t.color,border:t.color}}),e})),edges:r}}var Gl=Object.freeze({__proto__:null,parseGephi:Xl}),Kl=Object.freeze({__proto__:null,en:{addDescription:\"Click in an empty space to place a new node.\",addEdge:\"Add Edge\",addNode:\"Add Node\",back:\"Back\",close:\"Close\",createEdgeError:\"Cannot link edges to a cluster.\",del:\"Delete selected\",deleteClusterError:\"Clusters cannot be deleted.\",edgeDescription:\"Click on a node and drag the edge to another node to connect them.\",edit:\"Edit\",editClusterError:\"Clusters cannot be edited.\",editEdge:\"Edit Edge\",editEdgeDescription:\"Click on the control points and drag them to a node to connect to it.\",editNode:\"Edit Node\"},de:{addDescription:\"Klicke auf eine freie Stelle, um einen neuen Knoten zu plazieren.\",addEdge:\"Kante hinzufügen\",addNode:\"Knoten hinzufügen\",back:\"Zurück\",close:\"Schließen\",createEdgeError:\"Es ist nicht möglich, Kanten mit Clustern zu verbinden.\",del:\"Lösche Auswahl\",deleteClusterError:\"Cluster können nicht gelöscht werden.\",edgeDescription:\"Klicke auf einen Knoten und ziehe die Kante zu einem anderen Knoten, um diese zu verbinden.\",edit:\"Editieren\",editClusterError:\"Cluster können nicht editiert werden.\",editEdge:\"Kante editieren\",editEdgeDescription:\"Klicke auf die Verbindungspunkte und ziehe diese auf einen Knoten, um sie zu verbinden.\",editNode:\"Knoten editieren\"},es:{addDescription:\"Haga clic en un lugar vacío para colocar un nuevo nodo.\",addEdge:\"Añadir arista\",addNode:\"Añadir nodo\",back:\"Atrás\",close:\"Cerrar\",createEdgeError:\"No se puede conectar una arista a un grupo.\",del:\"Eliminar selección\",deleteClusterError:\"No es posible eliminar grupos.\",edgeDescription:\"Haga clic en un nodo y arrastre la arista hacia otro nodo para conectarlos.\",edit:\"Editar\",editClusterError:\"No es posible editar grupos.\",editEdge:\"Editar arista\",editEdgeDescription:\"Haga clic en un punto de control y arrastrelo a un nodo para conectarlo.\",editNode:\"Editar nodo\"},it:{addDescription:\"Clicca per aggiungere un nuovo nodo\",addEdge:\"Aggiungi un vertice\",addNode:\"Aggiungi un nodo\",back:\"Indietro\",close:\"Chiudere\",createEdgeError:\"Non si possono collegare vertici ad un cluster\",del:\"Cancella la selezione\",deleteClusterError:\"I cluster non possono essere cancellati\",edgeDescription:\"Clicca su un nodo e trascinalo ad un altro nodo per connetterli.\",edit:\"Modifica\",editClusterError:\"I clusters non possono essere modificati.\",editEdge:\"Modifica il vertice\",editEdgeDescription:\"Clicca sui Punti di controllo e trascinali ad un nodo per connetterli.\",editNode:\"Modifica il nodo\"},nl:{addDescription:\"Klik op een leeg gebied om een nieuwe node te maken.\",addEdge:\"Link toevoegen\",addNode:\"Node toevoegen\",back:\"Terug\",close:\"Sluiten\",createEdgeError:\"Kan geen link maken naar een cluster.\",del:\"Selectie verwijderen\",deleteClusterError:\"Clusters kunnen niet worden verwijderd.\",edgeDescription:\"Klik op een node en sleep de link naar een andere node om ze te verbinden.\",edit:\"Wijzigen\",editClusterError:\"Clusters kunnen niet worden aangepast.\",editEdge:\"Link wijzigen\",editEdgeDescription:\"Klik op de verbindingspunten en sleep ze naar een node om daarmee te verbinden.\",editNode:\"Node wijzigen\"},pt:{addDescription:\"Clique em um espaço em branco para adicionar um novo nó\",addEdge:\"Adicionar aresta\",addNode:\"Adicionar nó\",back:\"Voltar\",close:\"Fechar\",createEdgeError:\"Não foi possível linkar arestas a um cluster.\",del:\"Remover selecionado\",deleteClusterError:\"Clusters não puderam ser removidos.\",edgeDescription:\"Clique em um nó e arraste a aresta até outro nó para conectá-los\",edit:\"Editar\",editClusterError:\"Clusters não puderam ser editados.\",editEdge:\"Editar aresta\",editEdgeDescription:\"Clique nos pontos de controle e os arraste para um nó para conectá-los\",editNode:\"Editar nó\"},ru:{addDescription:\"Кликните в свободное место, чтобы добавить новый узел.\",addEdge:\"Добавить ребро\",addNode:\"Добавить узел\",back:\"Назад\",close:\"Закрывать\",createEdgeError:\"Невозможно соединить ребра в кластер.\",del:\"Удалить выбранное\",deleteClusterError:\"Кластеры не могут быть удалены\",edgeDescription:\"Кликните на узел и протяните ребро к другому узлу, чтобы соединить их.\",edit:\"Редактировать\",editClusterError:\"Кластеры недоступны для редактирования.\",editEdge:\"Редактировать ребро\",editEdgeDescription:\"Кликните на контрольные точки и перетащите их в узел, чтобы подключиться к нему.\",editNode:\"Редактировать узел\"},cn:{addDescription:\"单击空白处放置新节点。\",addEdge:\"添加连接线\",addNode:\"添加节点\",back:\"返回\",close:\"關閉\",createEdgeError:\"无法将连接线连接到群集。\",del:\"删除选定\",deleteClusterError:\"无法删除群集。\",edgeDescription:\"单击某个节点并将该连接线拖动到另一个节点以连接它们。\",edit:\"编辑\",editClusterError:\"无法编辑群集。\",editEdge:\"编辑连接线\",editEdgeDescription:\"单击控制节点并将它们拖到节点上连接。\",editNode:\"编辑节点\"},uk:{addDescription:\"Kлікніть на вільне місце, щоб додати новий вузол.\",addEdge:\"Додати край\",addNode:\"Додати вузол\",back:\"Назад\",close:\"Закрити\",createEdgeError:\"Не можливо об'єднати краї в групу.\",del:\"Видалити обране\",deleteClusterError:\"Групи не можуть бути видалені.\",edgeDescription:\"Клікніть на вузол і перетягніть край до іншого вузла, щоб їх з'єднати.\",edit:\"Редагувати\",editClusterError:\"Групи недоступні для редагування.\",editEdge:\"Редагувати край\",editEdgeDescription:\"Клікніть на контрольні точки і перетягніть їх у вузол, щоб підключитися до нього.\",editNode:\"Редагувати вузол\"},fr:{addDescription:\"Cliquez dans un endroit vide pour placer un nœud.\",addEdge:\"Ajouter un lien\",addNode:\"Ajouter un nœud\",back:\"Retour\",close:\"Fermer\",createEdgeError:\"Impossible de créer un lien vers un cluster.\",del:\"Effacer la sélection\",deleteClusterError:\"Les clusters ne peuvent pas être effacés.\",edgeDescription:\"Cliquez sur un nœud et glissez le lien vers un autre nœud pour les connecter.\",edit:\"Éditer\",editClusterError:\"Les clusters ne peuvent pas être édités.\",editEdge:\"Éditer le lien\",editEdgeDescription:\"Cliquez sur les points de contrôle et glissez-les pour connecter un nœud.\",editNode:\"Éditer le nœud\"},cs:{addDescription:\"Kluknutím do prázdného prostoru můžete přidat nový vrchol.\",addEdge:\"Přidat hranu\",addNode:\"Přidat vrchol\",back:\"Zpět\",close:\"Zavřít\",createEdgeError:\"Nelze připojit hranu ke shluku.\",del:\"Smazat výběr\",deleteClusterError:\"Nelze mazat shluky.\",edgeDescription:\"Přetažením z jednoho vrcholu do druhého můžete spojit tyto vrcholy novou hranou.\",edit:\"Upravit\",editClusterError:\"Nelze upravovat shluky.\",editEdge:\"Upravit hranu\",editEdgeDescription:\"Přetažením kontrolního vrcholu hrany ji můžete připojit k jinému vrcholu.\",editNode:\"Upravit vrchol\"}});var $l=function(){function t(){Nn(this,t),this.NUM_ITERATIONS=4,this.image=new Image,this.canvas=document.createElement(\"canvas\")}return Fn(t,[{key:\"init\",value:function(){if(!this.initialized()){this.src=this.image.src;var t=this.image.width,e=this.image.height;this.width=t,this.height=e;var i=Math.floor(e/2),n=Math.floor(e/4),o=Math.floor(e/8),r=Math.floor(e/16),s=Math.floor(t/2),a=Math.floor(t/4),h=Math.floor(t/8),l=Math.floor(t/16);this.canvas.width=3*a,this.canvas.height=i,this.coordinates=[[0,0,s,i],[s,0,a,n],[s,n,h,o],[5*h,n,l,r]],this._fillMipMap()}}},{key:\"initialized\",value:function(){return void 0!==this.coordinates}},{key:\"_fillMipMap\",value:function(){var t=this.canvas.getContext(\"2d\"),e=this.coordinates[0];t.drawImage(this.image,e[0],e[1],e[2],e[3]);for(var i=1;i<this.NUM_ITERATIONS;i++){var n=this.coordinates[i-1],o=this.coordinates[i];t.drawImage(this.canvas,n[0],n[1],n[2],n[3],o[0],o[1],o[2],o[3])}}},{key:\"drawImageAtPosition\",value:function(t,e,i,n,o,r){if(this.initialized())if(e>2){e*=.5;for(var s=0;e>2&&s<this.NUM_ITERATIONS;)e*=.5,s+=1;s>=this.NUM_ITERATIONS&&(s=this.NUM_ITERATIONS-1);var a=this.coordinates[s];t.drawImage(this.canvas,a[0],a[1],a[2],a[3],i,n,o,r)}else t.drawImage(this.image,i,n,o,r)}}]),t}(),Zl=function(){function t(e){Nn(this,t),this.images={},this.imageBroken={},this.callback=e}return Fn(t,[{key:\"_tryloadBrokenUrl\",value:function(t,e,i){void 0!==t&&void 0!==i&&(void 0!==e?(i.image.onerror=function(){console.error(\"Could not load brokenImage:\",e)},i.image.src=e):console.warn(\"No broken url image defined\"))}},{key:\"_redrawWithImage\",value:function(t){this.callback&&this.callback(t)}},{key:\"load\",value:function(t,e){var i=this,n=this.images[t];if(n)return n;var o=new $l;return this.images[t]=o,o.image.onload=function(){i._fixImageCoordinates(o.image),o.init(),i._redrawWithImage(o)},o.image.onerror=function(){console.error(\"Could not load image:\",t),i._tryloadBrokenUrl(t,e,o)},o.image.src=t,o}},{key:\"_fixImageCoordinates\",value:function(t){0===t.width&&(document.body.appendChild(t),t.width=t.offsetWidth,t.height=t.offsetHeight,document.body.removeChild(t))}}]),t}(),Ql=!h((function(){return Object.isExtensible(Object.preventExtensions({}))})),Jl=n((function(t){var e=ut.f,i=!1,n=H(\"meta\"),o=0,r=Object.isExtensible||function(){return!0},s=function(t){e(t,n,{value:{objectID:\"O\"+o++,weakData:{}}})},a=t.exports={enable:function(){a.enable=function(){},i=!0;var t=Ai.f,e=[].splice,o={};o[n]=1,t(o).length&&(Ai.f=function(i){for(var o=t(i),r=0,s=o.length;r<s;r++)if(o[r]===n){e.call(o,r,1);break}return o},gt({target:\"Object\",stat:!0,forced:!0},{getOwnPropertyNames:Li.f}))},fastKey:function(t,e){if(!w(t))return\"symbol\"==typeof t?t:(\"string\"==typeof t?\"S\":\"P\")+t;if(!j(t,n)){if(!r(t))return\"F\";if(!e)return\"E\";s(t)}return t[n].objectID},getWeakData:function(t,e){if(!j(t,n)){if(!r(t))return!0;if(!e)return!1;s(t)}return t[n].weakData},onFreeze:function(t){return Ql&&i&&r(t)&&!j(t,n)&&s(t),t}};St[n]=!0}));Jl.enable,Jl.fastKey,Jl.getWeakData,Jl.onFreeze;var td=function(t,e){this.stopped=t,this.result=e},ed=function(t,e,i){var n,o,r,s,a,h,l,d=i&&i.that,c=!(!i||!i.AS_ENTRIES),u=!(!i||!i.IS_ITERATOR),f=!(!i||!i.INTERRUPTED),p=lt(e,d,1+c+f),v=function(t){return n&&di(n),new td(!0,t)},g=function(t){return c?(dt(t),f?p(t[0],t[1],v):p(t[0],t[1])):f?p(t,v):p(t)};if(u)n=t;else{if(\"function\"!=typeof(o=yi(t)))throw TypeError(\"Target is not iterable\");if(pi(o)){for(r=0,s=kt(t.length);s>r;r++)if((a=g(t[r]))&&a instanceof td)return a;return new td(!1)}n=o.call(t)}for(h=n.next;!(l=h.call(n)).done;){try{a=g(l.value)}catch(t){throw di(n),t}if(\"object\"==typeof a&&a&&a instanceof td)return a}return new td(!1)},id=function(t,e,i){if(!(t instanceof e))throw TypeError(\"Incorrect \"+(i?i+\" \":\"\")+\"invocation\");return t},nd=ut.f,od=Gi.forEach,rd=we.set,sd=we.getterFor,ad=function(t,e,i){var n,o=-1!==t.indexOf(\"Map\"),r=-1!==t.indexOf(\"Weak\"),s=o?\"set\":\"add\",d=a[t],c=d&&d.prototype,u={};if(l&&\"function\"==typeof d&&(r||c.forEach&&!h((function(){(new d).entries().next()})))){n=e((function(e,i){rd(id(e,n,t),{type:t,collection:new d}),null!=i&&ed(i,e[s],{that:e,AS_ENTRIES:o})}));var f=sd(t);od([\"add\",\"clear\",\"delete\",\"forEach\",\"get\",\"has\",\"set\",\"keys\",\"values\",\"entries\"],(function(t){var e=\"add\"==t||\"set\"==t;!(t in c)||r&&\"clear\"==t||ft(n.prototype,t,(function(i,n){var o=f(this).collection;if(!e&&r&&!w(i))return\"get\"==t&&void 0;var s=o[t](0===i?0:i,n);return e?this:s}))})),r||nd(n.prototype,\"size\",{configurable:!0,get:function(){return f(this).collection.size}})}else n=i.getConstructor(e,t,o,s),Jl.enable();return Ye(n,t,!1,!0),u[t]=n,gt({global:!0,forced:!0},u),r||i.setStrong(n,t,o),n},hd=function(t,e,i){for(var n in e)i&&i.unsafe&&t[n]?t[n]=e[n]:Ze(t,n,e[n],i);return t},ld=U(\"species\"),dd=ut.f,cd=Jl.fastKey,ud=we.set,fd=we.getterFor,pd={getConstructor:function(t,e,i,n){var o=t((function(t,r){id(t,o,e),ud(t,{type:e,index:Fe(null),first:void 0,last:void 0,size:0}),l||(t.size=0),null!=r&&ed(r,t[n],{that:t,AS_ENTRIES:i})})),r=fd(e),s=function(t,e,i){var n,o,s=r(t),h=a(t,e);return h?h.value=i:(s.last=h={index:o=cd(e,!0),key:e,value:i,previous:n=s.last,next:void 0,removed:!1},s.first||(s.first=h),n&&(n.next=h),l?s.size++:t.size++,\"F\"!==o&&(s.index[o]=h)),t},a=function(t,e){var i,n=r(t),o=cd(e);if(\"F\"!==o)return n.index[o];for(i=n.first;i;i=i.next)if(i.key==e)return i};return hd(o.prototype,{clear:function(){for(var t=r(this),e=t.index,i=t.first;i;)i.removed=!0,i.previous&&(i.previous=i.previous.next=void 0),delete e[i.index],i=i.next;t.first=t.last=void 0,l?t.size=0:this.size=0},delete:function(t){var e=this,i=r(e),n=a(e,t);if(n){var o=n.next,s=n.previous;delete i.index[n.index],n.removed=!0,s&&(s.next=o),o&&(o.previous=s),i.first==n&&(i.first=o),i.last==n&&(i.last=s),l?i.size--:e.size--}return!!n},forEach:function(t){for(var e,i=r(this),n=lt(t,arguments.length>1?arguments[1]:void 0,3);e=e?e.next:i.first;)for(n(e.value,e.key,this);e&&e.removed;)e=e.previous},has:function(t){return!!a(this,t)}}),hd(o.prototype,i?{get:function(t){var e=a(this,t);return e&&e.value},set:function(t,e){return s(this,0===t?0:t,e)}}:{add:function(t){return s(this,t=0===t?0:t,t)}}),l&&dd(o.prototype,\"size\",{get:function(){return r(this).size}}),o},setStrong:function(t,e,i){var n=e+\" Iterator\",o=fd(e),r=fd(n);ri(t,e,(function(t,e){ud(this,{type:n,target:t,state:o(t),kind:e,last:void 0})}),(function(){for(var t=r(this),e=t.kind,i=t.last;i&&i.removed;)i=i.previous;return t.target&&(t.last=i=i?i.next:t.state.first)?\"keys\"==e?{value:i.key,done:!1}:\"values\"==e?{value:i.value,done:!1}:{value:[i.key,i.value],done:!1}:(t.target=void 0,{value:void 0,done:!0})}),i?\"entries\":\"values\",!i,!0),function(t){var e=x(t),i=ut.f;l&&e&&!e[ld]&&i(e,ld,{configurable:!0,get:function(){return this}})}(e)}};ad(\"Map\",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),pd);var vd=k.Map,gd=function(){function t(){Nn(this,t),this.clear(),this._defaultIndex=0,this._groupIndex=0,this._defaultGroups=[{border:\"#2B7CE9\",background:\"#97C2FC\",highlight:{border:\"#2B7CE9\",background:\"#D2E5FF\"},hover:{border:\"#2B7CE9\",background:\"#D2E5FF\"}},{border:\"#FFA500\",background:\"#FFFF00\",highlight:{border:\"#FFA500\",background:\"#FFFFA3\"},hover:{border:\"#FFA500\",background:\"#FFFFA3\"}},{border:\"#FA0A10\",background:\"#FB7E81\",highlight:{border:\"#FA0A10\",background:\"#FFAFB1\"},hover:{border:\"#FA0A10\",background:\"#FFAFB1\"}},{border:\"#41A906\",background:\"#7BE141\",highlight:{border:\"#41A906\",background:\"#A1EC76\"},hover:{border:\"#41A906\",background:\"#A1EC76\"}},{border:\"#E129F0\",background:\"#EB7DF4\",highlight:{border:\"#E129F0\",background:\"#F0B3F5\"},hover:{border:\"#E129F0\",background:\"#F0B3F5\"}},{border:\"#7C29F0\",background:\"#AD85E4\",highlight:{border:\"#7C29F0\",background:\"#D3BDF0\"},hover:{border:\"#7C29F0\",background:\"#D3BDF0\"}},{border:\"#C37F00\",background:\"#FFA807\",highlight:{border:\"#C37F00\",background:\"#FFCA66\"},hover:{border:\"#C37F00\",background:\"#FFCA66\"}},{border:\"#4220FB\",background:\"#6E6EFD\",highlight:{border:\"#4220FB\",background:\"#9B9BFD\"},hover:{border:\"#4220FB\",background:\"#9B9BFD\"}},{border:\"#FD5A77\",background:\"#FFC0CB\",highlight:{border:\"#FD5A77\",background:\"#FFD1D9\"},hover:{border:\"#FD5A77\",background:\"#FFD1D9\"}},{border:\"#4AD63A\",background:\"#C2FABC\",highlight:{border:\"#4AD63A\",background:\"#E6FFE3\"},hover:{border:\"#4AD63A\",background:\"#E6FFE3\"}},{border:\"#990000\",background:\"#EE0000\",highlight:{border:\"#BB0000\",background:\"#FF3333\"},hover:{border:\"#BB0000\",background:\"#FF3333\"}},{border:\"#FF6000\",background:\"#FF6000\",highlight:{border:\"#FF6000\",background:\"#FF6000\"},hover:{border:\"#FF6000\",background:\"#FF6000\"}},{border:\"#97C2FC\",background:\"#2B7CE9\",highlight:{border:\"#D2E5FF\",background:\"#2B7CE9\"},hover:{border:\"#D2E5FF\",background:\"#2B7CE9\"}},{border:\"#399605\",background:\"#255C03\",highlight:{border:\"#399605\",background:\"#255C03\"},hover:{border:\"#399605\",background:\"#255C03\"}},{border:\"#B70054\",background:\"#FF007E\",highlight:{border:\"#B70054\",background:\"#FF007E\"},hover:{border:\"#B70054\",background:\"#FF007E\"}},{border:\"#AD85E4\",background:\"#7C29F0\",highlight:{border:\"#D3BDF0\",background:\"#7C29F0\"},hover:{border:\"#D3BDF0\",background:\"#7C29F0\"}},{border:\"#4557FA\",background:\"#000EA1\",highlight:{border:\"#6E6EFD\",background:\"#000EA1\"},hover:{border:\"#6E6EFD\",background:\"#000EA1\"}},{border:\"#FFC0CB\",background:\"#FD5A77\",highlight:{border:\"#FFD1D9\",background:\"#FD5A77\"},hover:{border:\"#FFD1D9\",background:\"#FD5A77\"}},{border:\"#C2FABC\",background:\"#74D66A\",highlight:{border:\"#E6FFE3\",background:\"#74D66A\"},hover:{border:\"#E6FFE3\",background:\"#74D66A\"}},{border:\"#EE0000\",background:\"#990000\",highlight:{border:\"#FF3333\",background:\"#BB0000\"},hover:{border:\"#FF3333\",background:\"#BB0000\"}}],this.options={},this.defaultOptions={useDefaultGroups:!0},At(this.options,this.defaultOptions)}return Fn(t,[{key:\"setOptions\",value:function(t){var e=[\"useDefaultGroups\"];if(void 0!==t)for(var i in t)if(Object.prototype.hasOwnProperty.call(t,i)&&-1===Hr(e).call(e,i)){var n=t[i];this.add(i,n)}}},{key:\"clear\",value:function(){this._groups=new vd,this._groupNames=[]}},{key:\"get\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this._groups.get(t);if(void 0===i&&e)if(!1===this.options.useDefaultGroups&&this._groupNames.length>0){var n=this._groupIndex%this._groupNames.length;++this._groupIndex,(i={}).color=this._groups.get(this._groupNames[n]),this._groups.set(t,i)}else{var o=this._defaultIndex%this._defaultGroups.length;this._defaultIndex++,(i={}).color=this._defaultGroups[o],this._groups.set(t,i)}return i}},{key:\"add\",value:function(t,e){return this._groups.has(t)||this._groupNames.push(t),this._groups.set(t,e),e}}]),t}();gt({target:\"Number\",stat:!0},{isNaN:function(t){return t!=t}});var yd=k.Number.isNaN,md=a.isFinite,bd=Number.isFinite||function(t){return\"number\"==typeof t&&md(t)};gt({target:\"Number\",stat:!0},{isFinite:bd});var wd=k.Number.isFinite,kd=Gi.some,_d=Ao(\"some\");gt({target:\"Array\",proto:!0,forced:!_d},{some:function(t){return kd(this,t,arguments.length>1?arguments[1]:void 0)}});var xd=Ht(\"Array\").some,Ed=Array.prototype,Od=function(t){var e=t.some;return t===Ed||t instanceof Array&&e===Ed.some?xd:e},Cd=x(\"Reflect\",\"construct\"),Sd=h((function(){function t(){}return!(Cd((function(){}),[],t)instanceof t)})),Td=!h((function(){Cd((function(){}))})),Md=Sd||Td;gt({target:\"Reflect\",stat:!0,forced:Md,sham:Md},{construct:function(t,e){ht(t),dt(e);var i=arguments.length<3?t:ht(arguments[2]);if(Td&&!Sd)return Cd(t,e,i);if(t==i){switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3])}var n=[null];return n.push.apply(n,e),new(Lt.apply(t,n))}var o=i.prototype,r=Fe(w(o)?o:Object.prototype),s=Function.apply.call(t,r,e);return w(s)?s:r}});var Pd=k.Reflect.construct,Dd=n((function(t){t.exports=function(t){if(void 0===t)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return t},t.exports.default=t.exports,t.exports.__esModule=!0})),Id=i(Dd),Bd=Xr;gt({target:\"Object\",stat:!0},{setPrototypeOf:$e});var zd=k.Object.setPrototypeOf,Nd=n((function(t){function e(i,n){return t.exports=e=zd||function(t,e){return t.__proto__=e,t},t.exports.default=t.exports,t.exports.__esModule=!0,e(i,n)}t.exports=e,t.exports.default=t.exports,t.exports.__esModule=!0}));i(Nd);var Ad=i(n((function(t){t.exports=function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Super expression must either be null or a function\");t.prototype=Bd(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&Nd(t,e)},t.exports.default=t.exports,t.exports.__esModule=!0}))),Fd=i(n((function(t){var e=vo.default;t.exports=function(t,i){if(i&&(\"object\"===e(i)||\"function\"==typeof i))return i;if(void 0!==i)throw new TypeError(\"Derived constructors may only return object or undefined\");return Dd(t)},t.exports.default=t.exports,t.exports.__esModule=!0}))),jd=ur,Rd=n((function(t){function e(i){return t.exports=e=zd?jd:function(t){return t.__proto__||jd(t)},t.exports.default=t.exports,t.exports.__esModule=!0,e(i)}t.exports=e,t.exports.default=t.exports,t.exports.__esModule=!0})),Ld=i(Rd),Hd=n((function(t){var e=function(t){var e,i=Object.prototype,n=i.hasOwnProperty,o=\"function\"==typeof Symbol?Symbol:{},r=o.iterator||\"@@iterator\",s=o.asyncIterator||\"@@asyncIterator\",a=o.toStringTag||\"@@toStringTag\";function h(t,e,i){return Object.defineProperty(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{h({},\"\")}catch(t){h=function(t,e,i){return t[e]=i}}function l(t,e,i,n){var o=e&&e.prototype instanceof g?e:g,r=Object.create(o.prototype),s=new T(n||[]);return r._invoke=function(t,e,i){var n=c;return function(o,r){if(n===f)throw new Error(\"Generator is already running\");if(n===p){if(\"throw\"===o)throw r;return P()}for(i.method=o,i.arg=r;;){var s=i.delegate;if(s){var a=O(s,i);if(a){if(a===v)continue;return a}}if(\"next\"===i.method)i.sent=i._sent=i.arg;else if(\"throw\"===i.method){if(n===c)throw n=p,i.arg;i.dispatchException(i.arg)}else\"return\"===i.method&&i.abrupt(\"return\",i.arg);n=f;var h=d(t,e,i);if(\"normal\"===h.type){if(n=i.done?p:u,h.arg===v)continue;return{value:h.arg,done:i.done}}\"throw\"===h.type&&(n=p,i.method=\"throw\",i.arg=h.arg)}}}(t,i,s),r}function d(t,e,i){try{return{type:\"normal\",arg:t.call(e,i)}}catch(t){return{type:\"throw\",arg:t}}}t.wrap=l;var c=\"suspendedStart\",u=\"suspendedYield\",f=\"executing\",p=\"completed\",v={};function g(){}function y(){}function m(){}var b={};b[r]=function(){return this};var w=Object.getPrototypeOf,k=w&&w(w(M([])));k&&k!==i&&n.call(k,r)&&(b=k);var _=m.prototype=g.prototype=Object.create(b);function x(t){[\"next\",\"throw\",\"return\"].forEach((function(e){h(t,e,(function(t){return this._invoke(e,t)}))}))}function E(t,e){function i(o,r,s,a){var h=d(t[o],t,r);if(\"throw\"!==h.type){var l=h.arg,c=l.value;return c&&\"object\"==typeof c&&n.call(c,\"__await\")?e.resolve(c.__await).then((function(t){i(\"next\",t,s,a)}),(function(t){i(\"throw\",t,s,a)})):e.resolve(c).then((function(t){l.value=t,s(l)}),(function(t){return i(\"throw\",t,s,a)}))}a(h.arg)}var o;this._invoke=function(t,n){function r(){return new e((function(e,o){i(t,n,e,o)}))}return o=o?o.then(r,r):r()}}function O(t,i){var n=t.iterator[i.method];if(n===e){if(i.delegate=null,\"throw\"===i.method){if(t.iterator.return&&(i.method=\"return\",i.arg=e,O(t,i),\"throw\"===i.method))return v;i.method=\"throw\",i.arg=new TypeError(\"The iterator does not provide a 'throw' method\")}return v}var o=d(n,t.iterator,i.arg);if(\"throw\"===o.type)return i.method=\"throw\",i.arg=o.arg,i.delegate=null,v;var r=o.arg;return r?r.done?(i[t.resultName]=r.value,i.next=t.nextLoc,\"return\"!==i.method&&(i.method=\"next\",i.arg=e),i.delegate=null,v):r:(i.method=\"throw\",i.arg=new TypeError(\"iterator result is not an object\"),i.delegate=null,v)}function C(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function S(t){var e=t.completion||{};e.type=\"normal\",delete e.arg,t.completion=e}function T(t){this.tryEntries=[{tryLoc:\"root\"}],t.forEach(C,this),this.reset(!0)}function M(t){if(t){var i=t[r];if(i)return i.call(t);if(\"function\"==typeof t.next)return t;if(!isNaN(t.length)){var o=-1,s=function i(){for(;++o<t.length;)if(n.call(t,o))return i.value=t[o],i.done=!1,i;return i.value=e,i.done=!0,i};return s.next=s}}return{next:P}}function P(){return{value:e,done:!0}}return y.prototype=_.constructor=m,m.constructor=y,y.displayName=h(m,a,\"GeneratorFunction\"),t.isGeneratorFunction=function(t){var e=\"function\"==typeof t&&t.constructor;return!!e&&(e===y||\"GeneratorFunction\"===(e.displayName||e.name))},t.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,m):(t.__proto__=m,h(t,a,\"GeneratorFunction\")),t.prototype=Object.create(_),t},t.awrap=function(t){return{__await:t}},x(E.prototype),E.prototype[s]=function(){return this},t.AsyncIterator=E,t.async=function(e,i,n,o,r){void 0===r&&(r=Promise);var s=new E(l(e,i,n,o),r);return t.isGeneratorFunction(i)?s:s.next().then((function(t){return t.done?t.value:s.next()}))},x(_),h(_,a,\"Generator\"),_[r]=function(){return this},_.toString=function(){return\"[object Generator]\"},t.keys=function(t){var e=[];for(var i in t)e.push(i);return e.reverse(),function i(){for(;e.length;){var n=e.pop();if(n in t)return i.value=n,i.done=!1,i}return i.done=!0,i}},t.values=M,T.prototype={constructor:T,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method=\"next\",this.arg=e,this.tryEntries.forEach(S),!t)for(var i in this)\"t\"===i.charAt(0)&&n.call(this,i)&&!isNaN(+i.slice(1))&&(this[i]=e)},stop:function(){this.done=!0;var t=this.tryEntries[0].completion;if(\"throw\"===t.type)throw t.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var i=this;function o(n,o){return a.type=\"throw\",a.arg=t,i.next=n,o&&(i.method=\"next\",i.arg=e),!!o}for(var r=this.tryEntries.length-1;r>=0;--r){var s=this.tryEntries[r],a=s.completion;if(\"root\"===s.tryLoc)return o(\"end\");if(s.tryLoc<=this.prev){var h=n.call(s,\"catchLoc\"),l=n.call(s,\"finallyLoc\");if(h&&l){if(this.prev<s.catchLoc)return o(s.catchLoc,!0);if(this.prev<s.finallyLoc)return o(s.finallyLoc)}else if(h){if(this.prev<s.catchLoc)return o(s.catchLoc,!0)}else{if(!l)throw new Error(\"try statement without catch or finally\");if(this.prev<s.finallyLoc)return o(s.finallyLoc)}}}},abrupt:function(t,e){for(var i=this.tryEntries.length-1;i>=0;--i){var o=this.tryEntries[i];if(o.tryLoc<=this.prev&&n.call(o,\"finallyLoc\")&&this.prev<o.finallyLoc){var r=o;break}}r&&(\"break\"===t||\"continue\"===t)&&r.tryLoc<=e&&e<=r.finallyLoc&&(r=null);var s=r?r.completion:{};return s.type=t,s.arg=e,r?(this.method=\"next\",this.next=r.finallyLoc,v):this.complete(s)},complete:function(t,e){if(\"throw\"===t.type)throw t.arg;return\"break\"===t.type||\"continue\"===t.type?this.next=t.arg:\"return\"===t.type?(this.rval=this.arg=t.arg,this.method=\"return\",this.next=\"end\"):\"normal\"===t.type&&e&&(this.next=e),v},finish:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var i=this.tryEntries[e];if(i.finallyLoc===t)return this.complete(i.completion,i.afterLoc),S(i),v}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var i=this.tryEntries[e];if(i.tryLoc===t){var n=i.completion;if(\"throw\"===n.type){var o=n.arg;S(i)}return o}}throw new Error(\"illegal catch attempt\")},delegateYield:function(t,i,n){return this.delegate={iterator:M(t),resultName:i,nextLoc:n},\"next\"===this.method&&(this.arg=e),v}},t}(t.exports);try{regeneratorRuntime=e}catch(t){Function(\"r\",\"regeneratorRuntime = r\")(e)}})),Wd=function(t){return function(e,i,n,o){ht(i);var r=A(e),s=y(r),a=kt(r.length),h=t?a-1:0,l=t?-1:1;if(n<2)for(;;){if(h in s){o=s[h],h+=l;break}if(h+=l,t?h<0:a<=h)throw TypeError(\"Reduce of empty array with no initial value\")}for(;t?h>=0:a>h;h+=l)h in s&&(o=i(o,s[h],h,r));return o}},qd={left:Wd(!1),right:Wd(!0)},Vd=\"process\"==v(a.process),Ud=qd.left,Yd=Ao(\"reduce\");gt({target:\"Array\",proto:!0,forced:!Yd||!Vd&&M>79&&M<83},{reduce:function(t){return Ud(this,t,arguments.length,arguments.length>1?arguments[1]:void 0)}});var Xd=Ht(\"Array\").reduce,Gd=Array.prototype,Kd=function(t){var e=t.reduce;return t===Gd||t instanceof Array&&e===Gd.reduce?Xd:e},$d=function(t,e,i,n,o,r,s,a){for(var h,l=o,d=0,c=!!s&&lt(s,a,3);d<n;){if(d in i){if(h=c?c(i[d],d,e):i[d],r>0&&zi(h))l=$d(t,e,h,kt(h.length),l,r-1)-1;else{if(l>=9007199254740991)throw TypeError(\"Exceed the acceptable array length\");t[l]=h}l++}d++}return l},Zd=$d;gt({target:\"Array\",proto:!0},{flatMap:function(t){var e,i=A(this),n=kt(i.length);return ht(t),(e=Ui(i,0)).length=Zd(e,i,i,n,0,1,t,arguments.length>1?arguments[1]:void 0),e}});var Qd=Ht(\"Array\").flatMap,Jd=Array.prototype,tc=function(t){var e=t.flatMap;return t===Jd||t instanceof Array&&e===Jd.flatMap?Qd:e};ad(\"Set\",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),pd);var ec=k.Set,ic=fo,nc=function(t){var e=yi(t);if(\"function\"!=typeof e)throw TypeError(String(t)+\" is not iterable\");return dt(e.call(t))},oc=Math.floor,rc=function(t,e){var i=t.length,n=oc(i/2);return i<8?sc(t,e):ac(rc(t.slice(0,n),e),rc(t.slice(n),e),e)},sc=function(t,e){for(var i,n,o=t.length,r=1;r<o;){for(n=r,i=t[r];n&&e(t[n-1],i)>0;)t[n]=t[--n];n!==r++&&(t[n]=i)}return t},ac=function(t,e,i){for(var n=t.length,o=e.length,r=0,s=0,a=[];r<n||s<o;)r<n&&s<o?a.push(i(t[r],e[s])<=0?t[r++]:e[s++]):a.push(r<n?t[r++]:e[s++]);return a},hc=rc,lc=E.match(/firefox\\/(\\d+)/i),dc=!!lc&&+lc[1],cc=/MSIE|Trident/.test(E),uc=E.match(/AppleWebKit\\/(\\d+)\\./),fc=!!uc&&+uc[1],pc=[],vc=pc.sort,gc=h((function(){pc.sort(void 0)})),yc=h((function(){pc.sort(null)})),mc=Ao(\"sort\"),bc=!h((function(){if(M)return M<70;if(!(dc&&dc>3)){if(cc)return!0;if(fc)return fc<603;var t,e,i,n,o=\"\";for(t=65;t<76;t++){switch(e=String.fromCharCode(t),t){case 66:case 69:case 70:case 72:i=3;break;case 68:case 71:i=4;break;default:i=2}for(n=0;n<47;n++)pc.push({k:e+n,v:i})}for(pc.sort((function(t,e){return e.v-t.v})),n=0;n<pc.length;n++)e=pc[n].k.charAt(0),o.charAt(o.length-1)!==e&&(o+=e);return\"DGBEFHACIJK\"!==o}}));gt({target:\"Array\",proto:!0,forced:gc||!yc||!mc||!bc},{sort:function(t){void 0!==t&&ht(t);var e=A(this);if(bc)return void 0===t?vc.call(e):vc.call(e,t);var i,n,o=[],r=kt(e.length);for(n=0;n<r;n++)n in e&&o.push(e[n]);for(i=(o=hc(o,function(t){return function(e,i){return void 0===i?-1:void 0===e?1:void 0!==t?+t(e,i)||0:Qt(e)>Qt(i)?1:-1}}(t))).length,n=0;n<i;)e[n]=o[n++];for(;n<r;)delete e[n++];return e}});var wc,kc=Ht(\"Array\").sort,_c=Array.prototype,xc=function(t){var e=t.sort;return t===_c||t instanceof Array&&e===_c.sort?kc:e},Ec=Ht(\"Array\").keys,Oc=Array.prototype,Cc={DOMTokenList:!0,NodeList:!0},Sc=function(t){var e=t.keys;return t===Oc||t instanceof Array&&e===Oc.keys||Cc.hasOwnProperty(We(t))?Ec:e},Tc=Ht(\"Array\").values,Mc=Array.prototype,Pc={DOMTokenList:!0,NodeList:!0},Dc=function(t){var e=t.values;return t===Mc||t instanceof Array&&e===Mc.values||Pc.hasOwnProperty(We(t))?Tc:e},Ic=Ht(\"Array\").entries,Bc=Array.prototype,zc={DOMTokenList:!0,NodeList:!0},Nc=function(t){var e=t.entries;return t===Bc||t instanceof Array&&e===Bc.entries||zc.hasOwnProperty(We(t))?Ic:e},Ac=new Uint8Array(16);function Fc(){if(!wc&&!(wc=\"undefined\"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||\"undefined\"!=typeof msCrypto&&\"function\"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error(\"crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported\");return wc(Ac)}var jc=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function Rc(t){return\"string\"==typeof t&&jc.test(t)}for(var Lc=[],Hc=0;Hc<256;++Hc)Lc.push((Hc+256).toString(16).substr(1));function Wc(t,e,i){var n=(t=t||{}).random||(t.rng||Fc)();if(n[6]=15&n[6]|64,n[8]=63&n[8]|128,e){i=i||0;for(var o=0;o<16;++o)e[i+o]=n[o];return e}return function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=(Lc[t[e+0]]+Lc[t[e+1]]+Lc[t[e+2]]+Lc[t[e+3]]+\"-\"+Lc[t[e+4]]+Lc[t[e+5]]+\"-\"+Lc[t[e+6]]+Lc[t[e+7]]+\"-\"+Lc[t[e+8]]+Lc[t[e+9]]+\"-\"+Lc[t[e+10]]+Lc[t[e+11]]+Lc[t[e+12]]+Lc[t[e+13]]+Lc[t[e+14]]+Lc[t[e+15]]).toLowerCase();if(!Rc(i))throw TypeError(\"Stringified UUID is invalid\");return i}(n)}function qc(t,e){var i=zo(t);if(On){var n=On(t);e&&(n=mr(n).call(n,(function(e){return Mn(t,e).enumerable}))),i.push.apply(i,n)}return i}function Vc(t){for(var e=1;e<arguments.length;e++){var i,n=null!=arguments[e]?arguments[e]:{};if(e%2)Wo(i=qc(Object(n),!0)).call(i,(function(e){jn(t,e,n[e])}));else if(Dn)In(t,Dn(n));else{var o;Wo(o=qc(Object(n))).call(o,(function(e){zn(t,e,Mn(n,e))}))}}return t}function Uc(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}function Yc(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return Xc(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Xc(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function Xc(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}var Gc=function(){function t(e,i,n){var o,r,s;Nn(this,t),this._source=e,this._transformers=i,this._target=n,this._listeners={add:Vt(o=this._add).call(o,this),remove:Vt(r=this._remove).call(r,this),update:Vt(s=this._update).call(s,this)}}return Fn(t,[{key:\"all\",value:function(){return this._target.update(this._transformItems(this._source.get())),this}},{key:\"start\",value:function(){return this._source.on(\"add\",this._listeners.add),this._source.on(\"remove\",this._listeners.remove),this._source.on(\"update\",this._listeners.update),this}},{key:\"stop\",value:function(){return this._source.off(\"add\",this._listeners.add),this._source.off(\"remove\",this._listeners.remove),this._source.off(\"update\",this._listeners.update),this}},{key:\"_transformItems\",value:function(t){var e;return Kd(e=this._transformers).call(e,(function(t,e){return e(t)}),t)}},{key:\"_add\",value:function(t,e){null!=e&&this._target.add(this._transformItems(this._source.get(e.items)))}},{key:\"_update\",value:function(t,e){null!=e&&this._target.update(this._transformItems(this._source.get(e.items)))}},{key:\"_remove\",value:function(t,e){null!=e&&this._target.remove(this._transformItems(e.oldData))}}]),t}(),Kc=function(){function t(e){Nn(this,t),this._source=e,this._transformers=[]}return Fn(t,[{key:\"filter\",value:function(t){return this._transformers.push((function(e){return mr(e).call(e,t)})),this}},{key:\"map\",value:function(t){return this._transformers.push((function(e){return Io(e).call(e,t)})),this}},{key:\"flatMap\",value:function(t){return this._transformers.push((function(e){return tc(e).call(e,t)})),this}},{key:\"to\",value:function(t){return new Gc(this._source,this._transformers,t)}}]),t}();function $c(t){return\"string\"==typeof t||\"number\"==typeof t}var Zc=function(){function t(e){Nn(this,t),this._queue=[],this._timeout=null,this._extended=null,this.delay=null,this.max=1/0,this.setOptions(e)}return Fn(t,[{key:\"setOptions\",value:function(t){t&&void 0!==t.delay&&(this.delay=t.delay),t&&void 0!==t.max&&(this.max=t.max),this._flushIfNeeded()}},{key:\"destroy\",value:function(){if(this.flush(),this._extended){for(var t=this._extended.object,e=this._extended.methods,i=0;i<e.length;i++){var n=e[i];n.original?t[n.name]=n.original:delete t[n.name]}this._extended=null}}},{key:\"replace\",value:function(t,e){var i=this,n=t[e];if(!n)throw new Error(\"Method \"+e+\" undefined\");t[e]=function(){for(var t=arguments.length,e=new Array(t),o=0;o<t;o++)e[o]=arguments[o];i.queue({args:e,fn:n,context:this})}}},{key:\"queue\",value:function(t){\"function\"==typeof t?this._queue.push({fn:t}):this._queue.push(t),this._flushIfNeeded()}},{key:\"_flushIfNeeded\",value:function(){var t=this;this._queue.length>this.max&&this.flush(),null!=this._timeout&&(clearTimeout(this._timeout),this._timeout=null),this.queue.length>0&&\"number\"==typeof this.delay&&(this._timeout=rs((function(){t.flush()}),this.delay))}},{key:\"flush\",value:function(){var t,e;Wo(t=er(e=this._queue).call(e,0)).call(t,(function(t){t.fn.apply(t.context||t.fn,t.args||[])}))}}],[{key:\"extend\",value:function(e,i){var n=new t(i);if(void 0!==e.flush)throw new Error(\"Target object already has a property flush\");e.flush=function(){n.flush()};var o=[{name:\"flush\",original:void 0}];if(i&&i.replace)for(var r=0;r<i.replace.length;r++){var s=i.replace[r];o.push({name:s,original:e[s]}),n.replace(e,s)}return n._extended={object:e,methods:o},n}}]),t}(),Qc=function(){function t(){Nn(this,t),this._subscribers={\"*\":[],add:[],remove:[],update:[]},this.subscribe=t.prototype.on,this.unsubscribe=t.prototype.off}return Fn(t,[{key:\"_trigger\",value:function(t,e,i){var n,o;if(\"*\"===t)throw new Error(\"Cannot trigger event *\");Wo(n=Eo(o=[]).call(o,wo(this._subscribers[t]),wo(this._subscribers[\"*\"]))).call(n,(function(n){n(t,e,null!=i?i:null)}))}},{key:\"on\",value:function(t,e){\"function\"==typeof e&&this._subscribers[t].push(e)}},{key:\"off\",value:function(t,e){var i;this._subscribers[t]=mr(i=this._subscribers[t]).call(i,(function(t){return t!==e}))}}]),t}(),Jc=function(t){function e(t){Nn(this,e),this._pairs=t}return Fn(e,[{key:t,value:Hd.mark((function t(){var e,i,n,o,r;return Hd.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:e=Yc(this._pairs),t.prev=1,e.s();case 3:if((i=e.n()).done){t.next=9;break}return n=uo(i.value,2),o=n[0],r=n[1],t.next=7,[o,r];case 7:t.next=3;break;case 9:t.next=14;break;case 11:t.prev=11,t.t0=t.catch(1),e.e(t.t0);case 14:return t.prev=14,e.f(),t.finish(14);case 17:case\"end\":return t.stop()}}),t,this,[[1,11,14,17]])}))},{key:\"entries\",value:Hd.mark((function t(){var e,i,n,o,r;return Hd.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:e=Yc(this._pairs),t.prev=1,e.s();case 3:if((i=e.n()).done){t.next=9;break}return n=uo(i.value,2),o=n[0],r=n[1],t.next=7,[o,r];case 7:t.next=3;break;case 9:t.next=14;break;case 11:t.prev=11,t.t0=t.catch(1),e.e(t.t0);case 14:return t.prev=14,e.f(),t.finish(14);case 17:case\"end\":return t.stop()}}),t,this,[[1,11,14,17]])}))},{key:\"keys\",value:Hd.mark((function t(){var e,i,n,o;return Hd.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:e=Yc(this._pairs),t.prev=1,e.s();case 3:if((i=e.n()).done){t.next=9;break}return n=uo(i.value,1),o=n[0],t.next=7,o;case 7:t.next=3;break;case 9:t.next=14;break;case 11:t.prev=11,t.t0=t.catch(1),e.e(t.t0);case 14:return t.prev=14,e.f(),t.finish(14);case 17:case\"end\":return t.stop()}}),t,this,[[1,11,14,17]])}))},{key:\"values\",value:Hd.mark((function t(){var e,i,n,o;return Hd.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:e=Yc(this._pairs),t.prev=1,e.s();case 3:if((i=e.n()).done){t.next=9;break}return n=uo(i.value,2),o=n[1],t.next=7,o;case 7:t.next=3;break;case 9:t.next=14;break;case 11:t.prev=11,t.t0=t.catch(1),e.e(t.t0);case 14:return t.prev=14,e.f(),t.finish(14);case 17:case\"end\":return t.stop()}}),t,this,[[1,11,14,17]])}))},{key:\"toIdArray\",value:function(){var t;return Io(t=wo(this._pairs)).call(t,(function(t){return t[0]}))}},{key:\"toItemArray\",value:function(){var t;return Io(t=wo(this._pairs)).call(t,(function(t){return t[1]}))}},{key:\"toEntryArray\",value:function(){return wo(this._pairs)}},{key:\"toObjectMap\",value:function(){var t,e=Gr(null),i=Yc(this._pairs);try{for(i.s();!(t=i.n()).done;){var n=uo(t.value,2),o=n[0],r=n[1];e[o]=r}}catch(t){i.e(t)}finally{i.f()}return e}},{key:\"toMap\",value:function(){return new vd(this._pairs)}},{key:\"toIdSet\",value:function(){return new ec(this.toIdArray())}},{key:\"toItemSet\",value:function(){return new ec(this.toItemArray())}},{key:\"cache\",value:function(){return new e(wo(this._pairs))}},{key:\"distinct\",value:function(t){var e,i=new ec,n=Yc(this._pairs);try{for(n.s();!(e=n.n()).done;){var o=uo(e.value,2),r=o[0],s=o[1];i.add(t(s,r))}}catch(t){n.e(t)}finally{n.f()}return i}},{key:\"filter\",value:function(t){var i=this._pairs;return new e(jn({},ic,Hd.mark((function e(){var n,o,r,s,a;return Hd.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:n=Yc(i),e.prev=1,n.s();case 3:if((o=n.n()).done){e.next=10;break}if(r=uo(o.value,2),s=r[0],a=r[1],!t(a,s)){e.next=8;break}return e.next=8,[s,a];case 8:e.next=3;break;case 10:e.next=15;break;case 12:e.prev=12,e.t0=e.catch(1),n.e(e.t0);case 15:return e.prev=15,n.f(),e.finish(15);case 18:case\"end\":return e.stop()}}),e,null,[[1,12,15,18]])}))))}},{key:\"forEach\",value:function(t){var e,i=Yc(this._pairs);try{for(i.s();!(e=i.n()).done;){var n=uo(e.value,2),o=n[0];t(n[1],o)}}catch(t){i.e(t)}finally{i.f()}}},{key:\"map\",value:function(t){var i=this._pairs;return new e(jn({},ic,Hd.mark((function e(){var n,o,r,s,a;return Hd.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:n=Yc(i),e.prev=1,n.s();case 3:if((o=n.n()).done){e.next=9;break}return r=uo(o.value,2),s=r[0],a=r[1],e.next=7,[s,t(a,s)];case 7:e.next=3;break;case 9:e.next=14;break;case 11:e.prev=11,e.t0=e.catch(1),n.e(e.t0);case 14:return e.prev=14,n.f(),e.finish(14);case 17:case\"end\":return e.stop()}}),e,null,[[1,11,14,17]])}))))}},{key:\"max\",value:function(t){var e=nc(this._pairs),i=e.next();if(i.done)return null;for(var n=i.value[1],o=t(i.value[1],i.value[0]);!(i=e.next()).done;){var r=uo(i.value,2),s=r[0],a=r[1],h=t(a,s);h>o&&(o=h,n=a)}return n}},{key:\"min\",value:function(t){var e=nc(this._pairs),i=e.next();if(i.done)return null;for(var n=i.value[1],o=t(i.value[1],i.value[0]);!(i=e.next()).done;){var r=uo(i.value,2),s=r[0],a=r[1],h=t(a,s);h<o&&(o=h,n=a)}return n}},{key:\"reduce\",value:function(t,e){var i,n=Yc(this._pairs);try{for(n.s();!(i=n.n()).done;){var o=uo(i.value,2),r=o[0];e=t(e,o[1],r)}}catch(t){n.e(t)}finally{n.f()}return e}},{key:\"sort\",value:function(t){var i=this;return new e(jn({},ic,(function(){var e;return nc(xc(e=wo(i._pairs)).call(e,(function(e,i){var n=uo(e,2),o=n[0],r=n[1],s=uo(i,2),a=s[0],h=s[1];return t(r,h,o,a)})))})))}}]),e}(ic);var tu=function(t){Ad(i,t);var e=Uc(i);function i(t,n){var o;return Nn(this,i),(o=e.call(this))._queue=null,t&&!So(t)&&(n=t,t=[]),o._options=n||{},o._data=new vd,o.length=0,o._idProp=o._options.fieldId||\"id\",t&&t.length&&o.add(t),o.setOptions(n),o}return Fn(i,[{key:\"idProp\",get:function(){return this._idProp}},{key:\"setOptions\",value:function(t){t&&void 0!==t.queue&&(!1===t.queue?this._queue&&(this._queue.destroy(),this._queue=null):(this._queue||(this._queue=Zc.extend(this,{replace:[\"add\",\"update\",\"remove\"]})),t.queue&&\"object\"===go(t.queue)&&this._queue.setOptions(t.queue)))}},{key:\"add\",value:function(t,e){var i,n=this,o=[];if(So(t)){var r=Io(t).call(t,(function(t){return t[n._idProp]}));if(Od(r).call(r,(function(t){return n._data.has(t)})))throw new Error(\"A duplicate id was found in the parameter array.\");for(var s=0,a=t.length;s<a;s++)i=this._addItem(t[s]),o.push(i)}else{if(!t||\"object\"!==go(t))throw new Error(\"Unknown dataType\");i=this._addItem(t),o.push(i)}return o.length&&this._trigger(\"add\",{items:o},e),o}},{key:\"update\",value:function(t,e){var i=this,n=[],o=[],r=[],s=[],a=this._idProp,h=function(t){var e=t[a];if(null!=e&&i._data.has(e)){var h=t,l=At({},i._data.get(e)),d=i._updateItem(h);o.push(d),s.push(h),r.push(l)}else{var c=i._addItem(t);n.push(c)}};if(So(t))for(var l=0,d=t.length;l<d;l++)t[l]&&\"object\"===go(t[l])?h(t[l]):console.warn(\"Ignoring input item, which is not an object at index \"+l);else{if(!t||\"object\"!==go(t))throw new Error(\"Unknown dataType\");h(t)}if(n.length&&this._trigger(\"add\",{items:n},e),o.length){var c={items:o,oldData:r,data:s};this._trigger(\"update\",c,e)}return Eo(n).call(n,o)}},{key:\"updateOnly\",value:function(t,e){var i,n=this;So(t)||(t=[t]);var o=Io(i=Io(t).call(t,(function(t){var e=n._data.get(t[n._idProp]);if(null==e)throw new Error(\"Updating non-existent items is not allowed.\");return{oldData:e,update:t}}))).call(i,(function(t){var e=t.oldData,i=t.update,o=e[n._idProp],r=ih(e,i);return n._data.set(o,r),{id:o,oldData:e,updatedData:r}}));if(o.length){var r={items:Io(o).call(o,(function(t){return t.id})),oldData:Io(o).call(o,(function(t){return t.oldData})),data:Io(o).call(o,(function(t){return t.updatedData}))};return this._trigger(\"update\",r,e),r.items}return[]}},{key:\"get\",value:function(t,e){var i=void 0,n=void 0,o=void 0;$c(t)?(i=t,o=e):So(t)?(n=t,o=e):o=t;var r,s=o&&\"Object\"===o.returnType?\"Object\":\"Array\",a=o&&mr(o),h=[],l=void 0,d=void 0,c=void 0;if(null!=i)(l=this._data.get(i))&&a&&!a(l)&&(l=void 0);else if(null!=n)for(var u=0,f=n.length;u<f;u++)null==(l=this._data.get(n[u]))||a&&!a(l)||h.push(l);else for(var p,v=0,g=(d=wo(Sc(p=this._data).call(p))).length;v<g;v++)c=d[v],null==(l=this._data.get(c))||a&&!a(l)||h.push(l);if(o&&o.order&&null==i&&this._sort(h,o.order),o&&o.fields){var y=o.fields;if(null!=i&&null!=l)l=this._filterFields(l,y);else for(var m=0,b=h.length;m<b;m++)h[m]=this._filterFields(h[m],y)}if(\"Object\"==s){for(var w={},k=0,_=h.length;k<_;k++){var x=h[k];w[x[this._idProp]]=x}return w}return null!=i?null!==(r=l)&&void 0!==r?r:null:h}},{key:\"getIds\",value:function(t){var e=this._data,i=t&&mr(t),n=t&&t.order,o=wo(Sc(e).call(e)),r=[];if(i)if(n){for(var s=[],a=0,h=o.length;a<h;a++){var l=o[a],d=this._data.get(l);null!=d&&i(d)&&s.push(d)}this._sort(s,n);for(var c=0,u=s.length;c<u;c++)r.push(s[c][this._idProp])}else for(var f=0,p=o.length;f<p;f++){var v=o[f],g=this._data.get(v);null!=g&&i(g)&&r.push(g[this._idProp])}else if(n){for(var y=[],m=0,b=o.length;m<b;m++){var w=o[m];y.push(e.get(w))}this._sort(y,n);for(var k=0,_=y.length;k<_;k++)r.push(y[k][this._idProp])}else for(var x=0,E=o.length;x<E;x++){var O=o[x],C=e.get(O);null!=C&&r.push(C[this._idProp])}return r}},{key:\"getDataSet\",value:function(){return this}},{key:\"forEach\",value:function(t,e){var i=e&&mr(e),n=this._data,o=wo(Sc(n).call(n));if(e&&e.order)for(var r=this.get(e),s=0,a=r.length;s<a;s++){var h=r[s];t(h,h[this._idProp])}else for(var l=0,d=o.length;l<d;l++){var c=o[l],u=this._data.get(c);null==u||i&&!i(u)||t(u,c)}}},{key:\"map\",value:function(t,e){for(var i=e&&mr(e),n=[],o=this._data,r=wo(Sc(o).call(o)),s=0,a=r.length;s<a;s++){var h=r[s],l=this._data.get(h);null==l||i&&!i(l)||n.push(t(l,h))}return e&&e.order&&this._sort(n,e.order),n}},{key:\"_filterFields\",value:function(t,e){var i;return t?Kd(i=So(e)?e:zo(e)).call(i,(function(e,i){return e[i]=t[i],e}),{}):t}},{key:\"_sort\",value:function(t,e){if(\"string\"==typeof e){var i=e;xc(t).call(t,(function(t,e){var n=t[i],o=e[i];return n>o?1:n<o?-1:0}))}else{if(\"function\"!=typeof e)throw new TypeError(\"Order must be a function or a string\");xc(t).call(t,e)}}},{key:\"remove\",value:function(t,e){for(var i=[],n=[],o=So(t)?t:[t],r=0,s=o.length;r<s;r++){var a=this._remove(o[r]);if(a){var h=a[this._idProp];null!=h&&(i.push(h),n.push(a))}}return i.length&&this._trigger(\"remove\",{items:i,oldData:n},e),i}},{key:\"_remove\",value:function(t){var e;if($c(t)?e=t:t&&\"object\"===go(t)&&(e=t[this._idProp]),null!=e&&this._data.has(e)){var i=this._data.get(e)||null;return this._data.delete(e),--this.length,i}return null}},{key:\"clear\",value:function(t){for(var e,i=wo(Sc(e=this._data).call(e)),n=[],o=0,r=i.length;o<r;o++)n.push(this._data.get(i[o]));return this._data.clear(),this.length=0,this._trigger(\"remove\",{items:i,oldData:n},t),i}},{key:\"max\",value:function(t){var e,i,n=null,o=null,r=Yc(Dc(e=this._data).call(e));try{for(r.s();!(i=r.n()).done;){var s=i.value,a=s[t];\"number\"==typeof a&&(null==o||a>o)&&(n=s,o=a)}}catch(t){r.e(t)}finally{r.f()}return n||null}},{key:\"min\",value:function(t){var e,i,n=null,o=null,r=Yc(Dc(e=this._data).call(e));try{for(r.s();!(i=r.n()).done;){var s=i.value,a=s[t];\"number\"==typeof a&&(null==o||a<o)&&(n=s,o=a)}}catch(t){r.e(t)}finally{r.f()}return n||null}},{key:\"distinct\",value:function(t){for(var e=this._data,i=wo(Sc(e).call(e)),n=[],o=0,r=0,s=i.length;r<s;r++){for(var a=i[r],h=e.get(a)[t],l=!1,d=0;d<o;d++)if(n[d]==h){l=!0;break}l||void 0===h||(n[o]=h,o++)}return n}},{key:\"_addItem\",value:function(t){var e=function(t,e){return null==t[e]&&(t[e]=Wc()),t}(t,this._idProp),i=e[this._idProp];if(this._data.has(i))throw new Error(\"Cannot add item: item with id \"+i+\" already exists\");return this._data.set(i,e),++this.length,i}},{key:\"_updateItem\",value:function(t){var e=t[this._idProp];if(null==e)throw new Error(\"Cannot update item: item has no id (item: \"+es(t)+\")\");var i=this._data.get(e);if(!i)throw new Error(\"Cannot update item: no item with id \"+e+\" found\");return this._data.set(e,Vc(Vc({},i),t)),e}},{key:\"stream\",value:function(t){if(t){var e=this._data;return new Jc(jn({},ic,Hd.mark((function i(){var n,o,r,s;return Hd.wrap((function(i){for(;;)switch(i.prev=i.next){case 0:n=Yc(t),i.prev=1,n.s();case 3:if((o=n.n()).done){i.next=11;break}if(r=o.value,null==(s=e.get(r))){i.next=9;break}return i.next=9,[r,s];case 9:i.next=3;break;case 11:i.next=16;break;case 13:i.prev=13,i.t0=i.catch(1),n.e(i.t0);case 16:return i.prev=16,n.f(),i.finish(16);case 19:case\"end\":return i.stop()}}),i,null,[[1,13,16,19]])}))))}var i;return new Jc(jn({},ic,Vt(i=Nc(this._data)).call(i,this._data)))}}]),i}(Qc),eu=function(t){Ad(i,t);var e=Uc(i);function i(t,n){var o,r;return Nn(this,i),(r=e.call(this)).length=0,r._ids=new ec,r._options=n||{},r._listener=Vt(o=r._onEvent).call(o,Id(r)),r.setData(t),r}return Fn(i,[{key:\"idProp\",get:function(){return this.getDataSet().idProp}},{key:\"setData\",value:function(t){if(this._data){this._data.off&&this._data.off(\"*\",this._listener);var e=this._data.getIds({filter:mr(this._options)}),i=this._data.get(e);this._ids.clear(),this.length=0,this._trigger(\"remove\",{items:e,oldData:i})}if(null!=t){this._data=t;for(var n=this._data.getIds({filter:mr(this._options)}),o=0,r=n.length;o<r;o++){var s=n[o];this._ids.add(s)}this.length=n.length,this._trigger(\"add\",{items:n})}else this._data=new tu;this._data.on&&this._data.on(\"*\",this._listener)}},{key:\"refresh\",value:function(){for(var t=this._data.getIds({filter:mr(this._options)}),e=wo(this._ids),i={},n=[],o=[],r=[],s=0,a=t.length;s<a;s++){var h=t[s];i[h]=!0,this._ids.has(h)||(n.push(h),this._ids.add(h))}for(var l=0,d=e.length;l<d;l++){var c=e[l],u=this._data.get(c);null==u?console.error(\"If you see this, report it please.\"):i[c]||(o.push(c),r.push(u),this._ids.delete(c))}this.length+=n.length-o.length,n.length&&this._trigger(\"add\",{items:n}),o.length&&this._trigger(\"remove\",{items:o,oldData:r})}},{key:\"get\",value:function(t,e){if(null==this._data)return null;var i,n=null;$c(t)||So(t)?(n=t,i=e):i=t;var o=At({},this._options,i),r=mr(this._options),s=i&&mr(i);return r&&s&&(o.filter=function(t){return r(t)&&s(t)}),null==n?this._data.get(o):this._data.get(n,o)}},{key:\"getIds\",value:function(t){if(this._data.length){var e,i=mr(this._options),n=null!=t?mr(t):null;return e=n?i?function(t){return i(t)&&n(t)}:n:i,this._data.getIds({filter:e,order:t&&t.order})}return[]}},{key:\"forEach\",value:function(t,e){if(this._data){var i,n,o=mr(this._options),r=e&&mr(e);n=r?o?function(t){return o(t)&&r(t)}:r:o,Wo(i=this._data).call(i,t,{filter:n,order:e&&e.order})}}},{key:\"map\",value:function(t,e){if(this._data){var i,n,o=mr(this._options),r=e&&mr(e);return n=r?o?function(t){return o(t)&&r(t)}:r:o,Io(i=this._data).call(i,t,{filter:n,order:e&&e.order})}return[]}},{key:\"getDataSet\",value:function(){return this._data.getDataSet()}},{key:\"stream\",value:function(t){var e;return this._data.stream(t||jn({},ic,Vt(e=Sc(this._ids)).call(e,this._ids)))}},{key:\"dispose\",value:function(){var t;null!==(t=this._data)&&void 0!==t&&t.off&&this._data.off(\"*\",this._listener);var e,n=\"This data view has already been disposed of.\",o={get:function(){throw new Error(n)},set:function(){throw new Error(n)},configurable:!1},r=Yc(Co(i.prototype));try{for(r.s();!(e=r.n()).done;){var s=e.value;zn(this,s,o)}}catch(t){r.e(t)}finally{r.f()}}},{key:\"_onEvent\",value:function(t,e,i){if(e&&e.items&&this._data){var n=e.items,o=[],r=[],s=[],a=[],h=[],l=[];switch(t){case\"add\":for(var d=0,c=n.length;d<c;d++){var u=n[d];this.get(u)&&(this._ids.add(u),o.push(u))}break;case\"update\":for(var f=0,p=n.length;f<p;f++){var v=n[f];this.get(v)?this._ids.has(v)?(r.push(v),h.push(e.data[f]),a.push(e.oldData[f])):(this._ids.add(v),o.push(v)):this._ids.has(v)&&(this._ids.delete(v),s.push(v),l.push(e.oldData[f]))}break;case\"remove\":for(var g=0,y=n.length;g<y;g++){var m=n[g];this._ids.has(m)&&(this._ids.delete(m),s.push(m),l.push(e.oldData[g]))}}this.length+=o.length-s.length,o.length&&this._trigger(\"add\",{items:o},i),r.length&&this._trigger(\"update\",{items:r,oldData:a,data:h},i),s.length&&this._trigger(\"remove\",{items:s,oldData:l},i)}}}]),i}(Qc);function iu(t,e){return\"object\"===go(e)&&null!==e&&t===e.idProp&&\"function\"==typeof e.add&&\"function\"==typeof e.clear&&\"function\"==typeof e.distinct&&\"function\"==typeof Wo(e)&&\"function\"==typeof e.get&&\"function\"==typeof e.getDataSet&&\"function\"==typeof e.getIds&&\"number\"==typeof e.length&&\"function\"==typeof Io(e)&&\"function\"==typeof e.max&&\"function\"==typeof e.min&&\"function\"==typeof e.off&&\"function\"==typeof e.on&&\"function\"==typeof e.remove&&\"function\"==typeof e.setOptions&&\"function\"==typeof e.stream&&\"function\"==typeof e.update&&\"function\"==typeof e.updateOnly}function nu(t,e){return\"object\"===go(e)&&null!==e&&t===e.idProp&&\"function\"==typeof Wo(e)&&\"function\"==typeof e.get&&\"function\"==typeof e.getDataSet&&\"function\"==typeof e.getIds&&\"number\"==typeof e.length&&\"function\"==typeof Io(e)&&\"function\"==typeof e.off&&\"function\"==typeof e.on&&\"function\"==typeof e.stream&&iu(t,e.getDataSet())}var ou=Object.freeze({__proto__:null,DELETE:eh,DataSet:tu,DataStream:Jc,DataView:eu,Queue:Zc,createNewDataPipeFrom:function(t){return new Kc(t)},isDataSetLike:iu,isDataViewLike:nu}),ru=Tr.trim,su=a.parseFloat,au=1/su(xr+\"-0\")!=-1/0?function(t){var e=ru(Qt(t)),i=su(e);return 0===i&&\"-\"==e.charAt(0)?-0:i}:su;gt({global:!0,forced:parseFloat!=au},{parseFloat:au});var hu=k.parseFloat,lu=Li.f,du=h((function(){return!Object.getOwnPropertyNames(1)}));gt({target:\"Object\",stat:!0,forced:du},{getOwnPropertyNames:lu});var cu=k.Object,uu=function(t){return cu.getOwnPropertyNames(t)};function fu(t,e){var i=[\"node\",\"edge\",\"label\"],n=!0,o=Qh(e,\"chosen\");if(\"boolean\"==typeof o)n=o;else if(\"object\"===go(o)){if(-1===Hr(i).call(i,t))throw new Error(\"choosify: subOption '\"+t+\"' should be one of '\"+i.join(\"', '\")+\"'\");var r=Qh(e,[\"chosen\",t]);\"boolean\"!=typeof r&&\"function\"!=typeof r||(n=r)}return n}function pu(t,e,i){if(t.width<=0||t.height<=0)return!1;if(void 0!==i){var n={x:e.x-i.x,y:e.y-i.y};if(0!==i.angle){var o=-i.angle;e={x:Math.cos(o)*n.x-Math.sin(o)*n.y,y:Math.sin(o)*n.x+Math.cos(o)*n.y}}else e=n}var r=t.x+t.width,s=t.y+t.width;return t.left<e.x&&r>e.x&&t.top<e.y&&s>e.y}function vu(t){return\"string\"==typeof t&&\"\"!==t}function gu(t,e,i,n){var o=n.x,r=n.y;if(\"function\"==typeof n.distanceToBorder){var s=n.distanceToBorder(t,e),a=Math.sin(e)*s,h=Math.cos(e)*s;h===s?(o+=s,r=n.y):a===s?(o=n.x,r-=s):(o+=h,r-=a)}else n.shape.width>n.shape.height?(o=n.x+.5*n.shape.width,r=n.y-i):(o=n.x+i,r=n.y-.5*n.shape.height);return{x:o,y:r}}var yu=function(){function t(e){Nn(this,t),this.measureText=e,this.current=0,this.width=0,this.height=0,this.lines=[]}return Fn(t,[{key:\"_add\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:\"normal\";void 0===this.lines[t]&&(this.lines[t]={width:0,height:0,blocks:[]});var n=e;void 0!==e&&\"\"!==e||(n=\" \");var o=this.measureText(n,i),r=At({},Dc(o));r.text=e,r.width=o.width,r.mod=i,void 0!==e&&\"\"!==e||(r.width=0),this.lines[t].blocks.push(r),this.lines[t].width+=r.width}},{key:\"curWidth\",value:function(){var t=this.lines[this.current];return void 0===t?0:t.width}},{key:\"append\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"normal\";this._add(this.current,t,e)}},{key:\"newLine\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"normal\";this._add(this.current,t,e),this.current++}},{key:\"determineLineHeights\",value:function(){for(var t=0;t<this.lines.length;t++){var e=this.lines[t],i=0;if(void 0!==e.blocks)for(var n=0;n<e.blocks.length;n++){var o=e.blocks[n];i<o.height&&(i=o.height)}e.height=i}}},{key:\"determineLabelSize\",value:function(){for(var t=0,e=0,i=0;i<this.lines.length;i++){var n=this.lines[i];n.width>t&&(t=n.width),e+=n.height}this.width=t,this.height=e}},{key:\"removeEmptyBlocks\",value:function(){for(var t=[],e=0;e<this.lines.length;e++){var i=this.lines[e];if(0!==i.blocks.length&&(e!==this.lines.length-1||0!==i.width)){var n={};At(n,i),n.blocks=[];for(var o=void 0,r=[],s=0;s<i.blocks.length;s++){var a=i.blocks[s];0!==a.width?r.push(a):void 0===o&&(o=a)}0===r.length&&void 0!==o&&r.push(o),n.blocks=r,t.push(n)}}return t}},{key:\"finalize\",value:function(){this.determineLineHeights(),this.determineLabelSize();var t=this.removeEmptyBlocks();return{width:this.width,height:this.height,lines:t}}}]),t}(),mu={\"<b>\":/<b>/,\"<i>\":/<i>/,\"<code>\":/<code>/,\"</b>\":/<\\/b>/,\"</i>\":/<\\/i>/,\"</code>\":/<\\/code>/,\"*\":/\\*/,_:/_/,\"`\":/`/,afterBold:/[^*]/,afterItal:/[^_]/,afterMono:/[^`]/},bu=function(){function t(e){Nn(this,t),this.text=e,this.bold=!1,this.ital=!1,this.mono=!1,this.spacing=!1,this.position=0,this.buffer=\"\",this.modStack=[],this.blocks=[]}return Fn(t,[{key:\"mod\",value:function(){return 0===this.modStack.length?\"normal\":this.modStack[0]}},{key:\"modName\",value:function(){return 0===this.modStack.length?\"normal\":\"mono\"===this.modStack[0]?\"mono\":this.bold&&this.ital?\"boldital\":this.bold?\"bold\":this.ital?\"ital\":void 0}},{key:\"emitBlock\",value:function(){this.spacing&&(this.add(\" \"),this.spacing=!1),this.buffer.length>0&&(this.blocks.push({text:this.buffer,mod:this.modName()}),this.buffer=\"\")}},{key:\"add\",value:function(t){\" \"===t&&(this.spacing=!0),this.spacing&&(this.buffer+=\" \",this.spacing=!1),\" \"!=t&&(this.buffer+=t)}},{key:\"parseWS\",value:function(t){return!!/[ \\t]/.test(t)&&(this.mono?this.add(t):this.spacing=!0,!0)}},{key:\"setTag\",value:function(t){this.emitBlock(),this[t]=!0,this.modStack.unshift(t)}},{key:\"unsetTag\",value:function(t){this.emitBlock(),this[t]=!1,this.modStack.shift()}},{key:\"parseStartTag\",value:function(t,e){return!(this.mono||this[t]||!this.match(e))&&(this.setTag(t),!0)}},{key:\"match\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this.prepareRegExp(t),n=uo(i,2),o=n[0],r=n[1],s=o.test(this.text.substr(this.position,r));return s&&e&&(this.position+=r-1),s}},{key:\"parseEndTag\",value:function(t,e,i){var n=this.mod()===t;return!(!(n=\"mono\"===t?n&&this.mono:n&&!this.mono)||!this.match(e))&&(void 0!==i?(this.position===this.text.length-1||this.match(i,!1))&&this.unsetTag(t):this.unsetTag(t),!0)}},{key:\"replace\",value:function(t,e){return!!this.match(t)&&(this.add(e),this.position+=length-1,!0)}},{key:\"prepareRegExp\",value:function(t){var e,i;if(t instanceof RegExp)i=t,e=1;else{var n=mu[t];i=void 0!==n?n:new RegExp(t),e=t.length}return[i,e]}}]),t}(),wu=function(){function t(e,i,n,o){var r=this;Nn(this,t),this.ctx=e,this.parent=i,this.selected=n,this.hover=o;this.lines=new yu((function(t,i){if(void 0===t)return 0;var s=r.parent.getFormattingValues(e,n,o,i),a=0;\"\"!==t&&(a=r.ctx.measureText(t).width);return{width:a,values:s}}))}return Fn(t,[{key:\"process\",value:function(t){if(!vu(t))return this.lines.finalize();var e=this.parent.fontOptions;t=(t=t.replace(/\\r\\n/g,\"\\n\")).replace(/\\r/g,\"\\n\");var i=String(t).split(\"\\n\"),n=i.length;if(e.multi)for(var o=0;o<n;o++){var r=this.splitBlocks(i[o],e.multi);if(void 0!==r)if(0!==r.length){if(e.maxWdt>0)for(var s=0;s<r.length;s++){var a=r[s].mod,h=r[s].text;this.splitStringIntoLines(h,a,!0)}else for(var l=0;l<r.length;l++){var d=r[l].mod,c=r[l].text;this.lines.append(c,d)}this.lines.newLine()}else this.lines.newLine(\"\")}else if(e.maxWdt>0)for(var u=0;u<n;u++)this.splitStringIntoLines(i[u]);else for(var f=0;f<n;f++)this.lines.newLine(i[f]);return this.lines.finalize()}},{key:\"decodeMarkupSystem\",value:function(t){var e=\"none\";return\"markdown\"===t||\"md\"===t?e=\"markdown\":!0!==t&&\"html\"!==t||(e=\"html\"),e}},{key:\"splitHtmlBlocks\",value:function(t){for(var e=new bu(t),i=function(t){return!!/&/.test(t)&&(e.replace(e.text,\"&lt;\",\"<\")||e.replace(e.text,\"&amp;\",\"&\")||e.add(\"&\"),!0)};e.position<e.text.length;){var n=e.text.charAt(e.position);e.parseWS(n)||/</.test(n)&&(e.parseStartTag(\"bold\",\"<b>\")||e.parseStartTag(\"ital\",\"<i>\")||e.parseStartTag(\"mono\",\"<code>\")||e.parseEndTag(\"bold\",\"</b>\")||e.parseEndTag(\"ital\",\"</i>\")||e.parseEndTag(\"mono\",\"</code>\"))||i(n)||e.add(n),e.position++}return e.emitBlock(),e.blocks}},{key:\"splitMarkdownBlocks\",value:function(t){for(var e=this,i=new bu(t),n=!0,o=function(t){return!!/\\\\/.test(t)&&(i.position<e.text.length+1&&(i.position++,t=e.text.charAt(i.position),/ \\t/.test(t)?i.spacing=!0:(i.add(t),n=!1)),!0)};i.position<i.text.length;){var r=i.text.charAt(i.position);i.parseWS(r)||o(r)||(n||i.spacing)&&(i.parseStartTag(\"bold\",\"*\")||i.parseStartTag(\"ital\",\"_\")||i.parseStartTag(\"mono\",\"`\"))||i.parseEndTag(\"bold\",\"*\",\"afterBold\")||i.parseEndTag(\"ital\",\"_\",\"afterItal\")||i.parseEndTag(\"mono\",\"`\",\"afterMono\")||(i.add(r),n=!1),i.position++}return i.emitBlock(),i.blocks}},{key:\"splitBlocks\",value:function(t,e){var i=this.decodeMarkupSystem(e);return\"none\"===i?[{text:t,mod:\"normal\"}]:\"markdown\"===i?this.splitMarkdownBlocks(t):\"html\"===i?this.splitHtmlBlocks(t):void 0}},{key:\"overMaxWidth\",value:function(t){var e=this.ctx.measureText(t).width;return this.lines.curWidth()+e>this.parent.fontOptions.maxWdt}},{key:\"getLongestFit\",value:function(t){for(var e=\"\",i=0;i<t.length;){var n=e+(\"\"===e?\"\":\" \")+t[i];if(this.overMaxWidth(n))break;e=n,i++}return i}},{key:\"getLongestFitWord\",value:function(t){for(var e=0;e<t.length&&!this.overMaxWidth(Oo(t).call(t,0,e));)e++;return e}},{key:\"splitStringIntoLines\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"normal\",i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];this.parent.getFormattingValues(this.ctx,this.selected,this.hover,e);for(var n=(t=(t=t.replace(/^( +)/g,\"$1\\r\")).replace(/([^\\r][^ ]*)( +)/g,\"$1\\r$2\\r\")).split(\"\\r\");n.length>0;){var o=this.getLongestFit(n);if(0===o){var r=n[0],s=this.getLongestFitWord(r);this.lines.newLine(Oo(r).call(r,0,s),e),n[0]=Oo(r).call(r,s)}else{var a=o;\" \"===n[o-1]?o--:\" \"===n[a]&&a++;var h=Oo(n).call(n,0,o).join(\"\");o==n.length&&i?this.lines.append(h,e):this.lines.newLine(h,e),n=Oo(n).call(n,a)}}}}]),t}(),ku=[\"bold\",\"ital\",\"boldital\",\"mono\"],_u=function(){function t(e,i){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];Nn(this,t),this.body=e,this.pointToSelf=!1,this.baseSize=void 0,this.fontOptions={},this.setOptions(i),this.size={top:0,left:0,width:0,height:0,yLine:0},this.isEdgeLabel=n}return Fn(t,[{key:\"setOptions\",value:function(t){if(this.elementOptions=t,this.initFontOptions(t.font),vu(t.label)?this.labelDirty=!0:t.label=void 0,void 0!==t.font&&null!==t.font)if(\"string\"==typeof t.font)this.baseSize=this.fontOptions.size;else if(\"object\"===go(t.font)){var e=t.font.size;void 0!==e&&(this.baseSize=e)}}},{key:\"initFontOptions\",value:function(e){var i=this;Dh(ku,(function(t){i.fontOptions[t]={}})),t.parseFontString(this.fontOptions,e)?this.fontOptions.vadjust=0:Dh(e,(function(t,e){null!=t&&\"object\"!==go(t)&&(i.fontOptions[e]=t)}))}},{key:\"constrain\",value:function(t){var e={constrainWidth:!1,maxWdt:-1,minWdt:-1,constrainHeight:!1,minHgt:-1,valign:\"middle\"},i=Qh(t,\"widthConstraint\");if(\"number\"==typeof i)e.maxWdt=Number(i),e.minWdt=Number(i);else if(\"object\"===go(i)){var n=Qh(t,[\"widthConstraint\",\"maximum\"]);\"number\"==typeof n&&(e.maxWdt=Number(n));var o=Qh(t,[\"widthConstraint\",\"minimum\"]);\"number\"==typeof o&&(e.minWdt=Number(o))}var r=Qh(t,\"heightConstraint\");if(\"number\"==typeof r)e.minHgt=Number(r);else if(\"object\"===go(r)){var s=Qh(t,[\"heightConstraint\",\"minimum\"]);\"number\"==typeof s&&(e.minHgt=Number(s));var a=Qh(t,[\"heightConstraint\",\"valign\"]);\"string\"==typeof a&&(\"top\"!==a&&\"bottom\"!==a||(e.valign=a))}return e}},{key:\"update\",value:function(t,e){this.setOptions(t,!0),this.propagateFonts(e),Ch(this.fontOptions,this.constrain(e)),this.fontOptions.chooser=fu(\"label\",e)}},{key:\"adjustSizes\",value:function(t){var e=t?t.right+t.left:0;this.fontOptions.constrainWidth&&(this.fontOptions.maxWdt-=e,this.fontOptions.minWdt-=e);var i=t?t.top+t.bottom:0;this.fontOptions.constrainHeight&&(this.fontOptions.minHgt-=i)}},{key:\"addFontOptionsToPile\",value:function(t,e){for(var i=0;i<e.length;++i)this.addFontToPile(t,e[i])}},{key:\"addFontToPile\",value:function(t,e){if(void 0!==e&&void 0!==e.font&&null!==e.font){var i=e.font;t.push(i)}}},{key:\"getBasicOptions\",value:function(e){for(var i={},n=0;n<e.length;++n){var o=e[n],r={};t.parseFontString(r,o)&&(o=r),Dh(o,(function(t,e){void 0!==t&&(Object.prototype.hasOwnProperty.call(i,e)||(-1!==Hr(ku).call(ku,e)?i[e]={}:i[e]=t))}))}return i}},{key:\"getFontOption\",value:function(e,i,n){for(var o,r=0;r<e.length;++r){var s=e[r];if(Object.prototype.hasOwnProperty.call(s,i)){if(null==(o=s[i]))continue;var a={};if(t.parseFontString(a,o)&&(o=a),Object.prototype.hasOwnProperty.call(o,n))return o[n]}}if(Object.prototype.hasOwnProperty.call(this.fontOptions,n))return this.fontOptions[n];throw new Error(\"Did not find value for multi-font for property: '\"+n+\"'\")}},{key:\"getFontOptions\",value:function(t,e){for(var i={},n=[\"color\",\"size\",\"face\",\"mod\",\"vadjust\"],o=0;o<n.length;++o){var r=n[o];i[r]=this.getFontOption(t,e,r)}return i}},{key:\"propagateFonts\",value:function(t){var e=this,i=[];this.addFontOptionsToPile(i,t),this.fontOptions=this.getBasicOptions(i);for(var n=function(t){var n=ku[t],o=e.fontOptions[n];Dh(e.getFontOptions(i,n),(function(t,e){o[e]=t})),o.size=Number(o.size),o.vadjust=Number(o.vadjust)},o=0;o<ku.length;++o)n(o)}},{key:\"draw\",value:function(t,e,i,n,o){var r=arguments.length>5&&void 0!==arguments[5]?arguments[5]:\"middle\";if(void 0!==this.elementOptions.label){var s=this.fontOptions.size*this.body.view.scale;this.elementOptions.label&&s<this.elementOptions.scaling.label.drawThreshold-1||(s>=this.elementOptions.scaling.label.maxVisible&&(s=Number(this.elementOptions.scaling.label.maxVisible)/this.body.view.scale),this.calculateLabelSize(t,n,o,e,i,r),this._drawBackground(t),this._drawText(t,e,this.size.yLine,r,s))}}},{key:\"_drawBackground\",value:function(t){if(void 0!==this.fontOptions.background&&\"none\"!==this.fontOptions.background){t.fillStyle=this.fontOptions.background;var e=this.getSize();t.fillRect(e.left,e.top,e.width,e.height)}}},{key:\"_drawText\",value:function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:\"middle\",o=arguments.length>4?arguments[4]:void 0,r=this._setAlignment(t,e,i,n),s=uo(r,2);e=s[0],i=s[1],t.textAlign=\"left\",e-=this.size.width/2,this.fontOptions.valign&&this.size.height>this.size.labelHeight&&(\"top\"===this.fontOptions.valign&&(i-=(this.size.height-this.size.labelHeight)/2),\"bottom\"===this.fontOptions.valign&&(i+=(this.size.height-this.size.labelHeight)/2));for(var a=0;a<this.lineCount;a++){var h=this.lines[a];if(h&&h.blocks){var l=0;this.isEdgeLabel||\"center\"===this.fontOptions.align?l+=(this.size.width-h.width)/2:\"right\"===this.fontOptions.align&&(l+=this.size.width-h.width);for(var d=0;d<h.blocks.length;d++){var c=h.blocks[d];t.font=c.font;var u=this._getColor(c.color,o,c.strokeColor),f=uo(u,2),p=f[0],v=f[1];c.strokeWidth>0&&(t.lineWidth=c.strokeWidth,t.strokeStyle=v,t.lineJoin=\"round\"),t.fillStyle=p,c.strokeWidth>0&&t.strokeText(c.text,e+l,i+c.vadjust),t.fillText(c.text,e+l,i+c.vadjust),l+=c.width}i+=h.height}}}},{key:\"_setAlignment\",value:function(t,e,i,n){if(this.isEdgeLabel&&\"horizontal\"!==this.fontOptions.align&&!1===this.pointToSelf){e=0,i=0;\"top\"===this.fontOptions.align?(t.textBaseline=\"alphabetic\",i-=4):\"bottom\"===this.fontOptions.align?(t.textBaseline=\"hanging\",i+=4):t.textBaseline=\"middle\"}else t.textBaseline=n;return[e,i]}},{key:\"_getColor\",value:function(t,e,i){var n=t||\"#000000\",o=i||\"#ffffff\";if(e<=this.elementOptions.scaling.label.drawThreshold){var r=Math.max(0,Math.min(1,1-(this.elementOptions.scaling.label.drawThreshold-e)));n=Fh(n,r),o=Fh(o,r)}return[n,o]}},{key:\"getTextSize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return this._processLabel(t,e,i),{width:this.size.width,height:this.size.height,lineCount:this.lineCount}}},{key:\"getSize\",value:function(){var t=this.size.left,e=this.size.top-1;if(this.isEdgeLabel){var i=.5*-this.size.width;switch(this.fontOptions.align){case\"middle\":t=i,e=.5*-this.size.height;break;case\"top\":t=i,e=-(this.size.height+2);break;case\"bottom\":t=i,e=2}}return{left:t,top:e,width:this.size.width,height:this.size.height}}},{key:\"calculateLabelSize\",value:function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,r=arguments.length>5&&void 0!==arguments[5]?arguments[5]:\"middle\";this._processLabel(t,e,i),this.size.left=n-.5*this.size.width,this.size.top=o-.5*this.size.height,this.size.yLine=o+.5*(1-this.lineCount)*this.fontOptions.size,\"hanging\"===r&&(this.size.top+=.5*this.fontOptions.size,this.size.top+=4,this.size.yLine+=4)}},{key:\"getFormattingValues\",value:function(t,e,i,n){var o=function(t,e,i){return\"normal\"===e?\"mod\"===i?\"\":t[i]:void 0!==t[e][i]?t[e][i]:t[i]},r={color:o(this.fontOptions,n,\"color\"),size:o(this.fontOptions,n,\"size\"),face:o(this.fontOptions,n,\"face\"),mod:o(this.fontOptions,n,\"mod\"),vadjust:o(this.fontOptions,n,\"vadjust\"),strokeWidth:this.fontOptions.strokeWidth,strokeColor:this.fontOptions.strokeColor};(e||i)&&(\"normal\"===n&&!0===this.fontOptions.chooser&&this.elementOptions.labelHighlightBold?r.mod=\"bold\":\"function\"==typeof this.fontOptions.chooser&&this.fontOptions.chooser(r,this.elementOptions.id,e,i));var s=\"\";return void 0!==r.mod&&\"\"!==r.mod&&(s+=r.mod+\" \"),s+=r.size+\"px \"+r.face,t.font=s.replace(/\"/g,\"\"),r.font=t.font,r.height=r.size,r}},{key:\"differentState\",value:function(t,e){return t!==this.selectedState||e!==this.hoverState}},{key:\"_processLabelText\",value:function(t,e,i,n){return new wu(t,this,e,i).process(n)}},{key:\"_processLabel\",value:function(t,e,i){if(!1!==this.labelDirty||this.differentState(e,i)){var n=this._processLabelText(t,e,i,this.elementOptions.label);this.fontOptions.minWdt>0&&n.width<this.fontOptions.minWdt&&(n.width=this.fontOptions.minWdt),this.size.labelHeight=n.height,this.fontOptions.minHgt>0&&n.height<this.fontOptions.minHgt&&(n.height=this.fontOptions.minHgt),this.lines=n.lines,this.lineCount=n.lines.length,this.size.width=n.width,this.size.height=n.height,this.selectedState=e,this.hoverState=i,this.labelDirty=!1}}},{key:\"visible\",value:function(){return 0!==this.size.width&&0!==this.size.height&&void 0!==this.elementOptions.label&&!(this.fontOptions.size*this.body.view.scale<this.elementOptions.scaling.label.drawThreshold-1)}}],[{key:\"parseFontString\",value:function(t,e){if(!e||\"string\"!=typeof e)return!1;var i=e.split(\" \");return t.size=+i[0].replace(\"px\",\"\"),t.face=i[1],t.color=i[2],!0}}]),t}(),xu=function(){function t(e,i,n){Nn(this,t),this.body=i,this.labelModule=n,this.setOptions(e),this.top=void 0,this.left=void 0,this.height=void 0,this.width=void 0,this.radius=void 0,this.margin=void 0,this.refreshNeeded=!0,this.boundingBox={top:0,left:0,right:0,bottom:0}}return Fn(t,[{key:\"setOptions\",value:function(t){this.options=t}},{key:\"_setMargins\",value:function(t){this.margin={},this.options.margin&&(\"object\"==go(this.options.margin)?(this.margin.top=this.options.margin.top,this.margin.right=this.options.margin.right,this.margin.bottom=this.options.margin.bottom,this.margin.left=this.options.margin.left):(this.margin.top=this.options.margin,this.margin.right=this.options.margin,this.margin.bottom=this.options.margin,this.margin.left=this.options.margin)),t.adjustSizes(this.margin)}},{key:\"_distanceToBorder\",value:function(t,e){var i=this.options.borderWidth;return t&&this.resize(t),Math.min(Math.abs(this.width/2/Math.cos(e)),Math.abs(this.height/2/Math.sin(e)))+i}},{key:\"enableShadow\",value:function(t,e){e.shadow&&(t.shadowColor=e.shadowColor,t.shadowBlur=e.shadowSize,t.shadowOffsetX=e.shadowX,t.shadowOffsetY=e.shadowY)}},{key:\"disableShadow\",value:function(t,e){e.shadow&&(t.shadowColor=\"rgba(0,0,0,0)\",t.shadowBlur=0,t.shadowOffsetX=0,t.shadowOffsetY=0)}},{key:\"enableBorderDashes\",value:function(t,e){if(!1!==e.borderDashes)if(void 0!==t.setLineDash){var i=e.borderDashes;!0===i&&(i=[5,15]),t.setLineDash(i)}else console.warn(\"setLineDash is not supported in this browser. The dashed borders cannot be used.\"),this.options.shapeProperties.borderDashes=!1,e.borderDashes=!1}},{key:\"disableBorderDashes\",value:function(t,e){!1!==e.borderDashes&&(void 0!==t.setLineDash?t.setLineDash([0]):(console.warn(\"setLineDash is not supported in this browser. The dashed borders cannot be used.\"),this.options.shapeProperties.borderDashes=!1,e.borderDashes=!1))}},{key:\"needsRefresh\",value:function(t,e){return!0===this.refreshNeeded?(this.refreshNeeded=!1,!0):void 0===this.width||this.labelModule.differentState(t,e)}},{key:\"initContextForDraw\",value:function(t,e){var i=e.borderWidth/this.body.view.scale;t.lineWidth=Math.min(this.width,i),t.strokeStyle=e.borderColor,t.fillStyle=e.color}},{key:\"performStroke\",value:function(t,e){var i=e.borderWidth/this.body.view.scale;t.save(),i>0&&(this.enableBorderDashes(t,e),t.stroke(),this.disableBorderDashes(t,e)),t.restore()}},{key:\"performFill\",value:function(t,e){t.save(),t.fillStyle=e.color,this.enableShadow(t,e),hs(t).call(t),this.disableShadow(t,e),t.restore(),this.performStroke(t,e)}},{key:\"_addBoundingBoxMargin\",value:function(t){this.boundingBox.left-=t,this.boundingBox.top-=t,this.boundingBox.bottom+=t,this.boundingBox.right+=t}},{key:\"_updateBoundingBox\",value:function(t,e,i,n,o){void 0!==i&&this.resize(i,n,o),this.left=t-this.width/2,this.top=e-this.height/2,this.boundingBox.left=this.left,this.boundingBox.top=this.top,this.boundingBox.bottom=this.top+this.height,this.boundingBox.right=this.left+this.width}},{key:\"updateBoundingBox\",value:function(t,e,i,n,o){this._updateBoundingBox(t,e,i,n,o)}},{key:\"getDimensionsFromLabel\",value:function(t,e,i){this.textSize=this.labelModule.getTextSize(t,e,i);var n=this.textSize.width,o=this.textSize.height;return 0===n&&(n=14,o=14),{width:n,height:o}}}]),t}();function Eu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Ou=function(t){Ad(i,t);var e=Eu(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o))._setMargins(o),r}return Fn(i,[{key:\"resize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(this.needsRefresh(e,i)){var n=this.getDimensionsFromLabel(t,e,i);this.width=n.width+this.margin.right+this.margin.left,this.height=n.height+this.margin.top+this.margin.bottom,this.radius=this.width/2}}},{key:\"draw\",value:function(t,e,i,n,o,r){this.resize(t,n,o),this.left=e-this.width/2,this.top=i-this.height/2,this.initContextForDraw(t,r),Yt(t,this.left,this.top,this.width,this.height,r.borderRadius),this.performFill(t,r),this.updateBoundingBox(e,i,t,n,o),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,n,o)}},{key:\"updateBoundingBox\",value:function(t,e,i,n,o){this._updateBoundingBox(t,e,i,n,o);var r=this.options.shapeProperties.borderRadius;this._addBoundingBoxMargin(r)}},{key:\"distanceToBorder\",value:function(t,e){t&&this.resize(t);var i=this.options.borderWidth;return Math.min(Math.abs(this.width/2/Math.cos(e)),Math.abs(this.height/2/Math.sin(e)))+i}}]),i}(xu);function Cu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Su=function(t){Ad(i,t);var e=Cu(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o)).labelOffset=0,r.selected=!1,r}return Fn(i,[{key:\"setOptions\",value:function(t,e,i){this.options=t,void 0===e&&void 0===i||this.setImages(e,i)}},{key:\"setImages\",value:function(t,e){e&&this.selected?(this.imageObj=e,this.imageObjAlt=t):(this.imageObj=t,this.imageObjAlt=e)}},{key:\"switchImages\",value:function(t){var e=t&&!this.selected||!t&&this.selected;if(this.selected=t,void 0!==this.imageObjAlt&&e){var i=this.imageObj;this.imageObj=this.imageObjAlt,this.imageObjAlt=i}}},{key:\"_getImagePadding\",value:function(){var t={top:0,right:0,bottom:0,left:0};if(this.options.imagePadding){var e=this.options.imagePadding;\"object\"==go(e)?(t.top=e.top,t.right=e.right,t.bottom=e.bottom,t.left=e.left):(t.top=e,t.right=e,t.bottom=e,t.left=e)}return t}},{key:\"_resizeImage\",value:function(){var t,e;if(!1===this.options.shapeProperties.useImageSize){var i=1,n=1;this.imageObj.width&&this.imageObj.height&&(this.imageObj.width>this.imageObj.height?i=this.imageObj.width/this.imageObj.height:n=this.imageObj.height/this.imageObj.width),t=2*this.options.size*i,e=2*this.options.size*n}else{var o=this._getImagePadding();t=this.imageObj.width+o.left+o.right,e=this.imageObj.height+o.top+o.bottom}this.width=t,this.height=e,this.radius=.5*this.width}},{key:\"_drawRawCircle\",value:function(t,e,i,n){this.initContextForDraw(t,n),Ut(t,e,i,n.size),this.performFill(t,n)}},{key:\"_drawImageAtPosition\",value:function(t,e){if(0!=this.imageObj.width){t.globalAlpha=void 0!==e.opacity?e.opacity:1,this.enableShadow(t,e);var i=1;!0===this.options.shapeProperties.interpolation&&(i=this.imageObj.width/this.width/this.body.view.scale);var n=this._getImagePadding(),o=this.left+n.left,r=this.top+n.top,s=this.width-n.left-n.right,a=this.height-n.top-n.bottom;this.imageObj.drawImageAtPosition(t,i,o,r,s,a),this.disableShadow(t,e)}}},{key:\"_drawImageLabel\",value:function(t,e,i,n,o){var r=0;if(void 0!==this.height){r=.5*this.height;var s=this.labelModule.getTextSize(t,n,o);s.lineCount>=1&&(r+=s.height/2)}var a=i+r;this.options.label&&(this.labelOffset=r),this.labelModule.draw(t,e,a,n,o,\"hanging\")}}]),i}(xu);function Tu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Mu=function(t){Ad(i,t);var e=Tu(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o))._setMargins(o),r}return Fn(i,[{key:\"resize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(this.needsRefresh(e,i)){var n=this.getDimensionsFromLabel(t,e,i),o=Math.max(n.width+this.margin.right+this.margin.left,n.height+this.margin.top+this.margin.bottom);this.options.size=o/2,this.width=o,this.height=o,this.radius=this.width/2}}},{key:\"draw\",value:function(t,e,i,n,o,r){this.resize(t,n,o),this.left=e-this.width/2,this.top=i-this.height/2,this._drawRawCircle(t,e,i,r),this.updateBoundingBox(e,i),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,i,n,o)}},{key:\"updateBoundingBox\",value:function(t,e){this.boundingBox.top=e-this.options.size,this.boundingBox.left=t-this.options.size,this.boundingBox.right=t+this.options.size,this.boundingBox.bottom=e+this.options.size}},{key:\"distanceToBorder\",value:function(t){return t&&this.resize(t),.5*this.width}}]),i}(Su);function Pu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Du=function(t){Ad(i,t);var e=Pu(i);function i(t,n,o,r,s){var a;return Nn(this,i),(a=e.call(this,t,n,o)).setImages(r,s),a}return Fn(i,[{key:\"resize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover,n=void 0===this.imageObj.src||void 0===this.imageObj.width||void 0===this.imageObj.height;if(n){var o=2*this.options.size;return this.width=o,this.height=o,void(this.radius=.5*this.width)}this.needsRefresh(e,i)&&this._resizeImage()}},{key:\"draw\",value:function(t,e,i,n,o,r){this.switchImages(n),this.resize();var s=e,a=i;\"top-left\"===this.options.shapeProperties.coordinateOrigin?(this.left=e,this.top=i,s+=this.width/2,a+=this.height/2):(this.left=e-this.width/2,this.top=i-this.height/2),this._drawRawCircle(t,s,a,r),t.save(),t.clip(),this._drawImageAtPosition(t,r),t.restore(),this._drawImageLabel(t,s,a,n,o),this.updateBoundingBox(e,i)}},{key:\"updateBoundingBox\",value:function(t,e){\"top-left\"===this.options.shapeProperties.coordinateOrigin?(this.boundingBox.top=e,this.boundingBox.left=t,this.boundingBox.right=t+2*this.options.size,this.boundingBox.bottom=e+2*this.options.size):(this.boundingBox.top=e-this.options.size,this.boundingBox.left=t-this.options.size,this.boundingBox.right=t+this.options.size,this.boundingBox.bottom=e+this.options.size),this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelOffset)}},{key:\"distanceToBorder\",value:function(t){return t&&this.resize(t),.5*this.width}}]),i}(Su);function Iu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Bu=function(t){Ad(i,t);var e=Iu(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"resize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover,n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{size:this.options.size};if(this.needsRefresh(e,i)){var o,r;this.labelModule.getTextSize(t,e,i);var s=2*n.size;this.width=null!==(o=this.customSizeWidth)&&void 0!==o?o:s,this.height=null!==(r=this.customSizeHeight)&&void 0!==r?r:s,this.radius=.5*this.width}}},{key:\"_drawShape\",value:function(t,e,i,n,o,r,s,a){var h,l=this;return this.resize(t,r,s,a),this.left=n-this.width/2,this.top=o-this.height/2,this.initContextForDraw(t,a),(h=e,Object.prototype.hasOwnProperty.call($t,h)?$t[h]:function(t){for(var e=arguments.length,i=new Array(e>1?e-1:0),n=1;n<e;n++)i[n-1]=arguments[n];CanvasRenderingContext2D.prototype[h].call(t,i)})(t,n,o,a.size),this.performFill(t,a),void 0!==this.options.icon&&void 0!==this.options.icon.code&&(t.font=(r?\"bold \":\"\")+this.height/2+\"px \"+(this.options.icon.face||\"FontAwesome\"),t.fillStyle=this.options.icon.color||\"black\",t.textAlign=\"center\",t.textBaseline=\"middle\",t.fillText(this.options.icon.code,n,o)),{drawExternalLabel:function(){if(void 0!==l.options.label){l.labelModule.calculateLabelSize(t,r,s,n,o,\"hanging\");var e=o+.5*l.height+.5*l.labelModule.size.height;l.labelModule.draw(t,n,e,r,s,\"hanging\")}l.updateBoundingBox(n,o)}}}},{key:\"updateBoundingBox\",value:function(t,e){this.boundingBox.top=e-this.options.size,this.boundingBox.left=t-this.options.size,this.boundingBox.right=t+this.options.size,this.boundingBox.bottom=e+this.options.size,void 0!==this.options.label&&this.labelModule.size.width>0&&(this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelModule.size.height))}}]),i}(xu);function zu(t,e){var i=zo(t);if(On){var n=On(t);e&&(n=mr(n).call(n,(function(e){return Mn(t,e).enumerable}))),i.push.apply(i,n)}return i}function Nu(t){for(var e=1;e<arguments.length;e++){var i,n=null!=arguments[e]?arguments[e]:{};if(e%2)Wo(i=zu(Object(n),!0)).call(i,(function(e){jn(t,e,n[e])}));else if(Dn)In(t,Dn(n));else{var o;Wo(o=zu(Object(n))).call(o,(function(e){zn(t,e,Mn(n,e))}))}}return t}function Au(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Fu=function(t){Ad(i,t);var e=Au(i);function i(t,n,o,r){var s;return Nn(this,i),(s=e.call(this,t,n,o,r)).ctxRenderer=r,s}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){this.resize(t,n,o,r),this.left=e-this.width/2,this.top=i-this.height/2,t.save();var s=this.ctxRenderer({ctx:t,id:this.options.id,x:e,y:i,state:{selected:n,hover:o},style:Nu({},r),label:this.options.label});if(null!=s.drawNode&&s.drawNode(),t.restore(),s.drawExternalLabel){var a=s.drawExternalLabel;s.drawExternalLabel=function(){t.save(),a(),t.restore()}}return s.nodeDimensions&&(this.customSizeWidth=s.nodeDimensions.width,this.customSizeHeight=s.nodeDimensions.height),s}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Bu);function ju(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Ru=function(t){Ad(i,t);var e=ju(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o))._setMargins(o),r}return Fn(i,[{key:\"resize\",value:function(t,e,i){if(this.needsRefresh(e,i)){var n=this.getDimensionsFromLabel(t,e,i).width+this.margin.right+this.margin.left;this.width=n,this.height=n,this.radius=this.width/2}}},{key:\"draw\",value:function(t,e,i,n,o,r){this.resize(t,n,o),this.left=e-this.width/2,this.top=i-this.height/2,this.initContextForDraw(t,r),Gt(t,e-this.width/2,i-this.height/2,this.width,this.height),this.performFill(t,r),this.updateBoundingBox(e,i,t,n,o),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,n,o)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(xu);function Lu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Hu=function(t){Ad(i,t);var e=Lu(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){return this._drawShape(t,\"diamond\",4,e,i,n,o,r)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Bu);function Wu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var qu=function(t){Ad(i,t);var e=Wu(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){return this._drawShape(t,\"circle\",2,e,i,n,o,r)}},{key:\"distanceToBorder\",value:function(t){return t&&this.resize(t),this.options.size}}]),i}(Bu);function Vu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Uu=function(t){Ad(i,t);var e=Vu(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"resize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(this.needsRefresh(e,i)){var n=this.getDimensionsFromLabel(t,e,i);this.height=2*n.height,this.width=n.width+n.height,this.radius=.5*this.width}}},{key:\"draw\",value:function(t,e,i,n,o,r){this.resize(t,n,o),this.left=e-.5*this.width,this.top=i-.5*this.height,this.initContextForDraw(t,r),Xt(t,this.left,this.top,this.width,this.height),this.performFill(t,r),this.updateBoundingBox(e,i,t,n,o),this.labelModule.draw(t,e,i,n,o)}},{key:\"distanceToBorder\",value:function(t,e){t&&this.resize(t);var i=.5*this.width,n=.5*this.height,o=Math.sin(e)*i,r=Math.cos(e)*n;return i*n/Math.sqrt(o*o+r*r)}}]),i}(xu);function Yu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Xu=function(t){Ad(i,t);var e=Yu(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o))._setMargins(o),r}return Fn(i,[{key:\"resize\",value:function(t,e,i){this.needsRefresh(e,i)&&(this.iconSize={width:Number(this.options.icon.size),height:Number(this.options.icon.size)},this.width=this.iconSize.width+this.margin.right+this.margin.left,this.height=this.iconSize.height+this.margin.top+this.margin.bottom,this.radius=.5*this.width)}},{key:\"draw\",value:function(t,e,i,n,o,r){var s=this;return this.resize(t,n,o),this.options.icon.size=this.options.icon.size||50,this.left=e-this.width/2,this.top=i-this.height/2,this._icon(t,e,i,n,o,r),{drawExternalLabel:function(){if(void 0!==s.options.label){s.labelModule.draw(t,s.left+s.iconSize.width/2+s.margin.left,i+s.height/2+5,n)}s.updateBoundingBox(e,i)}}}},{key:\"updateBoundingBox\",value:function(t,e){if(this.boundingBox.top=e-.5*this.options.icon.size,this.boundingBox.left=t-.5*this.options.icon.size,this.boundingBox.right=t+.5*this.options.icon.size,this.boundingBox.bottom=e+.5*this.options.icon.size,void 0!==this.options.label&&this.labelModule.size.width>0){this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelModule.size.height+5)}}},{key:\"_icon\",value:function(t,e,i,n,o,r){var s=Number(this.options.icon.size);void 0!==this.options.icon.code?(t.font=[null!=this.options.icon.weight?this.options.icon.weight:n?\"bold\":\"\",(null!=this.options.icon.weight&&n?5:0)+s+\"px\",this.options.icon.face].join(\" \"),t.fillStyle=this.options.icon.color||\"black\",t.textAlign=\"center\",t.textBaseline=\"middle\",this.enableShadow(t,r),t.fillText(this.options.icon.code,e,i),this.disableShadow(t,r)):console.error(\"When using the icon shape, you need to define the code in the icon options object. This can be done per node or globally.\")}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(xu);function Gu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Ku=function(t){Ad(i,t);var e=Gu(i);function i(t,n,o,r,s){var a;return Nn(this,i),(a=e.call(this,t,n,o)).setImages(r,s),a}return Fn(i,[{key:\"resize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover,n=void 0===this.imageObj.src||void 0===this.imageObj.width||void 0===this.imageObj.height;if(n){var o=2*this.options.size;return this.width=o,void(this.height=o)}this.needsRefresh(e,i)&&this._resizeImage()}},{key:\"draw\",value:function(t,e,i,n,o,r){t.save(),this.switchImages(n),this.resize();var s=e,a=i;if(\"top-left\"===this.options.shapeProperties.coordinateOrigin?(this.left=e,this.top=i,s+=this.width/2,a+=this.height/2):(this.left=e-this.width/2,this.top=i-this.height/2),!0===this.options.shapeProperties.useBorderWithImage){var h=this.options.borderWidth,l=this.options.borderWidthSelected||2*this.options.borderWidth,d=(n?l:h)/this.body.view.scale;t.lineWidth=Math.min(this.width,d),t.beginPath();var c=n?this.options.color.highlight.border:o?this.options.color.hover.border:this.options.color.border,u=n?this.options.color.highlight.background:o?this.options.color.hover.background:this.options.color.background;void 0!==r.opacity&&(c=Fh(c,r.opacity),u=Fh(u,r.opacity)),t.strokeStyle=c,t.fillStyle=u,t.rect(this.left-.5*t.lineWidth,this.top-.5*t.lineWidth,this.width+t.lineWidth,this.height+t.lineWidth),hs(t).call(t),this.performStroke(t,r),t.closePath()}this._drawImageAtPosition(t,r),this._drawImageLabel(t,s,a,n,o),this.updateBoundingBox(e,i),t.restore()}},{key:\"updateBoundingBox\",value:function(t,e){this.resize(),\"top-left\"===this.options.shapeProperties.coordinateOrigin?(this.left=t,this.top=e):(this.left=t-this.width/2,this.top=e-this.height/2),this.boundingBox.left=this.left,this.boundingBox.top=this.top,this.boundingBox.bottom=this.top+this.height,this.boundingBox.right=this.left+this.width,void 0!==this.options.label&&this.labelModule.size.width>0&&(this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelOffset))}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Su);function $u(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Zu=function(t){Ad(i,t);var e=$u(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){return this._drawShape(t,\"square\",2,e,i,n,o,r)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Bu);function Qu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Ju=function(t){Ad(i,t);var e=Qu(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){return this._drawShape(t,\"hexagon\",4,e,i,n,o,r)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Bu);function tf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var ef=function(t){Ad(i,t);var e=tf(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){return this._drawShape(t,\"star\",4,e,i,n,o,r)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Bu);function nf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var of=function(t){Ad(i,t);var e=nf(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o))._setMargins(o),r}return Fn(i,[{key:\"resize\",value:function(t,e,i){this.needsRefresh(e,i)&&(this.textSize=this.labelModule.getTextSize(t,e,i),this.width=this.textSize.width+this.margin.right+this.margin.left,this.height=this.textSize.height+this.margin.top+this.margin.bottom,this.radius=.5*this.width)}},{key:\"draw\",value:function(t,e,i,n,o,r){this.resize(t,n,o),this.left=e-this.width/2,this.top=i-this.height/2,this.enableShadow(t,r),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,n,o),this.disableShadow(t,r),this.updateBoundingBox(e,i,t,n,o)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(xu);function rf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var sf=function(t){Ad(i,t);var e=rf(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){return this._drawShape(t,\"triangle\",3,e,i,n,o,r)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Bu);function af(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var hf=function(t){Ad(i,t);var e=af(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){return this._drawShape(t,\"triangleDown\",3,e,i,n,o,r)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Bu);function lf(t,e){var i=zo(t);if(On){var n=On(t);e&&(n=mr(n).call(n,(function(e){return Mn(t,e).enumerable}))),i.push.apply(i,n)}return i}function df(t){for(var e=1;e<arguments.length;e++){var i,n=null!=arguments[e]?arguments[e]:{};if(e%2)Wo(i=lf(Object(n),!0)).call(i,(function(e){jn(t,e,n[e])}));else if(Dn)In(t,Dn(n));else{var o;Wo(o=lf(Object(n))).call(o,(function(e){zn(t,e,Mn(n,e))}))}}return t}var cf=function(){function t(e,i,n,o,r,s){Nn(this,t),this.options=Kh(r),this.globalOptions=r,this.defaultOptions=s,this.body=i,this.edges=[],this.id=void 0,this.imagelist=n,this.grouplist=o,this.x=void 0,this.y=void 0,this.baseSize=this.options.size,this.baseFontSize=this.options.font.size,this.predefinedPosition=!1,this.selected=!1,this.hover=!1,this.labelModule=new _u(this.body,this.options,!1),this.setOptions(e)}return Fn(t,[{key:\"attachEdge\",value:function(t){var e;-1===Hr(e=this.edges).call(e,t)&&this.edges.push(t)}},{key:\"detachEdge\",value:function(t){var e,i,n=Hr(e=this.edges).call(e,t);-1!=n&&er(i=this.edges).call(i,n,1)}},{key:\"setOptions\",value:function(e){var i=this.options.shape;if(e){if(void 0!==e.color&&(this._localColor=e.color),void 0!==e.id&&(this.id=e.id),void 0===this.id)throw new Error(\"Node must have an id\");t.checkMass(e,this.id),void 0!==e.x&&(null===e.x?(this.x=void 0,this.predefinedPosition=!1):(this.x=Br(e.x),this.predefinedPosition=!0)),void 0!==e.y&&(null===e.y?(this.y=void 0,this.predefinedPosition=!1):(this.y=Br(e.y),this.predefinedPosition=!0)),void 0!==e.size&&(this.baseSize=e.size),void 0!==e.value&&(e.value=hu(e.value)),t.parseOptions(this.options,e,!0,this.globalOptions,this.grouplist);var n=[e,this.options,this.defaultOptions];return this.chooser=fu(\"node\",n),this._load_images(),this.updateLabelModule(e),void 0!==e.opacity&&t.checkOpacity(e.opacity)&&(this.options.opacity=e.opacity),this.updateShape(i),void 0!==e.hidden||void 0!==e.physics}}},{key:\"_load_images\",value:function(){if((\"circularImage\"===this.options.shape||\"image\"===this.options.shape)&&void 0===this.options.image)throw new Error(\"Option image must be defined for node type '\"+this.options.shape+\"'\");if(void 0!==this.options.image){if(void 0===this.imagelist)throw new Error(\"Internal Error: No images provided\");if(\"string\"==typeof this.options.image)this.imageObj=this.imagelist.load(this.options.image,this.options.brokenImage,this.id);else{if(void 0===this.options.image.unselected)throw new Error(\"No unselected image provided\");this.imageObj=this.imagelist.load(this.options.image.unselected,this.options.brokenImage,this.id),void 0!==this.options.image.selected?this.imageObjAlt=this.imagelist.load(this.options.image.selected,this.options.brokenImage,this.id):this.imageObjAlt=void 0}}}},{key:\"getFormattingValues\",value:function(){var t={color:this.options.color.background,opacity:this.options.opacity,borderWidth:this.options.borderWidth,borderColor:this.options.color.border,size:this.options.size,borderDashes:this.options.shapeProperties.borderDashes,borderRadius:this.options.shapeProperties.borderRadius,shadow:this.options.shadow.enabled,shadowColor:this.options.shadow.color,shadowSize:this.options.shadow.size,shadowX:this.options.shadow.x,shadowY:this.options.shadow.y};if(this.selected||this.hover?!0===this.chooser?this.selected?(null!=this.options.borderWidthSelected?t.borderWidth=this.options.borderWidthSelected:t.borderWidth*=2,t.color=this.options.color.highlight.background,t.borderColor=this.options.color.highlight.border,t.shadow=this.options.shadow.enabled):this.hover&&(t.color=this.options.color.hover.background,t.borderColor=this.options.color.hover.border,t.shadow=this.options.shadow.enabled):\"function\"==typeof this.chooser&&(this.chooser(t,this.options.id,this.selected,this.hover),!1===t.shadow&&(t.shadowColor===this.options.shadow.color&&t.shadowSize===this.options.shadow.size&&t.shadowX===this.options.shadow.x&&t.shadowY===this.options.shadow.y||(t.shadow=!0))):t.shadow=this.options.shadow.enabled,void 0!==this.options.opacity){var e=this.options.opacity;t.borderColor=Fh(t.borderColor,e),t.color=Fh(t.color,e),t.shadowColor=Fh(t.shadowColor,e)}return t}},{key:\"updateLabelModule\",value:function(e){void 0!==this.options.label&&null!==this.options.label||(this.options.label=\"\"),t.updateGroupOptions(this.options,df(df({},e),{},{color:e&&e.color||this._localColor||void 0}),this.grouplist);var i=this.grouplist.get(this.options.group,!1),n=[e,this.options,i,this.globalOptions,this.defaultOptions];this.labelModule.update(this.options,n),void 0!==this.labelModule.baseSize&&(this.baseFontSize=this.labelModule.baseSize)}},{key:\"updateShape\",value:function(t){if(t===this.options.shape&&this.shape)this.shape.setOptions(this.options,this.imageObj,this.imageObjAlt);else switch(this.options.shape){case\"box\":this.shape=new Ou(this.options,this.body,this.labelModule);break;case\"circle\":this.shape=new Mu(this.options,this.body,this.labelModule);break;case\"circularImage\":this.shape=new Du(this.options,this.body,this.labelModule,this.imageObj,this.imageObjAlt);break;case\"custom\":this.shape=new Fu(this.options,this.body,this.labelModule,this.options.ctxRenderer);break;case\"database\":this.shape=new Ru(this.options,this.body,this.labelModule);break;case\"diamond\":this.shape=new Hu(this.options,this.body,this.labelModule);break;case\"dot\":this.shape=new qu(this.options,this.body,this.labelModule);break;case\"ellipse\":this.shape=new Uu(this.options,this.body,this.labelModule);break;case\"icon\":this.shape=new Xu(this.options,this.body,this.labelModule);break;case\"image\":this.shape=new Ku(this.options,this.body,this.labelModule,this.imageObj,this.imageObjAlt);break;case\"square\":this.shape=new Zu(this.options,this.body,this.labelModule);break;case\"hexagon\":this.shape=new Ju(this.options,this.body,this.labelModule);break;case\"star\":this.shape=new ef(this.options,this.body,this.labelModule);break;case\"text\":this.shape=new of(this.options,this.body,this.labelModule);break;case\"triangle\":this.shape=new sf(this.options,this.body,this.labelModule);break;case\"triangleDown\":this.shape=new hf(this.options,this.body,this.labelModule);break;default:this.shape=new Uu(this.options,this.body,this.labelModule)}this.needsRefresh()}},{key:\"select\",value:function(){this.selected=!0,this.needsRefresh()}},{key:\"unselect\",value:function(){this.selected=!1,this.needsRefresh()}},{key:\"needsRefresh\",value:function(){this.shape.refreshNeeded=!0}},{key:\"getTitle\",value:function(){return this.options.title}},{key:\"distanceToBorder\",value:function(t,e){return this.shape.distanceToBorder(t,e)}},{key:\"isFixed\",value:function(){return this.options.fixed.x&&this.options.fixed.y}},{key:\"isSelected\",value:function(){return this.selected}},{key:\"getValue\",value:function(){return this.options.value}},{key:\"getLabelSize\",value:function(){return this.labelModule.size()}},{key:\"setValueRange\",value:function(t,e,i){if(void 0!==this.options.value){var n=this.options.scaling.customScalingFunction(t,e,i,this.options.value),o=this.options.scaling.max-this.options.scaling.min;if(!0===this.options.scaling.label.enabled){var r=this.options.scaling.label.max-this.options.scaling.label.min;this.options.font.size=this.options.scaling.label.min+n*r}this.options.size=this.options.scaling.min+n*o}else this.options.size=this.baseSize,this.options.font.size=this.baseFontSize;this.updateLabelModule()}},{key:\"draw\",value:function(t){var e=this.getFormattingValues();return this.shape.draw(t,this.x,this.y,this.selected,this.hover,e)||{}}},{key:\"updateBoundingBox\",value:function(t){this.shape.updateBoundingBox(this.x,this.y,t)}},{key:\"resize\",value:function(t){var e=this.getFormattingValues();this.shape.resize(t,this.selected,this.hover,e)}},{key:\"getItemsOnPoint\",value:function(t){var e=[];return this.labelModule.visible()&&pu(this.labelModule.getSize(),t)&&e.push({nodeId:this.id,labelId:0}),pu(this.shape.boundingBox,t)&&e.push({nodeId:this.id}),e}},{key:\"isOverlappingWith\",value:function(t){return this.shape.left<t.right&&this.shape.left+this.shape.width>t.left&&this.shape.top<t.bottom&&this.shape.top+this.shape.height>t.top}},{key:\"isBoundingBoxOverlappingWith\",value:function(t){return this.shape.boundingBox.left<t.right&&this.shape.boundingBox.right>t.left&&this.shape.boundingBox.top<t.bottom&&this.shape.boundingBox.bottom>t.top}}],[{key:\"checkOpacity\",value:function(t){return 0<=t&&t<=1}},{key:\"checkCoordinateOrigin\",value:function(t){return void 0===t||\"center\"===t||\"top-left\"===t}},{key:\"updateGroupOptions\",value:function(e,i,n){var o;if(void 0!==n){var r=e.group;if(void 0!==i&&void 0!==i.group&&r!==i.group)throw new Error(\"updateGroupOptions: group values in options don't match.\");if(\"number\"==typeof r||\"string\"==typeof r&&\"\"!=r){var s=n.get(r);void 0!==s.opacity&&void 0===i.opacity&&(t.checkOpacity(s.opacity)||(console.error(\"Invalid option for node opacity. Value must be between 0 and 1, found: \"+s.opacity),s.opacity=void 0));var a=mr(o=uu(i)).call(o,(function(t){return null!=i[t]}));a.push(\"font\"),Oh(a,e,s),e.color=Rh(e.color)}}}},{key:\"parseOptions\",value:function(e,i){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},r=arguments.length>4?arguments[4]:void 0,s=[\"color\",\"fixed\",\"shadow\"];if(Oh(s,e,i,n),t.checkMass(i),void 0!==e.opacity&&(t.checkOpacity(e.opacity)||(console.error(\"Invalid option for node opacity. Value must be between 0 and 1, found: \"+e.opacity),e.opacity=void 0)),void 0!==i.opacity&&(t.checkOpacity(i.opacity)||(console.error(\"Invalid option for node opacity. Value must be between 0 and 1, found: \"+i.opacity),i.opacity=void 0)),i.shapeProperties&&!t.checkCoordinateOrigin(i.shapeProperties.coordinateOrigin)&&console.error(\"Invalid option for node coordinateOrigin, found: \"+i.shapeProperties.coordinateOrigin),$h(e,i,\"shadow\",o),void 0!==i.color&&null!==i.color){var a=Rh(i.color);_h(e.color,a)}else!0===n&&null===i.color&&(e.color=Kh(o.color));void 0!==i.fixed&&null!==i.fixed&&(\"boolean\"==typeof i.fixed?(e.fixed.x=i.fixed,e.fixed.y=i.fixed):(void 0!==i.fixed.x&&\"boolean\"==typeof i.fixed.x&&(e.fixed.x=i.fixed.x),void 0!==i.fixed.y&&\"boolean\"==typeof i.fixed.y&&(e.fixed.y=i.fixed.y))),!0===n&&null===i.font&&(e.font=Kh(o.font)),t.updateGroupOptions(e,i,r),void 0!==i.scaling&&$h(e.scaling,i.scaling,\"label\",o.scaling)}},{key:\"checkMass\",value:function(t,e){if(void 0!==t.mass&&t.mass<=0){var i=\"\";void 0!==e&&(i=\" in node id: \"+e),console.error(\"%cNegative or zero mass disallowed\"+i+\", setting mass to 1.\",cl),t.mass=1}}}]),t}();function uf(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return ff(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return ff(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function ff(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}var pf=function(){function t(e,i,n,o){var r,s=this;if(Nn(this,t),this.body=e,this.images=i,this.groups=n,this.layoutEngine=o,this.body.functions.createNode=Vt(r=this.create).call(r,this),this.nodesListeners={add:function(t,e){s.add(e.items)},update:function(t,e){s.update(e.items,e.data,e.oldData)},remove:function(t,e){s.remove(e.items)}},this.defaultOptions={borderWidth:1,borderWidthSelected:void 0,brokenImage:void 0,color:{border:\"#2B7CE9\",background:\"#97C2FC\",highlight:{border:\"#2B7CE9\",background:\"#D2E5FF\"},hover:{border:\"#2B7CE9\",background:\"#D2E5FF\"}},opacity:void 0,fixed:{x:!1,y:!1},font:{color:\"#343434\",size:14,face:\"arial\",background:\"none\",strokeWidth:0,strokeColor:\"#ffffff\",align:\"center\",vadjust:0,multi:!1,bold:{mod:\"bold\"},boldital:{mod:\"bold italic\"},ital:{mod:\"italic\"},mono:{mod:\"\",size:15,face:\"monospace\",vadjust:2}},group:void 0,hidden:!1,icon:{face:\"FontAwesome\",code:void 0,size:50,color:\"#2B7CE9\"},image:void 0,imagePadding:{top:0,right:0,bottom:0,left:0},label:void 0,labelHighlightBold:!0,level:void 0,margin:{top:5,right:5,bottom:5,left:5},mass:1,physics:!0,scaling:{min:10,max:30,label:{enabled:!1,min:14,max:30,maxVisible:30,drawThreshold:5},customScalingFunction:function(t,e,i,n){if(e===t)return.5;var o=1/(e-t);return Math.max(0,(n-t)*o)}},shadow:{enabled:!1,color:\"rgba(0,0,0,0.5)\",size:10,x:5,y:5},shape:\"ellipse\",shapeProperties:{borderDashes:!1,borderRadius:6,interpolation:!0,useImageSize:!1,useBorderWithImage:!1,coordinateOrigin:\"center\"},size:25,title:void 0,value:void 0,x:void 0,y:void 0},this.defaultOptions.mass<=0)throw\"Internal error: mass in defaultOptions of NodesHandler may not be zero or negative\";this.options=Kh(this.defaultOptions),this.bindEventListeners()}return Fn(t,[{key:\"bindEventListeners\",value:function(){var t,e,i=this;this.body.emitter.on(\"refreshNodes\",Vt(t=this.refresh).call(t,this)),this.body.emitter.on(\"refresh\",Vt(e=this.refresh).call(e,this)),this.body.emitter.on(\"destroy\",(function(){Dh(i.nodesListeners,(function(t,e){i.body.data.nodes&&i.body.data.nodes.off(e,t)})),delete i.body.functions.createNode,delete i.nodesListeners.add,delete i.nodesListeners.update,delete i.nodesListeners.remove,delete i.nodesListeners}))}},{key:\"setOptions\",value:function(t){if(void 0!==t){if(cf.parseOptions(this.options,t),void 0!==t.opacity&&(yd(t.opacity)||!wd(t.opacity)||t.opacity<0||t.opacity>1?console.error(\"Invalid option for node opacity. Value must be between 0 and 1, found: \"+t.opacity):this.options.opacity=t.opacity),void 0!==t.shape)for(var e in this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,e)&&this.body.nodes[e].updateShape();if(void 0!==t.font||void 0!==t.widthConstraint||void 0!==t.heightConstraint)for(var i=0,n=zo(this.body.nodes);i<n.length;i++){var o=n[i];this.body.nodes[o].updateLabelModule(),this.body.nodes[o].needsRefresh()}if(void 0!==t.size)for(var r in this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,r)&&this.body.nodes[r].needsRefresh();void 0===t.hidden&&void 0===t.physics||this.body.emitter.emit(\"_dataChanged\")}}},{key:\"setData\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=this.body.data.nodes;if(nu(\"id\",t))this.body.data.nodes=t;else if(So(t))this.body.data.nodes=new tu,this.body.data.nodes.add(t);else{if(t)throw new TypeError(\"Array or DataSet expected\");this.body.data.nodes=new tu}if(i&&Dh(this.nodesListeners,(function(t,e){i.off(e,t)})),this.body.nodes={},this.body.data.nodes){var n=this;Dh(this.nodesListeners,(function(t,e){n.body.data.nodes.on(e,t)}));var o=this.body.data.nodes.getIds();this.add(o,!0)}!1===e&&this.body.emitter.emit(\"_dataChanged\")}},{key:\"add\",value:function(t){for(var e,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=[],o=0;o<t.length;o++){e=t[o];var r=this.body.data.nodes.get(e),s=this.create(r);n.push(s),this.body.nodes[e]=s}this.layoutEngine.positionInitially(n),!1===i&&this.body.emitter.emit(\"_dataChanged\")}},{key:\"update\",value:function(t,e,i){for(var n=this.body.nodes,o=!1,r=0;r<t.length;r++){var s=t[r],a=n[s],h=e[r];void 0!==a?a.setOptions(h)&&(o=!0):(o=!0,a=this.create(h),n[s]=a)}o||void 0===i||(o=Od(e).call(e,(function(t,e){var n=i[e];return n&&n.level!==t.level}))),!0===o?this.body.emitter.emit(\"_dataChanged\"):this.body.emitter.emit(\"_dataUpdated\")}},{key:\"remove\",value:function(t){for(var e=this.body.nodes,i=0;i<t.length;i++){delete e[t[i]]}this.body.emitter.emit(\"_dataChanged\")}},{key:\"create\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:cf;return new e(t,this.body,this.images,this.groups,this.options,this.defaultOptions)}},{key:\"refresh\",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];Dh(this.body.nodes,(function(i,n){var o=t.body.data.nodes.get(n);void 0!==o&&(!0===e&&i.setOptions({x:null,y:null}),i.setOptions({fixed:!1}),i.setOptions(o))}))}},{key:\"getPositions\",value:function(t){var e={};if(void 0!==t){if(!0===So(t)){for(var i=0;i<t.length;i++)if(void 0!==this.body.nodes[t[i]]){var n=this.body.nodes[t[i]];e[t[i]]={x:Math.round(n.x),y:Math.round(n.y)}}}else if(void 0!==this.body.nodes[t]){var o=this.body.nodes[t];e[t]={x:Math.round(o.x),y:Math.round(o.y)}}}else for(var r=0;r<this.body.nodeIndices.length;r++){var s=this.body.nodes[this.body.nodeIndices[r]];e[this.body.nodeIndices[r]]={x:Math.round(s.x),y:Math.round(s.y)}}return e}},{key:\"getPosition\",value:function(t){if(null==t)throw new TypeError(\"No id was specified for getPosition method.\");if(null==this.body.nodes[t])throw new ReferenceError(\"NodeId provided for getPosition does not exist. Provided: \".concat(t));return{x:Math.round(this.body.nodes[t].x),y:Math.round(this.body.nodes[t].y)}}},{key:\"storePositions\",value:function(){var t,e=[],i=this.body.data.nodes.getDataSet(),n=uf(i.get());try{for(n.s();!(t=n.n()).done;){var o=t.value,r=o.id,s=this.body.nodes[r],a=Math.round(s.x),h=Math.round(s.y);o.x===a&&o.y===h||e.push({id:r,x:a,y:h})}}catch(t){n.e(t)}finally{n.f()}i.update(e)}},{key:\"getBoundingBox\",value:function(t){if(void 0!==this.body.nodes[t])return this.body.nodes[t].shape.boundingBox}},{key:\"getConnectedNodes\",value:function(t,e){var i=[];if(void 0!==this.body.nodes[t])for(var n=this.body.nodes[t],o={},r=0;r<n.edges.length;r++){var s=n.edges[r];\"to\"!==e&&s.toId==n.id?void 0===o[s.fromId]&&(i.push(s.fromId),o[s.fromId]=!0):\"from\"!==e&&s.fromId==n.id&&void 0===o[s.toId]&&(i.push(s.toId),o[s.toId]=!0)}return i}},{key:\"getConnectedEdges\",value:function(t){var e=[];if(void 0!==this.body.nodes[t])for(var i=this.body.nodes[t],n=0;n<i.edges.length;n++)e.push(i.edges[n].id);else console.error(\"NodeId provided for getConnectedEdges does not exist. Provided: \",t);return e}},{key:\"moveNode\",value:function(t,e,i){var n=this;void 0!==this.body.nodes[t]?(this.body.nodes[t].x=Number(e),this.body.nodes[t].y=Number(i),rs((function(){n.body.emitter.emit(\"startSimulation\")}),0)):console.error(\"Node id supplied to moveNode does not exist. Provided: \",t)}}]),t}();gt({target:\"Reflect\",stat:!0},{get:function t(e,i){var n,o,r=arguments.length<3?e:arguments[2];return dt(e)===r?e[i]:(n=tt.f(e,i))?j(n,\"value\")?n.value:void 0===n.get?void 0:n.get.call(r):w(o=Ee(e))?t(o,i,r):void 0}});var vf=k.Reflect.get,gf=Tn,yf=n((function(t){t.exports=function(t,e){for(;!Object.prototype.hasOwnProperty.call(t,e)&&null!==(t=Rd(t)););return t},t.exports.default=t.exports,t.exports.__esModule=!0}));i(yf);var mf=i(n((function(t){function e(i,n,o){return\"undefined\"!=typeof Reflect&&vf?(t.exports=e=vf,t.exports.default=t.exports,t.exports.__esModule=!0):(t.exports=e=function(t,e,i){var n=yf(t,e);if(n){var o=gf(n,e);return o.get?o.get.call(i):o.value}},t.exports.default=t.exports,t.exports.__esModule=!0),e(i,n,o||i)}t.exports=e,t.exports.default=t.exports,t.exports.__esModule=!0}))),bf=Math.hypot,wf=Math.abs,kf=Math.sqrt,_f=!!bf&&bf(1/0,NaN)!==1/0;gt({target:\"Math\",stat:!0,forced:_f},{hypot:function(t,e){for(var i,n,o=0,r=0,s=arguments.length,a=0;r<s;)a<(i=wf(arguments[r++]))?(o=o*(n=a/i)*n+1,a=i):o+=i>0?(n=i/a)*n:i;return a===1/0?1/0:a*kf(o)}});var xf=k.Math.hypot;function Ef(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Of=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"transform\",value:function(t,e){So(t)||(t=[t]);for(var i=e.point.x,n=e.point.y,o=e.angle,r=e.length,s=0;s<t.length;++s){var a=t[s],h=a.x*Math.cos(o)-a.y*Math.sin(o),l=a.x*Math.sin(o)+a.y*Math.cos(o);a.x=i+r*h,a.y=n+r*l}}},{key:\"drawPath\",value:function(t,e){t.beginPath(),t.moveTo(e[0].x,e[0].y);for(var i=1;i<e.length;++i)t.lineTo(e[i].x,e[i].y);t.closePath()}}]),t}(),Cf=function(t){Ad(i,t);var e=Ef(i);function i(){return Nn(this,i),e.apply(this,arguments)}return Fn(i,null,[{key:\"draw\",value:function(t,e){if(e.image){t.save(),t.translate(e.point.x,e.point.y),t.rotate(Math.PI/2+e.angle);var i=null!=e.imageWidth?e.imageWidth:e.image.width,n=null!=e.imageHeight?e.imageHeight:e.image.height;e.image.drawImageAtPosition(t,1,-i/2,0,i,n),t.restore()}return!1}}]),i}(Of),Sf=function(t){Ad(i,t);var e=Ef(i);function i(){return Nn(this,i),e.apply(this,arguments)}return Fn(i,null,[{key:\"draw\",value:function(t,e){var i=[{x:0,y:0},{x:-1,y:.3},{x:-.9,y:0},{x:-1,y:-.3}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),i}(Of),Tf=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i=[{x:-1,y:0},{x:0,y:.3},{x:-.4,y:0},{x:0,y:-.3}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),t}(),Mf=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i={x:-.4,y:0};Of.transform(i,e),t.strokeStyle=t.fillStyle,t.fillStyle=\"rgba(0, 0, 0, 0)\";var n=Math.PI,o=e.angle-n/2,r=e.angle+n/2;return t.beginPath(),t.arc(i.x,i.y,.4*e.length,o,r,!1),t.stroke(),!0}}]),t}(),Pf=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i={x:-.3,y:0};Of.transform(i,e),t.strokeStyle=t.fillStyle,t.fillStyle=\"rgba(0, 0, 0, 0)\";var n=Math.PI,o=e.angle+n/2,r=e.angle+3*n/2;return t.beginPath(),t.arc(i.x,i.y,.4*e.length,o,r,!1),t.stroke(),!0}}]),t}(),Df=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i=[{x:.02,y:0},{x:-1,y:.3},{x:-1,y:-.3}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),t}(),If=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i=[{x:0,y:.3},{x:0,y:-.3},{x:-1,y:0}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),t}(),Bf=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i={x:-.4,y:0};return Of.transform(i,e),Ut(t,i.x,i.y,.4*e.length),!0}}]),t}(),zf=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i=[{x:0,y:.5},{x:0,y:-.5},{x:-.15,y:-.5},{x:-.15,y:.5}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),t}(),Nf=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i=[{x:0,y:.3},{x:0,y:-.3},{x:-.6,y:-.3},{x:-.6,y:.3}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),t}(),Af=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i=[{x:0,y:0},{x:-.5,y:-.3},{x:-1,y:0},{x:-.5,y:.3}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),t}(),Ff=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i=[{x:-1,y:.3},{x:-.5,y:0},{x:-1,y:-.3},{x:0,y:0}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),t}(),jf=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i;switch(e.type&&(i=e.type.toLowerCase()),i){case\"image\":return Cf.draw(t,e);case\"circle\":return Bf.draw(t,e);case\"box\":return Nf.draw(t,e);case\"crow\":return Tf.draw(t,e);case\"curve\":return Mf.draw(t,e);case\"diamond\":return Af.draw(t,e);case\"inv_curve\":return Pf.draw(t,e);case\"triangle\":return Df.draw(t,e);case\"inv_triangle\":return If.draw(t,e);case\"bar\":return zf.draw(t,e);case\"vee\":return Ff.draw(t,e);case\"arrow\":default:return Sf.draw(t,e)}}}]),t}();function Rf(t,e){var i=zo(t);if(On){var n=On(t);e&&(n=mr(n).call(n,(function(e){return Mn(t,e).enumerable}))),i.push.apply(i,n)}return i}function Lf(t){for(var e=1;e<arguments.length;e++){var i,n=null!=arguments[e]?arguments[e]:{};if(e%2)Wo(i=Rf(Object(n),!0)).call(i,(function(e){jn(t,e,n[e])}));else if(Dn)In(t,Dn(n));else{var o;Wo(o=Rf(Object(n))).call(o,(function(e){zn(t,e,Mn(n,e))}))}}return t}var Hf=function(){function t(e,i,n){Nn(this,t),this._body=i,this._labelModule=n,this.color={},this.colorDirty=!0,this.hoverWidth=1.5,this.selectionWidth=2,this.setOptions(e),this.fromPoint=this.from,this.toPoint=this.to}return Fn(t,[{key:\"connect\",value:function(){this.from=this._body.nodes[this.options.from],this.to=this._body.nodes[this.options.to]}},{key:\"cleanup\",value:function(){return!1}},{key:\"setOptions\",value:function(t){this.options=t,this.from=this._body.nodes[this.options.from],this.to=this._body.nodes[this.options.to],this.id=this.options.id}},{key:\"drawLine\",value:function(t,e,i,n){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:this.getViaNode();t.strokeStyle=this.getColor(t,e),t.lineWidth=e.width,!1!==e.dashes?this._drawDashedLine(t,e,o):this._drawLine(t,e,o)}},{key:\"_drawLine\",value:function(t,e,i,n,o){if(this.from!=this.to)this._line(t,e,i,n,o);else{var r=this._getCircleData(t),s=uo(r,3),a=s[0],h=s[1],l=s[2];this._circle(t,e,a,h,l)}}},{key:\"_drawDashedLine\",value:function(t,e,i,n,o){t.lineCap=\"round\";var r=So(e.dashes)?e.dashes:[5,5];if(void 0!==t.setLineDash){if(t.save(),t.setLineDash(r),t.lineDashOffset=0,this.from!=this.to)this._line(t,e,i);else{var s=this._getCircleData(t),a=uo(s,3),h=a[0],l=a[1],d=a[2];this._circle(t,e,h,l,d)}t.setLineDash([0]),t.lineDashOffset=0,t.restore()}else{if(this.from!=this.to)Kt(t,this.from.x,this.from.y,this.to.x,this.to.y,r);else{var c=this._getCircleData(t),u=uo(c,3),f=u[0],p=u[1],v=u[2];this._circle(t,e,f,p,v)}this.enableShadow(t,e),t.stroke(),this.disableShadow(t,e)}}},{key:\"findBorderPosition\",value:function(t,e,i){return this.from!=this.to?this._findBorderPosition(t,e,i):this._findBorderPositionCircle(t,e,i)}},{key:\"findBorderPositions\",value:function(t){if(this.from!=this.to)return{from:this._findBorderPosition(this.from,t),to:this._findBorderPosition(this.to,t)};var e,i=Oo(e=this._getCircleData(t)).call(e,0,2),n=uo(i,2),o=n[0],r=n[1];return{from:this._findBorderPositionCircle(this.from,t,{x:o,y:r,low:.25,high:.6,direction:-1}),to:this._findBorderPositionCircle(this.from,t,{x:o,y:r,low:.6,high:.8,direction:1})}}},{key:\"_getCircleData\",value:function(t){var e=this.options.selfReference.size;void 0!==t&&void 0===this.from.shape.width&&this.from.shape.resize(t);var i=gu(t,this.options.selfReference.angle,e,this.from);return[i.x,i.y,e]}},{key:\"_pointOnCircle\",value:function(t,e,i,n){var o=2*n*Math.PI;return{x:t+i*Math.cos(o),y:e-i*Math.sin(o)}}},{key:\"_findBorderPositionCircle\",value:function(t,e,i){var n,o=i.x,r=i.y,s=i.low,a=i.high,h=i.direction,l=this.options.selfReference.size,d=.5*(s+a),c=0;!0===this.options.arrowStrikethrough&&(-1===h?c=this.options.endPointOffset.from:1===h&&(c=this.options.endPointOffset.to));var u=0;do{d=.5*(s+a),n=this._pointOnCircle(o,r,l,d);var f=Math.atan2(t.y-n.y,t.x-n.x),p=t.distanceToBorder(e,f)+c-Math.sqrt(Math.pow(n.x-t.x,2)+Math.pow(n.y-t.y,2));if(Math.abs(p)<.05)break;p>0?h>0?s=d:a=d:h>0?a=d:s=d,++u}while(s<=a&&u<10);return Lf(Lf({},n),{},{t:d})}},{key:\"getLineWidth\",value:function(t,e){return!0===t?Math.max(this.selectionWidth,.3/this._body.view.scale):!0===e?Math.max(this.hoverWidth,.3/this._body.view.scale):Math.max(this.options.width,.3/this._body.view.scale)}},{key:\"getColor\",value:function(t,e){if(!1!==e.inheritsColor){if(\"both\"===e.inheritsColor&&this.from.id!==this.to.id){var i=t.createLinearGradient(this.from.x,this.from.y,this.to.x,this.to.y),n=this.from.options.color.highlight.border,o=this.to.options.color.highlight.border;return!1===this.from.selected&&!1===this.to.selected?(n=Fh(this.from.options.color.border,e.opacity),o=Fh(this.to.options.color.border,e.opacity)):!0===this.from.selected&&!1===this.to.selected?o=this.to.options.color.border:!1===this.from.selected&&!0===this.to.selected&&(n=this.from.options.color.border),i.addColorStop(0,n),i.addColorStop(1,o),i}return\"to\"===e.inheritsColor?Fh(this.to.options.color.border,e.opacity):Fh(this.from.options.color.border,e.opacity)}return Fh(e.color,e.opacity)}},{key:\"_circle\",value:function(t,e,i,n,o){this.enableShadow(t,e);var r=0,s=2*Math.PI;if(!this.options.selfReference.renderBehindTheNode){var a=this.options.selfReference.angle,h=this.options.selfReference.angle+Math.PI,l=this._findBorderPositionCircle(this.from,t,{x:i,y:n,low:a,high:h,direction:-1}),d=this._findBorderPositionCircle(this.from,t,{x:i,y:n,low:a,high:h,direction:1});r=Math.atan2(l.y-n,l.x-i),s=Math.atan2(d.y-n,d.x-i)}t.beginPath(),t.arc(i,n,o,r,s,!1),t.stroke(),this.disableShadow(t,e)}},{key:\"getDistanceToEdge\",value:function(t,e,i,n,o,r){if(this.from!=this.to)return this._getDistanceToEdge(t,e,i,n,o,r);var s=this._getCircleData(void 0),a=uo(s,3),h=a[0],l=a[1],d=a[2],c=h-o,u=l-r;return Math.abs(Math.sqrt(c*c+u*u)-d)}},{key:\"_getDistanceToLine\",value:function(t,e,i,n,o,r){var s=i-t,a=n-e,h=((o-t)*s+(r-e)*a)/(s*s+a*a);h>1?h=1:h<0&&(h=0);var l=t+h*s-o,d=e+h*a-r;return Math.sqrt(l*l+d*d)}},{key:\"getArrowData\",value:function(t,e,i,n,o,r){var s,a,h,l,d,c,u,f=r.width;\"from\"===e?(h=this.from,l=this.to,d=r.fromArrowScale<0,c=Math.abs(r.fromArrowScale),u=r.fromArrowType):\"to\"===e?(h=this.to,l=this.from,d=r.toArrowScale<0,c=Math.abs(r.toArrowScale),u=r.toArrowType):(h=this.to,l=this.from,d=r.middleArrowScale<0,c=Math.abs(r.middleArrowScale),u=r.middleArrowType);var p=15*c+3*f;if(h!=l){var v=p/xf(h.x-l.x,h.y-l.y);if(\"middle\"!==e)if(!0===this.options.smooth.enabled){var g=this._findBorderPosition(h,t,{via:i}),y=this.getPoint(g.t+v*(\"from\"===e?1:-1),i);s=Math.atan2(g.y-y.y,g.x-y.x),a=g}else s=Math.atan2(h.y-l.y,h.x-l.x),a=this._findBorderPosition(h,t);else{var m=(d?-v:v)/2,b=this.getPoint(.5+m,i),w=this.getPoint(.5-m,i);s=Math.atan2(b.y-w.y,b.x-w.x),a=this.getPoint(.5,i)}}else{var k=this._getCircleData(t),_=uo(k,3),x=_[0],E=_[1],O=_[2];if(\"from\"===e){var C=this.options.selfReference.angle,S=this.options.selfReference.angle+Math.PI,T=this._findBorderPositionCircle(this.from,t,{x:x,y:E,low:C,high:S,direction:-1});s=-2*T.t*Math.PI+1.5*Math.PI+.1*Math.PI,a=T}else if(\"to\"===e){var M=this.options.selfReference.angle,P=this.options.selfReference.angle+Math.PI,D=this._findBorderPositionCircle(this.from,t,{x:x,y:E,low:M,high:P,direction:1});s=-2*D.t*Math.PI+1.5*Math.PI-1.1*Math.PI,a=D}else{var I=this.options.selfReference.angle/(2*Math.PI);a=this._pointOnCircle(x,E,O,I),s=-2*I*Math.PI+1.5*Math.PI+.1*Math.PI}}return{point:a,core:{x:a.x-.9*p*Math.cos(s),y:a.y-.9*p*Math.sin(s)},angle:s,length:p,type:u}}},{key:\"drawArrowHead\",value:function(t,e,i,n,o){t.strokeStyle=this.getColor(t,e),t.fillStyle=t.strokeStyle,t.lineWidth=e.width,jf.draw(t,o)&&(this.enableShadow(t,e),hs(t).call(t),this.disableShadow(t,e))}},{key:\"enableShadow\",value:function(t,e){!0===e.shadow&&(t.shadowColor=e.shadowColor,t.shadowBlur=e.shadowSize,t.shadowOffsetX=e.shadowX,t.shadowOffsetY=e.shadowY)}},{key:\"disableShadow\",value:function(t,e){!0===e.shadow&&(t.shadowColor=\"rgba(0,0,0,0)\",t.shadowBlur=0,t.shadowOffsetX=0,t.shadowOffsetY=0)}},{key:\"drawBackground\",value:function(t,e){if(!1!==e.background){var i={strokeStyle:t.strokeStyle,lineWidth:t.lineWidth,dashes:t.dashes};t.strokeStyle=e.backgroundColor,t.lineWidth=e.backgroundSize,this.setStrokeDashed(t,e.backgroundDashes),t.stroke(),t.strokeStyle=i.strokeStyle,t.lineWidth=i.lineWidth,t.dashes=i.dashes,this.setStrokeDashed(t,e.dashes)}}},{key:\"setStrokeDashed\",value:function(t,e){if(!1!==e)if(void 0!==t.setLineDash){var i=So(e)?e:[5,5];t.setLineDash(i)}else console.warn(\"setLineDash is not supported in this browser. The dashed stroke cannot be used.\");else void 0!==t.setLineDash?t.setLineDash([]):console.warn(\"setLineDash is not supported in this browser. The dashed stroke cannot be used.\")}}]),t}();function Wf(t,e){var i=zo(t);if(On){var n=On(t);e&&(n=mr(n).call(n,(function(e){return Mn(t,e).enumerable}))),i.push.apply(i,n)}return i}function qf(t){for(var e=1;e<arguments.length;e++){var i,n=null!=arguments[e]?arguments[e]:{};if(e%2)Wo(i=Wf(Object(n),!0)).call(i,(function(e){jn(t,e,n[e])}));else if(Dn)In(t,Dn(n));else{var o;Wo(o=Wf(Object(n))).call(o,(function(e){zn(t,e,Mn(n,e))}))}}return t}function Vf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Uf=function(t){Ad(i,t);var e=Vf(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"_findBorderPositionBezier\",value:function(t,e){var i,n,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this._getViaCoordinates(),r=10,s=.2,a=!1,h=1,l=0,d=this.to,c=this.options.endPointOffset?this.options.endPointOffset.to:0;t.id===this.from.id&&(d=this.from,a=!0,c=this.options.endPointOffset?this.options.endPointOffset.from:0),!1===this.options.arrowStrikethrough&&(c=0);var u=0;do{n=.5*(l+h),i=this.getPoint(n,o);var f=Math.atan2(d.y-i.y,d.x-i.x),p=d.distanceToBorder(e,f)+c,v=Math.sqrt(Math.pow(i.x-d.x,2)+Math.pow(i.y-d.y,2)),g=p-v;if(Math.abs(g)<s)break;g<0?!1===a?l=n:h=n:!1===a?h=n:l=n,++u}while(l<=h&&u<r);return qf(qf({},i),{},{t:n})}},{key:\"_getDistanceToBezierEdge\",value:function(t,e,i,n,o,r,s){var a,h,l,d,c,u=1e9,f=t,p=e;for(h=1;h<10;h++)l=.1*h,d=Math.pow(1-l,2)*t+2*l*(1-l)*s.x+Math.pow(l,2)*i,c=Math.pow(1-l,2)*e+2*l*(1-l)*s.y+Math.pow(l,2)*n,h>0&&(u=(a=this._getDistanceToLine(f,p,d,c,o,r))<u?a:u),f=d,p=c;return u}},{key:\"_bezierCurve\",value:function(t,e,i,n){t.beginPath(),t.moveTo(this.fromPoint.x,this.fromPoint.y),null!=i&&null!=i.x?null!=n&&null!=n.x?t.bezierCurveTo(i.x,i.y,n.x,n.y,this.toPoint.x,this.toPoint.y):t.quadraticCurveTo(i.x,i.y,this.toPoint.x,this.toPoint.y):t.lineTo(this.toPoint.x,this.toPoint.y),this.drawBackground(t,e),this.enableShadow(t,e),t.stroke(),this.disableShadow(t,e)}},{key:\"getViaNode\",value:function(){return this._getViaCoordinates()}}]),i}(Hf);function Yf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Xf=function(t){Ad(i,t);var e=Yf(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o)).via=r.via,r._boundFunction=function(){r.positionBezierNode()},r._body.emitter.on(\"_repositionBezierNodes\",r._boundFunction),r}return Fn(i,[{key:\"setOptions\",value:function(t){mf(Ld(i.prototype),\"setOptions\",this).call(this,t);var e=!1;this.options.physics!==t.physics&&(e=!0),this.options=t,this.id=this.options.id,this.from=this._body.nodes[this.options.from],this.to=this._body.nodes[this.options.to],this.setupSupportNode(),this.connect(),!0===e&&(this.via.setOptions({physics:this.options.physics}),this.positionBezierNode())}},{key:\"connect\",value:function(){this.from=this._body.nodes[this.options.from],this.to=this._body.nodes[this.options.to],void 0===this.from||void 0===this.to||!1===this.options.physics||this.from.id===this.to.id?this.via.setOptions({physics:!1}):this.via.setOptions({physics:!0})}},{key:\"cleanup\",value:function(){return this._body.emitter.off(\"_repositionBezierNodes\",this._boundFunction),void 0!==this.via&&(delete this._body.nodes[this.via.id],this.via=void 0,!0)}},{key:\"setupSupportNode\",value:function(){if(void 0===this.via){var t=\"edgeId:\"+this.id,e=this._body.functions.createNode({id:t,shape:\"circle\",physics:!0,hidden:!0});this._body.nodes[t]=e,this.via=e,this.via.parentEdgeId=this.id,this.positionBezierNode()}}},{key:\"positionBezierNode\",value:function(){void 0!==this.via&&void 0!==this.from&&void 0!==this.to?(this.via.x=.5*(this.from.x+this.to.x),this.via.y=.5*(this.from.y+this.to.y)):void 0!==this.via&&(this.via.x=0,this.via.y=0)}},{key:\"_line\",value:function(t,e,i){this._bezierCurve(t,e,i)}},{key:\"_getViaCoordinates\",value:function(){return this.via}},{key:\"getViaNode\",value:function(){return this.via}},{key:\"getPoint\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.via;if(this.from===this.to){var i=this._getCircleData(),n=uo(i,3),o=n[0],r=n[1],s=n[2],a=2*Math.PI*(1-t);return{x:o+s*Math.sin(a),y:r+s-s*(1-Math.cos(a))}}return{x:Math.pow(1-t,2)*this.fromPoint.x+2*t*(1-t)*e.x+Math.pow(t,2)*this.toPoint.x,y:Math.pow(1-t,2)*this.fromPoint.y+2*t*(1-t)*e.y+Math.pow(t,2)*this.toPoint.y}}},{key:\"_findBorderPosition\",value:function(t,e){return this._findBorderPositionBezier(t,e,this.via)}},{key:\"_getDistanceToEdge\",value:function(t,e,i,n,o,r){return this._getDistanceToBezierEdge(t,e,i,n,o,r,this.via)}}]),i}(Uf);function Gf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Kf=function(t){Ad(i,t);var e=Gf(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"_line\",value:function(t,e,i){this._bezierCurve(t,e,i)}},{key:\"getViaNode\",value:function(){return this._getViaCoordinates()}},{key:\"_getViaCoordinates\",value:function(){var t,e,i=this.options.smooth.roundness,n=this.options.smooth.type,o=Math.abs(this.from.x-this.to.x),r=Math.abs(this.from.y-this.to.y);if(\"discrete\"===n||\"diagonalCross\"===n){var s,a;s=a=o<=r?i*r:i*o,this.from.x>this.to.x&&(s=-s),this.from.y>=this.to.y&&(a=-a);var h=this.from.x+s,l=this.from.y+a;return\"discrete\"===n&&(o<=r?h=o<i*r?this.from.x:h:l=r<i*o?this.from.y:l),{x:h,y:l}}if(\"straightCross\"===n){var d=(1-i)*o,c=(1-i)*r;return o<=r?(d=0,this.from.y<this.to.y&&(c=-c)):(this.from.x<this.to.x&&(d=-d),c=0),{x:this.to.x+d,y:this.to.y+c}}if(\"horizontal\"===n){var u=(1-i)*o;return this.from.x<this.to.x&&(u=-u),{x:this.to.x+u,y:this.from.y}}if(\"vertical\"===n){var f=(1-i)*r;return this.from.y<this.to.y&&(f=-f),{x:this.from.x,y:this.to.y+f}}if(\"curvedCW\"===n){o=this.to.x-this.from.x,r=this.from.y-this.to.y;var p=Math.sqrt(o*o+r*r),v=Math.PI,g=(Math.atan2(r,o)+(.5*i+.5)*v)%(2*v);return{x:this.from.x+(.5*i+.5)*p*Math.sin(g),y:this.from.y+(.5*i+.5)*p*Math.cos(g)}}if(\"curvedCCW\"===n){o=this.to.x-this.from.x,r=this.from.y-this.to.y;var y=Math.sqrt(o*o+r*r),m=Math.PI,b=(Math.atan2(r,o)+(.5*-i+.5)*m)%(2*m);return{x:this.from.x+(.5*i+.5)*y*Math.sin(b),y:this.from.y+(.5*i+.5)*y*Math.cos(b)}}t=e=o<=r?i*r:i*o,this.from.x>this.to.x&&(t=-t),this.from.y>=this.to.y&&(e=-e);var w=this.from.x+t,k=this.from.y+e;return o<=r?w=this.from.x<=this.to.x?this.to.x<w?this.to.x:w:this.to.x>w?this.to.x:w:k=this.from.y>=this.to.y?this.to.y>k?this.to.y:k:this.to.y<k?this.to.y:k,{x:w,y:k}}},{key:\"_findBorderPosition\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this._findBorderPositionBezier(t,e,i.via)}},{key:\"_getDistanceToEdge\",value:function(t,e,i,n,o,r){var s=arguments.length>6&&void 0!==arguments[6]?arguments[6]:this._getViaCoordinates();return this._getDistanceToBezierEdge(t,e,i,n,o,r,s)}},{key:\"getPoint\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this._getViaCoordinates(),i=t,n=Math.pow(1-i,2)*this.fromPoint.x+2*i*(1-i)*e.x+Math.pow(i,2)*this.toPoint.x,o=Math.pow(1-i,2)*this.fromPoint.y+2*i*(1-i)*e.y+Math.pow(i,2)*this.toPoint.y;return{x:n,y:o}}}]),i}(Uf);function $f(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}function Zf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Qf=function(t){Ad(i,t);var e=Zf(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"_line\",value:function(t,e,i){var n=i[0],o=i[1];this._bezierCurve(t,e,n,o)}},{key:\"_getViaCoordinates\",value:function(){var t,e,i,n,o=this.from.x-this.to.x,r=this.from.y-this.to.y,s=this.options.smooth.roundness;return(Math.abs(o)>Math.abs(r)||!0===this.options.smooth.forceDirection||\"horizontal\"===this.options.smooth.forceDirection)&&\"vertical\"!==this.options.smooth.forceDirection?(e=this.from.y,n=this.to.y,t=this.from.x-s*o,i=this.to.x+s*o):(e=this.from.y-s*r,n=this.to.y+s*r,t=this.from.x,i=this.to.x),[{x:t,y:e},{x:i,y:n}]}},{key:\"getViaNode\",value:function(){return this._getViaCoordinates()}},{key:\"_findBorderPosition\",value:function(t,e){return this._findBorderPositionBezier(t,e)}},{key:\"_getDistanceToEdge\",value:function(t,e,i,n,o,r){var s=arguments.length>6&&void 0!==arguments[6]?arguments[6]:this._getViaCoordinates(),a=uo(s,2),h=a[0],l=a[1];return this._getDistanceToBezierEdge2(t,e,i,n,o,r,h,l)}},{key:\"getPoint\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this._getViaCoordinates(),i=uo(e,2),n=i[0],o=i[1],r=t,s=[Math.pow(1-r,3),3*r*Math.pow(1-r,2),3*Math.pow(r,2)*(1-r),Math.pow(r,3)],a=s[0]*this.fromPoint.x+s[1]*n.x+s[2]*o.x+s[3]*this.toPoint.x,h=s[0]*this.fromPoint.y+s[1]*n.y+s[2]*o.y+s[3]*this.toPoint.y;return{x:a,y:h}}}]),i}(function(t){Ad(i,t);var e=$f(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"_getDistanceToBezierEdge2\",value:function(t,e,i,n,o,r,s,a){for(var h=1e9,l=t,d=e,c=[0,0,0,0],u=1;u<10;u++){var f=.1*u;c[0]=Math.pow(1-f,3),c[1]=3*f*Math.pow(1-f,2),c[2]=3*Math.pow(f,2)*(1-f),c[3]=Math.pow(f,3);var p=c[0]*t+c[1]*s.x+c[2]*a.x+c[3]*i,v=c[0]*e+c[1]*s.y+c[2]*a.y+c[3]*n;if(u>0){var g=this._getDistanceToLine(l,d,p,v,o,r);h=g<h?g:h}l=p,d=v}return h}}]),i}(Uf));function Jf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var tp=function(t){Ad(i,t);var e=Jf(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"_line\",value:function(t,e){t.beginPath(),t.moveTo(this.fromPoint.x,this.fromPoint.y),t.lineTo(this.toPoint.x,this.toPoint.y),this.enableShadow(t,e),t.stroke(),this.disableShadow(t,e)}},{key:\"getViaNode\",value:function(){}},{key:\"getPoint\",value:function(t){return{x:(1-t)*this.fromPoint.x+t*this.toPoint.x,y:(1-t)*this.fromPoint.y+t*this.toPoint.y}}},{key:\"_findBorderPosition\",value:function(t,e){var i=this.to,n=this.from;t.id===this.from.id&&(i=this.from,n=this.to);var o=Math.atan2(i.y-n.y,i.x-n.x),r=i.x-n.x,s=i.y-n.y,a=Math.sqrt(r*r+s*s),h=(a-t.distanceToBorder(e,o))/a;return{x:(1-h)*n.x+h*i.x,y:(1-h)*n.y+h*i.y,t:0}}},{key:\"_getDistanceToEdge\",value:function(t,e,i,n,o,r){return this._getDistanceToLine(t,e,i,n,o,r)}}]),i}(Hf),ep=function(){function t(e,i,n,o,r){if(Nn(this,t),void 0===i)throw new Error(\"No body provided\");this.options=Kh(o),this.globalOptions=o,this.defaultOptions=r,this.body=i,this.imagelist=n,this.id=void 0,this.fromId=void 0,this.toId=void 0,this.selected=!1,this.hover=!1,this.labelDirty=!0,this.baseWidth=this.options.width,this.baseFontSize=this.options.font.size,this.from=void 0,this.to=void 0,this.edgeType=void 0,this.connected=!1,this.labelModule=new _u(this.body,this.options,!0),this.setOptions(e)}return Fn(t,[{key:\"setOptions\",value:function(e){if(e){var i=void 0!==e.physics&&this.options.physics!==e.physics||void 0!==e.hidden&&(this.options.hidden||!1)!==(e.hidden||!1)||void 0!==e.from&&this.options.from!==e.from||void 0!==e.to&&this.options.to!==e.to;t.parseOptions(this.options,e,!0,this.globalOptions),void 0!==e.id&&(this.id=e.id),void 0!==e.from&&(this.fromId=e.from),void 0!==e.to&&(this.toId=e.to),void 0!==e.title&&(this.title=e.title),void 0!==e.value&&(e.value=hu(e.value));var n=[e,this.options,this.defaultOptions];return this.chooser=fu(\"edge\",n),this.updateLabelModule(e),i=this.updateEdgeType()||i,this._setInteractionWidths(),this.connect(),i}}},{key:\"getFormattingValues\",value:function(){var t=!0===this.options.arrows.to||!0===this.options.arrows.to.enabled,e=!0===this.options.arrows.from||!0===this.options.arrows.from.enabled,i=!0===this.options.arrows.middle||!0===this.options.arrows.middle.enabled,n=this.options.color.inherit,o={toArrow:t,toArrowScale:this.options.arrows.to.scaleFactor,toArrowType:this.options.arrows.to.type,toArrowSrc:this.options.arrows.to.src,toArrowImageWidth:this.options.arrows.to.imageWidth,toArrowImageHeight:this.options.arrows.to.imageHeight,middleArrow:i,middleArrowScale:this.options.arrows.middle.scaleFactor,middleArrowType:this.options.arrows.middle.type,middleArrowSrc:this.options.arrows.middle.src,middleArrowImageWidth:this.options.arrows.middle.imageWidth,middleArrowImageHeight:this.options.arrows.middle.imageHeight,fromArrow:e,fromArrowScale:this.options.arrows.from.scaleFactor,fromArrowType:this.options.arrows.from.type,fromArrowSrc:this.options.arrows.from.src,fromArrowImageWidth:this.options.arrows.from.imageWidth,fromArrowImageHeight:this.options.arrows.from.imageHeight,arrowStrikethrough:this.options.arrowStrikethrough,color:n?void 0:this.options.color.color,inheritsColor:n,opacity:this.options.color.opacity,hidden:this.options.hidden,length:this.options.length,shadow:this.options.shadow.enabled,shadowColor:this.options.shadow.color,shadowSize:this.options.shadow.size,shadowX:this.options.shadow.x,shadowY:this.options.shadow.y,dashes:this.options.dashes,width:this.options.width,background:this.options.background.enabled,backgroundColor:this.options.background.color,backgroundSize:this.options.background.size,backgroundDashes:this.options.background.dashes};if(this.selected||this.hover)if(!0===this.chooser){if(this.selected){var r=this.options.selectionWidth;\"function\"==typeof r?o.width=r(o.width):\"number\"==typeof r&&(o.width+=r),o.width=Math.max(o.width,.3/this.body.view.scale),o.color=this.options.color.highlight,o.shadow=this.options.shadow.enabled}else if(this.hover){var s=this.options.hoverWidth;\"function\"==typeof s?o.width=s(o.width):\"number\"==typeof s&&(o.width+=s),o.width=Math.max(o.width,.3/this.body.view.scale),o.color=this.options.color.hover,o.shadow=this.options.shadow.enabled}}else\"function\"==typeof this.chooser&&(this.chooser(o,this.options.id,this.selected,this.hover),void 0!==o.color&&(o.inheritsColor=!1),!1===o.shadow&&(o.shadowColor===this.options.shadow.color&&o.shadowSize===this.options.shadow.size&&o.shadowX===this.options.shadow.x&&o.shadowY===this.options.shadow.y||(o.shadow=!0)));else o.shadow=this.options.shadow.enabled,o.width=Math.max(o.width,.3/this.body.view.scale);return o}},{key:\"updateLabelModule\",value:function(t){var e=[t,this.options,this.globalOptions,this.defaultOptions];this.labelModule.update(this.options,e),void 0!==this.labelModule.baseSize&&(this.baseFontSize=this.labelModule.baseSize)}},{key:\"updateEdgeType\",value:function(){var t=this.options.smooth,e=!1,i=!0;return void 0!==this.edgeType&&((this.edgeType instanceof Xf&&!0===t.enabled&&\"dynamic\"===t.type||this.edgeType instanceof Qf&&!0===t.enabled&&\"cubicBezier\"===t.type||this.edgeType instanceof Kf&&!0===t.enabled&&\"dynamic\"!==t.type&&\"cubicBezier\"!==t.type||this.edgeType instanceof tp&&!1===t.type.enabled)&&(i=!1),!0===i&&(e=this.cleanup())),!0===i?!0===t.enabled?\"dynamic\"===t.type?(e=!0,this.edgeType=new Xf(this.options,this.body,this.labelModule)):\"cubicBezier\"===t.type?this.edgeType=new Qf(this.options,this.body,this.labelModule):this.edgeType=new Kf(this.options,this.body,this.labelModule):this.edgeType=new tp(this.options,this.body,this.labelModule):this.edgeType.setOptions(this.options),e}},{key:\"connect\",value:function(){this.disconnect(),this.from=this.body.nodes[this.fromId]||void 0,this.to=this.body.nodes[this.toId]||void 0,this.connected=void 0!==this.from&&void 0!==this.to,!0===this.connected?(this.from.attachEdge(this),this.to.attachEdge(this)):(this.from&&this.from.detachEdge(this),this.to&&this.to.detachEdge(this)),this.edgeType.connect()}},{key:\"disconnect\",value:function(){this.from&&(this.from.detachEdge(this),this.from=void 0),this.to&&(this.to.detachEdge(this),this.to=void 0),this.connected=!1}},{key:\"getTitle\",value:function(){return this.title}},{key:\"isSelected\",value:function(){return this.selected}},{key:\"getValue\",value:function(){return this.options.value}},{key:\"setValueRange\",value:function(t,e,i){if(void 0!==this.options.value){var n=this.options.scaling.customScalingFunction(t,e,i,this.options.value),o=this.options.scaling.max-this.options.scaling.min;if(!0===this.options.scaling.label.enabled){var r=this.options.scaling.label.max-this.options.scaling.label.min;this.options.font.size=this.options.scaling.label.min+n*r}this.options.width=this.options.scaling.min+n*o}else this.options.width=this.baseWidth,this.options.font.size=this.baseFontSize;this._setInteractionWidths(),this.updateLabelModule()}},{key:\"_setInteractionWidths\",value:function(){\"function\"==typeof this.options.hoverWidth?this.edgeType.hoverWidth=this.options.hoverWidth(this.options.width):this.edgeType.hoverWidth=this.options.hoverWidth+this.options.width,\"function\"==typeof this.options.selectionWidth?this.edgeType.selectionWidth=this.options.selectionWidth(this.options.width):this.edgeType.selectionWidth=this.options.selectionWidth+this.options.width}},{key:\"draw\",value:function(t){var e=this.getFormattingValues();if(!e.hidden){var i=this.edgeType.getViaNode();this.edgeType.drawLine(t,e,this.selected,this.hover,i),this.drawLabel(t,i)}}},{key:\"drawArrows\",value:function(t){var e=this.getFormattingValues();if(!e.hidden){var i=this.edgeType.getViaNode(),n={};this.edgeType.fromPoint=this.edgeType.from,this.edgeType.toPoint=this.edgeType.to,e.fromArrow&&(n.from=this.edgeType.getArrowData(t,\"from\",i,this.selected,this.hover,e),!1===e.arrowStrikethrough&&(this.edgeType.fromPoint=n.from.core),e.fromArrowSrc&&(n.from.image=this.imagelist.load(e.fromArrowSrc)),e.fromArrowImageWidth&&(n.from.imageWidth=e.fromArrowImageWidth),e.fromArrowImageHeight&&(n.from.imageHeight=e.fromArrowImageHeight)),e.toArrow&&(n.to=this.edgeType.getArrowData(t,\"to\",i,this.selected,this.hover,e),!1===e.arrowStrikethrough&&(this.edgeType.toPoint=n.to.core),e.toArrowSrc&&(n.to.image=this.imagelist.load(e.toArrowSrc)),e.toArrowImageWidth&&(n.to.imageWidth=e.toArrowImageWidth),e.toArrowImageHeight&&(n.to.imageHeight=e.toArrowImageHeight)),e.middleArrow&&(n.middle=this.edgeType.getArrowData(t,\"middle\",i,this.selected,this.hover,e),e.middleArrowSrc&&(n.middle.image=this.imagelist.load(e.middleArrowSrc)),e.middleArrowImageWidth&&(n.middle.imageWidth=e.middleArrowImageWidth),e.middleArrowImageHeight&&(n.middle.imageHeight=e.middleArrowImageHeight)),e.fromArrow&&this.edgeType.drawArrowHead(t,e,this.selected,this.hover,n.from),e.middleArrow&&this.edgeType.drawArrowHead(t,e,this.selected,this.hover,n.middle),e.toArrow&&this.edgeType.drawArrowHead(t,e,this.selected,this.hover,n.to)}}},{key:\"drawLabel\",value:function(t,e){if(void 0!==this.options.label){var i,n=this.from,o=this.to;if(this.labelModule.differentState(this.selected,this.hover)&&this.labelModule.getTextSize(t,this.selected,this.hover),n.id!=o.id){this.labelModule.pointToSelf=!1,i=this.edgeType.getPoint(.5,e),t.save();var r=this._getRotation(t);0!=r.angle&&(t.translate(r.x,r.y),t.rotate(r.angle)),this.labelModule.draw(t,i.x,i.y,this.selected,this.hover),t.restore()}else{this.labelModule.pointToSelf=!0;var s=gu(t,this.options.selfReference.angle,this.options.selfReference.size,n);i=this._pointOnCircle(s.x,s.y,this.options.selfReference.size,this.options.selfReference.angle),this.labelModule.draw(t,i.x,i.y,this.selected,this.hover)}}}},{key:\"getItemsOnPoint\",value:function(t){var e=[];if(this.labelModule.visible()){var i=this._getRotation();pu(this.labelModule.getSize(),t,i)&&e.push({edgeId:this.id,labelId:0})}var n={left:t.x,top:t.y};return this.isOverlappingWith(n)&&e.push({edgeId:this.id}),e}},{key:\"isOverlappingWith\",value:function(t){if(this.connected){var e=this.from.x,i=this.from.y,n=this.to.x,o=this.to.y,r=t.left,s=t.top;return this.edgeType.getDistanceToEdge(e,i,n,o,r,s)<10}return!1}},{key:\"_getRotation\",value:function(t){var e=this.edgeType.getViaNode(),i=this.edgeType.getPoint(.5,e);void 0!==t&&this.labelModule.calculateLabelSize(t,this.selected,this.hover,i.x,i.y);var n={x:i.x,y:this.labelModule.size.yLine,angle:0};if(!this.labelModule.visible())return n;if(\"horizontal\"===this.options.font.align)return n;var o=this.from.y-this.to.y,r=this.from.x-this.to.x,s=Math.atan2(o,r);return(s<-1&&r<0||s>0&&r<0)&&(s+=Math.PI),n.angle=s,n}},{key:\"_pointOnCircle\",value:function(t,e,i,n){return{x:t+i*Math.cos(n),y:e-i*Math.sin(n)}}},{key:\"select\",value:function(){this.selected=!0}},{key:\"unselect\",value:function(){this.selected=!1}},{key:\"cleanup\",value:function(){return this.edgeType.cleanup()}},{key:\"remove\",value:function(){this.cleanup(),this.disconnect(),delete this.body.edges[this.id]}},{key:\"endPointsValid\",value:function(){return void 0!==this.body.nodes[this.fromId]&&void 0!==this.body.nodes[this.toId]}}],[{key:\"parseOptions\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},o=arguments.length>4&&void 0!==arguments[4]&&arguments[4],r=[\"endPointOffset\",\"arrowStrikethrough\",\"id\",\"from\",\"hidden\",\"hoverWidth\",\"labelHighlightBold\",\"length\",\"line\",\"opacity\",\"physics\",\"scaling\",\"selectionWidth\",\"selfReferenceSize\",\"selfReference\",\"to\",\"title\",\"value\",\"width\",\"font\",\"chosen\",\"widthConstraint\"];if(Eh(r,t,e,i),void 0!==e.endPointOffset&&void 0!==e.endPointOffset.from&&(wd(e.endPointOffset.from)?t.endPointOffset.from=e.endPointOffset.from:(t.endPointOffset.from=void 0!==n.endPointOffset.from?n.endPointOffset.from:0,console.error(\"endPointOffset.from is not a valid number\"))),void 0!==e.endPointOffset&&void 0!==e.endPointOffset.to&&(wd(e.endPointOffset.to)?t.endPointOffset.to=e.endPointOffset.to:(t.endPointOffset.to=void 0!==n.endPointOffset.to?n.endPointOffset.to:0,console.error(\"endPointOffset.to is not a valid number\"))),vu(e.label)?t.label=e.label:vu(t.label)||(t.label=void 0),$h(t,e,\"smooth\",n),$h(t,e,\"shadow\",n),$h(t,e,\"background\",n),void 0!==e.dashes&&null!==e.dashes?t.dashes=e.dashes:!0===i&&null===e.dashes&&(t.dashes=Gr(n.dashes)),void 0!==e.scaling&&null!==e.scaling?(void 0!==e.scaling.min&&(t.scaling.min=e.scaling.min),void 0!==e.scaling.max&&(t.scaling.max=e.scaling.max),$h(t.scaling,e.scaling,\"label\",n.scaling)):!0===i&&null===e.scaling&&(t.scaling=Gr(n.scaling)),void 0!==e.arrows&&null!==e.arrows)if(\"string\"==typeof e.arrows){var s=e.arrows.toLowerCase();t.arrows.to.enabled=-1!=Hr(s).call(s,\"to\"),t.arrows.middle.enabled=-1!=Hr(s).call(s,\"middle\"),t.arrows.from.enabled=-1!=Hr(s).call(s,\"from\")}else{if(\"object\"!==go(e.arrows))throw new Error(\"The arrow newOptions can only be an object or a string. Refer to the documentation. You used:\"+es(e.arrows));$h(t.arrows,e.arrows,\"to\",n.arrows),$h(t.arrows,e.arrows,\"middle\",n.arrows),$h(t.arrows,e.arrows,\"from\",n.arrows)}else!0===i&&null===e.arrows&&(t.arrows=Gr(n.arrows));if(void 0!==e.color&&null!==e.color){var a=bh(e.color)?{color:e.color,highlight:e.color,hover:e.color,inherit:!1,opacity:1}:e.color,h=t.color;if(o)Ch(h,n.color,!1,i);else for(var l in h)Object.prototype.hasOwnProperty.call(h,l)&&delete h[l];if(bh(h))h.color=h,h.highlight=h,h.hover=h,h.inherit=!1,void 0===a.opacity&&(h.opacity=1);else{var d=!1;void 0!==a.color&&(h.color=a.color,d=!0),void 0!==a.highlight&&(h.highlight=a.highlight,d=!0),void 0!==a.hover&&(h.hover=a.hover,d=!0),void 0!==a.inherit&&(h.inherit=a.inherit),void 0!==a.opacity&&(h.opacity=Math.min(1,Math.max(0,a.opacity))),!0===d?h.inherit=!1:void 0===h.inherit&&(h.inherit=\"from\")}}else!0===i&&null===e.color&&(t.color=Kh(n.color));!0===i&&null===e.font&&(t.font=Kh(n.font)),Object.prototype.hasOwnProperty.call(e,\"selfReferenceSize\")&&(console.warn(\"The selfReferenceSize property has been deprecated. Please use selfReference property instead. The selfReference can be set like thise selfReference:{size:30, angle:Math.PI / 4}\"),t.selfReference.size=e.selfReferenceSize)}}]),t}(),ip=function(){function t(e,i,n){var o,r=this;Nn(this,t),this.body=e,this.images=i,this.groups=n,this.body.functions.createEdge=Vt(o=this.create).call(o,this),this.edgesListeners={add:function(t,e){r.add(e.items)},update:function(t,e){r.update(e.items)},remove:function(t,e){r.remove(e.items)}},this.options={},this.defaultOptions={arrows:{to:{enabled:!1,scaleFactor:1,type:\"arrow\"},middle:{enabled:!1,scaleFactor:1,type:\"arrow\"},from:{enabled:!1,scaleFactor:1,type:\"arrow\"}},endPointOffset:{from:0,to:0},arrowStrikethrough:!0,color:{color:\"#848484\",highlight:\"#848484\",hover:\"#848484\",inherit:\"from\",opacity:1},dashes:!1,font:{color:\"#343434\",size:14,face:\"arial\",background:\"none\",strokeWidth:2,strokeColor:\"#ffffff\",align:\"horizontal\",multi:!1,vadjust:0,bold:{mod:\"bold\"},boldital:{mod:\"bold italic\"},ital:{mod:\"italic\"},mono:{mod:\"\",size:15,face:\"courier new\",vadjust:2}},hidden:!1,hoverWidth:1.5,label:void 0,labelHighlightBold:!0,length:void 0,physics:!0,scaling:{min:1,max:15,label:{enabled:!0,min:14,max:30,maxVisible:30,drawThreshold:5},customScalingFunction:function(t,e,i,n){if(e===t)return.5;var o=1/(e-t);return Math.max(0,(n-t)*o)}},selectionWidth:1.5,selfReference:{size:20,angle:Math.PI/4,renderBehindTheNode:!0},shadow:{enabled:!1,color:\"rgba(0,0,0,0.5)\",size:10,x:5,y:5},background:{enabled:!1,color:\"rgba(111,111,111,1)\",size:10,dashes:!1},smooth:{enabled:!0,type:\"dynamic\",forceDirection:\"none\",roundness:.5},title:void 0,width:1,value:void 0},Ch(this.options,this.defaultOptions),this.bindEventListeners()}return Fn(t,[{key:\"bindEventListeners\",value:function(){var t,e,i=this;this.body.emitter.on(\"_forceDisableDynamicCurves\",(function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];\"dynamic\"===t&&(t=\"continuous\");var n=!1;for(var o in i.body.edges)if(Object.prototype.hasOwnProperty.call(i.body.edges,o)){var r=i.body.edges[o],s=i.body.data.edges.get(o);if(null!=s){var a=s.smooth;void 0!==a&&!0===a.enabled&&\"dynamic\"===a.type&&(void 0===t?r.setOptions({smooth:!1}):r.setOptions({smooth:{type:t}}),n=!0)}}!0===e&&!0===n&&i.body.emitter.emit(\"_dataChanged\")})),this.body.emitter.on(\"_dataUpdated\",(function(){i.reconnectEdges()})),this.body.emitter.on(\"refreshEdges\",Vt(t=this.refresh).call(t,this)),this.body.emitter.on(\"refresh\",Vt(e=this.refresh).call(e,this)),this.body.emitter.on(\"destroy\",(function(){Dh(i.edgesListeners,(function(t,e){i.body.data.edges&&i.body.data.edges.off(e,t)})),delete i.body.functions.createEdge,delete i.edgesListeners.add,delete i.edgesListeners.update,delete i.edgesListeners.remove,delete i.edgesListeners}))}},{key:\"setOptions\",value:function(t){if(void 0!==t){ep.parseOptions(this.options,t,!0,this.defaultOptions,!0);var e=!1;if(void 0!==t.smooth)for(var i in this.body.edges)Object.prototype.hasOwnProperty.call(this.body.edges,i)&&(e=this.body.edges[i].updateEdgeType()||e);if(void 0!==t.font)for(var n in this.body.edges)Object.prototype.hasOwnProperty.call(this.body.edges,n)&&this.body.edges[n].updateLabelModule();void 0===t.hidden&&void 0===t.physics&&!0!==e||this.body.emitter.emit(\"_dataChanged\")}}},{key:\"setData\",value:function(t){var e=this,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=this.body.data.edges;if(nu(\"id\",t))this.body.data.edges=t;else if(So(t))this.body.data.edges=new tu,this.body.data.edges.add(t);else{if(t)throw new TypeError(\"Array or DataSet expected\");this.body.data.edges=new tu}if(n&&Dh(this.edgesListeners,(function(t,e){n.off(e,t)})),this.body.edges={},this.body.data.edges){Dh(this.edgesListeners,(function(t,i){e.body.data.edges.on(i,t)}));var o=this.body.data.edges.getIds();this.add(o,!0)}this.body.emitter.emit(\"_adjustEdgesForHierarchicalLayout\"),!1===i&&this.body.emitter.emit(\"_dataChanged\")}},{key:\"add\",value:function(t){for(var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=this.body.edges,n=this.body.data.edges,o=0;o<t.length;o++){var r=t[o],s=i[r];s&&s.disconnect();var a=n.get(r,{showInternalIds:!0});i[r]=this.create(a)}this.body.emitter.emit(\"_adjustEdgesForHierarchicalLayout\"),!1===e&&this.body.emitter.emit(\"_dataChanged\")}},{key:\"update\",value:function(t){for(var e=this.body.edges,i=this.body.data.edges,n=!1,o=0;o<t.length;o++){var r=t[o],s=i.get(r),a=e[r];void 0!==a?(a.disconnect(),n=a.setOptions(s)||n,a.connect()):(this.body.edges[r]=this.create(s),n=!0)}!0===n?(this.body.emitter.emit(\"_adjustEdgesForHierarchicalLayout\"),this.body.emitter.emit(\"_dataChanged\")):this.body.emitter.emit(\"_dataUpdated\")}},{key:\"remove\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(0!==t.length){var i=this.body.edges;Dh(t,(function(t){var e=i[t];void 0!==e&&e.remove()})),e&&this.body.emitter.emit(\"_dataChanged\")}}},{key:\"refresh\",value:function(){var t=this;Dh(this.body.edges,(function(e,i){var n=t.body.data.edges.get(i);void 0!==n&&e.setOptions(n)}))}},{key:\"create\",value:function(t){return new ep(t,this.body,this.images,this.options,this.defaultOptions)}},{key:\"reconnectEdges\",value:function(){var t,e=this.body.nodes,i=this.body.edges;for(t in e)Object.prototype.hasOwnProperty.call(e,t)&&(e[t].edges=[]);for(t in i)if(Object.prototype.hasOwnProperty.call(i,t)){var n=i[t];n.from=null,n.to=null,n.connect()}}},{key:\"getConnectedNodes\",value:function(t){var e=[];if(void 0!==this.body.edges[t]){var i=this.body.edges[t];void 0!==i.fromId&&e.push(i.fromId),void 0!==i.toId&&e.push(i.toId)}return e}},{key:\"_updateState\",value:function(){this._addMissingEdges(),this._removeInvalidEdges()}},{key:\"_removeInvalidEdges\",value:function(){var t=this,e=[];Dh(this.body.edges,(function(i,n){var o=t.body.nodes[i.toId],r=t.body.nodes[i.fromId];void 0!==o&&!0===o.isCluster||void 0!==r&&!0===r.isCluster||void 0!==o&&void 0!==r||e.push(n)})),this.remove(e,!1)}},{key:\"_addMissingEdges\",value:function(){var t=this.body.data.edges;if(null!=t){var e=this.body.edges,i=[];Wo(t).call(t,(function(t,n){void 0===e[n]&&i.push(n)})),this.add(i,!0)}}}]),t}(),np=function(){function t(e,i,n){Nn(this,t),this.body=e,this.physicsBody=i,this.barnesHutTree,this.setOptions(n),this._rng=ah(\"BARNES HUT SOLVER\")}return Fn(t,[{key:\"setOptions\",value:function(t){this.options=t,this.thetaInversed=1/this.options.theta,this.overlapAvoidanceFactor=1-Math.max(0,Math.min(1,this.options.avoidOverlap))}},{key:\"solve\",value:function(){if(0!==this.options.gravitationalConstant&&this.physicsBody.physicsNodeIndices.length>0){var t,e=this.body.nodes,i=this.physicsBody.physicsNodeIndices,n=i.length,o=this._formBarnesHutTree(e,i);this.barnesHutTree=o;for(var r=0;r<n;r++)(t=e[i[r]]).options.mass>0&&this._getForceContributions(o.root,t)}}},{key:\"_getForceContributions\",value:function(t,e){this._getForceContribution(t.children.NW,e),this._getForceContribution(t.children.NE,e),this._getForceContribution(t.children.SW,e),this._getForceContribution(t.children.SE,e)}},{key:\"_getForceContribution\",value:function(t,e){if(t.childrenCount>0){var i=t.centerOfMass.x-e.x,n=t.centerOfMass.y-e.y,o=Math.sqrt(i*i+n*n);o*t.calcSize>this.thetaInversed?this._calculateForces(o,i,n,e,t):4===t.childrenCount?this._getForceContributions(t,e):t.children.data.id!=e.id&&this._calculateForces(o,i,n,e,t)}}},{key:\"_calculateForces\",value:function(t,e,i,n,o){0===t&&(e=t=.1),this.overlapAvoidanceFactor<1&&n.shape.radius&&(t=Math.max(.1+this.overlapAvoidanceFactor*n.shape.radius,t-n.shape.radius));var r=this.options.gravitationalConstant*o.mass*n.options.mass/Math.pow(t,3),s=e*r,a=i*r;this.physicsBody.forces[n.id].x+=s,this.physicsBody.forces[n.id].y+=a}},{key:\"_formBarnesHutTree\",value:function(t,e){for(var i,n=e.length,o=t[e[0]].x,r=t[e[0]].y,s=t[e[0]].x,a=t[e[0]].y,h=1;h<n;h++){var l=t[e[h]],d=l.x,c=l.y;l.options.mass>0&&(d<o&&(o=d),d>s&&(s=d),c<r&&(r=c),c>a&&(a=c))}var u=Math.abs(s-o)-Math.abs(a-r);u>0?(r-=.5*u,a+=.5*u):(o+=.5*u,s-=.5*u);var f=Math.max(1e-5,Math.abs(s-o)),p=.5*f,v=.5*(o+s),g=.5*(r+a),y={root:{centerOfMass:{x:0,y:0},mass:0,range:{minX:v-p,maxX:v+p,minY:g-p,maxY:g+p},size:f,calcSize:1/f,children:{data:null},maxWidth:0,level:0,childrenCount:4}};this._splitBranch(y.root);for(var m=0;m<n;m++)(i=t[e[m]]).options.mass>0&&this._placeInTree(y.root,i);return y}},{key:\"_updateBranchMass\",value:function(t,e){var i=t.centerOfMass,n=t.mass+e.options.mass,o=1/n;i.x=i.x*t.mass+e.x*e.options.mass,i.x*=o,i.y=i.y*t.mass+e.y*e.options.mass,i.y*=o,t.mass=n;var r=Math.max(Math.max(e.height,e.radius),e.width);t.maxWidth=t.maxWidth<r?r:t.maxWidth}},{key:\"_placeInTree\",value:function(t,e,i){1==i&&void 0!==i||this._updateBranchMass(t,e);var n,o=t.children.NW.range;n=o.maxX>e.x?o.maxY>e.y?\"NW\":\"SW\":o.maxY>e.y?\"NE\":\"SE\",this._placeInRegion(t,e,n)}},{key:\"_placeInRegion\",value:function(t,e,i){var n=t.children[i];switch(n.childrenCount){case 0:n.children.data=e,n.childrenCount=1,this._updateBranchMass(n,e);break;case 1:n.children.data.x===e.x&&n.children.data.y===e.y?(e.x+=this._rng(),e.y+=this._rng()):(this._splitBranch(n),this._placeInTree(n,e));break;case 4:this._placeInTree(n,e)}}},{key:\"_splitBranch\",value:function(t){var e=null;1===t.childrenCount&&(e=t.children.data,t.mass=0,t.centerOfMass.x=0,t.centerOfMass.y=0),t.childrenCount=4,t.children.data=null,this._insertRegion(t,\"NW\"),this._insertRegion(t,\"NE\"),this._insertRegion(t,\"SW\"),this._insertRegion(t,\"SE\"),null!=e&&this._placeInTree(t,e)}},{key:\"_insertRegion\",value:function(t,e){var i,n,o,r,s=.5*t.size;switch(e){case\"NW\":i=t.range.minX,n=t.range.minX+s,o=t.range.minY,r=t.range.minY+s;break;case\"NE\":i=t.range.minX+s,n=t.range.maxX,o=t.range.minY,r=t.range.minY+s;break;case\"SW\":i=t.range.minX,n=t.range.minX+s,o=t.range.minY+s,r=t.range.maxY;break;case\"SE\":i=t.range.minX+s,n=t.range.maxX,o=t.range.minY+s,r=t.range.maxY}t.children[e]={centerOfMass:{x:0,y:0},mass:0,range:{minX:i,maxX:n,minY:o,maxY:r},size:.5*t.size,calcSize:2*t.calcSize,children:{data:null},maxWidth:0,level:t.level+1,childrenCount:0}}},{key:\"_debug\",value:function(t,e){void 0!==this.barnesHutTree&&(t.lineWidth=1,this._drawBranch(this.barnesHutTree.root,t,e))}},{key:\"_drawBranch\",value:function(t,e,i){void 0===i&&(i=\"#FF0000\"),4===t.childrenCount&&(this._drawBranch(t.children.NW,e),this._drawBranch(t.children.NE,e),this._drawBranch(t.children.SE,e),this._drawBranch(t.children.SW,e)),e.strokeStyle=i,e.beginPath(),e.moveTo(t.range.minX,t.range.minY),e.lineTo(t.range.maxX,t.range.minY),e.stroke(),e.beginPath(),e.moveTo(t.range.maxX,t.range.minY),e.lineTo(t.range.maxX,t.range.maxY),e.stroke(),e.beginPath(),e.moveTo(t.range.maxX,t.range.maxY),e.lineTo(t.range.minX,t.range.maxY),e.stroke(),e.beginPath(),e.moveTo(t.range.minX,t.range.maxY),e.lineTo(t.range.minX,t.range.minY),e.stroke()}}]),t}(),op=function(){function t(e,i,n){Nn(this,t),this._rng=ah(\"REPULSION SOLVER\"),this.body=e,this.physicsBody=i,this.setOptions(n)}return Fn(t,[{key:\"setOptions\",value:function(t){this.options=t}},{key:\"solve\",value:function(){for(var t,e,i,n,o,r,s,a,h=this.body.nodes,l=this.physicsBody.physicsNodeIndices,d=this.physicsBody.forces,c=this.options.nodeDistance,u=-2/3/c,f=0;f<l.length-1;f++){s=h[l[f]];for(var p=f+1;p<l.length;p++)t=(a=h[l[p]]).x-s.x,e=a.y-s.y,0===(i=Math.sqrt(t*t+e*e))&&(t=i=.1*this._rng()),i<2*c&&(r=i<.5*c?1:u*i+1.3333333333333333,n=t*(r/=i),o=e*r,d[s.id].x-=n,d[s.id].y-=o,d[a.id].x+=n,d[a.id].y+=o)}}}]),t}(),rp=function(){function t(e,i,n){Nn(this,t),this.body=e,this.physicsBody=i,this.setOptions(n)}return Fn(t,[{key:\"setOptions\",value:function(t){this.options=t,this.overlapAvoidanceFactor=Math.max(0,Math.min(1,this.options.avoidOverlap||0))}},{key:\"solve\",value:function(){for(var t=this.body.nodes,e=this.physicsBody.physicsNodeIndices,i=this.physicsBody.forces,n=this.options.nodeDistance,o=0;o<e.length-1;o++)for(var r=t[e[o]],s=o+1;s<e.length;s++){var a=t[e[s]];if(r.level===a.level){var h=n+this.overlapAvoidanceFactor*((r.shape.radius||0)/2+(a.shape.radius||0)/2),l=a.x-r.x,d=a.y-r.y,c=Math.sqrt(l*l+d*d),u=void 0;u=c<h?-Math.pow(.05*c,2)+Math.pow(.05*h,2):0,0!==c&&(u/=c);var f=l*u,p=d*u;i[r.id].x-=f,i[r.id].y-=p,i[a.id].x+=f,i[a.id].y+=p}}}}]),t}(),sp=function(){function t(e,i,n){Nn(this,t),this.body=e,this.physicsBody=i,this.setOptions(n)}return Fn(t,[{key:\"setOptions\",value:function(t){this.options=t}},{key:\"solve\",value:function(){for(var t,e,i,n,o,r=this.physicsBody.physicsEdgeIndices,s=this.body.edges,a=0;a<r.length;a++)!0===(e=s[r[a]]).connected&&e.toId!==e.fromId&&void 0!==this.body.nodes[e.toId]&&void 0!==this.body.nodes[e.fromId]&&(void 0!==e.edgeType.via?(t=void 0===e.options.length?this.options.springLength:e.options.length,i=e.to,n=e.edgeType.via,o=e.from,this._calculateSpringForce(i,n,.5*t),this._calculateSpringForce(n,o,.5*t)):(t=void 0===e.options.length?1.5*this.options.springLength:e.options.length,this._calculateSpringForce(e.from,e.to,t)))}},{key:\"_calculateSpringForce\",value:function(t,e,i){var n=t.x-e.x,o=t.y-e.y,r=Math.max(Math.sqrt(n*n+o*o),.01),s=this.options.springConstant*(i-r)/r,a=n*s,h=o*s;void 0!==this.physicsBody.forces[t.id]&&(this.physicsBody.forces[t.id].x+=a,this.physicsBody.forces[t.id].y+=h),void 0!==this.physicsBody.forces[e.id]&&(this.physicsBody.forces[e.id].x-=a,this.physicsBody.forces[e.id].y-=h)}}]),t}(),ap=function(){function t(e,i,n){Nn(this,t),this.body=e,this.physicsBody=i,this.setOptions(n)}return Fn(t,[{key:\"setOptions\",value:function(t){this.options=t}},{key:\"solve\",value:function(){for(var t,e,i,n,o,r,s,a,h,l,d=this.body.edges,c=.5,u=this.physicsBody.physicsEdgeIndices,f=this.physicsBody.physicsNodeIndices,p=this.physicsBody.forces,v=0;v<f.length;v++){var g=f[v];p[g].springFx=0,p[g].springFy=0}for(var y=0;y<u.length;y++)!0===(e=d[u[y]]).connected&&(t=void 0===e.options.length?this.options.springLength:e.options.length,i=e.from.x-e.to.x,n=e.from.y-e.to.y,a=0===(a=Math.sqrt(i*i+n*n))?.01:a,o=i*(s=this.options.springConstant*(t-a)/a),r=n*s,e.to.level!=e.from.level?(void 0!==p[e.toId]&&(p[e.toId].springFx-=o,p[e.toId].springFy-=r),void 0!==p[e.fromId]&&(p[e.fromId].springFx+=o,p[e.fromId].springFy+=r)):(void 0!==p[e.toId]&&(p[e.toId].x-=c*o,p[e.toId].y-=c*r),void 0!==p[e.fromId]&&(p[e.fromId].x+=c*o,p[e.fromId].y+=c*r)));s=1;for(var m=0;m<f.length;m++){var b=f[m];h=Math.min(s,Math.max(-s,p[b].springFx)),l=Math.min(s,Math.max(-s,p[b].springFy)),p[b].x+=h,p[b].y+=l}for(var w=0,k=0,_=0;_<f.length;_++){var x=f[_];w+=p[x].x,k+=p[x].y}for(var E=w/f.length,O=k/f.length,C=0;C<f.length;C++){var S=f[C];p[S].x-=E,p[S].y-=O}}}]),t}(),hp=function(){function t(e,i,n){Nn(this,t),this.body=e,this.physicsBody=i,this.setOptions(n)}return Fn(t,[{key:\"setOptions\",value:function(t){this.options=t}},{key:\"solve\",value:function(){for(var t,e,i,n,o=this.body.nodes,r=this.physicsBody.physicsNodeIndices,s=this.physicsBody.forces,a=0;a<r.length;a++){t=-(n=o[r[a]]).x,e=-n.y,i=Math.sqrt(t*t+e*e),this._calculateForces(i,t,e,s,n)}}},{key:\"_calculateForces\",value:function(t,e,i,n,o){var r=0===t?0:this.options.centralGravity/t;n[o.id].x=e*r,n[o.id].y=i*r}}]),t}();function lp(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var dp=function(t){Ad(i,t);var e=lp(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o))._rng=ah(\"FORCE ATLAS 2 BASED REPULSION SOLVER\"),r}return Fn(i,[{key:\"_calculateForces\",value:function(t,e,i,n,o){0===t&&(e=t=.1*this._rng()),this.overlapAvoidanceFactor<1&&n.shape.radius&&(t=Math.max(.1+this.overlapAvoidanceFactor*n.shape.radius,t-n.shape.radius));var r=n.edges.length+1,s=this.options.gravitationalConstant*o.mass*n.options.mass*r/Math.pow(t,2),a=e*s,h=i*s;this.physicsBody.forces[n.id].x+=a,this.physicsBody.forces[n.id].y+=h}}]),i}(np);function cp(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var up=function(t){Ad(i,t);var e=cp(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"_calculateForces\",value:function(t,e,i,n,o){if(t>0){var r=o.edges.length+1,s=this.options.centralGravity*r*o.options.mass;n[o.id].x=e*s,n[o.id].y=i*s}}}]),i}(hp),fp=function(){function t(e){Nn(this,t),this.body=e,this.physicsBody={physicsNodeIndices:[],physicsEdgeIndices:[],forces:{},velocities:{}},this.physicsEnabled=!0,this.simulationInterval=1e3/60,this.requiresTimeout=!0,this.previousStates={},this.referenceState={},this.freezeCache={},this.renderTimer=void 0,this.adaptiveTimestep=!1,this.adaptiveTimestepEnabled=!1,this.adaptiveCounter=0,this.adaptiveInterval=3,this.stabilized=!1,this.startedStabilization=!1,this.stabilizationIterations=0,this.ready=!1,this.options={},this.defaultOptions={enabled:!0,barnesHut:{theta:.5,gravitationalConstant:-2e3,centralGravity:.3,springLength:95,springConstant:.04,damping:.09,avoidOverlap:0},forceAtlas2Based:{theta:.5,gravitationalConstant:-50,centralGravity:.01,springConstant:.08,springLength:100,damping:.4,avoidOverlap:0},repulsion:{centralGravity:.2,springLength:200,springConstant:.05,nodeDistance:100,damping:.09,avoidOverlap:0},hierarchicalRepulsion:{centralGravity:0,springLength:100,springConstant:.01,nodeDistance:120,damping:.09},maxVelocity:50,minVelocity:.75,solver:\"barnesHut\",stabilization:{enabled:!0,iterations:1e3,updateInterval:50,onlyDynamicEdges:!1,fit:!0},timestep:.5,adaptiveTimestep:!0,wind:{x:0,y:0}},At(this.options,this.defaultOptions),this.timestep=.5,this.layoutFailed=!1,this.bindEventListeners()}return Fn(t,[{key:\"bindEventListeners\",value:function(){var t=this;this.body.emitter.on(\"initPhysics\",(function(){t.initPhysics()})),this.body.emitter.on(\"_layoutFailed\",(function(){t.layoutFailed=!0})),this.body.emitter.on(\"resetPhysics\",(function(){t.stopSimulation(),t.ready=!1})),this.body.emitter.on(\"disablePhysics\",(function(){t.physicsEnabled=!1,t.stopSimulation()})),this.body.emitter.on(\"restorePhysics\",(function(){t.setOptions(t.options),!0===t.ready&&t.startSimulation()})),this.body.emitter.on(\"startSimulation\",(function(){!0===t.ready&&t.startSimulation()})),this.body.emitter.on(\"stopSimulation\",(function(){t.stopSimulation()})),this.body.emitter.on(\"destroy\",(function(){t.stopSimulation(!1),t.body.emitter.off()})),this.body.emitter.on(\"_dataChanged\",(function(){t.updatePhysicsData()}))}},{key:\"setOptions\",value:function(t){if(void 0!==t)if(!1===t)this.options.enabled=!1,this.physicsEnabled=!1,this.stopSimulation();else if(!0===t)this.options.enabled=!0,this.physicsEnabled=!0,this.startSimulation();else{this.physicsEnabled=!0,Oh([\"stabilization\"],this.options,t),$h(this.options,t,\"stabilization\"),void 0===t.enabled&&(this.options.enabled=!0),!1===this.options.enabled&&(this.physicsEnabled=!1,this.stopSimulation());var e=this.options.wind;e&&((\"number\"!=typeof e.x||yd(e.x))&&(e.x=0),(\"number\"!=typeof e.y||yd(e.y))&&(e.y=0)),this.timestep=this.options.timestep}this.init()}},{key:\"init\",value:function(){var t;\"forceAtlas2Based\"===this.options.solver?(t=this.options.forceAtlas2Based,this.nodesSolver=new dp(this.body,this.physicsBody,t),this.edgesSolver=new sp(this.body,this.physicsBody,t),this.gravitySolver=new up(this.body,this.physicsBody,t)):\"repulsion\"===this.options.solver?(t=this.options.repulsion,this.nodesSolver=new op(this.body,this.physicsBody,t),this.edgesSolver=new sp(this.body,this.physicsBody,t),this.gravitySolver=new hp(this.body,this.physicsBody,t)):\"hierarchicalRepulsion\"===this.options.solver?(t=this.options.hierarchicalRepulsion,this.nodesSolver=new rp(this.body,this.physicsBody,t),this.edgesSolver=new ap(this.body,this.physicsBody,t),this.gravitySolver=new hp(this.body,this.physicsBody,t)):(t=this.options.barnesHut,this.nodesSolver=new np(this.body,this.physicsBody,t),this.edgesSolver=new sp(this.body,this.physicsBody,t),this.gravitySolver=new hp(this.body,this.physicsBody,t)),this.modelOptions=t}},{key:\"initPhysics\",value:function(){!0===this.physicsEnabled&&!0===this.options.enabled?!0===this.options.stabilization.enabled?this.stabilize():(this.stabilized=!1,this.ready=!0,this.body.emitter.emit(\"fit\",{},this.layoutFailed),this.startSimulation()):(this.ready=!0,this.body.emitter.emit(\"fit\"))}},{key:\"startSimulation\",value:function(){var t;!0===this.physicsEnabled&&!0===this.options.enabled?(this.stabilized=!1,this.adaptiveTimestep=!1,this.body.emitter.emit(\"_resizeNodes\"),void 0===this.viewFunction&&(this.viewFunction=Vt(t=this.simulationStep).call(t,this),this.body.emitter.on(\"initRedraw\",this.viewFunction),this.body.emitter.emit(\"_startRendering\"))):this.body.emitter.emit(\"_redraw\")}},{key:\"stopSimulation\",value:function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.stabilized=!0,!0===t&&this._emitStabilized(),void 0!==this.viewFunction&&(this.body.emitter.off(\"initRedraw\",this.viewFunction),this.viewFunction=void 0,!0===t&&this.body.emitter.emit(\"_stopRendering\"))}},{key:\"simulationStep\",value:function(){var t=No();this.physicsTick(),(No()-t<.4*this.simulationInterval||!0===this.runDoubleSpeed)&&!1===this.stabilized&&(this.physicsTick(),this.runDoubleSpeed=!0),!0===this.stabilized&&this.stopSimulation()}},{key:\"_emitStabilized\",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.stabilizationIterations;(this.stabilizationIterations>1||!0===this.startedStabilization)&&rs((function(){t.body.emitter.emit(\"stabilized\",{iterations:e}),t.startedStabilization=!1,t.stabilizationIterations=0}),0)}},{key:\"physicsStep\",value:function(){this.gravitySolver.solve(),this.nodesSolver.solve(),this.edgesSolver.solve(),this.moveNodes()}},{key:\"adjustTimeStep\",value:function(){!0===this._evaluateStepQuality()?this.timestep=1.2*this.timestep:this.timestep/1.2<this.options.timestep?this.timestep=this.options.timestep:(this.adaptiveCounter=-1,this.timestep=Math.max(this.options.timestep,this.timestep/1.2))}},{key:\"physicsTick\",value:function(){if(this._startStabilizing(),!0!==this.stabilized){if(!0===this.adaptiveTimestep&&!0===this.adaptiveTimestepEnabled)this.adaptiveCounter%this.adaptiveInterval==0?(this.timestep=2*this.timestep,this.physicsStep(),this.revert(),this.timestep=.5*this.timestep,this.physicsStep(),this.physicsStep(),this.adjustTimeStep()):this.physicsStep(),this.adaptiveCounter+=1;else this.timestep=this.options.timestep,this.physicsStep();!0===this.stabilized&&this.revert(),this.stabilizationIterations++}}},{key:\"updatePhysicsData\",value:function(){this.physicsBody.forces={},this.physicsBody.physicsNodeIndices=[],this.physicsBody.physicsEdgeIndices=[];var t=this.body.nodes,e=this.body.edges;for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&!0===t[i].options.physics&&this.physicsBody.physicsNodeIndices.push(t[i].id);for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&!0===e[n].options.physics&&this.physicsBody.physicsEdgeIndices.push(e[n].id);for(var o=0;o<this.physicsBody.physicsNodeIndices.length;o++){var r=this.physicsBody.physicsNodeIndices[o];this.physicsBody.forces[r]={x:0,y:0},void 0===this.physicsBody.velocities[r]&&(this.physicsBody.velocities[r]={x:0,y:0})}for(var s in this.physicsBody.velocities)void 0===t[s]&&delete this.physicsBody.velocities[s]}},{key:\"revert\",value:function(){var t=zo(this.previousStates),e=this.body.nodes,i=this.physicsBody.velocities;this.referenceState={};for(var n=0;n<t.length;n++){var o=t[n];void 0!==e[o]?!0===e[o].options.physics&&(this.referenceState[o]={positions:{x:e[o].x,y:e[o].y}},i[o].x=this.previousStates[o].vx,i[o].y=this.previousStates[o].vy,e[o].x=this.previousStates[o].x,e[o].y=this.previousStates[o].y):delete this.previousStates[o]}}},{key:\"_evaluateStepQuality\",value:function(){var t,e,i=this.body.nodes,n=this.referenceState;for(var o in this.referenceState)if(Object.prototype.hasOwnProperty.call(this.referenceState,o)&&void 0!==i[o]&&(t=i[o].x-n[o].positions.x,e=i[o].y-n[o].positions.y,Math.sqrt(Math.pow(t,2)+Math.pow(e,2))>.3))return!1;return!0}},{key:\"moveNodes\",value:function(){for(var t=this.physicsBody.physicsNodeIndices,e=0,i=0,n=0;n<t.length;n++){var o=t[n],r=this._performStep(o);e=Math.max(e,r),i+=r}this.adaptiveTimestepEnabled=i/t.length<5,this.stabilized=e<this.options.minVelocity}},{key:\"calculateComponentVelocity\",value:function(t,e,i){t+=(e-this.modelOptions.damping*t)/i*this.timestep;var n=this.options.maxVelocity||1e9;return Math.abs(t)>n&&(t=t>0?n:-n),t}},{key:\"_performStep\",value:function(t){var e=this.body.nodes[t],i=this.physicsBody.forces[t];this.options.wind&&(i.x+=this.options.wind.x,i.y+=this.options.wind.y);var n=this.physicsBody.velocities[t];return this.previousStates[t]={x:e.x,y:e.y,vx:n.x,vy:n.y},!1===e.options.fixed.x?(n.x=this.calculateComponentVelocity(n.x,i.x,e.options.mass),e.x+=n.x*this.timestep):(i.x=0,n.x=0),!1===e.options.fixed.y?(n.y=this.calculateComponentVelocity(n.y,i.y,e.options.mass),e.y+=n.y*this.timestep):(i.y=0,n.y=0),Math.sqrt(Math.pow(n.x,2)+Math.pow(n.y,2))}},{key:\"_freezeNodes\",value:function(){var t=this.body.nodes;for(var e in t)if(Object.prototype.hasOwnProperty.call(t,e)&&t[e].x&&t[e].y){var i=t[e].options.fixed;this.freezeCache[e]={x:i.x,y:i.y},i.x=!0,i.y=!0}}},{key:\"_restoreFrozenNodes\",value:function(){var t=this.body.nodes;for(var e in t)Object.prototype.hasOwnProperty.call(t,e)&&void 0!==this.freezeCache[e]&&(t[e].options.fixed.x=this.freezeCache[e].x,t[e].options.fixed.y=this.freezeCache[e].y);this.freezeCache={}}},{key:\"stabilize\",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.options.stabilization.iterations;\"number\"!=typeof e&&(e=this.options.stabilization.iterations,console.error(\"The stabilize method needs a numeric amount of iterations. Switching to default: \",e)),0!==this.physicsBody.physicsNodeIndices.length?(this.adaptiveTimestep=this.options.adaptiveTimestep,this.body.emitter.emit(\"_resizeNodes\"),this.stopSimulation(),this.stabilized=!1,this.body.emitter.emit(\"_blockRedraw\"),this.targetIterations=e,!0===this.options.stabilization.onlyDynamicEdges&&this._freezeNodes(),this.stabilizationIterations=0,rs((function(){return t._stabilizationBatch()}),0)):this.ready=!0}},{key:\"_startStabilizing\",value:function(){return!0!==this.startedStabilization&&(this.body.emitter.emit(\"startStabilizing\"),this.startedStabilization=!0,!0)}},{key:\"_stabilizationBatch\",value:function(){var t=this,e=function(){return!1===t.stabilized&&t.stabilizationIterations<t.targetIterations},i=function(){t.body.emitter.emit(\"stabilizationProgress\",{iterations:t.stabilizationIterations,total:t.targetIterations})};this._startStabilizing()&&i();for(var n,o=0;e()&&o<this.options.stabilization.updateInterval;)this.physicsTick(),o++;(i(),e())?rs(Vt(n=this._stabilizationBatch).call(n,this),0):this._finalizeStabilization()}},{key:\"_finalizeStabilization\",value:function(){this.body.emitter.emit(\"_allowRedraw\"),!0===this.options.stabilization.fit&&this.body.emitter.emit(\"fit\"),!0===this.options.stabilization.onlyDynamicEdges&&this._restoreFrozenNodes(),this.body.emitter.emit(\"stabilizationIterationsDone\"),this.body.emitter.emit(\"_requestRedraw\"),!0===this.stabilized?this._emitStabilized():this.startSimulation(),this.ready=!0}},{key:\"_drawForces\",value:function(t){for(var e=0;e<this.physicsBody.physicsNodeIndices.length;e++){var i=this.physicsBody.physicsNodeIndices[e],n=this.body.nodes[i],o=this.physicsBody.forces[i],r=Math.sqrt(Math.pow(o.x,2)+Math.pow(o.x,2)),s=Math.min(Math.max(5,r),15),a=3*s,h=Vh((180-180*Math.min(1,Math.max(0,.03*r)))/360,1,1),l={x:n.x+20*o.x,y:n.y+20*o.y};t.lineWidth=s,t.strokeStyle=h,t.beginPath(),t.moveTo(n.x,n.y),t.lineTo(l.x,l.y),t.stroke();var d=Math.atan2(o.y,o.x);t.fillStyle=h,jf.draw(t,{type:\"arrow\",point:l,angle:d,length:a}),hs(t).call(t)}}}]),t}(),pp=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"getRange\",value:function(t){var e,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=1e9,o=-1e9,r=1e9,s=-1e9;if(i.length>0)for(var a=0;a<i.length;a++)r>(e=t[i[a]]).shape.boundingBox.left&&(r=e.shape.boundingBox.left),s<e.shape.boundingBox.right&&(s=e.shape.boundingBox.right),n>e.shape.boundingBox.top&&(n=e.shape.boundingBox.top),o<e.shape.boundingBox.bottom&&(o=e.shape.boundingBox.bottom);return 1e9===r&&-1e9===s&&1e9===n&&-1e9===o&&(n=0,o=0,r=0,s=0),{minX:r,maxX:s,minY:n,maxY:o}}},{key:\"getRangeCore\",value:function(t){var e,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=1e9,o=-1e9,r=1e9,s=-1e9;if(i.length>0)for(var a=0;a<i.length;a++)r>(e=t[i[a]]).x&&(r=e.x),s<e.x&&(s=e.x),n>e.y&&(n=e.y),o<e.y&&(o=e.y);return 1e9===r&&-1e9===s&&1e9===n&&-1e9===o&&(n=0,o=0,r=0,s=0),{minX:r,maxX:s,minY:n,maxY:o}}},{key:\"findCenter\",value:function(t){return{x:.5*(t.maxX+t.minX),y:.5*(t.maxY+t.minY)}}},{key:\"cloneOptions\",value:function(t,e){var i={};return void 0===e||\"node\"===e?(Ch(i,t.options,!0),i.x=t.x,i.y=t.y,i.amountOfConnections=t.edges.length):Ch(i,t.options,!0),i}}]),t}();function vp(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var gp=function(t){Ad(i,t);var e=vp(i);function i(t,n,o,r,s,a){var h;return Nn(this,i),(h=e.call(this,t,n,o,r,s,a)).isCluster=!0,h.containedNodes={},h.containedEdges={},h}return Fn(i,[{key:\"_openChildCluster\",value:function(t){var e=this,i=this.body.nodes[t];if(void 0===this.containedNodes[t])throw new Error(\"node with id: \"+t+\" not in current cluster\");if(!i.isCluster)throw new Error(\"node with id: \"+t+\" is not a cluster\");delete this.containedNodes[t],Dh(i.edges,(function(t){delete e.containedEdges[t.id]})),Dh(i.containedNodes,(function(t,i){e.containedNodes[i]=t})),i.containedNodes={},Dh(i.containedEdges,(function(t,i){e.containedEdges[i]=t})),i.containedEdges={},Dh(i.edges,(function(t){Dh(e.edges,(function(i){var n,o,r=Hr(n=i.clusteringEdgeReplacingIds).call(n,t.id);-1!==r&&(Dh(t.clusteringEdgeReplacingIds,(function(t){i.clusteringEdgeReplacingIds.push(t),e.body.edges[t].edgeReplacedById=i.id})),er(o=i.clusteringEdgeReplacingIds).call(o,r,1))}))})),i.edges=[]}}]),i}(cf),yp=function(){function t(e){var i=this;Nn(this,t),this.body=e,this.clusteredNodes={},this.clusteredEdges={},this.options={},this.defaultOptions={},At(this.options,this.defaultOptions),this.body.emitter.on(\"_resetData\",(function(){i.clusteredNodes={},i.clusteredEdges={}}))}return Fn(t,[{key:\"clusterByHubsize\",value:function(t,e){void 0===t?t=this._getHubSize():\"object\"===go(t)&&(e=this._checkOptions(t),t=this._getHubSize());for(var i=[],n=0;n<this.body.nodeIndices.length;n++){var o=this.body.nodes[this.body.nodeIndices[n]];o.edges.length>=t&&i.push(o.id)}for(var r=0;r<i.length;r++)this.clusterByConnection(i[r],e,!0);this.body.emitter.emit(\"_dataChanged\")}},{key:\"cluster\",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},i=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(void 0===e.joinCondition)throw new Error(\"Cannot call clusterByNodeData without a joinCondition function in the options.\");e=this._checkOptions(e);var n={},o={};Dh(this.body.nodes,(function(i,r){i.options&&!0===e.joinCondition(i.options)&&(n[r]=i,Dh(i.edges,(function(e){void 0===t.clusteredEdges[e.id]&&(o[e.id]=e)})))})),this._cluster(n,o,e,i)}},{key:\"clusterByEdgeCount\",value:function(t,e){var i=this,n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];e=this._checkOptions(e);for(var o,r,s,a=[],h={},l=function(n){var l={},d={},c=i.body.nodeIndices[n],u=i.body.nodes[c];if(void 0===h[c]){s=0,r=[];for(var f=0;f<u.edges.length;f++)o=u.edges[f],void 0===i.clusteredEdges[o.id]&&(o.toId!==o.fromId&&s++,r.push(o));if(s===t){for(var p=function(t){if(void 0===e.joinCondition||null===e.joinCondition)return!0;var i=pp.cloneOptions(t);return e.joinCondition(i)},v=!0,g=0;g<r.length;g++){o=r[g];var y=i._getConnectedId(o,c);if(!p(u)){v=!1;break}d[o.id]=o,l[c]=u,l[y]=i.body.nodes[y],h[c]=!0}if(zo(l).length>0&&zo(d).length>0&&!0===v){var m=function(){for(var t=0;t<a.length;++t)for(var e in l)if(void 0!==a[t].nodes[e])return a[t]}();if(void 0!==m){for(var b in l)void 0===m.nodes[b]&&(m.nodes[b]=l[b]);for(var w in d)void 0===m.edges[w]&&(m.edges[w]=d[w])}else a.push({nodes:l,edges:d})}}}},d=0;d<this.body.nodeIndices.length;d++)l(d);for(var c=0;c<a.length;c++)this._cluster(a[c].nodes,a[c].edges,e,!1);!0===n&&this.body.emitter.emit(\"_dataChanged\")}},{key:\"clusterOutliers\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this.clusterByEdgeCount(1,t,e)}},{key:\"clusterBridges\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this.clusterByEdgeCount(2,t,e)}},{key:\"clusterByConnection\",value:function(t,e){var i,n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];if(void 0===t)throw new Error(\"No nodeId supplied to clusterByConnection!\");if(void 0===this.body.nodes[t])throw new Error(\"The nodeId given to clusterByConnection does not exist!\");var o=this.body.nodes[t];void 0===(e=this._checkOptions(e,o)).clusterNodeProperties.x&&(e.clusterNodeProperties.x=o.x),void 0===e.clusterNodeProperties.y&&(e.clusterNodeProperties.y=o.y),void 0===e.clusterNodeProperties.fixed&&(e.clusterNodeProperties.fixed={},e.clusterNodeProperties.fixed.x=o.options.fixed.x,e.clusterNodeProperties.fixed.y=o.options.fixed.y);var r={},s={},a=o.id,h=pp.cloneOptions(o);r[a]=o;for(var l=0;l<o.edges.length;l++){var d=o.edges[l];if(void 0===this.clusteredEdges[d.id]){var c=this._getConnectedId(d,a);if(void 0===this.clusteredNodes[c])if(c!==a)if(void 0===e.joinCondition)s[d.id]=d,r[c]=this.body.nodes[c];else{var u=pp.cloneOptions(this.body.nodes[c]);!0===e.joinCondition(h,u)&&(s[d.id]=d,r[c]=this.body.nodes[c])}else s[d.id]=d}}var f=Io(i=zo(r)).call(i,(function(t){return r[t].id}));for(var p in r)if(Object.prototype.hasOwnProperty.call(r,p))for(var v=r[p],g=0;g<v.edges.length;g++){var y=v.edges[g];Hr(f).call(f,this._getConnectedId(y,v.id))>-1&&(s[y.id]=y)}this._cluster(r,s,e,n)}},{key:\"_createClusterEdges\",value:function(t,e,i,n){for(var o,r,s,a,h,l,d=zo(t),c=[],u=0;u<d.length;u++){s=t[r=d[u]];for(var f=0;f<s.edges.length;f++)o=s.edges[f],void 0===this.clusteredEdges[o.id]&&(o.toId==o.fromId?e[o.id]=o:o.toId==r?(a=i.id,l=h=o.fromId):(a=o.toId,h=i.id,l=a),void 0===t[l]&&c.push({edge:o,fromId:h,toId:a}))}for(var p=[],v=function(t){for(var e=0;e<p.length;e++){var i=p[e],n=t.fromId===i.fromId&&t.toId===i.toId,o=t.fromId===i.toId&&t.toId===i.fromId;if(n||o)return i}return null},g=0;g<c.length;g++){var y=c[g],m=y.edge,b=v(y);null===b?(b=this._createClusteredEdge(y.fromId,y.toId,m,n),p.push(b)):b.clusteringEdgeReplacingIds.push(m.id),this.body.edges[m.id].edgeReplacedById=b.id,this._backupEdgeOptions(m),m.setOptions({physics:!1})}}},{key:\"_checkOptions\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return void 0===t.clusterEdgeProperties&&(t.clusterEdgeProperties={}),void 0===t.clusterNodeProperties&&(t.clusterNodeProperties={}),t}},{key:\"_cluster\",value:function(t,e,i){var n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],o=[];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&void 0!==this.clusteredNodes[r]&&o.push(r);for(var s=0;s<o.length;++s)delete t[o[s]];if(0!=zo(t).length&&(1!=zo(t).length||1==i.clusterNodeProperties.allowSingleNodeCluster)){var a=Ch({},i.clusterNodeProperties);if(void 0!==i.processProperties){var h=[];for(var l in t)if(Object.prototype.hasOwnProperty.call(t,l)){var d=pp.cloneOptions(t[l]);h.push(d)}var c=[];for(var u in e)if(Object.prototype.hasOwnProperty.call(e,u)&&\"clusterEdge:\"!==u.substr(0,12)){var f=pp.cloneOptions(e[u],\"edge\");c.push(f)}if(!(a=i.processProperties(a,h,c)))throw new Error(\"The processProperties function does not return properties!\")}void 0===a.id&&(a.id=\"cluster:\"+Wc());var p=a.id;void 0===a.label&&(a.label=\"cluster\");var v=void 0;void 0===a.x&&(v=this._getClusterPosition(t),a.x=v.x),void 0===a.y&&(void 0===v&&(v=this._getClusterPosition(t)),a.y=v.y),a.id=p;var g=this.body.functions.createNode(a,gp);g.containedNodes=t,g.containedEdges=e,g.clusterEdgeProperties=i.clusterEdgeProperties,this.body.nodes[a.id]=g,this._clusterEdges(t,e,a,i.clusterEdgeProperties),a.id=void 0,!0===n&&this.body.emitter.emit(\"_dataChanged\")}}},{key:\"_backupEdgeOptions\",value:function(t){void 0===this.clusteredEdges[t.id]&&(this.clusteredEdges[t.id]={physics:t.options.physics})}},{key:\"_restoreEdge\",value:function(t){var e=this.clusteredEdges[t.id];void 0!==e&&(t.setOptions({physics:e.physics}),delete this.clusteredEdges[t.id])}},{key:\"isCluster\",value:function(t){return void 0!==this.body.nodes[t]?!0===this.body.nodes[t].isCluster:(console.error(\"Node does not exist.\"),!1)}},{key:\"_getClusterPosition\",value:function(t){for(var e,i=zo(t),n=t[i[0]].x,o=t[i[0]].x,r=t[i[0]].y,s=t[i[0]].y,a=1;a<i.length;a++)n=(e=t[i[a]]).x<n?e.x:n,o=e.x>o?e.x:o,r=e.y<r?e.y:r,s=e.y>s?e.y:s;return{x:.5*(n+o),y:.5*(r+s)}}},{key:\"openCluster\",value:function(t,e){var i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];if(void 0===t)throw new Error(\"No clusterNodeId supplied to openCluster.\");var n=this.body.nodes[t];if(void 0===n)throw new Error(\"The clusterNodeId supplied to openCluster does not exist.\");if(!0!==n.isCluster||void 0===n.containedNodes||void 0===n.containedEdges)throw new Error(\"The node:\"+t+\" is not a valid cluster.\");var o=this.findNode(t),r=Hr(o).call(o,t)-1;if(r>=0){var s=o[r],a=this.body.nodes[s];return a._openChildCluster(t),delete this.body.nodes[t],void(!0===i&&this.body.emitter.emit(\"_dataChanged\"))}var h=n.containedNodes,l=n.containedEdges;if(void 0!==e&&void 0!==e.releaseFunction&&\"function\"==typeof e.releaseFunction){var d={},c={x:n.x,y:n.y};for(var u in h)if(Object.prototype.hasOwnProperty.call(h,u)){var f=this.body.nodes[u];d[u]={x:f.x,y:f.y}}var p=e.releaseFunction(c,d);for(var v in h)if(Object.prototype.hasOwnProperty.call(h,v)){var g=this.body.nodes[v];void 0!==p[v]&&(g.x=void 0===p[v].x?n.x:p[v].x,g.y=void 0===p[v].y?n.y:p[v].y)}}else Dh(h,(function(t){!1===t.options.fixed.x&&(t.x=n.x),!1===t.options.fixed.y&&(t.y=n.y)}));for(var y in h)if(Object.prototype.hasOwnProperty.call(h,y)){var m=this.body.nodes[y];m.vx=n.vx,m.vy=n.vy,m.setOptions({physics:!0}),delete this.clusteredNodes[y]}for(var b=[],w=0;w<n.edges.length;w++)b.push(n.edges[w]);for(var k=0;k<b.length;k++){for(var _=b[k],x=this._getConnectedId(_,t),E=this.clusteredNodes[x],O=0;O<_.clusteringEdgeReplacingIds.length;O++){var C=_.clusteringEdgeReplacingIds[O],S=this.body.edges[C];if(void 0!==S)if(void 0!==E){var T=this.body.nodes[E.clusterId];T.containedEdges[S.id]=S,delete l[S.id];var M=S.fromId,P=S.toId;S.toId==x?P=E.clusterId:M=E.clusterId,this._createClusteredEdge(M,P,S,T.clusterEdgeProperties,{hidden:!1,physics:!0})}else this._restoreEdge(S)}_.remove()}for(var D in l)Object.prototype.hasOwnProperty.call(l,D)&&this._restoreEdge(l[D]);delete this.body.nodes[t],!0===i&&this.body.emitter.emit(\"_dataChanged\")}},{key:\"getNodesInCluster\",value:function(t){var e=[];if(!0===this.isCluster(t)){var i=this.body.nodes[t].containedNodes;for(var n in i)Object.prototype.hasOwnProperty.call(i,n)&&e.push(this.body.nodes[n].id)}return e}},{key:\"findNode\",value:function(t){for(var e,i=[],n=0;void 0!==this.clusteredNodes[t]&&n<100;){if(void 0===(e=this.body.nodes[t]))return[];i.push(e.id),t=this.clusteredNodes[t].clusterId,n++}return void 0===(e=this.body.nodes[t])?[]:(i.push(e.id),Xo(i).call(i),i)}},{key:\"updateClusteredNode\",value:function(t,e){if(void 0===t)throw new Error(\"No clusteredNodeId supplied to updateClusteredNode.\");if(void 0===e)throw new Error(\"No newOptions supplied to updateClusteredNode.\");if(void 0===this.body.nodes[t])throw new Error(\"The clusteredNodeId supplied to updateClusteredNode does not exist.\");this.body.nodes[t].setOptions(e),this.body.emitter.emit(\"_dataChanged\")}},{key:\"updateEdge\",value:function(t,e){if(void 0===t)throw new Error(\"No startEdgeId supplied to updateEdge.\");if(void 0===e)throw new Error(\"No newOptions supplied to updateEdge.\");if(void 0===this.body.edges[t])throw new Error(\"The startEdgeId supplied to updateEdge does not exist.\");for(var i=this.getClusteredEdges(t),n=0;n<i.length;n++){this.body.edges[i[n]].setOptions(e)}this.body.emitter.emit(\"_dataChanged\")}},{key:\"getClusteredEdges\",value:function(t){for(var e=[],i=0;void 0!==t&&void 0!==this.body.edges[t]&&i<100;)e.push(this.body.edges[t].id),t=this.body.edges[t].edgeReplacedById,i++;return Xo(e).call(e),e}},{key:\"getBaseEdge\",value:function(t){return this.getBaseEdges(t)[0]}},{key:\"getBaseEdges\",value:function(t){for(var e=[t],i=[],n=[],o=0;e.length>0&&o<100;){var r=e.pop();if(void 0!==r){var s=this.body.edges[r];if(void 0!==s){o++;var a=s.clusteringEdgeReplacingIds;if(void 0===a)n.push(r);else for(var h=0;h<a.length;++h){var l=a[h];-1===Hr(e).call(e,a)&&-1===Hr(i).call(i,a)&&e.push(l)}i.push(r)}}}return n}},{key:\"_getConnectedId\",value:function(t,e){return t.toId!=e?t.toId:(t.fromId,t.fromId)}},{key:\"_getHubSize\",value:function(){for(var t=0,e=0,i=0,n=0,o=0;o<this.body.nodeIndices.length;o++){var r=this.body.nodes[this.body.nodeIndices[o]];r.edges.length>n&&(n=r.edges.length),t+=r.edges.length,e+=Math.pow(r.edges.length,2),i+=1}t/=i;var s=(e/=i)-Math.pow(t,2),a=Math.sqrt(s),h=Math.floor(t+2*a);return h>n&&(h=n),h}},{key:\"_createClusteredEdge\",value:function(t,e,i,n,o){var r=pp.cloneOptions(i,\"edge\");Ch(r,n),r.from=t,r.to=e,r.id=\"clusterEdge:\"+Wc(),void 0!==o&&Ch(r,o);var s=this.body.functions.createEdge(r);return s.clusteringEdgeReplacingIds=[i.id],s.connect(),this.body.edges[s.id]=s,s}},{key:\"_clusterEdges\",value:function(t,e,i,n){if(e instanceof ep){var o=e,r={};r[o.id]=o,e=r}if(t instanceof cf){var s=t,a={};a[s.id]=s,t=a}if(null==i)throw new Error(\"_clusterEdges: parameter clusterNode required\");for(var h in void 0===n&&(n=i.clusterEdgeProperties),this._createClusterEdges(t,e,i,n),e)if(Object.prototype.hasOwnProperty.call(e,h)&&void 0!==this.body.edges[h]){var l=this.body.edges[h];this._backupEdgeOptions(l),l.setOptions({physics:!1})}for(var d in t)Object.prototype.hasOwnProperty.call(t,d)&&(this.clusteredNodes[d]={clusterId:i.id,node:this.body.nodes[d]},this.body.nodes[d].setOptions({physics:!1}))}},{key:\"_getClusterNodeForNode\",value:function(t){if(void 0!==t){var e=this.clusteredNodes[t];if(void 0!==e){var i=e.clusterId;if(void 0!==i)return this.body.nodes[i]}}}},{key:\"_filter\",value:function(t,e){var i=[];return Dh(t,(function(t){e(t)&&i.push(t)})),i}},{key:\"_updateState\",value:function(){var t,e=this,i=[],n={},o=function(t){Dh(e.body.nodes,(function(e){!0===e.isCluster&&t(e)}))};for(t in this.clusteredNodes){if(Object.prototype.hasOwnProperty.call(this.clusteredNodes,t))void 0===this.body.nodes[t]&&i.push(t)}o((function(t){for(var e=0;e<i.length;e++)delete t.containedNodes[i[e]]}));for(var r=0;r<i.length;r++)delete this.clusteredNodes[i[r]];Dh(this.clusteredEdges,(function(t){var i=e.body.edges[t];void 0!==i&&i.endPointsValid()||(n[t]=t)})),o((function(t){Dh(t.containedEdges,(function(t,e){t.endPointsValid()||n[e]||(n[e]=e)}))})),Dh(this.body.edges,(function(t,i){var o=!0,r=t.clusteringEdgeReplacingIds;if(void 0!==r){var s=0;Dh(r,(function(t){var i=e.body.edges[t];void 0!==i&&i.endPointsValid()&&(s+=1)})),o=s>0}t.endPointsValid()&&o||(n[i]=i)})),o((function(t){Dh(n,(function(i){delete t.containedEdges[i],Dh(t.edges,(function(o,r){o.id!==i?o.clusteringEdgeReplacingIds=e._filter(o.clusteringEdgeReplacingIds,(function(t){return!n[t]})):t.edges[r]=null})),t.edges=e._filter(t.edges,(function(t){return null!==t}))}))})),Dh(n,(function(t){delete e.clusteredEdges[t]})),Dh(n,(function(t){delete e.body.edges[t]})),Dh(zo(this.body.edges),(function(t){var i=e.body.edges[t],n=e._isClusteredNode(i.fromId)||e._isClusteredNode(i.toId);if(n!==e._isClusteredEdge(i.id))if(n){var o=e._getClusterNodeForNode(i.fromId);void 0!==o&&e._clusterEdges(e.body.nodes[i.fromId],i,o);var r=e._getClusterNodeForNode(i.toId);void 0!==r&&e._clusterEdges(e.body.nodes[i.toId],i,r)}else delete e._clusterEdges[t],e._restoreEdge(i)}));for(var s=!1,a=!0,h=function(){var t=[];o((function(e){var i=zo(e.containedNodes).length,n=!0===e.options.allowSingleNodeCluster;(n&&i<1||!n&&i<2)&&t.push(e.id)}));for(var i=0;i<t.length;++i)e.openCluster(t[i],{},!1);a=t.length>0,s=s||a};a;)h();s&&this._updateState()}},{key:\"_isClusteredNode\",value:function(t){return void 0!==this.clusteredNodes[t]}},{key:\"_isClusteredEdge\",value:function(t){return void 0!==this.clusteredEdges[t]}}]),t}();function mp(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return bp(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return bp(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function bp(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}var wp=function(){function t(e,i){var n;Nn(this,t),void 0!==window&&(n=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame),window.requestAnimationFrame=void 0===n?function(t){t()}:n,this.body=e,this.canvas=i,this.redrawRequested=!1,this.renderTimer=void 0,this.requiresTimeout=!0,this.renderingActive=!1,this.renderRequests=0,this.allowRedraw=!0,this.dragging=!1,this.zooming=!1,this.options={},this.defaultOptions={hideEdgesOnDrag:!1,hideEdgesOnZoom:!1,hideNodesOnDrag:!1},At(this.options,this.defaultOptions),this._determineBrowserMethod(),this.bindEventListeners()}return Fn(t,[{key:\"bindEventListeners\",value:function(){var t,e=this;this.body.emitter.on(\"dragStart\",(function(){e.dragging=!0})),this.body.emitter.on(\"dragEnd\",(function(){e.dragging=!1})),this.body.emitter.on(\"zoom\",(function(){e.zooming=!0,window.clearTimeout(e.zoomTimeoutId),e.zoomTimeoutId=rs((function(){var t;e.zooming=!1,Vt(t=e._requestRedraw).call(t,e)()}),250)})),this.body.emitter.on(\"_resizeNodes\",(function(){e._resizeNodes()})),this.body.emitter.on(\"_redraw\",(function(){!1===e.renderingActive&&e._redraw()})),this.body.emitter.on(\"_blockRedraw\",(function(){e.allowRedraw=!1})),this.body.emitter.on(\"_allowRedraw\",(function(){e.allowRedraw=!0,e.redrawRequested=!1})),this.body.emitter.on(\"_requestRedraw\",Vt(t=this._requestRedraw).call(t,this)),this.body.emitter.on(\"_startRendering\",(function(){e.renderRequests+=1,e.renderingActive=!0,e._startRendering()})),this.body.emitter.on(\"_stopRendering\",(function(){e.renderRequests-=1,e.renderingActive=e.renderRequests>0,e.renderTimer=void 0})),this.body.emitter.on(\"destroy\",(function(){e.renderRequests=0,e.allowRedraw=!1,e.renderingActive=!1,!0===e.requiresTimeout?clearTimeout(e.renderTimer):window.cancelAnimationFrame(e.renderTimer),e.body.emitter.off()}))}},{key:\"setOptions\",value:function(t){if(void 0!==t){Eh([\"hideEdgesOnDrag\",\"hideEdgesOnZoom\",\"hideNodesOnDrag\"],this.options,t)}}},{key:\"_requestNextFrame\",value:function(t,e){if(\"undefined\"!=typeof window){var i,n=window;return!0===this.requiresTimeout?i=rs(t,e):n.requestAnimationFrame&&(i=n.requestAnimationFrame(t)),i}}},{key:\"_startRendering\",value:function(){var t;!0===this.renderingActive&&(void 0===this.renderTimer&&(this.renderTimer=this._requestNextFrame(Vt(t=this._renderStep).call(t,this),this.simulationInterval)))}},{key:\"_renderStep\",value:function(){!0===this.renderingActive&&(this.renderTimer=void 0,!0===this.requiresTimeout&&this._startRendering(),this._redraw(),!1===this.requiresTimeout&&this._startRendering())}},{key:\"redraw\",value:function(){this.body.emitter.emit(\"setSize\"),this._redraw()}},{key:\"_requestRedraw\",value:function(){var t=this;!0!==this.redrawRequested&&!1===this.renderingActive&&!0===this.allowRedraw&&(this.redrawRequested=!0,this._requestNextFrame((function(){t._redraw(!1)}),0))}},{key:\"_redraw\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(!0===this.allowRedraw){this.body.emitter.emit(\"initRedraw\"),this.redrawRequested=!1;var e={drawExternalLabels:null};0!==this.canvas.frame.canvas.width&&0!==this.canvas.frame.canvas.height||this.canvas.setSize(),this.canvas.setTransform();var i=this.canvas.getContext(),n=this.canvas.frame.canvas.clientWidth,o=this.canvas.frame.canvas.clientHeight;if(i.clearRect(0,0,n,o),0===this.canvas.frame.clientWidth)return;if(i.save(),i.translate(this.body.view.translation.x,this.body.view.translation.y),i.scale(this.body.view.scale,this.body.view.scale),i.beginPath(),this.body.emitter.emit(\"beforeDrawing\",i),i.closePath(),!1===t&&(!1===this.dragging||!0===this.dragging&&!1===this.options.hideEdgesOnDrag)&&(!1===this.zooming||!0===this.zooming&&!1===this.options.hideEdgesOnZoom)&&this._drawEdges(i),!1===this.dragging||!0===this.dragging&&!1===this.options.hideNodesOnDrag){var r=this._drawNodes(i,t),s=r.drawExternalLabels;e.drawExternalLabels=s}!1===t&&(!1===this.dragging||!0===this.dragging&&!1===this.options.hideEdgesOnDrag)&&(!1===this.zooming||!0===this.zooming&&!1===this.options.hideEdgesOnZoom)&&this._drawArrows(i),null!=e.drawExternalLabels&&e.drawExternalLabels(),!1===t&&this._drawSelectionBox(i),i.beginPath(),this.body.emitter.emit(\"afterDrawing\",i),i.closePath(),i.restore(),!0===t&&i.clearRect(0,0,n,o)}}},{key:\"_resizeNodes\",value:function(){this.canvas.setTransform();var t=this.canvas.getContext();t.save(),t.translate(this.body.view.translation.x,this.body.view.translation.y),t.scale(this.body.view.scale,this.body.view.scale);var e,i=this.body.nodes;for(var n in i)Object.prototype.hasOwnProperty.call(i,n)&&((e=i[n]).resize(t),e.updateBoundingBox(t,e.selected));t.restore()}},{key:\"_drawNodes\",value:function(t){for(var e,i,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],o=this.body.nodes,r=this.body.nodeIndices,s=[],a=[],h=20,l=this.canvas.DOMtoCanvas({x:-h,y:-h}),d=this.canvas.DOMtoCanvas({x:this.canvas.frame.canvas.clientWidth+h,y:this.canvas.frame.canvas.clientHeight+h}),c={top:l.y,left:l.x,bottom:d.y,right:d.x},u=[],f=0;f<r.length;f++)if((e=o[r[f]]).hover)a.push(r[f]);else if(e.isSelected())s.push(r[f]);else if(!0===n){var p=e.draw(t);null!=p.drawExternalLabel&&u.push(p.drawExternalLabel)}else if(!0===e.isBoundingBoxOverlappingWith(c)){var v=e.draw(t);null!=v.drawExternalLabel&&u.push(v.drawExternalLabel)}else e.updateBoundingBox(t,e.selected);var g=s.length,y=a.length;for(i=0;i<g;i++){var m=(e=o[s[i]]).draw(t);null!=m.drawExternalLabel&&u.push(m.drawExternalLabel)}for(i=0;i<y;i++){var b=(e=o[a[i]]).draw(t);null!=b.drawExternalLabel&&u.push(b.drawExternalLabel)}return{drawExternalLabels:function(){var t,e=mp(u);try{for(e.s();!(t=e.n()).done;){(0,t.value)()}}catch(t){e.e(t)}finally{e.f()}}}}},{key:\"_drawEdges\",value:function(t){for(var e=this.body.edges,i=this.body.edgeIndices,n=0;n<i.length;n++){var o=e[i[n]];!0===o.connected&&o.draw(t)}}},{key:\"_drawArrows\",value:function(t){for(var e=this.body.edges,i=this.body.edgeIndices,n=0;n<i.length;n++){var o=e[i[n]];!0===o.connected&&o.drawArrows(t)}}},{key:\"_determineBrowserMethod\",value:function(){if(\"undefined\"!=typeof window){var t=navigator.userAgent.toLowerCase();this.requiresTimeout=!1,(-1!=Hr(t).call(t,\"msie 9.0\")||-1!=Hr(t).call(t,\"safari\")&&Hr(t).call(t,\"chrome\")<=-1)&&(this.requiresTimeout=!0)}else this.requiresTimeout=!0}},{key:\"_drawSelectionBox\",value:function(t){if(this.body.selectionBox.show){t.beginPath();var e=this.body.selectionBox.position.end.x-this.body.selectionBox.position.start.x,i=this.body.selectionBox.position.end.y-this.body.selectionBox.position.start.y;t.rect(this.body.selectionBox.position.start.x,this.body.selectionBox.position.start.y,e,i),t.fillStyle=\"rgba(151, 194, 252, 0.2)\",t.fillRect(this.body.selectionBox.position.start.x,this.body.selectionBox.position.start.y,e,i),t.strokeStyle=\"rgba(151, 194, 252, 1)\",t.stroke()}else t.closePath()}}]),t}(),kp=k.setInterval;function _p(t,e){e.inputHandler=function(t){t.isFirst&&e(t)},t.on(\"hammer.input\",e.inputHandler)}function xp(t,e){return e.inputHandler=function(t){t.isFinal&&e(t)},t.on(\"hammer.input\",e.inputHandler)}var Ep=function(){function t(e){Nn(this,t),this.body=e,this.pixelRatio=1,this.cameraState={},this.initialized=!1,this.canvasViewCenter={},this._cleanupCallbacks=[],this.options={},this.defaultOptions={autoResize:!0,height:\"100%\",width:\"100%\"},At(this.options,this.defaultOptions),this.bindEventListeners()}return Fn(t,[{key:\"bindEventListeners\",value:function(){var t,e=this;this.body.emitter.once(\"resize\",(function(t){0!==t.width&&(e.body.view.translation.x=.5*t.width),0!==t.height&&(e.body.view.translation.y=.5*t.height)})),this.body.emitter.on(\"setSize\",Vt(t=this.setSize).call(t,this)),this.body.emitter.on(\"destroy\",(function(){e.hammerFrame.destroy(),e.hammer.destroy(),e._cleanUp()}))}},{key:\"setOptions\",value:function(t){var e=this;if(void 0!==t){Eh([\"width\",\"height\",\"autoResize\"],this.options,t)}if(this._cleanUp(),!0===this.options.autoResize){var i;if(window.ResizeObserver){var n=new ResizeObserver((function(){!0===e.setSize()&&e.body.emitter.emit(\"_requestRedraw\")})),o=this.frame;n.observe(o),this._cleanupCallbacks.push((function(){n.unobserve(o)}))}else{var r=kp((function(){!0===e.setSize()&&e.body.emitter.emit(\"_requestRedraw\")}),1e3);this._cleanupCallbacks.push((function(){clearInterval(r)}))}var s=Vt(i=this._onResize).call(i,this);Bh(window,\"resize\",s),this._cleanupCallbacks.push((function(){zh(window,\"resize\",s)}))}}},{key:\"_cleanUp\",value:function(){var t,e,i;Wo(t=Xo(e=er(i=this._cleanupCallbacks).call(i,0)).call(e)).call(t,(function(t){try{t()}catch(t){console.error(t)}}))}},{key:\"_onResize\",value:function(){this.setSize(),this.body.emitter.emit(\"_redraw\")}},{key:\"_getCameraState\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.pixelRatio;!0===this.initialized&&(this.cameraState.previousWidth=this.frame.canvas.width/t,this.cameraState.previousHeight=this.frame.canvas.height/t,this.cameraState.scale=this.body.view.scale,this.cameraState.position=this.DOMtoCanvas({x:.5*this.frame.canvas.width/t,y:.5*this.frame.canvas.height/t}))}},{key:\"_setCameraState\",value:function(){if(void 0!==this.cameraState.scale&&0!==this.frame.canvas.clientWidth&&0!==this.frame.canvas.clientHeight&&0!==this.pixelRatio&&this.cameraState.previousWidth>0&&this.cameraState.previousHeight>0){var t=this.frame.canvas.width/this.pixelRatio/this.cameraState.previousWidth,e=this.frame.canvas.height/this.pixelRatio/this.cameraState.previousHeight,i=this.cameraState.scale;1!=t&&1!=e?i=.5*this.cameraState.scale*(t+e):1!=t?i=this.cameraState.scale*t:1!=e&&(i=this.cameraState.scale*e),this.body.view.scale=i;var n=this.DOMtoCanvas({x:.5*this.frame.canvas.clientWidth,y:.5*this.frame.canvas.clientHeight}),o={x:n.x-this.cameraState.position.x,y:n.y-this.cameraState.position.y};this.body.view.translation.x+=o.x*this.body.view.scale,this.body.view.translation.y+=o.y*this.body.view.scale}}},{key:\"_prepareValue\",value:function(t){if(\"number\"==typeof t)return t+\"px\";if(\"string\"==typeof t){if(-1!==Hr(t).call(t,\"%\")||-1!==Hr(t).call(t,\"px\"))return t;if(-1===Hr(t).call(t,\"%\"))return t+\"px\"}throw new Error(\"Could not use the value supplied for width or height:\"+t)}},{key:\"_create\",value:function(){for(;this.body.container.hasChildNodes();)this.body.container.removeChild(this.body.container.firstChild);if(this.frame=document.createElement(\"div\"),this.frame.className=\"vis-network\",this.frame.style.position=\"relative\",this.frame.style.overflow=\"hidden\",this.frame.tabIndex=0,this.frame.canvas=document.createElement(\"canvas\"),this.frame.canvas.style.position=\"relative\",this.frame.appendChild(this.frame.canvas),this.frame.canvas.getContext)this._setPixelRatio(),this.setTransform();else{var t=document.createElement(\"DIV\");t.style.color=\"red\",t.style.fontWeight=\"bold\",t.style.padding=\"10px\",t.innerText=\"Error: your browser does not support HTML canvas\",this.frame.canvas.appendChild(t)}this.body.container.appendChild(this.frame),this.body.view.scale=1,this.body.view.translation={x:.5*this.frame.canvas.clientWidth,y:.5*this.frame.canvas.clientHeight},this._bindHammer()}},{key:\"_bindHammer\",value:function(){var t=this;void 0!==this.hammer&&this.hammer.destroy(),this.drag={},this.pinch={},this.hammer=new ll(this.frame.canvas),this.hammer.get(\"pinch\").set({enable:!0}),this.hammer.get(\"pan\").set({threshold:5,direction:ll.DIRECTION_ALL}),_p(this.hammer,(function(e){t.body.eventListeners.onTouch(e)})),this.hammer.on(\"tap\",(function(e){t.body.eventListeners.onTap(e)})),this.hammer.on(\"doubletap\",(function(e){t.body.eventListeners.onDoubleTap(e)})),this.hammer.on(\"press\",(function(e){t.body.eventListeners.onHold(e)})),this.hammer.on(\"panstart\",(function(e){t.body.eventListeners.onDragStart(e)})),this.hammer.on(\"panmove\",(function(e){t.body.eventListeners.onDrag(e)})),this.hammer.on(\"panend\",(function(e){t.body.eventListeners.onDragEnd(e)})),this.hammer.on(\"pinch\",(function(e){t.body.eventListeners.onPinch(e)})),this.frame.canvas.addEventListener(\"wheel\",(function(e){t.body.eventListeners.onMouseWheel(e)})),this.frame.canvas.addEventListener(\"mousemove\",(function(e){t.body.eventListeners.onMouseMove(e)})),this.frame.canvas.addEventListener(\"contextmenu\",(function(e){t.body.eventListeners.onContext(e)})),this.hammerFrame=new ll(this.frame),xp(this.hammerFrame,(function(e){t.body.eventListeners.onRelease(e)}))}},{key:\"setSize\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.options.width,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.options.height;t=this._prepareValue(t),e=this._prepareValue(e);var i=!1,n=this.frame.canvas.width,o=this.frame.canvas.height,r=this.pixelRatio;if(this._setPixelRatio(),t!=this.options.width||e!=this.options.height||this.frame.style.width!=t||this.frame.style.height!=e)this._getCameraState(r),this.frame.style.width=t,this.frame.style.height=e,this.frame.canvas.style.width=\"100%\",this.frame.canvas.style.height=\"100%\",this.frame.canvas.width=Math.round(this.frame.canvas.clientWidth*this.pixelRatio),this.frame.canvas.height=Math.round(this.frame.canvas.clientHeight*this.pixelRatio),this.options.width=t,this.options.height=e,this.canvasViewCenter={x:.5*this.frame.clientWidth,y:.5*this.frame.clientHeight},i=!0;else{var s=Math.round(this.frame.canvas.clientWidth*this.pixelRatio),a=Math.round(this.frame.canvas.clientHeight*this.pixelRatio);this.frame.canvas.width===s&&this.frame.canvas.height===a||this._getCameraState(r),this.frame.canvas.width!==s&&(this.frame.canvas.width=s,i=!0),this.frame.canvas.height!==a&&(this.frame.canvas.height=a,i=!0)}return!0===i&&(this.body.emitter.emit(\"resize\",{width:Math.round(this.frame.canvas.width/this.pixelRatio),height:Math.round(this.frame.canvas.height/this.pixelRatio),oldWidth:Math.round(n/this.pixelRatio),oldHeight:Math.round(o/this.pixelRatio)}),this._setCameraState()),this.initialized=!0,i}},{key:\"getContext\",value:function(){return this.frame.canvas.getContext(\"2d\")}},{key:\"_determinePixelRatio\",value:function(){var t=this.getContext();if(void 0===t)throw new Error(\"Could not get canvax context\");var e=1;return\"undefined\"!=typeof window&&(e=window.devicePixelRatio||1),e/(t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1)}},{key:\"_setPixelRatio\",value:function(){this.pixelRatio=this._determinePixelRatio()}},{key:\"setTransform\",value:function(){var t=this.getContext();if(void 0===t)throw new Error(\"Could not get canvax context\");t.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0)}},{key:\"_XconvertDOMtoCanvas\",value:function(t){return(t-this.body.view.translation.x)/this.body.view.scale}},{key:\"_XconvertCanvasToDOM\",value:function(t){return t*this.body.view.scale+this.body.view.translation.x}},{key:\"_YconvertDOMtoCanvas\",value:function(t){return(t-this.body.view.translation.y)/this.body.view.scale}},{key:\"_YconvertCanvasToDOM\",value:function(t){return t*this.body.view.scale+this.body.view.translation.y}},{key:\"canvasToDOM\",value:function(t){return{x:this._XconvertCanvasToDOM(t.x),y:this._YconvertCanvasToDOM(t.y)}}},{key:\"DOMtoCanvas\",value:function(t){return{x:this._XconvertDOMtoCanvas(t.x),y:this._YconvertDOMtoCanvas(t.y)}}}]),t}();function Op(t,e){var i=At({nodes:e,minZoomLevel:Number.MIN_VALUE,maxZoomLevel:1},null!=t?t:{});if(!So(i.nodes))throw new TypeError(\"Nodes has to be an array of ids.\");if(0===i.nodes.length&&(i.nodes=e),!(\"number\"==typeof i.minZoomLevel&&i.minZoomLevel>0))throw new TypeError(\"Min zoom level has to be a number higher than zero.\");if(!(\"number\"==typeof i.maxZoomLevel&&i.minZoomLevel<=i.maxZoomLevel))throw new TypeError(\"Max zoom level has to be a number higher than min zoom level.\");return i}var Cp=function(){function t(e,i){var n,o,r=this;Nn(this,t),this.body=e,this.canvas=i,this.animationSpeed=1/this.renderRefreshRate,this.animationEasingFunction=\"easeInOutQuint\",this.easingTime=0,this.sourceScale=0,this.targetScale=0,this.sourceTranslation=0,this.targetTranslation=0,this.lockedOnNodeId=void 0,this.lockedOnNodeOffset=void 0,this.touchTime=0,this.viewFunction=void 0,this.body.emitter.on(\"fit\",Vt(n=this.fit).call(n,this)),this.body.emitter.on(\"animationFinished\",(function(){r.body.emitter.emit(\"_stopRendering\")})),this.body.emitter.on(\"unlockNode\",Vt(o=this.releaseNode).call(o,this))}return Fn(t,[{key:\"setOptions\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.options=t}},{key:\"fit\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];t=Op(t,this.body.nodeIndices);var i,n,o=this.canvas.frame.canvas.clientWidth,r=this.canvas.frame.canvas.clientHeight;if(0===o||0===r)n=1,i=pp.getRange(this.body.nodes,t.nodes);else if(!0===e){var s=0;for(var a in this.body.nodes)if(Object.prototype.hasOwnProperty.call(this.body.nodes,a)){var h=this.body.nodes[a];!0===h.predefinedPosition&&(s+=1)}if(s>.5*this.body.nodeIndices.length)return void this.fit(t,!1);i=pp.getRange(this.body.nodes,t.nodes);var l=this.body.nodeIndices.length;n=12.662/(l+7.4147)+.0964822;var d=Math.min(o/600,r/600);n*=d}else{this.body.emitter.emit(\"_resizeNodes\"),i=pp.getRange(this.body.nodes,t.nodes);var c=1.1*Math.abs(i.maxX-i.minX),u=1.1*Math.abs(i.maxY-i.minY),f=o/c,p=r/u;n=f<=p?f:p}n>t.maxZoomLevel?n=t.maxZoomLevel:n<t.minZoomLevel&&(n=t.minZoomLevel);var v=pp.findCenter(i),g={position:v,scale:n,animation:t.animation};this.moveTo(g)}},{key:\"focus\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(void 0!==this.body.nodes[t]){var i={x:this.body.nodes[t].x,y:this.body.nodes[t].y};e.position=i,e.lockedOnNode=t,this.moveTo(e)}else console.error(\"Node: \"+t+\" cannot be found.\")}},{key:\"moveTo\",value:function(t){if(void 0!==t){if(null!=t.offset){if(null!=t.offset.x){if(t.offset.x=+t.offset.x,!wd(t.offset.x))throw new TypeError('The option \"offset.x\" has to be a finite number.')}else t.offset.x=0;if(null!=t.offset.y){if(t.offset.y=+t.offset.y,!wd(t.offset.y))throw new TypeError('The option \"offset.y\" has to be a finite number.')}else t.offset.x=0}else t.offset={x:0,y:0};if(null!=t.position){if(null!=t.position.x){if(t.position.x=+t.position.x,!wd(t.position.x))throw new TypeError('The option \"position.x\" has to be a finite number.')}else t.position.x=0;if(null!=t.position.y){if(t.position.y=+t.position.y,!wd(t.position.y))throw new TypeError('The option \"position.y\" has to be a finite number.')}else t.position.x=0}else t.position=this.getViewPosition();if(null!=t.scale){if(t.scale=+t.scale,!(t.scale>0))throw new TypeError('The option \"scale\" has to be a number greater than zero.')}else t.scale=this.body.view.scale;void 0===t.animation&&(t.animation={duration:0}),!1===t.animation&&(t.animation={duration:0}),!0===t.animation&&(t.animation={}),void 0===t.animation.duration&&(t.animation.duration=1e3),void 0===t.animation.easingFunction&&(t.animation.easingFunction=\"easeInOutQuad\"),this.animateView(t)}else t={}}},{key:\"animateView\",value:function(t){if(void 0!==t){this.animationEasingFunction=t.animation.easingFunction,this.releaseNode(),!0===t.locked&&(this.lockedOnNodeId=t.lockedOnNode,this.lockedOnNodeOffset=t.offset),0!=this.easingTime&&this._transitionRedraw(!0),this.sourceScale=this.body.view.scale,this.sourceTranslation=this.body.view.translation,this.targetScale=t.scale,this.body.view.scale=this.targetScale;var e,i,n=this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight}),o=n.x-t.position.x,r=n.y-t.position.y;if(this.targetTranslation={x:this.sourceTranslation.x+o*this.targetScale+t.offset.x,y:this.sourceTranslation.y+r*this.targetScale+t.offset.y},0===t.animation.duration)if(null!=this.lockedOnNodeId)this.viewFunction=Vt(e=this._lockedRedraw).call(e,this),this.body.emitter.on(\"initRedraw\",this.viewFunction);else this.body.view.scale=this.targetScale,this.body.view.translation=this.targetTranslation,this.body.emitter.emit(\"_requestRedraw\");else this.animationSpeed=1/(60*t.animation.duration*.001)||1/60,this.animationEasingFunction=t.animation.easingFunction,this.viewFunction=Vt(i=this._transitionRedraw).call(i,this),this.body.emitter.on(\"initRedraw\",this.viewFunction),this.body.emitter.emit(\"_startRendering\")}}},{key:\"_lockedRedraw\",value:function(){var t=this.body.nodes[this.lockedOnNodeId].x,e=this.body.nodes[this.lockedOnNodeId].y,i=this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight}),n=i.x-t,o=i.y-e,r=this.body.view.translation,s={x:r.x+n*this.body.view.scale+this.lockedOnNodeOffset.x,y:r.y+o*this.body.view.scale+this.lockedOnNodeOffset.y};this.body.view.translation=s}},{key:\"releaseNode\",value:function(){void 0!==this.lockedOnNodeId&&void 0!==this.viewFunction&&(this.body.emitter.off(\"initRedraw\",this.viewFunction),this.lockedOnNodeId=void 0,this.lockedOnNodeOffset=void 0)}},{key:\"_transitionRedraw\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.easingTime+=this.animationSpeed,this.easingTime=!0===t?1:this.easingTime;var e=Zh[this.animationEasingFunction](this.easingTime);if(this.body.view.scale=this.sourceScale+(this.targetScale-this.sourceScale)*e,this.body.view.translation={x:this.sourceTranslation.x+(this.targetTranslation.x-this.sourceTranslation.x)*e,y:this.sourceTranslation.y+(this.targetTranslation.y-this.sourceTranslation.y)*e},this.easingTime>=1){var i;if(this.body.emitter.off(\"initRedraw\",this.viewFunction),this.easingTime=0,null!=this.lockedOnNodeId)this.viewFunction=Vt(i=this._lockedRedraw).call(i,this),this.body.emitter.on(\"initRedraw\",this.viewFunction);this.body.emitter.emit(\"animationFinished\")}}},{key:\"getScale\",value:function(){return this.body.view.scale}},{key:\"getViewPosition\",value:function(){return this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight})}}]),t}();function Sp(t){var e,i=t&&t.preventDefault||!1,n=t&&t.container||window,o={},r={keydown:{},keyup:{}},s={};for(e=97;e<=122;e++)s[String.fromCharCode(e)]={code:e-97+65,shift:!1};for(e=65;e<=90;e++)s[String.fromCharCode(e)]={code:e,shift:!0};for(e=0;e<=9;e++)s[\"\"+e]={code:48+e,shift:!1};for(e=1;e<=12;e++)s[\"F\"+e]={code:111+e,shift:!1};for(e=0;e<=9;e++)s[\"num\"+e]={code:96+e,shift:!1};s[\"num*\"]={code:106,shift:!1},s[\"num+\"]={code:107,shift:!1},s[\"num-\"]={code:109,shift:!1},s[\"num/\"]={code:111,shift:!1},s[\"num.\"]={code:110,shift:!1},s.left={code:37,shift:!1},s.up={code:38,shift:!1},s.right={code:39,shift:!1},s.down={code:40,shift:!1},s.space={code:32,shift:!1},s.enter={code:13,shift:!1},s.shift={code:16,shift:void 0},s.esc={code:27,shift:!1},s.backspace={code:8,shift:!1},s.tab={code:9,shift:!1},s.ctrl={code:17,shift:!1},s.alt={code:18,shift:!1},s.delete={code:46,shift:!1},s.pageup={code:33,shift:!1},s.pagedown={code:34,shift:!1},s[\"=\"]={code:187,shift:!1},s[\"-\"]={code:189,shift:!1},s[\"]\"]={code:221,shift:!1},s[\"[\"]={code:219,shift:!1};var a=function(t){l(t,\"keydown\")},h=function(t){l(t,\"keyup\")},l=function(t,e){if(void 0!==r[e][t.keyCode]){for(var n=r[e][t.keyCode],o=0;o<n.length;o++)(void 0===n[o].shift||1==n[o].shift&&1==t.shiftKey||0==n[o].shift&&0==t.shiftKey)&&n[o].fn(t);1==i&&t.preventDefault()}};return o.bind=function(t,e,i){if(void 0===i&&(i=\"keydown\"),void 0===s[t])throw new Error(\"unsupported key: \"+t);void 0===r[i][s[t].code]&&(r[i][s[t].code]=[]),r[i][s[t].code].push({fn:e,shift:s[t].shift})},o.bindAll=function(t,e){for(var i in void 0===e&&(e=\"keydown\"),s)s.hasOwnProperty(i)&&o.bind(i,t,e)},o.getKey=function(t){for(var e in s)if(s.hasOwnProperty(e)){if(1==t.shiftKey&&1==s[e].shift&&t.keyCode==s[e].code)return e;if(0==t.shiftKey&&0==s[e].shift&&t.keyCode==s[e].code)return e;if(t.keyCode==s[e].code&&\"shift\"==e)return e}return\"unknown key, currently not supported\"},o.unbind=function(t,e,i){if(void 0===i&&(i=\"keydown\"),void 0===s[t])throw new Error(\"unsupported key: \"+t);if(void 0!==e){var n=[],o=r[i][s[t].code];if(void 0!==o)for(var a=0;a<o.length;a++)o[a].fn==e&&o[a].shift==s[t].shift||n.push(r[i][s[t].code][a]);r[i][s[t].code]=n}else r[i][s[t].code]=[]},o.reset=function(){r={keydown:{},keyup:{}}},o.destroy=function(){r={keydown:{},keyup:{}},n.removeEventListener(\"keydown\",a,!0),n.removeEventListener(\"keyup\",h,!0)},n.addEventListener(\"keydown\",a,!0),n.addEventListener(\"keyup\",h,!0),o}var Tp=Object.freeze({__proto__:null,default:Sp}),Mp=function(){function t(e,i){var n=this;Nn(this,t),this.body=e,this.canvas=i,this.iconsCreated=!1,this.navigationHammers=[],this.boundFunctions={},this.touchTime=0,this.activated=!1,this.body.emitter.on(\"activate\",(function(){n.activated=!0,n.configureKeyboardBindings()})),this.body.emitter.on(\"deactivate\",(function(){n.activated=!1,n.configureKeyboardBindings()})),this.body.emitter.on(\"destroy\",(function(){void 0!==n.keycharm&&n.keycharm.destroy()})),this.options={}}return Fn(t,[{key:\"setOptions\",value:function(t){void 0!==t&&(this.options=t,this.create())}},{key:\"create\",value:function(){!0===this.options.navigationButtons?!1===this.iconsCreated&&this.loadNavigationElements():!0===this.iconsCreated&&this.cleanNavigation(),this.configureKeyboardBindings()}},{key:\"cleanNavigation\",value:function(){if(0!=this.navigationHammers.length){for(var t=0;t<this.navigationHammers.length;t++)this.navigationHammers[t].destroy();this.navigationHammers=[]}this.navigationDOM&&this.navigationDOM.wrapper&&this.navigationDOM.wrapper.parentNode&&this.navigationDOM.wrapper.parentNode.removeChild(this.navigationDOM.wrapper),this.iconsCreated=!1}},{key:\"loadNavigationElements\",value:function(){var t=this;this.cleanNavigation(),this.navigationDOM={};var e=[\"up\",\"down\",\"left\",\"right\",\"zoomIn\",\"zoomOut\",\"zoomExtends\"],i=[\"_moveUp\",\"_moveDown\",\"_moveLeft\",\"_moveRight\",\"_zoomIn\",\"_zoomOut\",\"_fit\"];this.navigationDOM.wrapper=document.createElement(\"div\"),this.navigationDOM.wrapper.className=\"vis-navigation\",this.canvas.frame.appendChild(this.navigationDOM.wrapper);for(var n=0;n<e.length;n++){this.navigationDOM[e[n]]=document.createElement(\"div\"),this.navigationDOM[e[n]].className=\"vis-button vis-\"+e[n],this.navigationDOM.wrapper.appendChild(this.navigationDOM[e[n]]);var o,r,s=new ll(this.navigationDOM[e[n]]);if(\"_fit\"===i[n])_p(s,Vt(o=this._fit).call(o,this));else _p(s,Vt(r=this.bindToRedraw).call(r,this,i[n]));this.navigationHammers.push(s)}var a=new ll(this.canvas.frame);xp(a,(function(){t._stopMovement()})),this.navigationHammers.push(a),this.iconsCreated=!0}},{key:\"bindToRedraw\",value:function(t){var e;void 0===this.boundFunctions[t]&&(this.boundFunctions[t]=Vt(e=this[t]).call(e,this),this.body.emitter.on(\"initRedraw\",this.boundFunctions[t]),this.body.emitter.emit(\"_startRendering\"))}},{key:\"unbindFromRedraw\",value:function(t){void 0!==this.boundFunctions[t]&&(this.body.emitter.off(\"initRedraw\",this.boundFunctions[t]),this.body.emitter.emit(\"_stopRendering\"),delete this.boundFunctions[t])}},{key:\"_fit\",value:function(){(new Date).valueOf()-this.touchTime>700&&(this.body.emitter.emit(\"fit\",{duration:700}),this.touchTime=(new Date).valueOf())}},{key:\"_stopMovement\",value:function(){for(var t in this.boundFunctions)Object.prototype.hasOwnProperty.call(this.boundFunctions,t)&&(this.body.emitter.off(\"initRedraw\",this.boundFunctions[t]),this.body.emitter.emit(\"_stopRendering\"));this.boundFunctions={}}},{key:\"_moveUp\",value:function(){this.body.view.translation.y+=this.options.keyboard.speed.y}},{key:\"_moveDown\",value:function(){this.body.view.translation.y-=this.options.keyboard.speed.y}},{key:\"_moveLeft\",value:function(){this.body.view.translation.x+=this.options.keyboard.speed.x}},{key:\"_moveRight\",value:function(){this.body.view.translation.x-=this.options.keyboard.speed.x}},{key:\"_zoomIn\",value:function(){var t=this.body.view.scale,e=this.body.view.scale*(1+this.options.keyboard.speed.zoom),i=this.body.view.translation,n=e/t,o=(1-n)*this.canvas.canvasViewCenter.x+i.x*n,r=(1-n)*this.canvas.canvasViewCenter.y+i.y*n;this.body.view.scale=e,this.body.view.translation={x:o,y:r},this.body.emitter.emit(\"zoom\",{direction:\"+\",scale:this.body.view.scale,pointer:null})}},{key:\"_zoomOut\",value:function(){var t=this.body.view.scale,e=this.body.view.scale/(1+this.options.keyboard.speed.zoom),i=this.body.view.translation,n=e/t,o=(1-n)*this.canvas.canvasViewCenter.x+i.x*n,r=(1-n)*this.canvas.canvasViewCenter.y+i.y*n;this.body.view.scale=e,this.body.view.translation={x:o,y:r},this.body.emitter.emit(\"zoom\",{direction:\"-\",scale:this.body.view.scale,pointer:null})}},{key:\"configureKeyboardBindings\",value:function(){var t,e,i,n,o,r,s,a,h,l,d,c,u,f,p,v,g,y,m,b,w,k,_,x,E=this;(void 0!==this.keycharm&&this.keycharm.destroy(),!0===this.options.keyboard.enabled)&&(!0===this.options.keyboard.bindToWindow?this.keycharm=Sp({container:window,preventDefault:!0}):this.keycharm=Sp({container:this.canvas.frame,preventDefault:!0}),this.keycharm.reset(),!0===this.activated&&(Vt(t=this.keycharm).call(t,\"up\",(function(){E.bindToRedraw(\"_moveUp\")}),\"keydown\"),Vt(e=this.keycharm).call(e,\"down\",(function(){E.bindToRedraw(\"_moveDown\")}),\"keydown\"),Vt(i=this.keycharm).call(i,\"left\",(function(){E.bindToRedraw(\"_moveLeft\")}),\"keydown\"),Vt(n=this.keycharm).call(n,\"right\",(function(){E.bindToRedraw(\"_moveRight\")}),\"keydown\"),Vt(o=this.keycharm).call(o,\"=\",(function(){E.bindToRedraw(\"_zoomIn\")}),\"keydown\"),Vt(r=this.keycharm).call(r,\"num+\",(function(){E.bindToRedraw(\"_zoomIn\")}),\"keydown\"),Vt(s=this.keycharm).call(s,\"num-\",(function(){E.bindToRedraw(\"_zoomOut\")}),\"keydown\"),Vt(a=this.keycharm).call(a,\"-\",(function(){E.bindToRedraw(\"_zoomOut\")}),\"keydown\"),Vt(h=this.keycharm).call(h,\"[\",(function(){E.bindToRedraw(\"_zoomOut\")}),\"keydown\"),Vt(l=this.keycharm).call(l,\"]\",(function(){E.bindToRedraw(\"_zoomIn\")}),\"keydown\"),Vt(d=this.keycharm).call(d,\"pageup\",(function(){E.bindToRedraw(\"_zoomIn\")}),\"keydown\"),Vt(c=this.keycharm).call(c,\"pagedown\",(function(){E.bindToRedraw(\"_zoomOut\")}),\"keydown\"),Vt(u=this.keycharm).call(u,\"up\",(function(){E.unbindFromRedraw(\"_moveUp\")}),\"keyup\"),Vt(f=this.keycharm).call(f,\"down\",(function(){E.unbindFromRedraw(\"_moveDown\")}),\"keyup\"),Vt(p=this.keycharm).call(p,\"left\",(function(){E.unbindFromRedraw(\"_moveLeft\")}),\"keyup\"),Vt(v=this.keycharm).call(v,\"right\",(function(){E.unbindFromRedraw(\"_moveRight\")}),\"keyup\"),Vt(g=this.keycharm).call(g,\"=\",(function(){E.unbindFromRedraw(\"_zoomIn\")}),\"keyup\"),Vt(y=this.keycharm).call(y,\"num+\",(function(){E.unbindFromRedraw(\"_zoomIn\")}),\"keyup\"),Vt(m=this.keycharm).call(m,\"num-\",(function(){E.unbindFromRedraw(\"_zoomOut\")}),\"keyup\"),Vt(b=this.keycharm).call(b,\"-\",(function(){E.unbindFromRedraw(\"_zoomOut\")}),\"keyup\"),Vt(w=this.keycharm).call(w,\"[\",(function(){E.unbindFromRedraw(\"_zoomOut\")}),\"keyup\"),Vt(k=this.keycharm).call(k,\"]\",(function(){E.unbindFromRedraw(\"_zoomIn\")}),\"keyup\"),Vt(_=this.keycharm).call(_,\"pageup\",(function(){E.unbindFromRedraw(\"_zoomIn\")}),\"keyup\"),Vt(x=this.keycharm).call(x,\"pagedown\",(function(){E.unbindFromRedraw(\"_zoomOut\")}),\"keyup\")))}}]),t}();function Pp(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return Dp(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Dp(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function Dp(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}var Ip=function(){function t(e,i,n){var o,r,s,a,h,l,d,c,u,f,p,v,g;Nn(this,t),this.body=e,this.canvas=i,this.selectionHandler=n,this.navigationHandler=new Mp(e,i),this.body.eventListeners.onTap=Vt(o=this.onTap).call(o,this),this.body.eventListeners.onTouch=Vt(r=this.onTouch).call(r,this),this.body.eventListeners.onDoubleTap=Vt(s=this.onDoubleTap).call(s,this),this.body.eventListeners.onHold=Vt(a=this.onHold).call(a,this),this.body.eventListeners.onDragStart=Vt(h=this.onDragStart).call(h,this),this.body.eventListeners.onDrag=Vt(l=this.onDrag).call(l,this),this.body.eventListeners.onDragEnd=Vt(d=this.onDragEnd).call(d,this),this.body.eventListeners.onMouseWheel=Vt(c=this.onMouseWheel).call(c,this),this.body.eventListeners.onPinch=Vt(u=this.onPinch).call(u,this),this.body.eventListeners.onMouseMove=Vt(f=this.onMouseMove).call(f,this),this.body.eventListeners.onRelease=Vt(p=this.onRelease).call(p,this),this.body.eventListeners.onContext=Vt(v=this.onContext).call(v,this),this.touchTime=0,this.drag={},this.pinch={},this.popup=void 0,this.popupObj=void 0,this.popupTimer=void 0,this.body.functions.getPointer=Vt(g=this.getPointer).call(g,this),this.options={},this.defaultOptions={dragNodes:!0,dragView:!0,hover:!1,keyboard:{enabled:!1,speed:{x:10,y:10,zoom:.02},bindToWindow:!0,autoFocus:!0},navigationButtons:!1,tooltipDelay:300,zoomView:!0,zoomSpeed:1},At(this.options,this.defaultOptions),this.bindEventListeners()}return Fn(t,[{key:\"bindEventListeners\",value:function(){var t=this;this.body.emitter.on(\"destroy\",(function(){clearTimeout(t.popupTimer),delete t.body.functions.getPointer}))}},{key:\"setOptions\",value:function(t){if(void 0!==t){Oh([\"hideEdgesOnDrag\",\"hideEdgesOnZoom\",\"hideNodesOnDrag\",\"keyboard\",\"multiselect\",\"selectable\",\"selectConnectedEdges\"],this.options,t),$h(this.options,t,\"keyboard\"),t.tooltip&&(At(this.options.tooltip,t.tooltip),t.tooltip.color&&(this.options.tooltip.color=Rh(t.tooltip.color)))}this.navigationHandler.setOptions(this.options)}},{key:\"getPointer\",value:function(t){return{x:t.x-Mh(this.canvas.frame.canvas),y:t.y-Ph(this.canvas.frame.canvas)}}},{key:\"onTouch\",value:function(t){(new Date).valueOf()-this.touchTime>50&&(this.drag.pointer=this.getPointer(t.center),this.drag.pinched=!1,this.pinch.scale=this.body.view.scale,this.touchTime=(new Date).valueOf())}},{key:\"onTap\",value:function(t){var e=this.getPointer(t.center),i=this.selectionHandler.options.multiselect&&(t.changedPointers[0].ctrlKey||t.changedPointers[0].metaKey);this.checkSelectionChanges(e,i),this.selectionHandler.commitAndEmit(e,t),this.selectionHandler.generateClickEvent(\"click\",t,e)}},{key:\"onDoubleTap\",value:function(t){var e=this.getPointer(t.center);this.selectionHandler.generateClickEvent(\"doubleClick\",t,e)}},{key:\"onHold\",value:function(t){var e=this.getPointer(t.center),i=this.selectionHandler.options.multiselect;this.checkSelectionChanges(e,i),this.selectionHandler.commitAndEmit(e,t),this.selectionHandler.generateClickEvent(\"click\",t,e),this.selectionHandler.generateClickEvent(\"hold\",t,e)}},{key:\"onRelease\",value:function(t){if((new Date).valueOf()-this.touchTime>10){var e=this.getPointer(t.center);this.selectionHandler.generateClickEvent(\"release\",t,e),this.touchTime=(new Date).valueOf()}}},{key:\"onContext\",value:function(t){var e=this.getPointer({x:t.clientX,y:t.clientY});this.selectionHandler.generateClickEvent(\"oncontext\",t,e)}},{key:\"checkSelectionChanges\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];!0===e?this.selectionHandler.selectAdditionalOnPoint(t):this.selectionHandler.selectOnPoint(t)}},{key:\"_determineDifference\",value:function(t,e){var i=function(t,e){for(var i=[],n=0;n<t.length;n++){var o=t[n];-1===Hr(e).call(e,o)&&i.push(o)}return i};return{nodes:i(t.nodes,e.nodes),edges:i(t.edges,e.edges)}}},{key:\"onDragStart\",value:function(t){if(!this.drag.dragging){void 0===this.drag.pointer&&this.onTouch(t);var e=this.selectionHandler.getNodeAt(this.drag.pointer);if(this.drag.dragging=!0,this.drag.selection=[],this.drag.translation=At({},this.body.view.translation),this.drag.nodeId=void 0,t.srcEvent.shiftKey){this.body.selectionBox.show=!0;var i=this.getPointer(t.center);this.body.selectionBox.position.start={x:this.canvas._XconvertDOMtoCanvas(i.x),y:this.canvas._YconvertDOMtoCanvas(i.y)},this.body.selectionBox.position.end={x:this.canvas._XconvertDOMtoCanvas(i.x),y:this.canvas._YconvertDOMtoCanvas(i.y)}}if(void 0!==e&&!0===this.options.dragNodes){this.drag.nodeId=e.id,!1===e.isSelected()&&(this.selectionHandler.unselectAll(),this.selectionHandler.selectObject(e)),this.selectionHandler.generateClickEvent(\"dragStart\",t,this.drag.pointer);var n,o=Pp(this.selectionHandler.getSelectedNodes());try{for(o.s();!(n=o.n()).done;){var r=n.value,s={id:r.id,node:r,x:r.x,y:r.y,xFixed:r.options.fixed.x,yFixed:r.options.fixed.y};r.options.fixed.x=!0,r.options.fixed.y=!0,this.drag.selection.push(s)}}catch(t){o.e(t)}finally{o.f()}}else this.selectionHandler.generateClickEvent(\"dragStart\",t,this.drag.pointer,void 0,!0)}}},{key:\"onDrag\",value:function(t){var e=this;if(!0!==this.drag.pinched){this.body.emitter.emit(\"unlockNode\");var i=this.getPointer(t.center),n=this.drag.selection;if(n&&n.length&&!0===this.options.dragNodes){this.selectionHandler.generateClickEvent(\"dragging\",t,i);var o=i.x-this.drag.pointer.x,r=i.y-this.drag.pointer.y;Wo(n).call(n,(function(t){var i=t.node;!1===t.xFixed&&(i.x=e.canvas._XconvertDOMtoCanvas(e.canvas._XconvertCanvasToDOM(t.x)+o)),!1===t.yFixed&&(i.y=e.canvas._YconvertDOMtoCanvas(e.canvas._YconvertCanvasToDOM(t.y)+r))})),this.body.emitter.emit(\"startSimulation\")}else{if(t.srcEvent.shiftKey){if(this.selectionHandler.generateClickEvent(\"dragging\",t,i,void 0,!0),void 0===this.drag.pointer)return void this.onDragStart(t);this.body.selectionBox.position.end={x:this.canvas._XconvertDOMtoCanvas(i.x),y:this.canvas._YconvertDOMtoCanvas(i.y)},this.body.emitter.emit(\"_requestRedraw\")}if(!0===this.options.dragView&&!t.srcEvent.shiftKey){if(this.selectionHandler.generateClickEvent(\"dragging\",t,i,void 0,!0),void 0===this.drag.pointer)return void this.onDragStart(t);var s=i.x-this.drag.pointer.x,a=i.y-this.drag.pointer.y;this.body.view.translation={x:this.drag.translation.x+s,y:this.drag.translation.y+a},this.body.emitter.emit(\"_requestRedraw\")}}}}},{key:\"onDragEnd\",value:function(t){var e=this;if(this.drag.dragging=!1,this.body.selectionBox.show){var i;this.body.selectionBox.show=!1;var n=this.body.selectionBox.position,o={minX:Math.min(n.start.x,n.end.x),minY:Math.min(n.start.y,n.end.y),maxX:Math.max(n.start.x,n.end.x),maxY:Math.max(n.start.y,n.end.y)},r=mr(i=this.body.nodeIndices).call(i,(function(t){var i=e.body.nodes[t];return i.x>=o.minX&&i.x<=o.maxX&&i.y>=o.minY&&i.y<=o.maxY}));Wo(r).call(r,(function(t){return e.selectionHandler.selectObject(e.body.nodes[t])}));var s=this.getPointer(t.center);this.selectionHandler.commitAndEmit(s,t),this.selectionHandler.generateClickEvent(\"dragEnd\",t,this.getPointer(t.center),void 0,!0),this.body.emitter.emit(\"_requestRedraw\")}else{var a=this.drag.selection;a&&a.length?(Wo(a).call(a,(function(t){t.node.options.fixed.x=t.xFixed,t.node.options.fixed.y=t.yFixed})),this.selectionHandler.generateClickEvent(\"dragEnd\",t,this.getPointer(t.center)),this.body.emitter.emit(\"startSimulation\")):(this.selectionHandler.generateClickEvent(\"dragEnd\",t,this.getPointer(t.center),void 0,!0),this.body.emitter.emit(\"_requestRedraw\"))}}},{key:\"onPinch\",value:function(t){var e=this.getPointer(t.center);this.drag.pinched=!0,void 0===this.pinch.scale&&(this.pinch.scale=1);var i=this.pinch.scale*t.scale;this.zoom(i,e)}},{key:\"zoom\",value:function(t,e){if(!0===this.options.zoomView){var i=this.body.view.scale;t<1e-5&&(t=1e-5),t>10&&(t=10);var n=void 0;void 0!==this.drag&&!0===this.drag.dragging&&(n=this.canvas.DOMtoCanvas(this.drag.pointer));var o=this.body.view.translation,r=t/i,s=(1-r)*e.x+o.x*r,a=(1-r)*e.y+o.y*r;if(this.body.view.scale=t,this.body.view.translation={x:s,y:a},null!=n){var h=this.canvas.canvasToDOM(n);this.drag.pointer.x=h.x,this.drag.pointer.y=h.y}this.body.emitter.emit(\"_requestRedraw\"),i<t?this.body.emitter.emit(\"zoom\",{direction:\"+\",scale:this.body.view.scale,pointer:e}):this.body.emitter.emit(\"zoom\",{direction:\"-\",scale:this.body.view.scale,pointer:e})}}},{key:\"onMouseWheel\",value:function(t){if(!0===this.options.zoomView){if(0!==t.deltaY){var e=this.body.view.scale;e*=1+(t.deltaY<0?1:-1)*(.1*this.options.zoomSpeed);var i=this.getPointer({x:t.clientX,y:t.clientY});this.zoom(e,i)}t.preventDefault()}}},{key:\"onMouseMove\",value:function(t){var e=this,i=this.getPointer({x:t.clientX,y:t.clientY}),n=!1;void 0!==this.popup&&(!1===this.popup.hidden&&this._checkHidePopup(i),!1===this.popup.hidden&&(n=!0,this.popup.setPosition(i.x+3,i.y-5),this.popup.show())),this.options.keyboard.autoFocus&&!1===this.options.keyboard.bindToWindow&&!0===this.options.keyboard.enabled&&this.canvas.frame.focus(),!1===n&&(void 0!==this.popupTimer&&(clearInterval(this.popupTimer),this.popupTimer=void 0),this.drag.dragging||(this.popupTimer=rs((function(){return e._checkShowPopup(i)}),this.options.tooltipDelay))),!0===this.options.hover&&this.selectionHandler.hoverObject(t,i)}},{key:\"_checkShowPopup\",value:function(t){var e=this.canvas._XconvertDOMtoCanvas(t.x),i=this.canvas._YconvertDOMtoCanvas(t.y),n={left:e,top:i,right:e,bottom:i},o=void 0===this.popupObj?void 0:this.popupObj.id,r=!1,s=\"node\";if(void 0===this.popupObj){for(var a,h=this.body.nodeIndices,l=this.body.nodes,d=[],c=0;c<h.length;c++)!0===(a=l[h[c]]).isOverlappingWith(n)&&(r=!0,void 0!==a.getTitle()&&d.push(h[c]));d.length>0&&(this.popupObj=l[d[d.length-1]],r=!0)}if(void 0===this.popupObj&&!1===r){for(var u,f=this.body.edgeIndices,p=this.body.edges,v=[],g=0;g<f.length;g++)!0===(u=p[f[g]]).isOverlappingWith(n)&&!0===u.connected&&void 0!==u.getTitle()&&v.push(f[g]);v.length>0&&(this.popupObj=p[v[v.length-1]],s=\"edge\")}void 0!==this.popupObj?this.popupObj.id!==o&&(void 0===this.popup&&(this.popup=new dl(this.canvas.frame)),this.popup.popupTargetType=s,this.popup.popupTargetId=this.popupObj.id,this.popup.setPosition(t.x+3,t.y-5),this.popup.setText(this.popupObj.getTitle()),this.popup.show(),this.body.emitter.emit(\"showPopup\",this.popupObj.id)):void 0!==this.popup&&(this.popup.hide(),this.body.emitter.emit(\"hidePopup\"))}},{key:\"_checkHidePopup\",value:function(t){var e=this.selectionHandler._pointerToPositionObject(t),i=!1;if(\"node\"===this.popup.popupTargetType){if(void 0!==this.body.nodes[this.popup.popupTargetId]&&!0===(i=this.body.nodes[this.popup.popupTargetId].isOverlappingWith(e))){var n=this.selectionHandler.getNodeAt(t);i=void 0!==n&&n.id===this.popup.popupTargetId}}else void 0===this.selectionHandler.getNodeAt(t)&&void 0!==this.body.edges[this.popup.popupTargetId]&&(i=this.body.edges[this.popup.popupTargetId].isOverlappingWith(e));!1===i&&(this.popupObj=void 0,this.popup.hide(),this.body.emitter.emit(\"hidePopup\"))}}]),t}(),Bp=Jl.getWeakData,zp=we.set,Np=we.getterFor,Ap=Gi.find,Fp=Gi.findIndex,jp=0,Rp=function(t){return t.frozen||(t.frozen=new Lp)},Lp=function(){this.entries=[]},Hp=function(t,e){return Ap(t.entries,(function(t){return t[0]===e}))};Lp.prototype={get:function(t){var e=Hp(this,t);if(e)return e[1]},has:function(t){return!!Hp(this,t)},set:function(t,e){var i=Hp(this,t);i?i[1]=e:this.entries.push([t,e])},delete:function(t){var e=Fp(this.entries,(function(e){return e[0]===t}));return~e&&this.entries.splice(e,1),!!~e}};var Wp={getConstructor:function(t,e,i,n){var o=t((function(t,r){id(t,o,e),zp(t,{type:e,id:jp++,frozen:void 0}),null!=r&&ed(r,t[n],{that:t,AS_ENTRIES:i})})),r=Np(e),s=function(t,e,i){var n=r(t),o=Bp(dt(e),!0);return!0===o?Rp(n).set(e,i):o[n.id]=i,t};return hd(o.prototype,{delete:function(t){var e=r(this);if(!w(t))return!1;var i=Bp(t);return!0===i?Rp(e).delete(t):i&&j(i,e.id)&&delete i[e.id]},has:function(t){var e=r(this);if(!w(t))return!1;var i=Bp(t);return!0===i?Rp(e).has(t):i&&j(i,e.id)}}),hd(o.prototype,i?{get:function(t){var e=r(this);if(w(t)){var i=Bp(t);return!0===i?Rp(e).get(t):i?i[e.id]:void 0}},set:function(t,e){return s(this,t,e)}}:{add:function(t){return s(this,t,!0)}}),o}};n((function(t){var e,i=we.enforce,n=!a.ActiveXObject&&\"ActiveXObject\"in a,o=Object.isExtensible,r=function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}},s=t.exports=ad(\"WeakMap\",r,Wp);if(ae&&n){e=Wp.getConstructor(r,\"WeakMap\",!0),Jl.enable();var h=s.prototype,l=h.delete,d=h.has,c=h.get,u=h.set;hd(h,{delete:function(t){if(w(t)&&!o(t)){var n=i(this);return n.frozen||(n.frozen=new e),l.call(this,t)||n.frozen.delete(t)}return l.call(this,t)},has:function(t){if(w(t)&&!o(t)){var n=i(this);return n.frozen||(n.frozen=new e),d.call(this,t)||n.frozen.has(t)}return d.call(this,t)},get:function(t){if(w(t)&&!o(t)){var n=i(this);return n.frozen||(n.frozen=new e),d.call(this,t)?c.call(this,t):n.frozen.get(t)}return c.call(this,t)},set:function(t,n){if(w(t)&&!o(t)){var r=i(this);r.frozen||(r.frozen=new e),d.call(this,t)?u.call(this,t,n):r.frozen.set(t,n)}else u.call(this,t,n);return this}})}}));var qp,Vp,Up,Yp,Xp,Gp=k.WeakMap;function Kp(t,e,i,n){if(\"a\"===i&&!n)throw new TypeError(\"Private accessor was defined without a getter\");if(\"function\"==typeof e?t!==e||!n:!e.has(t))throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");return\"m\"===i?n:\"a\"===i?n.call(t):n?n.value:e.get(t)}function $p(t,e,i,n,o){if(\"m\"===n)throw new TypeError(\"Private method is not writable\");if(\"a\"===n&&!o)throw new TypeError(\"Private accessor was defined without a setter\");if(\"function\"==typeof e?t!==e||!o:!e.has(t))throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");return\"a\"===n?o.call(t,i):o?o.value=i:e.set(t,i),i}function Zp(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return Qp(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Qp(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function Qp(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}function Jp(t,e){var i,n=new ec,o=Zp(e);try{for(o.s();!(i=o.n()).done;){var r=i.value;t.has(r)||n.add(r)}}catch(t){o.e(t)}finally{o.f()}return n}var tv=function(){function t(){Nn(this,t),qp.set(this,new ec),Vp.set(this,new ec)}return Fn(t,[{key:\"size\",get:function(){return Kp(this,Vp,\"f\").size}},{key:\"add\",value:function(){for(var t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];for(var n=0,o=e;n<o.length;n++){var r=o[n];Kp(this,Vp,\"f\").add(r)}}},{key:\"delete\",value:function(){for(var t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];for(var n=0,o=e;n<o.length;n++){var r=o[n];Kp(this,Vp,\"f\").delete(r)}}},{key:\"clear\",value:function(){Kp(this,Vp,\"f\").clear()}},{key:\"getSelection\",value:function(){return wo(Kp(this,Vp,\"f\"))}},{key:\"getChanges\",value:function(){return{added:wo(Jp(Kp(this,qp,\"f\"),Kp(this,Vp,\"f\"))),deleted:wo(Jp(Kp(this,Vp,\"f\"),Kp(this,qp,\"f\"))),previous:wo(new ec(Kp(this,qp,\"f\"))),current:wo(new ec(Kp(this,Vp,\"f\")))}}},{key:\"commit\",value:function(){var t=this.getChanges();$p(this,qp,Kp(this,Vp,\"f\"),\"f\"),$p(this,Vp,new ec(Kp(this,qp,\"f\")),\"f\");var e,i=Zp(t.added);try{for(i.s();!(e=i.n()).done;){e.value.select()}}catch(t){i.e(t)}finally{i.f()}var n,o=Zp(t.deleted);try{for(o.s();!(n=o.n()).done;){n.value.unselect()}}catch(t){o.e(t)}finally{o.f()}return t}}]),t}();qp=new Gp,Vp=new Gp;var ev=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:function(){};Nn(this,t),Up.set(this,new tv),Yp.set(this,new tv),Xp.set(this,void 0),$p(this,Xp,e,\"f\")}return Fn(t,[{key:\"sizeNodes\",get:function(){return Kp(this,Up,\"f\").size}},{key:\"sizeEdges\",get:function(){return Kp(this,Yp,\"f\").size}},{key:\"getNodes\",value:function(){return Kp(this,Up,\"f\").getSelection()}},{key:\"getEdges\",value:function(){return Kp(this,Yp,\"f\").getSelection()}},{key:\"addNodes\",value:function(){var t;(t=Kp(this,Up,\"f\")).add.apply(t,arguments)}},{key:\"addEdges\",value:function(){var t;(t=Kp(this,Yp,\"f\")).add.apply(t,arguments)}},{key:\"deleteNodes\",value:function(t){Kp(this,Up,\"f\").delete(t)}},{key:\"deleteEdges\",value:function(t){Kp(this,Yp,\"f\").delete(t)}},{key:\"clear\",value:function(){Kp(this,Up,\"f\").clear(),Kp(this,Yp,\"f\").clear()}},{key:\"commit\",value:function(){for(var t,e,i={nodes:Kp(this,Up,\"f\").commit(),edges:Kp(this,Yp,\"f\").commit()},n=arguments.length,o=new Array(n),r=0;r<n;r++)o[r]=arguments[r];return(t=Kp(this,Xp,\"f\")).call.apply(t,Eo(e=[this,i]).call(e,o)),i}}]),t}();function iv(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return nv(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return nv(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function nv(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}Up=new Gp,Yp=new Gp,Xp=new Gp;var ov=function(){function t(e,i){var n=this;Nn(this,t),this.body=e,this.canvas=i,this._selectionAccumulator=new ev,this.hoverObj={nodes:{},edges:{}},this.options={},this.defaultOptions={multiselect:!1,selectable:!0,selectConnectedEdges:!0,hoverConnectedEdges:!0},At(this.options,this.defaultOptions),this.body.emitter.on(\"_dataChanged\",(function(){n.updateSelection()}))}return Fn(t,[{key:\"setOptions\",value:function(t){if(void 0!==t){Eh([\"multiselect\",\"hoverConnectedEdges\",\"selectable\",\"selectConnectedEdges\"],this.options,t)}}},{key:\"selectOnPoint\",value:function(t){var e=!1;if(!0===this.options.selectable){var i=this.getNodeAt(t)||this.getEdgeAt(t);this.unselectAll(),void 0!==i&&(e=this.selectObject(i)),this.body.emitter.emit(\"_requestRedraw\")}return e}},{key:\"selectAdditionalOnPoint\",value:function(t){var e=!1;if(!0===this.options.selectable){var i=this.getNodeAt(t)||this.getEdgeAt(t);void 0!==i&&(e=!0,!0===i.isSelected()?this.deselectObject(i):this.selectObject(i),this.body.emitter.emit(\"_requestRedraw\"))}return e}},{key:\"_initBaseEvent\",value:function(t,e){var i={};return i.pointer={DOM:{x:e.x,y:e.y},canvas:this.canvas.DOMtoCanvas(e)},i.event=t,i}},{key:\"generateClickEvent\",value:function(t,e,i,n){var o=arguments.length>4&&void 0!==arguments[4]&&arguments[4],r=this._initBaseEvent(e,i);if(!0===o)r.nodes=[],r.edges=[];else{var s=this.getSelection();r.nodes=s.nodes,r.edges=s.edges}void 0!==n&&(r.previousSelection=n),\"click\"==t&&(r.items=this.getClickedItems(i)),void 0!==e.controlEdge&&(r.controlEdge=e.controlEdge),this.body.emitter.emit(t,r)}},{key:\"selectObject\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.options.selectConnectedEdges;if(void 0!==t){if(t instanceof cf){var i;if(!0===e)(i=this._selectionAccumulator).addEdges.apply(i,wo(t.edges));this._selectionAccumulator.addNodes(t)}else this._selectionAccumulator.addEdges(t);return!0}return!1}},{key:\"deselectObject\",value:function(t){!0===t.isSelected()&&(t.selected=!1,this._removeFromSelection(t))}},{key:\"_getAllNodesOverlappingWith\",value:function(t){for(var e=[],i=this.body.nodes,n=0;n<this.body.nodeIndices.length;n++){var o=this.body.nodeIndices[n];i[o].isOverlappingWith(t)&&e.push(o)}return e}},{key:\"_pointerToPositionObject\",value:function(t){var e=this.canvas.DOMtoCanvas(t);return{left:e.x-1,top:e.y+1,right:e.x+1,bottom:e.y-1}}},{key:\"getNodeAt\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this._pointerToPositionObject(t),n=this._getAllNodesOverlappingWith(i);return n.length>0?!0===e?this.body.nodes[n[n.length-1]]:n[n.length-1]:void 0}},{key:\"_getEdgesOverlappingWith\",value:function(t,e){for(var i=this.body.edges,n=0;n<this.body.edgeIndices.length;n++){var o=this.body.edgeIndices[n];i[o].isOverlappingWith(t)&&e.push(o)}}},{key:\"_getAllEdgesOverlappingWith\",value:function(t){var e=[];return this._getEdgesOverlappingWith(t,e),e}},{key:\"getEdgeAt\",value:function(t){for(var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this.canvas.DOMtoCanvas(t),n=10,o=null,r=this.body.edges,s=0;s<this.body.edgeIndices.length;s++){var a=this.body.edgeIndices[s],h=r[a];if(h.connected){var l=h.from.x,d=h.from.y,c=h.to.x,u=h.to.y,f=h.edgeType.getDistanceToEdge(l,d,c,u,i.x,i.y);f<n&&(o=a,n=f)}}return null!==o?!0===e?this.body.edges[o]:o:void 0}},{key:\"_addToHover\",value:function(t){t instanceof cf?this.hoverObj.nodes[t.id]=t:this.hoverObj.edges[t.id]=t}},{key:\"_removeFromSelection\",value:function(t){var e;t instanceof cf?(this._selectionAccumulator.deleteNodes(t),(e=this._selectionAccumulator).deleteEdges.apply(e,wo(t.edges))):this._selectionAccumulator.deleteEdges(t)}},{key:\"unselectAll\",value:function(){this._selectionAccumulator.clear()}},{key:\"getSelectedNodeCount\",value:function(){return this._selectionAccumulator.sizeNodes}},{key:\"getSelectedEdgeCount\",value:function(){return this._selectionAccumulator.sizeEdges}},{key:\"_hoverConnectedEdges\",value:function(t){for(var e=0;e<t.edges.length;e++){var i=t.edges[e];i.hover=!0,this._addToHover(i)}}},{key:\"emitBlurEvent\",value:function(t,e,i){var n=this._initBaseEvent(t,e);!0===i.hover&&(i.hover=!1,i instanceof cf?(n.node=i.id,this.body.emitter.emit(\"blurNode\",n)):(n.edge=i.id,this.body.emitter.emit(\"blurEdge\",n)))}},{key:\"emitHoverEvent\",value:function(t,e,i){var n=this._initBaseEvent(t,e),o=!1;return!1===i.hover&&(i.hover=!0,this._addToHover(i),o=!0,i instanceof cf?(n.node=i.id,this.body.emitter.emit(\"hoverNode\",n)):(n.edge=i.id,this.body.emitter.emit(\"hoverEdge\",n))),o}},{key:\"hoverObject\",value:function(t,e){var i=this.getNodeAt(e);void 0===i&&(i=this.getEdgeAt(e));var n=!1;for(var o in this.hoverObj.nodes)Object.prototype.hasOwnProperty.call(this.hoverObj.nodes,o)&&(void 0===i||i instanceof cf&&i.id!=o||i instanceof ep)&&(this.emitBlurEvent(t,e,this.hoverObj.nodes[o]),delete this.hoverObj.nodes[o],n=!0);for(var r in this.hoverObj.edges)Object.prototype.hasOwnProperty.call(this.hoverObj.edges,r)&&(!0===n?(this.hoverObj.edges[r].hover=!1,delete this.hoverObj.edges[r]):(void 0===i||i instanceof ep&&i.id!=r||i instanceof cf&&!i.hover)&&(this.emitBlurEvent(t,e,this.hoverObj.edges[r]),delete this.hoverObj.edges[r],n=!0));if(void 0!==i){var s=zo(this.hoverObj.edges).length,a=zo(this.hoverObj.nodes).length;(n||i instanceof ep&&0===s&&0===a||i instanceof cf&&0===s&&0===a)&&(n=this.emitHoverEvent(t,e,i)),i instanceof cf&&!0===this.options.hoverConnectedEdges&&this._hoverConnectedEdges(i)}!0===n&&this.body.emitter.emit(\"_requestRedraw\")}},{key:\"commitWithoutEmitting\",value:function(){this._selectionAccumulator.commit()}},{key:\"commitAndEmit\",value:function(t,e){var i=!1,n=this._selectionAccumulator.commit(),o={nodes:n.nodes.previous,edges:n.edges.previous};n.edges.deleted.length>0&&(this.generateClickEvent(\"deselectEdge\",e,t,o),i=!0),n.nodes.deleted.length>0&&(this.generateClickEvent(\"deselectNode\",e,t,o),i=!0),n.nodes.added.length>0&&(this.generateClickEvent(\"selectNode\",e,t),i=!0),n.edges.added.length>0&&(this.generateClickEvent(\"selectEdge\",e,t),i=!0),!0===i&&this.generateClickEvent(\"select\",e,t)}},{key:\"getSelection\",value:function(){return{nodes:this.getSelectedNodeIds(),edges:this.getSelectedEdgeIds()}}},{key:\"getSelectedNodes\",value:function(){return this._selectionAccumulator.getNodes()}},{key:\"getSelectedEdges\",value:function(){return this._selectionAccumulator.getEdges()}},{key:\"getSelectedNodeIds\",value:function(){var t;return Io(t=this._selectionAccumulator.getNodes()).call(t,(function(t){return t.id}))}},{key:\"getSelectedEdgeIds\",value:function(){var t;return Io(t=this._selectionAccumulator.getEdges()).call(t,(function(t){return t.id}))}},{key:\"setSelection\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!t||!t.nodes&&!t.edges)throw new TypeError(\"Selection must be an object with nodes and/or edges properties\");if((e.unselectAll||void 0===e.unselectAll)&&this.unselectAll(),t.nodes){var i,n=iv(t.nodes);try{for(n.s();!(i=n.n()).done;){var o=i.value,r=this.body.nodes[o];if(!r)throw new RangeError('Node with id \"'+o+'\" not found');this.selectObject(r,e.highlightEdges)}}catch(t){n.e(t)}finally{n.f()}}if(t.edges){var s,a=iv(t.edges);try{for(a.s();!(s=a.n()).done;){var h=s.value,l=this.body.edges[h];if(!l)throw new RangeError('Edge with id \"'+h+'\" not found');this.selectObject(l)}}catch(t){a.e(t)}finally{a.f()}}this.body.emitter.emit(\"_requestRedraw\"),this._selectionAccumulator.commit()}},{key:\"selectNodes\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(!t||void 0===t.length)throw\"Selection must be an array with ids\";this.setSelection({nodes:t},{highlightEdges:e})}},{key:\"selectEdges\",value:function(t){if(!t||void 0===t.length)throw\"Selection must be an array with ids\";this.setSelection({edges:t})}},{key:\"updateSelection\",value:function(){for(var t in this._selectionAccumulator.getNodes())Object.prototype.hasOwnProperty.call(this.body.nodes,t.id)||this._selectionAccumulator.deleteNodes(t);for(var e in this._selectionAccumulator.getEdges())Object.prototype.hasOwnProperty.call(this.body.edges,e.id)||this._selectionAccumulator.deleteEdges(e)}},{key:\"getClickedItems\",value:function(t){for(var e=this.canvas.DOMtoCanvas(t),i=[],n=this.body.nodeIndices,o=this.body.nodes,r=n.length-1;r>=0;r--){var s=o[n[r]].getItemsOnPoint(e);i.push.apply(i,s)}for(var a=this.body.edgeIndices,h=this.body.edges,l=a.length-1;l>=0;l--){var d=h[a[l]].getItemsOnPoint(e);i.push.apply(i,d)}return i}}]),t}(),rv=n((function(t,e){!function(t){function e(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}t.__esModule=!0,t.sort=v;var i=32,n=7,o=256,r=[1,10,100,1e3,1e4,1e5,1e6,1e7,1e8,1e9];function s(t){return t<1e5?t<100?t<10?0:1:t<1e4?t<1e3?2:3:4:t<1e7?t<1e6?5:6:t<1e9?t<1e8?7:8:9}function a(t,e){if(t===e)return 0;if(~~t===t&&~~e===e){if(0===t||0===e)return t<e?-1:1;if(t<0||e<0){if(e>=0)return-1;if(t>=0)return 1;t=-t,e=-e}var i=s(t),n=s(e),o=0;return i<n?(t*=r[n-i-1],e/=10,o=-1):i>n&&(e*=r[i-n-1],t/=10,o=1),t===e?o:t<e?-1:1}var a=String(t),h=String(e);return a===h?0:a<h?-1:1}function h(t){for(var e=0;t>=i;)e|=1&t,t>>=1;return t+e}function l(t,e,i,n){var o=e+1;if(o===i)return 1;if(n(t[o++],t[e])<0){for(;o<i&&n(t[o],t[o-1])<0;)o++;d(t,e,o)}else for(;o<i&&n(t[o],t[o-1])>=0;)o++;return o-e}function d(t,e,i){for(i--;e<i;){var n=t[e];t[e++]=t[i],t[i--]=n}}function c(t,e,i,n,o){for(n===e&&n++;n<i;n++){for(var r=t[n],s=e,a=n;s<a;){var h=s+a>>>1;o(r,t[h])<0?a=h:s=h+1}var l=n-s;switch(l){case 3:t[s+3]=t[s+2];case 2:t[s+2]=t[s+1];case 1:t[s+1]=t[s];break;default:for(;l>0;)t[s+l]=t[s+l-1],l--}t[s]=r}}function u(t,e,i,n,o,r){var s=0,a=0,h=1;if(r(t,e[i+o])>0){for(a=n-o;h<a&&r(t,e[i+o+h])>0;)s=h,(h=1+(h<<1))<=0&&(h=a);h>a&&(h=a),s+=o,h+=o}else{for(a=o+1;h<a&&r(t,e[i+o-h])<=0;)s=h,(h=1+(h<<1))<=0&&(h=a);h>a&&(h=a);var l=s;s=o-h,h=o-l}for(s++;s<h;){var d=s+(h-s>>>1);r(t,e[i+d])>0?s=d+1:h=d}return h}function f(t,e,i,n,o,r){var s=0,a=0,h=1;if(r(t,e[i+o])<0){for(a=o+1;h<a&&r(t,e[i+o-h])<0;)s=h,(h=1+(h<<1))<=0&&(h=a);h>a&&(h=a);var l=s;s=o-h,h=o-l}else{for(a=n-o;h<a&&r(t,e[i+o+h])>=0;)s=h,(h=1+(h<<1))<=0&&(h=a);h>a&&(h=a),s+=o,h+=o}for(s++;s<h;){var d=s+(h-s>>>1);r(t,e[i+d])<0?h=d:s=d+1}return h}var p=function(){function t(i,r){e(this,t),this.array=null,this.compare=null,this.minGallop=n,this.length=0,this.tmpStorageLength=o,this.stackLength=0,this.runStart=null,this.runLength=null,this.stackSize=0,this.array=i,this.compare=r,this.length=i.length,this.length<2*o&&(this.tmpStorageLength=this.length>>>1),this.tmp=new Array(this.tmpStorageLength),this.stackLength=this.length<120?5:this.length<1542?10:this.length<119151?19:40,this.runStart=new Array(this.stackLength),this.runLength=new Array(this.stackLength)}return t.prototype.pushRun=function(t,e){this.runStart[this.stackSize]=t,this.runLength[this.stackSize]=e,this.stackSize+=1},t.prototype.mergeRuns=function(){for(;this.stackSize>1;){var t=this.stackSize-2;if(t>=1&&this.runLength[t-1]<=this.runLength[t]+this.runLength[t+1]||t>=2&&this.runLength[t-2]<=this.runLength[t]+this.runLength[t-1])this.runLength[t-1]<this.runLength[t+1]&&t--;else if(this.runLength[t]>this.runLength[t+1])break;this.mergeAt(t)}},t.prototype.forceMergeRuns=function(){for(;this.stackSize>1;){var t=this.stackSize-2;t>0&&this.runLength[t-1]<this.runLength[t+1]&&t--,this.mergeAt(t)}},t.prototype.mergeAt=function(t){var e=this.compare,i=this.array,n=this.runStart[t],o=this.runLength[t],r=this.runStart[t+1],s=this.runLength[t+1];this.runLength[t]=o+s,t===this.stackSize-3&&(this.runStart[t+1]=this.runStart[t+2],this.runLength[t+1]=this.runLength[t+2]),this.stackSize--;var a=f(i[r],i,n,o,0,e);n+=a,0!=(o-=a)&&0!==(s=u(i[n+o-1],i,r,s,s-1,e))&&(o<=s?this.mergeLow(n,o,r,s):this.mergeHigh(n,o,r,s))},t.prototype.mergeLow=function(t,e,i,o){var r=this.compare,s=this.array,a=this.tmp,h=0;for(h=0;h<e;h++)a[h]=s[t+h];var l=0,d=i,c=t;if(s[c++]=s[d++],0!=--o)if(1!==e){for(var p=this.minGallop;;){var v=0,g=0,y=!1;do{if(r(s[d],a[l])<0){if(s[c++]=s[d++],g++,v=0,0==--o){y=!0;break}}else if(s[c++]=a[l++],v++,g=0,1==--e){y=!0;break}}while((v|g)<p);if(y)break;do{if(0!==(v=f(s[d],a,l,e,0,r))){for(h=0;h<v;h++)s[c+h]=a[l+h];if(c+=v,l+=v,(e-=v)<=1){y=!0;break}}if(s[c++]=s[d++],0==--o){y=!0;break}if(0!==(g=u(a[l],s,d,o,0,r))){for(h=0;h<g;h++)s[c+h]=s[d+h];if(c+=g,d+=g,0==(o-=g)){y=!0;break}}if(s[c++]=a[l++],1==--e){y=!0;break}p--}while(v>=n||g>=n);if(y)break;p<0&&(p=0),p+=2}if(this.minGallop=p,p<1&&(this.minGallop=1),1===e){for(h=0;h<o;h++)s[c+h]=s[d+h];s[c+o]=a[l]}else{if(0===e)throw new Error(\"mergeLow preconditions were not respected\");for(h=0;h<e;h++)s[c+h]=a[l+h]}}else{for(h=0;h<o;h++)s[c+h]=s[d+h];s[c+o]=a[l]}else for(h=0;h<e;h++)s[c+h]=a[l+h]},t.prototype.mergeHigh=function(t,e,i,o){var r=this.compare,s=this.array,a=this.tmp,h=0;for(h=0;h<o;h++)a[h]=s[i+h];var l=t+e-1,d=o-1,c=i+o-1,p=0,v=0;if(s[c--]=s[l--],0!=--e)if(1!==o){for(var g=this.minGallop;;){var y=0,m=0,b=!1;do{if(r(a[d],s[l])<0){if(s[c--]=s[l--],y++,m=0,0==--e){b=!0;break}}else if(s[c--]=a[d--],m++,y=0,1==--o){b=!0;break}}while((y|m)<g);if(b)break;do{if(0!=(y=e-f(a[d],s,t,e,e-1,r))){for(e-=y,v=1+(c-=y),p=1+(l-=y),h=y-1;h>=0;h--)s[v+h]=s[p+h];if(0===e){b=!0;break}}if(s[c--]=a[d--],1==--o){b=!0;break}if(0!=(m=o-u(s[l],a,0,o,o-1,r))){for(o-=m,v=1+(c-=m),p=1+(d-=m),h=0;h<m;h++)s[v+h]=a[p+h];if(o<=1){b=!0;break}}if(s[c--]=s[l--],0==--e){b=!0;break}g--}while(y>=n||m>=n);if(b)break;g<0&&(g=0),g+=2}if(this.minGallop=g,g<1&&(this.minGallop=1),1===o){for(v=1+(c-=e),p=1+(l-=e),h=e-1;h>=0;h--)s[v+h]=s[p+h];s[c]=a[d]}else{if(0===o)throw new Error(\"mergeHigh preconditions were not respected\");for(p=c-(o-1),h=0;h<o;h++)s[p+h]=a[h]}}else{for(v=1+(c-=e),p=1+(l-=e),h=e-1;h>=0;h--)s[v+h]=s[p+h];s[c]=a[d]}else for(p=c-(o-1),h=0;h<o;h++)s[p+h]=a[h]},t}();function v(t,e,n,o){if(!Array.isArray(t))throw new TypeError(\"Can only sort arrays\");e?\"function\"!=typeof e&&(o=n,n=e,e=a):e=a,n||(n=0),o||(o=t.length);var r=o-n;if(!(r<2)){var s=0;if(r<i)c(t,n,o,n+(s=l(t,n,o,e)),e);else{var d=new p(t,e),u=h(r);do{if((s=l(t,n,o,e))<u){var f=r;f>u&&(f=u),c(t,n,n+f,n+s,e),s=f}d.pushRun(n,s),d.mergeRuns(),r-=s,n+=s}while(0!==r);d.forceMergeRuns()}}}}(e)}));i(rv);var sv=rv,av=sv.sort;function hv(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var lv=function(){function t(){Nn(this,t)}return Fn(t,[{key:\"abstract\",value:function(){throw new Error(\"Can't instantiate abstract class!\")}},{key:\"fake_use\",value:function(){}},{key:\"curveType\",value:function(){return this.abstract()}},{key:\"getPosition\",value:function(t){return this.fake_use(t),this.abstract()}},{key:\"setPosition\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;this.fake_use(t,e,i),this.abstract()}},{key:\"getTreeSize\",value:function(t){return this.fake_use(t),this.abstract()}},{key:\"sort\",value:function(t){this.fake_use(t),this.abstract()}},{key:\"fix\",value:function(t,e){this.fake_use(t,e),this.abstract()}},{key:\"shift\",value:function(t,e){this.fake_use(t,e),this.abstract()}}]),t}(),dv=function(t){Ad(i,t);var e=hv(i);function i(t){var n;return Nn(this,i),(n=e.call(this)).layout=t,n}return Fn(i,[{key:\"curveType\",value:function(){return\"horizontal\"}},{key:\"getPosition\",value:function(t){return t.x}},{key:\"setPosition\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;void 0!==i&&this.layout.hierarchical.addToOrdering(t,i),t.x=e}},{key:\"getTreeSize\",value:function(t){var e=this.layout.hierarchical.getTreeSize(this.layout.body.nodes,t);return{min:e.min_x,max:e.max_x}}},{key:\"sort\",value:function(t){av(t,(function(t,e){return t.x-e.x}))}},{key:\"fix\",value:function(t,e){t.y=this.layout.options.hierarchical.levelSeparation*e,t.options.fixed.y=!0}},{key:\"shift\",value:function(t,e){this.layout.body.nodes[t].x+=e}}]),i}(lv),cv=function(t){Ad(i,t);var e=hv(i);function i(t){var n;return Nn(this,i),(n=e.call(this)).layout=t,n}return Fn(i,[{key:\"curveType\",value:function(){return\"vertical\"}},{key:\"getPosition\",value:function(t){return t.y}},{key:\"setPosition\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;void 0!==i&&this.layout.hierarchical.addToOrdering(t,i),t.y=e}},{key:\"getTreeSize\",value:function(t){var e=this.layout.hierarchical.getTreeSize(this.layout.body.nodes,t);return{min:e.min_y,max:e.max_y}}},{key:\"sort\",value:function(t){av(t,(function(t,e){return t.y-e.y}))}},{key:\"fix\",value:function(t,e){t.x=this.layout.options.hierarchical.levelSeparation*e,t.options.fixed.x=!0}},{key:\"shift\",value:function(t,e){this.layout.body.nodes[t].y+=e}}]),i}(lv),uv=Gi.every,fv=Ao(\"every\");gt({target:\"Array\",proto:!0,forced:!fv},{every:function(t){return uv(this,t,arguments.length>1?arguments[1]:void 0)}});var pv=Ht(\"Array\").every,vv=Array.prototype,gv=function(t){var e=t.every;return t===vv||t instanceof Array&&e===vv.every?pv:e};function yv(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return mv(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return mv(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function mv(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}function bv(t,e){var i=new ec;return Wo(t).call(t,(function(t){var e;Wo(e=t.edges).call(e,(function(t){t.connected&&i.add(t)}))})),Wo(i).call(i,(function(t){var i=t.from.id,n=t.to.id;null==e[i]&&(e[i]=0),(null==e[n]||e[i]>=e[n])&&(e[n]=e[i]+1)})),e}function wv(t,e,i,n){var o,r,s=Gr(null),a=Kd(o=wo(Dc(n).call(n))).call(o,(function(t,e){return t+1+e.edges.length}),0),h=i+\"Id\",l=\"to\"===i?1:-1,d=yv(n);try{var c=function(){var o=uo(r.value,2),d=o[0],c=o[1];if(!n.has(d)||!t(c))return\"continue\";s[d]=0;for(var u=[c],f=0,p=void 0,v=function(){var t,o;if(!n.has(d))return\"continue\";var r=s[p.id]+l;if(Wo(t=mr(o=p.edges).call(o,(function(t){return t.connected&&t.to!==t.from&&t[i]!==p&&n.has(t.toId)&&n.has(t.fromId)}))).call(t,(function(t){var n=t[h],o=s[n];(null==o||e(r,o))&&(s[n]=r,u.push(t[i]))})),f>a)return{v:{v:bv(n,s)}};++f};p=u.pop();){var g=v();if(\"continue\"!==g&&\"object\"===go(g))return g.v}};for(d.s();!(r=d.n()).done;){var u=c();if(\"continue\"!==u&&\"object\"===go(u))return u.v}}catch(t){d.e(t)}finally{d.f()}return s}var kv=function(){function t(){Nn(this,t),this.childrenReference={},this.parentReference={},this.trees={},this.distributionOrdering={},this.levels={},this.distributionIndex={},this.isTree=!1,this.treeIndex=-1}return Fn(t,[{key:\"addRelation\",value:function(t,e){void 0===this.childrenReference[t]&&(this.childrenReference[t]=[]),this.childrenReference[t].push(e),void 0===this.parentReference[e]&&(this.parentReference[e]=[]),this.parentReference[e].push(t)}},{key:\"checkIfTree\",value:function(){for(var t in this.parentReference)if(this.parentReference[t].length>1)return void(this.isTree=!1);this.isTree=!0}},{key:\"numTrees\",value:function(){return this.treeIndex+1}},{key:\"setTreeIndex\",value:function(t,e){void 0!==e&&void 0===this.trees[t.id]&&(this.trees[t.id]=e,this.treeIndex=Math.max(e,this.treeIndex))}},{key:\"ensureLevel\",value:function(t){void 0===this.levels[t]&&(this.levels[t]=0)}},{key:\"getMaxLevel\",value:function(t){var e=this,i={};return function t(n){if(void 0!==i[n])return i[n];var o=e.levels[n];if(e.childrenReference[n]){var r=e.childrenReference[n];if(r.length>0)for(var s=0;s<r.length;s++)o=Math.max(o,t(r[s]))}return i[n]=o,o}(t)}},{key:\"levelDownstream\",value:function(t,e){void 0===this.levels[e.id]&&(void 0===this.levels[t.id]&&(this.levels[t.id]=0),this.levels[e.id]=this.levels[t.id]+1)}},{key:\"setMinLevelToZero\",value:function(t){var e=1e9;for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&void 0!==this.levels[i]&&(e=Math.min(this.levels[i],e));for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&void 0!==this.levels[n]&&(this.levels[n]-=e)}},{key:\"getTreeSize\",value:function(t,e){var i=1e9,n=-1e9,o=1e9,r=-1e9;for(var s in this.trees)if(Object.prototype.hasOwnProperty.call(this.trees,s)&&this.trees[s]===e){var a=t[s];i=Math.min(a.x,i),n=Math.max(a.x,n),o=Math.min(a.y,o),r=Math.max(a.y,r)}return{min_x:i,max_x:n,min_y:o,max_y:r}}},{key:\"hasSameParent\",value:function(t,e){var i=this.parentReference[t.id],n=this.parentReference[e.id];if(void 0===i||void 0===n)return!1;for(var o=0;o<i.length;o++)for(var r=0;r<n.length;r++)if(i[o]==n[r])return!0;return!1}},{key:\"inSameSubNetwork\",value:function(t,e){return this.trees[t.id]===this.trees[e.id]}},{key:\"getLevels\",value:function(){return zo(this.distributionOrdering)}},{key:\"addToOrdering\",value:function(t,e){void 0===this.distributionOrdering[e]&&(this.distributionOrdering[e]=[]);var i=!1,n=this.distributionOrdering[e];for(var o in n)if(n[o]===t){i=!0;break}i||(this.distributionOrdering[e].push(t),this.distributionIndex[t.id]=this.distributionOrdering[e].length-1)}}]),t}(),_v=function(){function t(e){Nn(this,t),this.body=e,this._resetRNG(Math.random()+\":\"+No()),this.setPhysics=!1,this.options={},this.optionsBackup={physics:{}},this.defaultOptions={randomSeed:void 0,improvedLayout:!0,clusterThreshold:150,hierarchical:{enabled:!1,levelSeparation:150,nodeSpacing:100,treeSpacing:200,blockShifting:!0,edgeMinimization:!0,parentCentralization:!0,direction:\"UD\",sortMethod:\"hubsize\"}},At(this.options,this.defaultOptions),this.bindEventListeners()}return Fn(t,[{key:\"bindEventListeners\",value:function(){var t=this;this.body.emitter.on(\"_dataChanged\",(function(){t.setupHierarchicalLayout()})),this.body.emitter.on(\"_dataLoaded\",(function(){t.layoutNetwork()})),this.body.emitter.on(\"_resetHierarchicalLayout\",(function(){t.setupHierarchicalLayout()})),this.body.emitter.on(\"_adjustEdgesForHierarchicalLayout\",(function(){if(!0===t.options.hierarchical.enabled){var e=t.direction.curveType();t.body.emitter.emit(\"_forceDisableDynamicCurves\",e,!1)}}))}},{key:\"setOptions\",value:function(t,e){if(void 0!==t){var i=this.options.hierarchical,n=i.enabled;if(Eh([\"randomSeed\",\"improvedLayout\",\"clusterThreshold\"],this.options,t),$h(this.options,t,\"hierarchical\"),void 0!==t.randomSeed&&this._resetRNG(t.randomSeed),!0===i.enabled)return!0===n&&this.body.emitter.emit(\"refresh\",!0),\"RL\"===i.direction||\"DU\"===i.direction?i.levelSeparation>0&&(i.levelSeparation*=-1):i.levelSeparation<0&&(i.levelSeparation*=-1),this.setDirectionStrategy(),this.body.emitter.emit(\"_resetHierarchicalLayout\"),this.adaptAllOptionsForHierarchicalLayout(e);if(!0===n)return this.body.emitter.emit(\"refresh\"),Ch(e,this.optionsBackup)}return e}},{key:\"_resetRNG\",value:function(t){this.initialRandomSeed=t,this._rng=ah(this.initialRandomSeed)}},{key:\"adaptAllOptionsForHierarchicalLayout\",value:function(t){if(!0===this.options.hierarchical.enabled){var e=this.optionsBackup.physics;void 0===t.physics||!0===t.physics?(t.physics={enabled:void 0===e.enabled||e.enabled,solver:\"hierarchicalRepulsion\"},e.enabled=void 0===e.enabled||e.enabled,e.solver=e.solver||\"barnesHut\"):\"object\"===go(t.physics)?(e.enabled=void 0===t.physics.enabled||t.physics.enabled,e.solver=t.physics.solver||\"barnesHut\",t.physics.solver=\"hierarchicalRepulsion\"):!1!==t.physics&&(e.solver=\"barnesHut\",t.physics={solver:\"hierarchicalRepulsion\"});var i=this.direction.curveType();if(void 0===t.edges)this.optionsBackup.edges={smooth:{enabled:!0,type:\"dynamic\"}},t.edges={smooth:!1};else if(void 0===t.edges.smooth)this.optionsBackup.edges={smooth:{enabled:!0,type:\"dynamic\"}},t.edges.smooth=!1;else if(\"boolean\"==typeof t.edges.smooth)this.optionsBackup.edges={smooth:t.edges.smooth},t.edges.smooth={enabled:t.edges.smooth,type:i};else{var n=t.edges.smooth;void 0!==n.type&&\"dynamic\"!==n.type&&(i=n.type),this.optionsBackup.edges={smooth:{enabled:void 0===n.enabled||n.enabled,type:void 0===n.type?\"dynamic\":n.type,roundness:void 0===n.roundness?.5:n.roundness,forceDirection:void 0!==n.forceDirection&&n.forceDirection}},t.edges.smooth={enabled:void 0===n.enabled||n.enabled,type:i,roundness:void 0===n.roundness?.5:n.roundness,forceDirection:void 0!==n.forceDirection&&n.forceDirection}}this.body.emitter.emit(\"_forceDisableDynamicCurves\",i)}return t}},{key:\"positionInitially\",value:function(t){if(!0!==this.options.hierarchical.enabled){this._resetRNG(this.initialRandomSeed);for(var e=t.length+50,i=0;i<t.length;i++){var n=t[i],o=2*Math.PI*this._rng();void 0===n.x&&(n.x=e*Math.cos(o)),void 0===n.y&&(n.y=e*Math.sin(o))}}}},{key:\"layoutNetwork\",value:function(){if(!0!==this.options.hierarchical.enabled&&!0===this.options.improvedLayout){for(var t=this.body.nodeIndices,e=0,i=0;i<t.length;i++){!0===this.body.nodes[t[i]].predefinedPosition&&(e+=1)}if(e<.5*t.length){var n=0,o=this.options.clusterThreshold,r={clusterNodeProperties:{shape:\"ellipse\",label:\"\",group:\"\",font:{multi:!1}},clusterEdgeProperties:{label:\"\",font:{multi:!1},smooth:{enabled:!1}}};if(t.length>o){for(var s=t.length;t.length>o&&n<=10;){n+=1;var a=t.length;if(n%3==0?this.body.modules.clustering.clusterBridges(r):this.body.modules.clustering.clusterOutliers(r),a==t.length&&n%3!=0)return this._declusterAll(),this.body.emitter.emit(\"_layoutFailed\"),void console.info(\"This network could not be positioned by this version of the improved layout algorithm. Please disable improvedLayout for better performance.\")}this.body.modules.kamadaKawai.setOptions({springLength:Math.max(150,2*s)})}n>10&&console.info(\"The clustering didn't succeed within the amount of interations allowed, progressing with partial result.\"),this.body.modules.kamadaKawai.solve(t,this.body.edgeIndices,!0),this._shiftToCenter();for(var h=0;h<t.length;h++){var l=this.body.nodes[t[h]];!1===l.predefinedPosition&&(l.x+=70*(.5-this._rng()),l.y+=70*(.5-this._rng()))}this._declusterAll(),this.body.emitter.emit(\"_repositionBezierNodes\")}}}},{key:\"_shiftToCenter\",value:function(){for(var t=pp.getRangeCore(this.body.nodes,this.body.nodeIndices),e=pp.findCenter(t),i=0;i<this.body.nodeIndices.length;i++){var n=this.body.nodes[this.body.nodeIndices[i]];n.x-=e.x,n.y-=e.y}}},{key:\"_declusterAll\",value:function(){for(var t=!0;!0===t;){t=!1;for(var e=0;e<this.body.nodeIndices.length;e++)!0===this.body.nodes[this.body.nodeIndices[e]].isCluster&&(t=!0,this.body.modules.clustering.openCluster(this.body.nodeIndices[e],{},!1));!0===t&&this.body.emitter.emit(\"_dataChanged\")}}},{key:\"getSeed\",value:function(){return this.initialRandomSeed}},{key:\"setupHierarchicalLayout\",value:function(){if(!0===this.options.hierarchical.enabled&&this.body.nodeIndices.length>0){var t,e,i=!1,n=!1;for(e in this.lastNodeOnLevel={},this.hierarchical=new kv,this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,e)&&(void 0!==(t=this.body.nodes[e]).options.level?(i=!0,this.hierarchical.levels[e]=t.options.level):n=!0);if(!0===n&&!0===i)throw new Error(\"To use the hierarchical layout, nodes require either no predefined levels or levels have to be defined for all nodes.\");if(!0===n){var o=this.options.hierarchical.sortMethod;\"hubsize\"===o?this._determineLevelsByHubsize():\"directed\"===o?this._determineLevelsDirected():\"custom\"===o&&this._determineLevelsCustomCallback()}for(var r in this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,r)&&this.hierarchical.ensureLevel(r);var s=this._getDistribution();this._generateMap(),this._placeNodesByHierarchy(s),this._condenseHierarchy(),this._shiftToCenter()}}},{key:\"_condenseHierarchy\",value:function(){var t=this,e=!1,i={},n=function(e,i){var n=t.hierarchical.trees;for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&n[o]===e&&t.direction.shift(o,i)},o=function(){for(var e=[],i=0;i<t.hierarchical.numTrees();i++)e.push(t.direction.getTreeSize(i));return e},r=function e(i,n){if(!n[i.id]&&(n[i.id]=!0,t.hierarchical.childrenReference[i.id])){var o=t.hierarchical.childrenReference[i.id];if(o.length>0)for(var r=0;r<o.length;r++)e(t.body.nodes[o[r]],n)}},s=function(e){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1e9,n=1e9,o=1e9,r=1e9,s=-1e9;for(var a in e)if(Object.prototype.hasOwnProperty.call(e,a)){var h=t.body.nodes[a],l=t.hierarchical.levels[h.id],d=t.direction.getPosition(h),c=t._getSpaceAroundNode(h,e),u=uo(c,2),f=u[0],p=u[1];n=Math.min(f,n),o=Math.min(p,o),l<=i&&(r=Math.min(d,r),s=Math.max(d,s))}return[r,s,n,o]},a=function(e,i){var n=t.hierarchical.getMaxLevel(e.id),o=t.hierarchical.getMaxLevel(i.id);return Math.min(n,o)},h=function(e,i,n){for(var o=t.hierarchical,r=0;r<i.length;r++){var s=i[r],a=o.distributionOrdering[s];if(a.length>1)for(var h=0;h<a.length-1;h++){var l=a[h],d=a[h+1];o.hasSameParent(l,d)&&o.inSameSubNetwork(l,d)&&e(l,d,n)}}},l=function(i,n){var o=arguments.length>2&&void 0!==arguments[2]&&arguments[2],h=t.direction.getPosition(i),l=t.direction.getPosition(n),d=Math.abs(l-h),c=t.options.hierarchical.nodeSpacing;if(d>c){var u={},f={};r(i,u),r(n,f);var p=a(i,n),v=s(u,p),g=s(f,p),y=v[1],m=g[0],b=g[2],w=Math.abs(y-m);if(w>c){var k=y-m+c;k<-b+c&&(k=-b+c),k<0&&(t._shiftBlock(n.id,k),e=!0,!0===o&&t._centerParent(n))}}},d=function(n,o){for(var a=o.id,h=o.edges,l=t.hierarchical.levels[o.id],d=t.options.hierarchical.levelSeparation*t.options.hierarchical.levelSeparation,c={},u=[],f=0;f<h.length;f++){var p=h[f];if(p.toId!=p.fromId){var v=p.toId==a?p.from:p.to;c[h[f].id]=v,t.hierarchical.levels[v.id]<l&&u.push(p)}}var g=function(e,i){for(var n=0,o=0;o<i.length;o++)if(void 0!==c[i[o].id]){var r=t.direction.getPosition(c[i[o].id])-e;n+=r/Math.sqrt(r*r+d)}return n},y=function(e,i){for(var n=0,o=0;o<i.length;o++)if(void 0!==c[i[o].id]){var r=t.direction.getPosition(c[i[o].id])-e;n-=d*Math.pow(r*r+d,-1.5)}return n},m=function(e,i){for(var n=t.direction.getPosition(o),r={},s=0;s<e;s++){var a=g(n,i),h=y(n,i);if(void 0!==r[n-=Math.max(-40,Math.min(40,Math.round(a/h)))])break;r[n]=s}return n},b=m(n,u);!function(n){var a=t.direction.getPosition(o);if(void 0===i[o.id]){var h={};r(o,h),i[o.id]=h}var l=s(i[o.id]),d=l[2],c=l[3],u=n-a,f=0;u>0?f=Math.min(u,c-t.options.hierarchical.nodeSpacing):u<0&&(f=-Math.min(-u,d-t.options.hierarchical.nodeSpacing)),0!=f&&(t._shiftBlock(o.id,f),e=!0)}(b),function(i){var n=t.direction.getPosition(o),r=t._getSpaceAroundNode(o),s=uo(r,2),a=s[0],h=s[1],l=i-n,d=n;l>0?d=Math.min(n+(h-t.options.hierarchical.nodeSpacing),i):l<0&&(d=Math.max(n-(a-t.options.hierarchical.nodeSpacing),i)),d!==n&&(t.direction.setPosition(o,d),e=!0)}(b=m(n,h))};!0===this.options.hierarchical.blockShifting&&(function(i){var n=t.hierarchical.getLevels();n=Xo(n).call(n);for(var o=0;o<i&&(e=!1,h(l,n,!0),!0===e);o++);}(5),function(){for(var e in t.body.nodes)Object.prototype.hasOwnProperty.call(t.body.nodes,e)&&t._centerParent(t.body.nodes[e])}()),!0===this.options.hierarchical.edgeMinimization&&function(i){var n=t.hierarchical.getLevels();n=Xo(n).call(n);for(var o=0;o<i;o++){e=!1;for(var r=0;r<n.length;r++)for(var s=n[r],a=t.hierarchical.distributionOrdering[s],h=0;h<a.length;h++)d(1e3,a[h]);if(!0!==e)break}}(20),!0===this.options.hierarchical.parentCentralization&&function(){var e=t.hierarchical.getLevels();e=Xo(e).call(e);for(var i=0;i<e.length;i++)for(var n=e[i],o=t.hierarchical.distributionOrdering[n],r=0;r<o.length;r++)t._centerParent(o[r])}(),function(){for(var e=o(),i=0,r=0;r<e.length-1;r++){i+=e[r].max-e[r+1].min+t.options.hierarchical.treeSpacing,n(r+1,i)}}()}},{key:\"_getSpaceAroundNode\",value:function(t,e){var i=!0;void 0===e&&(i=!1);var n=this.hierarchical.levels[t.id];if(void 0!==n){var o=this.hierarchical.distributionIndex[t.id],r=this.direction.getPosition(t),s=this.hierarchical.distributionOrdering[n],a=1e9,h=1e9;if(0!==o){var l=s[o-1];if(!0===i&&void 0===e[l.id]||!1===i)a=r-this.direction.getPosition(l)}if(o!=s.length-1){var d=s[o+1];if(!0===i&&void 0===e[d.id]||!1===i){var c=this.direction.getPosition(d);h=Math.min(h,c-r)}}return[a,h]}return[0,0]}},{key:\"_centerParent\",value:function(t){if(this.hierarchical.parentReference[t.id])for(var e=this.hierarchical.parentReference[t.id],i=0;i<e.length;i++){var n=e[i],o=this.body.nodes[n],r=this.hierarchical.childrenReference[n];if(void 0!==r){var s=this._getCenterPosition(r),a=this.direction.getPosition(o),h=this._getSpaceAroundNode(o),l=uo(h,2),d=l[0],c=l[1],u=a-s;(u<0&&Math.abs(u)<c-this.options.hierarchical.nodeSpacing||u>0&&Math.abs(u)<d-this.options.hierarchical.nodeSpacing)&&this.direction.setPosition(o,s)}}}},{key:\"_placeNodesByHierarchy\",value:function(t){for(var e in this.positionedNodes={},t)if(Object.prototype.hasOwnProperty.call(t,e)){var i,n=zo(t[e]);n=this._indexArrayToNodes(n),xc(i=this.direction).call(i,n);for(var o=0,r=0;r<n.length;r++){var s=n[r];if(void 0===this.positionedNodes[s.id]){var a=this.options.hierarchical.nodeSpacing,h=a*o;o>0&&(h=this.direction.getPosition(n[r-1])+a),this.direction.setPosition(s,h,e),this._validatePositionAndContinue(s,e,h),o++}}}}},{key:\"_placeBranchNodes\",value:function(t,e){var i,n=this.hierarchical.childrenReference[t];if(void 0!==n){for(var o=[],r=0;r<n.length;r++)o.push(this.body.nodes[n[r]]);xc(i=this.direction).call(i,o);for(var s=0;s<o.length;s++){var a=o[s],h=this.hierarchical.levels[a.id];if(!(h>e&&void 0===this.positionedNodes[a.id]))return;var l=this.options.hierarchical.nodeSpacing,d=void 0;d=0===s?this.direction.getPosition(this.body.nodes[t]):this.direction.getPosition(o[s-1])+l,this.direction.setPosition(a,d,h),this._validatePositionAndContinue(a,h,d)}var c=this._getCenterPosition(o);this.direction.setPosition(this.body.nodes[t],c,e)}}},{key:\"_validatePositionAndContinue\",value:function(t,e,i){if(this.hierarchical.isTree){if(void 0!==this.lastNodeOnLevel[e]){var n=this.direction.getPosition(this.body.nodes[this.lastNodeOnLevel[e]]);if(i-n<this.options.hierarchical.nodeSpacing){var o=n+this.options.hierarchical.nodeSpacing-i,r=this._findCommonParent(this.lastNodeOnLevel[e],t.id);this._shiftBlock(r.withChild,o)}}this.lastNodeOnLevel[e]=t.id,this.positionedNodes[t.id]=!0,this._placeBranchNodes(t.id,e)}}},{key:\"_indexArrayToNodes\",value:function(t){for(var e=[],i=0;i<t.length;i++)e.push(this.body.nodes[t[i]]);return e}},{key:\"_getDistribution\",value:function(){var t,e,i={};for(t in this.body.nodes)if(Object.prototype.hasOwnProperty.call(this.body.nodes,t)){e=this.body.nodes[t];var n=void 0===this.hierarchical.levels[t]?0:this.hierarchical.levels[t];this.direction.fix(e,n),void 0===i[n]&&(i[n]={}),i[n][t]=e}return i}},{key:\"_getActiveEdges\",value:function(t){var e=this,i=[];return Dh(t.edges,(function(t){var n;-1!==Hr(n=e.body.edgeIndices).call(n,t.id)&&i.push(t)})),i}},{key:\"_getHubSizes\",value:function(){var t=this,e={};Dh(this.body.nodeIndices,(function(i){var n=t.body.nodes[i],o=t._getActiveEdges(n).length;e[o]=!0}));var i=[];return Dh(e,(function(t){i.push(Number(t))})),xc(sv).call(sv,i,(function(t,e){return e-t})),i}},{key:\"_determineLevelsByHubsize\",value:function(){for(var t=this,e=function(e,i){t.hierarchical.levelDownstream(e,i)},i=this._getHubSizes(),n=function(n){var o=i[n];if(0===o)return\"break\";Dh(t.body.nodeIndices,(function(i){var n=t.body.nodes[i];o===t._getActiveEdges(n).length&&t._crawlNetwork(e,i)}))},o=0;o<i.length;++o){if(\"break\"===n(o))break}}},{key:\"_determineLevelsCustomCallback\",value:function(){var t=this;this._crawlNetwork((function(e,i,n){var o=t.hierarchical.levels[e.id];void 0===o&&(o=t.hierarchical.levels[e.id]=1e5);var r=(pp.cloneOptions(e,\"node\"),pp.cloneOptions(i,\"node\"),void pp.cloneOptions(n,\"edge\"));t.hierarchical.levels[i.id]=o+r})),this.hierarchical.setMinLevelToZero(this.body.nodes)}},{key:\"_determineLevelsDirected\",value:function(){var t,e=this,i=Kd(t=this.body.nodeIndices).call(t,(function(t,i){return t.set(i,e.body.nodes[i]),t}),new vd);\"roots\"===this.options.hierarchical.shakeTowards?this.hierarchical.levels=function(t){return wv((function(e){var i,n;return gv(i=mr(n=e.edges).call(n,(function(e){return t.has(e.toId)}))).call(i,(function(t){return t.from===e}))}),(function(t,e){return e<t}),\"to\",t)}(i):this.hierarchical.levels=function(t){return wv((function(e){var i,n;return gv(i=mr(n=e.edges).call(n,(function(e){return t.has(e.toId)}))).call(i,(function(t){return t.to===e}))}),(function(t,e){return e>t}),\"from\",t)}(i),this.hierarchical.setMinLevelToZero(this.body.nodes)}},{key:\"_generateMap\",value:function(){var t=this;this._crawlNetwork((function(e,i){t.hierarchical.levels[i.id]>t.hierarchical.levels[e.id]&&t.hierarchical.addRelation(e.id,i.id)})),this.hierarchical.checkIfTree()}},{key:\"_crawlNetwork\",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:function(){},i=arguments.length>1?arguments[1]:void 0,n={},o=function i(o,r){if(void 0===n[o.id]){var s;t.hierarchical.setTreeIndex(o,r),n[o.id]=!0;for(var a=t._getActiveEdges(o),h=0;h<a.length;h++){var l=a[h];!0===l.connected&&(s=l.toId==o.id?l.from:l.to,o.id!=s.id&&(e(o,s,l),i(s,r)))}}};if(void 0===i)for(var r=0,s=0;s<this.body.nodeIndices.length;s++){var a=this.body.nodeIndices[s];if(void 0===n[a]){var h=this.body.nodes[a];o(h,r),r+=1}}else{var l=this.body.nodes[i];if(void 0===l)return void console.error(\"Node not found:\",i);o(l)}}},{key:\"_shiftBlock\",value:function(t,e){var i=this,n={};!function t(o){if(!n[o]){n[o]=!0,i.direction.shift(o,e);var r=i.hierarchical.childrenReference[o];if(void 0!==r)for(var s=0;s<r.length;s++)t(r[s])}}(t)}},{key:\"_findCommonParent\",value:function(t,e){var i=this,n={};return function t(e,n){var o=i.hierarchical.parentReference[n];if(void 0!==o)for(var r=0;r<o.length;r++){var s=o[r];e[s]=!0,t(e,s)}}(n,t),function t(e,n){var o=i.hierarchical.parentReference[n];if(void 0!==o)for(var r=0;r<o.length;r++){var s=o[r];if(void 0!==e[s])return{foundParent:s,withChild:n};var a=t(e,s);if(null!==a.foundParent)return a}return{foundParent:null,withChild:n}}(n,e)}},{key:\"setDirectionStrategy\",value:function(){var t=\"UD\"===this.options.hierarchical.direction||\"DU\"===this.options.hierarchical.direction;this.direction=t?new dv(this):new cv(this)}},{key:\"_getCenterPosition\",value:function(t){for(var e=1e9,i=-1e9,n=0;n<t.length;n++){var o=void 0;if(void 0!==t[n].id)o=t[n];else{var r=t[n];o=this.body.nodes[r]}var s=this.direction.getPosition(o);e=Math.min(e,s),i=Math.max(i,s)}return.5*(e+i)}}]),t}();function xv(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return Ev(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Ev(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function Ev(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}var Ov=function(){function t(e,i,n,o){var r,s,a=this;Nn(this,t),this.body=e,this.canvas=i,this.selectionHandler=n,this.interactionHandler=o,this.editMode=!1,this.manipulationDiv=void 0,this.editModeDiv=void 0,this.closeDiv=void 0,this._domEventListenerCleanupQueue=[],this.temporaryUIFunctions={},this.temporaryEventFunctions=[],this.touchTime=0,this.temporaryIds={nodes:[],edges:[]},this.guiEnabled=!1,this.inMode=!1,this.selectedControlNode=void 0,this.options={},this.defaultOptions={enabled:!1,initiallyActive:!1,addNode:!0,addEdge:!0,editNode:void 0,editEdge:!0,deleteNode:!0,deleteEdge:!0,controlNodeStyle:{shape:\"dot\",size:6,color:{background:\"#ff0000\",border:\"#3c3c3c\",highlight:{background:\"#07f968\",border:\"#3c3c3c\"}},borderWidth:2,borderWidthSelected:2}},At(this.options,this.defaultOptions),this.body.emitter.on(\"destroy\",(function(){a._clean()})),this.body.emitter.on(\"_dataChanged\",Vt(r=this._restore).call(r,this)),this.body.emitter.on(\"_resetData\",Vt(s=this._restore).call(s,this))}return Fn(t,[{key:\"_restore\",value:function(){!1!==this.inMode&&(!0===this.options.initiallyActive?this.enableEditMode():this.disableEditMode())}},{key:\"setOptions\",value:function(t,e,i){void 0!==e&&(void 0!==e.locale?this.options.locale=e.locale:this.options.locale=i.locale,void 0!==e.locales?this.options.locales=e.locales:this.options.locales=i.locales),void 0!==t&&(\"boolean\"==typeof t?this.options.enabled=t:(this.options.enabled=!0,Ch(this.options,t)),!0===this.options.initiallyActive&&(this.editMode=!0),this._setup())}},{key:\"toggleEditMode\",value:function(){!0===this.editMode?this.disableEditMode():this.enableEditMode()}},{key:\"enableEditMode\",value:function(){this.editMode=!0,this._clean(),!0===this.guiEnabled&&(this.manipulationDiv.style.display=\"block\",this.closeDiv.style.display=\"block\",this.editModeDiv.style.display=\"none\",this.showManipulatorToolbar())}},{key:\"disableEditMode\",value:function(){this.editMode=!1,this._clean(),!0===this.guiEnabled&&(this.manipulationDiv.style.display=\"none\",this.closeDiv.style.display=\"none\",this.editModeDiv.style.display=\"block\",this._createEditButton())}},{key:\"showManipulatorToolbar\",value:function(){if(this._clean(),this.manipulationDOM={},!0===this.guiEnabled){var t,e;this.editMode=!0,this.manipulationDiv.style.display=\"block\",this.closeDiv.style.display=\"block\";var i=this.selectionHandler.getSelectedNodeCount(),n=this.selectionHandler.getSelectedEdgeCount(),o=i+n,r=this.options.locales[this.options.locale],s=!1;!1!==this.options.addNode&&(this._createAddNodeButton(r),s=!0),!1!==this.options.addEdge&&(!0===s?this._createSeperator(1):s=!0,this._createAddEdgeButton(r)),1===i&&\"function\"==typeof this.options.editNode?(!0===s?this._createSeperator(2):s=!0,this._createEditNodeButton(r)):1===n&&0===i&&!1!==this.options.editEdge&&(!0===s?this._createSeperator(3):s=!0,this._createEditEdgeButton(r)),0!==o&&(i>0&&!1!==this.options.deleteNode||0===i&&!1!==this.options.deleteEdge)&&(!0===s&&this._createSeperator(4),this._createDeleteButton(r)),this._bindElementEvents(this.closeDiv,Vt(t=this.toggleEditMode).call(t,this)),this._temporaryBindEvent(\"select\",Vt(e=this.showManipulatorToolbar).call(e,this))}this.body.emitter.emit(\"_redraw\")}},{key:\"addNodeMode\",value:function(){var t;if(!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode=\"addNode\",!0===this.guiEnabled){var e,i=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(i),this._createSeperator(),this._createDescription(i.addDescription||this.options.locales.en.addDescription),this._bindElementEvents(this.closeDiv,Vt(e=this.toggleEditMode).call(e,this))}this._temporaryBindEvent(\"click\",Vt(t=this._performAddNode).call(t,this))}},{key:\"editNode\",value:function(){var t=this;!0!==this.editMode&&this.enableEditMode(),this._clean();var e=this.selectionHandler.getSelectedNodes()[0];if(void 0!==e){if(this.inMode=\"editNode\",\"function\"!=typeof this.options.editNode)throw new Error(\"No function has been configured to handle the editing of nodes.\");if(!0!==e.isCluster){var i=Ch({},e.options,!1);if(i.x=e.x,i.y=e.y,2!==this.options.editNode.length)throw new Error(\"The function for edit does not support two arguments (data, callback)\");this.options.editNode(i,(function(e){null!=e&&\"editNode\"===t.inMode&&t.body.data.nodes.getDataSet().update(e),t.showManipulatorToolbar()}))}else alert(this.options.locales[this.options.locale].editClusterError||this.options.locales.en.editClusterError)}else this.showManipulatorToolbar()}},{key:\"addEdgeMode\",value:function(){var t,e,i,n,o;if(!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode=\"addEdge\",!0===this.guiEnabled){var r,s=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(s),this._createSeperator(),this._createDescription(s.edgeDescription||this.options.locales.en.edgeDescription),this._bindElementEvents(this.closeDiv,Vt(r=this.toggleEditMode).call(r,this))}this._temporaryBindUI(\"onTouch\",Vt(t=this._handleConnect).call(t,this)),this._temporaryBindUI(\"onDragEnd\",Vt(e=this._finishConnect).call(e,this)),this._temporaryBindUI(\"onDrag\",Vt(i=this._dragControlNode).call(i,this)),this._temporaryBindUI(\"onRelease\",Vt(n=this._finishConnect).call(n,this)),this._temporaryBindUI(\"onDragStart\",Vt(o=this._dragStartEdge).call(o,this)),this._temporaryBindUI(\"onHold\",(function(){}))}},{key:\"editEdgeMode\",value:function(){if(!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode=\"editEdge\",\"object\"!==go(this.options.editEdge)||\"function\"!=typeof this.options.editEdge.editWithoutDrag||(this.edgeBeingEditedId=this.selectionHandler.getSelectedEdgeIds()[0],void 0===this.edgeBeingEditedId)){if(!0===this.guiEnabled){var t,e=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(e),this._createSeperator(),this._createDescription(e.editEdgeDescription||this.options.locales.en.editEdgeDescription),this._bindElementEvents(this.closeDiv,Vt(t=this.toggleEditMode).call(t,this))}if(this.edgeBeingEditedId=this.selectionHandler.getSelectedEdgeIds()[0],void 0!==this.edgeBeingEditedId){var i,n,o,r,s=this.body.edges[this.edgeBeingEditedId],a=this._getNewTargetNode(s.from.x,s.from.y),h=this._getNewTargetNode(s.to.x,s.to.y);this.temporaryIds.nodes.push(a.id),this.temporaryIds.nodes.push(h.id),this.body.nodes[a.id]=a,this.body.nodeIndices.push(a.id),this.body.nodes[h.id]=h,this.body.nodeIndices.push(h.id),this._temporaryBindUI(\"onTouch\",Vt(i=this._controlNodeTouch).call(i,this)),this._temporaryBindUI(\"onTap\",(function(){})),this._temporaryBindUI(\"onHold\",(function(){})),this._temporaryBindUI(\"onDragStart\",Vt(n=this._controlNodeDragStart).call(n,this)),this._temporaryBindUI(\"onDrag\",Vt(o=this._controlNodeDrag).call(o,this)),this._temporaryBindUI(\"onDragEnd\",Vt(r=this._controlNodeDragEnd).call(r,this)),this._temporaryBindUI(\"onMouseMove\",(function(){})),this._temporaryBindEvent(\"beforeDrawing\",(function(t){var e=s.edgeType.findBorderPositions(t);!1===a.selected&&(a.x=e.from.x,a.y=e.from.y),!1===h.selected&&(h.x=e.to.x,h.y=e.to.y)})),this.body.emitter.emit(\"_redraw\")}else this.showManipulatorToolbar()}else{var l=this.body.edges[this.edgeBeingEditedId];this._performEditEdge(l.from.id,l.to.id)}}},{key:\"deleteSelected\",value:function(){var t=this;!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode=\"delete\";var e=this.selectionHandler.getSelectedNodeIds(),i=this.selectionHandler.getSelectedEdgeIds(),n=void 0;if(e.length>0){for(var o=0;o<e.length;o++)if(!0===this.body.nodes[e[o]].isCluster)return void alert(this.options.locales[this.options.locale].deleteClusterError||this.options.locales.en.deleteClusterError);\"function\"==typeof this.options.deleteNode&&(n=this.options.deleteNode)}else i.length>0&&\"function\"==typeof this.options.deleteEdge&&(n=this.options.deleteEdge);if(\"function\"==typeof n){var r={nodes:e,edges:i};if(2!==n.length)throw new Error(\"The function for delete does not support two arguments (data, callback)\");n(r,(function(e){null!=e&&\"delete\"===t.inMode?(t.body.data.edges.getDataSet().remove(e.edges),t.body.data.nodes.getDataSet().remove(e.nodes),t.body.emitter.emit(\"startSimulation\"),t.showManipulatorToolbar()):(t.body.emitter.emit(\"startSimulation\"),t.showManipulatorToolbar())}))}else this.body.data.edges.getDataSet().remove(i),this.body.data.nodes.getDataSet().remove(e),this.body.emitter.emit(\"startSimulation\"),this.showManipulatorToolbar()}},{key:\"_setup\",value:function(){!0===this.options.enabled?(this.guiEnabled=!0,this._createWrappers(),!1===this.editMode?this._createEditButton():this.showManipulatorToolbar()):(this._removeManipulationDOM(),this.guiEnabled=!1)}},{key:\"_createWrappers\",value:function(){var t,e;(void 0===this.manipulationDiv&&(this.manipulationDiv=document.createElement(\"div\"),this.manipulationDiv.className=\"vis-manipulation\",!0===this.editMode?this.manipulationDiv.style.display=\"block\":this.manipulationDiv.style.display=\"none\",this.canvas.frame.appendChild(this.manipulationDiv)),void 0===this.editModeDiv&&(this.editModeDiv=document.createElement(\"div\"),this.editModeDiv.className=\"vis-edit-mode\",!0===this.editMode?this.editModeDiv.style.display=\"none\":this.editModeDiv.style.display=\"block\",this.canvas.frame.appendChild(this.editModeDiv)),void 0===this.closeDiv)&&(this.closeDiv=document.createElement(\"button\"),this.closeDiv.className=\"vis-close\",this.closeDiv.setAttribute(\"aria-label\",null!==(t=null===(e=this.options.locales[this.options.locale])||void 0===e?void 0:e.close)&&void 0!==t?t:this.options.locales.en.close),this.closeDiv.style.display=this.manipulationDiv.style.display,this.canvas.frame.appendChild(this.closeDiv))}},{key:\"_getNewTargetNode\",value:function(t,e){var i=Ch({},this.options.controlNodeStyle);i.id=\"targetNode\"+Wc(),i.hidden=!1,i.physics=!1,i.x=t,i.y=e;var n=this.body.functions.createNode(i);return n.shape.boundingBox={left:t,right:t,top:e,bottom:e},n}},{key:\"_createEditButton\",value:function(){var t;this._clean(),this.manipulationDOM={},mh(this.editModeDiv);var e=this.options.locales[this.options.locale],i=this._createButton(\"editMode\",\"vis-edit vis-edit-mode\",e.edit||this.options.locales.en.edit);this.editModeDiv.appendChild(i),this._bindElementEvents(i,Vt(t=this.toggleEditMode).call(t,this))}},{key:\"_clean\",value:function(){this.inMode=!1,!0===this.guiEnabled&&(mh(this.editModeDiv),mh(this.manipulationDiv),this._cleanupDOMEventListeners()),this._cleanupTemporaryNodesAndEdges(),this._unbindTemporaryUIs(),this._unbindTemporaryEvents(),this.body.emitter.emit(\"restorePhysics\")}},{key:\"_cleanupDOMEventListeners\",value:function(){var t,e,i=xv(er(t=this._domEventListenerCleanupQueue).call(t,0));try{for(i.s();!(e=i.n()).done;){(0,e.value)()}}catch(t){i.e(t)}finally{i.f()}}},{key:\"_removeManipulationDOM\",value:function(){this._clean(),mh(this.manipulationDiv),mh(this.editModeDiv),mh(this.closeDiv),this.manipulationDiv&&this.canvas.frame.removeChild(this.manipulationDiv),this.editModeDiv&&this.canvas.frame.removeChild(this.editModeDiv),this.closeDiv&&this.canvas.frame.removeChild(this.closeDiv),this.manipulationDiv=void 0,this.editModeDiv=void 0,this.closeDiv=void 0}},{key:\"_createSeperator\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;this.manipulationDOM[\"seperatorLineDiv\"+t]=document.createElement(\"div\"),this.manipulationDOM[\"seperatorLineDiv\"+t].className=\"vis-separator-line\",this.manipulationDiv.appendChild(this.manipulationDOM[\"seperatorLineDiv\"+t])}},{key:\"_createAddNodeButton\",value:function(t){var e,i=this._createButton(\"addNode\",\"vis-add\",t.addNode||this.options.locales.en.addNode);this.manipulationDiv.appendChild(i),this._bindElementEvents(i,Vt(e=this.addNodeMode).call(e,this))}},{key:\"_createAddEdgeButton\",value:function(t){var e,i=this._createButton(\"addEdge\",\"vis-connect\",t.addEdge||this.options.locales.en.addEdge);this.manipulationDiv.appendChild(i),this._bindElementEvents(i,Vt(e=this.addEdgeMode).call(e,this))}},{key:\"_createEditNodeButton\",value:function(t){var e,i=this._createButton(\"editNode\",\"vis-edit\",t.editNode||this.options.locales.en.editNode);this.manipulationDiv.appendChild(i),this._bindElementEvents(i,Vt(e=this.editNode).call(e,this))}},{key:\"_createEditEdgeButton\",value:function(t){var e,i=this._createButton(\"editEdge\",\"vis-edit\",t.editEdge||this.options.locales.en.editEdge);this.manipulationDiv.appendChild(i),this._bindElementEvents(i,Vt(e=this.editEdgeMode).call(e,this))}},{key:\"_createDeleteButton\",value:function(t){var e,i;i=this.options.rtl?\"vis-delete-rtl\":\"vis-delete\";var n=this._createButton(\"delete\",i,t.del||this.options.locales.en.del);this.manipulationDiv.appendChild(n),this._bindElementEvents(n,Vt(e=this.deleteSelected).call(e,this))}},{key:\"_createBackButton\",value:function(t){var e,i=this._createButton(\"back\",\"vis-back\",t.back||this.options.locales.en.back);this.manipulationDiv.appendChild(i),this._bindElementEvents(i,Vt(e=this.showManipulatorToolbar).call(e,this))}},{key:\"_createButton\",value:function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:\"vis-label\";return this.manipulationDOM[t+\"Div\"]=document.createElement(\"button\"),this.manipulationDOM[t+\"Div\"].className=\"vis-button \"+e,this.manipulationDOM[t+\"Label\"]=document.createElement(\"div\"),this.manipulationDOM[t+\"Label\"].className=n,this.manipulationDOM[t+\"Label\"].innerText=i,this.manipulationDOM[t+\"Div\"].appendChild(this.manipulationDOM[t+\"Label\"]),this.manipulationDOM[t+\"Div\"]}},{key:\"_createDescription\",value:function(t){this.manipulationDOM.descriptionLabel=document.createElement(\"div\"),this.manipulationDOM.descriptionLabel.className=\"vis-none\",this.manipulationDOM.descriptionLabel.innerText=t,this.manipulationDiv.appendChild(this.manipulationDOM.descriptionLabel)}},{key:\"_temporaryBindEvent\",value:function(t,e){this.temporaryEventFunctions.push({event:t,boundFunction:e}),this.body.emitter.on(t,e)}},{key:\"_temporaryBindUI\",value:function(t,e){if(void 0===this.body.eventListeners[t])throw new Error(\"This UI function does not exist. Typo? You tried: \"+t+\" possible are: \"+es(zo(this.body.eventListeners)));this.temporaryUIFunctions[t]=this.body.eventListeners[t],this.body.eventListeners[t]=e}},{key:\"_unbindTemporaryUIs\",value:function(){for(var t in this.temporaryUIFunctions)Object.prototype.hasOwnProperty.call(this.temporaryUIFunctions,t)&&(this.body.eventListeners[t]=this.temporaryUIFunctions[t],delete this.temporaryUIFunctions[t]);this.temporaryUIFunctions={}}},{key:\"_unbindTemporaryEvents\",value:function(){for(var t=0;t<this.temporaryEventFunctions.length;t++){var e=this.temporaryEventFunctions[t].event,i=this.temporaryEventFunctions[t].boundFunction;this.body.emitter.off(e,i)}this.temporaryEventFunctions=[]}},{key:\"_bindElementEvents\",value:function(t,e){var i=new ll(t,{});_p(i,e),this._domEventListenerCleanupQueue.push((function(){i.destroy()}));var n=function(t){var i=t.keyCode,n=t.key;\"Enter\"!==n&&\" \"!==n&&13!==i&&32!==i||e()};t.addEventListener(\"keyup\",n,!1),this._domEventListenerCleanupQueue.push((function(){t.removeEventListener(\"keyup\",n,!1)}))}},{key:\"_cleanupTemporaryNodesAndEdges\",value:function(){for(var t=0;t<this.temporaryIds.edges.length;t++){var e;this.body.edges[this.temporaryIds.edges[t]].disconnect(),delete this.body.edges[this.temporaryIds.edges[t]];var i,n=Hr(e=this.body.edgeIndices).call(e,this.temporaryIds.edges[t]);if(-1!==n)er(i=this.body.edgeIndices).call(i,n,1)}for(var o=0;o<this.temporaryIds.nodes.length;o++){var r;delete this.body.nodes[this.temporaryIds.nodes[o]];var s,a=Hr(r=this.body.nodeIndices).call(r,this.temporaryIds.nodes[o]);if(-1!==a)er(s=this.body.nodeIndices).call(s,a,1)}this.temporaryIds={nodes:[],edges:[]}}},{key:\"_controlNodeTouch\",value:function(t){this.selectionHandler.unselectAll(),this.lastTouch=this.body.functions.getPointer(t.center),this.lastTouch.translation=At({},this.body.view.translation)}},{key:\"_controlNodeDragStart\",value:function(){var t=this.lastTouch,e=this.selectionHandler._pointerToPositionObject(t),i=this.body.nodes[this.temporaryIds.nodes[0]],n=this.body.nodes[this.temporaryIds.nodes[1]],o=this.body.edges[this.edgeBeingEditedId];this.selectedControlNode=void 0;var r=i.isOverlappingWith(e),s=n.isOverlappingWith(e);!0===r?(this.selectedControlNode=i,o.edgeType.from=i):!0===s&&(this.selectedControlNode=n,o.edgeType.to=n),void 0!==this.selectedControlNode&&this.selectionHandler.selectObject(this.selectedControlNode),this.body.emitter.emit(\"_redraw\")}},{key:\"_controlNodeDrag\",value:function(t){this.body.emitter.emit(\"disablePhysics\");var e=this.body.functions.getPointer(t.center),i=this.canvas.DOMtoCanvas(e);void 0!==this.selectedControlNode?(this.selectedControlNode.x=i.x,this.selectedControlNode.y=i.y):this.interactionHandler.onDrag(t),this.body.emitter.emit(\"_redraw\")}},{key:\"_controlNodeDragEnd\",value:function(t){var e=this.body.functions.getPointer(t.center),i=this.selectionHandler._pointerToPositionObject(e),n=this.body.edges[this.edgeBeingEditedId];if(void 0!==this.selectedControlNode){this.selectionHandler.unselectAll();for(var o=this.selectionHandler._getAllNodesOverlappingWith(i),r=void 0,s=o.length-1;s>=0;s--)if(o[s]!==this.selectedControlNode.id){r=this.body.nodes[o[s]];break}if(void 0!==r&&void 0!==this.selectedControlNode)if(!0===r.isCluster)alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError);else{var a=this.body.nodes[this.temporaryIds.nodes[0]];this.selectedControlNode.id===a.id?this._performEditEdge(r.id,n.to.id):this._performEditEdge(n.from.id,r.id)}else n.updateEdgeType(),this.body.emitter.emit(\"restorePhysics\");this.body.emitter.emit(\"_redraw\")}}},{key:\"_handleConnect\",value:function(t){if((new Date).valueOf()-this.touchTime>100){this.lastTouch=this.body.functions.getPointer(t.center),this.lastTouch.translation=At({},this.body.view.translation),this.interactionHandler.drag.pointer=this.lastTouch,this.interactionHandler.drag.translation=this.lastTouch.translation;var e=this.lastTouch,i=this.selectionHandler.getNodeAt(e);if(void 0!==i)if(!0===i.isCluster)alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError);else{var n=this._getNewTargetNode(i.x,i.y);this.body.nodes[n.id]=n,this.body.nodeIndices.push(n.id);var o=this.body.functions.createEdge({id:\"connectionEdge\"+Wc(),from:i.id,to:n.id,physics:!1,smooth:{enabled:!0,type:\"continuous\",roundness:.5}});this.body.edges[o.id]=o,this.body.edgeIndices.push(o.id),this.temporaryIds.nodes.push(n.id),this.temporaryIds.edges.push(o.id)}this.touchTime=(new Date).valueOf()}}},{key:\"_dragControlNode\",value:function(t){var e=this.body.functions.getPointer(t.center),i=this.selectionHandler._pointerToPositionObject(e),n=void 0;void 0!==this.temporaryIds.edges[0]&&(n=this.body.edges[this.temporaryIds.edges[0]].fromId);for(var o=this.selectionHandler._getAllNodesOverlappingWith(i),r=void 0,s=o.length-1;s>=0;s--){var a;if(-1===Hr(a=this.temporaryIds.nodes).call(a,o[s])){r=this.body.nodes[o[s]];break}}if(t.controlEdge={from:n,to:r?r.id:void 0},this.selectionHandler.generateClickEvent(\"controlNodeDragging\",t,e),void 0!==this.temporaryIds.nodes[0]){var h=this.body.nodes[this.temporaryIds.nodes[0]];h.x=this.canvas._XconvertDOMtoCanvas(e.x),h.y=this.canvas._YconvertDOMtoCanvas(e.y),this.body.emitter.emit(\"_redraw\")}else this.interactionHandler.onDrag(t)}},{key:\"_finishConnect\",value:function(t){var e=this.body.functions.getPointer(t.center),i=this.selectionHandler._pointerToPositionObject(e),n=void 0;void 0!==this.temporaryIds.edges[0]&&(n=this.body.edges[this.temporaryIds.edges[0]].fromId);for(var o=this.selectionHandler._getAllNodesOverlappingWith(i),r=void 0,s=o.length-1;s>=0;s--){var a;if(-1===Hr(a=this.temporaryIds.nodes).call(a,o[s])){r=this.body.nodes[o[s]];break}}this._cleanupTemporaryNodesAndEdges(),void 0!==r&&(!0===r.isCluster?alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError):void 0!==this.body.nodes[n]&&void 0!==this.body.nodes[r.id]&&this._performAddEdge(n,r.id)),t.controlEdge={from:n,to:r?r.id:void 0},this.selectionHandler.generateClickEvent(\"controlNodeDragEnd\",t,e),this.body.emitter.emit(\"_redraw\")}},{key:\"_dragStartEdge\",value:function(t){var e=this.lastTouch;this.selectionHandler.generateClickEvent(\"dragStart\",t,e,void 0,!0)}},{key:\"_performAddNode\",value:function(t){var e=this,i={id:Wc(),x:t.pointer.canvas.x,y:t.pointer.canvas.y,label:\"new\"};if(\"function\"==typeof this.options.addNode){if(2!==this.options.addNode.length)throw this.showManipulatorToolbar(),new Error(\"The function for add does not support two arguments (data,callback)\");this.options.addNode(i,(function(t){null!=t&&\"addNode\"===e.inMode&&e.body.data.nodes.getDataSet().add(t),e.showManipulatorToolbar()}))}else this.body.data.nodes.getDataSet().add(i),this.showManipulatorToolbar()}},{key:\"_performAddEdge\",value:function(t,e){var i=this,n={from:t,to:e};if(\"function\"==typeof this.options.addEdge){if(2!==this.options.addEdge.length)throw new Error(\"The function for connect does not support two arguments (data,callback)\");this.options.addEdge(n,(function(t){null!=t&&\"addEdge\"===i.inMode&&(i.body.data.edges.getDataSet().add(t),i.selectionHandler.unselectAll(),i.showManipulatorToolbar())}))}else this.body.data.edges.getDataSet().add(n),this.selectionHandler.unselectAll(),this.showManipulatorToolbar()}},{key:\"_performEditEdge\",value:function(t,e){var i=this,n={id:this.edgeBeingEditedId,from:t,to:e,label:this.body.data.edges.get(this.edgeBeingEditedId).label},o=this.options.editEdge;if(\"object\"===go(o)&&(o=o.editWithoutDrag),\"function\"==typeof o){if(2!==o.length)throw new Error(\"The function for edit does not support two arguments (data, callback)\");o(n,(function(t){null==t||\"editEdge\"!==i.inMode?(i.body.edges[n.id].updateEdgeType(),i.body.emitter.emit(\"_redraw\"),i.showManipulatorToolbar()):(i.body.data.edges.getDataSet().update(t),i.selectionHandler.unselectAll(),i.showManipulatorToolbar())}))}else this.body.data.edges.getDataSet().update(n),this.selectionHandler.unselectAll(),this.showManipulatorToolbar()}}]),t}(),Cv=\"string\",Sv=\"boolean\",Tv=\"number\",Mv=\"array\",Pv=\"object\",Dv=[\"arrow\",\"bar\",\"box\",\"circle\",\"crow\",\"curve\",\"diamond\",\"image\",\"inv_curve\",\"inv_triangle\",\"triangle\",\"vee\"],Iv={borderWidth:{number:Tv},borderWidthSelected:{number:Tv,undefined:\"undefined\"},brokenImage:{string:Cv,undefined:\"undefined\"},chosen:{label:{boolean:Sv,function:\"function\"},node:{boolean:Sv,function:\"function\"},__type__:{object:Pv,boolean:Sv}},color:{border:{string:Cv},background:{string:Cv},highlight:{border:{string:Cv},background:{string:Cv},__type__:{object:Pv,string:Cv}},hover:{border:{string:Cv},background:{string:Cv},__type__:{object:Pv,string:Cv}},__type__:{object:Pv,string:Cv}},opacity:{number:Tv,undefined:\"undefined\"},fixed:{x:{boolean:Sv},y:{boolean:Sv},__type__:{object:Pv,boolean:Sv}},font:{align:{string:Cv},color:{string:Cv},size:{number:Tv},face:{string:Cv},background:{string:Cv},strokeWidth:{number:Tv},strokeColor:{string:Cv},vadjust:{number:Tv},multi:{boolean:Sv,string:Cv},bold:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},boldital:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},ital:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},mono:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},__type__:{object:Pv,string:Cv}},group:{string:Cv,number:Tv,undefined:\"undefined\"},heightConstraint:{minimum:{number:Tv},valign:{string:Cv},__type__:{object:Pv,boolean:Sv,number:Tv}},hidden:{boolean:Sv},icon:{face:{string:Cv},code:{string:Cv},size:{number:Tv},color:{string:Cv},weight:{string:Cv,number:Tv},__type__:{object:Pv}},id:{string:Cv,number:Tv},image:{selected:{string:Cv,undefined:\"undefined\"},unselected:{string:Cv,undefined:\"undefined\"},__type__:{object:Pv,string:Cv}},imagePadding:{top:{number:Tv},right:{number:Tv},bottom:{number:Tv},left:{number:Tv},__type__:{object:Pv,number:Tv}},label:{string:Cv,undefined:\"undefined\"},labelHighlightBold:{boolean:Sv},level:{number:Tv,undefined:\"undefined\"},margin:{top:{number:Tv},right:{number:Tv},bottom:{number:Tv},left:{number:Tv},__type__:{object:Pv,number:Tv}},mass:{number:Tv},physics:{boolean:Sv},scaling:{min:{number:Tv},max:{number:Tv},label:{enabled:{boolean:Sv},min:{number:Tv},max:{number:Tv},maxVisible:{number:Tv},drawThreshold:{number:Tv},__type__:{object:Pv,boolean:Sv}},customScalingFunction:{function:\"function\"},__type__:{object:Pv}},shadow:{enabled:{boolean:Sv},color:{string:Cv},size:{number:Tv},x:{number:Tv},y:{number:Tv},__type__:{object:Pv,boolean:Sv}},shape:{string:[\"custom\",\"ellipse\",\"circle\",\"database\",\"box\",\"text\",\"image\",\"circularImage\",\"diamond\",\"dot\",\"star\",\"triangle\",\"triangleDown\",\"square\",\"icon\",\"hexagon\"]},ctxRenderer:{function:\"function\"},shapeProperties:{borderDashes:{boolean:Sv,array:Mv},borderRadius:{number:Tv},interpolation:{boolean:Sv},useImageSize:{boolean:Sv},useBorderWithImage:{boolean:Sv},coordinateOrigin:{string:[\"center\",\"top-left\"]},__type__:{object:Pv}},size:{number:Tv},title:{string:Cv,dom:\"dom\",undefined:\"undefined\"},value:{number:Tv,undefined:\"undefined\"},widthConstraint:{minimum:{number:Tv},maximum:{number:Tv},__type__:{object:Pv,boolean:Sv,number:Tv}},x:{number:Tv},y:{number:Tv},__type__:{object:Pv}},Bv={configure:{enabled:{boolean:Sv},filter:{boolean:Sv,string:Cv,array:Mv,function:\"function\"},container:{dom:\"dom\"},showButton:{boolean:Sv},__type__:{object:Pv,boolean:Sv,string:Cv,array:Mv,function:\"function\"}},edges:{arrows:{to:{enabled:{boolean:Sv},scaleFactor:{number:Tv},type:{string:Dv},imageHeight:{number:Tv},imageWidth:{number:Tv},src:{string:Cv},__type__:{object:Pv,boolean:Sv}},middle:{enabled:{boolean:Sv},scaleFactor:{number:Tv},type:{string:Dv},imageWidth:{number:Tv},imageHeight:{number:Tv},src:{string:Cv},__type__:{object:Pv,boolean:Sv}},from:{enabled:{boolean:Sv},scaleFactor:{number:Tv},type:{string:Dv},imageWidth:{number:Tv},imageHeight:{number:Tv},src:{string:Cv},__type__:{object:Pv,boolean:Sv}},__type__:{string:[\"from\",\"to\",\"middle\"],object:Pv}},endPointOffset:{from:{number:Tv},to:{number:Tv},__type__:{object:Pv,number:Tv}},arrowStrikethrough:{boolean:Sv},background:{enabled:{boolean:Sv},color:{string:Cv},size:{number:Tv},dashes:{boolean:Sv,array:Mv},__type__:{object:Pv,boolean:Sv}},chosen:{label:{boolean:Sv,function:\"function\"},edge:{boolean:Sv,function:\"function\"},__type__:{object:Pv,boolean:Sv}},color:{color:{string:Cv},highlight:{string:Cv},hover:{string:Cv},inherit:{string:[\"from\",\"to\",\"both\"],boolean:Sv},opacity:{number:Tv},__type__:{object:Pv,string:Cv}},dashes:{boolean:Sv,array:Mv},font:{color:{string:Cv},size:{number:Tv},face:{string:Cv},background:{string:Cv},strokeWidth:{number:Tv},strokeColor:{string:Cv},align:{string:[\"horizontal\",\"top\",\"middle\",\"bottom\"]},vadjust:{number:Tv},multi:{boolean:Sv,string:Cv},bold:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},boldital:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},ital:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},mono:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},__type__:{object:Pv,string:Cv}},hidden:{boolean:Sv},hoverWidth:{function:\"function\",number:Tv},label:{string:Cv,undefined:\"undefined\"},labelHighlightBold:{boolean:Sv},length:{number:Tv,undefined:\"undefined\"},physics:{boolean:Sv},scaling:{min:{number:Tv},max:{number:Tv},label:{enabled:{boolean:Sv},min:{number:Tv},max:{number:Tv},maxVisible:{number:Tv},drawThreshold:{number:Tv},__type__:{object:Pv,boolean:Sv}},customScalingFunction:{function:\"function\"},__type__:{object:Pv}},selectionWidth:{function:\"function\",number:Tv},selfReferenceSize:{number:Tv},selfReference:{size:{number:Tv},angle:{number:Tv},renderBehindTheNode:{boolean:Sv},__type__:{object:Pv}},shadow:{enabled:{boolean:Sv},color:{string:Cv},size:{number:Tv},x:{number:Tv},y:{number:Tv},__type__:{object:Pv,boolean:Sv}},smooth:{enabled:{boolean:Sv},type:{string:[\"dynamic\",\"continuous\",\"discrete\",\"diagonalCross\",\"straightCross\",\"horizontal\",\"vertical\",\"curvedCW\",\"curvedCCW\",\"cubicBezier\"]},roundness:{number:Tv},forceDirection:{string:[\"horizontal\",\"vertical\",\"none\"],boolean:Sv},__type__:{object:Pv,boolean:Sv}},title:{string:Cv,undefined:\"undefined\"},width:{number:Tv},widthConstraint:{maximum:{number:Tv},__type__:{object:Pv,boolean:Sv,number:Tv}},value:{number:Tv,undefined:\"undefined\"},__type__:{object:Pv}},groups:{useDefaultGroups:{boolean:Sv},__any__:Iv,__type__:{object:Pv}},interaction:{dragNodes:{boolean:Sv},dragView:{boolean:Sv},hideEdgesOnDrag:{boolean:Sv},hideEdgesOnZoom:{boolean:Sv},hideNodesOnDrag:{boolean:Sv},hover:{boolean:Sv},keyboard:{enabled:{boolean:Sv},speed:{x:{number:Tv},y:{number:Tv},zoom:{number:Tv},__type__:{object:Pv}},bindToWindow:{boolean:Sv},autoFocus:{boolean:Sv},__type__:{object:Pv,boolean:Sv}},multiselect:{boolean:Sv},navigationButtons:{boolean:Sv},selectable:{boolean:Sv},selectConnectedEdges:{boolean:Sv},hoverConnectedEdges:{boolean:Sv},tooltipDelay:{number:Tv},zoomView:{boolean:Sv},zoomSpeed:{number:Tv},__type__:{object:Pv}},layout:{randomSeed:{undefined:\"undefined\",number:Tv,string:Cv},improvedLayout:{boolean:Sv},clusterThreshold:{number:Tv},hierarchical:{enabled:{boolean:Sv},levelSeparation:{number:Tv},nodeSpacing:{number:Tv},treeSpacing:{number:Tv},blockShifting:{boolean:Sv},edgeMinimization:{boolean:Sv},parentCentralization:{boolean:Sv},direction:{string:[\"UD\",\"DU\",\"LR\",\"RL\"]},sortMethod:{string:[\"hubsize\",\"directed\"]},shakeTowards:{string:[\"leaves\",\"roots\"]},__type__:{object:Pv,boolean:Sv}},__type__:{object:Pv}},manipulation:{enabled:{boolean:Sv},initiallyActive:{boolean:Sv},addNode:{boolean:Sv,function:\"function\"},addEdge:{boolean:Sv,function:\"function\"},editNode:{function:\"function\"},editEdge:{editWithoutDrag:{function:\"function\"},__type__:{object:Pv,boolean:Sv,function:\"function\"}},deleteNode:{boolean:Sv,function:\"function\"},deleteEdge:{boolean:Sv,function:\"function\"},controlNodeStyle:Iv,__type__:{object:Pv,boolean:Sv}},nodes:Iv,physics:{enabled:{boolean:Sv},barnesHut:{theta:{number:Tv},gravitationalConstant:{number:Tv},centralGravity:{number:Tv},springLength:{number:Tv},springConstant:{number:Tv},damping:{number:Tv},avoidOverlap:{number:Tv},__type__:{object:Pv}},forceAtlas2Based:{theta:{number:Tv},gravitationalConstant:{number:Tv},centralGravity:{number:Tv},springLength:{number:Tv},springConstant:{number:Tv},damping:{number:Tv},avoidOverlap:{number:Tv},__type__:{object:Pv}},repulsion:{centralGravity:{number:Tv},springLength:{number:Tv},springConstant:{number:Tv},nodeDistance:{number:Tv},damping:{number:Tv},__type__:{object:Pv}},hierarchicalRepulsion:{centralGravity:{number:Tv},springLength:{number:Tv},springConstant:{number:Tv},nodeDistance:{number:Tv},damping:{number:Tv},avoidOverlap:{number:Tv},__type__:{object:Pv}},maxVelocity:{number:Tv},minVelocity:{number:Tv},solver:{string:[\"barnesHut\",\"repulsion\",\"hierarchicalRepulsion\",\"forceAtlas2Based\"]},stabilization:{enabled:{boolean:Sv},iterations:{number:Tv},updateInterval:{number:Tv},onlyDynamicEdges:{boolean:Sv},fit:{boolean:Sv},__type__:{object:Pv,boolean:Sv}},timestep:{number:Tv},adaptiveTimestep:{boolean:Sv},wind:{x:{number:Tv},y:{number:Tv},__type__:{object:Pv}},__type__:{object:Pv,boolean:Sv}},autoResize:{boolean:Sv},clickToUse:{boolean:Sv},locale:{string:Cv},locales:{__any__:{any:\"any\"},__type__:{object:Pv}},height:{string:Cv},width:{string:Cv},__type__:{object:Pv}},zv={nodes:{borderWidth:[1,0,10,1],borderWidthSelected:[2,0,10,1],color:{border:[\"color\",\"#2B7CE9\"],background:[\"color\",\"#97C2FC\"],highlight:{border:[\"color\",\"#2B7CE9\"],background:[\"color\",\"#D2E5FF\"]},hover:{border:[\"color\",\"#2B7CE9\"],background:[\"color\",\"#D2E5FF\"]}},opacity:[0,0,1,.1],fixed:{x:!1,y:!1},font:{color:[\"color\",\"#343434\"],size:[14,0,100,1],face:[\"arial\",\"verdana\",\"tahoma\"],background:[\"color\",\"none\"],strokeWidth:[0,0,50,1],strokeColor:[\"color\",\"#ffffff\"]},hidden:!1,labelHighlightBold:!0,physics:!0,scaling:{min:[10,0,200,1],max:[30,0,200,1],label:{enabled:!1,min:[14,0,200,1],max:[30,0,200,1],maxVisible:[30,0,200,1],drawThreshold:[5,0,20,1]}},shadow:{enabled:!1,color:\"rgba(0,0,0,0.5)\",size:[10,0,20,1],x:[5,-30,30,1],y:[5,-30,30,1]},shape:[\"ellipse\",\"box\",\"circle\",\"database\",\"diamond\",\"dot\",\"square\",\"star\",\"text\",\"triangle\",\"triangleDown\",\"hexagon\"],shapeProperties:{borderDashes:!1,borderRadius:[6,0,20,1],interpolation:!0,useImageSize:!1},size:[25,0,200,1]},edges:{arrows:{to:{enabled:!1,scaleFactor:[1,0,3,.05],type:\"arrow\"},middle:{enabled:!1,scaleFactor:[1,0,3,.05],type:\"arrow\"},from:{enabled:!1,scaleFactor:[1,0,3,.05],type:\"arrow\"}},endPointOffset:{from:[0,-10,10,1],to:[0,-10,10,1]},arrowStrikethrough:!0,color:{color:[\"color\",\"#848484\"],highlight:[\"color\",\"#848484\"],hover:[\"color\",\"#848484\"],inherit:[\"from\",\"to\",\"both\",!0,!1],opacity:[1,0,1,.05]},dashes:!1,font:{color:[\"color\",\"#343434\"],size:[14,0,100,1],face:[\"arial\",\"verdana\",\"tahoma\"],background:[\"color\",\"none\"],strokeWidth:[2,0,50,1],strokeColor:[\"color\",\"#ffffff\"],align:[\"horizontal\",\"top\",\"middle\",\"bottom\"]},hidden:!1,hoverWidth:[1.5,0,5,.1],labelHighlightBold:!0,physics:!0,scaling:{min:[1,0,100,1],max:[15,0,100,1],label:{enabled:!0,min:[14,0,200,1],max:[30,0,200,1],maxVisible:[30,0,200,1],drawThreshold:[5,0,20,1]}},selectionWidth:[1.5,0,5,.1],selfReferenceSize:[20,0,200,1],selfReference:{size:[20,0,200,1],angle:[Math.PI/2,-6*Math.PI,6*Math.PI,Math.PI/8],renderBehindTheNode:!0},shadow:{enabled:!1,color:\"rgba(0,0,0,0.5)\",size:[10,0,20,1],x:[5,-30,30,1],y:[5,-30,30,1]},smooth:{enabled:!0,type:[\"dynamic\",\"continuous\",\"discrete\",\"diagonalCross\",\"straightCross\",\"horizontal\",\"vertical\",\"curvedCW\",\"curvedCCW\",\"cubicBezier\"],forceDirection:[\"horizontal\",\"vertical\",\"none\"],roundness:[.5,0,1,.05]},width:[1,0,30,1]},layout:{hierarchical:{enabled:!1,levelSeparation:[150,20,500,5],nodeSpacing:[100,20,500,5],treeSpacing:[200,20,500,5],blockShifting:!0,edgeMinimization:!0,parentCentralization:!0,direction:[\"UD\",\"DU\",\"LR\",\"RL\"],sortMethod:[\"hubsize\",\"directed\"],shakeTowards:[\"leaves\",\"roots\"]}},interaction:{dragNodes:!0,dragView:!0,hideEdgesOnDrag:!1,hideEdgesOnZoom:!1,hideNodesOnDrag:!1,hover:!1,keyboard:{enabled:!1,speed:{x:[10,0,40,1],y:[10,0,40,1],zoom:[.02,0,.1,.005]},bindToWindow:!0,autoFocus:!0},multiselect:!1,navigationButtons:!1,selectable:!0,selectConnectedEdges:!0,hoverConnectedEdges:!0,tooltipDelay:[300,0,1e3,25],zoomView:!0,zoomSpeed:[1,.1,2,.1]},manipulation:{enabled:!1,initiallyActive:!1},physics:{enabled:!0,barnesHut:{theta:[.5,.1,1,.05],gravitationalConstant:[-2e3,-3e4,0,50],centralGravity:[.3,0,10,.05],springLength:[95,0,500,5],springConstant:[.04,0,1.2,.005],damping:[.09,0,1,.01],avoidOverlap:[0,0,1,.01]},forceAtlas2Based:{theta:[.5,.1,1,.05],gravitationalConstant:[-50,-500,0,1],centralGravity:[.01,0,1,.005],springLength:[95,0,500,5],springConstant:[.08,0,1.2,.005],damping:[.4,0,1,.01],avoidOverlap:[0,0,1,.01]},repulsion:{centralGravity:[.2,0,10,.05],springLength:[200,0,500,5],springConstant:[.05,0,1.2,.005],nodeDistance:[100,0,500,5],damping:[.09,0,1,.01]},hierarchicalRepulsion:{centralGravity:[.2,0,10,.05],springLength:[100,0,500,5],springConstant:[.01,0,1.2,.005],nodeDistance:[120,0,500,5],damping:[.09,0,1,.01],avoidOverlap:[0,0,1,.01]},maxVelocity:[50,0,150,1],minVelocity:[.1,.01,.5,.01],solver:[\"barnesHut\",\"forceAtlas2Based\",\"repulsion\",\"hierarchicalRepulsion\"],timestep:[.5,.01,1,.01],wind:{x:[0,-10,10,.1],y:[0,-10,10,.1]}}},Nv=function(t,e,i){var n;return!(!dr(t).call(t,\"physics\")||!dr(n=zv.physics.solver).call(n,e)||i.physics.solver===e||\"wind\"===e)},Av=Object.freeze({__proto__:null,configuratorHideOption:Nv,allOptions:Bv,configureOptions:zv}),Fv=function(){function t(){Nn(this,t)}return Fn(t,[{key:\"getDistances\",value:function(t,e,i){for(var n={},o=t.edges,r=0;r<e.length;r++){var s={};n[e[r]]=s;for(var a=0;a<e.length;a++)s[e[a]]=r==a?0:1e9}for(var h=0;h<i.length;h++){var l=o[i[h]];!0===l.connected&&void 0!==n[l.fromId]&&void 0!==n[l.toId]&&(n[l.fromId][l.toId]=1,n[l.toId][l.fromId]=1)}for(var d=e.length,c=0;c<d;c++)for(var u=e[c],f=n[u],p=0;p<d-1;p++)for(var v=e[p],g=n[v],y=p+1;y<d;y++){var m=e[y],b=n[m],w=Math.min(g[m],g[u]+f[m]);g[m]=w,b[v]=w}return n}}]),t}(),jv=function(){function t(e,i,n){Nn(this,t),this.body=e,this.springLength=i,this.springConstant=n,this.distanceSolver=new Fv}return Fn(t,[{key:\"setOptions\",value:function(t){t&&(t.springLength&&(this.springLength=t.springLength),t.springConstant&&(this.springConstant=t.springConstant))}},{key:\"solve\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=this.distanceSolver.getDistances(this.body,t,e);this._createL_matrix(n),this._createK_matrix(n),this._createE_matrix();for(var o=.01,r=1,s=0,a=Math.max(1e3,Math.min(10*this.body.nodeIndices.length,6e3)),h=5,l=1e9,d=0,c=0,u=0,f=0,p=0;l>o&&s<a;){s+=1;var v=this._getHighestEnergyNode(i),g=uo(v,4);for(d=g[0],l=g[1],c=g[2],u=g[3],f=l,p=0;f>r&&p<h;){p+=1,this._moveNode(d,c,u);var y=this._getEnergy(d),m=uo(y,3);f=m[0],c=m[1],u=m[2]}}}},{key:\"_getHighestEnergyNode\",value:function(t){for(var e=this.body.nodeIndices,i=this.body.nodes,n=0,o=e[0],r=0,s=0,a=0;a<e.length;a++){var h=e[a];if(!0!==i[h].predefinedPosition||!0===i[h].isCluster&&!0===t||!0!==i[h].options.fixed.x||!0!==i[h].options.fixed.y){var l=this._getEnergy(h),d=uo(l,3),c=d[0],u=d[1],f=d[2];n<c&&(n=c,o=h,r=u,s=f)}}return[o,n,r,s]}},{key:\"_getEnergy\",value:function(t){var e=uo(this.E_sums[t],2),i=e[0],n=e[1];return[Math.sqrt(Math.pow(i,2)+Math.pow(n,2)),i,n]}},{key:\"_moveNode\",value:function(t,e,i){for(var n=this.body.nodeIndices,o=this.body.nodes,r=0,s=0,a=0,h=o[t].x,l=o[t].y,d=this.K_matrix[t],c=this.L_matrix[t],u=0;u<n.length;u++){var f=n[u];if(f!==t){var p=o[f].x,v=o[f].y,g=d[f],y=c[f],m=1/Math.pow(Math.pow(h-p,2)+Math.pow(l-v,2),1.5);r+=g*(1-y*Math.pow(l-v,2)*m),s+=g*(y*(h-p)*(l-v)*m),a+=g*(1-y*Math.pow(h-p,2)*m)}}var b=(e/r+i/s)/(s/r-a/s),w=-(s*b+e)/r;o[t].x+=w,o[t].y+=b,this._updateE_matrix(t)}},{key:\"_createL_matrix\",value:function(t){var e=this.body.nodeIndices,i=this.springLength;this.L_matrix=[];for(var n=0;n<e.length;n++){this.L_matrix[e[n]]={};for(var o=0;o<e.length;o++)this.L_matrix[e[n]][e[o]]=i*t[e[n]][e[o]]}}},{key:\"_createK_matrix\",value:function(t){var e=this.body.nodeIndices,i=this.springConstant;this.K_matrix=[];for(var n=0;n<e.length;n++){this.K_matrix[e[n]]={};for(var o=0;o<e.length;o++)this.K_matrix[e[n]][e[o]]=i*Math.pow(t[e[n]][e[o]],-2)}}},{key:\"_createE_matrix\",value:function(){var t=this.body.nodeIndices,e=this.body.nodes;this.E_matrix={},this.E_sums={};for(var i=0;i<t.length;i++)this.E_matrix[t[i]]=[];for(var n=0;n<t.length;n++){for(var o=t[n],r=e[o].x,s=e[o].y,a=0,h=0,l=n;l<t.length;l++){var d=t[l];if(d!==o){var c=e[d].x,u=e[d].y,f=1/Math.sqrt(Math.pow(r-c,2)+Math.pow(s-u,2));this.E_matrix[o][l]=[this.K_matrix[o][d]*(r-c-this.L_matrix[o][d]*(r-c)*f),this.K_matrix[o][d]*(s-u-this.L_matrix[o][d]*(s-u)*f)],this.E_matrix[d][n]=this.E_matrix[o][l],a+=this.E_matrix[o][l][0],h+=this.E_matrix[o][l][1]}}this.E_sums[o]=[a,h]}}},{key:\"_updateE_matrix\",value:function(t){for(var e=this.body.nodeIndices,i=this.body.nodes,n=this.E_matrix[t],o=this.K_matrix[t],r=this.L_matrix[t],s=i[t].x,a=i[t].y,h=0,l=0,d=0;d<e.length;d++){var c=e[d];if(c!==t){var u=n[d],f=u[0],p=u[1],v=i[c].x,g=i[c].y,y=1/Math.sqrt(Math.pow(s-v,2)+Math.pow(a-g,2)),m=o[c]*(s-v-r[c]*(s-v)*y),b=o[c]*(a-g-r[c]*(a-g)*y);n[d]=[m,b],h+=m,l+=b;var w=this.E_sums[c];w[0]+=m-f,w[1]+=b-p}}this.E_sums[t]=[h,l]}}]),t}();function Rv(t,e,i){var n,o,r,s,a=this;if(!(this instanceof Rv))throw new SyntaxError(\"Constructor must be called with the new operator\");this.options={},this.defaultOptions={locale:\"en\",locales:Kl,clickToUse:!1},At(this.options,this.defaultOptions),this.body={container:t,nodes:{},nodeIndices:[],edges:{},edgeIndices:[],emitter:{on:Vt(n=this.on).call(n,this),off:Vt(o=this.off).call(o,this),emit:Vt(r=this.emit).call(r,this),once:Vt(s=this.once).call(s,this)},eventListeners:{onTap:function(){},onTouch:function(){},onDoubleTap:function(){},onHold:function(){},onDragStart:function(){},onDrag:function(){},onDragEnd:function(){},onMouseWheel:function(){},onPinch:function(){},onMouseMove:function(){},onRelease:function(){},onContext:function(){}},data:{nodes:null,edges:null},functions:{createNode:function(){},createEdge:function(){},getPointer:function(){}},modules:{},view:{scale:1,translation:{x:0,y:0}},selectionBox:{show:!1,position:{start:{x:0,y:0},end:{x:0,y:0}}}},this.bindEventListeners(),this.images=new Zl((function(){return a.body.emitter.emit(\"_requestRedraw\")})),this.groups=new gd,this.canvas=new Ep(this.body),this.selectionHandler=new ov(this.body,this.canvas),this.interactionHandler=new Ip(this.body,this.canvas,this.selectionHandler),this.view=new Cp(this.body,this.canvas),this.renderer=new wp(this.body,this.canvas),this.physics=new fp(this.body),this.layoutEngine=new _v(this.body),this.clustering=new yp(this.body),this.manipulation=new Ov(this.body,this.canvas,this.selectionHandler,this.interactionHandler),this.nodesHandler=new pf(this.body,this.images,this.groups,this.layoutEngine),this.edgesHandler=new ip(this.body,this.images,this.groups),this.body.modules.kamadaKawai=new jv(this.body,150,.05),this.body.modules.clustering=this.clustering,this.canvas._create(),this.setOptions(i),this.setData(e)}function Lv(t){for(var e in t)Object.prototype.hasOwnProperty.call(t,e)&&(t[e].redundant=t[e].used,t[e].used=[])}function Hv(t){for(var e in t)if(Object.prototype.hasOwnProperty.call(t,e)&&t[e].redundant){for(var i=0;i<t[e].redundant.length;i++)t[e].redundant[i].parentNode.removeChild(t[e].redundant[i]);t[e].redundant=[]}}function Wv(t,e,i){var n;return Object.prototype.hasOwnProperty.call(e,t)?e[t].redundant.length>0?(n=e[t].redundant[0],e[t].redundant.shift()):(n=document.createElementNS(\"http://www.w3.org/2000/svg\",t),i.appendChild(n)):(n=document.createElementNS(\"http://www.w3.org/2000/svg\",t),e[t]={used:[],redundant:[]},i.appendChild(n)),e[t].used.push(n),n}Zt(Rv.prototype),Rv.prototype.setOptions=function(t){var e=this;if(null===t&&(t=void 0),void 0!==t){!0===ul.validate(t,Bv)&&console.error(\"%cErrors have been found in the supplied options object.\",cl);if(Eh([\"locale\",\"locales\",\"clickToUse\"],this.options,t),void 0!==t.locale&&(t.locale=function(t,e){try{var i=e.split(/[-_ /]/,2),n=uo(i,2),o=n[0],r=n[1],s=null!=o?o.toLowerCase():null,a=null!=r?r.toUpperCase():null;if(s&&a){var h,l=s+\"-\"+a;if(Object.prototype.hasOwnProperty.call(t,l))return l;console.warn(Eo(h=\"Unknown variant \".concat(a,\" of language \")).call(h,s,\".\"))}if(s){var d=s;if(Object.prototype.hasOwnProperty.call(t,d))return d;console.warn(\"Unknown language \".concat(s))}return console.warn(\"Unknown locale \".concat(e,\", falling back to English.\")),\"en\"}catch(t){return console.error(t),console.warn(\"Unexpected error while normalizing locale \".concat(e,\", falling back to English.\")),\"en\"}}(t.locales||this.options.locales,t.locale)),t=this.layoutEngine.setOptions(t.layout,t),this.canvas.setOptions(t),this.groups.setOptions(t.groups),this.nodesHandler.setOptions(t.nodes),this.edgesHandler.setOptions(t.edges),this.physics.setOptions(t.physics),this.manipulation.setOptions(t.manipulation,t,this.options),this.interactionHandler.setOptions(t.interaction),this.renderer.setOptions(t.interaction),this.selectionHandler.setOptions(t.interaction),void 0!==t.groups&&this.body.emitter.emit(\"refreshNodes\"),\"configure\"in t&&(this.configurator||(this.configurator=new hl(this,this.body.container,zv,this.canvas.pixelRatio,Nv)),this.configurator.setOptions(t.configure)),this.configurator&&!0===this.configurator.options.enabled){var i={nodes:{},edges:{},layout:{},interaction:{},manipulation:{},physics:{},global:{}};Ch(i.nodes,this.nodesHandler.options),Ch(i.edges,this.edgesHandler.options),Ch(i.layout,this.layoutEngine.options),Ch(i.interaction,this.selectionHandler.options),Ch(i.interaction,this.renderer.options),Ch(i.interaction,this.interactionHandler.options),Ch(i.manipulation,this.manipulation.options),Ch(i.physics,this.physics.options),Ch(i.global,this.canvas.options),Ch(i.global,this.options),this.configurator.setModuleOptions(i)}void 0!==t.clickToUse?!0===t.clickToUse?void 0===this.activator&&(this.activator=new sl(this.canvas.frame),this.activator.on(\"change\",(function(){e.body.emitter.emit(\"activate\")}))):(void 0!==this.activator&&(this.activator.destroy(),delete this.activator),this.body.emitter.emit(\"activate\")):this.body.emitter.emit(\"activate\"),this.canvas.setSize(),this.body.emitter.emit(\"startSimulation\")}},Rv.prototype._updateVisibleIndices=function(){var t=this.body.nodes,e=this.body.edges;for(var i in this.body.nodeIndices=[],this.body.edgeIndices=[],t)Object.prototype.hasOwnProperty.call(t,i)&&(this.clustering._isClusteredNode(i)||!1!==t[i].options.hidden||this.body.nodeIndices.push(t[i].id));for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){var o=e[n],r=t[o.fromId],s=t[o.toId],a=void 0!==r&&void 0!==s;!this.clustering._isClusteredEdge(n)&&!1===o.options.hidden&&a&&!1===r.options.hidden&&!1===s.options.hidden&&this.body.edgeIndices.push(o.id)}},Rv.prototype.bindEventListeners=function(){var t=this;this.body.emitter.on(\"_dataChanged\",(function(){t.edgesHandler._updateState(),t.body.emitter.emit(\"_dataUpdated\")})),this.body.emitter.on(\"_dataUpdated\",(function(){t.clustering._updateState(),t._updateVisibleIndices(),t._updateValueRange(t.body.nodes),t._updateValueRange(t.body.edges),t.body.emitter.emit(\"startSimulation\"),t.body.emitter.emit(\"_requestRedraw\")}))},Rv.prototype.setData=function(t){if(this.body.emitter.emit(\"resetPhysics\"),this.body.emitter.emit(\"_resetData\"),this.selectionHandler.unselectAll(),t&&t.dot&&(t.nodes||t.edges))throw new SyntaxError('Data must contain either parameter \"dot\" or  parameter pair \"nodes\" and \"edges\", but not both.');if(this.setOptions(t&&t.options),t&&t.dot){console.warn(\"The dot property has been deprecated. Please use the static convertDot method to convert DOT into vis.network format and use the normal data format with nodes and edges. This converter is used like this: var data = vis.network.convertDot(dotString);\");var e=Ul(t.dot);this.setData(e)}else if(t&&t.gephi){console.warn(\"The gephi property has been deprecated. Please use the static convertGephi method to convert gephi into vis.network format and use the normal data format with nodes and edges. This converter is used like this: var data = vis.network.convertGephi(gephiJson);\");var i=Xl(t.gephi);this.setData(i)}else this.nodesHandler.setData(t&&t.nodes,!0),this.edgesHandler.setData(t&&t.edges,!0),this.body.emitter.emit(\"_dataChanged\"),this.body.emitter.emit(\"_dataLoaded\"),this.body.emitter.emit(\"initPhysics\")},Rv.prototype.destroy=function(){for(var t in this.body.emitter.emit(\"destroy\"),this.body.emitter.off(),this.off(),delete this.groups,delete this.canvas,delete this.selectionHandler,delete this.interactionHandler,delete this.view,delete this.renderer,delete this.physics,delete this.layoutEngine,delete this.clustering,delete this.manipulation,delete this.nodesHandler,delete this.edgesHandler,delete this.configurator,delete this.images,this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,t)&&delete this.body.nodes[t];for(var e in this.body.edges)Object.prototype.hasOwnProperty.call(this.body.edges,e)&&delete this.body.edges[e];mh(this.body.container)},Rv.prototype._updateValueRange=function(t){var e,i=void 0,n=void 0,o=0;for(e in t)if(Object.prototype.hasOwnProperty.call(t,e)){var r=t[e].getValue();void 0!==r&&(i=void 0===i?r:Math.min(r,i),n=void 0===n?r:Math.max(r,n),o+=r)}if(void 0!==i&&void 0!==n)for(e in t)Object.prototype.hasOwnProperty.call(t,e)&&t[e].setValueRange(i,n,o)},Rv.prototype.isActive=function(){return!this.activator||this.activator.active},Rv.prototype.setSize=function(){return this.canvas.setSize.apply(this.canvas,arguments)},Rv.prototype.canvasToDOM=function(){return this.canvas.canvasToDOM.apply(this.canvas,arguments)},Rv.prototype.DOMtoCanvas=function(){return this.canvas.DOMtoCanvas.apply(this.canvas,arguments)},Rv.prototype.findNode=function(){return this.clustering.findNode.apply(this.clustering,arguments)},Rv.prototype.isCluster=function(){return this.clustering.isCluster.apply(this.clustering,arguments)},Rv.prototype.openCluster=function(){return this.clustering.openCluster.apply(this.clustering,arguments)},Rv.prototype.cluster=function(){return this.clustering.cluster.apply(this.clustering,arguments)},Rv.prototype.getNodesInCluster=function(){return this.clustering.getNodesInCluster.apply(this.clustering,arguments)},Rv.prototype.clusterByConnection=function(){return this.clustering.clusterByConnection.apply(this.clustering,arguments)},Rv.prototype.clusterByHubsize=function(){return this.clustering.clusterByHubsize.apply(this.clustering,arguments)},Rv.prototype.updateClusteredNode=function(){return this.clustering.updateClusteredNode.apply(this.clustering,arguments)},Rv.prototype.getClusteredEdges=function(){return this.clustering.getClusteredEdges.apply(this.clustering,arguments)},Rv.prototype.getBaseEdge=function(){return this.clustering.getBaseEdge.apply(this.clustering,arguments)},Rv.prototype.getBaseEdges=function(){return this.clustering.getBaseEdges.apply(this.clustering,arguments)},Rv.prototype.updateEdge=function(){return this.clustering.updateEdge.apply(this.clustering,arguments)},Rv.prototype.clusterOutliers=function(){return this.clustering.clusterOutliers.apply(this.clustering,arguments)},Rv.prototype.getSeed=function(){return this.layoutEngine.getSeed.apply(this.layoutEngine,arguments)},Rv.prototype.enableEditMode=function(){return this.manipulation.enableEditMode.apply(this.manipulation,arguments)},Rv.prototype.disableEditMode=function(){return this.manipulation.disableEditMode.apply(this.manipulation,arguments)},Rv.prototype.addNodeMode=function(){return this.manipulation.addNodeMode.apply(this.manipulation,arguments)},Rv.prototype.editNode=function(){return this.manipulation.editNode.apply(this.manipulation,arguments)},Rv.prototype.editNodeMode=function(){return console.warn(\"Deprecated: Please use editNode instead of editNodeMode.\"),this.manipulation.editNode.apply(this.manipulation,arguments)},Rv.prototype.addEdgeMode=function(){return this.manipulation.addEdgeMode.apply(this.manipulation,arguments)},Rv.prototype.editEdgeMode=function(){return this.manipulation.editEdgeMode.apply(this.manipulation,arguments)},Rv.prototype.deleteSelected=function(){return this.manipulation.deleteSelected.apply(this.manipulation,arguments)},Rv.prototype.getPositions=function(){return this.nodesHandler.getPositions.apply(this.nodesHandler,arguments)},Rv.prototype.getPosition=function(){return this.nodesHandler.getPosition.apply(this.nodesHandler,arguments)},Rv.prototype.storePositions=function(){return this.nodesHandler.storePositions.apply(this.nodesHandler,arguments)},Rv.prototype.moveNode=function(){return this.nodesHandler.moveNode.apply(this.nodesHandler,arguments)},Rv.prototype.getBoundingBox=function(){return this.nodesHandler.getBoundingBox.apply(this.nodesHandler,arguments)},Rv.prototype.getConnectedNodes=function(t){return void 0!==this.body.nodes[t]?this.nodesHandler.getConnectedNodes.apply(this.nodesHandler,arguments):this.edgesHandler.getConnectedNodes.apply(this.edgesHandler,arguments)},Rv.prototype.getConnectedEdges=function(){return this.nodesHandler.getConnectedEdges.apply(this.nodesHandler,arguments)},Rv.prototype.startSimulation=function(){return this.physics.startSimulation.apply(this.physics,arguments)},Rv.prototype.stopSimulation=function(){return this.physics.stopSimulation.apply(this.physics,arguments)},Rv.prototype.stabilize=function(){return this.physics.stabilize.apply(this.physics,arguments)},Rv.prototype.getSelection=function(){return this.selectionHandler.getSelection.apply(this.selectionHandler,arguments)},Rv.prototype.setSelection=function(){return this.selectionHandler.setSelection.apply(this.selectionHandler,arguments)},Rv.prototype.getSelectedNodes=function(){return this.selectionHandler.getSelectedNodeIds.apply(this.selectionHandler,arguments)},Rv.prototype.getSelectedEdges=function(){return this.selectionHandler.getSelectedEdgeIds.apply(this.selectionHandler,arguments)},Rv.prototype.getNodeAt=function(){var t=this.selectionHandler.getNodeAt.apply(this.selectionHandler,arguments);return void 0!==t&&void 0!==t.id?t.id:t},Rv.prototype.getEdgeAt=function(){var t=this.selectionHandler.getEdgeAt.apply(this.selectionHandler,arguments);return void 0!==t&&void 0!==t.id?t.id:t},Rv.prototype.selectNodes=function(){return this.selectionHandler.selectNodes.apply(this.selectionHandler,arguments)},Rv.prototype.selectEdges=function(){return this.selectionHandler.selectEdges.apply(this.selectionHandler,arguments)},Rv.prototype.unselectAll=function(){this.selectionHandler.unselectAll.apply(this.selectionHandler,arguments),this.selectionHandler.commitWithoutEmitting.apply(this.selectionHandler),this.redraw()},Rv.prototype.redraw=function(){return this.renderer.redraw.apply(this.renderer,arguments)},Rv.prototype.getScale=function(){return this.view.getScale.apply(this.view,arguments)},Rv.prototype.getViewPosition=function(){return this.view.getViewPosition.apply(this.view,arguments)},Rv.prototype.fit=function(){return this.view.fit.apply(this.view,arguments)},Rv.prototype.moveTo=function(){return this.view.moveTo.apply(this.view,arguments)},Rv.prototype.focus=function(){return this.view.focus.apply(this.view,arguments)},Rv.prototype.releaseNode=function(){return this.view.releaseNode.apply(this.view,arguments)},Rv.prototype.getOptionsFromConfigurator=function(){var t={};return this.configurator&&(t=this.configurator.getOptions.apply(this.configurator)),t};var qv=Object.freeze({__proto__:null,prepareElements:Lv,cleanupElements:Hv,resetElements:function(t){Lv(t),Hv(t),Lv(t)},getSVGElement:Wv,getDOMElement:function(t,e,i,n){var o;return Object.prototype.hasOwnProperty.call(e,t)?e[t].redundant.length>0?(o=e[t].redundant[0],e[t].redundant.shift()):(o=document.createElement(t),void 0!==n?i.insertBefore(o,n):i.appendChild(o)):(o=document.createElement(t),e[t]={used:[],redundant:[]},void 0!==n?i.insertBefore(o,n):i.appendChild(o)),e[t].used.push(o),o},drawPoint:function(t,e,i,n,o,r){var s;if(\"circle\"==i.style?((s=Wv(\"circle\",n,o)).setAttributeNS(null,\"cx\",t),s.setAttributeNS(null,\"cy\",e),s.setAttributeNS(null,\"r\",.5*i.size)):((s=Wv(\"rect\",n,o)).setAttributeNS(null,\"x\",t-.5*i.size),s.setAttributeNS(null,\"y\",e-.5*i.size),s.setAttributeNS(null,\"width\",i.size),s.setAttributeNS(null,\"height\",i.size)),void 0!==i.styles&&s.setAttributeNS(null,\"style\",i.styles),s.setAttributeNS(null,\"class\",i.className+\" vis-point\"),r){var a=Wv(\"text\",n,o);r.xOffset&&(t+=r.xOffset),r.yOffset&&(e+=r.yOffset),r.content&&(a.textContent=r.content),r.className&&a.setAttributeNS(null,\"class\",r.className+\" vis-label\"),a.setAttributeNS(null,\"x\",t),a.setAttributeNS(null,\"y\",e)}return s},drawBar:function(t,e,i,n,o,r,s,a){if(0!=n){n<0&&(e-=n*=-1);var h=Wv(\"rect\",r,s);h.setAttributeNS(null,\"x\",t-.5*i),h.setAttributeNS(null,\"y\",e),h.setAttributeNS(null,\"width\",i),h.setAttributeNS(null,\"height\",n),h.setAttributeNS(null,\"class\",o),a&&h.setAttributeNS(null,\"style\",a)}}}),Vv={Images:Zl,dotparser:Yl,gephiParser:Gl,allOptions:Av,convertDot:Ul,convertGephi:Xl},Uv=Object.freeze({__proto__:null,network:Vv,DOMutil:qv,util:fl,data:ou,Hammer:ll,keycharm:Tp,DataSet:tu,DataView:eu,Queue:Zc,Network:Rv});t.DOMutil=qv,t.DataSet=tu,t.DataView=eu,t.Hammer=ll,t.Network=Rv,t.Queue=Zc,t.data=ou,t.default=Uv,t.keycharm=Tp,t.network=Vv,t.util=fl,Object.defineProperty(t,\"__esModule\",{value:!0})}\n",
       "  // ));\n",
       "  // # sourceMappingURL=vis-network.min.js.map\n",
       "\n",
       "  );\n",
       "}\n",
       "\n",
       "\n",
       "    require([\"gravis-vis-network\"], function(vis){\n",
       "      // Strict mode: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Strict_mode\n",
       "      \"use strict\";\n",
       "\n",
       "      const state = {\n",
       "        manager:{\n",
       "          // Data generation process: 1) Fetch state.rawData, 2) derive state.parsedData, 3) derive state.shownData\n",
       "\n",
       "          // 1) Fetch state.rawData\n",
       "          fetchRawDataFromTemplating(){\n",
       "            state.rawData = [{\"directed\": true, \"metadata\": {\"node_color\": \"black\", \"node_opacity\": 1, \"node_size\": 10, \"node_shape\": \"circle\", \"node_border_color\": \"black\", \"node_border_size\": 1, \"node_label_color\": \"black\", \"node_label_size\": 10, \"edge_color\": \"#999\", \"edge_opacity\": 1, \"edge_size\": 2, \"edge_shape\": \"circle\", \"edge_border_color\": \"#999\", \"edge_border_size\": 1, \"edge_label_color\": \"black\", \"edge_label_size\": 10, \"arrow_size\": 4, \"arrow_color\": \"#999\"}, \"nodes\": {\"r1MhwkDR9RGGNg07nIf5BQ\": {\"label\": \"Tom\", \"metadata\": {\"focus\": \"target\", \"label\": \"Tom\", \"color\": \"#f07f65\", \"size\": 20}}, \"AOWmwJayFKAjAmmIlk8yOQ\": {\"label\": \"Family Doe\", \"metadata\": {\"focus\": \"target\", \"label\": \"Family Doe\", \"color\": \"#f07f65\", \"size\": 20}}, \"dQIuZHbv+9dqtJ8fO/8rnA\": {\"label\": \"ACME Bank\", \"metadata\": {\"focus\": \"source\", \"label\": \"ACME Bank\", \"color\": \"#edb551\", \"size\": 20}}, \"JIMOIAq9XU0WsAXPLHQRBg\": {\"label\": \"MyBank\", \"metadata\": {\"label\": \"MyBank\", \"color\": \"#92979c\", \"size\": 10}}, \"gb8VMWs5dsc6cteL2DOYCA\": {\"label\": \"ElysiumTech Solutions\", \"metadata\": {\"label\": \"ElysiumTech Solutions\", \"color\": \"#92979c\", \"size\": 10}}, \"nToxQTWUkZ4gv4iAItXSKw\": {\"label\": \"NovaCore Innovations\", \"metadata\": {\"label\": \"NovaCore Innovations\", \"color\": \"#92979c\", \"size\": 10}}, \"DuOTZpKAvOFRrhddS9d3NA\": {\"label\": \"InfinityForge Technologies\", \"metadata\": {\"label\": \"InfinityForge Technologies\", \"color\": \"#92979c\", \"size\": 10}}, \"YlVLHV5wCROpp3hW3nbNOQ\": {\"label\": \"PhoenixRise Ventures\", \"metadata\": {\"label\": \"PhoenixRise Ventures\", \"color\": \"#92979c\", \"size\": 10}}, \"MYXtcytg7uj+rAyOjYhBQA\": {\"label\": \"People Bank\", \"metadata\": {\"label\": \"People Bank\", \"color\": \"#92979c\", \"size\": 10}}, \"uVH0cGqXVe7/eDYLCwW6XQ\": {\"label\": \"NebulaTech Solutions\", \"metadata\": {\"label\": \"NebulaTech Solutions\", \"color\": \"#92979c\", \"size\": 10}}, \"249BMZupWCFjqM7zue27iQ\": {\"label\": \"Quantum Dynamics Innovations\", \"metadata\": {\"label\": \"Quantum Dynamics Innovations\", \"color\": \"#92979c\", \"size\": 10}}, \"77IlFbWAmT0DYKSlTSVLjg\": {\"label\": \"CyberNexus Systems\", \"metadata\": {\"label\": \"CyberNexus Systems\", \"color\": \"#92979c\", \"size\": 10}}, \"cW6S8m7PKwayYyrUFQOwnA\": {\"label\": \"Mary\", \"metadata\": {\"label\": \"Mary\", \"color\": \"#92979c\", \"size\": 10}}, \"IWkBDvnHtyJq/z5hVPdgnQ\": {\"label\": \"DreamScape Enterprises\", \"metadata\": {\"label\": \"DreamScape Enterprises\", \"color\": \"#92979c\", \"size\": 10}}, \"B2ENslGgWUXwghQigOV/ng\": {\"label\": \"StellarSphere Enterprises\", \"metadata\": {\"label\": \"StellarSphere Enterprises\", \"color\": \"#92979c\", \"size\": 10}}, \"hZwSJYPIqnQL6SP8CAMJog\": {\"label\": \"CelestialWave Industries\", \"metadata\": {\"label\": \"CelestialWave Industries\", \"color\": \"#92979c\", \"size\": 10}}, \"sAvunE8/tDW5b4Q7IVNIwg\": {\"label\": \"Anna\", \"metadata\": {\"label\": \"Anna\", \"color\": \"#92979c\", \"size\": 10}}, \"Lh2x5E3rMHHKwYTA4a3yyQ\": {\"label\": \"ACME Trust\", \"metadata\": {\"label\": \"ACME Trust\", \"color\": \"#92979c\", \"size\": 10}}, \"sIMZM6956KBcjN/vk1rXzA\": {\"label\": \"Bob\", \"metadata\": {\"label\": \"Bob\", \"color\": \"#92979c\", \"size\": 10}}}, \"edges\": [{\"source\": \"AOWmwJayFKAjAmmIlk8yOQ\", \"target\": \"r1MhwkDR9RGGNg07nIf5BQ\", \"metadata\": {\"focus\": \"target\", \"weight\": 1.0, \"color\": \"#f07f65\", \"label\": \"100.00%\", \"size\": 5.0}}, {\"source\": \"AOWmwJayFKAjAmmIlk8yOQ\", \"target\": \"cW6S8m7PKwayYyrUFQOwnA\", \"metadata\": {\"focus\": \"target\", \"weight\": 1.0, \"color\": \"#f07f65\", \"label\": \"100.00%\", \"size\": 5.0}}, {\"source\": \"AOWmwJayFKAjAmmIlk8yOQ\", \"target\": \"sAvunE8/tDW5b4Q7IVNIwg\", \"metadata\": {\"focus\": \"target\", \"weight\": 1.0, \"color\": \"#f07f65\", \"label\": \"100.00%\", \"size\": 5.0}}, {\"source\": \"AOWmwJayFKAjAmmIlk8yOQ\", \"target\": \"sIMZM6956KBcjN/vk1rXzA\", \"metadata\": {\"focus\": \"target\", \"weight\": 1.0, \"color\": \"#f07f65\", \"label\": \"100.00%\", \"size\": 5.0}}, {\"source\": \"JIMOIAq9XU0WsAXPLHQRBg\", \"target\": \"uVH0cGqXVe7/eDYLCwW6XQ\", \"metadata\": {\"weight\": 0.7, \"color\": \"#92979c\", \"label\": \"70.00%\", \"size\": 3.5}}, {\"source\": \"JIMOIAq9XU0WsAXPLHQRBg\", \"target\": \"249BMZupWCFjqM7zue27iQ\", \"metadata\": {\"weight\": 0.12, \"color\": \"#92979c\", \"label\": \"12.00%\", \"size\": 0.6}}, {\"source\": \"JIMOIAq9XU0WsAXPLHQRBg\", \"target\": \"dQIuZHbv+9dqtJ8fO/8rnA\", \"metadata\": {\"weight\": 0.34, \"color\": \"#92979c\", \"label\": \"34.00%\", \"size\": 1.7000000000000002}}, {\"source\": \"JIMOIAq9XU0WsAXPLHQRBg\", \"target\": \"B2ENslGgWUXwghQigOV/ng\", \"metadata\": {\"weight\": 0.65, \"color\": \"#92979c\", \"label\": \"65.00%\", \"size\": 3.25}}, {\"source\": \"nToxQTWUkZ4gv4iAItXSKw\", \"target\": \"gb8VMWs5dsc6cteL2DOYCA\", \"metadata\": {\"weight\": 0.11, \"color\": \"#92979c\", \"label\": \"11.00%\", \"size\": 0.55}}, {\"source\": \"nToxQTWUkZ4gv4iAItXSKw\", \"target\": \"dQIuZHbv+9dqtJ8fO/8rnA\", \"metadata\": {\"weight\": 0.15, \"color\": \"#92979c\", \"label\": \"15.00%\", \"size\": 0.75}}, {\"source\": \"YlVLHV5wCROpp3hW3nbNOQ\", \"target\": \"nToxQTWUkZ4gv4iAItXSKw\", \"metadata\": {\"weight\": 0.81, \"color\": \"#92979c\", \"label\": \"81.00%\", \"size\": 4.050000000000001}}, {\"source\": \"YlVLHV5wCROpp3hW3nbNOQ\", \"target\": \"IWkBDvnHtyJq/z5hVPdgnQ\", \"metadata\": {\"weight\": 0.03, \"color\": \"#92979c\", \"label\": \"3.00%\", \"size\": 0.15}}, {\"source\": \"YlVLHV5wCROpp3hW3nbNOQ\", \"target\": \"hZwSJYPIqnQL6SP8CAMJog\", \"metadata\": {\"weight\": 0.4, \"color\": \"#92979c\", \"label\": \"40.00%\", \"size\": 2.0}}, {\"source\": \"MYXtcytg7uj+rAyOjYhBQA\", \"target\": \"Lh2x5E3rMHHKwYTA4a3yyQ\", \"metadata\": {\"weight\": 0.93, \"color\": \"#92979c\", \"label\": \"93.00%\", \"size\": 4.65}}, {\"source\": \"B2ENslGgWUXwghQigOV/ng\", \"target\": \"DuOTZpKAvOFRrhddS9d3NA\", \"metadata\": {\"weight\": 0.4, \"color\": \"#92979c\", \"label\": \"40.00%\", \"size\": 2.0}}, {\"source\": \"B2ENslGgWUXwghQigOV/ng\", \"target\": \"YlVLHV5wCROpp3hW3nbNOQ\", \"metadata\": {\"weight\": 0.61, \"color\": \"#92979c\", \"label\": \"61.00%\", \"size\": 3.05}}, {\"source\": \"B2ENslGgWUXwghQigOV/ng\", \"target\": \"77IlFbWAmT0DYKSlTSVLjg\", \"metadata\": {\"weight\": 1.0, \"color\": \"#92979c\", \"label\": \"100.00%\", \"size\": 5.0}}, {\"source\": \"hZwSJYPIqnQL6SP8CAMJog\", \"target\": \"dQIuZHbv+9dqtJ8fO/8rnA\", \"metadata\": {\"weight\": 0.45, \"color\": \"#92979c\", \"label\": \"45.00%\", \"size\": 2.25}}, {\"source\": \"sAvunE8/tDW5b4Q7IVNIwg\", \"target\": \"JIMOIAq9XU0WsAXPLHQRBg\", \"metadata\": {\"weight\": 0.32, \"color\": \"#92979c\", \"label\": \"32.00%\", \"size\": 1.6}}, {\"source\": \"Lh2x5E3rMHHKwYTA4a3yyQ\", \"target\": \"JIMOIAq9XU0WsAXPLHQRBg\", \"metadata\": {\"weight\": 0.23, \"color\": \"#92979c\", \"label\": \"23.00%\", \"size\": 1.1500000000000001}}, {\"source\": \"sIMZM6956KBcjN/vk1rXzA\", \"target\": \"MYXtcytg7uj+rAyOjYhBQA\", \"metadata\": {\"weight\": 1.0, \"color\": \"#92979c\", \"label\": \"100.00%\", \"size\": 5.0}}]}];\n",
       "            // Data selection and normalization\n",
       "            state.nodeSizeDataSource = \"size\";\n",
       "            state.useNodeSizeNormalization = false;\n",
       "            state.nodeSizeNormalizationMin = 5.0;\n",
       "            state.nodeSizeNormalizationMax = 75.0;\n",
       "            state.nodeLabelTextDataSource = \"label\";\n",
       "            state.edgeSizeDataSource = \"size\";\n",
       "            state.useEdgeSizeNormalization = false;\n",
       "            state.edgeSizeNormalizationMin = 0.2;\n",
       "            state.edgeSizeNormalizationMax = 5.0;\n",
       "            state.edgeLabelTextDataSource = \"label\";\n",
       "            // Containers\n",
       "            state.graphContainerHeight = 450;\n",
       "            state.detailsContainerHeight = 100;\n",
       "            state.showDetails = false,\n",
       "            state.showDetailsToggleButton = true,\n",
       "            state.showMenu = false,\n",
       "            state.showMenuToggleButton = true,\n",
       "            // Nodes\n",
       "            state.showNodes = true;\n",
       "            state.nodeSizeFactor = 1.0;\n",
       "            state.nodeDragFix = false;\n",
       "            state.nodeHoverNeighborhood = false;\n",
       "            state.nodeHoverTooltip = true;\n",
       "            state.showNodeImages = true;\n",
       "            state.nodeImageSizeFactor = 1.0;\n",
       "            state.showNodeLabels = true;\n",
       "            state.showNodeLabelBorders = true;\n",
       "            state.nodeLabelSizeFactor = 1.0;\n",
       "            state.nodeLabelRotation = 0.0;\n",
       "            state.nodeLabelFont = \"Arial\";\n",
       "            // Edges\n",
       "            state.showEdges = true;\n",
       "            state.edgeSizeFactor = 1.0;\n",
       "            state.edgeCurvature = 0.4;\n",
       "            state.edgeHoverTooltip = true,\n",
       "            state.showEdgeLabels = true;\n",
       "            state.showEdgeLabelBorders = true;\n",
       "            state.edgeLabelSizeFactor = 1.0;\n",
       "            state.edgeLabelRotation = 0.0;\n",
       "            state.edgeLabelFont = \"Arial\";\n",
       "            // Layout algorithm\n",
       "            state.layoutAlgorithmActive = true;\n",
       "            state.layoutAlgorithm = \"barnesHut\";\n",
       "            state.gravitationalConstant = -2000.0;\n",
       "            state.centralGravity = 0.1;\n",
       "            state.springLength = 70.0;\n",
       "            state.springConstant = 0.1;\n",
       "            state.avoidOverlap = 0.0;\n",
       "            // Other\n",
       "            state.initZoomFactor = 0.75;\n",
       "            state.largeGraphThreshold = 500;\n",
       "          },\n",
       "\n",
       "          // 2) Derive state.parsedData from state.givenData\n",
       "          rawDataParser:{\n",
       "            getBool(obj, prop, def){\n",
       "              try{\n",
       "                const value = obj[prop];\n",
       "                if(value == \"true\" || value == \"True\"){\n",
       "                  value = true;\n",
       "                } else if(value == \"false\" || value == \"False\"){\n",
       "                  value = false;\n",
       "                }\n",
       "                if(value !== true && value !== false){\n",
       "                  throw \"Invalid value. Not a bool.\";\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return def;\n",
       "              }\n",
       "              return def\n",
       "            },\n",
       "\n",
       "            getString(obj, prop, def) {\n",
       "              try{\n",
       "                const value = String(obj[prop]);\n",
       "                if(value === \"undefined\"){\n",
       "                  throw \"Invalid value. Not a proper string.\";\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return def;\n",
       "              }\n",
       "              return def;\n",
       "            },\n",
       "\n",
       "            getArrayLengthOrZero(array){\n",
       "              try{\n",
       "                const value = parseInt(array.length);\n",
       "                if(!((value + 1) > 0)){\n",
       "                  throw \"Invalid value. Not a proper length.\";\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return 0;\n",
       "              }\n",
       "            },\n",
       "\n",
       "            getObjectLengthOrZero(obj){\n",
       "              try{\n",
       "                const value = Object.keys(obj).length;\n",
       "                if(!((value + 1) > 0)){\n",
       "                  throw \"Invalid value. Not a proper length.\";\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return 0;\n",
       "              }\n",
       "            },\n",
       "\n",
       "            createUniqueEdgeId(sourceId, targetId, knownEdgeIds){\n",
       "              let newEdgeIdBase = \"(\" + sourceId + \", \" + targetId + \")\",\n",
       "                newEdgeId = newEdgeIdBase,\n",
       "                multiEdgeCounter = 1;\n",
       "              for(let i=1; knownEdgeIds.has(newEdgeId); i++){\n",
       "                newEdgeId = newEdgeIdBase + \"_\" + String(i);\n",
       "                multiEdgeCounter += 1;\n",
       "              }\n",
       "              knownEdgeIds.add(newEdgeId);\n",
       "              return {\"id\": newEdgeId, \"count\": multiEdgeCounter}\n",
       "            },\n",
       "          },\n",
       "\n",
       "          rawMetadataParser:{\n",
       "            getString(obj, prop, def){\n",
       "              try{\n",
       "                const value = String(obj.metadata[prop]);\n",
       "                if(value === \"undefined\"){\n",
       "                  throw \"Invalid value. Not a proper string.\";\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return def;\n",
       "              }\n",
       "            },\n",
       "            getShape(obj, prop, def){\n",
       "              const givenShape = state.manager.rawMetadataParser.getString(obj, prop, def);\n",
       "              let visShape = def;\n",
       "              if(givenShape === \"circle\"){\n",
       "                visShape = \"dot\";\n",
       "              } else if(givenShape === \"rectangle\"){\n",
       "                visShape = \"square\";\n",
       "              } else if(givenShape === \"hexagon\"){\n",
       "                visShape = \"hexagon\";\n",
       "              }\n",
       "              return visShape;\n",
       "            },\n",
       "            getColor(obj, prop, def){\n",
       "              function isBodyidColor(strColor) {\n",
       "                const sty = new Option().style;\n",
       "                sty.color = strColor;\n",
       "                return sty.color !== \"\";\n",
       "              }\n",
       "              try{\n",
       "                const value = obj.metadata[prop];\n",
       "                if(!isBodyidColor(value)){\n",
       "                  throw \"Invalid value. Not a color.\"\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return def;\n",
       "              }\n",
       "            },\n",
       "            getFiniteNumber(obj, prop, def){\n",
       "              try{\n",
       "                const value = parseFloat(obj.metadata[prop]);\n",
       "                if(!isFinite(value) || value === null){\n",
       "                  throw \"Invalid value. Not a finite number.\"\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return def;\n",
       "              }\n",
       "            },\n",
       "            getFiniteNumberOrNull(obj, prop, def){\n",
       "              try{\n",
       "                const value = parseFloat(obj.metadata[prop]);\n",
       "                if(!isFinite(value)){  // Note: isFinite(null) gives true\n",
       "                  throw \"Invalid value. Not a finite number or null.\"\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return def;\n",
       "              }\n",
       "            },\n",
       "            getFinitePositiveNumber(obj, prop, def){\n",
       "              try{\n",
       "                const value = parseFloat(obj.metadata[prop]);\n",
       "                if(!isFinite(value) || value === null || value < 0.0){\n",
       "                  throw \"Invalid value. Not a finite positive number.\"\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return def;\n",
       "              }\n",
       "            },\n",
       "            collectOtherMetadata(sourceObject, targetObject, definedMetadata){\n",
       "              if(typeof(sourceObject) !== \"undefined\" && typeof(sourceObject.metadata) !== \"undefined\"){\n",
       "                const properties = Object.keys(sourceObject.metadata);\n",
       "                for(let i=0; i<properties.length; i++){\n",
       "                  const property = properties[i];\n",
       "                  if(!definedMetadata.has(property)){\n",
       "                    targetObject[property] = sourceObject.metadata[property];\n",
       "                  }\n",
       "                }\n",
       "              }\n",
       "            },\n",
       "          },\n",
       "\n",
       "          propertyClassifier:{\n",
       "            numeric: null,\n",
       "            nonNumeric: null,\n",
       "            init(){\n",
       "              this.numeric = new Set(),\n",
       "              this.nonNumeric = new Set();\n",
       "            },\n",
       "            isNumeric(d){\n",
       "              return d === null || typeof(d) === \"undefined\" || String(parseFloat(d)) === String(d);\n",
       "            },\n",
       "            inspect(object, property){\n",
       "              const value = object[property];\n",
       "              if(!this.nonNumeric.has(property)){\n",
       "                if(this.isNumeric(value)){\n",
       "                  this.numeric.add(property);\n",
       "                } else{\n",
       "                  this.nonNumeric.add(property);\n",
       "                  this.numeric.delete(property);\n",
       "                }\n",
       "              }\n",
       "            }\n",
       "          },\n",
       "\n",
       "          replaceStringVariables(givenString, givenItem, variables){\n",
       "            let newString = givenString;\n",
       "            for(let i=0; i<variables.length; i++){\n",
       "              let variable = variables[i],\n",
       "                variableText = \"$\" + variable;\n",
       "              if(variable === \"x\"){\n",
       "                variable = \"fx\";\n",
       "              } else if (variable === \"y\"){\n",
       "                variable = \"fy\";\n",
       "              }\n",
       "              let insertedText = String(givenItem[variable]);\n",
       "              if(insertedText === \"undefined\"){\n",
       "                insertedText = \"\";\n",
       "              }\n",
       "              newString = newString.replace(variableText, insertedText);\n",
       "            }\n",
       "            return newString;\n",
       "          },\n",
       "\n",
       "          parseGeneral(givenData, parsedData){\n",
       "            parsedData.general = {\n",
       "              // General\n",
       "              directed: state.manager.rawDataParser.getBool(givenData, \"directed\", true),\n",
       "              label: state.manager.rawDataParser.getString(givenData, \"label\", \"\"),\n",
       "              background_color: state.manager.rawMetadataParser.getColor(givenData, \"background_color\", \"white\"),\n",
       "              arrow_color: state.manager.rawMetadataParser.getColor(givenData, \"arrow_color\", \"black\"),\n",
       "              arrow_size: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"arrow_size\", 10.0),\n",
       "              // Nodes\n",
       "              node_color: state.manager.rawMetadataParser.getColor(givenData, \"node_color\", \"black\"),\n",
       "              node_opacity: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"node_opacity\", 1.0),\n",
       "              node_size: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"node_size\", 10.0),\n",
       "              node_shape: state.manager.rawMetadataParser.getString(givenData, \"node_shape\", \"circle\"),\n",
       "              node_border_color: state.manager.rawMetadataParser.getColor(givenData, \"node_border_color\", \"black\"),\n",
       "              node_border_size: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"node_border_size\", 0.0),\n",
       "              node_label_color: state.manager.rawMetadataParser.getColor(givenData, \"node_label_color\", \"black\"),\n",
       "              node_label_size: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"node_label_size\", 12.0),\n",
       "              node_hover: state.manager.rawMetadataParser.getString(givenData, \"node_hover\", \"\"),\n",
       "              node_click: state.manager.rawMetadataParser.getString(givenData, \"node_click\", \"\"),\n",
       "              node_image: state.manager.rawMetadataParser.getString(givenData, \"node_image\", \"\"),\n",
       "              node_x: state.manager.rawMetadataParser.getFiniteNumberOrNull(givenData, \"node_x\", null),\n",
       "              node_y: state.manager.rawMetadataParser.getFiniteNumberOrNull(givenData, \"node_y\", null),\n",
       "              contains_node_hover: false,\n",
       "              contains_node_click: false,\n",
       "              contains_node_image: false,\n",
       "              // Edges\n",
       "              edge_color: state.manager.rawMetadataParser.getColor(givenData, \"edge_color\", \"black\"),\n",
       "              edge_opacity: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"edge_opacity\", 1.0),\n",
       "              edge_size: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"edge_size\", 1.0),\n",
       "              edge_label_color: state.manager.rawMetadataParser.getColor(givenData, \"edge_label_color\", \"black\"),\n",
       "              edge_label_size: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"edge_label_size\", 8.0),\n",
       "              edge_hover: state.manager.rawMetadataParser.getString(givenData, \"edge_hover\", \"\"),\n",
       "              edge_click: state.manager.rawMetadataParser.getString(givenData, \"edge_click\", \"\"),\n",
       "              contains_edge_hover: false,\n",
       "              contains_edge_click: false,\n",
       "            };\n",
       "            if(!parsedData.general.directed){\n",
       "              parsedData.general.arrow_size = 0.0;\n",
       "            }\n",
       "          },\n",
       "\n",
       "          parseNodes(givenData, parsedData){\n",
       "            const numNodes = state.manager.rawDataParser.getObjectLengthOrZero(givenData.nodes),\n",
       "              nodeIdToObjectMap = new Map(),\n",
       "              nodeDefinedMetadata = new Set(\n",
       "                [\"color\", \"opacity\", \"size\", \"shape\", \"border_color\", \"border_size\",\n",
       "                 \"label_color\", \"label_size\", \"hover\", \"click\", \"image\", \"x\", \"y\"]),\n",
       "              nodeReplacementVariables = [\n",
       "                \"id\", \"label\",\n",
       "                \"color\", \"opacity\", \"size\", \"shape\", \"border_color\", \"border_size\",\n",
       "                \"label_color\", \"label_size\", \"image\", \"x\", \"y\"];\n",
       "            state.manager.propertyClassifier.init();\n",
       "            try {\n",
       "              Object.entries(givenData.nodes);\n",
       "            }\n",
       "            catch(e){\n",
       "               givenData.nodes = {};\n",
       "            }\n",
       "            for (const [givenNodeId, givenNode] of Object.entries(givenData.nodes)) {\n",
       "              const parsedNode = {};\n",
       "              // data: id, label\n",
       "              parsedNode.id = String(givenNodeId);\n",
       "              parsedNode.label = state.manager.rawDataParser.getString(givenNode, \"label\", \"\");\n",
       "              // defined metadata\n",
       "              parsedNode.color = state.manager.rawMetadataParser.getColor(givenNode, \"color\", parsedData.general.node_color);\n",
       "              parsedNode.opacity = state.manager.rawMetadataParser.getFinitePositiveNumber(givenNode, \"opacity\", parsedData.general.node_opacity);\n",
       "              parsedNode.size = state.manager.rawMetadataParser.getFinitePositiveNumber(givenNode, \"size\", parsedData.general.node_size);\n",
       "              parsedNode.shape = state.manager.rawMetadataParser.getShape(givenNode, \"shape\", parsedData.general.node_shape);\n",
       "              parsedNode.border_color = state.manager.rawMetadataParser.getColor(givenNode, \"border_color\", parsedData.general.node_border_color);\n",
       "              parsedNode.border_size = state.manager.rawMetadataParser.getFinitePositiveNumber(givenNode, \"border_size\", parsedData.general.node_border_size);\n",
       "              parsedNode.label_color = state.manager.rawMetadataParser.getColor(givenNode, \"label_color\", parsedData.general.node_label_color);\n",
       "              parsedNode.label_size = state.manager.rawMetadataParser.getFinitePositiveNumber(givenNode, \"label_size\", parsedData.general.node_label_size);\n",
       "              const hover = state.manager.rawMetadataParser.getString(givenNode, \"hover\", parsedData.general.node_hover);\n",
       "              const image = state.manager.rawMetadataParser.getString(givenNode, \"image\", parsedData.general.node_image);\n",
       "              if(image !== \"\"){\n",
       "                parsedNode.image = image;\n",
       "                parsedData.general.contains_node_image = true;\n",
       "              }\n",
       "              if(hover !== \"\"){\n",
       "                parsedNode.hover = hover;\n",
       "                parsedData.general.contains_node_hover = true;\n",
       "              }\n",
       "              const click = state.manager.rawMetadataParser.getString(givenNode, \"click\", parsedData.general.node_click);\n",
       "              if(click !== \"\"){\n",
       "                parsedNode.click = click;\n",
       "                parsedData.general.contains_node_click = true;\n",
       "              }\n",
       "              const x = state.manager.rawMetadataParser.getFiniteNumberOrNull(givenNode, \"x\", parsedData.general.node_x);\n",
       "              const y = state.manager.rawMetadataParser.getFiniteNumberOrNull(givenNode, \"y\", parsedData.general.node_y);\n",
       "              if(x !== null){\n",
       "                parsedNode.fx = x;\n",
       "              }\n",
       "              if(y !== null){\n",
       "                parsedNode.fy = y;\n",
       "              }\n",
       "              // other metadata\n",
       "              const otherMetadata = state.manager.rawMetadataParser.collectOtherMetadata(givenNode, parsedNode, nodeDefinedMetadata);\n",
       "              // feature classification\n",
       "              const parsedNodeProperties = Object.keys(parsedNode);\n",
       "              for(let i=0; i<parsedNodeProperties.length; i++){\n",
       "                const property = parsedNodeProperties[i],\n",
       "                  value = parsedNode[property];\n",
       "                state.manager.propertyClassifier.inspect(parsedNode, property);\n",
       "              }\n",
       "              // variable replacements\n",
       "              if(parsedNode.hover){\n",
       "                parsedNode.hover = state.manager.replaceStringVariables(parsedNode.hover, parsedNode, nodeReplacementVariables);\n",
       "              }\n",
       "              if(parsedNode.click){\n",
       "                parsedNode.click = state.manager.replaceStringVariables(parsedNode.click, parsedNode, nodeReplacementVariables.concat([\"hover\"]));\n",
       "              }\n",
       "              // store the parsed node\n",
       "              parsedData.nodes.push(parsedNode);\n",
       "              // data structure for inserting node object references into edge data\n",
       "              nodeIdToObjectMap.set(parsedNode.id, parsedNode);\n",
       "            }\n",
       "            // Ensure numeric properties (except fx and fy) are stored as numbers and remember their extrema\n",
       "            const numericProperties = Array.from(state.manager.propertyClassifier.numeric).filter(name => name !== \"fx\" && name !== \"fy\"),\n",
       "              nonNumericProperties = Array.from(state.manager.propertyClassifier.nonNumeric),\n",
       "              minima = {},\n",
       "              maxima = {};\n",
       "            for(let i=0; i<numNodes; i++){\n",
       "              const parsedNode = parsedData.nodes[i];\n",
       "              for(let p=0; p<numericProperties.length; p++){\n",
       "                const property = numericProperties[p],\n",
       "                  numericValue = parseFloat(parsedNode[property]);\n",
       "                parsedNode[property] = numericValue;\n",
       "                if(isFinite(numericValue)){\n",
       "                  if(typeof(minima[property]) === \"undefined\" || numericValue < minima[property]){\n",
       "                    minima[property] = numericValue;\n",
       "                  }\n",
       "                  if(typeof(maxima[property]) === \"undefined\" || numericValue > maxima[property]){\n",
       "                    maxima[property] = numericValue;\n",
       "                  }\n",
       "                }\n",
       "              }\n",
       "            }\n",
       "            // Store feature classification and extrema\n",
       "            parsedData.general.node_properties = {\n",
       "              \"node_size_data_sources\": numericProperties,\n",
       "              \"node_label_text_data_sources\": nonNumericProperties.concat(numericProperties),\n",
       "              \"minima\": minima,\n",
       "              \"maxima\": maxima,\n",
       "            }\n",
       "            // Report empty graph\n",
       "            if(!(numNodes > 0)){\n",
       "              console.log(\"Caution: Graph with 0 nodes. The provided data might be in the wrong format.\");\n",
       "            }\n",
       "            return nodeIdToObjectMap;\n",
       "          },\n",
       "\n",
       "          parseEdges(givenData, parsedData, nodeIdToObjectMap){\n",
       "            let numEdges = state.manager.rawDataParser.getArrayLengthOrZero(givenData.edges);\n",
       "            const knownEdgeIds = new Set(),\n",
       "              ignoredEdges = [],\n",
       "              edgeDefinedMetadata = new Set(\n",
       "                [\"color\", \"opacity\", \"size\", \"label_color\", \"label_size\", \"hover\", \"click\"]),\n",
       "              edgeReplacementVariables = [\n",
       "                \"id\", \"label\",\n",
       "                \"color\", \"opacity\", \"size\", \"label_color\", \"label_size\"];\n",
       "            state.manager.propertyClassifier.init();\n",
       "            for(let i=0; i<numEdges; i++){\n",
       "              const givenEdge = givenData.edges[i],\n",
       "                parsedEdge = {},\n",
       "                sourceId = String(givenEdge.source),\n",
       "                targetId = String(givenEdge.target);\n",
       "              // data: source, target, id, multi_edge_counter, label\n",
       "              try{\n",
       "                const sourceObj = nodeIdToObjectMap.get(sourceId);\n",
       "                const targetObj = nodeIdToObjectMap.get(targetId);\n",
       "                if(typeof(sourceObj) === \"undefined\" || typeof(targetObj) === \"undefined\"){\n",
       "                  throw \"Invalid node reference.\";\n",
       "                }\n",
       "                parsedEdge.source = sourceObj;\n",
       "                parsedEdge.target = targetObj;\n",
       "              } catch(e){\n",
       "                const ignoredEdge = {\n",
       "                  index: i,\n",
       "                  source: sourceId,\n",
       "                  target: targetId,\n",
       "                }\n",
       "                ignoredEdges.push(ignoredEdge);\n",
       "                continue;\n",
       "              }\n",
       "              const result = state.manager.rawDataParser.createUniqueEdgeId(sourceId, targetId, knownEdgeIds);\n",
       "              parsedEdge.id = result.id;\n",
       "              parsedEdge.multi_edge_counter = result.count;\n",
       "              parsedEdge.label = state.manager.rawDataParser.getString(givenEdge, \"label\", \"\");\n",
       "              // defined metadata\n",
       "              parsedEdge.color = state.manager.rawMetadataParser.getColor(givenEdge, \"color\", parsedData.general.edge_color);\n",
       "              parsedEdge.opacity = state.manager.rawMetadataParser.getFinitePositiveNumber(givenEdge, \"opacity\", parsedData.general.edge_opacity);\n",
       "              parsedEdge.size = state.manager.rawMetadataParser.getFinitePositiveNumber(givenEdge, \"size\", parsedData.general.edge_size);\n",
       "              parsedEdge.label_color = state.manager.rawMetadataParser.getColor(givenEdge, \"label_color\", parsedData.general.edge_label_color);\n",
       "              parsedEdge.label_size = state.manager.rawMetadataParser.getFinitePositiveNumber(givenEdge, \"label_size\", parsedData.general.edge_label_size);\n",
       "              const hover = state.manager.rawMetadataParser.getString(givenEdge, \"hover\", parsedData.general.edge_hover);\n",
       "              if(hover !== \"\"){\n",
       "                parsedEdge.hover = hover;\n",
       "                parsedData.general.contains_edge_hover = true;\n",
       "              }\n",
       "              const click = state.manager.rawMetadataParser.getString(givenEdge, \"click\", parsedData.general.edge_click);\n",
       "              if(click !== \"\"){\n",
       "                parsedEdge.click = click;\n",
       "                parsedData.general.contains_edge_click = true;\n",
       "              }\n",
       "              // other metadata\n",
       "              const otherMetadata = state.manager.rawMetadataParser.collectOtherMetadata(givenEdge, parsedEdge, edgeDefinedMetadata);\n",
       "              // feature classification\n",
       "              const parsedEdgeProperties = Object.keys(parsedEdge);\n",
       "              for(let i=0; i<parsedEdgeProperties.length; i++){\n",
       "                const property = parsedEdgeProperties[i],\n",
       "                  value = parsedEdge[property];\n",
       "                state.manager.propertyClassifier.inspect(parsedEdge, property);\n",
       "              }\n",
       "              // variable replacements\n",
       "              if(parsedEdge.hover){\n",
       "                parsedEdge.hover = state.manager.replaceStringVariables(parsedEdge.hover, parsedEdge, edgeReplacementVariables);\n",
       "              }\n",
       "              if(parsedEdge.click){\n",
       "                parsedEdge.click = state.manager.replaceStringVariables(parsedEdge.click, parsedEdge, edgeReplacementVariables.concat([\"hover\"]));\n",
       "              }\n",
       "              // store it\n",
       "              parsedData.edges.push(parsedEdge);\n",
       "            }\n",
       "            // Ensure numeric properties are stored as numbers and remember their extrema\n",
       "            const numericProperties = Array.from(state.manager.propertyClassifier.numeric),\n",
       "              nonNumericProperties = Array.from(state.manager.propertyClassifier.nonNumeric),\n",
       "              minima = {},\n",
       "              maxima = {};\n",
       "            numEdges = state.manager.rawDataParser.getArrayLengthOrZero(parsedData.edges);\n",
       "            for(let i=0; i<numEdges; i++){\n",
       "              const parsedEdge = parsedData.edges[i];\n",
       "              for(let p=0; p<numericProperties.length; p++){\n",
       "                const property = numericProperties[p],\n",
       "                  numericValue = parseFloat(parsedEdge[property]);\n",
       "                parsedEdge[property] = numericValue;\n",
       "                if(isFinite(numericValue)){\n",
       "                  if(typeof(minima[property]) === \"undefined\" || numericValue < minima[property]){\n",
       "                    minima[property] = numericValue;\n",
       "                  }\n",
       "                  if(typeof(maxima[property]) === \"undefined\" || numericValue > maxima[property]){\n",
       "                    maxima[property] = numericValue;\n",
       "                  }\n",
       "                }\n",
       "              }\n",
       "            }\n",
       "            // Store feature classification and extrema\n",
       "            parsedData.general.edge_properties = {\n",
       "              \"edge_size_data_sources\": numericProperties.filter(item => item !== \"multi_edge_counter\"),\n",
       "              \"edge_label_text_data_sources\": nonNumericProperties.concat(numericProperties).filter(\n",
       "                item => item !== \"source\" && item !== \"target\" && item !== \"multi_edge_counter\"),\n",
       "              \"minima\": minima,\n",
       "              \"maxima\": maxima,\n",
       "            }\n",
       "            // Report invalid edges\n",
       "            if(ignoredEdges.length > 0){\n",
       "              let message = undefined;\n",
       "              if(ignoredEdges.length == 1){\n",
       "                message = \"Caution: \" + ignoredEdges.length + \" edge was ignored because it \" +\n",
       "                  \"refers to a node that is not part of the node list:\\n\";\n",
       "              } else{\n",
       "                message = \"Caution: \" + ignoredEdges.length + \" edges were ignored because they \" +\n",
       "                  \"refer to a node that is not part of the node list:\\n\";\n",
       "              }\n",
       "              for(let i=0; i<ignoredEdges.length; i++){\n",
       "                const ignoredEdge = ignoredEdges[i];\n",
       "                message += '- Edge with index ' + ignoredEdge.index;\n",
       "                message += ', source \"' + ignoredEdge.source;\n",
       "                message += '\", target \"' + ignoredEdge.target + '\"\\n';\n",
       "                if(i==9){\n",
       "                  message += '...';\n",
       "                  break;\n",
       "                }\n",
       "              }\n",
       "              console.log(message);\n",
       "            }\n",
       "          },\n",
       "\n",
       "          parseChosenData(chosenGraphNumber){\n",
       "            let givenData = state.rawData[chosenGraphNumber],\n",
       "              parsedData = {\n",
       "                general: {},\n",
       "                nodes: [],\n",
       "                edges: [],\n",
       "                adjacency: null,\n",
       "                incidence: null,\n",
       "              };\n",
       "            if(!givenData || givenData === null){\n",
       "              givenData = [];\n",
       "            }\n",
       "            // a) General\n",
       "            state.manager.parseGeneral(givenData, parsedData);\n",
       "            // b) Nodes\n",
       "            const nodeIdToObjectMap = state.manager.parseNodes(givenData, parsedData);\n",
       "            // c) Edges\n",
       "            state.manager.parseEdges(givenData, parsedData, nodeIdToObjectMap);\n",
       "            // Update state\n",
       "            state.parsedData = parsedData;\n",
       "            state.currentGraphParts = {};\n",
       "            // Update UI: show or hide containers\n",
       "            ui.elements.graphContainer.style.display = ui.convert.boolToDisplayStyle(true);\n",
       "            ui.elements.detailsContainer.style.display = ui.convert.boolToDisplayStyle(state.showDetails);\n",
       "            ui.elements.nodeImageMetaControl.style.display = ui.convert.boolToDisplayStyle(parsedData.general.contains_node_image);\n",
       "          },\n",
       "\n",
       "          // 3) Derive state.shownData from state.parsedData\n",
       "          createNodeToAdjacentNodesMap(){\n",
       "            const dataStructure = {\n",
       "              map: new Map(),\n",
       "              add(sourceNode, targetNode){\n",
       "                let adjacentNodes = this.map.get(sourceNode);\n",
       "                if(adjacentNodes){\n",
       "                  adjacentNodes.add(targetNode);\n",
       "                } else{\n",
       "                  adjacentNodes = new Set([targetNode]);\n",
       "                  this.map.set(sourceNode, adjacentNodes);\n",
       "                }\n",
       "              },\n",
       "            }\n",
       "            return dataStructure;\n",
       "          },\n",
       "\n",
       "          createNodeToIncidentEdgesMap(){\n",
       "            const dataStructure = {\n",
       "              map: new Map(),\n",
       "              add(node, edge){\n",
       "                let incidentEdges = this.map.get(node);\n",
       "                if(incidentEdges){\n",
       "                  incidentEdges.add(edge);\n",
       "                } else{\n",
       "                  incidentEdges = new Set([edge]);\n",
       "                  this.map.set(node, incidentEdges);\n",
       "                }\n",
       "              },\n",
       "            }\n",
       "            return dataStructure;\n",
       "          },\n",
       "\n",
       "          hoverTextToHtml(text) {\n",
       "            // https://visjs.github.io/vis-network/examples/network/other/html-in-titles.html\n",
       "            const div = document.createElement(\"div\");\n",
       "            div.innerHTML = text;\n",
       "            return div;\n",
       "          },\n",
       "\n",
       "          prepareShownData(){\n",
       "            const numNodes = state.parsedData.nodes.length,\n",
       "              numEdges = state.parsedData.edges.length;\n",
       "            state.shownData = {\n",
       "              \"general\": null,\n",
       "              \"nodes\": new Array(numNodes),\n",
       "              \"edges\": new Array(numEdges),\n",
       "            }\n",
       "            const nodeIdToObjectMap = new Map(),\n",
       "              nodeSizeNormalizer = state.manager.createNodeSizeNormalizer();\n",
       "            // a) General\n",
       "            state.shownData.general = {\n",
       "              \"background_color\": state.parsedData.general.background_color,\n",
       "              \"arrow_size\": state.parsedData.general.arrow_size,\n",
       "              \"arrow_color\": state.parsedData.general.arrow_color,\n",
       "              \"directed\": state.parsedData.general.directed,\n",
       "            };\n",
       "            // b) Nodes\n",
       "            for(let i=0; i<numNodes; i++){\n",
       "              state.shownData.nodes[i] = {};\n",
       "              const parsedNode = state.parsedData.nodes[i],\n",
       "                shownNode = state.shownData.nodes[i];\n",
       "              shownNode.id = parsedNode.id;\n",
       "              shownNode.label = state.manager.calcSingleNodeLabelText(parsedNode);\n",
       "              shownNode.color = parsedNode.color;\n",
       "              shownNode.opacity = parsedNode.opacity;\n",
       "              shownNode.size = state.manager.calcSingleNodeSize(parsedNode, nodeSizeNormalizer);\n",
       "              shownNode.shape = parsedNode.shape;\n",
       "              shownNode.border_color = parsedNode.border_color;\n",
       "              shownNode.border_size = parsedNode.border_size;\n",
       "              shownNode.label_color = parsedNode.label_color;\n",
       "              shownNode.label_size = state.manager.calcSingleNodeLabelSize(parsedNode);\n",
       "              if(typeof(parsedNode.image) !== \"undefined\"){\n",
       "                shownNode.image = parsedNode.image;\n",
       "              }\n",
       "              if(typeof(parsedNode.hover) !== \"undefined\"){\n",
       "                shownNode.hover = state.manager.hoverTextToHtml(parsedNode.hover);\n",
       "              }\n",
       "              if(typeof(parsedNode.click) !== \"undefined\"){\n",
       "                shownNode.click = parsedNode.click;\n",
       "              }\n",
       "              if(typeof(parsedNode.fx) !== \"undefined\"){\n",
       "                shownNode.fx = parsedNode.fx;\n",
       "              }\n",
       "              if(typeof(parsedNode.fy) !== \"undefined\"){\n",
       "                shownNode.fy = parsedNode.fy;\n",
       "              }\n",
       "              nodeIdToObjectMap.set(shownNode.id, shownNode);\n",
       "              // Derived properties for performance improvement in updateNodePositions\n",
       "              state.manager.calcSingleNodeSizeDerivatives(shownNode);\n",
       "              state.manager.calcSingleNodeBorderSizeDerivatives(shownNode);\n",
       "            }\n",
       "            // c) Edges\n",
       "            const edgeSizeNormalizer = state.manager.createEdgeSizeNormalizer(),\n",
       "              nodeToAdjacentNodesMap = state.manager.createNodeToAdjacentNodesMap(),\n",
       "              nodeToIncidentEdgesMap = state.manager.createNodeToIncidentEdgesMap();\n",
       "            for(let i=0; i<numEdges; i++){\n",
       "              state.shownData.edges[i] = {};\n",
       "              const parsedEdge = state.parsedData.edges[i],\n",
       "                shownEdge = state.shownData.edges[i];\n",
       "              shownEdge.source = nodeIdToObjectMap.get(parsedEdge.source.id);\n",
       "              shownEdge.target = nodeIdToObjectMap.get(parsedEdge.target.id);\n",
       "              shownEdge.id = parsedEdge.id;\n",
       "              shownEdge.label = state.manager.calcSingleEdgeLabelText(parsedEdge);\n",
       "              shownEdge.color = parsedEdge.color;\n",
       "              shownEdge.opacity = parsedEdge.opacity;\n",
       "              shownEdge.size = state.manager.calcSingleEdgeSize(parsedEdge, edgeSizeNormalizer);\n",
       "              shownEdge.label_color = parsedEdge.label_color;\n",
       "              shownEdge.label_size = state.manager.calcSingleEdgeLabelSize(parsedEdge);\n",
       "              if(typeof(parsedEdge.hover) !== \"undefined\"){\n",
       "                shownEdge.hover = state.manager.hoverTextToHtml(parsedEdge.hover);\n",
       "              }\n",
       "              if(typeof(parsedEdge.click) !== \"undefined\"){\n",
       "                shownEdge.click = parsedEdge.click;\n",
       "              }\n",
       "              // Derived properties for performance improvement in updateEdgePositions\n",
       "              shownEdge.multiEdgeCurvatureFactor = state.manager.calcSingleEdgeCurvatureFactor(parsedEdge);\n",
       "              // Data structure for highlighting adjacent nodes and incident edges to this node\n",
       "              nodeToAdjacentNodesMap.add(shownEdge.source, shownEdge.target);\n",
       "              nodeToAdjacentNodesMap.add(shownEdge.target, shownEdge.source);\n",
       "              nodeToIncidentEdgesMap.add(shownEdge.source, shownEdge);\n",
       "              nodeToIncidentEdgesMap.add(shownEdge.target, shownEdge);\n",
       "            }\n",
       "            state.shownData.adjacency = nodeToAdjacentNodesMap;\n",
       "            state.shownData.incidence = nodeToIncidentEdgesMap;\n",
       "          },\n",
       "\n",
       "          calcSingleNodeSize(parsedNode, nodeSizeNormalizer){\n",
       "            const appearanceAdaptionFactor = 0.5;\n",
       "            let nodeSize = nodeSizeNormalizer(parsedNode[state.nodeSizeDataSource]);\n",
       "            if(!isFinite(nodeSize)){\n",
       "              nodeSize = state.parsedData.general.node_size;\n",
       "            }\n",
       "            return nodeSize * state.nodeSizeFactor * appearanceAdaptionFactor;\n",
       "          },\n",
       "\n",
       "          calcSingleNodeSizeDerivatives(shownNode){\n",
       "            shownNode.image_size = shownNode.size / 1.42 * state.nodeImageSizeFactor;\n",
       "          },\n",
       "\n",
       "          calcSingleNodeLabelText(parsedNode){\n",
       "            return String(parsedNode[state.nodeLabelTextDataSource]);\n",
       "          },\n",
       "\n",
       "          calcSingleNodeLabelSize(parsedNode){\n",
       "            return parsedNode.label_size * state.nodeLabelSizeFactor;\n",
       "          },\n",
       "\n",
       "          calcSingleEdgeSize(parsedEdge, edgeSizeNormalizer){\n",
       "            let edgeSize = edgeSizeNormalizer(parsedEdge[state.edgeSizeDataSource]);\n",
       "            if(!isFinite(edgeSize)){\n",
       "              edgeSize = state.parsedData.general.edge_size;\n",
       "            }\n",
       "            return edgeSize * state.edgeSizeFactor;\n",
       "          },\n",
       "\n",
       "          calcSingleEdgeCurvatureFactor(parsedEdge){\n",
       "            // Caution: Currently a single value is used for all edges instead of these here\n",
       "            const appearanceAdaptionFactor = 0.5;\n",
       "            return state.edgeCurvature * parsedEdge.multiEdgeCounter * appearanceAdaptionFactor;\n",
       "          },\n",
       "\n",
       "          calcSingleEdgeLabelText(parsedEdge){\n",
       "            return String(parsedEdge[state.edgeLabelTextDataSource]);\n",
       "          },\n",
       "\n",
       "          calcSingleEdgeLabelSize(parsedEdge){\n",
       "            return parsedEdge.label_size * state.edgeLabelSizeFactor;\n",
       "          },\n",
       "\n",
       "          calcSingleNodeBorderSizeDerivatives(shownNode){\n",
       "            shownNode.border_size_half = shownNode.border_size / 2.0;\n",
       "          },\n",
       "\n",
       "          createNodeSizeNormalizer(){\n",
       "            let normalizer;\n",
       "            if(state.useNodeSizeNormalization){\n",
       "              const dataMin = state.parsedData.general.node_properties.minima[state.nodeSizeDataSource],\n",
       "                dataMax = state.parsedData.general.node_properties.maxima[state.nodeSizeDataSource],\n",
       "                targetMin = state.nodeSizeNormalizationMin,\n",
       "                targetMax = state.nodeSizeNormalizationMax,\n",
       "                dataDiff = dataMax - dataMin,\n",
       "                targetDiff = targetMax - targetMin;\n",
       "              let factor = targetDiff / dataDiff;\n",
       "              if(!isFinite(factor) || factor === null){\n",
       "                factor = 0.0;\n",
       "              }\n",
       "              normalizer = function(val){\n",
       "                return (val - dataMin) * factor + targetMin;\n",
       "              }\n",
       "            } else{\n",
       "              normalizer = function(val){\n",
       "                return val;\n",
       "              }\n",
       "            }\n",
       "            return normalizer;\n",
       "          },\n",
       "\n",
       "          createEdgeSizeNormalizer(){\n",
       "            let normalizer;\n",
       "            if(state.useEdgeSizeNormalization){\n",
       "              const dataMin = state.parsedData.general.edge_properties.minima[state.edgeSizeDataSource],\n",
       "                dataMax = state.parsedData.general.edge_properties.maxima[state.edgeSizeDataSource],\n",
       "                targetMin = state.edgeSizeNormalizationMin,\n",
       "                targetMax = state.edgeSizeNormalizationMax,\n",
       "                dataDiff = dataMax - dataMin,\n",
       "                targetDiff = targetMax - targetMin;\n",
       "              let factor = targetDiff / dataDiff;\n",
       "              if(!isFinite(factor)){\n",
       "                factor = 0.0;\n",
       "              }\n",
       "              normalizer = function(val){\n",
       "                return (val - dataMin) * factor + targetMin;\n",
       "              }\n",
       "            } else{\n",
       "              normalizer = function(val){\n",
       "                return val;\n",
       "              }\n",
       "            }\n",
       "            return normalizer;\n",
       "          },\n",
       "\n",
       "          updateNodeSizes(){\n",
       "            // Data\n",
       "            const nodeSizeNormalizer = state.manager.createNodeSizeNormalizer();\n",
       "            for(let i=0; i<state.parsedData.nodes.length; i++){\n",
       "              const parsedNode = state.parsedData.nodes[i],\n",
       "                shownNode = state.shownData.nodes[i];\n",
       "              shownNode.size = state.manager.calcSingleNodeSize(parsedNode, nodeSizeNormalizer);\n",
       "              state.manager.calcSingleNodeSizeDerivatives(shownNode);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateNodeSizes();\n",
       "          },\n",
       "\n",
       "          updateNodeLabelTexts(){\n",
       "            // Data\n",
       "            for(let i=0; i<state.parsedData.nodes.length; i++){\n",
       "              const parsedNode = state.parsedData.nodes[i],\n",
       "                shownNode = state.shownData.nodes[i];\n",
       "              shownNode.label = state.manager.calcSingleNodeLabelText(parsedNode);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateNodeLabels();\n",
       "          },\n",
       "\n",
       "          updateNodeLabelSizes(){\n",
       "            // Data\n",
       "            for(let i=0; i<state.parsedData.nodes.length; i++){\n",
       "              const parsedNode = state.parsedData.nodes[i],\n",
       "                shownNode = state.shownData.nodes[i];\n",
       "              shownNode.label_size = state.manager.calcSingleNodeLabelSize(parsedNode);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateNodeLabels();\n",
       "          },\n",
       "\n",
       "          updateNodeImages(){\n",
       "            // Data\n",
       "            for(let i=0; i<state.parsedData.nodes.length; i++){\n",
       "              const parsedNode = state.parsedData.nodes[i],\n",
       "                shownNode = state.shownData.nodes[i];\n",
       "              state.manager.calcSingleNodeSizeDerivatives(shownNode);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateNodeImages();\n",
       "          },\n",
       "\n",
       "          updateEdgeSizes(){\n",
       "            // Data\n",
       "            const edgeSizeNormalizer = state.manager.createEdgeSizeNormalizer();\n",
       "            for(let i=0; i<state.parsedData.edges.length; i++){\n",
       "              const parsedEdge = state.parsedData.edges[i],\n",
       "                shownEdge = state.shownData.edges[i];\n",
       "              shownEdge.size = state.manager.calcSingleEdgeSize(parsedEdge, edgeSizeNormalizer);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateEdgeSizes();\n",
       "          },\n",
       "\n",
       "          updateEdgeCurvatures(){\n",
       "            // Data\n",
       "            for(let i=0; i<state.parsedData.edges.length; i++){\n",
       "              const parsedEdge = state.parsedData.edges[i],\n",
       "                shownEdge = state.shownData.edges[i];\n",
       "              shownEdge.multiEdgeCurvatureFactor = state.manager.calcSingleEdgeCurvatureFactor(parsedEdge);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateEdgeCurvatures();\n",
       "          },\n",
       "\n",
       "          updateEdgeLabelTexts(){\n",
       "            // Data\n",
       "            for(let i=0; i<state.parsedData.edges.length; i++){\n",
       "              const parsedEdge = state.parsedData.edges[i],\n",
       "                shownEdge = state.shownData.edges[i];\n",
       "              shownEdge.label = state.manager.calcSingleEdgeLabelText(parsedEdge);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateEdgeLabels();\n",
       "          },\n",
       "\n",
       "          updateEdgeLabelSizes(){\n",
       "            // Data\n",
       "            for(let i=0; i<state.parsedData.edges.length; i++){\n",
       "              const parsedEdge = state.parsedData.edges[i],\n",
       "                shownEdge = state.shownData.edges[i];\n",
       "              shownEdge.label_size = state.manager.calcSingleEdgeLabelSize(parsedEdge);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateEdgeLabels();\n",
       "          },\n",
       "        }\n",
       "      }\n",
       "\n",
       "      const ui = {\n",
       "        symbols:{\n",
       "          // Choice of symbols is influenced by their appearance in different browsers\n",
       "          // Alternatives: \"▼\", \"▽\", \"▾\" / \"▲\", \"△\", \"▴\" / \"▶\", \"▷\", \"▸\" / \"◀\", \"◁\", \"◂\"\n",
       "          // ▶ is rendered strangely on some mobile phone browsers, ▸ remains normal\n",
       "          detailsShown: \"▾\",\n",
       "          detailsHidden: \"▴\",\n",
       "          menuShown: \"▸\",\n",
       "          menuHidden: \"◂\",\n",
       "          menuItemActive: \"▸\",\n",
       "          menuItemInactive: \"▾\",\n",
       "        },\n",
       "\n",
       "        elements:{\n",
       "          // Containers\n",
       "          mainContainer: document.getElementById(\"i0oOcPUlCRlfCP4JG-main-div\"),\n",
       "          tooltipContainer: document.getElementById(\"i0oOcPUlCRlfCP4JG-tooltip-div\"),\n",
       "          leftContainer: document.getElementById(\"i0oOcPUlCRlfCP4JG-left-div\"),\n",
       "          rightContainer: document.getElementById(\"i0oOcPUlCRlfCP4JG-right-div\"),\n",
       "          graphContainer: document.getElementById(\"i0oOcPUlCRlfCP4JG-graph-div\"),\n",
       "          detailsContainer: document.getElementById(\"i0oOcPUlCRlfCP4JG-details-div\"),\n",
       "          detailsHead: document.getElementById(\"i0oOcPUlCRlfCP4JG-details-head\"),\n",
       "          detailsBody: document.getElementById(\"i0oOcPUlCRlfCP4JG-details-body\"),\n",
       "          // Data sources\n",
       "          dataHead: document.getElementById(\"i0oOcPUlCRlfCP4JG-data-head\"),\n",
       "          dataBody: document.getElementById(\"i0oOcPUlCRlfCP4JG-data-body\"),\n",
       "          graphSelectionContainer: document.getElementById(\"i0oOcPUlCRlfCP4JG-graph-select-div\"),\n",
       "          graphSelection: document.getElementById(\"i0oOcPUlCRlfCP4JG-graph-select\"),\n",
       "          nodeSizeDataSourceSelect: document.getElementById(\"i0oOcPUlCRlfCP4JG-node-size-data-source-select\"),\n",
       "          nodeSizeNormalizationCheckbox: document.getElementById(\"i0oOcPUlCRlfCP4JG-node-size-normalization-checkbox\"),\n",
       "          nodeSizeNormalizationContainer: document.getElementById(\"i0oOcPUlCRlfCP4JG-node-size-norm-div\"),\n",
       "          nodeSizeNormalizationMinText: document.getElementById(\"i0oOcPUlCRlfCP4JG-node-size-normalization-min-text\"),\n",
       "          nodeSizeNormalizationMinSlider: document.getElementById(\"i0oOcPUlCRlfCP4JG-node-size-normalization-min-slider\"),\n",
       "          nodeSizeNormalizationMaxText: document.getElementById(\"i0oOcPUlCRlfCP4JG-node-size-normalization-max-text\"),\n",
       "          nodeSizeNormalizationMaxSlider: document.getElementById(\"i0oOcPUlCRlfCP4JG-node-size-normalization-max-slider\"),\n",
       "          edgeSizeDataSourceSelect: document.getElementById(\"i0oOcPUlCRlfCP4JG-edge-size-data-source-select\"),\n",
       "          edgeSizeNormalizationCheckbox: document.getElementById(\"i0oOcPUlCRlfCP4JG-edge-size-normalization-checkbox\"),\n",
       "          edgeSizeNormalizationContainer: document.getElementById(\"i0oOcPUlCRlfCP4JG-edge-size-norm-div\"),\n",
       "          edgeSizeNormalizationMinText: document.getElementById(\"i0oOcPUlCRlfCP4JG-edge-size-normalization-min-text\"),\n",
       "          edgeSizeNormalizationMinSlider: document.getElementById(\"i0oOcPUlCRlfCP4JG-edge-size-normalization-min-slider\"),\n",
       "          edgeSizeNormalizationMaxText: document.getElementById(\"i0oOcPUlCRlfCP4JG-edge-size-normalization-max-text\"),\n",
       "          edgeSizeNormalizationMaxSlider: document.getElementById(\"i0oOcPUlCRlfCP4JG-edge-size-normalization-max-slider\"),\n",
       "          // General\n",
       "          generalHead: document.getElementById(\"i0oOcPUlCRlfCP4JG-general-head\"),\n",
       "          generalBody: document.getElementById(\"i0oOcPUlCRlfCP4JG-general-body\"),\n",
       "          resetButton: document.getElementById(\"i0oOcPUlCRlfCP4JG-reset\"),\n",
       "          fullscreenButton: document.getElementById(\"i0oOcPUlCRlfCP4JG-fullscreen-button\"),\n",
       "          svgExportButton: document.getElementById(\"i0oOcPUlCRlfCP4JG-svg\"),\n",
       "          pngExportButton: document.getElementById(\"i0oOcPUlCRlfCP4JG-png\"),\n",
       "          jpgExportButton: document.getElementById(\"i0oOcPUlCRlfCP4JG-jpg\"),\n",
       "          // Nodes\n",
       "          nodeHead: document.getElementById(\"i0oOcPUlCRlfCP4JG-node-head\"),\n",
       "          nodeBody: document.getElementById(\"i0oOcPUlCRlfCP4JG-node-body\"),\n",
       "          nodeCheckbox: document.getElementById(\"i0oOcPUlCRlfCP4JG-node-checkbox\"),\n",
       "          nodeSizeFactorText: document.getElementById(\"i0oOcPUlCRlfCP4JG-node-size-factor-text\"),\n",
       "          nodeSizeFactorSlider: document.getElementById(\"i0oOcPUlCRlfCP4JG-node-size-factor-slider\"),\n",
       "          nodeDragFixCheckbox: document.getElementById(\"i0oOcPUlCRlfCP4JG-node-drag-fix-checkbox\"),\n",
       "          nodeHoverNeighborhoodCheckbox: document.getElementById(\"i0oOcPUlCRlfCP4JG-node-hover-neighborhood-checkbox\"),\n",
       "          nodeHoverTooltipCheckbox: document.getElementById(\"i0oOcPUlCRlfCP4JG-node-hover-tooltip-checkbox\"),\n",
       "          nodeReleaseButton: document.getElementById(\"i0oOcPUlCRlfCP4JG-node-release-button\"),\n",
       "          // Node images\n",
       "          nodeImageHead: document.getElementById(\"i0oOcPUlCRlfCP4JG-node-image-head\"),\n",
       "          nodeImageBody: document.getElementById(\"i0oOcPUlCRlfCP4JG-node-image-body\"),\n",
       "          nodeImageCheckbox: document.getElementById(\"i0oOcPUlCRlfCP4JG-node-image-checkbox\"),\n",
       "          nodeImageMetaControl: document.getElementById(\"i0oOcPUlCRlfCP4JG-node-image-meta-control\"),\n",
       "          nodeImageSizeFactorText: document.getElementById(\"i0oOcPUlCRlfCP4JG-node-image-size-factor-text\"),\n",
       "          nodeImageSizeFactorSlider: document.getElementById(\"i0oOcPUlCRlfCP4JG-node-image-size-factor-slider\"),\n",
       "          // Node labels\n",
       "          nodeLabelHead: document.getElementById(\"i0oOcPUlCRlfCP4JG-node-label-head\"),\n",
       "          nodeLabelBody: document.getElementById(\"i0oOcPUlCRlfCP4JG-node-label-body\"),\n",
       "          nodeLabelCheckbox: document.getElementById(\"i0oOcPUlCRlfCP4JG-node-label-checkbox\"),\n",
       "          nodeLabelBorderCheckbox: document.getElementById(\"i0oOcPUlCRlfCP4JG-node-label-border-checkbox\"),\n",
       "          nodeLabelTextDataSourceSelect: document.getElementById(\"i0oOcPUlCRlfCP4JG-node-label-data-source-select\"),\n",
       "          nodeLabelSizeFactorText: document.getElementById(\"i0oOcPUlCRlfCP4JG-node-label-size-factor-text\"),\n",
       "          nodeLabelSizeFactorSlider: document.getElementById(\"i0oOcPUlCRlfCP4JG-node-label-size-factor-slider\"),\n",
       "          nodeLabelRotationText: document.getElementById(\"i0oOcPUlCRlfCP4JG-node-label-rotation-text\"),\n",
       "          nodeLabelRotationSlider: document.getElementById(\"i0oOcPUlCRlfCP4JG-node-label-rotation-slider\"),\n",
       "          // Edges\n",
       "          edgeHead: document.getElementById(\"i0oOcPUlCRlfCP4JG-edge-head\"),\n",
       "          edgeBody: document.getElementById(\"i0oOcPUlCRlfCP4JG-edge-body\"),\n",
       "          edgeCheckbox: document.getElementById(\"i0oOcPUlCRlfCP4JG-edge-checkbox\"),\n",
       "          edgeSizeFactorText: document.getElementById(\"i0oOcPUlCRlfCP4JG-edge-size-factor-text\"),\n",
       "          edgeSizeFactorSlider: document.getElementById(\"i0oOcPUlCRlfCP4JG-edge-size-factor-slider\"),\n",
       "          edgeCurvatureText: document.getElementById(\"i0oOcPUlCRlfCP4JG-edge-curvature-text\"),\n",
       "          edgeCurvatureSlider: document.getElementById(\"i0oOcPUlCRlfCP4JG-edge-curvature-slider\"),\n",
       "          edgeHoverTooltipCheckbox: document.getElementById(\"i0oOcPUlCRlfCP4JG-edge-hover-tooltip-checkbox\"),\n",
       "          // Edge labels\n",
       "          edgeLabelHead: document.getElementById(\"i0oOcPUlCRlfCP4JG-edge-label-head\"),\n",
       "          edgeLabelBody: document.getElementById(\"i0oOcPUlCRlfCP4JG-edge-label-body\"),\n",
       "          edgeLabelCheckbox: document.getElementById(\"i0oOcPUlCRlfCP4JG-edge-label-checkbox\"),\n",
       "          edgeLabelBorderCheckbox: document.getElementById(\"i0oOcPUlCRlfCP4JG-edge-label-border-checkbox\"),\n",
       "          edgeLabelTextDataSourceSelect: document.getElementById(\"i0oOcPUlCRlfCP4JG-edge-label-data-source-select\"),\n",
       "          edgeLabelSizeFactorText: document.getElementById(\"i0oOcPUlCRlfCP4JG-edge-label-size-factor-text\"),\n",
       "          edgeLabelSizeFactorSlider: document.getElementById(\"i0oOcPUlCRlfCP4JG-edge-label-size-factor-slider\"),\n",
       "          edgeLabelRotationText: document.getElementById(\"i0oOcPUlCRlfCP4JG-edge-label-rotation-text\"),\n",
       "          edgeLabelRotationSlider: document.getElementById(\"i0oOcPUlCRlfCP4JG-edge-label-rotation-slider\"),\n",
       "          // Layout algorithm\n",
       "          layoutAlgorithmHead: document.getElementById(\"i0oOcPUlCRlfCP4JG-layout-algorithm-head\"),\n",
       "          layoutAlgorithmBody: document.getElementById(\"i0oOcPUlCRlfCP4JG-layout-algorithm-body\"),\n",
       "          simulationCheckbox: document.getElementById(\"i0oOcPUlCRlfCP4JG-simulation-active-checkbox\"),\n",
       "          layoutAlgorithmSelection: document.getElementById(\"i0oOcPUlCRlfCP4JG-layout-algorithm-select\"),\n",
       "          centralGravitySlider: document.getElementById(\"i0oOcPUlCRlfCP4JG-central-gravity-slider\"),\n",
       "          centralGravityText: document.getElementById(\"i0oOcPUlCRlfCP4JG-central-gravity-text\"),\n",
       "          springLengthSlider: document.getElementById(\"i0oOcPUlCRlfCP4JG-spring-length-slider\"),\n",
       "          springLengthText: document.getElementById(\"i0oOcPUlCRlfCP4JG-spring-length-text\"),\n",
       "          springConstantSlider: document.getElementById(\"i0oOcPUlCRlfCP4JG-spring-constant-slider\"),\n",
       "          springConstantText: document.getElementById(\"i0oOcPUlCRlfCP4JG-spring-constant-text\"),\n",
       "          gravitationalConstantContainer: document.getElementById(\"i0oOcPUlCRlfCP4JG-gravitational-constant-div\"),\n",
       "          gravitationalConstantSlider: document.getElementById(\"i0oOcPUlCRlfCP4JG-gravitational-constant-slider\"),\n",
       "          gravitationalConstantText: document.getElementById(\"i0oOcPUlCRlfCP4JG-gravitational-constant-text\"),\n",
       "          avoidOverlapContainer: document.getElementById(\"i0oOcPUlCRlfCP4JG-avoid-overlap-div\"),\n",
       "          avoidOverlapSlider: document.getElementById(\"i0oOcPUlCRlfCP4JG-avoid-overlap-slider\"),\n",
       "          avoidOverlapText: document.getElementById(\"i0oOcPUlCRlfCP4JG-avoid-overlap-text\"),\n",
       "        },\n",
       "\n",
       "        composites:{\n",
       "          responsiveContainer:{\n",
       "            init(){\n",
       "              // Delete all contained items (relevant only for reset, not first creation)\n",
       "              ui.deleteChildElements(ui.elements.graphContainer);\n",
       "              ui.deleteChildElements(ui.elements.detailsBody);\n",
       "              // Menu\n",
       "              if(state.showMenu){\n",
       "                ui.composites.menu.show();\n",
       "              } else{\n",
       "                ui.composites.menu.hide();\n",
       "              }\n",
       "              // Details\n",
       "              if(state.showDetails){\n",
       "                ui.composites.details.show(true);\n",
       "              } else{\n",
       "                ui.composites.details.hide(true);\n",
       "              }\n",
       "              // Divs\n",
       "              ui.composites.responsiveContainer.setInnerHeights();\n",
       "              ui.composites.responsiveContainer.setOuterHeights();\n",
       "              ui.composites.responsiveContainer.getInnerWidths();\n",
       "            },\n",
       "\n",
       "            getInnerWidths(){\n",
       "              state.graphContainerWidth = parseInt(ui.elements.graphContainer.clientWidth);\n",
       "              state.detailsContainerWidth = parseInt(ui.elements.detailsContainer.clientWidth);\n",
       "            },\n",
       "\n",
       "            getInnerHeights(){\n",
       "              state.graphContainerHeight = parseInt(ui.elements.graphContainer.clientHeight);\n",
       "              if(state.showDetails){\n",
       "                state.detailsContainerHeight = parseInt(ui.elements.detailsContainer.clientHeight);\n",
       "              }\n",
       "            },\n",
       "\n",
       "            setInnerHeights(){\n",
       "              ui.elements.graphContainer.style.height = state.graphContainerHeight + \"px\";\n",
       "              ui.elements.detailsContainer.style.height = state.detailsContainerHeight + \"px\";\n",
       "            },\n",
       "\n",
       "            setOuterHeights(){\n",
       "              ui.elements.mainContainer.style.height = ui.elements.leftContainer.offsetHeight + \"px\";\n",
       "            },\n",
       "\n",
       "            getSizes(){\n",
       "              ui.composites.responsiveContainer.getInnerWidths();\n",
       "              ui.composites.responsiveContainer.getInnerHeights();\n",
       "            },\n",
       "\n",
       "            setSizes(){\n",
       "              ui.composites.responsiveContainer.setInnerHeights();\n",
       "              ui.composites.responsiveContainer.setOuterHeights();\n",
       "            },\n",
       "\n",
       "            adaptToResize(){\n",
       "              ui.composites.responsiveContainer.getSizes();\n",
       "              ui.composites.responsiveContainer.setSizes();\n",
       "            },\n",
       "\n",
       "            adaptToFullscreen(){\n",
       "              ui.composites.responsiveContainer.getSizes();\n",
       "              if(document.fullscreenElement){\n",
       "                // On entering fullscreen, remember the current container heights\n",
       "                state.beforeFullscreenGraphContainerHeight = state.graphContainerHeight;\n",
       "                state.beforeFullscreenDetailsContainerHeight = state.detailsContainerHeight;\n",
       "                // and then adapt them to maximum height possible in full screen mode\n",
       "                function calculateFullscreenMaxGraphHeight(){\n",
       "                  let outerHeight = null;\n",
       "                  try{\n",
       "                    const mainDivComputedStyle = window.getComputedStyle(ui.elements.mainContainer),\n",
       "                      graphDivComputedStyle = window.getComputedStyle(ui.elements.graphContainer),\n",
       "                      paddingTop = parseFloat(mainDivComputedStyle.paddingTop),\n",
       "                      borderTop = parseFloat(graphDivComputedStyle.borderTopWidth),\n",
       "                      borderBottom = parseFloat(graphDivComputedStyle.borderBottomWidth),\n",
       "                      paddingBottom = parseFloat(mainDivComputedStyle.paddingBottom);\n",
       "                    outerHeight = paddingTop + borderTop + borderBottom + paddingBottom;\n",
       "                    if(!isFinite(outerHeight) || outerHeight === null){\n",
       "                      throw \"Invalid number\";\n",
       "                    }\n",
       "                  } catch(e){\n",
       "                    // Hard coded fallback, depends on CSS of containers (1px borders, 6px padding)\n",
       "                    outerHeight = 1 + 3 + 3 + 1;\n",
       "                  }\n",
       "                  let graphHeight = screen.height - outerHeight;\n",
       "                  if(state.showDetails){\n",
       "                    graphHeight -= ui.composites.details.calculateHeightDifference();\n",
       "                  }\n",
       "                  return graphHeight;\n",
       "                }\n",
       "                state.graphContainerHeight = calculateFullscreenMaxGraphHeight();\n",
       "              } else{\n",
       "                // On leaving fullscreen, set container heights back to remembered values\n",
       "                state.graphContainerHeight = state.beforeFullscreenGraphContainerHeight;\n",
       "                state.detailsContainerHeight = state.beforeFullscreenDetailsContainerHeight;\n",
       "              }\n",
       "              ui.composites.responsiveContainer.setSizes();\n",
       "            },\n",
       "          },\n",
       "\n",
       "          menu:{\n",
       "            show(){\n",
       "              ui.elements.leftContainer.style.width = \"80%\";\n",
       "              ui.elements.rightContainer.style.width = \"20%\";\n",
       "              ui.elements.rightContainer.style.display = \"block\";\n",
       "            },\n",
       "\n",
       "            hide(){\n",
       "              ui.elements.leftContainer.style.width = \"100%\";\n",
       "              ui.elements.rightContainer.style.width = \"0%\";\n",
       "              ui.elements.rightContainer.style.display = \"none\";\n",
       "            },\n",
       "\n",
       "            toggle(){\n",
       "              // Update menu button\n",
       "              const div = ui.elements.menuToggleDiv;\n",
       "              state.showMenu = !state.showMenu;\n",
       "              if(state.showMenu){\n",
       "                div.innerText = ui.symbols.menuShown;\n",
       "                ui.composites.menu.show();\n",
       "              } else {\n",
       "                div.innerHTML = ui.symbols.menuHidden;\n",
       "                ui.composites.menu.hide();\n",
       "              }\n",
       "\n",
       "              // Update rest of UI\n",
       "              ui.composites.responsiveContainer.getInnerWidths();\n",
       "              ui.composites.responsiveContainer.getInnerHeights();\n",
       "              ui.composites.responsiveContainer.setOuterHeights();\n",
       "              ui.composites.graph.updateGraphDrawingArea();\n",
       "            },\n",
       "\n",
       "            setItem(keyElement, valElement, toActive){\n",
       "              const currentText = keyElement.innerHTML;\n",
       "              let sliceStart = 0;\n",
       "              if(currentText.startsWith(ui.symbols.menuItemActive)){\n",
       "                sliceStart = ui.symbols.menuItemActive.length;\n",
       "              } else if (currentText.startsWith(ui.symbols.menuItemInactive)){\n",
       "                sliceStart = ui.symbols.menuItemInactive.length;\n",
       "              }\n",
       "              if(toActive){\n",
       "                keyElement.innerHTML = ui.symbols.menuItemActive + currentText.slice(sliceStart);\n",
       "                keyElement.style.backgroundColor = \"#f5f5f5\";\n",
       "                keyElement.style.color = \"black\";\n",
       "                keyElement.style.borderColor = \"#999\";\n",
       "                keyElement.style.boxShadow = \"0px 0px 3px rgba(0, 0, 0, 0.35)\";\n",
       "                valElement.style.display = \"block\";\n",
       "              } else {\n",
       "                keyElement.innerHTML = ui.symbols.menuItemInactive + currentText.slice(sliceStart);\n",
       "                keyElement.style.backgroundColor = \"white\";\n",
       "                keyElement.style.color = \"#222\";\n",
       "                keyElement.style.borderColor = \"#ccc\";\n",
       "                keyElement.style.boxShadow = \"0px 0px 3px rgba(0, 0, 0, 0.2)\";\n",
       "                valElement.style.display = \"none\";\n",
       "              }\n",
       "            },\n",
       "\n",
       "            toggleItem(keyElement, valElement){\n",
       "              const toActive = !(valElement.style.display !== \"none\");\n",
       "              ui.composites.menu.setItem(keyElement, valElement, toActive);\n",
       "            },\n",
       "          },\n",
       "\n",
       "          details:{\n",
       "            calculateHeightDifference(){\n",
       "              let outerHeight = null;\n",
       "              try{\n",
       "                const graphContainerComputedStyle = window.getComputedStyle(ui.elements.graphContainer),\n",
       "                  detailsContainerComputedStyle = window.getComputedStyle(ui.elements.detailsContainer),\n",
       "                  border1 = parseFloat(graphContainerComputedStyle.borderBottomWidth),\n",
       "                  margin = parseFloat(detailsContainerComputedStyle.marginTop),\n",
       "                  border2 = parseFloat(detailsContainerComputedStyle.borderTopWidth);\n",
       "                outerHeight = border1 + margin + border2;\n",
       "                if(!isFinite(outerHeight) || outerHeight === null){\n",
       "                  throw \"Invalid number\";\n",
       "                }\n",
       "              } catch(e){\n",
       "                // Hard coded fallback, depends on CSS of containers (1px borders, 5px margin)\n",
       "                outerHeight = 7.0;\n",
       "              }\n",
       "              return state.detailsContainerHeight + outerHeight\n",
       "            },\n",
       "\n",
       "            show(init=false){\n",
       "              // Visibility\n",
       "              ui.elements.detailsContainer.style.display = \"block\";\n",
       "              if(!init){\n",
       "                // Height\n",
       "                const heightDiff = ui.composites.details.calculateHeightDifference();\n",
       "                state.graphContainerHeight -= heightDiff;\n",
       "                if(state.graphContainerHeight < 70){\n",
       "                  state.graphContainerHeight = 70;\n",
       "                }\n",
       "                // Update rest of UI\n",
       "                ui.composites.responsiveContainer.setSizes();\n",
       "                ui.composites.graph.updateGraphDrawingArea();\n",
       "              }\n",
       "            },\n",
       "\n",
       "            hide(init=false){\n",
       "              // Visibility\n",
       "              ui.elements.detailsContainer.style.display = \"none\";\n",
       "              if(!init){\n",
       "                // Height\n",
       "                const heightDiff = ui.composites.details.calculateHeightDifference();\n",
       "                state.graphContainerHeight += heightDiff;\n",
       "                // Update rest of UI\n",
       "                ui.composites.responsiveContainer.setSizes();\n",
       "                ui.composites.graph.updateGraphDrawingArea();\n",
       "              }\n",
       "            },\n",
       "\n",
       "            toggle(){\n",
       "              // Update details button\n",
       "              const toggleDiv = ui.elements.detailsToggleDiv;\n",
       "              state.showDetails = !state.showDetails;\n",
       "              if(state.showDetails){\n",
       "                toggleDiv.innerText = ui.symbols.detailsShown;\n",
       "                ui.composites.details.show();\n",
       "              } else {\n",
       "                toggleDiv.innerHTML = ui.symbols.detailsHidden;\n",
       "                ui.composites.details.hide();\n",
       "              }\n",
       "            },\n",
       "          },\n",
       "\n",
       "          download:{\n",
       "            png(filename){\n",
       "              ui.composites.download._rasterImage(filename, \"png\");\n",
       "            },\n",
       "\n",
       "            jpg(filename){\n",
       "              ui.composites.download._rasterImage(filename, \"jpeg\");\n",
       "            },\n",
       "\n",
       "            _rasterImage(filename, format){\n",
       "              const canvas = ui.elements.graphContainer.getElementsByTagName(\"canvas\")[0],\n",
       "                mimeType = \"image/\" + format;\n",
       "              function finishedBlobCallback(blob){\n",
       "                ui.composites.download._blobToFileDownload(blob, filename);\n",
       "              }\n",
       "              try{\n",
       "                // Blob to overcome size limitations for data URLs (e.g. 4MB in Chrome)\n",
       "                canvas.toBlob(finishedBlobCallback, mimeType, 1.0);\n",
       "              } catch(e){\n",
       "                if(e.name === \"SecurityError\"){\n",
       "                  alert(\"Image creation failed. Some images within the nodes of the graph can \" +\n",
       "                      \"not be fetched from within JavaScript due to security settings of the \" +\n",
       "                      \"server that provides the images.\");\n",
       "                } else{\n",
       "                  throw e;\n",
       "                }\n",
       "              }\n",
       "            },\n",
       "\n",
       "            _blobToFileDownload(blob, filename){\n",
       "              const url = URL.createObjectURL(blob),\n",
       "                a = document.createElement(\"a\");\n",
       "              function handleClick(){\n",
       "                setTimeout(function(){\n",
       "                  // Long waiting time before removal for slow devices like mobile phones\n",
       "                  URL.revokeObjectURL(url);\n",
       "                  this.removeEventListener(\"click\", handleClick);\n",
       "                }, 20000);\n",
       "              };\n",
       "              document.body.appendChild(a);\n",
       "              a.href = url;\n",
       "              a.download = filename;\n",
       "              a.addEventListener(\"click\", handleClick, false);\n",
       "              a.click();\n",
       "              document.body.removeChild(a);\n",
       "            },\n",
       "          },\n",
       "\n",
       "          selection(element, optionList, valueList=undefined) {\n",
       "            while(element.hasChildNodes()){\n",
       "              element.removeChild(element.firstChild);\n",
       "            }\n",
       "            for(let i=0; i<optionList.length; i++){\n",
       "              let text = optionList[i];\n",
       "              let value = text;\n",
       "              if(valueList){\n",
       "                value = valueList[i];\n",
       "              }\n",
       "              let opt = document.createElement(\"option\");\n",
       "              opt.appendChild(document.createTextNode(text));\n",
       "              opt.value = value;\n",
       "              element.appendChild(opt);\n",
       "            }\n",
       "          },\n",
       "\n",
       "          tooltip:{\n",
       "            show(xShift=null, yShift=null){\n",
       "              if(isFinite(xShift) && xShift !== null){\n",
       "                ui.elements.tooltipContainer.style.left =  parseInt(xShift) + \"px\";\n",
       "              }\n",
       "              if(isFinite(yShift) && yShift !== null){\n",
       "                ui.elements.tooltipContainer.style.top = parseInt(yShift) + \"px\";\n",
       "              }\n",
       "              ui.elements.tooltipContainer.style.transition = \"visibility 0s, opacity 0.1s\";\n",
       "              ui.elements.tooltipContainer.style.visibility = \"visible\";\n",
       "              ui.elements.tooltipContainer.style.opacity = 1.0;\n",
       "            },\n",
       "\n",
       "            hide(){\n",
       "              ui.elements.tooltipContainer.style.transition = \"visibility 0.3s, opacity 0.3s ease-in\";\n",
       "              ui.elements.tooltipContainer.style.visibility = \"hidden\";\n",
       "              ui.elements.tooltipContainer.style.opacity = 0.0;\n",
       "            },\n",
       "          },\n",
       "\n",
       "          progressBar:{\n",
       "            create(){\n",
       "              // Main container\n",
       "              this.mainContainer = document.createElement(\"div\");\n",
       "              this.mainContainer.id = \"i0oOcPUlCRlfCP4JG-progress-container\";\n",
       "              this.mainContainer.style.backgroundColor = state.shownData.general.background_color;\n",
       "              ui.elements.graphContainer.style.backgroundColor = state.shownData.general.background_color;\n",
       "              // Text container\n",
       "              const numNodes = state.parsedData.nodes.length;\n",
       "              this.textContainer = document.createElement(\"div\");\n",
       "              this.textContainer.innerText = \"Large graph with \" + numNodes + \" nodes. Calculating an initial layout before visualizing it.\";\n",
       "              this.textContainer.style.textAlign = \"center\";\n",
       "              // Bar container\n",
       "              this.outerBarContainer = document.createElement(\"div\");\n",
       "              this.outerBarContainer.style.border = \"1px solid black\";\n",
       "              this.outerBarContainer.style.borderRadius = \"4px\";\n",
       "              this.outerBarContainer.style.marginTop = \"1ex\";\n",
       "              this.outerBarContainer.style.padding = \"1px\";\n",
       "              this.innerBarContainer = document.createElement(\"div\");\n",
       "              this.innerBarContainer.style.backgroundColor = \"black\";\n",
       "              this.innerBarContainer.style.width = \"0%\";\n",
       "              this.innerBarContainer.style.height = \"8px\";\n",
       "              this.innerBarContainer.style.borderRadius = \"3px\";\n",
       "              // Add them to DOM\n",
       "              this.outerBarContainer.appendChild(this.innerBarContainer);\n",
       "              this.mainContainer.appendChild(this.textContainer);\n",
       "              this.mainContainer.appendChild(this.outerBarContainer);\n",
       "              ui.elements.graphContainer.appendChild(this.mainContainer);\n",
       "            },\n",
       "\n",
       "            update(percentage){\n",
       "              this.innerBarContainer.style.width = percentage + \"%\";\n",
       "            },\n",
       "\n",
       "            remove(){\n",
       "              ui.elements.graphContainer.removeChild(this.mainContainer);\n",
       "            }\n",
       "          },\n",
       "\n",
       "          graph:{\n",
       "            createGraph(){\n",
       "              // Remove existing elements\n",
       "              ui.deleteChildElements(ui.elements.graphContainer);\n",
       "\n",
       "              // Create new elements\n",
       "              // I) Set graph options\n",
       "              // a) Nodes: https://visjs.github.io/vis-network/docs/network/nodes.html\n",
       "              const data = state.shownData,\n",
       "                visNodes = [];\n",
       "              let graphContainsFixedPositions = false;\n",
       "              for(let i=0; i<data.nodes.length; i++){\n",
       "                const node = data.nodes[i];\n",
       "                let visNode = {\n",
       "                  id: node.id,\n",
       "                  shape: node.shape,\n",
       "                  borderWidth: node.border_size,\n",
       "                  color: {\n",
       "                    background: node.color,\n",
       "                    border: node.border_color,\n",
       "                  },\n",
       "                }\n",
       "                // - Node labels\n",
       "                if(state.showNodeLabels){\n",
       "                  if(typeof(node.label) !== \"undefined\"){\n",
       "                    visNode.label = node.label;\n",
       "                    visNode.font = {\n",
       "                      size: node.label_size,\n",
       "                      color: node.label_color,\n",
       "                      strokeWidth: (state.showNodeLabelBorders ? 1.2 : 0.0),\n",
       "                      strokeColor: data.general.background_color,\n",
       "                    }\n",
       "                  }\n",
       "                }\n",
       "                // - Nodes hidden/shown (\"hidden\" property hides entire graph, using size=0 instead)\n",
       "                if(state.showNodes || (typeof(node.image) !== \"undefined\" && state.showNodeImages)){\n",
       "                  visNode.size = node.size;\n",
       "                } else {\n",
       "                  visNode.size = 0.0;\n",
       "                }\n",
       "                // - Node images\n",
       "                if(typeof(node.image) !== \"undefined\"){\n",
       "                  if(state.showNodeImages){\n",
       "                    visNode.shape = \"image\";\n",
       "                    visNode.image = node.image;\n",
       "                    visNode.size = node.image_size;\n",
       "                    // prevent a visual change of nodes with images upon selection (not deactivatable)\n",
       "                    visNode.color.highlight = {\n",
       "                      background: visNode.color.background,\n",
       "                      border: visNode.color.border,\n",
       "                    };\n",
       "                    visNode.borderWidthSelected = visNode.borderWidth;\n",
       "                  }\n",
       "                }\n",
       "                // - Node positions\n",
       "                const x = node.fx,\n",
       "                  y = node.fy;\n",
       "                if((typeof(x) !== \"undefined\") || (typeof(y) !== \"undefined\")){\n",
       "                  graphContainsFixedPositions = true;\n",
       "                  visNode.fixed = {}\n",
       "                  if(typeof(x) !== \"undefined\"){\n",
       "                    visNode.x = x;\n",
       "                    visNode.fixed.x = true;\n",
       "                  }\n",
       "                  if(typeof(y) !== \"undefined\"){\n",
       "                    visNode.y = y;\n",
       "                    visNode.fixed.y = true;\n",
       "                  }\n",
       "                }\n",
       "                // - Node hover behavior 1: highlight neighborhood\n",
       "                visNode.color.hover = {\n",
       "                  background: visNode.color.background,\n",
       "                  border: visNode.color.background,\n",
       "                };\n",
       "                // - Node hover behavior 2: show tooltip\n",
       "                if(state.nodeHoverTooltip){\n",
       "                  if(typeof(node.hover) !== \"undefined\"){\n",
       "                    visNode.title = node.hover;\n",
       "                  }\n",
       "                }\n",
       "                // - Node click behavior: show details\n",
       "                if(typeof(node.click) !== \"undefined\" && node.click !== \"\"){\n",
       "                  visNode.click = node.click;\n",
       "                }\n",
       "                visNodes.push(visNode);\n",
       "              }\n",
       "\n",
       "              // b) Edges: https://visjs.github.io/vis-network/docs/network/edges.html\n",
       "              const visEdges = [];\n",
       "              for(let i=0; i<data.edges.length; i++){\n",
       "                const edge = data.edges[i];\n",
       "                const visEdge = {\n",
       "                  id: edge.id,\n",
       "                  from: edge.source.id,\n",
       "                  to: edge.target.id,\n",
       "                  color: edge.color,\n",
       "                  width: edge.size,\n",
       "                };\n",
       "                // - Edge labels\n",
       "                if(state.showEdgeLabels){\n",
       "                  if(typeof(edge.label) !== \"undefined\"){\n",
       "                    visEdge.label = edge.label;\n",
       "                    visEdge.font = {\n",
       "                      size: edge.label_size,\n",
       "                      color: edge.label_color,\n",
       "                      strokeWidth: (state.showEdgeLabelBorders ? 1.2 : 0.0),\n",
       "                      strokeColor: data.general.background_color,\n",
       "                    }\n",
       "                  }\n",
       "                }\n",
       "                // - Edges hidden/shown\n",
       "                if(!state.showEdges){\n",
       "                  visEdge.hidden = true;\n",
       "                }\n",
       "                // - Edge hover behavior\n",
       "                if(state.edgeHoverTooltip){\n",
       "                  if(typeof(edge.hover) !== \"undefined\") {\n",
       "                    visEdge.title = edge.hover;\n",
       "                  }\n",
       "                }\n",
       "                // - Edge click behavior\n",
       "                if(typeof(edge.click) !== \"undefined\" && edge.click !== \"\"){\n",
       "                  visEdge.click = edge.click;\n",
       "                }\n",
       "                visEdges.push(visEdge);\n",
       "              }\n",
       "              // c) Options: https://visjs.github.io/vis-network/docs/network/\n",
       "              const options = {};\n",
       "              // - Nodes\n",
       "              options.nodes = {};\n",
       "              options.nodes.chosen = false;\n",
       "              options.nodes.imagePadding = 1.5;\n",
       "              options.nodes.labelHighlightBold = false;\n",
       "              options.nodes.shapeProperties = {};\n",
       "              options.nodes.shapeProperties.useBorderWithImage = true;\n",
       "              // - Node label font family\n",
       "              if(state.nodeLabelFont !== null){\n",
       "                options.nodes.font = {\n",
       "                  \"face\": state.nodeLabelFont,\n",
       "                }\n",
       "              }\n",
       "              // - Edges\n",
       "              options.edges = {};\n",
       "              // - Edges hidden/shown\n",
       "              if(!state.showEdges){\n",
       "                options.edges.hidden = true;\n",
       "              }\n",
       "              // - Edge curvature\n",
       "              if(state.edgeCurvature === 0.0){\n",
       "                options.edges.smooth = false;\n",
       "              } else {\n",
       "                options.edges.smooth = ui.composites.graph.calculateEdgeCurvatureOptions();\n",
       "              }\n",
       "              // - Edge arrows\n",
       "              if(data.general.directed){\n",
       "                options.edges.arrows = {};\n",
       "                options.edges.arrows.to = {};\n",
       "                options.edges.arrows.to.enabled = true;\n",
       "                if(data.general.arrow_size !== 0.0){\n",
       "                  options.edges.arrows.to.scaleFactor = data.general.arrow_size / 10.0;\n",
       "                }\n",
       "              }\n",
       "              // - Edge label font family\n",
       "              if(state.edgeLabelFont !== null){\n",
       "                options.edges.font = {\n",
       "                  \"face\": state.edgeLabelFont,\n",
       "                }\n",
       "              }\n",
       "              // - Drawing area\n",
       "              options.autoResize = false;\n",
       "              // - Interaction\n",
       "              options.interaction = {};\n",
       "              options.interaction.selectable = false;\n",
       "              options.interaction.selectConnectedEdges = false;\n",
       "              options.interaction.tooltipDelay = 0.0;\n",
       "              options.interaction.hover = state.nodeHoverNeighborhood;\n",
       "              options.interaction.hoverConnectedEdges = state.nodeHoverNeighborhood;\n",
       "              // - Layout algorithm\n",
       "              const numNodes = state.parsedData.nodes.length;\n",
       "              options.layout = {};\n",
       "              if(numNodes < 400){\n",
       "                options.layout.improvedLayout = true;\n",
       "              } else{\n",
       "                options.layout.improvedLayout = false;\n",
       "              }\n",
       "              options.physics = {};\n",
       "              options.physics.barnesHut = {\"damping\": 0.25};\n",
       "              options.physics.forceAtlas2Based = {\"damping\": 3.0};\n",
       "              options.physics.repulsion = {};\n",
       "              options.physics.hierarchicalRepulsion = {};\n",
       "              options.physics.stabilization = {};\n",
       "              options.physics.stabilization.enabled = false;\n",
       "              if(numNodes > state.largeGraphThreshold){\n",
       "                let numIterations = 800;\n",
       "                if(numNodes >= 25000){\n",
       "                  numIterations = 100;\n",
       "                } else if(numNodes >= 10000){\n",
       "                  numIterations = 300;\n",
       "                } else if(numNodes >= 5000){\n",
       "                  numIterations = 400;\n",
       "                } else if(numNodes >= 2000){\n",
       "                  numIterations = 500;\n",
       "                } else if(numNodes >= 1000){\n",
       "                  numIterations = 600;\n",
       "                }\n",
       "                options.physics.stabilization = {\n",
       "                  \"enabled\": true,\n",
       "                  \"fit\": true,\n",
       "                  \"iterations\": numIterations,\n",
       "                  \"updateInterval\": 1,\n",
       "                };\n",
       "              }\n",
       "              // II) Create graph\n",
       "              // - DataSet and Network: https://visjs.github.io/vis-network/docs/network\n",
       "              state.visOptions = options;\n",
       "              state.visData = {\n",
       "                nodes: new vis.DataSet(visNodes),\n",
       "                edges: new vis.DataSet(visEdges),\n",
       "              };\n",
       "              state.visGraph = new vis.Network(ui.elements.graphContainer, state.visData, state.visOptions);\n",
       "              // III) Set further graph options after its creation\n",
       "              // - Background: https://github.com/almende/vis/issues/2292\n",
       "              state.visGraph.on(\"beforeDrawing\", function(ctx){\n",
       "                  ctx.save();\n",
       "                  ctx.setTransform(1, 0, 0, 1, 0, 0);\n",
       "                  ctx.fillStyle = data.general.background_color;\n",
       "                  ctx.fillRect(0, 0, ctx.canvas.width, ctx.canvas.height);\n",
       "                  ctx.restore();\n",
       "              })\n",
       "              // - Node positions: node update after graph creation seems to prevent a bug\n",
       "              if(graphContainsFixedPositions){\n",
       "                state.visData.nodes.update(visNodes);\n",
       "              }\n",
       "              // - Graph behavior\n",
       "              ui.composites.graph.setBehavior();\n",
       "\n",
       "              // Menu toggle button\n",
       "              if(state.showMenuToggleButton){\n",
       "                const menuDiv = document.createElement(\"div\");\n",
       "                if(state.showMenu){\n",
       "                  menuDiv.innerText = ui.symbols.menuShown;\n",
       "                } else {\n",
       "                  menuDiv.innerText = ui.symbols.menuHidden;\n",
       "                }\n",
       "                menuDiv.id = \"i0oOcPUlCRlfCP4JG-menu-toggle-button\";\n",
       "                menuDiv.onclick = ui.composites.menu.toggle;\n",
       "                ui.elements.graphContainer.appendChild(menuDiv);\n",
       "                ui.elements.menuToggleDiv = menuDiv;\n",
       "              }\n",
       "              // Details toggle button\n",
       "              if(state.showDetailsToggleButton){\n",
       "                const detailsDiv = document.createElement(\"div\");\n",
       "                if(state.showDetails){\n",
       "                  detailsDiv.innerText = ui.symbols.detailsShown;\n",
       "                } else {\n",
       "                  detailsDiv.innerText = ui.symbols.detailsHidden;\n",
       "                }\n",
       "                detailsDiv.id = \"i0oOcPUlCRlfCP4JG-details-toggle-button\";\n",
       "                detailsDiv.onclick = ui.composites.details.toggle;\n",
       "                ui.elements.graphContainer.appendChild(detailsDiv);\n",
       "                ui.elements.detailsToggleDiv = detailsDiv;\n",
       "              }\n",
       "            },\n",
       "\n",
       "            setBehavior(){\n",
       "              // - Progress bar: only if large graph, stops simulation to get initial static image\n",
       "              // https://visjs.github.io/vis-network/examples/network/exampleApplications/loadingBar.html\n",
       "              const numNodes = state.parsedData.nodes.length;\n",
       "              if(numNodes > state.largeGraphThreshold){\n",
       "                // Layout start\n",
       "                ui.composites.progressBar.create();\n",
       "                // Layout update\n",
       "                state.visGraph.on(\"stabilizationProgress\", function(params){\n",
       "                  var progressPercentage = params.iterations / params.total * 100;\n",
       "                  ui.composites.progressBar.update(progressPercentage);\n",
       "                });\n",
       "                // Layout finished\n",
       "                state.visGraph.once(\"stabilizationIterationsDone\", function(){\n",
       "                  setTimeout(function(){\n",
       "                    ui.composites.progressBar.remove();\n",
       "                    ui.composites.graph.simulationManager.stop();\n",
       "                  }, 60);\n",
       "                });\n",
       "              }\n",
       "              // - Node drag behavior: move node, fix its position or release it afterwards\n",
       "              state.visGraph.on(\"dragStart\", function(params){\n",
       "                params.event = \"[original event]\";\n",
       "                const nodeId = this.getNodeAt(params.pointer.DOM);\n",
       "                if(nodeId){\n",
       "                  const visNode = state.visData.nodes.get(nodeId),\n",
       "                    position = state.visGraph.getPositions(nodeId);\n",
       "                  visNode.x = position.x;\n",
       "                  visNode.y = position.y;\n",
       "                  visNode.fixed = false;\n",
       "                  state.visData.nodes.update(visNode);\n",
       "                }\n",
       "              });\n",
       "              state.visGraph.on(\"dragEnd\", function(params){\n",
       "                params.event = \"[original event]\";\n",
       "                const nodeId = this.getNodeAt(params.pointer.DOM);\n",
       "                if(nodeId){\n",
       "                  if(state.nodeDragFix){\n",
       "                    const visNode = state.visData.nodes.get(nodeId),\n",
       "                      position = state.visGraph.getPositions(nodeId);\n",
       "                    visNode.x = position.x;\n",
       "                    visNode.y = position.y;\n",
       "                    visNode.fixed = {\"x\": true, \"y\": true}\n",
       "                    state.visData.nodes.update(visNode);\n",
       "                  }\n",
       "                }\n",
       "              });\n",
       "              // - Node and edge hover behavior: already covered\n",
       "              // - Node and edge click behavior\n",
       "              // https://visjs.github.io/vis-network/examples/network/events/interactionEvents.html\n",
       "              function createNodeText(node){\n",
       "                let htmlText = \"<div>Node: \" + String(node.id) + \"</div>\";\n",
       "                if(typeof(node.click) !== \"undefined\" && node.click !== \"\"){\n",
       "                  htmlText += '<div id=\"i0oOcPUlCRlfCP4JG-details-user-provided\">' + node.click + '</div>';\n",
       "                }\n",
       "                return htmlText;\n",
       "              }\n",
       "              function createEdgeText(edge){\n",
       "                let htmlText = \"<div>Edge: \" + String(edge.id) + \"</div>\";\n",
       "                if(typeof(edge.click) !== \"undefined\" && edge.click !== \"\"){\n",
       "                  htmlText += '<div id=\"i0oOcPUlCRlfCP4JG-details-user-provided\">' + edge.click + '</div>';\n",
       "                }\n",
       "                return htmlText;\n",
       "              }\n",
       "              state.visGraph.on(\"click\", function(params){\n",
       "                params.event = \"[original event]\";\n",
       "                let htmlText = \"\";\n",
       "                const nodeId = this.getNodeAt(params.pointer.DOM);\n",
       "                if(nodeId){\n",
       "                  const node = state.visData.nodes.get(nodeId);\n",
       "                  if(node){\n",
       "                    htmlText = createNodeText(node);\n",
       "                  }\n",
       "                } else {\n",
       "                  const edgeId = this.getEdgeAt(params.pointer.DOM);\n",
       "                  if(edgeId){\n",
       "                    const edge = state.visData.edges.get(edgeId);\n",
       "                    if(edge){\n",
       "                      htmlText = createEdgeText(edge);\n",
       "                    }\n",
       "                  }\n",
       "                }\n",
       "                ui.elements.detailsBody.innerHTML = htmlText;\n",
       "              });\n",
       "              // - Simulation behavior\n",
       "              state.visGraph.on(\"startStabilizing\", function(params){\n",
       "                // A manually stopped simulation restarts automatically by dragging a node or\n",
       "                // altering a dataset, immediately triggering this event. So if the simulation\n",
       "                // shall be inactive, any automatic restart can be turned off immediately here.\n",
       "                if(!state.layoutAlgorithmActive){\n",
       "                  state.visGraph.stopSimulation();\n",
       "                }\n",
       "              });\n",
       "              // Start (considers all simulation parameters)\n",
       "              ui.composites.graph.simulationManager.start();\n",
       "            },\n",
       "\n",
       "            // Graph\n",
       "            updateGraphDrawingArea(){\n",
       "              state.visGraph.setSize(state.graphContainerWidth, state.graphContainerHeight);\n",
       "              state.visGraph.redraw();\n",
       "            },\n",
       "\n",
       "            // Nodes\n",
       "            updateNodes(){\n",
       "              const data = state.shownData,\n",
       "                newVisNodes = [];\n",
       "              for(let i=0; i<data.nodes.length; i++){\n",
       "                const node = data.nodes[i],\n",
       "                  visNode = state.visData.nodes.get(node.id);\n",
       "                // Node shape\n",
       "                visNode.shape = node.shape;\n",
       "                // Node size\n",
       "                if(state.showNodes){\n",
       "                  visNode.size = node.size;\n",
       "                } else {\n",
       "                  visNode.size = 0.0;\n",
       "                }\n",
       "                // Node images\n",
       "                if(state.showNodeImages){\n",
       "                  if(typeof(node.image) !== \"undefined\"){\n",
       "                    visNode.size = node.image_size;\n",
       "                    visNode.shape = \"image\";\n",
       "                    visNode.image = node.image;\n",
       "                  }\n",
       "                }\n",
       "                // Prevent node movements: Remove stored positions of nodes once fixed and now released\n",
       "                if(visNode.fixed === false){\n",
       "                  delete visNode.x;\n",
       "                  delete visNode.y;\n",
       "                }\n",
       "                newVisNodes.push(visNode);\n",
       "              }\n",
       "              state.visData.nodes.update(newVisNodes);\n",
       "            },\n",
       "\n",
       "            preventNodeJump(visNode){\n",
       "              if(visNode.fixed === false){\n",
       "                delete visNode.x;\n",
       "                delete visNode.y;\n",
       "              }\n",
       "            },\n",
       "\n",
       "            updateNodeVisibilities(){\n",
       "              ui.composites.graph.updateNodes();\n",
       "            },\n",
       "\n",
       "            updateNodeSizes(){\n",
       "              const data = state.shownData,\n",
       "                newVisNodes = [];\n",
       "              for(let i=0; i<data.nodes.length; i++){\n",
       "                const node = data.nodes[i],\n",
       "                  visNode = state.visData.nodes.get(node.id);\n",
       "                visNode.size = node.size;\n",
       "                if(state.showNodeImages && typeof(node.image) !== \"undefined\"){\n",
       "                  visNode.size = node.image_size;\n",
       "                }\n",
       "                ui.composites.graph.preventNodeJump(visNode);\n",
       "                newVisNodes.push(visNode);\n",
       "              }\n",
       "              state.visData.nodes.update(newVisNodes);\n",
       "            },\n",
       "\n",
       "            updateNodeHoverNeighborhoodBehavior(){\n",
       "              state.visOptions.interaction.hover = state.nodeHoverNeighborhood;\n",
       "              state.visOptions.interaction.hoverConnectedEdges = state.nodeHoverNeighborhood;\n",
       "              state.visGraph.setOptions(state.visOptions);\n",
       "            },\n",
       "\n",
       "            updateNodeHoverTooltipBehavior(){\n",
       "              const data = state.shownData,\n",
       "                newVisNodes = [];\n",
       "              for(let i=0; i<data.nodes.length; i++){\n",
       "                const node = data.nodes[i],\n",
       "                  visNode = state.visData.nodes.get(node.id);\n",
       "                if(typeof(node.hover) !== \"undefined\"){\n",
       "                  visNode.title = state.nodeHoverTooltip ? node.hover : null;\n",
       "                }\n",
       "                newVisNodes.push(visNode);\n",
       "              }\n",
       "              state.visData.nodes.update(newVisNodes);\n",
       "            },\n",
       "\n",
       "            // Node images\n",
       "            updateNodeImages(){\n",
       "              const data = state.shownData,\n",
       "                newVisNodes = [];\n",
       "              for(let i=0; i<data.nodes.length; i++){\n",
       "                const node = data.nodes[i],\n",
       "                  visNode = state.visData.nodes.get(node.id);\n",
       "                visNode.shape = node.shape;\n",
       "                if(state.showNodes){\n",
       "                  visNode.size = node.size;\n",
       "                } else {\n",
       "                  visNode.size = 0.0;\n",
       "                }\n",
       "                if(state.showNodeImages){\n",
       "                  if(typeof(node.image) !== \"undefined\"){\n",
       "                    visNode.size = node.image_size;\n",
       "                    visNode.shape = \"image\";\n",
       "                    visNode.image = node.image;\n",
       "                  }\n",
       "                }\n",
       "                ui.composites.graph.preventNodeJump(visNode);\n",
       "                newVisNodes.push(visNode);\n",
       "              }\n",
       "              state.visData.nodes.update(newVisNodes);\n",
       "            },\n",
       "\n",
       "            // Node labels\n",
       "            updateNodeLabels(){\n",
       "              // Vis data sets: https://visjs.github.io/vis-data/data/dataset.html\n",
       "              const data = state.shownData,\n",
       "                newVisNodes = [];\n",
       "              for(let i=0; i<data.nodes.length; i++){\n",
       "                const node = data.nodes[i];\n",
       "                const visNode = state.visData.nodes.get(node.id);\n",
       "                if(state.showNodeLabels){\n",
       "                  visNode.label = node.label;\n",
       "                  visNode.font = {\n",
       "                    size: node.label_size,\n",
       "                    color: node.label_color,\n",
       "                    strokeWidth: (state.showNodeLabelBorders ? 1.2 : 0.0),\n",
       "                    strokeColor: data.general.background_color,\n",
       "                  }\n",
       "                } else{\n",
       "                  visNode.label = undefined;\n",
       "                }\n",
       "                ui.composites.graph.preventNodeJump(visNode);\n",
       "                newVisNodes.push(visNode);\n",
       "              }\n",
       "              state.visData.nodes.update(newVisNodes);\n",
       "            },\n",
       "\n",
       "            // Edges\n",
       "            calculateEdgeCurvatureOptions(){\n",
       "              const appearanceAdaptionFactor = 0.5,\n",
       "                options = {\n",
       "                \"type\": state.edgeCurvature > 0.0 ? \"curvedCW\" : \"curvedCCW\",\n",
       "                \"roundness\": Math.abs(state.edgeCurvature) * appearanceAdaptionFactor,\n",
       "              };\n",
       "              return options\n",
       "            },\n",
       "\n",
       "            updateEdgeVisibility(){\n",
       "              const data = state.shownData,\n",
       "                newVisEdges = [];\n",
       "              for(let i=0; i<data.edges.length; i++){\n",
       "                const edge = data.edges[i],\n",
       "                  visEdge = state.visData.edges.get(edge.id);\n",
       "                visEdge.hidden = !state.showEdges;\n",
       "                newVisEdges.push(visEdge);\n",
       "              }\n",
       "              state.visData.edges.update(newVisEdges);\n",
       "            },\n",
       "\n",
       "            updateEdgeSizes(){\n",
       "              const data = state.shownData,\n",
       "                newVisEdges = [];\n",
       "              for (let i=0; i<data.edges.length; i++){\n",
       "                const edge = data.edges[i],\n",
       "                  newVisEdge = state.visData.edges.get(edge.id);\n",
       "                newVisEdge.width = edge.size;\n",
       "                newVisEdges.push(newVisEdge);\n",
       "              }\n",
       "              state.visData.edges.update(newVisEdges);\n",
       "            },\n",
       "\n",
       "            updateEdgeCurvatures(){\n",
       "              if(state.edgeCurvature === 0.0){\n",
       "                state.visOptions.edges.smooth = false;\n",
       "              } else {\n",
       "                state.visOptions.edges.smooth = ui.composites.graph.calculateEdgeCurvatureOptions();\n",
       "              }\n",
       "              state.visGraph.setOptions(state.visOptions);\n",
       "            },\n",
       "\n",
       "            updateEdgeHoverTooltipBehavior(){\n",
       "              /* Correct code, but there is a bug that renders null values as empty div (instead of ignoring them)\n",
       "              const data = state.shownData,\n",
       "                newVisEdges = [];\n",
       "              for(let i=0; i<data.edges.length; i++){\n",
       "                const edge = data.edges[i],\n",
       "                  visEdge = state.visData.edges.get(edge.id);\n",
       "                if(typeof(edge.hover) !== \"undefined\"){\n",
       "                  visEdge.title = state.edgeHoverTooltip ? edge.hover : null;\n",
       "                }\n",
       "                newVisEdges.push(visEdge);\n",
       "              }\n",
       "              state.visData.edges.update(newVisEdges);\n",
       "              */\n",
       "              // Workaround code\n",
       "              function cloneObject(obj){\n",
       "                return Object.assign({}, obj);\n",
       "              }\n",
       "              const data = state.shownData,\n",
       "                newVisEdges = [];\n",
       "              for(let i=0; i<data.edges.length; i++){\n",
       "                const edge = data.edges[i],\n",
       "                  visEdge = state.visData.edges.get(edge.id);\n",
       "                if(typeof(edge.hover) !== \"undefined\"){\n",
       "                  if(state.edgeHoverTooltip){\n",
       "                    visEdge.title = edge.hover;\n",
       "                    newVisEdges.push(visEdge);\n",
       "                  } else{\n",
       "                    // edges.update can only add properties, not delete them, hence use of clone/remove/add\n",
       "                    clonedEdge = cloneObject(visEdge);\n",
       "                    delete clonedEdge.title;\n",
       "                    state.visData.edges.remove(edge.id);\n",
       "                    state.visData.edges.add(clonedEdge);\n",
       "                  }\n",
       "                }\n",
       "              }\n",
       "              if(state.edgeHoverTooltip){\n",
       "                state.visData.edges.update(newVisEdges);\n",
       "              }\n",
       "            },\n",
       "\n",
       "            // Edge labels\n",
       "            updateEdgeLabels(){\n",
       "              const data = state.shownData,\n",
       "                newVisEdges = [],\n",
       "                noLabel = \" \";  // undefined, null, \"\" or deleting label property does not work\n",
       "              for(let i=0; i<data.edges.length; i++){\n",
       "                const edge = data.edges[i],\n",
       "                  visEdge = state.visData.edges.get(edge.id);\n",
       "                if(state.showEdgeLabels){\n",
       "                  visEdge.label = edge.label;\n",
       "                  visEdge.font = {\n",
       "                    size: edge.label_size,\n",
       "                    color: edge.label_color,\n",
       "                    strokeWidth: (state.showEdgeLabelBorders ? 1.2 : 0.0),\n",
       "                    strokeColor: data.general.background_color,\n",
       "                  }\n",
       "                } else {\n",
       "                  visEdge.label = noLabel;\n",
       "                }\n",
       "                newVisEdges.push(visEdge);\n",
       "              }\n",
       "              state.visData.edges.update(newVisEdges);\n",
       "            },\n",
       "\n",
       "            // Layout algorithm\n",
       "            simulationManager:{\n",
       "              start(){\n",
       "                state.visGraph.startSimulation();\n",
       "                this.setAlgorithm();\n",
       "                this.setSpringLength();\n",
       "                this.setSpringConstant();\n",
       "                this.setCentralGravity();\n",
       "                this.setGravitationalConstant();\n",
       "                this.setAvoidOverlap();\n",
       "              },\n",
       "              stop(){\n",
       "                state.visGraph.stopSimulation();\n",
       "              },\n",
       "              setActivity(on){\n",
       "                if(on){\n",
       "                  this.start();\n",
       "                } else{\n",
       "                  this.stop();\n",
       "                }\n",
       "              },\n",
       "              setAlgorithm(){\n",
       "                const name = state.layoutAlgorithm;\n",
       "                state.visOptions.physics.solver = name;\n",
       "                state.visGraph.setOptions(state.visOptions);\n",
       "                if(name === \"repulsion\"){\n",
       "                  ui.elements.avoidOverlapContainer.style.opacity = ui.convert.boolToOpacity(false);\n",
       "                  ui.elements.gravitationalConstantContainer.style.opacity = ui.convert.boolToOpacity(false);\n",
       "                } else if(name === \"hierarchicalRepulsion\"){\n",
       "                  ui.elements.avoidOverlapContainer.style.opacity = ui.convert.boolToOpacity(true);\n",
       "                  ui.elements.gravitationalConstantContainer.style.opacity = ui.convert.boolToOpacity(false);\n",
       "                } else {\n",
       "                  ui.elements.avoidOverlapContainer.style.opacity = ui.convert.boolToOpacity(true);\n",
       "                  ui.elements.gravitationalConstantContainer.style.opacity = ui.convert.boolToOpacity(true);\n",
       "                }\n",
       "              },\n",
       "              releaseFixedNodes(){\n",
       "                const data = state.shownData,\n",
       "                  newVisNodes = [];\n",
       "                for(let i=0; i<data.nodes.length; i++){\n",
       "                  const node = data.nodes[i],\n",
       "                    visNode = state.visData.nodes.get(node.id);\n",
       "                  ui.composites.graph.preventNodeJump(visNode);\n",
       "                  visNode.fixed = false;\n",
       "                  // Note: Deletion of x, y and fixed may work too, but .update does not delete props\n",
       "                  newVisNodes.push(visNode);\n",
       "                }\n",
       "                state.visData.nodes.update(newVisNodes);\n",
       "              },\n",
       "              setSpringLength(){\n",
       "                state.visOptions.physics.barnesHut.springLength = state.springLength;\n",
       "                state.visOptions.physics.forceAtlas2Based.springLength = state.springLength;\n",
       "                state.visOptions.physics.repulsion.springLength = state.springLength;\n",
       "                state.visOptions.physics.hierarchicalRepulsion.springLength = state.springLength;\n",
       "                state.visGraph.setOptions(state.visOptions);\n",
       "              },\n",
       "              setSpringConstant(){\n",
       "                state.visOptions.physics.barnesHut.springConstant = state.springConstant / 10.0;\n",
       "                state.visOptions.physics.forceAtlas2Based.springConstant = state.springConstant;\n",
       "                state.visOptions.physics.repulsion.springConstant = state.springConstant;\n",
       "                state.visOptions.physics.hierarchicalRepulsion.springConstant = state.springConstant;\n",
       "                state.visGraph.setOptions(state.visOptions);\n",
       "              },\n",
       "              setCentralGravity(){\n",
       "                state.visOptions.physics.barnesHut.centralGravity = state.centralGravity;\n",
       "                state.visOptions.physics.forceAtlas2Based.centralGravity = state.centralGravity / 100.0;\n",
       "                state.visOptions.physics.repulsion.centralGravity = state.centralGravity;\n",
       "                state.visOptions.physics.hierarchicalRepulsion.centralGravity = state.centralGravity;\n",
       "                state.visGraph.setOptions(state.visOptions);\n",
       "              },\n",
       "              setGravitationalConstant(){\n",
       "                state.visOptions.physics.barnesHut.gravitationalConstant = state.gravitationalConstant;\n",
       "                state.visOptions.physics.forceAtlas2Based.gravitationalConstant = state.gravitationalConstant / 10.0;\n",
       "                // Not a parameter in repulsion and hierarchicalRepulsion\n",
       "                state.visGraph.setOptions(state.visOptions);\n",
       "              },\n",
       "              setAvoidOverlap(){\n",
       "                state.visOptions.physics.barnesHut.avoidOverlap = state.avoidOverlap;\n",
       "                state.visOptions.physics.forceAtlas2Based.avoidOverlap = state.avoidOverlap;\n",
       "                // Not a parameter in repulsion and hierarchicalRepulsion\n",
       "                state.visGraph.setOptions(state.visOptions);\n",
       "              },\n",
       "            }\n",
       "          },\n",
       "        },\n",
       "\n",
       "        init(){\n",
       "          // Containers\n",
       "          ui.composites.responsiveContainer.init();\n",
       "          // Graph selection (only visible if multiple graphs in data)\n",
       "          if(state.rawData.length > 1){\n",
       "            ui.elements.graphSelectionContainer.style.display = ui.convert.boolToDisplayStyle(true);\n",
       "            const optionList = [],\n",
       "              valueList = [];\n",
       "            let label;\n",
       "            for(let i=0; i<state.rawData.length; i++){\n",
       "              const graph = state.rawData[i];\n",
       "              try{\n",
       "                label = String(graph.label);\n",
       "                if(label === \"undefined\" || label === \"\"){\n",
       "                  throw \"Invalid label\";\n",
       "                }\n",
       "              } catch(e){\n",
       "                label = \"Unnamed graph\";\n",
       "              }\n",
       "              const name = String(i+1) + \": \" + label;\n",
       "              optionList.push(name);\n",
       "              valueList.push(String(i));\n",
       "            }\n",
       "            ui.composites.selection(ui.elements.graphSelection, optionList, valueList);\n",
       "          }\n",
       "          // General (menu item)\n",
       "          ui.composites.menu.setItem(ui.elements.generalHead, ui.elements.generalBody, true);\n",
       "          // Data selection (menu item)\n",
       "          ui.composites.menu.setItem(ui.elements.dataHead, ui.elements.dataBody, false);\n",
       "          // - Node size\n",
       "          ui.elements.nodeSizeNormalizationCheckbox.checked = state.useNodeSizeNormalization;\n",
       "          ui.elements.nodeSizeNormalizationContainer.style.display = ui.convert.boolToDisplayStyle(state.useNodeSizeNormalization);\n",
       "          ui.elements.nodeSizeNormalizationMinText.innerHTML = ui.convert.numberToText(state.nodeSizeNormalizationMin);\n",
       "          ui.elements.nodeSizeNormalizationMinSlider.value = state.nodeSizeNormalizationMin;\n",
       "          ui.elements.nodeSizeNormalizationMaxText.innerHTML = ui.convert.numberToText(state.nodeSizeNormalizationMax);\n",
       "          ui.elements.nodeSizeNormalizationMaxSlider.value = state.nodeSizeNormalizationMax;\n",
       "          // - Edge size\n",
       "          ui.elements.edgeSizeNormalizationCheckbox.checked = state.useEdgeSizeNormalization;\n",
       "          ui.elements.edgeSizeNormalizationContainer.style.display = ui.convert.boolToDisplayStyle(state.useEdgeSizeNormalization);\n",
       "          ui.elements.edgeSizeNormalizationMinText.innerHTML = ui.convert.numberToText(state.edgeSizeNormalizationMin);\n",
       "          ui.elements.edgeSizeNormalizationMinSlider.value = state.edgeSizeNormalizationMin;\n",
       "          ui.elements.edgeSizeNormalizationMaxText.innerHTML = ui.convert.numberToText(state.edgeSizeNormalizationMax);\n",
       "          ui.elements.edgeSizeNormalizationMaxSlider.value = state.edgeSizeNormalizationMax;\n",
       "          // Nodes\n",
       "          ui.composites.menu.setItem(ui.elements.nodeHead, ui.elements.nodeBody, false);\n",
       "          ui.elements.nodeCheckbox.checked = state.showNodes;\n",
       "          ui.elements.nodeSizeFactorText.innerHTML = ui.convert.numberToText(state.nodeSizeFactor);\n",
       "          ui.elements.nodeSizeFactorSlider.value = state.nodeSizeFactor;\n",
       "          ui.elements.nodeDragFixCheckbox.checked = state.nodeDragFix;\n",
       "          ui.elements.nodeHoverNeighborhoodCheckbox.checked = state.nodeHoverNeighborhood;\n",
       "          ui.elements.nodeHoverTooltipCheckbox.checked = state.nodeHoverTooltip;\n",
       "          // Node images\n",
       "          ui.composites.menu.setItem(ui.elements.nodeImageHead, ui.elements.nodeImageBody, false);\n",
       "          ui.elements.nodeImageMetaControl.style.display = false;\n",
       "          ui.elements.nodeImageCheckbox.checked = state.showNodeImages;\n",
       "          ui.elements.nodeImageSizeFactorText.innerHTML = ui.convert.numberToText(state.nodeImageSizeFactor);\n",
       "          ui.elements.nodeImageSizeFactorSlider.value = state.nodeImageSizeFactor;\n",
       "          // Node labels\n",
       "          ui.composites.menu.setItem(ui.elements.nodeLabelHead, ui.elements.nodeLabelBody, false);\n",
       "          ui.elements.nodeLabelCheckbox.checked = state.showNodeLabels;\n",
       "          ui.elements.nodeLabelBorderCheckbox.checked = state.showNodeLabelBorders;\n",
       "          ui.elements.nodeLabelSizeFactorText.innerHTML = ui.convert.numberToText(state.nodeLabelSizeFactor);\n",
       "          ui.elements.nodeLabelSizeFactorSlider.value = state.nodeLabelSizeFactor;\n",
       "          ui.elements.nodeLabelRotationText.innerHTML = ui.convert.numberToText(state.nodeLabelRotation);\n",
       "          ui.elements.nodeLabelRotationSlider.value = state.nodeLabelRotation;\n",
       "          // Edges\n",
       "          ui.composites.menu.setItem(ui.elements.edgeHead, ui.elements.edgeBody, false);\n",
       "          ui.elements.edgeCheckbox.checked = state.showEdges;\n",
       "          ui.elements.edgeSizeFactorText.innerHTML = ui.convert.numberToText(state.edgeSizeFactor);\n",
       "          ui.elements.edgeSizeFactorSlider.value = state.edgeSizeFactor;\n",
       "          ui.elements.edgeCurvatureText.innerHTML = ui.convert.numberToText(state.edgeCurvature);\n",
       "          ui.elements.edgeCurvatureSlider.value = state.edgeCurvature;\n",
       "          ui.elements.edgeHoverTooltipCheckbox.checked = state.edgeHoverTooltip;\n",
       "          // Edge labels\n",
       "          ui.composites.menu.setItem(ui.elements.edgeLabelHead, ui.elements.edgeLabelBody, false);\n",
       "          ui.elements.edgeLabelCheckbox.checked = state.showEdgeLabels;\n",
       "          ui.elements.edgeLabelBorderCheckbox.checked = state.showEdgeLabelBorders;\n",
       "          ui.elements.edgeLabelSizeFactorText.innerHTML = ui.convert.numberToText(state.edgeLabelSizeFactor);\n",
       "          ui.elements.edgeLabelSizeFactorSlider.value = state.edgeLabelSizeFactor;\n",
       "          ui.elements.edgeLabelRotationText.innerHTML = ui.convert.numberToText(state.edgeLabelRotation);\n",
       "          ui.elements.edgeLabelRotationSlider.value = state.edgeLabelRotation;\n",
       "          // Layout algorithm\n",
       "          ui.composites.menu.setItem(ui.elements.layoutAlgorithmHead, ui.elements.layoutAlgorithmBody, false);\n",
       "          ui.elements.simulationCheckbox.checked = state.layoutAlgorithmActive;\n",
       "          ui.elements.layoutAlgorithmSelection.value = state.layoutAlgorithm;\n",
       "          ui.elements.centralGravitySlider.value = state.centralGravity;\n",
       "          ui.elements.centralGravityText.innerHTML = ui.convert.numberToText(state.centralGravity);\n",
       "          ui.elements.springLengthSlider.value = state.springLength;\n",
       "          ui.elements.springLengthText.innerHTML = ui.convert.numberToText(state.springLength);\n",
       "          ui.elements.springConstantSlider.value = state.springConstant;\n",
       "          ui.elements.springConstantText.innerHTML = ui.convert.numberToText(state.springConstant);\n",
       "          ui.elements.gravitationalConstantSlider.value = state.gravitationalConstant;\n",
       "          ui.elements.gravitationalConstantText.innerHTML = ui.convert.numberToText(state.gravitationalConstant);\n",
       "          ui.elements.avoidOverlapSlider.value = state.avoidOverlap;\n",
       "          ui.elements.avoidOverlapText.innerHTML = ui.convert.numberToText(state.avoidOverlap);\n",
       "\n",
       "          ui.initSelectionValues();\n",
       "        },\n",
       "\n",
       "        initSelectionValues(){\n",
       "          function setSelectionOptionsAndValue(element, options, value, values=null){\n",
       "            if(values === null){\n",
       "              values = options;\n",
       "            }\n",
       "            if(!values.includes(value)){\n",
       "              value = values[0];\n",
       "            }\n",
       "            ui.composites.selection(element, options, values);\n",
       "            element.value = value;\n",
       "          }\n",
       "          // Node label text data source\n",
       "          setSelectionOptionsAndValue(\n",
       "            ui.elements.nodeLabelTextDataSourceSelect,\n",
       "            state.parsedData.general.node_properties.node_label_text_data_sources,\n",
       "            state.nodeLabelTextDataSource,\n",
       "          );\n",
       "          // Edge label text data source\n",
       "          setSelectionOptionsAndValue(\n",
       "            ui.elements.edgeLabelTextDataSourceSelect,\n",
       "            state.parsedData.general.edge_properties.edge_label_text_data_sources,\n",
       "            state.edgeLabelTextDataSource,\n",
       "          );\n",
       "          // Node size data source\n",
       "          setSelectionOptionsAndValue(\n",
       "            ui.elements.nodeSizeDataSourceSelect,\n",
       "            state.parsedData.general.node_properties.node_size_data_sources,\n",
       "            state.nodeSizeDataSource,\n",
       "          );\n",
       "          // Edge size data source\n",
       "          setSelectionOptionsAndValue(\n",
       "            ui.elements.edgeSizeDataSourceSelect,\n",
       "            state.parsedData.general.edge_properties.edge_size_data_sources,\n",
       "            state.edgeSizeDataSource,\n",
       "          );\n",
       "          // Layout algorithm\n",
       "          setSelectionOptionsAndValue(\n",
       "            ui.elements.layoutAlgorithmSelection,\n",
       "            [\"Barnes-Hut\", \"Force Atlas 2\", \"Repulsion\", \"Hierarchical repulsion\"],\n",
       "            state.layoutAlgorithm,\n",
       "            [\"barnesHut\", \"forceAtlas2Based\", \"repulsion\", \"hierarchicalRepulsion\"],\n",
       "          );\n",
       "        },\n",
       "\n",
       "        deleteChildElements(element){\n",
       "          while(element.firstChild){\n",
       "            // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management\n",
       "            // As of 2019, it is not possible to explicitly or programmatically trigger\n",
       "            // garbage collection in JavaScript.\n",
       "            element.removeChild(element.firstChild);\n",
       "          }\n",
       "        },\n",
       "\n",
       "        convert:{\n",
       "          numberToText(number, numDigits=2) {\n",
       "            return String(Number(number).toFixed(numDigits));\n",
       "          },\n",
       "\n",
       "          boolToDisplayStyle(isVisible){\n",
       "            if(isVisible){\n",
       "              return \"block\";\n",
       "            }\n",
       "            return \"none\";\n",
       "          },\n",
       "\n",
       "          boolToOpacity(isActive){\n",
       "            if(isActive){\n",
       "              return 1.0;\n",
       "            }\n",
       "            return 0.25;\n",
       "          },\n",
       "\n",
       "          boolToTooltipDelay(isActive){\n",
       "            if(isActive){\n",
       "              return 0;\n",
       "            }\n",
       "            return 100000000;\n",
       "          },\n",
       "        },\n",
       "\n",
       "        setBehavior(){\n",
       "          // Window resize (includes ctrl+wheel zoom, landscape/portrait orientation on phones)\n",
       "          window.onresize = function(){\n",
       "            ui.composites.responsiveContainer.adaptToResize();\n",
       "            ui.composites.graph.updateGraphDrawingArea();\n",
       "          }\n",
       "          // Container resize\n",
       "          ui.elements.graphContainer.onmouseup = function(){\n",
       "            const currentHeight = parseInt(ui.elements.graphContainer.clientHeight);\n",
       "            if(currentHeight != state.graphContainerHeight){\n",
       "              ui.composites.responsiveContainer.adaptToResize();\n",
       "              ui.composites.graph.updateGraphDrawingArea();\n",
       "            }\n",
       "          };\n",
       "          ui.elements.detailsContainer.onmouseup = function(){\n",
       "            const currentHeight = parseInt(ui.elements.detailsContainer.clientHeight);\n",
       "            if(currentHeight != state.detailsContainerHeight){\n",
       "              ui.composites.responsiveContainer.adaptToResize();\n",
       "            }\n",
       "          };\n",
       "          // Tooltip\n",
       "          ui.elements.tooltipContainer.onmouseover = function(){\n",
       "            ui.composites.tooltip.show();\n",
       "          }\n",
       "          ui.elements.tooltipContainer.onmouseout = function(){\n",
       "            ui.composites.tooltip.hide();\n",
       "          }\n",
       "          // General menu\n",
       "          ui.elements.generalHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.generalHead, ui.elements.generalBody);\n",
       "          };\n",
       "          ui.elements.resetButton.onclick = function(){\n",
       "            app.restart();\n",
       "          };\n",
       "          ui.elements.fullscreenButton.onclick = function(){\n",
       "            if(document.fullscreenElement){\n",
       "              document.exitFullscreen();\n",
       "            } else{\n",
       "              ui.elements.mainContainer.requestFullscreen()\n",
       "                .catch(function(err){\n",
       "                  alert(\"Error attempting to enable full-screen mode: \" + err.message);\n",
       "                });\n",
       "            }\n",
       "          };\n",
       "          ui.elements.mainContainer.onfullscreenchange = function(){\n",
       "            if(document.fullscreenElement){\n",
       "              ui.elements.fullscreenButton.innerText = \"Exit full screen\";\n",
       "            } else{\n",
       "              ui.elements.fullscreenButton.innerText = \"Enter full screen\";\n",
       "            }\n",
       "            // Wait for browser to switch to fullscreen and resize divs, then adapt to new sizes\n",
       "            setTimeout(function(){\n",
       "              ui.composites.responsiveContainer.adaptToFullscreen();\n",
       "              ui.composites.graph.updateGraphDrawingArea();\n",
       "            }, 250);\n",
       "          };\n",
       "          ui.elements.pngExportButton.onclick = function(){\n",
       "            ui.composites.download.png(\"graph.png\");\n",
       "          };\n",
       "          ui.elements.jpgExportButton.onclick = function(){\n",
       "            ui.composites.download.jpg(\"graph.jpg\");\n",
       "          };\n",
       "          // Data menu\n",
       "          ui.elements.dataHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.dataHead, ui.elements.dataBody);\n",
       "          };\n",
       "          // - Graph selection\n",
       "          ui.elements.graphSelection.onchange = function(){\n",
       "            const chosenGraphIndex = parseInt(this.value);\n",
       "            state.manager.parseChosenData(chosenGraphIndex);\n",
       "            state.manager.prepareShownData();\n",
       "            ui.initSelectionValues();\n",
       "            ui.composites.graph.createGraph();\n",
       "          };\n",
       "          // - Node label text\n",
       "          ui.elements.nodeLabelTextDataSourceSelect.onchange = function(){\n",
       "            state.nodeLabelTextDataSource = this.value;\n",
       "            state.manager.updateNodeLabelTexts();\n",
       "          };\n",
       "          // - Edge label text\n",
       "          ui.elements.edgeLabelTextDataSourceSelect.onchange = function(){\n",
       "            state.edgeLabelTextDataSource = this.value;\n",
       "            state.manager.updateEdgeLabelTexts();\n",
       "          };\n",
       "          // - Node size\n",
       "          ui.elements.nodeSizeDataSourceSelect.onchange = function(){\n",
       "            state.nodeSizeDataSource = this.value;\n",
       "            state.manager.updateNodeSizes();\n",
       "          };\n",
       "          ui.elements.nodeSizeNormalizationCheckbox.onchange = function(){\n",
       "            state.useNodeSizeNormalization = this.checked;\n",
       "            ui.elements.nodeSizeNormalizationContainer.style.display = ui.convert.boolToDisplayStyle(state.useNodeSizeNormalization);\n",
       "            state.manager.updateNodeSizes();\n",
       "          };\n",
       "          ui.elements.nodeSizeNormalizationMinSlider.oninput = function(){\n",
       "            ui.elements.nodeSizeNormalizationMinText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.nodeSizeNormalizationMinSlider.onchange = function(){\n",
       "            state.nodeSizeNormalizationMin = parseFloat(this.value);\n",
       "            if(state.nodeSizeNormalizationMin > state.nodeSizeNormalizationMax){\n",
       "              state.nodeSizeNormalizationMax = state.nodeSizeNormalizationMin;\n",
       "              ui.elements.nodeSizeNormalizationMaxSlider.value = state.nodeSizeNormalizationMax;\n",
       "              ui.elements.nodeSizeNormalizationMaxText.innerHTML = ui.convert.numberToText(state.nodeSizeNormalizationMax);\n",
       "            }\n",
       "            state.manager.updateNodeSizes();\n",
       "          };\n",
       "          ui.elements.nodeSizeNormalizationMaxSlider.oninput = function(){\n",
       "            ui.elements.nodeSizeNormalizationMaxText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.nodeSizeNormalizationMaxSlider.onchange = function(){\n",
       "            state.nodeSizeNormalizationMax = parseFloat(this.value);\n",
       "            if(state.nodeSizeNormalizationMax < state.nodeSizeNormalizationMin){\n",
       "              state.nodeSizeNormalizationMin = state.nodeSizeNormalizationMax;\n",
       "              ui.elements.nodeSizeNormalizationMinSlider.value = state.nodeSizeNormalizationMin;\n",
       "              ui.elements.nodeSizeNormalizationMinText.innerHTML = ui.convert.numberToText(state.nodeSizeNormalizationMin);\n",
       "            }\n",
       "            state.manager.updateNodeSizes();\n",
       "          };\n",
       "          // - Edge size\n",
       "          ui.elements.edgeSizeDataSourceSelect.onchange = function(){\n",
       "            state.edgeSizeDataSource = this.value;\n",
       "            state.manager.updateEdgeSizes();\n",
       "          };\n",
       "          ui.elements.edgeSizeNormalizationCheckbox.onchange = function(){\n",
       "            state.useEdgeSizeNormalization = this.checked;\n",
       "            ui.elements.edgeSizeNormalizationContainer.style.display = ui.convert.boolToDisplayStyle(state.useEdgeSizeNormalization);\n",
       "            state.manager.updateEdgeSizes();\n",
       "          };\n",
       "          ui.elements.edgeSizeNormalizationMinSlider.oninput = function(){\n",
       "            ui.elements.edgeSizeNormalizationMinText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.edgeSizeNormalizationMinSlider.onchange = function(){\n",
       "            state.edgeSizeNormalizationMin = parseFloat(this.value);\n",
       "            if(state.edgeSizeNormalizationMin > state.edgeSizeNormalizationMax){\n",
       "              state.edgeSizeNormalizationMax = state.edgeSizeNormalizationMin;\n",
       "              ui.elements.edgeSizeNormalizationMaxSlider.value = state.edgeSizeNormalizationMax;\n",
       "              ui.elements.edgeSizeNormalizationMaxText.innerHTML = ui.convert.numberToText(state.edgeSizeNormalizationMax);\n",
       "            }\n",
       "            state.manager.updateEdgeSizes();\n",
       "          };\n",
       "          ui.elements.edgeSizeNormalizationMaxSlider.oninput = function(){\n",
       "            ui.elements.edgeSizeNormalizationMaxText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.edgeSizeNormalizationMaxSlider.onchange = function(){\n",
       "            state.edgeSizeNormalizationMax = parseFloat(this.value);\n",
       "            if(state.edgeSizeNormalizationMax < state.edgeSizeNormalizationMin){\n",
       "              state.edgeSizeNormalizationMin = state.edgeSizeNormalizationMax;\n",
       "              ui.elements.edgeSizeNormalizationMinSlider.value = state.edgeSizeNormalizationMin;\n",
       "              ui.elements.edgeSizeNormalizationMinText.innerHTML = ui.convert.numberToText(state.edgeSizeNormalizationMin);\n",
       "            }\n",
       "            state.manager.updateEdgeSizes();\n",
       "          };\n",
       "          // Nodes menu\n",
       "          ui.elements.nodeHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.nodeHead, ui.elements.nodeBody);\n",
       "          };\n",
       "          ui.elements.nodeCheckbox.onchange = function(){\n",
       "            state.showNodes = this.checked;\n",
       "            ui.composites.graph.updateNodeVisibilities();\n",
       "          };\n",
       "          ui.elements.nodeSizeFactorSlider.oninput = function(){\n",
       "            ui.elements.nodeSizeFactorText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.nodeSizeFactorSlider.onchange = function(){\n",
       "            state.nodeSizeFactor = parseFloat(this.value);\n",
       "            state.manager.updateNodeSizes();\n",
       "          };\n",
       "          ui.elements.nodeDragFixCheckbox.onchange = function(){\n",
       "            state.nodeDragFix = this.checked;\n",
       "          };\n",
       "          ui.elements.nodeHoverNeighborhoodCheckbox.onchange = function(){\n",
       "            state.nodeHoverNeighborhood = this.checked;\n",
       "            ui.composites.graph.updateNodeHoverNeighborhoodBehavior();\n",
       "          };\n",
       "          ui.elements.nodeHoverTooltipCheckbox.onchange = function(){\n",
       "            state.nodeHoverTooltip = this.checked;\n",
       "            ui.composites.graph.updateNodeHoverTooltipBehavior();\n",
       "          };\n",
       "          ui.elements.nodeReleaseButton.onclick = function(){\n",
       "            ui.composites.graph.simulationManager.releaseFixedNodes();\n",
       "          };\n",
       "          // Node images menu\n",
       "          ui.elements.nodeImageHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.nodeImageHead, ui.elements.nodeImageBody);\n",
       "          };\n",
       "          ui.elements.nodeImageCheckbox.onchange = function(){\n",
       "            state.showNodeImages = this.checked;\n",
       "            state.manager.updateNodeImages();\n",
       "          };\n",
       "          ui.elements.nodeImageSizeFactorSlider.oninput = function(){\n",
       "            ui.elements.nodeImageSizeFactorText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.nodeImageSizeFactorSlider.onchange = function(){\n",
       "            state.nodeImageSizeFactor = parseFloat(this.value);\n",
       "            state.manager.updateNodeImages();\n",
       "          };\n",
       "          // Node labels menu\n",
       "          ui.elements.nodeLabelHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.nodeLabelHead, ui.elements.nodeLabelBody);\n",
       "          };\n",
       "          ui.elements.nodeLabelCheckbox.onchange = function(){\n",
       "            state.showNodeLabels = this.checked;\n",
       "            ui.composites.graph.updateNodeLabels();\n",
       "          };\n",
       "          ui.elements.nodeLabelBorderCheckbox.onchange = function(){\n",
       "            state.showNodeLabelBorders = this.checked;\n",
       "            ui.composites.graph.updateNodeLabels();\n",
       "          };\n",
       "          ui.elements.nodeLabelSizeFactorSlider.oninput = function(){\n",
       "            ui.elements.nodeLabelSizeFactorText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.nodeLabelSizeFactorSlider.onchange = function(){\n",
       "            state.nodeLabelSizeFactor = parseFloat(this.value);\n",
       "            state.manager.updateNodeLabelSizes();\n",
       "          };\n",
       "          // Edges menu\n",
       "          ui.elements.edgeHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.edgeHead, ui.elements.edgeBody);\n",
       "          };\n",
       "          ui.elements.edgeCheckbox.onchange = function(){\n",
       "            state.showEdges = this.checked;\n",
       "            ui.composites.graph.updateEdgeVisibility();\n",
       "          };\n",
       "          ui.elements.edgeSizeFactorSlider.oninput = function(){\n",
       "            ui.elements.edgeSizeFactorText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.edgeSizeFactorSlider.onchange = function(){\n",
       "            state.edgeSizeFactor = parseFloat(this.value);\n",
       "            state.manager.updateEdgeSizes();\n",
       "          };\n",
       "          ui.elements.edgeCurvatureSlider.oninput = function(){\n",
       "            ui.elements.edgeCurvatureText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.edgeCurvatureSlider.onchange = function(){\n",
       "            state.edgeCurvature = parseFloat(this.value);\n",
       "            state.manager.updateEdgeCurvatures();\n",
       "          };\n",
       "          ui.elements.edgeHoverTooltipCheckbox.onchange = function(){\n",
       "            state.edgeHoverTooltip = this.checked;\n",
       "            ui.composites.graph.updateEdgeHoverTooltipBehavior();\n",
       "          };\n",
       "          // Edge labels menu\n",
       "          ui.elements.edgeLabelHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.edgeLabelHead, ui.elements.edgeLabelBody);\n",
       "          };\n",
       "          ui.elements.edgeLabelCheckbox.onchange = function(){\n",
       "            state.showEdgeLabels = this.checked;\n",
       "            ui.composites.graph.updateEdgeLabels();\n",
       "          };\n",
       "          ui.elements.edgeLabelBorderCheckbox.onchange = function(){\n",
       "            state.showEdgeLabelBorders = this.checked;\n",
       "            ui.composites.graph.updateEdgeLabels();\n",
       "          };\n",
       "          ui.elements.edgeLabelSizeFactorSlider.oninput = function(){\n",
       "            ui.elements.edgeLabelSizeFactorText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.edgeLabelSizeFactorSlider.onchange = function(){\n",
       "            state.edgeLabelSizeFactor = parseFloat(this.value);\n",
       "            state.manager.updateEdgeLabelSizes();\n",
       "          };\n",
       "          // Layout algorithm menu\n",
       "          ui.elements.layoutAlgorithmHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.layoutAlgorithmHead, ui.elements.layoutAlgorithmBody);\n",
       "          };\n",
       "          ui.elements.simulationCheckbox.onchange = function(){\n",
       "            state.layoutAlgorithmActive = !state.layoutAlgorithmActive;\n",
       "            ui.composites.graph.simulationManager.setActivity(state.layoutAlgorithmActive);\n",
       "          };\n",
       "          ui.elements.layoutAlgorithmSelection.onchange = function(){\n",
       "            state.layoutAlgorithm = this.value;\n",
       "            ui.composites.graph.simulationManager.setAlgorithm();\n",
       "          };\n",
       "          ui.elements.centralGravitySlider.oninput = function(){\n",
       "            ui.elements.centralGravityText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.centralGravitySlider.onchange = function(){\n",
       "            state.centralGravity = parseFloat(this.value);\n",
       "            ui.composites.graph.simulationManager.setCentralGravity();\n",
       "          };\n",
       "          ui.elements.springLengthSlider.oninput = function(){\n",
       "            ui.elements.springLengthText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.springLengthSlider.onchange = function(){\n",
       "            state.springLength = parseFloat(this.value);\n",
       "            ui.composites.graph.simulationManager.setSpringLength();\n",
       "          };\n",
       "          ui.elements.springConstantSlider.oninput = function(){\n",
       "            ui.elements.springConstantText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.springConstantSlider.onchange = function(){\n",
       "            state.springConstant = parseFloat(this.value);\n",
       "            ui.composites.graph.simulationManager.setSpringConstant();\n",
       "          };\n",
       "          ui.elements.gravitationalConstantSlider.oninput = function(){\n",
       "            ui.elements.gravitationalConstantText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.gravitationalConstantSlider.onchange = function(){\n",
       "            state.gravitationalConstant = parseFloat(this.value);\n",
       "            ui.composites.graph.simulationManager.setGravitationalConstant();\n",
       "          };\n",
       "          ui.elements.avoidOverlapSlider.oninput = function(){\n",
       "            ui.elements.avoidOverlapText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.avoidOverlapSlider.onchange = function(){\n",
       "            state.avoidOverlap = parseFloat(this.value);\n",
       "            ui.composites.graph.simulationManager.setAvoidOverlap();\n",
       "          };\n",
       "        },\n",
       "      }\n",
       "\n",
       "      const app = {\n",
       "        start(){\n",
       "          state.manager.fetchRawDataFromTemplating();\n",
       "          state.manager.parseChosenData(0);\n",
       "          state.manager.prepareShownData();\n",
       "          ui.init();\n",
       "          // Wait a bit to finish UI rendering, then start potentially slow layout computation\n",
       "          setTimeout(function(){\n",
       "            ui.composites.graph.createGraph();\n",
       "            ui.setBehavior();\n",
       "          }, 400);\n",
       "          // Reduce risk of getting stuck with a wrong drawing area size\n",
       "          function checkIfSizeUpdateRequired(){\n",
       "            if(ui.elements.graphContainer.clientWidth != state.graphContainerWidth){\n",
       "              ui.composites.responsiveContainer.adaptToResize();\n",
       "              ui.composites.graph.updateGraphDrawingArea();\n",
       "            }\n",
       "          }\n",
       "          [1, 2, 5, 8, 12, 15, 20, 25, 30, 35, 40, 45, 50, 60, 90].forEach(function(delay){\n",
       "            setTimeout(checkIfSizeUpdateRequired, delay*1000);\n",
       "          })\n",
       "        },\n",
       "\n",
       "        restart(){\n",
       "          app.start();\n",
       "        },\n",
       "      }\n",
       "\n",
       "      // Start website dynamics\n",
       "      app.start();\n",
       "    });\n",
       "  </script>\n",
       "\n"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "with model.rule():\n",
    "    p = Person(name = person_name)\n",
    "    direct_ownership_graph.Node(p.family).set(focus='target')\n",
    "\n",
    "vis = direct_ownership_graph.visualize(three=False, show_edge_label = True, style=ownership_graph_style)\n",
    "vis.display(inline=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "source": [
    "> **Tip**. Our ownership graph looks much more connected now! However, it is still unclear if there is anything suspicious in Tom taking a loan from the \"ACME Bank\". So let's keep adding knowledge to help interpret our graph."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Additional derived `control` relationships\n",
    "Let's infer additional relationships due to some broadly accepted formulations, also present in logic programming contexts:\n",
    "- A company (or a person/family) X controls a company Y, if X directly owns more than 50% of Y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": [
     "hide-input"
    ]
   },
   "outputs": [],
   "source": [
    "# rule 1\n",
    "with model.rule():\n",
    "    o = DirectOwnership()\n",
    "    o.part > 0.5\n",
    "    c = Control.add(controller = o.owner, controlled = o.asset)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": [
     "hide-input"
    ]
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "  <style>\n",
       "    /* Main divisions */\n",
       "    #in25kxQoTrpu5Cpf8-main-div {\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "      padding: 3px;\n",
       "      background-color: white;\n",
       "    }\n",
       "    #in25kxQoTrpu5Cpf8-left-div {\n",
       "      float: left;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    #in25kxQoTrpu5Cpf8-right-div {\n",
       "      float: left;\n",
       "      height: 100%;\n",
       "      display: none;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    #in25kxQoTrpu5Cpf8-right-inner-div {\n",
       "      padding-left: 5px;\n",
       "      padding-right: 2px;\n",
       "      overflow-x: hidden;\n",
       "      overflow-y: auto;\n",
       "      height: 100%;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "\n",
       "    /* Graph and details (contained in left-inner-div) */\n",
       "    #in25kxQoTrpu5Cpf8-graph-div {\n",
       "      overflow: hidden;\n",
       "      resize: vertical;\n",
       "      position: relative;\n",
       "      border: 1px solid #ccc;\n",
       "      border-radius: 4px;\n",
       "      box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2);\n",
       "      display: none;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    #in25kxQoTrpu5Cpf8-details-div {\n",
       "      overflow: auto;\n",
       "      resize: vertical;\n",
       "      margin-top: 5px;\n",
       "      border: 1px solid #ccc;\n",
       "      border-radius: 4px;\n",
       "      box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2);\n",
       "      display: none;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    #in25kxQoTrpu5Cpf8-details-head {\n",
       "      user-select: none;\n",
       "      padding-left: 4px !important;\n",
       "      padding-top: 4px !important;\n",
       "      font-size: 8px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      color: gray;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    #in25kxQoTrpu5Cpf8-details-body {\n",
       "      padding: 10px;\n",
       "      padding-top: 6px;\n",
       "      font-size: 10px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "\n",
       "    /* Control menu (contained in right-inner-div) */\n",
       "    .in25kxQoTrpu5Cpf8-menu-item-head {\n",
       "      font-size: 11px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      color: black;\n",
       "      cursor: pointer;\n",
       "      padding-left: 5px;\n",
       "      padding-right: 0px;\n",
       "      padding-top: 5px;\n",
       "      padding-bottom: 5px;\n",
       "      margin-bottom: 5px;\n",
       "      border-radius: 4px;\n",
       "      border: 1px solid #ccc;\n",
       "      box-shadow: 0px 0px 3px rgba(0, 0, 0, 0.2);\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    .in25kxQoTrpu5Cpf8-menu-item-body {\n",
       "      margin-left: 5px;\n",
       "      margin-bottom: 10px;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    .in25kxQoTrpu5Cpf8-menu-subitem-head {\n",
       "      font-size: 9px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      font-weight: 600;\n",
       "      color: #006429;\n",
       "      cursor: default;\n",
       "      margin-bottom: 2px;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    .in25kxQoTrpu5Cpf8-menu-subitem-body {\n",
       "      font-size: 8px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      margin-left: 7px;\n",
       "      margin-bottom: 5px;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    .in25kxQoTrpu5Cpf8-labeled-input {\n",
       "      all: initial;\n",
       "      display: flex;\n",
       "      align-items: center;\n",
       "      margin-top: 1px;\n",
       "      margin-bottom: 1px;\n",
       "    }\n",
       "    .in25kxQoTrpu5Cpf8-label {\n",
       "      all: initial;\n",
       "      font-size: 8px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      font-style: italic;\n",
       "      cursor: pointer;\n",
       "    }\n",
       "    .in25kxQoTrpu5Cpf8-slider {\n",
       "      width: 100%;\n",
       "      margin-bottom: 2px;\n",
       "    }\n",
       "    .in25kxQoTrpu5Cpf8-slider::-moz-focus-outer {\n",
       "      border: 0;\n",
       "    }\n",
       "    .in25kxQoTrpu5Cpf8-slider-text-left {\n",
       "      font-size: 8px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      font-style: italic;\n",
       "      color: black;\n",
       "      float: left;\n",
       "      margin-top: 2px;\n",
       "    }\n",
       "    .in25kxQoTrpu5Cpf8-slider-text-right {\n",
       "      font-size: 8px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      color: black;\n",
       "      float: right;\n",
       "    }\n",
       "    .in25kxQoTrpu5Cpf8-checkbox {\n",
       "      margin-left: 0px !important;\n",
       "      margin-right: 4px !important;\n",
       "      margin-top: 2px !important;\n",
       "      margin-bottom: 2px !important;\n",
       "      padding: 0px !important;\n",
       "    }\n",
       "    .in25kxQoTrpu5Cpf8-select {\n",
       "      cursor: pointer;\n",
       "      outline: none;\n",
       "      font-size: 8px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      color: black;\n",
       "      background-color: #f5f5f5;\n",
       "      width: 100%;\n",
       "      padding-top: 4px !important;\n",
       "      padding-bottom: 4px !important;\n",
       "      padding-left: 5px;\n",
       "      padding-right: 10px;\n",
       "      margin-right: 5px;\n",
       "      margin-top: 2px;\n",
       "      margin-bottom: 2px;\n",
       "      border-radius: 4px;\n",
       "      border: 1.2px solid #bbb;\n",
       "      box-shadow: 0 1px 0 1px rgba(0, 0, 0, 0.04);\n",
       "\n",
       "      -moz-appearance: none;\n",
       "      -webkit-appearance: none;\n",
       "      appearance: none;\n",
       "      background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyOTIuNCIgaGVpZ2h0PSIyOTIuNCI+PHBhdGggZmlsbD0iIzAwMDAwMCIgZD0iTSAtNS4yMDY0NjJlLTYsNjQuNTcyNjU2IDI5Mi4zOTk5OSw2NC41NzI2NTQgMTQ2LjE5OTk3LDIzMy42Mjg0NyAtNS4yMDY0NjJlLTYsNjQuNTcyNjU2Ii8+PC9zdmc+Cg==');\n",
       "      background-repeat: no-repeat;\n",
       "      background-position: right 4px top 50%;\n",
       "      background-size: 6px;\n",
       "    }\n",
       "    @-moz-document url-prefix() {\n",
       "      /* Dirty hack to remove dotted border on focus */\n",
       "      .in25kxQoTrpu5Cpf8-select {\n",
       "        color: transparent !important;\n",
       "        text-shadow: 0 0 0 black !important;\n",
       "      }\n",
       "    }\n",
       "    .in25kxQoTrpu5Cpf8-select:after {\n",
       "      cursor: pointer;\n",
       "    }\n",
       "    .in25kxQoTrpu5Cpf8-button {\n",
       "      cursor: pointer;\n",
       "      outline: none;\n",
       "      font-size: 8px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      color: black;\n",
       "      background-color: #f2f2f2;\n",
       "      padding-top: 4px !important;\n",
       "      padding-bottom: 4px !important;\n",
       "      padding-left: 10px;\n",
       "      padding-right: 10px;\n",
       "      margin-top: 2px;\n",
       "      margin-bottom: 2px;\n",
       "      border-radius: 4px;\n",
       "      border: 1.2px solid #bbb;\n",
       "      box-shadow: 0 1px 0 1px rgba(0, 0, 0, 0.04);\n",
       "    }\n",
       "    .in25kxQoTrpu5Cpf8-button:hover {\n",
       "      border: 1.2px solid #999;\n",
       "      background-color: #f2f2f2;\n",
       "    }\n",
       "    .in25kxQoTrpu5Cpf8-button:active {\n",
       "      background-color: #ddd;\n",
       "    }\n",
       "    .in25kxQoTrpu5Cpf8-button::-moz-focus-inner {\n",
       "      border: 0;\n",
       "    }\n",
       "    /* Hidden menu items */\n",
       "    #in25kxQoTrpu5Cpf8-graph-select-div {\n",
       "      display: none;\n",
       "    }\n",
       "    #in25kxQoTrpu5Cpf8-node-size-norm-div {\n",
       "      display: none;\n",
       "    }\n",
       "    #in25kxQoTrpu5Cpf8-edge-size-norm-div {\n",
       "      display: none;\n",
       "    }\n",
       "\n",
       "    /* Graph */\n",
       "    #in25kxQoTrpu5Cpf8-tooltip-div {\n",
       "      font-size: 10px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      z-index: 42001;\n",
       "      opacity: 0;\n",
       "      visibility: hidden;\n",
       "      position: absolute !important;\n",
       "      max-width: 40%;\n",
       "      padding: 5px;\n",
       "      white-space: pre-wrap;\n",
       "      word-break: break-word;\n",
       "      color: black;\n",
       "      background-color: white;\n",
       "      border-radius: 4px;\n",
       "      border: 1px solid #ccc;\n",
       "      box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.2);\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    #in25kxQoTrpu5Cpf8-menu-toggle-button, #in25kxQoTrpu5Cpf8-details-toggle-button, #in25kxQoTrpu5Cpf8-progress-container {\n",
       "      font-size: 14px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      z-index: 42000;\n",
       "      cursor: pointer;\n",
       "      position: absolute;\n",
       "      background-color: white;\n",
       "      border-radius: 4px;\n",
       "      box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.2);\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    #in25kxQoTrpu5Cpf8-menu-toggle-button {\n",
       "      top: 0;\n",
       "      right: 0;\n",
       "      padding-left: 6px;\n",
       "      padding-right: 6px;\n",
       "      padding-top: 12px;\n",
       "      padding-bottom: 12px;\n",
       "      border-top: 0px;\n",
       "      border-right: 0px;\n",
       "      border-bottom: 1px solid #ccc;\n",
       "      border-left: 1px solid #ccc;\n",
       "    }\n",
       "    #in25kxQoTrpu5Cpf8-details-toggle-button {\n",
       "      bottom: 0;\n",
       "      left: 0;\n",
       "      padding-left: 19px;\n",
       "      padding-right: 19px;\n",
       "      padding-top: 0.5px;\n",
       "      padding-bottom: 2px;\n",
       "      border-top: 1px solid #ccc;\n",
       "      border-right: 1px solid #ccc;\n",
       "      border-bottom: 0px;\n",
       "      border-left: 0px;\n",
       "    }\n",
       "    #in25kxQoTrpu5Cpf8-progress-container {\n",
       "      font-size: 10px;\n",
       "      text-align: center;\n",
       "      top: 46%;\n",
       "      left: 15%;\n",
       "      width: 70%;\n",
       "      padding: 8px;\n",
       "      border: none;\n",
       "      box-shadow: none;\n",
       "    }\n",
       "\n",
       "    /* Details */\n",
       "    #in25kxQoTrpu5Cpf8-details-user-provided {\n",
       "      margin-top: 3px;\n",
       "      padding-top: 3.5px;\n",
       "      border-top: 0.5px dashed black;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "      white-space: pre-wrap;\n",
       "      word-break: break-word;\n",
       "    }\n",
       "    #in25kxQoTrpu5Cpf8-details-user-provided ul {\n",
       "      list-style-position: inside;\n",
       "      padding-left: 6px;\n",
       "    }\n",
       "\n",
       "    /* Unavailable in vis.js and therefore hidden */\n",
       "    #in25kxQoTrpu5Cpf8-svg,\n",
       "    #in25kxQoTrpu5Cpf8-node-label-rotation,\n",
       "    #in25kxQoTrpu5Cpf8-edge-label-rotation {\n",
       "      display: none;\n",
       "    }\n",
       "    /* Specific to vis.js */\n",
       "    div.vis-tooltip {\n",
       "      position: absolute;\n",
       "      visibility: hidden;\n",
       "      pointer-events: none;\n",
       "      z-index: 5;\n",
       "      max-width: 40%;\n",
       "      white-space: pre-wrap;\n",
       "      word-break: break-word;\n",
       "      font-size: 10px;\n",
       "      padding: 5px;\n",
       "      color: black;\n",
       "      background-color: white;\n",
       "      -moz-border-radius: 3px;\n",
       "      -webkit-border-radius: 3px;\n",
       "      border-radius: 3px;\n",
       "      border: 0.5px solid black;\n",
       "      box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.3);\n",
       "    }\n",
       "  </style>\n",
       "\n",
       "  <div id=\"in25kxQoTrpu5Cpf8-main-div\">\n",
       "    <div id=\"in25kxQoTrpu5Cpf8-tooltip-div\"></div>\n",
       "\n",
       "    <div id=\"in25kxQoTrpu5Cpf8-left-div\">\n",
       "      <div id=\"in25kxQoTrpu5Cpf8-left-inner-div\">\n",
       "        <div id=\"in25kxQoTrpu5Cpf8-graph-div\"></div>\n",
       "        <div id=\"in25kxQoTrpu5Cpf8-details-div\">\n",
       "          <div id=\"in25kxQoTrpu5Cpf8-details-head\">\n",
       "            Details for selected element\n",
       "          </div>\n",
       "          <div id=\"in25kxQoTrpu5Cpf8-details-body\">\n",
       "          </div>\n",
       "        </div>\n",
       "      </div>\n",
       "    </div>\n",
       "\n",
       "    <div id=\"in25kxQoTrpu5Cpf8-right-div\">\n",
       "      <div id=\"in25kxQoTrpu5Cpf8-right-inner-div\">\n",
       "        <!-- Menu: General -->\n",
       "        <div class=\"in25kxQoTrpu5Cpf8-menu-item-head\"\n",
       "             id=\"in25kxQoTrpu5Cpf8-general-head\">\n",
       "          General\n",
       "        </div>\n",
       "        <div class=\"in25kxQoTrpu5Cpf8-menu-item-body\"\n",
       "             id=\"in25kxQoTrpu5Cpf8-general-body\">\n",
       "          <!-- Sub-menu: State -->\n",
       "          <div>\n",
       "            <div class=\"in25kxQoTrpu5Cpf8-menu-subitem-head\">\n",
       "              App state\n",
       "            </div>\n",
       "            <div class=\"in25kxQoTrpu5Cpf8-menu-subitem-body\">\n",
       "              <button class=\"in25kxQoTrpu5Cpf8-button\"\n",
       "                      id=\"in25kxQoTrpu5Cpf8-reset\"\n",
       "                      type=\"button\">Reset</button>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Display mode (fullscreen or not) -->\n",
       "          <div>\n",
       "            <div class=\"in25kxQoTrpu5Cpf8-menu-subitem-head\">\n",
       "              Display mode\n",
       "            </div>\n",
       "            <div class=\"in25kxQoTrpu5Cpf8-menu-subitem-body\">\n",
       "              <button class=\"in25kxQoTrpu5Cpf8-button\"\n",
       "                      id=\"in25kxQoTrpu5Cpf8-fullscreen-button\"\n",
       "                      type=\"button\">Enter full screen</button>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Export -->\n",
       "          <div>\n",
       "            <div class=\"in25kxQoTrpu5Cpf8-menu-subitem-head\">\n",
       "              Export\n",
       "            </div>\n",
       "            <div class=\"in25kxQoTrpu5Cpf8-menu-subitem-body\">\n",
       "              <button class=\"in25kxQoTrpu5Cpf8-button\"\n",
       "                      id=\"in25kxQoTrpu5Cpf8-svg\"\n",
       "                      type=\"button\">SVG</button>\n",
       "              <button class=\"in25kxQoTrpu5Cpf8-button\"\n",
       "                      id=\"in25kxQoTrpu5Cpf8-png\"\n",
       "                      type=\"button\">PNG</button>\n",
       "              <button class=\"in25kxQoTrpu5Cpf8-button\"\n",
       "                      id=\"in25kxQoTrpu5Cpf8-jpg\"\n",
       "                      type=\"button\">JPG</button>\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "        <!-- Menu: Data -->\n",
       "        <div class=\"in25kxQoTrpu5Cpf8-menu-item-head\"\n",
       "             id=\"in25kxQoTrpu5Cpf8-data-head\">\n",
       "          Data selection\n",
       "        </div>\n",
       "        <div class=\"in25kxQoTrpu5Cpf8-menu-item-body\"\n",
       "             id=\"in25kxQoTrpu5Cpf8-data-body\">\n",
       "          <!-- Sub-menu: Graph (only shown if multiple graphs in data) -->\n",
       "          <div id=\"in25kxQoTrpu5Cpf8-graph-select-div\">\n",
       "            <div class=\"in25kxQoTrpu5Cpf8-menu-subitem-head\">\n",
       "              Graph\n",
       "            </div>\n",
       "            <div class=\"in25kxQoTrpu5Cpf8-menu-subitem-body\">\n",
       "              <select class=\"in25kxQoTrpu5Cpf8-select\"\n",
       "                      id=\"in25kxQoTrpu5Cpf8-graph-select\"></select>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Node label text -->\n",
       "          <div>\n",
       "            <div class=\"in25kxQoTrpu5Cpf8-menu-subitem-head\">\n",
       "              Node label text\n",
       "            </div>\n",
       "            <div class=\"in25kxQoTrpu5Cpf8-menu-subitem-body\">\n",
       "              <select class=\"in25kxQoTrpu5Cpf8-select\"\n",
       "                      id=\"in25kxQoTrpu5Cpf8-node-label-data-source-select\"></select>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Edge label text -->\n",
       "          <div>\n",
       "            <div class=\"in25kxQoTrpu5Cpf8-menu-subitem-head\">\n",
       "              Edge label text\n",
       "            </div>\n",
       "            <div class=\"in25kxQoTrpu5Cpf8-menu-subitem-body\">\n",
       "              <select class=\"in25kxQoTrpu5Cpf8-select\"\n",
       "                      id=\"in25kxQoTrpu5Cpf8-edge-label-data-source-select\"></select>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Node size -->\n",
       "          <div class=\"in25kxQoTrpu5Cpf8-menu-subitem-head\">\n",
       "            Node size\n",
       "          </div>\n",
       "          <div class=\"in25kxQoTrpu5Cpf8-menu-subitem-body\">\n",
       "            <div>\n",
       "              <select class=\"in25kxQoTrpu5Cpf8-select\"\n",
       "                      id=\"in25kxQoTrpu5Cpf8-node-size-data-source-select\"></select>\n",
       "            </div>\n",
       "            <div class=\"in25kxQoTrpu5Cpf8-labeled-input\">\n",
       "              <input class=\"in25kxQoTrpu5Cpf8-checkbox\"\n",
       "                     id=\"in25kxQoTrpu5Cpf8-node-size-normalization-checkbox\"\n",
       "                     type=\"checkbox\">\n",
       "              <label class=\"in25kxQoTrpu5Cpf8-label\"\n",
       "                     for=\"in25kxQoTrpu5Cpf8-node-size-normalization-checkbox\">Normalize</label>\n",
       "            </div>\n",
       "            <div id=\"in25kxQoTrpu5Cpf8-node-size-norm-div\">\n",
       "              <div>\n",
       "                <span class=\"in25kxQoTrpu5Cpf8-slider-text-left\">Minimum</span>\n",
       "                <span class=\"in25kxQoTrpu5Cpf8-slider-text-right\"\n",
       "                      id=\"in25kxQoTrpu5Cpf8-node-size-normalization-min-text\"></span>\n",
       "                <input class=\"in25kxQoTrpu5Cpf8-slider\"\n",
       "                       id=\"in25kxQoTrpu5Cpf8-node-size-normalization-min-slider\"\n",
       "                       type=\"range\" min=\"0.01\" max=\"300.0\" step=\"0.01\">\n",
       "              </div>\n",
       "              <div>\n",
       "                <span class=\"in25kxQoTrpu5Cpf8-slider-text-left\">Maximum</span>\n",
       "                <span class=\"in25kxQoTrpu5Cpf8-slider-text-right\"\n",
       "                      id=\"in25kxQoTrpu5Cpf8-node-size-normalization-max-text\"></span>\n",
       "                <input class=\"in25kxQoTrpu5Cpf8-slider\"\n",
       "                       id=\"in25kxQoTrpu5Cpf8-node-size-normalization-max-slider\"\n",
       "                       type=\"range\" min=\"0.01\" max=\"300.0\" step=\"0.01\">\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Edge size -->\n",
       "          <div class=\"in25kxQoTrpu5Cpf8-menu-subitem-head\">\n",
       "            Edge size\n",
       "          </div>\n",
       "          <div class=\"in25kxQoTrpu5Cpf8-menu-subitem-body\">\n",
       "            <div>\n",
       "              <select class=\"in25kxQoTrpu5Cpf8-select\"\n",
       "                      id=\"in25kxQoTrpu5Cpf8-edge-size-data-source-select\"></select>\n",
       "            </div>\n",
       "            <div class=\"in25kxQoTrpu5Cpf8-labeled-input\">\n",
       "              <input class=\"in25kxQoTrpu5Cpf8-checkbox\"\n",
       "                     id=\"in25kxQoTrpu5Cpf8-edge-size-normalization-checkbox\"\n",
       "                     type=\"checkbox\">\n",
       "              <label class=\"in25kxQoTrpu5Cpf8-label\"\n",
       "                     for=\"in25kxQoTrpu5Cpf8-edge-size-normalization-checkbox\">Normalize</label>\n",
       "            </div>\n",
       "            <div id=\"in25kxQoTrpu5Cpf8-edge-size-norm-div\">\n",
       "              <div>\n",
       "                <span class=\"in25kxQoTrpu5Cpf8-slider-text-left\">Minimum</span>\n",
       "                <span class=\"in25kxQoTrpu5Cpf8-slider-text-right\"\n",
       "                      id=\"in25kxQoTrpu5Cpf8-edge-size-normalization-min-text\"></span>\n",
       "                <input class=\"in25kxQoTrpu5Cpf8-slider\"\n",
       "                       id=\"in25kxQoTrpu5Cpf8-edge-size-normalization-min-slider\"\n",
       "                       type=\"range\" min=\"0.01\" max=\"50.0\" step=\"0.01\">\n",
       "              </div>\n",
       "              <div>\n",
       "                <span class=\"in25kxQoTrpu5Cpf8-slider-text-left\">Maximum</span>\n",
       "                <span class=\"in25kxQoTrpu5Cpf8-slider-text-right\"\n",
       "                      id=\"in25kxQoTrpu5Cpf8-edge-size-normalization-max-text\"></span>\n",
       "                <input class=\"in25kxQoTrpu5Cpf8-slider\"\n",
       "                       id=\"in25kxQoTrpu5Cpf8-edge-size-normalization-max-slider\"\n",
       "                       type=\"range\" min=\"0.01\" max=\"50.0\" step=\"0.01\">\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "        <!-- Menu: Nodes -->\n",
       "        <div class=\"in25kxQoTrpu5Cpf8-menu-item-head\"\n",
       "             id=\"in25kxQoTrpu5Cpf8-node-head\">\n",
       "          Nodes\n",
       "        </div>\n",
       "        <div class=\"in25kxQoTrpu5Cpf8-menu-item-body\"\n",
       "             id=\"in25kxQoTrpu5Cpf8-node-body\">\n",
       "          <!-- Sub-menu: Visibility -->\n",
       "          <div>\n",
       "            <div class=\"in25kxQoTrpu5Cpf8-menu-subitem-head\">\n",
       "              Visibility\n",
       "            </div>\n",
       "            <div class=\"in25kxQoTrpu5Cpf8-menu-subitem-body\">\n",
       "              <div class=\"in25kxQoTrpu5Cpf8-labeled-input\">\n",
       "                <input class=\"in25kxQoTrpu5Cpf8-checkbox\"\n",
       "                       id=\"in25kxQoTrpu5Cpf8-node-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"in25kxQoTrpu5Cpf8-label\"\n",
       "                       for=\"in25kxQoTrpu5Cpf8-node-checkbox\">Show nodes</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Size -->\n",
       "          <div>\n",
       "            <div class=\"in25kxQoTrpu5Cpf8-menu-subitem-head\">\n",
       "              Size\n",
       "            </div>\n",
       "            <div class=\"in25kxQoTrpu5Cpf8-menu-subitem-body\">\n",
       "              <div>\n",
       "                <span class=\"in25kxQoTrpu5Cpf8-slider-text-left\">Scaling factor</span>\n",
       "                <span class=\"in25kxQoTrpu5Cpf8-slider-text-right\"\n",
       "                      id=\"in25kxQoTrpu5Cpf8-node-size-factor-text\"></span>\n",
       "                <input class=\"in25kxQoTrpu5Cpf8-slider\"\n",
       "                       id=\"in25kxQoTrpu5Cpf8-node-size-factor-slider\"\n",
       "                       type=\"range\" min=\"0.01\" max=\"5.0\" step=\"0.01\">\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Position -->\n",
       "          <div>\n",
       "            <div class=\"in25kxQoTrpu5Cpf8-menu-subitem-head\">\n",
       "              Position\n",
       "            </div>\n",
       "            <div class=\"in25kxQoTrpu5Cpf8-menu-subitem-body\">\n",
       "              <button class=\"in25kxQoTrpu5Cpf8-button\"\n",
       "                      id=\"in25kxQoTrpu5Cpf8-node-release-button\"\n",
       "                      type=\"button\">Release fixed nodes</button>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Drag behavior -->\n",
       "          <div>\n",
       "            <div class=\"in25kxQoTrpu5Cpf8-menu-subitem-head\">\n",
       "              Drag behavior\n",
       "            </div>\n",
       "            <div class=\"in25kxQoTrpu5Cpf8-menu-subitem-body\">\n",
       "              <div class=\"in25kxQoTrpu5Cpf8-labeled-input\">\n",
       "                <input class=\"in25kxQoTrpu5Cpf8-checkbox\"\n",
       "                       id=\"in25kxQoTrpu5Cpf8-node-drag-fix-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"in25kxQoTrpu5Cpf8-label\"\n",
       "                       for=\"in25kxQoTrpu5Cpf8-node-drag-fix-checkbox\">Fix node position</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Hover behavior -->\n",
       "          <div>\n",
       "            <div class=\"in25kxQoTrpu5Cpf8-menu-subitem-head\">\n",
       "              Hover behavior\n",
       "            </div>\n",
       "            <div class=\"in25kxQoTrpu5Cpf8-menu-subitem-body\">\n",
       "              <div class=\"in25kxQoTrpu5Cpf8-labeled-input\">\n",
       "                <input class=\"in25kxQoTrpu5Cpf8-checkbox\"\n",
       "                       id=\"in25kxQoTrpu5Cpf8-node-hover-neighborhood-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"in25kxQoTrpu5Cpf8-label\"\n",
       "                       for=\"in25kxQoTrpu5Cpf8-node-hover-neighborhood-checkbox\">Show neighborhood</label>\n",
       "              </div>\n",
       "              <div class=\"in25kxQoTrpu5Cpf8-labeled-input\">\n",
       "                <input class=\"in25kxQoTrpu5Cpf8-checkbox\"\n",
       "                       id=\"in25kxQoTrpu5Cpf8-node-hover-tooltip-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"in25kxQoTrpu5Cpf8-label\"\n",
       "                       for=\"in25kxQoTrpu5Cpf8-node-hover-tooltip-checkbox\">Show tooltips (if provided)</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "        <!-- Menu: Node images -->\n",
       "        <div id=\"in25kxQoTrpu5Cpf8-node-image-meta-control\">\n",
       "          <div class=\"in25kxQoTrpu5Cpf8-menu-item-head\"\n",
       "               id=\"in25kxQoTrpu5Cpf8-node-image-head\">\n",
       "            Node images\n",
       "          </div>\n",
       "          <div class=\"in25kxQoTrpu5Cpf8-menu-item-body\"\n",
       "               id=\"in25kxQoTrpu5Cpf8-node-image-body\">\n",
       "            <!-- Sub-menu: Visibility -->\n",
       "            <div>\n",
       "              <div class=\"in25kxQoTrpu5Cpf8-menu-subitem-head\">\n",
       "                Visibility\n",
       "              </div>\n",
       "              <div class=\"in25kxQoTrpu5Cpf8-menu-subitem-body\">\n",
       "                <div class=\"in25kxQoTrpu5Cpf8-labeled-input\">\n",
       "                  <input class=\"in25kxQoTrpu5Cpf8-checkbox\"\n",
       "                         id=\"in25kxQoTrpu5Cpf8-node-image-checkbox\"\n",
       "                         type=\"checkbox\">\n",
       "                  <label class=\"in25kxQoTrpu5Cpf8-label\"\n",
       "                         for=\"in25kxQoTrpu5Cpf8-node-image-checkbox\">Show node images</label>\n",
       "                </div>\n",
       "              </div>\n",
       "            </div>\n",
       "            <!-- Sub-menu: Size -->\n",
       "            <div>\n",
       "              <div class=\"in25kxQoTrpu5Cpf8-menu-subitem-head\">\n",
       "                Size\n",
       "              </div>\n",
       "              <div class=\"in25kxQoTrpu5Cpf8-menu-subitem-body\">\n",
       "                <span class=\"in25kxQoTrpu5Cpf8-slider-text-left\">Scaling factor</span>\n",
       "                <span class=\"in25kxQoTrpu5Cpf8-slider-text-right\"\n",
       "                      id=\"in25kxQoTrpu5Cpf8-node-image-size-factor-text\"></span>\n",
       "                <input class=\"in25kxQoTrpu5Cpf8-slider\"\n",
       "                       id=\"in25kxQoTrpu5Cpf8-node-image-size-factor-slider\"\n",
       "                       type=\"range\" min=\"0.01\" max=\"5.0\" step=\"0.01\">\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "        <!-- Menu: Node labels -->\n",
       "        <div class=\"in25kxQoTrpu5Cpf8-menu-item-head\"\n",
       "             id=\"in25kxQoTrpu5Cpf8-node-label-head\">\n",
       "          Node labels\n",
       "        </div>\n",
       "        <div class=\"in25kxQoTrpu5Cpf8-menu-item-body\"\n",
       "             id=\"in25kxQoTrpu5Cpf8-node-label-body\">\n",
       "          <!-- Sub-menu: Visibility -->\n",
       "          <div>\n",
       "            <div class=\"in25kxQoTrpu5Cpf8-menu-subitem-head\">\n",
       "              Visibility\n",
       "            </div>\n",
       "            <div class=\"in25kxQoTrpu5Cpf8-menu-subitem-body\">\n",
       "              <div class=\"in25kxQoTrpu5Cpf8-labeled-input\">\n",
       "                <input class=\"in25kxQoTrpu5Cpf8-checkbox\"\n",
       "                       id=\"in25kxQoTrpu5Cpf8-node-label-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"in25kxQoTrpu5Cpf8-label\"\n",
       "                       for=\"in25kxQoTrpu5Cpf8-node-label-checkbox\">Show node labels</label>\n",
       "              </div>\n",
       "              <div class=\"in25kxQoTrpu5Cpf8-labeled-input\">\n",
       "                <input class=\"in25kxQoTrpu5Cpf8-checkbox\"\n",
       "                       id=\"in25kxQoTrpu5Cpf8-node-label-border-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"in25kxQoTrpu5Cpf8-label\"\n",
       "                       for=\"in25kxQoTrpu5Cpf8-node-label-border-checkbox\">Show borders</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Size -->\n",
       "          <div>\n",
       "            <div class=\"in25kxQoTrpu5Cpf8-menu-subitem-head\">\n",
       "              Size\n",
       "            </div>\n",
       "            <div class=\"in25kxQoTrpu5Cpf8-menu-subitem-body\">\n",
       "              <span class=\"in25kxQoTrpu5Cpf8-slider-text-left\">Scaling factor</span>\n",
       "              <span class=\"in25kxQoTrpu5Cpf8-slider-text-right\"\n",
       "                    id=\"in25kxQoTrpu5Cpf8-node-label-size-factor-text\"></span>\n",
       "              <input class=\"in25kxQoTrpu5Cpf8-slider\"\n",
       "                     id=\"in25kxQoTrpu5Cpf8-node-label-size-factor-slider\"\n",
       "                     type=\"range\" min=\"0.01\" max=\"5.0\" step=\"0.01\">\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Rotation -->\n",
       "          <div id=\"in25kxQoTrpu5Cpf8-node-label-rotation\">\n",
       "            <div class=\"in25kxQoTrpu5Cpf8-menu-subitem-head\">\n",
       "              Rotation\n",
       "            </div>\n",
       "            <div class=\"in25kxQoTrpu5Cpf8-menu-subitem-body\">\n",
       "              <span class=\"in25kxQoTrpu5Cpf8-slider-text-left\">Angle</span>\n",
       "              <span class=\"in25kxQoTrpu5Cpf8-slider-text-right\"\n",
       "                    id=\"in25kxQoTrpu5Cpf8-node-label-rotation-text\"></span>\n",
       "              <input class=\"in25kxQoTrpu5Cpf8-slider\"\n",
       "                     id=\"in25kxQoTrpu5Cpf8-node-label-rotation-slider\"\n",
       "                     type=\"range\" min=\"0.0\" max=\"359.0\" step=\"1.0\">\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "        <!-- Menu: Edges -->\n",
       "        <div class=\"in25kxQoTrpu5Cpf8-menu-item-head\"\n",
       "             id=\"in25kxQoTrpu5Cpf8-edge-head\">\n",
       "          Edges\n",
       "        </div>\n",
       "        <div class=\"in25kxQoTrpu5Cpf8-menu-item-body\"\n",
       "             id=\"in25kxQoTrpu5Cpf8-edge-body\">\n",
       "          <!-- Sub-menu: Visibility -->\n",
       "          <div>\n",
       "            <div class=\"in25kxQoTrpu5Cpf8-menu-subitem-head\">\n",
       "              Visibility\n",
       "            </div>\n",
       "            <div class=\"in25kxQoTrpu5Cpf8-menu-subitem-body\">\n",
       "              <div class=\"in25kxQoTrpu5Cpf8-labeled-input\">\n",
       "                <input class=\"in25kxQoTrpu5Cpf8-checkbox\"\n",
       "                       id=\"in25kxQoTrpu5Cpf8-edge-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"in25kxQoTrpu5Cpf8-label\"\n",
       "                       for=\"in25kxQoTrpu5Cpf8-edge-checkbox\">Show edges</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Size -->\n",
       "          <div>\n",
       "            <div class=\"in25kxQoTrpu5Cpf8-menu-subitem-head\">\n",
       "              Size\n",
       "            </div>\n",
       "            <div class=\"in25kxQoTrpu5Cpf8-menu-subitem-body\">\n",
       "              <span class=\"in25kxQoTrpu5Cpf8-slider-text-left\">Scaling factor</span>\n",
       "              <span class=\"in25kxQoTrpu5Cpf8-slider-text-right\"\n",
       "                    id=\"in25kxQoTrpu5Cpf8-edge-size-factor-text\"></span>\n",
       "              <input class=\"in25kxQoTrpu5Cpf8-slider\"\n",
       "                     id=\"in25kxQoTrpu5Cpf8-edge-size-factor-slider\"\n",
       "                     type=\"range\" min=\"0.01\" max=\"5.0\" step=\"0.01\">\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Form -->\n",
       "          <div>\n",
       "            <div class=\"in25kxQoTrpu5Cpf8-menu-subitem-head\">\n",
       "              Form\n",
       "            </div>\n",
       "            <div class=\"in25kxQoTrpu5Cpf8-menu-subitem-body\">\n",
       "              <span class=\"in25kxQoTrpu5Cpf8-slider-text-left\">Curvature</span>\n",
       "              <span class=\"in25kxQoTrpu5Cpf8-slider-text-right\"\n",
       "                    id=\"in25kxQoTrpu5Cpf8-edge-curvature-text\"></span>\n",
       "              <input class=\"in25kxQoTrpu5Cpf8-slider\"\n",
       "                     id=\"in25kxQoTrpu5Cpf8-edge-curvature-slider\"\n",
       "                     type=\"range\" min=\"-1.2\" max=\"1.2\" step=\"0.02\">\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Hover behavior -->\n",
       "          <div>\n",
       "            <div class=\"in25kxQoTrpu5Cpf8-menu-subitem-head\">\n",
       "              Hover behavior\n",
       "            </div>\n",
       "            <div class=\"in25kxQoTrpu5Cpf8-menu-subitem-body\">\n",
       "              <div class=\"in25kxQoTrpu5Cpf8-labeled-input\">\n",
       "                <input class=\"in25kxQoTrpu5Cpf8-checkbox\"\n",
       "                       id=\"in25kxQoTrpu5Cpf8-edge-hover-tooltip-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"in25kxQoTrpu5Cpf8-label\"\n",
       "                       for=\"in25kxQoTrpu5Cpf8-edge-hover-tooltip-checkbox\">Show tooltips (if provided)</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "        <!-- Menu: Edge labels -->\n",
       "        <div class=\"in25kxQoTrpu5Cpf8-menu-item-head\"\n",
       "             id=\"in25kxQoTrpu5Cpf8-edge-label-head\">\n",
       "          Edge labels\n",
       "        </div>\n",
       "        <div class=\"in25kxQoTrpu5Cpf8-menu-item-body\"\n",
       "             id=\"in25kxQoTrpu5Cpf8-edge-label-body\">\n",
       "          <!-- Sub-menu: Visibility -->\n",
       "          <div>\n",
       "            <div class=\"in25kxQoTrpu5Cpf8-menu-subitem-head\">\n",
       "              Visibility\n",
       "            </div>\n",
       "            <div class=\"in25kxQoTrpu5Cpf8-menu-subitem-body\">\n",
       "              <div class=\"in25kxQoTrpu5Cpf8-labeled-input\">\n",
       "                <input class=\"in25kxQoTrpu5Cpf8-checkbox\"\n",
       "                       id=\"in25kxQoTrpu5Cpf8-edge-label-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"in25kxQoTrpu5Cpf8-label\"\n",
       "                       for=\"in25kxQoTrpu5Cpf8-edge-label-checkbox\">Show edge labels</label>\n",
       "              </div>\n",
       "              <div class=\"in25kxQoTrpu5Cpf8-labeled-input\">\n",
       "                <input class=\"in25kxQoTrpu5Cpf8-checkbox\"\n",
       "                       id=\"in25kxQoTrpu5Cpf8-edge-label-border-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"in25kxQoTrpu5Cpf8-label\"\n",
       "                       for=\"in25kxQoTrpu5Cpf8-edge-label-border-checkbox\">Show borders</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Size -->\n",
       "          <div>\n",
       "            <div class=\"in25kxQoTrpu5Cpf8-menu-subitem-head\">\n",
       "              Size\n",
       "            </div>\n",
       "            <div class=\"in25kxQoTrpu5Cpf8-menu-subitem-body\">\n",
       "              <span class=\"in25kxQoTrpu5Cpf8-slider-text-left\">Scaling factor</span>\n",
       "              <span class=\"in25kxQoTrpu5Cpf8-slider-text-right\"\n",
       "                    id=\"in25kxQoTrpu5Cpf8-edge-label-size-factor-text\"></span>\n",
       "              <input class=\"in25kxQoTrpu5Cpf8-slider\"\n",
       "                     id=\"in25kxQoTrpu5Cpf8-edge-label-size-factor-slider\"\n",
       "                     type=\"range\" min=\"0.01\" max=\"5.0\" step=\"0.01\">\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Rotation -->\n",
       "          <div id=\"in25kxQoTrpu5Cpf8-edge-label-rotation\">\n",
       "            <div class=\"in25kxQoTrpu5Cpf8-menu-subitem-head\">\n",
       "              Rotation\n",
       "            </div>\n",
       "            <div class=\"in25kxQoTrpu5Cpf8-menu-subitem-body\">\n",
       "              <span class=\"in25kxQoTrpu5Cpf8-slider-text-left\">Angle</span>\n",
       "              <span class=\"in25kxQoTrpu5Cpf8-slider-text-right\"\n",
       "                      id=\"in25kxQoTrpu5Cpf8-edge-label-rotation-text\"></span>\n",
       "              <input class=\"in25kxQoTrpu5Cpf8-slider\"\n",
       "                     id=\"in25kxQoTrpu5Cpf8-edge-label-rotation-slider\"\n",
       "                     type=\"range\" min=\"0.0\" max=\"359.0\" step=\"1.0\">\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "        <!-- Menu: Layout algorithm -->\n",
       "        <div class=\"in25kxQoTrpu5Cpf8-menu-item-head\"\n",
       "             id=\"in25kxQoTrpu5Cpf8-layout-algorithm-head\">\n",
       "          Layout algorithm\n",
       "        </div>\n",
       "        <div class=\"in25kxQoTrpu5Cpf8-menu-item-body\"\n",
       "             id=\"in25kxQoTrpu5Cpf8-layout-algorithm-body\">\n",
       "          <!-- Sub-menu: Simulation -->\n",
       "          <div>\n",
       "            <div class=\"in25kxQoTrpu5Cpf8-menu-subitem-head\">\n",
       "              Simulation\n",
       "            </div>\n",
       "            <div class=\"in25kxQoTrpu5Cpf8-menu-subitem-body\">\n",
       "              <div class=\"in25kxQoTrpu5Cpf8-labeled-input\">\n",
       "                <input class=\"in25kxQoTrpu5Cpf8-checkbox\"\n",
       "                       id=\"in25kxQoTrpu5Cpf8-simulation-active-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"in25kxQoTrpu5Cpf8-label\"\n",
       "                       for=\"in25kxQoTrpu5Cpf8-simulation-active-checkbox\">Active</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Algorithm -->\n",
       "          <div>\n",
       "            <div class=\"in25kxQoTrpu5Cpf8-menu-subitem-head\">\n",
       "              Algorithm\n",
       "            </div>\n",
       "            <div class=\"in25kxQoTrpu5Cpf8-menu-subitem-body\">\n",
       "              <div>\n",
       "                <select class=\"in25kxQoTrpu5Cpf8-select\"\n",
       "                        id=\"in25kxQoTrpu5Cpf8-layout-algorithm-select\"></select>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Parameters -->\n",
       "          <div>\n",
       "            <div class=\"in25kxQoTrpu5Cpf8-menu-subitem-head\">\n",
       "              Parameters\n",
       "            </div>\n",
       "            <div class=\"in25kxQoTrpu5Cpf8-menu-subitem-body\">\n",
       "              <div id=\"in25kxQoTrpu5Cpf8-gravitational-constant-div\">\n",
       "                <span class=\"in25kxQoTrpu5Cpf8-slider-text-left\">Gravitational constant</span>\n",
       "                <span class=\"in25kxQoTrpu5Cpf8-slider-text-right\"\n",
       "                      id=\"in25kxQoTrpu5Cpf8-gravitational-constant-text\"></span>\n",
       "                <input class=\"in25kxQoTrpu5Cpf8-slider\"\n",
       "                       id=\"in25kxQoTrpu5Cpf8-gravitational-constant-slider\"\n",
       "                       type=\"range\" min=\"-50000\" max=\"0\" step=\"1\"\n",
       "                       style=\"direction:rtl;\">\n",
       "              </div>\n",
       "              <div id=\"in25kxQoTrpu5Cpf8-spring-length-div\">\n",
       "                <span class=\"in25kxQoTrpu5Cpf8-slider-text-left\">Spring length</span>\n",
       "                <span class=\"in25kxQoTrpu5Cpf8-slider-text-right\"\n",
       "                      id=\"in25kxQoTrpu5Cpf8-spring-length-text\"></span>\n",
       "                <input class=\"in25kxQoTrpu5Cpf8-slider\"\n",
       "                       id=\"in25kxQoTrpu5Cpf8-spring-length-slider\"\n",
       "                       type=\"range\" min=\"0.0\" max=\"500\" step=\"0.1\">\n",
       "              </div>\n",
       "              <div id=\"in25kxQoTrpu5Cpf8-spring-constant-div\">\n",
       "                <span class=\"in25kxQoTrpu5Cpf8-slider-text-left\">Spring constant</span>\n",
       "                <span class=\"in25kxQoTrpu5Cpf8-slider-text-right\"\n",
       "                      id=\"in25kxQoTrpu5Cpf8-spring-constant-text\"></span>\n",
       "                <input class=\"in25kxQoTrpu5Cpf8-slider\"\n",
       "                       id=\"in25kxQoTrpu5Cpf8-spring-constant-slider\"\n",
       "                       type=\"range\" min=\"0.0\" max=\"1.0\" step=\"0.01\">\n",
       "              </div>\n",
       "              <div id=\"in25kxQoTrpu5Cpf8-avoid-overlap-div\">\n",
       "                <span class=\"in25kxQoTrpu5Cpf8-slider-text-left\">Avoid overlap</span>\n",
       "                <span class=\"in25kxQoTrpu5Cpf8-slider-text-right\"\n",
       "                      id=\"in25kxQoTrpu5Cpf8-avoid-overlap-text\"></span>\n",
       "                <input class=\"in25kxQoTrpu5Cpf8-slider\"\n",
       "                       id=\"in25kxQoTrpu5Cpf8-avoid-overlap-slider\"\n",
       "                       type=\"range\" min=\"0.0\" max=\"1.0\" step=\"0.01\">\n",
       "              </div>\n",
       "              <div id=\"in25kxQoTrpu5Cpf8-central-gravity-div\">\n",
       "                <span class=\"in25kxQoTrpu5Cpf8-slider-text-left\">Central gravity</span>\n",
       "                <span class=\"in25kxQoTrpu5Cpf8-slider-text-right\"\n",
       "                      id=\"in25kxQoTrpu5Cpf8-central-gravity-text\"></span>\n",
       "                <input class=\"in25kxQoTrpu5Cpf8-slider\"\n",
       "                       id=\"in25kxQoTrpu5Cpf8-central-gravity-slider\"\n",
       "                       type=\"range\" min=\"0.0\" max=\"10.0\" step=\"0.001\">\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "      </div>\n",
       "    </div>\n",
       "  </div>\n",
       "\n",
       "  <script charset=\"utf-8\" type=\"text/javascript\">\n",
       "    if(typeof(require) === \"undefined\"){\n",
       "      // Project sites:    https://requirejs.org\n",
       "//                   https://github.com/requirejs/requirejs\n",
       "// Code source:      https://requirejs.org/docs/release/2.3.6/minified/require.js - accessed on 19.11.2020\n",
       "// Original license: MIT\n",
       "// Code changes:     None\n",
       "\n",
       "/** vim: et:ts=4:sw=4:sts=4\n",
       " * @license RequireJS 2.3.6 Copyright jQuery Foundation and other contributors.\n",
       " * Released under MIT license, https://github.com/requirejs/requirejs/blob/master/LICENSE\n",
       " */\n",
       "var requirejs,require,define;!function(global,setTimeout){var req,s,head,baseElement,dataMain,src,interactiveScript,currentlyAddingScript,mainScript,subPath,version=\"2.3.6\",commentRegExp=/\\/\\*[\\s\\S]*?\\*\\/|([^:\"'=]|^)\\/\\/.*$/gm,cjsRequireRegExp=/[^.]\\s*require\\s*\\(\\s*[\"']([^'\"\\s]+)[\"']\\s*\\)/g,jsSuffixRegExp=/\\.js$/,currDirRegExp=/^\\.\\//,op=Object.prototype,ostring=op.toString,hasOwn=op.hasOwnProperty,isBrowser=!(\"undefined\"==typeof window||\"undefined\"==typeof navigator||!window.document),isWebWorker=!isBrowser&&\"undefined\"!=typeof importScripts,readyRegExp=isBrowser&&\"PLAYSTATION 3\"===navigator.platform?/^complete$/:/^(complete|loaded)$/,defContextName=\"_\",isOpera=\"undefined\"!=typeof opera&&\"[object Opera]\"===opera.toString(),contexts={},cfg={},globalDefQueue=[],useInteractive=!1;function commentReplace(e,t){return t||\"\"}function isFunction(e){return\"[object Function]\"===ostring.call(e)}function isArray(e){return\"[object Array]\"===ostring.call(e)}function each(e,t){var i;if(e)for(i=0;i<e.length&&(!e[i]||!t(e[i],i,e));i+=1);}function eachReverse(e,t){var i;if(e)for(i=e.length-1;-1<i&&(!e[i]||!t(e[i],i,e));i-=1);}function hasProp(e,t){return hasOwn.call(e,t)}function getOwn(e,t){return hasProp(e,t)&&e[t]}function eachProp(e,t){var i;for(i in e)if(hasProp(e,i)&&t(e[i],i))break}function mixin(i,e,r,n){return e&&eachProp(e,function(e,t){!r&&hasProp(i,t)||(!n||\"object\"!=typeof e||!e||isArray(e)||isFunction(e)||e instanceof RegExp?i[t]=e:(i[t]||(i[t]={}),mixin(i[t],e,r,n)))}),i}function bind(e,t){return function(){return t.apply(e,arguments)}}function scripts(){return document.getElementsByTagName(\"script\")}function defaultOnError(e){throw e}function getGlobal(e){if(!e)return e;var t=global;return each(e.split(\".\"),function(e){t=t[e]}),t}function makeError(e,t,i,r){var n=new Error(t+\"\\nhttps://requirejs.org/docs/errors.html#\"+e);return n.requireType=e,n.requireModules=r,i&&(n.originalError=i),n}if(void 0===define){if(void 0!==requirejs){if(isFunction(requirejs))return;cfg=requirejs,requirejs=void 0}void 0===require||isFunction(require)||(cfg=require,require=void 0),req=requirejs=function(e,t,i,r){var n,o,a=defContextName;return isArray(e)||\"string\"==typeof e||(o=e,isArray(t)?(e=t,t=i,i=r):e=[]),o&&o.context&&(a=o.context),(n=getOwn(contexts,a))||(n=contexts[a]=req.s.newContext(a)),o&&n.configure(o),n.require(e,t,i)},req.config=function(e){return req(e)},req.nextTick=void 0!==setTimeout?function(e){setTimeout(e,4)}:function(e){e()},require||(require=req),req.version=version,req.jsExtRegExp=/^\\/|:|\\?|\\.js$/,req.isBrowser=isBrowser,s=req.s={contexts:contexts,newContext:newContext},req({}),each([\"toUrl\",\"undef\",\"defined\",\"specified\"],function(t){req[t]=function(){var e=contexts[defContextName];return e.require[t].apply(e,arguments)}}),isBrowser&&(head=s.head=document.getElementsByTagName(\"head\")[0],baseElement=document.getElementsByTagName(\"base\")[0],baseElement&&(head=s.head=baseElement.parentNode)),req.onError=defaultOnError,req.createNode=function(e,t,i){var r=e.xhtml?document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"html:script\"):document.createElement(\"script\");return r.type=e.scriptType||\"text/javascript\",r.charset=\"utf-8\",r.async=!0,r},req.load=function(t,i,r){var e,n=t&&t.config||{};if(isBrowser)return(e=req.createNode(n,i,r)).setAttribute(\"data-requirecontext\",t.contextName),e.setAttribute(\"data-requiremodule\",i),!e.attachEvent||e.attachEvent.toString&&e.attachEvent.toString().indexOf(\"[native code\")<0||isOpera?(e.addEventListener(\"load\",t.onScriptLoad,!1),e.addEventListener(\"error\",t.onScriptError,!1)):(useInteractive=!0,e.attachEvent(\"onreadystatechange\",t.onScriptLoad)),e.src=r,n.onNodeCreated&&n.onNodeCreated(e,n,i,r),currentlyAddingScript=e,baseElement?head.insertBefore(e,baseElement):head.appendChild(e),currentlyAddingScript=null,e;if(isWebWorker)try{setTimeout(function(){},0),importScripts(r),t.completeLoad(i)}catch(e){t.onError(makeError(\"importscripts\",\"importScripts failed for \"+i+\" at \"+r,e,[i]))}},isBrowser&&!cfg.skipDataMain&&eachReverse(scripts(),function(e){if(head||(head=e.parentNode),dataMain=e.getAttribute(\"data-main\"))return mainScript=dataMain,cfg.baseUrl||-1!==mainScript.indexOf(\"!\")||(mainScript=(src=mainScript.split(\"/\")).pop(),subPath=src.length?src.join(\"/\")+\"/\":\"./\",cfg.baseUrl=subPath),mainScript=mainScript.replace(jsSuffixRegExp,\"\"),req.jsExtRegExp.test(mainScript)&&(mainScript=dataMain),cfg.deps=cfg.deps?cfg.deps.concat(mainScript):[mainScript],!0}),define=function(e,i,t){var r,n;\"string\"!=typeof e&&(t=i,i=e,e=null),isArray(i)||(t=i,i=null),!i&&isFunction(t)&&(i=[],t.length&&(t.toString().replace(commentRegExp,commentReplace).replace(cjsRequireRegExp,function(e,t){i.push(t)}),i=(1===t.length?[\"require\"]:[\"require\",\"exports\",\"module\"]).concat(i))),useInteractive&&(r=currentlyAddingScript||getInteractiveScript())&&(e||(e=r.getAttribute(\"data-requiremodule\")),n=contexts[r.getAttribute(\"data-requirecontext\")]),n?(n.defQueue.push([e,i,t]),n.defQueueMap[e]=!0):globalDefQueue.push([e,i,t])},define.amd={jQuery:!0},req.exec=function(text){return eval(text)},req(cfg)}function newContext(u){var i,e,l,c,d,g={waitSeconds:7,baseUrl:\"./\",paths:{},bundles:{},pkgs:{},shim:{},config:{}},p={},f={},r={},h=[],m={},n={},v={},x=1,b=1;function q(e,t,i){var r,n,o,a,s,u,c,d,p,f,l=t&&t.split(\"/\"),h=g.map,m=h&&h[\"*\"];if(e&&(u=(e=e.split(\"/\")).length-1,g.nodeIdCompat&&jsSuffixRegExp.test(e[u])&&(e[u]=e[u].replace(jsSuffixRegExp,\"\")),\".\"===e[0].charAt(0)&&l&&(e=l.slice(0,l.length-1).concat(e)),function(e){var t,i;for(t=0;t<e.length;t++)if(\".\"===(i=e[t]))e.splice(t,1),t-=1;else if(\"..\"===i){if(0===t||1===t&&\"..\"===e[2]||\"..\"===e[t-1])continue;0<t&&(e.splice(t-1,2),t-=2)}}(e),e=e.join(\"/\")),i&&h&&(l||m)){e:for(o=(n=e.split(\"/\")).length;0<o;o-=1){if(s=n.slice(0,o).join(\"/\"),l)for(a=l.length;0<a;a-=1)if((r=getOwn(h,l.slice(0,a).join(\"/\")))&&(r=getOwn(r,s))){c=r,d=o;break e}!p&&m&&getOwn(m,s)&&(p=getOwn(m,s),f=o)}!c&&p&&(c=p,d=f),c&&(n.splice(0,d,c),e=n.join(\"/\"))}return getOwn(g.pkgs,e)||e}function E(t){isBrowser&&each(scripts(),function(e){if(e.getAttribute(\"data-requiremodule\")===t&&e.getAttribute(\"data-requirecontext\")===l.contextName)return e.parentNode.removeChild(e),!0})}function w(e){var t=getOwn(g.paths,e);if(t&&isArray(t)&&1<t.length)return t.shift(),l.require.undef(e),l.makeRequire(null,{skipMap:!0})([e]),!0}function y(e){var t,i=e?e.indexOf(\"!\"):-1;return-1<i&&(t=e.substring(0,i),e=e.substring(i+1,e.length)),[t,e]}function S(e,t,i,r){var n,o,a,s,u=null,c=t?t.name:null,d=e,p=!0,f=\"\";return e||(p=!1,e=\"_@r\"+(x+=1)),u=(s=y(e))[0],e=s[1],u&&(u=q(u,c,r),o=getOwn(m,u)),e&&(u?f=i?e:o&&o.normalize?o.normalize(e,function(e){return q(e,c,r)}):-1===e.indexOf(\"!\")?q(e,c,r):e:(u=(s=y(f=q(e,c,r)))[0],f=s[1],i=!0,n=l.nameToUrl(f))),{prefix:u,name:f,parentMap:t,unnormalized:!!(a=!u||o||i?\"\":\"_unnormalized\"+(b+=1)),url:n,originalName:d,isDefine:p,id:(u?u+\"!\"+f:f)+a}}function k(e){var t=e.id,i=getOwn(p,t);return i||(i=p[t]=new l.Module(e)),i}function M(e,t,i){var r=e.id,n=getOwn(p,r);!hasProp(m,r)||n&&!n.defineEmitComplete?(n=k(e)).error&&\"error\"===t?i(n.error):n.on(t,i):\"defined\"===t&&i(m[r])}function O(i,e){var t=i.requireModules,r=!1;e?e(i):(each(t,function(e){var t=getOwn(p,e);t&&(t.error=i,t.events.error&&(r=!0,t.emit(\"error\",i)))}),r||req.onError(i))}function j(){globalDefQueue.length&&(each(globalDefQueue,function(e){var t=e[0];\"string\"==typeof t&&(l.defQueueMap[t]=!0),h.push(e)}),globalDefQueue=[])}function P(e){delete p[e],delete f[e]}function R(){var e,r,t=1e3*g.waitSeconds,n=t&&l.startTime+t<(new Date).getTime(),o=[],a=[],s=!1,u=!0;if(!i){if(i=!0,eachProp(f,function(e){var t=e.map,i=t.id;if(e.enabled&&(t.isDefine||a.push(e),!e.error))if(!e.inited&&n)w(i)?s=r=!0:(o.push(i),E(i));else if(!e.inited&&e.fetched&&t.isDefine&&(s=!0,!t.prefix))return u=!1}),n&&o.length)return(e=makeError(\"timeout\",\"Load timeout for modules: \"+o,null,o)).contextName=l.contextName,O(e);u&&each(a,function(e){!function n(o,a,s){var e=o.map.id;o.error?o.emit(\"error\",o.error):(a[e]=!0,each(o.depMaps,function(e,t){var i=e.id,r=getOwn(p,i);!r||o.depMatched[t]||s[i]||(getOwn(a,i)?(o.defineDep(t,m[i]),o.check()):n(r,a,s))}),s[e]=!0)}(e,{},{})}),n&&!r||!s||!isBrowser&&!isWebWorker||d||(d=setTimeout(function(){d=0,R()},50)),i=!1}}function a(e){hasProp(m,e[0])||k(S(e[0],null,!0)).init(e[1],e[2])}function o(e,t,i,r){e.detachEvent&&!isOpera?r&&e.detachEvent(r,t):e.removeEventListener(i,t,!1)}function s(e){var t=e.currentTarget||e.srcElement;return o(t,l.onScriptLoad,\"load\",\"onreadystatechange\"),o(t,l.onScriptError,\"error\"),{node:t,id:t&&t.getAttribute(\"data-requiremodule\")}}function T(){var e;for(j();h.length;){if(null===(e=h.shift())[0])return O(makeError(\"mismatch\",\"Mismatched anonymous define() module: \"+e[e.length-1]));a(e)}l.defQueueMap={}}return c={require:function(e){return e.require?e.require:e.require=l.makeRequire(e.map)},exports:function(e){if(e.usingExports=!0,e.map.isDefine)return e.exports?m[e.map.id]=e.exports:e.exports=m[e.map.id]={}},module:function(e){return e.module?e.module:e.module={id:e.map.id,uri:e.map.url,config:function(){return getOwn(g.config,e.map.id)||{}},exports:e.exports||(e.exports={})}}},(e=function(e){this.events=getOwn(r,e.id)||{},this.map=e,this.shim=getOwn(g.shim,e.id),this.depExports=[],this.depMaps=[],this.depMatched=[],this.pluginMaps={},this.depCount=0}).prototype={init:function(e,t,i,r){r=r||{},this.inited||(this.factory=t,i?this.on(\"error\",i):this.events.error&&(i=bind(this,function(e){this.emit(\"error\",e)})),this.depMaps=e&&e.slice(0),this.errback=i,this.inited=!0,this.ignore=r.ignore,r.enabled||this.enabled?this.enable():this.check())},defineDep:function(e,t){this.depMatched[e]||(this.depMatched[e]=!0,this.depCount-=1,this.depExports[e]=t)},fetch:function(){if(!this.fetched){this.fetched=!0,l.startTime=(new Date).getTime();var e=this.map;if(!this.shim)return e.prefix?this.callPlugin():this.load();l.makeRequire(this.map,{enableBuildCallback:!0})(this.shim.deps||[],bind(this,function(){return e.prefix?this.callPlugin():this.load()}))}},load:function(){var e=this.map.url;n[e]||(n[e]=!0,l.load(this.map.id,e))},check:function(){if(this.enabled&&!this.enabling){var t,e,i=this.map.id,r=this.depExports,n=this.exports,o=this.factory;if(this.inited){if(this.error)this.emit(\"error\",this.error);else if(!this.defining){if(this.defining=!0,this.depCount<1&&!this.defined){if(isFunction(o)){if(this.events.error&&this.map.isDefine||req.onError!==defaultOnError)try{n=l.execCb(i,o,r,n)}catch(e){t=e}else n=l.execCb(i,o,r,n);if(this.map.isDefine&&void 0===n&&((e=this.module)?n=e.exports:this.usingExports&&(n=this.exports)),t)return t.requireMap=this.map,t.requireModules=this.map.isDefine?[this.map.id]:null,t.requireType=this.map.isDefine?\"define\":\"require\",O(this.error=t)}else n=o;if(this.exports=n,this.map.isDefine&&!this.ignore&&(m[i]=n,req.onResourceLoad)){var a=[];each(this.depMaps,function(e){a.push(e.normalizedMap||e)}),req.onResourceLoad(l,this.map,a)}P(i),this.defined=!0}this.defining=!1,this.defined&&!this.defineEmitted&&(this.defineEmitted=!0,this.emit(\"defined\",this.exports),this.defineEmitComplete=!0)}}else hasProp(l.defQueueMap,i)||this.fetch()}},callPlugin:function(){var u=this.map,c=u.id,e=S(u.prefix);this.depMaps.push(e),M(e,\"defined\",bind(this,function(e){var o,t,i,r=getOwn(v,this.map.id),n=this.map.name,a=this.map.parentMap?this.map.parentMap.name:null,s=l.makeRequire(u.parentMap,{enableBuildCallback:!0});return this.map.unnormalized?(e.normalize&&(n=e.normalize(n,function(e){return q(e,a,!0)})||\"\"),M(t=S(u.prefix+\"!\"+n,this.map.parentMap,!0),\"defined\",bind(this,function(e){this.map.normalizedMap=t,this.init([],function(){return e},null,{enabled:!0,ignore:!0})})),void((i=getOwn(p,t.id))&&(this.depMaps.push(t),this.events.error&&i.on(\"error\",bind(this,function(e){this.emit(\"error\",e)})),i.enable()))):r?(this.map.url=l.nameToUrl(r),void this.load()):((o=bind(this,function(e){this.init([],function(){return e},null,{enabled:!0})})).error=bind(this,function(e){this.inited=!0,(this.error=e).requireModules=[c],eachProp(p,function(e){0===e.map.id.indexOf(c+\"_unnormalized\")&&P(e.map.id)}),O(e)}),o.fromText=bind(this,function(e,t){var i=u.name,r=S(i),n=useInteractive;t&&(e=t),n&&(useInteractive=!1),k(r),hasProp(g.config,c)&&(g.config[i]=g.config[c]);try{req.exec(e)}catch(e){return O(makeError(\"fromtexteval\",\"fromText eval for \"+c+\" failed: \"+e,e,[c]))}n&&(useInteractive=!0),this.depMaps.push(r),l.completeLoad(i),s([i],o)}),void e.load(u.name,s,o,g))})),l.enable(e,this),this.pluginMaps[e.id]=e},enable:function(){(f[this.map.id]=this).enabled=!0,this.enabling=!0,each(this.depMaps,bind(this,function(e,t){var i,r,n;if(\"string\"==typeof e){if(e=S(e,this.map.isDefine?this.map:this.map.parentMap,!1,!this.skipMap),this.depMaps[t]=e,n=getOwn(c,e.id))return void(this.depExports[t]=n(this));this.depCount+=1,M(e,\"defined\",bind(this,function(e){this.undefed||(this.defineDep(t,e),this.check())})),this.errback?M(e,\"error\",bind(this,this.errback)):this.events.error&&M(e,\"error\",bind(this,function(e){this.emit(\"error\",e)}))}i=e.id,r=p[i],hasProp(c,i)||!r||r.enabled||l.enable(e,this)})),eachProp(this.pluginMaps,bind(this,function(e){var t=getOwn(p,e.id);t&&!t.enabled&&l.enable(e,this)})),this.enabling=!1,this.check()},on:function(e,t){var i=this.events[e];i||(i=this.events[e]=[]),i.push(t)},emit:function(e,t){each(this.events[e],function(e){e(t)}),\"error\"===e&&delete this.events[e]}},(l={config:g,contextName:u,registry:p,defined:m,urlFetched:n,defQueue:h,defQueueMap:{},Module:e,makeModuleMap:S,nextTick:req.nextTick,onError:O,configure:function(e){if(e.baseUrl&&\"/\"!==e.baseUrl.charAt(e.baseUrl.length-1)&&(e.baseUrl+=\"/\"),\"string\"==typeof e.urlArgs){var i=e.urlArgs;e.urlArgs=function(e,t){return(-1===t.indexOf(\"?\")?\"?\":\"&\")+i}}var r=g.shim,n={paths:!0,bundles:!0,config:!0,map:!0};eachProp(e,function(e,t){n[t]?(g[t]||(g[t]={}),mixin(g[t],e,!0,!0)):g[t]=e}),e.bundles&&eachProp(e.bundles,function(e,t){each(e,function(e){e!==t&&(v[e]=t)})}),e.shim&&(eachProp(e.shim,function(e,t){isArray(e)&&(e={deps:e}),!e.exports&&!e.init||e.exportsFn||(e.exportsFn=l.makeShimExports(e)),r[t]=e}),g.shim=r),e.packages&&each(e.packages,function(e){var t;t=(e=\"string\"==typeof e?{name:e}:e).name,e.location&&(g.paths[t]=e.location),g.pkgs[t]=e.name+\"/\"+(e.main||\"main\").replace(currDirRegExp,\"\").replace(jsSuffixRegExp,\"\")}),eachProp(p,function(e,t){e.inited||e.map.unnormalized||(e.map=S(t,null,!0))}),(e.deps||e.callback)&&l.require(e.deps||[],e.callback)},makeShimExports:function(t){return function(){var e;return t.init&&(e=t.init.apply(global,arguments)),e||t.exports&&getGlobal(t.exports)}},makeRequire:function(o,a){function s(e,t,i){var r,n;return a.enableBuildCallback&&t&&isFunction(t)&&(t.__requireJsBuild=!0),\"string\"==typeof e?isFunction(t)?O(makeError(\"requireargs\",\"Invalid require call\"),i):o&&hasProp(c,e)?c[e](p[o.id]):req.get?req.get(l,e,o,s):(r=S(e,o,!1,!0).id,hasProp(m,r)?m[r]:O(makeError(\"notloaded\",'Module name \"'+r+'\" has not been loaded yet for context: '+u+(o?\"\":\". Use require([])\")))):(T(),l.nextTick(function(){T(),(n=k(S(null,o))).skipMap=a.skipMap,n.init(e,t,i,{enabled:!0}),R()}),s)}return a=a||{},mixin(s,{isBrowser:isBrowser,toUrl:function(e){var t,i=e.lastIndexOf(\".\"),r=e.split(\"/\")[0];return-1!==i&&(!(\".\"===r||\"..\"===r)||1<i)&&(t=e.substring(i,e.length),e=e.substring(0,i)),l.nameToUrl(q(e,o&&o.id,!0),t,!0)},defined:function(e){return hasProp(m,S(e,o,!1,!0).id)},specified:function(e){return e=S(e,o,!1,!0).id,hasProp(m,e)||hasProp(p,e)}}),o||(s.undef=function(i){j();var e=S(i,o,!0),t=getOwn(p,i);t.undefed=!0,E(i),delete m[i],delete n[e.url],delete r[i],eachReverse(h,function(e,t){e[0]===i&&h.splice(t,1)}),delete l.defQueueMap[i],t&&(t.events.defined&&(r[i]=t.events),P(i))}),s},enable:function(e){getOwn(p,e.id)&&k(e).enable()},completeLoad:function(e){var t,i,r,n=getOwn(g.shim,e)||{},o=n.exports;for(j();h.length;){if(null===(i=h.shift())[0]){if(i[0]=e,t)break;t=!0}else i[0]===e&&(t=!0);a(i)}if(l.defQueueMap={},r=getOwn(p,e),!t&&!hasProp(m,e)&&r&&!r.inited){if(!(!g.enforceDefine||o&&getGlobal(o)))return w(e)?void 0:O(makeError(\"nodefine\",\"No define call for \"+e,null,[e]));a([e,n.deps||[],n.exportsFn])}R()},nameToUrl:function(e,t,i){var r,n,o,a,s,u,c=getOwn(g.pkgs,e);if(c&&(e=c),u=getOwn(v,e))return l.nameToUrl(u,t,i);if(req.jsExtRegExp.test(e))a=e+(t||\"\");else{for(r=g.paths,o=(n=e.split(\"/\")).length;0<o;o-=1)if(s=getOwn(r,n.slice(0,o).join(\"/\"))){isArray(s)&&(s=s[0]),n.splice(0,o,s);break}a=n.join(\"/\"),a=(\"/\"===(a+=t||(/^data\\:|^blob\\:|\\?/.test(a)||i?\"\":\".js\")).charAt(0)||a.match(/^[\\w\\+\\.\\-]+:/)?\"\":g.baseUrl)+a}return g.urlArgs&&!/^blob\\:/.test(a)?a+g.urlArgs(e,a):a},load:function(e,t){req.load(l,e,t)},execCb:function(e,t,i,r){return t.apply(r,i)},onScriptLoad:function(e){if(\"load\"===e.type||readyRegExp.test((e.currentTarget||e.srcElement).readyState)){interactiveScript=null;var t=s(e);l.completeLoad(t.id)}},onScriptError:function(e){var i=s(e);if(!w(i.id)){var r=[];return eachProp(p,function(e,t){0!==t.indexOf(\"_@r\")&&each(e.depMaps,function(e){if(e.id===i.id)return r.push(t),!0})}),O(makeError(\"scripterror\",'Script error for \"'+i.id+(r.length?'\", needed by: '+r.join(\", \"):'\"'),e,[i.id]))}}}).require=l.makeRequire(),l}function getInteractiveScript(){return interactiveScript&&\"interactive\"===interactiveScript.readyState||eachReverse(scripts(),function(e){if(\"interactive\"===e.readyState)return interactiveScript=e}),interactiveScript}}(this,\"undefined\"==typeof setTimeout?void 0:setTimeout);\n",
       "\n",
       "    }\n",
       "    // Project sites:    https://visjs.org\n",
       "//                   https://visjs.github.io/vis-network/docs/network\n",
       "//                   https://github.com/visjs/vis-network\n",
       "// Code source:      https://unpkg.com/vis-network@9.1.0/dist/vis-network.min.js - accessed on 19.11.2021\n",
       "// Original license: Apache 2.0 (and MIT because of dual licensing)\n",
       "// Code changes:     Commented out outermost functions\n",
       "//                   Wrapped all into a require define function\n",
       "\n",
       "//                   Replaced two \"NEL\" (=unescaped newline, Unicode U+0085, which can be entered\n",
       "//                   with Ctrl+Shift+U followed be the 4 digits and Enter) symbols by \"\\n\" to\n",
       "//                   prevent browser error when using sphinx docs in combination with Jupyter\n",
       "//                   notebooks and nbsphinx. This might cause unexpected behavior in other cases.\n",
       "\n",
       "if(!require.defined(\"gravis-vis-network\")){\n",
       "  define(\"gravis-vis-network\", [\"exports\"],\n",
       "\n",
       "  /**\n",
       "   * vis-network\n",
       "   * https://visjs.github.io/vis-network/\n",
       "   *\n",
       "   * A dynamic, browser-based visualization library.\n",
       "   *\n",
       "   * @version 9.1.0\n",
       "   * @date    2021-08-29T08:47:25.454Z\n",
       "   *\n",
       "   * @copyright (c) 2011-2017 Almende B.V, http://almende.com\n",
       "   * @copyright (c) 2017-2019 visjs contributors, https://github.com/visjs\n",
       "   *\n",
       "   * @license\n",
       "   * vis.js is dual licensed under both\n",
       "   *\n",
       "   *   1. The Apache 2.0 License\n",
       "   *      http://www.apache.org/licenses/LICENSE-2.0\n",
       "   *\n",
       "   *   and\n",
       "   *\n",
       "   *   2. The MIT License\n",
       "   *      http://opensource.org/licenses/MIT\n",
       "   *\n",
       "   * vis.js may be distributed under either license.\n",
       "   */\n",
       "  // !function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?e(exports):\n",
       "  // \"function\"==typeof define&&define.amd?define([\"exports\"],e):e((t=\"undefined\"!=typeof globalThis?globalThis:t||self).vis=t.vis||{})}(this,(\n",
       "  function(t){\"use strict\";var e=\"undefined\"!=typeof globalThis?globalThis:\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:{};function i(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,\"default\")?t.default:t}function n(t,e){return t(e={exports:{}},e.exports),e.exports}var o,r,s=function(t){return t&&t.Math==Math&&t},a=s(\"object\"==typeof globalThis&&globalThis)||s(\"object\"==typeof window&&window)||s(\"object\"==typeof self&&self)||s(\"object\"==typeof e&&e)||function(){return this}()||Function(\"return this\")(),h=function(t){try{return!!t()}catch(t){return!0}},l=!h((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]})),d={}.propertyIsEnumerable,c=Object.getOwnPropertyDescriptor,u={f:c&&!d.call({1:2},1)?function(t){var e=c(this,t);return!!e&&e.enumerable}:d},f=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}},p={}.toString,v=function(t){return p.call(t).slice(8,-1)},g=\"\".split,y=h((function(){return!Object(\"z\").propertyIsEnumerable(0)}))?function(t){return\"String\"==v(t)?g.call(t,\"\"):Object(t)}:Object,m=function(t){if(null==t)throw TypeError(\"Can't call method on \"+t);return t},b=function(t){return y(m(t))},w=function(t){return\"object\"==typeof t?null!==t:\"function\"==typeof t},k={},_=function(t){return\"function\"==typeof t?t:void 0},x=function(t,e){return arguments.length<2?_(k[t])||_(a[t]):k[t]&&k[t][e]||a[t]&&a[t][e]},E=x(\"navigator\",\"userAgent\")||\"\",O=a.process,C=a.Deno,S=O&&O.versions||C&&C.version,T=S&&S.v8;T?r=(o=T.split(\".\"))[0]<4?1:o[0]+o[1]:E&&(!(o=E.match(/Edge\\/(\\d+)/))||o[1]>=74)&&(o=E.match(/Chrome\\/(\\d+)/))&&(r=o[1]);var M=r&&+r,P=!!Object.getOwnPropertySymbols&&!h((function(){var t=Symbol();return!String(t)||!(Object(t)instanceof Symbol)||!Symbol.sham&&M&&M<41})),D=P&&!Symbol.sham&&\"symbol\"==typeof Symbol.iterator,I=D?function(t){return\"symbol\"==typeof t}:function(t){var e=x(\"Symbol\");return\"function\"==typeof e&&Object(t)instanceof e},B=\"__core-js_shared__\",z=a[B]||function(t,e){try{Object.defineProperty(a,t,{value:e,configurable:!0,writable:!0})}catch(i){a[t]=e}return e}(B,{}),N=n((function(t){(t.exports=function(t,e){return z[t]||(z[t]=void 0!==e?e:{})})(\"versions\",[]).push({version:\"3.16.1\",mode:\"pure\",copyright:\"© 2021 Denis Pushkarev (zloirock.ru)\"})})),A=function(t){return Object(m(t))},F={}.hasOwnProperty,j=Object.hasOwn||function(t,e){return F.call(A(t),e)},R=0,L=Math.random(),H=function(t){return\"Symbol(\"+String(void 0===t?\"\":t)+\")_\"+(++R+L).toString(36)},W=N(\"wks\"),q=a.Symbol,V=D?q:q&&q.withoutSetter||H,U=function(t){return j(W,t)&&(P||\"string\"==typeof W[t])||(P&&j(q,t)?W[t]=q[t]:W[t]=V(\"Symbol.\"+t)),W[t]},Y=U(\"toPrimitive\"),X=function(t,e){if(!w(t)||I(t))return t;var i,n=t[Y];if(void 0!==n){if(void 0===e&&(e=\"default\"),i=n.call(t,e),!w(i)||I(i))return i;throw TypeError(\"Can't convert object to primitive value\")}return void 0===e&&(e=\"number\"),function(t,e){var i,n;if(\"string\"===e&&\"function\"==typeof(i=t.toString)&&!w(n=i.call(t)))return n;if(\"function\"==typeof(i=t.valueOf)&&!w(n=i.call(t)))return n;if(\"string\"!==e&&\"function\"==typeof(i=t.toString)&&!w(n=i.call(t)))return n;throw TypeError(\"Can't convert object to primitive value\")}(t,e)},G=function(t){var e=X(t,\"string\");return I(e)?e:String(e)},K=a.document,$=w(K)&&w(K.createElement),Z=function(t){return $?K.createElement(t):{}},Q=!l&&!h((function(){return 7!=Object.defineProperty(Z(\"div\"),\"a\",{get:function(){return 7}}).a})),J=Object.getOwnPropertyDescriptor,tt={f:l?J:function(t,e){if(t=b(t),e=G(e),Q)try{return J(t,e)}catch(t){}if(j(t,e))return f(!u.f.call(t,e),t[e])}},et=/#|\\.prototype\\./,it=function(t,e){var i=ot[nt(t)];return i==st||i!=rt&&(\"function\"==typeof e?h(e):!!e)},nt=it.normalize=function(t){return String(t).replace(et,\".\").toLowerCase()},ot=it.data={},rt=it.NATIVE=\"N\",st=it.POLYFILL=\"P\",at=it,ht=function(t){if(\"function\"!=typeof t)throw TypeError(String(t)+\" is not a function\");return t},lt=function(t,e,i){if(ht(t),void 0===e)return t;switch(i){case 0:return function(){return t.call(e)};case 1:return function(i){return t.call(e,i)};case 2:return function(i,n){return t.call(e,i,n)};case 3:return function(i,n,o){return t.call(e,i,n,o)}}return function(){return t.apply(e,arguments)}},dt=function(t){if(!w(t))throw TypeError(String(t)+\" is not an object\");return t},ct=Object.defineProperty,ut={f:l?ct:function(t,e,i){if(dt(t),e=G(e),dt(i),Q)try{return ct(t,e,i)}catch(t){}if(\"get\"in i||\"set\"in i)throw TypeError(\"Accessors not supported\");return\"value\"in i&&(t[e]=i.value),t}},ft=l?function(t,e,i){return ut.f(t,e,f(1,i))}:function(t,e,i){return t[e]=i,t},pt=tt.f,vt=function(t){var e=function(e,i,n){if(this instanceof t){switch(arguments.length){case 0:return new t;case 1:return new t(e);case 2:return new t(e,i)}return new t(e,i,n)}return t.apply(this,arguments)};return e.prototype=t.prototype,e},gt=function(t,e){var i,n,o,r,s,h,l,d,c=t.target,u=t.global,f=t.stat,p=t.proto,v=u?a:f?a[c]:(a[c]||{}).prototype,g=u?k:k[c]||(k[c]={}),y=g.prototype;for(o in e)i=!at(u?o:c+(f?\".\":\"#\")+o,t.forced)&&v&&j(v,o),s=g[o],i&&(h=t.noTargetGet?(d=pt(v,o))&&d.value:v[o]),r=i&&h?h:e[o],i&&typeof s==typeof r||(l=t.bind&&i?lt(r,a):t.wrap&&i?vt(r):p&&\"function\"==typeof r?lt(Function.call,r):r,(t.sham||r&&r.sham||s&&s.sham)&&ft(l,\"sham\",!0),g[o]=l,p&&(j(k,n=c+\"Prototype\")||ft(k,n,{}),k[n][o]=r,t.real&&y&&!y[o]&&ft(y,o,r)))},yt=Math.ceil,mt=Math.floor,bt=function(t){return isNaN(t=+t)?0:(t>0?mt:yt)(t)},wt=Math.min,kt=function(t){return t>0?wt(bt(t),9007199254740991):0},_t=Math.max,xt=Math.min,Et=function(t,e){var i=bt(t);return i<0?_t(i+e,0):xt(i,e)},Ot=function(t){return function(e,i,n){var o,r=b(e),s=kt(r.length),a=Et(n,s);if(t&&i!=i){for(;s>a;)if((o=r[a++])!=o)return!0}else for(;s>a;a++)if((t||a in r)&&r[a]===i)return t||a||0;return!t&&-1}},Ct={includes:Ot(!0),indexOf:Ot(!1)},St={},Tt=Ct.indexOf,Mt=function(t,e){var i,n=b(t),o=0,r=[];for(i in n)!j(St,i)&&j(n,i)&&r.push(i);for(;e.length>o;)j(n,i=e[o++])&&(~Tt(r,i)||r.push(i));return r},Pt=[\"constructor\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"toLocaleString\",\"toString\",\"valueOf\"],Dt=Object.keys||function(t){return Mt(t,Pt)},It={f:Object.getOwnPropertySymbols},Bt=Object.assign,zt=Object.defineProperty,Nt=!Bt||h((function(){if(l&&1!==Bt({b:1},Bt(zt({},\"a\",{enumerable:!0,get:function(){zt(this,\"b\",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var t={},e={},i=Symbol(),n=\"abcdefghijklmnopqrst\";return t[i]=7,n.split(\"\").forEach((function(t){e[t]=t})),7!=Bt({},t)[i]||Dt(Bt({},e)).join(\"\")!=n}))?function(t,e){for(var i=A(t),n=arguments.length,o=1,r=It.f,s=u.f;n>o;)for(var a,h=y(arguments[o++]),d=r?Dt(h).concat(r(h)):Dt(h),c=d.length,f=0;c>f;)a=d[f++],l&&!s.call(h,a)||(i[a]=h[a]);return i}:Bt;gt({target:\"Object\",stat:!0,forced:Object.assign!==Nt},{assign:Nt});var At=k.Object.assign,Ft=[].slice,jt={},Rt=function(t,e,i){if(!(e in jt)){for(var n=[],o=0;o<e;o++)n[o]=\"a[\"+o+\"]\";jt[e]=Function(\"C,a\",\"return new C(\"+n.join(\",\")+\")\")}return jt[e](t,i)},Lt=Function.bind||function(t){var e=ht(this),i=Ft.call(arguments,1),n=function(){var o=i.concat(Ft.call(arguments));return this instanceof n?Rt(e,o.length,o):e.apply(t,o)};return w(e.prototype)&&(n.prototype=e.prototype),n};gt({target:\"Function\",proto:!0},{bind:Lt});var Ht=function(t){return k[t+\"Prototype\"]},Wt=Ht(\"Function\").bind,qt=Function.prototype,Vt=function(t){var e=t.bind;return t===qt||t instanceof Function&&e===qt.bind?Wt:e};function Ut(t,e,i,n){t.beginPath(),t.arc(e,i,n,0,2*Math.PI,!1),t.closePath()}function Yt(t,e,i,n,o,r){var s=Math.PI/180;n-2*r<0&&(r=n/2),o-2*r<0&&(r=o/2),t.beginPath(),t.moveTo(e+r,i),t.lineTo(e+n-r,i),t.arc(e+n-r,i+r,r,270*s,360*s,!1),t.lineTo(e+n,i+o-r),t.arc(e+n-r,i+o-r,r,0,90*s,!1),t.lineTo(e+r,i+o),t.arc(e+r,i+o-r,r,90*s,180*s,!1),t.lineTo(e,i+r),t.arc(e+r,i+r,r,180*s,270*s,!1),t.closePath()}function Xt(t,e,i,n,o){var r=.5522848,s=n/2*r,a=o/2*r,h=e+n,l=i+o,d=e+n/2,c=i+o/2;t.beginPath(),t.moveTo(e,c),t.bezierCurveTo(e,c-a,d-s,i,d,i),t.bezierCurveTo(d+s,i,h,c-a,h,c),t.bezierCurveTo(h,c+a,d+s,l,d,l),t.bezierCurveTo(d-s,l,e,c+a,e,c),t.closePath()}function Gt(t,e,i,n,o){var r=o*(1/3),s=.5522848,a=n/2*s,h=r/2*s,l=e+n,d=i+r,c=e+n/2,u=i+r/2,f=i+(o-r/2),p=i+o;t.beginPath(),t.moveTo(l,u),t.bezierCurveTo(l,u+h,c+a,d,c,d),t.bezierCurveTo(c-a,d,e,u+h,e,u),t.bezierCurveTo(e,u-h,c-a,i,c,i),t.bezierCurveTo(c+a,i,l,u-h,l,u),t.lineTo(l,f),t.bezierCurveTo(l,f+h,c+a,p,c,p),t.bezierCurveTo(c-a,p,e,f+h,e,f),t.lineTo(e,u)}function Kt(t,e,i,n,o,r){t.beginPath(),t.moveTo(e,i);for(var s=r.length,a=n-e,h=o-i,l=h/a,d=Math.sqrt(a*a+h*h),c=0,u=!0,f=0,p=+r[0];d>=.1;)(p=+r[c++%s])>d&&(p=d),f=Math.sqrt(p*p/(1+l*l)),e+=f=a<0?-f:f,i+=l*f,!0===u?t.lineTo(e,i):t.moveTo(e,i),d-=p,u=!u}var $t={circle:Ut,dashedLine:Kt,database:Gt,diamond:function(t,e,i,n){t.beginPath(),t.lineTo(e,i+n),t.lineTo(e+n,i),t.lineTo(e,i-n),t.lineTo(e-n,i),t.closePath()},ellipse:Xt,ellipse_vis:Xt,hexagon:function(t,e,i,n){t.beginPath();var o=2*Math.PI/6;t.moveTo(e+n,i);for(var r=1;r<6;r++)t.lineTo(e+n*Math.cos(o*r),i+n*Math.sin(o*r));t.closePath()},roundRect:Yt,square:function(t,e,i,n){t.beginPath(),t.rect(e-n,i-n,2*n,2*n),t.closePath()},star:function(t,e,i,n){t.beginPath(),i+=.1*(n*=.82);for(var o=0;o<10;o++){var r=o%2==0?1.3*n:.5*n;t.lineTo(e+r*Math.sin(2*o*Math.PI/10),i-r*Math.cos(2*o*Math.PI/10))}t.closePath()},triangle:function(t,e,i,n){t.beginPath(),i+=.275*(n*=1.15);var o=2*n,r=o/2,s=Math.sqrt(3)/6*o,a=Math.sqrt(o*o-r*r);t.moveTo(e,i-(a-s)),t.lineTo(e+r,i+s),t.lineTo(e-r,i+s),t.lineTo(e,i-(a-s)),t.closePath()},triangleDown:function(t,e,i,n){t.beginPath(),i-=.275*(n*=1.15);var o=2*n,r=o/2,s=Math.sqrt(3)/6*o,a=Math.sqrt(o*o-r*r);t.moveTo(e,i+(a-s)),t.lineTo(e+r,i-s),t.lineTo(e-r,i-s),t.lineTo(e,i+(a-s)),t.closePath()}};var Zt=n((function(t){function e(t){if(t)return function(t){for(var i in e.prototype)t[i]=e.prototype[i];return t}(t)}t.exports=e,e.prototype.on=e.prototype.addEventListener=function(t,e){return this._callbacks=this._callbacks||{},(this._callbacks[\"$\"+t]=this._callbacks[\"$\"+t]||[]).push(e),this},e.prototype.once=function(t,e){function i(){this.off(t,i),e.apply(this,arguments)}return i.fn=e,this.on(t,i),this},e.prototype.off=e.prototype.removeListener=e.prototype.removeAllListeners=e.prototype.removeEventListener=function(t,e){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var i,n=this._callbacks[\"$\"+t];if(!n)return this;if(1==arguments.length)return delete this._callbacks[\"$\"+t],this;for(var o=0;o<n.length;o++)if((i=n[o])===e||i.fn===e){n.splice(o,1);break}return 0===n.length&&delete this._callbacks[\"$\"+t],this},e.prototype.emit=function(t){this._callbacks=this._callbacks||{};for(var e=new Array(arguments.length-1),i=this._callbacks[\"$\"+t],n=1;n<arguments.length;n++)e[n-1]=arguments[n];if(i){n=0;for(var o=(i=i.slice(0)).length;n<o;++n)i[n].apply(this,e)}return this},e.prototype.listeners=function(t){return this._callbacks=this._callbacks||{},this._callbacks[\"$\"+t]||[]},e.prototype.hasListeners=function(t){return!!this.listeners(t).length}})),Qt=function(t){if(I(t))throw TypeError(\"Cannot convert a Symbol value to a string\");return String(t)},Jt=function(t){return function(e,i){var n,o,r=Qt(m(e)),s=bt(i),a=r.length;return s<0||s>=a?t?\"\":void 0:(n=r.charCodeAt(s))<55296||n>56319||s+1===a||(o=r.charCodeAt(s+1))<56320||o>57343?t?r.charAt(s):n:t?r.slice(s,s+2):o-56320+(n-55296<<10)+65536}},te={codeAt:Jt(!1),charAt:Jt(!0)},ee=Function.toString;\"function\"!=typeof z.inspectSource&&(z.inspectSource=function(t){return ee.call(t)});var ie,ne,oe,re=z.inspectSource,se=a.WeakMap,ae=\"function\"==typeof se&&/native code/.test(re(se)),he=N(\"keys\"),le=function(t){return he[t]||(he[t]=H(t))},de=\"Object already initialized\",ce=a.WeakMap;if(ae||z.state){var ue=z.state||(z.state=new ce),fe=ue.get,pe=ue.has,ve=ue.set;ie=function(t,e){if(pe.call(ue,t))throw new TypeError(de);return e.facade=t,ve.call(ue,t,e),e},ne=function(t){return fe.call(ue,t)||{}},oe=function(t){return pe.call(ue,t)}}else{var ge=le(\"state\");St[ge]=!0,ie=function(t,e){if(j(t,ge))throw new TypeError(de);return e.facade=t,ft(t,ge,e),e},ne=function(t){return j(t,ge)?t[ge]:{}},oe=function(t){return j(t,ge)}}var ye,me,be,we={set:ie,get:ne,has:oe,enforce:function(t){return oe(t)?ne(t):ie(t,{})},getterFor:function(t){return function(e){var i;if(!w(e)||(i=ne(e)).type!==t)throw TypeError(\"Incompatible receiver, \"+t+\" required\");return i}}},ke=!h((function(){function t(){}return t.prototype.constructor=null,Object.getPrototypeOf(new t)!==t.prototype})),_e=le(\"IE_PROTO\"),xe=Object.prototype,Ee=ke?Object.getPrototypeOf:function(t){return t=A(t),j(t,_e)?t[_e]:\"function\"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?xe:null},Oe=U(\"iterator\"),Ce=!1;[].keys&&(\"next\"in(be=[].keys())?(me=Ee(Ee(be)))!==Object.prototype&&(ye=me):Ce=!0);var Se=null==ye||h((function(){var t={};return ye[Oe].call(t)!==t}));Se&&(ye={}),Se&&!j(ye,Oe)&&ft(ye,Oe,(function(){return this}));var Te,Me={IteratorPrototype:ye,BUGGY_SAFARI_ITERATORS:Ce},Pe=l?Object.defineProperties:function(t,e){dt(t);for(var i,n=Dt(e),o=n.length,r=0;o>r;)ut.f(t,i=n[r++],e[i]);return t},De=x(\"document\",\"documentElement\"),Ie=le(\"IE_PROTO\"),Be=function(){},ze=function(t){return\"<script>\"+t+\"</\"+\"script>\"},Ne=function(t){t.write(ze(\"\")),t.close();var e=t.parentWindow.Object;return t=null,e},Ae=function(){try{Te=new ActiveXObject(\"htmlfile\")}catch(t){}Ae=document.domain&&Te?Ne(Te):function(){var t,e=Z(\"iframe\");if(e.style)return e.style.display=\"none\",De.appendChild(e),e.src=String(\"javascript:\"),(t=e.contentWindow.document).open(),t.write(ze(\"document.F=Object\")),t.close(),t.F}()||Ne(Te);for(var t=Pt.length;t--;)delete Ae.prototype[Pt[t]];return Ae()};St[Ie]=!0;var Fe=Object.create||function(t,e){var i;return null!==t?(Be.prototype=dt(t),i=new Be,Be.prototype=null,i[Ie]=t):i=Ae(),void 0===e?i:Pe(i,e)},je={};je[U(\"toStringTag\")]=\"z\";var Re=\"[object z]\"===String(je),Le=U(\"toStringTag\"),He=\"Arguments\"==v(function(){return arguments}()),We=Re?v:function(t){var e,i,n;return void 0===t?\"Undefined\":null===t?\"Null\":\"string\"==typeof(i=function(t,e){try{return t[e]}catch(t){}}(e=Object(t),Le))?i:He?v(e):\"Object\"==(n=v(e))&&\"function\"==typeof e.callee?\"Arguments\":n},qe=Re?{}.toString:function(){return\"[object \"+We(this)+\"]\"},Ve=ut.f,Ue=U(\"toStringTag\"),Ye=function(t,e,i,n){if(t){var o=i?t:t.prototype;j(o,Ue)||Ve(o,Ue,{configurable:!0,value:e}),n&&!Re&&ft(o,\"toString\",qe)}},Xe={},Ge=Me.IteratorPrototype,Ke=function(){return this},$e=Object.setPrototypeOf||(\"__proto__\"in{}?function(){var t,e=!1,i={};try{(t=Object.getOwnPropertyDescriptor(Object.prototype,\"__proto__\").set).call(i,[]),e=i instanceof Array}catch(t){}return function(i,n){return dt(i),function(t){if(!w(t)&&null!==t)throw TypeError(\"Can't set \"+String(t)+\" as a prototype\")}(n),e?t.call(i,n):i.__proto__=n,i}}():void 0),Ze=function(t,e,i,n){n&&n.enumerable?t[e]=i:ft(t,e,i)},Qe=Me.IteratorPrototype,Je=Me.BUGGY_SAFARI_ITERATORS,ti=U(\"iterator\"),ei=\"keys\",ii=\"values\",ni=\"entries\",oi=function(){return this},ri=function(t,e,i,n,o,r,s){!function(t,e,i){var n=e+\" Iterator\";t.prototype=Fe(Ge,{next:f(1,i)}),Ye(t,n,!1,!0),Xe[n]=Ke}(i,e,n);var a,h,l,d=function(t){if(t===o&&g)return g;if(!Je&&t in p)return p[t];switch(t){case ei:case ii:case ni:return function(){return new i(this,t)}}return function(){return new i(this)}},c=e+\" Iterator\",u=!1,p=t.prototype,v=p[ti]||p[\"@@iterator\"]||o&&p[o],g=!Je&&v||d(o),y=\"Array\"==e&&p.entries||v;if(y&&(a=Ee(y.call(new t)),Qe!==Object.prototype&&a.next&&(Ye(a,c,!0,!0),Xe[c]=oi)),o==ii&&v&&v.name!==ii&&(u=!0,g=function(){return v.call(this)}),s&&p[ti]!==g&&ft(p,ti,g),Xe[e]=g,o)if(h={values:d(ii),keys:r?g:d(ei),entries:d(ni)},s)for(l in h)(Je||u||!(l in p))&&Ze(p,l,h[l]);else gt({target:e,proto:!0,forced:Je||u},h);return h},si=te.charAt,ai=\"String Iterator\",hi=we.set,li=we.getterFor(ai);ri(String,\"String\",(function(t){hi(this,{type:ai,string:Qt(t),index:0})}),(function(){var t,e=li(this),i=e.string,n=e.index;return n>=i.length?{value:void 0,done:!0}:(t=si(i,n),e.index+=t.length,{value:t,done:!1})}));var di=function(t){var e=t.return;if(void 0!==e)return dt(e.call(t)).value},ci=function(t,e,i,n){try{return n?e(dt(i)[0],i[1]):e(i)}catch(e){throw di(t),e}},ui=U(\"iterator\"),fi=Array.prototype,pi=function(t){return void 0!==t&&(Xe.Array===t||fi[ui]===t)},vi=function(t,e,i){var n=G(e);n in t?ut.f(t,n,f(0,i)):t[n]=i},gi=U(\"iterator\"),yi=function(t){if(null!=t)return t[gi]||t[\"@@iterator\"]||Xe[We(t)]},mi=U(\"iterator\"),bi=!1;try{var wi=0,ki={next:function(){return{done:!!wi++}},return:function(){bi=!0}};ki[mi]=function(){return this},Array.from(ki,(function(){throw 2}))}catch(t){}var _i=!function(t,e){if(!e&&!bi)return!1;var i=!1;try{var n={};n[mi]=function(){return{next:function(){return{done:i=!0}}}},t(n)}catch(t){}return i}((function(t){Array.from(t)}));gt({target:\"Array\",stat:!0,forced:_i},{from:function(t){var e,i,n,o,r,s,a=A(t),h=\"function\"==typeof this?this:Array,l=arguments.length,d=l>1?arguments[1]:void 0,c=void 0!==d,u=yi(a),f=0;if(c&&(d=lt(d,l>2?arguments[2]:void 0,2)),null==u||h==Array&&pi(u))for(i=new h(e=kt(a.length));e>f;f++)s=c?d(a[f],f):a[f],vi(i,f,s);else for(r=(o=u.call(a)).next,i=new h;!(n=r.call(o)).done;f++)s=c?ci(o,d,[n.value,f],!0):n.value,vi(i,f,s);return i.length=f,i}});var xi=k.Array.from,Ei=xi,Oi=\"Array Iterator\",Ci=we.set,Si=we.getterFor(Oi);ri(Array,\"Array\",(function(t,e){Ci(this,{type:Oi,target:b(t),index:0,kind:e})}),(function(){var t=Si(this),e=t.target,i=t.kind,n=t.index++;return!e||n>=e.length?(t.target=void 0,{value:void 0,done:!0}):\"keys\"==i?{value:n,done:!1}:\"values\"==i?{value:e[n],done:!1}:{value:[n,e[n]],done:!1}}),\"values\"),Xe.Arguments=Xe.Array;var Ti=yi,Mi=U(\"toStringTag\");for(var Pi in{CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}){var Di=a[Pi],Ii=Di&&Di.prototype;Ii&&We(Ii)!==Mi&&ft(Ii,Mi,Pi),Xe[Pi]=Xe.Array}var Bi=Ti,zi=Array.isArray||function(t){return\"Array\"==v(t)},Ni=Pt.concat(\"length\",\"prototype\"),Ai={f:Object.getOwnPropertyNames||function(t){return Mt(t,Ni)}},Fi=Ai.f,ji={}.toString,Ri=\"object\"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],Li={f:function(t){return Ri&&\"[object Window]\"==ji.call(t)?function(t){try{return Fi(t)}catch(t){return Ri.slice()}}(t):Fi(b(t))}},Hi={f:U},Wi=ut.f,qi=function(t){var e=k.Symbol||(k.Symbol={});j(e,t)||Wi(e,t,{value:Hi.f(t)})},Vi=U(\"species\"),Ui=function(t,e){return new(function(t){var e;return zi(t)&&(\"function\"!=typeof(e=t.constructor)||e!==Array&&!zi(e.prototype)?w(e)&&null===(e=e[Vi])&&(e=void 0):e=void 0),void 0===e?Array:e}(t))(0===e?0:e)},Yi=[].push,Xi=function(t){var e=1==t,i=2==t,n=3==t,o=4==t,r=6==t,s=7==t,a=5==t||r;return function(h,l,d,c){for(var u,f,p=A(h),v=y(p),g=lt(l,d,3),m=kt(v.length),b=0,w=c||Ui,k=e?w(h,m):i||s?w(h,0):void 0;m>b;b++)if((a||b in v)&&(f=g(u=v[b],b,p),t))if(e)k[b]=f;else if(f)switch(t){case 3:return!0;case 5:return u;case 6:return b;case 2:Yi.call(k,u)}else switch(t){case 4:return!1;case 7:Yi.call(k,u)}return r?-1:n||o?o:k}},Gi={forEach:Xi(0),map:Xi(1),filter:Xi(2),some:Xi(3),every:Xi(4),find:Xi(5),findIndex:Xi(6),filterReject:Xi(7)},Ki=Gi.forEach,$i=le(\"hidden\"),Zi=\"Symbol\",Qi=U(\"toPrimitive\"),Ji=we.set,tn=we.getterFor(Zi),en=Object.prototype,nn=a.Symbol,on=x(\"JSON\",\"stringify\"),rn=tt.f,sn=ut.f,an=Li.f,hn=u.f,ln=N(\"symbols\"),dn=N(\"op-symbols\"),cn=N(\"string-to-symbol-registry\"),un=N(\"symbol-to-string-registry\"),fn=N(\"wks\"),pn=a.QObject,vn=!pn||!pn.prototype||!pn.prototype.findChild,gn=l&&h((function(){return 7!=Fe(sn({},\"a\",{get:function(){return sn(this,\"a\",{value:7}).a}})).a}))?function(t,e,i){var n=rn(en,e);n&&delete en[e],sn(t,e,i),n&&t!==en&&sn(en,e,n)}:sn,yn=function(t,e){var i=ln[t]=Fe(nn.prototype);return Ji(i,{type:Zi,tag:t,description:e}),l||(i.description=e),i},mn=function(t,e,i){t===en&&mn(dn,e,i),dt(t);var n=G(e);return dt(i),j(ln,n)?(i.enumerable?(j(t,$i)&&t[$i][n]&&(t[$i][n]=!1),i=Fe(i,{enumerable:f(0,!1)})):(j(t,$i)||sn(t,$i,f(1,{})),t[$i][n]=!0),gn(t,n,i)):sn(t,n,i)},bn=function(t,e){dt(t);var i=b(e),n=Dt(i).concat(xn(i));return Ki(n,(function(e){l&&!wn.call(i,e)||mn(t,e,i[e])})),t},wn=function(t){var e=G(t),i=hn.call(this,e);return!(this===en&&j(ln,e)&&!j(dn,e))&&(!(i||!j(this,e)||!j(ln,e)||j(this,$i)&&this[$i][e])||i)},kn=function(t,e){var i=b(t),n=G(e);if(i!==en||!j(ln,n)||j(dn,n)){var o=rn(i,n);return!o||!j(ln,n)||j(i,$i)&&i[$i][n]||(o.enumerable=!0),o}},_n=function(t){var e=an(b(t)),i=[];return Ki(e,(function(t){j(ln,t)||j(St,t)||i.push(t)})),i},xn=function(t){var e=t===en,i=an(e?dn:b(t)),n=[];return Ki(i,(function(t){!j(ln,t)||e&&!j(en,t)||n.push(ln[t])})),n};if(P||(Ze((nn=function(){if(this instanceof nn)throw TypeError(\"Symbol is not a constructor\");var t=arguments.length&&void 0!==arguments[0]?Qt(arguments[0]):void 0,e=H(t),i=function(t){this===en&&i.call(dn,t),j(this,$i)&&j(this[$i],e)&&(this[$i][e]=!1),gn(this,e,f(1,t))};return l&&vn&&gn(en,e,{configurable:!0,set:i}),yn(e,t)}).prototype,\"toString\",(function(){return tn(this).tag})),Ze(nn,\"withoutSetter\",(function(t){return yn(H(t),t)})),u.f=wn,ut.f=mn,tt.f=kn,Ai.f=Li.f=_n,It.f=xn,Hi.f=function(t){return yn(U(t),t)},l&&sn(nn.prototype,\"description\",{configurable:!0,get:function(){return tn(this).description}})),gt({global:!0,wrap:!0,forced:!P,sham:!P},{Symbol:nn}),Ki(Dt(fn),(function(t){qi(t)})),gt({target:Zi,stat:!0,forced:!P},{for:function(t){var e=Qt(t);if(j(cn,e))return cn[e];var i=nn(e);return cn[e]=i,un[i]=e,i},keyFor:function(t){if(!I(t))throw TypeError(t+\" is not a symbol\");if(j(un,t))return un[t]},useSetter:function(){vn=!0},useSimple:function(){vn=!1}}),gt({target:\"Object\",stat:!0,forced:!P,sham:!l},{create:function(t,e){return void 0===e?Fe(t):bn(Fe(t),e)},defineProperty:mn,defineProperties:bn,getOwnPropertyDescriptor:kn}),gt({target:\"Object\",stat:!0,forced:!P},{getOwnPropertyNames:_n,getOwnPropertySymbols:xn}),gt({target:\"Object\",stat:!0,forced:h((function(){It.f(1)}))},{getOwnPropertySymbols:function(t){return It.f(A(t))}}),on){var En=!P||h((function(){var t=nn();return\"[null]\"!=on([t])||\"{}\"!=on({a:t})||\"{}\"!=on(Object(t))}));gt({target:\"JSON\",stat:!0,forced:En},{stringify:function(t,e,i){for(var n,o=[t],r=1;arguments.length>r;)o.push(arguments[r++]);if(n=e,(w(e)||void 0!==t)&&!I(t))return zi(e)||(e=function(t,e){if(\"function\"==typeof n&&(e=n.call(this,t,e)),!I(e))return e}),o[1]=e,on.apply(null,o)}})}nn.prototype[Qi]||ft(nn.prototype,Qi,nn.prototype.valueOf),Ye(nn,Zi),St[$i]=!0;var On=k.Object.getOwnPropertySymbols,Cn=tt.f,Sn=h((function(){Cn(1)}));gt({target:\"Object\",stat:!0,forced:!l||Sn,sham:!l},{getOwnPropertyDescriptor:function(t,e){return Cn(b(t),e)}});var Tn=n((function(t){var e=k.Object,i=t.exports=function(t,i){return e.getOwnPropertyDescriptor(t,i)};e.getOwnPropertyDescriptor.sham&&(i.sham=!0)})),Mn=Tn,Pn=x(\"Reflect\",\"ownKeys\")||function(t){var e=Ai.f(dt(t)),i=It.f;return i?e.concat(i(t)):e};gt({target:\"Object\",stat:!0,sham:!l},{getOwnPropertyDescriptors:function(t){for(var e,i,n=b(t),o=tt.f,r=Pn(n),s={},a=0;r.length>a;)void 0!==(i=o(n,e=r[a++]))&&vi(s,e,i);return s}});var Dn=k.Object.getOwnPropertyDescriptors;gt({target:\"Object\",stat:!0,forced:!l,sham:!l},{defineProperties:Pe});var In=n((function(t){var e=k.Object,i=t.exports=function(t,i){return e.defineProperties(t,i)};e.defineProperties.sham&&(i.sham=!0)}));gt({target:\"Object\",stat:!0,forced:!l,sham:!l},{defineProperty:ut.f});var Bn=n((function(t){var e=k.Object,i=t.exports=function(t,i,n){return e.defineProperty(t,i,n)};e.defineProperty.sham&&(i.sham=!0)})),zn=Bn,Nn=i(n((function(t){t.exports=function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")},t.exports.default=t.exports,t.exports.__esModule=!0}))),An=Bn,Fn=i(n((function(t){function e(t,e){for(var i=0;i<e.length;i++){var n=e[i];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),An(t,n.key,n)}}t.exports=function(t,i,n){return i&&e(t.prototype,i),n&&e(t,n),t},t.exports.default=t.exports,t.exports.__esModule=!0}))),jn=i(n((function(t){t.exports=function(t,e,i){return e in t?An(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[e]=i,t},t.exports.default=t.exports,t.exports.__esModule=!0})));gt({target:\"Array\",stat:!0},{isArray:zi});var Rn=k.Array.isArray,Ln=Rn,Hn=n((function(t){t.exports=function(t){if(Ln(t))return t},t.exports.default=t.exports,t.exports.__esModule=!0}));i(Hn);var Wn=U(\"species\"),qn=function(t){return M>=51||!h((function(){var e=[];return(e.constructor={})[Wn]=function(){return{foo:1}},1!==e[t](Boolean).foo}))},Vn=U(\"isConcatSpreadable\"),Un=9007199254740991,Yn=\"Maximum allowed index exceeded\",Xn=M>=51||!h((function(){var t=[];return t[Vn]=!1,t.concat()[0]!==t})),Gn=qn(\"concat\"),Kn=function(t){if(!w(t))return!1;var e=t[Vn];return void 0!==e?!!e:zi(t)};gt({target:\"Array\",proto:!0,forced:!Xn||!Gn},{concat:function(t){var e,i,n,o,r,s=A(this),a=Ui(s,0),h=0;for(e=-1,n=arguments.length;e<n;e++)if(Kn(r=-1===e?s:arguments[e])){if(h+(o=kt(r.length))>Un)throw TypeError(Yn);for(i=0;i<o;i++,h++)i in r&&vi(a,h,r[i])}else{if(h>=Un)throw TypeError(Yn);vi(a,h++,r)}return a.length=h,a}}),qi(\"asyncIterator\"),qi(\"hasInstance\"),qi(\"isConcatSpreadable\"),qi(\"iterator\"),qi(\"match\"),qi(\"matchAll\"),qi(\"replace\"),qi(\"search\"),qi(\"species\"),qi(\"split\"),qi(\"toPrimitive\"),qi(\"toStringTag\"),qi(\"unscopables\"),Ye(a.JSON,\"JSON\",!0);var $n=k.Symbol;qi(\"asyncDispose\"),qi(\"dispose\"),qi(\"matcher\"),qi(\"metadata\"),qi(\"observable\"),qi(\"patternMatch\"),qi(\"replaceAll\");var Zn=$n,Qn=n((function(t){t.exports=function(t,e){var i=null==t?null:void 0!==Zn&&Bi(t)||t[\"@@iterator\"];if(null!=i){var n,o,r=[],s=!0,a=!1;try{for(i=i.call(t);!(s=(n=i.next()).done)&&(r.push(n.value),!e||r.length!==e);s=!0);}catch(t){a=!0,o=t}finally{try{s||null==i.return||i.return()}finally{if(a)throw o}}return r}},t.exports.default=t.exports,t.exports.__esModule=!0}));i(Qn);var Jn=qn(\"slice\"),to=U(\"species\"),eo=[].slice,io=Math.max;gt({target:\"Array\",proto:!0,forced:!Jn},{slice:function(t,e){var i,n,o,r=b(this),s=kt(r.length),a=Et(t,s),h=Et(void 0===e?s:e,s);if(zi(r)&&(\"function\"!=typeof(i=r.constructor)||i!==Array&&!zi(i.prototype)?w(i)&&null===(i=i[to])&&(i=void 0):i=void 0,i===Array||void 0===i))return eo.call(r,a,h);for(n=new(void 0===i?Array:i)(io(h-a,0)),o=0;a<h;a++,o++)a in r&&vi(n,o,r[a]);return n.length=o,n}});var no=Ht(\"Array\").slice,oo=Array.prototype,ro=function(t){var e=t.slice;return t===oo||t instanceof Array&&e===oo.slice?no:e},so=ro,ao=xi,ho=n((function(t){t.exports=function(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n},t.exports.default=t.exports,t.exports.__esModule=!0}));i(ho);var lo=n((function(t){t.exports=function(t,e){var i;if(t){if(\"string\"==typeof t)return ho(t,e);var n=so(i=Object.prototype.toString.call(t)).call(i,8,-1);return\"Object\"===n&&t.constructor&&(n=t.constructor.name),\"Map\"===n||\"Set\"===n?ao(t):\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?ho(t,e):void 0}},t.exports.default=t.exports,t.exports.__esModule=!0}));i(lo);var co=n((function(t){t.exports=function(){throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")},t.exports.default=t.exports,t.exports.__esModule=!0}));i(co);var uo=i(n((function(t){t.exports=function(t,e){return Hn(t)||Qn(t,e)||lo(t,e)||co()},t.exports.default=t.exports,t.exports.__esModule=!0}))),fo=Hi.f(\"iterator\"),po=fo,vo=n((function(t){function e(i){return\"function\"==typeof Zn&&\"symbol\"==typeof po?(t.exports=e=function(t){return typeof t},t.exports.default=t.exports,t.exports.__esModule=!0):(t.exports=e=function(t){return t&&\"function\"==typeof Zn&&t.constructor===Zn&&t!==Zn.prototype?\"symbol\":typeof t},t.exports.default=t.exports,t.exports.__esModule=!0),e(i)}t.exports=e,t.exports.default=t.exports,t.exports.__esModule=!0})),go=i(vo),yo=n((function(t){t.exports=function(t){if(Ln(t))return ho(t)},t.exports.default=t.exports,t.exports.__esModule=!0}));i(yo);var mo=n((function(t){t.exports=function(t){if(void 0!==Zn&&null!=Bi(t)||null!=t[\"@@iterator\"])return ao(t)},t.exports.default=t.exports,t.exports.__esModule=!0}));i(mo);var bo=n((function(t){t.exports=function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")},t.exports.default=t.exports,t.exports.__esModule=!0}));i(bo);var wo=i(n((function(t){t.exports=function(t){return yo(t)||mo(t)||lo(t)||bo()},t.exports.default=t.exports,t.exports.__esModule=!0}))),ko=$n,_o=Ht(\"Array\").concat,xo=Array.prototype,Eo=function(t){var e=t.concat;return t===xo||t instanceof Array&&e===xo.concat?_o:e},Oo=ro;gt({target:\"Reflect\",stat:!0},{ownKeys:Pn});var Co=k.Reflect.ownKeys,So=Rn,To=Gi.map,Mo=qn(\"map\");gt({target:\"Array\",proto:!0,forced:!Mo},{map:function(t){return To(this,t,arguments.length>1?arguments[1]:void 0)}});var Po=Ht(\"Array\").map,Do=Array.prototype,Io=function(t){var e=t.map;return t===Do||t instanceof Array&&e===Do.map?Po:e},Bo=h((function(){Dt(1)}));gt({target:\"Object\",stat:!0,forced:Bo},{keys:function(t){return Dt(A(t))}});var zo=k.Object.keys;gt({target:\"Date\",stat:!0},{now:function(){return(new Date).getTime()}});var No=k.Date.now,Ao=function(t,e){var i=[][t];return!!i&&h((function(){i.call(null,e||function(){throw 1},1)}))},Fo=Gi.forEach,jo=Ao(\"forEach\")?[].forEach:function(t){return Fo(this,t,arguments.length>1?arguments[1]:void 0)};gt({target:\"Array\",proto:!0,forced:[].forEach!=jo},{forEach:jo});var Ro=Ht(\"Array\").forEach,Lo=Array.prototype,Ho={DOMTokenList:!0,NodeList:!0},Wo=function(t){var e=t.forEach;return t===Lo||t instanceof Array&&e===Lo.forEach||Ho.hasOwnProperty(We(t))?Ro:e},qo=[].reverse,Vo=[1,2];gt({target:\"Array\",proto:!0,forced:String(Vo)===String(Vo.reverse())},{reverse:function(){return zi(this)&&(this.length=this.length),qo.call(this)}});var Uo=Ht(\"Array\").reverse,Yo=Array.prototype,Xo=function(t){var e=t.reverse;return t===Yo||t instanceof Array&&e===Yo.reverse?Uo:e},Go=qn(\"splice\"),Ko=Math.max,$o=Math.min,Zo=9007199254740991,Qo=\"Maximum allowed length exceeded\";gt({target:\"Array\",proto:!0,forced:!Go},{splice:function(t,e){var i,n,o,r,s,a,h=A(this),l=kt(h.length),d=Et(t,l),c=arguments.length;if(0===c?i=n=0:1===c?(i=0,n=l-d):(i=c-2,n=$o(Ko(bt(e),0),l-d)),l+i-n>Zo)throw TypeError(Qo);for(o=Ui(h,n),r=0;r<n;r++)(s=d+r)in h&&vi(o,r,h[s]);if(o.length=n,i<n){for(r=d;r<l-n;r++)a=r+i,(s=r+n)in h?h[a]=h[s]:delete h[a];for(r=l;r>l-n+i;r--)delete h[r-1]}else if(i>n)for(r=l-n;r>d;r--)a=r+i-1,(s=r+n-1)in h?h[a]=h[s]:delete h[a];for(r=0;r<i;r++)h[r+d]=arguments[r+2];return h.length=l-n+i,o}});var Jo=Ht(\"Array\").splice,tr=Array.prototype,er=function(t){var e=t.splice;return t===tr||t instanceof Array&&e===tr.splice?Jo:e},ir=Ct.includes;gt({target:\"Array\",proto:!0},{includes:function(t){return ir(this,t,arguments.length>1?arguments[1]:void 0)}});var nr=Ht(\"Array\").includes,or=U(\"match\"),rr=function(t){if(function(t){var e;return w(t)&&(void 0!==(e=t[or])?!!e:\"RegExp\"==v(t))}(t))throw TypeError(\"The method doesn't accept regular expressions\");return t},sr=U(\"match\");gt({target:\"String\",proto:!0,forced:!function(t){var e=/./;try{\"/./\"[t](e)}catch(i){try{return e[sr]=!1,\"/./\"[t](e)}catch(t){}}return!1}(\"includes\")},{includes:function(t){return!!~Qt(m(this)).indexOf(Qt(rr(t)),arguments.length>1?arguments[1]:void 0)}});var ar=Ht(\"String\").includes,hr=Array.prototype,lr=String.prototype,dr=function(t){var e=t.includes;return t===hr||t instanceof Array&&e===hr.includes?nr:\"string\"==typeof t||t===lr||t instanceof String&&e===lr.includes?ar:e},cr=h((function(){Ee(1)}));gt({target:\"Object\",stat:!0,forced:cr,sham:!ke},{getPrototypeOf:function(t){return Ee(A(t))}});var ur=k.Object.getPrototypeOf,fr=ur,pr=Gi.filter,vr=qn(\"filter\");gt({target:\"Array\",proto:!0,forced:!vr},{filter:function(t){return pr(this,t,arguments.length>1?arguments[1]:void 0)}});var gr=Ht(\"Array\").filter,yr=Array.prototype,mr=function(t){var e=t.filter;return t===yr||t instanceof Array&&e===yr.filter?gr:e},br=u.f,wr=function(t){return function(e){for(var i,n=b(e),o=Dt(n),r=o.length,s=0,a=[];r>s;)i=o[s++],l&&!br.call(n,i)||a.push(t?[i,n[i]]:n[i]);return a}},kr={entries:wr(!0),values:wr(!1)}.values;gt({target:\"Object\",stat:!0},{values:function(t){return kr(t)}});var _r=k.Object.values,xr=\"\\t\\n\\v\\f\\r                　\\u2028\\u2029\\ufeff\",Er=\"[\"+xr+\"]\",Or=RegExp(\"^\"+Er+Er+\"*\"),Cr=RegExp(Er+Er+\"*$\"),Sr=function(t){return function(e){var i=Qt(m(e));return 1&t&&(i=i.replace(Or,\"\")),2&t&&(i=i.replace(Cr,\"\")),i}},Tr={start:Sr(1),end:Sr(2),trim:Sr(3)},Mr=Tr.trim,Pr=a.parseInt,Dr=/^[+-]?0[Xx]/,Ir=8!==Pr(xr+\"08\")||22!==Pr(xr+\"0x16\")?function(t,e){var i=Mr(Qt(t));return Pr(i,e>>>0||(Dr.test(i)?16:10))}:Pr;gt({global:!0,forced:parseInt!=Ir},{parseInt:Ir});var Br=k.parseInt,zr=Ct.indexOf,Nr=[].indexOf,Ar=!!Nr&&1/[1].indexOf(1,-0)<0,Fr=Ao(\"indexOf\");gt({target:\"Array\",proto:!0,forced:Ar||!Fr},{indexOf:function(t){return Ar?Nr.apply(this,arguments)||0:zr(this,t,arguments.length>1?arguments[1]:void 0)}});var jr,Rr=Ht(\"Array\").indexOf,Lr=Array.prototype,Hr=function(t){var e=t.indexOf;return t===Lr||t instanceof Array&&e===Lr.indexOf?Rr:e},Wr=Tr.trim;gt({target:\"String\",proto:!0,forced:(jr=\"trim\",h((function(){return!!xr[jr]()||\"​\\n᠎\"!=\"​\\n᠎\"[jr]()||xr[jr].name!==jr})))},{trim:function(){return Wr(this)}});var qr=Ht(\"String\").trim,Vr=String.prototype,Ur=function(t){var e=t.trim;return\"string\"==typeof t||t===Vr||t instanceof String&&e===Vr.trim?qr:e};gt({target:\"Object\",stat:!0,sham:!l},{create:Fe});var Yr=k.Object,Xr=function(t,e){return Yr.create(t,e)},Gr=Xr,Kr=x(\"JSON\",\"stringify\"),$r=/[\\uD800-\\uDFFF]/g,Zr=/^[\\uD800-\\uDBFF]$/,Qr=/^[\\uDC00-\\uDFFF]$/,Jr=function(t,e,i){var n=i.charAt(e-1),o=i.charAt(e+1);return Zr.test(t)&&!Qr.test(o)||Qr.test(t)&&!Zr.test(n)?\"\\\\u\"+t.charCodeAt(0).toString(16):t},ts=h((function(){return'\"\\\\udf06\\\\ud834\"'!==Kr(\"\\udf06\\ud834\")||'\"\\\\udead\"'!==Kr(\"\\udead\")}));Kr&&gt({target:\"JSON\",stat:!0,forced:ts},{stringify:function(t,e,i){var n=Kr.apply(null,arguments);return\"string\"==typeof n?n.replace($r,Jr):n}}),k.JSON||(k.JSON={stringify:JSON.stringify});var es=function(t,e,i){return k.JSON.stringify.apply(null,arguments)},is=[].slice,ns=/MSIE .\\./.test(E),os=function(t){return function(e,i){var n=arguments.length>2,o=n?is.call(arguments,2):void 0;return t(n?function(){(\"function\"==typeof e?e:Function(e)).apply(this,o)}:e,i)}};gt({global:!0,bind:!0,forced:ns},{setTimeout:os(a.setTimeout),setInterval:os(a.setInterval)});var rs=k.setTimeout;gt({target:\"Array\",proto:!0},{fill:function(t){for(var e=A(this),i=kt(e.length),n=arguments.length,o=Et(n>1?arguments[1]:void 0,i),r=n>2?arguments[2]:void 0,s=void 0===r?i:Et(r,i);s>o;)e[o++]=t;return e}});var ss=Ht(\"Array\").fill,as=Array.prototype,hs=function(t){var e=t.fill;return t===as||t instanceof Array&&e===as.fill?ss:e};function ls(){return(ls=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var i=arguments[e];for(var n in i)Object.prototype.hasOwnProperty.call(i,n)&&(t[n]=i[n])}return t}).apply(this,arguments)}function ds(t,e){t.prototype=Object.create(e.prototype),t.prototype.constructor=t,t.__proto__=e}function cs(t){if(void 0===t)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return t}var us,fs=\"function\"!=typeof Object.assign?function(t){if(null==t)throw new TypeError(\"Cannot convert undefined or null to object\");for(var e=Object(t),i=1;i<arguments.length;i++){var n=arguments[i];if(null!=n)for(var o in n)n.hasOwnProperty(o)&&(e[o]=n[o])}return e}:Object.assign,ps=[\"\",\"webkit\",\"Moz\",\"MS\",\"ms\",\"o\"],vs=\"undefined\"==typeof document?{style:{}}:document.createElement(\"div\"),gs=Math.round,ys=Math.abs,ms=Date.now;function bs(t,e){for(var i,n,o=e[0].toUpperCase()+e.slice(1),r=0;r<ps.length;){if((n=(i=ps[r])?i+o:e)in t)return n;r++}}us=\"undefined\"==typeof window?{}:window;var ws=bs(vs.style,\"touchAction\"),ks=void 0!==ws;var _s=\"compute\",xs=\"auto\",Es=\"manipulation\",Os=\"none\",Cs=\"pan-x\",Ss=\"pan-y\",Ts=function(){if(!ks)return!1;var t={},e=us.CSS&&us.CSS.supports;return[\"auto\",\"manipulation\",\"pan-y\",\"pan-x\",\"pan-x pan-y\",\"none\"].forEach((function(i){return t[i]=!e||us.CSS.supports(\"touch-action\",i)})),t}(),Ms=\"ontouchstart\"in us,Ps=void 0!==bs(us,\"PointerEvent\"),Ds=Ms&&/mobile|tablet|ip(ad|hone|od)|android/i.test(navigator.userAgent),Is=\"touch\",Bs=\"mouse\",zs=16,Ns=24,As=[\"x\",\"y\"],Fs=[\"clientX\",\"clientY\"];function js(t,e,i){var n;if(t)if(t.forEach)t.forEach(e,i);else if(void 0!==t.length)for(n=0;n<t.length;)e.call(i,t[n],n,t),n++;else for(n in t)t.hasOwnProperty(n)&&e.call(i,t[n],n,t)}function Rs(t,e){return\"function\"==typeof t?t.apply(e&&e[0]||void 0,e):t}function Ls(t,e){return t.indexOf(e)>-1}var Hs=function(){function t(t,e){this.manager=t,this.set(e)}var e=t.prototype;return e.set=function(t){t===_s&&(t=this.compute()),ks&&this.manager.element.style&&Ts[t]&&(this.manager.element.style[ws]=t),this.actions=t.toLowerCase().trim()},e.update=function(){this.set(this.manager.options.touchAction)},e.compute=function(){var t=[];return js(this.manager.recognizers,(function(e){Rs(e.options.enable,[e])&&(t=t.concat(e.getTouchAction()))})),function(t){if(Ls(t,Os))return Os;var e=Ls(t,Cs),i=Ls(t,Ss);return e&&i?Os:e||i?e?Cs:Ss:Ls(t,Es)?Es:xs}(t.join(\" \"))},e.preventDefaults=function(t){var e=t.srcEvent,i=t.offsetDirection;if(this.manager.session.prevented)e.preventDefault();else{var n=this.actions,o=Ls(n,Os)&&!Ts.none,r=Ls(n,Ss)&&!Ts[\"pan-y\"],s=Ls(n,Cs)&&!Ts[\"pan-x\"];if(o){var a=1===t.pointers.length,h=t.distance<2,l=t.deltaTime<250;if(a&&h&&l)return}if(!s||!r)return o||r&&6&i||s&&i&Ns?this.preventSrc(e):void 0}},e.preventSrc=function(t){this.manager.session.prevented=!0,t.preventDefault()},t}();function Ws(t,e){for(;t;){if(t===e)return!0;t=t.parentNode}return!1}function qs(t){var e=t.length;if(1===e)return{x:gs(t[0].clientX),y:gs(t[0].clientY)};for(var i=0,n=0,o=0;o<e;)i+=t[o].clientX,n+=t[o].clientY,o++;return{x:gs(i/e),y:gs(n/e)}}function Vs(t){for(var e=[],i=0;i<t.pointers.length;)e[i]={clientX:gs(t.pointers[i].clientX),clientY:gs(t.pointers[i].clientY)},i++;return{timeStamp:ms(),pointers:e,center:qs(e),deltaX:t.deltaX,deltaY:t.deltaY}}function Us(t,e,i){i||(i=As);var n=e[i[0]]-t[i[0]],o=e[i[1]]-t[i[1]];return Math.sqrt(n*n+o*o)}function Ys(t,e,i){i||(i=As);var n=e[i[0]]-t[i[0]],o=e[i[1]]-t[i[1]];return 180*Math.atan2(o,n)/Math.PI}function Xs(t,e){return t===e?1:ys(t)>=ys(e)?t<0?2:4:e<0?8:zs}function Gs(t,e,i){return{x:e/t||0,y:i/t||0}}function Ks(t,e){var i=t.session,n=e.pointers,o=n.length;i.firstInput||(i.firstInput=Vs(e)),o>1&&!i.firstMultiple?i.firstMultiple=Vs(e):1===o&&(i.firstMultiple=!1);var r=i.firstInput,s=i.firstMultiple,a=s?s.center:r.center,h=e.center=qs(n);e.timeStamp=ms(),e.deltaTime=e.timeStamp-r.timeStamp,e.angle=Ys(a,h),e.distance=Us(a,h),function(t,e){var i=e.center,n=t.offsetDelta||{},o=t.prevDelta||{},r=t.prevInput||{};1!==e.eventType&&4!==r.eventType||(o=t.prevDelta={x:r.deltaX||0,y:r.deltaY||0},n=t.offsetDelta={x:i.x,y:i.y}),e.deltaX=o.x+(i.x-n.x),e.deltaY=o.y+(i.y-n.y)}(i,e),e.offsetDirection=Xs(e.deltaX,e.deltaY);var l,d,c=Gs(e.deltaTime,e.deltaX,e.deltaY);e.overallVelocityX=c.x,e.overallVelocityY=c.y,e.overallVelocity=ys(c.x)>ys(c.y)?c.x:c.y,e.scale=s?(l=s.pointers,Us((d=n)[0],d[1],Fs)/Us(l[0],l[1],Fs)):1,e.rotation=s?function(t,e){return Ys(e[1],e[0],Fs)+Ys(t[1],t[0],Fs)}(s.pointers,n):0,e.maxPointers=i.prevInput?e.pointers.length>i.prevInput.maxPointers?e.pointers.length:i.prevInput.maxPointers:e.pointers.length,function(t,e){var i,n,o,r,s=t.lastInterval||e,a=e.timeStamp-s.timeStamp;if(8!==e.eventType&&(a>25||void 0===s.velocity)){var h=e.deltaX-s.deltaX,l=e.deltaY-s.deltaY,d=Gs(a,h,l);n=d.x,o=d.y,i=ys(d.x)>ys(d.y)?d.x:d.y,r=Xs(h,l),t.lastInterval=e}else i=s.velocity,n=s.velocityX,o=s.velocityY,r=s.direction;e.velocity=i,e.velocityX=n,e.velocityY=o,e.direction=r}(i,e);var u,f=t.element,p=e.srcEvent;Ws(u=p.composedPath?p.composedPath()[0]:p.path?p.path[0]:p.target,f)&&(f=u),e.target=f}function $s(t,e,i){var n=i.pointers.length,o=i.changedPointers.length,r=1&e&&n-o==0,s=12&e&&n-o==0;i.isFirst=!!r,i.isFinal=!!s,r&&(t.session={}),i.eventType=e,Ks(t,i),t.emit(\"hammer.input\",i),t.recognize(i),t.session.prevInput=i}function Zs(t){return t.trim().split(/\\s+/g)}function Qs(t,e,i){js(Zs(e),(function(e){t.addEventListener(e,i,!1)}))}function Js(t,e,i){js(Zs(e),(function(e){t.removeEventListener(e,i,!1)}))}function ta(t){var e=t.ownerDocument||t;return e.defaultView||e.parentWindow||window}var ea=function(){function t(t,e){var i=this;this.manager=t,this.callback=e,this.element=t.element,this.target=t.options.inputTarget,this.domHandler=function(e){Rs(t.options.enable,[t])&&i.handler(e)},this.init()}var e=t.prototype;return e.handler=function(){},e.init=function(){this.evEl&&Qs(this.element,this.evEl,this.domHandler),this.evTarget&&Qs(this.target,this.evTarget,this.domHandler),this.evWin&&Qs(ta(this.element),this.evWin,this.domHandler)},e.destroy=function(){this.evEl&&Js(this.element,this.evEl,this.domHandler),this.evTarget&&Js(this.target,this.evTarget,this.domHandler),this.evWin&&Js(ta(this.element),this.evWin,this.domHandler)},t}();function ia(t,e,i){if(t.indexOf&&!i)return t.indexOf(e);for(var n=0;n<t.length;){if(i&&t[n][i]==e||!i&&t[n]===e)return n;n++}return-1}var na={pointerdown:1,pointermove:2,pointerup:4,pointercancel:8,pointerout:8},oa={2:Is,3:\"pen\",4:Bs,5:\"kinect\"},ra=\"pointerdown\",sa=\"pointermove pointerup pointercancel\";us.MSPointerEvent&&!us.PointerEvent&&(ra=\"MSPointerDown\",sa=\"MSPointerMove MSPointerUp MSPointerCancel\");var aa=function(t){function e(){var i,n=e.prototype;return n.evEl=ra,n.evWin=sa,(i=t.apply(this,arguments)||this).store=i.manager.session.pointerEvents=[],i}return ds(e,t),e.prototype.handler=function(t){var e=this.store,i=!1,n=t.type.toLowerCase().replace(\"ms\",\"\"),o=na[n],r=oa[t.pointerType]||t.pointerType,s=r===Is,a=ia(e,t.pointerId,\"pointerId\");1&o&&(0===t.button||s)?a<0&&(e.push(t),a=e.length-1):12&o&&(i=!0),a<0||(e[a]=t,this.callback(this.manager,o,{pointers:e,changedPointers:[t],pointerType:r,srcEvent:t}),i&&e.splice(a,1))},e}(ea);function ha(t){return Array.prototype.slice.call(t,0)}function la(t,e,i){for(var n=[],o=[],r=0;r<t.length;){var s=e?t[r][e]:t[r];ia(o,s)<0&&n.push(t[r]),o[r]=s,r++}return i&&(n=e?n.sort((function(t,i){return t[e]>i[e]})):n.sort()),n}var da={touchstart:1,touchmove:2,touchend:4,touchcancel:8},ca=\"touchstart touchmove touchend touchcancel\",ua=function(t){function e(){var i;return e.prototype.evTarget=ca,(i=t.apply(this,arguments)||this).targetIds={},i}return ds(e,t),e.prototype.handler=function(t){var e=da[t.type],i=fa.call(this,t,e);i&&this.callback(this.manager,e,{pointers:i[0],changedPointers:i[1],pointerType:Is,srcEvent:t})},e}(ea);function fa(t,e){var i,n,o=ha(t.touches),r=this.targetIds;if(3&e&&1===o.length)return r[o[0].identifier]=!0,[o,o];var s=ha(t.changedTouches),a=[],h=this.target;if(n=o.filter((function(t){return Ws(t.target,h)})),1===e)for(i=0;i<n.length;)r[n[i].identifier]=!0,i++;for(i=0;i<s.length;)r[s[i].identifier]&&a.push(s[i]),12&e&&delete r[s[i].identifier],i++;return a.length?[la(n.concat(a),\"identifier\",!0),a]:void 0}var pa={mousedown:1,mousemove:2,mouseup:4},va=\"mousedown\",ga=\"mousemove mouseup\",ya=function(t){function e(){var i,n=e.prototype;return n.evEl=va,n.evWin=ga,(i=t.apply(this,arguments)||this).pressed=!1,i}return ds(e,t),e.prototype.handler=function(t){var e=pa[t.type];1&e&&0===t.button&&(this.pressed=!0),2&e&&1!==t.which&&(e=4),this.pressed&&(4&e&&(this.pressed=!1),this.callback(this.manager,e,{pointers:[t],changedPointers:[t],pointerType:Bs,srcEvent:t}))},e}(ea);function ma(t){var e=t.changedPointers[0];if(e.identifier===this.primaryTouch){var i={x:e.clientX,y:e.clientY},n=this.lastTouches;this.lastTouches.push(i);setTimeout((function(){var t=n.indexOf(i);t>-1&&n.splice(t,1)}),2500)}}function ba(t,e){1&t?(this.primaryTouch=e.changedPointers[0].identifier,ma.call(this,e)):12&t&&ma.call(this,e)}function wa(t){for(var e=t.srcEvent.clientX,i=t.srcEvent.clientY,n=0;n<this.lastTouches.length;n++){var o=this.lastTouches[n],r=Math.abs(e-o.x),s=Math.abs(i-o.y);if(r<=25&&s<=25)return!0}return!1}var ka=function(){return function(t){function e(e,i){var n;return(n=t.call(this,e,i)||this).handler=function(t,e,i){var o=i.pointerType===Is,r=i.pointerType===Bs;if(!(r&&i.sourceCapabilities&&i.sourceCapabilities.firesTouchEvents)){if(o)ba.call(cs(cs(n)),e,i);else if(r&&wa.call(cs(cs(n)),i))return;n.callback(t,e,i)}},n.touch=new ua(n.manager,n.handler),n.mouse=new ya(n.manager,n.handler),n.primaryTouch=null,n.lastTouches=[],n}return ds(e,t),e.prototype.destroy=function(){this.touch.destroy(),this.mouse.destroy()},e}(ea)}();function _a(t,e,i){return!!Array.isArray(t)&&(js(t,i[e],i),!0)}var xa=32,Ea=1;function Oa(t,e){var i=e.manager;return i?i.get(t):t}function Ca(t){return 16&t?\"cancel\":8&t?\"end\":4&t?\"move\":2&t?\"start\":\"\"}var Sa=function(){function t(t){void 0===t&&(t={}),this.options=ls({enable:!0},t),this.id=Ea++,this.manager=null,this.state=1,this.simultaneous={},this.requireFail=[]}var e=t.prototype;return e.set=function(t){return fs(this.options,t),this.manager&&this.manager.touchAction.update(),this},e.recognizeWith=function(t){if(_a(t,\"recognizeWith\",this))return this;var e=this.simultaneous;return e[(t=Oa(t,this)).id]||(e[t.id]=t,t.recognizeWith(this)),this},e.dropRecognizeWith=function(t){return _a(t,\"dropRecognizeWith\",this)||(t=Oa(t,this),delete this.simultaneous[t.id]),this},e.requireFailure=function(t){if(_a(t,\"requireFailure\",this))return this;var e=this.requireFail;return-1===ia(e,t=Oa(t,this))&&(e.push(t),t.requireFailure(this)),this},e.dropRequireFailure=function(t){if(_a(t,\"dropRequireFailure\",this))return this;t=Oa(t,this);var e=ia(this.requireFail,t);return e>-1&&this.requireFail.splice(e,1),this},e.hasRequireFailures=function(){return this.requireFail.length>0},e.canRecognizeWith=function(t){return!!this.simultaneous[t.id]},e.emit=function(t){var e=this,i=this.state;function n(i){e.manager.emit(i,t)}i<8&&n(e.options.event+Ca(i)),n(e.options.event),t.additionalEvent&&n(t.additionalEvent),i>=8&&n(e.options.event+Ca(i))},e.tryEmit=function(t){if(this.canEmit())return this.emit(t);this.state=xa},e.canEmit=function(){for(var t=0;t<this.requireFail.length;){if(!(33&this.requireFail[t].state))return!1;t++}return!0},e.recognize=function(t){var e=fs({},t);if(!Rs(this.options.enable,[this,e]))return this.reset(),void(this.state=xa);56&this.state&&(this.state=1),this.state=this.process(e),30&this.state&&this.tryEmit(e)},e.process=function(t){},e.getTouchAction=function(){},e.reset=function(){},t}(),Ta=function(t){function e(e){var i;return void 0===e&&(e={}),(i=t.call(this,ls({event:\"tap\",pointers:1,taps:1,interval:300,time:250,threshold:9,posThreshold:10},e))||this).pTime=!1,i.pCenter=!1,i._timer=null,i._input=null,i.count=0,i}ds(e,t);var i=e.prototype;return i.getTouchAction=function(){return[Es]},i.process=function(t){var e=this,i=this.options,n=t.pointers.length===i.pointers,o=t.distance<i.threshold,r=t.deltaTime<i.time;if(this.reset(),1&t.eventType&&0===this.count)return this.failTimeout();if(o&&r&&n){if(4!==t.eventType)return this.failTimeout();var s=!this.pTime||t.timeStamp-this.pTime<i.interval,a=!this.pCenter||Us(this.pCenter,t.center)<i.posThreshold;if(this.pTime=t.timeStamp,this.pCenter=t.center,a&&s?this.count+=1:this.count=1,this._input=t,0===this.count%i.taps)return this.hasRequireFailures()?(this._timer=setTimeout((function(){e.state=8,e.tryEmit()}),i.interval),2):8}return xa},i.failTimeout=function(){var t=this;return this._timer=setTimeout((function(){t.state=xa}),this.options.interval),xa},i.reset=function(){clearTimeout(this._timer)},i.emit=function(){8===this.state&&(this._input.tapCount=this.count,this.manager.emit(this.options.event,this._input))},e}(Sa),Ma=function(t){function e(e){return void 0===e&&(e={}),t.call(this,ls({pointers:1},e))||this}ds(e,t);var i=e.prototype;return i.attrTest=function(t){var e=this.options.pointers;return 0===e||t.pointers.length===e},i.process=function(t){var e=this.state,i=t.eventType,n=6&e,o=this.attrTest(t);return n&&(8&i||!o)?16|e:n||o?4&i?8|e:2&e?4|e:2:xa},e}(Sa);function Pa(t){return t===zs?\"down\":8===t?\"up\":2===t?\"left\":4===t?\"right\":\"\"}var Da=function(t){function e(e){var i;return void 0===e&&(e={}),(i=t.call(this,ls({event:\"pan\",threshold:10,pointers:1,direction:30},e))||this).pX=null,i.pY=null,i}ds(e,t);var i=e.prototype;return i.getTouchAction=function(){var t=this.options.direction,e=[];return 6&t&&e.push(Ss),t&Ns&&e.push(Cs),e},i.directionTest=function(t){var e=this.options,i=!0,n=t.distance,o=t.direction,r=t.deltaX,s=t.deltaY;return o&e.direction||(6&e.direction?(o=0===r?1:r<0?2:4,i=r!==this.pX,n=Math.abs(t.deltaX)):(o=0===s?1:s<0?8:zs,i=s!==this.pY,n=Math.abs(t.deltaY))),t.direction=o,i&&n>e.threshold&&o&e.direction},i.attrTest=function(t){return Ma.prototype.attrTest.call(this,t)&&(2&this.state||!(2&this.state)&&this.directionTest(t))},i.emit=function(e){this.pX=e.deltaX,this.pY=e.deltaY;var i=Pa(e.direction);i&&(e.additionalEvent=this.options.event+i),t.prototype.emit.call(this,e)},e}(Ma),Ia=function(t){function e(e){return void 0===e&&(e={}),t.call(this,ls({event:\"swipe\",threshold:10,velocity:.3,direction:30,pointers:1},e))||this}ds(e,t);var i=e.prototype;return i.getTouchAction=function(){return Da.prototype.getTouchAction.call(this)},i.attrTest=function(e){var i,n=this.options.direction;return 30&n?i=e.overallVelocity:6&n?i=e.overallVelocityX:n&Ns&&(i=e.overallVelocityY),t.prototype.attrTest.call(this,e)&&n&e.offsetDirection&&e.distance>this.options.threshold&&e.maxPointers===this.options.pointers&&ys(i)>this.options.velocity&&4&e.eventType},i.emit=function(t){var e=Pa(t.offsetDirection);e&&this.manager.emit(this.options.event+e,t),this.manager.emit(this.options.event,t)},e}(Ma),Ba=function(t){function e(e){return void 0===e&&(e={}),t.call(this,ls({event:\"pinch\",threshold:0,pointers:2},e))||this}ds(e,t);var i=e.prototype;return i.getTouchAction=function(){return[Os]},i.attrTest=function(e){return t.prototype.attrTest.call(this,e)&&(Math.abs(e.scale-1)>this.options.threshold||2&this.state)},i.emit=function(e){if(1!==e.scale){var i=e.scale<1?\"in\":\"out\";e.additionalEvent=this.options.event+i}t.prototype.emit.call(this,e)},e}(Ma),za=function(t){function e(e){return void 0===e&&(e={}),t.call(this,ls({event:\"rotate\",threshold:0,pointers:2},e))||this}ds(e,t);var i=e.prototype;return i.getTouchAction=function(){return[Os]},i.attrTest=function(e){return t.prototype.attrTest.call(this,e)&&(Math.abs(e.rotation)>this.options.threshold||2&this.state)},e}(Ma),Na=function(t){function e(e){var i;return void 0===e&&(e={}),(i=t.call(this,ls({event:\"press\",pointers:1,time:251,threshold:9},e))||this)._timer=null,i._input=null,i}ds(e,t);var i=e.prototype;return i.getTouchAction=function(){return[xs]},i.process=function(t){var e=this,i=this.options,n=t.pointers.length===i.pointers,o=t.distance<i.threshold,r=t.deltaTime>i.time;if(this._input=t,!o||!n||12&t.eventType&&!r)this.reset();else if(1&t.eventType)this.reset(),this._timer=setTimeout((function(){e.state=8,e.tryEmit()}),i.time);else if(4&t.eventType)return 8;return xa},i.reset=function(){clearTimeout(this._timer)},i.emit=function(t){8===this.state&&(t&&4&t.eventType?this.manager.emit(this.options.event+\"up\",t):(this._input.timeStamp=ms(),this.manager.emit(this.options.event,this._input)))},e}(Sa),Aa={domEvents:!1,touchAction:_s,enable:!0,inputTarget:null,inputClass:null,cssProps:{userSelect:\"none\",touchSelect:\"none\",touchCallout:\"none\",contentZooming:\"none\",userDrag:\"none\",tapHighlightColor:\"rgba(0,0,0,0)\"}},Fa=[[za,{enable:!1}],[Ba,{enable:!1},[\"rotate\"]],[Ia,{direction:6}],[Da,{direction:6},[\"swipe\"]],[Ta],[Ta,{event:\"doubletap\",taps:2},[\"tap\"]],[Na]];function ja(t,e){var i,n=t.element;n.style&&(js(t.options.cssProps,(function(o,r){i=bs(n.style,r),e?(t.oldCssProps[i]=n.style[i],n.style[i]=o):n.style[i]=t.oldCssProps[i]||\"\"})),e||(t.oldCssProps={}))}var Ra=function(){function t(t,e){var i,n=this;this.options=fs({},Aa,e||{}),this.options.inputTarget=this.options.inputTarget||t,this.handlers={},this.session={},this.recognizers=[],this.oldCssProps={},this.element=t,this.input=new((i=this).options.inputClass||(Ps?aa:Ds?ua:Ms?ka:ya))(i,$s),this.touchAction=new Hs(this,this.options.touchAction),ja(this,!0),js(this.options.recognizers,(function(t){var e=n.add(new t[0](t[1]));t[2]&&e.recognizeWith(t[2]),t[3]&&e.requireFailure(t[3])}),this)}var e=t.prototype;return e.set=function(t){return fs(this.options,t),t.touchAction&&this.touchAction.update(),t.inputTarget&&(this.input.destroy(),this.input.target=t.inputTarget,this.input.init()),this},e.stop=function(t){this.session.stopped=t?2:1},e.recognize=function(t){var e=this.session;if(!e.stopped){var i;this.touchAction.preventDefaults(t);var n=this.recognizers,o=e.curRecognizer;(!o||o&&8&o.state)&&(e.curRecognizer=null,o=null);for(var r=0;r<n.length;)i=n[r],2===e.stopped||o&&i!==o&&!i.canRecognizeWith(o)?i.reset():i.recognize(t),!o&&14&i.state&&(e.curRecognizer=i,o=i),r++}},e.get=function(t){if(t instanceof Sa)return t;for(var e=this.recognizers,i=0;i<e.length;i++)if(e[i].options.event===t)return e[i];return null},e.add=function(t){if(_a(t,\"add\",this))return this;var e=this.get(t.options.event);return e&&this.remove(e),this.recognizers.push(t),t.manager=this,this.touchAction.update(),t},e.remove=function(t){if(_a(t,\"remove\",this))return this;var e=this.get(t);if(t){var i=this.recognizers,n=ia(i,e);-1!==n&&(i.splice(n,1),this.touchAction.update())}return this},e.on=function(t,e){if(void 0===t||void 0===e)return this;var i=this.handlers;return js(Zs(t),(function(t){i[t]=i[t]||[],i[t].push(e)})),this},e.off=function(t,e){if(void 0===t)return this;var i=this.handlers;return js(Zs(t),(function(t){e?i[t]&&i[t].splice(ia(i[t],e),1):delete i[t]})),this},e.emit=function(t,e){this.options.domEvents&&function(t,e){var i=document.createEvent(\"Event\");i.initEvent(t,!0,!0),i.gesture=e,e.target.dispatchEvent(i)}(t,e);var i=this.handlers[t]&&this.handlers[t].slice();if(i&&i.length){e.type=t,e.preventDefault=function(){e.srcEvent.preventDefault()};for(var n=0;n<i.length;)i[n](e),n++}},e.destroy=function(){this.element&&ja(this,!1),this.handlers={},this.session={},this.input.destroy(),this.element=null},t}(),La={touchstart:1,touchmove:2,touchend:4,touchcancel:8},Ha=\"touchstart\",Wa=\"touchstart touchmove touchend touchcancel\",qa=function(t){function e(){var i,n=e.prototype;return n.evTarget=Ha,n.evWin=Wa,(i=t.apply(this,arguments)||this).started=!1,i}return ds(e,t),e.prototype.handler=function(t){var e=La[t.type];if(1===e&&(this.started=!0),this.started){var i=Va.call(this,t,e);12&e&&i[0].length-i[1].length==0&&(this.started=!1),this.callback(this.manager,e,{pointers:i[0],changedPointers:i[1],pointerType:Is,srcEvent:t})}},e}(ea);function Va(t,e){var i=ha(t.touches),n=ha(t.changedTouches);return 12&e&&(i=la(i.concat(n),\"identifier\",!0)),[i,n]}function Ua(t,e,i){var n=\"DEPRECATED METHOD: \"+e+\"\\n\"+i+\" AT \\n\";return function(){var e=new Error(\"get-stack-trace\"),i=e&&e.stack?e.stack.replace(/^[^\\(]+?[\\n$]/gm,\"\").replace(/^\\s+at\\s+/gm,\"\").replace(/^Object.<anonymous>\\s*\\(/gm,\"{anonymous}()@\"):\"Unknown Stack Trace\",o=window.console&&(window.console.warn||window.console.log);return o&&o.call(window.console,n,i),t.apply(this,arguments)}}var Ya=Ua((function(t,e,i){for(var n=Object.keys(e),o=0;o<n.length;)(!i||i&&void 0===t[n[o]])&&(t[n[o]]=e[n[o]]),o++;return t}),\"extend\",\"Use `assign`.\"),Xa=Ua((function(t,e){return Ya(t,e,!0)}),\"merge\",\"Use `assign`.\");function Ga(t,e,i){var n,o=e.prototype;(n=t.prototype=Object.create(o)).constructor=t,n._super=o,i&&fs(n,i)}function Ka(t,e){return function(){return t.apply(e,arguments)}}var $a=function(){var t=function(t,e){return void 0===e&&(e={}),new Ra(t,ls({recognizers:Fa.concat()},e))};return t.VERSION=\"2.0.17-rc\",t.DIRECTION_ALL=30,t.DIRECTION_DOWN=zs,t.DIRECTION_LEFT=2,t.DIRECTION_RIGHT=4,t.DIRECTION_UP=8,t.DIRECTION_HORIZONTAL=6,t.DIRECTION_VERTICAL=Ns,t.DIRECTION_NONE=1,t.DIRECTION_DOWN=zs,t.INPUT_START=1,t.INPUT_MOVE=2,t.INPUT_END=4,t.INPUT_CANCEL=8,t.STATE_POSSIBLE=1,t.STATE_BEGAN=2,t.STATE_CHANGED=4,t.STATE_ENDED=8,t.STATE_RECOGNIZED=8,t.STATE_CANCELLED=16,t.STATE_FAILED=xa,t.Manager=Ra,t.Input=ea,t.TouchAction=Hs,t.TouchInput=ua,t.MouseInput=ya,t.PointerEventInput=aa,t.TouchMouseInput=ka,t.SingleTouchInput=qa,t.Recognizer=Sa,t.AttrRecognizer=Ma,t.Tap=Ta,t.Pan=Da,t.Swipe=Ia,t.Pinch=Ba,t.Rotate=za,t.Press=Na,t.on=Qs,t.off=Js,t.each=js,t.merge=Xa,t.extend=Ya,t.bindFn=Ka,t.assign=fs,t.inherit=Ga,t.bindFn=Ka,t.prefixed=bs,t.toArray=ha,t.inArray=ia,t.uniqueArray=la,t.splitStr=Zs,t.boolOrFn=Rs,t.hasParent=Ws,t.addEventListeners=Qs,t.removeEventListeners=Js,t.defaults=fs({},Aa,{preset:Fa}),t}();function Za(t,e){var i=zo(t);if(On){var n=On(t);e&&(n=mr(n).call(n,(function(e){return Mn(t,e).enumerable}))),i.push.apply(i,n)}return i}function Qa(t){for(var e=1;e<arguments.length;e++){var i,n=null!=arguments[e]?arguments[e]:{};if(e%2)Wo(i=Za(Object(n),!0)).call(i,(function(e){jn(t,e,n[e])}));else if(Dn)In(t,Dn(n));else{var o;Wo(o=Za(Object(n))).call(o,(function(e){zn(t,e,Mn(n,e))}))}}return t}function Ja(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return th(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return th(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function th(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}var eh=ko(\"DELETE\");function ih(t){for(var e,i=arguments.length,n=new Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];return nh.apply(void 0,Eo(e=[{},t]).call(e,n))}function nh(){var t=oh.apply(void 0,arguments);return sh(t),t}function oh(){for(var t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];if(e.length<2)return e[0];var n;if(e.length>2)return oh.apply(void 0,Eo(n=[nh(e[0],e[1])]).call(n,wo(Oo(e).call(e,2))));var o,r=e[0],s=e[1],a=Ja(Co(s));try{for(a.s();!(o=a.n()).done;){var h=o.value;Object.prototype.propertyIsEnumerable.call(s,h)&&(s[h]===eh?delete r[h]:null===r[h]||null===s[h]||\"object\"!==go(r[h])||\"object\"!==go(s[h])||So(r[h])||So(s[h])?r[h]=rh(s[h]):r[h]=oh(r[h],s[h]))}}catch(t){a.e(t)}finally{a.f()}return r}function rh(t){return So(t)?Io(t).call(t,(function(t){return rh(t)})):\"object\"===go(t)&&null!==t?oh({},t):t}function sh(t){for(var e=0,i=zo(t);e<i.length;e++){var n=i[e];t[n]===eh?delete t[n]:\"object\"===go(t[n])&&null!==t[n]&&sh(t[n])}}function ah(){for(var t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];return hh(e.length?e:[No()])}function hh(t){var e=function(){for(var t=lh(),e=t(\" \"),i=t(\" \"),n=t(\" \"),o=0;o<arguments.length;o++)(e-=t(o<0||arguments.length<=o?void 0:arguments[o]))<0&&(e+=1),(i-=t(o<0||arguments.length<=o?void 0:arguments[o]))<0&&(i+=1),(n-=t(o<0||arguments.length<=o?void 0:arguments[o]))<0&&(n+=1);return[e,i,n]}(t),i=uo(e,3),n=i[0],o=i[1],r=i[2],s=1,a=function(){var t=2091639*n+2.3283064365386963e-10*s;return n=o,o=r,r=t-(s=0|t)};return a.uint32=function(){return 4294967296*a()},a.fract53=function(){return a()+11102230246251565e-32*(2097152*a()|0)},a.algorithm=\"Alea\",a.seed=t,a.version=\"0.9\",a}function lh(){var t=4022871197;return function(e){for(var i=e.toString(),n=0;n<i.length;n++){var o=.02519603282416938*(t+=i.charCodeAt(n));o-=t=o>>>0,t=(o*=t)>>>0,t+=4294967296*(o-=t)}return 2.3283064365386963e-10*(t>>>0)}}var dh=\"undefined\"!=typeof window?window.Hammer||$a:function(){return{on:t=function(){},off:t,destroy:t,emit:t,get:function(){return{set:t}}};var t};function ch(t){var e,i=this;this._cleanupQueue=[],this.active=!1,this._dom={container:t,overlay:document.createElement(\"div\")},this._dom.overlay.classList.add(\"vis-overlay\"),this._dom.container.appendChild(this._dom.overlay),this._cleanupQueue.push((function(){i._dom.overlay.parentNode.removeChild(i._dom.overlay)}));var n=dh(this._dom.overlay);n.on(\"tap\",Vt(e=this._onTapOverlay).call(e,this)),this._cleanupQueue.push((function(){n.destroy()}));var o=[\"tap\",\"doubletap\",\"press\",\"pinch\",\"pan\",\"panstart\",\"panmove\",\"panend\"];Wo(o).call(o,(function(t){n.on(t,(function(t){t.srcEvent.stopPropagation()}))})),document&&document.body&&(this._onClick=function(e){(function(t,e){for(;t;){if(t===e)return!0;t=t.parentNode}return!1})(e.target,t)||i.deactivate()},document.body.addEventListener(\"click\",this._onClick),this._cleanupQueue.push((function(){document.body.removeEventListener(\"click\",i._onClick)}))),this._escListener=function(t){(\"key\"in t?\"Escape\"===t.key:27===t.keyCode)&&i.deactivate()}}Zt(ch.prototype),ch.current=null,ch.prototype.destroy=function(){var t,e;this.deactivate();var i,n=Ja(Xo(t=er(e=this._cleanupQueue).call(e,0)).call(t));try{for(n.s();!(i=n.n()).done;){(0,i.value)()}}catch(t){n.e(t)}finally{n.f()}},ch.prototype.activate=function(){ch.current&&ch.current.deactivate(),ch.current=this,this.active=!0,this._dom.overlay.style.display=\"none\",this._dom.container.classList.add(\"vis-active\"),this.emit(\"change\"),this.emit(\"activate\"),document.body.addEventListener(\"keydown\",this._escListener)},ch.prototype.deactivate=function(){this.active=!1,this._dom.overlay.style.display=\"block\",this._dom.container.classList.remove(\"vis-active\"),document.body.removeEventListener(\"keydown\",this._escListener),this.emit(\"change\"),this.emit(\"deactivate\")},ch.prototype._onTapOverlay=function(t){this.activate(),t.srcEvent.stopPropagation()};var uh=/^\\/?Date\\((-?\\d+)/i,fh=/^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i,ph=/^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i,vh=/^rgb\\( *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *\\)$/i,gh=/^rgba\\( *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *([01]|0?\\.\\d+) *\\)$/i;function yh(t){return t instanceof Number||\"number\"==typeof t}function mh(t){if(t)for(;!0===t.hasChildNodes();){var e=t.firstChild;e&&(mh(e),t.removeChild(e))}}function bh(t){return t instanceof String||\"string\"==typeof t}function wh(t){return\"object\"===go(t)&&null!==t}function kh(t,e,i,n){var o=!1;!0===n&&(o=null===e[i]&&void 0!==t[i]),o?delete t[i]:t[i]=e[i]}function _h(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];for(var n in t)if(void 0!==e[n])if(null===e[n]||\"object\"!==go(e[n]))kh(t,e,n,i);else{var o=t[n],r=e[n];wh(o)&&wh(r)&&_h(o,r,i)}}var xh=At;function Eh(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(So(i))throw new TypeError(\"Arrays are not supported by deepExtend\");for(var o=0;o<t.length;o++){var r=t[o];if(Object.prototype.hasOwnProperty.call(i,r))if(i[r]&&i[r].constructor===Object)void 0===e[r]&&(e[r]={}),e[r].constructor===Object?Ch(e[r],i[r],!1,n):kh(e,i,r,n);else{if(So(i[r]))throw new TypeError(\"Arrays are not supported by deepExtend\");kh(e,i,r,n)}}return e}function Oh(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(So(i))throw new TypeError(\"Arrays are not supported by deepExtend\");for(var o in i)if(Object.prototype.hasOwnProperty.call(i,o)&&!dr(t).call(t,o))if(i[o]&&i[o].constructor===Object)void 0===e[o]&&(e[o]={}),e[o].constructor===Object?Ch(e[o],i[o]):kh(e,i,o,n);else if(So(i[o])){e[o]=[];for(var r=0;r<i[o].length;r++)e[o].push(i[o][r])}else kh(e,i,o,n);return e}function Ch(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];for(var o in e)if(Object.prototype.hasOwnProperty.call(e,o)||!0===i)if(\"object\"===go(e[o])&&null!==e[o]&&fr(e[o])===Object.prototype)void 0===t[o]?t[o]=Ch({},e[o],i):\"object\"===go(t[o])&&null!==t[o]&&fr(t[o])===Object.prototype?Ch(t[o],e[o],i):kh(t,e,o,n);else if(So(e[o])){var r;t[o]=Oo(r=e[o]).call(r)}else kh(t,e,o,n);return t}function Sh(t,e){var i;return Eo(i=[]).call(i,wo(t),[e])}function Th(t){return Oo(t).call(t)}function Mh(t){return t.getBoundingClientRect().left}function Ph(t){return t.getBoundingClientRect().top}function Dh(t,e){if(So(t))for(var i=t.length,n=0;n<i;n++)e(t[n],n,t);else for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&e(t[o],o,t)}var Ih=_r;function Bh(t,e,i,n){var o;t.addEventListener?(void 0===n&&(n=!1),\"mousewheel\"===e&&dr(o=navigator.userAgent).call(o,\"Firefox\")&&(e=\"DOMMouseScroll\"),t.addEventListener(e,i,n)):t.attachEvent(\"on\"+e,i)}function zh(t,e,i,n){var o;t.removeEventListener?(void 0===n&&(n=!1),\"mousewheel\"===e&&dr(o=navigator.userAgent).call(o,\"Firefox\")&&(e=\"DOMMouseScroll\"),t.removeEventListener(e,i,n)):t.detachEvent(\"on\"+e,i)}var Nh={asBoolean:function(t,e){return\"function\"==typeof t&&(t=t()),null!=t?0!=t:e||null},asNumber:function(t,e){return\"function\"==typeof t&&(t=t()),null!=t?Number(t)||e||null:e||null},asString:function(t,e){return\"function\"==typeof t&&(t=t()),null!=t?String(t):e||null},asSize:function(t,e){return\"function\"==typeof t&&(t=t()),bh(t)?t:yh(t)?t+\"px\":e||null},asElement:function(t,e){return\"function\"==typeof t&&(t=t()),t||e||null}};function Ah(t){var e;switch(t.length){case 3:case 4:return(e=ph.exec(t))?{r:Br(e[1]+e[1],16),g:Br(e[2]+e[2],16),b:Br(e[3]+e[3],16)}:null;case 6:case 7:return(e=fh.exec(t))?{r:Br(e[1],16),g:Br(e[2],16),b:Br(e[3],16)}:null;default:return null}}function Fh(t,e){if(dr(t).call(t,\"rgba\"))return t;if(dr(t).call(t,\"rgb\")){var i=t.substr(Hr(t).call(t,\"(\")+1).replace(\")\",\"\").split(\",\");return\"rgba(\"+i[0]+\",\"+i[1]+\",\"+i[2]+\",\"+e+\")\"}var n=Ah(t);return null==n?t:\"rgba(\"+n.r+\",\"+n.g+\",\"+n.b+\",\"+e+\")\"}function jh(t,e,i){var n;return\"#\"+Oo(n=((1<<24)+(t<<16)+(e<<8)+i).toString(16)).call(n,1)}function Rh(t,e){if(bh(t)){var i=t;if(Xh(i)){var n,o=Io(n=i.substr(4).substr(0,i.length-5).split(\",\")).call(n,(function(t){return Br(t)}));i=jh(o[0],o[1],o[2])}if(!0===Yh(i)){var r=Uh(i),s={h:r.h,s:.8*r.s,v:Math.min(1,1.02*r.v)},a={h:r.h,s:Math.min(1,1.25*r.s),v:.8*r.v},h=Vh(a.h,a.s,a.v),l=Vh(s.h,s.s,s.v);return{background:i,border:h,highlight:{background:l,border:h},hover:{background:l,border:h}}}return{background:i,border:i,highlight:{background:i,border:i},hover:{background:i,border:i}}}return e?{background:t.background||e.background,border:t.border||e.border,highlight:bh(t.highlight)?{border:t.highlight,background:t.highlight}:{background:t.highlight&&t.highlight.background||e.highlight.background,border:t.highlight&&t.highlight.border||e.highlight.border},hover:bh(t.hover)?{border:t.hover,background:t.hover}:{border:t.hover&&t.hover.border||e.hover.border,background:t.hover&&t.hover.background||e.hover.background}}:{background:t.background||void 0,border:t.border||void 0,highlight:bh(t.highlight)?{border:t.highlight,background:t.highlight}:{background:t.highlight&&t.highlight.background||void 0,border:t.highlight&&t.highlight.border||void 0},hover:bh(t.hover)?{border:t.hover,background:t.hover}:{border:t.hover&&t.hover.border||void 0,background:t.hover&&t.hover.background||void 0}}}function Lh(t,e,i){t/=255,e/=255,i/=255;var n=Math.min(t,Math.min(e,i)),o=Math.max(t,Math.max(e,i));return n===o?{h:0,s:0,v:n}:{h:60*((t===n?3:i===n?1:5)-(t===n?e-i:i===n?t-e:i-t)/(o-n))/360,s:(o-n)/o,v:o}}var Hh=function(t){var e,i={};return Wo(e=t.split(\";\")).call(e,(function(t){if(\"\"!=Ur(t).call(t)){var e,n,o=t.split(\":\"),r=Ur(e=o[0]).call(e),s=Ur(n=o[1]).call(n);i[r]=s}})),i},Wh=function(t){var e;return Io(e=zo(t)).call(e,(function(e){return e+\": \"+t[e]})).join(\"; \")};function qh(t,e,i){var n,o,r,s=Math.floor(6*t),a=6*t-s,h=i*(1-e),l=i*(1-a*e),d=i*(1-(1-a)*e);switch(s%6){case 0:n=i,o=d,r=h;break;case 1:n=l,o=i,r=h;break;case 2:n=h,o=i,r=d;break;case 3:n=h,o=l,r=i;break;case 4:n=d,o=h,r=i;break;case 5:n=i,o=h,r=l}return{r:Math.floor(255*n),g:Math.floor(255*o),b:Math.floor(255*r)}}function Vh(t,e,i){var n=qh(t,e,i);return jh(n.r,n.g,n.b)}function Uh(t){var e=Ah(t);if(!e)throw new TypeError(\"'\".concat(t,\"' is not a valid color.\"));return Lh(e.r,e.g,e.b)}function Yh(t){return/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(t)}function Xh(t){return vh.test(t)}function Gh(t){return gh.test(t)}function Kh(t){if(null===t||\"object\"!==go(t))return null;if(t instanceof Element)return t;var e=Gr(t);for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&\"object\"==go(t[i])&&(e[i]=Kh(t[i]));return e}function $h(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},o=function(t){return null!=t},r=function(t){return null!==t&&\"object\"===go(t)},s=function(t){for(var e in t)if(Object.prototype.hasOwnProperty.call(t,e))return!1;return!0};if(!r(t))throw new Error(\"Parameter mergeTarget must be an object\");if(!r(e))throw new Error(\"Parameter options must be an object\");if(!o(i))throw new Error(\"Parameter option must have a value\");if(!r(n))throw new Error(\"Parameter globalOptions must be an object\");var a=function(t,e,i){r(t[i])||(t[i]={});var n=e[i],o=t[i];for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(o[s]=n[s])},h=e[i],l=r(n)&&!s(n),d=l?n[i]:void 0,c=d?d.enabled:void 0;if(void 0!==h){if(\"boolean\"==typeof h)return r(t[i])||(t[i]={}),void(t[i].enabled=h);if(null===h&&!r(t[i])){if(!o(d))return;t[i]=Gr(d)}if(r(h)){var u=!0;void 0!==h.enabled?u=h.enabled:void 0!==c&&(u=d.enabled),a(t,e,i),t[i].enabled=u}}}var Zh={linear:function(t){return t},easeInQuad:function(t){return t*t},easeOutQuad:function(t){return t*(2-t)},easeInOutQuad:function(t){return t<.5?2*t*t:(4-2*t)*t-1},easeInCubic:function(t){return t*t*t},easeOutCubic:function(t){return--t*t*t+1},easeInOutCubic:function(t){return t<.5?4*t*t*t:(t-1)*(2*t-2)*(2*t-2)+1},easeInQuart:function(t){return t*t*t*t},easeOutQuart:function(t){return 1- --t*t*t*t},easeInOutQuart:function(t){return t<.5?8*t*t*t*t:1-8*--t*t*t*t},easeInQuint:function(t){return t*t*t*t*t},easeOutQuint:function(t){return 1+--t*t*t*t*t},easeInOutQuint:function(t){return t<.5?16*t*t*t*t*t:1+16*--t*t*t*t*t}};function Qh(t,e){var i;So(e)||(e=[e]);var n,o=Ja(t);try{for(o.s();!(n=o.n()).done;){var r=n.value;if(r){i=r[e[0]];for(var s=1;s<e.length;s++)i&&(i=i[e[s]]);if(void 0!==i)break}}}catch(t){o.e(t)}finally{o.f()}return i}var Jh={black:\"#000000\",navy:\"#000080\",darkblue:\"#00008B\",mediumblue:\"#0000CD\",blue:\"#0000FF\",darkgreen:\"#006400\",green:\"#008000\",teal:\"#008080\",darkcyan:\"#008B8B\",deepskyblue:\"#00BFFF\",darkturquoise:\"#00CED1\",mediumspringgreen:\"#00FA9A\",lime:\"#00FF00\",springgreen:\"#00FF7F\",aqua:\"#00FFFF\",cyan:\"#00FFFF\",midnightblue:\"#191970\",dodgerblue:\"#1E90FF\",lightseagreen:\"#20B2AA\",forestgreen:\"#228B22\",seagreen:\"#2E8B57\",darkslategray:\"#2F4F4F\",limegreen:\"#32CD32\",mediumseagreen:\"#3CB371\",turquoise:\"#40E0D0\",royalblue:\"#4169E1\",steelblue:\"#4682B4\",darkslateblue:\"#483D8B\",mediumturquoise:\"#48D1CC\",indigo:\"#4B0082\",darkolivegreen:\"#556B2F\",cadetblue:\"#5F9EA0\",cornflowerblue:\"#6495ED\",mediumaquamarine:\"#66CDAA\",dimgray:\"#696969\",slateblue:\"#6A5ACD\",olivedrab:\"#6B8E23\",slategray:\"#708090\",lightslategray:\"#778899\",mediumslateblue:\"#7B68EE\",lawngreen:\"#7CFC00\",chartreuse:\"#7FFF00\",aquamarine:\"#7FFFD4\",maroon:\"#800000\",purple:\"#800080\",olive:\"#808000\",gray:\"#808080\",skyblue:\"#87CEEB\",lightskyblue:\"#87CEFA\",blueviolet:\"#8A2BE2\",darkred:\"#8B0000\",darkmagenta:\"#8B008B\",saddlebrown:\"#8B4513\",darkseagreen:\"#8FBC8F\",lightgreen:\"#90EE90\",mediumpurple:\"#9370D8\",darkviolet:\"#9400D3\",palegreen:\"#98FB98\",darkorchid:\"#9932CC\",yellowgreen:\"#9ACD32\",sienna:\"#A0522D\",brown:\"#A52A2A\",darkgray:\"#A9A9A9\",lightblue:\"#ADD8E6\",greenyellow:\"#ADFF2F\",paleturquoise:\"#AFEEEE\",lightsteelblue:\"#B0C4DE\",powderblue:\"#B0E0E6\",firebrick:\"#B22222\",darkgoldenrod:\"#B8860B\",mediumorchid:\"#BA55D3\",rosybrown:\"#BC8F8F\",darkkhaki:\"#BDB76B\",silver:\"#C0C0C0\",mediumvioletred:\"#C71585\",indianred:\"#CD5C5C\",peru:\"#CD853F\",chocolate:\"#D2691E\",tan:\"#D2B48C\",lightgrey:\"#D3D3D3\",palevioletred:\"#D87093\",thistle:\"#D8BFD8\",orchid:\"#DA70D6\",goldenrod:\"#DAA520\",crimson:\"#DC143C\",gainsboro:\"#DCDCDC\",plum:\"#DDA0DD\",burlywood:\"#DEB887\",lightcyan:\"#E0FFFF\",lavender:\"#E6E6FA\",darksalmon:\"#E9967A\",violet:\"#EE82EE\",palegoldenrod:\"#EEE8AA\",lightcoral:\"#F08080\",khaki:\"#F0E68C\",aliceblue:\"#F0F8FF\",honeydew:\"#F0FFF0\",azure:\"#F0FFFF\",sandybrown:\"#F4A460\",wheat:\"#F5DEB3\",beige:\"#F5F5DC\",whitesmoke:\"#F5F5F5\",mintcream:\"#F5FFFA\",ghostwhite:\"#F8F8FF\",salmon:\"#FA8072\",antiquewhite:\"#FAEBD7\",linen:\"#FAF0E6\",lightgoldenrodyellow:\"#FAFAD2\",oldlace:\"#FDF5E6\",red:\"#FF0000\",fuchsia:\"#FF00FF\",magenta:\"#FF00FF\",deeppink:\"#FF1493\",orangered:\"#FF4500\",tomato:\"#FF6347\",hotpink:\"#FF69B4\",coral:\"#FF7F50\",darkorange:\"#FF8C00\",lightsalmon:\"#FFA07A\",orange:\"#FFA500\",lightpink:\"#FFB6C1\",pink:\"#FFC0CB\",gold:\"#FFD700\",peachpuff:\"#FFDAB9\",navajowhite:\"#FFDEAD\",moccasin:\"#FFE4B5\",bisque:\"#FFE4C4\",mistyrose:\"#FFE4E1\",blanchedalmond:\"#FFEBCD\",papayawhip:\"#FFEFD5\",lavenderblush:\"#FFF0F5\",seashell:\"#FFF5EE\",cornsilk:\"#FFF8DC\",lemonchiffon:\"#FFFACD\",floralwhite:\"#FFFAF0\",snow:\"#FFFAFA\",yellow:\"#FFFF00\",lightyellow:\"#FFFFE0\",ivory:\"#FFFFF0\",white:\"#FFFFFF\"},tl=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;Nn(this,t),this.pixelRatio=e,this.generated=!1,this.centerCoordinates={x:144.5,y:144.5},this.r=289*.49,this.color={r:255,g:255,b:255,a:1},this.hueCircle=void 0,this.initialColor={r:255,g:255,b:255,a:1},this.previousColor=void 0,this.applied=!1,this.updateCallback=function(){},this.closeCallback=function(){},this._create()}return Fn(t,[{key:\"insertTo\",value:function(t){void 0!==this.hammer&&(this.hammer.destroy(),this.hammer=void 0),this.container=t,this.container.appendChild(this.frame),this._bindHammer(),this._setSize()}},{key:\"setUpdateCallback\",value:function(t){if(\"function\"!=typeof t)throw new Error(\"Function attempted to set as colorPicker update callback is not a function.\");this.updateCallback=t}},{key:\"setCloseCallback\",value:function(t){if(\"function\"!=typeof t)throw new Error(\"Function attempted to set as colorPicker closing callback is not a function.\");this.closeCallback=t}},{key:\"_isColorString\",value:function(t){if(\"string\"==typeof t)return Jh[t]}},{key:\"setColor\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(\"none\"!==t){var i,n=this._isColorString(t);if(void 0!==n&&(t=n),!0===bh(t)){if(!0===Xh(t)){var o=t.substr(4).substr(0,t.length-5).split(\",\");i={r:o[0],g:o[1],b:o[2],a:1}}else if(!0===Gh(t)){var r=t.substr(5).substr(0,t.length-6).split(\",\");i={r:r[0],g:r[1],b:r[2],a:r[3]}}else if(!0===Yh(t)){var s=Ah(t);i={r:s.r,g:s.g,b:s.b,a:1}}}else if(t instanceof Object&&void 0!==t.r&&void 0!==t.g&&void 0!==t.b){var a=void 0!==t.a?t.a:\"1.0\";i={r:t.r,g:t.g,b:t.b,a:a}}if(void 0===i)throw new Error(\"Unknown color passed to the colorPicker. Supported are strings: rgb, hex, rgba. Object: rgb ({r:r,g:g,b:b,[a:a]}). Supplied: \"+es(t));this._setColor(i,e)}}},{key:\"show\",value:function(){void 0!==this.closeCallback&&(this.closeCallback(),this.closeCallback=void 0),this.applied=!1,this.frame.style.display=\"block\",this._generateHueCircle()}},{key:\"_hide\",value:function(){var t=this,e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];!0===e&&(this.previousColor=At({},this.color)),!0===this.applied&&this.updateCallback(this.initialColor),this.frame.style.display=\"none\",rs((function(){void 0!==t.closeCallback&&(t.closeCallback(),t.closeCallback=void 0)}),0)}},{key:\"_save\",value:function(){this.updateCallback(this.color),this.applied=!1,this._hide()}},{key:\"_apply\",value:function(){this.applied=!0,this.updateCallback(this.color),this._updatePicker(this.color)}},{key:\"_loadLast\",value:function(){void 0!==this.previousColor?this.setColor(this.previousColor,!1):alert(\"There is no last color to load...\")}},{key:\"_setColor\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];!0===e&&(this.initialColor=At({},t)),this.color=t;var i=Lh(t.r,t.g,t.b),n=2*Math.PI,o=this.r*i.s,r=this.centerCoordinates.x+o*Math.sin(n*i.h),s=this.centerCoordinates.y+o*Math.cos(n*i.h);this.colorPickerSelector.style.left=r-.5*this.colorPickerSelector.clientWidth+\"px\",this.colorPickerSelector.style.top=s-.5*this.colorPickerSelector.clientHeight+\"px\",this._updatePicker(t)}},{key:\"_setOpacity\",value:function(t){this.color.a=t/100,this._updatePicker(this.color)}},{key:\"_setBrightness\",value:function(t){var e=Lh(this.color.r,this.color.g,this.color.b);e.v=t/100;var i=qh(e.h,e.s,e.v);i.a=this.color.a,this.color=i,this._updatePicker()}},{key:\"_updatePicker\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.color,e=Lh(t.r,t.g,t.b),i=this.colorPickerCanvas.getContext(\"2d\");void 0===this.pixelRation&&(this.pixelRatio=(window.devicePixelRatio||1)/(i.webkitBackingStorePixelRatio||i.mozBackingStorePixelRatio||i.msBackingStorePixelRatio||i.oBackingStorePixelRatio||i.backingStorePixelRatio||1)),i.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0);var n=this.colorPickerCanvas.clientWidth,o=this.colorPickerCanvas.clientHeight;i.clearRect(0,0,n,o),i.putImageData(this.hueCircle,0,0),i.fillStyle=\"rgba(0,0,0,\"+(1-e.v)+\")\",i.circle(this.centerCoordinates.x,this.centerCoordinates.y,this.r),hs(i).call(i),this.brightnessRange.value=100*e.v,this.opacityRange.value=100*t.a,this.initialColorDiv.style.backgroundColor=\"rgba(\"+this.initialColor.r+\",\"+this.initialColor.g+\",\"+this.initialColor.b+\",\"+this.initialColor.a+\")\",this.newColorDiv.style.backgroundColor=\"rgba(\"+this.color.r+\",\"+this.color.g+\",\"+this.color.b+\",\"+this.color.a+\")\"}},{key:\"_setSize\",value:function(){this.colorPickerCanvas.style.width=\"100%\",this.colorPickerCanvas.style.height=\"100%\",this.colorPickerCanvas.width=289*this.pixelRatio,this.colorPickerCanvas.height=289*this.pixelRatio}},{key:\"_create\",value:function(){var t,e,i,n;if(this.frame=document.createElement(\"div\"),this.frame.className=\"vis-color-picker\",this.colorPickerDiv=document.createElement(\"div\"),this.colorPickerSelector=document.createElement(\"div\"),this.colorPickerSelector.className=\"vis-selector\",this.colorPickerDiv.appendChild(this.colorPickerSelector),this.colorPickerCanvas=document.createElement(\"canvas\"),this.colorPickerDiv.appendChild(this.colorPickerCanvas),this.colorPickerCanvas.getContext){var o=this.colorPickerCanvas.getContext(\"2d\");this.pixelRatio=(window.devicePixelRatio||1)/(o.webkitBackingStorePixelRatio||o.mozBackingStorePixelRatio||o.msBackingStorePixelRatio||o.oBackingStorePixelRatio||o.backingStorePixelRatio||1),this.colorPickerCanvas.getContext(\"2d\").setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0)}else{var r=document.createElement(\"DIV\");r.style.color=\"red\",r.style.fontWeight=\"bold\",r.style.padding=\"10px\",r.innerText=\"Error: your browser does not support HTML canvas\",this.colorPickerCanvas.appendChild(r)}this.colorPickerDiv.className=\"vis-color\",this.opacityDiv=document.createElement(\"div\"),this.opacityDiv.className=\"vis-opacity\",this.brightnessDiv=document.createElement(\"div\"),this.brightnessDiv.className=\"vis-brightness\",this.arrowDiv=document.createElement(\"div\"),this.arrowDiv.className=\"vis-arrow\",this.opacityRange=document.createElement(\"input\");try{this.opacityRange.type=\"range\",this.opacityRange.min=\"0\",this.opacityRange.max=\"100\"}catch(t){}this.opacityRange.value=\"100\",this.opacityRange.className=\"vis-range\",this.brightnessRange=document.createElement(\"input\");try{this.brightnessRange.type=\"range\",this.brightnessRange.min=\"0\",this.brightnessRange.max=\"100\"}catch(t){}this.brightnessRange.value=\"100\",this.brightnessRange.className=\"vis-range\",this.opacityDiv.appendChild(this.opacityRange),this.brightnessDiv.appendChild(this.brightnessRange);var s=this;this.opacityRange.onchange=function(){s._setOpacity(this.value)},this.opacityRange.oninput=function(){s._setOpacity(this.value)},this.brightnessRange.onchange=function(){s._setBrightness(this.value)},this.brightnessRange.oninput=function(){s._setBrightness(this.value)},this.brightnessLabel=document.createElement(\"div\"),this.brightnessLabel.className=\"vis-label vis-brightness\",this.brightnessLabel.innerText=\"brightness:\",this.opacityLabel=document.createElement(\"div\"),this.opacityLabel.className=\"vis-label vis-opacity\",this.opacityLabel.innerText=\"opacity:\",this.newColorDiv=document.createElement(\"div\"),this.newColorDiv.className=\"vis-new-color\",this.newColorDiv.innerText=\"new\",this.initialColorDiv=document.createElement(\"div\"),this.initialColorDiv.className=\"vis-initial-color\",this.initialColorDiv.innerText=\"initial\",this.cancelButton=document.createElement(\"div\"),this.cancelButton.className=\"vis-button vis-cancel\",this.cancelButton.innerText=\"cancel\",this.cancelButton.onclick=Vt(t=this._hide).call(t,this,!1),this.applyButton=document.createElement(\"div\"),this.applyButton.className=\"vis-button vis-apply\",this.applyButton.innerText=\"apply\",this.applyButton.onclick=Vt(e=this._apply).call(e,this),this.saveButton=document.createElement(\"div\"),this.saveButton.className=\"vis-button vis-save\",this.saveButton.innerText=\"save\",this.saveButton.onclick=Vt(i=this._save).call(i,this),this.loadButton=document.createElement(\"div\"),this.loadButton.className=\"vis-button vis-load\",this.loadButton.innerText=\"load last\",this.loadButton.onclick=Vt(n=this._loadLast).call(n,this),this.frame.appendChild(this.colorPickerDiv),this.frame.appendChild(this.arrowDiv),this.frame.appendChild(this.brightnessLabel),this.frame.appendChild(this.brightnessDiv),this.frame.appendChild(this.opacityLabel),this.frame.appendChild(this.opacityDiv),this.frame.appendChild(this.newColorDiv),this.frame.appendChild(this.initialColorDiv),this.frame.appendChild(this.cancelButton),this.frame.appendChild(this.applyButton),this.frame.appendChild(this.saveButton),this.frame.appendChild(this.loadButton)}},{key:\"_bindHammer\",value:function(){var t=this;this.drag={},this.pinch={},this.hammer=new dh(this.colorPickerCanvas),this.hammer.get(\"pinch\").set({enable:!0}),this.hammer.on(\"hammer.input\",(function(e){e.isFirst&&t._moveSelector(e)})),this.hammer.on(\"tap\",(function(e){t._moveSelector(e)})),this.hammer.on(\"panstart\",(function(e){t._moveSelector(e)})),this.hammer.on(\"panmove\",(function(e){t._moveSelector(e)})),this.hammer.on(\"panend\",(function(e){t._moveSelector(e)}))}},{key:\"_generateHueCircle\",value:function(){if(!1===this.generated){var t=this.colorPickerCanvas.getContext(\"2d\");void 0===this.pixelRation&&(this.pixelRatio=(window.devicePixelRatio||1)/(t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1)),t.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0);var e,i,n,o,r=this.colorPickerCanvas.clientWidth,s=this.colorPickerCanvas.clientHeight;t.clearRect(0,0,r,s),this.centerCoordinates={x:.5*r,y:.5*s},this.r=.49*r;var a,h=2*Math.PI/360,l=1/this.r;for(n=0;n<360;n++)for(o=0;o<this.r;o++)e=this.centerCoordinates.x+o*Math.sin(h*n),i=this.centerCoordinates.y+o*Math.cos(h*n),a=qh(.002777777777777778*n,o*l,1),t.fillStyle=\"rgb(\"+a.r+\",\"+a.g+\",\"+a.b+\")\",t.fillRect(e-.5,i-.5,2,2);t.strokeStyle=\"rgba(0,0,0,1)\",t.circle(this.centerCoordinates.x,this.centerCoordinates.y,this.r),t.stroke(),this.hueCircle=t.getImageData(0,0,r,s)}this.generated=!0}},{key:\"_moveSelector\",value:function(t){var e=this.colorPickerDiv.getBoundingClientRect(),i=t.center.x-e.left,n=t.center.y-e.top,o=.5*this.colorPickerDiv.clientHeight,r=.5*this.colorPickerDiv.clientWidth,s=i-r,a=n-o,h=Math.atan2(s,a),l=.98*Math.min(Math.sqrt(s*s+a*a),r),d=Math.cos(h)*l+o,c=Math.sin(h)*l+r;this.colorPickerSelector.style.top=d-.5*this.colorPickerSelector.clientHeight+\"px\",this.colorPickerSelector.style.left=c-.5*this.colorPickerSelector.clientWidth+\"px\";var u=h/(2*Math.PI);u=u<0?u+1:u;var f=l/this.r,p=Lh(this.color.r,this.color.g,this.color.b);p.h=u,p.s=f;var v=qh(p.h,p.s,p.v);v.a=this.color.a,this.color=v,this.initialColorDiv.style.backgroundColor=\"rgba(\"+this.initialColor.r+\",\"+this.initialColor.g+\",\"+this.initialColor.b+\",\"+this.initialColor.a+\")\",this.newColorDiv.style.backgroundColor=\"rgba(\"+this.color.r+\",\"+this.color.g+\",\"+this.color.b+\",\"+this.color.a+\")\"}}]),t}();function el(){for(var t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];if(e.length<1)throw new TypeError(\"Invalid arguments.\");if(1===e.length)return document.createTextNode(e[0]);var n=document.createElement(e[0]);return n.appendChild(el.apply(void 0,wo(Oo(e).call(e,1)))),n}var il,nl=function(){function t(e,i,n){var o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1,r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:function(){return!1};Nn(this,t),this.parent=e,this.changedOptions=[],this.container=i,this.allowCreation=!1,this.hideOption=r,this.options={},this.initialized=!1,this.popupCounter=0,this.defaultOptions={enabled:!1,filter:!0,container:void 0,showButton:!0},At(this.options,this.defaultOptions),this.configureOptions=n,this.moduleOptions={},this.domElements=[],this.popupDiv={},this.popupLimit=5,this.popupHistory={},this.colorPicker=new tl(o),this.wrapper=void 0}return Fn(t,[{key:\"setOptions\",value:function(t){if(void 0!==t){this.popupHistory={},this._removePopup();var e=!0;if(\"string\"==typeof t)this.options.filter=t;else if(So(t))this.options.filter=t.join();else if(\"object\"===go(t)){if(null==t)throw new TypeError(\"options cannot be null\");void 0!==t.container&&(this.options.container=t.container),void 0!==mr(t)&&(this.options.filter=mr(t)),void 0!==t.showButton&&(this.options.showButton=t.showButton),void 0!==t.enabled&&(e=t.enabled)}else\"boolean\"==typeof t?(this.options.filter=!0,e=t):\"function\"==typeof t&&(this.options.filter=t,e=!0);!1===mr(this.options)&&(e=!1),this.options.enabled=e}this._clean()}},{key:\"setModuleOptions\",value:function(t){this.moduleOptions=t,!0===this.options.enabled&&(this._clean(),void 0!==this.options.container&&(this.container=this.options.container),this._create())}},{key:\"_create\",value:function(){this._clean(),this.changedOptions=[];var t=mr(this.options),e=0,i=!1;for(var n in this.configureOptions)Object.prototype.hasOwnProperty.call(this.configureOptions,n)&&(this.allowCreation=!1,i=!1,\"function\"==typeof t?i=(i=t(n,[]))||this._handleObject(this.configureOptions[n],[n],!0):!0!==t&&-1===Hr(t).call(t,n)||(i=!0),!1!==i&&(this.allowCreation=!0,e>0&&this._makeItem([]),this._makeHeader(n),this._handleObject(this.configureOptions[n],[n])),e++);this._makeButton(),this._push()}},{key:\"_push\",value:function(){this.wrapper=document.createElement(\"div\"),this.wrapper.className=\"vis-configuration-wrapper\",this.container.appendChild(this.wrapper);for(var t=0;t<this.domElements.length;t++)this.wrapper.appendChild(this.domElements[t]);this._showPopupIfNeeded()}},{key:\"_clean\",value:function(){for(var t=0;t<this.domElements.length;t++)this.wrapper.removeChild(this.domElements[t]);void 0!==this.wrapper&&(this.container.removeChild(this.wrapper),this.wrapper=void 0),this.domElements=[],this._removePopup()}},{key:\"_getValue\",value:function(t){for(var e=this.moduleOptions,i=0;i<t.length;i++){if(void 0===e[t[i]]){e=void 0;break}e=e[t[i]]}return e}},{key:\"_makeItem\",value:function(t){if(!0===this.allowCreation){var e=document.createElement(\"div\");e.className=\"vis-configuration vis-config-item vis-config-s\"+t.length;for(var i=arguments.length,n=new Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];return Wo(n).call(n,(function(t){e.appendChild(t)})),this.domElements.push(e),this.domElements.length}return 0}},{key:\"_makeHeader\",value:function(t){var e=document.createElement(\"div\");e.className=\"vis-configuration vis-config-header\",e.innerText=t,this._makeItem([],e)}},{key:\"_makeLabel\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=document.createElement(\"div\");if(n.className=\"vis-configuration vis-config-label vis-config-s\"+e.length,!0===i){for(;n.firstChild;)n.removeChild(n.firstChild);n.appendChild(el(\"i\",\"b\",t))}else n.innerText=t+\":\";return n}},{key:\"_makeDropdown\",value:function(t,e,i){var n=document.createElement(\"select\");n.className=\"vis-configuration vis-config-select\";var o=0;void 0!==e&&-1!==Hr(t).call(t,e)&&(o=Hr(t).call(t,e));for(var r=0;r<t.length;r++){var s=document.createElement(\"option\");s.value=t[r],r===o&&(s.selected=\"selected\"),s.innerText=t[r],n.appendChild(s)}var a=this;n.onchange=function(){a._update(this.value,i)};var h=this._makeLabel(i[i.length-1],i);this._makeItem(i,h,n)}},{key:\"_makeRange\",value:function(t,e,i){var n=t[0],o=t[1],r=t[2],s=t[3],a=document.createElement(\"input\");a.className=\"vis-configuration vis-config-range\";try{a.type=\"range\",a.min=o,a.max=r}catch(t){}a.step=s;var h=\"\",l=0;if(void 0!==e){var d=1.2;e<0&&e*d<o?(a.min=Math.ceil(e*d),l=a.min,h=\"range increased\"):e/d<o&&(a.min=Math.ceil(e/d),l=a.min,h=\"range increased\"),e*d>r&&1!==r&&(a.max=Math.ceil(e*d),l=a.max,h=\"range increased\"),a.value=e}else a.value=n;var c=document.createElement(\"input\");c.className=\"vis-configuration vis-config-rangeinput\",c.value=a.value;var u=this;a.onchange=function(){c.value=this.value,u._update(Number(this.value),i)},a.oninput=function(){c.value=this.value};var f=this._makeLabel(i[i.length-1],i),p=this._makeItem(i,f,a,c);\"\"!==h&&this.popupHistory[p]!==l&&(this.popupHistory[p]=l,this._setupPopup(h,p))}},{key:\"_makeButton\",value:function(){var t=this;if(!0===this.options.showButton){var e=document.createElement(\"div\");e.className=\"vis-configuration vis-config-button\",e.innerText=\"generate options\",e.onclick=function(){t._printOptions()},e.onmouseover=function(){e.className=\"vis-configuration vis-config-button hover\"},e.onmouseout=function(){e.className=\"vis-configuration vis-config-button\"},this.optionsContainer=document.createElement(\"div\"),this.optionsContainer.className=\"vis-configuration vis-config-option-container\",this.domElements.push(this.optionsContainer),this.domElements.push(e)}}},{key:\"_setupPopup\",value:function(t,e){var i=this;if(!0===this.initialized&&!0===this.allowCreation&&this.popupCounter<this.popupLimit){var n=document.createElement(\"div\");n.id=\"vis-configuration-popup\",n.className=\"vis-configuration-popup\",n.innerText=t,n.onclick=function(){i._removePopup()},this.popupCounter+=1,this.popupDiv={html:n,index:e}}}},{key:\"_removePopup\",value:function(){void 0!==this.popupDiv.html&&(this.popupDiv.html.parentNode.removeChild(this.popupDiv.html),clearTimeout(this.popupDiv.hideTimeout),clearTimeout(this.popupDiv.deleteTimeout),this.popupDiv={})}},{key:\"_showPopupIfNeeded\",value:function(){var t=this;if(void 0!==this.popupDiv.html){var e=this.domElements[this.popupDiv.index].getBoundingClientRect();this.popupDiv.html.style.left=e.left+\"px\",this.popupDiv.html.style.top=e.top-30+\"px\",document.body.appendChild(this.popupDiv.html),this.popupDiv.hideTimeout=rs((function(){t.popupDiv.html.style.opacity=0}),1500),this.popupDiv.deleteTimeout=rs((function(){t._removePopup()}),1800)}}},{key:\"_makeCheckbox\",value:function(t,e,i){var n=document.createElement(\"input\");n.type=\"checkbox\",n.className=\"vis-configuration vis-config-checkbox\",n.checked=t,void 0!==e&&(n.checked=e,e!==t&&(\"object\"===go(t)?e!==t.enabled&&this.changedOptions.push({path:i,value:e}):this.changedOptions.push({path:i,value:e})));var o=this;n.onchange=function(){o._update(this.checked,i)};var r=this._makeLabel(i[i.length-1],i);this._makeItem(i,r,n)}},{key:\"_makeTextInput\",value:function(t,e,i){var n=document.createElement(\"input\");n.type=\"text\",n.className=\"vis-configuration vis-config-text\",n.value=e,e!==t&&this.changedOptions.push({path:i,value:e});var o=this;n.onchange=function(){o._update(this.value,i)};var r=this._makeLabel(i[i.length-1],i);this._makeItem(i,r,n)}},{key:\"_makeColorField\",value:function(t,e,i){var n=this,o=t[1],r=document.createElement(\"div\");\"none\"!==(e=void 0===e?o:e)?(r.className=\"vis-configuration vis-config-colorBlock\",r.style.backgroundColor=e):r.className=\"vis-configuration vis-config-colorBlock none\",e=void 0===e?o:e,r.onclick=function(){n._showColorPicker(e,r,i)};var s=this._makeLabel(i[i.length-1],i);this._makeItem(i,s,r)}},{key:\"_showColorPicker\",value:function(t,e,i){var n=this;e.onclick=function(){},this.colorPicker.insertTo(e),this.colorPicker.show(),this.colorPicker.setColor(t),this.colorPicker.setUpdateCallback((function(t){var o=\"rgba(\"+t.r+\",\"+t.g+\",\"+t.b+\",\"+t.a+\")\";e.style.backgroundColor=o,n._update(o,i)})),this.colorPicker.setCloseCallback((function(){e.onclick=function(){n._showColorPicker(t,e,i)}}))}},{key:\"_handleObject\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=!1,o=mr(this.options),r=!1;for(var s in t)if(Object.prototype.hasOwnProperty.call(t,s)){n=!0;var a=t[s],h=Sh(e,s);if(\"function\"==typeof o&&!1===(n=o(s,e))&&!So(a)&&\"string\"!=typeof a&&\"boolean\"!=typeof a&&a instanceof Object&&(this.allowCreation=!1,n=this._handleObject(a,h,!0),this.allowCreation=!1===i),!1!==n){r=!0;var l=this._getValue(h);if(So(a))this._handleArray(a,l,h);else if(\"string\"==typeof a)this._makeTextInput(a,l,h);else if(\"boolean\"==typeof a)this._makeCheckbox(a,l,h);else if(a instanceof Object){if(!this.hideOption(e,s,this.moduleOptions))if(void 0!==a.enabled){var d=Sh(h,\"enabled\"),c=this._getValue(d);if(!0===c){var u=this._makeLabel(s,h,!0);this._makeItem(h,u),r=this._handleObject(a,h)||r}else this._makeCheckbox(a,c,h)}else{var f=this._makeLabel(s,h,!0);this._makeItem(h,f),r=this._handleObject(a,h)||r}}else console.error(\"dont know how to handle\",a,s,h)}}return r}},{key:\"_handleArray\",value:function(t,e,i){\"string\"==typeof t[0]&&\"color\"===t[0]?(this._makeColorField(t,e,i),t[1]!==e&&this.changedOptions.push({path:i,value:e})):\"string\"==typeof t[0]?(this._makeDropdown(t,e,i),t[0]!==e&&this.changedOptions.push({path:i,value:e})):\"number\"==typeof t[0]&&(this._makeRange(t,e,i),t[0]!==e&&this.changedOptions.push({path:i,value:Number(e)}))}},{key:\"_update\",value:function(t,e){var i=this._constructOptions(t,e);this.parent.body&&this.parent.body.emitter&&this.parent.body.emitter.emit&&this.parent.body.emitter.emit(\"configChange\",i),this.initialized=!0,this.parent.setOptions(i)}},{key:\"_constructOptions\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=i;t=\"false\"!==(t=\"true\"===t||t)&&t;for(var o=0;o<e.length;o++)\"global\"!==e[o]&&(void 0===n[e[o]]&&(n[e[o]]={}),o!==e.length-1?n=n[e[o]]:n[e[o]]=t);return i}},{key:\"_printOptions\",value:function(){for(var t=this.getOptions();this.optionsContainer.firstChild;)this.optionsContainer.removeChild(this.optionsContainer.firstChild);this.optionsContainer.appendChild(el(\"pre\",\"const options = \"+es(t,null,2)))}},{key:\"getOptions\",value:function(){for(var t={},e=0;e<this.changedOptions.length;e++)this._constructOptions(this.changedOptions[e].value,this.changedOptions[e].path,t);return t}}]),t}(),ol=!1,rl=\"background: #FFeeee; color: #dd0000\",sl=ch,al=tl,hl=nl,ll=dh,dl=function(){function t(e,i){Nn(this,t),this.container=e,this.overflowMethod=i||\"cap\",this.x=0,this.y=0,this.padding=5,this.hidden=!1,this.frame=document.createElement(\"div\"),this.frame.className=\"vis-tooltip\",this.container.appendChild(this.frame)}return Fn(t,[{key:\"setPosition\",value:function(t,e){this.x=Br(t),this.y=Br(e)}},{key:\"setText\",value:function(t){if(t instanceof Element){for(;this.frame.firstChild;)this.frame.removeChild(this.frame.firstChild);this.frame.appendChild(t)}else this.frame.innerText=t}},{key:\"show\",value:function(t){if(void 0===t&&(t=!0),!0===t){var e=this.frame.clientHeight,i=this.frame.clientWidth,n=this.frame.parentNode.clientHeight,o=this.frame.parentNode.clientWidth,r=0,s=0;if(\"flip\"==this.overflowMethod){var a=!1,h=!0;this.y-e<this.padding&&(h=!1),this.x+i>o-this.padding&&(a=!0),r=a?this.x-i:this.x,s=h?this.y-e:this.y}else(s=this.y-e)+e+this.padding>n&&(s=n-e-this.padding),s<this.padding&&(s=this.padding),(r=this.x)+i+this.padding>o&&(r=o-i-this.padding),r<this.padding&&(r=this.padding);this.frame.style.left=r+\"px\",this.frame.style.top=s+\"px\",this.frame.style.visibility=\"visible\",this.hidden=!1}else this.hide()}},{key:\"hide\",value:function(){this.hidden=!0,this.frame.style.left=\"0\",this.frame.style.top=\"0\",this.frame.style.visibility=\"hidden\"}},{key:\"destroy\",value:function(){this.frame.parentNode.removeChild(this.frame)}}]),t}(),cl=rl,ul=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"validate\",value:function(e,i,n){ol=!1,il=i;var o=i;return void 0!==n&&(o=i[n]),t.parse(e,o,[]),ol}},{key:\"parse\",value:function(e,i,n){for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&t.check(o,e,i,n)}},{key:\"check\",value:function(e,i,n,o){if(void 0!==n[e]||void 0!==n.__any__){var r=e,s=!0;void 0===n[e]&&void 0!==n.__any__&&(r=\"__any__\",s=\"object\"===t.getType(i[e]));var a=n[r];s&&void 0!==a.__type__&&(a=a.__type__),t.checkFields(e,i,n,r,a,o)}else t.getSuggestion(e,n,o)}},{key:\"checkFields\",value:function(e,i,n,o,r,s){var a=function(i){console.error(\"%c\"+i+t.printLocation(s,e),rl)},h=t.getType(i[e]),l=r[h];void 0!==l?\"array\"===t.getType(l)&&-1===Hr(l).call(l,i[e])?(a('Invalid option detected in \"'+e+'\". Allowed values are:'+t.print(l)+' not \"'+i[e]+'\". '),ol=!0):\"object\"===h&&\"__any__\"!==o&&(s=Sh(s,e),t.parse(i[e],n[o],s)):void 0===r.any&&(a('Invalid type received for \"'+e+'\". Expected: '+t.print(zo(r))+\". Received [\"+h+'] \"'+i[e]+'\"'),ol=!0)}},{key:\"getType\",value:function(t){var e=go(t);return\"object\"===e?null===t?\"null\":t instanceof Boolean?\"boolean\":t instanceof Number?\"number\":t instanceof String?\"string\":So(t)?\"array\":t instanceof Date?\"date\":void 0!==t.nodeType?\"dom\":!0===t._isAMomentObject?\"moment\":\"object\":\"number\"===e?\"number\":\"boolean\"===e?\"boolean\":\"string\"===e?\"string\":void 0===e?\"undefined\":e}},{key:\"getSuggestion\",value:function(e,i,n){var o,r=t.findInOptions(e,i,n,!1),s=t.findInOptions(e,il,[],!0);o=void 0!==r.indexMatch?\" in \"+t.printLocation(r.path,e,\"\")+'Perhaps it was incomplete? Did you mean: \"'+r.indexMatch+'\"?\\n\\n':s.distance<=4&&r.distance>s.distance?\" in \"+t.printLocation(r.path,e,\"\")+\"Perhaps it was misplaced? Matching option found at: \"+t.printLocation(s.path,s.closestMatch,\"\"):r.distance<=8?'. Did you mean \"'+r.closestMatch+'\"?'+t.printLocation(r.path,e):\". Did you mean one of these: \"+t.print(zo(i))+t.printLocation(n,e),console.error('%cUnknown option detected: \"'+e+'\"'+o,rl),ol=!0}},{key:\"findInOptions\",value:function(e,i,n){var o=arguments.length>3&&void 0!==arguments[3]&&arguments[3],r=1e9,s=\"\",a=[],h=e.toLowerCase(),l=void 0;for(var d in i){var c=void 0;if(void 0!==i[d].__type__&&!0===o){var u=t.findInOptions(e,i[d],Sh(n,d));r>u.distance&&(s=u.closestMatch,a=u.path,r=u.distance,l=u.indexMatch)}else{var f;-1!==Hr(f=d.toLowerCase()).call(f,h)&&(l=d),r>(c=t.levenshteinDistance(e,d))&&(s=d,a=Th(n),r=c)}}return{closestMatch:s,path:a,distance:r,indexMatch:l}}},{key:\"printLocation\",value:function(t,e){for(var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:\"Problem value found at: \\n\",n=\"\\n\\n\"+i+\"options = {\\n\",o=0;o<t.length;o++){for(var r=0;r<o+1;r++)n+=\"  \";n+=t[o]+\": {\\n\"}for(var s=0;s<t.length+1;s++)n+=\"  \";n+=e+\"\\n\";for(var a=0;a<t.length+1;a++){for(var h=0;h<t.length-a;h++)n+=\"  \";n+=\"}\\n\"}return n+\"\\n\\n\"}},{key:\"print\",value:function(t){return es(t).replace(/(\")|(\\[)|(\\])|(,\"__type__\")/g,\"\").replace(/(,)/g,\", \")}},{key:\"levenshteinDistance\",value:function(t,e){if(0===t.length)return e.length;if(0===e.length)return t.length;var i,n,o=[];for(i=0;i<=e.length;i++)o[i]=[i];for(n=0;n<=t.length;n++)o[0][n]=n;for(i=1;i<=e.length;i++)for(n=1;n<=t.length;n++)e.charAt(i-1)==t.charAt(n-1)?o[i][n]=o[i-1][n-1]:o[i][n]=Math.min(o[i-1][n-1]+1,Math.min(o[i][n-1]+1,o[i-1][n]+1));return o[e.length][t.length]}}]),t}(),fl=Object.freeze({__proto__:null,Activator:sl,Alea:ah,ColorPicker:al,Configurator:hl,DELETE:eh,HSVToHex:Vh,HSVToRGB:qh,Hammer:ll,Popup:dl,RGBToHSV:Lh,RGBToHex:jh,VALIDATOR_PRINT_STYLE:cl,Validator:ul,addClassName:function(t,e){var i=t.className.split(\" \"),n=e.split(\" \");i=Eo(i).call(i,mr(n).call(n,(function(t){return!dr(i).call(i,t)}))),t.className=i.join(\" \")},addCssText:function(t,e){var i=Hh(t.style.cssText),n=Hh(e),o=Qa(Qa({},i),n);t.style.cssText=Wh(o)},addEventListener:Bh,binarySearchCustom:function(t,e,i,n){for(var o=0,r=0,s=t.length-1;r<=s&&o<1e4;){var a=Math.floor((r+s)/2),h=t[a],l=e(void 0===n?h[i]:h[i][n]);if(0==l)return a;-1==l?r=a+1:s=a-1,o++}return-1},binarySearchValue:function(t,e,i,n,o){var r,s,a,h,l=0,d=0,c=t.length-1;for(o=null!=o?o:function(t,e){return t==e?0:t<e?-1:1};d<=c&&l<1e4;){if(h=Math.floor(.5*(c+d)),r=t[Math.max(0,h-1)][i],s=t[h][i],a=t[Math.min(t.length-1,h+1)][i],0==o(s,e))return h;if(o(r,e)<0&&o(s,e)>0)return\"before\"==n?Math.max(0,h-1):h;if(o(s,e)<0&&o(a,e)>0)return\"before\"==n?h:Math.min(t.length-1,h+1);o(s,e)<0?d=h+1:c=h-1,l++}return-1},bridgeObject:Kh,copyAndExtendArray:Sh,copyArray:Th,deepExtend:Ch,deepObjectAssign:nh,easingFunctions:Zh,equalArray:function(t,e){if(t.length!==e.length)return!1;for(var i=0,n=t.length;i<n;i++)if(t[i]!=e[i])return!1;return!0},extend:xh,fillIfDefined:_h,forEach:Dh,getAbsoluteLeft:Mh,getAbsoluteRight:function(t){return t.getBoundingClientRect().right},getAbsoluteTop:Ph,getScrollBarWidth:function(){var t=document.createElement(\"p\");t.style.width=\"100%\",t.style.height=\"200px\";var e=document.createElement(\"div\");e.style.position=\"absolute\",e.style.top=\"0px\",e.style.left=\"0px\",e.style.visibility=\"hidden\",e.style.width=\"200px\",e.style.height=\"150px\",e.style.overflow=\"hidden\",e.appendChild(t),document.body.appendChild(e);var i=t.offsetWidth;e.style.overflow=\"scroll\";var n=t.offsetWidth;return i==n&&(n=e.clientWidth),document.body.removeChild(e),i-n},getTarget:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window.event,e=null;return t&&(t.target?e=t.target:t.srcElement&&(e=t.srcElement)),e instanceof Element&&(null==e.nodeType||3!=e.nodeType||(e=e.parentNode)instanceof Element)?e:null},getType:function(t){var e=go(t);return\"object\"===e?null===t?\"null\":t instanceof Boolean?\"Boolean\":t instanceof Number?\"Number\":t instanceof String?\"String\":So(t)?\"Array\":t instanceof Date?\"Date\":\"Object\":\"number\"===e?\"Number\":\"boolean\"===e?\"Boolean\":\"string\"===e?\"String\":void 0===e?\"undefined\":e},hasParent:function(t,e){for(var i=t;i;){if(i===e)return!0;if(!i.parentNode)return!1;i=i.parentNode}return!1},hexToHSV:Uh,hexToRGB:Ah,insertSort:function(t,e){for(var i=0;i<t.length;i++){var n=t[i],o=void 0;for(o=i;o>0&&e(n,t[o-1])<0;o--)t[o]=t[o-1];t[o]=n}return t},isDate:function(t){if(t instanceof Date)return!0;if(bh(t)){if(uh.exec(t))return!0;if(!isNaN(Date.parse(t)))return!0}return!1},isNumber:yh,isObject:wh,isString:bh,isValidHex:Yh,isValidRGB:Xh,isValidRGBA:Gh,mergeOptions:$h,option:Nh,overrideOpacity:Fh,parseColor:Rh,preventDefault:function(t){t||(t=window.event),t&&(t.preventDefault?t.preventDefault():t.returnValue=!1)},pureDeepObjectAssign:ih,recursiveDOMDelete:mh,removeClassName:function(t,e){var i=t.className.split(\" \"),n=e.split(\" \");i=mr(i).call(i,(function(t){return!dr(n).call(n,t)})),t.className=i.join(\" \")},removeCssText:function(t,e){var i=Hh(t.style.cssText),n=Hh(e);for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&delete i[o];t.style.cssText=Wh(i)},removeEventListener:zh,selectiveBridgeObject:function(t,e){if(null!==e&&\"object\"===go(e)){for(var i=Gr(e),n=0;n<t.length;n++)Object.prototype.hasOwnProperty.call(e,t[n])&&\"object\"==go(e[t[n]])&&(i[t[n]]=Kh(e[t[n]]));return i}return null},selectiveDeepExtend:Eh,selectiveExtend:function(t,e){if(!So(t))throw new Error(\"Array with property names expected as first argument\");for(var i=arguments.length,n=new Array(i>2?i-2:0),o=2;o<i;o++)n[o-2]=arguments[o];for(var r=0,s=n;r<s.length;r++)for(var a=s[r],h=0;h<t.length;h++){var l=t[h];a&&Object.prototype.hasOwnProperty.call(a,l)&&(e[l]=a[l])}return e},selectiveNotDeepExtend:Oh,throttle:function(t){var e=!1;return function(){e||(e=!0,requestAnimationFrame((function(){e=!1,t()})))}},toArray:Ih,topMost:Qh,updateProperty:function(t,e,i){return t[e]!==i&&(t[e]=i,!0)}});function pl(t){return _l=t,function(){var t={};xl=0,void(El=_l.charAt(0)),Nl(),\"strict\"===Ol&&(t.strict=!0,Nl());\"graph\"!==Ol&&\"digraph\"!==Ol||(t.type=Ol,Nl());Cl===bl&&(t.id=Ol,Nl());if(\"{\"!=Ol)throw Hl(\"Angle bracket { expected\");if(Nl(),Al(t),\"}\"!=Ol)throw Hl(\"Angle bracket } expected\");if(Nl(),\"\"!==Ol)throw Hl(\"End of file expected\");return Nl(),delete t.node,delete t.edge,delete t.graph,t}()}var vl={fontsize:\"font.size\",fontcolor:\"font.color\",labelfontcolor:\"font.color\",fontname:\"font.face\",color:[\"color.border\",\"color.background\"],fillcolor:\"color.background\",tooltip:\"title\",labeltooltip:\"title\"},gl=Gr(vl);gl.color=\"color.color\",gl.style=\"dashes\";var yl=0,ml=1,bl=2,wl=3,kl={\"{\":!0,\"}\":!0,\"[\":!0,\"]\":!0,\";\":!0,\"=\":!0,\",\":!0,\"->\":!0,\"--\":!0},_l=\"\",xl=0,El=\"\",Ol=\"\",Cl=yl;function Sl(){xl++,El=_l.charAt(xl)}function Tl(){return _l.charAt(xl+1)}function Ml(t){var e=t.charCodeAt(0);return e<47?35===e||46===e:e<59?e>47:e<91?e>64:e<96?95===e:e<123&&e>96}function Pl(t,e){if(t||(t={}),e)for(var i in e)e.hasOwnProperty(i)&&(t[i]=e[i]);return t}function Dl(t,e,i){for(var n=e.split(\".\"),o=t;n.length;){var r=n.shift();n.length?(o[r]||(o[r]={}),o=o[r]):o[r]=i}}function Il(t,e){for(var i,n,o=null,r=[t],s=t;s.parent;)r.push(s.parent),s=s.parent;if(s.nodes)for(i=0,n=s.nodes.length;i<n;i++)if(e.id===s.nodes[i].id){o=s.nodes[i];break}for(o||(o={id:e.id},t.node&&(o.attr=Pl(o.attr,t.node))),i=r.length-1;i>=0;i--){var a,h=r[i];h.nodes||(h.nodes=[]),-1===Hr(a=h.nodes).call(a,o)&&h.nodes.push(o)}e.attr&&(o.attr=Pl(o.attr,e.attr))}function Bl(t,e){if(t.edges||(t.edges=[]),t.edges.push(e),t.edge){var i=Pl({},t.edge);e.attr=Pl(i,e.attr)}}function zl(t,e,i,n,o){var r={from:e,to:i,type:n};return t.edge&&(r.attr=Pl({},t.edge)),r.attr=Pl(r.attr||{},o),null!=o&&o.hasOwnProperty(\"arrows\")&&null!=o.arrows&&(r.arrows={to:{enabled:!0,type:o.arrows.type}},o.arrows=null),r}function Nl(){for(Cl=yl,Ol=\"\";\" \"===El||\"\\t\"===El||\"\\n\"===El||\"\\r\"===El;)Sl();do{var t=!1;if(\"#\"===El){for(var e=xl-1;\" \"===_l.charAt(e)||\"\\t\"===_l.charAt(e);)e--;if(\"\\n\"===_l.charAt(e)||\"\"===_l.charAt(e)){for(;\"\"!=El&&\"\\n\"!=El;)Sl();t=!0}}if(\"/\"===El&&\"/\"===Tl()){for(;\"\"!=El&&\"\\n\"!=El;)Sl();t=!0}if(\"/\"===El&&\"*\"===Tl()){for(;\"\"!=El;){if(\"*\"===El&&\"/\"===Tl()){Sl(),Sl();break}Sl()}t=!0}for(;\" \"===El||\"\\t\"===El||\"\\n\"===El||\"\\r\"===El;)Sl()}while(t);if(\"\"!==El){var i=El+Tl();if(kl[i])return Cl=ml,Ol=i,Sl(),void Sl();if(kl[El])return Cl=ml,Ol=El,void Sl();if(Ml(El)||\"-\"===El){for(Ol+=El,Sl();Ml(El);)Ol+=El,Sl();return\"false\"===Ol?Ol=!1:\"true\"===Ol?Ol=!0:isNaN(Number(Ol))||(Ol=Number(Ol)),void(Cl=bl)}if('\"'===El){for(Sl();\"\"!=El&&('\"'!=El||'\"'===El&&'\"'===Tl());)'\"'===El?(Ol+=El,Sl()):\"\\\\\"===El&&\"n\"===Tl()?(Ol+=\"\\n\",Sl()):Ol+=El,Sl();if('\"'!=El)throw Hl('End of string \" expected');return Sl(),void(Cl=bl)}for(Cl=wl;\"\"!=El;)Ol+=El,Sl();throw new SyntaxError('Syntax error in part \"'+Wl(Ol,30)+'\"')}Cl=ml}function Al(t){for(;\"\"!==Ol&&\"}\"!=Ol;)Fl(t),\";\"===Ol&&Nl()}function Fl(t){var e=jl(t);if(e)Rl(t,e);else if(!function(t){if(\"node\"===Ol)return Nl(),t.node=Ll(),\"node\";if(\"edge\"===Ol)return Nl(),t.edge=Ll(),\"edge\";if(\"graph\"===Ol)return Nl(),t.graph=Ll(),\"graph\";return null}(t)){if(Cl!=bl)throw Hl(\"Identifier expected\");var i=Ol;if(Nl(),\"=\"===Ol){if(Nl(),Cl!=bl)throw Hl(\"Identifier expected\");t[i]=Ol,Nl()}else!function(t,e){var i={id:e},n=Ll();n&&(i.attr=n);Il(t,i),Rl(t,e)}(t,i)}}function jl(t){var e=null;if(\"subgraph\"===Ol&&((e={}).type=\"subgraph\",Nl(),Cl===bl&&(e.id=Ol,Nl())),\"{\"===Ol){if(Nl(),e||(e={}),e.parent=t,e.node=t.node,e.edge=t.edge,e.graph=t.graph,Al(e),\"}\"!=Ol)throw Hl(\"Angle bracket } expected\");Nl(),delete e.node,delete e.edge,delete e.graph,delete e.parent,t.subgraphs||(t.subgraphs=[]),t.subgraphs.push(e)}return e}function Rl(t,e){for(;\"->\"===Ol||\"--\"===Ol;){var i,n=Ol;Nl();var o=jl(t);if(o)i=o;else{if(Cl!=bl)throw Hl(\"Identifier or subgraph expected\");Il(t,{id:i=Ol}),Nl()}Bl(t,zl(t,e,i,n,Ll())),e=i}}function Ll(){for(var t,e,i=null,n={dashed:!0,solid:!1,dotted:[1,5]},o={dot:\"circle\",box:\"box\",crow:\"crow\",curve:\"curve\",icurve:\"inv_curve\",normal:\"triangle\",inv:\"inv_triangle\",diamond:\"diamond\",tee:\"bar\",vee:\"vee\"},r=new Array,s=new Array;\"[\"===Ol;){for(Nl(),i={};\"\"!==Ol&&\"]\"!=Ol;){if(Cl!=bl)throw Hl(\"Attribute name expected\");var a=Ol;if(Nl(),\"=\"!=Ol)throw Hl(\"Equal sign = expected\");if(Nl(),Cl!=bl)throw Hl(\"Attribute value expected\");var h=Ol;\"style\"===a&&(h=n[h]),\"arrowhead\"===a&&(a=\"arrows\",h={to:{enabled:!0,type:o[h]}}),\"arrowtail\"===a&&(a=\"arrows\",h={from:{enabled:!0,type:o[h]}}),r.push({attr:i,name:a,value:h}),s.push(a),Nl(),\",\"==Ol&&Nl()}if(\"]\"!=Ol)throw Hl(\"Bracket ] expected\");Nl()}if(dr(s).call(s,\"dir\")){var l={arrows:{}};for(t=0;t<r.length;t++)if(\"arrows\"===r[t].name)if(null!=r[t].value.to)l.arrows.to=t;else{if(null==r[t].value.from)throw Hl(\"Invalid value of arrows\");l.arrows.from=t}else\"dir\"===r[t].name&&(l.dir=t);var d,c,u=r[l.dir].value;if(!dr(s).call(s,\"arrows\"))if(\"both\"===u)r.push({attr:r[l.dir].attr,name:\"arrows\",value:{to:{enabled:!0}}}),l.arrows.to=r.length-1,r.push({attr:r[l.dir].attr,name:\"arrows\",value:{from:{enabled:!0}}}),l.arrows.from=r.length-1;else if(\"forward\"===u)r.push({attr:r[l.dir].attr,name:\"arrows\",value:{to:{enabled:!0}}}),l.arrows.to=r.length-1;else if(\"back\"===u)r.push({attr:r[l.dir].attr,name:\"arrows\",value:{from:{enabled:!0}}}),l.arrows.from=r.length-1;else{if(\"none\"!==u)throw Hl('Invalid dir type \"'+u+'\"');r.push({attr:r[l.dir].attr,name:\"arrows\",value:\"\"}),l.arrows.to=r.length-1}if(\"both\"===u)l.arrows.to&&l.arrows.from?(c=r[l.arrows.to].value.to.type,d=r[l.arrows.from].value.from.type,r[l.arrows.to]={attr:r[l.arrows.to].attr,name:r[l.arrows.to].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}},er(r).call(r,l.arrows.from,1)):l.arrows.to?(c=r[l.arrows.to].value.to.type,d=\"arrow\",r[l.arrows.to]={attr:r[l.arrows.to].attr,name:r[l.arrows.to].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}}):l.arrows.from&&(c=\"arrow\",d=r[l.arrows.from].value.from.type,r[l.arrows.from]={attr:r[l.arrows.from].attr,name:r[l.arrows.from].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}});else if(\"back\"===u)l.arrows.to&&l.arrows.from?(c=\"\",d=r[l.arrows.from].value.from.type,r[l.arrows.from]={attr:r[l.arrows.from].attr,name:r[l.arrows.from].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}}):l.arrows.to?(c=\"\",d=\"arrow\",l.arrows.from=l.arrows.to,r[l.arrows.from]={attr:r[l.arrows.from].attr,name:r[l.arrows.from].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}}):l.arrows.from&&(c=\"\",d=r[l.arrows.from].value.from.type,r[l.arrows.to]={attr:r[l.arrows.from].attr,name:r[l.arrows.from].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}}),r[l.arrows.from]={attr:r[l.arrows.from].attr,name:r[l.arrows.from].name,value:{from:{enabled:!0,type:r[l.arrows.from].value.from.type}}};else if(\"none\"===u){var f;r[f=l.arrows.to?l.arrows.to:l.arrows.from]={attr:r[f].attr,name:r[f].name,value:\"\"}}else{if(\"forward\"!==u)throw Hl('Invalid dir type \"'+u+'\"');l.arrows.to&&l.arrows.from||l.arrows.to?(c=r[l.arrows.to].value.to.type,d=\"\",r[l.arrows.to]={attr:r[l.arrows.to].attr,name:r[l.arrows.to].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}}):l.arrows.from&&(c=\"arrow\",d=\"\",l.arrows.to=l.arrows.from,r[l.arrows.to]={attr:r[l.arrows.to].attr,name:r[l.arrows.to].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}}),r[l.arrows.to]={attr:r[l.arrows.to].attr,name:r[l.arrows.to].name,value:{to:{enabled:!0,type:r[l.arrows.to].value.to.type}}}}er(r).call(r,l.dir,1)}if(dr(s).call(s,\"penwidth\")){var p=[];for(e=r.length,t=0;t<e;t++)\"width\"!==r[t].name&&(\"penwidth\"===r[t].name&&(r[t].name=\"width\"),p.push(r[t]));r=p}for(e=r.length,t=0;t<e;t++)Dl(r[t].attr,r[t].name,r[t].value);return i}function Hl(t){return new SyntaxError(t+', got \"'+Wl(Ol,30)+'\" (char '+xl+\")\")}function Wl(t,e){return t.length<=e?t:t.substr(0,27)+\"...\"}function ql(t,e,i){for(var n=e.split(\".\"),o=n.pop(),r=t,s=0;s<n.length;s++){var a=n[s];a in r||(r[a]={}),r=r[a]}return r[o]=i,t}function Vl(t,e){var i={};for(var n in t)if(t.hasOwnProperty(n)){var o=e[n];So(o)?Wo(o).call(o,(function(e){ql(i,e,t[n])})):ql(i,\"string\"==typeof o?o:n,t[n])}return i}function Ul(t){var e,i=pl(t),n={nodes:[],edges:[],options:{}};i.nodes&&Wo(e=i.nodes).call(e,(function(t){var e={id:t.id,label:String(t.label||t.id)};Pl(e,Vl(t.attr,vl)),e.image&&(e.shape=\"image\"),n.nodes.push(e)}));if(i.edges){var o,r=function(t){var e={from:t.from,to:t.to};return Pl(e,Vl(t.attr,gl)),null==e.arrows&&\"->\"===t.type&&(e.arrows=\"to\"),e};Wo(o=i.edges).call(o,(function(t){var e,i,o,s,a,h,l;(e=t.from instanceof Object?t.from.nodes:{id:t.from},i=t.to instanceof Object?t.to.nodes:{id:t.to},t.from instanceof Object&&t.from.edges)&&Wo(o=t.from.edges).call(o,(function(t){var e=r(t);n.edges.push(e)}));(a=i,h=function(e,i){var o=zl(n,e.id,i.id,t.type,t.attr),s=r(o);n.edges.push(s)},So(s=e)?Wo(s).call(s,(function(t){So(a)?Wo(a).call(a,(function(e){h(t,e)})):h(t,a)})):So(a)?Wo(a).call(a,(function(t){h(s,t)})):h(s,a),t.to instanceof Object&&t.to.edges)&&Wo(l=t.to.edges).call(l,(function(t){var e=r(t);n.edges.push(e)}))}))}return i.attr&&(n.options=i.attr),n}var Yl=Object.freeze({__proto__:null,parseDOT:pl,DOTToGraph:Ul});function Xl(t,e){var i,n={edges:{inheritColor:!1},nodes:{fixed:!1,parseColor:!1}};null!=e&&(null!=e.fixed&&(n.nodes.fixed=e.fixed),null!=e.parseColor&&(n.nodes.parseColor=e.parseColor),null!=e.inheritColor&&(n.edges.inheritColor=e.inheritColor));var o=t.edges,r=Io(o).call(o,(function(t){var e={from:t.source,id:t.id,to:t.target};return null!=t.attributes&&(e.attributes=t.attributes),null!=t.label&&(e.label=t.label),null!=t.attributes&&null!=t.attributes.title&&(e.title=t.attributes.title),\"Directed\"===t.type&&(e.arrows=\"to\"),t.color&&!1===n.edges.inheritColor&&(e.color=t.color),e}));return{nodes:Io(i=t.nodes).call(i,(function(t){var e={id:t.id,fixed:n.nodes.fixed&&null!=t.x&&null!=t.y};return null!=t.attributes&&(e.attributes=t.attributes),null!=t.label&&(e.label=t.label),null!=t.size&&(e.size=t.size),null!=t.attributes&&null!=t.attributes.title&&(e.title=t.attributes.title),null!=t.title&&(e.title=t.title),null!=t.x&&(e.x=t.x),null!=t.y&&(e.y=t.y),null!=t.color&&(!0===n.nodes.parseColor?e.color=t.color:e.color={background:t.color,border:t.color,highlight:{background:t.color,border:t.color},hover:{background:t.color,border:t.color}}),e})),edges:r}}var Gl=Object.freeze({__proto__:null,parseGephi:Xl}),Kl=Object.freeze({__proto__:null,en:{addDescription:\"Click in an empty space to place a new node.\",addEdge:\"Add Edge\",addNode:\"Add Node\",back:\"Back\",close:\"Close\",createEdgeError:\"Cannot link edges to a cluster.\",del:\"Delete selected\",deleteClusterError:\"Clusters cannot be deleted.\",edgeDescription:\"Click on a node and drag the edge to another node to connect them.\",edit:\"Edit\",editClusterError:\"Clusters cannot be edited.\",editEdge:\"Edit Edge\",editEdgeDescription:\"Click on the control points and drag them to a node to connect to it.\",editNode:\"Edit Node\"},de:{addDescription:\"Klicke auf eine freie Stelle, um einen neuen Knoten zu plazieren.\",addEdge:\"Kante hinzufügen\",addNode:\"Knoten hinzufügen\",back:\"Zurück\",close:\"Schließen\",createEdgeError:\"Es ist nicht möglich, Kanten mit Clustern zu verbinden.\",del:\"Lösche Auswahl\",deleteClusterError:\"Cluster können nicht gelöscht werden.\",edgeDescription:\"Klicke auf einen Knoten und ziehe die Kante zu einem anderen Knoten, um diese zu verbinden.\",edit:\"Editieren\",editClusterError:\"Cluster können nicht editiert werden.\",editEdge:\"Kante editieren\",editEdgeDescription:\"Klicke auf die Verbindungspunkte und ziehe diese auf einen Knoten, um sie zu verbinden.\",editNode:\"Knoten editieren\"},es:{addDescription:\"Haga clic en un lugar vacío para colocar un nuevo nodo.\",addEdge:\"Añadir arista\",addNode:\"Añadir nodo\",back:\"Atrás\",close:\"Cerrar\",createEdgeError:\"No se puede conectar una arista a un grupo.\",del:\"Eliminar selección\",deleteClusterError:\"No es posible eliminar grupos.\",edgeDescription:\"Haga clic en un nodo y arrastre la arista hacia otro nodo para conectarlos.\",edit:\"Editar\",editClusterError:\"No es posible editar grupos.\",editEdge:\"Editar arista\",editEdgeDescription:\"Haga clic en un punto de control y arrastrelo a un nodo para conectarlo.\",editNode:\"Editar nodo\"},it:{addDescription:\"Clicca per aggiungere un nuovo nodo\",addEdge:\"Aggiungi un vertice\",addNode:\"Aggiungi un nodo\",back:\"Indietro\",close:\"Chiudere\",createEdgeError:\"Non si possono collegare vertici ad un cluster\",del:\"Cancella la selezione\",deleteClusterError:\"I cluster non possono essere cancellati\",edgeDescription:\"Clicca su un nodo e trascinalo ad un altro nodo per connetterli.\",edit:\"Modifica\",editClusterError:\"I clusters non possono essere modificati.\",editEdge:\"Modifica il vertice\",editEdgeDescription:\"Clicca sui Punti di controllo e trascinali ad un nodo per connetterli.\",editNode:\"Modifica il nodo\"},nl:{addDescription:\"Klik op een leeg gebied om een nieuwe node te maken.\",addEdge:\"Link toevoegen\",addNode:\"Node toevoegen\",back:\"Terug\",close:\"Sluiten\",createEdgeError:\"Kan geen link maken naar een cluster.\",del:\"Selectie verwijderen\",deleteClusterError:\"Clusters kunnen niet worden verwijderd.\",edgeDescription:\"Klik op een node en sleep de link naar een andere node om ze te verbinden.\",edit:\"Wijzigen\",editClusterError:\"Clusters kunnen niet worden aangepast.\",editEdge:\"Link wijzigen\",editEdgeDescription:\"Klik op de verbindingspunten en sleep ze naar een node om daarmee te verbinden.\",editNode:\"Node wijzigen\"},pt:{addDescription:\"Clique em um espaço em branco para adicionar um novo nó\",addEdge:\"Adicionar aresta\",addNode:\"Adicionar nó\",back:\"Voltar\",close:\"Fechar\",createEdgeError:\"Não foi possível linkar arestas a um cluster.\",del:\"Remover selecionado\",deleteClusterError:\"Clusters não puderam ser removidos.\",edgeDescription:\"Clique em um nó e arraste a aresta até outro nó para conectá-los\",edit:\"Editar\",editClusterError:\"Clusters não puderam ser editados.\",editEdge:\"Editar aresta\",editEdgeDescription:\"Clique nos pontos de controle e os arraste para um nó para conectá-los\",editNode:\"Editar nó\"},ru:{addDescription:\"Кликните в свободное место, чтобы добавить новый узел.\",addEdge:\"Добавить ребро\",addNode:\"Добавить узел\",back:\"Назад\",close:\"Закрывать\",createEdgeError:\"Невозможно соединить ребра в кластер.\",del:\"Удалить выбранное\",deleteClusterError:\"Кластеры не могут быть удалены\",edgeDescription:\"Кликните на узел и протяните ребро к другому узлу, чтобы соединить их.\",edit:\"Редактировать\",editClusterError:\"Кластеры недоступны для редактирования.\",editEdge:\"Редактировать ребро\",editEdgeDescription:\"Кликните на контрольные точки и перетащите их в узел, чтобы подключиться к нему.\",editNode:\"Редактировать узел\"},cn:{addDescription:\"单击空白处放置新节点。\",addEdge:\"添加连接线\",addNode:\"添加节点\",back:\"返回\",close:\"關閉\",createEdgeError:\"无法将连接线连接到群集。\",del:\"删除选定\",deleteClusterError:\"无法删除群集。\",edgeDescription:\"单击某个节点并将该连接线拖动到另一个节点以连接它们。\",edit:\"编辑\",editClusterError:\"无法编辑群集。\",editEdge:\"编辑连接线\",editEdgeDescription:\"单击控制节点并将它们拖到节点上连接。\",editNode:\"编辑节点\"},uk:{addDescription:\"Kлікніть на вільне місце, щоб додати новий вузол.\",addEdge:\"Додати край\",addNode:\"Додати вузол\",back:\"Назад\",close:\"Закрити\",createEdgeError:\"Не можливо об'єднати краї в групу.\",del:\"Видалити обране\",deleteClusterError:\"Групи не можуть бути видалені.\",edgeDescription:\"Клікніть на вузол і перетягніть край до іншого вузла, щоб їх з'єднати.\",edit:\"Редагувати\",editClusterError:\"Групи недоступні для редагування.\",editEdge:\"Редагувати край\",editEdgeDescription:\"Клікніть на контрольні точки і перетягніть їх у вузол, щоб підключитися до нього.\",editNode:\"Редагувати вузол\"},fr:{addDescription:\"Cliquez dans un endroit vide pour placer un nœud.\",addEdge:\"Ajouter un lien\",addNode:\"Ajouter un nœud\",back:\"Retour\",close:\"Fermer\",createEdgeError:\"Impossible de créer un lien vers un cluster.\",del:\"Effacer la sélection\",deleteClusterError:\"Les clusters ne peuvent pas être effacés.\",edgeDescription:\"Cliquez sur un nœud et glissez le lien vers un autre nœud pour les connecter.\",edit:\"Éditer\",editClusterError:\"Les clusters ne peuvent pas être édités.\",editEdge:\"Éditer le lien\",editEdgeDescription:\"Cliquez sur les points de contrôle et glissez-les pour connecter un nœud.\",editNode:\"Éditer le nœud\"},cs:{addDescription:\"Kluknutím do prázdného prostoru můžete přidat nový vrchol.\",addEdge:\"Přidat hranu\",addNode:\"Přidat vrchol\",back:\"Zpět\",close:\"Zavřít\",createEdgeError:\"Nelze připojit hranu ke shluku.\",del:\"Smazat výběr\",deleteClusterError:\"Nelze mazat shluky.\",edgeDescription:\"Přetažením z jednoho vrcholu do druhého můžete spojit tyto vrcholy novou hranou.\",edit:\"Upravit\",editClusterError:\"Nelze upravovat shluky.\",editEdge:\"Upravit hranu\",editEdgeDescription:\"Přetažením kontrolního vrcholu hrany ji můžete připojit k jinému vrcholu.\",editNode:\"Upravit vrchol\"}});var $l=function(){function t(){Nn(this,t),this.NUM_ITERATIONS=4,this.image=new Image,this.canvas=document.createElement(\"canvas\")}return Fn(t,[{key:\"init\",value:function(){if(!this.initialized()){this.src=this.image.src;var t=this.image.width,e=this.image.height;this.width=t,this.height=e;var i=Math.floor(e/2),n=Math.floor(e/4),o=Math.floor(e/8),r=Math.floor(e/16),s=Math.floor(t/2),a=Math.floor(t/4),h=Math.floor(t/8),l=Math.floor(t/16);this.canvas.width=3*a,this.canvas.height=i,this.coordinates=[[0,0,s,i],[s,0,a,n],[s,n,h,o],[5*h,n,l,r]],this._fillMipMap()}}},{key:\"initialized\",value:function(){return void 0!==this.coordinates}},{key:\"_fillMipMap\",value:function(){var t=this.canvas.getContext(\"2d\"),e=this.coordinates[0];t.drawImage(this.image,e[0],e[1],e[2],e[3]);for(var i=1;i<this.NUM_ITERATIONS;i++){var n=this.coordinates[i-1],o=this.coordinates[i];t.drawImage(this.canvas,n[0],n[1],n[2],n[3],o[0],o[1],o[2],o[3])}}},{key:\"drawImageAtPosition\",value:function(t,e,i,n,o,r){if(this.initialized())if(e>2){e*=.5;for(var s=0;e>2&&s<this.NUM_ITERATIONS;)e*=.5,s+=1;s>=this.NUM_ITERATIONS&&(s=this.NUM_ITERATIONS-1);var a=this.coordinates[s];t.drawImage(this.canvas,a[0],a[1],a[2],a[3],i,n,o,r)}else t.drawImage(this.image,i,n,o,r)}}]),t}(),Zl=function(){function t(e){Nn(this,t),this.images={},this.imageBroken={},this.callback=e}return Fn(t,[{key:\"_tryloadBrokenUrl\",value:function(t,e,i){void 0!==t&&void 0!==i&&(void 0!==e?(i.image.onerror=function(){console.error(\"Could not load brokenImage:\",e)},i.image.src=e):console.warn(\"No broken url image defined\"))}},{key:\"_redrawWithImage\",value:function(t){this.callback&&this.callback(t)}},{key:\"load\",value:function(t,e){var i=this,n=this.images[t];if(n)return n;var o=new $l;return this.images[t]=o,o.image.onload=function(){i._fixImageCoordinates(o.image),o.init(),i._redrawWithImage(o)},o.image.onerror=function(){console.error(\"Could not load image:\",t),i._tryloadBrokenUrl(t,e,o)},o.image.src=t,o}},{key:\"_fixImageCoordinates\",value:function(t){0===t.width&&(document.body.appendChild(t),t.width=t.offsetWidth,t.height=t.offsetHeight,document.body.removeChild(t))}}]),t}(),Ql=!h((function(){return Object.isExtensible(Object.preventExtensions({}))})),Jl=n((function(t){var e=ut.f,i=!1,n=H(\"meta\"),o=0,r=Object.isExtensible||function(){return!0},s=function(t){e(t,n,{value:{objectID:\"O\"+o++,weakData:{}}})},a=t.exports={enable:function(){a.enable=function(){},i=!0;var t=Ai.f,e=[].splice,o={};o[n]=1,t(o).length&&(Ai.f=function(i){for(var o=t(i),r=0,s=o.length;r<s;r++)if(o[r]===n){e.call(o,r,1);break}return o},gt({target:\"Object\",stat:!0,forced:!0},{getOwnPropertyNames:Li.f}))},fastKey:function(t,e){if(!w(t))return\"symbol\"==typeof t?t:(\"string\"==typeof t?\"S\":\"P\")+t;if(!j(t,n)){if(!r(t))return\"F\";if(!e)return\"E\";s(t)}return t[n].objectID},getWeakData:function(t,e){if(!j(t,n)){if(!r(t))return!0;if(!e)return!1;s(t)}return t[n].weakData},onFreeze:function(t){return Ql&&i&&r(t)&&!j(t,n)&&s(t),t}};St[n]=!0}));Jl.enable,Jl.fastKey,Jl.getWeakData,Jl.onFreeze;var td=function(t,e){this.stopped=t,this.result=e},ed=function(t,e,i){var n,o,r,s,a,h,l,d=i&&i.that,c=!(!i||!i.AS_ENTRIES),u=!(!i||!i.IS_ITERATOR),f=!(!i||!i.INTERRUPTED),p=lt(e,d,1+c+f),v=function(t){return n&&di(n),new td(!0,t)},g=function(t){return c?(dt(t),f?p(t[0],t[1],v):p(t[0],t[1])):f?p(t,v):p(t)};if(u)n=t;else{if(\"function\"!=typeof(o=yi(t)))throw TypeError(\"Target is not iterable\");if(pi(o)){for(r=0,s=kt(t.length);s>r;r++)if((a=g(t[r]))&&a instanceof td)return a;return new td(!1)}n=o.call(t)}for(h=n.next;!(l=h.call(n)).done;){try{a=g(l.value)}catch(t){throw di(n),t}if(\"object\"==typeof a&&a&&a instanceof td)return a}return new td(!1)},id=function(t,e,i){if(!(t instanceof e))throw TypeError(\"Incorrect \"+(i?i+\" \":\"\")+\"invocation\");return t},nd=ut.f,od=Gi.forEach,rd=we.set,sd=we.getterFor,ad=function(t,e,i){var n,o=-1!==t.indexOf(\"Map\"),r=-1!==t.indexOf(\"Weak\"),s=o?\"set\":\"add\",d=a[t],c=d&&d.prototype,u={};if(l&&\"function\"==typeof d&&(r||c.forEach&&!h((function(){(new d).entries().next()})))){n=e((function(e,i){rd(id(e,n,t),{type:t,collection:new d}),null!=i&&ed(i,e[s],{that:e,AS_ENTRIES:o})}));var f=sd(t);od([\"add\",\"clear\",\"delete\",\"forEach\",\"get\",\"has\",\"set\",\"keys\",\"values\",\"entries\"],(function(t){var e=\"add\"==t||\"set\"==t;!(t in c)||r&&\"clear\"==t||ft(n.prototype,t,(function(i,n){var o=f(this).collection;if(!e&&r&&!w(i))return\"get\"==t&&void 0;var s=o[t](0===i?0:i,n);return e?this:s}))})),r||nd(n.prototype,\"size\",{configurable:!0,get:function(){return f(this).collection.size}})}else n=i.getConstructor(e,t,o,s),Jl.enable();return Ye(n,t,!1,!0),u[t]=n,gt({global:!0,forced:!0},u),r||i.setStrong(n,t,o),n},hd=function(t,e,i){for(var n in e)i&&i.unsafe&&t[n]?t[n]=e[n]:Ze(t,n,e[n],i);return t},ld=U(\"species\"),dd=ut.f,cd=Jl.fastKey,ud=we.set,fd=we.getterFor,pd={getConstructor:function(t,e,i,n){var o=t((function(t,r){id(t,o,e),ud(t,{type:e,index:Fe(null),first:void 0,last:void 0,size:0}),l||(t.size=0),null!=r&&ed(r,t[n],{that:t,AS_ENTRIES:i})})),r=fd(e),s=function(t,e,i){var n,o,s=r(t),h=a(t,e);return h?h.value=i:(s.last=h={index:o=cd(e,!0),key:e,value:i,previous:n=s.last,next:void 0,removed:!1},s.first||(s.first=h),n&&(n.next=h),l?s.size++:t.size++,\"F\"!==o&&(s.index[o]=h)),t},a=function(t,e){var i,n=r(t),o=cd(e);if(\"F\"!==o)return n.index[o];for(i=n.first;i;i=i.next)if(i.key==e)return i};return hd(o.prototype,{clear:function(){for(var t=r(this),e=t.index,i=t.first;i;)i.removed=!0,i.previous&&(i.previous=i.previous.next=void 0),delete e[i.index],i=i.next;t.first=t.last=void 0,l?t.size=0:this.size=0},delete:function(t){var e=this,i=r(e),n=a(e,t);if(n){var o=n.next,s=n.previous;delete i.index[n.index],n.removed=!0,s&&(s.next=o),o&&(o.previous=s),i.first==n&&(i.first=o),i.last==n&&(i.last=s),l?i.size--:e.size--}return!!n},forEach:function(t){for(var e,i=r(this),n=lt(t,arguments.length>1?arguments[1]:void 0,3);e=e?e.next:i.first;)for(n(e.value,e.key,this);e&&e.removed;)e=e.previous},has:function(t){return!!a(this,t)}}),hd(o.prototype,i?{get:function(t){var e=a(this,t);return e&&e.value},set:function(t,e){return s(this,0===t?0:t,e)}}:{add:function(t){return s(this,t=0===t?0:t,t)}}),l&&dd(o.prototype,\"size\",{get:function(){return r(this).size}}),o},setStrong:function(t,e,i){var n=e+\" Iterator\",o=fd(e),r=fd(n);ri(t,e,(function(t,e){ud(this,{type:n,target:t,state:o(t),kind:e,last:void 0})}),(function(){for(var t=r(this),e=t.kind,i=t.last;i&&i.removed;)i=i.previous;return t.target&&(t.last=i=i?i.next:t.state.first)?\"keys\"==e?{value:i.key,done:!1}:\"values\"==e?{value:i.value,done:!1}:{value:[i.key,i.value],done:!1}:(t.target=void 0,{value:void 0,done:!0})}),i?\"entries\":\"values\",!i,!0),function(t){var e=x(t),i=ut.f;l&&e&&!e[ld]&&i(e,ld,{configurable:!0,get:function(){return this}})}(e)}};ad(\"Map\",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),pd);var vd=k.Map,gd=function(){function t(){Nn(this,t),this.clear(),this._defaultIndex=0,this._groupIndex=0,this._defaultGroups=[{border:\"#2B7CE9\",background:\"#97C2FC\",highlight:{border:\"#2B7CE9\",background:\"#D2E5FF\"},hover:{border:\"#2B7CE9\",background:\"#D2E5FF\"}},{border:\"#FFA500\",background:\"#FFFF00\",highlight:{border:\"#FFA500\",background:\"#FFFFA3\"},hover:{border:\"#FFA500\",background:\"#FFFFA3\"}},{border:\"#FA0A10\",background:\"#FB7E81\",highlight:{border:\"#FA0A10\",background:\"#FFAFB1\"},hover:{border:\"#FA0A10\",background:\"#FFAFB1\"}},{border:\"#41A906\",background:\"#7BE141\",highlight:{border:\"#41A906\",background:\"#A1EC76\"},hover:{border:\"#41A906\",background:\"#A1EC76\"}},{border:\"#E129F0\",background:\"#EB7DF4\",highlight:{border:\"#E129F0\",background:\"#F0B3F5\"},hover:{border:\"#E129F0\",background:\"#F0B3F5\"}},{border:\"#7C29F0\",background:\"#AD85E4\",highlight:{border:\"#7C29F0\",background:\"#D3BDF0\"},hover:{border:\"#7C29F0\",background:\"#D3BDF0\"}},{border:\"#C37F00\",background:\"#FFA807\",highlight:{border:\"#C37F00\",background:\"#FFCA66\"},hover:{border:\"#C37F00\",background:\"#FFCA66\"}},{border:\"#4220FB\",background:\"#6E6EFD\",highlight:{border:\"#4220FB\",background:\"#9B9BFD\"},hover:{border:\"#4220FB\",background:\"#9B9BFD\"}},{border:\"#FD5A77\",background:\"#FFC0CB\",highlight:{border:\"#FD5A77\",background:\"#FFD1D9\"},hover:{border:\"#FD5A77\",background:\"#FFD1D9\"}},{border:\"#4AD63A\",background:\"#C2FABC\",highlight:{border:\"#4AD63A\",background:\"#E6FFE3\"},hover:{border:\"#4AD63A\",background:\"#E6FFE3\"}},{border:\"#990000\",background:\"#EE0000\",highlight:{border:\"#BB0000\",background:\"#FF3333\"},hover:{border:\"#BB0000\",background:\"#FF3333\"}},{border:\"#FF6000\",background:\"#FF6000\",highlight:{border:\"#FF6000\",background:\"#FF6000\"},hover:{border:\"#FF6000\",background:\"#FF6000\"}},{border:\"#97C2FC\",background:\"#2B7CE9\",highlight:{border:\"#D2E5FF\",background:\"#2B7CE9\"},hover:{border:\"#D2E5FF\",background:\"#2B7CE9\"}},{border:\"#399605\",background:\"#255C03\",highlight:{border:\"#399605\",background:\"#255C03\"},hover:{border:\"#399605\",background:\"#255C03\"}},{border:\"#B70054\",background:\"#FF007E\",highlight:{border:\"#B70054\",background:\"#FF007E\"},hover:{border:\"#B70054\",background:\"#FF007E\"}},{border:\"#AD85E4\",background:\"#7C29F0\",highlight:{border:\"#D3BDF0\",background:\"#7C29F0\"},hover:{border:\"#D3BDF0\",background:\"#7C29F0\"}},{border:\"#4557FA\",background:\"#000EA1\",highlight:{border:\"#6E6EFD\",background:\"#000EA1\"},hover:{border:\"#6E6EFD\",background:\"#000EA1\"}},{border:\"#FFC0CB\",background:\"#FD5A77\",highlight:{border:\"#FFD1D9\",background:\"#FD5A77\"},hover:{border:\"#FFD1D9\",background:\"#FD5A77\"}},{border:\"#C2FABC\",background:\"#74D66A\",highlight:{border:\"#E6FFE3\",background:\"#74D66A\"},hover:{border:\"#E6FFE3\",background:\"#74D66A\"}},{border:\"#EE0000\",background:\"#990000\",highlight:{border:\"#FF3333\",background:\"#BB0000\"},hover:{border:\"#FF3333\",background:\"#BB0000\"}}],this.options={},this.defaultOptions={useDefaultGroups:!0},At(this.options,this.defaultOptions)}return Fn(t,[{key:\"setOptions\",value:function(t){var e=[\"useDefaultGroups\"];if(void 0!==t)for(var i in t)if(Object.prototype.hasOwnProperty.call(t,i)&&-1===Hr(e).call(e,i)){var n=t[i];this.add(i,n)}}},{key:\"clear\",value:function(){this._groups=new vd,this._groupNames=[]}},{key:\"get\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this._groups.get(t);if(void 0===i&&e)if(!1===this.options.useDefaultGroups&&this._groupNames.length>0){var n=this._groupIndex%this._groupNames.length;++this._groupIndex,(i={}).color=this._groups.get(this._groupNames[n]),this._groups.set(t,i)}else{var o=this._defaultIndex%this._defaultGroups.length;this._defaultIndex++,(i={}).color=this._defaultGroups[o],this._groups.set(t,i)}return i}},{key:\"add\",value:function(t,e){return this._groups.has(t)||this._groupNames.push(t),this._groups.set(t,e),e}}]),t}();gt({target:\"Number\",stat:!0},{isNaN:function(t){return t!=t}});var yd=k.Number.isNaN,md=a.isFinite,bd=Number.isFinite||function(t){return\"number\"==typeof t&&md(t)};gt({target:\"Number\",stat:!0},{isFinite:bd});var wd=k.Number.isFinite,kd=Gi.some,_d=Ao(\"some\");gt({target:\"Array\",proto:!0,forced:!_d},{some:function(t){return kd(this,t,arguments.length>1?arguments[1]:void 0)}});var xd=Ht(\"Array\").some,Ed=Array.prototype,Od=function(t){var e=t.some;return t===Ed||t instanceof Array&&e===Ed.some?xd:e},Cd=x(\"Reflect\",\"construct\"),Sd=h((function(){function t(){}return!(Cd((function(){}),[],t)instanceof t)})),Td=!h((function(){Cd((function(){}))})),Md=Sd||Td;gt({target:\"Reflect\",stat:!0,forced:Md,sham:Md},{construct:function(t,e){ht(t),dt(e);var i=arguments.length<3?t:ht(arguments[2]);if(Td&&!Sd)return Cd(t,e,i);if(t==i){switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3])}var n=[null];return n.push.apply(n,e),new(Lt.apply(t,n))}var o=i.prototype,r=Fe(w(o)?o:Object.prototype),s=Function.apply.call(t,r,e);return w(s)?s:r}});var Pd=k.Reflect.construct,Dd=n((function(t){t.exports=function(t){if(void 0===t)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return t},t.exports.default=t.exports,t.exports.__esModule=!0})),Id=i(Dd),Bd=Xr;gt({target:\"Object\",stat:!0},{setPrototypeOf:$e});var zd=k.Object.setPrototypeOf,Nd=n((function(t){function e(i,n){return t.exports=e=zd||function(t,e){return t.__proto__=e,t},t.exports.default=t.exports,t.exports.__esModule=!0,e(i,n)}t.exports=e,t.exports.default=t.exports,t.exports.__esModule=!0}));i(Nd);var Ad=i(n((function(t){t.exports=function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Super expression must either be null or a function\");t.prototype=Bd(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&Nd(t,e)},t.exports.default=t.exports,t.exports.__esModule=!0}))),Fd=i(n((function(t){var e=vo.default;t.exports=function(t,i){if(i&&(\"object\"===e(i)||\"function\"==typeof i))return i;if(void 0!==i)throw new TypeError(\"Derived constructors may only return object or undefined\");return Dd(t)},t.exports.default=t.exports,t.exports.__esModule=!0}))),jd=ur,Rd=n((function(t){function e(i){return t.exports=e=zd?jd:function(t){return t.__proto__||jd(t)},t.exports.default=t.exports,t.exports.__esModule=!0,e(i)}t.exports=e,t.exports.default=t.exports,t.exports.__esModule=!0})),Ld=i(Rd),Hd=n((function(t){var e=function(t){var e,i=Object.prototype,n=i.hasOwnProperty,o=\"function\"==typeof Symbol?Symbol:{},r=o.iterator||\"@@iterator\",s=o.asyncIterator||\"@@asyncIterator\",a=o.toStringTag||\"@@toStringTag\";function h(t,e,i){return Object.defineProperty(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{h({},\"\")}catch(t){h=function(t,e,i){return t[e]=i}}function l(t,e,i,n){var o=e&&e.prototype instanceof g?e:g,r=Object.create(o.prototype),s=new T(n||[]);return r._invoke=function(t,e,i){var n=c;return function(o,r){if(n===f)throw new Error(\"Generator is already running\");if(n===p){if(\"throw\"===o)throw r;return P()}for(i.method=o,i.arg=r;;){var s=i.delegate;if(s){var a=O(s,i);if(a){if(a===v)continue;return a}}if(\"next\"===i.method)i.sent=i._sent=i.arg;else if(\"throw\"===i.method){if(n===c)throw n=p,i.arg;i.dispatchException(i.arg)}else\"return\"===i.method&&i.abrupt(\"return\",i.arg);n=f;var h=d(t,e,i);if(\"normal\"===h.type){if(n=i.done?p:u,h.arg===v)continue;return{value:h.arg,done:i.done}}\"throw\"===h.type&&(n=p,i.method=\"throw\",i.arg=h.arg)}}}(t,i,s),r}function d(t,e,i){try{return{type:\"normal\",arg:t.call(e,i)}}catch(t){return{type:\"throw\",arg:t}}}t.wrap=l;var c=\"suspendedStart\",u=\"suspendedYield\",f=\"executing\",p=\"completed\",v={};function g(){}function y(){}function m(){}var b={};b[r]=function(){return this};var w=Object.getPrototypeOf,k=w&&w(w(M([])));k&&k!==i&&n.call(k,r)&&(b=k);var _=m.prototype=g.prototype=Object.create(b);function x(t){[\"next\",\"throw\",\"return\"].forEach((function(e){h(t,e,(function(t){return this._invoke(e,t)}))}))}function E(t,e){function i(o,r,s,a){var h=d(t[o],t,r);if(\"throw\"!==h.type){var l=h.arg,c=l.value;return c&&\"object\"==typeof c&&n.call(c,\"__await\")?e.resolve(c.__await).then((function(t){i(\"next\",t,s,a)}),(function(t){i(\"throw\",t,s,a)})):e.resolve(c).then((function(t){l.value=t,s(l)}),(function(t){return i(\"throw\",t,s,a)}))}a(h.arg)}var o;this._invoke=function(t,n){function r(){return new e((function(e,o){i(t,n,e,o)}))}return o=o?o.then(r,r):r()}}function O(t,i){var n=t.iterator[i.method];if(n===e){if(i.delegate=null,\"throw\"===i.method){if(t.iterator.return&&(i.method=\"return\",i.arg=e,O(t,i),\"throw\"===i.method))return v;i.method=\"throw\",i.arg=new TypeError(\"The iterator does not provide a 'throw' method\")}return v}var o=d(n,t.iterator,i.arg);if(\"throw\"===o.type)return i.method=\"throw\",i.arg=o.arg,i.delegate=null,v;var r=o.arg;return r?r.done?(i[t.resultName]=r.value,i.next=t.nextLoc,\"return\"!==i.method&&(i.method=\"next\",i.arg=e),i.delegate=null,v):r:(i.method=\"throw\",i.arg=new TypeError(\"iterator result is not an object\"),i.delegate=null,v)}function C(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function S(t){var e=t.completion||{};e.type=\"normal\",delete e.arg,t.completion=e}function T(t){this.tryEntries=[{tryLoc:\"root\"}],t.forEach(C,this),this.reset(!0)}function M(t){if(t){var i=t[r];if(i)return i.call(t);if(\"function\"==typeof t.next)return t;if(!isNaN(t.length)){var o=-1,s=function i(){for(;++o<t.length;)if(n.call(t,o))return i.value=t[o],i.done=!1,i;return i.value=e,i.done=!0,i};return s.next=s}}return{next:P}}function P(){return{value:e,done:!0}}return y.prototype=_.constructor=m,m.constructor=y,y.displayName=h(m,a,\"GeneratorFunction\"),t.isGeneratorFunction=function(t){var e=\"function\"==typeof t&&t.constructor;return!!e&&(e===y||\"GeneratorFunction\"===(e.displayName||e.name))},t.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,m):(t.__proto__=m,h(t,a,\"GeneratorFunction\")),t.prototype=Object.create(_),t},t.awrap=function(t){return{__await:t}},x(E.prototype),E.prototype[s]=function(){return this},t.AsyncIterator=E,t.async=function(e,i,n,o,r){void 0===r&&(r=Promise);var s=new E(l(e,i,n,o),r);return t.isGeneratorFunction(i)?s:s.next().then((function(t){return t.done?t.value:s.next()}))},x(_),h(_,a,\"Generator\"),_[r]=function(){return this},_.toString=function(){return\"[object Generator]\"},t.keys=function(t){var e=[];for(var i in t)e.push(i);return e.reverse(),function i(){for(;e.length;){var n=e.pop();if(n in t)return i.value=n,i.done=!1,i}return i.done=!0,i}},t.values=M,T.prototype={constructor:T,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method=\"next\",this.arg=e,this.tryEntries.forEach(S),!t)for(var i in this)\"t\"===i.charAt(0)&&n.call(this,i)&&!isNaN(+i.slice(1))&&(this[i]=e)},stop:function(){this.done=!0;var t=this.tryEntries[0].completion;if(\"throw\"===t.type)throw t.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var i=this;function o(n,o){return a.type=\"throw\",a.arg=t,i.next=n,o&&(i.method=\"next\",i.arg=e),!!o}for(var r=this.tryEntries.length-1;r>=0;--r){var s=this.tryEntries[r],a=s.completion;if(\"root\"===s.tryLoc)return o(\"end\");if(s.tryLoc<=this.prev){var h=n.call(s,\"catchLoc\"),l=n.call(s,\"finallyLoc\");if(h&&l){if(this.prev<s.catchLoc)return o(s.catchLoc,!0);if(this.prev<s.finallyLoc)return o(s.finallyLoc)}else if(h){if(this.prev<s.catchLoc)return o(s.catchLoc,!0)}else{if(!l)throw new Error(\"try statement without catch or finally\");if(this.prev<s.finallyLoc)return o(s.finallyLoc)}}}},abrupt:function(t,e){for(var i=this.tryEntries.length-1;i>=0;--i){var o=this.tryEntries[i];if(o.tryLoc<=this.prev&&n.call(o,\"finallyLoc\")&&this.prev<o.finallyLoc){var r=o;break}}r&&(\"break\"===t||\"continue\"===t)&&r.tryLoc<=e&&e<=r.finallyLoc&&(r=null);var s=r?r.completion:{};return s.type=t,s.arg=e,r?(this.method=\"next\",this.next=r.finallyLoc,v):this.complete(s)},complete:function(t,e){if(\"throw\"===t.type)throw t.arg;return\"break\"===t.type||\"continue\"===t.type?this.next=t.arg:\"return\"===t.type?(this.rval=this.arg=t.arg,this.method=\"return\",this.next=\"end\"):\"normal\"===t.type&&e&&(this.next=e),v},finish:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var i=this.tryEntries[e];if(i.finallyLoc===t)return this.complete(i.completion,i.afterLoc),S(i),v}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var i=this.tryEntries[e];if(i.tryLoc===t){var n=i.completion;if(\"throw\"===n.type){var o=n.arg;S(i)}return o}}throw new Error(\"illegal catch attempt\")},delegateYield:function(t,i,n){return this.delegate={iterator:M(t),resultName:i,nextLoc:n},\"next\"===this.method&&(this.arg=e),v}},t}(t.exports);try{regeneratorRuntime=e}catch(t){Function(\"r\",\"regeneratorRuntime = r\")(e)}})),Wd=function(t){return function(e,i,n,o){ht(i);var r=A(e),s=y(r),a=kt(r.length),h=t?a-1:0,l=t?-1:1;if(n<2)for(;;){if(h in s){o=s[h],h+=l;break}if(h+=l,t?h<0:a<=h)throw TypeError(\"Reduce of empty array with no initial value\")}for(;t?h>=0:a>h;h+=l)h in s&&(o=i(o,s[h],h,r));return o}},qd={left:Wd(!1),right:Wd(!0)},Vd=\"process\"==v(a.process),Ud=qd.left,Yd=Ao(\"reduce\");gt({target:\"Array\",proto:!0,forced:!Yd||!Vd&&M>79&&M<83},{reduce:function(t){return Ud(this,t,arguments.length,arguments.length>1?arguments[1]:void 0)}});var Xd=Ht(\"Array\").reduce,Gd=Array.prototype,Kd=function(t){var e=t.reduce;return t===Gd||t instanceof Array&&e===Gd.reduce?Xd:e},$d=function(t,e,i,n,o,r,s,a){for(var h,l=o,d=0,c=!!s&&lt(s,a,3);d<n;){if(d in i){if(h=c?c(i[d],d,e):i[d],r>0&&zi(h))l=$d(t,e,h,kt(h.length),l,r-1)-1;else{if(l>=9007199254740991)throw TypeError(\"Exceed the acceptable array length\");t[l]=h}l++}d++}return l},Zd=$d;gt({target:\"Array\",proto:!0},{flatMap:function(t){var e,i=A(this),n=kt(i.length);return ht(t),(e=Ui(i,0)).length=Zd(e,i,i,n,0,1,t,arguments.length>1?arguments[1]:void 0),e}});var Qd=Ht(\"Array\").flatMap,Jd=Array.prototype,tc=function(t){var e=t.flatMap;return t===Jd||t instanceof Array&&e===Jd.flatMap?Qd:e};ad(\"Set\",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),pd);var ec=k.Set,ic=fo,nc=function(t){var e=yi(t);if(\"function\"!=typeof e)throw TypeError(String(t)+\" is not iterable\");return dt(e.call(t))},oc=Math.floor,rc=function(t,e){var i=t.length,n=oc(i/2);return i<8?sc(t,e):ac(rc(t.slice(0,n),e),rc(t.slice(n),e),e)},sc=function(t,e){for(var i,n,o=t.length,r=1;r<o;){for(n=r,i=t[r];n&&e(t[n-1],i)>0;)t[n]=t[--n];n!==r++&&(t[n]=i)}return t},ac=function(t,e,i){for(var n=t.length,o=e.length,r=0,s=0,a=[];r<n||s<o;)r<n&&s<o?a.push(i(t[r],e[s])<=0?t[r++]:e[s++]):a.push(r<n?t[r++]:e[s++]);return a},hc=rc,lc=E.match(/firefox\\/(\\d+)/i),dc=!!lc&&+lc[1],cc=/MSIE|Trident/.test(E),uc=E.match(/AppleWebKit\\/(\\d+)\\./),fc=!!uc&&+uc[1],pc=[],vc=pc.sort,gc=h((function(){pc.sort(void 0)})),yc=h((function(){pc.sort(null)})),mc=Ao(\"sort\"),bc=!h((function(){if(M)return M<70;if(!(dc&&dc>3)){if(cc)return!0;if(fc)return fc<603;var t,e,i,n,o=\"\";for(t=65;t<76;t++){switch(e=String.fromCharCode(t),t){case 66:case 69:case 70:case 72:i=3;break;case 68:case 71:i=4;break;default:i=2}for(n=0;n<47;n++)pc.push({k:e+n,v:i})}for(pc.sort((function(t,e){return e.v-t.v})),n=0;n<pc.length;n++)e=pc[n].k.charAt(0),o.charAt(o.length-1)!==e&&(o+=e);return\"DGBEFHACIJK\"!==o}}));gt({target:\"Array\",proto:!0,forced:gc||!yc||!mc||!bc},{sort:function(t){void 0!==t&&ht(t);var e=A(this);if(bc)return void 0===t?vc.call(e):vc.call(e,t);var i,n,o=[],r=kt(e.length);for(n=0;n<r;n++)n in e&&o.push(e[n]);for(i=(o=hc(o,function(t){return function(e,i){return void 0===i?-1:void 0===e?1:void 0!==t?+t(e,i)||0:Qt(e)>Qt(i)?1:-1}}(t))).length,n=0;n<i;)e[n]=o[n++];for(;n<r;)delete e[n++];return e}});var wc,kc=Ht(\"Array\").sort,_c=Array.prototype,xc=function(t){var e=t.sort;return t===_c||t instanceof Array&&e===_c.sort?kc:e},Ec=Ht(\"Array\").keys,Oc=Array.prototype,Cc={DOMTokenList:!0,NodeList:!0},Sc=function(t){var e=t.keys;return t===Oc||t instanceof Array&&e===Oc.keys||Cc.hasOwnProperty(We(t))?Ec:e},Tc=Ht(\"Array\").values,Mc=Array.prototype,Pc={DOMTokenList:!0,NodeList:!0},Dc=function(t){var e=t.values;return t===Mc||t instanceof Array&&e===Mc.values||Pc.hasOwnProperty(We(t))?Tc:e},Ic=Ht(\"Array\").entries,Bc=Array.prototype,zc={DOMTokenList:!0,NodeList:!0},Nc=function(t){var e=t.entries;return t===Bc||t instanceof Array&&e===Bc.entries||zc.hasOwnProperty(We(t))?Ic:e},Ac=new Uint8Array(16);function Fc(){if(!wc&&!(wc=\"undefined\"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||\"undefined\"!=typeof msCrypto&&\"function\"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error(\"crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported\");return wc(Ac)}var jc=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function Rc(t){return\"string\"==typeof t&&jc.test(t)}for(var Lc=[],Hc=0;Hc<256;++Hc)Lc.push((Hc+256).toString(16).substr(1));function Wc(t,e,i){var n=(t=t||{}).random||(t.rng||Fc)();if(n[6]=15&n[6]|64,n[8]=63&n[8]|128,e){i=i||0;for(var o=0;o<16;++o)e[i+o]=n[o];return e}return function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=(Lc[t[e+0]]+Lc[t[e+1]]+Lc[t[e+2]]+Lc[t[e+3]]+\"-\"+Lc[t[e+4]]+Lc[t[e+5]]+\"-\"+Lc[t[e+6]]+Lc[t[e+7]]+\"-\"+Lc[t[e+8]]+Lc[t[e+9]]+\"-\"+Lc[t[e+10]]+Lc[t[e+11]]+Lc[t[e+12]]+Lc[t[e+13]]+Lc[t[e+14]]+Lc[t[e+15]]).toLowerCase();if(!Rc(i))throw TypeError(\"Stringified UUID is invalid\");return i}(n)}function qc(t,e){var i=zo(t);if(On){var n=On(t);e&&(n=mr(n).call(n,(function(e){return Mn(t,e).enumerable}))),i.push.apply(i,n)}return i}function Vc(t){for(var e=1;e<arguments.length;e++){var i,n=null!=arguments[e]?arguments[e]:{};if(e%2)Wo(i=qc(Object(n),!0)).call(i,(function(e){jn(t,e,n[e])}));else if(Dn)In(t,Dn(n));else{var o;Wo(o=qc(Object(n))).call(o,(function(e){zn(t,e,Mn(n,e))}))}}return t}function Uc(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}function Yc(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return Xc(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Xc(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function Xc(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}var Gc=function(){function t(e,i,n){var o,r,s;Nn(this,t),this._source=e,this._transformers=i,this._target=n,this._listeners={add:Vt(o=this._add).call(o,this),remove:Vt(r=this._remove).call(r,this),update:Vt(s=this._update).call(s,this)}}return Fn(t,[{key:\"all\",value:function(){return this._target.update(this._transformItems(this._source.get())),this}},{key:\"start\",value:function(){return this._source.on(\"add\",this._listeners.add),this._source.on(\"remove\",this._listeners.remove),this._source.on(\"update\",this._listeners.update),this}},{key:\"stop\",value:function(){return this._source.off(\"add\",this._listeners.add),this._source.off(\"remove\",this._listeners.remove),this._source.off(\"update\",this._listeners.update),this}},{key:\"_transformItems\",value:function(t){var e;return Kd(e=this._transformers).call(e,(function(t,e){return e(t)}),t)}},{key:\"_add\",value:function(t,e){null!=e&&this._target.add(this._transformItems(this._source.get(e.items)))}},{key:\"_update\",value:function(t,e){null!=e&&this._target.update(this._transformItems(this._source.get(e.items)))}},{key:\"_remove\",value:function(t,e){null!=e&&this._target.remove(this._transformItems(e.oldData))}}]),t}(),Kc=function(){function t(e){Nn(this,t),this._source=e,this._transformers=[]}return Fn(t,[{key:\"filter\",value:function(t){return this._transformers.push((function(e){return mr(e).call(e,t)})),this}},{key:\"map\",value:function(t){return this._transformers.push((function(e){return Io(e).call(e,t)})),this}},{key:\"flatMap\",value:function(t){return this._transformers.push((function(e){return tc(e).call(e,t)})),this}},{key:\"to\",value:function(t){return new Gc(this._source,this._transformers,t)}}]),t}();function $c(t){return\"string\"==typeof t||\"number\"==typeof t}var Zc=function(){function t(e){Nn(this,t),this._queue=[],this._timeout=null,this._extended=null,this.delay=null,this.max=1/0,this.setOptions(e)}return Fn(t,[{key:\"setOptions\",value:function(t){t&&void 0!==t.delay&&(this.delay=t.delay),t&&void 0!==t.max&&(this.max=t.max),this._flushIfNeeded()}},{key:\"destroy\",value:function(){if(this.flush(),this._extended){for(var t=this._extended.object,e=this._extended.methods,i=0;i<e.length;i++){var n=e[i];n.original?t[n.name]=n.original:delete t[n.name]}this._extended=null}}},{key:\"replace\",value:function(t,e){var i=this,n=t[e];if(!n)throw new Error(\"Method \"+e+\" undefined\");t[e]=function(){for(var t=arguments.length,e=new Array(t),o=0;o<t;o++)e[o]=arguments[o];i.queue({args:e,fn:n,context:this})}}},{key:\"queue\",value:function(t){\"function\"==typeof t?this._queue.push({fn:t}):this._queue.push(t),this._flushIfNeeded()}},{key:\"_flushIfNeeded\",value:function(){var t=this;this._queue.length>this.max&&this.flush(),null!=this._timeout&&(clearTimeout(this._timeout),this._timeout=null),this.queue.length>0&&\"number\"==typeof this.delay&&(this._timeout=rs((function(){t.flush()}),this.delay))}},{key:\"flush\",value:function(){var t,e;Wo(t=er(e=this._queue).call(e,0)).call(t,(function(t){t.fn.apply(t.context||t.fn,t.args||[])}))}}],[{key:\"extend\",value:function(e,i){var n=new t(i);if(void 0!==e.flush)throw new Error(\"Target object already has a property flush\");e.flush=function(){n.flush()};var o=[{name:\"flush\",original:void 0}];if(i&&i.replace)for(var r=0;r<i.replace.length;r++){var s=i.replace[r];o.push({name:s,original:e[s]}),n.replace(e,s)}return n._extended={object:e,methods:o},n}}]),t}(),Qc=function(){function t(){Nn(this,t),this._subscribers={\"*\":[],add:[],remove:[],update:[]},this.subscribe=t.prototype.on,this.unsubscribe=t.prototype.off}return Fn(t,[{key:\"_trigger\",value:function(t,e,i){var n,o;if(\"*\"===t)throw new Error(\"Cannot trigger event *\");Wo(n=Eo(o=[]).call(o,wo(this._subscribers[t]),wo(this._subscribers[\"*\"]))).call(n,(function(n){n(t,e,null!=i?i:null)}))}},{key:\"on\",value:function(t,e){\"function\"==typeof e&&this._subscribers[t].push(e)}},{key:\"off\",value:function(t,e){var i;this._subscribers[t]=mr(i=this._subscribers[t]).call(i,(function(t){return t!==e}))}}]),t}(),Jc=function(t){function e(t){Nn(this,e),this._pairs=t}return Fn(e,[{key:t,value:Hd.mark((function t(){var e,i,n,o,r;return Hd.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:e=Yc(this._pairs),t.prev=1,e.s();case 3:if((i=e.n()).done){t.next=9;break}return n=uo(i.value,2),o=n[0],r=n[1],t.next=7,[o,r];case 7:t.next=3;break;case 9:t.next=14;break;case 11:t.prev=11,t.t0=t.catch(1),e.e(t.t0);case 14:return t.prev=14,e.f(),t.finish(14);case 17:case\"end\":return t.stop()}}),t,this,[[1,11,14,17]])}))},{key:\"entries\",value:Hd.mark((function t(){var e,i,n,o,r;return Hd.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:e=Yc(this._pairs),t.prev=1,e.s();case 3:if((i=e.n()).done){t.next=9;break}return n=uo(i.value,2),o=n[0],r=n[1],t.next=7,[o,r];case 7:t.next=3;break;case 9:t.next=14;break;case 11:t.prev=11,t.t0=t.catch(1),e.e(t.t0);case 14:return t.prev=14,e.f(),t.finish(14);case 17:case\"end\":return t.stop()}}),t,this,[[1,11,14,17]])}))},{key:\"keys\",value:Hd.mark((function t(){var e,i,n,o;return Hd.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:e=Yc(this._pairs),t.prev=1,e.s();case 3:if((i=e.n()).done){t.next=9;break}return n=uo(i.value,1),o=n[0],t.next=7,o;case 7:t.next=3;break;case 9:t.next=14;break;case 11:t.prev=11,t.t0=t.catch(1),e.e(t.t0);case 14:return t.prev=14,e.f(),t.finish(14);case 17:case\"end\":return t.stop()}}),t,this,[[1,11,14,17]])}))},{key:\"values\",value:Hd.mark((function t(){var e,i,n,o;return Hd.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:e=Yc(this._pairs),t.prev=1,e.s();case 3:if((i=e.n()).done){t.next=9;break}return n=uo(i.value,2),o=n[1],t.next=7,o;case 7:t.next=3;break;case 9:t.next=14;break;case 11:t.prev=11,t.t0=t.catch(1),e.e(t.t0);case 14:return t.prev=14,e.f(),t.finish(14);case 17:case\"end\":return t.stop()}}),t,this,[[1,11,14,17]])}))},{key:\"toIdArray\",value:function(){var t;return Io(t=wo(this._pairs)).call(t,(function(t){return t[0]}))}},{key:\"toItemArray\",value:function(){var t;return Io(t=wo(this._pairs)).call(t,(function(t){return t[1]}))}},{key:\"toEntryArray\",value:function(){return wo(this._pairs)}},{key:\"toObjectMap\",value:function(){var t,e=Gr(null),i=Yc(this._pairs);try{for(i.s();!(t=i.n()).done;){var n=uo(t.value,2),o=n[0],r=n[1];e[o]=r}}catch(t){i.e(t)}finally{i.f()}return e}},{key:\"toMap\",value:function(){return new vd(this._pairs)}},{key:\"toIdSet\",value:function(){return new ec(this.toIdArray())}},{key:\"toItemSet\",value:function(){return new ec(this.toItemArray())}},{key:\"cache\",value:function(){return new e(wo(this._pairs))}},{key:\"distinct\",value:function(t){var e,i=new ec,n=Yc(this._pairs);try{for(n.s();!(e=n.n()).done;){var o=uo(e.value,2),r=o[0],s=o[1];i.add(t(s,r))}}catch(t){n.e(t)}finally{n.f()}return i}},{key:\"filter\",value:function(t){var i=this._pairs;return new e(jn({},ic,Hd.mark((function e(){var n,o,r,s,a;return Hd.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:n=Yc(i),e.prev=1,n.s();case 3:if((o=n.n()).done){e.next=10;break}if(r=uo(o.value,2),s=r[0],a=r[1],!t(a,s)){e.next=8;break}return e.next=8,[s,a];case 8:e.next=3;break;case 10:e.next=15;break;case 12:e.prev=12,e.t0=e.catch(1),n.e(e.t0);case 15:return e.prev=15,n.f(),e.finish(15);case 18:case\"end\":return e.stop()}}),e,null,[[1,12,15,18]])}))))}},{key:\"forEach\",value:function(t){var e,i=Yc(this._pairs);try{for(i.s();!(e=i.n()).done;){var n=uo(e.value,2),o=n[0];t(n[1],o)}}catch(t){i.e(t)}finally{i.f()}}},{key:\"map\",value:function(t){var i=this._pairs;return new e(jn({},ic,Hd.mark((function e(){var n,o,r,s,a;return Hd.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:n=Yc(i),e.prev=1,n.s();case 3:if((o=n.n()).done){e.next=9;break}return r=uo(o.value,2),s=r[0],a=r[1],e.next=7,[s,t(a,s)];case 7:e.next=3;break;case 9:e.next=14;break;case 11:e.prev=11,e.t0=e.catch(1),n.e(e.t0);case 14:return e.prev=14,n.f(),e.finish(14);case 17:case\"end\":return e.stop()}}),e,null,[[1,11,14,17]])}))))}},{key:\"max\",value:function(t){var e=nc(this._pairs),i=e.next();if(i.done)return null;for(var n=i.value[1],o=t(i.value[1],i.value[0]);!(i=e.next()).done;){var r=uo(i.value,2),s=r[0],a=r[1],h=t(a,s);h>o&&(o=h,n=a)}return n}},{key:\"min\",value:function(t){var e=nc(this._pairs),i=e.next();if(i.done)return null;for(var n=i.value[1],o=t(i.value[1],i.value[0]);!(i=e.next()).done;){var r=uo(i.value,2),s=r[0],a=r[1],h=t(a,s);h<o&&(o=h,n=a)}return n}},{key:\"reduce\",value:function(t,e){var i,n=Yc(this._pairs);try{for(n.s();!(i=n.n()).done;){var o=uo(i.value,2),r=o[0];e=t(e,o[1],r)}}catch(t){n.e(t)}finally{n.f()}return e}},{key:\"sort\",value:function(t){var i=this;return new e(jn({},ic,(function(){var e;return nc(xc(e=wo(i._pairs)).call(e,(function(e,i){var n=uo(e,2),o=n[0],r=n[1],s=uo(i,2),a=s[0],h=s[1];return t(r,h,o,a)})))})))}}]),e}(ic);var tu=function(t){Ad(i,t);var e=Uc(i);function i(t,n){var o;return Nn(this,i),(o=e.call(this))._queue=null,t&&!So(t)&&(n=t,t=[]),o._options=n||{},o._data=new vd,o.length=0,o._idProp=o._options.fieldId||\"id\",t&&t.length&&o.add(t),o.setOptions(n),o}return Fn(i,[{key:\"idProp\",get:function(){return this._idProp}},{key:\"setOptions\",value:function(t){t&&void 0!==t.queue&&(!1===t.queue?this._queue&&(this._queue.destroy(),this._queue=null):(this._queue||(this._queue=Zc.extend(this,{replace:[\"add\",\"update\",\"remove\"]})),t.queue&&\"object\"===go(t.queue)&&this._queue.setOptions(t.queue)))}},{key:\"add\",value:function(t,e){var i,n=this,o=[];if(So(t)){var r=Io(t).call(t,(function(t){return t[n._idProp]}));if(Od(r).call(r,(function(t){return n._data.has(t)})))throw new Error(\"A duplicate id was found in the parameter array.\");for(var s=0,a=t.length;s<a;s++)i=this._addItem(t[s]),o.push(i)}else{if(!t||\"object\"!==go(t))throw new Error(\"Unknown dataType\");i=this._addItem(t),o.push(i)}return o.length&&this._trigger(\"add\",{items:o},e),o}},{key:\"update\",value:function(t,e){var i=this,n=[],o=[],r=[],s=[],a=this._idProp,h=function(t){var e=t[a];if(null!=e&&i._data.has(e)){var h=t,l=At({},i._data.get(e)),d=i._updateItem(h);o.push(d),s.push(h),r.push(l)}else{var c=i._addItem(t);n.push(c)}};if(So(t))for(var l=0,d=t.length;l<d;l++)t[l]&&\"object\"===go(t[l])?h(t[l]):console.warn(\"Ignoring input item, which is not an object at index \"+l);else{if(!t||\"object\"!==go(t))throw new Error(\"Unknown dataType\");h(t)}if(n.length&&this._trigger(\"add\",{items:n},e),o.length){var c={items:o,oldData:r,data:s};this._trigger(\"update\",c,e)}return Eo(n).call(n,o)}},{key:\"updateOnly\",value:function(t,e){var i,n=this;So(t)||(t=[t]);var o=Io(i=Io(t).call(t,(function(t){var e=n._data.get(t[n._idProp]);if(null==e)throw new Error(\"Updating non-existent items is not allowed.\");return{oldData:e,update:t}}))).call(i,(function(t){var e=t.oldData,i=t.update,o=e[n._idProp],r=ih(e,i);return n._data.set(o,r),{id:o,oldData:e,updatedData:r}}));if(o.length){var r={items:Io(o).call(o,(function(t){return t.id})),oldData:Io(o).call(o,(function(t){return t.oldData})),data:Io(o).call(o,(function(t){return t.updatedData}))};return this._trigger(\"update\",r,e),r.items}return[]}},{key:\"get\",value:function(t,e){var i=void 0,n=void 0,o=void 0;$c(t)?(i=t,o=e):So(t)?(n=t,o=e):o=t;var r,s=o&&\"Object\"===o.returnType?\"Object\":\"Array\",a=o&&mr(o),h=[],l=void 0,d=void 0,c=void 0;if(null!=i)(l=this._data.get(i))&&a&&!a(l)&&(l=void 0);else if(null!=n)for(var u=0,f=n.length;u<f;u++)null==(l=this._data.get(n[u]))||a&&!a(l)||h.push(l);else for(var p,v=0,g=(d=wo(Sc(p=this._data).call(p))).length;v<g;v++)c=d[v],null==(l=this._data.get(c))||a&&!a(l)||h.push(l);if(o&&o.order&&null==i&&this._sort(h,o.order),o&&o.fields){var y=o.fields;if(null!=i&&null!=l)l=this._filterFields(l,y);else for(var m=0,b=h.length;m<b;m++)h[m]=this._filterFields(h[m],y)}if(\"Object\"==s){for(var w={},k=0,_=h.length;k<_;k++){var x=h[k];w[x[this._idProp]]=x}return w}return null!=i?null!==(r=l)&&void 0!==r?r:null:h}},{key:\"getIds\",value:function(t){var e=this._data,i=t&&mr(t),n=t&&t.order,o=wo(Sc(e).call(e)),r=[];if(i)if(n){for(var s=[],a=0,h=o.length;a<h;a++){var l=o[a],d=this._data.get(l);null!=d&&i(d)&&s.push(d)}this._sort(s,n);for(var c=0,u=s.length;c<u;c++)r.push(s[c][this._idProp])}else for(var f=0,p=o.length;f<p;f++){var v=o[f],g=this._data.get(v);null!=g&&i(g)&&r.push(g[this._idProp])}else if(n){for(var y=[],m=0,b=o.length;m<b;m++){var w=o[m];y.push(e.get(w))}this._sort(y,n);for(var k=0,_=y.length;k<_;k++)r.push(y[k][this._idProp])}else for(var x=0,E=o.length;x<E;x++){var O=o[x],C=e.get(O);null!=C&&r.push(C[this._idProp])}return r}},{key:\"getDataSet\",value:function(){return this}},{key:\"forEach\",value:function(t,e){var i=e&&mr(e),n=this._data,o=wo(Sc(n).call(n));if(e&&e.order)for(var r=this.get(e),s=0,a=r.length;s<a;s++){var h=r[s];t(h,h[this._idProp])}else for(var l=0,d=o.length;l<d;l++){var c=o[l],u=this._data.get(c);null==u||i&&!i(u)||t(u,c)}}},{key:\"map\",value:function(t,e){for(var i=e&&mr(e),n=[],o=this._data,r=wo(Sc(o).call(o)),s=0,a=r.length;s<a;s++){var h=r[s],l=this._data.get(h);null==l||i&&!i(l)||n.push(t(l,h))}return e&&e.order&&this._sort(n,e.order),n}},{key:\"_filterFields\",value:function(t,e){var i;return t?Kd(i=So(e)?e:zo(e)).call(i,(function(e,i){return e[i]=t[i],e}),{}):t}},{key:\"_sort\",value:function(t,e){if(\"string\"==typeof e){var i=e;xc(t).call(t,(function(t,e){var n=t[i],o=e[i];return n>o?1:n<o?-1:0}))}else{if(\"function\"!=typeof e)throw new TypeError(\"Order must be a function or a string\");xc(t).call(t,e)}}},{key:\"remove\",value:function(t,e){for(var i=[],n=[],o=So(t)?t:[t],r=0,s=o.length;r<s;r++){var a=this._remove(o[r]);if(a){var h=a[this._idProp];null!=h&&(i.push(h),n.push(a))}}return i.length&&this._trigger(\"remove\",{items:i,oldData:n},e),i}},{key:\"_remove\",value:function(t){var e;if($c(t)?e=t:t&&\"object\"===go(t)&&(e=t[this._idProp]),null!=e&&this._data.has(e)){var i=this._data.get(e)||null;return this._data.delete(e),--this.length,i}return null}},{key:\"clear\",value:function(t){for(var e,i=wo(Sc(e=this._data).call(e)),n=[],o=0,r=i.length;o<r;o++)n.push(this._data.get(i[o]));return this._data.clear(),this.length=0,this._trigger(\"remove\",{items:i,oldData:n},t),i}},{key:\"max\",value:function(t){var e,i,n=null,o=null,r=Yc(Dc(e=this._data).call(e));try{for(r.s();!(i=r.n()).done;){var s=i.value,a=s[t];\"number\"==typeof a&&(null==o||a>o)&&(n=s,o=a)}}catch(t){r.e(t)}finally{r.f()}return n||null}},{key:\"min\",value:function(t){var e,i,n=null,o=null,r=Yc(Dc(e=this._data).call(e));try{for(r.s();!(i=r.n()).done;){var s=i.value,a=s[t];\"number\"==typeof a&&(null==o||a<o)&&(n=s,o=a)}}catch(t){r.e(t)}finally{r.f()}return n||null}},{key:\"distinct\",value:function(t){for(var e=this._data,i=wo(Sc(e).call(e)),n=[],o=0,r=0,s=i.length;r<s;r++){for(var a=i[r],h=e.get(a)[t],l=!1,d=0;d<o;d++)if(n[d]==h){l=!0;break}l||void 0===h||(n[o]=h,o++)}return n}},{key:\"_addItem\",value:function(t){var e=function(t,e){return null==t[e]&&(t[e]=Wc()),t}(t,this._idProp),i=e[this._idProp];if(this._data.has(i))throw new Error(\"Cannot add item: item with id \"+i+\" already exists\");return this._data.set(i,e),++this.length,i}},{key:\"_updateItem\",value:function(t){var e=t[this._idProp];if(null==e)throw new Error(\"Cannot update item: item has no id (item: \"+es(t)+\")\");var i=this._data.get(e);if(!i)throw new Error(\"Cannot update item: no item with id \"+e+\" found\");return this._data.set(e,Vc(Vc({},i),t)),e}},{key:\"stream\",value:function(t){if(t){var e=this._data;return new Jc(jn({},ic,Hd.mark((function i(){var n,o,r,s;return Hd.wrap((function(i){for(;;)switch(i.prev=i.next){case 0:n=Yc(t),i.prev=1,n.s();case 3:if((o=n.n()).done){i.next=11;break}if(r=o.value,null==(s=e.get(r))){i.next=9;break}return i.next=9,[r,s];case 9:i.next=3;break;case 11:i.next=16;break;case 13:i.prev=13,i.t0=i.catch(1),n.e(i.t0);case 16:return i.prev=16,n.f(),i.finish(16);case 19:case\"end\":return i.stop()}}),i,null,[[1,13,16,19]])}))))}var i;return new Jc(jn({},ic,Vt(i=Nc(this._data)).call(i,this._data)))}}]),i}(Qc),eu=function(t){Ad(i,t);var e=Uc(i);function i(t,n){var o,r;return Nn(this,i),(r=e.call(this)).length=0,r._ids=new ec,r._options=n||{},r._listener=Vt(o=r._onEvent).call(o,Id(r)),r.setData(t),r}return Fn(i,[{key:\"idProp\",get:function(){return this.getDataSet().idProp}},{key:\"setData\",value:function(t){if(this._data){this._data.off&&this._data.off(\"*\",this._listener);var e=this._data.getIds({filter:mr(this._options)}),i=this._data.get(e);this._ids.clear(),this.length=0,this._trigger(\"remove\",{items:e,oldData:i})}if(null!=t){this._data=t;for(var n=this._data.getIds({filter:mr(this._options)}),o=0,r=n.length;o<r;o++){var s=n[o];this._ids.add(s)}this.length=n.length,this._trigger(\"add\",{items:n})}else this._data=new tu;this._data.on&&this._data.on(\"*\",this._listener)}},{key:\"refresh\",value:function(){for(var t=this._data.getIds({filter:mr(this._options)}),e=wo(this._ids),i={},n=[],o=[],r=[],s=0,a=t.length;s<a;s++){var h=t[s];i[h]=!0,this._ids.has(h)||(n.push(h),this._ids.add(h))}for(var l=0,d=e.length;l<d;l++){var c=e[l],u=this._data.get(c);null==u?console.error(\"If you see this, report it please.\"):i[c]||(o.push(c),r.push(u),this._ids.delete(c))}this.length+=n.length-o.length,n.length&&this._trigger(\"add\",{items:n}),o.length&&this._trigger(\"remove\",{items:o,oldData:r})}},{key:\"get\",value:function(t,e){if(null==this._data)return null;var i,n=null;$c(t)||So(t)?(n=t,i=e):i=t;var o=At({},this._options,i),r=mr(this._options),s=i&&mr(i);return r&&s&&(o.filter=function(t){return r(t)&&s(t)}),null==n?this._data.get(o):this._data.get(n,o)}},{key:\"getIds\",value:function(t){if(this._data.length){var e,i=mr(this._options),n=null!=t?mr(t):null;return e=n?i?function(t){return i(t)&&n(t)}:n:i,this._data.getIds({filter:e,order:t&&t.order})}return[]}},{key:\"forEach\",value:function(t,e){if(this._data){var i,n,o=mr(this._options),r=e&&mr(e);n=r?o?function(t){return o(t)&&r(t)}:r:o,Wo(i=this._data).call(i,t,{filter:n,order:e&&e.order})}}},{key:\"map\",value:function(t,e){if(this._data){var i,n,o=mr(this._options),r=e&&mr(e);return n=r?o?function(t){return o(t)&&r(t)}:r:o,Io(i=this._data).call(i,t,{filter:n,order:e&&e.order})}return[]}},{key:\"getDataSet\",value:function(){return this._data.getDataSet()}},{key:\"stream\",value:function(t){var e;return this._data.stream(t||jn({},ic,Vt(e=Sc(this._ids)).call(e,this._ids)))}},{key:\"dispose\",value:function(){var t;null!==(t=this._data)&&void 0!==t&&t.off&&this._data.off(\"*\",this._listener);var e,n=\"This data view has already been disposed of.\",o={get:function(){throw new Error(n)},set:function(){throw new Error(n)},configurable:!1},r=Yc(Co(i.prototype));try{for(r.s();!(e=r.n()).done;){var s=e.value;zn(this,s,o)}}catch(t){r.e(t)}finally{r.f()}}},{key:\"_onEvent\",value:function(t,e,i){if(e&&e.items&&this._data){var n=e.items,o=[],r=[],s=[],a=[],h=[],l=[];switch(t){case\"add\":for(var d=0,c=n.length;d<c;d++){var u=n[d];this.get(u)&&(this._ids.add(u),o.push(u))}break;case\"update\":for(var f=0,p=n.length;f<p;f++){var v=n[f];this.get(v)?this._ids.has(v)?(r.push(v),h.push(e.data[f]),a.push(e.oldData[f])):(this._ids.add(v),o.push(v)):this._ids.has(v)&&(this._ids.delete(v),s.push(v),l.push(e.oldData[f]))}break;case\"remove\":for(var g=0,y=n.length;g<y;g++){var m=n[g];this._ids.has(m)&&(this._ids.delete(m),s.push(m),l.push(e.oldData[g]))}}this.length+=o.length-s.length,o.length&&this._trigger(\"add\",{items:o},i),r.length&&this._trigger(\"update\",{items:r,oldData:a,data:h},i),s.length&&this._trigger(\"remove\",{items:s,oldData:l},i)}}}]),i}(Qc);function iu(t,e){return\"object\"===go(e)&&null!==e&&t===e.idProp&&\"function\"==typeof e.add&&\"function\"==typeof e.clear&&\"function\"==typeof e.distinct&&\"function\"==typeof Wo(e)&&\"function\"==typeof e.get&&\"function\"==typeof e.getDataSet&&\"function\"==typeof e.getIds&&\"number\"==typeof e.length&&\"function\"==typeof Io(e)&&\"function\"==typeof e.max&&\"function\"==typeof e.min&&\"function\"==typeof e.off&&\"function\"==typeof e.on&&\"function\"==typeof e.remove&&\"function\"==typeof e.setOptions&&\"function\"==typeof e.stream&&\"function\"==typeof e.update&&\"function\"==typeof e.updateOnly}function nu(t,e){return\"object\"===go(e)&&null!==e&&t===e.idProp&&\"function\"==typeof Wo(e)&&\"function\"==typeof e.get&&\"function\"==typeof e.getDataSet&&\"function\"==typeof e.getIds&&\"number\"==typeof e.length&&\"function\"==typeof Io(e)&&\"function\"==typeof e.off&&\"function\"==typeof e.on&&\"function\"==typeof e.stream&&iu(t,e.getDataSet())}var ou=Object.freeze({__proto__:null,DELETE:eh,DataSet:tu,DataStream:Jc,DataView:eu,Queue:Zc,createNewDataPipeFrom:function(t){return new Kc(t)},isDataSetLike:iu,isDataViewLike:nu}),ru=Tr.trim,su=a.parseFloat,au=1/su(xr+\"-0\")!=-1/0?function(t){var e=ru(Qt(t)),i=su(e);return 0===i&&\"-\"==e.charAt(0)?-0:i}:su;gt({global:!0,forced:parseFloat!=au},{parseFloat:au});var hu=k.parseFloat,lu=Li.f,du=h((function(){return!Object.getOwnPropertyNames(1)}));gt({target:\"Object\",stat:!0,forced:du},{getOwnPropertyNames:lu});var cu=k.Object,uu=function(t){return cu.getOwnPropertyNames(t)};function fu(t,e){var i=[\"node\",\"edge\",\"label\"],n=!0,o=Qh(e,\"chosen\");if(\"boolean\"==typeof o)n=o;else if(\"object\"===go(o)){if(-1===Hr(i).call(i,t))throw new Error(\"choosify: subOption '\"+t+\"' should be one of '\"+i.join(\"', '\")+\"'\");var r=Qh(e,[\"chosen\",t]);\"boolean\"!=typeof r&&\"function\"!=typeof r||(n=r)}return n}function pu(t,e,i){if(t.width<=0||t.height<=0)return!1;if(void 0!==i){var n={x:e.x-i.x,y:e.y-i.y};if(0!==i.angle){var o=-i.angle;e={x:Math.cos(o)*n.x-Math.sin(o)*n.y,y:Math.sin(o)*n.x+Math.cos(o)*n.y}}else e=n}var r=t.x+t.width,s=t.y+t.width;return t.left<e.x&&r>e.x&&t.top<e.y&&s>e.y}function vu(t){return\"string\"==typeof t&&\"\"!==t}function gu(t,e,i,n){var o=n.x,r=n.y;if(\"function\"==typeof n.distanceToBorder){var s=n.distanceToBorder(t,e),a=Math.sin(e)*s,h=Math.cos(e)*s;h===s?(o+=s,r=n.y):a===s?(o=n.x,r-=s):(o+=h,r-=a)}else n.shape.width>n.shape.height?(o=n.x+.5*n.shape.width,r=n.y-i):(o=n.x+i,r=n.y-.5*n.shape.height);return{x:o,y:r}}var yu=function(){function t(e){Nn(this,t),this.measureText=e,this.current=0,this.width=0,this.height=0,this.lines=[]}return Fn(t,[{key:\"_add\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:\"normal\";void 0===this.lines[t]&&(this.lines[t]={width:0,height:0,blocks:[]});var n=e;void 0!==e&&\"\"!==e||(n=\" \");var o=this.measureText(n,i),r=At({},Dc(o));r.text=e,r.width=o.width,r.mod=i,void 0!==e&&\"\"!==e||(r.width=0),this.lines[t].blocks.push(r),this.lines[t].width+=r.width}},{key:\"curWidth\",value:function(){var t=this.lines[this.current];return void 0===t?0:t.width}},{key:\"append\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"normal\";this._add(this.current,t,e)}},{key:\"newLine\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"normal\";this._add(this.current,t,e),this.current++}},{key:\"determineLineHeights\",value:function(){for(var t=0;t<this.lines.length;t++){var e=this.lines[t],i=0;if(void 0!==e.blocks)for(var n=0;n<e.blocks.length;n++){var o=e.blocks[n];i<o.height&&(i=o.height)}e.height=i}}},{key:\"determineLabelSize\",value:function(){for(var t=0,e=0,i=0;i<this.lines.length;i++){var n=this.lines[i];n.width>t&&(t=n.width),e+=n.height}this.width=t,this.height=e}},{key:\"removeEmptyBlocks\",value:function(){for(var t=[],e=0;e<this.lines.length;e++){var i=this.lines[e];if(0!==i.blocks.length&&(e!==this.lines.length-1||0!==i.width)){var n={};At(n,i),n.blocks=[];for(var o=void 0,r=[],s=0;s<i.blocks.length;s++){var a=i.blocks[s];0!==a.width?r.push(a):void 0===o&&(o=a)}0===r.length&&void 0!==o&&r.push(o),n.blocks=r,t.push(n)}}return t}},{key:\"finalize\",value:function(){this.determineLineHeights(),this.determineLabelSize();var t=this.removeEmptyBlocks();return{width:this.width,height:this.height,lines:t}}}]),t}(),mu={\"<b>\":/<b>/,\"<i>\":/<i>/,\"<code>\":/<code>/,\"</b>\":/<\\/b>/,\"</i>\":/<\\/i>/,\"</code>\":/<\\/code>/,\"*\":/\\*/,_:/_/,\"`\":/`/,afterBold:/[^*]/,afterItal:/[^_]/,afterMono:/[^`]/},bu=function(){function t(e){Nn(this,t),this.text=e,this.bold=!1,this.ital=!1,this.mono=!1,this.spacing=!1,this.position=0,this.buffer=\"\",this.modStack=[],this.blocks=[]}return Fn(t,[{key:\"mod\",value:function(){return 0===this.modStack.length?\"normal\":this.modStack[0]}},{key:\"modName\",value:function(){return 0===this.modStack.length?\"normal\":\"mono\"===this.modStack[0]?\"mono\":this.bold&&this.ital?\"boldital\":this.bold?\"bold\":this.ital?\"ital\":void 0}},{key:\"emitBlock\",value:function(){this.spacing&&(this.add(\" \"),this.spacing=!1),this.buffer.length>0&&(this.blocks.push({text:this.buffer,mod:this.modName()}),this.buffer=\"\")}},{key:\"add\",value:function(t){\" \"===t&&(this.spacing=!0),this.spacing&&(this.buffer+=\" \",this.spacing=!1),\" \"!=t&&(this.buffer+=t)}},{key:\"parseWS\",value:function(t){return!!/[ \\t]/.test(t)&&(this.mono?this.add(t):this.spacing=!0,!0)}},{key:\"setTag\",value:function(t){this.emitBlock(),this[t]=!0,this.modStack.unshift(t)}},{key:\"unsetTag\",value:function(t){this.emitBlock(),this[t]=!1,this.modStack.shift()}},{key:\"parseStartTag\",value:function(t,e){return!(this.mono||this[t]||!this.match(e))&&(this.setTag(t),!0)}},{key:\"match\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this.prepareRegExp(t),n=uo(i,2),o=n[0],r=n[1],s=o.test(this.text.substr(this.position,r));return s&&e&&(this.position+=r-1),s}},{key:\"parseEndTag\",value:function(t,e,i){var n=this.mod()===t;return!(!(n=\"mono\"===t?n&&this.mono:n&&!this.mono)||!this.match(e))&&(void 0!==i?(this.position===this.text.length-1||this.match(i,!1))&&this.unsetTag(t):this.unsetTag(t),!0)}},{key:\"replace\",value:function(t,e){return!!this.match(t)&&(this.add(e),this.position+=length-1,!0)}},{key:\"prepareRegExp\",value:function(t){var e,i;if(t instanceof RegExp)i=t,e=1;else{var n=mu[t];i=void 0!==n?n:new RegExp(t),e=t.length}return[i,e]}}]),t}(),wu=function(){function t(e,i,n,o){var r=this;Nn(this,t),this.ctx=e,this.parent=i,this.selected=n,this.hover=o;this.lines=new yu((function(t,i){if(void 0===t)return 0;var s=r.parent.getFormattingValues(e,n,o,i),a=0;\"\"!==t&&(a=r.ctx.measureText(t).width);return{width:a,values:s}}))}return Fn(t,[{key:\"process\",value:function(t){if(!vu(t))return this.lines.finalize();var e=this.parent.fontOptions;t=(t=t.replace(/\\r\\n/g,\"\\n\")).replace(/\\r/g,\"\\n\");var i=String(t).split(\"\\n\"),n=i.length;if(e.multi)for(var o=0;o<n;o++){var r=this.splitBlocks(i[o],e.multi);if(void 0!==r)if(0!==r.length){if(e.maxWdt>0)for(var s=0;s<r.length;s++){var a=r[s].mod,h=r[s].text;this.splitStringIntoLines(h,a,!0)}else for(var l=0;l<r.length;l++){var d=r[l].mod,c=r[l].text;this.lines.append(c,d)}this.lines.newLine()}else this.lines.newLine(\"\")}else if(e.maxWdt>0)for(var u=0;u<n;u++)this.splitStringIntoLines(i[u]);else for(var f=0;f<n;f++)this.lines.newLine(i[f]);return this.lines.finalize()}},{key:\"decodeMarkupSystem\",value:function(t){var e=\"none\";return\"markdown\"===t||\"md\"===t?e=\"markdown\":!0!==t&&\"html\"!==t||(e=\"html\"),e}},{key:\"splitHtmlBlocks\",value:function(t){for(var e=new bu(t),i=function(t){return!!/&/.test(t)&&(e.replace(e.text,\"&lt;\",\"<\")||e.replace(e.text,\"&amp;\",\"&\")||e.add(\"&\"),!0)};e.position<e.text.length;){var n=e.text.charAt(e.position);e.parseWS(n)||/</.test(n)&&(e.parseStartTag(\"bold\",\"<b>\")||e.parseStartTag(\"ital\",\"<i>\")||e.parseStartTag(\"mono\",\"<code>\")||e.parseEndTag(\"bold\",\"</b>\")||e.parseEndTag(\"ital\",\"</i>\")||e.parseEndTag(\"mono\",\"</code>\"))||i(n)||e.add(n),e.position++}return e.emitBlock(),e.blocks}},{key:\"splitMarkdownBlocks\",value:function(t){for(var e=this,i=new bu(t),n=!0,o=function(t){return!!/\\\\/.test(t)&&(i.position<e.text.length+1&&(i.position++,t=e.text.charAt(i.position),/ \\t/.test(t)?i.spacing=!0:(i.add(t),n=!1)),!0)};i.position<i.text.length;){var r=i.text.charAt(i.position);i.parseWS(r)||o(r)||(n||i.spacing)&&(i.parseStartTag(\"bold\",\"*\")||i.parseStartTag(\"ital\",\"_\")||i.parseStartTag(\"mono\",\"`\"))||i.parseEndTag(\"bold\",\"*\",\"afterBold\")||i.parseEndTag(\"ital\",\"_\",\"afterItal\")||i.parseEndTag(\"mono\",\"`\",\"afterMono\")||(i.add(r),n=!1),i.position++}return i.emitBlock(),i.blocks}},{key:\"splitBlocks\",value:function(t,e){var i=this.decodeMarkupSystem(e);return\"none\"===i?[{text:t,mod:\"normal\"}]:\"markdown\"===i?this.splitMarkdownBlocks(t):\"html\"===i?this.splitHtmlBlocks(t):void 0}},{key:\"overMaxWidth\",value:function(t){var e=this.ctx.measureText(t).width;return this.lines.curWidth()+e>this.parent.fontOptions.maxWdt}},{key:\"getLongestFit\",value:function(t){for(var e=\"\",i=0;i<t.length;){var n=e+(\"\"===e?\"\":\" \")+t[i];if(this.overMaxWidth(n))break;e=n,i++}return i}},{key:\"getLongestFitWord\",value:function(t){for(var e=0;e<t.length&&!this.overMaxWidth(Oo(t).call(t,0,e));)e++;return e}},{key:\"splitStringIntoLines\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"normal\",i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];this.parent.getFormattingValues(this.ctx,this.selected,this.hover,e);for(var n=(t=(t=t.replace(/^( +)/g,\"$1\\r\")).replace(/([^\\r][^ ]*)( +)/g,\"$1\\r$2\\r\")).split(\"\\r\");n.length>0;){var o=this.getLongestFit(n);if(0===o){var r=n[0],s=this.getLongestFitWord(r);this.lines.newLine(Oo(r).call(r,0,s),e),n[0]=Oo(r).call(r,s)}else{var a=o;\" \"===n[o-1]?o--:\" \"===n[a]&&a++;var h=Oo(n).call(n,0,o).join(\"\");o==n.length&&i?this.lines.append(h,e):this.lines.newLine(h,e),n=Oo(n).call(n,a)}}}}]),t}(),ku=[\"bold\",\"ital\",\"boldital\",\"mono\"],_u=function(){function t(e,i){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];Nn(this,t),this.body=e,this.pointToSelf=!1,this.baseSize=void 0,this.fontOptions={},this.setOptions(i),this.size={top:0,left:0,width:0,height:0,yLine:0},this.isEdgeLabel=n}return Fn(t,[{key:\"setOptions\",value:function(t){if(this.elementOptions=t,this.initFontOptions(t.font),vu(t.label)?this.labelDirty=!0:t.label=void 0,void 0!==t.font&&null!==t.font)if(\"string\"==typeof t.font)this.baseSize=this.fontOptions.size;else if(\"object\"===go(t.font)){var e=t.font.size;void 0!==e&&(this.baseSize=e)}}},{key:\"initFontOptions\",value:function(e){var i=this;Dh(ku,(function(t){i.fontOptions[t]={}})),t.parseFontString(this.fontOptions,e)?this.fontOptions.vadjust=0:Dh(e,(function(t,e){null!=t&&\"object\"!==go(t)&&(i.fontOptions[e]=t)}))}},{key:\"constrain\",value:function(t){var e={constrainWidth:!1,maxWdt:-1,minWdt:-1,constrainHeight:!1,minHgt:-1,valign:\"middle\"},i=Qh(t,\"widthConstraint\");if(\"number\"==typeof i)e.maxWdt=Number(i),e.minWdt=Number(i);else if(\"object\"===go(i)){var n=Qh(t,[\"widthConstraint\",\"maximum\"]);\"number\"==typeof n&&(e.maxWdt=Number(n));var o=Qh(t,[\"widthConstraint\",\"minimum\"]);\"number\"==typeof o&&(e.minWdt=Number(o))}var r=Qh(t,\"heightConstraint\");if(\"number\"==typeof r)e.minHgt=Number(r);else if(\"object\"===go(r)){var s=Qh(t,[\"heightConstraint\",\"minimum\"]);\"number\"==typeof s&&(e.minHgt=Number(s));var a=Qh(t,[\"heightConstraint\",\"valign\"]);\"string\"==typeof a&&(\"top\"!==a&&\"bottom\"!==a||(e.valign=a))}return e}},{key:\"update\",value:function(t,e){this.setOptions(t,!0),this.propagateFonts(e),Ch(this.fontOptions,this.constrain(e)),this.fontOptions.chooser=fu(\"label\",e)}},{key:\"adjustSizes\",value:function(t){var e=t?t.right+t.left:0;this.fontOptions.constrainWidth&&(this.fontOptions.maxWdt-=e,this.fontOptions.minWdt-=e);var i=t?t.top+t.bottom:0;this.fontOptions.constrainHeight&&(this.fontOptions.minHgt-=i)}},{key:\"addFontOptionsToPile\",value:function(t,e){for(var i=0;i<e.length;++i)this.addFontToPile(t,e[i])}},{key:\"addFontToPile\",value:function(t,e){if(void 0!==e&&void 0!==e.font&&null!==e.font){var i=e.font;t.push(i)}}},{key:\"getBasicOptions\",value:function(e){for(var i={},n=0;n<e.length;++n){var o=e[n],r={};t.parseFontString(r,o)&&(o=r),Dh(o,(function(t,e){void 0!==t&&(Object.prototype.hasOwnProperty.call(i,e)||(-1!==Hr(ku).call(ku,e)?i[e]={}:i[e]=t))}))}return i}},{key:\"getFontOption\",value:function(e,i,n){for(var o,r=0;r<e.length;++r){var s=e[r];if(Object.prototype.hasOwnProperty.call(s,i)){if(null==(o=s[i]))continue;var a={};if(t.parseFontString(a,o)&&(o=a),Object.prototype.hasOwnProperty.call(o,n))return o[n]}}if(Object.prototype.hasOwnProperty.call(this.fontOptions,n))return this.fontOptions[n];throw new Error(\"Did not find value for multi-font for property: '\"+n+\"'\")}},{key:\"getFontOptions\",value:function(t,e){for(var i={},n=[\"color\",\"size\",\"face\",\"mod\",\"vadjust\"],o=0;o<n.length;++o){var r=n[o];i[r]=this.getFontOption(t,e,r)}return i}},{key:\"propagateFonts\",value:function(t){var e=this,i=[];this.addFontOptionsToPile(i,t),this.fontOptions=this.getBasicOptions(i);for(var n=function(t){var n=ku[t],o=e.fontOptions[n];Dh(e.getFontOptions(i,n),(function(t,e){o[e]=t})),o.size=Number(o.size),o.vadjust=Number(o.vadjust)},o=0;o<ku.length;++o)n(o)}},{key:\"draw\",value:function(t,e,i,n,o){var r=arguments.length>5&&void 0!==arguments[5]?arguments[5]:\"middle\";if(void 0!==this.elementOptions.label){var s=this.fontOptions.size*this.body.view.scale;this.elementOptions.label&&s<this.elementOptions.scaling.label.drawThreshold-1||(s>=this.elementOptions.scaling.label.maxVisible&&(s=Number(this.elementOptions.scaling.label.maxVisible)/this.body.view.scale),this.calculateLabelSize(t,n,o,e,i,r),this._drawBackground(t),this._drawText(t,e,this.size.yLine,r,s))}}},{key:\"_drawBackground\",value:function(t){if(void 0!==this.fontOptions.background&&\"none\"!==this.fontOptions.background){t.fillStyle=this.fontOptions.background;var e=this.getSize();t.fillRect(e.left,e.top,e.width,e.height)}}},{key:\"_drawText\",value:function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:\"middle\",o=arguments.length>4?arguments[4]:void 0,r=this._setAlignment(t,e,i,n),s=uo(r,2);e=s[0],i=s[1],t.textAlign=\"left\",e-=this.size.width/2,this.fontOptions.valign&&this.size.height>this.size.labelHeight&&(\"top\"===this.fontOptions.valign&&(i-=(this.size.height-this.size.labelHeight)/2),\"bottom\"===this.fontOptions.valign&&(i+=(this.size.height-this.size.labelHeight)/2));for(var a=0;a<this.lineCount;a++){var h=this.lines[a];if(h&&h.blocks){var l=0;this.isEdgeLabel||\"center\"===this.fontOptions.align?l+=(this.size.width-h.width)/2:\"right\"===this.fontOptions.align&&(l+=this.size.width-h.width);for(var d=0;d<h.blocks.length;d++){var c=h.blocks[d];t.font=c.font;var u=this._getColor(c.color,o,c.strokeColor),f=uo(u,2),p=f[0],v=f[1];c.strokeWidth>0&&(t.lineWidth=c.strokeWidth,t.strokeStyle=v,t.lineJoin=\"round\"),t.fillStyle=p,c.strokeWidth>0&&t.strokeText(c.text,e+l,i+c.vadjust),t.fillText(c.text,e+l,i+c.vadjust),l+=c.width}i+=h.height}}}},{key:\"_setAlignment\",value:function(t,e,i,n){if(this.isEdgeLabel&&\"horizontal\"!==this.fontOptions.align&&!1===this.pointToSelf){e=0,i=0;\"top\"===this.fontOptions.align?(t.textBaseline=\"alphabetic\",i-=4):\"bottom\"===this.fontOptions.align?(t.textBaseline=\"hanging\",i+=4):t.textBaseline=\"middle\"}else t.textBaseline=n;return[e,i]}},{key:\"_getColor\",value:function(t,e,i){var n=t||\"#000000\",o=i||\"#ffffff\";if(e<=this.elementOptions.scaling.label.drawThreshold){var r=Math.max(0,Math.min(1,1-(this.elementOptions.scaling.label.drawThreshold-e)));n=Fh(n,r),o=Fh(o,r)}return[n,o]}},{key:\"getTextSize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return this._processLabel(t,e,i),{width:this.size.width,height:this.size.height,lineCount:this.lineCount}}},{key:\"getSize\",value:function(){var t=this.size.left,e=this.size.top-1;if(this.isEdgeLabel){var i=.5*-this.size.width;switch(this.fontOptions.align){case\"middle\":t=i,e=.5*-this.size.height;break;case\"top\":t=i,e=-(this.size.height+2);break;case\"bottom\":t=i,e=2}}return{left:t,top:e,width:this.size.width,height:this.size.height}}},{key:\"calculateLabelSize\",value:function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,r=arguments.length>5&&void 0!==arguments[5]?arguments[5]:\"middle\";this._processLabel(t,e,i),this.size.left=n-.5*this.size.width,this.size.top=o-.5*this.size.height,this.size.yLine=o+.5*(1-this.lineCount)*this.fontOptions.size,\"hanging\"===r&&(this.size.top+=.5*this.fontOptions.size,this.size.top+=4,this.size.yLine+=4)}},{key:\"getFormattingValues\",value:function(t,e,i,n){var o=function(t,e,i){return\"normal\"===e?\"mod\"===i?\"\":t[i]:void 0!==t[e][i]?t[e][i]:t[i]},r={color:o(this.fontOptions,n,\"color\"),size:o(this.fontOptions,n,\"size\"),face:o(this.fontOptions,n,\"face\"),mod:o(this.fontOptions,n,\"mod\"),vadjust:o(this.fontOptions,n,\"vadjust\"),strokeWidth:this.fontOptions.strokeWidth,strokeColor:this.fontOptions.strokeColor};(e||i)&&(\"normal\"===n&&!0===this.fontOptions.chooser&&this.elementOptions.labelHighlightBold?r.mod=\"bold\":\"function\"==typeof this.fontOptions.chooser&&this.fontOptions.chooser(r,this.elementOptions.id,e,i));var s=\"\";return void 0!==r.mod&&\"\"!==r.mod&&(s+=r.mod+\" \"),s+=r.size+\"px \"+r.face,t.font=s.replace(/\"/g,\"\"),r.font=t.font,r.height=r.size,r}},{key:\"differentState\",value:function(t,e){return t!==this.selectedState||e!==this.hoverState}},{key:\"_processLabelText\",value:function(t,e,i,n){return new wu(t,this,e,i).process(n)}},{key:\"_processLabel\",value:function(t,e,i){if(!1!==this.labelDirty||this.differentState(e,i)){var n=this._processLabelText(t,e,i,this.elementOptions.label);this.fontOptions.minWdt>0&&n.width<this.fontOptions.minWdt&&(n.width=this.fontOptions.minWdt),this.size.labelHeight=n.height,this.fontOptions.minHgt>0&&n.height<this.fontOptions.minHgt&&(n.height=this.fontOptions.minHgt),this.lines=n.lines,this.lineCount=n.lines.length,this.size.width=n.width,this.size.height=n.height,this.selectedState=e,this.hoverState=i,this.labelDirty=!1}}},{key:\"visible\",value:function(){return 0!==this.size.width&&0!==this.size.height&&void 0!==this.elementOptions.label&&!(this.fontOptions.size*this.body.view.scale<this.elementOptions.scaling.label.drawThreshold-1)}}],[{key:\"parseFontString\",value:function(t,e){if(!e||\"string\"!=typeof e)return!1;var i=e.split(\" \");return t.size=+i[0].replace(\"px\",\"\"),t.face=i[1],t.color=i[2],!0}}]),t}(),xu=function(){function t(e,i,n){Nn(this,t),this.body=i,this.labelModule=n,this.setOptions(e),this.top=void 0,this.left=void 0,this.height=void 0,this.width=void 0,this.radius=void 0,this.margin=void 0,this.refreshNeeded=!0,this.boundingBox={top:0,left:0,right:0,bottom:0}}return Fn(t,[{key:\"setOptions\",value:function(t){this.options=t}},{key:\"_setMargins\",value:function(t){this.margin={},this.options.margin&&(\"object\"==go(this.options.margin)?(this.margin.top=this.options.margin.top,this.margin.right=this.options.margin.right,this.margin.bottom=this.options.margin.bottom,this.margin.left=this.options.margin.left):(this.margin.top=this.options.margin,this.margin.right=this.options.margin,this.margin.bottom=this.options.margin,this.margin.left=this.options.margin)),t.adjustSizes(this.margin)}},{key:\"_distanceToBorder\",value:function(t,e){var i=this.options.borderWidth;return t&&this.resize(t),Math.min(Math.abs(this.width/2/Math.cos(e)),Math.abs(this.height/2/Math.sin(e)))+i}},{key:\"enableShadow\",value:function(t,e){e.shadow&&(t.shadowColor=e.shadowColor,t.shadowBlur=e.shadowSize,t.shadowOffsetX=e.shadowX,t.shadowOffsetY=e.shadowY)}},{key:\"disableShadow\",value:function(t,e){e.shadow&&(t.shadowColor=\"rgba(0,0,0,0)\",t.shadowBlur=0,t.shadowOffsetX=0,t.shadowOffsetY=0)}},{key:\"enableBorderDashes\",value:function(t,e){if(!1!==e.borderDashes)if(void 0!==t.setLineDash){var i=e.borderDashes;!0===i&&(i=[5,15]),t.setLineDash(i)}else console.warn(\"setLineDash is not supported in this browser. The dashed borders cannot be used.\"),this.options.shapeProperties.borderDashes=!1,e.borderDashes=!1}},{key:\"disableBorderDashes\",value:function(t,e){!1!==e.borderDashes&&(void 0!==t.setLineDash?t.setLineDash([0]):(console.warn(\"setLineDash is not supported in this browser. The dashed borders cannot be used.\"),this.options.shapeProperties.borderDashes=!1,e.borderDashes=!1))}},{key:\"needsRefresh\",value:function(t,e){return!0===this.refreshNeeded?(this.refreshNeeded=!1,!0):void 0===this.width||this.labelModule.differentState(t,e)}},{key:\"initContextForDraw\",value:function(t,e){var i=e.borderWidth/this.body.view.scale;t.lineWidth=Math.min(this.width,i),t.strokeStyle=e.borderColor,t.fillStyle=e.color}},{key:\"performStroke\",value:function(t,e){var i=e.borderWidth/this.body.view.scale;t.save(),i>0&&(this.enableBorderDashes(t,e),t.stroke(),this.disableBorderDashes(t,e)),t.restore()}},{key:\"performFill\",value:function(t,e){t.save(),t.fillStyle=e.color,this.enableShadow(t,e),hs(t).call(t),this.disableShadow(t,e),t.restore(),this.performStroke(t,e)}},{key:\"_addBoundingBoxMargin\",value:function(t){this.boundingBox.left-=t,this.boundingBox.top-=t,this.boundingBox.bottom+=t,this.boundingBox.right+=t}},{key:\"_updateBoundingBox\",value:function(t,e,i,n,o){void 0!==i&&this.resize(i,n,o),this.left=t-this.width/2,this.top=e-this.height/2,this.boundingBox.left=this.left,this.boundingBox.top=this.top,this.boundingBox.bottom=this.top+this.height,this.boundingBox.right=this.left+this.width}},{key:\"updateBoundingBox\",value:function(t,e,i,n,o){this._updateBoundingBox(t,e,i,n,o)}},{key:\"getDimensionsFromLabel\",value:function(t,e,i){this.textSize=this.labelModule.getTextSize(t,e,i);var n=this.textSize.width,o=this.textSize.height;return 0===n&&(n=14,o=14),{width:n,height:o}}}]),t}();function Eu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Ou=function(t){Ad(i,t);var e=Eu(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o))._setMargins(o),r}return Fn(i,[{key:\"resize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(this.needsRefresh(e,i)){var n=this.getDimensionsFromLabel(t,e,i);this.width=n.width+this.margin.right+this.margin.left,this.height=n.height+this.margin.top+this.margin.bottom,this.radius=this.width/2}}},{key:\"draw\",value:function(t,e,i,n,o,r){this.resize(t,n,o),this.left=e-this.width/2,this.top=i-this.height/2,this.initContextForDraw(t,r),Yt(t,this.left,this.top,this.width,this.height,r.borderRadius),this.performFill(t,r),this.updateBoundingBox(e,i,t,n,o),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,n,o)}},{key:\"updateBoundingBox\",value:function(t,e,i,n,o){this._updateBoundingBox(t,e,i,n,o);var r=this.options.shapeProperties.borderRadius;this._addBoundingBoxMargin(r)}},{key:\"distanceToBorder\",value:function(t,e){t&&this.resize(t);var i=this.options.borderWidth;return Math.min(Math.abs(this.width/2/Math.cos(e)),Math.abs(this.height/2/Math.sin(e)))+i}}]),i}(xu);function Cu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Su=function(t){Ad(i,t);var e=Cu(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o)).labelOffset=0,r.selected=!1,r}return Fn(i,[{key:\"setOptions\",value:function(t,e,i){this.options=t,void 0===e&&void 0===i||this.setImages(e,i)}},{key:\"setImages\",value:function(t,e){e&&this.selected?(this.imageObj=e,this.imageObjAlt=t):(this.imageObj=t,this.imageObjAlt=e)}},{key:\"switchImages\",value:function(t){var e=t&&!this.selected||!t&&this.selected;if(this.selected=t,void 0!==this.imageObjAlt&&e){var i=this.imageObj;this.imageObj=this.imageObjAlt,this.imageObjAlt=i}}},{key:\"_getImagePadding\",value:function(){var t={top:0,right:0,bottom:0,left:0};if(this.options.imagePadding){var e=this.options.imagePadding;\"object\"==go(e)?(t.top=e.top,t.right=e.right,t.bottom=e.bottom,t.left=e.left):(t.top=e,t.right=e,t.bottom=e,t.left=e)}return t}},{key:\"_resizeImage\",value:function(){var t,e;if(!1===this.options.shapeProperties.useImageSize){var i=1,n=1;this.imageObj.width&&this.imageObj.height&&(this.imageObj.width>this.imageObj.height?i=this.imageObj.width/this.imageObj.height:n=this.imageObj.height/this.imageObj.width),t=2*this.options.size*i,e=2*this.options.size*n}else{var o=this._getImagePadding();t=this.imageObj.width+o.left+o.right,e=this.imageObj.height+o.top+o.bottom}this.width=t,this.height=e,this.radius=.5*this.width}},{key:\"_drawRawCircle\",value:function(t,e,i,n){this.initContextForDraw(t,n),Ut(t,e,i,n.size),this.performFill(t,n)}},{key:\"_drawImageAtPosition\",value:function(t,e){if(0!=this.imageObj.width){t.globalAlpha=void 0!==e.opacity?e.opacity:1,this.enableShadow(t,e);var i=1;!0===this.options.shapeProperties.interpolation&&(i=this.imageObj.width/this.width/this.body.view.scale);var n=this._getImagePadding(),o=this.left+n.left,r=this.top+n.top,s=this.width-n.left-n.right,a=this.height-n.top-n.bottom;this.imageObj.drawImageAtPosition(t,i,o,r,s,a),this.disableShadow(t,e)}}},{key:\"_drawImageLabel\",value:function(t,e,i,n,o){var r=0;if(void 0!==this.height){r=.5*this.height;var s=this.labelModule.getTextSize(t,n,o);s.lineCount>=1&&(r+=s.height/2)}var a=i+r;this.options.label&&(this.labelOffset=r),this.labelModule.draw(t,e,a,n,o,\"hanging\")}}]),i}(xu);function Tu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Mu=function(t){Ad(i,t);var e=Tu(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o))._setMargins(o),r}return Fn(i,[{key:\"resize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(this.needsRefresh(e,i)){var n=this.getDimensionsFromLabel(t,e,i),o=Math.max(n.width+this.margin.right+this.margin.left,n.height+this.margin.top+this.margin.bottom);this.options.size=o/2,this.width=o,this.height=o,this.radius=this.width/2}}},{key:\"draw\",value:function(t,e,i,n,o,r){this.resize(t,n,o),this.left=e-this.width/2,this.top=i-this.height/2,this._drawRawCircle(t,e,i,r),this.updateBoundingBox(e,i),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,i,n,o)}},{key:\"updateBoundingBox\",value:function(t,e){this.boundingBox.top=e-this.options.size,this.boundingBox.left=t-this.options.size,this.boundingBox.right=t+this.options.size,this.boundingBox.bottom=e+this.options.size}},{key:\"distanceToBorder\",value:function(t){return t&&this.resize(t),.5*this.width}}]),i}(Su);function Pu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Du=function(t){Ad(i,t);var e=Pu(i);function i(t,n,o,r,s){var a;return Nn(this,i),(a=e.call(this,t,n,o)).setImages(r,s),a}return Fn(i,[{key:\"resize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover,n=void 0===this.imageObj.src||void 0===this.imageObj.width||void 0===this.imageObj.height;if(n){var o=2*this.options.size;return this.width=o,this.height=o,void(this.radius=.5*this.width)}this.needsRefresh(e,i)&&this._resizeImage()}},{key:\"draw\",value:function(t,e,i,n,o,r){this.switchImages(n),this.resize();var s=e,a=i;\"top-left\"===this.options.shapeProperties.coordinateOrigin?(this.left=e,this.top=i,s+=this.width/2,a+=this.height/2):(this.left=e-this.width/2,this.top=i-this.height/2),this._drawRawCircle(t,s,a,r),t.save(),t.clip(),this._drawImageAtPosition(t,r),t.restore(),this._drawImageLabel(t,s,a,n,o),this.updateBoundingBox(e,i)}},{key:\"updateBoundingBox\",value:function(t,e){\"top-left\"===this.options.shapeProperties.coordinateOrigin?(this.boundingBox.top=e,this.boundingBox.left=t,this.boundingBox.right=t+2*this.options.size,this.boundingBox.bottom=e+2*this.options.size):(this.boundingBox.top=e-this.options.size,this.boundingBox.left=t-this.options.size,this.boundingBox.right=t+this.options.size,this.boundingBox.bottom=e+this.options.size),this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelOffset)}},{key:\"distanceToBorder\",value:function(t){return t&&this.resize(t),.5*this.width}}]),i}(Su);function Iu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Bu=function(t){Ad(i,t);var e=Iu(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"resize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover,n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{size:this.options.size};if(this.needsRefresh(e,i)){var o,r;this.labelModule.getTextSize(t,e,i);var s=2*n.size;this.width=null!==(o=this.customSizeWidth)&&void 0!==o?o:s,this.height=null!==(r=this.customSizeHeight)&&void 0!==r?r:s,this.radius=.5*this.width}}},{key:\"_drawShape\",value:function(t,e,i,n,o,r,s,a){var h,l=this;return this.resize(t,r,s,a),this.left=n-this.width/2,this.top=o-this.height/2,this.initContextForDraw(t,a),(h=e,Object.prototype.hasOwnProperty.call($t,h)?$t[h]:function(t){for(var e=arguments.length,i=new Array(e>1?e-1:0),n=1;n<e;n++)i[n-1]=arguments[n];CanvasRenderingContext2D.prototype[h].call(t,i)})(t,n,o,a.size),this.performFill(t,a),void 0!==this.options.icon&&void 0!==this.options.icon.code&&(t.font=(r?\"bold \":\"\")+this.height/2+\"px \"+(this.options.icon.face||\"FontAwesome\"),t.fillStyle=this.options.icon.color||\"black\",t.textAlign=\"center\",t.textBaseline=\"middle\",t.fillText(this.options.icon.code,n,o)),{drawExternalLabel:function(){if(void 0!==l.options.label){l.labelModule.calculateLabelSize(t,r,s,n,o,\"hanging\");var e=o+.5*l.height+.5*l.labelModule.size.height;l.labelModule.draw(t,n,e,r,s,\"hanging\")}l.updateBoundingBox(n,o)}}}},{key:\"updateBoundingBox\",value:function(t,e){this.boundingBox.top=e-this.options.size,this.boundingBox.left=t-this.options.size,this.boundingBox.right=t+this.options.size,this.boundingBox.bottom=e+this.options.size,void 0!==this.options.label&&this.labelModule.size.width>0&&(this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelModule.size.height))}}]),i}(xu);function zu(t,e){var i=zo(t);if(On){var n=On(t);e&&(n=mr(n).call(n,(function(e){return Mn(t,e).enumerable}))),i.push.apply(i,n)}return i}function Nu(t){for(var e=1;e<arguments.length;e++){var i,n=null!=arguments[e]?arguments[e]:{};if(e%2)Wo(i=zu(Object(n),!0)).call(i,(function(e){jn(t,e,n[e])}));else if(Dn)In(t,Dn(n));else{var o;Wo(o=zu(Object(n))).call(o,(function(e){zn(t,e,Mn(n,e))}))}}return t}function Au(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Fu=function(t){Ad(i,t);var e=Au(i);function i(t,n,o,r){var s;return Nn(this,i),(s=e.call(this,t,n,o,r)).ctxRenderer=r,s}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){this.resize(t,n,o,r),this.left=e-this.width/2,this.top=i-this.height/2,t.save();var s=this.ctxRenderer({ctx:t,id:this.options.id,x:e,y:i,state:{selected:n,hover:o},style:Nu({},r),label:this.options.label});if(null!=s.drawNode&&s.drawNode(),t.restore(),s.drawExternalLabel){var a=s.drawExternalLabel;s.drawExternalLabel=function(){t.save(),a(),t.restore()}}return s.nodeDimensions&&(this.customSizeWidth=s.nodeDimensions.width,this.customSizeHeight=s.nodeDimensions.height),s}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Bu);function ju(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Ru=function(t){Ad(i,t);var e=ju(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o))._setMargins(o),r}return Fn(i,[{key:\"resize\",value:function(t,e,i){if(this.needsRefresh(e,i)){var n=this.getDimensionsFromLabel(t,e,i).width+this.margin.right+this.margin.left;this.width=n,this.height=n,this.radius=this.width/2}}},{key:\"draw\",value:function(t,e,i,n,o,r){this.resize(t,n,o),this.left=e-this.width/2,this.top=i-this.height/2,this.initContextForDraw(t,r),Gt(t,e-this.width/2,i-this.height/2,this.width,this.height),this.performFill(t,r),this.updateBoundingBox(e,i,t,n,o),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,n,o)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(xu);function Lu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Hu=function(t){Ad(i,t);var e=Lu(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){return this._drawShape(t,\"diamond\",4,e,i,n,o,r)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Bu);function Wu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var qu=function(t){Ad(i,t);var e=Wu(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){return this._drawShape(t,\"circle\",2,e,i,n,o,r)}},{key:\"distanceToBorder\",value:function(t){return t&&this.resize(t),this.options.size}}]),i}(Bu);function Vu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Uu=function(t){Ad(i,t);var e=Vu(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"resize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(this.needsRefresh(e,i)){var n=this.getDimensionsFromLabel(t,e,i);this.height=2*n.height,this.width=n.width+n.height,this.radius=.5*this.width}}},{key:\"draw\",value:function(t,e,i,n,o,r){this.resize(t,n,o),this.left=e-.5*this.width,this.top=i-.5*this.height,this.initContextForDraw(t,r),Xt(t,this.left,this.top,this.width,this.height),this.performFill(t,r),this.updateBoundingBox(e,i,t,n,o),this.labelModule.draw(t,e,i,n,o)}},{key:\"distanceToBorder\",value:function(t,e){t&&this.resize(t);var i=.5*this.width,n=.5*this.height,o=Math.sin(e)*i,r=Math.cos(e)*n;return i*n/Math.sqrt(o*o+r*r)}}]),i}(xu);function Yu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Xu=function(t){Ad(i,t);var e=Yu(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o))._setMargins(o),r}return Fn(i,[{key:\"resize\",value:function(t,e,i){this.needsRefresh(e,i)&&(this.iconSize={width:Number(this.options.icon.size),height:Number(this.options.icon.size)},this.width=this.iconSize.width+this.margin.right+this.margin.left,this.height=this.iconSize.height+this.margin.top+this.margin.bottom,this.radius=.5*this.width)}},{key:\"draw\",value:function(t,e,i,n,o,r){var s=this;return this.resize(t,n,o),this.options.icon.size=this.options.icon.size||50,this.left=e-this.width/2,this.top=i-this.height/2,this._icon(t,e,i,n,o,r),{drawExternalLabel:function(){if(void 0!==s.options.label){s.labelModule.draw(t,s.left+s.iconSize.width/2+s.margin.left,i+s.height/2+5,n)}s.updateBoundingBox(e,i)}}}},{key:\"updateBoundingBox\",value:function(t,e){if(this.boundingBox.top=e-.5*this.options.icon.size,this.boundingBox.left=t-.5*this.options.icon.size,this.boundingBox.right=t+.5*this.options.icon.size,this.boundingBox.bottom=e+.5*this.options.icon.size,void 0!==this.options.label&&this.labelModule.size.width>0){this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelModule.size.height+5)}}},{key:\"_icon\",value:function(t,e,i,n,o,r){var s=Number(this.options.icon.size);void 0!==this.options.icon.code?(t.font=[null!=this.options.icon.weight?this.options.icon.weight:n?\"bold\":\"\",(null!=this.options.icon.weight&&n?5:0)+s+\"px\",this.options.icon.face].join(\" \"),t.fillStyle=this.options.icon.color||\"black\",t.textAlign=\"center\",t.textBaseline=\"middle\",this.enableShadow(t,r),t.fillText(this.options.icon.code,e,i),this.disableShadow(t,r)):console.error(\"When using the icon shape, you need to define the code in the icon options object. This can be done per node or globally.\")}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(xu);function Gu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Ku=function(t){Ad(i,t);var e=Gu(i);function i(t,n,o,r,s){var a;return Nn(this,i),(a=e.call(this,t,n,o)).setImages(r,s),a}return Fn(i,[{key:\"resize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover,n=void 0===this.imageObj.src||void 0===this.imageObj.width||void 0===this.imageObj.height;if(n){var o=2*this.options.size;return this.width=o,void(this.height=o)}this.needsRefresh(e,i)&&this._resizeImage()}},{key:\"draw\",value:function(t,e,i,n,o,r){t.save(),this.switchImages(n),this.resize();var s=e,a=i;if(\"top-left\"===this.options.shapeProperties.coordinateOrigin?(this.left=e,this.top=i,s+=this.width/2,a+=this.height/2):(this.left=e-this.width/2,this.top=i-this.height/2),!0===this.options.shapeProperties.useBorderWithImage){var h=this.options.borderWidth,l=this.options.borderWidthSelected||2*this.options.borderWidth,d=(n?l:h)/this.body.view.scale;t.lineWidth=Math.min(this.width,d),t.beginPath();var c=n?this.options.color.highlight.border:o?this.options.color.hover.border:this.options.color.border,u=n?this.options.color.highlight.background:o?this.options.color.hover.background:this.options.color.background;void 0!==r.opacity&&(c=Fh(c,r.opacity),u=Fh(u,r.opacity)),t.strokeStyle=c,t.fillStyle=u,t.rect(this.left-.5*t.lineWidth,this.top-.5*t.lineWidth,this.width+t.lineWidth,this.height+t.lineWidth),hs(t).call(t),this.performStroke(t,r),t.closePath()}this._drawImageAtPosition(t,r),this._drawImageLabel(t,s,a,n,o),this.updateBoundingBox(e,i),t.restore()}},{key:\"updateBoundingBox\",value:function(t,e){this.resize(),\"top-left\"===this.options.shapeProperties.coordinateOrigin?(this.left=t,this.top=e):(this.left=t-this.width/2,this.top=e-this.height/2),this.boundingBox.left=this.left,this.boundingBox.top=this.top,this.boundingBox.bottom=this.top+this.height,this.boundingBox.right=this.left+this.width,void 0!==this.options.label&&this.labelModule.size.width>0&&(this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelOffset))}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Su);function $u(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Zu=function(t){Ad(i,t);var e=$u(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){return this._drawShape(t,\"square\",2,e,i,n,o,r)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Bu);function Qu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Ju=function(t){Ad(i,t);var e=Qu(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){return this._drawShape(t,\"hexagon\",4,e,i,n,o,r)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Bu);function tf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var ef=function(t){Ad(i,t);var e=tf(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){return this._drawShape(t,\"star\",4,e,i,n,o,r)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Bu);function nf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var of=function(t){Ad(i,t);var e=nf(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o))._setMargins(o),r}return Fn(i,[{key:\"resize\",value:function(t,e,i){this.needsRefresh(e,i)&&(this.textSize=this.labelModule.getTextSize(t,e,i),this.width=this.textSize.width+this.margin.right+this.margin.left,this.height=this.textSize.height+this.margin.top+this.margin.bottom,this.radius=.5*this.width)}},{key:\"draw\",value:function(t,e,i,n,o,r){this.resize(t,n,o),this.left=e-this.width/2,this.top=i-this.height/2,this.enableShadow(t,r),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,n,o),this.disableShadow(t,r),this.updateBoundingBox(e,i,t,n,o)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(xu);function rf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var sf=function(t){Ad(i,t);var e=rf(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){return this._drawShape(t,\"triangle\",3,e,i,n,o,r)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Bu);function af(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var hf=function(t){Ad(i,t);var e=af(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){return this._drawShape(t,\"triangleDown\",3,e,i,n,o,r)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Bu);function lf(t,e){var i=zo(t);if(On){var n=On(t);e&&(n=mr(n).call(n,(function(e){return Mn(t,e).enumerable}))),i.push.apply(i,n)}return i}function df(t){for(var e=1;e<arguments.length;e++){var i,n=null!=arguments[e]?arguments[e]:{};if(e%2)Wo(i=lf(Object(n),!0)).call(i,(function(e){jn(t,e,n[e])}));else if(Dn)In(t,Dn(n));else{var o;Wo(o=lf(Object(n))).call(o,(function(e){zn(t,e,Mn(n,e))}))}}return t}var cf=function(){function t(e,i,n,o,r,s){Nn(this,t),this.options=Kh(r),this.globalOptions=r,this.defaultOptions=s,this.body=i,this.edges=[],this.id=void 0,this.imagelist=n,this.grouplist=o,this.x=void 0,this.y=void 0,this.baseSize=this.options.size,this.baseFontSize=this.options.font.size,this.predefinedPosition=!1,this.selected=!1,this.hover=!1,this.labelModule=new _u(this.body,this.options,!1),this.setOptions(e)}return Fn(t,[{key:\"attachEdge\",value:function(t){var e;-1===Hr(e=this.edges).call(e,t)&&this.edges.push(t)}},{key:\"detachEdge\",value:function(t){var e,i,n=Hr(e=this.edges).call(e,t);-1!=n&&er(i=this.edges).call(i,n,1)}},{key:\"setOptions\",value:function(e){var i=this.options.shape;if(e){if(void 0!==e.color&&(this._localColor=e.color),void 0!==e.id&&(this.id=e.id),void 0===this.id)throw new Error(\"Node must have an id\");t.checkMass(e,this.id),void 0!==e.x&&(null===e.x?(this.x=void 0,this.predefinedPosition=!1):(this.x=Br(e.x),this.predefinedPosition=!0)),void 0!==e.y&&(null===e.y?(this.y=void 0,this.predefinedPosition=!1):(this.y=Br(e.y),this.predefinedPosition=!0)),void 0!==e.size&&(this.baseSize=e.size),void 0!==e.value&&(e.value=hu(e.value)),t.parseOptions(this.options,e,!0,this.globalOptions,this.grouplist);var n=[e,this.options,this.defaultOptions];return this.chooser=fu(\"node\",n),this._load_images(),this.updateLabelModule(e),void 0!==e.opacity&&t.checkOpacity(e.opacity)&&(this.options.opacity=e.opacity),this.updateShape(i),void 0!==e.hidden||void 0!==e.physics}}},{key:\"_load_images\",value:function(){if((\"circularImage\"===this.options.shape||\"image\"===this.options.shape)&&void 0===this.options.image)throw new Error(\"Option image must be defined for node type '\"+this.options.shape+\"'\");if(void 0!==this.options.image){if(void 0===this.imagelist)throw new Error(\"Internal Error: No images provided\");if(\"string\"==typeof this.options.image)this.imageObj=this.imagelist.load(this.options.image,this.options.brokenImage,this.id);else{if(void 0===this.options.image.unselected)throw new Error(\"No unselected image provided\");this.imageObj=this.imagelist.load(this.options.image.unselected,this.options.brokenImage,this.id),void 0!==this.options.image.selected?this.imageObjAlt=this.imagelist.load(this.options.image.selected,this.options.brokenImage,this.id):this.imageObjAlt=void 0}}}},{key:\"getFormattingValues\",value:function(){var t={color:this.options.color.background,opacity:this.options.opacity,borderWidth:this.options.borderWidth,borderColor:this.options.color.border,size:this.options.size,borderDashes:this.options.shapeProperties.borderDashes,borderRadius:this.options.shapeProperties.borderRadius,shadow:this.options.shadow.enabled,shadowColor:this.options.shadow.color,shadowSize:this.options.shadow.size,shadowX:this.options.shadow.x,shadowY:this.options.shadow.y};if(this.selected||this.hover?!0===this.chooser?this.selected?(null!=this.options.borderWidthSelected?t.borderWidth=this.options.borderWidthSelected:t.borderWidth*=2,t.color=this.options.color.highlight.background,t.borderColor=this.options.color.highlight.border,t.shadow=this.options.shadow.enabled):this.hover&&(t.color=this.options.color.hover.background,t.borderColor=this.options.color.hover.border,t.shadow=this.options.shadow.enabled):\"function\"==typeof this.chooser&&(this.chooser(t,this.options.id,this.selected,this.hover),!1===t.shadow&&(t.shadowColor===this.options.shadow.color&&t.shadowSize===this.options.shadow.size&&t.shadowX===this.options.shadow.x&&t.shadowY===this.options.shadow.y||(t.shadow=!0))):t.shadow=this.options.shadow.enabled,void 0!==this.options.opacity){var e=this.options.opacity;t.borderColor=Fh(t.borderColor,e),t.color=Fh(t.color,e),t.shadowColor=Fh(t.shadowColor,e)}return t}},{key:\"updateLabelModule\",value:function(e){void 0!==this.options.label&&null!==this.options.label||(this.options.label=\"\"),t.updateGroupOptions(this.options,df(df({},e),{},{color:e&&e.color||this._localColor||void 0}),this.grouplist);var i=this.grouplist.get(this.options.group,!1),n=[e,this.options,i,this.globalOptions,this.defaultOptions];this.labelModule.update(this.options,n),void 0!==this.labelModule.baseSize&&(this.baseFontSize=this.labelModule.baseSize)}},{key:\"updateShape\",value:function(t){if(t===this.options.shape&&this.shape)this.shape.setOptions(this.options,this.imageObj,this.imageObjAlt);else switch(this.options.shape){case\"box\":this.shape=new Ou(this.options,this.body,this.labelModule);break;case\"circle\":this.shape=new Mu(this.options,this.body,this.labelModule);break;case\"circularImage\":this.shape=new Du(this.options,this.body,this.labelModule,this.imageObj,this.imageObjAlt);break;case\"custom\":this.shape=new Fu(this.options,this.body,this.labelModule,this.options.ctxRenderer);break;case\"database\":this.shape=new Ru(this.options,this.body,this.labelModule);break;case\"diamond\":this.shape=new Hu(this.options,this.body,this.labelModule);break;case\"dot\":this.shape=new qu(this.options,this.body,this.labelModule);break;case\"ellipse\":this.shape=new Uu(this.options,this.body,this.labelModule);break;case\"icon\":this.shape=new Xu(this.options,this.body,this.labelModule);break;case\"image\":this.shape=new Ku(this.options,this.body,this.labelModule,this.imageObj,this.imageObjAlt);break;case\"square\":this.shape=new Zu(this.options,this.body,this.labelModule);break;case\"hexagon\":this.shape=new Ju(this.options,this.body,this.labelModule);break;case\"star\":this.shape=new ef(this.options,this.body,this.labelModule);break;case\"text\":this.shape=new of(this.options,this.body,this.labelModule);break;case\"triangle\":this.shape=new sf(this.options,this.body,this.labelModule);break;case\"triangleDown\":this.shape=new hf(this.options,this.body,this.labelModule);break;default:this.shape=new Uu(this.options,this.body,this.labelModule)}this.needsRefresh()}},{key:\"select\",value:function(){this.selected=!0,this.needsRefresh()}},{key:\"unselect\",value:function(){this.selected=!1,this.needsRefresh()}},{key:\"needsRefresh\",value:function(){this.shape.refreshNeeded=!0}},{key:\"getTitle\",value:function(){return this.options.title}},{key:\"distanceToBorder\",value:function(t,e){return this.shape.distanceToBorder(t,e)}},{key:\"isFixed\",value:function(){return this.options.fixed.x&&this.options.fixed.y}},{key:\"isSelected\",value:function(){return this.selected}},{key:\"getValue\",value:function(){return this.options.value}},{key:\"getLabelSize\",value:function(){return this.labelModule.size()}},{key:\"setValueRange\",value:function(t,e,i){if(void 0!==this.options.value){var n=this.options.scaling.customScalingFunction(t,e,i,this.options.value),o=this.options.scaling.max-this.options.scaling.min;if(!0===this.options.scaling.label.enabled){var r=this.options.scaling.label.max-this.options.scaling.label.min;this.options.font.size=this.options.scaling.label.min+n*r}this.options.size=this.options.scaling.min+n*o}else this.options.size=this.baseSize,this.options.font.size=this.baseFontSize;this.updateLabelModule()}},{key:\"draw\",value:function(t){var e=this.getFormattingValues();return this.shape.draw(t,this.x,this.y,this.selected,this.hover,e)||{}}},{key:\"updateBoundingBox\",value:function(t){this.shape.updateBoundingBox(this.x,this.y,t)}},{key:\"resize\",value:function(t){var e=this.getFormattingValues();this.shape.resize(t,this.selected,this.hover,e)}},{key:\"getItemsOnPoint\",value:function(t){var e=[];return this.labelModule.visible()&&pu(this.labelModule.getSize(),t)&&e.push({nodeId:this.id,labelId:0}),pu(this.shape.boundingBox,t)&&e.push({nodeId:this.id}),e}},{key:\"isOverlappingWith\",value:function(t){return this.shape.left<t.right&&this.shape.left+this.shape.width>t.left&&this.shape.top<t.bottom&&this.shape.top+this.shape.height>t.top}},{key:\"isBoundingBoxOverlappingWith\",value:function(t){return this.shape.boundingBox.left<t.right&&this.shape.boundingBox.right>t.left&&this.shape.boundingBox.top<t.bottom&&this.shape.boundingBox.bottom>t.top}}],[{key:\"checkOpacity\",value:function(t){return 0<=t&&t<=1}},{key:\"checkCoordinateOrigin\",value:function(t){return void 0===t||\"center\"===t||\"top-left\"===t}},{key:\"updateGroupOptions\",value:function(e,i,n){var o;if(void 0!==n){var r=e.group;if(void 0!==i&&void 0!==i.group&&r!==i.group)throw new Error(\"updateGroupOptions: group values in options don't match.\");if(\"number\"==typeof r||\"string\"==typeof r&&\"\"!=r){var s=n.get(r);void 0!==s.opacity&&void 0===i.opacity&&(t.checkOpacity(s.opacity)||(console.error(\"Invalid option for node opacity. Value must be between 0 and 1, found: \"+s.opacity),s.opacity=void 0));var a=mr(o=uu(i)).call(o,(function(t){return null!=i[t]}));a.push(\"font\"),Oh(a,e,s),e.color=Rh(e.color)}}}},{key:\"parseOptions\",value:function(e,i){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},r=arguments.length>4?arguments[4]:void 0,s=[\"color\",\"fixed\",\"shadow\"];if(Oh(s,e,i,n),t.checkMass(i),void 0!==e.opacity&&(t.checkOpacity(e.opacity)||(console.error(\"Invalid option for node opacity. Value must be between 0 and 1, found: \"+e.opacity),e.opacity=void 0)),void 0!==i.opacity&&(t.checkOpacity(i.opacity)||(console.error(\"Invalid option for node opacity. Value must be between 0 and 1, found: \"+i.opacity),i.opacity=void 0)),i.shapeProperties&&!t.checkCoordinateOrigin(i.shapeProperties.coordinateOrigin)&&console.error(\"Invalid option for node coordinateOrigin, found: \"+i.shapeProperties.coordinateOrigin),$h(e,i,\"shadow\",o),void 0!==i.color&&null!==i.color){var a=Rh(i.color);_h(e.color,a)}else!0===n&&null===i.color&&(e.color=Kh(o.color));void 0!==i.fixed&&null!==i.fixed&&(\"boolean\"==typeof i.fixed?(e.fixed.x=i.fixed,e.fixed.y=i.fixed):(void 0!==i.fixed.x&&\"boolean\"==typeof i.fixed.x&&(e.fixed.x=i.fixed.x),void 0!==i.fixed.y&&\"boolean\"==typeof i.fixed.y&&(e.fixed.y=i.fixed.y))),!0===n&&null===i.font&&(e.font=Kh(o.font)),t.updateGroupOptions(e,i,r),void 0!==i.scaling&&$h(e.scaling,i.scaling,\"label\",o.scaling)}},{key:\"checkMass\",value:function(t,e){if(void 0!==t.mass&&t.mass<=0){var i=\"\";void 0!==e&&(i=\" in node id: \"+e),console.error(\"%cNegative or zero mass disallowed\"+i+\", setting mass to 1.\",cl),t.mass=1}}}]),t}();function uf(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return ff(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return ff(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function ff(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}var pf=function(){function t(e,i,n,o){var r,s=this;if(Nn(this,t),this.body=e,this.images=i,this.groups=n,this.layoutEngine=o,this.body.functions.createNode=Vt(r=this.create).call(r,this),this.nodesListeners={add:function(t,e){s.add(e.items)},update:function(t,e){s.update(e.items,e.data,e.oldData)},remove:function(t,e){s.remove(e.items)}},this.defaultOptions={borderWidth:1,borderWidthSelected:void 0,brokenImage:void 0,color:{border:\"#2B7CE9\",background:\"#97C2FC\",highlight:{border:\"#2B7CE9\",background:\"#D2E5FF\"},hover:{border:\"#2B7CE9\",background:\"#D2E5FF\"}},opacity:void 0,fixed:{x:!1,y:!1},font:{color:\"#343434\",size:14,face:\"arial\",background:\"none\",strokeWidth:0,strokeColor:\"#ffffff\",align:\"center\",vadjust:0,multi:!1,bold:{mod:\"bold\"},boldital:{mod:\"bold italic\"},ital:{mod:\"italic\"},mono:{mod:\"\",size:15,face:\"monospace\",vadjust:2}},group:void 0,hidden:!1,icon:{face:\"FontAwesome\",code:void 0,size:50,color:\"#2B7CE9\"},image:void 0,imagePadding:{top:0,right:0,bottom:0,left:0},label:void 0,labelHighlightBold:!0,level:void 0,margin:{top:5,right:5,bottom:5,left:5},mass:1,physics:!0,scaling:{min:10,max:30,label:{enabled:!1,min:14,max:30,maxVisible:30,drawThreshold:5},customScalingFunction:function(t,e,i,n){if(e===t)return.5;var o=1/(e-t);return Math.max(0,(n-t)*o)}},shadow:{enabled:!1,color:\"rgba(0,0,0,0.5)\",size:10,x:5,y:5},shape:\"ellipse\",shapeProperties:{borderDashes:!1,borderRadius:6,interpolation:!0,useImageSize:!1,useBorderWithImage:!1,coordinateOrigin:\"center\"},size:25,title:void 0,value:void 0,x:void 0,y:void 0},this.defaultOptions.mass<=0)throw\"Internal error: mass in defaultOptions of NodesHandler may not be zero or negative\";this.options=Kh(this.defaultOptions),this.bindEventListeners()}return Fn(t,[{key:\"bindEventListeners\",value:function(){var t,e,i=this;this.body.emitter.on(\"refreshNodes\",Vt(t=this.refresh).call(t,this)),this.body.emitter.on(\"refresh\",Vt(e=this.refresh).call(e,this)),this.body.emitter.on(\"destroy\",(function(){Dh(i.nodesListeners,(function(t,e){i.body.data.nodes&&i.body.data.nodes.off(e,t)})),delete i.body.functions.createNode,delete i.nodesListeners.add,delete i.nodesListeners.update,delete i.nodesListeners.remove,delete i.nodesListeners}))}},{key:\"setOptions\",value:function(t){if(void 0!==t){if(cf.parseOptions(this.options,t),void 0!==t.opacity&&(yd(t.opacity)||!wd(t.opacity)||t.opacity<0||t.opacity>1?console.error(\"Invalid option for node opacity. Value must be between 0 and 1, found: \"+t.opacity):this.options.opacity=t.opacity),void 0!==t.shape)for(var e in this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,e)&&this.body.nodes[e].updateShape();if(void 0!==t.font||void 0!==t.widthConstraint||void 0!==t.heightConstraint)for(var i=0,n=zo(this.body.nodes);i<n.length;i++){var o=n[i];this.body.nodes[o].updateLabelModule(),this.body.nodes[o].needsRefresh()}if(void 0!==t.size)for(var r in this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,r)&&this.body.nodes[r].needsRefresh();void 0===t.hidden&&void 0===t.physics||this.body.emitter.emit(\"_dataChanged\")}}},{key:\"setData\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=this.body.data.nodes;if(nu(\"id\",t))this.body.data.nodes=t;else if(So(t))this.body.data.nodes=new tu,this.body.data.nodes.add(t);else{if(t)throw new TypeError(\"Array or DataSet expected\");this.body.data.nodes=new tu}if(i&&Dh(this.nodesListeners,(function(t,e){i.off(e,t)})),this.body.nodes={},this.body.data.nodes){var n=this;Dh(this.nodesListeners,(function(t,e){n.body.data.nodes.on(e,t)}));var o=this.body.data.nodes.getIds();this.add(o,!0)}!1===e&&this.body.emitter.emit(\"_dataChanged\")}},{key:\"add\",value:function(t){for(var e,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=[],o=0;o<t.length;o++){e=t[o];var r=this.body.data.nodes.get(e),s=this.create(r);n.push(s),this.body.nodes[e]=s}this.layoutEngine.positionInitially(n),!1===i&&this.body.emitter.emit(\"_dataChanged\")}},{key:\"update\",value:function(t,e,i){for(var n=this.body.nodes,o=!1,r=0;r<t.length;r++){var s=t[r],a=n[s],h=e[r];void 0!==a?a.setOptions(h)&&(o=!0):(o=!0,a=this.create(h),n[s]=a)}o||void 0===i||(o=Od(e).call(e,(function(t,e){var n=i[e];return n&&n.level!==t.level}))),!0===o?this.body.emitter.emit(\"_dataChanged\"):this.body.emitter.emit(\"_dataUpdated\")}},{key:\"remove\",value:function(t){for(var e=this.body.nodes,i=0;i<t.length;i++){delete e[t[i]]}this.body.emitter.emit(\"_dataChanged\")}},{key:\"create\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:cf;return new e(t,this.body,this.images,this.groups,this.options,this.defaultOptions)}},{key:\"refresh\",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];Dh(this.body.nodes,(function(i,n){var o=t.body.data.nodes.get(n);void 0!==o&&(!0===e&&i.setOptions({x:null,y:null}),i.setOptions({fixed:!1}),i.setOptions(o))}))}},{key:\"getPositions\",value:function(t){var e={};if(void 0!==t){if(!0===So(t)){for(var i=0;i<t.length;i++)if(void 0!==this.body.nodes[t[i]]){var n=this.body.nodes[t[i]];e[t[i]]={x:Math.round(n.x),y:Math.round(n.y)}}}else if(void 0!==this.body.nodes[t]){var o=this.body.nodes[t];e[t]={x:Math.round(o.x),y:Math.round(o.y)}}}else for(var r=0;r<this.body.nodeIndices.length;r++){var s=this.body.nodes[this.body.nodeIndices[r]];e[this.body.nodeIndices[r]]={x:Math.round(s.x),y:Math.round(s.y)}}return e}},{key:\"getPosition\",value:function(t){if(null==t)throw new TypeError(\"No id was specified for getPosition method.\");if(null==this.body.nodes[t])throw new ReferenceError(\"NodeId provided for getPosition does not exist. Provided: \".concat(t));return{x:Math.round(this.body.nodes[t].x),y:Math.round(this.body.nodes[t].y)}}},{key:\"storePositions\",value:function(){var t,e=[],i=this.body.data.nodes.getDataSet(),n=uf(i.get());try{for(n.s();!(t=n.n()).done;){var o=t.value,r=o.id,s=this.body.nodes[r],a=Math.round(s.x),h=Math.round(s.y);o.x===a&&o.y===h||e.push({id:r,x:a,y:h})}}catch(t){n.e(t)}finally{n.f()}i.update(e)}},{key:\"getBoundingBox\",value:function(t){if(void 0!==this.body.nodes[t])return this.body.nodes[t].shape.boundingBox}},{key:\"getConnectedNodes\",value:function(t,e){var i=[];if(void 0!==this.body.nodes[t])for(var n=this.body.nodes[t],o={},r=0;r<n.edges.length;r++){var s=n.edges[r];\"to\"!==e&&s.toId==n.id?void 0===o[s.fromId]&&(i.push(s.fromId),o[s.fromId]=!0):\"from\"!==e&&s.fromId==n.id&&void 0===o[s.toId]&&(i.push(s.toId),o[s.toId]=!0)}return i}},{key:\"getConnectedEdges\",value:function(t){var e=[];if(void 0!==this.body.nodes[t])for(var i=this.body.nodes[t],n=0;n<i.edges.length;n++)e.push(i.edges[n].id);else console.error(\"NodeId provided for getConnectedEdges does not exist. Provided: \",t);return e}},{key:\"moveNode\",value:function(t,e,i){var n=this;void 0!==this.body.nodes[t]?(this.body.nodes[t].x=Number(e),this.body.nodes[t].y=Number(i),rs((function(){n.body.emitter.emit(\"startSimulation\")}),0)):console.error(\"Node id supplied to moveNode does not exist. Provided: \",t)}}]),t}();gt({target:\"Reflect\",stat:!0},{get:function t(e,i){var n,o,r=arguments.length<3?e:arguments[2];return dt(e)===r?e[i]:(n=tt.f(e,i))?j(n,\"value\")?n.value:void 0===n.get?void 0:n.get.call(r):w(o=Ee(e))?t(o,i,r):void 0}});var vf=k.Reflect.get,gf=Tn,yf=n((function(t){t.exports=function(t,e){for(;!Object.prototype.hasOwnProperty.call(t,e)&&null!==(t=Rd(t)););return t},t.exports.default=t.exports,t.exports.__esModule=!0}));i(yf);var mf=i(n((function(t){function e(i,n,o){return\"undefined\"!=typeof Reflect&&vf?(t.exports=e=vf,t.exports.default=t.exports,t.exports.__esModule=!0):(t.exports=e=function(t,e,i){var n=yf(t,e);if(n){var o=gf(n,e);return o.get?o.get.call(i):o.value}},t.exports.default=t.exports,t.exports.__esModule=!0),e(i,n,o||i)}t.exports=e,t.exports.default=t.exports,t.exports.__esModule=!0}))),bf=Math.hypot,wf=Math.abs,kf=Math.sqrt,_f=!!bf&&bf(1/0,NaN)!==1/0;gt({target:\"Math\",stat:!0,forced:_f},{hypot:function(t,e){for(var i,n,o=0,r=0,s=arguments.length,a=0;r<s;)a<(i=wf(arguments[r++]))?(o=o*(n=a/i)*n+1,a=i):o+=i>0?(n=i/a)*n:i;return a===1/0?1/0:a*kf(o)}});var xf=k.Math.hypot;function Ef(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Of=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"transform\",value:function(t,e){So(t)||(t=[t]);for(var i=e.point.x,n=e.point.y,o=e.angle,r=e.length,s=0;s<t.length;++s){var a=t[s],h=a.x*Math.cos(o)-a.y*Math.sin(o),l=a.x*Math.sin(o)+a.y*Math.cos(o);a.x=i+r*h,a.y=n+r*l}}},{key:\"drawPath\",value:function(t,e){t.beginPath(),t.moveTo(e[0].x,e[0].y);for(var i=1;i<e.length;++i)t.lineTo(e[i].x,e[i].y);t.closePath()}}]),t}(),Cf=function(t){Ad(i,t);var e=Ef(i);function i(){return Nn(this,i),e.apply(this,arguments)}return Fn(i,null,[{key:\"draw\",value:function(t,e){if(e.image){t.save(),t.translate(e.point.x,e.point.y),t.rotate(Math.PI/2+e.angle);var i=null!=e.imageWidth?e.imageWidth:e.image.width,n=null!=e.imageHeight?e.imageHeight:e.image.height;e.image.drawImageAtPosition(t,1,-i/2,0,i,n),t.restore()}return!1}}]),i}(Of),Sf=function(t){Ad(i,t);var e=Ef(i);function i(){return Nn(this,i),e.apply(this,arguments)}return Fn(i,null,[{key:\"draw\",value:function(t,e){var i=[{x:0,y:0},{x:-1,y:.3},{x:-.9,y:0},{x:-1,y:-.3}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),i}(Of),Tf=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i=[{x:-1,y:0},{x:0,y:.3},{x:-.4,y:0},{x:0,y:-.3}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),t}(),Mf=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i={x:-.4,y:0};Of.transform(i,e),t.strokeStyle=t.fillStyle,t.fillStyle=\"rgba(0, 0, 0, 0)\";var n=Math.PI,o=e.angle-n/2,r=e.angle+n/2;return t.beginPath(),t.arc(i.x,i.y,.4*e.length,o,r,!1),t.stroke(),!0}}]),t}(),Pf=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i={x:-.3,y:0};Of.transform(i,e),t.strokeStyle=t.fillStyle,t.fillStyle=\"rgba(0, 0, 0, 0)\";var n=Math.PI,o=e.angle+n/2,r=e.angle+3*n/2;return t.beginPath(),t.arc(i.x,i.y,.4*e.length,o,r,!1),t.stroke(),!0}}]),t}(),Df=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i=[{x:.02,y:0},{x:-1,y:.3},{x:-1,y:-.3}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),t}(),If=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i=[{x:0,y:.3},{x:0,y:-.3},{x:-1,y:0}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),t}(),Bf=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i={x:-.4,y:0};return Of.transform(i,e),Ut(t,i.x,i.y,.4*e.length),!0}}]),t}(),zf=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i=[{x:0,y:.5},{x:0,y:-.5},{x:-.15,y:-.5},{x:-.15,y:.5}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),t}(),Nf=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i=[{x:0,y:.3},{x:0,y:-.3},{x:-.6,y:-.3},{x:-.6,y:.3}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),t}(),Af=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i=[{x:0,y:0},{x:-.5,y:-.3},{x:-1,y:0},{x:-.5,y:.3}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),t}(),Ff=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i=[{x:-1,y:.3},{x:-.5,y:0},{x:-1,y:-.3},{x:0,y:0}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),t}(),jf=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i;switch(e.type&&(i=e.type.toLowerCase()),i){case\"image\":return Cf.draw(t,e);case\"circle\":return Bf.draw(t,e);case\"box\":return Nf.draw(t,e);case\"crow\":return Tf.draw(t,e);case\"curve\":return Mf.draw(t,e);case\"diamond\":return Af.draw(t,e);case\"inv_curve\":return Pf.draw(t,e);case\"triangle\":return Df.draw(t,e);case\"inv_triangle\":return If.draw(t,e);case\"bar\":return zf.draw(t,e);case\"vee\":return Ff.draw(t,e);case\"arrow\":default:return Sf.draw(t,e)}}}]),t}();function Rf(t,e){var i=zo(t);if(On){var n=On(t);e&&(n=mr(n).call(n,(function(e){return Mn(t,e).enumerable}))),i.push.apply(i,n)}return i}function Lf(t){for(var e=1;e<arguments.length;e++){var i,n=null!=arguments[e]?arguments[e]:{};if(e%2)Wo(i=Rf(Object(n),!0)).call(i,(function(e){jn(t,e,n[e])}));else if(Dn)In(t,Dn(n));else{var o;Wo(o=Rf(Object(n))).call(o,(function(e){zn(t,e,Mn(n,e))}))}}return t}var Hf=function(){function t(e,i,n){Nn(this,t),this._body=i,this._labelModule=n,this.color={},this.colorDirty=!0,this.hoverWidth=1.5,this.selectionWidth=2,this.setOptions(e),this.fromPoint=this.from,this.toPoint=this.to}return Fn(t,[{key:\"connect\",value:function(){this.from=this._body.nodes[this.options.from],this.to=this._body.nodes[this.options.to]}},{key:\"cleanup\",value:function(){return!1}},{key:\"setOptions\",value:function(t){this.options=t,this.from=this._body.nodes[this.options.from],this.to=this._body.nodes[this.options.to],this.id=this.options.id}},{key:\"drawLine\",value:function(t,e,i,n){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:this.getViaNode();t.strokeStyle=this.getColor(t,e),t.lineWidth=e.width,!1!==e.dashes?this._drawDashedLine(t,e,o):this._drawLine(t,e,o)}},{key:\"_drawLine\",value:function(t,e,i,n,o){if(this.from!=this.to)this._line(t,e,i,n,o);else{var r=this._getCircleData(t),s=uo(r,3),a=s[0],h=s[1],l=s[2];this._circle(t,e,a,h,l)}}},{key:\"_drawDashedLine\",value:function(t,e,i,n,o){t.lineCap=\"round\";var r=So(e.dashes)?e.dashes:[5,5];if(void 0!==t.setLineDash){if(t.save(),t.setLineDash(r),t.lineDashOffset=0,this.from!=this.to)this._line(t,e,i);else{var s=this._getCircleData(t),a=uo(s,3),h=a[0],l=a[1],d=a[2];this._circle(t,e,h,l,d)}t.setLineDash([0]),t.lineDashOffset=0,t.restore()}else{if(this.from!=this.to)Kt(t,this.from.x,this.from.y,this.to.x,this.to.y,r);else{var c=this._getCircleData(t),u=uo(c,3),f=u[0],p=u[1],v=u[2];this._circle(t,e,f,p,v)}this.enableShadow(t,e),t.stroke(),this.disableShadow(t,e)}}},{key:\"findBorderPosition\",value:function(t,e,i){return this.from!=this.to?this._findBorderPosition(t,e,i):this._findBorderPositionCircle(t,e,i)}},{key:\"findBorderPositions\",value:function(t){if(this.from!=this.to)return{from:this._findBorderPosition(this.from,t),to:this._findBorderPosition(this.to,t)};var e,i=Oo(e=this._getCircleData(t)).call(e,0,2),n=uo(i,2),o=n[0],r=n[1];return{from:this._findBorderPositionCircle(this.from,t,{x:o,y:r,low:.25,high:.6,direction:-1}),to:this._findBorderPositionCircle(this.from,t,{x:o,y:r,low:.6,high:.8,direction:1})}}},{key:\"_getCircleData\",value:function(t){var e=this.options.selfReference.size;void 0!==t&&void 0===this.from.shape.width&&this.from.shape.resize(t);var i=gu(t,this.options.selfReference.angle,e,this.from);return[i.x,i.y,e]}},{key:\"_pointOnCircle\",value:function(t,e,i,n){var o=2*n*Math.PI;return{x:t+i*Math.cos(o),y:e-i*Math.sin(o)}}},{key:\"_findBorderPositionCircle\",value:function(t,e,i){var n,o=i.x,r=i.y,s=i.low,a=i.high,h=i.direction,l=this.options.selfReference.size,d=.5*(s+a),c=0;!0===this.options.arrowStrikethrough&&(-1===h?c=this.options.endPointOffset.from:1===h&&(c=this.options.endPointOffset.to));var u=0;do{d=.5*(s+a),n=this._pointOnCircle(o,r,l,d);var f=Math.atan2(t.y-n.y,t.x-n.x),p=t.distanceToBorder(e,f)+c-Math.sqrt(Math.pow(n.x-t.x,2)+Math.pow(n.y-t.y,2));if(Math.abs(p)<.05)break;p>0?h>0?s=d:a=d:h>0?a=d:s=d,++u}while(s<=a&&u<10);return Lf(Lf({},n),{},{t:d})}},{key:\"getLineWidth\",value:function(t,e){return!0===t?Math.max(this.selectionWidth,.3/this._body.view.scale):!0===e?Math.max(this.hoverWidth,.3/this._body.view.scale):Math.max(this.options.width,.3/this._body.view.scale)}},{key:\"getColor\",value:function(t,e){if(!1!==e.inheritsColor){if(\"both\"===e.inheritsColor&&this.from.id!==this.to.id){var i=t.createLinearGradient(this.from.x,this.from.y,this.to.x,this.to.y),n=this.from.options.color.highlight.border,o=this.to.options.color.highlight.border;return!1===this.from.selected&&!1===this.to.selected?(n=Fh(this.from.options.color.border,e.opacity),o=Fh(this.to.options.color.border,e.opacity)):!0===this.from.selected&&!1===this.to.selected?o=this.to.options.color.border:!1===this.from.selected&&!0===this.to.selected&&(n=this.from.options.color.border),i.addColorStop(0,n),i.addColorStop(1,o),i}return\"to\"===e.inheritsColor?Fh(this.to.options.color.border,e.opacity):Fh(this.from.options.color.border,e.opacity)}return Fh(e.color,e.opacity)}},{key:\"_circle\",value:function(t,e,i,n,o){this.enableShadow(t,e);var r=0,s=2*Math.PI;if(!this.options.selfReference.renderBehindTheNode){var a=this.options.selfReference.angle,h=this.options.selfReference.angle+Math.PI,l=this._findBorderPositionCircle(this.from,t,{x:i,y:n,low:a,high:h,direction:-1}),d=this._findBorderPositionCircle(this.from,t,{x:i,y:n,low:a,high:h,direction:1});r=Math.atan2(l.y-n,l.x-i),s=Math.atan2(d.y-n,d.x-i)}t.beginPath(),t.arc(i,n,o,r,s,!1),t.stroke(),this.disableShadow(t,e)}},{key:\"getDistanceToEdge\",value:function(t,e,i,n,o,r){if(this.from!=this.to)return this._getDistanceToEdge(t,e,i,n,o,r);var s=this._getCircleData(void 0),a=uo(s,3),h=a[0],l=a[1],d=a[2],c=h-o,u=l-r;return Math.abs(Math.sqrt(c*c+u*u)-d)}},{key:\"_getDistanceToLine\",value:function(t,e,i,n,o,r){var s=i-t,a=n-e,h=((o-t)*s+(r-e)*a)/(s*s+a*a);h>1?h=1:h<0&&(h=0);var l=t+h*s-o,d=e+h*a-r;return Math.sqrt(l*l+d*d)}},{key:\"getArrowData\",value:function(t,e,i,n,o,r){var s,a,h,l,d,c,u,f=r.width;\"from\"===e?(h=this.from,l=this.to,d=r.fromArrowScale<0,c=Math.abs(r.fromArrowScale),u=r.fromArrowType):\"to\"===e?(h=this.to,l=this.from,d=r.toArrowScale<0,c=Math.abs(r.toArrowScale),u=r.toArrowType):(h=this.to,l=this.from,d=r.middleArrowScale<0,c=Math.abs(r.middleArrowScale),u=r.middleArrowType);var p=15*c+3*f;if(h!=l){var v=p/xf(h.x-l.x,h.y-l.y);if(\"middle\"!==e)if(!0===this.options.smooth.enabled){var g=this._findBorderPosition(h,t,{via:i}),y=this.getPoint(g.t+v*(\"from\"===e?1:-1),i);s=Math.atan2(g.y-y.y,g.x-y.x),a=g}else s=Math.atan2(h.y-l.y,h.x-l.x),a=this._findBorderPosition(h,t);else{var m=(d?-v:v)/2,b=this.getPoint(.5+m,i),w=this.getPoint(.5-m,i);s=Math.atan2(b.y-w.y,b.x-w.x),a=this.getPoint(.5,i)}}else{var k=this._getCircleData(t),_=uo(k,3),x=_[0],E=_[1],O=_[2];if(\"from\"===e){var C=this.options.selfReference.angle,S=this.options.selfReference.angle+Math.PI,T=this._findBorderPositionCircle(this.from,t,{x:x,y:E,low:C,high:S,direction:-1});s=-2*T.t*Math.PI+1.5*Math.PI+.1*Math.PI,a=T}else if(\"to\"===e){var M=this.options.selfReference.angle,P=this.options.selfReference.angle+Math.PI,D=this._findBorderPositionCircle(this.from,t,{x:x,y:E,low:M,high:P,direction:1});s=-2*D.t*Math.PI+1.5*Math.PI-1.1*Math.PI,a=D}else{var I=this.options.selfReference.angle/(2*Math.PI);a=this._pointOnCircle(x,E,O,I),s=-2*I*Math.PI+1.5*Math.PI+.1*Math.PI}}return{point:a,core:{x:a.x-.9*p*Math.cos(s),y:a.y-.9*p*Math.sin(s)},angle:s,length:p,type:u}}},{key:\"drawArrowHead\",value:function(t,e,i,n,o){t.strokeStyle=this.getColor(t,e),t.fillStyle=t.strokeStyle,t.lineWidth=e.width,jf.draw(t,o)&&(this.enableShadow(t,e),hs(t).call(t),this.disableShadow(t,e))}},{key:\"enableShadow\",value:function(t,e){!0===e.shadow&&(t.shadowColor=e.shadowColor,t.shadowBlur=e.shadowSize,t.shadowOffsetX=e.shadowX,t.shadowOffsetY=e.shadowY)}},{key:\"disableShadow\",value:function(t,e){!0===e.shadow&&(t.shadowColor=\"rgba(0,0,0,0)\",t.shadowBlur=0,t.shadowOffsetX=0,t.shadowOffsetY=0)}},{key:\"drawBackground\",value:function(t,e){if(!1!==e.background){var i={strokeStyle:t.strokeStyle,lineWidth:t.lineWidth,dashes:t.dashes};t.strokeStyle=e.backgroundColor,t.lineWidth=e.backgroundSize,this.setStrokeDashed(t,e.backgroundDashes),t.stroke(),t.strokeStyle=i.strokeStyle,t.lineWidth=i.lineWidth,t.dashes=i.dashes,this.setStrokeDashed(t,e.dashes)}}},{key:\"setStrokeDashed\",value:function(t,e){if(!1!==e)if(void 0!==t.setLineDash){var i=So(e)?e:[5,5];t.setLineDash(i)}else console.warn(\"setLineDash is not supported in this browser. The dashed stroke cannot be used.\");else void 0!==t.setLineDash?t.setLineDash([]):console.warn(\"setLineDash is not supported in this browser. The dashed stroke cannot be used.\")}}]),t}();function Wf(t,e){var i=zo(t);if(On){var n=On(t);e&&(n=mr(n).call(n,(function(e){return Mn(t,e).enumerable}))),i.push.apply(i,n)}return i}function qf(t){for(var e=1;e<arguments.length;e++){var i,n=null!=arguments[e]?arguments[e]:{};if(e%2)Wo(i=Wf(Object(n),!0)).call(i,(function(e){jn(t,e,n[e])}));else if(Dn)In(t,Dn(n));else{var o;Wo(o=Wf(Object(n))).call(o,(function(e){zn(t,e,Mn(n,e))}))}}return t}function Vf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Uf=function(t){Ad(i,t);var e=Vf(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"_findBorderPositionBezier\",value:function(t,e){var i,n,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this._getViaCoordinates(),r=10,s=.2,a=!1,h=1,l=0,d=this.to,c=this.options.endPointOffset?this.options.endPointOffset.to:0;t.id===this.from.id&&(d=this.from,a=!0,c=this.options.endPointOffset?this.options.endPointOffset.from:0),!1===this.options.arrowStrikethrough&&(c=0);var u=0;do{n=.5*(l+h),i=this.getPoint(n,o);var f=Math.atan2(d.y-i.y,d.x-i.x),p=d.distanceToBorder(e,f)+c,v=Math.sqrt(Math.pow(i.x-d.x,2)+Math.pow(i.y-d.y,2)),g=p-v;if(Math.abs(g)<s)break;g<0?!1===a?l=n:h=n:!1===a?h=n:l=n,++u}while(l<=h&&u<r);return qf(qf({},i),{},{t:n})}},{key:\"_getDistanceToBezierEdge\",value:function(t,e,i,n,o,r,s){var a,h,l,d,c,u=1e9,f=t,p=e;for(h=1;h<10;h++)l=.1*h,d=Math.pow(1-l,2)*t+2*l*(1-l)*s.x+Math.pow(l,2)*i,c=Math.pow(1-l,2)*e+2*l*(1-l)*s.y+Math.pow(l,2)*n,h>0&&(u=(a=this._getDistanceToLine(f,p,d,c,o,r))<u?a:u),f=d,p=c;return u}},{key:\"_bezierCurve\",value:function(t,e,i,n){t.beginPath(),t.moveTo(this.fromPoint.x,this.fromPoint.y),null!=i&&null!=i.x?null!=n&&null!=n.x?t.bezierCurveTo(i.x,i.y,n.x,n.y,this.toPoint.x,this.toPoint.y):t.quadraticCurveTo(i.x,i.y,this.toPoint.x,this.toPoint.y):t.lineTo(this.toPoint.x,this.toPoint.y),this.drawBackground(t,e),this.enableShadow(t,e),t.stroke(),this.disableShadow(t,e)}},{key:\"getViaNode\",value:function(){return this._getViaCoordinates()}}]),i}(Hf);function Yf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Xf=function(t){Ad(i,t);var e=Yf(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o)).via=r.via,r._boundFunction=function(){r.positionBezierNode()},r._body.emitter.on(\"_repositionBezierNodes\",r._boundFunction),r}return Fn(i,[{key:\"setOptions\",value:function(t){mf(Ld(i.prototype),\"setOptions\",this).call(this,t);var e=!1;this.options.physics!==t.physics&&(e=!0),this.options=t,this.id=this.options.id,this.from=this._body.nodes[this.options.from],this.to=this._body.nodes[this.options.to],this.setupSupportNode(),this.connect(),!0===e&&(this.via.setOptions({physics:this.options.physics}),this.positionBezierNode())}},{key:\"connect\",value:function(){this.from=this._body.nodes[this.options.from],this.to=this._body.nodes[this.options.to],void 0===this.from||void 0===this.to||!1===this.options.physics||this.from.id===this.to.id?this.via.setOptions({physics:!1}):this.via.setOptions({physics:!0})}},{key:\"cleanup\",value:function(){return this._body.emitter.off(\"_repositionBezierNodes\",this._boundFunction),void 0!==this.via&&(delete this._body.nodes[this.via.id],this.via=void 0,!0)}},{key:\"setupSupportNode\",value:function(){if(void 0===this.via){var t=\"edgeId:\"+this.id,e=this._body.functions.createNode({id:t,shape:\"circle\",physics:!0,hidden:!0});this._body.nodes[t]=e,this.via=e,this.via.parentEdgeId=this.id,this.positionBezierNode()}}},{key:\"positionBezierNode\",value:function(){void 0!==this.via&&void 0!==this.from&&void 0!==this.to?(this.via.x=.5*(this.from.x+this.to.x),this.via.y=.5*(this.from.y+this.to.y)):void 0!==this.via&&(this.via.x=0,this.via.y=0)}},{key:\"_line\",value:function(t,e,i){this._bezierCurve(t,e,i)}},{key:\"_getViaCoordinates\",value:function(){return this.via}},{key:\"getViaNode\",value:function(){return this.via}},{key:\"getPoint\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.via;if(this.from===this.to){var i=this._getCircleData(),n=uo(i,3),o=n[0],r=n[1],s=n[2],a=2*Math.PI*(1-t);return{x:o+s*Math.sin(a),y:r+s-s*(1-Math.cos(a))}}return{x:Math.pow(1-t,2)*this.fromPoint.x+2*t*(1-t)*e.x+Math.pow(t,2)*this.toPoint.x,y:Math.pow(1-t,2)*this.fromPoint.y+2*t*(1-t)*e.y+Math.pow(t,2)*this.toPoint.y}}},{key:\"_findBorderPosition\",value:function(t,e){return this._findBorderPositionBezier(t,e,this.via)}},{key:\"_getDistanceToEdge\",value:function(t,e,i,n,o,r){return this._getDistanceToBezierEdge(t,e,i,n,o,r,this.via)}}]),i}(Uf);function Gf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Kf=function(t){Ad(i,t);var e=Gf(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"_line\",value:function(t,e,i){this._bezierCurve(t,e,i)}},{key:\"getViaNode\",value:function(){return this._getViaCoordinates()}},{key:\"_getViaCoordinates\",value:function(){var t,e,i=this.options.smooth.roundness,n=this.options.smooth.type,o=Math.abs(this.from.x-this.to.x),r=Math.abs(this.from.y-this.to.y);if(\"discrete\"===n||\"diagonalCross\"===n){var s,a;s=a=o<=r?i*r:i*o,this.from.x>this.to.x&&(s=-s),this.from.y>=this.to.y&&(a=-a);var h=this.from.x+s,l=this.from.y+a;return\"discrete\"===n&&(o<=r?h=o<i*r?this.from.x:h:l=r<i*o?this.from.y:l),{x:h,y:l}}if(\"straightCross\"===n){var d=(1-i)*o,c=(1-i)*r;return o<=r?(d=0,this.from.y<this.to.y&&(c=-c)):(this.from.x<this.to.x&&(d=-d),c=0),{x:this.to.x+d,y:this.to.y+c}}if(\"horizontal\"===n){var u=(1-i)*o;return this.from.x<this.to.x&&(u=-u),{x:this.to.x+u,y:this.from.y}}if(\"vertical\"===n){var f=(1-i)*r;return this.from.y<this.to.y&&(f=-f),{x:this.from.x,y:this.to.y+f}}if(\"curvedCW\"===n){o=this.to.x-this.from.x,r=this.from.y-this.to.y;var p=Math.sqrt(o*o+r*r),v=Math.PI,g=(Math.atan2(r,o)+(.5*i+.5)*v)%(2*v);return{x:this.from.x+(.5*i+.5)*p*Math.sin(g),y:this.from.y+(.5*i+.5)*p*Math.cos(g)}}if(\"curvedCCW\"===n){o=this.to.x-this.from.x,r=this.from.y-this.to.y;var y=Math.sqrt(o*o+r*r),m=Math.PI,b=(Math.atan2(r,o)+(.5*-i+.5)*m)%(2*m);return{x:this.from.x+(.5*i+.5)*y*Math.sin(b),y:this.from.y+(.5*i+.5)*y*Math.cos(b)}}t=e=o<=r?i*r:i*o,this.from.x>this.to.x&&(t=-t),this.from.y>=this.to.y&&(e=-e);var w=this.from.x+t,k=this.from.y+e;return o<=r?w=this.from.x<=this.to.x?this.to.x<w?this.to.x:w:this.to.x>w?this.to.x:w:k=this.from.y>=this.to.y?this.to.y>k?this.to.y:k:this.to.y<k?this.to.y:k,{x:w,y:k}}},{key:\"_findBorderPosition\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this._findBorderPositionBezier(t,e,i.via)}},{key:\"_getDistanceToEdge\",value:function(t,e,i,n,o,r){var s=arguments.length>6&&void 0!==arguments[6]?arguments[6]:this._getViaCoordinates();return this._getDistanceToBezierEdge(t,e,i,n,o,r,s)}},{key:\"getPoint\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this._getViaCoordinates(),i=t,n=Math.pow(1-i,2)*this.fromPoint.x+2*i*(1-i)*e.x+Math.pow(i,2)*this.toPoint.x,o=Math.pow(1-i,2)*this.fromPoint.y+2*i*(1-i)*e.y+Math.pow(i,2)*this.toPoint.y;return{x:n,y:o}}}]),i}(Uf);function $f(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}function Zf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Qf=function(t){Ad(i,t);var e=Zf(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"_line\",value:function(t,e,i){var n=i[0],o=i[1];this._bezierCurve(t,e,n,o)}},{key:\"_getViaCoordinates\",value:function(){var t,e,i,n,o=this.from.x-this.to.x,r=this.from.y-this.to.y,s=this.options.smooth.roundness;return(Math.abs(o)>Math.abs(r)||!0===this.options.smooth.forceDirection||\"horizontal\"===this.options.smooth.forceDirection)&&\"vertical\"!==this.options.smooth.forceDirection?(e=this.from.y,n=this.to.y,t=this.from.x-s*o,i=this.to.x+s*o):(e=this.from.y-s*r,n=this.to.y+s*r,t=this.from.x,i=this.to.x),[{x:t,y:e},{x:i,y:n}]}},{key:\"getViaNode\",value:function(){return this._getViaCoordinates()}},{key:\"_findBorderPosition\",value:function(t,e){return this._findBorderPositionBezier(t,e)}},{key:\"_getDistanceToEdge\",value:function(t,e,i,n,o,r){var s=arguments.length>6&&void 0!==arguments[6]?arguments[6]:this._getViaCoordinates(),a=uo(s,2),h=a[0],l=a[1];return this._getDistanceToBezierEdge2(t,e,i,n,o,r,h,l)}},{key:\"getPoint\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this._getViaCoordinates(),i=uo(e,2),n=i[0],o=i[1],r=t,s=[Math.pow(1-r,3),3*r*Math.pow(1-r,2),3*Math.pow(r,2)*(1-r),Math.pow(r,3)],a=s[0]*this.fromPoint.x+s[1]*n.x+s[2]*o.x+s[3]*this.toPoint.x,h=s[0]*this.fromPoint.y+s[1]*n.y+s[2]*o.y+s[3]*this.toPoint.y;return{x:a,y:h}}}]),i}(function(t){Ad(i,t);var e=$f(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"_getDistanceToBezierEdge2\",value:function(t,e,i,n,o,r,s,a){for(var h=1e9,l=t,d=e,c=[0,0,0,0],u=1;u<10;u++){var f=.1*u;c[0]=Math.pow(1-f,3),c[1]=3*f*Math.pow(1-f,2),c[2]=3*Math.pow(f,2)*(1-f),c[3]=Math.pow(f,3);var p=c[0]*t+c[1]*s.x+c[2]*a.x+c[3]*i,v=c[0]*e+c[1]*s.y+c[2]*a.y+c[3]*n;if(u>0){var g=this._getDistanceToLine(l,d,p,v,o,r);h=g<h?g:h}l=p,d=v}return h}}]),i}(Uf));function Jf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var tp=function(t){Ad(i,t);var e=Jf(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"_line\",value:function(t,e){t.beginPath(),t.moveTo(this.fromPoint.x,this.fromPoint.y),t.lineTo(this.toPoint.x,this.toPoint.y),this.enableShadow(t,e),t.stroke(),this.disableShadow(t,e)}},{key:\"getViaNode\",value:function(){}},{key:\"getPoint\",value:function(t){return{x:(1-t)*this.fromPoint.x+t*this.toPoint.x,y:(1-t)*this.fromPoint.y+t*this.toPoint.y}}},{key:\"_findBorderPosition\",value:function(t,e){var i=this.to,n=this.from;t.id===this.from.id&&(i=this.from,n=this.to);var o=Math.atan2(i.y-n.y,i.x-n.x),r=i.x-n.x,s=i.y-n.y,a=Math.sqrt(r*r+s*s),h=(a-t.distanceToBorder(e,o))/a;return{x:(1-h)*n.x+h*i.x,y:(1-h)*n.y+h*i.y,t:0}}},{key:\"_getDistanceToEdge\",value:function(t,e,i,n,o,r){return this._getDistanceToLine(t,e,i,n,o,r)}}]),i}(Hf),ep=function(){function t(e,i,n,o,r){if(Nn(this,t),void 0===i)throw new Error(\"No body provided\");this.options=Kh(o),this.globalOptions=o,this.defaultOptions=r,this.body=i,this.imagelist=n,this.id=void 0,this.fromId=void 0,this.toId=void 0,this.selected=!1,this.hover=!1,this.labelDirty=!0,this.baseWidth=this.options.width,this.baseFontSize=this.options.font.size,this.from=void 0,this.to=void 0,this.edgeType=void 0,this.connected=!1,this.labelModule=new _u(this.body,this.options,!0),this.setOptions(e)}return Fn(t,[{key:\"setOptions\",value:function(e){if(e){var i=void 0!==e.physics&&this.options.physics!==e.physics||void 0!==e.hidden&&(this.options.hidden||!1)!==(e.hidden||!1)||void 0!==e.from&&this.options.from!==e.from||void 0!==e.to&&this.options.to!==e.to;t.parseOptions(this.options,e,!0,this.globalOptions),void 0!==e.id&&(this.id=e.id),void 0!==e.from&&(this.fromId=e.from),void 0!==e.to&&(this.toId=e.to),void 0!==e.title&&(this.title=e.title),void 0!==e.value&&(e.value=hu(e.value));var n=[e,this.options,this.defaultOptions];return this.chooser=fu(\"edge\",n),this.updateLabelModule(e),i=this.updateEdgeType()||i,this._setInteractionWidths(),this.connect(),i}}},{key:\"getFormattingValues\",value:function(){var t=!0===this.options.arrows.to||!0===this.options.arrows.to.enabled,e=!0===this.options.arrows.from||!0===this.options.arrows.from.enabled,i=!0===this.options.arrows.middle||!0===this.options.arrows.middle.enabled,n=this.options.color.inherit,o={toArrow:t,toArrowScale:this.options.arrows.to.scaleFactor,toArrowType:this.options.arrows.to.type,toArrowSrc:this.options.arrows.to.src,toArrowImageWidth:this.options.arrows.to.imageWidth,toArrowImageHeight:this.options.arrows.to.imageHeight,middleArrow:i,middleArrowScale:this.options.arrows.middle.scaleFactor,middleArrowType:this.options.arrows.middle.type,middleArrowSrc:this.options.arrows.middle.src,middleArrowImageWidth:this.options.arrows.middle.imageWidth,middleArrowImageHeight:this.options.arrows.middle.imageHeight,fromArrow:e,fromArrowScale:this.options.arrows.from.scaleFactor,fromArrowType:this.options.arrows.from.type,fromArrowSrc:this.options.arrows.from.src,fromArrowImageWidth:this.options.arrows.from.imageWidth,fromArrowImageHeight:this.options.arrows.from.imageHeight,arrowStrikethrough:this.options.arrowStrikethrough,color:n?void 0:this.options.color.color,inheritsColor:n,opacity:this.options.color.opacity,hidden:this.options.hidden,length:this.options.length,shadow:this.options.shadow.enabled,shadowColor:this.options.shadow.color,shadowSize:this.options.shadow.size,shadowX:this.options.shadow.x,shadowY:this.options.shadow.y,dashes:this.options.dashes,width:this.options.width,background:this.options.background.enabled,backgroundColor:this.options.background.color,backgroundSize:this.options.background.size,backgroundDashes:this.options.background.dashes};if(this.selected||this.hover)if(!0===this.chooser){if(this.selected){var r=this.options.selectionWidth;\"function\"==typeof r?o.width=r(o.width):\"number\"==typeof r&&(o.width+=r),o.width=Math.max(o.width,.3/this.body.view.scale),o.color=this.options.color.highlight,o.shadow=this.options.shadow.enabled}else if(this.hover){var s=this.options.hoverWidth;\"function\"==typeof s?o.width=s(o.width):\"number\"==typeof s&&(o.width+=s),o.width=Math.max(o.width,.3/this.body.view.scale),o.color=this.options.color.hover,o.shadow=this.options.shadow.enabled}}else\"function\"==typeof this.chooser&&(this.chooser(o,this.options.id,this.selected,this.hover),void 0!==o.color&&(o.inheritsColor=!1),!1===o.shadow&&(o.shadowColor===this.options.shadow.color&&o.shadowSize===this.options.shadow.size&&o.shadowX===this.options.shadow.x&&o.shadowY===this.options.shadow.y||(o.shadow=!0)));else o.shadow=this.options.shadow.enabled,o.width=Math.max(o.width,.3/this.body.view.scale);return o}},{key:\"updateLabelModule\",value:function(t){var e=[t,this.options,this.globalOptions,this.defaultOptions];this.labelModule.update(this.options,e),void 0!==this.labelModule.baseSize&&(this.baseFontSize=this.labelModule.baseSize)}},{key:\"updateEdgeType\",value:function(){var t=this.options.smooth,e=!1,i=!0;return void 0!==this.edgeType&&((this.edgeType instanceof Xf&&!0===t.enabled&&\"dynamic\"===t.type||this.edgeType instanceof Qf&&!0===t.enabled&&\"cubicBezier\"===t.type||this.edgeType instanceof Kf&&!0===t.enabled&&\"dynamic\"!==t.type&&\"cubicBezier\"!==t.type||this.edgeType instanceof tp&&!1===t.type.enabled)&&(i=!1),!0===i&&(e=this.cleanup())),!0===i?!0===t.enabled?\"dynamic\"===t.type?(e=!0,this.edgeType=new Xf(this.options,this.body,this.labelModule)):\"cubicBezier\"===t.type?this.edgeType=new Qf(this.options,this.body,this.labelModule):this.edgeType=new Kf(this.options,this.body,this.labelModule):this.edgeType=new tp(this.options,this.body,this.labelModule):this.edgeType.setOptions(this.options),e}},{key:\"connect\",value:function(){this.disconnect(),this.from=this.body.nodes[this.fromId]||void 0,this.to=this.body.nodes[this.toId]||void 0,this.connected=void 0!==this.from&&void 0!==this.to,!0===this.connected?(this.from.attachEdge(this),this.to.attachEdge(this)):(this.from&&this.from.detachEdge(this),this.to&&this.to.detachEdge(this)),this.edgeType.connect()}},{key:\"disconnect\",value:function(){this.from&&(this.from.detachEdge(this),this.from=void 0),this.to&&(this.to.detachEdge(this),this.to=void 0),this.connected=!1}},{key:\"getTitle\",value:function(){return this.title}},{key:\"isSelected\",value:function(){return this.selected}},{key:\"getValue\",value:function(){return this.options.value}},{key:\"setValueRange\",value:function(t,e,i){if(void 0!==this.options.value){var n=this.options.scaling.customScalingFunction(t,e,i,this.options.value),o=this.options.scaling.max-this.options.scaling.min;if(!0===this.options.scaling.label.enabled){var r=this.options.scaling.label.max-this.options.scaling.label.min;this.options.font.size=this.options.scaling.label.min+n*r}this.options.width=this.options.scaling.min+n*o}else this.options.width=this.baseWidth,this.options.font.size=this.baseFontSize;this._setInteractionWidths(),this.updateLabelModule()}},{key:\"_setInteractionWidths\",value:function(){\"function\"==typeof this.options.hoverWidth?this.edgeType.hoverWidth=this.options.hoverWidth(this.options.width):this.edgeType.hoverWidth=this.options.hoverWidth+this.options.width,\"function\"==typeof this.options.selectionWidth?this.edgeType.selectionWidth=this.options.selectionWidth(this.options.width):this.edgeType.selectionWidth=this.options.selectionWidth+this.options.width}},{key:\"draw\",value:function(t){var e=this.getFormattingValues();if(!e.hidden){var i=this.edgeType.getViaNode();this.edgeType.drawLine(t,e,this.selected,this.hover,i),this.drawLabel(t,i)}}},{key:\"drawArrows\",value:function(t){var e=this.getFormattingValues();if(!e.hidden){var i=this.edgeType.getViaNode(),n={};this.edgeType.fromPoint=this.edgeType.from,this.edgeType.toPoint=this.edgeType.to,e.fromArrow&&(n.from=this.edgeType.getArrowData(t,\"from\",i,this.selected,this.hover,e),!1===e.arrowStrikethrough&&(this.edgeType.fromPoint=n.from.core),e.fromArrowSrc&&(n.from.image=this.imagelist.load(e.fromArrowSrc)),e.fromArrowImageWidth&&(n.from.imageWidth=e.fromArrowImageWidth),e.fromArrowImageHeight&&(n.from.imageHeight=e.fromArrowImageHeight)),e.toArrow&&(n.to=this.edgeType.getArrowData(t,\"to\",i,this.selected,this.hover,e),!1===e.arrowStrikethrough&&(this.edgeType.toPoint=n.to.core),e.toArrowSrc&&(n.to.image=this.imagelist.load(e.toArrowSrc)),e.toArrowImageWidth&&(n.to.imageWidth=e.toArrowImageWidth),e.toArrowImageHeight&&(n.to.imageHeight=e.toArrowImageHeight)),e.middleArrow&&(n.middle=this.edgeType.getArrowData(t,\"middle\",i,this.selected,this.hover,e),e.middleArrowSrc&&(n.middle.image=this.imagelist.load(e.middleArrowSrc)),e.middleArrowImageWidth&&(n.middle.imageWidth=e.middleArrowImageWidth),e.middleArrowImageHeight&&(n.middle.imageHeight=e.middleArrowImageHeight)),e.fromArrow&&this.edgeType.drawArrowHead(t,e,this.selected,this.hover,n.from),e.middleArrow&&this.edgeType.drawArrowHead(t,e,this.selected,this.hover,n.middle),e.toArrow&&this.edgeType.drawArrowHead(t,e,this.selected,this.hover,n.to)}}},{key:\"drawLabel\",value:function(t,e){if(void 0!==this.options.label){var i,n=this.from,o=this.to;if(this.labelModule.differentState(this.selected,this.hover)&&this.labelModule.getTextSize(t,this.selected,this.hover),n.id!=o.id){this.labelModule.pointToSelf=!1,i=this.edgeType.getPoint(.5,e),t.save();var r=this._getRotation(t);0!=r.angle&&(t.translate(r.x,r.y),t.rotate(r.angle)),this.labelModule.draw(t,i.x,i.y,this.selected,this.hover),t.restore()}else{this.labelModule.pointToSelf=!0;var s=gu(t,this.options.selfReference.angle,this.options.selfReference.size,n);i=this._pointOnCircle(s.x,s.y,this.options.selfReference.size,this.options.selfReference.angle),this.labelModule.draw(t,i.x,i.y,this.selected,this.hover)}}}},{key:\"getItemsOnPoint\",value:function(t){var e=[];if(this.labelModule.visible()){var i=this._getRotation();pu(this.labelModule.getSize(),t,i)&&e.push({edgeId:this.id,labelId:0})}var n={left:t.x,top:t.y};return this.isOverlappingWith(n)&&e.push({edgeId:this.id}),e}},{key:\"isOverlappingWith\",value:function(t){if(this.connected){var e=this.from.x,i=this.from.y,n=this.to.x,o=this.to.y,r=t.left,s=t.top;return this.edgeType.getDistanceToEdge(e,i,n,o,r,s)<10}return!1}},{key:\"_getRotation\",value:function(t){var e=this.edgeType.getViaNode(),i=this.edgeType.getPoint(.5,e);void 0!==t&&this.labelModule.calculateLabelSize(t,this.selected,this.hover,i.x,i.y);var n={x:i.x,y:this.labelModule.size.yLine,angle:0};if(!this.labelModule.visible())return n;if(\"horizontal\"===this.options.font.align)return n;var o=this.from.y-this.to.y,r=this.from.x-this.to.x,s=Math.atan2(o,r);return(s<-1&&r<0||s>0&&r<0)&&(s+=Math.PI),n.angle=s,n}},{key:\"_pointOnCircle\",value:function(t,e,i,n){return{x:t+i*Math.cos(n),y:e-i*Math.sin(n)}}},{key:\"select\",value:function(){this.selected=!0}},{key:\"unselect\",value:function(){this.selected=!1}},{key:\"cleanup\",value:function(){return this.edgeType.cleanup()}},{key:\"remove\",value:function(){this.cleanup(),this.disconnect(),delete this.body.edges[this.id]}},{key:\"endPointsValid\",value:function(){return void 0!==this.body.nodes[this.fromId]&&void 0!==this.body.nodes[this.toId]}}],[{key:\"parseOptions\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},o=arguments.length>4&&void 0!==arguments[4]&&arguments[4],r=[\"endPointOffset\",\"arrowStrikethrough\",\"id\",\"from\",\"hidden\",\"hoverWidth\",\"labelHighlightBold\",\"length\",\"line\",\"opacity\",\"physics\",\"scaling\",\"selectionWidth\",\"selfReferenceSize\",\"selfReference\",\"to\",\"title\",\"value\",\"width\",\"font\",\"chosen\",\"widthConstraint\"];if(Eh(r,t,e,i),void 0!==e.endPointOffset&&void 0!==e.endPointOffset.from&&(wd(e.endPointOffset.from)?t.endPointOffset.from=e.endPointOffset.from:(t.endPointOffset.from=void 0!==n.endPointOffset.from?n.endPointOffset.from:0,console.error(\"endPointOffset.from is not a valid number\"))),void 0!==e.endPointOffset&&void 0!==e.endPointOffset.to&&(wd(e.endPointOffset.to)?t.endPointOffset.to=e.endPointOffset.to:(t.endPointOffset.to=void 0!==n.endPointOffset.to?n.endPointOffset.to:0,console.error(\"endPointOffset.to is not a valid number\"))),vu(e.label)?t.label=e.label:vu(t.label)||(t.label=void 0),$h(t,e,\"smooth\",n),$h(t,e,\"shadow\",n),$h(t,e,\"background\",n),void 0!==e.dashes&&null!==e.dashes?t.dashes=e.dashes:!0===i&&null===e.dashes&&(t.dashes=Gr(n.dashes)),void 0!==e.scaling&&null!==e.scaling?(void 0!==e.scaling.min&&(t.scaling.min=e.scaling.min),void 0!==e.scaling.max&&(t.scaling.max=e.scaling.max),$h(t.scaling,e.scaling,\"label\",n.scaling)):!0===i&&null===e.scaling&&(t.scaling=Gr(n.scaling)),void 0!==e.arrows&&null!==e.arrows)if(\"string\"==typeof e.arrows){var s=e.arrows.toLowerCase();t.arrows.to.enabled=-1!=Hr(s).call(s,\"to\"),t.arrows.middle.enabled=-1!=Hr(s).call(s,\"middle\"),t.arrows.from.enabled=-1!=Hr(s).call(s,\"from\")}else{if(\"object\"!==go(e.arrows))throw new Error(\"The arrow newOptions can only be an object or a string. Refer to the documentation. You used:\"+es(e.arrows));$h(t.arrows,e.arrows,\"to\",n.arrows),$h(t.arrows,e.arrows,\"middle\",n.arrows),$h(t.arrows,e.arrows,\"from\",n.arrows)}else!0===i&&null===e.arrows&&(t.arrows=Gr(n.arrows));if(void 0!==e.color&&null!==e.color){var a=bh(e.color)?{color:e.color,highlight:e.color,hover:e.color,inherit:!1,opacity:1}:e.color,h=t.color;if(o)Ch(h,n.color,!1,i);else for(var l in h)Object.prototype.hasOwnProperty.call(h,l)&&delete h[l];if(bh(h))h.color=h,h.highlight=h,h.hover=h,h.inherit=!1,void 0===a.opacity&&(h.opacity=1);else{var d=!1;void 0!==a.color&&(h.color=a.color,d=!0),void 0!==a.highlight&&(h.highlight=a.highlight,d=!0),void 0!==a.hover&&(h.hover=a.hover,d=!0),void 0!==a.inherit&&(h.inherit=a.inherit),void 0!==a.opacity&&(h.opacity=Math.min(1,Math.max(0,a.opacity))),!0===d?h.inherit=!1:void 0===h.inherit&&(h.inherit=\"from\")}}else!0===i&&null===e.color&&(t.color=Kh(n.color));!0===i&&null===e.font&&(t.font=Kh(n.font)),Object.prototype.hasOwnProperty.call(e,\"selfReferenceSize\")&&(console.warn(\"The selfReferenceSize property has been deprecated. Please use selfReference property instead. The selfReference can be set like thise selfReference:{size:30, angle:Math.PI / 4}\"),t.selfReference.size=e.selfReferenceSize)}}]),t}(),ip=function(){function t(e,i,n){var o,r=this;Nn(this,t),this.body=e,this.images=i,this.groups=n,this.body.functions.createEdge=Vt(o=this.create).call(o,this),this.edgesListeners={add:function(t,e){r.add(e.items)},update:function(t,e){r.update(e.items)},remove:function(t,e){r.remove(e.items)}},this.options={},this.defaultOptions={arrows:{to:{enabled:!1,scaleFactor:1,type:\"arrow\"},middle:{enabled:!1,scaleFactor:1,type:\"arrow\"},from:{enabled:!1,scaleFactor:1,type:\"arrow\"}},endPointOffset:{from:0,to:0},arrowStrikethrough:!0,color:{color:\"#848484\",highlight:\"#848484\",hover:\"#848484\",inherit:\"from\",opacity:1},dashes:!1,font:{color:\"#343434\",size:14,face:\"arial\",background:\"none\",strokeWidth:2,strokeColor:\"#ffffff\",align:\"horizontal\",multi:!1,vadjust:0,bold:{mod:\"bold\"},boldital:{mod:\"bold italic\"},ital:{mod:\"italic\"},mono:{mod:\"\",size:15,face:\"courier new\",vadjust:2}},hidden:!1,hoverWidth:1.5,label:void 0,labelHighlightBold:!0,length:void 0,physics:!0,scaling:{min:1,max:15,label:{enabled:!0,min:14,max:30,maxVisible:30,drawThreshold:5},customScalingFunction:function(t,e,i,n){if(e===t)return.5;var o=1/(e-t);return Math.max(0,(n-t)*o)}},selectionWidth:1.5,selfReference:{size:20,angle:Math.PI/4,renderBehindTheNode:!0},shadow:{enabled:!1,color:\"rgba(0,0,0,0.5)\",size:10,x:5,y:5},background:{enabled:!1,color:\"rgba(111,111,111,1)\",size:10,dashes:!1},smooth:{enabled:!0,type:\"dynamic\",forceDirection:\"none\",roundness:.5},title:void 0,width:1,value:void 0},Ch(this.options,this.defaultOptions),this.bindEventListeners()}return Fn(t,[{key:\"bindEventListeners\",value:function(){var t,e,i=this;this.body.emitter.on(\"_forceDisableDynamicCurves\",(function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];\"dynamic\"===t&&(t=\"continuous\");var n=!1;for(var o in i.body.edges)if(Object.prototype.hasOwnProperty.call(i.body.edges,o)){var r=i.body.edges[o],s=i.body.data.edges.get(o);if(null!=s){var a=s.smooth;void 0!==a&&!0===a.enabled&&\"dynamic\"===a.type&&(void 0===t?r.setOptions({smooth:!1}):r.setOptions({smooth:{type:t}}),n=!0)}}!0===e&&!0===n&&i.body.emitter.emit(\"_dataChanged\")})),this.body.emitter.on(\"_dataUpdated\",(function(){i.reconnectEdges()})),this.body.emitter.on(\"refreshEdges\",Vt(t=this.refresh).call(t,this)),this.body.emitter.on(\"refresh\",Vt(e=this.refresh).call(e,this)),this.body.emitter.on(\"destroy\",(function(){Dh(i.edgesListeners,(function(t,e){i.body.data.edges&&i.body.data.edges.off(e,t)})),delete i.body.functions.createEdge,delete i.edgesListeners.add,delete i.edgesListeners.update,delete i.edgesListeners.remove,delete i.edgesListeners}))}},{key:\"setOptions\",value:function(t){if(void 0!==t){ep.parseOptions(this.options,t,!0,this.defaultOptions,!0);var e=!1;if(void 0!==t.smooth)for(var i in this.body.edges)Object.prototype.hasOwnProperty.call(this.body.edges,i)&&(e=this.body.edges[i].updateEdgeType()||e);if(void 0!==t.font)for(var n in this.body.edges)Object.prototype.hasOwnProperty.call(this.body.edges,n)&&this.body.edges[n].updateLabelModule();void 0===t.hidden&&void 0===t.physics&&!0!==e||this.body.emitter.emit(\"_dataChanged\")}}},{key:\"setData\",value:function(t){var e=this,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=this.body.data.edges;if(nu(\"id\",t))this.body.data.edges=t;else if(So(t))this.body.data.edges=new tu,this.body.data.edges.add(t);else{if(t)throw new TypeError(\"Array or DataSet expected\");this.body.data.edges=new tu}if(n&&Dh(this.edgesListeners,(function(t,e){n.off(e,t)})),this.body.edges={},this.body.data.edges){Dh(this.edgesListeners,(function(t,i){e.body.data.edges.on(i,t)}));var o=this.body.data.edges.getIds();this.add(o,!0)}this.body.emitter.emit(\"_adjustEdgesForHierarchicalLayout\"),!1===i&&this.body.emitter.emit(\"_dataChanged\")}},{key:\"add\",value:function(t){for(var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=this.body.edges,n=this.body.data.edges,o=0;o<t.length;o++){var r=t[o],s=i[r];s&&s.disconnect();var a=n.get(r,{showInternalIds:!0});i[r]=this.create(a)}this.body.emitter.emit(\"_adjustEdgesForHierarchicalLayout\"),!1===e&&this.body.emitter.emit(\"_dataChanged\")}},{key:\"update\",value:function(t){for(var e=this.body.edges,i=this.body.data.edges,n=!1,o=0;o<t.length;o++){var r=t[o],s=i.get(r),a=e[r];void 0!==a?(a.disconnect(),n=a.setOptions(s)||n,a.connect()):(this.body.edges[r]=this.create(s),n=!0)}!0===n?(this.body.emitter.emit(\"_adjustEdgesForHierarchicalLayout\"),this.body.emitter.emit(\"_dataChanged\")):this.body.emitter.emit(\"_dataUpdated\")}},{key:\"remove\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(0!==t.length){var i=this.body.edges;Dh(t,(function(t){var e=i[t];void 0!==e&&e.remove()})),e&&this.body.emitter.emit(\"_dataChanged\")}}},{key:\"refresh\",value:function(){var t=this;Dh(this.body.edges,(function(e,i){var n=t.body.data.edges.get(i);void 0!==n&&e.setOptions(n)}))}},{key:\"create\",value:function(t){return new ep(t,this.body,this.images,this.options,this.defaultOptions)}},{key:\"reconnectEdges\",value:function(){var t,e=this.body.nodes,i=this.body.edges;for(t in e)Object.prototype.hasOwnProperty.call(e,t)&&(e[t].edges=[]);for(t in i)if(Object.prototype.hasOwnProperty.call(i,t)){var n=i[t];n.from=null,n.to=null,n.connect()}}},{key:\"getConnectedNodes\",value:function(t){var e=[];if(void 0!==this.body.edges[t]){var i=this.body.edges[t];void 0!==i.fromId&&e.push(i.fromId),void 0!==i.toId&&e.push(i.toId)}return e}},{key:\"_updateState\",value:function(){this._addMissingEdges(),this._removeInvalidEdges()}},{key:\"_removeInvalidEdges\",value:function(){var t=this,e=[];Dh(this.body.edges,(function(i,n){var o=t.body.nodes[i.toId],r=t.body.nodes[i.fromId];void 0!==o&&!0===o.isCluster||void 0!==r&&!0===r.isCluster||void 0!==o&&void 0!==r||e.push(n)})),this.remove(e,!1)}},{key:\"_addMissingEdges\",value:function(){var t=this.body.data.edges;if(null!=t){var e=this.body.edges,i=[];Wo(t).call(t,(function(t,n){void 0===e[n]&&i.push(n)})),this.add(i,!0)}}}]),t}(),np=function(){function t(e,i,n){Nn(this,t),this.body=e,this.physicsBody=i,this.barnesHutTree,this.setOptions(n),this._rng=ah(\"BARNES HUT SOLVER\")}return Fn(t,[{key:\"setOptions\",value:function(t){this.options=t,this.thetaInversed=1/this.options.theta,this.overlapAvoidanceFactor=1-Math.max(0,Math.min(1,this.options.avoidOverlap))}},{key:\"solve\",value:function(){if(0!==this.options.gravitationalConstant&&this.physicsBody.physicsNodeIndices.length>0){var t,e=this.body.nodes,i=this.physicsBody.physicsNodeIndices,n=i.length,o=this._formBarnesHutTree(e,i);this.barnesHutTree=o;for(var r=0;r<n;r++)(t=e[i[r]]).options.mass>0&&this._getForceContributions(o.root,t)}}},{key:\"_getForceContributions\",value:function(t,e){this._getForceContribution(t.children.NW,e),this._getForceContribution(t.children.NE,e),this._getForceContribution(t.children.SW,e),this._getForceContribution(t.children.SE,e)}},{key:\"_getForceContribution\",value:function(t,e){if(t.childrenCount>0){var i=t.centerOfMass.x-e.x,n=t.centerOfMass.y-e.y,o=Math.sqrt(i*i+n*n);o*t.calcSize>this.thetaInversed?this._calculateForces(o,i,n,e,t):4===t.childrenCount?this._getForceContributions(t,e):t.children.data.id!=e.id&&this._calculateForces(o,i,n,e,t)}}},{key:\"_calculateForces\",value:function(t,e,i,n,o){0===t&&(e=t=.1),this.overlapAvoidanceFactor<1&&n.shape.radius&&(t=Math.max(.1+this.overlapAvoidanceFactor*n.shape.radius,t-n.shape.radius));var r=this.options.gravitationalConstant*o.mass*n.options.mass/Math.pow(t,3),s=e*r,a=i*r;this.physicsBody.forces[n.id].x+=s,this.physicsBody.forces[n.id].y+=a}},{key:\"_formBarnesHutTree\",value:function(t,e){for(var i,n=e.length,o=t[e[0]].x,r=t[e[0]].y,s=t[e[0]].x,a=t[e[0]].y,h=1;h<n;h++){var l=t[e[h]],d=l.x,c=l.y;l.options.mass>0&&(d<o&&(o=d),d>s&&(s=d),c<r&&(r=c),c>a&&(a=c))}var u=Math.abs(s-o)-Math.abs(a-r);u>0?(r-=.5*u,a+=.5*u):(o+=.5*u,s-=.5*u);var f=Math.max(1e-5,Math.abs(s-o)),p=.5*f,v=.5*(o+s),g=.5*(r+a),y={root:{centerOfMass:{x:0,y:0},mass:0,range:{minX:v-p,maxX:v+p,minY:g-p,maxY:g+p},size:f,calcSize:1/f,children:{data:null},maxWidth:0,level:0,childrenCount:4}};this._splitBranch(y.root);for(var m=0;m<n;m++)(i=t[e[m]]).options.mass>0&&this._placeInTree(y.root,i);return y}},{key:\"_updateBranchMass\",value:function(t,e){var i=t.centerOfMass,n=t.mass+e.options.mass,o=1/n;i.x=i.x*t.mass+e.x*e.options.mass,i.x*=o,i.y=i.y*t.mass+e.y*e.options.mass,i.y*=o,t.mass=n;var r=Math.max(Math.max(e.height,e.radius),e.width);t.maxWidth=t.maxWidth<r?r:t.maxWidth}},{key:\"_placeInTree\",value:function(t,e,i){1==i&&void 0!==i||this._updateBranchMass(t,e);var n,o=t.children.NW.range;n=o.maxX>e.x?o.maxY>e.y?\"NW\":\"SW\":o.maxY>e.y?\"NE\":\"SE\",this._placeInRegion(t,e,n)}},{key:\"_placeInRegion\",value:function(t,e,i){var n=t.children[i];switch(n.childrenCount){case 0:n.children.data=e,n.childrenCount=1,this._updateBranchMass(n,e);break;case 1:n.children.data.x===e.x&&n.children.data.y===e.y?(e.x+=this._rng(),e.y+=this._rng()):(this._splitBranch(n),this._placeInTree(n,e));break;case 4:this._placeInTree(n,e)}}},{key:\"_splitBranch\",value:function(t){var e=null;1===t.childrenCount&&(e=t.children.data,t.mass=0,t.centerOfMass.x=0,t.centerOfMass.y=0),t.childrenCount=4,t.children.data=null,this._insertRegion(t,\"NW\"),this._insertRegion(t,\"NE\"),this._insertRegion(t,\"SW\"),this._insertRegion(t,\"SE\"),null!=e&&this._placeInTree(t,e)}},{key:\"_insertRegion\",value:function(t,e){var i,n,o,r,s=.5*t.size;switch(e){case\"NW\":i=t.range.minX,n=t.range.minX+s,o=t.range.minY,r=t.range.minY+s;break;case\"NE\":i=t.range.minX+s,n=t.range.maxX,o=t.range.minY,r=t.range.minY+s;break;case\"SW\":i=t.range.minX,n=t.range.minX+s,o=t.range.minY+s,r=t.range.maxY;break;case\"SE\":i=t.range.minX+s,n=t.range.maxX,o=t.range.minY+s,r=t.range.maxY}t.children[e]={centerOfMass:{x:0,y:0},mass:0,range:{minX:i,maxX:n,minY:o,maxY:r},size:.5*t.size,calcSize:2*t.calcSize,children:{data:null},maxWidth:0,level:t.level+1,childrenCount:0}}},{key:\"_debug\",value:function(t,e){void 0!==this.barnesHutTree&&(t.lineWidth=1,this._drawBranch(this.barnesHutTree.root,t,e))}},{key:\"_drawBranch\",value:function(t,e,i){void 0===i&&(i=\"#FF0000\"),4===t.childrenCount&&(this._drawBranch(t.children.NW,e),this._drawBranch(t.children.NE,e),this._drawBranch(t.children.SE,e),this._drawBranch(t.children.SW,e)),e.strokeStyle=i,e.beginPath(),e.moveTo(t.range.minX,t.range.minY),e.lineTo(t.range.maxX,t.range.minY),e.stroke(),e.beginPath(),e.moveTo(t.range.maxX,t.range.minY),e.lineTo(t.range.maxX,t.range.maxY),e.stroke(),e.beginPath(),e.moveTo(t.range.maxX,t.range.maxY),e.lineTo(t.range.minX,t.range.maxY),e.stroke(),e.beginPath(),e.moveTo(t.range.minX,t.range.maxY),e.lineTo(t.range.minX,t.range.minY),e.stroke()}}]),t}(),op=function(){function t(e,i,n){Nn(this,t),this._rng=ah(\"REPULSION SOLVER\"),this.body=e,this.physicsBody=i,this.setOptions(n)}return Fn(t,[{key:\"setOptions\",value:function(t){this.options=t}},{key:\"solve\",value:function(){for(var t,e,i,n,o,r,s,a,h=this.body.nodes,l=this.physicsBody.physicsNodeIndices,d=this.physicsBody.forces,c=this.options.nodeDistance,u=-2/3/c,f=0;f<l.length-1;f++){s=h[l[f]];for(var p=f+1;p<l.length;p++)t=(a=h[l[p]]).x-s.x,e=a.y-s.y,0===(i=Math.sqrt(t*t+e*e))&&(t=i=.1*this._rng()),i<2*c&&(r=i<.5*c?1:u*i+1.3333333333333333,n=t*(r/=i),o=e*r,d[s.id].x-=n,d[s.id].y-=o,d[a.id].x+=n,d[a.id].y+=o)}}}]),t}(),rp=function(){function t(e,i,n){Nn(this,t),this.body=e,this.physicsBody=i,this.setOptions(n)}return Fn(t,[{key:\"setOptions\",value:function(t){this.options=t,this.overlapAvoidanceFactor=Math.max(0,Math.min(1,this.options.avoidOverlap||0))}},{key:\"solve\",value:function(){for(var t=this.body.nodes,e=this.physicsBody.physicsNodeIndices,i=this.physicsBody.forces,n=this.options.nodeDistance,o=0;o<e.length-1;o++)for(var r=t[e[o]],s=o+1;s<e.length;s++){var a=t[e[s]];if(r.level===a.level){var h=n+this.overlapAvoidanceFactor*((r.shape.radius||0)/2+(a.shape.radius||0)/2),l=a.x-r.x,d=a.y-r.y,c=Math.sqrt(l*l+d*d),u=void 0;u=c<h?-Math.pow(.05*c,2)+Math.pow(.05*h,2):0,0!==c&&(u/=c);var f=l*u,p=d*u;i[r.id].x-=f,i[r.id].y-=p,i[a.id].x+=f,i[a.id].y+=p}}}}]),t}(),sp=function(){function t(e,i,n){Nn(this,t),this.body=e,this.physicsBody=i,this.setOptions(n)}return Fn(t,[{key:\"setOptions\",value:function(t){this.options=t}},{key:\"solve\",value:function(){for(var t,e,i,n,o,r=this.physicsBody.physicsEdgeIndices,s=this.body.edges,a=0;a<r.length;a++)!0===(e=s[r[a]]).connected&&e.toId!==e.fromId&&void 0!==this.body.nodes[e.toId]&&void 0!==this.body.nodes[e.fromId]&&(void 0!==e.edgeType.via?(t=void 0===e.options.length?this.options.springLength:e.options.length,i=e.to,n=e.edgeType.via,o=e.from,this._calculateSpringForce(i,n,.5*t),this._calculateSpringForce(n,o,.5*t)):(t=void 0===e.options.length?1.5*this.options.springLength:e.options.length,this._calculateSpringForce(e.from,e.to,t)))}},{key:\"_calculateSpringForce\",value:function(t,e,i){var n=t.x-e.x,o=t.y-e.y,r=Math.max(Math.sqrt(n*n+o*o),.01),s=this.options.springConstant*(i-r)/r,a=n*s,h=o*s;void 0!==this.physicsBody.forces[t.id]&&(this.physicsBody.forces[t.id].x+=a,this.physicsBody.forces[t.id].y+=h),void 0!==this.physicsBody.forces[e.id]&&(this.physicsBody.forces[e.id].x-=a,this.physicsBody.forces[e.id].y-=h)}}]),t}(),ap=function(){function t(e,i,n){Nn(this,t),this.body=e,this.physicsBody=i,this.setOptions(n)}return Fn(t,[{key:\"setOptions\",value:function(t){this.options=t}},{key:\"solve\",value:function(){for(var t,e,i,n,o,r,s,a,h,l,d=this.body.edges,c=.5,u=this.physicsBody.physicsEdgeIndices,f=this.physicsBody.physicsNodeIndices,p=this.physicsBody.forces,v=0;v<f.length;v++){var g=f[v];p[g].springFx=0,p[g].springFy=0}for(var y=0;y<u.length;y++)!0===(e=d[u[y]]).connected&&(t=void 0===e.options.length?this.options.springLength:e.options.length,i=e.from.x-e.to.x,n=e.from.y-e.to.y,a=0===(a=Math.sqrt(i*i+n*n))?.01:a,o=i*(s=this.options.springConstant*(t-a)/a),r=n*s,e.to.level!=e.from.level?(void 0!==p[e.toId]&&(p[e.toId].springFx-=o,p[e.toId].springFy-=r),void 0!==p[e.fromId]&&(p[e.fromId].springFx+=o,p[e.fromId].springFy+=r)):(void 0!==p[e.toId]&&(p[e.toId].x-=c*o,p[e.toId].y-=c*r),void 0!==p[e.fromId]&&(p[e.fromId].x+=c*o,p[e.fromId].y+=c*r)));s=1;for(var m=0;m<f.length;m++){var b=f[m];h=Math.min(s,Math.max(-s,p[b].springFx)),l=Math.min(s,Math.max(-s,p[b].springFy)),p[b].x+=h,p[b].y+=l}for(var w=0,k=0,_=0;_<f.length;_++){var x=f[_];w+=p[x].x,k+=p[x].y}for(var E=w/f.length,O=k/f.length,C=0;C<f.length;C++){var S=f[C];p[S].x-=E,p[S].y-=O}}}]),t}(),hp=function(){function t(e,i,n){Nn(this,t),this.body=e,this.physicsBody=i,this.setOptions(n)}return Fn(t,[{key:\"setOptions\",value:function(t){this.options=t}},{key:\"solve\",value:function(){for(var t,e,i,n,o=this.body.nodes,r=this.physicsBody.physicsNodeIndices,s=this.physicsBody.forces,a=0;a<r.length;a++){t=-(n=o[r[a]]).x,e=-n.y,i=Math.sqrt(t*t+e*e),this._calculateForces(i,t,e,s,n)}}},{key:\"_calculateForces\",value:function(t,e,i,n,o){var r=0===t?0:this.options.centralGravity/t;n[o.id].x=e*r,n[o.id].y=i*r}}]),t}();function lp(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var dp=function(t){Ad(i,t);var e=lp(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o))._rng=ah(\"FORCE ATLAS 2 BASED REPULSION SOLVER\"),r}return Fn(i,[{key:\"_calculateForces\",value:function(t,e,i,n,o){0===t&&(e=t=.1*this._rng()),this.overlapAvoidanceFactor<1&&n.shape.radius&&(t=Math.max(.1+this.overlapAvoidanceFactor*n.shape.radius,t-n.shape.radius));var r=n.edges.length+1,s=this.options.gravitationalConstant*o.mass*n.options.mass*r/Math.pow(t,2),a=e*s,h=i*s;this.physicsBody.forces[n.id].x+=a,this.physicsBody.forces[n.id].y+=h}}]),i}(np);function cp(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var up=function(t){Ad(i,t);var e=cp(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"_calculateForces\",value:function(t,e,i,n,o){if(t>0){var r=o.edges.length+1,s=this.options.centralGravity*r*o.options.mass;n[o.id].x=e*s,n[o.id].y=i*s}}}]),i}(hp),fp=function(){function t(e){Nn(this,t),this.body=e,this.physicsBody={physicsNodeIndices:[],physicsEdgeIndices:[],forces:{},velocities:{}},this.physicsEnabled=!0,this.simulationInterval=1e3/60,this.requiresTimeout=!0,this.previousStates={},this.referenceState={},this.freezeCache={},this.renderTimer=void 0,this.adaptiveTimestep=!1,this.adaptiveTimestepEnabled=!1,this.adaptiveCounter=0,this.adaptiveInterval=3,this.stabilized=!1,this.startedStabilization=!1,this.stabilizationIterations=0,this.ready=!1,this.options={},this.defaultOptions={enabled:!0,barnesHut:{theta:.5,gravitationalConstant:-2e3,centralGravity:.3,springLength:95,springConstant:.04,damping:.09,avoidOverlap:0},forceAtlas2Based:{theta:.5,gravitationalConstant:-50,centralGravity:.01,springConstant:.08,springLength:100,damping:.4,avoidOverlap:0},repulsion:{centralGravity:.2,springLength:200,springConstant:.05,nodeDistance:100,damping:.09,avoidOverlap:0},hierarchicalRepulsion:{centralGravity:0,springLength:100,springConstant:.01,nodeDistance:120,damping:.09},maxVelocity:50,minVelocity:.75,solver:\"barnesHut\",stabilization:{enabled:!0,iterations:1e3,updateInterval:50,onlyDynamicEdges:!1,fit:!0},timestep:.5,adaptiveTimestep:!0,wind:{x:0,y:0}},At(this.options,this.defaultOptions),this.timestep=.5,this.layoutFailed=!1,this.bindEventListeners()}return Fn(t,[{key:\"bindEventListeners\",value:function(){var t=this;this.body.emitter.on(\"initPhysics\",(function(){t.initPhysics()})),this.body.emitter.on(\"_layoutFailed\",(function(){t.layoutFailed=!0})),this.body.emitter.on(\"resetPhysics\",(function(){t.stopSimulation(),t.ready=!1})),this.body.emitter.on(\"disablePhysics\",(function(){t.physicsEnabled=!1,t.stopSimulation()})),this.body.emitter.on(\"restorePhysics\",(function(){t.setOptions(t.options),!0===t.ready&&t.startSimulation()})),this.body.emitter.on(\"startSimulation\",(function(){!0===t.ready&&t.startSimulation()})),this.body.emitter.on(\"stopSimulation\",(function(){t.stopSimulation()})),this.body.emitter.on(\"destroy\",(function(){t.stopSimulation(!1),t.body.emitter.off()})),this.body.emitter.on(\"_dataChanged\",(function(){t.updatePhysicsData()}))}},{key:\"setOptions\",value:function(t){if(void 0!==t)if(!1===t)this.options.enabled=!1,this.physicsEnabled=!1,this.stopSimulation();else if(!0===t)this.options.enabled=!0,this.physicsEnabled=!0,this.startSimulation();else{this.physicsEnabled=!0,Oh([\"stabilization\"],this.options,t),$h(this.options,t,\"stabilization\"),void 0===t.enabled&&(this.options.enabled=!0),!1===this.options.enabled&&(this.physicsEnabled=!1,this.stopSimulation());var e=this.options.wind;e&&((\"number\"!=typeof e.x||yd(e.x))&&(e.x=0),(\"number\"!=typeof e.y||yd(e.y))&&(e.y=0)),this.timestep=this.options.timestep}this.init()}},{key:\"init\",value:function(){var t;\"forceAtlas2Based\"===this.options.solver?(t=this.options.forceAtlas2Based,this.nodesSolver=new dp(this.body,this.physicsBody,t),this.edgesSolver=new sp(this.body,this.physicsBody,t),this.gravitySolver=new up(this.body,this.physicsBody,t)):\"repulsion\"===this.options.solver?(t=this.options.repulsion,this.nodesSolver=new op(this.body,this.physicsBody,t),this.edgesSolver=new sp(this.body,this.physicsBody,t),this.gravitySolver=new hp(this.body,this.physicsBody,t)):\"hierarchicalRepulsion\"===this.options.solver?(t=this.options.hierarchicalRepulsion,this.nodesSolver=new rp(this.body,this.physicsBody,t),this.edgesSolver=new ap(this.body,this.physicsBody,t),this.gravitySolver=new hp(this.body,this.physicsBody,t)):(t=this.options.barnesHut,this.nodesSolver=new np(this.body,this.physicsBody,t),this.edgesSolver=new sp(this.body,this.physicsBody,t),this.gravitySolver=new hp(this.body,this.physicsBody,t)),this.modelOptions=t}},{key:\"initPhysics\",value:function(){!0===this.physicsEnabled&&!0===this.options.enabled?!0===this.options.stabilization.enabled?this.stabilize():(this.stabilized=!1,this.ready=!0,this.body.emitter.emit(\"fit\",{},this.layoutFailed),this.startSimulation()):(this.ready=!0,this.body.emitter.emit(\"fit\"))}},{key:\"startSimulation\",value:function(){var t;!0===this.physicsEnabled&&!0===this.options.enabled?(this.stabilized=!1,this.adaptiveTimestep=!1,this.body.emitter.emit(\"_resizeNodes\"),void 0===this.viewFunction&&(this.viewFunction=Vt(t=this.simulationStep).call(t,this),this.body.emitter.on(\"initRedraw\",this.viewFunction),this.body.emitter.emit(\"_startRendering\"))):this.body.emitter.emit(\"_redraw\")}},{key:\"stopSimulation\",value:function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.stabilized=!0,!0===t&&this._emitStabilized(),void 0!==this.viewFunction&&(this.body.emitter.off(\"initRedraw\",this.viewFunction),this.viewFunction=void 0,!0===t&&this.body.emitter.emit(\"_stopRendering\"))}},{key:\"simulationStep\",value:function(){var t=No();this.physicsTick(),(No()-t<.4*this.simulationInterval||!0===this.runDoubleSpeed)&&!1===this.stabilized&&(this.physicsTick(),this.runDoubleSpeed=!0),!0===this.stabilized&&this.stopSimulation()}},{key:\"_emitStabilized\",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.stabilizationIterations;(this.stabilizationIterations>1||!0===this.startedStabilization)&&rs((function(){t.body.emitter.emit(\"stabilized\",{iterations:e}),t.startedStabilization=!1,t.stabilizationIterations=0}),0)}},{key:\"physicsStep\",value:function(){this.gravitySolver.solve(),this.nodesSolver.solve(),this.edgesSolver.solve(),this.moveNodes()}},{key:\"adjustTimeStep\",value:function(){!0===this._evaluateStepQuality()?this.timestep=1.2*this.timestep:this.timestep/1.2<this.options.timestep?this.timestep=this.options.timestep:(this.adaptiveCounter=-1,this.timestep=Math.max(this.options.timestep,this.timestep/1.2))}},{key:\"physicsTick\",value:function(){if(this._startStabilizing(),!0!==this.stabilized){if(!0===this.adaptiveTimestep&&!0===this.adaptiveTimestepEnabled)this.adaptiveCounter%this.adaptiveInterval==0?(this.timestep=2*this.timestep,this.physicsStep(),this.revert(),this.timestep=.5*this.timestep,this.physicsStep(),this.physicsStep(),this.adjustTimeStep()):this.physicsStep(),this.adaptiveCounter+=1;else this.timestep=this.options.timestep,this.physicsStep();!0===this.stabilized&&this.revert(),this.stabilizationIterations++}}},{key:\"updatePhysicsData\",value:function(){this.physicsBody.forces={},this.physicsBody.physicsNodeIndices=[],this.physicsBody.physicsEdgeIndices=[];var t=this.body.nodes,e=this.body.edges;for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&!0===t[i].options.physics&&this.physicsBody.physicsNodeIndices.push(t[i].id);for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&!0===e[n].options.physics&&this.physicsBody.physicsEdgeIndices.push(e[n].id);for(var o=0;o<this.physicsBody.physicsNodeIndices.length;o++){var r=this.physicsBody.physicsNodeIndices[o];this.physicsBody.forces[r]={x:0,y:0},void 0===this.physicsBody.velocities[r]&&(this.physicsBody.velocities[r]={x:0,y:0})}for(var s in this.physicsBody.velocities)void 0===t[s]&&delete this.physicsBody.velocities[s]}},{key:\"revert\",value:function(){var t=zo(this.previousStates),e=this.body.nodes,i=this.physicsBody.velocities;this.referenceState={};for(var n=0;n<t.length;n++){var o=t[n];void 0!==e[o]?!0===e[o].options.physics&&(this.referenceState[o]={positions:{x:e[o].x,y:e[o].y}},i[o].x=this.previousStates[o].vx,i[o].y=this.previousStates[o].vy,e[o].x=this.previousStates[o].x,e[o].y=this.previousStates[o].y):delete this.previousStates[o]}}},{key:\"_evaluateStepQuality\",value:function(){var t,e,i=this.body.nodes,n=this.referenceState;for(var o in this.referenceState)if(Object.prototype.hasOwnProperty.call(this.referenceState,o)&&void 0!==i[o]&&(t=i[o].x-n[o].positions.x,e=i[o].y-n[o].positions.y,Math.sqrt(Math.pow(t,2)+Math.pow(e,2))>.3))return!1;return!0}},{key:\"moveNodes\",value:function(){for(var t=this.physicsBody.physicsNodeIndices,e=0,i=0,n=0;n<t.length;n++){var o=t[n],r=this._performStep(o);e=Math.max(e,r),i+=r}this.adaptiveTimestepEnabled=i/t.length<5,this.stabilized=e<this.options.minVelocity}},{key:\"calculateComponentVelocity\",value:function(t,e,i){t+=(e-this.modelOptions.damping*t)/i*this.timestep;var n=this.options.maxVelocity||1e9;return Math.abs(t)>n&&(t=t>0?n:-n),t}},{key:\"_performStep\",value:function(t){var e=this.body.nodes[t],i=this.physicsBody.forces[t];this.options.wind&&(i.x+=this.options.wind.x,i.y+=this.options.wind.y);var n=this.physicsBody.velocities[t];return this.previousStates[t]={x:e.x,y:e.y,vx:n.x,vy:n.y},!1===e.options.fixed.x?(n.x=this.calculateComponentVelocity(n.x,i.x,e.options.mass),e.x+=n.x*this.timestep):(i.x=0,n.x=0),!1===e.options.fixed.y?(n.y=this.calculateComponentVelocity(n.y,i.y,e.options.mass),e.y+=n.y*this.timestep):(i.y=0,n.y=0),Math.sqrt(Math.pow(n.x,2)+Math.pow(n.y,2))}},{key:\"_freezeNodes\",value:function(){var t=this.body.nodes;for(var e in t)if(Object.prototype.hasOwnProperty.call(t,e)&&t[e].x&&t[e].y){var i=t[e].options.fixed;this.freezeCache[e]={x:i.x,y:i.y},i.x=!0,i.y=!0}}},{key:\"_restoreFrozenNodes\",value:function(){var t=this.body.nodes;for(var e in t)Object.prototype.hasOwnProperty.call(t,e)&&void 0!==this.freezeCache[e]&&(t[e].options.fixed.x=this.freezeCache[e].x,t[e].options.fixed.y=this.freezeCache[e].y);this.freezeCache={}}},{key:\"stabilize\",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.options.stabilization.iterations;\"number\"!=typeof e&&(e=this.options.stabilization.iterations,console.error(\"The stabilize method needs a numeric amount of iterations. Switching to default: \",e)),0!==this.physicsBody.physicsNodeIndices.length?(this.adaptiveTimestep=this.options.adaptiveTimestep,this.body.emitter.emit(\"_resizeNodes\"),this.stopSimulation(),this.stabilized=!1,this.body.emitter.emit(\"_blockRedraw\"),this.targetIterations=e,!0===this.options.stabilization.onlyDynamicEdges&&this._freezeNodes(),this.stabilizationIterations=0,rs((function(){return t._stabilizationBatch()}),0)):this.ready=!0}},{key:\"_startStabilizing\",value:function(){return!0!==this.startedStabilization&&(this.body.emitter.emit(\"startStabilizing\"),this.startedStabilization=!0,!0)}},{key:\"_stabilizationBatch\",value:function(){var t=this,e=function(){return!1===t.stabilized&&t.stabilizationIterations<t.targetIterations},i=function(){t.body.emitter.emit(\"stabilizationProgress\",{iterations:t.stabilizationIterations,total:t.targetIterations})};this._startStabilizing()&&i();for(var n,o=0;e()&&o<this.options.stabilization.updateInterval;)this.physicsTick(),o++;(i(),e())?rs(Vt(n=this._stabilizationBatch).call(n,this),0):this._finalizeStabilization()}},{key:\"_finalizeStabilization\",value:function(){this.body.emitter.emit(\"_allowRedraw\"),!0===this.options.stabilization.fit&&this.body.emitter.emit(\"fit\"),!0===this.options.stabilization.onlyDynamicEdges&&this._restoreFrozenNodes(),this.body.emitter.emit(\"stabilizationIterationsDone\"),this.body.emitter.emit(\"_requestRedraw\"),!0===this.stabilized?this._emitStabilized():this.startSimulation(),this.ready=!0}},{key:\"_drawForces\",value:function(t){for(var e=0;e<this.physicsBody.physicsNodeIndices.length;e++){var i=this.physicsBody.physicsNodeIndices[e],n=this.body.nodes[i],o=this.physicsBody.forces[i],r=Math.sqrt(Math.pow(o.x,2)+Math.pow(o.x,2)),s=Math.min(Math.max(5,r),15),a=3*s,h=Vh((180-180*Math.min(1,Math.max(0,.03*r)))/360,1,1),l={x:n.x+20*o.x,y:n.y+20*o.y};t.lineWidth=s,t.strokeStyle=h,t.beginPath(),t.moveTo(n.x,n.y),t.lineTo(l.x,l.y),t.stroke();var d=Math.atan2(o.y,o.x);t.fillStyle=h,jf.draw(t,{type:\"arrow\",point:l,angle:d,length:a}),hs(t).call(t)}}}]),t}(),pp=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"getRange\",value:function(t){var e,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=1e9,o=-1e9,r=1e9,s=-1e9;if(i.length>0)for(var a=0;a<i.length;a++)r>(e=t[i[a]]).shape.boundingBox.left&&(r=e.shape.boundingBox.left),s<e.shape.boundingBox.right&&(s=e.shape.boundingBox.right),n>e.shape.boundingBox.top&&(n=e.shape.boundingBox.top),o<e.shape.boundingBox.bottom&&(o=e.shape.boundingBox.bottom);return 1e9===r&&-1e9===s&&1e9===n&&-1e9===o&&(n=0,o=0,r=0,s=0),{minX:r,maxX:s,minY:n,maxY:o}}},{key:\"getRangeCore\",value:function(t){var e,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=1e9,o=-1e9,r=1e9,s=-1e9;if(i.length>0)for(var a=0;a<i.length;a++)r>(e=t[i[a]]).x&&(r=e.x),s<e.x&&(s=e.x),n>e.y&&(n=e.y),o<e.y&&(o=e.y);return 1e9===r&&-1e9===s&&1e9===n&&-1e9===o&&(n=0,o=0,r=0,s=0),{minX:r,maxX:s,minY:n,maxY:o}}},{key:\"findCenter\",value:function(t){return{x:.5*(t.maxX+t.minX),y:.5*(t.maxY+t.minY)}}},{key:\"cloneOptions\",value:function(t,e){var i={};return void 0===e||\"node\"===e?(Ch(i,t.options,!0),i.x=t.x,i.y=t.y,i.amountOfConnections=t.edges.length):Ch(i,t.options,!0),i}}]),t}();function vp(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var gp=function(t){Ad(i,t);var e=vp(i);function i(t,n,o,r,s,a){var h;return Nn(this,i),(h=e.call(this,t,n,o,r,s,a)).isCluster=!0,h.containedNodes={},h.containedEdges={},h}return Fn(i,[{key:\"_openChildCluster\",value:function(t){var e=this,i=this.body.nodes[t];if(void 0===this.containedNodes[t])throw new Error(\"node with id: \"+t+\" not in current cluster\");if(!i.isCluster)throw new Error(\"node with id: \"+t+\" is not a cluster\");delete this.containedNodes[t],Dh(i.edges,(function(t){delete e.containedEdges[t.id]})),Dh(i.containedNodes,(function(t,i){e.containedNodes[i]=t})),i.containedNodes={},Dh(i.containedEdges,(function(t,i){e.containedEdges[i]=t})),i.containedEdges={},Dh(i.edges,(function(t){Dh(e.edges,(function(i){var n,o,r=Hr(n=i.clusteringEdgeReplacingIds).call(n,t.id);-1!==r&&(Dh(t.clusteringEdgeReplacingIds,(function(t){i.clusteringEdgeReplacingIds.push(t),e.body.edges[t].edgeReplacedById=i.id})),er(o=i.clusteringEdgeReplacingIds).call(o,r,1))}))})),i.edges=[]}}]),i}(cf),yp=function(){function t(e){var i=this;Nn(this,t),this.body=e,this.clusteredNodes={},this.clusteredEdges={},this.options={},this.defaultOptions={},At(this.options,this.defaultOptions),this.body.emitter.on(\"_resetData\",(function(){i.clusteredNodes={},i.clusteredEdges={}}))}return Fn(t,[{key:\"clusterByHubsize\",value:function(t,e){void 0===t?t=this._getHubSize():\"object\"===go(t)&&(e=this._checkOptions(t),t=this._getHubSize());for(var i=[],n=0;n<this.body.nodeIndices.length;n++){var o=this.body.nodes[this.body.nodeIndices[n]];o.edges.length>=t&&i.push(o.id)}for(var r=0;r<i.length;r++)this.clusterByConnection(i[r],e,!0);this.body.emitter.emit(\"_dataChanged\")}},{key:\"cluster\",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},i=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(void 0===e.joinCondition)throw new Error(\"Cannot call clusterByNodeData without a joinCondition function in the options.\");e=this._checkOptions(e);var n={},o={};Dh(this.body.nodes,(function(i,r){i.options&&!0===e.joinCondition(i.options)&&(n[r]=i,Dh(i.edges,(function(e){void 0===t.clusteredEdges[e.id]&&(o[e.id]=e)})))})),this._cluster(n,o,e,i)}},{key:\"clusterByEdgeCount\",value:function(t,e){var i=this,n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];e=this._checkOptions(e);for(var o,r,s,a=[],h={},l=function(n){var l={},d={},c=i.body.nodeIndices[n],u=i.body.nodes[c];if(void 0===h[c]){s=0,r=[];for(var f=0;f<u.edges.length;f++)o=u.edges[f],void 0===i.clusteredEdges[o.id]&&(o.toId!==o.fromId&&s++,r.push(o));if(s===t){for(var p=function(t){if(void 0===e.joinCondition||null===e.joinCondition)return!0;var i=pp.cloneOptions(t);return e.joinCondition(i)},v=!0,g=0;g<r.length;g++){o=r[g];var y=i._getConnectedId(o,c);if(!p(u)){v=!1;break}d[o.id]=o,l[c]=u,l[y]=i.body.nodes[y],h[c]=!0}if(zo(l).length>0&&zo(d).length>0&&!0===v){var m=function(){for(var t=0;t<a.length;++t)for(var e in l)if(void 0!==a[t].nodes[e])return a[t]}();if(void 0!==m){for(var b in l)void 0===m.nodes[b]&&(m.nodes[b]=l[b]);for(var w in d)void 0===m.edges[w]&&(m.edges[w]=d[w])}else a.push({nodes:l,edges:d})}}}},d=0;d<this.body.nodeIndices.length;d++)l(d);for(var c=0;c<a.length;c++)this._cluster(a[c].nodes,a[c].edges,e,!1);!0===n&&this.body.emitter.emit(\"_dataChanged\")}},{key:\"clusterOutliers\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this.clusterByEdgeCount(1,t,e)}},{key:\"clusterBridges\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this.clusterByEdgeCount(2,t,e)}},{key:\"clusterByConnection\",value:function(t,e){var i,n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];if(void 0===t)throw new Error(\"No nodeId supplied to clusterByConnection!\");if(void 0===this.body.nodes[t])throw new Error(\"The nodeId given to clusterByConnection does not exist!\");var o=this.body.nodes[t];void 0===(e=this._checkOptions(e,o)).clusterNodeProperties.x&&(e.clusterNodeProperties.x=o.x),void 0===e.clusterNodeProperties.y&&(e.clusterNodeProperties.y=o.y),void 0===e.clusterNodeProperties.fixed&&(e.clusterNodeProperties.fixed={},e.clusterNodeProperties.fixed.x=o.options.fixed.x,e.clusterNodeProperties.fixed.y=o.options.fixed.y);var r={},s={},a=o.id,h=pp.cloneOptions(o);r[a]=o;for(var l=0;l<o.edges.length;l++){var d=o.edges[l];if(void 0===this.clusteredEdges[d.id]){var c=this._getConnectedId(d,a);if(void 0===this.clusteredNodes[c])if(c!==a)if(void 0===e.joinCondition)s[d.id]=d,r[c]=this.body.nodes[c];else{var u=pp.cloneOptions(this.body.nodes[c]);!0===e.joinCondition(h,u)&&(s[d.id]=d,r[c]=this.body.nodes[c])}else s[d.id]=d}}var f=Io(i=zo(r)).call(i,(function(t){return r[t].id}));for(var p in r)if(Object.prototype.hasOwnProperty.call(r,p))for(var v=r[p],g=0;g<v.edges.length;g++){var y=v.edges[g];Hr(f).call(f,this._getConnectedId(y,v.id))>-1&&(s[y.id]=y)}this._cluster(r,s,e,n)}},{key:\"_createClusterEdges\",value:function(t,e,i,n){for(var o,r,s,a,h,l,d=zo(t),c=[],u=0;u<d.length;u++){s=t[r=d[u]];for(var f=0;f<s.edges.length;f++)o=s.edges[f],void 0===this.clusteredEdges[o.id]&&(o.toId==o.fromId?e[o.id]=o:o.toId==r?(a=i.id,l=h=o.fromId):(a=o.toId,h=i.id,l=a),void 0===t[l]&&c.push({edge:o,fromId:h,toId:a}))}for(var p=[],v=function(t){for(var e=0;e<p.length;e++){var i=p[e],n=t.fromId===i.fromId&&t.toId===i.toId,o=t.fromId===i.toId&&t.toId===i.fromId;if(n||o)return i}return null},g=0;g<c.length;g++){var y=c[g],m=y.edge,b=v(y);null===b?(b=this._createClusteredEdge(y.fromId,y.toId,m,n),p.push(b)):b.clusteringEdgeReplacingIds.push(m.id),this.body.edges[m.id].edgeReplacedById=b.id,this._backupEdgeOptions(m),m.setOptions({physics:!1})}}},{key:\"_checkOptions\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return void 0===t.clusterEdgeProperties&&(t.clusterEdgeProperties={}),void 0===t.clusterNodeProperties&&(t.clusterNodeProperties={}),t}},{key:\"_cluster\",value:function(t,e,i){var n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],o=[];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&void 0!==this.clusteredNodes[r]&&o.push(r);for(var s=0;s<o.length;++s)delete t[o[s]];if(0!=zo(t).length&&(1!=zo(t).length||1==i.clusterNodeProperties.allowSingleNodeCluster)){var a=Ch({},i.clusterNodeProperties);if(void 0!==i.processProperties){var h=[];for(var l in t)if(Object.prototype.hasOwnProperty.call(t,l)){var d=pp.cloneOptions(t[l]);h.push(d)}var c=[];for(var u in e)if(Object.prototype.hasOwnProperty.call(e,u)&&\"clusterEdge:\"!==u.substr(0,12)){var f=pp.cloneOptions(e[u],\"edge\");c.push(f)}if(!(a=i.processProperties(a,h,c)))throw new Error(\"The processProperties function does not return properties!\")}void 0===a.id&&(a.id=\"cluster:\"+Wc());var p=a.id;void 0===a.label&&(a.label=\"cluster\");var v=void 0;void 0===a.x&&(v=this._getClusterPosition(t),a.x=v.x),void 0===a.y&&(void 0===v&&(v=this._getClusterPosition(t)),a.y=v.y),a.id=p;var g=this.body.functions.createNode(a,gp);g.containedNodes=t,g.containedEdges=e,g.clusterEdgeProperties=i.clusterEdgeProperties,this.body.nodes[a.id]=g,this._clusterEdges(t,e,a,i.clusterEdgeProperties),a.id=void 0,!0===n&&this.body.emitter.emit(\"_dataChanged\")}}},{key:\"_backupEdgeOptions\",value:function(t){void 0===this.clusteredEdges[t.id]&&(this.clusteredEdges[t.id]={physics:t.options.physics})}},{key:\"_restoreEdge\",value:function(t){var e=this.clusteredEdges[t.id];void 0!==e&&(t.setOptions({physics:e.physics}),delete this.clusteredEdges[t.id])}},{key:\"isCluster\",value:function(t){return void 0!==this.body.nodes[t]?!0===this.body.nodes[t].isCluster:(console.error(\"Node does not exist.\"),!1)}},{key:\"_getClusterPosition\",value:function(t){for(var e,i=zo(t),n=t[i[0]].x,o=t[i[0]].x,r=t[i[0]].y,s=t[i[0]].y,a=1;a<i.length;a++)n=(e=t[i[a]]).x<n?e.x:n,o=e.x>o?e.x:o,r=e.y<r?e.y:r,s=e.y>s?e.y:s;return{x:.5*(n+o),y:.5*(r+s)}}},{key:\"openCluster\",value:function(t,e){var i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];if(void 0===t)throw new Error(\"No clusterNodeId supplied to openCluster.\");var n=this.body.nodes[t];if(void 0===n)throw new Error(\"The clusterNodeId supplied to openCluster does not exist.\");if(!0!==n.isCluster||void 0===n.containedNodes||void 0===n.containedEdges)throw new Error(\"The node:\"+t+\" is not a valid cluster.\");var o=this.findNode(t),r=Hr(o).call(o,t)-1;if(r>=0){var s=o[r],a=this.body.nodes[s];return a._openChildCluster(t),delete this.body.nodes[t],void(!0===i&&this.body.emitter.emit(\"_dataChanged\"))}var h=n.containedNodes,l=n.containedEdges;if(void 0!==e&&void 0!==e.releaseFunction&&\"function\"==typeof e.releaseFunction){var d={},c={x:n.x,y:n.y};for(var u in h)if(Object.prototype.hasOwnProperty.call(h,u)){var f=this.body.nodes[u];d[u]={x:f.x,y:f.y}}var p=e.releaseFunction(c,d);for(var v in h)if(Object.prototype.hasOwnProperty.call(h,v)){var g=this.body.nodes[v];void 0!==p[v]&&(g.x=void 0===p[v].x?n.x:p[v].x,g.y=void 0===p[v].y?n.y:p[v].y)}}else Dh(h,(function(t){!1===t.options.fixed.x&&(t.x=n.x),!1===t.options.fixed.y&&(t.y=n.y)}));for(var y in h)if(Object.prototype.hasOwnProperty.call(h,y)){var m=this.body.nodes[y];m.vx=n.vx,m.vy=n.vy,m.setOptions({physics:!0}),delete this.clusteredNodes[y]}for(var b=[],w=0;w<n.edges.length;w++)b.push(n.edges[w]);for(var k=0;k<b.length;k++){for(var _=b[k],x=this._getConnectedId(_,t),E=this.clusteredNodes[x],O=0;O<_.clusteringEdgeReplacingIds.length;O++){var C=_.clusteringEdgeReplacingIds[O],S=this.body.edges[C];if(void 0!==S)if(void 0!==E){var T=this.body.nodes[E.clusterId];T.containedEdges[S.id]=S,delete l[S.id];var M=S.fromId,P=S.toId;S.toId==x?P=E.clusterId:M=E.clusterId,this._createClusteredEdge(M,P,S,T.clusterEdgeProperties,{hidden:!1,physics:!0})}else this._restoreEdge(S)}_.remove()}for(var D in l)Object.prototype.hasOwnProperty.call(l,D)&&this._restoreEdge(l[D]);delete this.body.nodes[t],!0===i&&this.body.emitter.emit(\"_dataChanged\")}},{key:\"getNodesInCluster\",value:function(t){var e=[];if(!0===this.isCluster(t)){var i=this.body.nodes[t].containedNodes;for(var n in i)Object.prototype.hasOwnProperty.call(i,n)&&e.push(this.body.nodes[n].id)}return e}},{key:\"findNode\",value:function(t){for(var e,i=[],n=0;void 0!==this.clusteredNodes[t]&&n<100;){if(void 0===(e=this.body.nodes[t]))return[];i.push(e.id),t=this.clusteredNodes[t].clusterId,n++}return void 0===(e=this.body.nodes[t])?[]:(i.push(e.id),Xo(i).call(i),i)}},{key:\"updateClusteredNode\",value:function(t,e){if(void 0===t)throw new Error(\"No clusteredNodeId supplied to updateClusteredNode.\");if(void 0===e)throw new Error(\"No newOptions supplied to updateClusteredNode.\");if(void 0===this.body.nodes[t])throw new Error(\"The clusteredNodeId supplied to updateClusteredNode does not exist.\");this.body.nodes[t].setOptions(e),this.body.emitter.emit(\"_dataChanged\")}},{key:\"updateEdge\",value:function(t,e){if(void 0===t)throw new Error(\"No startEdgeId supplied to updateEdge.\");if(void 0===e)throw new Error(\"No newOptions supplied to updateEdge.\");if(void 0===this.body.edges[t])throw new Error(\"The startEdgeId supplied to updateEdge does not exist.\");for(var i=this.getClusteredEdges(t),n=0;n<i.length;n++){this.body.edges[i[n]].setOptions(e)}this.body.emitter.emit(\"_dataChanged\")}},{key:\"getClusteredEdges\",value:function(t){for(var e=[],i=0;void 0!==t&&void 0!==this.body.edges[t]&&i<100;)e.push(this.body.edges[t].id),t=this.body.edges[t].edgeReplacedById,i++;return Xo(e).call(e),e}},{key:\"getBaseEdge\",value:function(t){return this.getBaseEdges(t)[0]}},{key:\"getBaseEdges\",value:function(t){for(var e=[t],i=[],n=[],o=0;e.length>0&&o<100;){var r=e.pop();if(void 0!==r){var s=this.body.edges[r];if(void 0!==s){o++;var a=s.clusteringEdgeReplacingIds;if(void 0===a)n.push(r);else for(var h=0;h<a.length;++h){var l=a[h];-1===Hr(e).call(e,a)&&-1===Hr(i).call(i,a)&&e.push(l)}i.push(r)}}}return n}},{key:\"_getConnectedId\",value:function(t,e){return t.toId!=e?t.toId:(t.fromId,t.fromId)}},{key:\"_getHubSize\",value:function(){for(var t=0,e=0,i=0,n=0,o=0;o<this.body.nodeIndices.length;o++){var r=this.body.nodes[this.body.nodeIndices[o]];r.edges.length>n&&(n=r.edges.length),t+=r.edges.length,e+=Math.pow(r.edges.length,2),i+=1}t/=i;var s=(e/=i)-Math.pow(t,2),a=Math.sqrt(s),h=Math.floor(t+2*a);return h>n&&(h=n),h}},{key:\"_createClusteredEdge\",value:function(t,e,i,n,o){var r=pp.cloneOptions(i,\"edge\");Ch(r,n),r.from=t,r.to=e,r.id=\"clusterEdge:\"+Wc(),void 0!==o&&Ch(r,o);var s=this.body.functions.createEdge(r);return s.clusteringEdgeReplacingIds=[i.id],s.connect(),this.body.edges[s.id]=s,s}},{key:\"_clusterEdges\",value:function(t,e,i,n){if(e instanceof ep){var o=e,r={};r[o.id]=o,e=r}if(t instanceof cf){var s=t,a={};a[s.id]=s,t=a}if(null==i)throw new Error(\"_clusterEdges: parameter clusterNode required\");for(var h in void 0===n&&(n=i.clusterEdgeProperties),this._createClusterEdges(t,e,i,n),e)if(Object.prototype.hasOwnProperty.call(e,h)&&void 0!==this.body.edges[h]){var l=this.body.edges[h];this._backupEdgeOptions(l),l.setOptions({physics:!1})}for(var d in t)Object.prototype.hasOwnProperty.call(t,d)&&(this.clusteredNodes[d]={clusterId:i.id,node:this.body.nodes[d]},this.body.nodes[d].setOptions({physics:!1}))}},{key:\"_getClusterNodeForNode\",value:function(t){if(void 0!==t){var e=this.clusteredNodes[t];if(void 0!==e){var i=e.clusterId;if(void 0!==i)return this.body.nodes[i]}}}},{key:\"_filter\",value:function(t,e){var i=[];return Dh(t,(function(t){e(t)&&i.push(t)})),i}},{key:\"_updateState\",value:function(){var t,e=this,i=[],n={},o=function(t){Dh(e.body.nodes,(function(e){!0===e.isCluster&&t(e)}))};for(t in this.clusteredNodes){if(Object.prototype.hasOwnProperty.call(this.clusteredNodes,t))void 0===this.body.nodes[t]&&i.push(t)}o((function(t){for(var e=0;e<i.length;e++)delete t.containedNodes[i[e]]}));for(var r=0;r<i.length;r++)delete this.clusteredNodes[i[r]];Dh(this.clusteredEdges,(function(t){var i=e.body.edges[t];void 0!==i&&i.endPointsValid()||(n[t]=t)})),o((function(t){Dh(t.containedEdges,(function(t,e){t.endPointsValid()||n[e]||(n[e]=e)}))})),Dh(this.body.edges,(function(t,i){var o=!0,r=t.clusteringEdgeReplacingIds;if(void 0!==r){var s=0;Dh(r,(function(t){var i=e.body.edges[t];void 0!==i&&i.endPointsValid()&&(s+=1)})),o=s>0}t.endPointsValid()&&o||(n[i]=i)})),o((function(t){Dh(n,(function(i){delete t.containedEdges[i],Dh(t.edges,(function(o,r){o.id!==i?o.clusteringEdgeReplacingIds=e._filter(o.clusteringEdgeReplacingIds,(function(t){return!n[t]})):t.edges[r]=null})),t.edges=e._filter(t.edges,(function(t){return null!==t}))}))})),Dh(n,(function(t){delete e.clusteredEdges[t]})),Dh(n,(function(t){delete e.body.edges[t]})),Dh(zo(this.body.edges),(function(t){var i=e.body.edges[t],n=e._isClusteredNode(i.fromId)||e._isClusteredNode(i.toId);if(n!==e._isClusteredEdge(i.id))if(n){var o=e._getClusterNodeForNode(i.fromId);void 0!==o&&e._clusterEdges(e.body.nodes[i.fromId],i,o);var r=e._getClusterNodeForNode(i.toId);void 0!==r&&e._clusterEdges(e.body.nodes[i.toId],i,r)}else delete e._clusterEdges[t],e._restoreEdge(i)}));for(var s=!1,a=!0,h=function(){var t=[];o((function(e){var i=zo(e.containedNodes).length,n=!0===e.options.allowSingleNodeCluster;(n&&i<1||!n&&i<2)&&t.push(e.id)}));for(var i=0;i<t.length;++i)e.openCluster(t[i],{},!1);a=t.length>0,s=s||a};a;)h();s&&this._updateState()}},{key:\"_isClusteredNode\",value:function(t){return void 0!==this.clusteredNodes[t]}},{key:\"_isClusteredEdge\",value:function(t){return void 0!==this.clusteredEdges[t]}}]),t}();function mp(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return bp(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return bp(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function bp(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}var wp=function(){function t(e,i){var n;Nn(this,t),void 0!==window&&(n=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame),window.requestAnimationFrame=void 0===n?function(t){t()}:n,this.body=e,this.canvas=i,this.redrawRequested=!1,this.renderTimer=void 0,this.requiresTimeout=!0,this.renderingActive=!1,this.renderRequests=0,this.allowRedraw=!0,this.dragging=!1,this.zooming=!1,this.options={},this.defaultOptions={hideEdgesOnDrag:!1,hideEdgesOnZoom:!1,hideNodesOnDrag:!1},At(this.options,this.defaultOptions),this._determineBrowserMethod(),this.bindEventListeners()}return Fn(t,[{key:\"bindEventListeners\",value:function(){var t,e=this;this.body.emitter.on(\"dragStart\",(function(){e.dragging=!0})),this.body.emitter.on(\"dragEnd\",(function(){e.dragging=!1})),this.body.emitter.on(\"zoom\",(function(){e.zooming=!0,window.clearTimeout(e.zoomTimeoutId),e.zoomTimeoutId=rs((function(){var t;e.zooming=!1,Vt(t=e._requestRedraw).call(t,e)()}),250)})),this.body.emitter.on(\"_resizeNodes\",(function(){e._resizeNodes()})),this.body.emitter.on(\"_redraw\",(function(){!1===e.renderingActive&&e._redraw()})),this.body.emitter.on(\"_blockRedraw\",(function(){e.allowRedraw=!1})),this.body.emitter.on(\"_allowRedraw\",(function(){e.allowRedraw=!0,e.redrawRequested=!1})),this.body.emitter.on(\"_requestRedraw\",Vt(t=this._requestRedraw).call(t,this)),this.body.emitter.on(\"_startRendering\",(function(){e.renderRequests+=1,e.renderingActive=!0,e._startRendering()})),this.body.emitter.on(\"_stopRendering\",(function(){e.renderRequests-=1,e.renderingActive=e.renderRequests>0,e.renderTimer=void 0})),this.body.emitter.on(\"destroy\",(function(){e.renderRequests=0,e.allowRedraw=!1,e.renderingActive=!1,!0===e.requiresTimeout?clearTimeout(e.renderTimer):window.cancelAnimationFrame(e.renderTimer),e.body.emitter.off()}))}},{key:\"setOptions\",value:function(t){if(void 0!==t){Eh([\"hideEdgesOnDrag\",\"hideEdgesOnZoom\",\"hideNodesOnDrag\"],this.options,t)}}},{key:\"_requestNextFrame\",value:function(t,e){if(\"undefined\"!=typeof window){var i,n=window;return!0===this.requiresTimeout?i=rs(t,e):n.requestAnimationFrame&&(i=n.requestAnimationFrame(t)),i}}},{key:\"_startRendering\",value:function(){var t;!0===this.renderingActive&&(void 0===this.renderTimer&&(this.renderTimer=this._requestNextFrame(Vt(t=this._renderStep).call(t,this),this.simulationInterval)))}},{key:\"_renderStep\",value:function(){!0===this.renderingActive&&(this.renderTimer=void 0,!0===this.requiresTimeout&&this._startRendering(),this._redraw(),!1===this.requiresTimeout&&this._startRendering())}},{key:\"redraw\",value:function(){this.body.emitter.emit(\"setSize\"),this._redraw()}},{key:\"_requestRedraw\",value:function(){var t=this;!0!==this.redrawRequested&&!1===this.renderingActive&&!0===this.allowRedraw&&(this.redrawRequested=!0,this._requestNextFrame((function(){t._redraw(!1)}),0))}},{key:\"_redraw\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(!0===this.allowRedraw){this.body.emitter.emit(\"initRedraw\"),this.redrawRequested=!1;var e={drawExternalLabels:null};0!==this.canvas.frame.canvas.width&&0!==this.canvas.frame.canvas.height||this.canvas.setSize(),this.canvas.setTransform();var i=this.canvas.getContext(),n=this.canvas.frame.canvas.clientWidth,o=this.canvas.frame.canvas.clientHeight;if(i.clearRect(0,0,n,o),0===this.canvas.frame.clientWidth)return;if(i.save(),i.translate(this.body.view.translation.x,this.body.view.translation.y),i.scale(this.body.view.scale,this.body.view.scale),i.beginPath(),this.body.emitter.emit(\"beforeDrawing\",i),i.closePath(),!1===t&&(!1===this.dragging||!0===this.dragging&&!1===this.options.hideEdgesOnDrag)&&(!1===this.zooming||!0===this.zooming&&!1===this.options.hideEdgesOnZoom)&&this._drawEdges(i),!1===this.dragging||!0===this.dragging&&!1===this.options.hideNodesOnDrag){var r=this._drawNodes(i,t),s=r.drawExternalLabels;e.drawExternalLabels=s}!1===t&&(!1===this.dragging||!0===this.dragging&&!1===this.options.hideEdgesOnDrag)&&(!1===this.zooming||!0===this.zooming&&!1===this.options.hideEdgesOnZoom)&&this._drawArrows(i),null!=e.drawExternalLabels&&e.drawExternalLabels(),!1===t&&this._drawSelectionBox(i),i.beginPath(),this.body.emitter.emit(\"afterDrawing\",i),i.closePath(),i.restore(),!0===t&&i.clearRect(0,0,n,o)}}},{key:\"_resizeNodes\",value:function(){this.canvas.setTransform();var t=this.canvas.getContext();t.save(),t.translate(this.body.view.translation.x,this.body.view.translation.y),t.scale(this.body.view.scale,this.body.view.scale);var e,i=this.body.nodes;for(var n in i)Object.prototype.hasOwnProperty.call(i,n)&&((e=i[n]).resize(t),e.updateBoundingBox(t,e.selected));t.restore()}},{key:\"_drawNodes\",value:function(t){for(var e,i,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],o=this.body.nodes,r=this.body.nodeIndices,s=[],a=[],h=20,l=this.canvas.DOMtoCanvas({x:-h,y:-h}),d=this.canvas.DOMtoCanvas({x:this.canvas.frame.canvas.clientWidth+h,y:this.canvas.frame.canvas.clientHeight+h}),c={top:l.y,left:l.x,bottom:d.y,right:d.x},u=[],f=0;f<r.length;f++)if((e=o[r[f]]).hover)a.push(r[f]);else if(e.isSelected())s.push(r[f]);else if(!0===n){var p=e.draw(t);null!=p.drawExternalLabel&&u.push(p.drawExternalLabel)}else if(!0===e.isBoundingBoxOverlappingWith(c)){var v=e.draw(t);null!=v.drawExternalLabel&&u.push(v.drawExternalLabel)}else e.updateBoundingBox(t,e.selected);var g=s.length,y=a.length;for(i=0;i<g;i++){var m=(e=o[s[i]]).draw(t);null!=m.drawExternalLabel&&u.push(m.drawExternalLabel)}for(i=0;i<y;i++){var b=(e=o[a[i]]).draw(t);null!=b.drawExternalLabel&&u.push(b.drawExternalLabel)}return{drawExternalLabels:function(){var t,e=mp(u);try{for(e.s();!(t=e.n()).done;){(0,t.value)()}}catch(t){e.e(t)}finally{e.f()}}}}},{key:\"_drawEdges\",value:function(t){for(var e=this.body.edges,i=this.body.edgeIndices,n=0;n<i.length;n++){var o=e[i[n]];!0===o.connected&&o.draw(t)}}},{key:\"_drawArrows\",value:function(t){for(var e=this.body.edges,i=this.body.edgeIndices,n=0;n<i.length;n++){var o=e[i[n]];!0===o.connected&&o.drawArrows(t)}}},{key:\"_determineBrowserMethod\",value:function(){if(\"undefined\"!=typeof window){var t=navigator.userAgent.toLowerCase();this.requiresTimeout=!1,(-1!=Hr(t).call(t,\"msie 9.0\")||-1!=Hr(t).call(t,\"safari\")&&Hr(t).call(t,\"chrome\")<=-1)&&(this.requiresTimeout=!0)}else this.requiresTimeout=!0}},{key:\"_drawSelectionBox\",value:function(t){if(this.body.selectionBox.show){t.beginPath();var e=this.body.selectionBox.position.end.x-this.body.selectionBox.position.start.x,i=this.body.selectionBox.position.end.y-this.body.selectionBox.position.start.y;t.rect(this.body.selectionBox.position.start.x,this.body.selectionBox.position.start.y,e,i),t.fillStyle=\"rgba(151, 194, 252, 0.2)\",t.fillRect(this.body.selectionBox.position.start.x,this.body.selectionBox.position.start.y,e,i),t.strokeStyle=\"rgba(151, 194, 252, 1)\",t.stroke()}else t.closePath()}}]),t}(),kp=k.setInterval;function _p(t,e){e.inputHandler=function(t){t.isFirst&&e(t)},t.on(\"hammer.input\",e.inputHandler)}function xp(t,e){return e.inputHandler=function(t){t.isFinal&&e(t)},t.on(\"hammer.input\",e.inputHandler)}var Ep=function(){function t(e){Nn(this,t),this.body=e,this.pixelRatio=1,this.cameraState={},this.initialized=!1,this.canvasViewCenter={},this._cleanupCallbacks=[],this.options={},this.defaultOptions={autoResize:!0,height:\"100%\",width:\"100%\"},At(this.options,this.defaultOptions),this.bindEventListeners()}return Fn(t,[{key:\"bindEventListeners\",value:function(){var t,e=this;this.body.emitter.once(\"resize\",(function(t){0!==t.width&&(e.body.view.translation.x=.5*t.width),0!==t.height&&(e.body.view.translation.y=.5*t.height)})),this.body.emitter.on(\"setSize\",Vt(t=this.setSize).call(t,this)),this.body.emitter.on(\"destroy\",(function(){e.hammerFrame.destroy(),e.hammer.destroy(),e._cleanUp()}))}},{key:\"setOptions\",value:function(t){var e=this;if(void 0!==t){Eh([\"width\",\"height\",\"autoResize\"],this.options,t)}if(this._cleanUp(),!0===this.options.autoResize){var i;if(window.ResizeObserver){var n=new ResizeObserver((function(){!0===e.setSize()&&e.body.emitter.emit(\"_requestRedraw\")})),o=this.frame;n.observe(o),this._cleanupCallbacks.push((function(){n.unobserve(o)}))}else{var r=kp((function(){!0===e.setSize()&&e.body.emitter.emit(\"_requestRedraw\")}),1e3);this._cleanupCallbacks.push((function(){clearInterval(r)}))}var s=Vt(i=this._onResize).call(i,this);Bh(window,\"resize\",s),this._cleanupCallbacks.push((function(){zh(window,\"resize\",s)}))}}},{key:\"_cleanUp\",value:function(){var t,e,i;Wo(t=Xo(e=er(i=this._cleanupCallbacks).call(i,0)).call(e)).call(t,(function(t){try{t()}catch(t){console.error(t)}}))}},{key:\"_onResize\",value:function(){this.setSize(),this.body.emitter.emit(\"_redraw\")}},{key:\"_getCameraState\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.pixelRatio;!0===this.initialized&&(this.cameraState.previousWidth=this.frame.canvas.width/t,this.cameraState.previousHeight=this.frame.canvas.height/t,this.cameraState.scale=this.body.view.scale,this.cameraState.position=this.DOMtoCanvas({x:.5*this.frame.canvas.width/t,y:.5*this.frame.canvas.height/t}))}},{key:\"_setCameraState\",value:function(){if(void 0!==this.cameraState.scale&&0!==this.frame.canvas.clientWidth&&0!==this.frame.canvas.clientHeight&&0!==this.pixelRatio&&this.cameraState.previousWidth>0&&this.cameraState.previousHeight>0){var t=this.frame.canvas.width/this.pixelRatio/this.cameraState.previousWidth,e=this.frame.canvas.height/this.pixelRatio/this.cameraState.previousHeight,i=this.cameraState.scale;1!=t&&1!=e?i=.5*this.cameraState.scale*(t+e):1!=t?i=this.cameraState.scale*t:1!=e&&(i=this.cameraState.scale*e),this.body.view.scale=i;var n=this.DOMtoCanvas({x:.5*this.frame.canvas.clientWidth,y:.5*this.frame.canvas.clientHeight}),o={x:n.x-this.cameraState.position.x,y:n.y-this.cameraState.position.y};this.body.view.translation.x+=o.x*this.body.view.scale,this.body.view.translation.y+=o.y*this.body.view.scale}}},{key:\"_prepareValue\",value:function(t){if(\"number\"==typeof t)return t+\"px\";if(\"string\"==typeof t){if(-1!==Hr(t).call(t,\"%\")||-1!==Hr(t).call(t,\"px\"))return t;if(-1===Hr(t).call(t,\"%\"))return t+\"px\"}throw new Error(\"Could not use the value supplied for width or height:\"+t)}},{key:\"_create\",value:function(){for(;this.body.container.hasChildNodes();)this.body.container.removeChild(this.body.container.firstChild);if(this.frame=document.createElement(\"div\"),this.frame.className=\"vis-network\",this.frame.style.position=\"relative\",this.frame.style.overflow=\"hidden\",this.frame.tabIndex=0,this.frame.canvas=document.createElement(\"canvas\"),this.frame.canvas.style.position=\"relative\",this.frame.appendChild(this.frame.canvas),this.frame.canvas.getContext)this._setPixelRatio(),this.setTransform();else{var t=document.createElement(\"DIV\");t.style.color=\"red\",t.style.fontWeight=\"bold\",t.style.padding=\"10px\",t.innerText=\"Error: your browser does not support HTML canvas\",this.frame.canvas.appendChild(t)}this.body.container.appendChild(this.frame),this.body.view.scale=1,this.body.view.translation={x:.5*this.frame.canvas.clientWidth,y:.5*this.frame.canvas.clientHeight},this._bindHammer()}},{key:\"_bindHammer\",value:function(){var t=this;void 0!==this.hammer&&this.hammer.destroy(),this.drag={},this.pinch={},this.hammer=new ll(this.frame.canvas),this.hammer.get(\"pinch\").set({enable:!0}),this.hammer.get(\"pan\").set({threshold:5,direction:ll.DIRECTION_ALL}),_p(this.hammer,(function(e){t.body.eventListeners.onTouch(e)})),this.hammer.on(\"tap\",(function(e){t.body.eventListeners.onTap(e)})),this.hammer.on(\"doubletap\",(function(e){t.body.eventListeners.onDoubleTap(e)})),this.hammer.on(\"press\",(function(e){t.body.eventListeners.onHold(e)})),this.hammer.on(\"panstart\",(function(e){t.body.eventListeners.onDragStart(e)})),this.hammer.on(\"panmove\",(function(e){t.body.eventListeners.onDrag(e)})),this.hammer.on(\"panend\",(function(e){t.body.eventListeners.onDragEnd(e)})),this.hammer.on(\"pinch\",(function(e){t.body.eventListeners.onPinch(e)})),this.frame.canvas.addEventListener(\"wheel\",(function(e){t.body.eventListeners.onMouseWheel(e)})),this.frame.canvas.addEventListener(\"mousemove\",(function(e){t.body.eventListeners.onMouseMove(e)})),this.frame.canvas.addEventListener(\"contextmenu\",(function(e){t.body.eventListeners.onContext(e)})),this.hammerFrame=new ll(this.frame),xp(this.hammerFrame,(function(e){t.body.eventListeners.onRelease(e)}))}},{key:\"setSize\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.options.width,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.options.height;t=this._prepareValue(t),e=this._prepareValue(e);var i=!1,n=this.frame.canvas.width,o=this.frame.canvas.height,r=this.pixelRatio;if(this._setPixelRatio(),t!=this.options.width||e!=this.options.height||this.frame.style.width!=t||this.frame.style.height!=e)this._getCameraState(r),this.frame.style.width=t,this.frame.style.height=e,this.frame.canvas.style.width=\"100%\",this.frame.canvas.style.height=\"100%\",this.frame.canvas.width=Math.round(this.frame.canvas.clientWidth*this.pixelRatio),this.frame.canvas.height=Math.round(this.frame.canvas.clientHeight*this.pixelRatio),this.options.width=t,this.options.height=e,this.canvasViewCenter={x:.5*this.frame.clientWidth,y:.5*this.frame.clientHeight},i=!0;else{var s=Math.round(this.frame.canvas.clientWidth*this.pixelRatio),a=Math.round(this.frame.canvas.clientHeight*this.pixelRatio);this.frame.canvas.width===s&&this.frame.canvas.height===a||this._getCameraState(r),this.frame.canvas.width!==s&&(this.frame.canvas.width=s,i=!0),this.frame.canvas.height!==a&&(this.frame.canvas.height=a,i=!0)}return!0===i&&(this.body.emitter.emit(\"resize\",{width:Math.round(this.frame.canvas.width/this.pixelRatio),height:Math.round(this.frame.canvas.height/this.pixelRatio),oldWidth:Math.round(n/this.pixelRatio),oldHeight:Math.round(o/this.pixelRatio)}),this._setCameraState()),this.initialized=!0,i}},{key:\"getContext\",value:function(){return this.frame.canvas.getContext(\"2d\")}},{key:\"_determinePixelRatio\",value:function(){var t=this.getContext();if(void 0===t)throw new Error(\"Could not get canvax context\");var e=1;return\"undefined\"!=typeof window&&(e=window.devicePixelRatio||1),e/(t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1)}},{key:\"_setPixelRatio\",value:function(){this.pixelRatio=this._determinePixelRatio()}},{key:\"setTransform\",value:function(){var t=this.getContext();if(void 0===t)throw new Error(\"Could not get canvax context\");t.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0)}},{key:\"_XconvertDOMtoCanvas\",value:function(t){return(t-this.body.view.translation.x)/this.body.view.scale}},{key:\"_XconvertCanvasToDOM\",value:function(t){return t*this.body.view.scale+this.body.view.translation.x}},{key:\"_YconvertDOMtoCanvas\",value:function(t){return(t-this.body.view.translation.y)/this.body.view.scale}},{key:\"_YconvertCanvasToDOM\",value:function(t){return t*this.body.view.scale+this.body.view.translation.y}},{key:\"canvasToDOM\",value:function(t){return{x:this._XconvertCanvasToDOM(t.x),y:this._YconvertCanvasToDOM(t.y)}}},{key:\"DOMtoCanvas\",value:function(t){return{x:this._XconvertDOMtoCanvas(t.x),y:this._YconvertDOMtoCanvas(t.y)}}}]),t}();function Op(t,e){var i=At({nodes:e,minZoomLevel:Number.MIN_VALUE,maxZoomLevel:1},null!=t?t:{});if(!So(i.nodes))throw new TypeError(\"Nodes has to be an array of ids.\");if(0===i.nodes.length&&(i.nodes=e),!(\"number\"==typeof i.minZoomLevel&&i.minZoomLevel>0))throw new TypeError(\"Min zoom level has to be a number higher than zero.\");if(!(\"number\"==typeof i.maxZoomLevel&&i.minZoomLevel<=i.maxZoomLevel))throw new TypeError(\"Max zoom level has to be a number higher than min zoom level.\");return i}var Cp=function(){function t(e,i){var n,o,r=this;Nn(this,t),this.body=e,this.canvas=i,this.animationSpeed=1/this.renderRefreshRate,this.animationEasingFunction=\"easeInOutQuint\",this.easingTime=0,this.sourceScale=0,this.targetScale=0,this.sourceTranslation=0,this.targetTranslation=0,this.lockedOnNodeId=void 0,this.lockedOnNodeOffset=void 0,this.touchTime=0,this.viewFunction=void 0,this.body.emitter.on(\"fit\",Vt(n=this.fit).call(n,this)),this.body.emitter.on(\"animationFinished\",(function(){r.body.emitter.emit(\"_stopRendering\")})),this.body.emitter.on(\"unlockNode\",Vt(o=this.releaseNode).call(o,this))}return Fn(t,[{key:\"setOptions\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.options=t}},{key:\"fit\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];t=Op(t,this.body.nodeIndices);var i,n,o=this.canvas.frame.canvas.clientWidth,r=this.canvas.frame.canvas.clientHeight;if(0===o||0===r)n=1,i=pp.getRange(this.body.nodes,t.nodes);else if(!0===e){var s=0;for(var a in this.body.nodes)if(Object.prototype.hasOwnProperty.call(this.body.nodes,a)){var h=this.body.nodes[a];!0===h.predefinedPosition&&(s+=1)}if(s>.5*this.body.nodeIndices.length)return void this.fit(t,!1);i=pp.getRange(this.body.nodes,t.nodes);var l=this.body.nodeIndices.length;n=12.662/(l+7.4147)+.0964822;var d=Math.min(o/600,r/600);n*=d}else{this.body.emitter.emit(\"_resizeNodes\"),i=pp.getRange(this.body.nodes,t.nodes);var c=1.1*Math.abs(i.maxX-i.minX),u=1.1*Math.abs(i.maxY-i.minY),f=o/c,p=r/u;n=f<=p?f:p}n>t.maxZoomLevel?n=t.maxZoomLevel:n<t.minZoomLevel&&(n=t.minZoomLevel);var v=pp.findCenter(i),g={position:v,scale:n,animation:t.animation};this.moveTo(g)}},{key:\"focus\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(void 0!==this.body.nodes[t]){var i={x:this.body.nodes[t].x,y:this.body.nodes[t].y};e.position=i,e.lockedOnNode=t,this.moveTo(e)}else console.error(\"Node: \"+t+\" cannot be found.\")}},{key:\"moveTo\",value:function(t){if(void 0!==t){if(null!=t.offset){if(null!=t.offset.x){if(t.offset.x=+t.offset.x,!wd(t.offset.x))throw new TypeError('The option \"offset.x\" has to be a finite number.')}else t.offset.x=0;if(null!=t.offset.y){if(t.offset.y=+t.offset.y,!wd(t.offset.y))throw new TypeError('The option \"offset.y\" has to be a finite number.')}else t.offset.x=0}else t.offset={x:0,y:0};if(null!=t.position){if(null!=t.position.x){if(t.position.x=+t.position.x,!wd(t.position.x))throw new TypeError('The option \"position.x\" has to be a finite number.')}else t.position.x=0;if(null!=t.position.y){if(t.position.y=+t.position.y,!wd(t.position.y))throw new TypeError('The option \"position.y\" has to be a finite number.')}else t.position.x=0}else t.position=this.getViewPosition();if(null!=t.scale){if(t.scale=+t.scale,!(t.scale>0))throw new TypeError('The option \"scale\" has to be a number greater than zero.')}else t.scale=this.body.view.scale;void 0===t.animation&&(t.animation={duration:0}),!1===t.animation&&(t.animation={duration:0}),!0===t.animation&&(t.animation={}),void 0===t.animation.duration&&(t.animation.duration=1e3),void 0===t.animation.easingFunction&&(t.animation.easingFunction=\"easeInOutQuad\"),this.animateView(t)}else t={}}},{key:\"animateView\",value:function(t){if(void 0!==t){this.animationEasingFunction=t.animation.easingFunction,this.releaseNode(),!0===t.locked&&(this.lockedOnNodeId=t.lockedOnNode,this.lockedOnNodeOffset=t.offset),0!=this.easingTime&&this._transitionRedraw(!0),this.sourceScale=this.body.view.scale,this.sourceTranslation=this.body.view.translation,this.targetScale=t.scale,this.body.view.scale=this.targetScale;var e,i,n=this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight}),o=n.x-t.position.x,r=n.y-t.position.y;if(this.targetTranslation={x:this.sourceTranslation.x+o*this.targetScale+t.offset.x,y:this.sourceTranslation.y+r*this.targetScale+t.offset.y},0===t.animation.duration)if(null!=this.lockedOnNodeId)this.viewFunction=Vt(e=this._lockedRedraw).call(e,this),this.body.emitter.on(\"initRedraw\",this.viewFunction);else this.body.view.scale=this.targetScale,this.body.view.translation=this.targetTranslation,this.body.emitter.emit(\"_requestRedraw\");else this.animationSpeed=1/(60*t.animation.duration*.001)||1/60,this.animationEasingFunction=t.animation.easingFunction,this.viewFunction=Vt(i=this._transitionRedraw).call(i,this),this.body.emitter.on(\"initRedraw\",this.viewFunction),this.body.emitter.emit(\"_startRendering\")}}},{key:\"_lockedRedraw\",value:function(){var t=this.body.nodes[this.lockedOnNodeId].x,e=this.body.nodes[this.lockedOnNodeId].y,i=this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight}),n=i.x-t,o=i.y-e,r=this.body.view.translation,s={x:r.x+n*this.body.view.scale+this.lockedOnNodeOffset.x,y:r.y+o*this.body.view.scale+this.lockedOnNodeOffset.y};this.body.view.translation=s}},{key:\"releaseNode\",value:function(){void 0!==this.lockedOnNodeId&&void 0!==this.viewFunction&&(this.body.emitter.off(\"initRedraw\",this.viewFunction),this.lockedOnNodeId=void 0,this.lockedOnNodeOffset=void 0)}},{key:\"_transitionRedraw\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.easingTime+=this.animationSpeed,this.easingTime=!0===t?1:this.easingTime;var e=Zh[this.animationEasingFunction](this.easingTime);if(this.body.view.scale=this.sourceScale+(this.targetScale-this.sourceScale)*e,this.body.view.translation={x:this.sourceTranslation.x+(this.targetTranslation.x-this.sourceTranslation.x)*e,y:this.sourceTranslation.y+(this.targetTranslation.y-this.sourceTranslation.y)*e},this.easingTime>=1){var i;if(this.body.emitter.off(\"initRedraw\",this.viewFunction),this.easingTime=0,null!=this.lockedOnNodeId)this.viewFunction=Vt(i=this._lockedRedraw).call(i,this),this.body.emitter.on(\"initRedraw\",this.viewFunction);this.body.emitter.emit(\"animationFinished\")}}},{key:\"getScale\",value:function(){return this.body.view.scale}},{key:\"getViewPosition\",value:function(){return this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight})}}]),t}();function Sp(t){var e,i=t&&t.preventDefault||!1,n=t&&t.container||window,o={},r={keydown:{},keyup:{}},s={};for(e=97;e<=122;e++)s[String.fromCharCode(e)]={code:e-97+65,shift:!1};for(e=65;e<=90;e++)s[String.fromCharCode(e)]={code:e,shift:!0};for(e=0;e<=9;e++)s[\"\"+e]={code:48+e,shift:!1};for(e=1;e<=12;e++)s[\"F\"+e]={code:111+e,shift:!1};for(e=0;e<=9;e++)s[\"num\"+e]={code:96+e,shift:!1};s[\"num*\"]={code:106,shift:!1},s[\"num+\"]={code:107,shift:!1},s[\"num-\"]={code:109,shift:!1},s[\"num/\"]={code:111,shift:!1},s[\"num.\"]={code:110,shift:!1},s.left={code:37,shift:!1},s.up={code:38,shift:!1},s.right={code:39,shift:!1},s.down={code:40,shift:!1},s.space={code:32,shift:!1},s.enter={code:13,shift:!1},s.shift={code:16,shift:void 0},s.esc={code:27,shift:!1},s.backspace={code:8,shift:!1},s.tab={code:9,shift:!1},s.ctrl={code:17,shift:!1},s.alt={code:18,shift:!1},s.delete={code:46,shift:!1},s.pageup={code:33,shift:!1},s.pagedown={code:34,shift:!1},s[\"=\"]={code:187,shift:!1},s[\"-\"]={code:189,shift:!1},s[\"]\"]={code:221,shift:!1},s[\"[\"]={code:219,shift:!1};var a=function(t){l(t,\"keydown\")},h=function(t){l(t,\"keyup\")},l=function(t,e){if(void 0!==r[e][t.keyCode]){for(var n=r[e][t.keyCode],o=0;o<n.length;o++)(void 0===n[o].shift||1==n[o].shift&&1==t.shiftKey||0==n[o].shift&&0==t.shiftKey)&&n[o].fn(t);1==i&&t.preventDefault()}};return o.bind=function(t,e,i){if(void 0===i&&(i=\"keydown\"),void 0===s[t])throw new Error(\"unsupported key: \"+t);void 0===r[i][s[t].code]&&(r[i][s[t].code]=[]),r[i][s[t].code].push({fn:e,shift:s[t].shift})},o.bindAll=function(t,e){for(var i in void 0===e&&(e=\"keydown\"),s)s.hasOwnProperty(i)&&o.bind(i,t,e)},o.getKey=function(t){for(var e in s)if(s.hasOwnProperty(e)){if(1==t.shiftKey&&1==s[e].shift&&t.keyCode==s[e].code)return e;if(0==t.shiftKey&&0==s[e].shift&&t.keyCode==s[e].code)return e;if(t.keyCode==s[e].code&&\"shift\"==e)return e}return\"unknown key, currently not supported\"},o.unbind=function(t,e,i){if(void 0===i&&(i=\"keydown\"),void 0===s[t])throw new Error(\"unsupported key: \"+t);if(void 0!==e){var n=[],o=r[i][s[t].code];if(void 0!==o)for(var a=0;a<o.length;a++)o[a].fn==e&&o[a].shift==s[t].shift||n.push(r[i][s[t].code][a]);r[i][s[t].code]=n}else r[i][s[t].code]=[]},o.reset=function(){r={keydown:{},keyup:{}}},o.destroy=function(){r={keydown:{},keyup:{}},n.removeEventListener(\"keydown\",a,!0),n.removeEventListener(\"keyup\",h,!0)},n.addEventListener(\"keydown\",a,!0),n.addEventListener(\"keyup\",h,!0),o}var Tp=Object.freeze({__proto__:null,default:Sp}),Mp=function(){function t(e,i){var n=this;Nn(this,t),this.body=e,this.canvas=i,this.iconsCreated=!1,this.navigationHammers=[],this.boundFunctions={},this.touchTime=0,this.activated=!1,this.body.emitter.on(\"activate\",(function(){n.activated=!0,n.configureKeyboardBindings()})),this.body.emitter.on(\"deactivate\",(function(){n.activated=!1,n.configureKeyboardBindings()})),this.body.emitter.on(\"destroy\",(function(){void 0!==n.keycharm&&n.keycharm.destroy()})),this.options={}}return Fn(t,[{key:\"setOptions\",value:function(t){void 0!==t&&(this.options=t,this.create())}},{key:\"create\",value:function(){!0===this.options.navigationButtons?!1===this.iconsCreated&&this.loadNavigationElements():!0===this.iconsCreated&&this.cleanNavigation(),this.configureKeyboardBindings()}},{key:\"cleanNavigation\",value:function(){if(0!=this.navigationHammers.length){for(var t=0;t<this.navigationHammers.length;t++)this.navigationHammers[t].destroy();this.navigationHammers=[]}this.navigationDOM&&this.navigationDOM.wrapper&&this.navigationDOM.wrapper.parentNode&&this.navigationDOM.wrapper.parentNode.removeChild(this.navigationDOM.wrapper),this.iconsCreated=!1}},{key:\"loadNavigationElements\",value:function(){var t=this;this.cleanNavigation(),this.navigationDOM={};var e=[\"up\",\"down\",\"left\",\"right\",\"zoomIn\",\"zoomOut\",\"zoomExtends\"],i=[\"_moveUp\",\"_moveDown\",\"_moveLeft\",\"_moveRight\",\"_zoomIn\",\"_zoomOut\",\"_fit\"];this.navigationDOM.wrapper=document.createElement(\"div\"),this.navigationDOM.wrapper.className=\"vis-navigation\",this.canvas.frame.appendChild(this.navigationDOM.wrapper);for(var n=0;n<e.length;n++){this.navigationDOM[e[n]]=document.createElement(\"div\"),this.navigationDOM[e[n]].className=\"vis-button vis-\"+e[n],this.navigationDOM.wrapper.appendChild(this.navigationDOM[e[n]]);var o,r,s=new ll(this.navigationDOM[e[n]]);if(\"_fit\"===i[n])_p(s,Vt(o=this._fit).call(o,this));else _p(s,Vt(r=this.bindToRedraw).call(r,this,i[n]));this.navigationHammers.push(s)}var a=new ll(this.canvas.frame);xp(a,(function(){t._stopMovement()})),this.navigationHammers.push(a),this.iconsCreated=!0}},{key:\"bindToRedraw\",value:function(t){var e;void 0===this.boundFunctions[t]&&(this.boundFunctions[t]=Vt(e=this[t]).call(e,this),this.body.emitter.on(\"initRedraw\",this.boundFunctions[t]),this.body.emitter.emit(\"_startRendering\"))}},{key:\"unbindFromRedraw\",value:function(t){void 0!==this.boundFunctions[t]&&(this.body.emitter.off(\"initRedraw\",this.boundFunctions[t]),this.body.emitter.emit(\"_stopRendering\"),delete this.boundFunctions[t])}},{key:\"_fit\",value:function(){(new Date).valueOf()-this.touchTime>700&&(this.body.emitter.emit(\"fit\",{duration:700}),this.touchTime=(new Date).valueOf())}},{key:\"_stopMovement\",value:function(){for(var t in this.boundFunctions)Object.prototype.hasOwnProperty.call(this.boundFunctions,t)&&(this.body.emitter.off(\"initRedraw\",this.boundFunctions[t]),this.body.emitter.emit(\"_stopRendering\"));this.boundFunctions={}}},{key:\"_moveUp\",value:function(){this.body.view.translation.y+=this.options.keyboard.speed.y}},{key:\"_moveDown\",value:function(){this.body.view.translation.y-=this.options.keyboard.speed.y}},{key:\"_moveLeft\",value:function(){this.body.view.translation.x+=this.options.keyboard.speed.x}},{key:\"_moveRight\",value:function(){this.body.view.translation.x-=this.options.keyboard.speed.x}},{key:\"_zoomIn\",value:function(){var t=this.body.view.scale,e=this.body.view.scale*(1+this.options.keyboard.speed.zoom),i=this.body.view.translation,n=e/t,o=(1-n)*this.canvas.canvasViewCenter.x+i.x*n,r=(1-n)*this.canvas.canvasViewCenter.y+i.y*n;this.body.view.scale=e,this.body.view.translation={x:o,y:r},this.body.emitter.emit(\"zoom\",{direction:\"+\",scale:this.body.view.scale,pointer:null})}},{key:\"_zoomOut\",value:function(){var t=this.body.view.scale,e=this.body.view.scale/(1+this.options.keyboard.speed.zoom),i=this.body.view.translation,n=e/t,o=(1-n)*this.canvas.canvasViewCenter.x+i.x*n,r=(1-n)*this.canvas.canvasViewCenter.y+i.y*n;this.body.view.scale=e,this.body.view.translation={x:o,y:r},this.body.emitter.emit(\"zoom\",{direction:\"-\",scale:this.body.view.scale,pointer:null})}},{key:\"configureKeyboardBindings\",value:function(){var t,e,i,n,o,r,s,a,h,l,d,c,u,f,p,v,g,y,m,b,w,k,_,x,E=this;(void 0!==this.keycharm&&this.keycharm.destroy(),!0===this.options.keyboard.enabled)&&(!0===this.options.keyboard.bindToWindow?this.keycharm=Sp({container:window,preventDefault:!0}):this.keycharm=Sp({container:this.canvas.frame,preventDefault:!0}),this.keycharm.reset(),!0===this.activated&&(Vt(t=this.keycharm).call(t,\"up\",(function(){E.bindToRedraw(\"_moveUp\")}),\"keydown\"),Vt(e=this.keycharm).call(e,\"down\",(function(){E.bindToRedraw(\"_moveDown\")}),\"keydown\"),Vt(i=this.keycharm).call(i,\"left\",(function(){E.bindToRedraw(\"_moveLeft\")}),\"keydown\"),Vt(n=this.keycharm).call(n,\"right\",(function(){E.bindToRedraw(\"_moveRight\")}),\"keydown\"),Vt(o=this.keycharm).call(o,\"=\",(function(){E.bindToRedraw(\"_zoomIn\")}),\"keydown\"),Vt(r=this.keycharm).call(r,\"num+\",(function(){E.bindToRedraw(\"_zoomIn\")}),\"keydown\"),Vt(s=this.keycharm).call(s,\"num-\",(function(){E.bindToRedraw(\"_zoomOut\")}),\"keydown\"),Vt(a=this.keycharm).call(a,\"-\",(function(){E.bindToRedraw(\"_zoomOut\")}),\"keydown\"),Vt(h=this.keycharm).call(h,\"[\",(function(){E.bindToRedraw(\"_zoomOut\")}),\"keydown\"),Vt(l=this.keycharm).call(l,\"]\",(function(){E.bindToRedraw(\"_zoomIn\")}),\"keydown\"),Vt(d=this.keycharm).call(d,\"pageup\",(function(){E.bindToRedraw(\"_zoomIn\")}),\"keydown\"),Vt(c=this.keycharm).call(c,\"pagedown\",(function(){E.bindToRedraw(\"_zoomOut\")}),\"keydown\"),Vt(u=this.keycharm).call(u,\"up\",(function(){E.unbindFromRedraw(\"_moveUp\")}),\"keyup\"),Vt(f=this.keycharm).call(f,\"down\",(function(){E.unbindFromRedraw(\"_moveDown\")}),\"keyup\"),Vt(p=this.keycharm).call(p,\"left\",(function(){E.unbindFromRedraw(\"_moveLeft\")}),\"keyup\"),Vt(v=this.keycharm).call(v,\"right\",(function(){E.unbindFromRedraw(\"_moveRight\")}),\"keyup\"),Vt(g=this.keycharm).call(g,\"=\",(function(){E.unbindFromRedraw(\"_zoomIn\")}),\"keyup\"),Vt(y=this.keycharm).call(y,\"num+\",(function(){E.unbindFromRedraw(\"_zoomIn\")}),\"keyup\"),Vt(m=this.keycharm).call(m,\"num-\",(function(){E.unbindFromRedraw(\"_zoomOut\")}),\"keyup\"),Vt(b=this.keycharm).call(b,\"-\",(function(){E.unbindFromRedraw(\"_zoomOut\")}),\"keyup\"),Vt(w=this.keycharm).call(w,\"[\",(function(){E.unbindFromRedraw(\"_zoomOut\")}),\"keyup\"),Vt(k=this.keycharm).call(k,\"]\",(function(){E.unbindFromRedraw(\"_zoomIn\")}),\"keyup\"),Vt(_=this.keycharm).call(_,\"pageup\",(function(){E.unbindFromRedraw(\"_zoomIn\")}),\"keyup\"),Vt(x=this.keycharm).call(x,\"pagedown\",(function(){E.unbindFromRedraw(\"_zoomOut\")}),\"keyup\")))}}]),t}();function Pp(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return Dp(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Dp(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function Dp(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}var Ip=function(){function t(e,i,n){var o,r,s,a,h,l,d,c,u,f,p,v,g;Nn(this,t),this.body=e,this.canvas=i,this.selectionHandler=n,this.navigationHandler=new Mp(e,i),this.body.eventListeners.onTap=Vt(o=this.onTap).call(o,this),this.body.eventListeners.onTouch=Vt(r=this.onTouch).call(r,this),this.body.eventListeners.onDoubleTap=Vt(s=this.onDoubleTap).call(s,this),this.body.eventListeners.onHold=Vt(a=this.onHold).call(a,this),this.body.eventListeners.onDragStart=Vt(h=this.onDragStart).call(h,this),this.body.eventListeners.onDrag=Vt(l=this.onDrag).call(l,this),this.body.eventListeners.onDragEnd=Vt(d=this.onDragEnd).call(d,this),this.body.eventListeners.onMouseWheel=Vt(c=this.onMouseWheel).call(c,this),this.body.eventListeners.onPinch=Vt(u=this.onPinch).call(u,this),this.body.eventListeners.onMouseMove=Vt(f=this.onMouseMove).call(f,this),this.body.eventListeners.onRelease=Vt(p=this.onRelease).call(p,this),this.body.eventListeners.onContext=Vt(v=this.onContext).call(v,this),this.touchTime=0,this.drag={},this.pinch={},this.popup=void 0,this.popupObj=void 0,this.popupTimer=void 0,this.body.functions.getPointer=Vt(g=this.getPointer).call(g,this),this.options={},this.defaultOptions={dragNodes:!0,dragView:!0,hover:!1,keyboard:{enabled:!1,speed:{x:10,y:10,zoom:.02},bindToWindow:!0,autoFocus:!0},navigationButtons:!1,tooltipDelay:300,zoomView:!0,zoomSpeed:1},At(this.options,this.defaultOptions),this.bindEventListeners()}return Fn(t,[{key:\"bindEventListeners\",value:function(){var t=this;this.body.emitter.on(\"destroy\",(function(){clearTimeout(t.popupTimer),delete t.body.functions.getPointer}))}},{key:\"setOptions\",value:function(t){if(void 0!==t){Oh([\"hideEdgesOnDrag\",\"hideEdgesOnZoom\",\"hideNodesOnDrag\",\"keyboard\",\"multiselect\",\"selectable\",\"selectConnectedEdges\"],this.options,t),$h(this.options,t,\"keyboard\"),t.tooltip&&(At(this.options.tooltip,t.tooltip),t.tooltip.color&&(this.options.tooltip.color=Rh(t.tooltip.color)))}this.navigationHandler.setOptions(this.options)}},{key:\"getPointer\",value:function(t){return{x:t.x-Mh(this.canvas.frame.canvas),y:t.y-Ph(this.canvas.frame.canvas)}}},{key:\"onTouch\",value:function(t){(new Date).valueOf()-this.touchTime>50&&(this.drag.pointer=this.getPointer(t.center),this.drag.pinched=!1,this.pinch.scale=this.body.view.scale,this.touchTime=(new Date).valueOf())}},{key:\"onTap\",value:function(t){var e=this.getPointer(t.center),i=this.selectionHandler.options.multiselect&&(t.changedPointers[0].ctrlKey||t.changedPointers[0].metaKey);this.checkSelectionChanges(e,i),this.selectionHandler.commitAndEmit(e,t),this.selectionHandler.generateClickEvent(\"click\",t,e)}},{key:\"onDoubleTap\",value:function(t){var e=this.getPointer(t.center);this.selectionHandler.generateClickEvent(\"doubleClick\",t,e)}},{key:\"onHold\",value:function(t){var e=this.getPointer(t.center),i=this.selectionHandler.options.multiselect;this.checkSelectionChanges(e,i),this.selectionHandler.commitAndEmit(e,t),this.selectionHandler.generateClickEvent(\"click\",t,e),this.selectionHandler.generateClickEvent(\"hold\",t,e)}},{key:\"onRelease\",value:function(t){if((new Date).valueOf()-this.touchTime>10){var e=this.getPointer(t.center);this.selectionHandler.generateClickEvent(\"release\",t,e),this.touchTime=(new Date).valueOf()}}},{key:\"onContext\",value:function(t){var e=this.getPointer({x:t.clientX,y:t.clientY});this.selectionHandler.generateClickEvent(\"oncontext\",t,e)}},{key:\"checkSelectionChanges\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];!0===e?this.selectionHandler.selectAdditionalOnPoint(t):this.selectionHandler.selectOnPoint(t)}},{key:\"_determineDifference\",value:function(t,e){var i=function(t,e){for(var i=[],n=0;n<t.length;n++){var o=t[n];-1===Hr(e).call(e,o)&&i.push(o)}return i};return{nodes:i(t.nodes,e.nodes),edges:i(t.edges,e.edges)}}},{key:\"onDragStart\",value:function(t){if(!this.drag.dragging){void 0===this.drag.pointer&&this.onTouch(t);var e=this.selectionHandler.getNodeAt(this.drag.pointer);if(this.drag.dragging=!0,this.drag.selection=[],this.drag.translation=At({},this.body.view.translation),this.drag.nodeId=void 0,t.srcEvent.shiftKey){this.body.selectionBox.show=!0;var i=this.getPointer(t.center);this.body.selectionBox.position.start={x:this.canvas._XconvertDOMtoCanvas(i.x),y:this.canvas._YconvertDOMtoCanvas(i.y)},this.body.selectionBox.position.end={x:this.canvas._XconvertDOMtoCanvas(i.x),y:this.canvas._YconvertDOMtoCanvas(i.y)}}if(void 0!==e&&!0===this.options.dragNodes){this.drag.nodeId=e.id,!1===e.isSelected()&&(this.selectionHandler.unselectAll(),this.selectionHandler.selectObject(e)),this.selectionHandler.generateClickEvent(\"dragStart\",t,this.drag.pointer);var n,o=Pp(this.selectionHandler.getSelectedNodes());try{for(o.s();!(n=o.n()).done;){var r=n.value,s={id:r.id,node:r,x:r.x,y:r.y,xFixed:r.options.fixed.x,yFixed:r.options.fixed.y};r.options.fixed.x=!0,r.options.fixed.y=!0,this.drag.selection.push(s)}}catch(t){o.e(t)}finally{o.f()}}else this.selectionHandler.generateClickEvent(\"dragStart\",t,this.drag.pointer,void 0,!0)}}},{key:\"onDrag\",value:function(t){var e=this;if(!0!==this.drag.pinched){this.body.emitter.emit(\"unlockNode\");var i=this.getPointer(t.center),n=this.drag.selection;if(n&&n.length&&!0===this.options.dragNodes){this.selectionHandler.generateClickEvent(\"dragging\",t,i);var o=i.x-this.drag.pointer.x,r=i.y-this.drag.pointer.y;Wo(n).call(n,(function(t){var i=t.node;!1===t.xFixed&&(i.x=e.canvas._XconvertDOMtoCanvas(e.canvas._XconvertCanvasToDOM(t.x)+o)),!1===t.yFixed&&(i.y=e.canvas._YconvertDOMtoCanvas(e.canvas._YconvertCanvasToDOM(t.y)+r))})),this.body.emitter.emit(\"startSimulation\")}else{if(t.srcEvent.shiftKey){if(this.selectionHandler.generateClickEvent(\"dragging\",t,i,void 0,!0),void 0===this.drag.pointer)return void this.onDragStart(t);this.body.selectionBox.position.end={x:this.canvas._XconvertDOMtoCanvas(i.x),y:this.canvas._YconvertDOMtoCanvas(i.y)},this.body.emitter.emit(\"_requestRedraw\")}if(!0===this.options.dragView&&!t.srcEvent.shiftKey){if(this.selectionHandler.generateClickEvent(\"dragging\",t,i,void 0,!0),void 0===this.drag.pointer)return void this.onDragStart(t);var s=i.x-this.drag.pointer.x,a=i.y-this.drag.pointer.y;this.body.view.translation={x:this.drag.translation.x+s,y:this.drag.translation.y+a},this.body.emitter.emit(\"_requestRedraw\")}}}}},{key:\"onDragEnd\",value:function(t){var e=this;if(this.drag.dragging=!1,this.body.selectionBox.show){var i;this.body.selectionBox.show=!1;var n=this.body.selectionBox.position,o={minX:Math.min(n.start.x,n.end.x),minY:Math.min(n.start.y,n.end.y),maxX:Math.max(n.start.x,n.end.x),maxY:Math.max(n.start.y,n.end.y)},r=mr(i=this.body.nodeIndices).call(i,(function(t){var i=e.body.nodes[t];return i.x>=o.minX&&i.x<=o.maxX&&i.y>=o.minY&&i.y<=o.maxY}));Wo(r).call(r,(function(t){return e.selectionHandler.selectObject(e.body.nodes[t])}));var s=this.getPointer(t.center);this.selectionHandler.commitAndEmit(s,t),this.selectionHandler.generateClickEvent(\"dragEnd\",t,this.getPointer(t.center),void 0,!0),this.body.emitter.emit(\"_requestRedraw\")}else{var a=this.drag.selection;a&&a.length?(Wo(a).call(a,(function(t){t.node.options.fixed.x=t.xFixed,t.node.options.fixed.y=t.yFixed})),this.selectionHandler.generateClickEvent(\"dragEnd\",t,this.getPointer(t.center)),this.body.emitter.emit(\"startSimulation\")):(this.selectionHandler.generateClickEvent(\"dragEnd\",t,this.getPointer(t.center),void 0,!0),this.body.emitter.emit(\"_requestRedraw\"))}}},{key:\"onPinch\",value:function(t){var e=this.getPointer(t.center);this.drag.pinched=!0,void 0===this.pinch.scale&&(this.pinch.scale=1);var i=this.pinch.scale*t.scale;this.zoom(i,e)}},{key:\"zoom\",value:function(t,e){if(!0===this.options.zoomView){var i=this.body.view.scale;t<1e-5&&(t=1e-5),t>10&&(t=10);var n=void 0;void 0!==this.drag&&!0===this.drag.dragging&&(n=this.canvas.DOMtoCanvas(this.drag.pointer));var o=this.body.view.translation,r=t/i,s=(1-r)*e.x+o.x*r,a=(1-r)*e.y+o.y*r;if(this.body.view.scale=t,this.body.view.translation={x:s,y:a},null!=n){var h=this.canvas.canvasToDOM(n);this.drag.pointer.x=h.x,this.drag.pointer.y=h.y}this.body.emitter.emit(\"_requestRedraw\"),i<t?this.body.emitter.emit(\"zoom\",{direction:\"+\",scale:this.body.view.scale,pointer:e}):this.body.emitter.emit(\"zoom\",{direction:\"-\",scale:this.body.view.scale,pointer:e})}}},{key:\"onMouseWheel\",value:function(t){if(!0===this.options.zoomView){if(0!==t.deltaY){var e=this.body.view.scale;e*=1+(t.deltaY<0?1:-1)*(.1*this.options.zoomSpeed);var i=this.getPointer({x:t.clientX,y:t.clientY});this.zoom(e,i)}t.preventDefault()}}},{key:\"onMouseMove\",value:function(t){var e=this,i=this.getPointer({x:t.clientX,y:t.clientY}),n=!1;void 0!==this.popup&&(!1===this.popup.hidden&&this._checkHidePopup(i),!1===this.popup.hidden&&(n=!0,this.popup.setPosition(i.x+3,i.y-5),this.popup.show())),this.options.keyboard.autoFocus&&!1===this.options.keyboard.bindToWindow&&!0===this.options.keyboard.enabled&&this.canvas.frame.focus(),!1===n&&(void 0!==this.popupTimer&&(clearInterval(this.popupTimer),this.popupTimer=void 0),this.drag.dragging||(this.popupTimer=rs((function(){return e._checkShowPopup(i)}),this.options.tooltipDelay))),!0===this.options.hover&&this.selectionHandler.hoverObject(t,i)}},{key:\"_checkShowPopup\",value:function(t){var e=this.canvas._XconvertDOMtoCanvas(t.x),i=this.canvas._YconvertDOMtoCanvas(t.y),n={left:e,top:i,right:e,bottom:i},o=void 0===this.popupObj?void 0:this.popupObj.id,r=!1,s=\"node\";if(void 0===this.popupObj){for(var a,h=this.body.nodeIndices,l=this.body.nodes,d=[],c=0;c<h.length;c++)!0===(a=l[h[c]]).isOverlappingWith(n)&&(r=!0,void 0!==a.getTitle()&&d.push(h[c]));d.length>0&&(this.popupObj=l[d[d.length-1]],r=!0)}if(void 0===this.popupObj&&!1===r){for(var u,f=this.body.edgeIndices,p=this.body.edges,v=[],g=0;g<f.length;g++)!0===(u=p[f[g]]).isOverlappingWith(n)&&!0===u.connected&&void 0!==u.getTitle()&&v.push(f[g]);v.length>0&&(this.popupObj=p[v[v.length-1]],s=\"edge\")}void 0!==this.popupObj?this.popupObj.id!==o&&(void 0===this.popup&&(this.popup=new dl(this.canvas.frame)),this.popup.popupTargetType=s,this.popup.popupTargetId=this.popupObj.id,this.popup.setPosition(t.x+3,t.y-5),this.popup.setText(this.popupObj.getTitle()),this.popup.show(),this.body.emitter.emit(\"showPopup\",this.popupObj.id)):void 0!==this.popup&&(this.popup.hide(),this.body.emitter.emit(\"hidePopup\"))}},{key:\"_checkHidePopup\",value:function(t){var e=this.selectionHandler._pointerToPositionObject(t),i=!1;if(\"node\"===this.popup.popupTargetType){if(void 0!==this.body.nodes[this.popup.popupTargetId]&&!0===(i=this.body.nodes[this.popup.popupTargetId].isOverlappingWith(e))){var n=this.selectionHandler.getNodeAt(t);i=void 0!==n&&n.id===this.popup.popupTargetId}}else void 0===this.selectionHandler.getNodeAt(t)&&void 0!==this.body.edges[this.popup.popupTargetId]&&(i=this.body.edges[this.popup.popupTargetId].isOverlappingWith(e));!1===i&&(this.popupObj=void 0,this.popup.hide(),this.body.emitter.emit(\"hidePopup\"))}}]),t}(),Bp=Jl.getWeakData,zp=we.set,Np=we.getterFor,Ap=Gi.find,Fp=Gi.findIndex,jp=0,Rp=function(t){return t.frozen||(t.frozen=new Lp)},Lp=function(){this.entries=[]},Hp=function(t,e){return Ap(t.entries,(function(t){return t[0]===e}))};Lp.prototype={get:function(t){var e=Hp(this,t);if(e)return e[1]},has:function(t){return!!Hp(this,t)},set:function(t,e){var i=Hp(this,t);i?i[1]=e:this.entries.push([t,e])},delete:function(t){var e=Fp(this.entries,(function(e){return e[0]===t}));return~e&&this.entries.splice(e,1),!!~e}};var Wp={getConstructor:function(t,e,i,n){var o=t((function(t,r){id(t,o,e),zp(t,{type:e,id:jp++,frozen:void 0}),null!=r&&ed(r,t[n],{that:t,AS_ENTRIES:i})})),r=Np(e),s=function(t,e,i){var n=r(t),o=Bp(dt(e),!0);return!0===o?Rp(n).set(e,i):o[n.id]=i,t};return hd(o.prototype,{delete:function(t){var e=r(this);if(!w(t))return!1;var i=Bp(t);return!0===i?Rp(e).delete(t):i&&j(i,e.id)&&delete i[e.id]},has:function(t){var e=r(this);if(!w(t))return!1;var i=Bp(t);return!0===i?Rp(e).has(t):i&&j(i,e.id)}}),hd(o.prototype,i?{get:function(t){var e=r(this);if(w(t)){var i=Bp(t);return!0===i?Rp(e).get(t):i?i[e.id]:void 0}},set:function(t,e){return s(this,t,e)}}:{add:function(t){return s(this,t,!0)}}),o}};n((function(t){var e,i=we.enforce,n=!a.ActiveXObject&&\"ActiveXObject\"in a,o=Object.isExtensible,r=function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}},s=t.exports=ad(\"WeakMap\",r,Wp);if(ae&&n){e=Wp.getConstructor(r,\"WeakMap\",!0),Jl.enable();var h=s.prototype,l=h.delete,d=h.has,c=h.get,u=h.set;hd(h,{delete:function(t){if(w(t)&&!o(t)){var n=i(this);return n.frozen||(n.frozen=new e),l.call(this,t)||n.frozen.delete(t)}return l.call(this,t)},has:function(t){if(w(t)&&!o(t)){var n=i(this);return n.frozen||(n.frozen=new e),d.call(this,t)||n.frozen.has(t)}return d.call(this,t)},get:function(t){if(w(t)&&!o(t)){var n=i(this);return n.frozen||(n.frozen=new e),d.call(this,t)?c.call(this,t):n.frozen.get(t)}return c.call(this,t)},set:function(t,n){if(w(t)&&!o(t)){var r=i(this);r.frozen||(r.frozen=new e),d.call(this,t)?u.call(this,t,n):r.frozen.set(t,n)}else u.call(this,t,n);return this}})}}));var qp,Vp,Up,Yp,Xp,Gp=k.WeakMap;function Kp(t,e,i,n){if(\"a\"===i&&!n)throw new TypeError(\"Private accessor was defined without a getter\");if(\"function\"==typeof e?t!==e||!n:!e.has(t))throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");return\"m\"===i?n:\"a\"===i?n.call(t):n?n.value:e.get(t)}function $p(t,e,i,n,o){if(\"m\"===n)throw new TypeError(\"Private method is not writable\");if(\"a\"===n&&!o)throw new TypeError(\"Private accessor was defined without a setter\");if(\"function\"==typeof e?t!==e||!o:!e.has(t))throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");return\"a\"===n?o.call(t,i):o?o.value=i:e.set(t,i),i}function Zp(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return Qp(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Qp(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function Qp(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}function Jp(t,e){var i,n=new ec,o=Zp(e);try{for(o.s();!(i=o.n()).done;){var r=i.value;t.has(r)||n.add(r)}}catch(t){o.e(t)}finally{o.f()}return n}var tv=function(){function t(){Nn(this,t),qp.set(this,new ec),Vp.set(this,new ec)}return Fn(t,[{key:\"size\",get:function(){return Kp(this,Vp,\"f\").size}},{key:\"add\",value:function(){for(var t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];for(var n=0,o=e;n<o.length;n++){var r=o[n];Kp(this,Vp,\"f\").add(r)}}},{key:\"delete\",value:function(){for(var t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];for(var n=0,o=e;n<o.length;n++){var r=o[n];Kp(this,Vp,\"f\").delete(r)}}},{key:\"clear\",value:function(){Kp(this,Vp,\"f\").clear()}},{key:\"getSelection\",value:function(){return wo(Kp(this,Vp,\"f\"))}},{key:\"getChanges\",value:function(){return{added:wo(Jp(Kp(this,qp,\"f\"),Kp(this,Vp,\"f\"))),deleted:wo(Jp(Kp(this,Vp,\"f\"),Kp(this,qp,\"f\"))),previous:wo(new ec(Kp(this,qp,\"f\"))),current:wo(new ec(Kp(this,Vp,\"f\")))}}},{key:\"commit\",value:function(){var t=this.getChanges();$p(this,qp,Kp(this,Vp,\"f\"),\"f\"),$p(this,Vp,new ec(Kp(this,qp,\"f\")),\"f\");var e,i=Zp(t.added);try{for(i.s();!(e=i.n()).done;){e.value.select()}}catch(t){i.e(t)}finally{i.f()}var n,o=Zp(t.deleted);try{for(o.s();!(n=o.n()).done;){n.value.unselect()}}catch(t){o.e(t)}finally{o.f()}return t}}]),t}();qp=new Gp,Vp=new Gp;var ev=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:function(){};Nn(this,t),Up.set(this,new tv),Yp.set(this,new tv),Xp.set(this,void 0),$p(this,Xp,e,\"f\")}return Fn(t,[{key:\"sizeNodes\",get:function(){return Kp(this,Up,\"f\").size}},{key:\"sizeEdges\",get:function(){return Kp(this,Yp,\"f\").size}},{key:\"getNodes\",value:function(){return Kp(this,Up,\"f\").getSelection()}},{key:\"getEdges\",value:function(){return Kp(this,Yp,\"f\").getSelection()}},{key:\"addNodes\",value:function(){var t;(t=Kp(this,Up,\"f\")).add.apply(t,arguments)}},{key:\"addEdges\",value:function(){var t;(t=Kp(this,Yp,\"f\")).add.apply(t,arguments)}},{key:\"deleteNodes\",value:function(t){Kp(this,Up,\"f\").delete(t)}},{key:\"deleteEdges\",value:function(t){Kp(this,Yp,\"f\").delete(t)}},{key:\"clear\",value:function(){Kp(this,Up,\"f\").clear(),Kp(this,Yp,\"f\").clear()}},{key:\"commit\",value:function(){for(var t,e,i={nodes:Kp(this,Up,\"f\").commit(),edges:Kp(this,Yp,\"f\").commit()},n=arguments.length,o=new Array(n),r=0;r<n;r++)o[r]=arguments[r];return(t=Kp(this,Xp,\"f\")).call.apply(t,Eo(e=[this,i]).call(e,o)),i}}]),t}();function iv(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return nv(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return nv(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function nv(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}Up=new Gp,Yp=new Gp,Xp=new Gp;var ov=function(){function t(e,i){var n=this;Nn(this,t),this.body=e,this.canvas=i,this._selectionAccumulator=new ev,this.hoverObj={nodes:{},edges:{}},this.options={},this.defaultOptions={multiselect:!1,selectable:!0,selectConnectedEdges:!0,hoverConnectedEdges:!0},At(this.options,this.defaultOptions),this.body.emitter.on(\"_dataChanged\",(function(){n.updateSelection()}))}return Fn(t,[{key:\"setOptions\",value:function(t){if(void 0!==t){Eh([\"multiselect\",\"hoverConnectedEdges\",\"selectable\",\"selectConnectedEdges\"],this.options,t)}}},{key:\"selectOnPoint\",value:function(t){var e=!1;if(!0===this.options.selectable){var i=this.getNodeAt(t)||this.getEdgeAt(t);this.unselectAll(),void 0!==i&&(e=this.selectObject(i)),this.body.emitter.emit(\"_requestRedraw\")}return e}},{key:\"selectAdditionalOnPoint\",value:function(t){var e=!1;if(!0===this.options.selectable){var i=this.getNodeAt(t)||this.getEdgeAt(t);void 0!==i&&(e=!0,!0===i.isSelected()?this.deselectObject(i):this.selectObject(i),this.body.emitter.emit(\"_requestRedraw\"))}return e}},{key:\"_initBaseEvent\",value:function(t,e){var i={};return i.pointer={DOM:{x:e.x,y:e.y},canvas:this.canvas.DOMtoCanvas(e)},i.event=t,i}},{key:\"generateClickEvent\",value:function(t,e,i,n){var o=arguments.length>4&&void 0!==arguments[4]&&arguments[4],r=this._initBaseEvent(e,i);if(!0===o)r.nodes=[],r.edges=[];else{var s=this.getSelection();r.nodes=s.nodes,r.edges=s.edges}void 0!==n&&(r.previousSelection=n),\"click\"==t&&(r.items=this.getClickedItems(i)),void 0!==e.controlEdge&&(r.controlEdge=e.controlEdge),this.body.emitter.emit(t,r)}},{key:\"selectObject\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.options.selectConnectedEdges;if(void 0!==t){if(t instanceof cf){var i;if(!0===e)(i=this._selectionAccumulator).addEdges.apply(i,wo(t.edges));this._selectionAccumulator.addNodes(t)}else this._selectionAccumulator.addEdges(t);return!0}return!1}},{key:\"deselectObject\",value:function(t){!0===t.isSelected()&&(t.selected=!1,this._removeFromSelection(t))}},{key:\"_getAllNodesOverlappingWith\",value:function(t){for(var e=[],i=this.body.nodes,n=0;n<this.body.nodeIndices.length;n++){var o=this.body.nodeIndices[n];i[o].isOverlappingWith(t)&&e.push(o)}return e}},{key:\"_pointerToPositionObject\",value:function(t){var e=this.canvas.DOMtoCanvas(t);return{left:e.x-1,top:e.y+1,right:e.x+1,bottom:e.y-1}}},{key:\"getNodeAt\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this._pointerToPositionObject(t),n=this._getAllNodesOverlappingWith(i);return n.length>0?!0===e?this.body.nodes[n[n.length-1]]:n[n.length-1]:void 0}},{key:\"_getEdgesOverlappingWith\",value:function(t,e){for(var i=this.body.edges,n=0;n<this.body.edgeIndices.length;n++){var o=this.body.edgeIndices[n];i[o].isOverlappingWith(t)&&e.push(o)}}},{key:\"_getAllEdgesOverlappingWith\",value:function(t){var e=[];return this._getEdgesOverlappingWith(t,e),e}},{key:\"getEdgeAt\",value:function(t){for(var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this.canvas.DOMtoCanvas(t),n=10,o=null,r=this.body.edges,s=0;s<this.body.edgeIndices.length;s++){var a=this.body.edgeIndices[s],h=r[a];if(h.connected){var l=h.from.x,d=h.from.y,c=h.to.x,u=h.to.y,f=h.edgeType.getDistanceToEdge(l,d,c,u,i.x,i.y);f<n&&(o=a,n=f)}}return null!==o?!0===e?this.body.edges[o]:o:void 0}},{key:\"_addToHover\",value:function(t){t instanceof cf?this.hoverObj.nodes[t.id]=t:this.hoverObj.edges[t.id]=t}},{key:\"_removeFromSelection\",value:function(t){var e;t instanceof cf?(this._selectionAccumulator.deleteNodes(t),(e=this._selectionAccumulator).deleteEdges.apply(e,wo(t.edges))):this._selectionAccumulator.deleteEdges(t)}},{key:\"unselectAll\",value:function(){this._selectionAccumulator.clear()}},{key:\"getSelectedNodeCount\",value:function(){return this._selectionAccumulator.sizeNodes}},{key:\"getSelectedEdgeCount\",value:function(){return this._selectionAccumulator.sizeEdges}},{key:\"_hoverConnectedEdges\",value:function(t){for(var e=0;e<t.edges.length;e++){var i=t.edges[e];i.hover=!0,this._addToHover(i)}}},{key:\"emitBlurEvent\",value:function(t,e,i){var n=this._initBaseEvent(t,e);!0===i.hover&&(i.hover=!1,i instanceof cf?(n.node=i.id,this.body.emitter.emit(\"blurNode\",n)):(n.edge=i.id,this.body.emitter.emit(\"blurEdge\",n)))}},{key:\"emitHoverEvent\",value:function(t,e,i){var n=this._initBaseEvent(t,e),o=!1;return!1===i.hover&&(i.hover=!0,this._addToHover(i),o=!0,i instanceof cf?(n.node=i.id,this.body.emitter.emit(\"hoverNode\",n)):(n.edge=i.id,this.body.emitter.emit(\"hoverEdge\",n))),o}},{key:\"hoverObject\",value:function(t,e){var i=this.getNodeAt(e);void 0===i&&(i=this.getEdgeAt(e));var n=!1;for(var o in this.hoverObj.nodes)Object.prototype.hasOwnProperty.call(this.hoverObj.nodes,o)&&(void 0===i||i instanceof cf&&i.id!=o||i instanceof ep)&&(this.emitBlurEvent(t,e,this.hoverObj.nodes[o]),delete this.hoverObj.nodes[o],n=!0);for(var r in this.hoverObj.edges)Object.prototype.hasOwnProperty.call(this.hoverObj.edges,r)&&(!0===n?(this.hoverObj.edges[r].hover=!1,delete this.hoverObj.edges[r]):(void 0===i||i instanceof ep&&i.id!=r||i instanceof cf&&!i.hover)&&(this.emitBlurEvent(t,e,this.hoverObj.edges[r]),delete this.hoverObj.edges[r],n=!0));if(void 0!==i){var s=zo(this.hoverObj.edges).length,a=zo(this.hoverObj.nodes).length;(n||i instanceof ep&&0===s&&0===a||i instanceof cf&&0===s&&0===a)&&(n=this.emitHoverEvent(t,e,i)),i instanceof cf&&!0===this.options.hoverConnectedEdges&&this._hoverConnectedEdges(i)}!0===n&&this.body.emitter.emit(\"_requestRedraw\")}},{key:\"commitWithoutEmitting\",value:function(){this._selectionAccumulator.commit()}},{key:\"commitAndEmit\",value:function(t,e){var i=!1,n=this._selectionAccumulator.commit(),o={nodes:n.nodes.previous,edges:n.edges.previous};n.edges.deleted.length>0&&(this.generateClickEvent(\"deselectEdge\",e,t,o),i=!0),n.nodes.deleted.length>0&&(this.generateClickEvent(\"deselectNode\",e,t,o),i=!0),n.nodes.added.length>0&&(this.generateClickEvent(\"selectNode\",e,t),i=!0),n.edges.added.length>0&&(this.generateClickEvent(\"selectEdge\",e,t),i=!0),!0===i&&this.generateClickEvent(\"select\",e,t)}},{key:\"getSelection\",value:function(){return{nodes:this.getSelectedNodeIds(),edges:this.getSelectedEdgeIds()}}},{key:\"getSelectedNodes\",value:function(){return this._selectionAccumulator.getNodes()}},{key:\"getSelectedEdges\",value:function(){return this._selectionAccumulator.getEdges()}},{key:\"getSelectedNodeIds\",value:function(){var t;return Io(t=this._selectionAccumulator.getNodes()).call(t,(function(t){return t.id}))}},{key:\"getSelectedEdgeIds\",value:function(){var t;return Io(t=this._selectionAccumulator.getEdges()).call(t,(function(t){return t.id}))}},{key:\"setSelection\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!t||!t.nodes&&!t.edges)throw new TypeError(\"Selection must be an object with nodes and/or edges properties\");if((e.unselectAll||void 0===e.unselectAll)&&this.unselectAll(),t.nodes){var i,n=iv(t.nodes);try{for(n.s();!(i=n.n()).done;){var o=i.value,r=this.body.nodes[o];if(!r)throw new RangeError('Node with id \"'+o+'\" not found');this.selectObject(r,e.highlightEdges)}}catch(t){n.e(t)}finally{n.f()}}if(t.edges){var s,a=iv(t.edges);try{for(a.s();!(s=a.n()).done;){var h=s.value,l=this.body.edges[h];if(!l)throw new RangeError('Edge with id \"'+h+'\" not found');this.selectObject(l)}}catch(t){a.e(t)}finally{a.f()}}this.body.emitter.emit(\"_requestRedraw\"),this._selectionAccumulator.commit()}},{key:\"selectNodes\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(!t||void 0===t.length)throw\"Selection must be an array with ids\";this.setSelection({nodes:t},{highlightEdges:e})}},{key:\"selectEdges\",value:function(t){if(!t||void 0===t.length)throw\"Selection must be an array with ids\";this.setSelection({edges:t})}},{key:\"updateSelection\",value:function(){for(var t in this._selectionAccumulator.getNodes())Object.prototype.hasOwnProperty.call(this.body.nodes,t.id)||this._selectionAccumulator.deleteNodes(t);for(var e in this._selectionAccumulator.getEdges())Object.prototype.hasOwnProperty.call(this.body.edges,e.id)||this._selectionAccumulator.deleteEdges(e)}},{key:\"getClickedItems\",value:function(t){for(var e=this.canvas.DOMtoCanvas(t),i=[],n=this.body.nodeIndices,o=this.body.nodes,r=n.length-1;r>=0;r--){var s=o[n[r]].getItemsOnPoint(e);i.push.apply(i,s)}for(var a=this.body.edgeIndices,h=this.body.edges,l=a.length-1;l>=0;l--){var d=h[a[l]].getItemsOnPoint(e);i.push.apply(i,d)}return i}}]),t}(),rv=n((function(t,e){!function(t){function e(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}t.__esModule=!0,t.sort=v;var i=32,n=7,o=256,r=[1,10,100,1e3,1e4,1e5,1e6,1e7,1e8,1e9];function s(t){return t<1e5?t<100?t<10?0:1:t<1e4?t<1e3?2:3:4:t<1e7?t<1e6?5:6:t<1e9?t<1e8?7:8:9}function a(t,e){if(t===e)return 0;if(~~t===t&&~~e===e){if(0===t||0===e)return t<e?-1:1;if(t<0||e<0){if(e>=0)return-1;if(t>=0)return 1;t=-t,e=-e}var i=s(t),n=s(e),o=0;return i<n?(t*=r[n-i-1],e/=10,o=-1):i>n&&(e*=r[i-n-1],t/=10,o=1),t===e?o:t<e?-1:1}var a=String(t),h=String(e);return a===h?0:a<h?-1:1}function h(t){for(var e=0;t>=i;)e|=1&t,t>>=1;return t+e}function l(t,e,i,n){var o=e+1;if(o===i)return 1;if(n(t[o++],t[e])<0){for(;o<i&&n(t[o],t[o-1])<0;)o++;d(t,e,o)}else for(;o<i&&n(t[o],t[o-1])>=0;)o++;return o-e}function d(t,e,i){for(i--;e<i;){var n=t[e];t[e++]=t[i],t[i--]=n}}function c(t,e,i,n,o){for(n===e&&n++;n<i;n++){for(var r=t[n],s=e,a=n;s<a;){var h=s+a>>>1;o(r,t[h])<0?a=h:s=h+1}var l=n-s;switch(l){case 3:t[s+3]=t[s+2];case 2:t[s+2]=t[s+1];case 1:t[s+1]=t[s];break;default:for(;l>0;)t[s+l]=t[s+l-1],l--}t[s]=r}}function u(t,e,i,n,o,r){var s=0,a=0,h=1;if(r(t,e[i+o])>0){for(a=n-o;h<a&&r(t,e[i+o+h])>0;)s=h,(h=1+(h<<1))<=0&&(h=a);h>a&&(h=a),s+=o,h+=o}else{for(a=o+1;h<a&&r(t,e[i+o-h])<=0;)s=h,(h=1+(h<<1))<=0&&(h=a);h>a&&(h=a);var l=s;s=o-h,h=o-l}for(s++;s<h;){var d=s+(h-s>>>1);r(t,e[i+d])>0?s=d+1:h=d}return h}function f(t,e,i,n,o,r){var s=0,a=0,h=1;if(r(t,e[i+o])<0){for(a=o+1;h<a&&r(t,e[i+o-h])<0;)s=h,(h=1+(h<<1))<=0&&(h=a);h>a&&(h=a);var l=s;s=o-h,h=o-l}else{for(a=n-o;h<a&&r(t,e[i+o+h])>=0;)s=h,(h=1+(h<<1))<=0&&(h=a);h>a&&(h=a),s+=o,h+=o}for(s++;s<h;){var d=s+(h-s>>>1);r(t,e[i+d])<0?h=d:s=d+1}return h}var p=function(){function t(i,r){e(this,t),this.array=null,this.compare=null,this.minGallop=n,this.length=0,this.tmpStorageLength=o,this.stackLength=0,this.runStart=null,this.runLength=null,this.stackSize=0,this.array=i,this.compare=r,this.length=i.length,this.length<2*o&&(this.tmpStorageLength=this.length>>>1),this.tmp=new Array(this.tmpStorageLength),this.stackLength=this.length<120?5:this.length<1542?10:this.length<119151?19:40,this.runStart=new Array(this.stackLength),this.runLength=new Array(this.stackLength)}return t.prototype.pushRun=function(t,e){this.runStart[this.stackSize]=t,this.runLength[this.stackSize]=e,this.stackSize+=1},t.prototype.mergeRuns=function(){for(;this.stackSize>1;){var t=this.stackSize-2;if(t>=1&&this.runLength[t-1]<=this.runLength[t]+this.runLength[t+1]||t>=2&&this.runLength[t-2]<=this.runLength[t]+this.runLength[t-1])this.runLength[t-1]<this.runLength[t+1]&&t--;else if(this.runLength[t]>this.runLength[t+1])break;this.mergeAt(t)}},t.prototype.forceMergeRuns=function(){for(;this.stackSize>1;){var t=this.stackSize-2;t>0&&this.runLength[t-1]<this.runLength[t+1]&&t--,this.mergeAt(t)}},t.prototype.mergeAt=function(t){var e=this.compare,i=this.array,n=this.runStart[t],o=this.runLength[t],r=this.runStart[t+1],s=this.runLength[t+1];this.runLength[t]=o+s,t===this.stackSize-3&&(this.runStart[t+1]=this.runStart[t+2],this.runLength[t+1]=this.runLength[t+2]),this.stackSize--;var a=f(i[r],i,n,o,0,e);n+=a,0!=(o-=a)&&0!==(s=u(i[n+o-1],i,r,s,s-1,e))&&(o<=s?this.mergeLow(n,o,r,s):this.mergeHigh(n,o,r,s))},t.prototype.mergeLow=function(t,e,i,o){var r=this.compare,s=this.array,a=this.tmp,h=0;for(h=0;h<e;h++)a[h]=s[t+h];var l=0,d=i,c=t;if(s[c++]=s[d++],0!=--o)if(1!==e){for(var p=this.minGallop;;){var v=0,g=0,y=!1;do{if(r(s[d],a[l])<0){if(s[c++]=s[d++],g++,v=0,0==--o){y=!0;break}}else if(s[c++]=a[l++],v++,g=0,1==--e){y=!0;break}}while((v|g)<p);if(y)break;do{if(0!==(v=f(s[d],a,l,e,0,r))){for(h=0;h<v;h++)s[c+h]=a[l+h];if(c+=v,l+=v,(e-=v)<=1){y=!0;break}}if(s[c++]=s[d++],0==--o){y=!0;break}if(0!==(g=u(a[l],s,d,o,0,r))){for(h=0;h<g;h++)s[c+h]=s[d+h];if(c+=g,d+=g,0==(o-=g)){y=!0;break}}if(s[c++]=a[l++],1==--e){y=!0;break}p--}while(v>=n||g>=n);if(y)break;p<0&&(p=0),p+=2}if(this.minGallop=p,p<1&&(this.minGallop=1),1===e){for(h=0;h<o;h++)s[c+h]=s[d+h];s[c+o]=a[l]}else{if(0===e)throw new Error(\"mergeLow preconditions were not respected\");for(h=0;h<e;h++)s[c+h]=a[l+h]}}else{for(h=0;h<o;h++)s[c+h]=s[d+h];s[c+o]=a[l]}else for(h=0;h<e;h++)s[c+h]=a[l+h]},t.prototype.mergeHigh=function(t,e,i,o){var r=this.compare,s=this.array,a=this.tmp,h=0;for(h=0;h<o;h++)a[h]=s[i+h];var l=t+e-1,d=o-1,c=i+o-1,p=0,v=0;if(s[c--]=s[l--],0!=--e)if(1!==o){for(var g=this.minGallop;;){var y=0,m=0,b=!1;do{if(r(a[d],s[l])<0){if(s[c--]=s[l--],y++,m=0,0==--e){b=!0;break}}else if(s[c--]=a[d--],m++,y=0,1==--o){b=!0;break}}while((y|m)<g);if(b)break;do{if(0!=(y=e-f(a[d],s,t,e,e-1,r))){for(e-=y,v=1+(c-=y),p=1+(l-=y),h=y-1;h>=0;h--)s[v+h]=s[p+h];if(0===e){b=!0;break}}if(s[c--]=a[d--],1==--o){b=!0;break}if(0!=(m=o-u(s[l],a,0,o,o-1,r))){for(o-=m,v=1+(c-=m),p=1+(d-=m),h=0;h<m;h++)s[v+h]=a[p+h];if(o<=1){b=!0;break}}if(s[c--]=s[l--],0==--e){b=!0;break}g--}while(y>=n||m>=n);if(b)break;g<0&&(g=0),g+=2}if(this.minGallop=g,g<1&&(this.minGallop=1),1===o){for(v=1+(c-=e),p=1+(l-=e),h=e-1;h>=0;h--)s[v+h]=s[p+h];s[c]=a[d]}else{if(0===o)throw new Error(\"mergeHigh preconditions were not respected\");for(p=c-(o-1),h=0;h<o;h++)s[p+h]=a[h]}}else{for(v=1+(c-=e),p=1+(l-=e),h=e-1;h>=0;h--)s[v+h]=s[p+h];s[c]=a[d]}else for(p=c-(o-1),h=0;h<o;h++)s[p+h]=a[h]},t}();function v(t,e,n,o){if(!Array.isArray(t))throw new TypeError(\"Can only sort arrays\");e?\"function\"!=typeof e&&(o=n,n=e,e=a):e=a,n||(n=0),o||(o=t.length);var r=o-n;if(!(r<2)){var s=0;if(r<i)c(t,n,o,n+(s=l(t,n,o,e)),e);else{var d=new p(t,e),u=h(r);do{if((s=l(t,n,o,e))<u){var f=r;f>u&&(f=u),c(t,n,n+f,n+s,e),s=f}d.pushRun(n,s),d.mergeRuns(),r-=s,n+=s}while(0!==r);d.forceMergeRuns()}}}}(e)}));i(rv);var sv=rv,av=sv.sort;function hv(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var lv=function(){function t(){Nn(this,t)}return Fn(t,[{key:\"abstract\",value:function(){throw new Error(\"Can't instantiate abstract class!\")}},{key:\"fake_use\",value:function(){}},{key:\"curveType\",value:function(){return this.abstract()}},{key:\"getPosition\",value:function(t){return this.fake_use(t),this.abstract()}},{key:\"setPosition\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;this.fake_use(t,e,i),this.abstract()}},{key:\"getTreeSize\",value:function(t){return this.fake_use(t),this.abstract()}},{key:\"sort\",value:function(t){this.fake_use(t),this.abstract()}},{key:\"fix\",value:function(t,e){this.fake_use(t,e),this.abstract()}},{key:\"shift\",value:function(t,e){this.fake_use(t,e),this.abstract()}}]),t}(),dv=function(t){Ad(i,t);var e=hv(i);function i(t){var n;return Nn(this,i),(n=e.call(this)).layout=t,n}return Fn(i,[{key:\"curveType\",value:function(){return\"horizontal\"}},{key:\"getPosition\",value:function(t){return t.x}},{key:\"setPosition\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;void 0!==i&&this.layout.hierarchical.addToOrdering(t,i),t.x=e}},{key:\"getTreeSize\",value:function(t){var e=this.layout.hierarchical.getTreeSize(this.layout.body.nodes,t);return{min:e.min_x,max:e.max_x}}},{key:\"sort\",value:function(t){av(t,(function(t,e){return t.x-e.x}))}},{key:\"fix\",value:function(t,e){t.y=this.layout.options.hierarchical.levelSeparation*e,t.options.fixed.y=!0}},{key:\"shift\",value:function(t,e){this.layout.body.nodes[t].x+=e}}]),i}(lv),cv=function(t){Ad(i,t);var e=hv(i);function i(t){var n;return Nn(this,i),(n=e.call(this)).layout=t,n}return Fn(i,[{key:\"curveType\",value:function(){return\"vertical\"}},{key:\"getPosition\",value:function(t){return t.y}},{key:\"setPosition\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;void 0!==i&&this.layout.hierarchical.addToOrdering(t,i),t.y=e}},{key:\"getTreeSize\",value:function(t){var e=this.layout.hierarchical.getTreeSize(this.layout.body.nodes,t);return{min:e.min_y,max:e.max_y}}},{key:\"sort\",value:function(t){av(t,(function(t,e){return t.y-e.y}))}},{key:\"fix\",value:function(t,e){t.x=this.layout.options.hierarchical.levelSeparation*e,t.options.fixed.x=!0}},{key:\"shift\",value:function(t,e){this.layout.body.nodes[t].y+=e}}]),i}(lv),uv=Gi.every,fv=Ao(\"every\");gt({target:\"Array\",proto:!0,forced:!fv},{every:function(t){return uv(this,t,arguments.length>1?arguments[1]:void 0)}});var pv=Ht(\"Array\").every,vv=Array.prototype,gv=function(t){var e=t.every;return t===vv||t instanceof Array&&e===vv.every?pv:e};function yv(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return mv(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return mv(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function mv(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}function bv(t,e){var i=new ec;return Wo(t).call(t,(function(t){var e;Wo(e=t.edges).call(e,(function(t){t.connected&&i.add(t)}))})),Wo(i).call(i,(function(t){var i=t.from.id,n=t.to.id;null==e[i]&&(e[i]=0),(null==e[n]||e[i]>=e[n])&&(e[n]=e[i]+1)})),e}function wv(t,e,i,n){var o,r,s=Gr(null),a=Kd(o=wo(Dc(n).call(n))).call(o,(function(t,e){return t+1+e.edges.length}),0),h=i+\"Id\",l=\"to\"===i?1:-1,d=yv(n);try{var c=function(){var o=uo(r.value,2),d=o[0],c=o[1];if(!n.has(d)||!t(c))return\"continue\";s[d]=0;for(var u=[c],f=0,p=void 0,v=function(){var t,o;if(!n.has(d))return\"continue\";var r=s[p.id]+l;if(Wo(t=mr(o=p.edges).call(o,(function(t){return t.connected&&t.to!==t.from&&t[i]!==p&&n.has(t.toId)&&n.has(t.fromId)}))).call(t,(function(t){var n=t[h],o=s[n];(null==o||e(r,o))&&(s[n]=r,u.push(t[i]))})),f>a)return{v:{v:bv(n,s)}};++f};p=u.pop();){var g=v();if(\"continue\"!==g&&\"object\"===go(g))return g.v}};for(d.s();!(r=d.n()).done;){var u=c();if(\"continue\"!==u&&\"object\"===go(u))return u.v}}catch(t){d.e(t)}finally{d.f()}return s}var kv=function(){function t(){Nn(this,t),this.childrenReference={},this.parentReference={},this.trees={},this.distributionOrdering={},this.levels={},this.distributionIndex={},this.isTree=!1,this.treeIndex=-1}return Fn(t,[{key:\"addRelation\",value:function(t,e){void 0===this.childrenReference[t]&&(this.childrenReference[t]=[]),this.childrenReference[t].push(e),void 0===this.parentReference[e]&&(this.parentReference[e]=[]),this.parentReference[e].push(t)}},{key:\"checkIfTree\",value:function(){for(var t in this.parentReference)if(this.parentReference[t].length>1)return void(this.isTree=!1);this.isTree=!0}},{key:\"numTrees\",value:function(){return this.treeIndex+1}},{key:\"setTreeIndex\",value:function(t,e){void 0!==e&&void 0===this.trees[t.id]&&(this.trees[t.id]=e,this.treeIndex=Math.max(e,this.treeIndex))}},{key:\"ensureLevel\",value:function(t){void 0===this.levels[t]&&(this.levels[t]=0)}},{key:\"getMaxLevel\",value:function(t){var e=this,i={};return function t(n){if(void 0!==i[n])return i[n];var o=e.levels[n];if(e.childrenReference[n]){var r=e.childrenReference[n];if(r.length>0)for(var s=0;s<r.length;s++)o=Math.max(o,t(r[s]))}return i[n]=o,o}(t)}},{key:\"levelDownstream\",value:function(t,e){void 0===this.levels[e.id]&&(void 0===this.levels[t.id]&&(this.levels[t.id]=0),this.levels[e.id]=this.levels[t.id]+1)}},{key:\"setMinLevelToZero\",value:function(t){var e=1e9;for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&void 0!==this.levels[i]&&(e=Math.min(this.levels[i],e));for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&void 0!==this.levels[n]&&(this.levels[n]-=e)}},{key:\"getTreeSize\",value:function(t,e){var i=1e9,n=-1e9,o=1e9,r=-1e9;for(var s in this.trees)if(Object.prototype.hasOwnProperty.call(this.trees,s)&&this.trees[s]===e){var a=t[s];i=Math.min(a.x,i),n=Math.max(a.x,n),o=Math.min(a.y,o),r=Math.max(a.y,r)}return{min_x:i,max_x:n,min_y:o,max_y:r}}},{key:\"hasSameParent\",value:function(t,e){var i=this.parentReference[t.id],n=this.parentReference[e.id];if(void 0===i||void 0===n)return!1;for(var o=0;o<i.length;o++)for(var r=0;r<n.length;r++)if(i[o]==n[r])return!0;return!1}},{key:\"inSameSubNetwork\",value:function(t,e){return this.trees[t.id]===this.trees[e.id]}},{key:\"getLevels\",value:function(){return zo(this.distributionOrdering)}},{key:\"addToOrdering\",value:function(t,e){void 0===this.distributionOrdering[e]&&(this.distributionOrdering[e]=[]);var i=!1,n=this.distributionOrdering[e];for(var o in n)if(n[o]===t){i=!0;break}i||(this.distributionOrdering[e].push(t),this.distributionIndex[t.id]=this.distributionOrdering[e].length-1)}}]),t}(),_v=function(){function t(e){Nn(this,t),this.body=e,this._resetRNG(Math.random()+\":\"+No()),this.setPhysics=!1,this.options={},this.optionsBackup={physics:{}},this.defaultOptions={randomSeed:void 0,improvedLayout:!0,clusterThreshold:150,hierarchical:{enabled:!1,levelSeparation:150,nodeSpacing:100,treeSpacing:200,blockShifting:!0,edgeMinimization:!0,parentCentralization:!0,direction:\"UD\",sortMethod:\"hubsize\"}},At(this.options,this.defaultOptions),this.bindEventListeners()}return Fn(t,[{key:\"bindEventListeners\",value:function(){var t=this;this.body.emitter.on(\"_dataChanged\",(function(){t.setupHierarchicalLayout()})),this.body.emitter.on(\"_dataLoaded\",(function(){t.layoutNetwork()})),this.body.emitter.on(\"_resetHierarchicalLayout\",(function(){t.setupHierarchicalLayout()})),this.body.emitter.on(\"_adjustEdgesForHierarchicalLayout\",(function(){if(!0===t.options.hierarchical.enabled){var e=t.direction.curveType();t.body.emitter.emit(\"_forceDisableDynamicCurves\",e,!1)}}))}},{key:\"setOptions\",value:function(t,e){if(void 0!==t){var i=this.options.hierarchical,n=i.enabled;if(Eh([\"randomSeed\",\"improvedLayout\",\"clusterThreshold\"],this.options,t),$h(this.options,t,\"hierarchical\"),void 0!==t.randomSeed&&this._resetRNG(t.randomSeed),!0===i.enabled)return!0===n&&this.body.emitter.emit(\"refresh\",!0),\"RL\"===i.direction||\"DU\"===i.direction?i.levelSeparation>0&&(i.levelSeparation*=-1):i.levelSeparation<0&&(i.levelSeparation*=-1),this.setDirectionStrategy(),this.body.emitter.emit(\"_resetHierarchicalLayout\"),this.adaptAllOptionsForHierarchicalLayout(e);if(!0===n)return this.body.emitter.emit(\"refresh\"),Ch(e,this.optionsBackup)}return e}},{key:\"_resetRNG\",value:function(t){this.initialRandomSeed=t,this._rng=ah(this.initialRandomSeed)}},{key:\"adaptAllOptionsForHierarchicalLayout\",value:function(t){if(!0===this.options.hierarchical.enabled){var e=this.optionsBackup.physics;void 0===t.physics||!0===t.physics?(t.physics={enabled:void 0===e.enabled||e.enabled,solver:\"hierarchicalRepulsion\"},e.enabled=void 0===e.enabled||e.enabled,e.solver=e.solver||\"barnesHut\"):\"object\"===go(t.physics)?(e.enabled=void 0===t.physics.enabled||t.physics.enabled,e.solver=t.physics.solver||\"barnesHut\",t.physics.solver=\"hierarchicalRepulsion\"):!1!==t.physics&&(e.solver=\"barnesHut\",t.physics={solver:\"hierarchicalRepulsion\"});var i=this.direction.curveType();if(void 0===t.edges)this.optionsBackup.edges={smooth:{enabled:!0,type:\"dynamic\"}},t.edges={smooth:!1};else if(void 0===t.edges.smooth)this.optionsBackup.edges={smooth:{enabled:!0,type:\"dynamic\"}},t.edges.smooth=!1;else if(\"boolean\"==typeof t.edges.smooth)this.optionsBackup.edges={smooth:t.edges.smooth},t.edges.smooth={enabled:t.edges.smooth,type:i};else{var n=t.edges.smooth;void 0!==n.type&&\"dynamic\"!==n.type&&(i=n.type),this.optionsBackup.edges={smooth:{enabled:void 0===n.enabled||n.enabled,type:void 0===n.type?\"dynamic\":n.type,roundness:void 0===n.roundness?.5:n.roundness,forceDirection:void 0!==n.forceDirection&&n.forceDirection}},t.edges.smooth={enabled:void 0===n.enabled||n.enabled,type:i,roundness:void 0===n.roundness?.5:n.roundness,forceDirection:void 0!==n.forceDirection&&n.forceDirection}}this.body.emitter.emit(\"_forceDisableDynamicCurves\",i)}return t}},{key:\"positionInitially\",value:function(t){if(!0!==this.options.hierarchical.enabled){this._resetRNG(this.initialRandomSeed);for(var e=t.length+50,i=0;i<t.length;i++){var n=t[i],o=2*Math.PI*this._rng();void 0===n.x&&(n.x=e*Math.cos(o)),void 0===n.y&&(n.y=e*Math.sin(o))}}}},{key:\"layoutNetwork\",value:function(){if(!0!==this.options.hierarchical.enabled&&!0===this.options.improvedLayout){for(var t=this.body.nodeIndices,e=0,i=0;i<t.length;i++){!0===this.body.nodes[t[i]].predefinedPosition&&(e+=1)}if(e<.5*t.length){var n=0,o=this.options.clusterThreshold,r={clusterNodeProperties:{shape:\"ellipse\",label:\"\",group:\"\",font:{multi:!1}},clusterEdgeProperties:{label:\"\",font:{multi:!1},smooth:{enabled:!1}}};if(t.length>o){for(var s=t.length;t.length>o&&n<=10;){n+=1;var a=t.length;if(n%3==0?this.body.modules.clustering.clusterBridges(r):this.body.modules.clustering.clusterOutliers(r),a==t.length&&n%3!=0)return this._declusterAll(),this.body.emitter.emit(\"_layoutFailed\"),void console.info(\"This network could not be positioned by this version of the improved layout algorithm. Please disable improvedLayout for better performance.\")}this.body.modules.kamadaKawai.setOptions({springLength:Math.max(150,2*s)})}n>10&&console.info(\"The clustering didn't succeed within the amount of interations allowed, progressing with partial result.\"),this.body.modules.kamadaKawai.solve(t,this.body.edgeIndices,!0),this._shiftToCenter();for(var h=0;h<t.length;h++){var l=this.body.nodes[t[h]];!1===l.predefinedPosition&&(l.x+=70*(.5-this._rng()),l.y+=70*(.5-this._rng()))}this._declusterAll(),this.body.emitter.emit(\"_repositionBezierNodes\")}}}},{key:\"_shiftToCenter\",value:function(){for(var t=pp.getRangeCore(this.body.nodes,this.body.nodeIndices),e=pp.findCenter(t),i=0;i<this.body.nodeIndices.length;i++){var n=this.body.nodes[this.body.nodeIndices[i]];n.x-=e.x,n.y-=e.y}}},{key:\"_declusterAll\",value:function(){for(var t=!0;!0===t;){t=!1;for(var e=0;e<this.body.nodeIndices.length;e++)!0===this.body.nodes[this.body.nodeIndices[e]].isCluster&&(t=!0,this.body.modules.clustering.openCluster(this.body.nodeIndices[e],{},!1));!0===t&&this.body.emitter.emit(\"_dataChanged\")}}},{key:\"getSeed\",value:function(){return this.initialRandomSeed}},{key:\"setupHierarchicalLayout\",value:function(){if(!0===this.options.hierarchical.enabled&&this.body.nodeIndices.length>0){var t,e,i=!1,n=!1;for(e in this.lastNodeOnLevel={},this.hierarchical=new kv,this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,e)&&(void 0!==(t=this.body.nodes[e]).options.level?(i=!0,this.hierarchical.levels[e]=t.options.level):n=!0);if(!0===n&&!0===i)throw new Error(\"To use the hierarchical layout, nodes require either no predefined levels or levels have to be defined for all nodes.\");if(!0===n){var o=this.options.hierarchical.sortMethod;\"hubsize\"===o?this._determineLevelsByHubsize():\"directed\"===o?this._determineLevelsDirected():\"custom\"===o&&this._determineLevelsCustomCallback()}for(var r in this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,r)&&this.hierarchical.ensureLevel(r);var s=this._getDistribution();this._generateMap(),this._placeNodesByHierarchy(s),this._condenseHierarchy(),this._shiftToCenter()}}},{key:\"_condenseHierarchy\",value:function(){var t=this,e=!1,i={},n=function(e,i){var n=t.hierarchical.trees;for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&n[o]===e&&t.direction.shift(o,i)},o=function(){for(var e=[],i=0;i<t.hierarchical.numTrees();i++)e.push(t.direction.getTreeSize(i));return e},r=function e(i,n){if(!n[i.id]&&(n[i.id]=!0,t.hierarchical.childrenReference[i.id])){var o=t.hierarchical.childrenReference[i.id];if(o.length>0)for(var r=0;r<o.length;r++)e(t.body.nodes[o[r]],n)}},s=function(e){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1e9,n=1e9,o=1e9,r=1e9,s=-1e9;for(var a in e)if(Object.prototype.hasOwnProperty.call(e,a)){var h=t.body.nodes[a],l=t.hierarchical.levels[h.id],d=t.direction.getPosition(h),c=t._getSpaceAroundNode(h,e),u=uo(c,2),f=u[0],p=u[1];n=Math.min(f,n),o=Math.min(p,o),l<=i&&(r=Math.min(d,r),s=Math.max(d,s))}return[r,s,n,o]},a=function(e,i){var n=t.hierarchical.getMaxLevel(e.id),o=t.hierarchical.getMaxLevel(i.id);return Math.min(n,o)},h=function(e,i,n){for(var o=t.hierarchical,r=0;r<i.length;r++){var s=i[r],a=o.distributionOrdering[s];if(a.length>1)for(var h=0;h<a.length-1;h++){var l=a[h],d=a[h+1];o.hasSameParent(l,d)&&o.inSameSubNetwork(l,d)&&e(l,d,n)}}},l=function(i,n){var o=arguments.length>2&&void 0!==arguments[2]&&arguments[2],h=t.direction.getPosition(i),l=t.direction.getPosition(n),d=Math.abs(l-h),c=t.options.hierarchical.nodeSpacing;if(d>c){var u={},f={};r(i,u),r(n,f);var p=a(i,n),v=s(u,p),g=s(f,p),y=v[1],m=g[0],b=g[2],w=Math.abs(y-m);if(w>c){var k=y-m+c;k<-b+c&&(k=-b+c),k<0&&(t._shiftBlock(n.id,k),e=!0,!0===o&&t._centerParent(n))}}},d=function(n,o){for(var a=o.id,h=o.edges,l=t.hierarchical.levels[o.id],d=t.options.hierarchical.levelSeparation*t.options.hierarchical.levelSeparation,c={},u=[],f=0;f<h.length;f++){var p=h[f];if(p.toId!=p.fromId){var v=p.toId==a?p.from:p.to;c[h[f].id]=v,t.hierarchical.levels[v.id]<l&&u.push(p)}}var g=function(e,i){for(var n=0,o=0;o<i.length;o++)if(void 0!==c[i[o].id]){var r=t.direction.getPosition(c[i[o].id])-e;n+=r/Math.sqrt(r*r+d)}return n},y=function(e,i){for(var n=0,o=0;o<i.length;o++)if(void 0!==c[i[o].id]){var r=t.direction.getPosition(c[i[o].id])-e;n-=d*Math.pow(r*r+d,-1.5)}return n},m=function(e,i){for(var n=t.direction.getPosition(o),r={},s=0;s<e;s++){var a=g(n,i),h=y(n,i);if(void 0!==r[n-=Math.max(-40,Math.min(40,Math.round(a/h)))])break;r[n]=s}return n},b=m(n,u);!function(n){var a=t.direction.getPosition(o);if(void 0===i[o.id]){var h={};r(o,h),i[o.id]=h}var l=s(i[o.id]),d=l[2],c=l[3],u=n-a,f=0;u>0?f=Math.min(u,c-t.options.hierarchical.nodeSpacing):u<0&&(f=-Math.min(-u,d-t.options.hierarchical.nodeSpacing)),0!=f&&(t._shiftBlock(o.id,f),e=!0)}(b),function(i){var n=t.direction.getPosition(o),r=t._getSpaceAroundNode(o),s=uo(r,2),a=s[0],h=s[1],l=i-n,d=n;l>0?d=Math.min(n+(h-t.options.hierarchical.nodeSpacing),i):l<0&&(d=Math.max(n-(a-t.options.hierarchical.nodeSpacing),i)),d!==n&&(t.direction.setPosition(o,d),e=!0)}(b=m(n,h))};!0===this.options.hierarchical.blockShifting&&(function(i){var n=t.hierarchical.getLevels();n=Xo(n).call(n);for(var o=0;o<i&&(e=!1,h(l,n,!0),!0===e);o++);}(5),function(){for(var e in t.body.nodes)Object.prototype.hasOwnProperty.call(t.body.nodes,e)&&t._centerParent(t.body.nodes[e])}()),!0===this.options.hierarchical.edgeMinimization&&function(i){var n=t.hierarchical.getLevels();n=Xo(n).call(n);for(var o=0;o<i;o++){e=!1;for(var r=0;r<n.length;r++)for(var s=n[r],a=t.hierarchical.distributionOrdering[s],h=0;h<a.length;h++)d(1e3,a[h]);if(!0!==e)break}}(20),!0===this.options.hierarchical.parentCentralization&&function(){var e=t.hierarchical.getLevels();e=Xo(e).call(e);for(var i=0;i<e.length;i++)for(var n=e[i],o=t.hierarchical.distributionOrdering[n],r=0;r<o.length;r++)t._centerParent(o[r])}(),function(){for(var e=o(),i=0,r=0;r<e.length-1;r++){i+=e[r].max-e[r+1].min+t.options.hierarchical.treeSpacing,n(r+1,i)}}()}},{key:\"_getSpaceAroundNode\",value:function(t,e){var i=!0;void 0===e&&(i=!1);var n=this.hierarchical.levels[t.id];if(void 0!==n){var o=this.hierarchical.distributionIndex[t.id],r=this.direction.getPosition(t),s=this.hierarchical.distributionOrdering[n],a=1e9,h=1e9;if(0!==o){var l=s[o-1];if(!0===i&&void 0===e[l.id]||!1===i)a=r-this.direction.getPosition(l)}if(o!=s.length-1){var d=s[o+1];if(!0===i&&void 0===e[d.id]||!1===i){var c=this.direction.getPosition(d);h=Math.min(h,c-r)}}return[a,h]}return[0,0]}},{key:\"_centerParent\",value:function(t){if(this.hierarchical.parentReference[t.id])for(var e=this.hierarchical.parentReference[t.id],i=0;i<e.length;i++){var n=e[i],o=this.body.nodes[n],r=this.hierarchical.childrenReference[n];if(void 0!==r){var s=this._getCenterPosition(r),a=this.direction.getPosition(o),h=this._getSpaceAroundNode(o),l=uo(h,2),d=l[0],c=l[1],u=a-s;(u<0&&Math.abs(u)<c-this.options.hierarchical.nodeSpacing||u>0&&Math.abs(u)<d-this.options.hierarchical.nodeSpacing)&&this.direction.setPosition(o,s)}}}},{key:\"_placeNodesByHierarchy\",value:function(t){for(var e in this.positionedNodes={},t)if(Object.prototype.hasOwnProperty.call(t,e)){var i,n=zo(t[e]);n=this._indexArrayToNodes(n),xc(i=this.direction).call(i,n);for(var o=0,r=0;r<n.length;r++){var s=n[r];if(void 0===this.positionedNodes[s.id]){var a=this.options.hierarchical.nodeSpacing,h=a*o;o>0&&(h=this.direction.getPosition(n[r-1])+a),this.direction.setPosition(s,h,e),this._validatePositionAndContinue(s,e,h),o++}}}}},{key:\"_placeBranchNodes\",value:function(t,e){var i,n=this.hierarchical.childrenReference[t];if(void 0!==n){for(var o=[],r=0;r<n.length;r++)o.push(this.body.nodes[n[r]]);xc(i=this.direction).call(i,o);for(var s=0;s<o.length;s++){var a=o[s],h=this.hierarchical.levels[a.id];if(!(h>e&&void 0===this.positionedNodes[a.id]))return;var l=this.options.hierarchical.nodeSpacing,d=void 0;d=0===s?this.direction.getPosition(this.body.nodes[t]):this.direction.getPosition(o[s-1])+l,this.direction.setPosition(a,d,h),this._validatePositionAndContinue(a,h,d)}var c=this._getCenterPosition(o);this.direction.setPosition(this.body.nodes[t],c,e)}}},{key:\"_validatePositionAndContinue\",value:function(t,e,i){if(this.hierarchical.isTree){if(void 0!==this.lastNodeOnLevel[e]){var n=this.direction.getPosition(this.body.nodes[this.lastNodeOnLevel[e]]);if(i-n<this.options.hierarchical.nodeSpacing){var o=n+this.options.hierarchical.nodeSpacing-i,r=this._findCommonParent(this.lastNodeOnLevel[e],t.id);this._shiftBlock(r.withChild,o)}}this.lastNodeOnLevel[e]=t.id,this.positionedNodes[t.id]=!0,this._placeBranchNodes(t.id,e)}}},{key:\"_indexArrayToNodes\",value:function(t){for(var e=[],i=0;i<t.length;i++)e.push(this.body.nodes[t[i]]);return e}},{key:\"_getDistribution\",value:function(){var t,e,i={};for(t in this.body.nodes)if(Object.prototype.hasOwnProperty.call(this.body.nodes,t)){e=this.body.nodes[t];var n=void 0===this.hierarchical.levels[t]?0:this.hierarchical.levels[t];this.direction.fix(e,n),void 0===i[n]&&(i[n]={}),i[n][t]=e}return i}},{key:\"_getActiveEdges\",value:function(t){var e=this,i=[];return Dh(t.edges,(function(t){var n;-1!==Hr(n=e.body.edgeIndices).call(n,t.id)&&i.push(t)})),i}},{key:\"_getHubSizes\",value:function(){var t=this,e={};Dh(this.body.nodeIndices,(function(i){var n=t.body.nodes[i],o=t._getActiveEdges(n).length;e[o]=!0}));var i=[];return Dh(e,(function(t){i.push(Number(t))})),xc(sv).call(sv,i,(function(t,e){return e-t})),i}},{key:\"_determineLevelsByHubsize\",value:function(){for(var t=this,e=function(e,i){t.hierarchical.levelDownstream(e,i)},i=this._getHubSizes(),n=function(n){var o=i[n];if(0===o)return\"break\";Dh(t.body.nodeIndices,(function(i){var n=t.body.nodes[i];o===t._getActiveEdges(n).length&&t._crawlNetwork(e,i)}))},o=0;o<i.length;++o){if(\"break\"===n(o))break}}},{key:\"_determineLevelsCustomCallback\",value:function(){var t=this;this._crawlNetwork((function(e,i,n){var o=t.hierarchical.levels[e.id];void 0===o&&(o=t.hierarchical.levels[e.id]=1e5);var r=(pp.cloneOptions(e,\"node\"),pp.cloneOptions(i,\"node\"),void pp.cloneOptions(n,\"edge\"));t.hierarchical.levels[i.id]=o+r})),this.hierarchical.setMinLevelToZero(this.body.nodes)}},{key:\"_determineLevelsDirected\",value:function(){var t,e=this,i=Kd(t=this.body.nodeIndices).call(t,(function(t,i){return t.set(i,e.body.nodes[i]),t}),new vd);\"roots\"===this.options.hierarchical.shakeTowards?this.hierarchical.levels=function(t){return wv((function(e){var i,n;return gv(i=mr(n=e.edges).call(n,(function(e){return t.has(e.toId)}))).call(i,(function(t){return t.from===e}))}),(function(t,e){return e<t}),\"to\",t)}(i):this.hierarchical.levels=function(t){return wv((function(e){var i,n;return gv(i=mr(n=e.edges).call(n,(function(e){return t.has(e.toId)}))).call(i,(function(t){return t.to===e}))}),(function(t,e){return e>t}),\"from\",t)}(i),this.hierarchical.setMinLevelToZero(this.body.nodes)}},{key:\"_generateMap\",value:function(){var t=this;this._crawlNetwork((function(e,i){t.hierarchical.levels[i.id]>t.hierarchical.levels[e.id]&&t.hierarchical.addRelation(e.id,i.id)})),this.hierarchical.checkIfTree()}},{key:\"_crawlNetwork\",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:function(){},i=arguments.length>1?arguments[1]:void 0,n={},o=function i(o,r){if(void 0===n[o.id]){var s;t.hierarchical.setTreeIndex(o,r),n[o.id]=!0;for(var a=t._getActiveEdges(o),h=0;h<a.length;h++){var l=a[h];!0===l.connected&&(s=l.toId==o.id?l.from:l.to,o.id!=s.id&&(e(o,s,l),i(s,r)))}}};if(void 0===i)for(var r=0,s=0;s<this.body.nodeIndices.length;s++){var a=this.body.nodeIndices[s];if(void 0===n[a]){var h=this.body.nodes[a];o(h,r),r+=1}}else{var l=this.body.nodes[i];if(void 0===l)return void console.error(\"Node not found:\",i);o(l)}}},{key:\"_shiftBlock\",value:function(t,e){var i=this,n={};!function t(o){if(!n[o]){n[o]=!0,i.direction.shift(o,e);var r=i.hierarchical.childrenReference[o];if(void 0!==r)for(var s=0;s<r.length;s++)t(r[s])}}(t)}},{key:\"_findCommonParent\",value:function(t,e){var i=this,n={};return function t(e,n){var o=i.hierarchical.parentReference[n];if(void 0!==o)for(var r=0;r<o.length;r++){var s=o[r];e[s]=!0,t(e,s)}}(n,t),function t(e,n){var o=i.hierarchical.parentReference[n];if(void 0!==o)for(var r=0;r<o.length;r++){var s=o[r];if(void 0!==e[s])return{foundParent:s,withChild:n};var a=t(e,s);if(null!==a.foundParent)return a}return{foundParent:null,withChild:n}}(n,e)}},{key:\"setDirectionStrategy\",value:function(){var t=\"UD\"===this.options.hierarchical.direction||\"DU\"===this.options.hierarchical.direction;this.direction=t?new dv(this):new cv(this)}},{key:\"_getCenterPosition\",value:function(t){for(var e=1e9,i=-1e9,n=0;n<t.length;n++){var o=void 0;if(void 0!==t[n].id)o=t[n];else{var r=t[n];o=this.body.nodes[r]}var s=this.direction.getPosition(o);e=Math.min(e,s),i=Math.max(i,s)}return.5*(e+i)}}]),t}();function xv(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return Ev(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Ev(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function Ev(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}var Ov=function(){function t(e,i,n,o){var r,s,a=this;Nn(this,t),this.body=e,this.canvas=i,this.selectionHandler=n,this.interactionHandler=o,this.editMode=!1,this.manipulationDiv=void 0,this.editModeDiv=void 0,this.closeDiv=void 0,this._domEventListenerCleanupQueue=[],this.temporaryUIFunctions={},this.temporaryEventFunctions=[],this.touchTime=0,this.temporaryIds={nodes:[],edges:[]},this.guiEnabled=!1,this.inMode=!1,this.selectedControlNode=void 0,this.options={},this.defaultOptions={enabled:!1,initiallyActive:!1,addNode:!0,addEdge:!0,editNode:void 0,editEdge:!0,deleteNode:!0,deleteEdge:!0,controlNodeStyle:{shape:\"dot\",size:6,color:{background:\"#ff0000\",border:\"#3c3c3c\",highlight:{background:\"#07f968\",border:\"#3c3c3c\"}},borderWidth:2,borderWidthSelected:2}},At(this.options,this.defaultOptions),this.body.emitter.on(\"destroy\",(function(){a._clean()})),this.body.emitter.on(\"_dataChanged\",Vt(r=this._restore).call(r,this)),this.body.emitter.on(\"_resetData\",Vt(s=this._restore).call(s,this))}return Fn(t,[{key:\"_restore\",value:function(){!1!==this.inMode&&(!0===this.options.initiallyActive?this.enableEditMode():this.disableEditMode())}},{key:\"setOptions\",value:function(t,e,i){void 0!==e&&(void 0!==e.locale?this.options.locale=e.locale:this.options.locale=i.locale,void 0!==e.locales?this.options.locales=e.locales:this.options.locales=i.locales),void 0!==t&&(\"boolean\"==typeof t?this.options.enabled=t:(this.options.enabled=!0,Ch(this.options,t)),!0===this.options.initiallyActive&&(this.editMode=!0),this._setup())}},{key:\"toggleEditMode\",value:function(){!0===this.editMode?this.disableEditMode():this.enableEditMode()}},{key:\"enableEditMode\",value:function(){this.editMode=!0,this._clean(),!0===this.guiEnabled&&(this.manipulationDiv.style.display=\"block\",this.closeDiv.style.display=\"block\",this.editModeDiv.style.display=\"none\",this.showManipulatorToolbar())}},{key:\"disableEditMode\",value:function(){this.editMode=!1,this._clean(),!0===this.guiEnabled&&(this.manipulationDiv.style.display=\"none\",this.closeDiv.style.display=\"none\",this.editModeDiv.style.display=\"block\",this._createEditButton())}},{key:\"showManipulatorToolbar\",value:function(){if(this._clean(),this.manipulationDOM={},!0===this.guiEnabled){var t,e;this.editMode=!0,this.manipulationDiv.style.display=\"block\",this.closeDiv.style.display=\"block\";var i=this.selectionHandler.getSelectedNodeCount(),n=this.selectionHandler.getSelectedEdgeCount(),o=i+n,r=this.options.locales[this.options.locale],s=!1;!1!==this.options.addNode&&(this._createAddNodeButton(r),s=!0),!1!==this.options.addEdge&&(!0===s?this._createSeperator(1):s=!0,this._createAddEdgeButton(r)),1===i&&\"function\"==typeof this.options.editNode?(!0===s?this._createSeperator(2):s=!0,this._createEditNodeButton(r)):1===n&&0===i&&!1!==this.options.editEdge&&(!0===s?this._createSeperator(3):s=!0,this._createEditEdgeButton(r)),0!==o&&(i>0&&!1!==this.options.deleteNode||0===i&&!1!==this.options.deleteEdge)&&(!0===s&&this._createSeperator(4),this._createDeleteButton(r)),this._bindElementEvents(this.closeDiv,Vt(t=this.toggleEditMode).call(t,this)),this._temporaryBindEvent(\"select\",Vt(e=this.showManipulatorToolbar).call(e,this))}this.body.emitter.emit(\"_redraw\")}},{key:\"addNodeMode\",value:function(){var t;if(!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode=\"addNode\",!0===this.guiEnabled){var e,i=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(i),this._createSeperator(),this._createDescription(i.addDescription||this.options.locales.en.addDescription),this._bindElementEvents(this.closeDiv,Vt(e=this.toggleEditMode).call(e,this))}this._temporaryBindEvent(\"click\",Vt(t=this._performAddNode).call(t,this))}},{key:\"editNode\",value:function(){var t=this;!0!==this.editMode&&this.enableEditMode(),this._clean();var e=this.selectionHandler.getSelectedNodes()[0];if(void 0!==e){if(this.inMode=\"editNode\",\"function\"!=typeof this.options.editNode)throw new Error(\"No function has been configured to handle the editing of nodes.\");if(!0!==e.isCluster){var i=Ch({},e.options,!1);if(i.x=e.x,i.y=e.y,2!==this.options.editNode.length)throw new Error(\"The function for edit does not support two arguments (data, callback)\");this.options.editNode(i,(function(e){null!=e&&\"editNode\"===t.inMode&&t.body.data.nodes.getDataSet().update(e),t.showManipulatorToolbar()}))}else alert(this.options.locales[this.options.locale].editClusterError||this.options.locales.en.editClusterError)}else this.showManipulatorToolbar()}},{key:\"addEdgeMode\",value:function(){var t,e,i,n,o;if(!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode=\"addEdge\",!0===this.guiEnabled){var r,s=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(s),this._createSeperator(),this._createDescription(s.edgeDescription||this.options.locales.en.edgeDescription),this._bindElementEvents(this.closeDiv,Vt(r=this.toggleEditMode).call(r,this))}this._temporaryBindUI(\"onTouch\",Vt(t=this._handleConnect).call(t,this)),this._temporaryBindUI(\"onDragEnd\",Vt(e=this._finishConnect).call(e,this)),this._temporaryBindUI(\"onDrag\",Vt(i=this._dragControlNode).call(i,this)),this._temporaryBindUI(\"onRelease\",Vt(n=this._finishConnect).call(n,this)),this._temporaryBindUI(\"onDragStart\",Vt(o=this._dragStartEdge).call(o,this)),this._temporaryBindUI(\"onHold\",(function(){}))}},{key:\"editEdgeMode\",value:function(){if(!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode=\"editEdge\",\"object\"!==go(this.options.editEdge)||\"function\"!=typeof this.options.editEdge.editWithoutDrag||(this.edgeBeingEditedId=this.selectionHandler.getSelectedEdgeIds()[0],void 0===this.edgeBeingEditedId)){if(!0===this.guiEnabled){var t,e=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(e),this._createSeperator(),this._createDescription(e.editEdgeDescription||this.options.locales.en.editEdgeDescription),this._bindElementEvents(this.closeDiv,Vt(t=this.toggleEditMode).call(t,this))}if(this.edgeBeingEditedId=this.selectionHandler.getSelectedEdgeIds()[0],void 0!==this.edgeBeingEditedId){var i,n,o,r,s=this.body.edges[this.edgeBeingEditedId],a=this._getNewTargetNode(s.from.x,s.from.y),h=this._getNewTargetNode(s.to.x,s.to.y);this.temporaryIds.nodes.push(a.id),this.temporaryIds.nodes.push(h.id),this.body.nodes[a.id]=a,this.body.nodeIndices.push(a.id),this.body.nodes[h.id]=h,this.body.nodeIndices.push(h.id),this._temporaryBindUI(\"onTouch\",Vt(i=this._controlNodeTouch).call(i,this)),this._temporaryBindUI(\"onTap\",(function(){})),this._temporaryBindUI(\"onHold\",(function(){})),this._temporaryBindUI(\"onDragStart\",Vt(n=this._controlNodeDragStart).call(n,this)),this._temporaryBindUI(\"onDrag\",Vt(o=this._controlNodeDrag).call(o,this)),this._temporaryBindUI(\"onDragEnd\",Vt(r=this._controlNodeDragEnd).call(r,this)),this._temporaryBindUI(\"onMouseMove\",(function(){})),this._temporaryBindEvent(\"beforeDrawing\",(function(t){var e=s.edgeType.findBorderPositions(t);!1===a.selected&&(a.x=e.from.x,a.y=e.from.y),!1===h.selected&&(h.x=e.to.x,h.y=e.to.y)})),this.body.emitter.emit(\"_redraw\")}else this.showManipulatorToolbar()}else{var l=this.body.edges[this.edgeBeingEditedId];this._performEditEdge(l.from.id,l.to.id)}}},{key:\"deleteSelected\",value:function(){var t=this;!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode=\"delete\";var e=this.selectionHandler.getSelectedNodeIds(),i=this.selectionHandler.getSelectedEdgeIds(),n=void 0;if(e.length>0){for(var o=0;o<e.length;o++)if(!0===this.body.nodes[e[o]].isCluster)return void alert(this.options.locales[this.options.locale].deleteClusterError||this.options.locales.en.deleteClusterError);\"function\"==typeof this.options.deleteNode&&(n=this.options.deleteNode)}else i.length>0&&\"function\"==typeof this.options.deleteEdge&&(n=this.options.deleteEdge);if(\"function\"==typeof n){var r={nodes:e,edges:i};if(2!==n.length)throw new Error(\"The function for delete does not support two arguments (data, callback)\");n(r,(function(e){null!=e&&\"delete\"===t.inMode?(t.body.data.edges.getDataSet().remove(e.edges),t.body.data.nodes.getDataSet().remove(e.nodes),t.body.emitter.emit(\"startSimulation\"),t.showManipulatorToolbar()):(t.body.emitter.emit(\"startSimulation\"),t.showManipulatorToolbar())}))}else this.body.data.edges.getDataSet().remove(i),this.body.data.nodes.getDataSet().remove(e),this.body.emitter.emit(\"startSimulation\"),this.showManipulatorToolbar()}},{key:\"_setup\",value:function(){!0===this.options.enabled?(this.guiEnabled=!0,this._createWrappers(),!1===this.editMode?this._createEditButton():this.showManipulatorToolbar()):(this._removeManipulationDOM(),this.guiEnabled=!1)}},{key:\"_createWrappers\",value:function(){var t,e;(void 0===this.manipulationDiv&&(this.manipulationDiv=document.createElement(\"div\"),this.manipulationDiv.className=\"vis-manipulation\",!0===this.editMode?this.manipulationDiv.style.display=\"block\":this.manipulationDiv.style.display=\"none\",this.canvas.frame.appendChild(this.manipulationDiv)),void 0===this.editModeDiv&&(this.editModeDiv=document.createElement(\"div\"),this.editModeDiv.className=\"vis-edit-mode\",!0===this.editMode?this.editModeDiv.style.display=\"none\":this.editModeDiv.style.display=\"block\",this.canvas.frame.appendChild(this.editModeDiv)),void 0===this.closeDiv)&&(this.closeDiv=document.createElement(\"button\"),this.closeDiv.className=\"vis-close\",this.closeDiv.setAttribute(\"aria-label\",null!==(t=null===(e=this.options.locales[this.options.locale])||void 0===e?void 0:e.close)&&void 0!==t?t:this.options.locales.en.close),this.closeDiv.style.display=this.manipulationDiv.style.display,this.canvas.frame.appendChild(this.closeDiv))}},{key:\"_getNewTargetNode\",value:function(t,e){var i=Ch({},this.options.controlNodeStyle);i.id=\"targetNode\"+Wc(),i.hidden=!1,i.physics=!1,i.x=t,i.y=e;var n=this.body.functions.createNode(i);return n.shape.boundingBox={left:t,right:t,top:e,bottom:e},n}},{key:\"_createEditButton\",value:function(){var t;this._clean(),this.manipulationDOM={},mh(this.editModeDiv);var e=this.options.locales[this.options.locale],i=this._createButton(\"editMode\",\"vis-edit vis-edit-mode\",e.edit||this.options.locales.en.edit);this.editModeDiv.appendChild(i),this._bindElementEvents(i,Vt(t=this.toggleEditMode).call(t,this))}},{key:\"_clean\",value:function(){this.inMode=!1,!0===this.guiEnabled&&(mh(this.editModeDiv),mh(this.manipulationDiv),this._cleanupDOMEventListeners()),this._cleanupTemporaryNodesAndEdges(),this._unbindTemporaryUIs(),this._unbindTemporaryEvents(),this.body.emitter.emit(\"restorePhysics\")}},{key:\"_cleanupDOMEventListeners\",value:function(){var t,e,i=xv(er(t=this._domEventListenerCleanupQueue).call(t,0));try{for(i.s();!(e=i.n()).done;){(0,e.value)()}}catch(t){i.e(t)}finally{i.f()}}},{key:\"_removeManipulationDOM\",value:function(){this._clean(),mh(this.manipulationDiv),mh(this.editModeDiv),mh(this.closeDiv),this.manipulationDiv&&this.canvas.frame.removeChild(this.manipulationDiv),this.editModeDiv&&this.canvas.frame.removeChild(this.editModeDiv),this.closeDiv&&this.canvas.frame.removeChild(this.closeDiv),this.manipulationDiv=void 0,this.editModeDiv=void 0,this.closeDiv=void 0}},{key:\"_createSeperator\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;this.manipulationDOM[\"seperatorLineDiv\"+t]=document.createElement(\"div\"),this.manipulationDOM[\"seperatorLineDiv\"+t].className=\"vis-separator-line\",this.manipulationDiv.appendChild(this.manipulationDOM[\"seperatorLineDiv\"+t])}},{key:\"_createAddNodeButton\",value:function(t){var e,i=this._createButton(\"addNode\",\"vis-add\",t.addNode||this.options.locales.en.addNode);this.manipulationDiv.appendChild(i),this._bindElementEvents(i,Vt(e=this.addNodeMode).call(e,this))}},{key:\"_createAddEdgeButton\",value:function(t){var e,i=this._createButton(\"addEdge\",\"vis-connect\",t.addEdge||this.options.locales.en.addEdge);this.manipulationDiv.appendChild(i),this._bindElementEvents(i,Vt(e=this.addEdgeMode).call(e,this))}},{key:\"_createEditNodeButton\",value:function(t){var e,i=this._createButton(\"editNode\",\"vis-edit\",t.editNode||this.options.locales.en.editNode);this.manipulationDiv.appendChild(i),this._bindElementEvents(i,Vt(e=this.editNode).call(e,this))}},{key:\"_createEditEdgeButton\",value:function(t){var e,i=this._createButton(\"editEdge\",\"vis-edit\",t.editEdge||this.options.locales.en.editEdge);this.manipulationDiv.appendChild(i),this._bindElementEvents(i,Vt(e=this.editEdgeMode).call(e,this))}},{key:\"_createDeleteButton\",value:function(t){var e,i;i=this.options.rtl?\"vis-delete-rtl\":\"vis-delete\";var n=this._createButton(\"delete\",i,t.del||this.options.locales.en.del);this.manipulationDiv.appendChild(n),this._bindElementEvents(n,Vt(e=this.deleteSelected).call(e,this))}},{key:\"_createBackButton\",value:function(t){var e,i=this._createButton(\"back\",\"vis-back\",t.back||this.options.locales.en.back);this.manipulationDiv.appendChild(i),this._bindElementEvents(i,Vt(e=this.showManipulatorToolbar).call(e,this))}},{key:\"_createButton\",value:function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:\"vis-label\";return this.manipulationDOM[t+\"Div\"]=document.createElement(\"button\"),this.manipulationDOM[t+\"Div\"].className=\"vis-button \"+e,this.manipulationDOM[t+\"Label\"]=document.createElement(\"div\"),this.manipulationDOM[t+\"Label\"].className=n,this.manipulationDOM[t+\"Label\"].innerText=i,this.manipulationDOM[t+\"Div\"].appendChild(this.manipulationDOM[t+\"Label\"]),this.manipulationDOM[t+\"Div\"]}},{key:\"_createDescription\",value:function(t){this.manipulationDOM.descriptionLabel=document.createElement(\"div\"),this.manipulationDOM.descriptionLabel.className=\"vis-none\",this.manipulationDOM.descriptionLabel.innerText=t,this.manipulationDiv.appendChild(this.manipulationDOM.descriptionLabel)}},{key:\"_temporaryBindEvent\",value:function(t,e){this.temporaryEventFunctions.push({event:t,boundFunction:e}),this.body.emitter.on(t,e)}},{key:\"_temporaryBindUI\",value:function(t,e){if(void 0===this.body.eventListeners[t])throw new Error(\"This UI function does not exist. Typo? You tried: \"+t+\" possible are: \"+es(zo(this.body.eventListeners)));this.temporaryUIFunctions[t]=this.body.eventListeners[t],this.body.eventListeners[t]=e}},{key:\"_unbindTemporaryUIs\",value:function(){for(var t in this.temporaryUIFunctions)Object.prototype.hasOwnProperty.call(this.temporaryUIFunctions,t)&&(this.body.eventListeners[t]=this.temporaryUIFunctions[t],delete this.temporaryUIFunctions[t]);this.temporaryUIFunctions={}}},{key:\"_unbindTemporaryEvents\",value:function(){for(var t=0;t<this.temporaryEventFunctions.length;t++){var e=this.temporaryEventFunctions[t].event,i=this.temporaryEventFunctions[t].boundFunction;this.body.emitter.off(e,i)}this.temporaryEventFunctions=[]}},{key:\"_bindElementEvents\",value:function(t,e){var i=new ll(t,{});_p(i,e),this._domEventListenerCleanupQueue.push((function(){i.destroy()}));var n=function(t){var i=t.keyCode,n=t.key;\"Enter\"!==n&&\" \"!==n&&13!==i&&32!==i||e()};t.addEventListener(\"keyup\",n,!1),this._domEventListenerCleanupQueue.push((function(){t.removeEventListener(\"keyup\",n,!1)}))}},{key:\"_cleanupTemporaryNodesAndEdges\",value:function(){for(var t=0;t<this.temporaryIds.edges.length;t++){var e;this.body.edges[this.temporaryIds.edges[t]].disconnect(),delete this.body.edges[this.temporaryIds.edges[t]];var i,n=Hr(e=this.body.edgeIndices).call(e,this.temporaryIds.edges[t]);if(-1!==n)er(i=this.body.edgeIndices).call(i,n,1)}for(var o=0;o<this.temporaryIds.nodes.length;o++){var r;delete this.body.nodes[this.temporaryIds.nodes[o]];var s,a=Hr(r=this.body.nodeIndices).call(r,this.temporaryIds.nodes[o]);if(-1!==a)er(s=this.body.nodeIndices).call(s,a,1)}this.temporaryIds={nodes:[],edges:[]}}},{key:\"_controlNodeTouch\",value:function(t){this.selectionHandler.unselectAll(),this.lastTouch=this.body.functions.getPointer(t.center),this.lastTouch.translation=At({},this.body.view.translation)}},{key:\"_controlNodeDragStart\",value:function(){var t=this.lastTouch,e=this.selectionHandler._pointerToPositionObject(t),i=this.body.nodes[this.temporaryIds.nodes[0]],n=this.body.nodes[this.temporaryIds.nodes[1]],o=this.body.edges[this.edgeBeingEditedId];this.selectedControlNode=void 0;var r=i.isOverlappingWith(e),s=n.isOverlappingWith(e);!0===r?(this.selectedControlNode=i,o.edgeType.from=i):!0===s&&(this.selectedControlNode=n,o.edgeType.to=n),void 0!==this.selectedControlNode&&this.selectionHandler.selectObject(this.selectedControlNode),this.body.emitter.emit(\"_redraw\")}},{key:\"_controlNodeDrag\",value:function(t){this.body.emitter.emit(\"disablePhysics\");var e=this.body.functions.getPointer(t.center),i=this.canvas.DOMtoCanvas(e);void 0!==this.selectedControlNode?(this.selectedControlNode.x=i.x,this.selectedControlNode.y=i.y):this.interactionHandler.onDrag(t),this.body.emitter.emit(\"_redraw\")}},{key:\"_controlNodeDragEnd\",value:function(t){var e=this.body.functions.getPointer(t.center),i=this.selectionHandler._pointerToPositionObject(e),n=this.body.edges[this.edgeBeingEditedId];if(void 0!==this.selectedControlNode){this.selectionHandler.unselectAll();for(var o=this.selectionHandler._getAllNodesOverlappingWith(i),r=void 0,s=o.length-1;s>=0;s--)if(o[s]!==this.selectedControlNode.id){r=this.body.nodes[o[s]];break}if(void 0!==r&&void 0!==this.selectedControlNode)if(!0===r.isCluster)alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError);else{var a=this.body.nodes[this.temporaryIds.nodes[0]];this.selectedControlNode.id===a.id?this._performEditEdge(r.id,n.to.id):this._performEditEdge(n.from.id,r.id)}else n.updateEdgeType(),this.body.emitter.emit(\"restorePhysics\");this.body.emitter.emit(\"_redraw\")}}},{key:\"_handleConnect\",value:function(t){if((new Date).valueOf()-this.touchTime>100){this.lastTouch=this.body.functions.getPointer(t.center),this.lastTouch.translation=At({},this.body.view.translation),this.interactionHandler.drag.pointer=this.lastTouch,this.interactionHandler.drag.translation=this.lastTouch.translation;var e=this.lastTouch,i=this.selectionHandler.getNodeAt(e);if(void 0!==i)if(!0===i.isCluster)alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError);else{var n=this._getNewTargetNode(i.x,i.y);this.body.nodes[n.id]=n,this.body.nodeIndices.push(n.id);var o=this.body.functions.createEdge({id:\"connectionEdge\"+Wc(),from:i.id,to:n.id,physics:!1,smooth:{enabled:!0,type:\"continuous\",roundness:.5}});this.body.edges[o.id]=o,this.body.edgeIndices.push(o.id),this.temporaryIds.nodes.push(n.id),this.temporaryIds.edges.push(o.id)}this.touchTime=(new Date).valueOf()}}},{key:\"_dragControlNode\",value:function(t){var e=this.body.functions.getPointer(t.center),i=this.selectionHandler._pointerToPositionObject(e),n=void 0;void 0!==this.temporaryIds.edges[0]&&(n=this.body.edges[this.temporaryIds.edges[0]].fromId);for(var o=this.selectionHandler._getAllNodesOverlappingWith(i),r=void 0,s=o.length-1;s>=0;s--){var a;if(-1===Hr(a=this.temporaryIds.nodes).call(a,o[s])){r=this.body.nodes[o[s]];break}}if(t.controlEdge={from:n,to:r?r.id:void 0},this.selectionHandler.generateClickEvent(\"controlNodeDragging\",t,e),void 0!==this.temporaryIds.nodes[0]){var h=this.body.nodes[this.temporaryIds.nodes[0]];h.x=this.canvas._XconvertDOMtoCanvas(e.x),h.y=this.canvas._YconvertDOMtoCanvas(e.y),this.body.emitter.emit(\"_redraw\")}else this.interactionHandler.onDrag(t)}},{key:\"_finishConnect\",value:function(t){var e=this.body.functions.getPointer(t.center),i=this.selectionHandler._pointerToPositionObject(e),n=void 0;void 0!==this.temporaryIds.edges[0]&&(n=this.body.edges[this.temporaryIds.edges[0]].fromId);for(var o=this.selectionHandler._getAllNodesOverlappingWith(i),r=void 0,s=o.length-1;s>=0;s--){var a;if(-1===Hr(a=this.temporaryIds.nodes).call(a,o[s])){r=this.body.nodes[o[s]];break}}this._cleanupTemporaryNodesAndEdges(),void 0!==r&&(!0===r.isCluster?alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError):void 0!==this.body.nodes[n]&&void 0!==this.body.nodes[r.id]&&this._performAddEdge(n,r.id)),t.controlEdge={from:n,to:r?r.id:void 0},this.selectionHandler.generateClickEvent(\"controlNodeDragEnd\",t,e),this.body.emitter.emit(\"_redraw\")}},{key:\"_dragStartEdge\",value:function(t){var e=this.lastTouch;this.selectionHandler.generateClickEvent(\"dragStart\",t,e,void 0,!0)}},{key:\"_performAddNode\",value:function(t){var e=this,i={id:Wc(),x:t.pointer.canvas.x,y:t.pointer.canvas.y,label:\"new\"};if(\"function\"==typeof this.options.addNode){if(2!==this.options.addNode.length)throw this.showManipulatorToolbar(),new Error(\"The function for add does not support two arguments (data,callback)\");this.options.addNode(i,(function(t){null!=t&&\"addNode\"===e.inMode&&e.body.data.nodes.getDataSet().add(t),e.showManipulatorToolbar()}))}else this.body.data.nodes.getDataSet().add(i),this.showManipulatorToolbar()}},{key:\"_performAddEdge\",value:function(t,e){var i=this,n={from:t,to:e};if(\"function\"==typeof this.options.addEdge){if(2!==this.options.addEdge.length)throw new Error(\"The function for connect does not support two arguments (data,callback)\");this.options.addEdge(n,(function(t){null!=t&&\"addEdge\"===i.inMode&&(i.body.data.edges.getDataSet().add(t),i.selectionHandler.unselectAll(),i.showManipulatorToolbar())}))}else this.body.data.edges.getDataSet().add(n),this.selectionHandler.unselectAll(),this.showManipulatorToolbar()}},{key:\"_performEditEdge\",value:function(t,e){var i=this,n={id:this.edgeBeingEditedId,from:t,to:e,label:this.body.data.edges.get(this.edgeBeingEditedId).label},o=this.options.editEdge;if(\"object\"===go(o)&&(o=o.editWithoutDrag),\"function\"==typeof o){if(2!==o.length)throw new Error(\"The function for edit does not support two arguments (data, callback)\");o(n,(function(t){null==t||\"editEdge\"!==i.inMode?(i.body.edges[n.id].updateEdgeType(),i.body.emitter.emit(\"_redraw\"),i.showManipulatorToolbar()):(i.body.data.edges.getDataSet().update(t),i.selectionHandler.unselectAll(),i.showManipulatorToolbar())}))}else this.body.data.edges.getDataSet().update(n),this.selectionHandler.unselectAll(),this.showManipulatorToolbar()}}]),t}(),Cv=\"string\",Sv=\"boolean\",Tv=\"number\",Mv=\"array\",Pv=\"object\",Dv=[\"arrow\",\"bar\",\"box\",\"circle\",\"crow\",\"curve\",\"diamond\",\"image\",\"inv_curve\",\"inv_triangle\",\"triangle\",\"vee\"],Iv={borderWidth:{number:Tv},borderWidthSelected:{number:Tv,undefined:\"undefined\"},brokenImage:{string:Cv,undefined:\"undefined\"},chosen:{label:{boolean:Sv,function:\"function\"},node:{boolean:Sv,function:\"function\"},__type__:{object:Pv,boolean:Sv}},color:{border:{string:Cv},background:{string:Cv},highlight:{border:{string:Cv},background:{string:Cv},__type__:{object:Pv,string:Cv}},hover:{border:{string:Cv},background:{string:Cv},__type__:{object:Pv,string:Cv}},__type__:{object:Pv,string:Cv}},opacity:{number:Tv,undefined:\"undefined\"},fixed:{x:{boolean:Sv},y:{boolean:Sv},__type__:{object:Pv,boolean:Sv}},font:{align:{string:Cv},color:{string:Cv},size:{number:Tv},face:{string:Cv},background:{string:Cv},strokeWidth:{number:Tv},strokeColor:{string:Cv},vadjust:{number:Tv},multi:{boolean:Sv,string:Cv},bold:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},boldital:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},ital:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},mono:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},__type__:{object:Pv,string:Cv}},group:{string:Cv,number:Tv,undefined:\"undefined\"},heightConstraint:{minimum:{number:Tv},valign:{string:Cv},__type__:{object:Pv,boolean:Sv,number:Tv}},hidden:{boolean:Sv},icon:{face:{string:Cv},code:{string:Cv},size:{number:Tv},color:{string:Cv},weight:{string:Cv,number:Tv},__type__:{object:Pv}},id:{string:Cv,number:Tv},image:{selected:{string:Cv,undefined:\"undefined\"},unselected:{string:Cv,undefined:\"undefined\"},__type__:{object:Pv,string:Cv}},imagePadding:{top:{number:Tv},right:{number:Tv},bottom:{number:Tv},left:{number:Tv},__type__:{object:Pv,number:Tv}},label:{string:Cv,undefined:\"undefined\"},labelHighlightBold:{boolean:Sv},level:{number:Tv,undefined:\"undefined\"},margin:{top:{number:Tv},right:{number:Tv},bottom:{number:Tv},left:{number:Tv},__type__:{object:Pv,number:Tv}},mass:{number:Tv},physics:{boolean:Sv},scaling:{min:{number:Tv},max:{number:Tv},label:{enabled:{boolean:Sv},min:{number:Tv},max:{number:Tv},maxVisible:{number:Tv},drawThreshold:{number:Tv},__type__:{object:Pv,boolean:Sv}},customScalingFunction:{function:\"function\"},__type__:{object:Pv}},shadow:{enabled:{boolean:Sv},color:{string:Cv},size:{number:Tv},x:{number:Tv},y:{number:Tv},__type__:{object:Pv,boolean:Sv}},shape:{string:[\"custom\",\"ellipse\",\"circle\",\"database\",\"box\",\"text\",\"image\",\"circularImage\",\"diamond\",\"dot\",\"star\",\"triangle\",\"triangleDown\",\"square\",\"icon\",\"hexagon\"]},ctxRenderer:{function:\"function\"},shapeProperties:{borderDashes:{boolean:Sv,array:Mv},borderRadius:{number:Tv},interpolation:{boolean:Sv},useImageSize:{boolean:Sv},useBorderWithImage:{boolean:Sv},coordinateOrigin:{string:[\"center\",\"top-left\"]},__type__:{object:Pv}},size:{number:Tv},title:{string:Cv,dom:\"dom\",undefined:\"undefined\"},value:{number:Tv,undefined:\"undefined\"},widthConstraint:{minimum:{number:Tv},maximum:{number:Tv},__type__:{object:Pv,boolean:Sv,number:Tv}},x:{number:Tv},y:{number:Tv},__type__:{object:Pv}},Bv={configure:{enabled:{boolean:Sv},filter:{boolean:Sv,string:Cv,array:Mv,function:\"function\"},container:{dom:\"dom\"},showButton:{boolean:Sv},__type__:{object:Pv,boolean:Sv,string:Cv,array:Mv,function:\"function\"}},edges:{arrows:{to:{enabled:{boolean:Sv},scaleFactor:{number:Tv},type:{string:Dv},imageHeight:{number:Tv},imageWidth:{number:Tv},src:{string:Cv},__type__:{object:Pv,boolean:Sv}},middle:{enabled:{boolean:Sv},scaleFactor:{number:Tv},type:{string:Dv},imageWidth:{number:Tv},imageHeight:{number:Tv},src:{string:Cv},__type__:{object:Pv,boolean:Sv}},from:{enabled:{boolean:Sv},scaleFactor:{number:Tv},type:{string:Dv},imageWidth:{number:Tv},imageHeight:{number:Tv},src:{string:Cv},__type__:{object:Pv,boolean:Sv}},__type__:{string:[\"from\",\"to\",\"middle\"],object:Pv}},endPointOffset:{from:{number:Tv},to:{number:Tv},__type__:{object:Pv,number:Tv}},arrowStrikethrough:{boolean:Sv},background:{enabled:{boolean:Sv},color:{string:Cv},size:{number:Tv},dashes:{boolean:Sv,array:Mv},__type__:{object:Pv,boolean:Sv}},chosen:{label:{boolean:Sv,function:\"function\"},edge:{boolean:Sv,function:\"function\"},__type__:{object:Pv,boolean:Sv}},color:{color:{string:Cv},highlight:{string:Cv},hover:{string:Cv},inherit:{string:[\"from\",\"to\",\"both\"],boolean:Sv},opacity:{number:Tv},__type__:{object:Pv,string:Cv}},dashes:{boolean:Sv,array:Mv},font:{color:{string:Cv},size:{number:Tv},face:{string:Cv},background:{string:Cv},strokeWidth:{number:Tv},strokeColor:{string:Cv},align:{string:[\"horizontal\",\"top\",\"middle\",\"bottom\"]},vadjust:{number:Tv},multi:{boolean:Sv,string:Cv},bold:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},boldital:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},ital:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},mono:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},__type__:{object:Pv,string:Cv}},hidden:{boolean:Sv},hoverWidth:{function:\"function\",number:Tv},label:{string:Cv,undefined:\"undefined\"},labelHighlightBold:{boolean:Sv},length:{number:Tv,undefined:\"undefined\"},physics:{boolean:Sv},scaling:{min:{number:Tv},max:{number:Tv},label:{enabled:{boolean:Sv},min:{number:Tv},max:{number:Tv},maxVisible:{number:Tv},drawThreshold:{number:Tv},__type__:{object:Pv,boolean:Sv}},customScalingFunction:{function:\"function\"},__type__:{object:Pv}},selectionWidth:{function:\"function\",number:Tv},selfReferenceSize:{number:Tv},selfReference:{size:{number:Tv},angle:{number:Tv},renderBehindTheNode:{boolean:Sv},__type__:{object:Pv}},shadow:{enabled:{boolean:Sv},color:{string:Cv},size:{number:Tv},x:{number:Tv},y:{number:Tv},__type__:{object:Pv,boolean:Sv}},smooth:{enabled:{boolean:Sv},type:{string:[\"dynamic\",\"continuous\",\"discrete\",\"diagonalCross\",\"straightCross\",\"horizontal\",\"vertical\",\"curvedCW\",\"curvedCCW\",\"cubicBezier\"]},roundness:{number:Tv},forceDirection:{string:[\"horizontal\",\"vertical\",\"none\"],boolean:Sv},__type__:{object:Pv,boolean:Sv}},title:{string:Cv,undefined:\"undefined\"},width:{number:Tv},widthConstraint:{maximum:{number:Tv},__type__:{object:Pv,boolean:Sv,number:Tv}},value:{number:Tv,undefined:\"undefined\"},__type__:{object:Pv}},groups:{useDefaultGroups:{boolean:Sv},__any__:Iv,__type__:{object:Pv}},interaction:{dragNodes:{boolean:Sv},dragView:{boolean:Sv},hideEdgesOnDrag:{boolean:Sv},hideEdgesOnZoom:{boolean:Sv},hideNodesOnDrag:{boolean:Sv},hover:{boolean:Sv},keyboard:{enabled:{boolean:Sv},speed:{x:{number:Tv},y:{number:Tv},zoom:{number:Tv},__type__:{object:Pv}},bindToWindow:{boolean:Sv},autoFocus:{boolean:Sv},__type__:{object:Pv,boolean:Sv}},multiselect:{boolean:Sv},navigationButtons:{boolean:Sv},selectable:{boolean:Sv},selectConnectedEdges:{boolean:Sv},hoverConnectedEdges:{boolean:Sv},tooltipDelay:{number:Tv},zoomView:{boolean:Sv},zoomSpeed:{number:Tv},__type__:{object:Pv}},layout:{randomSeed:{undefined:\"undefined\",number:Tv,string:Cv},improvedLayout:{boolean:Sv},clusterThreshold:{number:Tv},hierarchical:{enabled:{boolean:Sv},levelSeparation:{number:Tv},nodeSpacing:{number:Tv},treeSpacing:{number:Tv},blockShifting:{boolean:Sv},edgeMinimization:{boolean:Sv},parentCentralization:{boolean:Sv},direction:{string:[\"UD\",\"DU\",\"LR\",\"RL\"]},sortMethod:{string:[\"hubsize\",\"directed\"]},shakeTowards:{string:[\"leaves\",\"roots\"]},__type__:{object:Pv,boolean:Sv}},__type__:{object:Pv}},manipulation:{enabled:{boolean:Sv},initiallyActive:{boolean:Sv},addNode:{boolean:Sv,function:\"function\"},addEdge:{boolean:Sv,function:\"function\"},editNode:{function:\"function\"},editEdge:{editWithoutDrag:{function:\"function\"},__type__:{object:Pv,boolean:Sv,function:\"function\"}},deleteNode:{boolean:Sv,function:\"function\"},deleteEdge:{boolean:Sv,function:\"function\"},controlNodeStyle:Iv,__type__:{object:Pv,boolean:Sv}},nodes:Iv,physics:{enabled:{boolean:Sv},barnesHut:{theta:{number:Tv},gravitationalConstant:{number:Tv},centralGravity:{number:Tv},springLength:{number:Tv},springConstant:{number:Tv},damping:{number:Tv},avoidOverlap:{number:Tv},__type__:{object:Pv}},forceAtlas2Based:{theta:{number:Tv},gravitationalConstant:{number:Tv},centralGravity:{number:Tv},springLength:{number:Tv},springConstant:{number:Tv},damping:{number:Tv},avoidOverlap:{number:Tv},__type__:{object:Pv}},repulsion:{centralGravity:{number:Tv},springLength:{number:Tv},springConstant:{number:Tv},nodeDistance:{number:Tv},damping:{number:Tv},__type__:{object:Pv}},hierarchicalRepulsion:{centralGravity:{number:Tv},springLength:{number:Tv},springConstant:{number:Tv},nodeDistance:{number:Tv},damping:{number:Tv},avoidOverlap:{number:Tv},__type__:{object:Pv}},maxVelocity:{number:Tv},minVelocity:{number:Tv},solver:{string:[\"barnesHut\",\"repulsion\",\"hierarchicalRepulsion\",\"forceAtlas2Based\"]},stabilization:{enabled:{boolean:Sv},iterations:{number:Tv},updateInterval:{number:Tv},onlyDynamicEdges:{boolean:Sv},fit:{boolean:Sv},__type__:{object:Pv,boolean:Sv}},timestep:{number:Tv},adaptiveTimestep:{boolean:Sv},wind:{x:{number:Tv},y:{number:Tv},__type__:{object:Pv}},__type__:{object:Pv,boolean:Sv}},autoResize:{boolean:Sv},clickToUse:{boolean:Sv},locale:{string:Cv},locales:{__any__:{any:\"any\"},__type__:{object:Pv}},height:{string:Cv},width:{string:Cv},__type__:{object:Pv}},zv={nodes:{borderWidth:[1,0,10,1],borderWidthSelected:[2,0,10,1],color:{border:[\"color\",\"#2B7CE9\"],background:[\"color\",\"#97C2FC\"],highlight:{border:[\"color\",\"#2B7CE9\"],background:[\"color\",\"#D2E5FF\"]},hover:{border:[\"color\",\"#2B7CE9\"],background:[\"color\",\"#D2E5FF\"]}},opacity:[0,0,1,.1],fixed:{x:!1,y:!1},font:{color:[\"color\",\"#343434\"],size:[14,0,100,1],face:[\"arial\",\"verdana\",\"tahoma\"],background:[\"color\",\"none\"],strokeWidth:[0,0,50,1],strokeColor:[\"color\",\"#ffffff\"]},hidden:!1,labelHighlightBold:!0,physics:!0,scaling:{min:[10,0,200,1],max:[30,0,200,1],label:{enabled:!1,min:[14,0,200,1],max:[30,0,200,1],maxVisible:[30,0,200,1],drawThreshold:[5,0,20,1]}},shadow:{enabled:!1,color:\"rgba(0,0,0,0.5)\",size:[10,0,20,1],x:[5,-30,30,1],y:[5,-30,30,1]},shape:[\"ellipse\",\"box\",\"circle\",\"database\",\"diamond\",\"dot\",\"square\",\"star\",\"text\",\"triangle\",\"triangleDown\",\"hexagon\"],shapeProperties:{borderDashes:!1,borderRadius:[6,0,20,1],interpolation:!0,useImageSize:!1},size:[25,0,200,1]},edges:{arrows:{to:{enabled:!1,scaleFactor:[1,0,3,.05],type:\"arrow\"},middle:{enabled:!1,scaleFactor:[1,0,3,.05],type:\"arrow\"},from:{enabled:!1,scaleFactor:[1,0,3,.05],type:\"arrow\"}},endPointOffset:{from:[0,-10,10,1],to:[0,-10,10,1]},arrowStrikethrough:!0,color:{color:[\"color\",\"#848484\"],highlight:[\"color\",\"#848484\"],hover:[\"color\",\"#848484\"],inherit:[\"from\",\"to\",\"both\",!0,!1],opacity:[1,0,1,.05]},dashes:!1,font:{color:[\"color\",\"#343434\"],size:[14,0,100,1],face:[\"arial\",\"verdana\",\"tahoma\"],background:[\"color\",\"none\"],strokeWidth:[2,0,50,1],strokeColor:[\"color\",\"#ffffff\"],align:[\"horizontal\",\"top\",\"middle\",\"bottom\"]},hidden:!1,hoverWidth:[1.5,0,5,.1],labelHighlightBold:!0,physics:!0,scaling:{min:[1,0,100,1],max:[15,0,100,1],label:{enabled:!0,min:[14,0,200,1],max:[30,0,200,1],maxVisible:[30,0,200,1],drawThreshold:[5,0,20,1]}},selectionWidth:[1.5,0,5,.1],selfReferenceSize:[20,0,200,1],selfReference:{size:[20,0,200,1],angle:[Math.PI/2,-6*Math.PI,6*Math.PI,Math.PI/8],renderBehindTheNode:!0},shadow:{enabled:!1,color:\"rgba(0,0,0,0.5)\",size:[10,0,20,1],x:[5,-30,30,1],y:[5,-30,30,1]},smooth:{enabled:!0,type:[\"dynamic\",\"continuous\",\"discrete\",\"diagonalCross\",\"straightCross\",\"horizontal\",\"vertical\",\"curvedCW\",\"curvedCCW\",\"cubicBezier\"],forceDirection:[\"horizontal\",\"vertical\",\"none\"],roundness:[.5,0,1,.05]},width:[1,0,30,1]},layout:{hierarchical:{enabled:!1,levelSeparation:[150,20,500,5],nodeSpacing:[100,20,500,5],treeSpacing:[200,20,500,5],blockShifting:!0,edgeMinimization:!0,parentCentralization:!0,direction:[\"UD\",\"DU\",\"LR\",\"RL\"],sortMethod:[\"hubsize\",\"directed\"],shakeTowards:[\"leaves\",\"roots\"]}},interaction:{dragNodes:!0,dragView:!0,hideEdgesOnDrag:!1,hideEdgesOnZoom:!1,hideNodesOnDrag:!1,hover:!1,keyboard:{enabled:!1,speed:{x:[10,0,40,1],y:[10,0,40,1],zoom:[.02,0,.1,.005]},bindToWindow:!0,autoFocus:!0},multiselect:!1,navigationButtons:!1,selectable:!0,selectConnectedEdges:!0,hoverConnectedEdges:!0,tooltipDelay:[300,0,1e3,25],zoomView:!0,zoomSpeed:[1,.1,2,.1]},manipulation:{enabled:!1,initiallyActive:!1},physics:{enabled:!0,barnesHut:{theta:[.5,.1,1,.05],gravitationalConstant:[-2e3,-3e4,0,50],centralGravity:[.3,0,10,.05],springLength:[95,0,500,5],springConstant:[.04,0,1.2,.005],damping:[.09,0,1,.01],avoidOverlap:[0,0,1,.01]},forceAtlas2Based:{theta:[.5,.1,1,.05],gravitationalConstant:[-50,-500,0,1],centralGravity:[.01,0,1,.005],springLength:[95,0,500,5],springConstant:[.08,0,1.2,.005],damping:[.4,0,1,.01],avoidOverlap:[0,0,1,.01]},repulsion:{centralGravity:[.2,0,10,.05],springLength:[200,0,500,5],springConstant:[.05,0,1.2,.005],nodeDistance:[100,0,500,5],damping:[.09,0,1,.01]},hierarchicalRepulsion:{centralGravity:[.2,0,10,.05],springLength:[100,0,500,5],springConstant:[.01,0,1.2,.005],nodeDistance:[120,0,500,5],damping:[.09,0,1,.01],avoidOverlap:[0,0,1,.01]},maxVelocity:[50,0,150,1],minVelocity:[.1,.01,.5,.01],solver:[\"barnesHut\",\"forceAtlas2Based\",\"repulsion\",\"hierarchicalRepulsion\"],timestep:[.5,.01,1,.01],wind:{x:[0,-10,10,.1],y:[0,-10,10,.1]}}},Nv=function(t,e,i){var n;return!(!dr(t).call(t,\"physics\")||!dr(n=zv.physics.solver).call(n,e)||i.physics.solver===e||\"wind\"===e)},Av=Object.freeze({__proto__:null,configuratorHideOption:Nv,allOptions:Bv,configureOptions:zv}),Fv=function(){function t(){Nn(this,t)}return Fn(t,[{key:\"getDistances\",value:function(t,e,i){for(var n={},o=t.edges,r=0;r<e.length;r++){var s={};n[e[r]]=s;for(var a=0;a<e.length;a++)s[e[a]]=r==a?0:1e9}for(var h=0;h<i.length;h++){var l=o[i[h]];!0===l.connected&&void 0!==n[l.fromId]&&void 0!==n[l.toId]&&(n[l.fromId][l.toId]=1,n[l.toId][l.fromId]=1)}for(var d=e.length,c=0;c<d;c++)for(var u=e[c],f=n[u],p=0;p<d-1;p++)for(var v=e[p],g=n[v],y=p+1;y<d;y++){var m=e[y],b=n[m],w=Math.min(g[m],g[u]+f[m]);g[m]=w,b[v]=w}return n}}]),t}(),jv=function(){function t(e,i,n){Nn(this,t),this.body=e,this.springLength=i,this.springConstant=n,this.distanceSolver=new Fv}return Fn(t,[{key:\"setOptions\",value:function(t){t&&(t.springLength&&(this.springLength=t.springLength),t.springConstant&&(this.springConstant=t.springConstant))}},{key:\"solve\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=this.distanceSolver.getDistances(this.body,t,e);this._createL_matrix(n),this._createK_matrix(n),this._createE_matrix();for(var o=.01,r=1,s=0,a=Math.max(1e3,Math.min(10*this.body.nodeIndices.length,6e3)),h=5,l=1e9,d=0,c=0,u=0,f=0,p=0;l>o&&s<a;){s+=1;var v=this._getHighestEnergyNode(i),g=uo(v,4);for(d=g[0],l=g[1],c=g[2],u=g[3],f=l,p=0;f>r&&p<h;){p+=1,this._moveNode(d,c,u);var y=this._getEnergy(d),m=uo(y,3);f=m[0],c=m[1],u=m[2]}}}},{key:\"_getHighestEnergyNode\",value:function(t){for(var e=this.body.nodeIndices,i=this.body.nodes,n=0,o=e[0],r=0,s=0,a=0;a<e.length;a++){var h=e[a];if(!0!==i[h].predefinedPosition||!0===i[h].isCluster&&!0===t||!0!==i[h].options.fixed.x||!0!==i[h].options.fixed.y){var l=this._getEnergy(h),d=uo(l,3),c=d[0],u=d[1],f=d[2];n<c&&(n=c,o=h,r=u,s=f)}}return[o,n,r,s]}},{key:\"_getEnergy\",value:function(t){var e=uo(this.E_sums[t],2),i=e[0],n=e[1];return[Math.sqrt(Math.pow(i,2)+Math.pow(n,2)),i,n]}},{key:\"_moveNode\",value:function(t,e,i){for(var n=this.body.nodeIndices,o=this.body.nodes,r=0,s=0,a=0,h=o[t].x,l=o[t].y,d=this.K_matrix[t],c=this.L_matrix[t],u=0;u<n.length;u++){var f=n[u];if(f!==t){var p=o[f].x,v=o[f].y,g=d[f],y=c[f],m=1/Math.pow(Math.pow(h-p,2)+Math.pow(l-v,2),1.5);r+=g*(1-y*Math.pow(l-v,2)*m),s+=g*(y*(h-p)*(l-v)*m),a+=g*(1-y*Math.pow(h-p,2)*m)}}var b=(e/r+i/s)/(s/r-a/s),w=-(s*b+e)/r;o[t].x+=w,o[t].y+=b,this._updateE_matrix(t)}},{key:\"_createL_matrix\",value:function(t){var e=this.body.nodeIndices,i=this.springLength;this.L_matrix=[];for(var n=0;n<e.length;n++){this.L_matrix[e[n]]={};for(var o=0;o<e.length;o++)this.L_matrix[e[n]][e[o]]=i*t[e[n]][e[o]]}}},{key:\"_createK_matrix\",value:function(t){var e=this.body.nodeIndices,i=this.springConstant;this.K_matrix=[];for(var n=0;n<e.length;n++){this.K_matrix[e[n]]={};for(var o=0;o<e.length;o++)this.K_matrix[e[n]][e[o]]=i*Math.pow(t[e[n]][e[o]],-2)}}},{key:\"_createE_matrix\",value:function(){var t=this.body.nodeIndices,e=this.body.nodes;this.E_matrix={},this.E_sums={};for(var i=0;i<t.length;i++)this.E_matrix[t[i]]=[];for(var n=0;n<t.length;n++){for(var o=t[n],r=e[o].x,s=e[o].y,a=0,h=0,l=n;l<t.length;l++){var d=t[l];if(d!==o){var c=e[d].x,u=e[d].y,f=1/Math.sqrt(Math.pow(r-c,2)+Math.pow(s-u,2));this.E_matrix[o][l]=[this.K_matrix[o][d]*(r-c-this.L_matrix[o][d]*(r-c)*f),this.K_matrix[o][d]*(s-u-this.L_matrix[o][d]*(s-u)*f)],this.E_matrix[d][n]=this.E_matrix[o][l],a+=this.E_matrix[o][l][0],h+=this.E_matrix[o][l][1]}}this.E_sums[o]=[a,h]}}},{key:\"_updateE_matrix\",value:function(t){for(var e=this.body.nodeIndices,i=this.body.nodes,n=this.E_matrix[t],o=this.K_matrix[t],r=this.L_matrix[t],s=i[t].x,a=i[t].y,h=0,l=0,d=0;d<e.length;d++){var c=e[d];if(c!==t){var u=n[d],f=u[0],p=u[1],v=i[c].x,g=i[c].y,y=1/Math.sqrt(Math.pow(s-v,2)+Math.pow(a-g,2)),m=o[c]*(s-v-r[c]*(s-v)*y),b=o[c]*(a-g-r[c]*(a-g)*y);n[d]=[m,b],h+=m,l+=b;var w=this.E_sums[c];w[0]+=m-f,w[1]+=b-p}}this.E_sums[t]=[h,l]}}]),t}();function Rv(t,e,i){var n,o,r,s,a=this;if(!(this instanceof Rv))throw new SyntaxError(\"Constructor must be called with the new operator\");this.options={},this.defaultOptions={locale:\"en\",locales:Kl,clickToUse:!1},At(this.options,this.defaultOptions),this.body={container:t,nodes:{},nodeIndices:[],edges:{},edgeIndices:[],emitter:{on:Vt(n=this.on).call(n,this),off:Vt(o=this.off).call(o,this),emit:Vt(r=this.emit).call(r,this),once:Vt(s=this.once).call(s,this)},eventListeners:{onTap:function(){},onTouch:function(){},onDoubleTap:function(){},onHold:function(){},onDragStart:function(){},onDrag:function(){},onDragEnd:function(){},onMouseWheel:function(){},onPinch:function(){},onMouseMove:function(){},onRelease:function(){},onContext:function(){}},data:{nodes:null,edges:null},functions:{createNode:function(){},createEdge:function(){},getPointer:function(){}},modules:{},view:{scale:1,translation:{x:0,y:0}},selectionBox:{show:!1,position:{start:{x:0,y:0},end:{x:0,y:0}}}},this.bindEventListeners(),this.images=new Zl((function(){return a.body.emitter.emit(\"_requestRedraw\")})),this.groups=new gd,this.canvas=new Ep(this.body),this.selectionHandler=new ov(this.body,this.canvas),this.interactionHandler=new Ip(this.body,this.canvas,this.selectionHandler),this.view=new Cp(this.body,this.canvas),this.renderer=new wp(this.body,this.canvas),this.physics=new fp(this.body),this.layoutEngine=new _v(this.body),this.clustering=new yp(this.body),this.manipulation=new Ov(this.body,this.canvas,this.selectionHandler,this.interactionHandler),this.nodesHandler=new pf(this.body,this.images,this.groups,this.layoutEngine),this.edgesHandler=new ip(this.body,this.images,this.groups),this.body.modules.kamadaKawai=new jv(this.body,150,.05),this.body.modules.clustering=this.clustering,this.canvas._create(),this.setOptions(i),this.setData(e)}function Lv(t){for(var e in t)Object.prototype.hasOwnProperty.call(t,e)&&(t[e].redundant=t[e].used,t[e].used=[])}function Hv(t){for(var e in t)if(Object.prototype.hasOwnProperty.call(t,e)&&t[e].redundant){for(var i=0;i<t[e].redundant.length;i++)t[e].redundant[i].parentNode.removeChild(t[e].redundant[i]);t[e].redundant=[]}}function Wv(t,e,i){var n;return Object.prototype.hasOwnProperty.call(e,t)?e[t].redundant.length>0?(n=e[t].redundant[0],e[t].redundant.shift()):(n=document.createElementNS(\"http://www.w3.org/2000/svg\",t),i.appendChild(n)):(n=document.createElementNS(\"http://www.w3.org/2000/svg\",t),e[t]={used:[],redundant:[]},i.appendChild(n)),e[t].used.push(n),n}Zt(Rv.prototype),Rv.prototype.setOptions=function(t){var e=this;if(null===t&&(t=void 0),void 0!==t){!0===ul.validate(t,Bv)&&console.error(\"%cErrors have been found in the supplied options object.\",cl);if(Eh([\"locale\",\"locales\",\"clickToUse\"],this.options,t),void 0!==t.locale&&(t.locale=function(t,e){try{var i=e.split(/[-_ /]/,2),n=uo(i,2),o=n[0],r=n[1],s=null!=o?o.toLowerCase():null,a=null!=r?r.toUpperCase():null;if(s&&a){var h,l=s+\"-\"+a;if(Object.prototype.hasOwnProperty.call(t,l))return l;console.warn(Eo(h=\"Unknown variant \".concat(a,\" of language \")).call(h,s,\".\"))}if(s){var d=s;if(Object.prototype.hasOwnProperty.call(t,d))return d;console.warn(\"Unknown language \".concat(s))}return console.warn(\"Unknown locale \".concat(e,\", falling back to English.\")),\"en\"}catch(t){return console.error(t),console.warn(\"Unexpected error while normalizing locale \".concat(e,\", falling back to English.\")),\"en\"}}(t.locales||this.options.locales,t.locale)),t=this.layoutEngine.setOptions(t.layout,t),this.canvas.setOptions(t),this.groups.setOptions(t.groups),this.nodesHandler.setOptions(t.nodes),this.edgesHandler.setOptions(t.edges),this.physics.setOptions(t.physics),this.manipulation.setOptions(t.manipulation,t,this.options),this.interactionHandler.setOptions(t.interaction),this.renderer.setOptions(t.interaction),this.selectionHandler.setOptions(t.interaction),void 0!==t.groups&&this.body.emitter.emit(\"refreshNodes\"),\"configure\"in t&&(this.configurator||(this.configurator=new hl(this,this.body.container,zv,this.canvas.pixelRatio,Nv)),this.configurator.setOptions(t.configure)),this.configurator&&!0===this.configurator.options.enabled){var i={nodes:{},edges:{},layout:{},interaction:{},manipulation:{},physics:{},global:{}};Ch(i.nodes,this.nodesHandler.options),Ch(i.edges,this.edgesHandler.options),Ch(i.layout,this.layoutEngine.options),Ch(i.interaction,this.selectionHandler.options),Ch(i.interaction,this.renderer.options),Ch(i.interaction,this.interactionHandler.options),Ch(i.manipulation,this.manipulation.options),Ch(i.physics,this.physics.options),Ch(i.global,this.canvas.options),Ch(i.global,this.options),this.configurator.setModuleOptions(i)}void 0!==t.clickToUse?!0===t.clickToUse?void 0===this.activator&&(this.activator=new sl(this.canvas.frame),this.activator.on(\"change\",(function(){e.body.emitter.emit(\"activate\")}))):(void 0!==this.activator&&(this.activator.destroy(),delete this.activator),this.body.emitter.emit(\"activate\")):this.body.emitter.emit(\"activate\"),this.canvas.setSize(),this.body.emitter.emit(\"startSimulation\")}},Rv.prototype._updateVisibleIndices=function(){var t=this.body.nodes,e=this.body.edges;for(var i in this.body.nodeIndices=[],this.body.edgeIndices=[],t)Object.prototype.hasOwnProperty.call(t,i)&&(this.clustering._isClusteredNode(i)||!1!==t[i].options.hidden||this.body.nodeIndices.push(t[i].id));for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){var o=e[n],r=t[o.fromId],s=t[o.toId],a=void 0!==r&&void 0!==s;!this.clustering._isClusteredEdge(n)&&!1===o.options.hidden&&a&&!1===r.options.hidden&&!1===s.options.hidden&&this.body.edgeIndices.push(o.id)}},Rv.prototype.bindEventListeners=function(){var t=this;this.body.emitter.on(\"_dataChanged\",(function(){t.edgesHandler._updateState(),t.body.emitter.emit(\"_dataUpdated\")})),this.body.emitter.on(\"_dataUpdated\",(function(){t.clustering._updateState(),t._updateVisibleIndices(),t._updateValueRange(t.body.nodes),t._updateValueRange(t.body.edges),t.body.emitter.emit(\"startSimulation\"),t.body.emitter.emit(\"_requestRedraw\")}))},Rv.prototype.setData=function(t){if(this.body.emitter.emit(\"resetPhysics\"),this.body.emitter.emit(\"_resetData\"),this.selectionHandler.unselectAll(),t&&t.dot&&(t.nodes||t.edges))throw new SyntaxError('Data must contain either parameter \"dot\" or  parameter pair \"nodes\" and \"edges\", but not both.');if(this.setOptions(t&&t.options),t&&t.dot){console.warn(\"The dot property has been deprecated. Please use the static convertDot method to convert DOT into vis.network format and use the normal data format with nodes and edges. This converter is used like this: var data = vis.network.convertDot(dotString);\");var e=Ul(t.dot);this.setData(e)}else if(t&&t.gephi){console.warn(\"The gephi property has been deprecated. Please use the static convertGephi method to convert gephi into vis.network format and use the normal data format with nodes and edges. This converter is used like this: var data = vis.network.convertGephi(gephiJson);\");var i=Xl(t.gephi);this.setData(i)}else this.nodesHandler.setData(t&&t.nodes,!0),this.edgesHandler.setData(t&&t.edges,!0),this.body.emitter.emit(\"_dataChanged\"),this.body.emitter.emit(\"_dataLoaded\"),this.body.emitter.emit(\"initPhysics\")},Rv.prototype.destroy=function(){for(var t in this.body.emitter.emit(\"destroy\"),this.body.emitter.off(),this.off(),delete this.groups,delete this.canvas,delete this.selectionHandler,delete this.interactionHandler,delete this.view,delete this.renderer,delete this.physics,delete this.layoutEngine,delete this.clustering,delete this.manipulation,delete this.nodesHandler,delete this.edgesHandler,delete this.configurator,delete this.images,this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,t)&&delete this.body.nodes[t];for(var e in this.body.edges)Object.prototype.hasOwnProperty.call(this.body.edges,e)&&delete this.body.edges[e];mh(this.body.container)},Rv.prototype._updateValueRange=function(t){var e,i=void 0,n=void 0,o=0;for(e in t)if(Object.prototype.hasOwnProperty.call(t,e)){var r=t[e].getValue();void 0!==r&&(i=void 0===i?r:Math.min(r,i),n=void 0===n?r:Math.max(r,n),o+=r)}if(void 0!==i&&void 0!==n)for(e in t)Object.prototype.hasOwnProperty.call(t,e)&&t[e].setValueRange(i,n,o)},Rv.prototype.isActive=function(){return!this.activator||this.activator.active},Rv.prototype.setSize=function(){return this.canvas.setSize.apply(this.canvas,arguments)},Rv.prototype.canvasToDOM=function(){return this.canvas.canvasToDOM.apply(this.canvas,arguments)},Rv.prototype.DOMtoCanvas=function(){return this.canvas.DOMtoCanvas.apply(this.canvas,arguments)},Rv.prototype.findNode=function(){return this.clustering.findNode.apply(this.clustering,arguments)},Rv.prototype.isCluster=function(){return this.clustering.isCluster.apply(this.clustering,arguments)},Rv.prototype.openCluster=function(){return this.clustering.openCluster.apply(this.clustering,arguments)},Rv.prototype.cluster=function(){return this.clustering.cluster.apply(this.clustering,arguments)},Rv.prototype.getNodesInCluster=function(){return this.clustering.getNodesInCluster.apply(this.clustering,arguments)},Rv.prototype.clusterByConnection=function(){return this.clustering.clusterByConnection.apply(this.clustering,arguments)},Rv.prototype.clusterByHubsize=function(){return this.clustering.clusterByHubsize.apply(this.clustering,arguments)},Rv.prototype.updateClusteredNode=function(){return this.clustering.updateClusteredNode.apply(this.clustering,arguments)},Rv.prototype.getClusteredEdges=function(){return this.clustering.getClusteredEdges.apply(this.clustering,arguments)},Rv.prototype.getBaseEdge=function(){return this.clustering.getBaseEdge.apply(this.clustering,arguments)},Rv.prototype.getBaseEdges=function(){return this.clustering.getBaseEdges.apply(this.clustering,arguments)},Rv.prototype.updateEdge=function(){return this.clustering.updateEdge.apply(this.clustering,arguments)},Rv.prototype.clusterOutliers=function(){return this.clustering.clusterOutliers.apply(this.clustering,arguments)},Rv.prototype.getSeed=function(){return this.layoutEngine.getSeed.apply(this.layoutEngine,arguments)},Rv.prototype.enableEditMode=function(){return this.manipulation.enableEditMode.apply(this.manipulation,arguments)},Rv.prototype.disableEditMode=function(){return this.manipulation.disableEditMode.apply(this.manipulation,arguments)},Rv.prototype.addNodeMode=function(){return this.manipulation.addNodeMode.apply(this.manipulation,arguments)},Rv.prototype.editNode=function(){return this.manipulation.editNode.apply(this.manipulation,arguments)},Rv.prototype.editNodeMode=function(){return console.warn(\"Deprecated: Please use editNode instead of editNodeMode.\"),this.manipulation.editNode.apply(this.manipulation,arguments)},Rv.prototype.addEdgeMode=function(){return this.manipulation.addEdgeMode.apply(this.manipulation,arguments)},Rv.prototype.editEdgeMode=function(){return this.manipulation.editEdgeMode.apply(this.manipulation,arguments)},Rv.prototype.deleteSelected=function(){return this.manipulation.deleteSelected.apply(this.manipulation,arguments)},Rv.prototype.getPositions=function(){return this.nodesHandler.getPositions.apply(this.nodesHandler,arguments)},Rv.prototype.getPosition=function(){return this.nodesHandler.getPosition.apply(this.nodesHandler,arguments)},Rv.prototype.storePositions=function(){return this.nodesHandler.storePositions.apply(this.nodesHandler,arguments)},Rv.prototype.moveNode=function(){return this.nodesHandler.moveNode.apply(this.nodesHandler,arguments)},Rv.prototype.getBoundingBox=function(){return this.nodesHandler.getBoundingBox.apply(this.nodesHandler,arguments)},Rv.prototype.getConnectedNodes=function(t){return void 0!==this.body.nodes[t]?this.nodesHandler.getConnectedNodes.apply(this.nodesHandler,arguments):this.edgesHandler.getConnectedNodes.apply(this.edgesHandler,arguments)},Rv.prototype.getConnectedEdges=function(){return this.nodesHandler.getConnectedEdges.apply(this.nodesHandler,arguments)},Rv.prototype.startSimulation=function(){return this.physics.startSimulation.apply(this.physics,arguments)},Rv.prototype.stopSimulation=function(){return this.physics.stopSimulation.apply(this.physics,arguments)},Rv.prototype.stabilize=function(){return this.physics.stabilize.apply(this.physics,arguments)},Rv.prototype.getSelection=function(){return this.selectionHandler.getSelection.apply(this.selectionHandler,arguments)},Rv.prototype.setSelection=function(){return this.selectionHandler.setSelection.apply(this.selectionHandler,arguments)},Rv.prototype.getSelectedNodes=function(){return this.selectionHandler.getSelectedNodeIds.apply(this.selectionHandler,arguments)},Rv.prototype.getSelectedEdges=function(){return this.selectionHandler.getSelectedEdgeIds.apply(this.selectionHandler,arguments)},Rv.prototype.getNodeAt=function(){var t=this.selectionHandler.getNodeAt.apply(this.selectionHandler,arguments);return void 0!==t&&void 0!==t.id?t.id:t},Rv.prototype.getEdgeAt=function(){var t=this.selectionHandler.getEdgeAt.apply(this.selectionHandler,arguments);return void 0!==t&&void 0!==t.id?t.id:t},Rv.prototype.selectNodes=function(){return this.selectionHandler.selectNodes.apply(this.selectionHandler,arguments)},Rv.prototype.selectEdges=function(){return this.selectionHandler.selectEdges.apply(this.selectionHandler,arguments)},Rv.prototype.unselectAll=function(){this.selectionHandler.unselectAll.apply(this.selectionHandler,arguments),this.selectionHandler.commitWithoutEmitting.apply(this.selectionHandler),this.redraw()},Rv.prototype.redraw=function(){return this.renderer.redraw.apply(this.renderer,arguments)},Rv.prototype.getScale=function(){return this.view.getScale.apply(this.view,arguments)},Rv.prototype.getViewPosition=function(){return this.view.getViewPosition.apply(this.view,arguments)},Rv.prototype.fit=function(){return this.view.fit.apply(this.view,arguments)},Rv.prototype.moveTo=function(){return this.view.moveTo.apply(this.view,arguments)},Rv.prototype.focus=function(){return this.view.focus.apply(this.view,arguments)},Rv.prototype.releaseNode=function(){return this.view.releaseNode.apply(this.view,arguments)},Rv.prototype.getOptionsFromConfigurator=function(){var t={};return this.configurator&&(t=this.configurator.getOptions.apply(this.configurator)),t};var qv=Object.freeze({__proto__:null,prepareElements:Lv,cleanupElements:Hv,resetElements:function(t){Lv(t),Hv(t),Lv(t)},getSVGElement:Wv,getDOMElement:function(t,e,i,n){var o;return Object.prototype.hasOwnProperty.call(e,t)?e[t].redundant.length>0?(o=e[t].redundant[0],e[t].redundant.shift()):(o=document.createElement(t),void 0!==n?i.insertBefore(o,n):i.appendChild(o)):(o=document.createElement(t),e[t]={used:[],redundant:[]},void 0!==n?i.insertBefore(o,n):i.appendChild(o)),e[t].used.push(o),o},drawPoint:function(t,e,i,n,o,r){var s;if(\"circle\"==i.style?((s=Wv(\"circle\",n,o)).setAttributeNS(null,\"cx\",t),s.setAttributeNS(null,\"cy\",e),s.setAttributeNS(null,\"r\",.5*i.size)):((s=Wv(\"rect\",n,o)).setAttributeNS(null,\"x\",t-.5*i.size),s.setAttributeNS(null,\"y\",e-.5*i.size),s.setAttributeNS(null,\"width\",i.size),s.setAttributeNS(null,\"height\",i.size)),void 0!==i.styles&&s.setAttributeNS(null,\"style\",i.styles),s.setAttributeNS(null,\"class\",i.className+\" vis-point\"),r){var a=Wv(\"text\",n,o);r.xOffset&&(t+=r.xOffset),r.yOffset&&(e+=r.yOffset),r.content&&(a.textContent=r.content),r.className&&a.setAttributeNS(null,\"class\",r.className+\" vis-label\"),a.setAttributeNS(null,\"x\",t),a.setAttributeNS(null,\"y\",e)}return s},drawBar:function(t,e,i,n,o,r,s,a){if(0!=n){n<0&&(e-=n*=-1);var h=Wv(\"rect\",r,s);h.setAttributeNS(null,\"x\",t-.5*i),h.setAttributeNS(null,\"y\",e),h.setAttributeNS(null,\"width\",i),h.setAttributeNS(null,\"height\",n),h.setAttributeNS(null,\"class\",o),a&&h.setAttributeNS(null,\"style\",a)}}}),Vv={Images:Zl,dotparser:Yl,gephiParser:Gl,allOptions:Av,convertDot:Ul,convertGephi:Xl},Uv=Object.freeze({__proto__:null,network:Vv,DOMutil:qv,util:fl,data:ou,Hammer:ll,keycharm:Tp,DataSet:tu,DataView:eu,Queue:Zc,Network:Rv});t.DOMutil=qv,t.DataSet=tu,t.DataView=eu,t.Hammer=ll,t.Network=Rv,t.Queue=Zc,t.data=ou,t.default=Uv,t.keycharm=Tp,t.network=Vv,t.util=fl,Object.defineProperty(t,\"__esModule\",{value:!0})}\n",
       "  // ));\n",
       "  // # sourceMappingURL=vis-network.min.js.map\n",
       "\n",
       "  );\n",
       "}\n",
       "\n",
       "\n",
       "    require([\"gravis-vis-network\"], function(vis){\n",
       "      // Strict mode: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Strict_mode\n",
       "      \"use strict\";\n",
       "\n",
       "      const state = {\n",
       "        manager:{\n",
       "          // Data generation process: 1) Fetch state.rawData, 2) derive state.parsedData, 3) derive state.shownData\n",
       "\n",
       "          // 1) Fetch state.rawData\n",
       "          fetchRawDataFromTemplating(){\n",
       "            state.rawData = [{\"directed\": true, \"metadata\": {\"node_color\": \"black\", \"node_opacity\": 1, \"node_size\": 10, \"node_shape\": \"circle\", \"node_border_color\": \"black\", \"node_border_size\": 1, \"node_label_color\": \"black\", \"node_label_size\": 10, \"edge_color\": \"#999\", \"edge_opacity\": 1, \"edge_size\": 2, \"edge_shape\": \"circle\", \"edge_border_color\": \"#999\", \"edge_border_size\": 1, \"edge_label_color\": \"black\", \"edge_label_size\": 10, \"arrow_size\": 4, \"arrow_color\": \"#999\"}, \"nodes\": {\"r1MhwkDR9RGGNg07nIf5BQ\": {\"label\": \"Tom\", \"metadata\": {\"focus\": \"target\", \"label\": \"Tom\", \"color\": \"#f07f65\", \"size\": 20}}, \"AOWmwJayFKAjAmmIlk8yOQ\": {\"label\": \"Family Doe\", \"metadata\": {\"focus\": \"target\", \"label\": \"Family Doe\", \"color\": \"#f07f65\", \"size\": 20}}, \"dQIuZHbv+9dqtJ8fO/8rnA\": {\"label\": \"ACME Bank\", \"metadata\": {\"focus\": \"source\", \"label\": \"ACME Bank\", \"color\": \"#edb551\", \"size\": 20}}, \"JIMOIAq9XU0WsAXPLHQRBg\": {\"label\": \"MyBank\", \"metadata\": {\"label\": \"MyBank\", \"color\": \"#92979c\", \"size\": 10}}, \"gb8VMWs5dsc6cteL2DOYCA\": {\"label\": \"ElysiumTech Solutions\", \"metadata\": {\"label\": \"ElysiumTech Solutions\", \"color\": \"#92979c\", \"size\": 10}}, \"nToxQTWUkZ4gv4iAItXSKw\": {\"label\": \"NovaCore Innovations\", \"metadata\": {\"label\": \"NovaCore Innovations\", \"color\": \"#92979c\", \"size\": 10}}, \"DuOTZpKAvOFRrhddS9d3NA\": {\"label\": \"InfinityForge Technologies\", \"metadata\": {\"label\": \"InfinityForge Technologies\", \"color\": \"#92979c\", \"size\": 10}}, \"YlVLHV5wCROpp3hW3nbNOQ\": {\"label\": \"PhoenixRise Ventures\", \"metadata\": {\"label\": \"PhoenixRise Ventures\", \"color\": \"#92979c\", \"size\": 10}}, \"MYXtcytg7uj+rAyOjYhBQA\": {\"label\": \"People Bank\", \"metadata\": {\"label\": \"People Bank\", \"color\": \"#92979c\", \"size\": 10}}, \"uVH0cGqXVe7/eDYLCwW6XQ\": {\"label\": \"NebulaTech Solutions\", \"metadata\": {\"label\": \"NebulaTech Solutions\", \"color\": \"#92979c\", \"size\": 10}}, \"249BMZupWCFjqM7zue27iQ\": {\"label\": \"Quantum Dynamics Innovations\", \"metadata\": {\"label\": \"Quantum Dynamics Innovations\", \"color\": \"#92979c\", \"size\": 10}}, \"77IlFbWAmT0DYKSlTSVLjg\": {\"label\": \"CyberNexus Systems\", \"metadata\": {\"label\": \"CyberNexus Systems\", \"color\": \"#92979c\", \"size\": 10}}, \"cW6S8m7PKwayYyrUFQOwnA\": {\"label\": \"Mary\", \"metadata\": {\"label\": \"Mary\", \"color\": \"#92979c\", \"size\": 10}}, \"IWkBDvnHtyJq/z5hVPdgnQ\": {\"label\": \"DreamScape Enterprises\", \"metadata\": {\"label\": \"DreamScape Enterprises\", \"color\": \"#92979c\", \"size\": 10}}, \"B2ENslGgWUXwghQigOV/ng\": {\"label\": \"StellarSphere Enterprises\", \"metadata\": {\"label\": \"StellarSphere Enterprises\", \"color\": \"#92979c\", \"size\": 10}}, \"hZwSJYPIqnQL6SP8CAMJog\": {\"label\": \"CelestialWave Industries\", \"metadata\": {\"label\": \"CelestialWave Industries\", \"color\": \"#92979c\", \"size\": 10}}, \"sAvunE8/tDW5b4Q7IVNIwg\": {\"label\": \"Anna\", \"metadata\": {\"label\": \"Anna\", \"color\": \"#92979c\", \"size\": 10}}, \"Lh2x5E3rMHHKwYTA4a3yyQ\": {\"label\": \"ACME Trust\", \"metadata\": {\"label\": \"ACME Trust\", \"color\": \"#92979c\", \"size\": 10}}, \"sIMZM6956KBcjN/vk1rXzA\": {\"label\": \"Bob\", \"metadata\": {\"label\": \"Bob\", \"color\": \"#92979c\", \"size\": 10}}}, \"edges\": [{\"source\": \"AOWmwJayFKAjAmmIlk8yOQ\", \"target\": \"r1MhwkDR9RGGNg07nIf5BQ\", \"metadata\": {\"focus\": \"target\", \"color\": \"#f07f65\", \"size\": 5}}, {\"source\": \"AOWmwJayFKAjAmmIlk8yOQ\", \"target\": \"cW6S8m7PKwayYyrUFQOwnA\", \"metadata\": {\"focus\": \"target\", \"color\": \"#f07f65\", \"size\": 5}}, {\"source\": \"AOWmwJayFKAjAmmIlk8yOQ\", \"target\": \"sAvunE8/tDW5b4Q7IVNIwg\", \"metadata\": {\"focus\": \"target\", \"color\": \"#f07f65\", \"size\": 5}}, {\"source\": \"AOWmwJayFKAjAmmIlk8yOQ\", \"target\": \"sIMZM6956KBcjN/vk1rXzA\", \"metadata\": {\"focus\": \"target\", \"color\": \"#f07f65\", \"size\": 5}}, {\"source\": \"JIMOIAq9XU0WsAXPLHQRBg\", \"target\": \"uVH0cGqXVe7/eDYLCwW6XQ\", \"metadata\": {\"color\": \"#92979c\", \"size\": 1}}, {\"source\": \"JIMOIAq9XU0WsAXPLHQRBg\", \"target\": \"B2ENslGgWUXwghQigOV/ng\", \"metadata\": {\"color\": \"#92979c\", \"size\": 1}}, {\"source\": \"YlVLHV5wCROpp3hW3nbNOQ\", \"target\": \"nToxQTWUkZ4gv4iAItXSKw\", \"metadata\": {\"color\": \"#92979c\", \"size\": 1}}, {\"source\": \"MYXtcytg7uj+rAyOjYhBQA\", \"target\": \"Lh2x5E3rMHHKwYTA4a3yyQ\", \"metadata\": {\"color\": \"#92979c\", \"size\": 1}}, {\"source\": \"B2ENslGgWUXwghQigOV/ng\", \"target\": \"YlVLHV5wCROpp3hW3nbNOQ\", \"metadata\": {\"color\": \"#92979c\", \"size\": 1}}, {\"source\": \"B2ENslGgWUXwghQigOV/ng\", \"target\": \"77IlFbWAmT0DYKSlTSVLjg\", \"metadata\": {\"color\": \"#92979c\", \"size\": 1}}, {\"source\": \"sIMZM6956KBcjN/vk1rXzA\", \"target\": \"MYXtcytg7uj+rAyOjYhBQA\", \"metadata\": {\"color\": \"#92979c\", \"size\": 1}}]}];\n",
       "            // Data selection and normalization\n",
       "            state.nodeSizeDataSource = \"size\";\n",
       "            state.useNodeSizeNormalization = false;\n",
       "            state.nodeSizeNormalizationMin = 5.0;\n",
       "            state.nodeSizeNormalizationMax = 75.0;\n",
       "            state.nodeLabelTextDataSource = \"label\";\n",
       "            state.edgeSizeDataSource = \"size\";\n",
       "            state.useEdgeSizeNormalization = false;\n",
       "            state.edgeSizeNormalizationMin = 0.2;\n",
       "            state.edgeSizeNormalizationMax = 5.0;\n",
       "            state.edgeLabelTextDataSource = \"label\";\n",
       "            // Containers\n",
       "            state.graphContainerHeight = 450;\n",
       "            state.detailsContainerHeight = 100;\n",
       "            state.showDetails = false,\n",
       "            state.showDetailsToggleButton = true,\n",
       "            state.showMenu = false,\n",
       "            state.showMenuToggleButton = true,\n",
       "            // Nodes\n",
       "            state.showNodes = true;\n",
       "            state.nodeSizeFactor = 1.0;\n",
       "            state.nodeDragFix = false;\n",
       "            state.nodeHoverNeighborhood = false;\n",
       "            state.nodeHoverTooltip = true;\n",
       "            state.showNodeImages = true;\n",
       "            state.nodeImageSizeFactor = 1.0;\n",
       "            state.showNodeLabels = true;\n",
       "            state.showNodeLabelBorders = true;\n",
       "            state.nodeLabelSizeFactor = 1.0;\n",
       "            state.nodeLabelRotation = 0.0;\n",
       "            state.nodeLabelFont = \"Arial\";\n",
       "            // Edges\n",
       "            state.showEdges = true;\n",
       "            state.edgeSizeFactor = 1.0;\n",
       "            state.edgeCurvature = 0.4;\n",
       "            state.edgeHoverTooltip = true,\n",
       "            state.showEdgeLabels = true;\n",
       "            state.showEdgeLabelBorders = true;\n",
       "            state.edgeLabelSizeFactor = 1.0;\n",
       "            state.edgeLabelRotation = 0.0;\n",
       "            state.edgeLabelFont = \"Arial\";\n",
       "            // Layout algorithm\n",
       "            state.layoutAlgorithmActive = true;\n",
       "            state.layoutAlgorithm = \"barnesHut\";\n",
       "            state.gravitationalConstant = -2000.0;\n",
       "            state.centralGravity = 0.1;\n",
       "            state.springLength = 70.0;\n",
       "            state.springConstant = 0.1;\n",
       "            state.avoidOverlap = 0.0;\n",
       "            // Other\n",
       "            state.initZoomFactor = 0.75;\n",
       "            state.largeGraphThreshold = 500;\n",
       "          },\n",
       "\n",
       "          // 2) Derive state.parsedData from state.givenData\n",
       "          rawDataParser:{\n",
       "            getBool(obj, prop, def){\n",
       "              try{\n",
       "                const value = obj[prop];\n",
       "                if(value == \"true\" || value == \"True\"){\n",
       "                  value = true;\n",
       "                } else if(value == \"false\" || value == \"False\"){\n",
       "                  value = false;\n",
       "                }\n",
       "                if(value !== true && value !== false){\n",
       "                  throw \"Invalid value. Not a bool.\";\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return def;\n",
       "              }\n",
       "              return def\n",
       "            },\n",
       "\n",
       "            getString(obj, prop, def) {\n",
       "              try{\n",
       "                const value = String(obj[prop]);\n",
       "                if(value === \"undefined\"){\n",
       "                  throw \"Invalid value. Not a proper string.\";\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return def;\n",
       "              }\n",
       "              return def;\n",
       "            },\n",
       "\n",
       "            getArrayLengthOrZero(array){\n",
       "              try{\n",
       "                const value = parseInt(array.length);\n",
       "                if(!((value + 1) > 0)){\n",
       "                  throw \"Invalid value. Not a proper length.\";\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return 0;\n",
       "              }\n",
       "            },\n",
       "\n",
       "            getObjectLengthOrZero(obj){\n",
       "              try{\n",
       "                const value = Object.keys(obj).length;\n",
       "                if(!((value + 1) > 0)){\n",
       "                  throw \"Invalid value. Not a proper length.\";\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return 0;\n",
       "              }\n",
       "            },\n",
       "\n",
       "            createUniqueEdgeId(sourceId, targetId, knownEdgeIds){\n",
       "              let newEdgeIdBase = \"(\" + sourceId + \", \" + targetId + \")\",\n",
       "                newEdgeId = newEdgeIdBase,\n",
       "                multiEdgeCounter = 1;\n",
       "              for(let i=1; knownEdgeIds.has(newEdgeId); i++){\n",
       "                newEdgeId = newEdgeIdBase + \"_\" + String(i);\n",
       "                multiEdgeCounter += 1;\n",
       "              }\n",
       "              knownEdgeIds.add(newEdgeId);\n",
       "              return {\"id\": newEdgeId, \"count\": multiEdgeCounter}\n",
       "            },\n",
       "          },\n",
       "\n",
       "          rawMetadataParser:{\n",
       "            getString(obj, prop, def){\n",
       "              try{\n",
       "                const value = String(obj.metadata[prop]);\n",
       "                if(value === \"undefined\"){\n",
       "                  throw \"Invalid value. Not a proper string.\";\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return def;\n",
       "              }\n",
       "            },\n",
       "            getShape(obj, prop, def){\n",
       "              const givenShape = state.manager.rawMetadataParser.getString(obj, prop, def);\n",
       "              let visShape = def;\n",
       "              if(givenShape === \"circle\"){\n",
       "                visShape = \"dot\";\n",
       "              } else if(givenShape === \"rectangle\"){\n",
       "                visShape = \"square\";\n",
       "              } else if(givenShape === \"hexagon\"){\n",
       "                visShape = \"hexagon\";\n",
       "              }\n",
       "              return visShape;\n",
       "            },\n",
       "            getColor(obj, prop, def){\n",
       "              function isBodyidColor(strColor) {\n",
       "                const sty = new Option().style;\n",
       "                sty.color = strColor;\n",
       "                return sty.color !== \"\";\n",
       "              }\n",
       "              try{\n",
       "                const value = obj.metadata[prop];\n",
       "                if(!isBodyidColor(value)){\n",
       "                  throw \"Invalid value. Not a color.\"\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return def;\n",
       "              }\n",
       "            },\n",
       "            getFiniteNumber(obj, prop, def){\n",
       "              try{\n",
       "                const value = parseFloat(obj.metadata[prop]);\n",
       "                if(!isFinite(value) || value === null){\n",
       "                  throw \"Invalid value. Not a finite number.\"\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return def;\n",
       "              }\n",
       "            },\n",
       "            getFiniteNumberOrNull(obj, prop, def){\n",
       "              try{\n",
       "                const value = parseFloat(obj.metadata[prop]);\n",
       "                if(!isFinite(value)){  // Note: isFinite(null) gives true\n",
       "                  throw \"Invalid value. Not a finite number or null.\"\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return def;\n",
       "              }\n",
       "            },\n",
       "            getFinitePositiveNumber(obj, prop, def){\n",
       "              try{\n",
       "                const value = parseFloat(obj.metadata[prop]);\n",
       "                if(!isFinite(value) || value === null || value < 0.0){\n",
       "                  throw \"Invalid value. Not a finite positive number.\"\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return def;\n",
       "              }\n",
       "            },\n",
       "            collectOtherMetadata(sourceObject, targetObject, definedMetadata){\n",
       "              if(typeof(sourceObject) !== \"undefined\" && typeof(sourceObject.metadata) !== \"undefined\"){\n",
       "                const properties = Object.keys(sourceObject.metadata);\n",
       "                for(let i=0; i<properties.length; i++){\n",
       "                  const property = properties[i];\n",
       "                  if(!definedMetadata.has(property)){\n",
       "                    targetObject[property] = sourceObject.metadata[property];\n",
       "                  }\n",
       "                }\n",
       "              }\n",
       "            },\n",
       "          },\n",
       "\n",
       "          propertyClassifier:{\n",
       "            numeric: null,\n",
       "            nonNumeric: null,\n",
       "            init(){\n",
       "              this.numeric = new Set(),\n",
       "              this.nonNumeric = new Set();\n",
       "            },\n",
       "            isNumeric(d){\n",
       "              return d === null || typeof(d) === \"undefined\" || String(parseFloat(d)) === String(d);\n",
       "            },\n",
       "            inspect(object, property){\n",
       "              const value = object[property];\n",
       "              if(!this.nonNumeric.has(property)){\n",
       "                if(this.isNumeric(value)){\n",
       "                  this.numeric.add(property);\n",
       "                } else{\n",
       "                  this.nonNumeric.add(property);\n",
       "                  this.numeric.delete(property);\n",
       "                }\n",
       "              }\n",
       "            }\n",
       "          },\n",
       "\n",
       "          replaceStringVariables(givenString, givenItem, variables){\n",
       "            let newString = givenString;\n",
       "            for(let i=0; i<variables.length; i++){\n",
       "              let variable = variables[i],\n",
       "                variableText = \"$\" + variable;\n",
       "              if(variable === \"x\"){\n",
       "                variable = \"fx\";\n",
       "              } else if (variable === \"y\"){\n",
       "                variable = \"fy\";\n",
       "              }\n",
       "              let insertedText = String(givenItem[variable]);\n",
       "              if(insertedText === \"undefined\"){\n",
       "                insertedText = \"\";\n",
       "              }\n",
       "              newString = newString.replace(variableText, insertedText);\n",
       "            }\n",
       "            return newString;\n",
       "          },\n",
       "\n",
       "          parseGeneral(givenData, parsedData){\n",
       "            parsedData.general = {\n",
       "              // General\n",
       "              directed: state.manager.rawDataParser.getBool(givenData, \"directed\", true),\n",
       "              label: state.manager.rawDataParser.getString(givenData, \"label\", \"\"),\n",
       "              background_color: state.manager.rawMetadataParser.getColor(givenData, \"background_color\", \"white\"),\n",
       "              arrow_color: state.manager.rawMetadataParser.getColor(givenData, \"arrow_color\", \"black\"),\n",
       "              arrow_size: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"arrow_size\", 10.0),\n",
       "              // Nodes\n",
       "              node_color: state.manager.rawMetadataParser.getColor(givenData, \"node_color\", \"black\"),\n",
       "              node_opacity: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"node_opacity\", 1.0),\n",
       "              node_size: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"node_size\", 10.0),\n",
       "              node_shape: state.manager.rawMetadataParser.getString(givenData, \"node_shape\", \"circle\"),\n",
       "              node_border_color: state.manager.rawMetadataParser.getColor(givenData, \"node_border_color\", \"black\"),\n",
       "              node_border_size: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"node_border_size\", 0.0),\n",
       "              node_label_color: state.manager.rawMetadataParser.getColor(givenData, \"node_label_color\", \"black\"),\n",
       "              node_label_size: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"node_label_size\", 12.0),\n",
       "              node_hover: state.manager.rawMetadataParser.getString(givenData, \"node_hover\", \"\"),\n",
       "              node_click: state.manager.rawMetadataParser.getString(givenData, \"node_click\", \"\"),\n",
       "              node_image: state.manager.rawMetadataParser.getString(givenData, \"node_image\", \"\"),\n",
       "              node_x: state.manager.rawMetadataParser.getFiniteNumberOrNull(givenData, \"node_x\", null),\n",
       "              node_y: state.manager.rawMetadataParser.getFiniteNumberOrNull(givenData, \"node_y\", null),\n",
       "              contains_node_hover: false,\n",
       "              contains_node_click: false,\n",
       "              contains_node_image: false,\n",
       "              // Edges\n",
       "              edge_color: state.manager.rawMetadataParser.getColor(givenData, \"edge_color\", \"black\"),\n",
       "              edge_opacity: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"edge_opacity\", 1.0),\n",
       "              edge_size: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"edge_size\", 1.0),\n",
       "              edge_label_color: state.manager.rawMetadataParser.getColor(givenData, \"edge_label_color\", \"black\"),\n",
       "              edge_label_size: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"edge_label_size\", 8.0),\n",
       "              edge_hover: state.manager.rawMetadataParser.getString(givenData, \"edge_hover\", \"\"),\n",
       "              edge_click: state.manager.rawMetadataParser.getString(givenData, \"edge_click\", \"\"),\n",
       "              contains_edge_hover: false,\n",
       "              contains_edge_click: false,\n",
       "            };\n",
       "            if(!parsedData.general.directed){\n",
       "              parsedData.general.arrow_size = 0.0;\n",
       "            }\n",
       "          },\n",
       "\n",
       "          parseNodes(givenData, parsedData){\n",
       "            const numNodes = state.manager.rawDataParser.getObjectLengthOrZero(givenData.nodes),\n",
       "              nodeIdToObjectMap = new Map(),\n",
       "              nodeDefinedMetadata = new Set(\n",
       "                [\"color\", \"opacity\", \"size\", \"shape\", \"border_color\", \"border_size\",\n",
       "                 \"label_color\", \"label_size\", \"hover\", \"click\", \"image\", \"x\", \"y\"]),\n",
       "              nodeReplacementVariables = [\n",
       "                \"id\", \"label\",\n",
       "                \"color\", \"opacity\", \"size\", \"shape\", \"border_color\", \"border_size\",\n",
       "                \"label_color\", \"label_size\", \"image\", \"x\", \"y\"];\n",
       "            state.manager.propertyClassifier.init();\n",
       "            try {\n",
       "              Object.entries(givenData.nodes);\n",
       "            }\n",
       "            catch(e){\n",
       "               givenData.nodes = {};\n",
       "            }\n",
       "            for (const [givenNodeId, givenNode] of Object.entries(givenData.nodes)) {\n",
       "              const parsedNode = {};\n",
       "              // data: id, label\n",
       "              parsedNode.id = String(givenNodeId);\n",
       "              parsedNode.label = state.manager.rawDataParser.getString(givenNode, \"label\", \"\");\n",
       "              // defined metadata\n",
       "              parsedNode.color = state.manager.rawMetadataParser.getColor(givenNode, \"color\", parsedData.general.node_color);\n",
       "              parsedNode.opacity = state.manager.rawMetadataParser.getFinitePositiveNumber(givenNode, \"opacity\", parsedData.general.node_opacity);\n",
       "              parsedNode.size = state.manager.rawMetadataParser.getFinitePositiveNumber(givenNode, \"size\", parsedData.general.node_size);\n",
       "              parsedNode.shape = state.manager.rawMetadataParser.getShape(givenNode, \"shape\", parsedData.general.node_shape);\n",
       "              parsedNode.border_color = state.manager.rawMetadataParser.getColor(givenNode, \"border_color\", parsedData.general.node_border_color);\n",
       "              parsedNode.border_size = state.manager.rawMetadataParser.getFinitePositiveNumber(givenNode, \"border_size\", parsedData.general.node_border_size);\n",
       "              parsedNode.label_color = state.manager.rawMetadataParser.getColor(givenNode, \"label_color\", parsedData.general.node_label_color);\n",
       "              parsedNode.label_size = state.manager.rawMetadataParser.getFinitePositiveNumber(givenNode, \"label_size\", parsedData.general.node_label_size);\n",
       "              const hover = state.manager.rawMetadataParser.getString(givenNode, \"hover\", parsedData.general.node_hover);\n",
       "              const image = state.manager.rawMetadataParser.getString(givenNode, \"image\", parsedData.general.node_image);\n",
       "              if(image !== \"\"){\n",
       "                parsedNode.image = image;\n",
       "                parsedData.general.contains_node_image = true;\n",
       "              }\n",
       "              if(hover !== \"\"){\n",
       "                parsedNode.hover = hover;\n",
       "                parsedData.general.contains_node_hover = true;\n",
       "              }\n",
       "              const click = state.manager.rawMetadataParser.getString(givenNode, \"click\", parsedData.general.node_click);\n",
       "              if(click !== \"\"){\n",
       "                parsedNode.click = click;\n",
       "                parsedData.general.contains_node_click = true;\n",
       "              }\n",
       "              const x = state.manager.rawMetadataParser.getFiniteNumberOrNull(givenNode, \"x\", parsedData.general.node_x);\n",
       "              const y = state.manager.rawMetadataParser.getFiniteNumberOrNull(givenNode, \"y\", parsedData.general.node_y);\n",
       "              if(x !== null){\n",
       "                parsedNode.fx = x;\n",
       "              }\n",
       "              if(y !== null){\n",
       "                parsedNode.fy = y;\n",
       "              }\n",
       "              // other metadata\n",
       "              const otherMetadata = state.manager.rawMetadataParser.collectOtherMetadata(givenNode, parsedNode, nodeDefinedMetadata);\n",
       "              // feature classification\n",
       "              const parsedNodeProperties = Object.keys(parsedNode);\n",
       "              for(let i=0; i<parsedNodeProperties.length; i++){\n",
       "                const property = parsedNodeProperties[i],\n",
       "                  value = parsedNode[property];\n",
       "                state.manager.propertyClassifier.inspect(parsedNode, property);\n",
       "              }\n",
       "              // variable replacements\n",
       "              if(parsedNode.hover){\n",
       "                parsedNode.hover = state.manager.replaceStringVariables(parsedNode.hover, parsedNode, nodeReplacementVariables);\n",
       "              }\n",
       "              if(parsedNode.click){\n",
       "                parsedNode.click = state.manager.replaceStringVariables(parsedNode.click, parsedNode, nodeReplacementVariables.concat([\"hover\"]));\n",
       "              }\n",
       "              // store the parsed node\n",
       "              parsedData.nodes.push(parsedNode);\n",
       "              // data structure for inserting node object references into edge data\n",
       "              nodeIdToObjectMap.set(parsedNode.id, parsedNode);\n",
       "            }\n",
       "            // Ensure numeric properties (except fx and fy) are stored as numbers and remember their extrema\n",
       "            const numericProperties = Array.from(state.manager.propertyClassifier.numeric).filter(name => name !== \"fx\" && name !== \"fy\"),\n",
       "              nonNumericProperties = Array.from(state.manager.propertyClassifier.nonNumeric),\n",
       "              minima = {},\n",
       "              maxima = {};\n",
       "            for(let i=0; i<numNodes; i++){\n",
       "              const parsedNode = parsedData.nodes[i];\n",
       "              for(let p=0; p<numericProperties.length; p++){\n",
       "                const property = numericProperties[p],\n",
       "                  numericValue = parseFloat(parsedNode[property]);\n",
       "                parsedNode[property] = numericValue;\n",
       "                if(isFinite(numericValue)){\n",
       "                  if(typeof(minima[property]) === \"undefined\" || numericValue < minima[property]){\n",
       "                    minima[property] = numericValue;\n",
       "                  }\n",
       "                  if(typeof(maxima[property]) === \"undefined\" || numericValue > maxima[property]){\n",
       "                    maxima[property] = numericValue;\n",
       "                  }\n",
       "                }\n",
       "              }\n",
       "            }\n",
       "            // Store feature classification and extrema\n",
       "            parsedData.general.node_properties = {\n",
       "              \"node_size_data_sources\": numericProperties,\n",
       "              \"node_label_text_data_sources\": nonNumericProperties.concat(numericProperties),\n",
       "              \"minima\": minima,\n",
       "              \"maxima\": maxima,\n",
       "            }\n",
       "            // Report empty graph\n",
       "            if(!(numNodes > 0)){\n",
       "              console.log(\"Caution: Graph with 0 nodes. The provided data might be in the wrong format.\");\n",
       "            }\n",
       "            return nodeIdToObjectMap;\n",
       "          },\n",
       "\n",
       "          parseEdges(givenData, parsedData, nodeIdToObjectMap){\n",
       "            let numEdges = state.manager.rawDataParser.getArrayLengthOrZero(givenData.edges);\n",
       "            const knownEdgeIds = new Set(),\n",
       "              ignoredEdges = [],\n",
       "              edgeDefinedMetadata = new Set(\n",
       "                [\"color\", \"opacity\", \"size\", \"label_color\", \"label_size\", \"hover\", \"click\"]),\n",
       "              edgeReplacementVariables = [\n",
       "                \"id\", \"label\",\n",
       "                \"color\", \"opacity\", \"size\", \"label_color\", \"label_size\"];\n",
       "            state.manager.propertyClassifier.init();\n",
       "            for(let i=0; i<numEdges; i++){\n",
       "              const givenEdge = givenData.edges[i],\n",
       "                parsedEdge = {},\n",
       "                sourceId = String(givenEdge.source),\n",
       "                targetId = String(givenEdge.target);\n",
       "              // data: source, target, id, multi_edge_counter, label\n",
       "              try{\n",
       "                const sourceObj = nodeIdToObjectMap.get(sourceId);\n",
       "                const targetObj = nodeIdToObjectMap.get(targetId);\n",
       "                if(typeof(sourceObj) === \"undefined\" || typeof(targetObj) === \"undefined\"){\n",
       "                  throw \"Invalid node reference.\";\n",
       "                }\n",
       "                parsedEdge.source = sourceObj;\n",
       "                parsedEdge.target = targetObj;\n",
       "              } catch(e){\n",
       "                const ignoredEdge = {\n",
       "                  index: i,\n",
       "                  source: sourceId,\n",
       "                  target: targetId,\n",
       "                }\n",
       "                ignoredEdges.push(ignoredEdge);\n",
       "                continue;\n",
       "              }\n",
       "              const result = state.manager.rawDataParser.createUniqueEdgeId(sourceId, targetId, knownEdgeIds);\n",
       "              parsedEdge.id = result.id;\n",
       "              parsedEdge.multi_edge_counter = result.count;\n",
       "              parsedEdge.label = state.manager.rawDataParser.getString(givenEdge, \"label\", \"\");\n",
       "              // defined metadata\n",
       "              parsedEdge.color = state.manager.rawMetadataParser.getColor(givenEdge, \"color\", parsedData.general.edge_color);\n",
       "              parsedEdge.opacity = state.manager.rawMetadataParser.getFinitePositiveNumber(givenEdge, \"opacity\", parsedData.general.edge_opacity);\n",
       "              parsedEdge.size = state.manager.rawMetadataParser.getFinitePositiveNumber(givenEdge, \"size\", parsedData.general.edge_size);\n",
       "              parsedEdge.label_color = state.manager.rawMetadataParser.getColor(givenEdge, \"label_color\", parsedData.general.edge_label_color);\n",
       "              parsedEdge.label_size = state.manager.rawMetadataParser.getFinitePositiveNumber(givenEdge, \"label_size\", parsedData.general.edge_label_size);\n",
       "              const hover = state.manager.rawMetadataParser.getString(givenEdge, \"hover\", parsedData.general.edge_hover);\n",
       "              if(hover !== \"\"){\n",
       "                parsedEdge.hover = hover;\n",
       "                parsedData.general.contains_edge_hover = true;\n",
       "              }\n",
       "              const click = state.manager.rawMetadataParser.getString(givenEdge, \"click\", parsedData.general.edge_click);\n",
       "              if(click !== \"\"){\n",
       "                parsedEdge.click = click;\n",
       "                parsedData.general.contains_edge_click = true;\n",
       "              }\n",
       "              // other metadata\n",
       "              const otherMetadata = state.manager.rawMetadataParser.collectOtherMetadata(givenEdge, parsedEdge, edgeDefinedMetadata);\n",
       "              // feature classification\n",
       "              const parsedEdgeProperties = Object.keys(parsedEdge);\n",
       "              for(let i=0; i<parsedEdgeProperties.length; i++){\n",
       "                const property = parsedEdgeProperties[i],\n",
       "                  value = parsedEdge[property];\n",
       "                state.manager.propertyClassifier.inspect(parsedEdge, property);\n",
       "              }\n",
       "              // variable replacements\n",
       "              if(parsedEdge.hover){\n",
       "                parsedEdge.hover = state.manager.replaceStringVariables(parsedEdge.hover, parsedEdge, edgeReplacementVariables);\n",
       "              }\n",
       "              if(parsedEdge.click){\n",
       "                parsedEdge.click = state.manager.replaceStringVariables(parsedEdge.click, parsedEdge, edgeReplacementVariables.concat([\"hover\"]));\n",
       "              }\n",
       "              // store it\n",
       "              parsedData.edges.push(parsedEdge);\n",
       "            }\n",
       "            // Ensure numeric properties are stored as numbers and remember their extrema\n",
       "            const numericProperties = Array.from(state.manager.propertyClassifier.numeric),\n",
       "              nonNumericProperties = Array.from(state.manager.propertyClassifier.nonNumeric),\n",
       "              minima = {},\n",
       "              maxima = {};\n",
       "            numEdges = state.manager.rawDataParser.getArrayLengthOrZero(parsedData.edges);\n",
       "            for(let i=0; i<numEdges; i++){\n",
       "              const parsedEdge = parsedData.edges[i];\n",
       "              for(let p=0; p<numericProperties.length; p++){\n",
       "                const property = numericProperties[p],\n",
       "                  numericValue = parseFloat(parsedEdge[property]);\n",
       "                parsedEdge[property] = numericValue;\n",
       "                if(isFinite(numericValue)){\n",
       "                  if(typeof(minima[property]) === \"undefined\" || numericValue < minima[property]){\n",
       "                    minima[property] = numericValue;\n",
       "                  }\n",
       "                  if(typeof(maxima[property]) === \"undefined\" || numericValue > maxima[property]){\n",
       "                    maxima[property] = numericValue;\n",
       "                  }\n",
       "                }\n",
       "              }\n",
       "            }\n",
       "            // Store feature classification and extrema\n",
       "            parsedData.general.edge_properties = {\n",
       "              \"edge_size_data_sources\": numericProperties.filter(item => item !== \"multi_edge_counter\"),\n",
       "              \"edge_label_text_data_sources\": nonNumericProperties.concat(numericProperties).filter(\n",
       "                item => item !== \"source\" && item !== \"target\" && item !== \"multi_edge_counter\"),\n",
       "              \"minima\": minima,\n",
       "              \"maxima\": maxima,\n",
       "            }\n",
       "            // Report invalid edges\n",
       "            if(ignoredEdges.length > 0){\n",
       "              let message = undefined;\n",
       "              if(ignoredEdges.length == 1){\n",
       "                message = \"Caution: \" + ignoredEdges.length + \" edge was ignored because it \" +\n",
       "                  \"refers to a node that is not part of the node list:\\n\";\n",
       "              } else{\n",
       "                message = \"Caution: \" + ignoredEdges.length + \" edges were ignored because they \" +\n",
       "                  \"refer to a node that is not part of the node list:\\n\";\n",
       "              }\n",
       "              for(let i=0; i<ignoredEdges.length; i++){\n",
       "                const ignoredEdge = ignoredEdges[i];\n",
       "                message += '- Edge with index ' + ignoredEdge.index;\n",
       "                message += ', source \"' + ignoredEdge.source;\n",
       "                message += '\", target \"' + ignoredEdge.target + '\"\\n';\n",
       "                if(i==9){\n",
       "                  message += '...';\n",
       "                  break;\n",
       "                }\n",
       "              }\n",
       "              console.log(message);\n",
       "            }\n",
       "          },\n",
       "\n",
       "          parseChosenData(chosenGraphNumber){\n",
       "            let givenData = state.rawData[chosenGraphNumber],\n",
       "              parsedData = {\n",
       "                general: {},\n",
       "                nodes: [],\n",
       "                edges: [],\n",
       "                adjacency: null,\n",
       "                incidence: null,\n",
       "              };\n",
       "            if(!givenData || givenData === null){\n",
       "              givenData = [];\n",
       "            }\n",
       "            // a) General\n",
       "            state.manager.parseGeneral(givenData, parsedData);\n",
       "            // b) Nodes\n",
       "            const nodeIdToObjectMap = state.manager.parseNodes(givenData, parsedData);\n",
       "            // c) Edges\n",
       "            state.manager.parseEdges(givenData, parsedData, nodeIdToObjectMap);\n",
       "            // Update state\n",
       "            state.parsedData = parsedData;\n",
       "            state.currentGraphParts = {};\n",
       "            // Update UI: show or hide containers\n",
       "            ui.elements.graphContainer.style.display = ui.convert.boolToDisplayStyle(true);\n",
       "            ui.elements.detailsContainer.style.display = ui.convert.boolToDisplayStyle(state.showDetails);\n",
       "            ui.elements.nodeImageMetaControl.style.display = ui.convert.boolToDisplayStyle(parsedData.general.contains_node_image);\n",
       "          },\n",
       "\n",
       "          // 3) Derive state.shownData from state.parsedData\n",
       "          createNodeToAdjacentNodesMap(){\n",
       "            const dataStructure = {\n",
       "              map: new Map(),\n",
       "              add(sourceNode, targetNode){\n",
       "                let adjacentNodes = this.map.get(sourceNode);\n",
       "                if(adjacentNodes){\n",
       "                  adjacentNodes.add(targetNode);\n",
       "                } else{\n",
       "                  adjacentNodes = new Set([targetNode]);\n",
       "                  this.map.set(sourceNode, adjacentNodes);\n",
       "                }\n",
       "              },\n",
       "            }\n",
       "            return dataStructure;\n",
       "          },\n",
       "\n",
       "          createNodeToIncidentEdgesMap(){\n",
       "            const dataStructure = {\n",
       "              map: new Map(),\n",
       "              add(node, edge){\n",
       "                let incidentEdges = this.map.get(node);\n",
       "                if(incidentEdges){\n",
       "                  incidentEdges.add(edge);\n",
       "                } else{\n",
       "                  incidentEdges = new Set([edge]);\n",
       "                  this.map.set(node, incidentEdges);\n",
       "                }\n",
       "              },\n",
       "            }\n",
       "            return dataStructure;\n",
       "          },\n",
       "\n",
       "          hoverTextToHtml(text) {\n",
       "            // https://visjs.github.io/vis-network/examples/network/other/html-in-titles.html\n",
       "            const div = document.createElement(\"div\");\n",
       "            div.innerHTML = text;\n",
       "            return div;\n",
       "          },\n",
       "\n",
       "          prepareShownData(){\n",
       "            const numNodes = state.parsedData.nodes.length,\n",
       "              numEdges = state.parsedData.edges.length;\n",
       "            state.shownData = {\n",
       "              \"general\": null,\n",
       "              \"nodes\": new Array(numNodes),\n",
       "              \"edges\": new Array(numEdges),\n",
       "            }\n",
       "            const nodeIdToObjectMap = new Map(),\n",
       "              nodeSizeNormalizer = state.manager.createNodeSizeNormalizer();\n",
       "            // a) General\n",
       "            state.shownData.general = {\n",
       "              \"background_color\": state.parsedData.general.background_color,\n",
       "              \"arrow_size\": state.parsedData.general.arrow_size,\n",
       "              \"arrow_color\": state.parsedData.general.arrow_color,\n",
       "              \"directed\": state.parsedData.general.directed,\n",
       "            };\n",
       "            // b) Nodes\n",
       "            for(let i=0; i<numNodes; i++){\n",
       "              state.shownData.nodes[i] = {};\n",
       "              const parsedNode = state.parsedData.nodes[i],\n",
       "                shownNode = state.shownData.nodes[i];\n",
       "              shownNode.id = parsedNode.id;\n",
       "              shownNode.label = state.manager.calcSingleNodeLabelText(parsedNode);\n",
       "              shownNode.color = parsedNode.color;\n",
       "              shownNode.opacity = parsedNode.opacity;\n",
       "              shownNode.size = state.manager.calcSingleNodeSize(parsedNode, nodeSizeNormalizer);\n",
       "              shownNode.shape = parsedNode.shape;\n",
       "              shownNode.border_color = parsedNode.border_color;\n",
       "              shownNode.border_size = parsedNode.border_size;\n",
       "              shownNode.label_color = parsedNode.label_color;\n",
       "              shownNode.label_size = state.manager.calcSingleNodeLabelSize(parsedNode);\n",
       "              if(typeof(parsedNode.image) !== \"undefined\"){\n",
       "                shownNode.image = parsedNode.image;\n",
       "              }\n",
       "              if(typeof(parsedNode.hover) !== \"undefined\"){\n",
       "                shownNode.hover = state.manager.hoverTextToHtml(parsedNode.hover);\n",
       "              }\n",
       "              if(typeof(parsedNode.click) !== \"undefined\"){\n",
       "                shownNode.click = parsedNode.click;\n",
       "              }\n",
       "              if(typeof(parsedNode.fx) !== \"undefined\"){\n",
       "                shownNode.fx = parsedNode.fx;\n",
       "              }\n",
       "              if(typeof(parsedNode.fy) !== \"undefined\"){\n",
       "                shownNode.fy = parsedNode.fy;\n",
       "              }\n",
       "              nodeIdToObjectMap.set(shownNode.id, shownNode);\n",
       "              // Derived properties for performance improvement in updateNodePositions\n",
       "              state.manager.calcSingleNodeSizeDerivatives(shownNode);\n",
       "              state.manager.calcSingleNodeBorderSizeDerivatives(shownNode);\n",
       "            }\n",
       "            // c) Edges\n",
       "            const edgeSizeNormalizer = state.manager.createEdgeSizeNormalizer(),\n",
       "              nodeToAdjacentNodesMap = state.manager.createNodeToAdjacentNodesMap(),\n",
       "              nodeToIncidentEdgesMap = state.manager.createNodeToIncidentEdgesMap();\n",
       "            for(let i=0; i<numEdges; i++){\n",
       "              state.shownData.edges[i] = {};\n",
       "              const parsedEdge = state.parsedData.edges[i],\n",
       "                shownEdge = state.shownData.edges[i];\n",
       "              shownEdge.source = nodeIdToObjectMap.get(parsedEdge.source.id);\n",
       "              shownEdge.target = nodeIdToObjectMap.get(parsedEdge.target.id);\n",
       "              shownEdge.id = parsedEdge.id;\n",
       "              shownEdge.label = state.manager.calcSingleEdgeLabelText(parsedEdge);\n",
       "              shownEdge.color = parsedEdge.color;\n",
       "              shownEdge.opacity = parsedEdge.opacity;\n",
       "              shownEdge.size = state.manager.calcSingleEdgeSize(parsedEdge, edgeSizeNormalizer);\n",
       "              shownEdge.label_color = parsedEdge.label_color;\n",
       "              shownEdge.label_size = state.manager.calcSingleEdgeLabelSize(parsedEdge);\n",
       "              if(typeof(parsedEdge.hover) !== \"undefined\"){\n",
       "                shownEdge.hover = state.manager.hoverTextToHtml(parsedEdge.hover);\n",
       "              }\n",
       "              if(typeof(parsedEdge.click) !== \"undefined\"){\n",
       "                shownEdge.click = parsedEdge.click;\n",
       "              }\n",
       "              // Derived properties for performance improvement in updateEdgePositions\n",
       "              shownEdge.multiEdgeCurvatureFactor = state.manager.calcSingleEdgeCurvatureFactor(parsedEdge);\n",
       "              // Data structure for highlighting adjacent nodes and incident edges to this node\n",
       "              nodeToAdjacentNodesMap.add(shownEdge.source, shownEdge.target);\n",
       "              nodeToAdjacentNodesMap.add(shownEdge.target, shownEdge.source);\n",
       "              nodeToIncidentEdgesMap.add(shownEdge.source, shownEdge);\n",
       "              nodeToIncidentEdgesMap.add(shownEdge.target, shownEdge);\n",
       "            }\n",
       "            state.shownData.adjacency = nodeToAdjacentNodesMap;\n",
       "            state.shownData.incidence = nodeToIncidentEdgesMap;\n",
       "          },\n",
       "\n",
       "          calcSingleNodeSize(parsedNode, nodeSizeNormalizer){\n",
       "            const appearanceAdaptionFactor = 0.5;\n",
       "            let nodeSize = nodeSizeNormalizer(parsedNode[state.nodeSizeDataSource]);\n",
       "            if(!isFinite(nodeSize)){\n",
       "              nodeSize = state.parsedData.general.node_size;\n",
       "            }\n",
       "            return nodeSize * state.nodeSizeFactor * appearanceAdaptionFactor;\n",
       "          },\n",
       "\n",
       "          calcSingleNodeSizeDerivatives(shownNode){\n",
       "            shownNode.image_size = shownNode.size / 1.42 * state.nodeImageSizeFactor;\n",
       "          },\n",
       "\n",
       "          calcSingleNodeLabelText(parsedNode){\n",
       "            return String(parsedNode[state.nodeLabelTextDataSource]);\n",
       "          },\n",
       "\n",
       "          calcSingleNodeLabelSize(parsedNode){\n",
       "            return parsedNode.label_size * state.nodeLabelSizeFactor;\n",
       "          },\n",
       "\n",
       "          calcSingleEdgeSize(parsedEdge, edgeSizeNormalizer){\n",
       "            let edgeSize = edgeSizeNormalizer(parsedEdge[state.edgeSizeDataSource]);\n",
       "            if(!isFinite(edgeSize)){\n",
       "              edgeSize = state.parsedData.general.edge_size;\n",
       "            }\n",
       "            return edgeSize * state.edgeSizeFactor;\n",
       "          },\n",
       "\n",
       "          calcSingleEdgeCurvatureFactor(parsedEdge){\n",
       "            // Caution: Currently a single value is used for all edges instead of these here\n",
       "            const appearanceAdaptionFactor = 0.5;\n",
       "            return state.edgeCurvature * parsedEdge.multiEdgeCounter * appearanceAdaptionFactor;\n",
       "          },\n",
       "\n",
       "          calcSingleEdgeLabelText(parsedEdge){\n",
       "            return String(parsedEdge[state.edgeLabelTextDataSource]);\n",
       "          },\n",
       "\n",
       "          calcSingleEdgeLabelSize(parsedEdge){\n",
       "            return parsedEdge.label_size * state.edgeLabelSizeFactor;\n",
       "          },\n",
       "\n",
       "          calcSingleNodeBorderSizeDerivatives(shownNode){\n",
       "            shownNode.border_size_half = shownNode.border_size / 2.0;\n",
       "          },\n",
       "\n",
       "          createNodeSizeNormalizer(){\n",
       "            let normalizer;\n",
       "            if(state.useNodeSizeNormalization){\n",
       "              const dataMin = state.parsedData.general.node_properties.minima[state.nodeSizeDataSource],\n",
       "                dataMax = state.parsedData.general.node_properties.maxima[state.nodeSizeDataSource],\n",
       "                targetMin = state.nodeSizeNormalizationMin,\n",
       "                targetMax = state.nodeSizeNormalizationMax,\n",
       "                dataDiff = dataMax - dataMin,\n",
       "                targetDiff = targetMax - targetMin;\n",
       "              let factor = targetDiff / dataDiff;\n",
       "              if(!isFinite(factor) || factor === null){\n",
       "                factor = 0.0;\n",
       "              }\n",
       "              normalizer = function(val){\n",
       "                return (val - dataMin) * factor + targetMin;\n",
       "              }\n",
       "            } else{\n",
       "              normalizer = function(val){\n",
       "                return val;\n",
       "              }\n",
       "            }\n",
       "            return normalizer;\n",
       "          },\n",
       "\n",
       "          createEdgeSizeNormalizer(){\n",
       "            let normalizer;\n",
       "            if(state.useEdgeSizeNormalization){\n",
       "              const dataMin = state.parsedData.general.edge_properties.minima[state.edgeSizeDataSource],\n",
       "                dataMax = state.parsedData.general.edge_properties.maxima[state.edgeSizeDataSource],\n",
       "                targetMin = state.edgeSizeNormalizationMin,\n",
       "                targetMax = state.edgeSizeNormalizationMax,\n",
       "                dataDiff = dataMax - dataMin,\n",
       "                targetDiff = targetMax - targetMin;\n",
       "              let factor = targetDiff / dataDiff;\n",
       "              if(!isFinite(factor)){\n",
       "                factor = 0.0;\n",
       "              }\n",
       "              normalizer = function(val){\n",
       "                return (val - dataMin) * factor + targetMin;\n",
       "              }\n",
       "            } else{\n",
       "              normalizer = function(val){\n",
       "                return val;\n",
       "              }\n",
       "            }\n",
       "            return normalizer;\n",
       "          },\n",
       "\n",
       "          updateNodeSizes(){\n",
       "            // Data\n",
       "            const nodeSizeNormalizer = state.manager.createNodeSizeNormalizer();\n",
       "            for(let i=0; i<state.parsedData.nodes.length; i++){\n",
       "              const parsedNode = state.parsedData.nodes[i],\n",
       "                shownNode = state.shownData.nodes[i];\n",
       "              shownNode.size = state.manager.calcSingleNodeSize(parsedNode, nodeSizeNormalizer);\n",
       "              state.manager.calcSingleNodeSizeDerivatives(shownNode);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateNodeSizes();\n",
       "          },\n",
       "\n",
       "          updateNodeLabelTexts(){\n",
       "            // Data\n",
       "            for(let i=0; i<state.parsedData.nodes.length; i++){\n",
       "              const parsedNode = state.parsedData.nodes[i],\n",
       "                shownNode = state.shownData.nodes[i];\n",
       "              shownNode.label = state.manager.calcSingleNodeLabelText(parsedNode);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateNodeLabels();\n",
       "          },\n",
       "\n",
       "          updateNodeLabelSizes(){\n",
       "            // Data\n",
       "            for(let i=0; i<state.parsedData.nodes.length; i++){\n",
       "              const parsedNode = state.parsedData.nodes[i],\n",
       "                shownNode = state.shownData.nodes[i];\n",
       "              shownNode.label_size = state.manager.calcSingleNodeLabelSize(parsedNode);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateNodeLabels();\n",
       "          },\n",
       "\n",
       "          updateNodeImages(){\n",
       "            // Data\n",
       "            for(let i=0; i<state.parsedData.nodes.length; i++){\n",
       "              const parsedNode = state.parsedData.nodes[i],\n",
       "                shownNode = state.shownData.nodes[i];\n",
       "              state.manager.calcSingleNodeSizeDerivatives(shownNode);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateNodeImages();\n",
       "          },\n",
       "\n",
       "          updateEdgeSizes(){\n",
       "            // Data\n",
       "            const edgeSizeNormalizer = state.manager.createEdgeSizeNormalizer();\n",
       "            for(let i=0; i<state.parsedData.edges.length; i++){\n",
       "              const parsedEdge = state.parsedData.edges[i],\n",
       "                shownEdge = state.shownData.edges[i];\n",
       "              shownEdge.size = state.manager.calcSingleEdgeSize(parsedEdge, edgeSizeNormalizer);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateEdgeSizes();\n",
       "          },\n",
       "\n",
       "          updateEdgeCurvatures(){\n",
       "            // Data\n",
       "            for(let i=0; i<state.parsedData.edges.length; i++){\n",
       "              const parsedEdge = state.parsedData.edges[i],\n",
       "                shownEdge = state.shownData.edges[i];\n",
       "              shownEdge.multiEdgeCurvatureFactor = state.manager.calcSingleEdgeCurvatureFactor(parsedEdge);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateEdgeCurvatures();\n",
       "          },\n",
       "\n",
       "          updateEdgeLabelTexts(){\n",
       "            // Data\n",
       "            for(let i=0; i<state.parsedData.edges.length; i++){\n",
       "              const parsedEdge = state.parsedData.edges[i],\n",
       "                shownEdge = state.shownData.edges[i];\n",
       "              shownEdge.label = state.manager.calcSingleEdgeLabelText(parsedEdge);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateEdgeLabels();\n",
       "          },\n",
       "\n",
       "          updateEdgeLabelSizes(){\n",
       "            // Data\n",
       "            for(let i=0; i<state.parsedData.edges.length; i++){\n",
       "              const parsedEdge = state.parsedData.edges[i],\n",
       "                shownEdge = state.shownData.edges[i];\n",
       "              shownEdge.label_size = state.manager.calcSingleEdgeLabelSize(parsedEdge);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateEdgeLabels();\n",
       "          },\n",
       "        }\n",
       "      }\n",
       "\n",
       "      const ui = {\n",
       "        symbols:{\n",
       "          // Choice of symbols is influenced by their appearance in different browsers\n",
       "          // Alternatives: \"▼\", \"▽\", \"▾\" / \"▲\", \"△\", \"▴\" / \"▶\", \"▷\", \"▸\" / \"◀\", \"◁\", \"◂\"\n",
       "          // ▶ is rendered strangely on some mobile phone browsers, ▸ remains normal\n",
       "          detailsShown: \"▾\",\n",
       "          detailsHidden: \"▴\",\n",
       "          menuShown: \"▸\",\n",
       "          menuHidden: \"◂\",\n",
       "          menuItemActive: \"▸\",\n",
       "          menuItemInactive: \"▾\",\n",
       "        },\n",
       "\n",
       "        elements:{\n",
       "          // Containers\n",
       "          mainContainer: document.getElementById(\"in25kxQoTrpu5Cpf8-main-div\"),\n",
       "          tooltipContainer: document.getElementById(\"in25kxQoTrpu5Cpf8-tooltip-div\"),\n",
       "          leftContainer: document.getElementById(\"in25kxQoTrpu5Cpf8-left-div\"),\n",
       "          rightContainer: document.getElementById(\"in25kxQoTrpu5Cpf8-right-div\"),\n",
       "          graphContainer: document.getElementById(\"in25kxQoTrpu5Cpf8-graph-div\"),\n",
       "          detailsContainer: document.getElementById(\"in25kxQoTrpu5Cpf8-details-div\"),\n",
       "          detailsHead: document.getElementById(\"in25kxQoTrpu5Cpf8-details-head\"),\n",
       "          detailsBody: document.getElementById(\"in25kxQoTrpu5Cpf8-details-body\"),\n",
       "          // Data sources\n",
       "          dataHead: document.getElementById(\"in25kxQoTrpu5Cpf8-data-head\"),\n",
       "          dataBody: document.getElementById(\"in25kxQoTrpu5Cpf8-data-body\"),\n",
       "          graphSelectionContainer: document.getElementById(\"in25kxQoTrpu5Cpf8-graph-select-div\"),\n",
       "          graphSelection: document.getElementById(\"in25kxQoTrpu5Cpf8-graph-select\"),\n",
       "          nodeSizeDataSourceSelect: document.getElementById(\"in25kxQoTrpu5Cpf8-node-size-data-source-select\"),\n",
       "          nodeSizeNormalizationCheckbox: document.getElementById(\"in25kxQoTrpu5Cpf8-node-size-normalization-checkbox\"),\n",
       "          nodeSizeNormalizationContainer: document.getElementById(\"in25kxQoTrpu5Cpf8-node-size-norm-div\"),\n",
       "          nodeSizeNormalizationMinText: document.getElementById(\"in25kxQoTrpu5Cpf8-node-size-normalization-min-text\"),\n",
       "          nodeSizeNormalizationMinSlider: document.getElementById(\"in25kxQoTrpu5Cpf8-node-size-normalization-min-slider\"),\n",
       "          nodeSizeNormalizationMaxText: document.getElementById(\"in25kxQoTrpu5Cpf8-node-size-normalization-max-text\"),\n",
       "          nodeSizeNormalizationMaxSlider: document.getElementById(\"in25kxQoTrpu5Cpf8-node-size-normalization-max-slider\"),\n",
       "          edgeSizeDataSourceSelect: document.getElementById(\"in25kxQoTrpu5Cpf8-edge-size-data-source-select\"),\n",
       "          edgeSizeNormalizationCheckbox: document.getElementById(\"in25kxQoTrpu5Cpf8-edge-size-normalization-checkbox\"),\n",
       "          edgeSizeNormalizationContainer: document.getElementById(\"in25kxQoTrpu5Cpf8-edge-size-norm-div\"),\n",
       "          edgeSizeNormalizationMinText: document.getElementById(\"in25kxQoTrpu5Cpf8-edge-size-normalization-min-text\"),\n",
       "          edgeSizeNormalizationMinSlider: document.getElementById(\"in25kxQoTrpu5Cpf8-edge-size-normalization-min-slider\"),\n",
       "          edgeSizeNormalizationMaxText: document.getElementById(\"in25kxQoTrpu5Cpf8-edge-size-normalization-max-text\"),\n",
       "          edgeSizeNormalizationMaxSlider: document.getElementById(\"in25kxQoTrpu5Cpf8-edge-size-normalization-max-slider\"),\n",
       "          // General\n",
       "          generalHead: document.getElementById(\"in25kxQoTrpu5Cpf8-general-head\"),\n",
       "          generalBody: document.getElementById(\"in25kxQoTrpu5Cpf8-general-body\"),\n",
       "          resetButton: document.getElementById(\"in25kxQoTrpu5Cpf8-reset\"),\n",
       "          fullscreenButton: document.getElementById(\"in25kxQoTrpu5Cpf8-fullscreen-button\"),\n",
       "          svgExportButton: document.getElementById(\"in25kxQoTrpu5Cpf8-svg\"),\n",
       "          pngExportButton: document.getElementById(\"in25kxQoTrpu5Cpf8-png\"),\n",
       "          jpgExportButton: document.getElementById(\"in25kxQoTrpu5Cpf8-jpg\"),\n",
       "          // Nodes\n",
       "          nodeHead: document.getElementById(\"in25kxQoTrpu5Cpf8-node-head\"),\n",
       "          nodeBody: document.getElementById(\"in25kxQoTrpu5Cpf8-node-body\"),\n",
       "          nodeCheckbox: document.getElementById(\"in25kxQoTrpu5Cpf8-node-checkbox\"),\n",
       "          nodeSizeFactorText: document.getElementById(\"in25kxQoTrpu5Cpf8-node-size-factor-text\"),\n",
       "          nodeSizeFactorSlider: document.getElementById(\"in25kxQoTrpu5Cpf8-node-size-factor-slider\"),\n",
       "          nodeDragFixCheckbox: document.getElementById(\"in25kxQoTrpu5Cpf8-node-drag-fix-checkbox\"),\n",
       "          nodeHoverNeighborhoodCheckbox: document.getElementById(\"in25kxQoTrpu5Cpf8-node-hover-neighborhood-checkbox\"),\n",
       "          nodeHoverTooltipCheckbox: document.getElementById(\"in25kxQoTrpu5Cpf8-node-hover-tooltip-checkbox\"),\n",
       "          nodeReleaseButton: document.getElementById(\"in25kxQoTrpu5Cpf8-node-release-button\"),\n",
       "          // Node images\n",
       "          nodeImageHead: document.getElementById(\"in25kxQoTrpu5Cpf8-node-image-head\"),\n",
       "          nodeImageBody: document.getElementById(\"in25kxQoTrpu5Cpf8-node-image-body\"),\n",
       "          nodeImageCheckbox: document.getElementById(\"in25kxQoTrpu5Cpf8-node-image-checkbox\"),\n",
       "          nodeImageMetaControl: document.getElementById(\"in25kxQoTrpu5Cpf8-node-image-meta-control\"),\n",
       "          nodeImageSizeFactorText: document.getElementById(\"in25kxQoTrpu5Cpf8-node-image-size-factor-text\"),\n",
       "          nodeImageSizeFactorSlider: document.getElementById(\"in25kxQoTrpu5Cpf8-node-image-size-factor-slider\"),\n",
       "          // Node labels\n",
       "          nodeLabelHead: document.getElementById(\"in25kxQoTrpu5Cpf8-node-label-head\"),\n",
       "          nodeLabelBody: document.getElementById(\"in25kxQoTrpu5Cpf8-node-label-body\"),\n",
       "          nodeLabelCheckbox: document.getElementById(\"in25kxQoTrpu5Cpf8-node-label-checkbox\"),\n",
       "          nodeLabelBorderCheckbox: document.getElementById(\"in25kxQoTrpu5Cpf8-node-label-border-checkbox\"),\n",
       "          nodeLabelTextDataSourceSelect: document.getElementById(\"in25kxQoTrpu5Cpf8-node-label-data-source-select\"),\n",
       "          nodeLabelSizeFactorText: document.getElementById(\"in25kxQoTrpu5Cpf8-node-label-size-factor-text\"),\n",
       "          nodeLabelSizeFactorSlider: document.getElementById(\"in25kxQoTrpu5Cpf8-node-label-size-factor-slider\"),\n",
       "          nodeLabelRotationText: document.getElementById(\"in25kxQoTrpu5Cpf8-node-label-rotation-text\"),\n",
       "          nodeLabelRotationSlider: document.getElementById(\"in25kxQoTrpu5Cpf8-node-label-rotation-slider\"),\n",
       "          // Edges\n",
       "          edgeHead: document.getElementById(\"in25kxQoTrpu5Cpf8-edge-head\"),\n",
       "          edgeBody: document.getElementById(\"in25kxQoTrpu5Cpf8-edge-body\"),\n",
       "          edgeCheckbox: document.getElementById(\"in25kxQoTrpu5Cpf8-edge-checkbox\"),\n",
       "          edgeSizeFactorText: document.getElementById(\"in25kxQoTrpu5Cpf8-edge-size-factor-text\"),\n",
       "          edgeSizeFactorSlider: document.getElementById(\"in25kxQoTrpu5Cpf8-edge-size-factor-slider\"),\n",
       "          edgeCurvatureText: document.getElementById(\"in25kxQoTrpu5Cpf8-edge-curvature-text\"),\n",
       "          edgeCurvatureSlider: document.getElementById(\"in25kxQoTrpu5Cpf8-edge-curvature-slider\"),\n",
       "          edgeHoverTooltipCheckbox: document.getElementById(\"in25kxQoTrpu5Cpf8-edge-hover-tooltip-checkbox\"),\n",
       "          // Edge labels\n",
       "          edgeLabelHead: document.getElementById(\"in25kxQoTrpu5Cpf8-edge-label-head\"),\n",
       "          edgeLabelBody: document.getElementById(\"in25kxQoTrpu5Cpf8-edge-label-body\"),\n",
       "          edgeLabelCheckbox: document.getElementById(\"in25kxQoTrpu5Cpf8-edge-label-checkbox\"),\n",
       "          edgeLabelBorderCheckbox: document.getElementById(\"in25kxQoTrpu5Cpf8-edge-label-border-checkbox\"),\n",
       "          edgeLabelTextDataSourceSelect: document.getElementById(\"in25kxQoTrpu5Cpf8-edge-label-data-source-select\"),\n",
       "          edgeLabelSizeFactorText: document.getElementById(\"in25kxQoTrpu5Cpf8-edge-label-size-factor-text\"),\n",
       "          edgeLabelSizeFactorSlider: document.getElementById(\"in25kxQoTrpu5Cpf8-edge-label-size-factor-slider\"),\n",
       "          edgeLabelRotationText: document.getElementById(\"in25kxQoTrpu5Cpf8-edge-label-rotation-text\"),\n",
       "          edgeLabelRotationSlider: document.getElementById(\"in25kxQoTrpu5Cpf8-edge-label-rotation-slider\"),\n",
       "          // Layout algorithm\n",
       "          layoutAlgorithmHead: document.getElementById(\"in25kxQoTrpu5Cpf8-layout-algorithm-head\"),\n",
       "          layoutAlgorithmBody: document.getElementById(\"in25kxQoTrpu5Cpf8-layout-algorithm-body\"),\n",
       "          simulationCheckbox: document.getElementById(\"in25kxQoTrpu5Cpf8-simulation-active-checkbox\"),\n",
       "          layoutAlgorithmSelection: document.getElementById(\"in25kxQoTrpu5Cpf8-layout-algorithm-select\"),\n",
       "          centralGravitySlider: document.getElementById(\"in25kxQoTrpu5Cpf8-central-gravity-slider\"),\n",
       "          centralGravityText: document.getElementById(\"in25kxQoTrpu5Cpf8-central-gravity-text\"),\n",
       "          springLengthSlider: document.getElementById(\"in25kxQoTrpu5Cpf8-spring-length-slider\"),\n",
       "          springLengthText: document.getElementById(\"in25kxQoTrpu5Cpf8-spring-length-text\"),\n",
       "          springConstantSlider: document.getElementById(\"in25kxQoTrpu5Cpf8-spring-constant-slider\"),\n",
       "          springConstantText: document.getElementById(\"in25kxQoTrpu5Cpf8-spring-constant-text\"),\n",
       "          gravitationalConstantContainer: document.getElementById(\"in25kxQoTrpu5Cpf8-gravitational-constant-div\"),\n",
       "          gravitationalConstantSlider: document.getElementById(\"in25kxQoTrpu5Cpf8-gravitational-constant-slider\"),\n",
       "          gravitationalConstantText: document.getElementById(\"in25kxQoTrpu5Cpf8-gravitational-constant-text\"),\n",
       "          avoidOverlapContainer: document.getElementById(\"in25kxQoTrpu5Cpf8-avoid-overlap-div\"),\n",
       "          avoidOverlapSlider: document.getElementById(\"in25kxQoTrpu5Cpf8-avoid-overlap-slider\"),\n",
       "          avoidOverlapText: document.getElementById(\"in25kxQoTrpu5Cpf8-avoid-overlap-text\"),\n",
       "        },\n",
       "\n",
       "        composites:{\n",
       "          responsiveContainer:{\n",
       "            init(){\n",
       "              // Delete all contained items (relevant only for reset, not first creation)\n",
       "              ui.deleteChildElements(ui.elements.graphContainer);\n",
       "              ui.deleteChildElements(ui.elements.detailsBody);\n",
       "              // Menu\n",
       "              if(state.showMenu){\n",
       "                ui.composites.menu.show();\n",
       "              } else{\n",
       "                ui.composites.menu.hide();\n",
       "              }\n",
       "              // Details\n",
       "              if(state.showDetails){\n",
       "                ui.composites.details.show(true);\n",
       "              } else{\n",
       "                ui.composites.details.hide(true);\n",
       "              }\n",
       "              // Divs\n",
       "              ui.composites.responsiveContainer.setInnerHeights();\n",
       "              ui.composites.responsiveContainer.setOuterHeights();\n",
       "              ui.composites.responsiveContainer.getInnerWidths();\n",
       "            },\n",
       "\n",
       "            getInnerWidths(){\n",
       "              state.graphContainerWidth = parseInt(ui.elements.graphContainer.clientWidth);\n",
       "              state.detailsContainerWidth = parseInt(ui.elements.detailsContainer.clientWidth);\n",
       "            },\n",
       "\n",
       "            getInnerHeights(){\n",
       "              state.graphContainerHeight = parseInt(ui.elements.graphContainer.clientHeight);\n",
       "              if(state.showDetails){\n",
       "                state.detailsContainerHeight = parseInt(ui.elements.detailsContainer.clientHeight);\n",
       "              }\n",
       "            },\n",
       "\n",
       "            setInnerHeights(){\n",
       "              ui.elements.graphContainer.style.height = state.graphContainerHeight + \"px\";\n",
       "              ui.elements.detailsContainer.style.height = state.detailsContainerHeight + \"px\";\n",
       "            },\n",
       "\n",
       "            setOuterHeights(){\n",
       "              ui.elements.mainContainer.style.height = ui.elements.leftContainer.offsetHeight + \"px\";\n",
       "            },\n",
       "\n",
       "            getSizes(){\n",
       "              ui.composites.responsiveContainer.getInnerWidths();\n",
       "              ui.composites.responsiveContainer.getInnerHeights();\n",
       "            },\n",
       "\n",
       "            setSizes(){\n",
       "              ui.composites.responsiveContainer.setInnerHeights();\n",
       "              ui.composites.responsiveContainer.setOuterHeights();\n",
       "            },\n",
       "\n",
       "            adaptToResize(){\n",
       "              ui.composites.responsiveContainer.getSizes();\n",
       "              ui.composites.responsiveContainer.setSizes();\n",
       "            },\n",
       "\n",
       "            adaptToFullscreen(){\n",
       "              ui.composites.responsiveContainer.getSizes();\n",
       "              if(document.fullscreenElement){\n",
       "                // On entering fullscreen, remember the current container heights\n",
       "                state.beforeFullscreenGraphContainerHeight = state.graphContainerHeight;\n",
       "                state.beforeFullscreenDetailsContainerHeight = state.detailsContainerHeight;\n",
       "                // and then adapt them to maximum height possible in full screen mode\n",
       "                function calculateFullscreenMaxGraphHeight(){\n",
       "                  let outerHeight = null;\n",
       "                  try{\n",
       "                    const mainDivComputedStyle = window.getComputedStyle(ui.elements.mainContainer),\n",
       "                      graphDivComputedStyle = window.getComputedStyle(ui.elements.graphContainer),\n",
       "                      paddingTop = parseFloat(mainDivComputedStyle.paddingTop),\n",
       "                      borderTop = parseFloat(graphDivComputedStyle.borderTopWidth),\n",
       "                      borderBottom = parseFloat(graphDivComputedStyle.borderBottomWidth),\n",
       "                      paddingBottom = parseFloat(mainDivComputedStyle.paddingBottom);\n",
       "                    outerHeight = paddingTop + borderTop + borderBottom + paddingBottom;\n",
       "                    if(!isFinite(outerHeight) || outerHeight === null){\n",
       "                      throw \"Invalid number\";\n",
       "                    }\n",
       "                  } catch(e){\n",
       "                    // Hard coded fallback, depends on CSS of containers (1px borders, 6px padding)\n",
       "                    outerHeight = 1 + 3 + 3 + 1;\n",
       "                  }\n",
       "                  let graphHeight = screen.height - outerHeight;\n",
       "                  if(state.showDetails){\n",
       "                    graphHeight -= ui.composites.details.calculateHeightDifference();\n",
       "                  }\n",
       "                  return graphHeight;\n",
       "                }\n",
       "                state.graphContainerHeight = calculateFullscreenMaxGraphHeight();\n",
       "              } else{\n",
       "                // On leaving fullscreen, set container heights back to remembered values\n",
       "                state.graphContainerHeight = state.beforeFullscreenGraphContainerHeight;\n",
       "                state.detailsContainerHeight = state.beforeFullscreenDetailsContainerHeight;\n",
       "              }\n",
       "              ui.composites.responsiveContainer.setSizes();\n",
       "            },\n",
       "          },\n",
       "\n",
       "          menu:{\n",
       "            show(){\n",
       "              ui.elements.leftContainer.style.width = \"80%\";\n",
       "              ui.elements.rightContainer.style.width = \"20%\";\n",
       "              ui.elements.rightContainer.style.display = \"block\";\n",
       "            },\n",
       "\n",
       "            hide(){\n",
       "              ui.elements.leftContainer.style.width = \"100%\";\n",
       "              ui.elements.rightContainer.style.width = \"0%\";\n",
       "              ui.elements.rightContainer.style.display = \"none\";\n",
       "            },\n",
       "\n",
       "            toggle(){\n",
       "              // Update menu button\n",
       "              const div = ui.elements.menuToggleDiv;\n",
       "              state.showMenu = !state.showMenu;\n",
       "              if(state.showMenu){\n",
       "                div.innerText = ui.symbols.menuShown;\n",
       "                ui.composites.menu.show();\n",
       "              } else {\n",
       "                div.innerHTML = ui.symbols.menuHidden;\n",
       "                ui.composites.menu.hide();\n",
       "              }\n",
       "\n",
       "              // Update rest of UI\n",
       "              ui.composites.responsiveContainer.getInnerWidths();\n",
       "              ui.composites.responsiveContainer.getInnerHeights();\n",
       "              ui.composites.responsiveContainer.setOuterHeights();\n",
       "              ui.composites.graph.updateGraphDrawingArea();\n",
       "            },\n",
       "\n",
       "            setItem(keyElement, valElement, toActive){\n",
       "              const currentText = keyElement.innerHTML;\n",
       "              let sliceStart = 0;\n",
       "              if(currentText.startsWith(ui.symbols.menuItemActive)){\n",
       "                sliceStart = ui.symbols.menuItemActive.length;\n",
       "              } else if (currentText.startsWith(ui.symbols.menuItemInactive)){\n",
       "                sliceStart = ui.symbols.menuItemInactive.length;\n",
       "              }\n",
       "              if(toActive){\n",
       "                keyElement.innerHTML = ui.symbols.menuItemActive + currentText.slice(sliceStart);\n",
       "                keyElement.style.backgroundColor = \"#f5f5f5\";\n",
       "                keyElement.style.color = \"black\";\n",
       "                keyElement.style.borderColor = \"#999\";\n",
       "                keyElement.style.boxShadow = \"0px 0px 3px rgba(0, 0, 0, 0.35)\";\n",
       "                valElement.style.display = \"block\";\n",
       "              } else {\n",
       "                keyElement.innerHTML = ui.symbols.menuItemInactive + currentText.slice(sliceStart);\n",
       "                keyElement.style.backgroundColor = \"white\";\n",
       "                keyElement.style.color = \"#222\";\n",
       "                keyElement.style.borderColor = \"#ccc\";\n",
       "                keyElement.style.boxShadow = \"0px 0px 3px rgba(0, 0, 0, 0.2)\";\n",
       "                valElement.style.display = \"none\";\n",
       "              }\n",
       "            },\n",
       "\n",
       "            toggleItem(keyElement, valElement){\n",
       "              const toActive = !(valElement.style.display !== \"none\");\n",
       "              ui.composites.menu.setItem(keyElement, valElement, toActive);\n",
       "            },\n",
       "          },\n",
       "\n",
       "          details:{\n",
       "            calculateHeightDifference(){\n",
       "              let outerHeight = null;\n",
       "              try{\n",
       "                const graphContainerComputedStyle = window.getComputedStyle(ui.elements.graphContainer),\n",
       "                  detailsContainerComputedStyle = window.getComputedStyle(ui.elements.detailsContainer),\n",
       "                  border1 = parseFloat(graphContainerComputedStyle.borderBottomWidth),\n",
       "                  margin = parseFloat(detailsContainerComputedStyle.marginTop),\n",
       "                  border2 = parseFloat(detailsContainerComputedStyle.borderTopWidth);\n",
       "                outerHeight = border1 + margin + border2;\n",
       "                if(!isFinite(outerHeight) || outerHeight === null){\n",
       "                  throw \"Invalid number\";\n",
       "                }\n",
       "              } catch(e){\n",
       "                // Hard coded fallback, depends on CSS of containers (1px borders, 5px margin)\n",
       "                outerHeight = 7.0;\n",
       "              }\n",
       "              return state.detailsContainerHeight + outerHeight\n",
       "            },\n",
       "\n",
       "            show(init=false){\n",
       "              // Visibility\n",
       "              ui.elements.detailsContainer.style.display = \"block\";\n",
       "              if(!init){\n",
       "                // Height\n",
       "                const heightDiff = ui.composites.details.calculateHeightDifference();\n",
       "                state.graphContainerHeight -= heightDiff;\n",
       "                if(state.graphContainerHeight < 70){\n",
       "                  state.graphContainerHeight = 70;\n",
       "                }\n",
       "                // Update rest of UI\n",
       "                ui.composites.responsiveContainer.setSizes();\n",
       "                ui.composites.graph.updateGraphDrawingArea();\n",
       "              }\n",
       "            },\n",
       "\n",
       "            hide(init=false){\n",
       "              // Visibility\n",
       "              ui.elements.detailsContainer.style.display = \"none\";\n",
       "              if(!init){\n",
       "                // Height\n",
       "                const heightDiff = ui.composites.details.calculateHeightDifference();\n",
       "                state.graphContainerHeight += heightDiff;\n",
       "                // Update rest of UI\n",
       "                ui.composites.responsiveContainer.setSizes();\n",
       "                ui.composites.graph.updateGraphDrawingArea();\n",
       "              }\n",
       "            },\n",
       "\n",
       "            toggle(){\n",
       "              // Update details button\n",
       "              const toggleDiv = ui.elements.detailsToggleDiv;\n",
       "              state.showDetails = !state.showDetails;\n",
       "              if(state.showDetails){\n",
       "                toggleDiv.innerText = ui.symbols.detailsShown;\n",
       "                ui.composites.details.show();\n",
       "              } else {\n",
       "                toggleDiv.innerHTML = ui.symbols.detailsHidden;\n",
       "                ui.composites.details.hide();\n",
       "              }\n",
       "            },\n",
       "          },\n",
       "\n",
       "          download:{\n",
       "            png(filename){\n",
       "              ui.composites.download._rasterImage(filename, \"png\");\n",
       "            },\n",
       "\n",
       "            jpg(filename){\n",
       "              ui.composites.download._rasterImage(filename, \"jpeg\");\n",
       "            },\n",
       "\n",
       "            _rasterImage(filename, format){\n",
       "              const canvas = ui.elements.graphContainer.getElementsByTagName(\"canvas\")[0],\n",
       "                mimeType = \"image/\" + format;\n",
       "              function finishedBlobCallback(blob){\n",
       "                ui.composites.download._blobToFileDownload(blob, filename);\n",
       "              }\n",
       "              try{\n",
       "                // Blob to overcome size limitations for data URLs (e.g. 4MB in Chrome)\n",
       "                canvas.toBlob(finishedBlobCallback, mimeType, 1.0);\n",
       "              } catch(e){\n",
       "                if(e.name === \"SecurityError\"){\n",
       "                  alert(\"Image creation failed. Some images within the nodes of the graph can \" +\n",
       "                      \"not be fetched from within JavaScript due to security settings of the \" +\n",
       "                      \"server that provides the images.\");\n",
       "                } else{\n",
       "                  throw e;\n",
       "                }\n",
       "              }\n",
       "            },\n",
       "\n",
       "            _blobToFileDownload(blob, filename){\n",
       "              const url = URL.createObjectURL(blob),\n",
       "                a = document.createElement(\"a\");\n",
       "              function handleClick(){\n",
       "                setTimeout(function(){\n",
       "                  // Long waiting time before removal for slow devices like mobile phones\n",
       "                  URL.revokeObjectURL(url);\n",
       "                  this.removeEventListener(\"click\", handleClick);\n",
       "                }, 20000);\n",
       "              };\n",
       "              document.body.appendChild(a);\n",
       "              a.href = url;\n",
       "              a.download = filename;\n",
       "              a.addEventListener(\"click\", handleClick, false);\n",
       "              a.click();\n",
       "              document.body.removeChild(a);\n",
       "            },\n",
       "          },\n",
       "\n",
       "          selection(element, optionList, valueList=undefined) {\n",
       "            while(element.hasChildNodes()){\n",
       "              element.removeChild(element.firstChild);\n",
       "            }\n",
       "            for(let i=0; i<optionList.length; i++){\n",
       "              let text = optionList[i];\n",
       "              let value = text;\n",
       "              if(valueList){\n",
       "                value = valueList[i];\n",
       "              }\n",
       "              let opt = document.createElement(\"option\");\n",
       "              opt.appendChild(document.createTextNode(text));\n",
       "              opt.value = value;\n",
       "              element.appendChild(opt);\n",
       "            }\n",
       "          },\n",
       "\n",
       "          tooltip:{\n",
       "            show(xShift=null, yShift=null){\n",
       "              if(isFinite(xShift) && xShift !== null){\n",
       "                ui.elements.tooltipContainer.style.left =  parseInt(xShift) + \"px\";\n",
       "              }\n",
       "              if(isFinite(yShift) && yShift !== null){\n",
       "                ui.elements.tooltipContainer.style.top = parseInt(yShift) + \"px\";\n",
       "              }\n",
       "              ui.elements.tooltipContainer.style.transition = \"visibility 0s, opacity 0.1s\";\n",
       "              ui.elements.tooltipContainer.style.visibility = \"visible\";\n",
       "              ui.elements.tooltipContainer.style.opacity = 1.0;\n",
       "            },\n",
       "\n",
       "            hide(){\n",
       "              ui.elements.tooltipContainer.style.transition = \"visibility 0.3s, opacity 0.3s ease-in\";\n",
       "              ui.elements.tooltipContainer.style.visibility = \"hidden\";\n",
       "              ui.elements.tooltipContainer.style.opacity = 0.0;\n",
       "            },\n",
       "          },\n",
       "\n",
       "          progressBar:{\n",
       "            create(){\n",
       "              // Main container\n",
       "              this.mainContainer = document.createElement(\"div\");\n",
       "              this.mainContainer.id = \"in25kxQoTrpu5Cpf8-progress-container\";\n",
       "              this.mainContainer.style.backgroundColor = state.shownData.general.background_color;\n",
       "              ui.elements.graphContainer.style.backgroundColor = state.shownData.general.background_color;\n",
       "              // Text container\n",
       "              const numNodes = state.parsedData.nodes.length;\n",
       "              this.textContainer = document.createElement(\"div\");\n",
       "              this.textContainer.innerText = \"Large graph with \" + numNodes + \" nodes. Calculating an initial layout before visualizing it.\";\n",
       "              this.textContainer.style.textAlign = \"center\";\n",
       "              // Bar container\n",
       "              this.outerBarContainer = document.createElement(\"div\");\n",
       "              this.outerBarContainer.style.border = \"1px solid black\";\n",
       "              this.outerBarContainer.style.borderRadius = \"4px\";\n",
       "              this.outerBarContainer.style.marginTop = \"1ex\";\n",
       "              this.outerBarContainer.style.padding = \"1px\";\n",
       "              this.innerBarContainer = document.createElement(\"div\");\n",
       "              this.innerBarContainer.style.backgroundColor = \"black\";\n",
       "              this.innerBarContainer.style.width = \"0%\";\n",
       "              this.innerBarContainer.style.height = \"8px\";\n",
       "              this.innerBarContainer.style.borderRadius = \"3px\";\n",
       "              // Add them to DOM\n",
       "              this.outerBarContainer.appendChild(this.innerBarContainer);\n",
       "              this.mainContainer.appendChild(this.textContainer);\n",
       "              this.mainContainer.appendChild(this.outerBarContainer);\n",
       "              ui.elements.graphContainer.appendChild(this.mainContainer);\n",
       "            },\n",
       "\n",
       "            update(percentage){\n",
       "              this.innerBarContainer.style.width = percentage + \"%\";\n",
       "            },\n",
       "\n",
       "            remove(){\n",
       "              ui.elements.graphContainer.removeChild(this.mainContainer);\n",
       "            }\n",
       "          },\n",
       "\n",
       "          graph:{\n",
       "            createGraph(){\n",
       "              // Remove existing elements\n",
       "              ui.deleteChildElements(ui.elements.graphContainer);\n",
       "\n",
       "              // Create new elements\n",
       "              // I) Set graph options\n",
       "              // a) Nodes: https://visjs.github.io/vis-network/docs/network/nodes.html\n",
       "              const data = state.shownData,\n",
       "                visNodes = [];\n",
       "              let graphContainsFixedPositions = false;\n",
       "              for(let i=0; i<data.nodes.length; i++){\n",
       "                const node = data.nodes[i];\n",
       "                let visNode = {\n",
       "                  id: node.id,\n",
       "                  shape: node.shape,\n",
       "                  borderWidth: node.border_size,\n",
       "                  color: {\n",
       "                    background: node.color,\n",
       "                    border: node.border_color,\n",
       "                  },\n",
       "                }\n",
       "                // - Node labels\n",
       "                if(state.showNodeLabels){\n",
       "                  if(typeof(node.label) !== \"undefined\"){\n",
       "                    visNode.label = node.label;\n",
       "                    visNode.font = {\n",
       "                      size: node.label_size,\n",
       "                      color: node.label_color,\n",
       "                      strokeWidth: (state.showNodeLabelBorders ? 1.2 : 0.0),\n",
       "                      strokeColor: data.general.background_color,\n",
       "                    }\n",
       "                  }\n",
       "                }\n",
       "                // - Nodes hidden/shown (\"hidden\" property hides entire graph, using size=0 instead)\n",
       "                if(state.showNodes || (typeof(node.image) !== \"undefined\" && state.showNodeImages)){\n",
       "                  visNode.size = node.size;\n",
       "                } else {\n",
       "                  visNode.size = 0.0;\n",
       "                }\n",
       "                // - Node images\n",
       "                if(typeof(node.image) !== \"undefined\"){\n",
       "                  if(state.showNodeImages){\n",
       "                    visNode.shape = \"image\";\n",
       "                    visNode.image = node.image;\n",
       "                    visNode.size = node.image_size;\n",
       "                    // prevent a visual change of nodes with images upon selection (not deactivatable)\n",
       "                    visNode.color.highlight = {\n",
       "                      background: visNode.color.background,\n",
       "                      border: visNode.color.border,\n",
       "                    };\n",
       "                    visNode.borderWidthSelected = visNode.borderWidth;\n",
       "                  }\n",
       "                }\n",
       "                // - Node positions\n",
       "                const x = node.fx,\n",
       "                  y = node.fy;\n",
       "                if((typeof(x) !== \"undefined\") || (typeof(y) !== \"undefined\")){\n",
       "                  graphContainsFixedPositions = true;\n",
       "                  visNode.fixed = {}\n",
       "                  if(typeof(x) !== \"undefined\"){\n",
       "                    visNode.x = x;\n",
       "                    visNode.fixed.x = true;\n",
       "                  }\n",
       "                  if(typeof(y) !== \"undefined\"){\n",
       "                    visNode.y = y;\n",
       "                    visNode.fixed.y = true;\n",
       "                  }\n",
       "                }\n",
       "                // - Node hover behavior 1: highlight neighborhood\n",
       "                visNode.color.hover = {\n",
       "                  background: visNode.color.background,\n",
       "                  border: visNode.color.background,\n",
       "                };\n",
       "                // - Node hover behavior 2: show tooltip\n",
       "                if(state.nodeHoverTooltip){\n",
       "                  if(typeof(node.hover) !== \"undefined\"){\n",
       "                    visNode.title = node.hover;\n",
       "                  }\n",
       "                }\n",
       "                // - Node click behavior: show details\n",
       "                if(typeof(node.click) !== \"undefined\" && node.click !== \"\"){\n",
       "                  visNode.click = node.click;\n",
       "                }\n",
       "                visNodes.push(visNode);\n",
       "              }\n",
       "\n",
       "              // b) Edges: https://visjs.github.io/vis-network/docs/network/edges.html\n",
       "              const visEdges = [];\n",
       "              for(let i=0; i<data.edges.length; i++){\n",
       "                const edge = data.edges[i];\n",
       "                const visEdge = {\n",
       "                  id: edge.id,\n",
       "                  from: edge.source.id,\n",
       "                  to: edge.target.id,\n",
       "                  color: edge.color,\n",
       "                  width: edge.size,\n",
       "                };\n",
       "                // - Edge labels\n",
       "                if(state.showEdgeLabels){\n",
       "                  if(typeof(edge.label) !== \"undefined\"){\n",
       "                    visEdge.label = edge.label;\n",
       "                    visEdge.font = {\n",
       "                      size: edge.label_size,\n",
       "                      color: edge.label_color,\n",
       "                      strokeWidth: (state.showEdgeLabelBorders ? 1.2 : 0.0),\n",
       "                      strokeColor: data.general.background_color,\n",
       "                    }\n",
       "                  }\n",
       "                }\n",
       "                // - Edges hidden/shown\n",
       "                if(!state.showEdges){\n",
       "                  visEdge.hidden = true;\n",
       "                }\n",
       "                // - Edge hover behavior\n",
       "                if(state.edgeHoverTooltip){\n",
       "                  if(typeof(edge.hover) !== \"undefined\") {\n",
       "                    visEdge.title = edge.hover;\n",
       "                  }\n",
       "                }\n",
       "                // - Edge click behavior\n",
       "                if(typeof(edge.click) !== \"undefined\" && edge.click !== \"\"){\n",
       "                  visEdge.click = edge.click;\n",
       "                }\n",
       "                visEdges.push(visEdge);\n",
       "              }\n",
       "              // c) Options: https://visjs.github.io/vis-network/docs/network/\n",
       "              const options = {};\n",
       "              // - Nodes\n",
       "              options.nodes = {};\n",
       "              options.nodes.chosen = false;\n",
       "              options.nodes.imagePadding = 1.5;\n",
       "              options.nodes.labelHighlightBold = false;\n",
       "              options.nodes.shapeProperties = {};\n",
       "              options.nodes.shapeProperties.useBorderWithImage = true;\n",
       "              // - Node label font family\n",
       "              if(state.nodeLabelFont !== null){\n",
       "                options.nodes.font = {\n",
       "                  \"face\": state.nodeLabelFont,\n",
       "                }\n",
       "              }\n",
       "              // - Edges\n",
       "              options.edges = {};\n",
       "              // - Edges hidden/shown\n",
       "              if(!state.showEdges){\n",
       "                options.edges.hidden = true;\n",
       "              }\n",
       "              // - Edge curvature\n",
       "              if(state.edgeCurvature === 0.0){\n",
       "                options.edges.smooth = false;\n",
       "              } else {\n",
       "                options.edges.smooth = ui.composites.graph.calculateEdgeCurvatureOptions();\n",
       "              }\n",
       "              // - Edge arrows\n",
       "              if(data.general.directed){\n",
       "                options.edges.arrows = {};\n",
       "                options.edges.arrows.to = {};\n",
       "                options.edges.arrows.to.enabled = true;\n",
       "                if(data.general.arrow_size !== 0.0){\n",
       "                  options.edges.arrows.to.scaleFactor = data.general.arrow_size / 10.0;\n",
       "                }\n",
       "              }\n",
       "              // - Edge label font family\n",
       "              if(state.edgeLabelFont !== null){\n",
       "                options.edges.font = {\n",
       "                  \"face\": state.edgeLabelFont,\n",
       "                }\n",
       "              }\n",
       "              // - Drawing area\n",
       "              options.autoResize = false;\n",
       "              // - Interaction\n",
       "              options.interaction = {};\n",
       "              options.interaction.selectable = false;\n",
       "              options.interaction.selectConnectedEdges = false;\n",
       "              options.interaction.tooltipDelay = 0.0;\n",
       "              options.interaction.hover = state.nodeHoverNeighborhood;\n",
       "              options.interaction.hoverConnectedEdges = state.nodeHoverNeighborhood;\n",
       "              // - Layout algorithm\n",
       "              const numNodes = state.parsedData.nodes.length;\n",
       "              options.layout = {};\n",
       "              if(numNodes < 400){\n",
       "                options.layout.improvedLayout = true;\n",
       "              } else{\n",
       "                options.layout.improvedLayout = false;\n",
       "              }\n",
       "              options.physics = {};\n",
       "              options.physics.barnesHut = {\"damping\": 0.25};\n",
       "              options.physics.forceAtlas2Based = {\"damping\": 3.0};\n",
       "              options.physics.repulsion = {};\n",
       "              options.physics.hierarchicalRepulsion = {};\n",
       "              options.physics.stabilization = {};\n",
       "              options.physics.stabilization.enabled = false;\n",
       "              if(numNodes > state.largeGraphThreshold){\n",
       "                let numIterations = 800;\n",
       "                if(numNodes >= 25000){\n",
       "                  numIterations = 100;\n",
       "                } else if(numNodes >= 10000){\n",
       "                  numIterations = 300;\n",
       "                } else if(numNodes >= 5000){\n",
       "                  numIterations = 400;\n",
       "                } else if(numNodes >= 2000){\n",
       "                  numIterations = 500;\n",
       "                } else if(numNodes >= 1000){\n",
       "                  numIterations = 600;\n",
       "                }\n",
       "                options.physics.stabilization = {\n",
       "                  \"enabled\": true,\n",
       "                  \"fit\": true,\n",
       "                  \"iterations\": numIterations,\n",
       "                  \"updateInterval\": 1,\n",
       "                };\n",
       "              }\n",
       "              // II) Create graph\n",
       "              // - DataSet and Network: https://visjs.github.io/vis-network/docs/network\n",
       "              state.visOptions = options;\n",
       "              state.visData = {\n",
       "                nodes: new vis.DataSet(visNodes),\n",
       "                edges: new vis.DataSet(visEdges),\n",
       "              };\n",
       "              state.visGraph = new vis.Network(ui.elements.graphContainer, state.visData, state.visOptions);\n",
       "              // III) Set further graph options after its creation\n",
       "              // - Background: https://github.com/almende/vis/issues/2292\n",
       "              state.visGraph.on(\"beforeDrawing\", function(ctx){\n",
       "                  ctx.save();\n",
       "                  ctx.setTransform(1, 0, 0, 1, 0, 0);\n",
       "                  ctx.fillStyle = data.general.background_color;\n",
       "                  ctx.fillRect(0, 0, ctx.canvas.width, ctx.canvas.height);\n",
       "                  ctx.restore();\n",
       "              })\n",
       "              // - Node positions: node update after graph creation seems to prevent a bug\n",
       "              if(graphContainsFixedPositions){\n",
       "                state.visData.nodes.update(visNodes);\n",
       "              }\n",
       "              // - Graph behavior\n",
       "              ui.composites.graph.setBehavior();\n",
       "\n",
       "              // Menu toggle button\n",
       "              if(state.showMenuToggleButton){\n",
       "                const menuDiv = document.createElement(\"div\");\n",
       "                if(state.showMenu){\n",
       "                  menuDiv.innerText = ui.symbols.menuShown;\n",
       "                } else {\n",
       "                  menuDiv.innerText = ui.symbols.menuHidden;\n",
       "                }\n",
       "                menuDiv.id = \"in25kxQoTrpu5Cpf8-menu-toggle-button\";\n",
       "                menuDiv.onclick = ui.composites.menu.toggle;\n",
       "                ui.elements.graphContainer.appendChild(menuDiv);\n",
       "                ui.elements.menuToggleDiv = menuDiv;\n",
       "              }\n",
       "              // Details toggle button\n",
       "              if(state.showDetailsToggleButton){\n",
       "                const detailsDiv = document.createElement(\"div\");\n",
       "                if(state.showDetails){\n",
       "                  detailsDiv.innerText = ui.symbols.detailsShown;\n",
       "                } else {\n",
       "                  detailsDiv.innerText = ui.symbols.detailsHidden;\n",
       "                }\n",
       "                detailsDiv.id = \"in25kxQoTrpu5Cpf8-details-toggle-button\";\n",
       "                detailsDiv.onclick = ui.composites.details.toggle;\n",
       "                ui.elements.graphContainer.appendChild(detailsDiv);\n",
       "                ui.elements.detailsToggleDiv = detailsDiv;\n",
       "              }\n",
       "            },\n",
       "\n",
       "            setBehavior(){\n",
       "              // - Progress bar: only if large graph, stops simulation to get initial static image\n",
       "              // https://visjs.github.io/vis-network/examples/network/exampleApplications/loadingBar.html\n",
       "              const numNodes = state.parsedData.nodes.length;\n",
       "              if(numNodes > state.largeGraphThreshold){\n",
       "                // Layout start\n",
       "                ui.composites.progressBar.create();\n",
       "                // Layout update\n",
       "                state.visGraph.on(\"stabilizationProgress\", function(params){\n",
       "                  var progressPercentage = params.iterations / params.total * 100;\n",
       "                  ui.composites.progressBar.update(progressPercentage);\n",
       "                });\n",
       "                // Layout finished\n",
       "                state.visGraph.once(\"stabilizationIterationsDone\", function(){\n",
       "                  setTimeout(function(){\n",
       "                    ui.composites.progressBar.remove();\n",
       "                    ui.composites.graph.simulationManager.stop();\n",
       "                  }, 60);\n",
       "                });\n",
       "              }\n",
       "              // - Node drag behavior: move node, fix its position or release it afterwards\n",
       "              state.visGraph.on(\"dragStart\", function(params){\n",
       "                params.event = \"[original event]\";\n",
       "                const nodeId = this.getNodeAt(params.pointer.DOM);\n",
       "                if(nodeId){\n",
       "                  const visNode = state.visData.nodes.get(nodeId),\n",
       "                    position = state.visGraph.getPositions(nodeId);\n",
       "                  visNode.x = position.x;\n",
       "                  visNode.y = position.y;\n",
       "                  visNode.fixed = false;\n",
       "                  state.visData.nodes.update(visNode);\n",
       "                }\n",
       "              });\n",
       "              state.visGraph.on(\"dragEnd\", function(params){\n",
       "                params.event = \"[original event]\";\n",
       "                const nodeId = this.getNodeAt(params.pointer.DOM);\n",
       "                if(nodeId){\n",
       "                  if(state.nodeDragFix){\n",
       "                    const visNode = state.visData.nodes.get(nodeId),\n",
       "                      position = state.visGraph.getPositions(nodeId);\n",
       "                    visNode.x = position.x;\n",
       "                    visNode.y = position.y;\n",
       "                    visNode.fixed = {\"x\": true, \"y\": true}\n",
       "                    state.visData.nodes.update(visNode);\n",
       "                  }\n",
       "                }\n",
       "              });\n",
       "              // - Node and edge hover behavior: already covered\n",
       "              // - Node and edge click behavior\n",
       "              // https://visjs.github.io/vis-network/examples/network/events/interactionEvents.html\n",
       "              function createNodeText(node){\n",
       "                let htmlText = \"<div>Node: \" + String(node.id) + \"</div>\";\n",
       "                if(typeof(node.click) !== \"undefined\" && node.click !== \"\"){\n",
       "                  htmlText += '<div id=\"in25kxQoTrpu5Cpf8-details-user-provided\">' + node.click + '</div>';\n",
       "                }\n",
       "                return htmlText;\n",
       "              }\n",
       "              function createEdgeText(edge){\n",
       "                let htmlText = \"<div>Edge: \" + String(edge.id) + \"</div>\";\n",
       "                if(typeof(edge.click) !== \"undefined\" && edge.click !== \"\"){\n",
       "                  htmlText += '<div id=\"in25kxQoTrpu5Cpf8-details-user-provided\">' + edge.click + '</div>';\n",
       "                }\n",
       "                return htmlText;\n",
       "              }\n",
       "              state.visGraph.on(\"click\", function(params){\n",
       "                params.event = \"[original event]\";\n",
       "                let htmlText = \"\";\n",
       "                const nodeId = this.getNodeAt(params.pointer.DOM);\n",
       "                if(nodeId){\n",
       "                  const node = state.visData.nodes.get(nodeId);\n",
       "                  if(node){\n",
       "                    htmlText = createNodeText(node);\n",
       "                  }\n",
       "                } else {\n",
       "                  const edgeId = this.getEdgeAt(params.pointer.DOM);\n",
       "                  if(edgeId){\n",
       "                    const edge = state.visData.edges.get(edgeId);\n",
       "                    if(edge){\n",
       "                      htmlText = createEdgeText(edge);\n",
       "                    }\n",
       "                  }\n",
       "                }\n",
       "                ui.elements.detailsBody.innerHTML = htmlText;\n",
       "              });\n",
       "              // - Simulation behavior\n",
       "              state.visGraph.on(\"startStabilizing\", function(params){\n",
       "                // A manually stopped simulation restarts automatically by dragging a node or\n",
       "                // altering a dataset, immediately triggering this event. So if the simulation\n",
       "                // shall be inactive, any automatic restart can be turned off immediately here.\n",
       "                if(!state.layoutAlgorithmActive){\n",
       "                  state.visGraph.stopSimulation();\n",
       "                }\n",
       "              });\n",
       "              // Start (considers all simulation parameters)\n",
       "              ui.composites.graph.simulationManager.start();\n",
       "            },\n",
       "\n",
       "            // Graph\n",
       "            updateGraphDrawingArea(){\n",
       "              state.visGraph.setSize(state.graphContainerWidth, state.graphContainerHeight);\n",
       "              state.visGraph.redraw();\n",
       "            },\n",
       "\n",
       "            // Nodes\n",
       "            updateNodes(){\n",
       "              const data = state.shownData,\n",
       "                newVisNodes = [];\n",
       "              for(let i=0; i<data.nodes.length; i++){\n",
       "                const node = data.nodes[i],\n",
       "                  visNode = state.visData.nodes.get(node.id);\n",
       "                // Node shape\n",
       "                visNode.shape = node.shape;\n",
       "                // Node size\n",
       "                if(state.showNodes){\n",
       "                  visNode.size = node.size;\n",
       "                } else {\n",
       "                  visNode.size = 0.0;\n",
       "                }\n",
       "                // Node images\n",
       "                if(state.showNodeImages){\n",
       "                  if(typeof(node.image) !== \"undefined\"){\n",
       "                    visNode.size = node.image_size;\n",
       "                    visNode.shape = \"image\";\n",
       "                    visNode.image = node.image;\n",
       "                  }\n",
       "                }\n",
       "                // Prevent node movements: Remove stored positions of nodes once fixed and now released\n",
       "                if(visNode.fixed === false){\n",
       "                  delete visNode.x;\n",
       "                  delete visNode.y;\n",
       "                }\n",
       "                newVisNodes.push(visNode);\n",
       "              }\n",
       "              state.visData.nodes.update(newVisNodes);\n",
       "            },\n",
       "\n",
       "            preventNodeJump(visNode){\n",
       "              if(visNode.fixed === false){\n",
       "                delete visNode.x;\n",
       "                delete visNode.y;\n",
       "              }\n",
       "            },\n",
       "\n",
       "            updateNodeVisibilities(){\n",
       "              ui.composites.graph.updateNodes();\n",
       "            },\n",
       "\n",
       "            updateNodeSizes(){\n",
       "              const data = state.shownData,\n",
       "                newVisNodes = [];\n",
       "              for(let i=0; i<data.nodes.length; i++){\n",
       "                const node = data.nodes[i],\n",
       "                  visNode = state.visData.nodes.get(node.id);\n",
       "                visNode.size = node.size;\n",
       "                if(state.showNodeImages && typeof(node.image) !== \"undefined\"){\n",
       "                  visNode.size = node.image_size;\n",
       "                }\n",
       "                ui.composites.graph.preventNodeJump(visNode);\n",
       "                newVisNodes.push(visNode);\n",
       "              }\n",
       "              state.visData.nodes.update(newVisNodes);\n",
       "            },\n",
       "\n",
       "            updateNodeHoverNeighborhoodBehavior(){\n",
       "              state.visOptions.interaction.hover = state.nodeHoverNeighborhood;\n",
       "              state.visOptions.interaction.hoverConnectedEdges = state.nodeHoverNeighborhood;\n",
       "              state.visGraph.setOptions(state.visOptions);\n",
       "            },\n",
       "\n",
       "            updateNodeHoverTooltipBehavior(){\n",
       "              const data = state.shownData,\n",
       "                newVisNodes = [];\n",
       "              for(let i=0; i<data.nodes.length; i++){\n",
       "                const node = data.nodes[i],\n",
       "                  visNode = state.visData.nodes.get(node.id);\n",
       "                if(typeof(node.hover) !== \"undefined\"){\n",
       "                  visNode.title = state.nodeHoverTooltip ? node.hover : null;\n",
       "                }\n",
       "                newVisNodes.push(visNode);\n",
       "              }\n",
       "              state.visData.nodes.update(newVisNodes);\n",
       "            },\n",
       "\n",
       "            // Node images\n",
       "            updateNodeImages(){\n",
       "              const data = state.shownData,\n",
       "                newVisNodes = [];\n",
       "              for(let i=0; i<data.nodes.length; i++){\n",
       "                const node = data.nodes[i],\n",
       "                  visNode = state.visData.nodes.get(node.id);\n",
       "                visNode.shape = node.shape;\n",
       "                if(state.showNodes){\n",
       "                  visNode.size = node.size;\n",
       "                } else {\n",
       "                  visNode.size = 0.0;\n",
       "                }\n",
       "                if(state.showNodeImages){\n",
       "                  if(typeof(node.image) !== \"undefined\"){\n",
       "                    visNode.size = node.image_size;\n",
       "                    visNode.shape = \"image\";\n",
       "                    visNode.image = node.image;\n",
       "                  }\n",
       "                }\n",
       "                ui.composites.graph.preventNodeJump(visNode);\n",
       "                newVisNodes.push(visNode);\n",
       "              }\n",
       "              state.visData.nodes.update(newVisNodes);\n",
       "            },\n",
       "\n",
       "            // Node labels\n",
       "            updateNodeLabels(){\n",
       "              // Vis data sets: https://visjs.github.io/vis-data/data/dataset.html\n",
       "              const data = state.shownData,\n",
       "                newVisNodes = [];\n",
       "              for(let i=0; i<data.nodes.length; i++){\n",
       "                const node = data.nodes[i];\n",
       "                const visNode = state.visData.nodes.get(node.id);\n",
       "                if(state.showNodeLabels){\n",
       "                  visNode.label = node.label;\n",
       "                  visNode.font = {\n",
       "                    size: node.label_size,\n",
       "                    color: node.label_color,\n",
       "                    strokeWidth: (state.showNodeLabelBorders ? 1.2 : 0.0),\n",
       "                    strokeColor: data.general.background_color,\n",
       "                  }\n",
       "                } else{\n",
       "                  visNode.label = undefined;\n",
       "                }\n",
       "                ui.composites.graph.preventNodeJump(visNode);\n",
       "                newVisNodes.push(visNode);\n",
       "              }\n",
       "              state.visData.nodes.update(newVisNodes);\n",
       "            },\n",
       "\n",
       "            // Edges\n",
       "            calculateEdgeCurvatureOptions(){\n",
       "              const appearanceAdaptionFactor = 0.5,\n",
       "                options = {\n",
       "                \"type\": state.edgeCurvature > 0.0 ? \"curvedCW\" : \"curvedCCW\",\n",
       "                \"roundness\": Math.abs(state.edgeCurvature) * appearanceAdaptionFactor,\n",
       "              };\n",
       "              return options\n",
       "            },\n",
       "\n",
       "            updateEdgeVisibility(){\n",
       "              const data = state.shownData,\n",
       "                newVisEdges = [];\n",
       "              for(let i=0; i<data.edges.length; i++){\n",
       "                const edge = data.edges[i],\n",
       "                  visEdge = state.visData.edges.get(edge.id);\n",
       "                visEdge.hidden = !state.showEdges;\n",
       "                newVisEdges.push(visEdge);\n",
       "              }\n",
       "              state.visData.edges.update(newVisEdges);\n",
       "            },\n",
       "\n",
       "            updateEdgeSizes(){\n",
       "              const data = state.shownData,\n",
       "                newVisEdges = [];\n",
       "              for (let i=0; i<data.edges.length; i++){\n",
       "                const edge = data.edges[i],\n",
       "                  newVisEdge = state.visData.edges.get(edge.id);\n",
       "                newVisEdge.width = edge.size;\n",
       "                newVisEdges.push(newVisEdge);\n",
       "              }\n",
       "              state.visData.edges.update(newVisEdges);\n",
       "            },\n",
       "\n",
       "            updateEdgeCurvatures(){\n",
       "              if(state.edgeCurvature === 0.0){\n",
       "                state.visOptions.edges.smooth = false;\n",
       "              } else {\n",
       "                state.visOptions.edges.smooth = ui.composites.graph.calculateEdgeCurvatureOptions();\n",
       "              }\n",
       "              state.visGraph.setOptions(state.visOptions);\n",
       "            },\n",
       "\n",
       "            updateEdgeHoverTooltipBehavior(){\n",
       "              /* Correct code, but there is a bug that renders null values as empty div (instead of ignoring them)\n",
       "              const data = state.shownData,\n",
       "                newVisEdges = [];\n",
       "              for(let i=0; i<data.edges.length; i++){\n",
       "                const edge = data.edges[i],\n",
       "                  visEdge = state.visData.edges.get(edge.id);\n",
       "                if(typeof(edge.hover) !== \"undefined\"){\n",
       "                  visEdge.title = state.edgeHoverTooltip ? edge.hover : null;\n",
       "                }\n",
       "                newVisEdges.push(visEdge);\n",
       "              }\n",
       "              state.visData.edges.update(newVisEdges);\n",
       "              */\n",
       "              // Workaround code\n",
       "              function cloneObject(obj){\n",
       "                return Object.assign({}, obj);\n",
       "              }\n",
       "              const data = state.shownData,\n",
       "                newVisEdges = [];\n",
       "              for(let i=0; i<data.edges.length; i++){\n",
       "                const edge = data.edges[i],\n",
       "                  visEdge = state.visData.edges.get(edge.id);\n",
       "                if(typeof(edge.hover) !== \"undefined\"){\n",
       "                  if(state.edgeHoverTooltip){\n",
       "                    visEdge.title = edge.hover;\n",
       "                    newVisEdges.push(visEdge);\n",
       "                  } else{\n",
       "                    // edges.update can only add properties, not delete them, hence use of clone/remove/add\n",
       "                    clonedEdge = cloneObject(visEdge);\n",
       "                    delete clonedEdge.title;\n",
       "                    state.visData.edges.remove(edge.id);\n",
       "                    state.visData.edges.add(clonedEdge);\n",
       "                  }\n",
       "                }\n",
       "              }\n",
       "              if(state.edgeHoverTooltip){\n",
       "                state.visData.edges.update(newVisEdges);\n",
       "              }\n",
       "            },\n",
       "\n",
       "            // Edge labels\n",
       "            updateEdgeLabels(){\n",
       "              const data = state.shownData,\n",
       "                newVisEdges = [],\n",
       "                noLabel = \" \";  // undefined, null, \"\" or deleting label property does not work\n",
       "              for(let i=0; i<data.edges.length; i++){\n",
       "                const edge = data.edges[i],\n",
       "                  visEdge = state.visData.edges.get(edge.id);\n",
       "                if(state.showEdgeLabels){\n",
       "                  visEdge.label = edge.label;\n",
       "                  visEdge.font = {\n",
       "                    size: edge.label_size,\n",
       "                    color: edge.label_color,\n",
       "                    strokeWidth: (state.showEdgeLabelBorders ? 1.2 : 0.0),\n",
       "                    strokeColor: data.general.background_color,\n",
       "                  }\n",
       "                } else {\n",
       "                  visEdge.label = noLabel;\n",
       "                }\n",
       "                newVisEdges.push(visEdge);\n",
       "              }\n",
       "              state.visData.edges.update(newVisEdges);\n",
       "            },\n",
       "\n",
       "            // Layout algorithm\n",
       "            simulationManager:{\n",
       "              start(){\n",
       "                state.visGraph.startSimulation();\n",
       "                this.setAlgorithm();\n",
       "                this.setSpringLength();\n",
       "                this.setSpringConstant();\n",
       "                this.setCentralGravity();\n",
       "                this.setGravitationalConstant();\n",
       "                this.setAvoidOverlap();\n",
       "              },\n",
       "              stop(){\n",
       "                state.visGraph.stopSimulation();\n",
       "              },\n",
       "              setActivity(on){\n",
       "                if(on){\n",
       "                  this.start();\n",
       "                } else{\n",
       "                  this.stop();\n",
       "                }\n",
       "              },\n",
       "              setAlgorithm(){\n",
       "                const name = state.layoutAlgorithm;\n",
       "                state.visOptions.physics.solver = name;\n",
       "                state.visGraph.setOptions(state.visOptions);\n",
       "                if(name === \"repulsion\"){\n",
       "                  ui.elements.avoidOverlapContainer.style.opacity = ui.convert.boolToOpacity(false);\n",
       "                  ui.elements.gravitationalConstantContainer.style.opacity = ui.convert.boolToOpacity(false);\n",
       "                } else if(name === \"hierarchicalRepulsion\"){\n",
       "                  ui.elements.avoidOverlapContainer.style.opacity = ui.convert.boolToOpacity(true);\n",
       "                  ui.elements.gravitationalConstantContainer.style.opacity = ui.convert.boolToOpacity(false);\n",
       "                } else {\n",
       "                  ui.elements.avoidOverlapContainer.style.opacity = ui.convert.boolToOpacity(true);\n",
       "                  ui.elements.gravitationalConstantContainer.style.opacity = ui.convert.boolToOpacity(true);\n",
       "                }\n",
       "              },\n",
       "              releaseFixedNodes(){\n",
       "                const data = state.shownData,\n",
       "                  newVisNodes = [];\n",
       "                for(let i=0; i<data.nodes.length; i++){\n",
       "                  const node = data.nodes[i],\n",
       "                    visNode = state.visData.nodes.get(node.id);\n",
       "                  ui.composites.graph.preventNodeJump(visNode);\n",
       "                  visNode.fixed = false;\n",
       "                  // Note: Deletion of x, y and fixed may work too, but .update does not delete props\n",
       "                  newVisNodes.push(visNode);\n",
       "                }\n",
       "                state.visData.nodes.update(newVisNodes);\n",
       "              },\n",
       "              setSpringLength(){\n",
       "                state.visOptions.physics.barnesHut.springLength = state.springLength;\n",
       "                state.visOptions.physics.forceAtlas2Based.springLength = state.springLength;\n",
       "                state.visOptions.physics.repulsion.springLength = state.springLength;\n",
       "                state.visOptions.physics.hierarchicalRepulsion.springLength = state.springLength;\n",
       "                state.visGraph.setOptions(state.visOptions);\n",
       "              },\n",
       "              setSpringConstant(){\n",
       "                state.visOptions.physics.barnesHut.springConstant = state.springConstant / 10.0;\n",
       "                state.visOptions.physics.forceAtlas2Based.springConstant = state.springConstant;\n",
       "                state.visOptions.physics.repulsion.springConstant = state.springConstant;\n",
       "                state.visOptions.physics.hierarchicalRepulsion.springConstant = state.springConstant;\n",
       "                state.visGraph.setOptions(state.visOptions);\n",
       "              },\n",
       "              setCentralGravity(){\n",
       "                state.visOptions.physics.barnesHut.centralGravity = state.centralGravity;\n",
       "                state.visOptions.physics.forceAtlas2Based.centralGravity = state.centralGravity / 100.0;\n",
       "                state.visOptions.physics.repulsion.centralGravity = state.centralGravity;\n",
       "                state.visOptions.physics.hierarchicalRepulsion.centralGravity = state.centralGravity;\n",
       "                state.visGraph.setOptions(state.visOptions);\n",
       "              },\n",
       "              setGravitationalConstant(){\n",
       "                state.visOptions.physics.barnesHut.gravitationalConstant = state.gravitationalConstant;\n",
       "                state.visOptions.physics.forceAtlas2Based.gravitationalConstant = state.gravitationalConstant / 10.0;\n",
       "                // Not a parameter in repulsion and hierarchicalRepulsion\n",
       "                state.visGraph.setOptions(state.visOptions);\n",
       "              },\n",
       "              setAvoidOverlap(){\n",
       "                state.visOptions.physics.barnesHut.avoidOverlap = state.avoidOverlap;\n",
       "                state.visOptions.physics.forceAtlas2Based.avoidOverlap = state.avoidOverlap;\n",
       "                // Not a parameter in repulsion and hierarchicalRepulsion\n",
       "                state.visGraph.setOptions(state.visOptions);\n",
       "              },\n",
       "            }\n",
       "          },\n",
       "        },\n",
       "\n",
       "        init(){\n",
       "          // Containers\n",
       "          ui.composites.responsiveContainer.init();\n",
       "          // Graph selection (only visible if multiple graphs in data)\n",
       "          if(state.rawData.length > 1){\n",
       "            ui.elements.graphSelectionContainer.style.display = ui.convert.boolToDisplayStyle(true);\n",
       "            const optionList = [],\n",
       "              valueList = [];\n",
       "            let label;\n",
       "            for(let i=0; i<state.rawData.length; i++){\n",
       "              const graph = state.rawData[i];\n",
       "              try{\n",
       "                label = String(graph.label);\n",
       "                if(label === \"undefined\" || label === \"\"){\n",
       "                  throw \"Invalid label\";\n",
       "                }\n",
       "              } catch(e){\n",
       "                label = \"Unnamed graph\";\n",
       "              }\n",
       "              const name = String(i+1) + \": \" + label;\n",
       "              optionList.push(name);\n",
       "              valueList.push(String(i));\n",
       "            }\n",
       "            ui.composites.selection(ui.elements.graphSelection, optionList, valueList);\n",
       "          }\n",
       "          // General (menu item)\n",
       "          ui.composites.menu.setItem(ui.elements.generalHead, ui.elements.generalBody, true);\n",
       "          // Data selection (menu item)\n",
       "          ui.composites.menu.setItem(ui.elements.dataHead, ui.elements.dataBody, false);\n",
       "          // - Node size\n",
       "          ui.elements.nodeSizeNormalizationCheckbox.checked = state.useNodeSizeNormalization;\n",
       "          ui.elements.nodeSizeNormalizationContainer.style.display = ui.convert.boolToDisplayStyle(state.useNodeSizeNormalization);\n",
       "          ui.elements.nodeSizeNormalizationMinText.innerHTML = ui.convert.numberToText(state.nodeSizeNormalizationMin);\n",
       "          ui.elements.nodeSizeNormalizationMinSlider.value = state.nodeSizeNormalizationMin;\n",
       "          ui.elements.nodeSizeNormalizationMaxText.innerHTML = ui.convert.numberToText(state.nodeSizeNormalizationMax);\n",
       "          ui.elements.nodeSizeNormalizationMaxSlider.value = state.nodeSizeNormalizationMax;\n",
       "          // - Edge size\n",
       "          ui.elements.edgeSizeNormalizationCheckbox.checked = state.useEdgeSizeNormalization;\n",
       "          ui.elements.edgeSizeNormalizationContainer.style.display = ui.convert.boolToDisplayStyle(state.useEdgeSizeNormalization);\n",
       "          ui.elements.edgeSizeNormalizationMinText.innerHTML = ui.convert.numberToText(state.edgeSizeNormalizationMin);\n",
       "          ui.elements.edgeSizeNormalizationMinSlider.value = state.edgeSizeNormalizationMin;\n",
       "          ui.elements.edgeSizeNormalizationMaxText.innerHTML = ui.convert.numberToText(state.edgeSizeNormalizationMax);\n",
       "          ui.elements.edgeSizeNormalizationMaxSlider.value = state.edgeSizeNormalizationMax;\n",
       "          // Nodes\n",
       "          ui.composites.menu.setItem(ui.elements.nodeHead, ui.elements.nodeBody, false);\n",
       "          ui.elements.nodeCheckbox.checked = state.showNodes;\n",
       "          ui.elements.nodeSizeFactorText.innerHTML = ui.convert.numberToText(state.nodeSizeFactor);\n",
       "          ui.elements.nodeSizeFactorSlider.value = state.nodeSizeFactor;\n",
       "          ui.elements.nodeDragFixCheckbox.checked = state.nodeDragFix;\n",
       "          ui.elements.nodeHoverNeighborhoodCheckbox.checked = state.nodeHoverNeighborhood;\n",
       "          ui.elements.nodeHoverTooltipCheckbox.checked = state.nodeHoverTooltip;\n",
       "          // Node images\n",
       "          ui.composites.menu.setItem(ui.elements.nodeImageHead, ui.elements.nodeImageBody, false);\n",
       "          ui.elements.nodeImageMetaControl.style.display = false;\n",
       "          ui.elements.nodeImageCheckbox.checked = state.showNodeImages;\n",
       "          ui.elements.nodeImageSizeFactorText.innerHTML = ui.convert.numberToText(state.nodeImageSizeFactor);\n",
       "          ui.elements.nodeImageSizeFactorSlider.value = state.nodeImageSizeFactor;\n",
       "          // Node labels\n",
       "          ui.composites.menu.setItem(ui.elements.nodeLabelHead, ui.elements.nodeLabelBody, false);\n",
       "          ui.elements.nodeLabelCheckbox.checked = state.showNodeLabels;\n",
       "          ui.elements.nodeLabelBorderCheckbox.checked = state.showNodeLabelBorders;\n",
       "          ui.elements.nodeLabelSizeFactorText.innerHTML = ui.convert.numberToText(state.nodeLabelSizeFactor);\n",
       "          ui.elements.nodeLabelSizeFactorSlider.value = state.nodeLabelSizeFactor;\n",
       "          ui.elements.nodeLabelRotationText.innerHTML = ui.convert.numberToText(state.nodeLabelRotation);\n",
       "          ui.elements.nodeLabelRotationSlider.value = state.nodeLabelRotation;\n",
       "          // Edges\n",
       "          ui.composites.menu.setItem(ui.elements.edgeHead, ui.elements.edgeBody, false);\n",
       "          ui.elements.edgeCheckbox.checked = state.showEdges;\n",
       "          ui.elements.edgeSizeFactorText.innerHTML = ui.convert.numberToText(state.edgeSizeFactor);\n",
       "          ui.elements.edgeSizeFactorSlider.value = state.edgeSizeFactor;\n",
       "          ui.elements.edgeCurvatureText.innerHTML = ui.convert.numberToText(state.edgeCurvature);\n",
       "          ui.elements.edgeCurvatureSlider.value = state.edgeCurvature;\n",
       "          ui.elements.edgeHoverTooltipCheckbox.checked = state.edgeHoverTooltip;\n",
       "          // Edge labels\n",
       "          ui.composites.menu.setItem(ui.elements.edgeLabelHead, ui.elements.edgeLabelBody, false);\n",
       "          ui.elements.edgeLabelCheckbox.checked = state.showEdgeLabels;\n",
       "          ui.elements.edgeLabelBorderCheckbox.checked = state.showEdgeLabelBorders;\n",
       "          ui.elements.edgeLabelSizeFactorText.innerHTML = ui.convert.numberToText(state.edgeLabelSizeFactor);\n",
       "          ui.elements.edgeLabelSizeFactorSlider.value = state.edgeLabelSizeFactor;\n",
       "          ui.elements.edgeLabelRotationText.innerHTML = ui.convert.numberToText(state.edgeLabelRotation);\n",
       "          ui.elements.edgeLabelRotationSlider.value = state.edgeLabelRotation;\n",
       "          // Layout algorithm\n",
       "          ui.composites.menu.setItem(ui.elements.layoutAlgorithmHead, ui.elements.layoutAlgorithmBody, false);\n",
       "          ui.elements.simulationCheckbox.checked = state.layoutAlgorithmActive;\n",
       "          ui.elements.layoutAlgorithmSelection.value = state.layoutAlgorithm;\n",
       "          ui.elements.centralGravitySlider.value = state.centralGravity;\n",
       "          ui.elements.centralGravityText.innerHTML = ui.convert.numberToText(state.centralGravity);\n",
       "          ui.elements.springLengthSlider.value = state.springLength;\n",
       "          ui.elements.springLengthText.innerHTML = ui.convert.numberToText(state.springLength);\n",
       "          ui.elements.springConstantSlider.value = state.springConstant;\n",
       "          ui.elements.springConstantText.innerHTML = ui.convert.numberToText(state.springConstant);\n",
       "          ui.elements.gravitationalConstantSlider.value = state.gravitationalConstant;\n",
       "          ui.elements.gravitationalConstantText.innerHTML = ui.convert.numberToText(state.gravitationalConstant);\n",
       "          ui.elements.avoidOverlapSlider.value = state.avoidOverlap;\n",
       "          ui.elements.avoidOverlapText.innerHTML = ui.convert.numberToText(state.avoidOverlap);\n",
       "\n",
       "          ui.initSelectionValues();\n",
       "        },\n",
       "\n",
       "        initSelectionValues(){\n",
       "          function setSelectionOptionsAndValue(element, options, value, values=null){\n",
       "            if(values === null){\n",
       "              values = options;\n",
       "            }\n",
       "            if(!values.includes(value)){\n",
       "              value = values[0];\n",
       "            }\n",
       "            ui.composites.selection(element, options, values);\n",
       "            element.value = value;\n",
       "          }\n",
       "          // Node label text data source\n",
       "          setSelectionOptionsAndValue(\n",
       "            ui.elements.nodeLabelTextDataSourceSelect,\n",
       "            state.parsedData.general.node_properties.node_label_text_data_sources,\n",
       "            state.nodeLabelTextDataSource,\n",
       "          );\n",
       "          // Edge label text data source\n",
       "          setSelectionOptionsAndValue(\n",
       "            ui.elements.edgeLabelTextDataSourceSelect,\n",
       "            state.parsedData.general.edge_properties.edge_label_text_data_sources,\n",
       "            state.edgeLabelTextDataSource,\n",
       "          );\n",
       "          // Node size data source\n",
       "          setSelectionOptionsAndValue(\n",
       "            ui.elements.nodeSizeDataSourceSelect,\n",
       "            state.parsedData.general.node_properties.node_size_data_sources,\n",
       "            state.nodeSizeDataSource,\n",
       "          );\n",
       "          // Edge size data source\n",
       "          setSelectionOptionsAndValue(\n",
       "            ui.elements.edgeSizeDataSourceSelect,\n",
       "            state.parsedData.general.edge_properties.edge_size_data_sources,\n",
       "            state.edgeSizeDataSource,\n",
       "          );\n",
       "          // Layout algorithm\n",
       "          setSelectionOptionsAndValue(\n",
       "            ui.elements.layoutAlgorithmSelection,\n",
       "            [\"Barnes-Hut\", \"Force Atlas 2\", \"Repulsion\", \"Hierarchical repulsion\"],\n",
       "            state.layoutAlgorithm,\n",
       "            [\"barnesHut\", \"forceAtlas2Based\", \"repulsion\", \"hierarchicalRepulsion\"],\n",
       "          );\n",
       "        },\n",
       "\n",
       "        deleteChildElements(element){\n",
       "          while(element.firstChild){\n",
       "            // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management\n",
       "            // As of 2019, it is not possible to explicitly or programmatically trigger\n",
       "            // garbage collection in JavaScript.\n",
       "            element.removeChild(element.firstChild);\n",
       "          }\n",
       "        },\n",
       "\n",
       "        convert:{\n",
       "          numberToText(number, numDigits=2) {\n",
       "            return String(Number(number).toFixed(numDigits));\n",
       "          },\n",
       "\n",
       "          boolToDisplayStyle(isVisible){\n",
       "            if(isVisible){\n",
       "              return \"block\";\n",
       "            }\n",
       "            return \"none\";\n",
       "          },\n",
       "\n",
       "          boolToOpacity(isActive){\n",
       "            if(isActive){\n",
       "              return 1.0;\n",
       "            }\n",
       "            return 0.25;\n",
       "          },\n",
       "\n",
       "          boolToTooltipDelay(isActive){\n",
       "            if(isActive){\n",
       "              return 0;\n",
       "            }\n",
       "            return 100000000;\n",
       "          },\n",
       "        },\n",
       "\n",
       "        setBehavior(){\n",
       "          // Window resize (includes ctrl+wheel zoom, landscape/portrait orientation on phones)\n",
       "          window.onresize = function(){\n",
       "            ui.composites.responsiveContainer.adaptToResize();\n",
       "            ui.composites.graph.updateGraphDrawingArea();\n",
       "          }\n",
       "          // Container resize\n",
       "          ui.elements.graphContainer.onmouseup = function(){\n",
       "            const currentHeight = parseInt(ui.elements.graphContainer.clientHeight);\n",
       "            if(currentHeight != state.graphContainerHeight){\n",
       "              ui.composites.responsiveContainer.adaptToResize();\n",
       "              ui.composites.graph.updateGraphDrawingArea();\n",
       "            }\n",
       "          };\n",
       "          ui.elements.detailsContainer.onmouseup = function(){\n",
       "            const currentHeight = parseInt(ui.elements.detailsContainer.clientHeight);\n",
       "            if(currentHeight != state.detailsContainerHeight){\n",
       "              ui.composites.responsiveContainer.adaptToResize();\n",
       "            }\n",
       "          };\n",
       "          // Tooltip\n",
       "          ui.elements.tooltipContainer.onmouseover = function(){\n",
       "            ui.composites.tooltip.show();\n",
       "          }\n",
       "          ui.elements.tooltipContainer.onmouseout = function(){\n",
       "            ui.composites.tooltip.hide();\n",
       "          }\n",
       "          // General menu\n",
       "          ui.elements.generalHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.generalHead, ui.elements.generalBody);\n",
       "          };\n",
       "          ui.elements.resetButton.onclick = function(){\n",
       "            app.restart();\n",
       "          };\n",
       "          ui.elements.fullscreenButton.onclick = function(){\n",
       "            if(document.fullscreenElement){\n",
       "              document.exitFullscreen();\n",
       "            } else{\n",
       "              ui.elements.mainContainer.requestFullscreen()\n",
       "                .catch(function(err){\n",
       "                  alert(\"Error attempting to enable full-screen mode: \" + err.message);\n",
       "                });\n",
       "            }\n",
       "          };\n",
       "          ui.elements.mainContainer.onfullscreenchange = function(){\n",
       "            if(document.fullscreenElement){\n",
       "              ui.elements.fullscreenButton.innerText = \"Exit full screen\";\n",
       "            } else{\n",
       "              ui.elements.fullscreenButton.innerText = \"Enter full screen\";\n",
       "            }\n",
       "            // Wait for browser to switch to fullscreen and resize divs, then adapt to new sizes\n",
       "            setTimeout(function(){\n",
       "              ui.composites.responsiveContainer.adaptToFullscreen();\n",
       "              ui.composites.graph.updateGraphDrawingArea();\n",
       "            }, 250);\n",
       "          };\n",
       "          ui.elements.pngExportButton.onclick = function(){\n",
       "            ui.composites.download.png(\"graph.png\");\n",
       "          };\n",
       "          ui.elements.jpgExportButton.onclick = function(){\n",
       "            ui.composites.download.jpg(\"graph.jpg\");\n",
       "          };\n",
       "          // Data menu\n",
       "          ui.elements.dataHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.dataHead, ui.elements.dataBody);\n",
       "          };\n",
       "          // - Graph selection\n",
       "          ui.elements.graphSelection.onchange = function(){\n",
       "            const chosenGraphIndex = parseInt(this.value);\n",
       "            state.manager.parseChosenData(chosenGraphIndex);\n",
       "            state.manager.prepareShownData();\n",
       "            ui.initSelectionValues();\n",
       "            ui.composites.graph.createGraph();\n",
       "          };\n",
       "          // - Node label text\n",
       "          ui.elements.nodeLabelTextDataSourceSelect.onchange = function(){\n",
       "            state.nodeLabelTextDataSource = this.value;\n",
       "            state.manager.updateNodeLabelTexts();\n",
       "          };\n",
       "          // - Edge label text\n",
       "          ui.elements.edgeLabelTextDataSourceSelect.onchange = function(){\n",
       "            state.edgeLabelTextDataSource = this.value;\n",
       "            state.manager.updateEdgeLabelTexts();\n",
       "          };\n",
       "          // - Node size\n",
       "          ui.elements.nodeSizeDataSourceSelect.onchange = function(){\n",
       "            state.nodeSizeDataSource = this.value;\n",
       "            state.manager.updateNodeSizes();\n",
       "          };\n",
       "          ui.elements.nodeSizeNormalizationCheckbox.onchange = function(){\n",
       "            state.useNodeSizeNormalization = this.checked;\n",
       "            ui.elements.nodeSizeNormalizationContainer.style.display = ui.convert.boolToDisplayStyle(state.useNodeSizeNormalization);\n",
       "            state.manager.updateNodeSizes();\n",
       "          };\n",
       "          ui.elements.nodeSizeNormalizationMinSlider.oninput = function(){\n",
       "            ui.elements.nodeSizeNormalizationMinText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.nodeSizeNormalizationMinSlider.onchange = function(){\n",
       "            state.nodeSizeNormalizationMin = parseFloat(this.value);\n",
       "            if(state.nodeSizeNormalizationMin > state.nodeSizeNormalizationMax){\n",
       "              state.nodeSizeNormalizationMax = state.nodeSizeNormalizationMin;\n",
       "              ui.elements.nodeSizeNormalizationMaxSlider.value = state.nodeSizeNormalizationMax;\n",
       "              ui.elements.nodeSizeNormalizationMaxText.innerHTML = ui.convert.numberToText(state.nodeSizeNormalizationMax);\n",
       "            }\n",
       "            state.manager.updateNodeSizes();\n",
       "          };\n",
       "          ui.elements.nodeSizeNormalizationMaxSlider.oninput = function(){\n",
       "            ui.elements.nodeSizeNormalizationMaxText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.nodeSizeNormalizationMaxSlider.onchange = function(){\n",
       "            state.nodeSizeNormalizationMax = parseFloat(this.value);\n",
       "            if(state.nodeSizeNormalizationMax < state.nodeSizeNormalizationMin){\n",
       "              state.nodeSizeNormalizationMin = state.nodeSizeNormalizationMax;\n",
       "              ui.elements.nodeSizeNormalizationMinSlider.value = state.nodeSizeNormalizationMin;\n",
       "              ui.elements.nodeSizeNormalizationMinText.innerHTML = ui.convert.numberToText(state.nodeSizeNormalizationMin);\n",
       "            }\n",
       "            state.manager.updateNodeSizes();\n",
       "          };\n",
       "          // - Edge size\n",
       "          ui.elements.edgeSizeDataSourceSelect.onchange = function(){\n",
       "            state.edgeSizeDataSource = this.value;\n",
       "            state.manager.updateEdgeSizes();\n",
       "          };\n",
       "          ui.elements.edgeSizeNormalizationCheckbox.onchange = function(){\n",
       "            state.useEdgeSizeNormalization = this.checked;\n",
       "            ui.elements.edgeSizeNormalizationContainer.style.display = ui.convert.boolToDisplayStyle(state.useEdgeSizeNormalization);\n",
       "            state.manager.updateEdgeSizes();\n",
       "          };\n",
       "          ui.elements.edgeSizeNormalizationMinSlider.oninput = function(){\n",
       "            ui.elements.edgeSizeNormalizationMinText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.edgeSizeNormalizationMinSlider.onchange = function(){\n",
       "            state.edgeSizeNormalizationMin = parseFloat(this.value);\n",
       "            if(state.edgeSizeNormalizationMin > state.edgeSizeNormalizationMax){\n",
       "              state.edgeSizeNormalizationMax = state.edgeSizeNormalizationMin;\n",
       "              ui.elements.edgeSizeNormalizationMaxSlider.value = state.edgeSizeNormalizationMax;\n",
       "              ui.elements.edgeSizeNormalizationMaxText.innerHTML = ui.convert.numberToText(state.edgeSizeNormalizationMax);\n",
       "            }\n",
       "            state.manager.updateEdgeSizes();\n",
       "          };\n",
       "          ui.elements.edgeSizeNormalizationMaxSlider.oninput = function(){\n",
       "            ui.elements.edgeSizeNormalizationMaxText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.edgeSizeNormalizationMaxSlider.onchange = function(){\n",
       "            state.edgeSizeNormalizationMax = parseFloat(this.value);\n",
       "            if(state.edgeSizeNormalizationMax < state.edgeSizeNormalizationMin){\n",
       "              state.edgeSizeNormalizationMin = state.edgeSizeNormalizationMax;\n",
       "              ui.elements.edgeSizeNormalizationMinSlider.value = state.edgeSizeNormalizationMin;\n",
       "              ui.elements.edgeSizeNormalizationMinText.innerHTML = ui.convert.numberToText(state.edgeSizeNormalizationMin);\n",
       "            }\n",
       "            state.manager.updateEdgeSizes();\n",
       "          };\n",
       "          // Nodes menu\n",
       "          ui.elements.nodeHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.nodeHead, ui.elements.nodeBody);\n",
       "          };\n",
       "          ui.elements.nodeCheckbox.onchange = function(){\n",
       "            state.showNodes = this.checked;\n",
       "            ui.composites.graph.updateNodeVisibilities();\n",
       "          };\n",
       "          ui.elements.nodeSizeFactorSlider.oninput = function(){\n",
       "            ui.elements.nodeSizeFactorText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.nodeSizeFactorSlider.onchange = function(){\n",
       "            state.nodeSizeFactor = parseFloat(this.value);\n",
       "            state.manager.updateNodeSizes();\n",
       "          };\n",
       "          ui.elements.nodeDragFixCheckbox.onchange = function(){\n",
       "            state.nodeDragFix = this.checked;\n",
       "          };\n",
       "          ui.elements.nodeHoverNeighborhoodCheckbox.onchange = function(){\n",
       "            state.nodeHoverNeighborhood = this.checked;\n",
       "            ui.composites.graph.updateNodeHoverNeighborhoodBehavior();\n",
       "          };\n",
       "          ui.elements.nodeHoverTooltipCheckbox.onchange = function(){\n",
       "            state.nodeHoverTooltip = this.checked;\n",
       "            ui.composites.graph.updateNodeHoverTooltipBehavior();\n",
       "          };\n",
       "          ui.elements.nodeReleaseButton.onclick = function(){\n",
       "            ui.composites.graph.simulationManager.releaseFixedNodes();\n",
       "          };\n",
       "          // Node images menu\n",
       "          ui.elements.nodeImageHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.nodeImageHead, ui.elements.nodeImageBody);\n",
       "          };\n",
       "          ui.elements.nodeImageCheckbox.onchange = function(){\n",
       "            state.showNodeImages = this.checked;\n",
       "            state.manager.updateNodeImages();\n",
       "          };\n",
       "          ui.elements.nodeImageSizeFactorSlider.oninput = function(){\n",
       "            ui.elements.nodeImageSizeFactorText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.nodeImageSizeFactorSlider.onchange = function(){\n",
       "            state.nodeImageSizeFactor = parseFloat(this.value);\n",
       "            state.manager.updateNodeImages();\n",
       "          };\n",
       "          // Node labels menu\n",
       "          ui.elements.nodeLabelHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.nodeLabelHead, ui.elements.nodeLabelBody);\n",
       "          };\n",
       "          ui.elements.nodeLabelCheckbox.onchange = function(){\n",
       "            state.showNodeLabels = this.checked;\n",
       "            ui.composites.graph.updateNodeLabels();\n",
       "          };\n",
       "          ui.elements.nodeLabelBorderCheckbox.onchange = function(){\n",
       "            state.showNodeLabelBorders = this.checked;\n",
       "            ui.composites.graph.updateNodeLabels();\n",
       "          };\n",
       "          ui.elements.nodeLabelSizeFactorSlider.oninput = function(){\n",
       "            ui.elements.nodeLabelSizeFactorText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.nodeLabelSizeFactorSlider.onchange = function(){\n",
       "            state.nodeLabelSizeFactor = parseFloat(this.value);\n",
       "            state.manager.updateNodeLabelSizes();\n",
       "          };\n",
       "          // Edges menu\n",
       "          ui.elements.edgeHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.edgeHead, ui.elements.edgeBody);\n",
       "          };\n",
       "          ui.elements.edgeCheckbox.onchange = function(){\n",
       "            state.showEdges = this.checked;\n",
       "            ui.composites.graph.updateEdgeVisibility();\n",
       "          };\n",
       "          ui.elements.edgeSizeFactorSlider.oninput = function(){\n",
       "            ui.elements.edgeSizeFactorText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.edgeSizeFactorSlider.onchange = function(){\n",
       "            state.edgeSizeFactor = parseFloat(this.value);\n",
       "            state.manager.updateEdgeSizes();\n",
       "          };\n",
       "          ui.elements.edgeCurvatureSlider.oninput = function(){\n",
       "            ui.elements.edgeCurvatureText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.edgeCurvatureSlider.onchange = function(){\n",
       "            state.edgeCurvature = parseFloat(this.value);\n",
       "            state.manager.updateEdgeCurvatures();\n",
       "          };\n",
       "          ui.elements.edgeHoverTooltipCheckbox.onchange = function(){\n",
       "            state.edgeHoverTooltip = this.checked;\n",
       "            ui.composites.graph.updateEdgeHoverTooltipBehavior();\n",
       "          };\n",
       "          // Edge labels menu\n",
       "          ui.elements.edgeLabelHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.edgeLabelHead, ui.elements.edgeLabelBody);\n",
       "          };\n",
       "          ui.elements.edgeLabelCheckbox.onchange = function(){\n",
       "            state.showEdgeLabels = this.checked;\n",
       "            ui.composites.graph.updateEdgeLabels();\n",
       "          };\n",
       "          ui.elements.edgeLabelBorderCheckbox.onchange = function(){\n",
       "            state.showEdgeLabelBorders = this.checked;\n",
       "            ui.composites.graph.updateEdgeLabels();\n",
       "          };\n",
       "          ui.elements.edgeLabelSizeFactorSlider.oninput = function(){\n",
       "            ui.elements.edgeLabelSizeFactorText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.edgeLabelSizeFactorSlider.onchange = function(){\n",
       "            state.edgeLabelSizeFactor = parseFloat(this.value);\n",
       "            state.manager.updateEdgeLabelSizes();\n",
       "          };\n",
       "          // Layout algorithm menu\n",
       "          ui.elements.layoutAlgorithmHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.layoutAlgorithmHead, ui.elements.layoutAlgorithmBody);\n",
       "          };\n",
       "          ui.elements.simulationCheckbox.onchange = function(){\n",
       "            state.layoutAlgorithmActive = !state.layoutAlgorithmActive;\n",
       "            ui.composites.graph.simulationManager.setActivity(state.layoutAlgorithmActive);\n",
       "          };\n",
       "          ui.elements.layoutAlgorithmSelection.onchange = function(){\n",
       "            state.layoutAlgorithm = this.value;\n",
       "            ui.composites.graph.simulationManager.setAlgorithm();\n",
       "          };\n",
       "          ui.elements.centralGravitySlider.oninput = function(){\n",
       "            ui.elements.centralGravityText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.centralGravitySlider.onchange = function(){\n",
       "            state.centralGravity = parseFloat(this.value);\n",
       "            ui.composites.graph.simulationManager.setCentralGravity();\n",
       "          };\n",
       "          ui.elements.springLengthSlider.oninput = function(){\n",
       "            ui.elements.springLengthText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.springLengthSlider.onchange = function(){\n",
       "            state.springLength = parseFloat(this.value);\n",
       "            ui.composites.graph.simulationManager.setSpringLength();\n",
       "          };\n",
       "          ui.elements.springConstantSlider.oninput = function(){\n",
       "            ui.elements.springConstantText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.springConstantSlider.onchange = function(){\n",
       "            state.springConstant = parseFloat(this.value);\n",
       "            ui.composites.graph.simulationManager.setSpringConstant();\n",
       "          };\n",
       "          ui.elements.gravitationalConstantSlider.oninput = function(){\n",
       "            ui.elements.gravitationalConstantText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.gravitationalConstantSlider.onchange = function(){\n",
       "            state.gravitationalConstant = parseFloat(this.value);\n",
       "            ui.composites.graph.simulationManager.setGravitationalConstant();\n",
       "          };\n",
       "          ui.elements.avoidOverlapSlider.oninput = function(){\n",
       "            ui.elements.avoidOverlapText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.avoidOverlapSlider.onchange = function(){\n",
       "            state.avoidOverlap = parseFloat(this.value);\n",
       "            ui.composites.graph.simulationManager.setAvoidOverlap();\n",
       "          };\n",
       "        },\n",
       "      }\n",
       "\n",
       "      const app = {\n",
       "        start(){\n",
       "          state.manager.fetchRawDataFromTemplating();\n",
       "          state.manager.parseChosenData(0);\n",
       "          state.manager.prepareShownData();\n",
       "          ui.init();\n",
       "          // Wait a bit to finish UI rendering, then start potentially slow layout computation\n",
       "          setTimeout(function(){\n",
       "            ui.composites.graph.createGraph();\n",
       "            ui.setBehavior();\n",
       "          }, 400);\n",
       "          // Reduce risk of getting stuck with a wrong drawing area size\n",
       "          function checkIfSizeUpdateRequired(){\n",
       "            if(ui.elements.graphContainer.clientWidth != state.graphContainerWidth){\n",
       "              ui.composites.responsiveContainer.adaptToResize();\n",
       "              ui.composites.graph.updateGraphDrawingArea();\n",
       "            }\n",
       "          }\n",
       "          [1, 2, 5, 8, 12, 15, 20, 25, 30, 35, 40, 45, 50, 60, 90].forEach(function(delay){\n",
       "            setTimeout(checkIfSizeUpdateRequired, delay*1000);\n",
       "          })\n",
       "        },\n",
       "\n",
       "        restart(){\n",
       "          app.start();\n",
       "        },\n",
       "      }\n",
       "\n",
       "      // Start website dynamics\n",
       "      app.start();\n",
       "    });\n",
       "  </script>\n",
       "\n"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "control_graph = Graph(model)\n",
    "control_graph.Node.extend(LegalEntity, label = LegalEntity.name)\n",
    "\n",
    "with model.rule():\n",
    "    p = Person(name = person_name)\n",
    "    control_graph.Node(p).set(focus='target')\n",
    "    control_graph.Node(p.family).set(focus='target')\n",
    "\n",
    "with model.rule():\n",
    "    bank = FinancialInstitution(name=bank_name)\n",
    "    with model.not_found():\n",
    "        Control(controller=Person(name = person_name).family, controlled=bank)\n",
    "    control_graph.Node(bank).set(focus='source')\n",
    "\n",
    "with model.rule():\n",
    "    c = Control()\n",
    "    e = control_graph.Edge.add(c.controller, c.controlled)\n",
    "    with control_graph.Node(c.controller).focus=='target':\n",
    "        e.set(focus='target')\n",
    "        with c.controlled == LegalEntity(Company|FinancialInstitution):\n",
    "            control_graph.Node(c.controlled).set(focus='controlled')\n",
    "\n",
    "control_graph_style = {\n",
    "        \"node\": {\n",
    "            \"color\": lambda n : '#f07f65' if n.get('focus')in ['target', 'controlled'] else '#edb551' if n.get('focus')=='source' else '#92979c',\n",
    "            \"size\": lambda n: 20 if n.get('focus')in['target','source', 'controlled'] else 10\n",
    "        },\n",
    "        \"edge\": {\n",
    "            \"color\": lambda e: \"#f07f65\" if e.get('focus')=='target' else '#92979c',\n",
    "            \"size\": lambda e: 5 if e.get('focus')=='target' else 1\n",
    "        }\n",
    "    }\n",
    "\n",
    "vis = control_graph.visualize(three=False, style=control_graph_style)\n",
    "vis.display(inline=True) # interactive visualization can be commented out in favor of zoomed in inserted image"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "source": [
    "\n",
    "> **Tip**. This visualization now shows us how Tom's family members control some banks and companies, but \"ACME Bank\" is not yet one of them. We therefore will add another rule."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's add one more rule:\n",
    "- X controls a set of companies that jointly (i.e., summing the share amounts), and possibly together with X, own more than 50% of Y"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "source": [
    "> **Note**. We now introduce a recursive rule to propagate `Control` relationship further. Using `model.match(multiple=True)` we first get all of `DirectOwnership` instances where `owner` is either an entity already `controlled` by entity X, or is X itself. Then `sum` of all the `part`s for every pair of `controller` and `asset` is checked to be greater than `0.5`. If that's the case - we get a new `Control` relationship."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": [
     "hide-input"
    ]
   },
   "outputs": [],
   "source": [
    "# rule 2\n",
    "with model.rule():\n",
    "    ctrl = Control()\n",
    "    o = DirectOwnership()\n",
    "    with model.match(multiple=True) as all_ownerships:\n",
    "        with o.owner == ctrl.controlled: all_ownerships.add(o)\n",
    "        with o.owner == ctrl.controller: all_ownerships.add(o)\n",
    "    sum(all_ownerships, all_ownerships.part, per = [ctrl.controller, all_ownerships.asset]) > 0.5\n",
    "    c = Control.add(controller = ctrl.controller, controlled = all_ownerships.asset)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": [
     "hide-input"
    ]
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "  <style>\n",
       "    /* Main divisions */\n",
       "    #iOm92LxjhHNLGxz9O-main-div {\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "      padding: 3px;\n",
       "      background-color: white;\n",
       "    }\n",
       "    #iOm92LxjhHNLGxz9O-left-div {\n",
       "      float: left;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    #iOm92LxjhHNLGxz9O-right-div {\n",
       "      float: left;\n",
       "      height: 100%;\n",
       "      display: none;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    #iOm92LxjhHNLGxz9O-right-inner-div {\n",
       "      padding-left: 5px;\n",
       "      padding-right: 2px;\n",
       "      overflow-x: hidden;\n",
       "      overflow-y: auto;\n",
       "      height: 100%;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "\n",
       "    /* Graph and details (contained in left-inner-div) */\n",
       "    #iOm92LxjhHNLGxz9O-graph-div {\n",
       "      overflow: hidden;\n",
       "      resize: vertical;\n",
       "      position: relative;\n",
       "      border: 1px solid #ccc;\n",
       "      border-radius: 4px;\n",
       "      box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2);\n",
       "      display: none;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    #iOm92LxjhHNLGxz9O-details-div {\n",
       "      overflow: auto;\n",
       "      resize: vertical;\n",
       "      margin-top: 5px;\n",
       "      border: 1px solid #ccc;\n",
       "      border-radius: 4px;\n",
       "      box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2);\n",
       "      display: none;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    #iOm92LxjhHNLGxz9O-details-head {\n",
       "      user-select: none;\n",
       "      padding-left: 4px !important;\n",
       "      padding-top: 4px !important;\n",
       "      font-size: 8px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      color: gray;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    #iOm92LxjhHNLGxz9O-details-body {\n",
       "      padding: 10px;\n",
       "      padding-top: 6px;\n",
       "      font-size: 10px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "\n",
       "    /* Control menu (contained in right-inner-div) */\n",
       "    .iOm92LxjhHNLGxz9O-menu-item-head {\n",
       "      font-size: 11px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      color: black;\n",
       "      cursor: pointer;\n",
       "      padding-left: 5px;\n",
       "      padding-right: 0px;\n",
       "      padding-top: 5px;\n",
       "      padding-bottom: 5px;\n",
       "      margin-bottom: 5px;\n",
       "      border-radius: 4px;\n",
       "      border: 1px solid #ccc;\n",
       "      box-shadow: 0px 0px 3px rgba(0, 0, 0, 0.2);\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    .iOm92LxjhHNLGxz9O-menu-item-body {\n",
       "      margin-left: 5px;\n",
       "      margin-bottom: 10px;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    .iOm92LxjhHNLGxz9O-menu-subitem-head {\n",
       "      font-size: 9px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      font-weight: 600;\n",
       "      color: #006429;\n",
       "      cursor: default;\n",
       "      margin-bottom: 2px;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    .iOm92LxjhHNLGxz9O-menu-subitem-body {\n",
       "      font-size: 8px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      margin-left: 7px;\n",
       "      margin-bottom: 5px;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    .iOm92LxjhHNLGxz9O-labeled-input {\n",
       "      all: initial;\n",
       "      display: flex;\n",
       "      align-items: center;\n",
       "      margin-top: 1px;\n",
       "      margin-bottom: 1px;\n",
       "    }\n",
       "    .iOm92LxjhHNLGxz9O-label {\n",
       "      all: initial;\n",
       "      font-size: 8px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      font-style: italic;\n",
       "      cursor: pointer;\n",
       "    }\n",
       "    .iOm92LxjhHNLGxz9O-slider {\n",
       "      width: 100%;\n",
       "      margin-bottom: 2px;\n",
       "    }\n",
       "    .iOm92LxjhHNLGxz9O-slider::-moz-focus-outer {\n",
       "      border: 0;\n",
       "    }\n",
       "    .iOm92LxjhHNLGxz9O-slider-text-left {\n",
       "      font-size: 8px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      font-style: italic;\n",
       "      color: black;\n",
       "      float: left;\n",
       "      margin-top: 2px;\n",
       "    }\n",
       "    .iOm92LxjhHNLGxz9O-slider-text-right {\n",
       "      font-size: 8px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      color: black;\n",
       "      float: right;\n",
       "    }\n",
       "    .iOm92LxjhHNLGxz9O-checkbox {\n",
       "      margin-left: 0px !important;\n",
       "      margin-right: 4px !important;\n",
       "      margin-top: 2px !important;\n",
       "      margin-bottom: 2px !important;\n",
       "      padding: 0px !important;\n",
       "    }\n",
       "    .iOm92LxjhHNLGxz9O-select {\n",
       "      cursor: pointer;\n",
       "      outline: none;\n",
       "      font-size: 8px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      color: black;\n",
       "      background-color: #f5f5f5;\n",
       "      width: 100%;\n",
       "      padding-top: 4px !important;\n",
       "      padding-bottom: 4px !important;\n",
       "      padding-left: 5px;\n",
       "      padding-right: 10px;\n",
       "      margin-right: 5px;\n",
       "      margin-top: 2px;\n",
       "      margin-bottom: 2px;\n",
       "      border-radius: 4px;\n",
       "      border: 1.2px solid #bbb;\n",
       "      box-shadow: 0 1px 0 1px rgba(0, 0, 0, 0.04);\n",
       "\n",
       "      -moz-appearance: none;\n",
       "      -webkit-appearance: none;\n",
       "      appearance: none;\n",
       "      background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyOTIuNCIgaGVpZ2h0PSIyOTIuNCI+PHBhdGggZmlsbD0iIzAwMDAwMCIgZD0iTSAtNS4yMDY0NjJlLTYsNjQuNTcyNjU2IDI5Mi4zOTk5OSw2NC41NzI2NTQgMTQ2LjE5OTk3LDIzMy42Mjg0NyAtNS4yMDY0NjJlLTYsNjQuNTcyNjU2Ii8+PC9zdmc+Cg==');\n",
       "      background-repeat: no-repeat;\n",
       "      background-position: right 4px top 50%;\n",
       "      background-size: 6px;\n",
       "    }\n",
       "    @-moz-document url-prefix() {\n",
       "      /* Dirty hack to remove dotted border on focus */\n",
       "      .iOm92LxjhHNLGxz9O-select {\n",
       "        color: transparent !important;\n",
       "        text-shadow: 0 0 0 black !important;\n",
       "      }\n",
       "    }\n",
       "    .iOm92LxjhHNLGxz9O-select:after {\n",
       "      cursor: pointer;\n",
       "    }\n",
       "    .iOm92LxjhHNLGxz9O-button {\n",
       "      cursor: pointer;\n",
       "      outline: none;\n",
       "      font-size: 8px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      color: black;\n",
       "      background-color: #f2f2f2;\n",
       "      padding-top: 4px !important;\n",
       "      padding-bottom: 4px !important;\n",
       "      padding-left: 10px;\n",
       "      padding-right: 10px;\n",
       "      margin-top: 2px;\n",
       "      margin-bottom: 2px;\n",
       "      border-radius: 4px;\n",
       "      border: 1.2px solid #bbb;\n",
       "      box-shadow: 0 1px 0 1px rgba(0, 0, 0, 0.04);\n",
       "    }\n",
       "    .iOm92LxjhHNLGxz9O-button:hover {\n",
       "      border: 1.2px solid #999;\n",
       "      background-color: #f2f2f2;\n",
       "    }\n",
       "    .iOm92LxjhHNLGxz9O-button:active {\n",
       "      background-color: #ddd;\n",
       "    }\n",
       "    .iOm92LxjhHNLGxz9O-button::-moz-focus-inner {\n",
       "      border: 0;\n",
       "    }\n",
       "    /* Hidden menu items */\n",
       "    #iOm92LxjhHNLGxz9O-graph-select-div {\n",
       "      display: none;\n",
       "    }\n",
       "    #iOm92LxjhHNLGxz9O-node-size-norm-div {\n",
       "      display: none;\n",
       "    }\n",
       "    #iOm92LxjhHNLGxz9O-edge-size-norm-div {\n",
       "      display: none;\n",
       "    }\n",
       "\n",
       "    /* Graph */\n",
       "    #iOm92LxjhHNLGxz9O-tooltip-div {\n",
       "      font-size: 10px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      z-index: 42001;\n",
       "      opacity: 0;\n",
       "      visibility: hidden;\n",
       "      position: absolute !important;\n",
       "      max-width: 40%;\n",
       "      padding: 5px;\n",
       "      white-space: pre-wrap;\n",
       "      word-break: break-word;\n",
       "      color: black;\n",
       "      background-color: white;\n",
       "      border-radius: 4px;\n",
       "      border: 1px solid #ccc;\n",
       "      box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.2);\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    #iOm92LxjhHNLGxz9O-menu-toggle-button, #iOm92LxjhHNLGxz9O-details-toggle-button, #iOm92LxjhHNLGxz9O-progress-container {\n",
       "      font-size: 14px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      z-index: 42000;\n",
       "      cursor: pointer;\n",
       "      position: absolute;\n",
       "      background-color: white;\n",
       "      border-radius: 4px;\n",
       "      box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.2);\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    #iOm92LxjhHNLGxz9O-menu-toggle-button {\n",
       "      top: 0;\n",
       "      right: 0;\n",
       "      padding-left: 6px;\n",
       "      padding-right: 6px;\n",
       "      padding-top: 12px;\n",
       "      padding-bottom: 12px;\n",
       "      border-top: 0px;\n",
       "      border-right: 0px;\n",
       "      border-bottom: 1px solid #ccc;\n",
       "      border-left: 1px solid #ccc;\n",
       "    }\n",
       "    #iOm92LxjhHNLGxz9O-details-toggle-button {\n",
       "      bottom: 0;\n",
       "      left: 0;\n",
       "      padding-left: 19px;\n",
       "      padding-right: 19px;\n",
       "      padding-top: 0.5px;\n",
       "      padding-bottom: 2px;\n",
       "      border-top: 1px solid #ccc;\n",
       "      border-right: 1px solid #ccc;\n",
       "      border-bottom: 0px;\n",
       "      border-left: 0px;\n",
       "    }\n",
       "    #iOm92LxjhHNLGxz9O-progress-container {\n",
       "      font-size: 10px;\n",
       "      text-align: center;\n",
       "      top: 46%;\n",
       "      left: 15%;\n",
       "      width: 70%;\n",
       "      padding: 8px;\n",
       "      border: none;\n",
       "      box-shadow: none;\n",
       "    }\n",
       "\n",
       "    /* Details */\n",
       "    #iOm92LxjhHNLGxz9O-details-user-provided {\n",
       "      margin-top: 3px;\n",
       "      padding-top: 3.5px;\n",
       "      border-top: 0.5px dashed black;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "      white-space: pre-wrap;\n",
       "      word-break: break-word;\n",
       "    }\n",
       "    #iOm92LxjhHNLGxz9O-details-user-provided ul {\n",
       "      list-style-position: inside;\n",
       "      padding-left: 6px;\n",
       "    }\n",
       "\n",
       "    /* Unavailable in vis.js and therefore hidden */\n",
       "    #iOm92LxjhHNLGxz9O-svg,\n",
       "    #iOm92LxjhHNLGxz9O-node-label-rotation,\n",
       "    #iOm92LxjhHNLGxz9O-edge-label-rotation {\n",
       "      display: none;\n",
       "    }\n",
       "    /* Specific to vis.js */\n",
       "    div.vis-tooltip {\n",
       "      position: absolute;\n",
       "      visibility: hidden;\n",
       "      pointer-events: none;\n",
       "      z-index: 5;\n",
       "      max-width: 40%;\n",
       "      white-space: pre-wrap;\n",
       "      word-break: break-word;\n",
       "      font-size: 10px;\n",
       "      padding: 5px;\n",
       "      color: black;\n",
       "      background-color: white;\n",
       "      -moz-border-radius: 3px;\n",
       "      -webkit-border-radius: 3px;\n",
       "      border-radius: 3px;\n",
       "      border: 0.5px solid black;\n",
       "      box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.3);\n",
       "    }\n",
       "  </style>\n",
       "\n",
       "  <div id=\"iOm92LxjhHNLGxz9O-main-div\">\n",
       "    <div id=\"iOm92LxjhHNLGxz9O-tooltip-div\"></div>\n",
       "\n",
       "    <div id=\"iOm92LxjhHNLGxz9O-left-div\">\n",
       "      <div id=\"iOm92LxjhHNLGxz9O-left-inner-div\">\n",
       "        <div id=\"iOm92LxjhHNLGxz9O-graph-div\"></div>\n",
       "        <div id=\"iOm92LxjhHNLGxz9O-details-div\">\n",
       "          <div id=\"iOm92LxjhHNLGxz9O-details-head\">\n",
       "            Details for selected element\n",
       "          </div>\n",
       "          <div id=\"iOm92LxjhHNLGxz9O-details-body\">\n",
       "          </div>\n",
       "        </div>\n",
       "      </div>\n",
       "    </div>\n",
       "\n",
       "    <div id=\"iOm92LxjhHNLGxz9O-right-div\">\n",
       "      <div id=\"iOm92LxjhHNLGxz9O-right-inner-div\">\n",
       "        <!-- Menu: General -->\n",
       "        <div class=\"iOm92LxjhHNLGxz9O-menu-item-head\"\n",
       "             id=\"iOm92LxjhHNLGxz9O-general-head\">\n",
       "          General\n",
       "        </div>\n",
       "        <div class=\"iOm92LxjhHNLGxz9O-menu-item-body\"\n",
       "             id=\"iOm92LxjhHNLGxz9O-general-body\">\n",
       "          <!-- Sub-menu: State -->\n",
       "          <div>\n",
       "            <div class=\"iOm92LxjhHNLGxz9O-menu-subitem-head\">\n",
       "              App state\n",
       "            </div>\n",
       "            <div class=\"iOm92LxjhHNLGxz9O-menu-subitem-body\">\n",
       "              <button class=\"iOm92LxjhHNLGxz9O-button\"\n",
       "                      id=\"iOm92LxjhHNLGxz9O-reset\"\n",
       "                      type=\"button\">Reset</button>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Display mode (fullscreen or not) -->\n",
       "          <div>\n",
       "            <div class=\"iOm92LxjhHNLGxz9O-menu-subitem-head\">\n",
       "              Display mode\n",
       "            </div>\n",
       "            <div class=\"iOm92LxjhHNLGxz9O-menu-subitem-body\">\n",
       "              <button class=\"iOm92LxjhHNLGxz9O-button\"\n",
       "                      id=\"iOm92LxjhHNLGxz9O-fullscreen-button\"\n",
       "                      type=\"button\">Enter full screen</button>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Export -->\n",
       "          <div>\n",
       "            <div class=\"iOm92LxjhHNLGxz9O-menu-subitem-head\">\n",
       "              Export\n",
       "            </div>\n",
       "            <div class=\"iOm92LxjhHNLGxz9O-menu-subitem-body\">\n",
       "              <button class=\"iOm92LxjhHNLGxz9O-button\"\n",
       "                      id=\"iOm92LxjhHNLGxz9O-svg\"\n",
       "                      type=\"button\">SVG</button>\n",
       "              <button class=\"iOm92LxjhHNLGxz9O-button\"\n",
       "                      id=\"iOm92LxjhHNLGxz9O-png\"\n",
       "                      type=\"button\">PNG</button>\n",
       "              <button class=\"iOm92LxjhHNLGxz9O-button\"\n",
       "                      id=\"iOm92LxjhHNLGxz9O-jpg\"\n",
       "                      type=\"button\">JPG</button>\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "        <!-- Menu: Data -->\n",
       "        <div class=\"iOm92LxjhHNLGxz9O-menu-item-head\"\n",
       "             id=\"iOm92LxjhHNLGxz9O-data-head\">\n",
       "          Data selection\n",
       "        </div>\n",
       "        <div class=\"iOm92LxjhHNLGxz9O-menu-item-body\"\n",
       "             id=\"iOm92LxjhHNLGxz9O-data-body\">\n",
       "          <!-- Sub-menu: Graph (only shown if multiple graphs in data) -->\n",
       "          <div id=\"iOm92LxjhHNLGxz9O-graph-select-div\">\n",
       "            <div class=\"iOm92LxjhHNLGxz9O-menu-subitem-head\">\n",
       "              Graph\n",
       "            </div>\n",
       "            <div class=\"iOm92LxjhHNLGxz9O-menu-subitem-body\">\n",
       "              <select class=\"iOm92LxjhHNLGxz9O-select\"\n",
       "                      id=\"iOm92LxjhHNLGxz9O-graph-select\"></select>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Node label text -->\n",
       "          <div>\n",
       "            <div class=\"iOm92LxjhHNLGxz9O-menu-subitem-head\">\n",
       "              Node label text\n",
       "            </div>\n",
       "            <div class=\"iOm92LxjhHNLGxz9O-menu-subitem-body\">\n",
       "              <select class=\"iOm92LxjhHNLGxz9O-select\"\n",
       "                      id=\"iOm92LxjhHNLGxz9O-node-label-data-source-select\"></select>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Edge label text -->\n",
       "          <div>\n",
       "            <div class=\"iOm92LxjhHNLGxz9O-menu-subitem-head\">\n",
       "              Edge label text\n",
       "            </div>\n",
       "            <div class=\"iOm92LxjhHNLGxz9O-menu-subitem-body\">\n",
       "              <select class=\"iOm92LxjhHNLGxz9O-select\"\n",
       "                      id=\"iOm92LxjhHNLGxz9O-edge-label-data-source-select\"></select>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Node size -->\n",
       "          <div class=\"iOm92LxjhHNLGxz9O-menu-subitem-head\">\n",
       "            Node size\n",
       "          </div>\n",
       "          <div class=\"iOm92LxjhHNLGxz9O-menu-subitem-body\">\n",
       "            <div>\n",
       "              <select class=\"iOm92LxjhHNLGxz9O-select\"\n",
       "                      id=\"iOm92LxjhHNLGxz9O-node-size-data-source-select\"></select>\n",
       "            </div>\n",
       "            <div class=\"iOm92LxjhHNLGxz9O-labeled-input\">\n",
       "              <input class=\"iOm92LxjhHNLGxz9O-checkbox\"\n",
       "                     id=\"iOm92LxjhHNLGxz9O-node-size-normalization-checkbox\"\n",
       "                     type=\"checkbox\">\n",
       "              <label class=\"iOm92LxjhHNLGxz9O-label\"\n",
       "                     for=\"iOm92LxjhHNLGxz9O-node-size-normalization-checkbox\">Normalize</label>\n",
       "            </div>\n",
       "            <div id=\"iOm92LxjhHNLGxz9O-node-size-norm-div\">\n",
       "              <div>\n",
       "                <span class=\"iOm92LxjhHNLGxz9O-slider-text-left\">Minimum</span>\n",
       "                <span class=\"iOm92LxjhHNLGxz9O-slider-text-right\"\n",
       "                      id=\"iOm92LxjhHNLGxz9O-node-size-normalization-min-text\"></span>\n",
       "                <input class=\"iOm92LxjhHNLGxz9O-slider\"\n",
       "                       id=\"iOm92LxjhHNLGxz9O-node-size-normalization-min-slider\"\n",
       "                       type=\"range\" min=\"0.01\" max=\"300.0\" step=\"0.01\">\n",
       "              </div>\n",
       "              <div>\n",
       "                <span class=\"iOm92LxjhHNLGxz9O-slider-text-left\">Maximum</span>\n",
       "                <span class=\"iOm92LxjhHNLGxz9O-slider-text-right\"\n",
       "                      id=\"iOm92LxjhHNLGxz9O-node-size-normalization-max-text\"></span>\n",
       "                <input class=\"iOm92LxjhHNLGxz9O-slider\"\n",
       "                       id=\"iOm92LxjhHNLGxz9O-node-size-normalization-max-slider\"\n",
       "                       type=\"range\" min=\"0.01\" max=\"300.0\" step=\"0.01\">\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Edge size -->\n",
       "          <div class=\"iOm92LxjhHNLGxz9O-menu-subitem-head\">\n",
       "            Edge size\n",
       "          </div>\n",
       "          <div class=\"iOm92LxjhHNLGxz9O-menu-subitem-body\">\n",
       "            <div>\n",
       "              <select class=\"iOm92LxjhHNLGxz9O-select\"\n",
       "                      id=\"iOm92LxjhHNLGxz9O-edge-size-data-source-select\"></select>\n",
       "            </div>\n",
       "            <div class=\"iOm92LxjhHNLGxz9O-labeled-input\">\n",
       "              <input class=\"iOm92LxjhHNLGxz9O-checkbox\"\n",
       "                     id=\"iOm92LxjhHNLGxz9O-edge-size-normalization-checkbox\"\n",
       "                     type=\"checkbox\">\n",
       "              <label class=\"iOm92LxjhHNLGxz9O-label\"\n",
       "                     for=\"iOm92LxjhHNLGxz9O-edge-size-normalization-checkbox\">Normalize</label>\n",
       "            </div>\n",
       "            <div id=\"iOm92LxjhHNLGxz9O-edge-size-norm-div\">\n",
       "              <div>\n",
       "                <span class=\"iOm92LxjhHNLGxz9O-slider-text-left\">Minimum</span>\n",
       "                <span class=\"iOm92LxjhHNLGxz9O-slider-text-right\"\n",
       "                      id=\"iOm92LxjhHNLGxz9O-edge-size-normalization-min-text\"></span>\n",
       "                <input class=\"iOm92LxjhHNLGxz9O-slider\"\n",
       "                       id=\"iOm92LxjhHNLGxz9O-edge-size-normalization-min-slider\"\n",
       "                       type=\"range\" min=\"0.01\" max=\"50.0\" step=\"0.01\">\n",
       "              </div>\n",
       "              <div>\n",
       "                <span class=\"iOm92LxjhHNLGxz9O-slider-text-left\">Maximum</span>\n",
       "                <span class=\"iOm92LxjhHNLGxz9O-slider-text-right\"\n",
       "                      id=\"iOm92LxjhHNLGxz9O-edge-size-normalization-max-text\"></span>\n",
       "                <input class=\"iOm92LxjhHNLGxz9O-slider\"\n",
       "                       id=\"iOm92LxjhHNLGxz9O-edge-size-normalization-max-slider\"\n",
       "                       type=\"range\" min=\"0.01\" max=\"50.0\" step=\"0.01\">\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "        <!-- Menu: Nodes -->\n",
       "        <div class=\"iOm92LxjhHNLGxz9O-menu-item-head\"\n",
       "             id=\"iOm92LxjhHNLGxz9O-node-head\">\n",
       "          Nodes\n",
       "        </div>\n",
       "        <div class=\"iOm92LxjhHNLGxz9O-menu-item-body\"\n",
       "             id=\"iOm92LxjhHNLGxz9O-node-body\">\n",
       "          <!-- Sub-menu: Visibility -->\n",
       "          <div>\n",
       "            <div class=\"iOm92LxjhHNLGxz9O-menu-subitem-head\">\n",
       "              Visibility\n",
       "            </div>\n",
       "            <div class=\"iOm92LxjhHNLGxz9O-menu-subitem-body\">\n",
       "              <div class=\"iOm92LxjhHNLGxz9O-labeled-input\">\n",
       "                <input class=\"iOm92LxjhHNLGxz9O-checkbox\"\n",
       "                       id=\"iOm92LxjhHNLGxz9O-node-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"iOm92LxjhHNLGxz9O-label\"\n",
       "                       for=\"iOm92LxjhHNLGxz9O-node-checkbox\">Show nodes</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Size -->\n",
       "          <div>\n",
       "            <div class=\"iOm92LxjhHNLGxz9O-menu-subitem-head\">\n",
       "              Size\n",
       "            </div>\n",
       "            <div class=\"iOm92LxjhHNLGxz9O-menu-subitem-body\">\n",
       "              <div>\n",
       "                <span class=\"iOm92LxjhHNLGxz9O-slider-text-left\">Scaling factor</span>\n",
       "                <span class=\"iOm92LxjhHNLGxz9O-slider-text-right\"\n",
       "                      id=\"iOm92LxjhHNLGxz9O-node-size-factor-text\"></span>\n",
       "                <input class=\"iOm92LxjhHNLGxz9O-slider\"\n",
       "                       id=\"iOm92LxjhHNLGxz9O-node-size-factor-slider\"\n",
       "                       type=\"range\" min=\"0.01\" max=\"5.0\" step=\"0.01\">\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Position -->\n",
       "          <div>\n",
       "            <div class=\"iOm92LxjhHNLGxz9O-menu-subitem-head\">\n",
       "              Position\n",
       "            </div>\n",
       "            <div class=\"iOm92LxjhHNLGxz9O-menu-subitem-body\">\n",
       "              <button class=\"iOm92LxjhHNLGxz9O-button\"\n",
       "                      id=\"iOm92LxjhHNLGxz9O-node-release-button\"\n",
       "                      type=\"button\">Release fixed nodes</button>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Drag behavior -->\n",
       "          <div>\n",
       "            <div class=\"iOm92LxjhHNLGxz9O-menu-subitem-head\">\n",
       "              Drag behavior\n",
       "            </div>\n",
       "            <div class=\"iOm92LxjhHNLGxz9O-menu-subitem-body\">\n",
       "              <div class=\"iOm92LxjhHNLGxz9O-labeled-input\">\n",
       "                <input class=\"iOm92LxjhHNLGxz9O-checkbox\"\n",
       "                       id=\"iOm92LxjhHNLGxz9O-node-drag-fix-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"iOm92LxjhHNLGxz9O-label\"\n",
       "                       for=\"iOm92LxjhHNLGxz9O-node-drag-fix-checkbox\">Fix node position</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Hover behavior -->\n",
       "          <div>\n",
       "            <div class=\"iOm92LxjhHNLGxz9O-menu-subitem-head\">\n",
       "              Hover behavior\n",
       "            </div>\n",
       "            <div class=\"iOm92LxjhHNLGxz9O-menu-subitem-body\">\n",
       "              <div class=\"iOm92LxjhHNLGxz9O-labeled-input\">\n",
       "                <input class=\"iOm92LxjhHNLGxz9O-checkbox\"\n",
       "                       id=\"iOm92LxjhHNLGxz9O-node-hover-neighborhood-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"iOm92LxjhHNLGxz9O-label\"\n",
       "                       for=\"iOm92LxjhHNLGxz9O-node-hover-neighborhood-checkbox\">Show neighborhood</label>\n",
       "              </div>\n",
       "              <div class=\"iOm92LxjhHNLGxz9O-labeled-input\">\n",
       "                <input class=\"iOm92LxjhHNLGxz9O-checkbox\"\n",
       "                       id=\"iOm92LxjhHNLGxz9O-node-hover-tooltip-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"iOm92LxjhHNLGxz9O-label\"\n",
       "                       for=\"iOm92LxjhHNLGxz9O-node-hover-tooltip-checkbox\">Show tooltips (if provided)</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "        <!-- Menu: Node images -->\n",
       "        <div id=\"iOm92LxjhHNLGxz9O-node-image-meta-control\">\n",
       "          <div class=\"iOm92LxjhHNLGxz9O-menu-item-head\"\n",
       "               id=\"iOm92LxjhHNLGxz9O-node-image-head\">\n",
       "            Node images\n",
       "          </div>\n",
       "          <div class=\"iOm92LxjhHNLGxz9O-menu-item-body\"\n",
       "               id=\"iOm92LxjhHNLGxz9O-node-image-body\">\n",
       "            <!-- Sub-menu: Visibility -->\n",
       "            <div>\n",
       "              <div class=\"iOm92LxjhHNLGxz9O-menu-subitem-head\">\n",
       "                Visibility\n",
       "              </div>\n",
       "              <div class=\"iOm92LxjhHNLGxz9O-menu-subitem-body\">\n",
       "                <div class=\"iOm92LxjhHNLGxz9O-labeled-input\">\n",
       "                  <input class=\"iOm92LxjhHNLGxz9O-checkbox\"\n",
       "                         id=\"iOm92LxjhHNLGxz9O-node-image-checkbox\"\n",
       "                         type=\"checkbox\">\n",
       "                  <label class=\"iOm92LxjhHNLGxz9O-label\"\n",
       "                         for=\"iOm92LxjhHNLGxz9O-node-image-checkbox\">Show node images</label>\n",
       "                </div>\n",
       "              </div>\n",
       "            </div>\n",
       "            <!-- Sub-menu: Size -->\n",
       "            <div>\n",
       "              <div class=\"iOm92LxjhHNLGxz9O-menu-subitem-head\">\n",
       "                Size\n",
       "              </div>\n",
       "              <div class=\"iOm92LxjhHNLGxz9O-menu-subitem-body\">\n",
       "                <span class=\"iOm92LxjhHNLGxz9O-slider-text-left\">Scaling factor</span>\n",
       "                <span class=\"iOm92LxjhHNLGxz9O-slider-text-right\"\n",
       "                      id=\"iOm92LxjhHNLGxz9O-node-image-size-factor-text\"></span>\n",
       "                <input class=\"iOm92LxjhHNLGxz9O-slider\"\n",
       "                       id=\"iOm92LxjhHNLGxz9O-node-image-size-factor-slider\"\n",
       "                       type=\"range\" min=\"0.01\" max=\"5.0\" step=\"0.01\">\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "        <!-- Menu: Node labels -->\n",
       "        <div class=\"iOm92LxjhHNLGxz9O-menu-item-head\"\n",
       "             id=\"iOm92LxjhHNLGxz9O-node-label-head\">\n",
       "          Node labels\n",
       "        </div>\n",
       "        <div class=\"iOm92LxjhHNLGxz9O-menu-item-body\"\n",
       "             id=\"iOm92LxjhHNLGxz9O-node-label-body\">\n",
       "          <!-- Sub-menu: Visibility -->\n",
       "          <div>\n",
       "            <div class=\"iOm92LxjhHNLGxz9O-menu-subitem-head\">\n",
       "              Visibility\n",
       "            </div>\n",
       "            <div class=\"iOm92LxjhHNLGxz9O-menu-subitem-body\">\n",
       "              <div class=\"iOm92LxjhHNLGxz9O-labeled-input\">\n",
       "                <input class=\"iOm92LxjhHNLGxz9O-checkbox\"\n",
       "                       id=\"iOm92LxjhHNLGxz9O-node-label-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"iOm92LxjhHNLGxz9O-label\"\n",
       "                       for=\"iOm92LxjhHNLGxz9O-node-label-checkbox\">Show node labels</label>\n",
       "              </div>\n",
       "              <div class=\"iOm92LxjhHNLGxz9O-labeled-input\">\n",
       "                <input class=\"iOm92LxjhHNLGxz9O-checkbox\"\n",
       "                       id=\"iOm92LxjhHNLGxz9O-node-label-border-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"iOm92LxjhHNLGxz9O-label\"\n",
       "                       for=\"iOm92LxjhHNLGxz9O-node-label-border-checkbox\">Show borders</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Size -->\n",
       "          <div>\n",
       "            <div class=\"iOm92LxjhHNLGxz9O-menu-subitem-head\">\n",
       "              Size\n",
       "            </div>\n",
       "            <div class=\"iOm92LxjhHNLGxz9O-menu-subitem-body\">\n",
       "              <span class=\"iOm92LxjhHNLGxz9O-slider-text-left\">Scaling factor</span>\n",
       "              <span class=\"iOm92LxjhHNLGxz9O-slider-text-right\"\n",
       "                    id=\"iOm92LxjhHNLGxz9O-node-label-size-factor-text\"></span>\n",
       "              <input class=\"iOm92LxjhHNLGxz9O-slider\"\n",
       "                     id=\"iOm92LxjhHNLGxz9O-node-label-size-factor-slider\"\n",
       "                     type=\"range\" min=\"0.01\" max=\"5.0\" step=\"0.01\">\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Rotation -->\n",
       "          <div id=\"iOm92LxjhHNLGxz9O-node-label-rotation\">\n",
       "            <div class=\"iOm92LxjhHNLGxz9O-menu-subitem-head\">\n",
       "              Rotation\n",
       "            </div>\n",
       "            <div class=\"iOm92LxjhHNLGxz9O-menu-subitem-body\">\n",
       "              <span class=\"iOm92LxjhHNLGxz9O-slider-text-left\">Angle</span>\n",
       "              <span class=\"iOm92LxjhHNLGxz9O-slider-text-right\"\n",
       "                    id=\"iOm92LxjhHNLGxz9O-node-label-rotation-text\"></span>\n",
       "              <input class=\"iOm92LxjhHNLGxz9O-slider\"\n",
       "                     id=\"iOm92LxjhHNLGxz9O-node-label-rotation-slider\"\n",
       "                     type=\"range\" min=\"0.0\" max=\"359.0\" step=\"1.0\">\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "        <!-- Menu: Edges -->\n",
       "        <div class=\"iOm92LxjhHNLGxz9O-menu-item-head\"\n",
       "             id=\"iOm92LxjhHNLGxz9O-edge-head\">\n",
       "          Edges\n",
       "        </div>\n",
       "        <div class=\"iOm92LxjhHNLGxz9O-menu-item-body\"\n",
       "             id=\"iOm92LxjhHNLGxz9O-edge-body\">\n",
       "          <!-- Sub-menu: Visibility -->\n",
       "          <div>\n",
       "            <div class=\"iOm92LxjhHNLGxz9O-menu-subitem-head\">\n",
       "              Visibility\n",
       "            </div>\n",
       "            <div class=\"iOm92LxjhHNLGxz9O-menu-subitem-body\">\n",
       "              <div class=\"iOm92LxjhHNLGxz9O-labeled-input\">\n",
       "                <input class=\"iOm92LxjhHNLGxz9O-checkbox\"\n",
       "                       id=\"iOm92LxjhHNLGxz9O-edge-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"iOm92LxjhHNLGxz9O-label\"\n",
       "                       for=\"iOm92LxjhHNLGxz9O-edge-checkbox\">Show edges</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Size -->\n",
       "          <div>\n",
       "            <div class=\"iOm92LxjhHNLGxz9O-menu-subitem-head\">\n",
       "              Size\n",
       "            </div>\n",
       "            <div class=\"iOm92LxjhHNLGxz9O-menu-subitem-body\">\n",
       "              <span class=\"iOm92LxjhHNLGxz9O-slider-text-left\">Scaling factor</span>\n",
       "              <span class=\"iOm92LxjhHNLGxz9O-slider-text-right\"\n",
       "                    id=\"iOm92LxjhHNLGxz9O-edge-size-factor-text\"></span>\n",
       "              <input class=\"iOm92LxjhHNLGxz9O-slider\"\n",
       "                     id=\"iOm92LxjhHNLGxz9O-edge-size-factor-slider\"\n",
       "                     type=\"range\" min=\"0.01\" max=\"5.0\" step=\"0.01\">\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Form -->\n",
       "          <div>\n",
       "            <div class=\"iOm92LxjhHNLGxz9O-menu-subitem-head\">\n",
       "              Form\n",
       "            </div>\n",
       "            <div class=\"iOm92LxjhHNLGxz9O-menu-subitem-body\">\n",
       "              <span class=\"iOm92LxjhHNLGxz9O-slider-text-left\">Curvature</span>\n",
       "              <span class=\"iOm92LxjhHNLGxz9O-slider-text-right\"\n",
       "                    id=\"iOm92LxjhHNLGxz9O-edge-curvature-text\"></span>\n",
       "              <input class=\"iOm92LxjhHNLGxz9O-slider\"\n",
       "                     id=\"iOm92LxjhHNLGxz9O-edge-curvature-slider\"\n",
       "                     type=\"range\" min=\"-1.2\" max=\"1.2\" step=\"0.02\">\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Hover behavior -->\n",
       "          <div>\n",
       "            <div class=\"iOm92LxjhHNLGxz9O-menu-subitem-head\">\n",
       "              Hover behavior\n",
       "            </div>\n",
       "            <div class=\"iOm92LxjhHNLGxz9O-menu-subitem-body\">\n",
       "              <div class=\"iOm92LxjhHNLGxz9O-labeled-input\">\n",
       "                <input class=\"iOm92LxjhHNLGxz9O-checkbox\"\n",
       "                       id=\"iOm92LxjhHNLGxz9O-edge-hover-tooltip-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"iOm92LxjhHNLGxz9O-label\"\n",
       "                       for=\"iOm92LxjhHNLGxz9O-edge-hover-tooltip-checkbox\">Show tooltips (if provided)</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "        <!-- Menu: Edge labels -->\n",
       "        <div class=\"iOm92LxjhHNLGxz9O-menu-item-head\"\n",
       "             id=\"iOm92LxjhHNLGxz9O-edge-label-head\">\n",
       "          Edge labels\n",
       "        </div>\n",
       "        <div class=\"iOm92LxjhHNLGxz9O-menu-item-body\"\n",
       "             id=\"iOm92LxjhHNLGxz9O-edge-label-body\">\n",
       "          <!-- Sub-menu: Visibility -->\n",
       "          <div>\n",
       "            <div class=\"iOm92LxjhHNLGxz9O-menu-subitem-head\">\n",
       "              Visibility\n",
       "            </div>\n",
       "            <div class=\"iOm92LxjhHNLGxz9O-menu-subitem-body\">\n",
       "              <div class=\"iOm92LxjhHNLGxz9O-labeled-input\">\n",
       "                <input class=\"iOm92LxjhHNLGxz9O-checkbox\"\n",
       "                       id=\"iOm92LxjhHNLGxz9O-edge-label-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"iOm92LxjhHNLGxz9O-label\"\n",
       "                       for=\"iOm92LxjhHNLGxz9O-edge-label-checkbox\">Show edge labels</label>\n",
       "              </div>\n",
       "              <div class=\"iOm92LxjhHNLGxz9O-labeled-input\">\n",
       "                <input class=\"iOm92LxjhHNLGxz9O-checkbox\"\n",
       "                       id=\"iOm92LxjhHNLGxz9O-edge-label-border-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"iOm92LxjhHNLGxz9O-label\"\n",
       "                       for=\"iOm92LxjhHNLGxz9O-edge-label-border-checkbox\">Show borders</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Size -->\n",
       "          <div>\n",
       "            <div class=\"iOm92LxjhHNLGxz9O-menu-subitem-head\">\n",
       "              Size\n",
       "            </div>\n",
       "            <div class=\"iOm92LxjhHNLGxz9O-menu-subitem-body\">\n",
       "              <span class=\"iOm92LxjhHNLGxz9O-slider-text-left\">Scaling factor</span>\n",
       "              <span class=\"iOm92LxjhHNLGxz9O-slider-text-right\"\n",
       "                    id=\"iOm92LxjhHNLGxz9O-edge-label-size-factor-text\"></span>\n",
       "              <input class=\"iOm92LxjhHNLGxz9O-slider\"\n",
       "                     id=\"iOm92LxjhHNLGxz9O-edge-label-size-factor-slider\"\n",
       "                     type=\"range\" min=\"0.01\" max=\"5.0\" step=\"0.01\">\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Rotation -->\n",
       "          <div id=\"iOm92LxjhHNLGxz9O-edge-label-rotation\">\n",
       "            <div class=\"iOm92LxjhHNLGxz9O-menu-subitem-head\">\n",
       "              Rotation\n",
       "            </div>\n",
       "            <div class=\"iOm92LxjhHNLGxz9O-menu-subitem-body\">\n",
       "              <span class=\"iOm92LxjhHNLGxz9O-slider-text-left\">Angle</span>\n",
       "              <span class=\"iOm92LxjhHNLGxz9O-slider-text-right\"\n",
       "                      id=\"iOm92LxjhHNLGxz9O-edge-label-rotation-text\"></span>\n",
       "              <input class=\"iOm92LxjhHNLGxz9O-slider\"\n",
       "                     id=\"iOm92LxjhHNLGxz9O-edge-label-rotation-slider\"\n",
       "                     type=\"range\" min=\"0.0\" max=\"359.0\" step=\"1.0\">\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "        <!-- Menu: Layout algorithm -->\n",
       "        <div class=\"iOm92LxjhHNLGxz9O-menu-item-head\"\n",
       "             id=\"iOm92LxjhHNLGxz9O-layout-algorithm-head\">\n",
       "          Layout algorithm\n",
       "        </div>\n",
       "        <div class=\"iOm92LxjhHNLGxz9O-menu-item-body\"\n",
       "             id=\"iOm92LxjhHNLGxz9O-layout-algorithm-body\">\n",
       "          <!-- Sub-menu: Simulation -->\n",
       "          <div>\n",
       "            <div class=\"iOm92LxjhHNLGxz9O-menu-subitem-head\">\n",
       "              Simulation\n",
       "            </div>\n",
       "            <div class=\"iOm92LxjhHNLGxz9O-menu-subitem-body\">\n",
       "              <div class=\"iOm92LxjhHNLGxz9O-labeled-input\">\n",
       "                <input class=\"iOm92LxjhHNLGxz9O-checkbox\"\n",
       "                       id=\"iOm92LxjhHNLGxz9O-simulation-active-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"iOm92LxjhHNLGxz9O-label\"\n",
       "                       for=\"iOm92LxjhHNLGxz9O-simulation-active-checkbox\">Active</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Algorithm -->\n",
       "          <div>\n",
       "            <div class=\"iOm92LxjhHNLGxz9O-menu-subitem-head\">\n",
       "              Algorithm\n",
       "            </div>\n",
       "            <div class=\"iOm92LxjhHNLGxz9O-menu-subitem-body\">\n",
       "              <div>\n",
       "                <select class=\"iOm92LxjhHNLGxz9O-select\"\n",
       "                        id=\"iOm92LxjhHNLGxz9O-layout-algorithm-select\"></select>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Parameters -->\n",
       "          <div>\n",
       "            <div class=\"iOm92LxjhHNLGxz9O-menu-subitem-head\">\n",
       "              Parameters\n",
       "            </div>\n",
       "            <div class=\"iOm92LxjhHNLGxz9O-menu-subitem-body\">\n",
       "              <div id=\"iOm92LxjhHNLGxz9O-gravitational-constant-div\">\n",
       "                <span class=\"iOm92LxjhHNLGxz9O-slider-text-left\">Gravitational constant</span>\n",
       "                <span class=\"iOm92LxjhHNLGxz9O-slider-text-right\"\n",
       "                      id=\"iOm92LxjhHNLGxz9O-gravitational-constant-text\"></span>\n",
       "                <input class=\"iOm92LxjhHNLGxz9O-slider\"\n",
       "                       id=\"iOm92LxjhHNLGxz9O-gravitational-constant-slider\"\n",
       "                       type=\"range\" min=\"-50000\" max=\"0\" step=\"1\"\n",
       "                       style=\"direction:rtl;\">\n",
       "              </div>\n",
       "              <div id=\"iOm92LxjhHNLGxz9O-spring-length-div\">\n",
       "                <span class=\"iOm92LxjhHNLGxz9O-slider-text-left\">Spring length</span>\n",
       "                <span class=\"iOm92LxjhHNLGxz9O-slider-text-right\"\n",
       "                      id=\"iOm92LxjhHNLGxz9O-spring-length-text\"></span>\n",
       "                <input class=\"iOm92LxjhHNLGxz9O-slider\"\n",
       "                       id=\"iOm92LxjhHNLGxz9O-spring-length-slider\"\n",
       "                       type=\"range\" min=\"0.0\" max=\"500\" step=\"0.1\">\n",
       "              </div>\n",
       "              <div id=\"iOm92LxjhHNLGxz9O-spring-constant-div\">\n",
       "                <span class=\"iOm92LxjhHNLGxz9O-slider-text-left\">Spring constant</span>\n",
       "                <span class=\"iOm92LxjhHNLGxz9O-slider-text-right\"\n",
       "                      id=\"iOm92LxjhHNLGxz9O-spring-constant-text\"></span>\n",
       "                <input class=\"iOm92LxjhHNLGxz9O-slider\"\n",
       "                       id=\"iOm92LxjhHNLGxz9O-spring-constant-slider\"\n",
       "                       type=\"range\" min=\"0.0\" max=\"1.0\" step=\"0.01\">\n",
       "              </div>\n",
       "              <div id=\"iOm92LxjhHNLGxz9O-avoid-overlap-div\">\n",
       "                <span class=\"iOm92LxjhHNLGxz9O-slider-text-left\">Avoid overlap</span>\n",
       "                <span class=\"iOm92LxjhHNLGxz9O-slider-text-right\"\n",
       "                      id=\"iOm92LxjhHNLGxz9O-avoid-overlap-text\"></span>\n",
       "                <input class=\"iOm92LxjhHNLGxz9O-slider\"\n",
       "                       id=\"iOm92LxjhHNLGxz9O-avoid-overlap-slider\"\n",
       "                       type=\"range\" min=\"0.0\" max=\"1.0\" step=\"0.01\">\n",
       "              </div>\n",
       "              <div id=\"iOm92LxjhHNLGxz9O-central-gravity-div\">\n",
       "                <span class=\"iOm92LxjhHNLGxz9O-slider-text-left\">Central gravity</span>\n",
       "                <span class=\"iOm92LxjhHNLGxz9O-slider-text-right\"\n",
       "                      id=\"iOm92LxjhHNLGxz9O-central-gravity-text\"></span>\n",
       "                <input class=\"iOm92LxjhHNLGxz9O-slider\"\n",
       "                       id=\"iOm92LxjhHNLGxz9O-central-gravity-slider\"\n",
       "                       type=\"range\" min=\"0.0\" max=\"10.0\" step=\"0.001\">\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "      </div>\n",
       "    </div>\n",
       "  </div>\n",
       "\n",
       "  <script charset=\"utf-8\" type=\"text/javascript\">\n",
       "    if(typeof(require) === \"undefined\"){\n",
       "      // Project sites:    https://requirejs.org\n",
       "//                   https://github.com/requirejs/requirejs\n",
       "// Code source:      https://requirejs.org/docs/release/2.3.6/minified/require.js - accessed on 19.11.2020\n",
       "// Original license: MIT\n",
       "// Code changes:     None\n",
       "\n",
       "/** vim: et:ts=4:sw=4:sts=4\n",
       " * @license RequireJS 2.3.6 Copyright jQuery Foundation and other contributors.\n",
       " * Released under MIT license, https://github.com/requirejs/requirejs/blob/master/LICENSE\n",
       " */\n",
       "var requirejs,require,define;!function(global,setTimeout){var req,s,head,baseElement,dataMain,src,interactiveScript,currentlyAddingScript,mainScript,subPath,version=\"2.3.6\",commentRegExp=/\\/\\*[\\s\\S]*?\\*\\/|([^:\"'=]|^)\\/\\/.*$/gm,cjsRequireRegExp=/[^.]\\s*require\\s*\\(\\s*[\"']([^'\"\\s]+)[\"']\\s*\\)/g,jsSuffixRegExp=/\\.js$/,currDirRegExp=/^\\.\\//,op=Object.prototype,ostring=op.toString,hasOwn=op.hasOwnProperty,isBrowser=!(\"undefined\"==typeof window||\"undefined\"==typeof navigator||!window.document),isWebWorker=!isBrowser&&\"undefined\"!=typeof importScripts,readyRegExp=isBrowser&&\"PLAYSTATION 3\"===navigator.platform?/^complete$/:/^(complete|loaded)$/,defContextName=\"_\",isOpera=\"undefined\"!=typeof opera&&\"[object Opera]\"===opera.toString(),contexts={},cfg={},globalDefQueue=[],useInteractive=!1;function commentReplace(e,t){return t||\"\"}function isFunction(e){return\"[object Function]\"===ostring.call(e)}function isArray(e){return\"[object Array]\"===ostring.call(e)}function each(e,t){var i;if(e)for(i=0;i<e.length&&(!e[i]||!t(e[i],i,e));i+=1);}function eachReverse(e,t){var i;if(e)for(i=e.length-1;-1<i&&(!e[i]||!t(e[i],i,e));i-=1);}function hasProp(e,t){return hasOwn.call(e,t)}function getOwn(e,t){return hasProp(e,t)&&e[t]}function eachProp(e,t){var i;for(i in e)if(hasProp(e,i)&&t(e[i],i))break}function mixin(i,e,r,n){return e&&eachProp(e,function(e,t){!r&&hasProp(i,t)||(!n||\"object\"!=typeof e||!e||isArray(e)||isFunction(e)||e instanceof RegExp?i[t]=e:(i[t]||(i[t]={}),mixin(i[t],e,r,n)))}),i}function bind(e,t){return function(){return t.apply(e,arguments)}}function scripts(){return document.getElementsByTagName(\"script\")}function defaultOnError(e){throw e}function getGlobal(e){if(!e)return e;var t=global;return each(e.split(\".\"),function(e){t=t[e]}),t}function makeError(e,t,i,r){var n=new Error(t+\"\\nhttps://requirejs.org/docs/errors.html#\"+e);return n.requireType=e,n.requireModules=r,i&&(n.originalError=i),n}if(void 0===define){if(void 0!==requirejs){if(isFunction(requirejs))return;cfg=requirejs,requirejs=void 0}void 0===require||isFunction(require)||(cfg=require,require=void 0),req=requirejs=function(e,t,i,r){var n,o,a=defContextName;return isArray(e)||\"string\"==typeof e||(o=e,isArray(t)?(e=t,t=i,i=r):e=[]),o&&o.context&&(a=o.context),(n=getOwn(contexts,a))||(n=contexts[a]=req.s.newContext(a)),o&&n.configure(o),n.require(e,t,i)},req.config=function(e){return req(e)},req.nextTick=void 0!==setTimeout?function(e){setTimeout(e,4)}:function(e){e()},require||(require=req),req.version=version,req.jsExtRegExp=/^\\/|:|\\?|\\.js$/,req.isBrowser=isBrowser,s=req.s={contexts:contexts,newContext:newContext},req({}),each([\"toUrl\",\"undef\",\"defined\",\"specified\"],function(t){req[t]=function(){var e=contexts[defContextName];return e.require[t].apply(e,arguments)}}),isBrowser&&(head=s.head=document.getElementsByTagName(\"head\")[0],baseElement=document.getElementsByTagName(\"base\")[0],baseElement&&(head=s.head=baseElement.parentNode)),req.onError=defaultOnError,req.createNode=function(e,t,i){var r=e.xhtml?document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"html:script\"):document.createElement(\"script\");return r.type=e.scriptType||\"text/javascript\",r.charset=\"utf-8\",r.async=!0,r},req.load=function(t,i,r){var e,n=t&&t.config||{};if(isBrowser)return(e=req.createNode(n,i,r)).setAttribute(\"data-requirecontext\",t.contextName),e.setAttribute(\"data-requiremodule\",i),!e.attachEvent||e.attachEvent.toString&&e.attachEvent.toString().indexOf(\"[native code\")<0||isOpera?(e.addEventListener(\"load\",t.onScriptLoad,!1),e.addEventListener(\"error\",t.onScriptError,!1)):(useInteractive=!0,e.attachEvent(\"onreadystatechange\",t.onScriptLoad)),e.src=r,n.onNodeCreated&&n.onNodeCreated(e,n,i,r),currentlyAddingScript=e,baseElement?head.insertBefore(e,baseElement):head.appendChild(e),currentlyAddingScript=null,e;if(isWebWorker)try{setTimeout(function(){},0),importScripts(r),t.completeLoad(i)}catch(e){t.onError(makeError(\"importscripts\",\"importScripts failed for \"+i+\" at \"+r,e,[i]))}},isBrowser&&!cfg.skipDataMain&&eachReverse(scripts(),function(e){if(head||(head=e.parentNode),dataMain=e.getAttribute(\"data-main\"))return mainScript=dataMain,cfg.baseUrl||-1!==mainScript.indexOf(\"!\")||(mainScript=(src=mainScript.split(\"/\")).pop(),subPath=src.length?src.join(\"/\")+\"/\":\"./\",cfg.baseUrl=subPath),mainScript=mainScript.replace(jsSuffixRegExp,\"\"),req.jsExtRegExp.test(mainScript)&&(mainScript=dataMain),cfg.deps=cfg.deps?cfg.deps.concat(mainScript):[mainScript],!0}),define=function(e,i,t){var r,n;\"string\"!=typeof e&&(t=i,i=e,e=null),isArray(i)||(t=i,i=null),!i&&isFunction(t)&&(i=[],t.length&&(t.toString().replace(commentRegExp,commentReplace).replace(cjsRequireRegExp,function(e,t){i.push(t)}),i=(1===t.length?[\"require\"]:[\"require\",\"exports\",\"module\"]).concat(i))),useInteractive&&(r=currentlyAddingScript||getInteractiveScript())&&(e||(e=r.getAttribute(\"data-requiremodule\")),n=contexts[r.getAttribute(\"data-requirecontext\")]),n?(n.defQueue.push([e,i,t]),n.defQueueMap[e]=!0):globalDefQueue.push([e,i,t])},define.amd={jQuery:!0},req.exec=function(text){return eval(text)},req(cfg)}function newContext(u){var i,e,l,c,d,g={waitSeconds:7,baseUrl:\"./\",paths:{},bundles:{},pkgs:{},shim:{},config:{}},p={},f={},r={},h=[],m={},n={},v={},x=1,b=1;function q(e,t,i){var r,n,o,a,s,u,c,d,p,f,l=t&&t.split(\"/\"),h=g.map,m=h&&h[\"*\"];if(e&&(u=(e=e.split(\"/\")).length-1,g.nodeIdCompat&&jsSuffixRegExp.test(e[u])&&(e[u]=e[u].replace(jsSuffixRegExp,\"\")),\".\"===e[0].charAt(0)&&l&&(e=l.slice(0,l.length-1).concat(e)),function(e){var t,i;for(t=0;t<e.length;t++)if(\".\"===(i=e[t]))e.splice(t,1),t-=1;else if(\"..\"===i){if(0===t||1===t&&\"..\"===e[2]||\"..\"===e[t-1])continue;0<t&&(e.splice(t-1,2),t-=2)}}(e),e=e.join(\"/\")),i&&h&&(l||m)){e:for(o=(n=e.split(\"/\")).length;0<o;o-=1){if(s=n.slice(0,o).join(\"/\"),l)for(a=l.length;0<a;a-=1)if((r=getOwn(h,l.slice(0,a).join(\"/\")))&&(r=getOwn(r,s))){c=r,d=o;break e}!p&&m&&getOwn(m,s)&&(p=getOwn(m,s),f=o)}!c&&p&&(c=p,d=f),c&&(n.splice(0,d,c),e=n.join(\"/\"))}return getOwn(g.pkgs,e)||e}function E(t){isBrowser&&each(scripts(),function(e){if(e.getAttribute(\"data-requiremodule\")===t&&e.getAttribute(\"data-requirecontext\")===l.contextName)return e.parentNode.removeChild(e),!0})}function w(e){var t=getOwn(g.paths,e);if(t&&isArray(t)&&1<t.length)return t.shift(),l.require.undef(e),l.makeRequire(null,{skipMap:!0})([e]),!0}function y(e){var t,i=e?e.indexOf(\"!\"):-1;return-1<i&&(t=e.substring(0,i),e=e.substring(i+1,e.length)),[t,e]}function S(e,t,i,r){var n,o,a,s,u=null,c=t?t.name:null,d=e,p=!0,f=\"\";return e||(p=!1,e=\"_@r\"+(x+=1)),u=(s=y(e))[0],e=s[1],u&&(u=q(u,c,r),o=getOwn(m,u)),e&&(u?f=i?e:o&&o.normalize?o.normalize(e,function(e){return q(e,c,r)}):-1===e.indexOf(\"!\")?q(e,c,r):e:(u=(s=y(f=q(e,c,r)))[0],f=s[1],i=!0,n=l.nameToUrl(f))),{prefix:u,name:f,parentMap:t,unnormalized:!!(a=!u||o||i?\"\":\"_unnormalized\"+(b+=1)),url:n,originalName:d,isDefine:p,id:(u?u+\"!\"+f:f)+a}}function k(e){var t=e.id,i=getOwn(p,t);return i||(i=p[t]=new l.Module(e)),i}function M(e,t,i){var r=e.id,n=getOwn(p,r);!hasProp(m,r)||n&&!n.defineEmitComplete?(n=k(e)).error&&\"error\"===t?i(n.error):n.on(t,i):\"defined\"===t&&i(m[r])}function O(i,e){var t=i.requireModules,r=!1;e?e(i):(each(t,function(e){var t=getOwn(p,e);t&&(t.error=i,t.events.error&&(r=!0,t.emit(\"error\",i)))}),r||req.onError(i))}function j(){globalDefQueue.length&&(each(globalDefQueue,function(e){var t=e[0];\"string\"==typeof t&&(l.defQueueMap[t]=!0),h.push(e)}),globalDefQueue=[])}function P(e){delete p[e],delete f[e]}function R(){var e,r,t=1e3*g.waitSeconds,n=t&&l.startTime+t<(new Date).getTime(),o=[],a=[],s=!1,u=!0;if(!i){if(i=!0,eachProp(f,function(e){var t=e.map,i=t.id;if(e.enabled&&(t.isDefine||a.push(e),!e.error))if(!e.inited&&n)w(i)?s=r=!0:(o.push(i),E(i));else if(!e.inited&&e.fetched&&t.isDefine&&(s=!0,!t.prefix))return u=!1}),n&&o.length)return(e=makeError(\"timeout\",\"Load timeout for modules: \"+o,null,o)).contextName=l.contextName,O(e);u&&each(a,function(e){!function n(o,a,s){var e=o.map.id;o.error?o.emit(\"error\",o.error):(a[e]=!0,each(o.depMaps,function(e,t){var i=e.id,r=getOwn(p,i);!r||o.depMatched[t]||s[i]||(getOwn(a,i)?(o.defineDep(t,m[i]),o.check()):n(r,a,s))}),s[e]=!0)}(e,{},{})}),n&&!r||!s||!isBrowser&&!isWebWorker||d||(d=setTimeout(function(){d=0,R()},50)),i=!1}}function a(e){hasProp(m,e[0])||k(S(e[0],null,!0)).init(e[1],e[2])}function o(e,t,i,r){e.detachEvent&&!isOpera?r&&e.detachEvent(r,t):e.removeEventListener(i,t,!1)}function s(e){var t=e.currentTarget||e.srcElement;return o(t,l.onScriptLoad,\"load\",\"onreadystatechange\"),o(t,l.onScriptError,\"error\"),{node:t,id:t&&t.getAttribute(\"data-requiremodule\")}}function T(){var e;for(j();h.length;){if(null===(e=h.shift())[0])return O(makeError(\"mismatch\",\"Mismatched anonymous define() module: \"+e[e.length-1]));a(e)}l.defQueueMap={}}return c={require:function(e){return e.require?e.require:e.require=l.makeRequire(e.map)},exports:function(e){if(e.usingExports=!0,e.map.isDefine)return e.exports?m[e.map.id]=e.exports:e.exports=m[e.map.id]={}},module:function(e){return e.module?e.module:e.module={id:e.map.id,uri:e.map.url,config:function(){return getOwn(g.config,e.map.id)||{}},exports:e.exports||(e.exports={})}}},(e=function(e){this.events=getOwn(r,e.id)||{},this.map=e,this.shim=getOwn(g.shim,e.id),this.depExports=[],this.depMaps=[],this.depMatched=[],this.pluginMaps={},this.depCount=0}).prototype={init:function(e,t,i,r){r=r||{},this.inited||(this.factory=t,i?this.on(\"error\",i):this.events.error&&(i=bind(this,function(e){this.emit(\"error\",e)})),this.depMaps=e&&e.slice(0),this.errback=i,this.inited=!0,this.ignore=r.ignore,r.enabled||this.enabled?this.enable():this.check())},defineDep:function(e,t){this.depMatched[e]||(this.depMatched[e]=!0,this.depCount-=1,this.depExports[e]=t)},fetch:function(){if(!this.fetched){this.fetched=!0,l.startTime=(new Date).getTime();var e=this.map;if(!this.shim)return e.prefix?this.callPlugin():this.load();l.makeRequire(this.map,{enableBuildCallback:!0})(this.shim.deps||[],bind(this,function(){return e.prefix?this.callPlugin():this.load()}))}},load:function(){var e=this.map.url;n[e]||(n[e]=!0,l.load(this.map.id,e))},check:function(){if(this.enabled&&!this.enabling){var t,e,i=this.map.id,r=this.depExports,n=this.exports,o=this.factory;if(this.inited){if(this.error)this.emit(\"error\",this.error);else if(!this.defining){if(this.defining=!0,this.depCount<1&&!this.defined){if(isFunction(o)){if(this.events.error&&this.map.isDefine||req.onError!==defaultOnError)try{n=l.execCb(i,o,r,n)}catch(e){t=e}else n=l.execCb(i,o,r,n);if(this.map.isDefine&&void 0===n&&((e=this.module)?n=e.exports:this.usingExports&&(n=this.exports)),t)return t.requireMap=this.map,t.requireModules=this.map.isDefine?[this.map.id]:null,t.requireType=this.map.isDefine?\"define\":\"require\",O(this.error=t)}else n=o;if(this.exports=n,this.map.isDefine&&!this.ignore&&(m[i]=n,req.onResourceLoad)){var a=[];each(this.depMaps,function(e){a.push(e.normalizedMap||e)}),req.onResourceLoad(l,this.map,a)}P(i),this.defined=!0}this.defining=!1,this.defined&&!this.defineEmitted&&(this.defineEmitted=!0,this.emit(\"defined\",this.exports),this.defineEmitComplete=!0)}}else hasProp(l.defQueueMap,i)||this.fetch()}},callPlugin:function(){var u=this.map,c=u.id,e=S(u.prefix);this.depMaps.push(e),M(e,\"defined\",bind(this,function(e){var o,t,i,r=getOwn(v,this.map.id),n=this.map.name,a=this.map.parentMap?this.map.parentMap.name:null,s=l.makeRequire(u.parentMap,{enableBuildCallback:!0});return this.map.unnormalized?(e.normalize&&(n=e.normalize(n,function(e){return q(e,a,!0)})||\"\"),M(t=S(u.prefix+\"!\"+n,this.map.parentMap,!0),\"defined\",bind(this,function(e){this.map.normalizedMap=t,this.init([],function(){return e},null,{enabled:!0,ignore:!0})})),void((i=getOwn(p,t.id))&&(this.depMaps.push(t),this.events.error&&i.on(\"error\",bind(this,function(e){this.emit(\"error\",e)})),i.enable()))):r?(this.map.url=l.nameToUrl(r),void this.load()):((o=bind(this,function(e){this.init([],function(){return e},null,{enabled:!0})})).error=bind(this,function(e){this.inited=!0,(this.error=e).requireModules=[c],eachProp(p,function(e){0===e.map.id.indexOf(c+\"_unnormalized\")&&P(e.map.id)}),O(e)}),o.fromText=bind(this,function(e,t){var i=u.name,r=S(i),n=useInteractive;t&&(e=t),n&&(useInteractive=!1),k(r),hasProp(g.config,c)&&(g.config[i]=g.config[c]);try{req.exec(e)}catch(e){return O(makeError(\"fromtexteval\",\"fromText eval for \"+c+\" failed: \"+e,e,[c]))}n&&(useInteractive=!0),this.depMaps.push(r),l.completeLoad(i),s([i],o)}),void e.load(u.name,s,o,g))})),l.enable(e,this),this.pluginMaps[e.id]=e},enable:function(){(f[this.map.id]=this).enabled=!0,this.enabling=!0,each(this.depMaps,bind(this,function(e,t){var i,r,n;if(\"string\"==typeof e){if(e=S(e,this.map.isDefine?this.map:this.map.parentMap,!1,!this.skipMap),this.depMaps[t]=e,n=getOwn(c,e.id))return void(this.depExports[t]=n(this));this.depCount+=1,M(e,\"defined\",bind(this,function(e){this.undefed||(this.defineDep(t,e),this.check())})),this.errback?M(e,\"error\",bind(this,this.errback)):this.events.error&&M(e,\"error\",bind(this,function(e){this.emit(\"error\",e)}))}i=e.id,r=p[i],hasProp(c,i)||!r||r.enabled||l.enable(e,this)})),eachProp(this.pluginMaps,bind(this,function(e){var t=getOwn(p,e.id);t&&!t.enabled&&l.enable(e,this)})),this.enabling=!1,this.check()},on:function(e,t){var i=this.events[e];i||(i=this.events[e]=[]),i.push(t)},emit:function(e,t){each(this.events[e],function(e){e(t)}),\"error\"===e&&delete this.events[e]}},(l={config:g,contextName:u,registry:p,defined:m,urlFetched:n,defQueue:h,defQueueMap:{},Module:e,makeModuleMap:S,nextTick:req.nextTick,onError:O,configure:function(e){if(e.baseUrl&&\"/\"!==e.baseUrl.charAt(e.baseUrl.length-1)&&(e.baseUrl+=\"/\"),\"string\"==typeof e.urlArgs){var i=e.urlArgs;e.urlArgs=function(e,t){return(-1===t.indexOf(\"?\")?\"?\":\"&\")+i}}var r=g.shim,n={paths:!0,bundles:!0,config:!0,map:!0};eachProp(e,function(e,t){n[t]?(g[t]||(g[t]={}),mixin(g[t],e,!0,!0)):g[t]=e}),e.bundles&&eachProp(e.bundles,function(e,t){each(e,function(e){e!==t&&(v[e]=t)})}),e.shim&&(eachProp(e.shim,function(e,t){isArray(e)&&(e={deps:e}),!e.exports&&!e.init||e.exportsFn||(e.exportsFn=l.makeShimExports(e)),r[t]=e}),g.shim=r),e.packages&&each(e.packages,function(e){var t;t=(e=\"string\"==typeof e?{name:e}:e).name,e.location&&(g.paths[t]=e.location),g.pkgs[t]=e.name+\"/\"+(e.main||\"main\").replace(currDirRegExp,\"\").replace(jsSuffixRegExp,\"\")}),eachProp(p,function(e,t){e.inited||e.map.unnormalized||(e.map=S(t,null,!0))}),(e.deps||e.callback)&&l.require(e.deps||[],e.callback)},makeShimExports:function(t){return function(){var e;return t.init&&(e=t.init.apply(global,arguments)),e||t.exports&&getGlobal(t.exports)}},makeRequire:function(o,a){function s(e,t,i){var r,n;return a.enableBuildCallback&&t&&isFunction(t)&&(t.__requireJsBuild=!0),\"string\"==typeof e?isFunction(t)?O(makeError(\"requireargs\",\"Invalid require call\"),i):o&&hasProp(c,e)?c[e](p[o.id]):req.get?req.get(l,e,o,s):(r=S(e,o,!1,!0).id,hasProp(m,r)?m[r]:O(makeError(\"notloaded\",'Module name \"'+r+'\" has not been loaded yet for context: '+u+(o?\"\":\". Use require([])\")))):(T(),l.nextTick(function(){T(),(n=k(S(null,o))).skipMap=a.skipMap,n.init(e,t,i,{enabled:!0}),R()}),s)}return a=a||{},mixin(s,{isBrowser:isBrowser,toUrl:function(e){var t,i=e.lastIndexOf(\".\"),r=e.split(\"/\")[0];return-1!==i&&(!(\".\"===r||\"..\"===r)||1<i)&&(t=e.substring(i,e.length),e=e.substring(0,i)),l.nameToUrl(q(e,o&&o.id,!0),t,!0)},defined:function(e){return hasProp(m,S(e,o,!1,!0).id)},specified:function(e){return e=S(e,o,!1,!0).id,hasProp(m,e)||hasProp(p,e)}}),o||(s.undef=function(i){j();var e=S(i,o,!0),t=getOwn(p,i);t.undefed=!0,E(i),delete m[i],delete n[e.url],delete r[i],eachReverse(h,function(e,t){e[0]===i&&h.splice(t,1)}),delete l.defQueueMap[i],t&&(t.events.defined&&(r[i]=t.events),P(i))}),s},enable:function(e){getOwn(p,e.id)&&k(e).enable()},completeLoad:function(e){var t,i,r,n=getOwn(g.shim,e)||{},o=n.exports;for(j();h.length;){if(null===(i=h.shift())[0]){if(i[0]=e,t)break;t=!0}else i[0]===e&&(t=!0);a(i)}if(l.defQueueMap={},r=getOwn(p,e),!t&&!hasProp(m,e)&&r&&!r.inited){if(!(!g.enforceDefine||o&&getGlobal(o)))return w(e)?void 0:O(makeError(\"nodefine\",\"No define call for \"+e,null,[e]));a([e,n.deps||[],n.exportsFn])}R()},nameToUrl:function(e,t,i){var r,n,o,a,s,u,c=getOwn(g.pkgs,e);if(c&&(e=c),u=getOwn(v,e))return l.nameToUrl(u,t,i);if(req.jsExtRegExp.test(e))a=e+(t||\"\");else{for(r=g.paths,o=(n=e.split(\"/\")).length;0<o;o-=1)if(s=getOwn(r,n.slice(0,o).join(\"/\"))){isArray(s)&&(s=s[0]),n.splice(0,o,s);break}a=n.join(\"/\"),a=(\"/\"===(a+=t||(/^data\\:|^blob\\:|\\?/.test(a)||i?\"\":\".js\")).charAt(0)||a.match(/^[\\w\\+\\.\\-]+:/)?\"\":g.baseUrl)+a}return g.urlArgs&&!/^blob\\:/.test(a)?a+g.urlArgs(e,a):a},load:function(e,t){req.load(l,e,t)},execCb:function(e,t,i,r){return t.apply(r,i)},onScriptLoad:function(e){if(\"load\"===e.type||readyRegExp.test((e.currentTarget||e.srcElement).readyState)){interactiveScript=null;var t=s(e);l.completeLoad(t.id)}},onScriptError:function(e){var i=s(e);if(!w(i.id)){var r=[];return eachProp(p,function(e,t){0!==t.indexOf(\"_@r\")&&each(e.depMaps,function(e){if(e.id===i.id)return r.push(t),!0})}),O(makeError(\"scripterror\",'Script error for \"'+i.id+(r.length?'\", needed by: '+r.join(\", \"):'\"'),e,[i.id]))}}}).require=l.makeRequire(),l}function getInteractiveScript(){return interactiveScript&&\"interactive\"===interactiveScript.readyState||eachReverse(scripts(),function(e){if(\"interactive\"===e.readyState)return interactiveScript=e}),interactiveScript}}(this,\"undefined\"==typeof setTimeout?void 0:setTimeout);\n",
       "\n",
       "    }\n",
       "    // Project sites:    https://visjs.org\n",
       "//                   https://visjs.github.io/vis-network/docs/network\n",
       "//                   https://github.com/visjs/vis-network\n",
       "// Code source:      https://unpkg.com/vis-network@9.1.0/dist/vis-network.min.js - accessed on 19.11.2021\n",
       "// Original license: Apache 2.0 (and MIT because of dual licensing)\n",
       "// Code changes:     Commented out outermost functions\n",
       "//                   Wrapped all into a require define function\n",
       "\n",
       "//                   Replaced two \"NEL\" (=unescaped newline, Unicode U+0085, which can be entered\n",
       "//                   with Ctrl+Shift+U followed be the 4 digits and Enter) symbols by \"\\n\" to\n",
       "//                   prevent browser error when using sphinx docs in combination with Jupyter\n",
       "//                   notebooks and nbsphinx. This might cause unexpected behavior in other cases.\n",
       "\n",
       "if(!require.defined(\"gravis-vis-network\")){\n",
       "  define(\"gravis-vis-network\", [\"exports\"],\n",
       "\n",
       "  /**\n",
       "   * vis-network\n",
       "   * https://visjs.github.io/vis-network/\n",
       "   *\n",
       "   * A dynamic, browser-based visualization library.\n",
       "   *\n",
       "   * @version 9.1.0\n",
       "   * @date    2021-08-29T08:47:25.454Z\n",
       "   *\n",
       "   * @copyright (c) 2011-2017 Almende B.V, http://almende.com\n",
       "   * @copyright (c) 2017-2019 visjs contributors, https://github.com/visjs\n",
       "   *\n",
       "   * @license\n",
       "   * vis.js is dual licensed under both\n",
       "   *\n",
       "   *   1. The Apache 2.0 License\n",
       "   *      http://www.apache.org/licenses/LICENSE-2.0\n",
       "   *\n",
       "   *   and\n",
       "   *\n",
       "   *   2. The MIT License\n",
       "   *      http://opensource.org/licenses/MIT\n",
       "   *\n",
       "   * vis.js may be distributed under either license.\n",
       "   */\n",
       "  // !function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?e(exports):\n",
       "  // \"function\"==typeof define&&define.amd?define([\"exports\"],e):e((t=\"undefined\"!=typeof globalThis?globalThis:t||self).vis=t.vis||{})}(this,(\n",
       "  function(t){\"use strict\";var e=\"undefined\"!=typeof globalThis?globalThis:\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:{};function i(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,\"default\")?t.default:t}function n(t,e){return t(e={exports:{}},e.exports),e.exports}var o,r,s=function(t){return t&&t.Math==Math&&t},a=s(\"object\"==typeof globalThis&&globalThis)||s(\"object\"==typeof window&&window)||s(\"object\"==typeof self&&self)||s(\"object\"==typeof e&&e)||function(){return this}()||Function(\"return this\")(),h=function(t){try{return!!t()}catch(t){return!0}},l=!h((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]})),d={}.propertyIsEnumerable,c=Object.getOwnPropertyDescriptor,u={f:c&&!d.call({1:2},1)?function(t){var e=c(this,t);return!!e&&e.enumerable}:d},f=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}},p={}.toString,v=function(t){return p.call(t).slice(8,-1)},g=\"\".split,y=h((function(){return!Object(\"z\").propertyIsEnumerable(0)}))?function(t){return\"String\"==v(t)?g.call(t,\"\"):Object(t)}:Object,m=function(t){if(null==t)throw TypeError(\"Can't call method on \"+t);return t},b=function(t){return y(m(t))},w=function(t){return\"object\"==typeof t?null!==t:\"function\"==typeof t},k={},_=function(t){return\"function\"==typeof t?t:void 0},x=function(t,e){return arguments.length<2?_(k[t])||_(a[t]):k[t]&&k[t][e]||a[t]&&a[t][e]},E=x(\"navigator\",\"userAgent\")||\"\",O=a.process,C=a.Deno,S=O&&O.versions||C&&C.version,T=S&&S.v8;T?r=(o=T.split(\".\"))[0]<4?1:o[0]+o[1]:E&&(!(o=E.match(/Edge\\/(\\d+)/))||o[1]>=74)&&(o=E.match(/Chrome\\/(\\d+)/))&&(r=o[1]);var M=r&&+r,P=!!Object.getOwnPropertySymbols&&!h((function(){var t=Symbol();return!String(t)||!(Object(t)instanceof Symbol)||!Symbol.sham&&M&&M<41})),D=P&&!Symbol.sham&&\"symbol\"==typeof Symbol.iterator,I=D?function(t){return\"symbol\"==typeof t}:function(t){var e=x(\"Symbol\");return\"function\"==typeof e&&Object(t)instanceof e},B=\"__core-js_shared__\",z=a[B]||function(t,e){try{Object.defineProperty(a,t,{value:e,configurable:!0,writable:!0})}catch(i){a[t]=e}return e}(B,{}),N=n((function(t){(t.exports=function(t,e){return z[t]||(z[t]=void 0!==e?e:{})})(\"versions\",[]).push({version:\"3.16.1\",mode:\"pure\",copyright:\"© 2021 Denis Pushkarev (zloirock.ru)\"})})),A=function(t){return Object(m(t))},F={}.hasOwnProperty,j=Object.hasOwn||function(t,e){return F.call(A(t),e)},R=0,L=Math.random(),H=function(t){return\"Symbol(\"+String(void 0===t?\"\":t)+\")_\"+(++R+L).toString(36)},W=N(\"wks\"),q=a.Symbol,V=D?q:q&&q.withoutSetter||H,U=function(t){return j(W,t)&&(P||\"string\"==typeof W[t])||(P&&j(q,t)?W[t]=q[t]:W[t]=V(\"Symbol.\"+t)),W[t]},Y=U(\"toPrimitive\"),X=function(t,e){if(!w(t)||I(t))return t;var i,n=t[Y];if(void 0!==n){if(void 0===e&&(e=\"default\"),i=n.call(t,e),!w(i)||I(i))return i;throw TypeError(\"Can't convert object to primitive value\")}return void 0===e&&(e=\"number\"),function(t,e){var i,n;if(\"string\"===e&&\"function\"==typeof(i=t.toString)&&!w(n=i.call(t)))return n;if(\"function\"==typeof(i=t.valueOf)&&!w(n=i.call(t)))return n;if(\"string\"!==e&&\"function\"==typeof(i=t.toString)&&!w(n=i.call(t)))return n;throw TypeError(\"Can't convert object to primitive value\")}(t,e)},G=function(t){var e=X(t,\"string\");return I(e)?e:String(e)},K=a.document,$=w(K)&&w(K.createElement),Z=function(t){return $?K.createElement(t):{}},Q=!l&&!h((function(){return 7!=Object.defineProperty(Z(\"div\"),\"a\",{get:function(){return 7}}).a})),J=Object.getOwnPropertyDescriptor,tt={f:l?J:function(t,e){if(t=b(t),e=G(e),Q)try{return J(t,e)}catch(t){}if(j(t,e))return f(!u.f.call(t,e),t[e])}},et=/#|\\.prototype\\./,it=function(t,e){var i=ot[nt(t)];return i==st||i!=rt&&(\"function\"==typeof e?h(e):!!e)},nt=it.normalize=function(t){return String(t).replace(et,\".\").toLowerCase()},ot=it.data={},rt=it.NATIVE=\"N\",st=it.POLYFILL=\"P\",at=it,ht=function(t){if(\"function\"!=typeof t)throw TypeError(String(t)+\" is not a function\");return t},lt=function(t,e,i){if(ht(t),void 0===e)return t;switch(i){case 0:return function(){return t.call(e)};case 1:return function(i){return t.call(e,i)};case 2:return function(i,n){return t.call(e,i,n)};case 3:return function(i,n,o){return t.call(e,i,n,o)}}return function(){return t.apply(e,arguments)}},dt=function(t){if(!w(t))throw TypeError(String(t)+\" is not an object\");return t},ct=Object.defineProperty,ut={f:l?ct:function(t,e,i){if(dt(t),e=G(e),dt(i),Q)try{return ct(t,e,i)}catch(t){}if(\"get\"in i||\"set\"in i)throw TypeError(\"Accessors not supported\");return\"value\"in i&&(t[e]=i.value),t}},ft=l?function(t,e,i){return ut.f(t,e,f(1,i))}:function(t,e,i){return t[e]=i,t},pt=tt.f,vt=function(t){var e=function(e,i,n){if(this instanceof t){switch(arguments.length){case 0:return new t;case 1:return new t(e);case 2:return new t(e,i)}return new t(e,i,n)}return t.apply(this,arguments)};return e.prototype=t.prototype,e},gt=function(t,e){var i,n,o,r,s,h,l,d,c=t.target,u=t.global,f=t.stat,p=t.proto,v=u?a:f?a[c]:(a[c]||{}).prototype,g=u?k:k[c]||(k[c]={}),y=g.prototype;for(o in e)i=!at(u?o:c+(f?\".\":\"#\")+o,t.forced)&&v&&j(v,o),s=g[o],i&&(h=t.noTargetGet?(d=pt(v,o))&&d.value:v[o]),r=i&&h?h:e[o],i&&typeof s==typeof r||(l=t.bind&&i?lt(r,a):t.wrap&&i?vt(r):p&&\"function\"==typeof r?lt(Function.call,r):r,(t.sham||r&&r.sham||s&&s.sham)&&ft(l,\"sham\",!0),g[o]=l,p&&(j(k,n=c+\"Prototype\")||ft(k,n,{}),k[n][o]=r,t.real&&y&&!y[o]&&ft(y,o,r)))},yt=Math.ceil,mt=Math.floor,bt=function(t){return isNaN(t=+t)?0:(t>0?mt:yt)(t)},wt=Math.min,kt=function(t){return t>0?wt(bt(t),9007199254740991):0},_t=Math.max,xt=Math.min,Et=function(t,e){var i=bt(t);return i<0?_t(i+e,0):xt(i,e)},Ot=function(t){return function(e,i,n){var o,r=b(e),s=kt(r.length),a=Et(n,s);if(t&&i!=i){for(;s>a;)if((o=r[a++])!=o)return!0}else for(;s>a;a++)if((t||a in r)&&r[a]===i)return t||a||0;return!t&&-1}},Ct={includes:Ot(!0),indexOf:Ot(!1)},St={},Tt=Ct.indexOf,Mt=function(t,e){var i,n=b(t),o=0,r=[];for(i in n)!j(St,i)&&j(n,i)&&r.push(i);for(;e.length>o;)j(n,i=e[o++])&&(~Tt(r,i)||r.push(i));return r},Pt=[\"constructor\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"toLocaleString\",\"toString\",\"valueOf\"],Dt=Object.keys||function(t){return Mt(t,Pt)},It={f:Object.getOwnPropertySymbols},Bt=Object.assign,zt=Object.defineProperty,Nt=!Bt||h((function(){if(l&&1!==Bt({b:1},Bt(zt({},\"a\",{enumerable:!0,get:function(){zt(this,\"b\",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var t={},e={},i=Symbol(),n=\"abcdefghijklmnopqrst\";return t[i]=7,n.split(\"\").forEach((function(t){e[t]=t})),7!=Bt({},t)[i]||Dt(Bt({},e)).join(\"\")!=n}))?function(t,e){for(var i=A(t),n=arguments.length,o=1,r=It.f,s=u.f;n>o;)for(var a,h=y(arguments[o++]),d=r?Dt(h).concat(r(h)):Dt(h),c=d.length,f=0;c>f;)a=d[f++],l&&!s.call(h,a)||(i[a]=h[a]);return i}:Bt;gt({target:\"Object\",stat:!0,forced:Object.assign!==Nt},{assign:Nt});var At=k.Object.assign,Ft=[].slice,jt={},Rt=function(t,e,i){if(!(e in jt)){for(var n=[],o=0;o<e;o++)n[o]=\"a[\"+o+\"]\";jt[e]=Function(\"C,a\",\"return new C(\"+n.join(\",\")+\")\")}return jt[e](t,i)},Lt=Function.bind||function(t){var e=ht(this),i=Ft.call(arguments,1),n=function(){var o=i.concat(Ft.call(arguments));return this instanceof n?Rt(e,o.length,o):e.apply(t,o)};return w(e.prototype)&&(n.prototype=e.prototype),n};gt({target:\"Function\",proto:!0},{bind:Lt});var Ht=function(t){return k[t+\"Prototype\"]},Wt=Ht(\"Function\").bind,qt=Function.prototype,Vt=function(t){var e=t.bind;return t===qt||t instanceof Function&&e===qt.bind?Wt:e};function Ut(t,e,i,n){t.beginPath(),t.arc(e,i,n,0,2*Math.PI,!1),t.closePath()}function Yt(t,e,i,n,o,r){var s=Math.PI/180;n-2*r<0&&(r=n/2),o-2*r<0&&(r=o/2),t.beginPath(),t.moveTo(e+r,i),t.lineTo(e+n-r,i),t.arc(e+n-r,i+r,r,270*s,360*s,!1),t.lineTo(e+n,i+o-r),t.arc(e+n-r,i+o-r,r,0,90*s,!1),t.lineTo(e+r,i+o),t.arc(e+r,i+o-r,r,90*s,180*s,!1),t.lineTo(e,i+r),t.arc(e+r,i+r,r,180*s,270*s,!1),t.closePath()}function Xt(t,e,i,n,o){var r=.5522848,s=n/2*r,a=o/2*r,h=e+n,l=i+o,d=e+n/2,c=i+o/2;t.beginPath(),t.moveTo(e,c),t.bezierCurveTo(e,c-a,d-s,i,d,i),t.bezierCurveTo(d+s,i,h,c-a,h,c),t.bezierCurveTo(h,c+a,d+s,l,d,l),t.bezierCurveTo(d-s,l,e,c+a,e,c),t.closePath()}function Gt(t,e,i,n,o){var r=o*(1/3),s=.5522848,a=n/2*s,h=r/2*s,l=e+n,d=i+r,c=e+n/2,u=i+r/2,f=i+(o-r/2),p=i+o;t.beginPath(),t.moveTo(l,u),t.bezierCurveTo(l,u+h,c+a,d,c,d),t.bezierCurveTo(c-a,d,e,u+h,e,u),t.bezierCurveTo(e,u-h,c-a,i,c,i),t.bezierCurveTo(c+a,i,l,u-h,l,u),t.lineTo(l,f),t.bezierCurveTo(l,f+h,c+a,p,c,p),t.bezierCurveTo(c-a,p,e,f+h,e,f),t.lineTo(e,u)}function Kt(t,e,i,n,o,r){t.beginPath(),t.moveTo(e,i);for(var s=r.length,a=n-e,h=o-i,l=h/a,d=Math.sqrt(a*a+h*h),c=0,u=!0,f=0,p=+r[0];d>=.1;)(p=+r[c++%s])>d&&(p=d),f=Math.sqrt(p*p/(1+l*l)),e+=f=a<0?-f:f,i+=l*f,!0===u?t.lineTo(e,i):t.moveTo(e,i),d-=p,u=!u}var $t={circle:Ut,dashedLine:Kt,database:Gt,diamond:function(t,e,i,n){t.beginPath(),t.lineTo(e,i+n),t.lineTo(e+n,i),t.lineTo(e,i-n),t.lineTo(e-n,i),t.closePath()},ellipse:Xt,ellipse_vis:Xt,hexagon:function(t,e,i,n){t.beginPath();var o=2*Math.PI/6;t.moveTo(e+n,i);for(var r=1;r<6;r++)t.lineTo(e+n*Math.cos(o*r),i+n*Math.sin(o*r));t.closePath()},roundRect:Yt,square:function(t,e,i,n){t.beginPath(),t.rect(e-n,i-n,2*n,2*n),t.closePath()},star:function(t,e,i,n){t.beginPath(),i+=.1*(n*=.82);for(var o=0;o<10;o++){var r=o%2==0?1.3*n:.5*n;t.lineTo(e+r*Math.sin(2*o*Math.PI/10),i-r*Math.cos(2*o*Math.PI/10))}t.closePath()},triangle:function(t,e,i,n){t.beginPath(),i+=.275*(n*=1.15);var o=2*n,r=o/2,s=Math.sqrt(3)/6*o,a=Math.sqrt(o*o-r*r);t.moveTo(e,i-(a-s)),t.lineTo(e+r,i+s),t.lineTo(e-r,i+s),t.lineTo(e,i-(a-s)),t.closePath()},triangleDown:function(t,e,i,n){t.beginPath(),i-=.275*(n*=1.15);var o=2*n,r=o/2,s=Math.sqrt(3)/6*o,a=Math.sqrt(o*o-r*r);t.moveTo(e,i+(a-s)),t.lineTo(e+r,i-s),t.lineTo(e-r,i-s),t.lineTo(e,i+(a-s)),t.closePath()}};var Zt=n((function(t){function e(t){if(t)return function(t){for(var i in e.prototype)t[i]=e.prototype[i];return t}(t)}t.exports=e,e.prototype.on=e.prototype.addEventListener=function(t,e){return this._callbacks=this._callbacks||{},(this._callbacks[\"$\"+t]=this._callbacks[\"$\"+t]||[]).push(e),this},e.prototype.once=function(t,e){function i(){this.off(t,i),e.apply(this,arguments)}return i.fn=e,this.on(t,i),this},e.prototype.off=e.prototype.removeListener=e.prototype.removeAllListeners=e.prototype.removeEventListener=function(t,e){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var i,n=this._callbacks[\"$\"+t];if(!n)return this;if(1==arguments.length)return delete this._callbacks[\"$\"+t],this;for(var o=0;o<n.length;o++)if((i=n[o])===e||i.fn===e){n.splice(o,1);break}return 0===n.length&&delete this._callbacks[\"$\"+t],this},e.prototype.emit=function(t){this._callbacks=this._callbacks||{};for(var e=new Array(arguments.length-1),i=this._callbacks[\"$\"+t],n=1;n<arguments.length;n++)e[n-1]=arguments[n];if(i){n=0;for(var o=(i=i.slice(0)).length;n<o;++n)i[n].apply(this,e)}return this},e.prototype.listeners=function(t){return this._callbacks=this._callbacks||{},this._callbacks[\"$\"+t]||[]},e.prototype.hasListeners=function(t){return!!this.listeners(t).length}})),Qt=function(t){if(I(t))throw TypeError(\"Cannot convert a Symbol value to a string\");return String(t)},Jt=function(t){return function(e,i){var n,o,r=Qt(m(e)),s=bt(i),a=r.length;return s<0||s>=a?t?\"\":void 0:(n=r.charCodeAt(s))<55296||n>56319||s+1===a||(o=r.charCodeAt(s+1))<56320||o>57343?t?r.charAt(s):n:t?r.slice(s,s+2):o-56320+(n-55296<<10)+65536}},te={codeAt:Jt(!1),charAt:Jt(!0)},ee=Function.toString;\"function\"!=typeof z.inspectSource&&(z.inspectSource=function(t){return ee.call(t)});var ie,ne,oe,re=z.inspectSource,se=a.WeakMap,ae=\"function\"==typeof se&&/native code/.test(re(se)),he=N(\"keys\"),le=function(t){return he[t]||(he[t]=H(t))},de=\"Object already initialized\",ce=a.WeakMap;if(ae||z.state){var ue=z.state||(z.state=new ce),fe=ue.get,pe=ue.has,ve=ue.set;ie=function(t,e){if(pe.call(ue,t))throw new TypeError(de);return e.facade=t,ve.call(ue,t,e),e},ne=function(t){return fe.call(ue,t)||{}},oe=function(t){return pe.call(ue,t)}}else{var ge=le(\"state\");St[ge]=!0,ie=function(t,e){if(j(t,ge))throw new TypeError(de);return e.facade=t,ft(t,ge,e),e},ne=function(t){return j(t,ge)?t[ge]:{}},oe=function(t){return j(t,ge)}}var ye,me,be,we={set:ie,get:ne,has:oe,enforce:function(t){return oe(t)?ne(t):ie(t,{})},getterFor:function(t){return function(e){var i;if(!w(e)||(i=ne(e)).type!==t)throw TypeError(\"Incompatible receiver, \"+t+\" required\");return i}}},ke=!h((function(){function t(){}return t.prototype.constructor=null,Object.getPrototypeOf(new t)!==t.prototype})),_e=le(\"IE_PROTO\"),xe=Object.prototype,Ee=ke?Object.getPrototypeOf:function(t){return t=A(t),j(t,_e)?t[_e]:\"function\"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?xe:null},Oe=U(\"iterator\"),Ce=!1;[].keys&&(\"next\"in(be=[].keys())?(me=Ee(Ee(be)))!==Object.prototype&&(ye=me):Ce=!0);var Se=null==ye||h((function(){var t={};return ye[Oe].call(t)!==t}));Se&&(ye={}),Se&&!j(ye,Oe)&&ft(ye,Oe,(function(){return this}));var Te,Me={IteratorPrototype:ye,BUGGY_SAFARI_ITERATORS:Ce},Pe=l?Object.defineProperties:function(t,e){dt(t);for(var i,n=Dt(e),o=n.length,r=0;o>r;)ut.f(t,i=n[r++],e[i]);return t},De=x(\"document\",\"documentElement\"),Ie=le(\"IE_PROTO\"),Be=function(){},ze=function(t){return\"<script>\"+t+\"</\"+\"script>\"},Ne=function(t){t.write(ze(\"\")),t.close();var e=t.parentWindow.Object;return t=null,e},Ae=function(){try{Te=new ActiveXObject(\"htmlfile\")}catch(t){}Ae=document.domain&&Te?Ne(Te):function(){var t,e=Z(\"iframe\");if(e.style)return e.style.display=\"none\",De.appendChild(e),e.src=String(\"javascript:\"),(t=e.contentWindow.document).open(),t.write(ze(\"document.F=Object\")),t.close(),t.F}()||Ne(Te);for(var t=Pt.length;t--;)delete Ae.prototype[Pt[t]];return Ae()};St[Ie]=!0;var Fe=Object.create||function(t,e){var i;return null!==t?(Be.prototype=dt(t),i=new Be,Be.prototype=null,i[Ie]=t):i=Ae(),void 0===e?i:Pe(i,e)},je={};je[U(\"toStringTag\")]=\"z\";var Re=\"[object z]\"===String(je),Le=U(\"toStringTag\"),He=\"Arguments\"==v(function(){return arguments}()),We=Re?v:function(t){var e,i,n;return void 0===t?\"Undefined\":null===t?\"Null\":\"string\"==typeof(i=function(t,e){try{return t[e]}catch(t){}}(e=Object(t),Le))?i:He?v(e):\"Object\"==(n=v(e))&&\"function\"==typeof e.callee?\"Arguments\":n},qe=Re?{}.toString:function(){return\"[object \"+We(this)+\"]\"},Ve=ut.f,Ue=U(\"toStringTag\"),Ye=function(t,e,i,n){if(t){var o=i?t:t.prototype;j(o,Ue)||Ve(o,Ue,{configurable:!0,value:e}),n&&!Re&&ft(o,\"toString\",qe)}},Xe={},Ge=Me.IteratorPrototype,Ke=function(){return this},$e=Object.setPrototypeOf||(\"__proto__\"in{}?function(){var t,e=!1,i={};try{(t=Object.getOwnPropertyDescriptor(Object.prototype,\"__proto__\").set).call(i,[]),e=i instanceof Array}catch(t){}return function(i,n){return dt(i),function(t){if(!w(t)&&null!==t)throw TypeError(\"Can't set \"+String(t)+\" as a prototype\")}(n),e?t.call(i,n):i.__proto__=n,i}}():void 0),Ze=function(t,e,i,n){n&&n.enumerable?t[e]=i:ft(t,e,i)},Qe=Me.IteratorPrototype,Je=Me.BUGGY_SAFARI_ITERATORS,ti=U(\"iterator\"),ei=\"keys\",ii=\"values\",ni=\"entries\",oi=function(){return this},ri=function(t,e,i,n,o,r,s){!function(t,e,i){var n=e+\" Iterator\";t.prototype=Fe(Ge,{next:f(1,i)}),Ye(t,n,!1,!0),Xe[n]=Ke}(i,e,n);var a,h,l,d=function(t){if(t===o&&g)return g;if(!Je&&t in p)return p[t];switch(t){case ei:case ii:case ni:return function(){return new i(this,t)}}return function(){return new i(this)}},c=e+\" Iterator\",u=!1,p=t.prototype,v=p[ti]||p[\"@@iterator\"]||o&&p[o],g=!Je&&v||d(o),y=\"Array\"==e&&p.entries||v;if(y&&(a=Ee(y.call(new t)),Qe!==Object.prototype&&a.next&&(Ye(a,c,!0,!0),Xe[c]=oi)),o==ii&&v&&v.name!==ii&&(u=!0,g=function(){return v.call(this)}),s&&p[ti]!==g&&ft(p,ti,g),Xe[e]=g,o)if(h={values:d(ii),keys:r?g:d(ei),entries:d(ni)},s)for(l in h)(Je||u||!(l in p))&&Ze(p,l,h[l]);else gt({target:e,proto:!0,forced:Je||u},h);return h},si=te.charAt,ai=\"String Iterator\",hi=we.set,li=we.getterFor(ai);ri(String,\"String\",(function(t){hi(this,{type:ai,string:Qt(t),index:0})}),(function(){var t,e=li(this),i=e.string,n=e.index;return n>=i.length?{value:void 0,done:!0}:(t=si(i,n),e.index+=t.length,{value:t,done:!1})}));var di=function(t){var e=t.return;if(void 0!==e)return dt(e.call(t)).value},ci=function(t,e,i,n){try{return n?e(dt(i)[0],i[1]):e(i)}catch(e){throw di(t),e}},ui=U(\"iterator\"),fi=Array.prototype,pi=function(t){return void 0!==t&&(Xe.Array===t||fi[ui]===t)},vi=function(t,e,i){var n=G(e);n in t?ut.f(t,n,f(0,i)):t[n]=i},gi=U(\"iterator\"),yi=function(t){if(null!=t)return t[gi]||t[\"@@iterator\"]||Xe[We(t)]},mi=U(\"iterator\"),bi=!1;try{var wi=0,ki={next:function(){return{done:!!wi++}},return:function(){bi=!0}};ki[mi]=function(){return this},Array.from(ki,(function(){throw 2}))}catch(t){}var _i=!function(t,e){if(!e&&!bi)return!1;var i=!1;try{var n={};n[mi]=function(){return{next:function(){return{done:i=!0}}}},t(n)}catch(t){}return i}((function(t){Array.from(t)}));gt({target:\"Array\",stat:!0,forced:_i},{from:function(t){var e,i,n,o,r,s,a=A(t),h=\"function\"==typeof this?this:Array,l=arguments.length,d=l>1?arguments[1]:void 0,c=void 0!==d,u=yi(a),f=0;if(c&&(d=lt(d,l>2?arguments[2]:void 0,2)),null==u||h==Array&&pi(u))for(i=new h(e=kt(a.length));e>f;f++)s=c?d(a[f],f):a[f],vi(i,f,s);else for(r=(o=u.call(a)).next,i=new h;!(n=r.call(o)).done;f++)s=c?ci(o,d,[n.value,f],!0):n.value,vi(i,f,s);return i.length=f,i}});var xi=k.Array.from,Ei=xi,Oi=\"Array Iterator\",Ci=we.set,Si=we.getterFor(Oi);ri(Array,\"Array\",(function(t,e){Ci(this,{type:Oi,target:b(t),index:0,kind:e})}),(function(){var t=Si(this),e=t.target,i=t.kind,n=t.index++;return!e||n>=e.length?(t.target=void 0,{value:void 0,done:!0}):\"keys\"==i?{value:n,done:!1}:\"values\"==i?{value:e[n],done:!1}:{value:[n,e[n]],done:!1}}),\"values\"),Xe.Arguments=Xe.Array;var Ti=yi,Mi=U(\"toStringTag\");for(var Pi in{CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}){var Di=a[Pi],Ii=Di&&Di.prototype;Ii&&We(Ii)!==Mi&&ft(Ii,Mi,Pi),Xe[Pi]=Xe.Array}var Bi=Ti,zi=Array.isArray||function(t){return\"Array\"==v(t)},Ni=Pt.concat(\"length\",\"prototype\"),Ai={f:Object.getOwnPropertyNames||function(t){return Mt(t,Ni)}},Fi=Ai.f,ji={}.toString,Ri=\"object\"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],Li={f:function(t){return Ri&&\"[object Window]\"==ji.call(t)?function(t){try{return Fi(t)}catch(t){return Ri.slice()}}(t):Fi(b(t))}},Hi={f:U},Wi=ut.f,qi=function(t){var e=k.Symbol||(k.Symbol={});j(e,t)||Wi(e,t,{value:Hi.f(t)})},Vi=U(\"species\"),Ui=function(t,e){return new(function(t){var e;return zi(t)&&(\"function\"!=typeof(e=t.constructor)||e!==Array&&!zi(e.prototype)?w(e)&&null===(e=e[Vi])&&(e=void 0):e=void 0),void 0===e?Array:e}(t))(0===e?0:e)},Yi=[].push,Xi=function(t){var e=1==t,i=2==t,n=3==t,o=4==t,r=6==t,s=7==t,a=5==t||r;return function(h,l,d,c){for(var u,f,p=A(h),v=y(p),g=lt(l,d,3),m=kt(v.length),b=0,w=c||Ui,k=e?w(h,m):i||s?w(h,0):void 0;m>b;b++)if((a||b in v)&&(f=g(u=v[b],b,p),t))if(e)k[b]=f;else if(f)switch(t){case 3:return!0;case 5:return u;case 6:return b;case 2:Yi.call(k,u)}else switch(t){case 4:return!1;case 7:Yi.call(k,u)}return r?-1:n||o?o:k}},Gi={forEach:Xi(0),map:Xi(1),filter:Xi(2),some:Xi(3),every:Xi(4),find:Xi(5),findIndex:Xi(6),filterReject:Xi(7)},Ki=Gi.forEach,$i=le(\"hidden\"),Zi=\"Symbol\",Qi=U(\"toPrimitive\"),Ji=we.set,tn=we.getterFor(Zi),en=Object.prototype,nn=a.Symbol,on=x(\"JSON\",\"stringify\"),rn=tt.f,sn=ut.f,an=Li.f,hn=u.f,ln=N(\"symbols\"),dn=N(\"op-symbols\"),cn=N(\"string-to-symbol-registry\"),un=N(\"symbol-to-string-registry\"),fn=N(\"wks\"),pn=a.QObject,vn=!pn||!pn.prototype||!pn.prototype.findChild,gn=l&&h((function(){return 7!=Fe(sn({},\"a\",{get:function(){return sn(this,\"a\",{value:7}).a}})).a}))?function(t,e,i){var n=rn(en,e);n&&delete en[e],sn(t,e,i),n&&t!==en&&sn(en,e,n)}:sn,yn=function(t,e){var i=ln[t]=Fe(nn.prototype);return Ji(i,{type:Zi,tag:t,description:e}),l||(i.description=e),i},mn=function(t,e,i){t===en&&mn(dn,e,i),dt(t);var n=G(e);return dt(i),j(ln,n)?(i.enumerable?(j(t,$i)&&t[$i][n]&&(t[$i][n]=!1),i=Fe(i,{enumerable:f(0,!1)})):(j(t,$i)||sn(t,$i,f(1,{})),t[$i][n]=!0),gn(t,n,i)):sn(t,n,i)},bn=function(t,e){dt(t);var i=b(e),n=Dt(i).concat(xn(i));return Ki(n,(function(e){l&&!wn.call(i,e)||mn(t,e,i[e])})),t},wn=function(t){var e=G(t),i=hn.call(this,e);return!(this===en&&j(ln,e)&&!j(dn,e))&&(!(i||!j(this,e)||!j(ln,e)||j(this,$i)&&this[$i][e])||i)},kn=function(t,e){var i=b(t),n=G(e);if(i!==en||!j(ln,n)||j(dn,n)){var o=rn(i,n);return!o||!j(ln,n)||j(i,$i)&&i[$i][n]||(o.enumerable=!0),o}},_n=function(t){var e=an(b(t)),i=[];return Ki(e,(function(t){j(ln,t)||j(St,t)||i.push(t)})),i},xn=function(t){var e=t===en,i=an(e?dn:b(t)),n=[];return Ki(i,(function(t){!j(ln,t)||e&&!j(en,t)||n.push(ln[t])})),n};if(P||(Ze((nn=function(){if(this instanceof nn)throw TypeError(\"Symbol is not a constructor\");var t=arguments.length&&void 0!==arguments[0]?Qt(arguments[0]):void 0,e=H(t),i=function(t){this===en&&i.call(dn,t),j(this,$i)&&j(this[$i],e)&&(this[$i][e]=!1),gn(this,e,f(1,t))};return l&&vn&&gn(en,e,{configurable:!0,set:i}),yn(e,t)}).prototype,\"toString\",(function(){return tn(this).tag})),Ze(nn,\"withoutSetter\",(function(t){return yn(H(t),t)})),u.f=wn,ut.f=mn,tt.f=kn,Ai.f=Li.f=_n,It.f=xn,Hi.f=function(t){return yn(U(t),t)},l&&sn(nn.prototype,\"description\",{configurable:!0,get:function(){return tn(this).description}})),gt({global:!0,wrap:!0,forced:!P,sham:!P},{Symbol:nn}),Ki(Dt(fn),(function(t){qi(t)})),gt({target:Zi,stat:!0,forced:!P},{for:function(t){var e=Qt(t);if(j(cn,e))return cn[e];var i=nn(e);return cn[e]=i,un[i]=e,i},keyFor:function(t){if(!I(t))throw TypeError(t+\" is not a symbol\");if(j(un,t))return un[t]},useSetter:function(){vn=!0},useSimple:function(){vn=!1}}),gt({target:\"Object\",stat:!0,forced:!P,sham:!l},{create:function(t,e){return void 0===e?Fe(t):bn(Fe(t),e)},defineProperty:mn,defineProperties:bn,getOwnPropertyDescriptor:kn}),gt({target:\"Object\",stat:!0,forced:!P},{getOwnPropertyNames:_n,getOwnPropertySymbols:xn}),gt({target:\"Object\",stat:!0,forced:h((function(){It.f(1)}))},{getOwnPropertySymbols:function(t){return It.f(A(t))}}),on){var En=!P||h((function(){var t=nn();return\"[null]\"!=on([t])||\"{}\"!=on({a:t})||\"{}\"!=on(Object(t))}));gt({target:\"JSON\",stat:!0,forced:En},{stringify:function(t,e,i){for(var n,o=[t],r=1;arguments.length>r;)o.push(arguments[r++]);if(n=e,(w(e)||void 0!==t)&&!I(t))return zi(e)||(e=function(t,e){if(\"function\"==typeof n&&(e=n.call(this,t,e)),!I(e))return e}),o[1]=e,on.apply(null,o)}})}nn.prototype[Qi]||ft(nn.prototype,Qi,nn.prototype.valueOf),Ye(nn,Zi),St[$i]=!0;var On=k.Object.getOwnPropertySymbols,Cn=tt.f,Sn=h((function(){Cn(1)}));gt({target:\"Object\",stat:!0,forced:!l||Sn,sham:!l},{getOwnPropertyDescriptor:function(t,e){return Cn(b(t),e)}});var Tn=n((function(t){var e=k.Object,i=t.exports=function(t,i){return e.getOwnPropertyDescriptor(t,i)};e.getOwnPropertyDescriptor.sham&&(i.sham=!0)})),Mn=Tn,Pn=x(\"Reflect\",\"ownKeys\")||function(t){var e=Ai.f(dt(t)),i=It.f;return i?e.concat(i(t)):e};gt({target:\"Object\",stat:!0,sham:!l},{getOwnPropertyDescriptors:function(t){for(var e,i,n=b(t),o=tt.f,r=Pn(n),s={},a=0;r.length>a;)void 0!==(i=o(n,e=r[a++]))&&vi(s,e,i);return s}});var Dn=k.Object.getOwnPropertyDescriptors;gt({target:\"Object\",stat:!0,forced:!l,sham:!l},{defineProperties:Pe});var In=n((function(t){var e=k.Object,i=t.exports=function(t,i){return e.defineProperties(t,i)};e.defineProperties.sham&&(i.sham=!0)}));gt({target:\"Object\",stat:!0,forced:!l,sham:!l},{defineProperty:ut.f});var Bn=n((function(t){var e=k.Object,i=t.exports=function(t,i,n){return e.defineProperty(t,i,n)};e.defineProperty.sham&&(i.sham=!0)})),zn=Bn,Nn=i(n((function(t){t.exports=function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")},t.exports.default=t.exports,t.exports.__esModule=!0}))),An=Bn,Fn=i(n((function(t){function e(t,e){for(var i=0;i<e.length;i++){var n=e[i];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),An(t,n.key,n)}}t.exports=function(t,i,n){return i&&e(t.prototype,i),n&&e(t,n),t},t.exports.default=t.exports,t.exports.__esModule=!0}))),jn=i(n((function(t){t.exports=function(t,e,i){return e in t?An(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[e]=i,t},t.exports.default=t.exports,t.exports.__esModule=!0})));gt({target:\"Array\",stat:!0},{isArray:zi});var Rn=k.Array.isArray,Ln=Rn,Hn=n((function(t){t.exports=function(t){if(Ln(t))return t},t.exports.default=t.exports,t.exports.__esModule=!0}));i(Hn);var Wn=U(\"species\"),qn=function(t){return M>=51||!h((function(){var e=[];return(e.constructor={})[Wn]=function(){return{foo:1}},1!==e[t](Boolean).foo}))},Vn=U(\"isConcatSpreadable\"),Un=9007199254740991,Yn=\"Maximum allowed index exceeded\",Xn=M>=51||!h((function(){var t=[];return t[Vn]=!1,t.concat()[0]!==t})),Gn=qn(\"concat\"),Kn=function(t){if(!w(t))return!1;var e=t[Vn];return void 0!==e?!!e:zi(t)};gt({target:\"Array\",proto:!0,forced:!Xn||!Gn},{concat:function(t){var e,i,n,o,r,s=A(this),a=Ui(s,0),h=0;for(e=-1,n=arguments.length;e<n;e++)if(Kn(r=-1===e?s:arguments[e])){if(h+(o=kt(r.length))>Un)throw TypeError(Yn);for(i=0;i<o;i++,h++)i in r&&vi(a,h,r[i])}else{if(h>=Un)throw TypeError(Yn);vi(a,h++,r)}return a.length=h,a}}),qi(\"asyncIterator\"),qi(\"hasInstance\"),qi(\"isConcatSpreadable\"),qi(\"iterator\"),qi(\"match\"),qi(\"matchAll\"),qi(\"replace\"),qi(\"search\"),qi(\"species\"),qi(\"split\"),qi(\"toPrimitive\"),qi(\"toStringTag\"),qi(\"unscopables\"),Ye(a.JSON,\"JSON\",!0);var $n=k.Symbol;qi(\"asyncDispose\"),qi(\"dispose\"),qi(\"matcher\"),qi(\"metadata\"),qi(\"observable\"),qi(\"patternMatch\"),qi(\"replaceAll\");var Zn=$n,Qn=n((function(t){t.exports=function(t,e){var i=null==t?null:void 0!==Zn&&Bi(t)||t[\"@@iterator\"];if(null!=i){var n,o,r=[],s=!0,a=!1;try{for(i=i.call(t);!(s=(n=i.next()).done)&&(r.push(n.value),!e||r.length!==e);s=!0);}catch(t){a=!0,o=t}finally{try{s||null==i.return||i.return()}finally{if(a)throw o}}return r}},t.exports.default=t.exports,t.exports.__esModule=!0}));i(Qn);var Jn=qn(\"slice\"),to=U(\"species\"),eo=[].slice,io=Math.max;gt({target:\"Array\",proto:!0,forced:!Jn},{slice:function(t,e){var i,n,o,r=b(this),s=kt(r.length),a=Et(t,s),h=Et(void 0===e?s:e,s);if(zi(r)&&(\"function\"!=typeof(i=r.constructor)||i!==Array&&!zi(i.prototype)?w(i)&&null===(i=i[to])&&(i=void 0):i=void 0,i===Array||void 0===i))return eo.call(r,a,h);for(n=new(void 0===i?Array:i)(io(h-a,0)),o=0;a<h;a++,o++)a in r&&vi(n,o,r[a]);return n.length=o,n}});var no=Ht(\"Array\").slice,oo=Array.prototype,ro=function(t){var e=t.slice;return t===oo||t instanceof Array&&e===oo.slice?no:e},so=ro,ao=xi,ho=n((function(t){t.exports=function(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n},t.exports.default=t.exports,t.exports.__esModule=!0}));i(ho);var lo=n((function(t){t.exports=function(t,e){var i;if(t){if(\"string\"==typeof t)return ho(t,e);var n=so(i=Object.prototype.toString.call(t)).call(i,8,-1);return\"Object\"===n&&t.constructor&&(n=t.constructor.name),\"Map\"===n||\"Set\"===n?ao(t):\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?ho(t,e):void 0}},t.exports.default=t.exports,t.exports.__esModule=!0}));i(lo);var co=n((function(t){t.exports=function(){throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")},t.exports.default=t.exports,t.exports.__esModule=!0}));i(co);var uo=i(n((function(t){t.exports=function(t,e){return Hn(t)||Qn(t,e)||lo(t,e)||co()},t.exports.default=t.exports,t.exports.__esModule=!0}))),fo=Hi.f(\"iterator\"),po=fo,vo=n((function(t){function e(i){return\"function\"==typeof Zn&&\"symbol\"==typeof po?(t.exports=e=function(t){return typeof t},t.exports.default=t.exports,t.exports.__esModule=!0):(t.exports=e=function(t){return t&&\"function\"==typeof Zn&&t.constructor===Zn&&t!==Zn.prototype?\"symbol\":typeof t},t.exports.default=t.exports,t.exports.__esModule=!0),e(i)}t.exports=e,t.exports.default=t.exports,t.exports.__esModule=!0})),go=i(vo),yo=n((function(t){t.exports=function(t){if(Ln(t))return ho(t)},t.exports.default=t.exports,t.exports.__esModule=!0}));i(yo);var mo=n((function(t){t.exports=function(t){if(void 0!==Zn&&null!=Bi(t)||null!=t[\"@@iterator\"])return ao(t)},t.exports.default=t.exports,t.exports.__esModule=!0}));i(mo);var bo=n((function(t){t.exports=function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")},t.exports.default=t.exports,t.exports.__esModule=!0}));i(bo);var wo=i(n((function(t){t.exports=function(t){return yo(t)||mo(t)||lo(t)||bo()},t.exports.default=t.exports,t.exports.__esModule=!0}))),ko=$n,_o=Ht(\"Array\").concat,xo=Array.prototype,Eo=function(t){var e=t.concat;return t===xo||t instanceof Array&&e===xo.concat?_o:e},Oo=ro;gt({target:\"Reflect\",stat:!0},{ownKeys:Pn});var Co=k.Reflect.ownKeys,So=Rn,To=Gi.map,Mo=qn(\"map\");gt({target:\"Array\",proto:!0,forced:!Mo},{map:function(t){return To(this,t,arguments.length>1?arguments[1]:void 0)}});var Po=Ht(\"Array\").map,Do=Array.prototype,Io=function(t){var e=t.map;return t===Do||t instanceof Array&&e===Do.map?Po:e},Bo=h((function(){Dt(1)}));gt({target:\"Object\",stat:!0,forced:Bo},{keys:function(t){return Dt(A(t))}});var zo=k.Object.keys;gt({target:\"Date\",stat:!0},{now:function(){return(new Date).getTime()}});var No=k.Date.now,Ao=function(t,e){var i=[][t];return!!i&&h((function(){i.call(null,e||function(){throw 1},1)}))},Fo=Gi.forEach,jo=Ao(\"forEach\")?[].forEach:function(t){return Fo(this,t,arguments.length>1?arguments[1]:void 0)};gt({target:\"Array\",proto:!0,forced:[].forEach!=jo},{forEach:jo});var Ro=Ht(\"Array\").forEach,Lo=Array.prototype,Ho={DOMTokenList:!0,NodeList:!0},Wo=function(t){var e=t.forEach;return t===Lo||t instanceof Array&&e===Lo.forEach||Ho.hasOwnProperty(We(t))?Ro:e},qo=[].reverse,Vo=[1,2];gt({target:\"Array\",proto:!0,forced:String(Vo)===String(Vo.reverse())},{reverse:function(){return zi(this)&&(this.length=this.length),qo.call(this)}});var Uo=Ht(\"Array\").reverse,Yo=Array.prototype,Xo=function(t){var e=t.reverse;return t===Yo||t instanceof Array&&e===Yo.reverse?Uo:e},Go=qn(\"splice\"),Ko=Math.max,$o=Math.min,Zo=9007199254740991,Qo=\"Maximum allowed length exceeded\";gt({target:\"Array\",proto:!0,forced:!Go},{splice:function(t,e){var i,n,o,r,s,a,h=A(this),l=kt(h.length),d=Et(t,l),c=arguments.length;if(0===c?i=n=0:1===c?(i=0,n=l-d):(i=c-2,n=$o(Ko(bt(e),0),l-d)),l+i-n>Zo)throw TypeError(Qo);for(o=Ui(h,n),r=0;r<n;r++)(s=d+r)in h&&vi(o,r,h[s]);if(o.length=n,i<n){for(r=d;r<l-n;r++)a=r+i,(s=r+n)in h?h[a]=h[s]:delete h[a];for(r=l;r>l-n+i;r--)delete h[r-1]}else if(i>n)for(r=l-n;r>d;r--)a=r+i-1,(s=r+n-1)in h?h[a]=h[s]:delete h[a];for(r=0;r<i;r++)h[r+d]=arguments[r+2];return h.length=l-n+i,o}});var Jo=Ht(\"Array\").splice,tr=Array.prototype,er=function(t){var e=t.splice;return t===tr||t instanceof Array&&e===tr.splice?Jo:e},ir=Ct.includes;gt({target:\"Array\",proto:!0},{includes:function(t){return ir(this,t,arguments.length>1?arguments[1]:void 0)}});var nr=Ht(\"Array\").includes,or=U(\"match\"),rr=function(t){if(function(t){var e;return w(t)&&(void 0!==(e=t[or])?!!e:\"RegExp\"==v(t))}(t))throw TypeError(\"The method doesn't accept regular expressions\");return t},sr=U(\"match\");gt({target:\"String\",proto:!0,forced:!function(t){var e=/./;try{\"/./\"[t](e)}catch(i){try{return e[sr]=!1,\"/./\"[t](e)}catch(t){}}return!1}(\"includes\")},{includes:function(t){return!!~Qt(m(this)).indexOf(Qt(rr(t)),arguments.length>1?arguments[1]:void 0)}});var ar=Ht(\"String\").includes,hr=Array.prototype,lr=String.prototype,dr=function(t){var e=t.includes;return t===hr||t instanceof Array&&e===hr.includes?nr:\"string\"==typeof t||t===lr||t instanceof String&&e===lr.includes?ar:e},cr=h((function(){Ee(1)}));gt({target:\"Object\",stat:!0,forced:cr,sham:!ke},{getPrototypeOf:function(t){return Ee(A(t))}});var ur=k.Object.getPrototypeOf,fr=ur,pr=Gi.filter,vr=qn(\"filter\");gt({target:\"Array\",proto:!0,forced:!vr},{filter:function(t){return pr(this,t,arguments.length>1?arguments[1]:void 0)}});var gr=Ht(\"Array\").filter,yr=Array.prototype,mr=function(t){var e=t.filter;return t===yr||t instanceof Array&&e===yr.filter?gr:e},br=u.f,wr=function(t){return function(e){for(var i,n=b(e),o=Dt(n),r=o.length,s=0,a=[];r>s;)i=o[s++],l&&!br.call(n,i)||a.push(t?[i,n[i]]:n[i]);return a}},kr={entries:wr(!0),values:wr(!1)}.values;gt({target:\"Object\",stat:!0},{values:function(t){return kr(t)}});var _r=k.Object.values,xr=\"\\t\\n\\v\\f\\r                　\\u2028\\u2029\\ufeff\",Er=\"[\"+xr+\"]\",Or=RegExp(\"^\"+Er+Er+\"*\"),Cr=RegExp(Er+Er+\"*$\"),Sr=function(t){return function(e){var i=Qt(m(e));return 1&t&&(i=i.replace(Or,\"\")),2&t&&(i=i.replace(Cr,\"\")),i}},Tr={start:Sr(1),end:Sr(2),trim:Sr(3)},Mr=Tr.trim,Pr=a.parseInt,Dr=/^[+-]?0[Xx]/,Ir=8!==Pr(xr+\"08\")||22!==Pr(xr+\"0x16\")?function(t,e){var i=Mr(Qt(t));return Pr(i,e>>>0||(Dr.test(i)?16:10))}:Pr;gt({global:!0,forced:parseInt!=Ir},{parseInt:Ir});var Br=k.parseInt,zr=Ct.indexOf,Nr=[].indexOf,Ar=!!Nr&&1/[1].indexOf(1,-0)<0,Fr=Ao(\"indexOf\");gt({target:\"Array\",proto:!0,forced:Ar||!Fr},{indexOf:function(t){return Ar?Nr.apply(this,arguments)||0:zr(this,t,arguments.length>1?arguments[1]:void 0)}});var jr,Rr=Ht(\"Array\").indexOf,Lr=Array.prototype,Hr=function(t){var e=t.indexOf;return t===Lr||t instanceof Array&&e===Lr.indexOf?Rr:e},Wr=Tr.trim;gt({target:\"String\",proto:!0,forced:(jr=\"trim\",h((function(){return!!xr[jr]()||\"​\\n᠎\"!=\"​\\n᠎\"[jr]()||xr[jr].name!==jr})))},{trim:function(){return Wr(this)}});var qr=Ht(\"String\").trim,Vr=String.prototype,Ur=function(t){var e=t.trim;return\"string\"==typeof t||t===Vr||t instanceof String&&e===Vr.trim?qr:e};gt({target:\"Object\",stat:!0,sham:!l},{create:Fe});var Yr=k.Object,Xr=function(t,e){return Yr.create(t,e)},Gr=Xr,Kr=x(\"JSON\",\"stringify\"),$r=/[\\uD800-\\uDFFF]/g,Zr=/^[\\uD800-\\uDBFF]$/,Qr=/^[\\uDC00-\\uDFFF]$/,Jr=function(t,e,i){var n=i.charAt(e-1),o=i.charAt(e+1);return Zr.test(t)&&!Qr.test(o)||Qr.test(t)&&!Zr.test(n)?\"\\\\u\"+t.charCodeAt(0).toString(16):t},ts=h((function(){return'\"\\\\udf06\\\\ud834\"'!==Kr(\"\\udf06\\ud834\")||'\"\\\\udead\"'!==Kr(\"\\udead\")}));Kr&&gt({target:\"JSON\",stat:!0,forced:ts},{stringify:function(t,e,i){var n=Kr.apply(null,arguments);return\"string\"==typeof n?n.replace($r,Jr):n}}),k.JSON||(k.JSON={stringify:JSON.stringify});var es=function(t,e,i){return k.JSON.stringify.apply(null,arguments)},is=[].slice,ns=/MSIE .\\./.test(E),os=function(t){return function(e,i){var n=arguments.length>2,o=n?is.call(arguments,2):void 0;return t(n?function(){(\"function\"==typeof e?e:Function(e)).apply(this,o)}:e,i)}};gt({global:!0,bind:!0,forced:ns},{setTimeout:os(a.setTimeout),setInterval:os(a.setInterval)});var rs=k.setTimeout;gt({target:\"Array\",proto:!0},{fill:function(t){for(var e=A(this),i=kt(e.length),n=arguments.length,o=Et(n>1?arguments[1]:void 0,i),r=n>2?arguments[2]:void 0,s=void 0===r?i:Et(r,i);s>o;)e[o++]=t;return e}});var ss=Ht(\"Array\").fill,as=Array.prototype,hs=function(t){var e=t.fill;return t===as||t instanceof Array&&e===as.fill?ss:e};function ls(){return(ls=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var i=arguments[e];for(var n in i)Object.prototype.hasOwnProperty.call(i,n)&&(t[n]=i[n])}return t}).apply(this,arguments)}function ds(t,e){t.prototype=Object.create(e.prototype),t.prototype.constructor=t,t.__proto__=e}function cs(t){if(void 0===t)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return t}var us,fs=\"function\"!=typeof Object.assign?function(t){if(null==t)throw new TypeError(\"Cannot convert undefined or null to object\");for(var e=Object(t),i=1;i<arguments.length;i++){var n=arguments[i];if(null!=n)for(var o in n)n.hasOwnProperty(o)&&(e[o]=n[o])}return e}:Object.assign,ps=[\"\",\"webkit\",\"Moz\",\"MS\",\"ms\",\"o\"],vs=\"undefined\"==typeof document?{style:{}}:document.createElement(\"div\"),gs=Math.round,ys=Math.abs,ms=Date.now;function bs(t,e){for(var i,n,o=e[0].toUpperCase()+e.slice(1),r=0;r<ps.length;){if((n=(i=ps[r])?i+o:e)in t)return n;r++}}us=\"undefined\"==typeof window?{}:window;var ws=bs(vs.style,\"touchAction\"),ks=void 0!==ws;var _s=\"compute\",xs=\"auto\",Es=\"manipulation\",Os=\"none\",Cs=\"pan-x\",Ss=\"pan-y\",Ts=function(){if(!ks)return!1;var t={},e=us.CSS&&us.CSS.supports;return[\"auto\",\"manipulation\",\"pan-y\",\"pan-x\",\"pan-x pan-y\",\"none\"].forEach((function(i){return t[i]=!e||us.CSS.supports(\"touch-action\",i)})),t}(),Ms=\"ontouchstart\"in us,Ps=void 0!==bs(us,\"PointerEvent\"),Ds=Ms&&/mobile|tablet|ip(ad|hone|od)|android/i.test(navigator.userAgent),Is=\"touch\",Bs=\"mouse\",zs=16,Ns=24,As=[\"x\",\"y\"],Fs=[\"clientX\",\"clientY\"];function js(t,e,i){var n;if(t)if(t.forEach)t.forEach(e,i);else if(void 0!==t.length)for(n=0;n<t.length;)e.call(i,t[n],n,t),n++;else for(n in t)t.hasOwnProperty(n)&&e.call(i,t[n],n,t)}function Rs(t,e){return\"function\"==typeof t?t.apply(e&&e[0]||void 0,e):t}function Ls(t,e){return t.indexOf(e)>-1}var Hs=function(){function t(t,e){this.manager=t,this.set(e)}var e=t.prototype;return e.set=function(t){t===_s&&(t=this.compute()),ks&&this.manager.element.style&&Ts[t]&&(this.manager.element.style[ws]=t),this.actions=t.toLowerCase().trim()},e.update=function(){this.set(this.manager.options.touchAction)},e.compute=function(){var t=[];return js(this.manager.recognizers,(function(e){Rs(e.options.enable,[e])&&(t=t.concat(e.getTouchAction()))})),function(t){if(Ls(t,Os))return Os;var e=Ls(t,Cs),i=Ls(t,Ss);return e&&i?Os:e||i?e?Cs:Ss:Ls(t,Es)?Es:xs}(t.join(\" \"))},e.preventDefaults=function(t){var e=t.srcEvent,i=t.offsetDirection;if(this.manager.session.prevented)e.preventDefault();else{var n=this.actions,o=Ls(n,Os)&&!Ts.none,r=Ls(n,Ss)&&!Ts[\"pan-y\"],s=Ls(n,Cs)&&!Ts[\"pan-x\"];if(o){var a=1===t.pointers.length,h=t.distance<2,l=t.deltaTime<250;if(a&&h&&l)return}if(!s||!r)return o||r&&6&i||s&&i&Ns?this.preventSrc(e):void 0}},e.preventSrc=function(t){this.manager.session.prevented=!0,t.preventDefault()},t}();function Ws(t,e){for(;t;){if(t===e)return!0;t=t.parentNode}return!1}function qs(t){var e=t.length;if(1===e)return{x:gs(t[0].clientX),y:gs(t[0].clientY)};for(var i=0,n=0,o=0;o<e;)i+=t[o].clientX,n+=t[o].clientY,o++;return{x:gs(i/e),y:gs(n/e)}}function Vs(t){for(var e=[],i=0;i<t.pointers.length;)e[i]={clientX:gs(t.pointers[i].clientX),clientY:gs(t.pointers[i].clientY)},i++;return{timeStamp:ms(),pointers:e,center:qs(e),deltaX:t.deltaX,deltaY:t.deltaY}}function Us(t,e,i){i||(i=As);var n=e[i[0]]-t[i[0]],o=e[i[1]]-t[i[1]];return Math.sqrt(n*n+o*o)}function Ys(t,e,i){i||(i=As);var n=e[i[0]]-t[i[0]],o=e[i[1]]-t[i[1]];return 180*Math.atan2(o,n)/Math.PI}function Xs(t,e){return t===e?1:ys(t)>=ys(e)?t<0?2:4:e<0?8:zs}function Gs(t,e,i){return{x:e/t||0,y:i/t||0}}function Ks(t,e){var i=t.session,n=e.pointers,o=n.length;i.firstInput||(i.firstInput=Vs(e)),o>1&&!i.firstMultiple?i.firstMultiple=Vs(e):1===o&&(i.firstMultiple=!1);var r=i.firstInput,s=i.firstMultiple,a=s?s.center:r.center,h=e.center=qs(n);e.timeStamp=ms(),e.deltaTime=e.timeStamp-r.timeStamp,e.angle=Ys(a,h),e.distance=Us(a,h),function(t,e){var i=e.center,n=t.offsetDelta||{},o=t.prevDelta||{},r=t.prevInput||{};1!==e.eventType&&4!==r.eventType||(o=t.prevDelta={x:r.deltaX||0,y:r.deltaY||0},n=t.offsetDelta={x:i.x,y:i.y}),e.deltaX=o.x+(i.x-n.x),e.deltaY=o.y+(i.y-n.y)}(i,e),e.offsetDirection=Xs(e.deltaX,e.deltaY);var l,d,c=Gs(e.deltaTime,e.deltaX,e.deltaY);e.overallVelocityX=c.x,e.overallVelocityY=c.y,e.overallVelocity=ys(c.x)>ys(c.y)?c.x:c.y,e.scale=s?(l=s.pointers,Us((d=n)[0],d[1],Fs)/Us(l[0],l[1],Fs)):1,e.rotation=s?function(t,e){return Ys(e[1],e[0],Fs)+Ys(t[1],t[0],Fs)}(s.pointers,n):0,e.maxPointers=i.prevInput?e.pointers.length>i.prevInput.maxPointers?e.pointers.length:i.prevInput.maxPointers:e.pointers.length,function(t,e){var i,n,o,r,s=t.lastInterval||e,a=e.timeStamp-s.timeStamp;if(8!==e.eventType&&(a>25||void 0===s.velocity)){var h=e.deltaX-s.deltaX,l=e.deltaY-s.deltaY,d=Gs(a,h,l);n=d.x,o=d.y,i=ys(d.x)>ys(d.y)?d.x:d.y,r=Xs(h,l),t.lastInterval=e}else i=s.velocity,n=s.velocityX,o=s.velocityY,r=s.direction;e.velocity=i,e.velocityX=n,e.velocityY=o,e.direction=r}(i,e);var u,f=t.element,p=e.srcEvent;Ws(u=p.composedPath?p.composedPath()[0]:p.path?p.path[0]:p.target,f)&&(f=u),e.target=f}function $s(t,e,i){var n=i.pointers.length,o=i.changedPointers.length,r=1&e&&n-o==0,s=12&e&&n-o==0;i.isFirst=!!r,i.isFinal=!!s,r&&(t.session={}),i.eventType=e,Ks(t,i),t.emit(\"hammer.input\",i),t.recognize(i),t.session.prevInput=i}function Zs(t){return t.trim().split(/\\s+/g)}function Qs(t,e,i){js(Zs(e),(function(e){t.addEventListener(e,i,!1)}))}function Js(t,e,i){js(Zs(e),(function(e){t.removeEventListener(e,i,!1)}))}function ta(t){var e=t.ownerDocument||t;return e.defaultView||e.parentWindow||window}var ea=function(){function t(t,e){var i=this;this.manager=t,this.callback=e,this.element=t.element,this.target=t.options.inputTarget,this.domHandler=function(e){Rs(t.options.enable,[t])&&i.handler(e)},this.init()}var e=t.prototype;return e.handler=function(){},e.init=function(){this.evEl&&Qs(this.element,this.evEl,this.domHandler),this.evTarget&&Qs(this.target,this.evTarget,this.domHandler),this.evWin&&Qs(ta(this.element),this.evWin,this.domHandler)},e.destroy=function(){this.evEl&&Js(this.element,this.evEl,this.domHandler),this.evTarget&&Js(this.target,this.evTarget,this.domHandler),this.evWin&&Js(ta(this.element),this.evWin,this.domHandler)},t}();function ia(t,e,i){if(t.indexOf&&!i)return t.indexOf(e);for(var n=0;n<t.length;){if(i&&t[n][i]==e||!i&&t[n]===e)return n;n++}return-1}var na={pointerdown:1,pointermove:2,pointerup:4,pointercancel:8,pointerout:8},oa={2:Is,3:\"pen\",4:Bs,5:\"kinect\"},ra=\"pointerdown\",sa=\"pointermove pointerup pointercancel\";us.MSPointerEvent&&!us.PointerEvent&&(ra=\"MSPointerDown\",sa=\"MSPointerMove MSPointerUp MSPointerCancel\");var aa=function(t){function e(){var i,n=e.prototype;return n.evEl=ra,n.evWin=sa,(i=t.apply(this,arguments)||this).store=i.manager.session.pointerEvents=[],i}return ds(e,t),e.prototype.handler=function(t){var e=this.store,i=!1,n=t.type.toLowerCase().replace(\"ms\",\"\"),o=na[n],r=oa[t.pointerType]||t.pointerType,s=r===Is,a=ia(e,t.pointerId,\"pointerId\");1&o&&(0===t.button||s)?a<0&&(e.push(t),a=e.length-1):12&o&&(i=!0),a<0||(e[a]=t,this.callback(this.manager,o,{pointers:e,changedPointers:[t],pointerType:r,srcEvent:t}),i&&e.splice(a,1))},e}(ea);function ha(t){return Array.prototype.slice.call(t,0)}function la(t,e,i){for(var n=[],o=[],r=0;r<t.length;){var s=e?t[r][e]:t[r];ia(o,s)<0&&n.push(t[r]),o[r]=s,r++}return i&&(n=e?n.sort((function(t,i){return t[e]>i[e]})):n.sort()),n}var da={touchstart:1,touchmove:2,touchend:4,touchcancel:8},ca=\"touchstart touchmove touchend touchcancel\",ua=function(t){function e(){var i;return e.prototype.evTarget=ca,(i=t.apply(this,arguments)||this).targetIds={},i}return ds(e,t),e.prototype.handler=function(t){var e=da[t.type],i=fa.call(this,t,e);i&&this.callback(this.manager,e,{pointers:i[0],changedPointers:i[1],pointerType:Is,srcEvent:t})},e}(ea);function fa(t,e){var i,n,o=ha(t.touches),r=this.targetIds;if(3&e&&1===o.length)return r[o[0].identifier]=!0,[o,o];var s=ha(t.changedTouches),a=[],h=this.target;if(n=o.filter((function(t){return Ws(t.target,h)})),1===e)for(i=0;i<n.length;)r[n[i].identifier]=!0,i++;for(i=0;i<s.length;)r[s[i].identifier]&&a.push(s[i]),12&e&&delete r[s[i].identifier],i++;return a.length?[la(n.concat(a),\"identifier\",!0),a]:void 0}var pa={mousedown:1,mousemove:2,mouseup:4},va=\"mousedown\",ga=\"mousemove mouseup\",ya=function(t){function e(){var i,n=e.prototype;return n.evEl=va,n.evWin=ga,(i=t.apply(this,arguments)||this).pressed=!1,i}return ds(e,t),e.prototype.handler=function(t){var e=pa[t.type];1&e&&0===t.button&&(this.pressed=!0),2&e&&1!==t.which&&(e=4),this.pressed&&(4&e&&(this.pressed=!1),this.callback(this.manager,e,{pointers:[t],changedPointers:[t],pointerType:Bs,srcEvent:t}))},e}(ea);function ma(t){var e=t.changedPointers[0];if(e.identifier===this.primaryTouch){var i={x:e.clientX,y:e.clientY},n=this.lastTouches;this.lastTouches.push(i);setTimeout((function(){var t=n.indexOf(i);t>-1&&n.splice(t,1)}),2500)}}function ba(t,e){1&t?(this.primaryTouch=e.changedPointers[0].identifier,ma.call(this,e)):12&t&&ma.call(this,e)}function wa(t){for(var e=t.srcEvent.clientX,i=t.srcEvent.clientY,n=0;n<this.lastTouches.length;n++){var o=this.lastTouches[n],r=Math.abs(e-o.x),s=Math.abs(i-o.y);if(r<=25&&s<=25)return!0}return!1}var ka=function(){return function(t){function e(e,i){var n;return(n=t.call(this,e,i)||this).handler=function(t,e,i){var o=i.pointerType===Is,r=i.pointerType===Bs;if(!(r&&i.sourceCapabilities&&i.sourceCapabilities.firesTouchEvents)){if(o)ba.call(cs(cs(n)),e,i);else if(r&&wa.call(cs(cs(n)),i))return;n.callback(t,e,i)}},n.touch=new ua(n.manager,n.handler),n.mouse=new ya(n.manager,n.handler),n.primaryTouch=null,n.lastTouches=[],n}return ds(e,t),e.prototype.destroy=function(){this.touch.destroy(),this.mouse.destroy()},e}(ea)}();function _a(t,e,i){return!!Array.isArray(t)&&(js(t,i[e],i),!0)}var xa=32,Ea=1;function Oa(t,e){var i=e.manager;return i?i.get(t):t}function Ca(t){return 16&t?\"cancel\":8&t?\"end\":4&t?\"move\":2&t?\"start\":\"\"}var Sa=function(){function t(t){void 0===t&&(t={}),this.options=ls({enable:!0},t),this.id=Ea++,this.manager=null,this.state=1,this.simultaneous={},this.requireFail=[]}var e=t.prototype;return e.set=function(t){return fs(this.options,t),this.manager&&this.manager.touchAction.update(),this},e.recognizeWith=function(t){if(_a(t,\"recognizeWith\",this))return this;var e=this.simultaneous;return e[(t=Oa(t,this)).id]||(e[t.id]=t,t.recognizeWith(this)),this},e.dropRecognizeWith=function(t){return _a(t,\"dropRecognizeWith\",this)||(t=Oa(t,this),delete this.simultaneous[t.id]),this},e.requireFailure=function(t){if(_a(t,\"requireFailure\",this))return this;var e=this.requireFail;return-1===ia(e,t=Oa(t,this))&&(e.push(t),t.requireFailure(this)),this},e.dropRequireFailure=function(t){if(_a(t,\"dropRequireFailure\",this))return this;t=Oa(t,this);var e=ia(this.requireFail,t);return e>-1&&this.requireFail.splice(e,1),this},e.hasRequireFailures=function(){return this.requireFail.length>0},e.canRecognizeWith=function(t){return!!this.simultaneous[t.id]},e.emit=function(t){var e=this,i=this.state;function n(i){e.manager.emit(i,t)}i<8&&n(e.options.event+Ca(i)),n(e.options.event),t.additionalEvent&&n(t.additionalEvent),i>=8&&n(e.options.event+Ca(i))},e.tryEmit=function(t){if(this.canEmit())return this.emit(t);this.state=xa},e.canEmit=function(){for(var t=0;t<this.requireFail.length;){if(!(33&this.requireFail[t].state))return!1;t++}return!0},e.recognize=function(t){var e=fs({},t);if(!Rs(this.options.enable,[this,e]))return this.reset(),void(this.state=xa);56&this.state&&(this.state=1),this.state=this.process(e),30&this.state&&this.tryEmit(e)},e.process=function(t){},e.getTouchAction=function(){},e.reset=function(){},t}(),Ta=function(t){function e(e){var i;return void 0===e&&(e={}),(i=t.call(this,ls({event:\"tap\",pointers:1,taps:1,interval:300,time:250,threshold:9,posThreshold:10},e))||this).pTime=!1,i.pCenter=!1,i._timer=null,i._input=null,i.count=0,i}ds(e,t);var i=e.prototype;return i.getTouchAction=function(){return[Es]},i.process=function(t){var e=this,i=this.options,n=t.pointers.length===i.pointers,o=t.distance<i.threshold,r=t.deltaTime<i.time;if(this.reset(),1&t.eventType&&0===this.count)return this.failTimeout();if(o&&r&&n){if(4!==t.eventType)return this.failTimeout();var s=!this.pTime||t.timeStamp-this.pTime<i.interval,a=!this.pCenter||Us(this.pCenter,t.center)<i.posThreshold;if(this.pTime=t.timeStamp,this.pCenter=t.center,a&&s?this.count+=1:this.count=1,this._input=t,0===this.count%i.taps)return this.hasRequireFailures()?(this._timer=setTimeout((function(){e.state=8,e.tryEmit()}),i.interval),2):8}return xa},i.failTimeout=function(){var t=this;return this._timer=setTimeout((function(){t.state=xa}),this.options.interval),xa},i.reset=function(){clearTimeout(this._timer)},i.emit=function(){8===this.state&&(this._input.tapCount=this.count,this.manager.emit(this.options.event,this._input))},e}(Sa),Ma=function(t){function e(e){return void 0===e&&(e={}),t.call(this,ls({pointers:1},e))||this}ds(e,t);var i=e.prototype;return i.attrTest=function(t){var e=this.options.pointers;return 0===e||t.pointers.length===e},i.process=function(t){var e=this.state,i=t.eventType,n=6&e,o=this.attrTest(t);return n&&(8&i||!o)?16|e:n||o?4&i?8|e:2&e?4|e:2:xa},e}(Sa);function Pa(t){return t===zs?\"down\":8===t?\"up\":2===t?\"left\":4===t?\"right\":\"\"}var Da=function(t){function e(e){var i;return void 0===e&&(e={}),(i=t.call(this,ls({event:\"pan\",threshold:10,pointers:1,direction:30},e))||this).pX=null,i.pY=null,i}ds(e,t);var i=e.prototype;return i.getTouchAction=function(){var t=this.options.direction,e=[];return 6&t&&e.push(Ss),t&Ns&&e.push(Cs),e},i.directionTest=function(t){var e=this.options,i=!0,n=t.distance,o=t.direction,r=t.deltaX,s=t.deltaY;return o&e.direction||(6&e.direction?(o=0===r?1:r<0?2:4,i=r!==this.pX,n=Math.abs(t.deltaX)):(o=0===s?1:s<0?8:zs,i=s!==this.pY,n=Math.abs(t.deltaY))),t.direction=o,i&&n>e.threshold&&o&e.direction},i.attrTest=function(t){return Ma.prototype.attrTest.call(this,t)&&(2&this.state||!(2&this.state)&&this.directionTest(t))},i.emit=function(e){this.pX=e.deltaX,this.pY=e.deltaY;var i=Pa(e.direction);i&&(e.additionalEvent=this.options.event+i),t.prototype.emit.call(this,e)},e}(Ma),Ia=function(t){function e(e){return void 0===e&&(e={}),t.call(this,ls({event:\"swipe\",threshold:10,velocity:.3,direction:30,pointers:1},e))||this}ds(e,t);var i=e.prototype;return i.getTouchAction=function(){return Da.prototype.getTouchAction.call(this)},i.attrTest=function(e){var i,n=this.options.direction;return 30&n?i=e.overallVelocity:6&n?i=e.overallVelocityX:n&Ns&&(i=e.overallVelocityY),t.prototype.attrTest.call(this,e)&&n&e.offsetDirection&&e.distance>this.options.threshold&&e.maxPointers===this.options.pointers&&ys(i)>this.options.velocity&&4&e.eventType},i.emit=function(t){var e=Pa(t.offsetDirection);e&&this.manager.emit(this.options.event+e,t),this.manager.emit(this.options.event,t)},e}(Ma),Ba=function(t){function e(e){return void 0===e&&(e={}),t.call(this,ls({event:\"pinch\",threshold:0,pointers:2},e))||this}ds(e,t);var i=e.prototype;return i.getTouchAction=function(){return[Os]},i.attrTest=function(e){return t.prototype.attrTest.call(this,e)&&(Math.abs(e.scale-1)>this.options.threshold||2&this.state)},i.emit=function(e){if(1!==e.scale){var i=e.scale<1?\"in\":\"out\";e.additionalEvent=this.options.event+i}t.prototype.emit.call(this,e)},e}(Ma),za=function(t){function e(e){return void 0===e&&(e={}),t.call(this,ls({event:\"rotate\",threshold:0,pointers:2},e))||this}ds(e,t);var i=e.prototype;return i.getTouchAction=function(){return[Os]},i.attrTest=function(e){return t.prototype.attrTest.call(this,e)&&(Math.abs(e.rotation)>this.options.threshold||2&this.state)},e}(Ma),Na=function(t){function e(e){var i;return void 0===e&&(e={}),(i=t.call(this,ls({event:\"press\",pointers:1,time:251,threshold:9},e))||this)._timer=null,i._input=null,i}ds(e,t);var i=e.prototype;return i.getTouchAction=function(){return[xs]},i.process=function(t){var e=this,i=this.options,n=t.pointers.length===i.pointers,o=t.distance<i.threshold,r=t.deltaTime>i.time;if(this._input=t,!o||!n||12&t.eventType&&!r)this.reset();else if(1&t.eventType)this.reset(),this._timer=setTimeout((function(){e.state=8,e.tryEmit()}),i.time);else if(4&t.eventType)return 8;return xa},i.reset=function(){clearTimeout(this._timer)},i.emit=function(t){8===this.state&&(t&&4&t.eventType?this.manager.emit(this.options.event+\"up\",t):(this._input.timeStamp=ms(),this.manager.emit(this.options.event,this._input)))},e}(Sa),Aa={domEvents:!1,touchAction:_s,enable:!0,inputTarget:null,inputClass:null,cssProps:{userSelect:\"none\",touchSelect:\"none\",touchCallout:\"none\",contentZooming:\"none\",userDrag:\"none\",tapHighlightColor:\"rgba(0,0,0,0)\"}},Fa=[[za,{enable:!1}],[Ba,{enable:!1},[\"rotate\"]],[Ia,{direction:6}],[Da,{direction:6},[\"swipe\"]],[Ta],[Ta,{event:\"doubletap\",taps:2},[\"tap\"]],[Na]];function ja(t,e){var i,n=t.element;n.style&&(js(t.options.cssProps,(function(o,r){i=bs(n.style,r),e?(t.oldCssProps[i]=n.style[i],n.style[i]=o):n.style[i]=t.oldCssProps[i]||\"\"})),e||(t.oldCssProps={}))}var Ra=function(){function t(t,e){var i,n=this;this.options=fs({},Aa,e||{}),this.options.inputTarget=this.options.inputTarget||t,this.handlers={},this.session={},this.recognizers=[],this.oldCssProps={},this.element=t,this.input=new((i=this).options.inputClass||(Ps?aa:Ds?ua:Ms?ka:ya))(i,$s),this.touchAction=new Hs(this,this.options.touchAction),ja(this,!0),js(this.options.recognizers,(function(t){var e=n.add(new t[0](t[1]));t[2]&&e.recognizeWith(t[2]),t[3]&&e.requireFailure(t[3])}),this)}var e=t.prototype;return e.set=function(t){return fs(this.options,t),t.touchAction&&this.touchAction.update(),t.inputTarget&&(this.input.destroy(),this.input.target=t.inputTarget,this.input.init()),this},e.stop=function(t){this.session.stopped=t?2:1},e.recognize=function(t){var e=this.session;if(!e.stopped){var i;this.touchAction.preventDefaults(t);var n=this.recognizers,o=e.curRecognizer;(!o||o&&8&o.state)&&(e.curRecognizer=null,o=null);for(var r=0;r<n.length;)i=n[r],2===e.stopped||o&&i!==o&&!i.canRecognizeWith(o)?i.reset():i.recognize(t),!o&&14&i.state&&(e.curRecognizer=i,o=i),r++}},e.get=function(t){if(t instanceof Sa)return t;for(var e=this.recognizers,i=0;i<e.length;i++)if(e[i].options.event===t)return e[i];return null},e.add=function(t){if(_a(t,\"add\",this))return this;var e=this.get(t.options.event);return e&&this.remove(e),this.recognizers.push(t),t.manager=this,this.touchAction.update(),t},e.remove=function(t){if(_a(t,\"remove\",this))return this;var e=this.get(t);if(t){var i=this.recognizers,n=ia(i,e);-1!==n&&(i.splice(n,1),this.touchAction.update())}return this},e.on=function(t,e){if(void 0===t||void 0===e)return this;var i=this.handlers;return js(Zs(t),(function(t){i[t]=i[t]||[],i[t].push(e)})),this},e.off=function(t,e){if(void 0===t)return this;var i=this.handlers;return js(Zs(t),(function(t){e?i[t]&&i[t].splice(ia(i[t],e),1):delete i[t]})),this},e.emit=function(t,e){this.options.domEvents&&function(t,e){var i=document.createEvent(\"Event\");i.initEvent(t,!0,!0),i.gesture=e,e.target.dispatchEvent(i)}(t,e);var i=this.handlers[t]&&this.handlers[t].slice();if(i&&i.length){e.type=t,e.preventDefault=function(){e.srcEvent.preventDefault()};for(var n=0;n<i.length;)i[n](e),n++}},e.destroy=function(){this.element&&ja(this,!1),this.handlers={},this.session={},this.input.destroy(),this.element=null},t}(),La={touchstart:1,touchmove:2,touchend:4,touchcancel:8},Ha=\"touchstart\",Wa=\"touchstart touchmove touchend touchcancel\",qa=function(t){function e(){var i,n=e.prototype;return n.evTarget=Ha,n.evWin=Wa,(i=t.apply(this,arguments)||this).started=!1,i}return ds(e,t),e.prototype.handler=function(t){var e=La[t.type];if(1===e&&(this.started=!0),this.started){var i=Va.call(this,t,e);12&e&&i[0].length-i[1].length==0&&(this.started=!1),this.callback(this.manager,e,{pointers:i[0],changedPointers:i[1],pointerType:Is,srcEvent:t})}},e}(ea);function Va(t,e){var i=ha(t.touches),n=ha(t.changedTouches);return 12&e&&(i=la(i.concat(n),\"identifier\",!0)),[i,n]}function Ua(t,e,i){var n=\"DEPRECATED METHOD: \"+e+\"\\n\"+i+\" AT \\n\";return function(){var e=new Error(\"get-stack-trace\"),i=e&&e.stack?e.stack.replace(/^[^\\(]+?[\\n$]/gm,\"\").replace(/^\\s+at\\s+/gm,\"\").replace(/^Object.<anonymous>\\s*\\(/gm,\"{anonymous}()@\"):\"Unknown Stack Trace\",o=window.console&&(window.console.warn||window.console.log);return o&&o.call(window.console,n,i),t.apply(this,arguments)}}var Ya=Ua((function(t,e,i){for(var n=Object.keys(e),o=0;o<n.length;)(!i||i&&void 0===t[n[o]])&&(t[n[o]]=e[n[o]]),o++;return t}),\"extend\",\"Use `assign`.\"),Xa=Ua((function(t,e){return Ya(t,e,!0)}),\"merge\",\"Use `assign`.\");function Ga(t,e,i){var n,o=e.prototype;(n=t.prototype=Object.create(o)).constructor=t,n._super=o,i&&fs(n,i)}function Ka(t,e){return function(){return t.apply(e,arguments)}}var $a=function(){var t=function(t,e){return void 0===e&&(e={}),new Ra(t,ls({recognizers:Fa.concat()},e))};return t.VERSION=\"2.0.17-rc\",t.DIRECTION_ALL=30,t.DIRECTION_DOWN=zs,t.DIRECTION_LEFT=2,t.DIRECTION_RIGHT=4,t.DIRECTION_UP=8,t.DIRECTION_HORIZONTAL=6,t.DIRECTION_VERTICAL=Ns,t.DIRECTION_NONE=1,t.DIRECTION_DOWN=zs,t.INPUT_START=1,t.INPUT_MOVE=2,t.INPUT_END=4,t.INPUT_CANCEL=8,t.STATE_POSSIBLE=1,t.STATE_BEGAN=2,t.STATE_CHANGED=4,t.STATE_ENDED=8,t.STATE_RECOGNIZED=8,t.STATE_CANCELLED=16,t.STATE_FAILED=xa,t.Manager=Ra,t.Input=ea,t.TouchAction=Hs,t.TouchInput=ua,t.MouseInput=ya,t.PointerEventInput=aa,t.TouchMouseInput=ka,t.SingleTouchInput=qa,t.Recognizer=Sa,t.AttrRecognizer=Ma,t.Tap=Ta,t.Pan=Da,t.Swipe=Ia,t.Pinch=Ba,t.Rotate=za,t.Press=Na,t.on=Qs,t.off=Js,t.each=js,t.merge=Xa,t.extend=Ya,t.bindFn=Ka,t.assign=fs,t.inherit=Ga,t.bindFn=Ka,t.prefixed=bs,t.toArray=ha,t.inArray=ia,t.uniqueArray=la,t.splitStr=Zs,t.boolOrFn=Rs,t.hasParent=Ws,t.addEventListeners=Qs,t.removeEventListeners=Js,t.defaults=fs({},Aa,{preset:Fa}),t}();function Za(t,e){var i=zo(t);if(On){var n=On(t);e&&(n=mr(n).call(n,(function(e){return Mn(t,e).enumerable}))),i.push.apply(i,n)}return i}function Qa(t){for(var e=1;e<arguments.length;e++){var i,n=null!=arguments[e]?arguments[e]:{};if(e%2)Wo(i=Za(Object(n),!0)).call(i,(function(e){jn(t,e,n[e])}));else if(Dn)In(t,Dn(n));else{var o;Wo(o=Za(Object(n))).call(o,(function(e){zn(t,e,Mn(n,e))}))}}return t}function Ja(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return th(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return th(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function th(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}var eh=ko(\"DELETE\");function ih(t){for(var e,i=arguments.length,n=new Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];return nh.apply(void 0,Eo(e=[{},t]).call(e,n))}function nh(){var t=oh.apply(void 0,arguments);return sh(t),t}function oh(){for(var t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];if(e.length<2)return e[0];var n;if(e.length>2)return oh.apply(void 0,Eo(n=[nh(e[0],e[1])]).call(n,wo(Oo(e).call(e,2))));var o,r=e[0],s=e[1],a=Ja(Co(s));try{for(a.s();!(o=a.n()).done;){var h=o.value;Object.prototype.propertyIsEnumerable.call(s,h)&&(s[h]===eh?delete r[h]:null===r[h]||null===s[h]||\"object\"!==go(r[h])||\"object\"!==go(s[h])||So(r[h])||So(s[h])?r[h]=rh(s[h]):r[h]=oh(r[h],s[h]))}}catch(t){a.e(t)}finally{a.f()}return r}function rh(t){return So(t)?Io(t).call(t,(function(t){return rh(t)})):\"object\"===go(t)&&null!==t?oh({},t):t}function sh(t){for(var e=0,i=zo(t);e<i.length;e++){var n=i[e];t[n]===eh?delete t[n]:\"object\"===go(t[n])&&null!==t[n]&&sh(t[n])}}function ah(){for(var t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];return hh(e.length?e:[No()])}function hh(t){var e=function(){for(var t=lh(),e=t(\" \"),i=t(\" \"),n=t(\" \"),o=0;o<arguments.length;o++)(e-=t(o<0||arguments.length<=o?void 0:arguments[o]))<0&&(e+=1),(i-=t(o<0||arguments.length<=o?void 0:arguments[o]))<0&&(i+=1),(n-=t(o<0||arguments.length<=o?void 0:arguments[o]))<0&&(n+=1);return[e,i,n]}(t),i=uo(e,3),n=i[0],o=i[1],r=i[2],s=1,a=function(){var t=2091639*n+2.3283064365386963e-10*s;return n=o,o=r,r=t-(s=0|t)};return a.uint32=function(){return 4294967296*a()},a.fract53=function(){return a()+11102230246251565e-32*(2097152*a()|0)},a.algorithm=\"Alea\",a.seed=t,a.version=\"0.9\",a}function lh(){var t=4022871197;return function(e){for(var i=e.toString(),n=0;n<i.length;n++){var o=.02519603282416938*(t+=i.charCodeAt(n));o-=t=o>>>0,t=(o*=t)>>>0,t+=4294967296*(o-=t)}return 2.3283064365386963e-10*(t>>>0)}}var dh=\"undefined\"!=typeof window?window.Hammer||$a:function(){return{on:t=function(){},off:t,destroy:t,emit:t,get:function(){return{set:t}}};var t};function ch(t){var e,i=this;this._cleanupQueue=[],this.active=!1,this._dom={container:t,overlay:document.createElement(\"div\")},this._dom.overlay.classList.add(\"vis-overlay\"),this._dom.container.appendChild(this._dom.overlay),this._cleanupQueue.push((function(){i._dom.overlay.parentNode.removeChild(i._dom.overlay)}));var n=dh(this._dom.overlay);n.on(\"tap\",Vt(e=this._onTapOverlay).call(e,this)),this._cleanupQueue.push((function(){n.destroy()}));var o=[\"tap\",\"doubletap\",\"press\",\"pinch\",\"pan\",\"panstart\",\"panmove\",\"panend\"];Wo(o).call(o,(function(t){n.on(t,(function(t){t.srcEvent.stopPropagation()}))})),document&&document.body&&(this._onClick=function(e){(function(t,e){for(;t;){if(t===e)return!0;t=t.parentNode}return!1})(e.target,t)||i.deactivate()},document.body.addEventListener(\"click\",this._onClick),this._cleanupQueue.push((function(){document.body.removeEventListener(\"click\",i._onClick)}))),this._escListener=function(t){(\"key\"in t?\"Escape\"===t.key:27===t.keyCode)&&i.deactivate()}}Zt(ch.prototype),ch.current=null,ch.prototype.destroy=function(){var t,e;this.deactivate();var i,n=Ja(Xo(t=er(e=this._cleanupQueue).call(e,0)).call(t));try{for(n.s();!(i=n.n()).done;){(0,i.value)()}}catch(t){n.e(t)}finally{n.f()}},ch.prototype.activate=function(){ch.current&&ch.current.deactivate(),ch.current=this,this.active=!0,this._dom.overlay.style.display=\"none\",this._dom.container.classList.add(\"vis-active\"),this.emit(\"change\"),this.emit(\"activate\"),document.body.addEventListener(\"keydown\",this._escListener)},ch.prototype.deactivate=function(){this.active=!1,this._dom.overlay.style.display=\"block\",this._dom.container.classList.remove(\"vis-active\"),document.body.removeEventListener(\"keydown\",this._escListener),this.emit(\"change\"),this.emit(\"deactivate\")},ch.prototype._onTapOverlay=function(t){this.activate(),t.srcEvent.stopPropagation()};var uh=/^\\/?Date\\((-?\\d+)/i,fh=/^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i,ph=/^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i,vh=/^rgb\\( *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *\\)$/i,gh=/^rgba\\( *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *([01]|0?\\.\\d+) *\\)$/i;function yh(t){return t instanceof Number||\"number\"==typeof t}function mh(t){if(t)for(;!0===t.hasChildNodes();){var e=t.firstChild;e&&(mh(e),t.removeChild(e))}}function bh(t){return t instanceof String||\"string\"==typeof t}function wh(t){return\"object\"===go(t)&&null!==t}function kh(t,e,i,n){var o=!1;!0===n&&(o=null===e[i]&&void 0!==t[i]),o?delete t[i]:t[i]=e[i]}function _h(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];for(var n in t)if(void 0!==e[n])if(null===e[n]||\"object\"!==go(e[n]))kh(t,e,n,i);else{var o=t[n],r=e[n];wh(o)&&wh(r)&&_h(o,r,i)}}var xh=At;function Eh(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(So(i))throw new TypeError(\"Arrays are not supported by deepExtend\");for(var o=0;o<t.length;o++){var r=t[o];if(Object.prototype.hasOwnProperty.call(i,r))if(i[r]&&i[r].constructor===Object)void 0===e[r]&&(e[r]={}),e[r].constructor===Object?Ch(e[r],i[r],!1,n):kh(e,i,r,n);else{if(So(i[r]))throw new TypeError(\"Arrays are not supported by deepExtend\");kh(e,i,r,n)}}return e}function Oh(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(So(i))throw new TypeError(\"Arrays are not supported by deepExtend\");for(var o in i)if(Object.prototype.hasOwnProperty.call(i,o)&&!dr(t).call(t,o))if(i[o]&&i[o].constructor===Object)void 0===e[o]&&(e[o]={}),e[o].constructor===Object?Ch(e[o],i[o]):kh(e,i,o,n);else if(So(i[o])){e[o]=[];for(var r=0;r<i[o].length;r++)e[o].push(i[o][r])}else kh(e,i,o,n);return e}function Ch(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];for(var o in e)if(Object.prototype.hasOwnProperty.call(e,o)||!0===i)if(\"object\"===go(e[o])&&null!==e[o]&&fr(e[o])===Object.prototype)void 0===t[o]?t[o]=Ch({},e[o],i):\"object\"===go(t[o])&&null!==t[o]&&fr(t[o])===Object.prototype?Ch(t[o],e[o],i):kh(t,e,o,n);else if(So(e[o])){var r;t[o]=Oo(r=e[o]).call(r)}else kh(t,e,o,n);return t}function Sh(t,e){var i;return Eo(i=[]).call(i,wo(t),[e])}function Th(t){return Oo(t).call(t)}function Mh(t){return t.getBoundingClientRect().left}function Ph(t){return t.getBoundingClientRect().top}function Dh(t,e){if(So(t))for(var i=t.length,n=0;n<i;n++)e(t[n],n,t);else for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&e(t[o],o,t)}var Ih=_r;function Bh(t,e,i,n){var o;t.addEventListener?(void 0===n&&(n=!1),\"mousewheel\"===e&&dr(o=navigator.userAgent).call(o,\"Firefox\")&&(e=\"DOMMouseScroll\"),t.addEventListener(e,i,n)):t.attachEvent(\"on\"+e,i)}function zh(t,e,i,n){var o;t.removeEventListener?(void 0===n&&(n=!1),\"mousewheel\"===e&&dr(o=navigator.userAgent).call(o,\"Firefox\")&&(e=\"DOMMouseScroll\"),t.removeEventListener(e,i,n)):t.detachEvent(\"on\"+e,i)}var Nh={asBoolean:function(t,e){return\"function\"==typeof t&&(t=t()),null!=t?0!=t:e||null},asNumber:function(t,e){return\"function\"==typeof t&&(t=t()),null!=t?Number(t)||e||null:e||null},asString:function(t,e){return\"function\"==typeof t&&(t=t()),null!=t?String(t):e||null},asSize:function(t,e){return\"function\"==typeof t&&(t=t()),bh(t)?t:yh(t)?t+\"px\":e||null},asElement:function(t,e){return\"function\"==typeof t&&(t=t()),t||e||null}};function Ah(t){var e;switch(t.length){case 3:case 4:return(e=ph.exec(t))?{r:Br(e[1]+e[1],16),g:Br(e[2]+e[2],16),b:Br(e[3]+e[3],16)}:null;case 6:case 7:return(e=fh.exec(t))?{r:Br(e[1],16),g:Br(e[2],16),b:Br(e[3],16)}:null;default:return null}}function Fh(t,e){if(dr(t).call(t,\"rgba\"))return t;if(dr(t).call(t,\"rgb\")){var i=t.substr(Hr(t).call(t,\"(\")+1).replace(\")\",\"\").split(\",\");return\"rgba(\"+i[0]+\",\"+i[1]+\",\"+i[2]+\",\"+e+\")\"}var n=Ah(t);return null==n?t:\"rgba(\"+n.r+\",\"+n.g+\",\"+n.b+\",\"+e+\")\"}function jh(t,e,i){var n;return\"#\"+Oo(n=((1<<24)+(t<<16)+(e<<8)+i).toString(16)).call(n,1)}function Rh(t,e){if(bh(t)){var i=t;if(Xh(i)){var n,o=Io(n=i.substr(4).substr(0,i.length-5).split(\",\")).call(n,(function(t){return Br(t)}));i=jh(o[0],o[1],o[2])}if(!0===Yh(i)){var r=Uh(i),s={h:r.h,s:.8*r.s,v:Math.min(1,1.02*r.v)},a={h:r.h,s:Math.min(1,1.25*r.s),v:.8*r.v},h=Vh(a.h,a.s,a.v),l=Vh(s.h,s.s,s.v);return{background:i,border:h,highlight:{background:l,border:h},hover:{background:l,border:h}}}return{background:i,border:i,highlight:{background:i,border:i},hover:{background:i,border:i}}}return e?{background:t.background||e.background,border:t.border||e.border,highlight:bh(t.highlight)?{border:t.highlight,background:t.highlight}:{background:t.highlight&&t.highlight.background||e.highlight.background,border:t.highlight&&t.highlight.border||e.highlight.border},hover:bh(t.hover)?{border:t.hover,background:t.hover}:{border:t.hover&&t.hover.border||e.hover.border,background:t.hover&&t.hover.background||e.hover.background}}:{background:t.background||void 0,border:t.border||void 0,highlight:bh(t.highlight)?{border:t.highlight,background:t.highlight}:{background:t.highlight&&t.highlight.background||void 0,border:t.highlight&&t.highlight.border||void 0},hover:bh(t.hover)?{border:t.hover,background:t.hover}:{border:t.hover&&t.hover.border||void 0,background:t.hover&&t.hover.background||void 0}}}function Lh(t,e,i){t/=255,e/=255,i/=255;var n=Math.min(t,Math.min(e,i)),o=Math.max(t,Math.max(e,i));return n===o?{h:0,s:0,v:n}:{h:60*((t===n?3:i===n?1:5)-(t===n?e-i:i===n?t-e:i-t)/(o-n))/360,s:(o-n)/o,v:o}}var Hh=function(t){var e,i={};return Wo(e=t.split(\";\")).call(e,(function(t){if(\"\"!=Ur(t).call(t)){var e,n,o=t.split(\":\"),r=Ur(e=o[0]).call(e),s=Ur(n=o[1]).call(n);i[r]=s}})),i},Wh=function(t){var e;return Io(e=zo(t)).call(e,(function(e){return e+\": \"+t[e]})).join(\"; \")};function qh(t,e,i){var n,o,r,s=Math.floor(6*t),a=6*t-s,h=i*(1-e),l=i*(1-a*e),d=i*(1-(1-a)*e);switch(s%6){case 0:n=i,o=d,r=h;break;case 1:n=l,o=i,r=h;break;case 2:n=h,o=i,r=d;break;case 3:n=h,o=l,r=i;break;case 4:n=d,o=h,r=i;break;case 5:n=i,o=h,r=l}return{r:Math.floor(255*n),g:Math.floor(255*o),b:Math.floor(255*r)}}function Vh(t,e,i){var n=qh(t,e,i);return jh(n.r,n.g,n.b)}function Uh(t){var e=Ah(t);if(!e)throw new TypeError(\"'\".concat(t,\"' is not a valid color.\"));return Lh(e.r,e.g,e.b)}function Yh(t){return/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(t)}function Xh(t){return vh.test(t)}function Gh(t){return gh.test(t)}function Kh(t){if(null===t||\"object\"!==go(t))return null;if(t instanceof Element)return t;var e=Gr(t);for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&\"object\"==go(t[i])&&(e[i]=Kh(t[i]));return e}function $h(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},o=function(t){return null!=t},r=function(t){return null!==t&&\"object\"===go(t)},s=function(t){for(var e in t)if(Object.prototype.hasOwnProperty.call(t,e))return!1;return!0};if(!r(t))throw new Error(\"Parameter mergeTarget must be an object\");if(!r(e))throw new Error(\"Parameter options must be an object\");if(!o(i))throw new Error(\"Parameter option must have a value\");if(!r(n))throw new Error(\"Parameter globalOptions must be an object\");var a=function(t,e,i){r(t[i])||(t[i]={});var n=e[i],o=t[i];for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(o[s]=n[s])},h=e[i],l=r(n)&&!s(n),d=l?n[i]:void 0,c=d?d.enabled:void 0;if(void 0!==h){if(\"boolean\"==typeof h)return r(t[i])||(t[i]={}),void(t[i].enabled=h);if(null===h&&!r(t[i])){if(!o(d))return;t[i]=Gr(d)}if(r(h)){var u=!0;void 0!==h.enabled?u=h.enabled:void 0!==c&&(u=d.enabled),a(t,e,i),t[i].enabled=u}}}var Zh={linear:function(t){return t},easeInQuad:function(t){return t*t},easeOutQuad:function(t){return t*(2-t)},easeInOutQuad:function(t){return t<.5?2*t*t:(4-2*t)*t-1},easeInCubic:function(t){return t*t*t},easeOutCubic:function(t){return--t*t*t+1},easeInOutCubic:function(t){return t<.5?4*t*t*t:(t-1)*(2*t-2)*(2*t-2)+1},easeInQuart:function(t){return t*t*t*t},easeOutQuart:function(t){return 1- --t*t*t*t},easeInOutQuart:function(t){return t<.5?8*t*t*t*t:1-8*--t*t*t*t},easeInQuint:function(t){return t*t*t*t*t},easeOutQuint:function(t){return 1+--t*t*t*t*t},easeInOutQuint:function(t){return t<.5?16*t*t*t*t*t:1+16*--t*t*t*t*t}};function Qh(t,e){var i;So(e)||(e=[e]);var n,o=Ja(t);try{for(o.s();!(n=o.n()).done;){var r=n.value;if(r){i=r[e[0]];for(var s=1;s<e.length;s++)i&&(i=i[e[s]]);if(void 0!==i)break}}}catch(t){o.e(t)}finally{o.f()}return i}var Jh={black:\"#000000\",navy:\"#000080\",darkblue:\"#00008B\",mediumblue:\"#0000CD\",blue:\"#0000FF\",darkgreen:\"#006400\",green:\"#008000\",teal:\"#008080\",darkcyan:\"#008B8B\",deepskyblue:\"#00BFFF\",darkturquoise:\"#00CED1\",mediumspringgreen:\"#00FA9A\",lime:\"#00FF00\",springgreen:\"#00FF7F\",aqua:\"#00FFFF\",cyan:\"#00FFFF\",midnightblue:\"#191970\",dodgerblue:\"#1E90FF\",lightseagreen:\"#20B2AA\",forestgreen:\"#228B22\",seagreen:\"#2E8B57\",darkslategray:\"#2F4F4F\",limegreen:\"#32CD32\",mediumseagreen:\"#3CB371\",turquoise:\"#40E0D0\",royalblue:\"#4169E1\",steelblue:\"#4682B4\",darkslateblue:\"#483D8B\",mediumturquoise:\"#48D1CC\",indigo:\"#4B0082\",darkolivegreen:\"#556B2F\",cadetblue:\"#5F9EA0\",cornflowerblue:\"#6495ED\",mediumaquamarine:\"#66CDAA\",dimgray:\"#696969\",slateblue:\"#6A5ACD\",olivedrab:\"#6B8E23\",slategray:\"#708090\",lightslategray:\"#778899\",mediumslateblue:\"#7B68EE\",lawngreen:\"#7CFC00\",chartreuse:\"#7FFF00\",aquamarine:\"#7FFFD4\",maroon:\"#800000\",purple:\"#800080\",olive:\"#808000\",gray:\"#808080\",skyblue:\"#87CEEB\",lightskyblue:\"#87CEFA\",blueviolet:\"#8A2BE2\",darkred:\"#8B0000\",darkmagenta:\"#8B008B\",saddlebrown:\"#8B4513\",darkseagreen:\"#8FBC8F\",lightgreen:\"#90EE90\",mediumpurple:\"#9370D8\",darkviolet:\"#9400D3\",palegreen:\"#98FB98\",darkorchid:\"#9932CC\",yellowgreen:\"#9ACD32\",sienna:\"#A0522D\",brown:\"#A52A2A\",darkgray:\"#A9A9A9\",lightblue:\"#ADD8E6\",greenyellow:\"#ADFF2F\",paleturquoise:\"#AFEEEE\",lightsteelblue:\"#B0C4DE\",powderblue:\"#B0E0E6\",firebrick:\"#B22222\",darkgoldenrod:\"#B8860B\",mediumorchid:\"#BA55D3\",rosybrown:\"#BC8F8F\",darkkhaki:\"#BDB76B\",silver:\"#C0C0C0\",mediumvioletred:\"#C71585\",indianred:\"#CD5C5C\",peru:\"#CD853F\",chocolate:\"#D2691E\",tan:\"#D2B48C\",lightgrey:\"#D3D3D3\",palevioletred:\"#D87093\",thistle:\"#D8BFD8\",orchid:\"#DA70D6\",goldenrod:\"#DAA520\",crimson:\"#DC143C\",gainsboro:\"#DCDCDC\",plum:\"#DDA0DD\",burlywood:\"#DEB887\",lightcyan:\"#E0FFFF\",lavender:\"#E6E6FA\",darksalmon:\"#E9967A\",violet:\"#EE82EE\",palegoldenrod:\"#EEE8AA\",lightcoral:\"#F08080\",khaki:\"#F0E68C\",aliceblue:\"#F0F8FF\",honeydew:\"#F0FFF0\",azure:\"#F0FFFF\",sandybrown:\"#F4A460\",wheat:\"#F5DEB3\",beige:\"#F5F5DC\",whitesmoke:\"#F5F5F5\",mintcream:\"#F5FFFA\",ghostwhite:\"#F8F8FF\",salmon:\"#FA8072\",antiquewhite:\"#FAEBD7\",linen:\"#FAF0E6\",lightgoldenrodyellow:\"#FAFAD2\",oldlace:\"#FDF5E6\",red:\"#FF0000\",fuchsia:\"#FF00FF\",magenta:\"#FF00FF\",deeppink:\"#FF1493\",orangered:\"#FF4500\",tomato:\"#FF6347\",hotpink:\"#FF69B4\",coral:\"#FF7F50\",darkorange:\"#FF8C00\",lightsalmon:\"#FFA07A\",orange:\"#FFA500\",lightpink:\"#FFB6C1\",pink:\"#FFC0CB\",gold:\"#FFD700\",peachpuff:\"#FFDAB9\",navajowhite:\"#FFDEAD\",moccasin:\"#FFE4B5\",bisque:\"#FFE4C4\",mistyrose:\"#FFE4E1\",blanchedalmond:\"#FFEBCD\",papayawhip:\"#FFEFD5\",lavenderblush:\"#FFF0F5\",seashell:\"#FFF5EE\",cornsilk:\"#FFF8DC\",lemonchiffon:\"#FFFACD\",floralwhite:\"#FFFAF0\",snow:\"#FFFAFA\",yellow:\"#FFFF00\",lightyellow:\"#FFFFE0\",ivory:\"#FFFFF0\",white:\"#FFFFFF\"},tl=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;Nn(this,t),this.pixelRatio=e,this.generated=!1,this.centerCoordinates={x:144.5,y:144.5},this.r=289*.49,this.color={r:255,g:255,b:255,a:1},this.hueCircle=void 0,this.initialColor={r:255,g:255,b:255,a:1},this.previousColor=void 0,this.applied=!1,this.updateCallback=function(){},this.closeCallback=function(){},this._create()}return Fn(t,[{key:\"insertTo\",value:function(t){void 0!==this.hammer&&(this.hammer.destroy(),this.hammer=void 0),this.container=t,this.container.appendChild(this.frame),this._bindHammer(),this._setSize()}},{key:\"setUpdateCallback\",value:function(t){if(\"function\"!=typeof t)throw new Error(\"Function attempted to set as colorPicker update callback is not a function.\");this.updateCallback=t}},{key:\"setCloseCallback\",value:function(t){if(\"function\"!=typeof t)throw new Error(\"Function attempted to set as colorPicker closing callback is not a function.\");this.closeCallback=t}},{key:\"_isColorString\",value:function(t){if(\"string\"==typeof t)return Jh[t]}},{key:\"setColor\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(\"none\"!==t){var i,n=this._isColorString(t);if(void 0!==n&&(t=n),!0===bh(t)){if(!0===Xh(t)){var o=t.substr(4).substr(0,t.length-5).split(\",\");i={r:o[0],g:o[1],b:o[2],a:1}}else if(!0===Gh(t)){var r=t.substr(5).substr(0,t.length-6).split(\",\");i={r:r[0],g:r[1],b:r[2],a:r[3]}}else if(!0===Yh(t)){var s=Ah(t);i={r:s.r,g:s.g,b:s.b,a:1}}}else if(t instanceof Object&&void 0!==t.r&&void 0!==t.g&&void 0!==t.b){var a=void 0!==t.a?t.a:\"1.0\";i={r:t.r,g:t.g,b:t.b,a:a}}if(void 0===i)throw new Error(\"Unknown color passed to the colorPicker. Supported are strings: rgb, hex, rgba. Object: rgb ({r:r,g:g,b:b,[a:a]}). Supplied: \"+es(t));this._setColor(i,e)}}},{key:\"show\",value:function(){void 0!==this.closeCallback&&(this.closeCallback(),this.closeCallback=void 0),this.applied=!1,this.frame.style.display=\"block\",this._generateHueCircle()}},{key:\"_hide\",value:function(){var t=this,e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];!0===e&&(this.previousColor=At({},this.color)),!0===this.applied&&this.updateCallback(this.initialColor),this.frame.style.display=\"none\",rs((function(){void 0!==t.closeCallback&&(t.closeCallback(),t.closeCallback=void 0)}),0)}},{key:\"_save\",value:function(){this.updateCallback(this.color),this.applied=!1,this._hide()}},{key:\"_apply\",value:function(){this.applied=!0,this.updateCallback(this.color),this._updatePicker(this.color)}},{key:\"_loadLast\",value:function(){void 0!==this.previousColor?this.setColor(this.previousColor,!1):alert(\"There is no last color to load...\")}},{key:\"_setColor\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];!0===e&&(this.initialColor=At({},t)),this.color=t;var i=Lh(t.r,t.g,t.b),n=2*Math.PI,o=this.r*i.s,r=this.centerCoordinates.x+o*Math.sin(n*i.h),s=this.centerCoordinates.y+o*Math.cos(n*i.h);this.colorPickerSelector.style.left=r-.5*this.colorPickerSelector.clientWidth+\"px\",this.colorPickerSelector.style.top=s-.5*this.colorPickerSelector.clientHeight+\"px\",this._updatePicker(t)}},{key:\"_setOpacity\",value:function(t){this.color.a=t/100,this._updatePicker(this.color)}},{key:\"_setBrightness\",value:function(t){var e=Lh(this.color.r,this.color.g,this.color.b);e.v=t/100;var i=qh(e.h,e.s,e.v);i.a=this.color.a,this.color=i,this._updatePicker()}},{key:\"_updatePicker\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.color,e=Lh(t.r,t.g,t.b),i=this.colorPickerCanvas.getContext(\"2d\");void 0===this.pixelRation&&(this.pixelRatio=(window.devicePixelRatio||1)/(i.webkitBackingStorePixelRatio||i.mozBackingStorePixelRatio||i.msBackingStorePixelRatio||i.oBackingStorePixelRatio||i.backingStorePixelRatio||1)),i.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0);var n=this.colorPickerCanvas.clientWidth,o=this.colorPickerCanvas.clientHeight;i.clearRect(0,0,n,o),i.putImageData(this.hueCircle,0,0),i.fillStyle=\"rgba(0,0,0,\"+(1-e.v)+\")\",i.circle(this.centerCoordinates.x,this.centerCoordinates.y,this.r),hs(i).call(i),this.brightnessRange.value=100*e.v,this.opacityRange.value=100*t.a,this.initialColorDiv.style.backgroundColor=\"rgba(\"+this.initialColor.r+\",\"+this.initialColor.g+\",\"+this.initialColor.b+\",\"+this.initialColor.a+\")\",this.newColorDiv.style.backgroundColor=\"rgba(\"+this.color.r+\",\"+this.color.g+\",\"+this.color.b+\",\"+this.color.a+\")\"}},{key:\"_setSize\",value:function(){this.colorPickerCanvas.style.width=\"100%\",this.colorPickerCanvas.style.height=\"100%\",this.colorPickerCanvas.width=289*this.pixelRatio,this.colorPickerCanvas.height=289*this.pixelRatio}},{key:\"_create\",value:function(){var t,e,i,n;if(this.frame=document.createElement(\"div\"),this.frame.className=\"vis-color-picker\",this.colorPickerDiv=document.createElement(\"div\"),this.colorPickerSelector=document.createElement(\"div\"),this.colorPickerSelector.className=\"vis-selector\",this.colorPickerDiv.appendChild(this.colorPickerSelector),this.colorPickerCanvas=document.createElement(\"canvas\"),this.colorPickerDiv.appendChild(this.colorPickerCanvas),this.colorPickerCanvas.getContext){var o=this.colorPickerCanvas.getContext(\"2d\");this.pixelRatio=(window.devicePixelRatio||1)/(o.webkitBackingStorePixelRatio||o.mozBackingStorePixelRatio||o.msBackingStorePixelRatio||o.oBackingStorePixelRatio||o.backingStorePixelRatio||1),this.colorPickerCanvas.getContext(\"2d\").setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0)}else{var r=document.createElement(\"DIV\");r.style.color=\"red\",r.style.fontWeight=\"bold\",r.style.padding=\"10px\",r.innerText=\"Error: your browser does not support HTML canvas\",this.colorPickerCanvas.appendChild(r)}this.colorPickerDiv.className=\"vis-color\",this.opacityDiv=document.createElement(\"div\"),this.opacityDiv.className=\"vis-opacity\",this.brightnessDiv=document.createElement(\"div\"),this.brightnessDiv.className=\"vis-brightness\",this.arrowDiv=document.createElement(\"div\"),this.arrowDiv.className=\"vis-arrow\",this.opacityRange=document.createElement(\"input\");try{this.opacityRange.type=\"range\",this.opacityRange.min=\"0\",this.opacityRange.max=\"100\"}catch(t){}this.opacityRange.value=\"100\",this.opacityRange.className=\"vis-range\",this.brightnessRange=document.createElement(\"input\");try{this.brightnessRange.type=\"range\",this.brightnessRange.min=\"0\",this.brightnessRange.max=\"100\"}catch(t){}this.brightnessRange.value=\"100\",this.brightnessRange.className=\"vis-range\",this.opacityDiv.appendChild(this.opacityRange),this.brightnessDiv.appendChild(this.brightnessRange);var s=this;this.opacityRange.onchange=function(){s._setOpacity(this.value)},this.opacityRange.oninput=function(){s._setOpacity(this.value)},this.brightnessRange.onchange=function(){s._setBrightness(this.value)},this.brightnessRange.oninput=function(){s._setBrightness(this.value)},this.brightnessLabel=document.createElement(\"div\"),this.brightnessLabel.className=\"vis-label vis-brightness\",this.brightnessLabel.innerText=\"brightness:\",this.opacityLabel=document.createElement(\"div\"),this.opacityLabel.className=\"vis-label vis-opacity\",this.opacityLabel.innerText=\"opacity:\",this.newColorDiv=document.createElement(\"div\"),this.newColorDiv.className=\"vis-new-color\",this.newColorDiv.innerText=\"new\",this.initialColorDiv=document.createElement(\"div\"),this.initialColorDiv.className=\"vis-initial-color\",this.initialColorDiv.innerText=\"initial\",this.cancelButton=document.createElement(\"div\"),this.cancelButton.className=\"vis-button vis-cancel\",this.cancelButton.innerText=\"cancel\",this.cancelButton.onclick=Vt(t=this._hide).call(t,this,!1),this.applyButton=document.createElement(\"div\"),this.applyButton.className=\"vis-button vis-apply\",this.applyButton.innerText=\"apply\",this.applyButton.onclick=Vt(e=this._apply).call(e,this),this.saveButton=document.createElement(\"div\"),this.saveButton.className=\"vis-button vis-save\",this.saveButton.innerText=\"save\",this.saveButton.onclick=Vt(i=this._save).call(i,this),this.loadButton=document.createElement(\"div\"),this.loadButton.className=\"vis-button vis-load\",this.loadButton.innerText=\"load last\",this.loadButton.onclick=Vt(n=this._loadLast).call(n,this),this.frame.appendChild(this.colorPickerDiv),this.frame.appendChild(this.arrowDiv),this.frame.appendChild(this.brightnessLabel),this.frame.appendChild(this.brightnessDiv),this.frame.appendChild(this.opacityLabel),this.frame.appendChild(this.opacityDiv),this.frame.appendChild(this.newColorDiv),this.frame.appendChild(this.initialColorDiv),this.frame.appendChild(this.cancelButton),this.frame.appendChild(this.applyButton),this.frame.appendChild(this.saveButton),this.frame.appendChild(this.loadButton)}},{key:\"_bindHammer\",value:function(){var t=this;this.drag={},this.pinch={},this.hammer=new dh(this.colorPickerCanvas),this.hammer.get(\"pinch\").set({enable:!0}),this.hammer.on(\"hammer.input\",(function(e){e.isFirst&&t._moveSelector(e)})),this.hammer.on(\"tap\",(function(e){t._moveSelector(e)})),this.hammer.on(\"panstart\",(function(e){t._moveSelector(e)})),this.hammer.on(\"panmove\",(function(e){t._moveSelector(e)})),this.hammer.on(\"panend\",(function(e){t._moveSelector(e)}))}},{key:\"_generateHueCircle\",value:function(){if(!1===this.generated){var t=this.colorPickerCanvas.getContext(\"2d\");void 0===this.pixelRation&&(this.pixelRatio=(window.devicePixelRatio||1)/(t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1)),t.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0);var e,i,n,o,r=this.colorPickerCanvas.clientWidth,s=this.colorPickerCanvas.clientHeight;t.clearRect(0,0,r,s),this.centerCoordinates={x:.5*r,y:.5*s},this.r=.49*r;var a,h=2*Math.PI/360,l=1/this.r;for(n=0;n<360;n++)for(o=0;o<this.r;o++)e=this.centerCoordinates.x+o*Math.sin(h*n),i=this.centerCoordinates.y+o*Math.cos(h*n),a=qh(.002777777777777778*n,o*l,1),t.fillStyle=\"rgb(\"+a.r+\",\"+a.g+\",\"+a.b+\")\",t.fillRect(e-.5,i-.5,2,2);t.strokeStyle=\"rgba(0,0,0,1)\",t.circle(this.centerCoordinates.x,this.centerCoordinates.y,this.r),t.stroke(),this.hueCircle=t.getImageData(0,0,r,s)}this.generated=!0}},{key:\"_moveSelector\",value:function(t){var e=this.colorPickerDiv.getBoundingClientRect(),i=t.center.x-e.left,n=t.center.y-e.top,o=.5*this.colorPickerDiv.clientHeight,r=.5*this.colorPickerDiv.clientWidth,s=i-r,a=n-o,h=Math.atan2(s,a),l=.98*Math.min(Math.sqrt(s*s+a*a),r),d=Math.cos(h)*l+o,c=Math.sin(h)*l+r;this.colorPickerSelector.style.top=d-.5*this.colorPickerSelector.clientHeight+\"px\",this.colorPickerSelector.style.left=c-.5*this.colorPickerSelector.clientWidth+\"px\";var u=h/(2*Math.PI);u=u<0?u+1:u;var f=l/this.r,p=Lh(this.color.r,this.color.g,this.color.b);p.h=u,p.s=f;var v=qh(p.h,p.s,p.v);v.a=this.color.a,this.color=v,this.initialColorDiv.style.backgroundColor=\"rgba(\"+this.initialColor.r+\",\"+this.initialColor.g+\",\"+this.initialColor.b+\",\"+this.initialColor.a+\")\",this.newColorDiv.style.backgroundColor=\"rgba(\"+this.color.r+\",\"+this.color.g+\",\"+this.color.b+\",\"+this.color.a+\")\"}}]),t}();function el(){for(var t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];if(e.length<1)throw new TypeError(\"Invalid arguments.\");if(1===e.length)return document.createTextNode(e[0]);var n=document.createElement(e[0]);return n.appendChild(el.apply(void 0,wo(Oo(e).call(e,1)))),n}var il,nl=function(){function t(e,i,n){var o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1,r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:function(){return!1};Nn(this,t),this.parent=e,this.changedOptions=[],this.container=i,this.allowCreation=!1,this.hideOption=r,this.options={},this.initialized=!1,this.popupCounter=0,this.defaultOptions={enabled:!1,filter:!0,container:void 0,showButton:!0},At(this.options,this.defaultOptions),this.configureOptions=n,this.moduleOptions={},this.domElements=[],this.popupDiv={},this.popupLimit=5,this.popupHistory={},this.colorPicker=new tl(o),this.wrapper=void 0}return Fn(t,[{key:\"setOptions\",value:function(t){if(void 0!==t){this.popupHistory={},this._removePopup();var e=!0;if(\"string\"==typeof t)this.options.filter=t;else if(So(t))this.options.filter=t.join();else if(\"object\"===go(t)){if(null==t)throw new TypeError(\"options cannot be null\");void 0!==t.container&&(this.options.container=t.container),void 0!==mr(t)&&(this.options.filter=mr(t)),void 0!==t.showButton&&(this.options.showButton=t.showButton),void 0!==t.enabled&&(e=t.enabled)}else\"boolean\"==typeof t?(this.options.filter=!0,e=t):\"function\"==typeof t&&(this.options.filter=t,e=!0);!1===mr(this.options)&&(e=!1),this.options.enabled=e}this._clean()}},{key:\"setModuleOptions\",value:function(t){this.moduleOptions=t,!0===this.options.enabled&&(this._clean(),void 0!==this.options.container&&(this.container=this.options.container),this._create())}},{key:\"_create\",value:function(){this._clean(),this.changedOptions=[];var t=mr(this.options),e=0,i=!1;for(var n in this.configureOptions)Object.prototype.hasOwnProperty.call(this.configureOptions,n)&&(this.allowCreation=!1,i=!1,\"function\"==typeof t?i=(i=t(n,[]))||this._handleObject(this.configureOptions[n],[n],!0):!0!==t&&-1===Hr(t).call(t,n)||(i=!0),!1!==i&&(this.allowCreation=!0,e>0&&this._makeItem([]),this._makeHeader(n),this._handleObject(this.configureOptions[n],[n])),e++);this._makeButton(),this._push()}},{key:\"_push\",value:function(){this.wrapper=document.createElement(\"div\"),this.wrapper.className=\"vis-configuration-wrapper\",this.container.appendChild(this.wrapper);for(var t=0;t<this.domElements.length;t++)this.wrapper.appendChild(this.domElements[t]);this._showPopupIfNeeded()}},{key:\"_clean\",value:function(){for(var t=0;t<this.domElements.length;t++)this.wrapper.removeChild(this.domElements[t]);void 0!==this.wrapper&&(this.container.removeChild(this.wrapper),this.wrapper=void 0),this.domElements=[],this._removePopup()}},{key:\"_getValue\",value:function(t){for(var e=this.moduleOptions,i=0;i<t.length;i++){if(void 0===e[t[i]]){e=void 0;break}e=e[t[i]]}return e}},{key:\"_makeItem\",value:function(t){if(!0===this.allowCreation){var e=document.createElement(\"div\");e.className=\"vis-configuration vis-config-item vis-config-s\"+t.length;for(var i=arguments.length,n=new Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];return Wo(n).call(n,(function(t){e.appendChild(t)})),this.domElements.push(e),this.domElements.length}return 0}},{key:\"_makeHeader\",value:function(t){var e=document.createElement(\"div\");e.className=\"vis-configuration vis-config-header\",e.innerText=t,this._makeItem([],e)}},{key:\"_makeLabel\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=document.createElement(\"div\");if(n.className=\"vis-configuration vis-config-label vis-config-s\"+e.length,!0===i){for(;n.firstChild;)n.removeChild(n.firstChild);n.appendChild(el(\"i\",\"b\",t))}else n.innerText=t+\":\";return n}},{key:\"_makeDropdown\",value:function(t,e,i){var n=document.createElement(\"select\");n.className=\"vis-configuration vis-config-select\";var o=0;void 0!==e&&-1!==Hr(t).call(t,e)&&(o=Hr(t).call(t,e));for(var r=0;r<t.length;r++){var s=document.createElement(\"option\");s.value=t[r],r===o&&(s.selected=\"selected\"),s.innerText=t[r],n.appendChild(s)}var a=this;n.onchange=function(){a._update(this.value,i)};var h=this._makeLabel(i[i.length-1],i);this._makeItem(i,h,n)}},{key:\"_makeRange\",value:function(t,e,i){var n=t[0],o=t[1],r=t[2],s=t[3],a=document.createElement(\"input\");a.className=\"vis-configuration vis-config-range\";try{a.type=\"range\",a.min=o,a.max=r}catch(t){}a.step=s;var h=\"\",l=0;if(void 0!==e){var d=1.2;e<0&&e*d<o?(a.min=Math.ceil(e*d),l=a.min,h=\"range increased\"):e/d<o&&(a.min=Math.ceil(e/d),l=a.min,h=\"range increased\"),e*d>r&&1!==r&&(a.max=Math.ceil(e*d),l=a.max,h=\"range increased\"),a.value=e}else a.value=n;var c=document.createElement(\"input\");c.className=\"vis-configuration vis-config-rangeinput\",c.value=a.value;var u=this;a.onchange=function(){c.value=this.value,u._update(Number(this.value),i)},a.oninput=function(){c.value=this.value};var f=this._makeLabel(i[i.length-1],i),p=this._makeItem(i,f,a,c);\"\"!==h&&this.popupHistory[p]!==l&&(this.popupHistory[p]=l,this._setupPopup(h,p))}},{key:\"_makeButton\",value:function(){var t=this;if(!0===this.options.showButton){var e=document.createElement(\"div\");e.className=\"vis-configuration vis-config-button\",e.innerText=\"generate options\",e.onclick=function(){t._printOptions()},e.onmouseover=function(){e.className=\"vis-configuration vis-config-button hover\"},e.onmouseout=function(){e.className=\"vis-configuration vis-config-button\"},this.optionsContainer=document.createElement(\"div\"),this.optionsContainer.className=\"vis-configuration vis-config-option-container\",this.domElements.push(this.optionsContainer),this.domElements.push(e)}}},{key:\"_setupPopup\",value:function(t,e){var i=this;if(!0===this.initialized&&!0===this.allowCreation&&this.popupCounter<this.popupLimit){var n=document.createElement(\"div\");n.id=\"vis-configuration-popup\",n.className=\"vis-configuration-popup\",n.innerText=t,n.onclick=function(){i._removePopup()},this.popupCounter+=1,this.popupDiv={html:n,index:e}}}},{key:\"_removePopup\",value:function(){void 0!==this.popupDiv.html&&(this.popupDiv.html.parentNode.removeChild(this.popupDiv.html),clearTimeout(this.popupDiv.hideTimeout),clearTimeout(this.popupDiv.deleteTimeout),this.popupDiv={})}},{key:\"_showPopupIfNeeded\",value:function(){var t=this;if(void 0!==this.popupDiv.html){var e=this.domElements[this.popupDiv.index].getBoundingClientRect();this.popupDiv.html.style.left=e.left+\"px\",this.popupDiv.html.style.top=e.top-30+\"px\",document.body.appendChild(this.popupDiv.html),this.popupDiv.hideTimeout=rs((function(){t.popupDiv.html.style.opacity=0}),1500),this.popupDiv.deleteTimeout=rs((function(){t._removePopup()}),1800)}}},{key:\"_makeCheckbox\",value:function(t,e,i){var n=document.createElement(\"input\");n.type=\"checkbox\",n.className=\"vis-configuration vis-config-checkbox\",n.checked=t,void 0!==e&&(n.checked=e,e!==t&&(\"object\"===go(t)?e!==t.enabled&&this.changedOptions.push({path:i,value:e}):this.changedOptions.push({path:i,value:e})));var o=this;n.onchange=function(){o._update(this.checked,i)};var r=this._makeLabel(i[i.length-1],i);this._makeItem(i,r,n)}},{key:\"_makeTextInput\",value:function(t,e,i){var n=document.createElement(\"input\");n.type=\"text\",n.className=\"vis-configuration vis-config-text\",n.value=e,e!==t&&this.changedOptions.push({path:i,value:e});var o=this;n.onchange=function(){o._update(this.value,i)};var r=this._makeLabel(i[i.length-1],i);this._makeItem(i,r,n)}},{key:\"_makeColorField\",value:function(t,e,i){var n=this,o=t[1],r=document.createElement(\"div\");\"none\"!==(e=void 0===e?o:e)?(r.className=\"vis-configuration vis-config-colorBlock\",r.style.backgroundColor=e):r.className=\"vis-configuration vis-config-colorBlock none\",e=void 0===e?o:e,r.onclick=function(){n._showColorPicker(e,r,i)};var s=this._makeLabel(i[i.length-1],i);this._makeItem(i,s,r)}},{key:\"_showColorPicker\",value:function(t,e,i){var n=this;e.onclick=function(){},this.colorPicker.insertTo(e),this.colorPicker.show(),this.colorPicker.setColor(t),this.colorPicker.setUpdateCallback((function(t){var o=\"rgba(\"+t.r+\",\"+t.g+\",\"+t.b+\",\"+t.a+\")\";e.style.backgroundColor=o,n._update(o,i)})),this.colorPicker.setCloseCallback((function(){e.onclick=function(){n._showColorPicker(t,e,i)}}))}},{key:\"_handleObject\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=!1,o=mr(this.options),r=!1;for(var s in t)if(Object.prototype.hasOwnProperty.call(t,s)){n=!0;var a=t[s],h=Sh(e,s);if(\"function\"==typeof o&&!1===(n=o(s,e))&&!So(a)&&\"string\"!=typeof a&&\"boolean\"!=typeof a&&a instanceof Object&&(this.allowCreation=!1,n=this._handleObject(a,h,!0),this.allowCreation=!1===i),!1!==n){r=!0;var l=this._getValue(h);if(So(a))this._handleArray(a,l,h);else if(\"string\"==typeof a)this._makeTextInput(a,l,h);else if(\"boolean\"==typeof a)this._makeCheckbox(a,l,h);else if(a instanceof Object){if(!this.hideOption(e,s,this.moduleOptions))if(void 0!==a.enabled){var d=Sh(h,\"enabled\"),c=this._getValue(d);if(!0===c){var u=this._makeLabel(s,h,!0);this._makeItem(h,u),r=this._handleObject(a,h)||r}else this._makeCheckbox(a,c,h)}else{var f=this._makeLabel(s,h,!0);this._makeItem(h,f),r=this._handleObject(a,h)||r}}else console.error(\"dont know how to handle\",a,s,h)}}return r}},{key:\"_handleArray\",value:function(t,e,i){\"string\"==typeof t[0]&&\"color\"===t[0]?(this._makeColorField(t,e,i),t[1]!==e&&this.changedOptions.push({path:i,value:e})):\"string\"==typeof t[0]?(this._makeDropdown(t,e,i),t[0]!==e&&this.changedOptions.push({path:i,value:e})):\"number\"==typeof t[0]&&(this._makeRange(t,e,i),t[0]!==e&&this.changedOptions.push({path:i,value:Number(e)}))}},{key:\"_update\",value:function(t,e){var i=this._constructOptions(t,e);this.parent.body&&this.parent.body.emitter&&this.parent.body.emitter.emit&&this.parent.body.emitter.emit(\"configChange\",i),this.initialized=!0,this.parent.setOptions(i)}},{key:\"_constructOptions\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=i;t=\"false\"!==(t=\"true\"===t||t)&&t;for(var o=0;o<e.length;o++)\"global\"!==e[o]&&(void 0===n[e[o]]&&(n[e[o]]={}),o!==e.length-1?n=n[e[o]]:n[e[o]]=t);return i}},{key:\"_printOptions\",value:function(){for(var t=this.getOptions();this.optionsContainer.firstChild;)this.optionsContainer.removeChild(this.optionsContainer.firstChild);this.optionsContainer.appendChild(el(\"pre\",\"const options = \"+es(t,null,2)))}},{key:\"getOptions\",value:function(){for(var t={},e=0;e<this.changedOptions.length;e++)this._constructOptions(this.changedOptions[e].value,this.changedOptions[e].path,t);return t}}]),t}(),ol=!1,rl=\"background: #FFeeee; color: #dd0000\",sl=ch,al=tl,hl=nl,ll=dh,dl=function(){function t(e,i){Nn(this,t),this.container=e,this.overflowMethod=i||\"cap\",this.x=0,this.y=0,this.padding=5,this.hidden=!1,this.frame=document.createElement(\"div\"),this.frame.className=\"vis-tooltip\",this.container.appendChild(this.frame)}return Fn(t,[{key:\"setPosition\",value:function(t,e){this.x=Br(t),this.y=Br(e)}},{key:\"setText\",value:function(t){if(t instanceof Element){for(;this.frame.firstChild;)this.frame.removeChild(this.frame.firstChild);this.frame.appendChild(t)}else this.frame.innerText=t}},{key:\"show\",value:function(t){if(void 0===t&&(t=!0),!0===t){var e=this.frame.clientHeight,i=this.frame.clientWidth,n=this.frame.parentNode.clientHeight,o=this.frame.parentNode.clientWidth,r=0,s=0;if(\"flip\"==this.overflowMethod){var a=!1,h=!0;this.y-e<this.padding&&(h=!1),this.x+i>o-this.padding&&(a=!0),r=a?this.x-i:this.x,s=h?this.y-e:this.y}else(s=this.y-e)+e+this.padding>n&&(s=n-e-this.padding),s<this.padding&&(s=this.padding),(r=this.x)+i+this.padding>o&&(r=o-i-this.padding),r<this.padding&&(r=this.padding);this.frame.style.left=r+\"px\",this.frame.style.top=s+\"px\",this.frame.style.visibility=\"visible\",this.hidden=!1}else this.hide()}},{key:\"hide\",value:function(){this.hidden=!0,this.frame.style.left=\"0\",this.frame.style.top=\"0\",this.frame.style.visibility=\"hidden\"}},{key:\"destroy\",value:function(){this.frame.parentNode.removeChild(this.frame)}}]),t}(),cl=rl,ul=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"validate\",value:function(e,i,n){ol=!1,il=i;var o=i;return void 0!==n&&(o=i[n]),t.parse(e,o,[]),ol}},{key:\"parse\",value:function(e,i,n){for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&t.check(o,e,i,n)}},{key:\"check\",value:function(e,i,n,o){if(void 0!==n[e]||void 0!==n.__any__){var r=e,s=!0;void 0===n[e]&&void 0!==n.__any__&&(r=\"__any__\",s=\"object\"===t.getType(i[e]));var a=n[r];s&&void 0!==a.__type__&&(a=a.__type__),t.checkFields(e,i,n,r,a,o)}else t.getSuggestion(e,n,o)}},{key:\"checkFields\",value:function(e,i,n,o,r,s){var a=function(i){console.error(\"%c\"+i+t.printLocation(s,e),rl)},h=t.getType(i[e]),l=r[h];void 0!==l?\"array\"===t.getType(l)&&-1===Hr(l).call(l,i[e])?(a('Invalid option detected in \"'+e+'\". Allowed values are:'+t.print(l)+' not \"'+i[e]+'\". '),ol=!0):\"object\"===h&&\"__any__\"!==o&&(s=Sh(s,e),t.parse(i[e],n[o],s)):void 0===r.any&&(a('Invalid type received for \"'+e+'\". Expected: '+t.print(zo(r))+\". Received [\"+h+'] \"'+i[e]+'\"'),ol=!0)}},{key:\"getType\",value:function(t){var e=go(t);return\"object\"===e?null===t?\"null\":t instanceof Boolean?\"boolean\":t instanceof Number?\"number\":t instanceof String?\"string\":So(t)?\"array\":t instanceof Date?\"date\":void 0!==t.nodeType?\"dom\":!0===t._isAMomentObject?\"moment\":\"object\":\"number\"===e?\"number\":\"boolean\"===e?\"boolean\":\"string\"===e?\"string\":void 0===e?\"undefined\":e}},{key:\"getSuggestion\",value:function(e,i,n){var o,r=t.findInOptions(e,i,n,!1),s=t.findInOptions(e,il,[],!0);o=void 0!==r.indexMatch?\" in \"+t.printLocation(r.path,e,\"\")+'Perhaps it was incomplete? Did you mean: \"'+r.indexMatch+'\"?\\n\\n':s.distance<=4&&r.distance>s.distance?\" in \"+t.printLocation(r.path,e,\"\")+\"Perhaps it was misplaced? Matching option found at: \"+t.printLocation(s.path,s.closestMatch,\"\"):r.distance<=8?'. Did you mean \"'+r.closestMatch+'\"?'+t.printLocation(r.path,e):\". Did you mean one of these: \"+t.print(zo(i))+t.printLocation(n,e),console.error('%cUnknown option detected: \"'+e+'\"'+o,rl),ol=!0}},{key:\"findInOptions\",value:function(e,i,n){var o=arguments.length>3&&void 0!==arguments[3]&&arguments[3],r=1e9,s=\"\",a=[],h=e.toLowerCase(),l=void 0;for(var d in i){var c=void 0;if(void 0!==i[d].__type__&&!0===o){var u=t.findInOptions(e,i[d],Sh(n,d));r>u.distance&&(s=u.closestMatch,a=u.path,r=u.distance,l=u.indexMatch)}else{var f;-1!==Hr(f=d.toLowerCase()).call(f,h)&&(l=d),r>(c=t.levenshteinDistance(e,d))&&(s=d,a=Th(n),r=c)}}return{closestMatch:s,path:a,distance:r,indexMatch:l}}},{key:\"printLocation\",value:function(t,e){for(var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:\"Problem value found at: \\n\",n=\"\\n\\n\"+i+\"options = {\\n\",o=0;o<t.length;o++){for(var r=0;r<o+1;r++)n+=\"  \";n+=t[o]+\": {\\n\"}for(var s=0;s<t.length+1;s++)n+=\"  \";n+=e+\"\\n\";for(var a=0;a<t.length+1;a++){for(var h=0;h<t.length-a;h++)n+=\"  \";n+=\"}\\n\"}return n+\"\\n\\n\"}},{key:\"print\",value:function(t){return es(t).replace(/(\")|(\\[)|(\\])|(,\"__type__\")/g,\"\").replace(/(,)/g,\", \")}},{key:\"levenshteinDistance\",value:function(t,e){if(0===t.length)return e.length;if(0===e.length)return t.length;var i,n,o=[];for(i=0;i<=e.length;i++)o[i]=[i];for(n=0;n<=t.length;n++)o[0][n]=n;for(i=1;i<=e.length;i++)for(n=1;n<=t.length;n++)e.charAt(i-1)==t.charAt(n-1)?o[i][n]=o[i-1][n-1]:o[i][n]=Math.min(o[i-1][n-1]+1,Math.min(o[i][n-1]+1,o[i-1][n]+1));return o[e.length][t.length]}}]),t}(),fl=Object.freeze({__proto__:null,Activator:sl,Alea:ah,ColorPicker:al,Configurator:hl,DELETE:eh,HSVToHex:Vh,HSVToRGB:qh,Hammer:ll,Popup:dl,RGBToHSV:Lh,RGBToHex:jh,VALIDATOR_PRINT_STYLE:cl,Validator:ul,addClassName:function(t,e){var i=t.className.split(\" \"),n=e.split(\" \");i=Eo(i).call(i,mr(n).call(n,(function(t){return!dr(i).call(i,t)}))),t.className=i.join(\" \")},addCssText:function(t,e){var i=Hh(t.style.cssText),n=Hh(e),o=Qa(Qa({},i),n);t.style.cssText=Wh(o)},addEventListener:Bh,binarySearchCustom:function(t,e,i,n){for(var o=0,r=0,s=t.length-1;r<=s&&o<1e4;){var a=Math.floor((r+s)/2),h=t[a],l=e(void 0===n?h[i]:h[i][n]);if(0==l)return a;-1==l?r=a+1:s=a-1,o++}return-1},binarySearchValue:function(t,e,i,n,o){var r,s,a,h,l=0,d=0,c=t.length-1;for(o=null!=o?o:function(t,e){return t==e?0:t<e?-1:1};d<=c&&l<1e4;){if(h=Math.floor(.5*(c+d)),r=t[Math.max(0,h-1)][i],s=t[h][i],a=t[Math.min(t.length-1,h+1)][i],0==o(s,e))return h;if(o(r,e)<0&&o(s,e)>0)return\"before\"==n?Math.max(0,h-1):h;if(o(s,e)<0&&o(a,e)>0)return\"before\"==n?h:Math.min(t.length-1,h+1);o(s,e)<0?d=h+1:c=h-1,l++}return-1},bridgeObject:Kh,copyAndExtendArray:Sh,copyArray:Th,deepExtend:Ch,deepObjectAssign:nh,easingFunctions:Zh,equalArray:function(t,e){if(t.length!==e.length)return!1;for(var i=0,n=t.length;i<n;i++)if(t[i]!=e[i])return!1;return!0},extend:xh,fillIfDefined:_h,forEach:Dh,getAbsoluteLeft:Mh,getAbsoluteRight:function(t){return t.getBoundingClientRect().right},getAbsoluteTop:Ph,getScrollBarWidth:function(){var t=document.createElement(\"p\");t.style.width=\"100%\",t.style.height=\"200px\";var e=document.createElement(\"div\");e.style.position=\"absolute\",e.style.top=\"0px\",e.style.left=\"0px\",e.style.visibility=\"hidden\",e.style.width=\"200px\",e.style.height=\"150px\",e.style.overflow=\"hidden\",e.appendChild(t),document.body.appendChild(e);var i=t.offsetWidth;e.style.overflow=\"scroll\";var n=t.offsetWidth;return i==n&&(n=e.clientWidth),document.body.removeChild(e),i-n},getTarget:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window.event,e=null;return t&&(t.target?e=t.target:t.srcElement&&(e=t.srcElement)),e instanceof Element&&(null==e.nodeType||3!=e.nodeType||(e=e.parentNode)instanceof Element)?e:null},getType:function(t){var e=go(t);return\"object\"===e?null===t?\"null\":t instanceof Boolean?\"Boolean\":t instanceof Number?\"Number\":t instanceof String?\"String\":So(t)?\"Array\":t instanceof Date?\"Date\":\"Object\":\"number\"===e?\"Number\":\"boolean\"===e?\"Boolean\":\"string\"===e?\"String\":void 0===e?\"undefined\":e},hasParent:function(t,e){for(var i=t;i;){if(i===e)return!0;if(!i.parentNode)return!1;i=i.parentNode}return!1},hexToHSV:Uh,hexToRGB:Ah,insertSort:function(t,e){for(var i=0;i<t.length;i++){var n=t[i],o=void 0;for(o=i;o>0&&e(n,t[o-1])<0;o--)t[o]=t[o-1];t[o]=n}return t},isDate:function(t){if(t instanceof Date)return!0;if(bh(t)){if(uh.exec(t))return!0;if(!isNaN(Date.parse(t)))return!0}return!1},isNumber:yh,isObject:wh,isString:bh,isValidHex:Yh,isValidRGB:Xh,isValidRGBA:Gh,mergeOptions:$h,option:Nh,overrideOpacity:Fh,parseColor:Rh,preventDefault:function(t){t||(t=window.event),t&&(t.preventDefault?t.preventDefault():t.returnValue=!1)},pureDeepObjectAssign:ih,recursiveDOMDelete:mh,removeClassName:function(t,e){var i=t.className.split(\" \"),n=e.split(\" \");i=mr(i).call(i,(function(t){return!dr(n).call(n,t)})),t.className=i.join(\" \")},removeCssText:function(t,e){var i=Hh(t.style.cssText),n=Hh(e);for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&delete i[o];t.style.cssText=Wh(i)},removeEventListener:zh,selectiveBridgeObject:function(t,e){if(null!==e&&\"object\"===go(e)){for(var i=Gr(e),n=0;n<t.length;n++)Object.prototype.hasOwnProperty.call(e,t[n])&&\"object\"==go(e[t[n]])&&(i[t[n]]=Kh(e[t[n]]));return i}return null},selectiveDeepExtend:Eh,selectiveExtend:function(t,e){if(!So(t))throw new Error(\"Array with property names expected as first argument\");for(var i=arguments.length,n=new Array(i>2?i-2:0),o=2;o<i;o++)n[o-2]=arguments[o];for(var r=0,s=n;r<s.length;r++)for(var a=s[r],h=0;h<t.length;h++){var l=t[h];a&&Object.prototype.hasOwnProperty.call(a,l)&&(e[l]=a[l])}return e},selectiveNotDeepExtend:Oh,throttle:function(t){var e=!1;return function(){e||(e=!0,requestAnimationFrame((function(){e=!1,t()})))}},toArray:Ih,topMost:Qh,updateProperty:function(t,e,i){return t[e]!==i&&(t[e]=i,!0)}});function pl(t){return _l=t,function(){var t={};xl=0,void(El=_l.charAt(0)),Nl(),\"strict\"===Ol&&(t.strict=!0,Nl());\"graph\"!==Ol&&\"digraph\"!==Ol||(t.type=Ol,Nl());Cl===bl&&(t.id=Ol,Nl());if(\"{\"!=Ol)throw Hl(\"Angle bracket { expected\");if(Nl(),Al(t),\"}\"!=Ol)throw Hl(\"Angle bracket } expected\");if(Nl(),\"\"!==Ol)throw Hl(\"End of file expected\");return Nl(),delete t.node,delete t.edge,delete t.graph,t}()}var vl={fontsize:\"font.size\",fontcolor:\"font.color\",labelfontcolor:\"font.color\",fontname:\"font.face\",color:[\"color.border\",\"color.background\"],fillcolor:\"color.background\",tooltip:\"title\",labeltooltip:\"title\"},gl=Gr(vl);gl.color=\"color.color\",gl.style=\"dashes\";var yl=0,ml=1,bl=2,wl=3,kl={\"{\":!0,\"}\":!0,\"[\":!0,\"]\":!0,\";\":!0,\"=\":!0,\",\":!0,\"->\":!0,\"--\":!0},_l=\"\",xl=0,El=\"\",Ol=\"\",Cl=yl;function Sl(){xl++,El=_l.charAt(xl)}function Tl(){return _l.charAt(xl+1)}function Ml(t){var e=t.charCodeAt(0);return e<47?35===e||46===e:e<59?e>47:e<91?e>64:e<96?95===e:e<123&&e>96}function Pl(t,e){if(t||(t={}),e)for(var i in e)e.hasOwnProperty(i)&&(t[i]=e[i]);return t}function Dl(t,e,i){for(var n=e.split(\".\"),o=t;n.length;){var r=n.shift();n.length?(o[r]||(o[r]={}),o=o[r]):o[r]=i}}function Il(t,e){for(var i,n,o=null,r=[t],s=t;s.parent;)r.push(s.parent),s=s.parent;if(s.nodes)for(i=0,n=s.nodes.length;i<n;i++)if(e.id===s.nodes[i].id){o=s.nodes[i];break}for(o||(o={id:e.id},t.node&&(o.attr=Pl(o.attr,t.node))),i=r.length-1;i>=0;i--){var a,h=r[i];h.nodes||(h.nodes=[]),-1===Hr(a=h.nodes).call(a,o)&&h.nodes.push(o)}e.attr&&(o.attr=Pl(o.attr,e.attr))}function Bl(t,e){if(t.edges||(t.edges=[]),t.edges.push(e),t.edge){var i=Pl({},t.edge);e.attr=Pl(i,e.attr)}}function zl(t,e,i,n,o){var r={from:e,to:i,type:n};return t.edge&&(r.attr=Pl({},t.edge)),r.attr=Pl(r.attr||{},o),null!=o&&o.hasOwnProperty(\"arrows\")&&null!=o.arrows&&(r.arrows={to:{enabled:!0,type:o.arrows.type}},o.arrows=null),r}function Nl(){for(Cl=yl,Ol=\"\";\" \"===El||\"\\t\"===El||\"\\n\"===El||\"\\r\"===El;)Sl();do{var t=!1;if(\"#\"===El){for(var e=xl-1;\" \"===_l.charAt(e)||\"\\t\"===_l.charAt(e);)e--;if(\"\\n\"===_l.charAt(e)||\"\"===_l.charAt(e)){for(;\"\"!=El&&\"\\n\"!=El;)Sl();t=!0}}if(\"/\"===El&&\"/\"===Tl()){for(;\"\"!=El&&\"\\n\"!=El;)Sl();t=!0}if(\"/\"===El&&\"*\"===Tl()){for(;\"\"!=El;){if(\"*\"===El&&\"/\"===Tl()){Sl(),Sl();break}Sl()}t=!0}for(;\" \"===El||\"\\t\"===El||\"\\n\"===El||\"\\r\"===El;)Sl()}while(t);if(\"\"!==El){var i=El+Tl();if(kl[i])return Cl=ml,Ol=i,Sl(),void Sl();if(kl[El])return Cl=ml,Ol=El,void Sl();if(Ml(El)||\"-\"===El){for(Ol+=El,Sl();Ml(El);)Ol+=El,Sl();return\"false\"===Ol?Ol=!1:\"true\"===Ol?Ol=!0:isNaN(Number(Ol))||(Ol=Number(Ol)),void(Cl=bl)}if('\"'===El){for(Sl();\"\"!=El&&('\"'!=El||'\"'===El&&'\"'===Tl());)'\"'===El?(Ol+=El,Sl()):\"\\\\\"===El&&\"n\"===Tl()?(Ol+=\"\\n\",Sl()):Ol+=El,Sl();if('\"'!=El)throw Hl('End of string \" expected');return Sl(),void(Cl=bl)}for(Cl=wl;\"\"!=El;)Ol+=El,Sl();throw new SyntaxError('Syntax error in part \"'+Wl(Ol,30)+'\"')}Cl=ml}function Al(t){for(;\"\"!==Ol&&\"}\"!=Ol;)Fl(t),\";\"===Ol&&Nl()}function Fl(t){var e=jl(t);if(e)Rl(t,e);else if(!function(t){if(\"node\"===Ol)return Nl(),t.node=Ll(),\"node\";if(\"edge\"===Ol)return Nl(),t.edge=Ll(),\"edge\";if(\"graph\"===Ol)return Nl(),t.graph=Ll(),\"graph\";return null}(t)){if(Cl!=bl)throw Hl(\"Identifier expected\");var i=Ol;if(Nl(),\"=\"===Ol){if(Nl(),Cl!=bl)throw Hl(\"Identifier expected\");t[i]=Ol,Nl()}else!function(t,e){var i={id:e},n=Ll();n&&(i.attr=n);Il(t,i),Rl(t,e)}(t,i)}}function jl(t){var e=null;if(\"subgraph\"===Ol&&((e={}).type=\"subgraph\",Nl(),Cl===bl&&(e.id=Ol,Nl())),\"{\"===Ol){if(Nl(),e||(e={}),e.parent=t,e.node=t.node,e.edge=t.edge,e.graph=t.graph,Al(e),\"}\"!=Ol)throw Hl(\"Angle bracket } expected\");Nl(),delete e.node,delete e.edge,delete e.graph,delete e.parent,t.subgraphs||(t.subgraphs=[]),t.subgraphs.push(e)}return e}function Rl(t,e){for(;\"->\"===Ol||\"--\"===Ol;){var i,n=Ol;Nl();var o=jl(t);if(o)i=o;else{if(Cl!=bl)throw Hl(\"Identifier or subgraph expected\");Il(t,{id:i=Ol}),Nl()}Bl(t,zl(t,e,i,n,Ll())),e=i}}function Ll(){for(var t,e,i=null,n={dashed:!0,solid:!1,dotted:[1,5]},o={dot:\"circle\",box:\"box\",crow:\"crow\",curve:\"curve\",icurve:\"inv_curve\",normal:\"triangle\",inv:\"inv_triangle\",diamond:\"diamond\",tee:\"bar\",vee:\"vee\"},r=new Array,s=new Array;\"[\"===Ol;){for(Nl(),i={};\"\"!==Ol&&\"]\"!=Ol;){if(Cl!=bl)throw Hl(\"Attribute name expected\");var a=Ol;if(Nl(),\"=\"!=Ol)throw Hl(\"Equal sign = expected\");if(Nl(),Cl!=bl)throw Hl(\"Attribute value expected\");var h=Ol;\"style\"===a&&(h=n[h]),\"arrowhead\"===a&&(a=\"arrows\",h={to:{enabled:!0,type:o[h]}}),\"arrowtail\"===a&&(a=\"arrows\",h={from:{enabled:!0,type:o[h]}}),r.push({attr:i,name:a,value:h}),s.push(a),Nl(),\",\"==Ol&&Nl()}if(\"]\"!=Ol)throw Hl(\"Bracket ] expected\");Nl()}if(dr(s).call(s,\"dir\")){var l={arrows:{}};for(t=0;t<r.length;t++)if(\"arrows\"===r[t].name)if(null!=r[t].value.to)l.arrows.to=t;else{if(null==r[t].value.from)throw Hl(\"Invalid value of arrows\");l.arrows.from=t}else\"dir\"===r[t].name&&(l.dir=t);var d,c,u=r[l.dir].value;if(!dr(s).call(s,\"arrows\"))if(\"both\"===u)r.push({attr:r[l.dir].attr,name:\"arrows\",value:{to:{enabled:!0}}}),l.arrows.to=r.length-1,r.push({attr:r[l.dir].attr,name:\"arrows\",value:{from:{enabled:!0}}}),l.arrows.from=r.length-1;else if(\"forward\"===u)r.push({attr:r[l.dir].attr,name:\"arrows\",value:{to:{enabled:!0}}}),l.arrows.to=r.length-1;else if(\"back\"===u)r.push({attr:r[l.dir].attr,name:\"arrows\",value:{from:{enabled:!0}}}),l.arrows.from=r.length-1;else{if(\"none\"!==u)throw Hl('Invalid dir type \"'+u+'\"');r.push({attr:r[l.dir].attr,name:\"arrows\",value:\"\"}),l.arrows.to=r.length-1}if(\"both\"===u)l.arrows.to&&l.arrows.from?(c=r[l.arrows.to].value.to.type,d=r[l.arrows.from].value.from.type,r[l.arrows.to]={attr:r[l.arrows.to].attr,name:r[l.arrows.to].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}},er(r).call(r,l.arrows.from,1)):l.arrows.to?(c=r[l.arrows.to].value.to.type,d=\"arrow\",r[l.arrows.to]={attr:r[l.arrows.to].attr,name:r[l.arrows.to].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}}):l.arrows.from&&(c=\"arrow\",d=r[l.arrows.from].value.from.type,r[l.arrows.from]={attr:r[l.arrows.from].attr,name:r[l.arrows.from].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}});else if(\"back\"===u)l.arrows.to&&l.arrows.from?(c=\"\",d=r[l.arrows.from].value.from.type,r[l.arrows.from]={attr:r[l.arrows.from].attr,name:r[l.arrows.from].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}}):l.arrows.to?(c=\"\",d=\"arrow\",l.arrows.from=l.arrows.to,r[l.arrows.from]={attr:r[l.arrows.from].attr,name:r[l.arrows.from].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}}):l.arrows.from&&(c=\"\",d=r[l.arrows.from].value.from.type,r[l.arrows.to]={attr:r[l.arrows.from].attr,name:r[l.arrows.from].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}}),r[l.arrows.from]={attr:r[l.arrows.from].attr,name:r[l.arrows.from].name,value:{from:{enabled:!0,type:r[l.arrows.from].value.from.type}}};else if(\"none\"===u){var f;r[f=l.arrows.to?l.arrows.to:l.arrows.from]={attr:r[f].attr,name:r[f].name,value:\"\"}}else{if(\"forward\"!==u)throw Hl('Invalid dir type \"'+u+'\"');l.arrows.to&&l.arrows.from||l.arrows.to?(c=r[l.arrows.to].value.to.type,d=\"\",r[l.arrows.to]={attr:r[l.arrows.to].attr,name:r[l.arrows.to].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}}):l.arrows.from&&(c=\"arrow\",d=\"\",l.arrows.to=l.arrows.from,r[l.arrows.to]={attr:r[l.arrows.to].attr,name:r[l.arrows.to].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}}),r[l.arrows.to]={attr:r[l.arrows.to].attr,name:r[l.arrows.to].name,value:{to:{enabled:!0,type:r[l.arrows.to].value.to.type}}}}er(r).call(r,l.dir,1)}if(dr(s).call(s,\"penwidth\")){var p=[];for(e=r.length,t=0;t<e;t++)\"width\"!==r[t].name&&(\"penwidth\"===r[t].name&&(r[t].name=\"width\"),p.push(r[t]));r=p}for(e=r.length,t=0;t<e;t++)Dl(r[t].attr,r[t].name,r[t].value);return i}function Hl(t){return new SyntaxError(t+', got \"'+Wl(Ol,30)+'\" (char '+xl+\")\")}function Wl(t,e){return t.length<=e?t:t.substr(0,27)+\"...\"}function ql(t,e,i){for(var n=e.split(\".\"),o=n.pop(),r=t,s=0;s<n.length;s++){var a=n[s];a in r||(r[a]={}),r=r[a]}return r[o]=i,t}function Vl(t,e){var i={};for(var n in t)if(t.hasOwnProperty(n)){var o=e[n];So(o)?Wo(o).call(o,(function(e){ql(i,e,t[n])})):ql(i,\"string\"==typeof o?o:n,t[n])}return i}function Ul(t){var e,i=pl(t),n={nodes:[],edges:[],options:{}};i.nodes&&Wo(e=i.nodes).call(e,(function(t){var e={id:t.id,label:String(t.label||t.id)};Pl(e,Vl(t.attr,vl)),e.image&&(e.shape=\"image\"),n.nodes.push(e)}));if(i.edges){var o,r=function(t){var e={from:t.from,to:t.to};return Pl(e,Vl(t.attr,gl)),null==e.arrows&&\"->\"===t.type&&(e.arrows=\"to\"),e};Wo(o=i.edges).call(o,(function(t){var e,i,o,s,a,h,l;(e=t.from instanceof Object?t.from.nodes:{id:t.from},i=t.to instanceof Object?t.to.nodes:{id:t.to},t.from instanceof Object&&t.from.edges)&&Wo(o=t.from.edges).call(o,(function(t){var e=r(t);n.edges.push(e)}));(a=i,h=function(e,i){var o=zl(n,e.id,i.id,t.type,t.attr),s=r(o);n.edges.push(s)},So(s=e)?Wo(s).call(s,(function(t){So(a)?Wo(a).call(a,(function(e){h(t,e)})):h(t,a)})):So(a)?Wo(a).call(a,(function(t){h(s,t)})):h(s,a),t.to instanceof Object&&t.to.edges)&&Wo(l=t.to.edges).call(l,(function(t){var e=r(t);n.edges.push(e)}))}))}return i.attr&&(n.options=i.attr),n}var Yl=Object.freeze({__proto__:null,parseDOT:pl,DOTToGraph:Ul});function Xl(t,e){var i,n={edges:{inheritColor:!1},nodes:{fixed:!1,parseColor:!1}};null!=e&&(null!=e.fixed&&(n.nodes.fixed=e.fixed),null!=e.parseColor&&(n.nodes.parseColor=e.parseColor),null!=e.inheritColor&&(n.edges.inheritColor=e.inheritColor));var o=t.edges,r=Io(o).call(o,(function(t){var e={from:t.source,id:t.id,to:t.target};return null!=t.attributes&&(e.attributes=t.attributes),null!=t.label&&(e.label=t.label),null!=t.attributes&&null!=t.attributes.title&&(e.title=t.attributes.title),\"Directed\"===t.type&&(e.arrows=\"to\"),t.color&&!1===n.edges.inheritColor&&(e.color=t.color),e}));return{nodes:Io(i=t.nodes).call(i,(function(t){var e={id:t.id,fixed:n.nodes.fixed&&null!=t.x&&null!=t.y};return null!=t.attributes&&(e.attributes=t.attributes),null!=t.label&&(e.label=t.label),null!=t.size&&(e.size=t.size),null!=t.attributes&&null!=t.attributes.title&&(e.title=t.attributes.title),null!=t.title&&(e.title=t.title),null!=t.x&&(e.x=t.x),null!=t.y&&(e.y=t.y),null!=t.color&&(!0===n.nodes.parseColor?e.color=t.color:e.color={background:t.color,border:t.color,highlight:{background:t.color,border:t.color},hover:{background:t.color,border:t.color}}),e})),edges:r}}var Gl=Object.freeze({__proto__:null,parseGephi:Xl}),Kl=Object.freeze({__proto__:null,en:{addDescription:\"Click in an empty space to place a new node.\",addEdge:\"Add Edge\",addNode:\"Add Node\",back:\"Back\",close:\"Close\",createEdgeError:\"Cannot link edges to a cluster.\",del:\"Delete selected\",deleteClusterError:\"Clusters cannot be deleted.\",edgeDescription:\"Click on a node and drag the edge to another node to connect them.\",edit:\"Edit\",editClusterError:\"Clusters cannot be edited.\",editEdge:\"Edit Edge\",editEdgeDescription:\"Click on the control points and drag them to a node to connect to it.\",editNode:\"Edit Node\"},de:{addDescription:\"Klicke auf eine freie Stelle, um einen neuen Knoten zu plazieren.\",addEdge:\"Kante hinzufügen\",addNode:\"Knoten hinzufügen\",back:\"Zurück\",close:\"Schließen\",createEdgeError:\"Es ist nicht möglich, Kanten mit Clustern zu verbinden.\",del:\"Lösche Auswahl\",deleteClusterError:\"Cluster können nicht gelöscht werden.\",edgeDescription:\"Klicke auf einen Knoten und ziehe die Kante zu einem anderen Knoten, um diese zu verbinden.\",edit:\"Editieren\",editClusterError:\"Cluster können nicht editiert werden.\",editEdge:\"Kante editieren\",editEdgeDescription:\"Klicke auf die Verbindungspunkte und ziehe diese auf einen Knoten, um sie zu verbinden.\",editNode:\"Knoten editieren\"},es:{addDescription:\"Haga clic en un lugar vacío para colocar un nuevo nodo.\",addEdge:\"Añadir arista\",addNode:\"Añadir nodo\",back:\"Atrás\",close:\"Cerrar\",createEdgeError:\"No se puede conectar una arista a un grupo.\",del:\"Eliminar selección\",deleteClusterError:\"No es posible eliminar grupos.\",edgeDescription:\"Haga clic en un nodo y arrastre la arista hacia otro nodo para conectarlos.\",edit:\"Editar\",editClusterError:\"No es posible editar grupos.\",editEdge:\"Editar arista\",editEdgeDescription:\"Haga clic en un punto de control y arrastrelo a un nodo para conectarlo.\",editNode:\"Editar nodo\"},it:{addDescription:\"Clicca per aggiungere un nuovo nodo\",addEdge:\"Aggiungi un vertice\",addNode:\"Aggiungi un nodo\",back:\"Indietro\",close:\"Chiudere\",createEdgeError:\"Non si possono collegare vertici ad un cluster\",del:\"Cancella la selezione\",deleteClusterError:\"I cluster non possono essere cancellati\",edgeDescription:\"Clicca su un nodo e trascinalo ad un altro nodo per connetterli.\",edit:\"Modifica\",editClusterError:\"I clusters non possono essere modificati.\",editEdge:\"Modifica il vertice\",editEdgeDescription:\"Clicca sui Punti di controllo e trascinali ad un nodo per connetterli.\",editNode:\"Modifica il nodo\"},nl:{addDescription:\"Klik op een leeg gebied om een nieuwe node te maken.\",addEdge:\"Link toevoegen\",addNode:\"Node toevoegen\",back:\"Terug\",close:\"Sluiten\",createEdgeError:\"Kan geen link maken naar een cluster.\",del:\"Selectie verwijderen\",deleteClusterError:\"Clusters kunnen niet worden verwijderd.\",edgeDescription:\"Klik op een node en sleep de link naar een andere node om ze te verbinden.\",edit:\"Wijzigen\",editClusterError:\"Clusters kunnen niet worden aangepast.\",editEdge:\"Link wijzigen\",editEdgeDescription:\"Klik op de verbindingspunten en sleep ze naar een node om daarmee te verbinden.\",editNode:\"Node wijzigen\"},pt:{addDescription:\"Clique em um espaço em branco para adicionar um novo nó\",addEdge:\"Adicionar aresta\",addNode:\"Adicionar nó\",back:\"Voltar\",close:\"Fechar\",createEdgeError:\"Não foi possível linkar arestas a um cluster.\",del:\"Remover selecionado\",deleteClusterError:\"Clusters não puderam ser removidos.\",edgeDescription:\"Clique em um nó e arraste a aresta até outro nó para conectá-los\",edit:\"Editar\",editClusterError:\"Clusters não puderam ser editados.\",editEdge:\"Editar aresta\",editEdgeDescription:\"Clique nos pontos de controle e os arraste para um nó para conectá-los\",editNode:\"Editar nó\"},ru:{addDescription:\"Кликните в свободное место, чтобы добавить новый узел.\",addEdge:\"Добавить ребро\",addNode:\"Добавить узел\",back:\"Назад\",close:\"Закрывать\",createEdgeError:\"Невозможно соединить ребра в кластер.\",del:\"Удалить выбранное\",deleteClusterError:\"Кластеры не могут быть удалены\",edgeDescription:\"Кликните на узел и протяните ребро к другому узлу, чтобы соединить их.\",edit:\"Редактировать\",editClusterError:\"Кластеры недоступны для редактирования.\",editEdge:\"Редактировать ребро\",editEdgeDescription:\"Кликните на контрольные точки и перетащите их в узел, чтобы подключиться к нему.\",editNode:\"Редактировать узел\"},cn:{addDescription:\"单击空白处放置新节点。\",addEdge:\"添加连接线\",addNode:\"添加节点\",back:\"返回\",close:\"關閉\",createEdgeError:\"无法将连接线连接到群集。\",del:\"删除选定\",deleteClusterError:\"无法删除群集。\",edgeDescription:\"单击某个节点并将该连接线拖动到另一个节点以连接它们。\",edit:\"编辑\",editClusterError:\"无法编辑群集。\",editEdge:\"编辑连接线\",editEdgeDescription:\"单击控制节点并将它们拖到节点上连接。\",editNode:\"编辑节点\"},uk:{addDescription:\"Kлікніть на вільне місце, щоб додати новий вузол.\",addEdge:\"Додати край\",addNode:\"Додати вузол\",back:\"Назад\",close:\"Закрити\",createEdgeError:\"Не можливо об'єднати краї в групу.\",del:\"Видалити обране\",deleteClusterError:\"Групи не можуть бути видалені.\",edgeDescription:\"Клікніть на вузол і перетягніть край до іншого вузла, щоб їх з'єднати.\",edit:\"Редагувати\",editClusterError:\"Групи недоступні для редагування.\",editEdge:\"Редагувати край\",editEdgeDescription:\"Клікніть на контрольні точки і перетягніть їх у вузол, щоб підключитися до нього.\",editNode:\"Редагувати вузол\"},fr:{addDescription:\"Cliquez dans un endroit vide pour placer un nœud.\",addEdge:\"Ajouter un lien\",addNode:\"Ajouter un nœud\",back:\"Retour\",close:\"Fermer\",createEdgeError:\"Impossible de créer un lien vers un cluster.\",del:\"Effacer la sélection\",deleteClusterError:\"Les clusters ne peuvent pas être effacés.\",edgeDescription:\"Cliquez sur un nœud et glissez le lien vers un autre nœud pour les connecter.\",edit:\"Éditer\",editClusterError:\"Les clusters ne peuvent pas être édités.\",editEdge:\"Éditer le lien\",editEdgeDescription:\"Cliquez sur les points de contrôle et glissez-les pour connecter un nœud.\",editNode:\"Éditer le nœud\"},cs:{addDescription:\"Kluknutím do prázdného prostoru můžete přidat nový vrchol.\",addEdge:\"Přidat hranu\",addNode:\"Přidat vrchol\",back:\"Zpět\",close:\"Zavřít\",createEdgeError:\"Nelze připojit hranu ke shluku.\",del:\"Smazat výběr\",deleteClusterError:\"Nelze mazat shluky.\",edgeDescription:\"Přetažením z jednoho vrcholu do druhého můžete spojit tyto vrcholy novou hranou.\",edit:\"Upravit\",editClusterError:\"Nelze upravovat shluky.\",editEdge:\"Upravit hranu\",editEdgeDescription:\"Přetažením kontrolního vrcholu hrany ji můžete připojit k jinému vrcholu.\",editNode:\"Upravit vrchol\"}});var $l=function(){function t(){Nn(this,t),this.NUM_ITERATIONS=4,this.image=new Image,this.canvas=document.createElement(\"canvas\")}return Fn(t,[{key:\"init\",value:function(){if(!this.initialized()){this.src=this.image.src;var t=this.image.width,e=this.image.height;this.width=t,this.height=e;var i=Math.floor(e/2),n=Math.floor(e/4),o=Math.floor(e/8),r=Math.floor(e/16),s=Math.floor(t/2),a=Math.floor(t/4),h=Math.floor(t/8),l=Math.floor(t/16);this.canvas.width=3*a,this.canvas.height=i,this.coordinates=[[0,0,s,i],[s,0,a,n],[s,n,h,o],[5*h,n,l,r]],this._fillMipMap()}}},{key:\"initialized\",value:function(){return void 0!==this.coordinates}},{key:\"_fillMipMap\",value:function(){var t=this.canvas.getContext(\"2d\"),e=this.coordinates[0];t.drawImage(this.image,e[0],e[1],e[2],e[3]);for(var i=1;i<this.NUM_ITERATIONS;i++){var n=this.coordinates[i-1],o=this.coordinates[i];t.drawImage(this.canvas,n[0],n[1],n[2],n[3],o[0],o[1],o[2],o[3])}}},{key:\"drawImageAtPosition\",value:function(t,e,i,n,o,r){if(this.initialized())if(e>2){e*=.5;for(var s=0;e>2&&s<this.NUM_ITERATIONS;)e*=.5,s+=1;s>=this.NUM_ITERATIONS&&(s=this.NUM_ITERATIONS-1);var a=this.coordinates[s];t.drawImage(this.canvas,a[0],a[1],a[2],a[3],i,n,o,r)}else t.drawImage(this.image,i,n,o,r)}}]),t}(),Zl=function(){function t(e){Nn(this,t),this.images={},this.imageBroken={},this.callback=e}return Fn(t,[{key:\"_tryloadBrokenUrl\",value:function(t,e,i){void 0!==t&&void 0!==i&&(void 0!==e?(i.image.onerror=function(){console.error(\"Could not load brokenImage:\",e)},i.image.src=e):console.warn(\"No broken url image defined\"))}},{key:\"_redrawWithImage\",value:function(t){this.callback&&this.callback(t)}},{key:\"load\",value:function(t,e){var i=this,n=this.images[t];if(n)return n;var o=new $l;return this.images[t]=o,o.image.onload=function(){i._fixImageCoordinates(o.image),o.init(),i._redrawWithImage(o)},o.image.onerror=function(){console.error(\"Could not load image:\",t),i._tryloadBrokenUrl(t,e,o)},o.image.src=t,o}},{key:\"_fixImageCoordinates\",value:function(t){0===t.width&&(document.body.appendChild(t),t.width=t.offsetWidth,t.height=t.offsetHeight,document.body.removeChild(t))}}]),t}(),Ql=!h((function(){return Object.isExtensible(Object.preventExtensions({}))})),Jl=n((function(t){var e=ut.f,i=!1,n=H(\"meta\"),o=0,r=Object.isExtensible||function(){return!0},s=function(t){e(t,n,{value:{objectID:\"O\"+o++,weakData:{}}})},a=t.exports={enable:function(){a.enable=function(){},i=!0;var t=Ai.f,e=[].splice,o={};o[n]=1,t(o).length&&(Ai.f=function(i){for(var o=t(i),r=0,s=o.length;r<s;r++)if(o[r]===n){e.call(o,r,1);break}return o},gt({target:\"Object\",stat:!0,forced:!0},{getOwnPropertyNames:Li.f}))},fastKey:function(t,e){if(!w(t))return\"symbol\"==typeof t?t:(\"string\"==typeof t?\"S\":\"P\")+t;if(!j(t,n)){if(!r(t))return\"F\";if(!e)return\"E\";s(t)}return t[n].objectID},getWeakData:function(t,e){if(!j(t,n)){if(!r(t))return!0;if(!e)return!1;s(t)}return t[n].weakData},onFreeze:function(t){return Ql&&i&&r(t)&&!j(t,n)&&s(t),t}};St[n]=!0}));Jl.enable,Jl.fastKey,Jl.getWeakData,Jl.onFreeze;var td=function(t,e){this.stopped=t,this.result=e},ed=function(t,e,i){var n,o,r,s,a,h,l,d=i&&i.that,c=!(!i||!i.AS_ENTRIES),u=!(!i||!i.IS_ITERATOR),f=!(!i||!i.INTERRUPTED),p=lt(e,d,1+c+f),v=function(t){return n&&di(n),new td(!0,t)},g=function(t){return c?(dt(t),f?p(t[0],t[1],v):p(t[0],t[1])):f?p(t,v):p(t)};if(u)n=t;else{if(\"function\"!=typeof(o=yi(t)))throw TypeError(\"Target is not iterable\");if(pi(o)){for(r=0,s=kt(t.length);s>r;r++)if((a=g(t[r]))&&a instanceof td)return a;return new td(!1)}n=o.call(t)}for(h=n.next;!(l=h.call(n)).done;){try{a=g(l.value)}catch(t){throw di(n),t}if(\"object\"==typeof a&&a&&a instanceof td)return a}return new td(!1)},id=function(t,e,i){if(!(t instanceof e))throw TypeError(\"Incorrect \"+(i?i+\" \":\"\")+\"invocation\");return t},nd=ut.f,od=Gi.forEach,rd=we.set,sd=we.getterFor,ad=function(t,e,i){var n,o=-1!==t.indexOf(\"Map\"),r=-1!==t.indexOf(\"Weak\"),s=o?\"set\":\"add\",d=a[t],c=d&&d.prototype,u={};if(l&&\"function\"==typeof d&&(r||c.forEach&&!h((function(){(new d).entries().next()})))){n=e((function(e,i){rd(id(e,n,t),{type:t,collection:new d}),null!=i&&ed(i,e[s],{that:e,AS_ENTRIES:o})}));var f=sd(t);od([\"add\",\"clear\",\"delete\",\"forEach\",\"get\",\"has\",\"set\",\"keys\",\"values\",\"entries\"],(function(t){var e=\"add\"==t||\"set\"==t;!(t in c)||r&&\"clear\"==t||ft(n.prototype,t,(function(i,n){var o=f(this).collection;if(!e&&r&&!w(i))return\"get\"==t&&void 0;var s=o[t](0===i?0:i,n);return e?this:s}))})),r||nd(n.prototype,\"size\",{configurable:!0,get:function(){return f(this).collection.size}})}else n=i.getConstructor(e,t,o,s),Jl.enable();return Ye(n,t,!1,!0),u[t]=n,gt({global:!0,forced:!0},u),r||i.setStrong(n,t,o),n},hd=function(t,e,i){for(var n in e)i&&i.unsafe&&t[n]?t[n]=e[n]:Ze(t,n,e[n],i);return t},ld=U(\"species\"),dd=ut.f,cd=Jl.fastKey,ud=we.set,fd=we.getterFor,pd={getConstructor:function(t,e,i,n){var o=t((function(t,r){id(t,o,e),ud(t,{type:e,index:Fe(null),first:void 0,last:void 0,size:0}),l||(t.size=0),null!=r&&ed(r,t[n],{that:t,AS_ENTRIES:i})})),r=fd(e),s=function(t,e,i){var n,o,s=r(t),h=a(t,e);return h?h.value=i:(s.last=h={index:o=cd(e,!0),key:e,value:i,previous:n=s.last,next:void 0,removed:!1},s.first||(s.first=h),n&&(n.next=h),l?s.size++:t.size++,\"F\"!==o&&(s.index[o]=h)),t},a=function(t,e){var i,n=r(t),o=cd(e);if(\"F\"!==o)return n.index[o];for(i=n.first;i;i=i.next)if(i.key==e)return i};return hd(o.prototype,{clear:function(){for(var t=r(this),e=t.index,i=t.first;i;)i.removed=!0,i.previous&&(i.previous=i.previous.next=void 0),delete e[i.index],i=i.next;t.first=t.last=void 0,l?t.size=0:this.size=0},delete:function(t){var e=this,i=r(e),n=a(e,t);if(n){var o=n.next,s=n.previous;delete i.index[n.index],n.removed=!0,s&&(s.next=o),o&&(o.previous=s),i.first==n&&(i.first=o),i.last==n&&(i.last=s),l?i.size--:e.size--}return!!n},forEach:function(t){for(var e,i=r(this),n=lt(t,arguments.length>1?arguments[1]:void 0,3);e=e?e.next:i.first;)for(n(e.value,e.key,this);e&&e.removed;)e=e.previous},has:function(t){return!!a(this,t)}}),hd(o.prototype,i?{get:function(t){var e=a(this,t);return e&&e.value},set:function(t,e){return s(this,0===t?0:t,e)}}:{add:function(t){return s(this,t=0===t?0:t,t)}}),l&&dd(o.prototype,\"size\",{get:function(){return r(this).size}}),o},setStrong:function(t,e,i){var n=e+\" Iterator\",o=fd(e),r=fd(n);ri(t,e,(function(t,e){ud(this,{type:n,target:t,state:o(t),kind:e,last:void 0})}),(function(){for(var t=r(this),e=t.kind,i=t.last;i&&i.removed;)i=i.previous;return t.target&&(t.last=i=i?i.next:t.state.first)?\"keys\"==e?{value:i.key,done:!1}:\"values\"==e?{value:i.value,done:!1}:{value:[i.key,i.value],done:!1}:(t.target=void 0,{value:void 0,done:!0})}),i?\"entries\":\"values\",!i,!0),function(t){var e=x(t),i=ut.f;l&&e&&!e[ld]&&i(e,ld,{configurable:!0,get:function(){return this}})}(e)}};ad(\"Map\",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),pd);var vd=k.Map,gd=function(){function t(){Nn(this,t),this.clear(),this._defaultIndex=0,this._groupIndex=0,this._defaultGroups=[{border:\"#2B7CE9\",background:\"#97C2FC\",highlight:{border:\"#2B7CE9\",background:\"#D2E5FF\"},hover:{border:\"#2B7CE9\",background:\"#D2E5FF\"}},{border:\"#FFA500\",background:\"#FFFF00\",highlight:{border:\"#FFA500\",background:\"#FFFFA3\"},hover:{border:\"#FFA500\",background:\"#FFFFA3\"}},{border:\"#FA0A10\",background:\"#FB7E81\",highlight:{border:\"#FA0A10\",background:\"#FFAFB1\"},hover:{border:\"#FA0A10\",background:\"#FFAFB1\"}},{border:\"#41A906\",background:\"#7BE141\",highlight:{border:\"#41A906\",background:\"#A1EC76\"},hover:{border:\"#41A906\",background:\"#A1EC76\"}},{border:\"#E129F0\",background:\"#EB7DF4\",highlight:{border:\"#E129F0\",background:\"#F0B3F5\"},hover:{border:\"#E129F0\",background:\"#F0B3F5\"}},{border:\"#7C29F0\",background:\"#AD85E4\",highlight:{border:\"#7C29F0\",background:\"#D3BDF0\"},hover:{border:\"#7C29F0\",background:\"#D3BDF0\"}},{border:\"#C37F00\",background:\"#FFA807\",highlight:{border:\"#C37F00\",background:\"#FFCA66\"},hover:{border:\"#C37F00\",background:\"#FFCA66\"}},{border:\"#4220FB\",background:\"#6E6EFD\",highlight:{border:\"#4220FB\",background:\"#9B9BFD\"},hover:{border:\"#4220FB\",background:\"#9B9BFD\"}},{border:\"#FD5A77\",background:\"#FFC0CB\",highlight:{border:\"#FD5A77\",background:\"#FFD1D9\"},hover:{border:\"#FD5A77\",background:\"#FFD1D9\"}},{border:\"#4AD63A\",background:\"#C2FABC\",highlight:{border:\"#4AD63A\",background:\"#E6FFE3\"},hover:{border:\"#4AD63A\",background:\"#E6FFE3\"}},{border:\"#990000\",background:\"#EE0000\",highlight:{border:\"#BB0000\",background:\"#FF3333\"},hover:{border:\"#BB0000\",background:\"#FF3333\"}},{border:\"#FF6000\",background:\"#FF6000\",highlight:{border:\"#FF6000\",background:\"#FF6000\"},hover:{border:\"#FF6000\",background:\"#FF6000\"}},{border:\"#97C2FC\",background:\"#2B7CE9\",highlight:{border:\"#D2E5FF\",background:\"#2B7CE9\"},hover:{border:\"#D2E5FF\",background:\"#2B7CE9\"}},{border:\"#399605\",background:\"#255C03\",highlight:{border:\"#399605\",background:\"#255C03\"},hover:{border:\"#399605\",background:\"#255C03\"}},{border:\"#B70054\",background:\"#FF007E\",highlight:{border:\"#B70054\",background:\"#FF007E\"},hover:{border:\"#B70054\",background:\"#FF007E\"}},{border:\"#AD85E4\",background:\"#7C29F0\",highlight:{border:\"#D3BDF0\",background:\"#7C29F0\"},hover:{border:\"#D3BDF0\",background:\"#7C29F0\"}},{border:\"#4557FA\",background:\"#000EA1\",highlight:{border:\"#6E6EFD\",background:\"#000EA1\"},hover:{border:\"#6E6EFD\",background:\"#000EA1\"}},{border:\"#FFC0CB\",background:\"#FD5A77\",highlight:{border:\"#FFD1D9\",background:\"#FD5A77\"},hover:{border:\"#FFD1D9\",background:\"#FD5A77\"}},{border:\"#C2FABC\",background:\"#74D66A\",highlight:{border:\"#E6FFE3\",background:\"#74D66A\"},hover:{border:\"#E6FFE3\",background:\"#74D66A\"}},{border:\"#EE0000\",background:\"#990000\",highlight:{border:\"#FF3333\",background:\"#BB0000\"},hover:{border:\"#FF3333\",background:\"#BB0000\"}}],this.options={},this.defaultOptions={useDefaultGroups:!0},At(this.options,this.defaultOptions)}return Fn(t,[{key:\"setOptions\",value:function(t){var e=[\"useDefaultGroups\"];if(void 0!==t)for(var i in t)if(Object.prototype.hasOwnProperty.call(t,i)&&-1===Hr(e).call(e,i)){var n=t[i];this.add(i,n)}}},{key:\"clear\",value:function(){this._groups=new vd,this._groupNames=[]}},{key:\"get\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this._groups.get(t);if(void 0===i&&e)if(!1===this.options.useDefaultGroups&&this._groupNames.length>0){var n=this._groupIndex%this._groupNames.length;++this._groupIndex,(i={}).color=this._groups.get(this._groupNames[n]),this._groups.set(t,i)}else{var o=this._defaultIndex%this._defaultGroups.length;this._defaultIndex++,(i={}).color=this._defaultGroups[o],this._groups.set(t,i)}return i}},{key:\"add\",value:function(t,e){return this._groups.has(t)||this._groupNames.push(t),this._groups.set(t,e),e}}]),t}();gt({target:\"Number\",stat:!0},{isNaN:function(t){return t!=t}});var yd=k.Number.isNaN,md=a.isFinite,bd=Number.isFinite||function(t){return\"number\"==typeof t&&md(t)};gt({target:\"Number\",stat:!0},{isFinite:bd});var wd=k.Number.isFinite,kd=Gi.some,_d=Ao(\"some\");gt({target:\"Array\",proto:!0,forced:!_d},{some:function(t){return kd(this,t,arguments.length>1?arguments[1]:void 0)}});var xd=Ht(\"Array\").some,Ed=Array.prototype,Od=function(t){var e=t.some;return t===Ed||t instanceof Array&&e===Ed.some?xd:e},Cd=x(\"Reflect\",\"construct\"),Sd=h((function(){function t(){}return!(Cd((function(){}),[],t)instanceof t)})),Td=!h((function(){Cd((function(){}))})),Md=Sd||Td;gt({target:\"Reflect\",stat:!0,forced:Md,sham:Md},{construct:function(t,e){ht(t),dt(e);var i=arguments.length<3?t:ht(arguments[2]);if(Td&&!Sd)return Cd(t,e,i);if(t==i){switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3])}var n=[null];return n.push.apply(n,e),new(Lt.apply(t,n))}var o=i.prototype,r=Fe(w(o)?o:Object.prototype),s=Function.apply.call(t,r,e);return w(s)?s:r}});var Pd=k.Reflect.construct,Dd=n((function(t){t.exports=function(t){if(void 0===t)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return t},t.exports.default=t.exports,t.exports.__esModule=!0})),Id=i(Dd),Bd=Xr;gt({target:\"Object\",stat:!0},{setPrototypeOf:$e});var zd=k.Object.setPrototypeOf,Nd=n((function(t){function e(i,n){return t.exports=e=zd||function(t,e){return t.__proto__=e,t},t.exports.default=t.exports,t.exports.__esModule=!0,e(i,n)}t.exports=e,t.exports.default=t.exports,t.exports.__esModule=!0}));i(Nd);var Ad=i(n((function(t){t.exports=function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Super expression must either be null or a function\");t.prototype=Bd(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&Nd(t,e)},t.exports.default=t.exports,t.exports.__esModule=!0}))),Fd=i(n((function(t){var e=vo.default;t.exports=function(t,i){if(i&&(\"object\"===e(i)||\"function\"==typeof i))return i;if(void 0!==i)throw new TypeError(\"Derived constructors may only return object or undefined\");return Dd(t)},t.exports.default=t.exports,t.exports.__esModule=!0}))),jd=ur,Rd=n((function(t){function e(i){return t.exports=e=zd?jd:function(t){return t.__proto__||jd(t)},t.exports.default=t.exports,t.exports.__esModule=!0,e(i)}t.exports=e,t.exports.default=t.exports,t.exports.__esModule=!0})),Ld=i(Rd),Hd=n((function(t){var e=function(t){var e,i=Object.prototype,n=i.hasOwnProperty,o=\"function\"==typeof Symbol?Symbol:{},r=o.iterator||\"@@iterator\",s=o.asyncIterator||\"@@asyncIterator\",a=o.toStringTag||\"@@toStringTag\";function h(t,e,i){return Object.defineProperty(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{h({},\"\")}catch(t){h=function(t,e,i){return t[e]=i}}function l(t,e,i,n){var o=e&&e.prototype instanceof g?e:g,r=Object.create(o.prototype),s=new T(n||[]);return r._invoke=function(t,e,i){var n=c;return function(o,r){if(n===f)throw new Error(\"Generator is already running\");if(n===p){if(\"throw\"===o)throw r;return P()}for(i.method=o,i.arg=r;;){var s=i.delegate;if(s){var a=O(s,i);if(a){if(a===v)continue;return a}}if(\"next\"===i.method)i.sent=i._sent=i.arg;else if(\"throw\"===i.method){if(n===c)throw n=p,i.arg;i.dispatchException(i.arg)}else\"return\"===i.method&&i.abrupt(\"return\",i.arg);n=f;var h=d(t,e,i);if(\"normal\"===h.type){if(n=i.done?p:u,h.arg===v)continue;return{value:h.arg,done:i.done}}\"throw\"===h.type&&(n=p,i.method=\"throw\",i.arg=h.arg)}}}(t,i,s),r}function d(t,e,i){try{return{type:\"normal\",arg:t.call(e,i)}}catch(t){return{type:\"throw\",arg:t}}}t.wrap=l;var c=\"suspendedStart\",u=\"suspendedYield\",f=\"executing\",p=\"completed\",v={};function g(){}function y(){}function m(){}var b={};b[r]=function(){return this};var w=Object.getPrototypeOf,k=w&&w(w(M([])));k&&k!==i&&n.call(k,r)&&(b=k);var _=m.prototype=g.prototype=Object.create(b);function x(t){[\"next\",\"throw\",\"return\"].forEach((function(e){h(t,e,(function(t){return this._invoke(e,t)}))}))}function E(t,e){function i(o,r,s,a){var h=d(t[o],t,r);if(\"throw\"!==h.type){var l=h.arg,c=l.value;return c&&\"object\"==typeof c&&n.call(c,\"__await\")?e.resolve(c.__await).then((function(t){i(\"next\",t,s,a)}),(function(t){i(\"throw\",t,s,a)})):e.resolve(c).then((function(t){l.value=t,s(l)}),(function(t){return i(\"throw\",t,s,a)}))}a(h.arg)}var o;this._invoke=function(t,n){function r(){return new e((function(e,o){i(t,n,e,o)}))}return o=o?o.then(r,r):r()}}function O(t,i){var n=t.iterator[i.method];if(n===e){if(i.delegate=null,\"throw\"===i.method){if(t.iterator.return&&(i.method=\"return\",i.arg=e,O(t,i),\"throw\"===i.method))return v;i.method=\"throw\",i.arg=new TypeError(\"The iterator does not provide a 'throw' method\")}return v}var o=d(n,t.iterator,i.arg);if(\"throw\"===o.type)return i.method=\"throw\",i.arg=o.arg,i.delegate=null,v;var r=o.arg;return r?r.done?(i[t.resultName]=r.value,i.next=t.nextLoc,\"return\"!==i.method&&(i.method=\"next\",i.arg=e),i.delegate=null,v):r:(i.method=\"throw\",i.arg=new TypeError(\"iterator result is not an object\"),i.delegate=null,v)}function C(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function S(t){var e=t.completion||{};e.type=\"normal\",delete e.arg,t.completion=e}function T(t){this.tryEntries=[{tryLoc:\"root\"}],t.forEach(C,this),this.reset(!0)}function M(t){if(t){var i=t[r];if(i)return i.call(t);if(\"function\"==typeof t.next)return t;if(!isNaN(t.length)){var o=-1,s=function i(){for(;++o<t.length;)if(n.call(t,o))return i.value=t[o],i.done=!1,i;return i.value=e,i.done=!0,i};return s.next=s}}return{next:P}}function P(){return{value:e,done:!0}}return y.prototype=_.constructor=m,m.constructor=y,y.displayName=h(m,a,\"GeneratorFunction\"),t.isGeneratorFunction=function(t){var e=\"function\"==typeof t&&t.constructor;return!!e&&(e===y||\"GeneratorFunction\"===(e.displayName||e.name))},t.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,m):(t.__proto__=m,h(t,a,\"GeneratorFunction\")),t.prototype=Object.create(_),t},t.awrap=function(t){return{__await:t}},x(E.prototype),E.prototype[s]=function(){return this},t.AsyncIterator=E,t.async=function(e,i,n,o,r){void 0===r&&(r=Promise);var s=new E(l(e,i,n,o),r);return t.isGeneratorFunction(i)?s:s.next().then((function(t){return t.done?t.value:s.next()}))},x(_),h(_,a,\"Generator\"),_[r]=function(){return this},_.toString=function(){return\"[object Generator]\"},t.keys=function(t){var e=[];for(var i in t)e.push(i);return e.reverse(),function i(){for(;e.length;){var n=e.pop();if(n in t)return i.value=n,i.done=!1,i}return i.done=!0,i}},t.values=M,T.prototype={constructor:T,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method=\"next\",this.arg=e,this.tryEntries.forEach(S),!t)for(var i in this)\"t\"===i.charAt(0)&&n.call(this,i)&&!isNaN(+i.slice(1))&&(this[i]=e)},stop:function(){this.done=!0;var t=this.tryEntries[0].completion;if(\"throw\"===t.type)throw t.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var i=this;function o(n,o){return a.type=\"throw\",a.arg=t,i.next=n,o&&(i.method=\"next\",i.arg=e),!!o}for(var r=this.tryEntries.length-1;r>=0;--r){var s=this.tryEntries[r],a=s.completion;if(\"root\"===s.tryLoc)return o(\"end\");if(s.tryLoc<=this.prev){var h=n.call(s,\"catchLoc\"),l=n.call(s,\"finallyLoc\");if(h&&l){if(this.prev<s.catchLoc)return o(s.catchLoc,!0);if(this.prev<s.finallyLoc)return o(s.finallyLoc)}else if(h){if(this.prev<s.catchLoc)return o(s.catchLoc,!0)}else{if(!l)throw new Error(\"try statement without catch or finally\");if(this.prev<s.finallyLoc)return o(s.finallyLoc)}}}},abrupt:function(t,e){for(var i=this.tryEntries.length-1;i>=0;--i){var o=this.tryEntries[i];if(o.tryLoc<=this.prev&&n.call(o,\"finallyLoc\")&&this.prev<o.finallyLoc){var r=o;break}}r&&(\"break\"===t||\"continue\"===t)&&r.tryLoc<=e&&e<=r.finallyLoc&&(r=null);var s=r?r.completion:{};return s.type=t,s.arg=e,r?(this.method=\"next\",this.next=r.finallyLoc,v):this.complete(s)},complete:function(t,e){if(\"throw\"===t.type)throw t.arg;return\"break\"===t.type||\"continue\"===t.type?this.next=t.arg:\"return\"===t.type?(this.rval=this.arg=t.arg,this.method=\"return\",this.next=\"end\"):\"normal\"===t.type&&e&&(this.next=e),v},finish:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var i=this.tryEntries[e];if(i.finallyLoc===t)return this.complete(i.completion,i.afterLoc),S(i),v}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var i=this.tryEntries[e];if(i.tryLoc===t){var n=i.completion;if(\"throw\"===n.type){var o=n.arg;S(i)}return o}}throw new Error(\"illegal catch attempt\")},delegateYield:function(t,i,n){return this.delegate={iterator:M(t),resultName:i,nextLoc:n},\"next\"===this.method&&(this.arg=e),v}},t}(t.exports);try{regeneratorRuntime=e}catch(t){Function(\"r\",\"regeneratorRuntime = r\")(e)}})),Wd=function(t){return function(e,i,n,o){ht(i);var r=A(e),s=y(r),a=kt(r.length),h=t?a-1:0,l=t?-1:1;if(n<2)for(;;){if(h in s){o=s[h],h+=l;break}if(h+=l,t?h<0:a<=h)throw TypeError(\"Reduce of empty array with no initial value\")}for(;t?h>=0:a>h;h+=l)h in s&&(o=i(o,s[h],h,r));return o}},qd={left:Wd(!1),right:Wd(!0)},Vd=\"process\"==v(a.process),Ud=qd.left,Yd=Ao(\"reduce\");gt({target:\"Array\",proto:!0,forced:!Yd||!Vd&&M>79&&M<83},{reduce:function(t){return Ud(this,t,arguments.length,arguments.length>1?arguments[1]:void 0)}});var Xd=Ht(\"Array\").reduce,Gd=Array.prototype,Kd=function(t){var e=t.reduce;return t===Gd||t instanceof Array&&e===Gd.reduce?Xd:e},$d=function(t,e,i,n,o,r,s,a){for(var h,l=o,d=0,c=!!s&&lt(s,a,3);d<n;){if(d in i){if(h=c?c(i[d],d,e):i[d],r>0&&zi(h))l=$d(t,e,h,kt(h.length),l,r-1)-1;else{if(l>=9007199254740991)throw TypeError(\"Exceed the acceptable array length\");t[l]=h}l++}d++}return l},Zd=$d;gt({target:\"Array\",proto:!0},{flatMap:function(t){var e,i=A(this),n=kt(i.length);return ht(t),(e=Ui(i,0)).length=Zd(e,i,i,n,0,1,t,arguments.length>1?arguments[1]:void 0),e}});var Qd=Ht(\"Array\").flatMap,Jd=Array.prototype,tc=function(t){var e=t.flatMap;return t===Jd||t instanceof Array&&e===Jd.flatMap?Qd:e};ad(\"Set\",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),pd);var ec=k.Set,ic=fo,nc=function(t){var e=yi(t);if(\"function\"!=typeof e)throw TypeError(String(t)+\" is not iterable\");return dt(e.call(t))},oc=Math.floor,rc=function(t,e){var i=t.length,n=oc(i/2);return i<8?sc(t,e):ac(rc(t.slice(0,n),e),rc(t.slice(n),e),e)},sc=function(t,e){for(var i,n,o=t.length,r=1;r<o;){for(n=r,i=t[r];n&&e(t[n-1],i)>0;)t[n]=t[--n];n!==r++&&(t[n]=i)}return t},ac=function(t,e,i){for(var n=t.length,o=e.length,r=0,s=0,a=[];r<n||s<o;)r<n&&s<o?a.push(i(t[r],e[s])<=0?t[r++]:e[s++]):a.push(r<n?t[r++]:e[s++]);return a},hc=rc,lc=E.match(/firefox\\/(\\d+)/i),dc=!!lc&&+lc[1],cc=/MSIE|Trident/.test(E),uc=E.match(/AppleWebKit\\/(\\d+)\\./),fc=!!uc&&+uc[1],pc=[],vc=pc.sort,gc=h((function(){pc.sort(void 0)})),yc=h((function(){pc.sort(null)})),mc=Ao(\"sort\"),bc=!h((function(){if(M)return M<70;if(!(dc&&dc>3)){if(cc)return!0;if(fc)return fc<603;var t,e,i,n,o=\"\";for(t=65;t<76;t++){switch(e=String.fromCharCode(t),t){case 66:case 69:case 70:case 72:i=3;break;case 68:case 71:i=4;break;default:i=2}for(n=0;n<47;n++)pc.push({k:e+n,v:i})}for(pc.sort((function(t,e){return e.v-t.v})),n=0;n<pc.length;n++)e=pc[n].k.charAt(0),o.charAt(o.length-1)!==e&&(o+=e);return\"DGBEFHACIJK\"!==o}}));gt({target:\"Array\",proto:!0,forced:gc||!yc||!mc||!bc},{sort:function(t){void 0!==t&&ht(t);var e=A(this);if(bc)return void 0===t?vc.call(e):vc.call(e,t);var i,n,o=[],r=kt(e.length);for(n=0;n<r;n++)n in e&&o.push(e[n]);for(i=(o=hc(o,function(t){return function(e,i){return void 0===i?-1:void 0===e?1:void 0!==t?+t(e,i)||0:Qt(e)>Qt(i)?1:-1}}(t))).length,n=0;n<i;)e[n]=o[n++];for(;n<r;)delete e[n++];return e}});var wc,kc=Ht(\"Array\").sort,_c=Array.prototype,xc=function(t){var e=t.sort;return t===_c||t instanceof Array&&e===_c.sort?kc:e},Ec=Ht(\"Array\").keys,Oc=Array.prototype,Cc={DOMTokenList:!0,NodeList:!0},Sc=function(t){var e=t.keys;return t===Oc||t instanceof Array&&e===Oc.keys||Cc.hasOwnProperty(We(t))?Ec:e},Tc=Ht(\"Array\").values,Mc=Array.prototype,Pc={DOMTokenList:!0,NodeList:!0},Dc=function(t){var e=t.values;return t===Mc||t instanceof Array&&e===Mc.values||Pc.hasOwnProperty(We(t))?Tc:e},Ic=Ht(\"Array\").entries,Bc=Array.prototype,zc={DOMTokenList:!0,NodeList:!0},Nc=function(t){var e=t.entries;return t===Bc||t instanceof Array&&e===Bc.entries||zc.hasOwnProperty(We(t))?Ic:e},Ac=new Uint8Array(16);function Fc(){if(!wc&&!(wc=\"undefined\"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||\"undefined\"!=typeof msCrypto&&\"function\"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error(\"crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported\");return wc(Ac)}var jc=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function Rc(t){return\"string\"==typeof t&&jc.test(t)}for(var Lc=[],Hc=0;Hc<256;++Hc)Lc.push((Hc+256).toString(16).substr(1));function Wc(t,e,i){var n=(t=t||{}).random||(t.rng||Fc)();if(n[6]=15&n[6]|64,n[8]=63&n[8]|128,e){i=i||0;for(var o=0;o<16;++o)e[i+o]=n[o];return e}return function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=(Lc[t[e+0]]+Lc[t[e+1]]+Lc[t[e+2]]+Lc[t[e+3]]+\"-\"+Lc[t[e+4]]+Lc[t[e+5]]+\"-\"+Lc[t[e+6]]+Lc[t[e+7]]+\"-\"+Lc[t[e+8]]+Lc[t[e+9]]+\"-\"+Lc[t[e+10]]+Lc[t[e+11]]+Lc[t[e+12]]+Lc[t[e+13]]+Lc[t[e+14]]+Lc[t[e+15]]).toLowerCase();if(!Rc(i))throw TypeError(\"Stringified UUID is invalid\");return i}(n)}function qc(t,e){var i=zo(t);if(On){var n=On(t);e&&(n=mr(n).call(n,(function(e){return Mn(t,e).enumerable}))),i.push.apply(i,n)}return i}function Vc(t){for(var e=1;e<arguments.length;e++){var i,n=null!=arguments[e]?arguments[e]:{};if(e%2)Wo(i=qc(Object(n),!0)).call(i,(function(e){jn(t,e,n[e])}));else if(Dn)In(t,Dn(n));else{var o;Wo(o=qc(Object(n))).call(o,(function(e){zn(t,e,Mn(n,e))}))}}return t}function Uc(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}function Yc(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return Xc(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Xc(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function Xc(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}var Gc=function(){function t(e,i,n){var o,r,s;Nn(this,t),this._source=e,this._transformers=i,this._target=n,this._listeners={add:Vt(o=this._add).call(o,this),remove:Vt(r=this._remove).call(r,this),update:Vt(s=this._update).call(s,this)}}return Fn(t,[{key:\"all\",value:function(){return this._target.update(this._transformItems(this._source.get())),this}},{key:\"start\",value:function(){return this._source.on(\"add\",this._listeners.add),this._source.on(\"remove\",this._listeners.remove),this._source.on(\"update\",this._listeners.update),this}},{key:\"stop\",value:function(){return this._source.off(\"add\",this._listeners.add),this._source.off(\"remove\",this._listeners.remove),this._source.off(\"update\",this._listeners.update),this}},{key:\"_transformItems\",value:function(t){var e;return Kd(e=this._transformers).call(e,(function(t,e){return e(t)}),t)}},{key:\"_add\",value:function(t,e){null!=e&&this._target.add(this._transformItems(this._source.get(e.items)))}},{key:\"_update\",value:function(t,e){null!=e&&this._target.update(this._transformItems(this._source.get(e.items)))}},{key:\"_remove\",value:function(t,e){null!=e&&this._target.remove(this._transformItems(e.oldData))}}]),t}(),Kc=function(){function t(e){Nn(this,t),this._source=e,this._transformers=[]}return Fn(t,[{key:\"filter\",value:function(t){return this._transformers.push((function(e){return mr(e).call(e,t)})),this}},{key:\"map\",value:function(t){return this._transformers.push((function(e){return Io(e).call(e,t)})),this}},{key:\"flatMap\",value:function(t){return this._transformers.push((function(e){return tc(e).call(e,t)})),this}},{key:\"to\",value:function(t){return new Gc(this._source,this._transformers,t)}}]),t}();function $c(t){return\"string\"==typeof t||\"number\"==typeof t}var Zc=function(){function t(e){Nn(this,t),this._queue=[],this._timeout=null,this._extended=null,this.delay=null,this.max=1/0,this.setOptions(e)}return Fn(t,[{key:\"setOptions\",value:function(t){t&&void 0!==t.delay&&(this.delay=t.delay),t&&void 0!==t.max&&(this.max=t.max),this._flushIfNeeded()}},{key:\"destroy\",value:function(){if(this.flush(),this._extended){for(var t=this._extended.object,e=this._extended.methods,i=0;i<e.length;i++){var n=e[i];n.original?t[n.name]=n.original:delete t[n.name]}this._extended=null}}},{key:\"replace\",value:function(t,e){var i=this,n=t[e];if(!n)throw new Error(\"Method \"+e+\" undefined\");t[e]=function(){for(var t=arguments.length,e=new Array(t),o=0;o<t;o++)e[o]=arguments[o];i.queue({args:e,fn:n,context:this})}}},{key:\"queue\",value:function(t){\"function\"==typeof t?this._queue.push({fn:t}):this._queue.push(t),this._flushIfNeeded()}},{key:\"_flushIfNeeded\",value:function(){var t=this;this._queue.length>this.max&&this.flush(),null!=this._timeout&&(clearTimeout(this._timeout),this._timeout=null),this.queue.length>0&&\"number\"==typeof this.delay&&(this._timeout=rs((function(){t.flush()}),this.delay))}},{key:\"flush\",value:function(){var t,e;Wo(t=er(e=this._queue).call(e,0)).call(t,(function(t){t.fn.apply(t.context||t.fn,t.args||[])}))}}],[{key:\"extend\",value:function(e,i){var n=new t(i);if(void 0!==e.flush)throw new Error(\"Target object already has a property flush\");e.flush=function(){n.flush()};var o=[{name:\"flush\",original:void 0}];if(i&&i.replace)for(var r=0;r<i.replace.length;r++){var s=i.replace[r];o.push({name:s,original:e[s]}),n.replace(e,s)}return n._extended={object:e,methods:o},n}}]),t}(),Qc=function(){function t(){Nn(this,t),this._subscribers={\"*\":[],add:[],remove:[],update:[]},this.subscribe=t.prototype.on,this.unsubscribe=t.prototype.off}return Fn(t,[{key:\"_trigger\",value:function(t,e,i){var n,o;if(\"*\"===t)throw new Error(\"Cannot trigger event *\");Wo(n=Eo(o=[]).call(o,wo(this._subscribers[t]),wo(this._subscribers[\"*\"]))).call(n,(function(n){n(t,e,null!=i?i:null)}))}},{key:\"on\",value:function(t,e){\"function\"==typeof e&&this._subscribers[t].push(e)}},{key:\"off\",value:function(t,e){var i;this._subscribers[t]=mr(i=this._subscribers[t]).call(i,(function(t){return t!==e}))}}]),t}(),Jc=function(t){function e(t){Nn(this,e),this._pairs=t}return Fn(e,[{key:t,value:Hd.mark((function t(){var e,i,n,o,r;return Hd.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:e=Yc(this._pairs),t.prev=1,e.s();case 3:if((i=e.n()).done){t.next=9;break}return n=uo(i.value,2),o=n[0],r=n[1],t.next=7,[o,r];case 7:t.next=3;break;case 9:t.next=14;break;case 11:t.prev=11,t.t0=t.catch(1),e.e(t.t0);case 14:return t.prev=14,e.f(),t.finish(14);case 17:case\"end\":return t.stop()}}),t,this,[[1,11,14,17]])}))},{key:\"entries\",value:Hd.mark((function t(){var e,i,n,o,r;return Hd.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:e=Yc(this._pairs),t.prev=1,e.s();case 3:if((i=e.n()).done){t.next=9;break}return n=uo(i.value,2),o=n[0],r=n[1],t.next=7,[o,r];case 7:t.next=3;break;case 9:t.next=14;break;case 11:t.prev=11,t.t0=t.catch(1),e.e(t.t0);case 14:return t.prev=14,e.f(),t.finish(14);case 17:case\"end\":return t.stop()}}),t,this,[[1,11,14,17]])}))},{key:\"keys\",value:Hd.mark((function t(){var e,i,n,o;return Hd.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:e=Yc(this._pairs),t.prev=1,e.s();case 3:if((i=e.n()).done){t.next=9;break}return n=uo(i.value,1),o=n[0],t.next=7,o;case 7:t.next=3;break;case 9:t.next=14;break;case 11:t.prev=11,t.t0=t.catch(1),e.e(t.t0);case 14:return t.prev=14,e.f(),t.finish(14);case 17:case\"end\":return t.stop()}}),t,this,[[1,11,14,17]])}))},{key:\"values\",value:Hd.mark((function t(){var e,i,n,o;return Hd.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:e=Yc(this._pairs),t.prev=1,e.s();case 3:if((i=e.n()).done){t.next=9;break}return n=uo(i.value,2),o=n[1],t.next=7,o;case 7:t.next=3;break;case 9:t.next=14;break;case 11:t.prev=11,t.t0=t.catch(1),e.e(t.t0);case 14:return t.prev=14,e.f(),t.finish(14);case 17:case\"end\":return t.stop()}}),t,this,[[1,11,14,17]])}))},{key:\"toIdArray\",value:function(){var t;return Io(t=wo(this._pairs)).call(t,(function(t){return t[0]}))}},{key:\"toItemArray\",value:function(){var t;return Io(t=wo(this._pairs)).call(t,(function(t){return t[1]}))}},{key:\"toEntryArray\",value:function(){return wo(this._pairs)}},{key:\"toObjectMap\",value:function(){var t,e=Gr(null),i=Yc(this._pairs);try{for(i.s();!(t=i.n()).done;){var n=uo(t.value,2),o=n[0],r=n[1];e[o]=r}}catch(t){i.e(t)}finally{i.f()}return e}},{key:\"toMap\",value:function(){return new vd(this._pairs)}},{key:\"toIdSet\",value:function(){return new ec(this.toIdArray())}},{key:\"toItemSet\",value:function(){return new ec(this.toItemArray())}},{key:\"cache\",value:function(){return new e(wo(this._pairs))}},{key:\"distinct\",value:function(t){var e,i=new ec,n=Yc(this._pairs);try{for(n.s();!(e=n.n()).done;){var o=uo(e.value,2),r=o[0],s=o[1];i.add(t(s,r))}}catch(t){n.e(t)}finally{n.f()}return i}},{key:\"filter\",value:function(t){var i=this._pairs;return new e(jn({},ic,Hd.mark((function e(){var n,o,r,s,a;return Hd.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:n=Yc(i),e.prev=1,n.s();case 3:if((o=n.n()).done){e.next=10;break}if(r=uo(o.value,2),s=r[0],a=r[1],!t(a,s)){e.next=8;break}return e.next=8,[s,a];case 8:e.next=3;break;case 10:e.next=15;break;case 12:e.prev=12,e.t0=e.catch(1),n.e(e.t0);case 15:return e.prev=15,n.f(),e.finish(15);case 18:case\"end\":return e.stop()}}),e,null,[[1,12,15,18]])}))))}},{key:\"forEach\",value:function(t){var e,i=Yc(this._pairs);try{for(i.s();!(e=i.n()).done;){var n=uo(e.value,2),o=n[0];t(n[1],o)}}catch(t){i.e(t)}finally{i.f()}}},{key:\"map\",value:function(t){var i=this._pairs;return new e(jn({},ic,Hd.mark((function e(){var n,o,r,s,a;return Hd.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:n=Yc(i),e.prev=1,n.s();case 3:if((o=n.n()).done){e.next=9;break}return r=uo(o.value,2),s=r[0],a=r[1],e.next=7,[s,t(a,s)];case 7:e.next=3;break;case 9:e.next=14;break;case 11:e.prev=11,e.t0=e.catch(1),n.e(e.t0);case 14:return e.prev=14,n.f(),e.finish(14);case 17:case\"end\":return e.stop()}}),e,null,[[1,11,14,17]])}))))}},{key:\"max\",value:function(t){var e=nc(this._pairs),i=e.next();if(i.done)return null;for(var n=i.value[1],o=t(i.value[1],i.value[0]);!(i=e.next()).done;){var r=uo(i.value,2),s=r[0],a=r[1],h=t(a,s);h>o&&(o=h,n=a)}return n}},{key:\"min\",value:function(t){var e=nc(this._pairs),i=e.next();if(i.done)return null;for(var n=i.value[1],o=t(i.value[1],i.value[0]);!(i=e.next()).done;){var r=uo(i.value,2),s=r[0],a=r[1],h=t(a,s);h<o&&(o=h,n=a)}return n}},{key:\"reduce\",value:function(t,e){var i,n=Yc(this._pairs);try{for(n.s();!(i=n.n()).done;){var o=uo(i.value,2),r=o[0];e=t(e,o[1],r)}}catch(t){n.e(t)}finally{n.f()}return e}},{key:\"sort\",value:function(t){var i=this;return new e(jn({},ic,(function(){var e;return nc(xc(e=wo(i._pairs)).call(e,(function(e,i){var n=uo(e,2),o=n[0],r=n[1],s=uo(i,2),a=s[0],h=s[1];return t(r,h,o,a)})))})))}}]),e}(ic);var tu=function(t){Ad(i,t);var e=Uc(i);function i(t,n){var o;return Nn(this,i),(o=e.call(this))._queue=null,t&&!So(t)&&(n=t,t=[]),o._options=n||{},o._data=new vd,o.length=0,o._idProp=o._options.fieldId||\"id\",t&&t.length&&o.add(t),o.setOptions(n),o}return Fn(i,[{key:\"idProp\",get:function(){return this._idProp}},{key:\"setOptions\",value:function(t){t&&void 0!==t.queue&&(!1===t.queue?this._queue&&(this._queue.destroy(),this._queue=null):(this._queue||(this._queue=Zc.extend(this,{replace:[\"add\",\"update\",\"remove\"]})),t.queue&&\"object\"===go(t.queue)&&this._queue.setOptions(t.queue)))}},{key:\"add\",value:function(t,e){var i,n=this,o=[];if(So(t)){var r=Io(t).call(t,(function(t){return t[n._idProp]}));if(Od(r).call(r,(function(t){return n._data.has(t)})))throw new Error(\"A duplicate id was found in the parameter array.\");for(var s=0,a=t.length;s<a;s++)i=this._addItem(t[s]),o.push(i)}else{if(!t||\"object\"!==go(t))throw new Error(\"Unknown dataType\");i=this._addItem(t),o.push(i)}return o.length&&this._trigger(\"add\",{items:o},e),o}},{key:\"update\",value:function(t,e){var i=this,n=[],o=[],r=[],s=[],a=this._idProp,h=function(t){var e=t[a];if(null!=e&&i._data.has(e)){var h=t,l=At({},i._data.get(e)),d=i._updateItem(h);o.push(d),s.push(h),r.push(l)}else{var c=i._addItem(t);n.push(c)}};if(So(t))for(var l=0,d=t.length;l<d;l++)t[l]&&\"object\"===go(t[l])?h(t[l]):console.warn(\"Ignoring input item, which is not an object at index \"+l);else{if(!t||\"object\"!==go(t))throw new Error(\"Unknown dataType\");h(t)}if(n.length&&this._trigger(\"add\",{items:n},e),o.length){var c={items:o,oldData:r,data:s};this._trigger(\"update\",c,e)}return Eo(n).call(n,o)}},{key:\"updateOnly\",value:function(t,e){var i,n=this;So(t)||(t=[t]);var o=Io(i=Io(t).call(t,(function(t){var e=n._data.get(t[n._idProp]);if(null==e)throw new Error(\"Updating non-existent items is not allowed.\");return{oldData:e,update:t}}))).call(i,(function(t){var e=t.oldData,i=t.update,o=e[n._idProp],r=ih(e,i);return n._data.set(o,r),{id:o,oldData:e,updatedData:r}}));if(o.length){var r={items:Io(o).call(o,(function(t){return t.id})),oldData:Io(o).call(o,(function(t){return t.oldData})),data:Io(o).call(o,(function(t){return t.updatedData}))};return this._trigger(\"update\",r,e),r.items}return[]}},{key:\"get\",value:function(t,e){var i=void 0,n=void 0,o=void 0;$c(t)?(i=t,o=e):So(t)?(n=t,o=e):o=t;var r,s=o&&\"Object\"===o.returnType?\"Object\":\"Array\",a=o&&mr(o),h=[],l=void 0,d=void 0,c=void 0;if(null!=i)(l=this._data.get(i))&&a&&!a(l)&&(l=void 0);else if(null!=n)for(var u=0,f=n.length;u<f;u++)null==(l=this._data.get(n[u]))||a&&!a(l)||h.push(l);else for(var p,v=0,g=(d=wo(Sc(p=this._data).call(p))).length;v<g;v++)c=d[v],null==(l=this._data.get(c))||a&&!a(l)||h.push(l);if(o&&o.order&&null==i&&this._sort(h,o.order),o&&o.fields){var y=o.fields;if(null!=i&&null!=l)l=this._filterFields(l,y);else for(var m=0,b=h.length;m<b;m++)h[m]=this._filterFields(h[m],y)}if(\"Object\"==s){for(var w={},k=0,_=h.length;k<_;k++){var x=h[k];w[x[this._idProp]]=x}return w}return null!=i?null!==(r=l)&&void 0!==r?r:null:h}},{key:\"getIds\",value:function(t){var e=this._data,i=t&&mr(t),n=t&&t.order,o=wo(Sc(e).call(e)),r=[];if(i)if(n){for(var s=[],a=0,h=o.length;a<h;a++){var l=o[a],d=this._data.get(l);null!=d&&i(d)&&s.push(d)}this._sort(s,n);for(var c=0,u=s.length;c<u;c++)r.push(s[c][this._idProp])}else for(var f=0,p=o.length;f<p;f++){var v=o[f],g=this._data.get(v);null!=g&&i(g)&&r.push(g[this._idProp])}else if(n){for(var y=[],m=0,b=o.length;m<b;m++){var w=o[m];y.push(e.get(w))}this._sort(y,n);for(var k=0,_=y.length;k<_;k++)r.push(y[k][this._idProp])}else for(var x=0,E=o.length;x<E;x++){var O=o[x],C=e.get(O);null!=C&&r.push(C[this._idProp])}return r}},{key:\"getDataSet\",value:function(){return this}},{key:\"forEach\",value:function(t,e){var i=e&&mr(e),n=this._data,o=wo(Sc(n).call(n));if(e&&e.order)for(var r=this.get(e),s=0,a=r.length;s<a;s++){var h=r[s];t(h,h[this._idProp])}else for(var l=0,d=o.length;l<d;l++){var c=o[l],u=this._data.get(c);null==u||i&&!i(u)||t(u,c)}}},{key:\"map\",value:function(t,e){for(var i=e&&mr(e),n=[],o=this._data,r=wo(Sc(o).call(o)),s=0,a=r.length;s<a;s++){var h=r[s],l=this._data.get(h);null==l||i&&!i(l)||n.push(t(l,h))}return e&&e.order&&this._sort(n,e.order),n}},{key:\"_filterFields\",value:function(t,e){var i;return t?Kd(i=So(e)?e:zo(e)).call(i,(function(e,i){return e[i]=t[i],e}),{}):t}},{key:\"_sort\",value:function(t,e){if(\"string\"==typeof e){var i=e;xc(t).call(t,(function(t,e){var n=t[i],o=e[i];return n>o?1:n<o?-1:0}))}else{if(\"function\"!=typeof e)throw new TypeError(\"Order must be a function or a string\");xc(t).call(t,e)}}},{key:\"remove\",value:function(t,e){for(var i=[],n=[],o=So(t)?t:[t],r=0,s=o.length;r<s;r++){var a=this._remove(o[r]);if(a){var h=a[this._idProp];null!=h&&(i.push(h),n.push(a))}}return i.length&&this._trigger(\"remove\",{items:i,oldData:n},e),i}},{key:\"_remove\",value:function(t){var e;if($c(t)?e=t:t&&\"object\"===go(t)&&(e=t[this._idProp]),null!=e&&this._data.has(e)){var i=this._data.get(e)||null;return this._data.delete(e),--this.length,i}return null}},{key:\"clear\",value:function(t){for(var e,i=wo(Sc(e=this._data).call(e)),n=[],o=0,r=i.length;o<r;o++)n.push(this._data.get(i[o]));return this._data.clear(),this.length=0,this._trigger(\"remove\",{items:i,oldData:n},t),i}},{key:\"max\",value:function(t){var e,i,n=null,o=null,r=Yc(Dc(e=this._data).call(e));try{for(r.s();!(i=r.n()).done;){var s=i.value,a=s[t];\"number\"==typeof a&&(null==o||a>o)&&(n=s,o=a)}}catch(t){r.e(t)}finally{r.f()}return n||null}},{key:\"min\",value:function(t){var e,i,n=null,o=null,r=Yc(Dc(e=this._data).call(e));try{for(r.s();!(i=r.n()).done;){var s=i.value,a=s[t];\"number\"==typeof a&&(null==o||a<o)&&(n=s,o=a)}}catch(t){r.e(t)}finally{r.f()}return n||null}},{key:\"distinct\",value:function(t){for(var e=this._data,i=wo(Sc(e).call(e)),n=[],o=0,r=0,s=i.length;r<s;r++){for(var a=i[r],h=e.get(a)[t],l=!1,d=0;d<o;d++)if(n[d]==h){l=!0;break}l||void 0===h||(n[o]=h,o++)}return n}},{key:\"_addItem\",value:function(t){var e=function(t,e){return null==t[e]&&(t[e]=Wc()),t}(t,this._idProp),i=e[this._idProp];if(this._data.has(i))throw new Error(\"Cannot add item: item with id \"+i+\" already exists\");return this._data.set(i,e),++this.length,i}},{key:\"_updateItem\",value:function(t){var e=t[this._idProp];if(null==e)throw new Error(\"Cannot update item: item has no id (item: \"+es(t)+\")\");var i=this._data.get(e);if(!i)throw new Error(\"Cannot update item: no item with id \"+e+\" found\");return this._data.set(e,Vc(Vc({},i),t)),e}},{key:\"stream\",value:function(t){if(t){var e=this._data;return new Jc(jn({},ic,Hd.mark((function i(){var n,o,r,s;return Hd.wrap((function(i){for(;;)switch(i.prev=i.next){case 0:n=Yc(t),i.prev=1,n.s();case 3:if((o=n.n()).done){i.next=11;break}if(r=o.value,null==(s=e.get(r))){i.next=9;break}return i.next=9,[r,s];case 9:i.next=3;break;case 11:i.next=16;break;case 13:i.prev=13,i.t0=i.catch(1),n.e(i.t0);case 16:return i.prev=16,n.f(),i.finish(16);case 19:case\"end\":return i.stop()}}),i,null,[[1,13,16,19]])}))))}var i;return new Jc(jn({},ic,Vt(i=Nc(this._data)).call(i,this._data)))}}]),i}(Qc),eu=function(t){Ad(i,t);var e=Uc(i);function i(t,n){var o,r;return Nn(this,i),(r=e.call(this)).length=0,r._ids=new ec,r._options=n||{},r._listener=Vt(o=r._onEvent).call(o,Id(r)),r.setData(t),r}return Fn(i,[{key:\"idProp\",get:function(){return this.getDataSet().idProp}},{key:\"setData\",value:function(t){if(this._data){this._data.off&&this._data.off(\"*\",this._listener);var e=this._data.getIds({filter:mr(this._options)}),i=this._data.get(e);this._ids.clear(),this.length=0,this._trigger(\"remove\",{items:e,oldData:i})}if(null!=t){this._data=t;for(var n=this._data.getIds({filter:mr(this._options)}),o=0,r=n.length;o<r;o++){var s=n[o];this._ids.add(s)}this.length=n.length,this._trigger(\"add\",{items:n})}else this._data=new tu;this._data.on&&this._data.on(\"*\",this._listener)}},{key:\"refresh\",value:function(){for(var t=this._data.getIds({filter:mr(this._options)}),e=wo(this._ids),i={},n=[],o=[],r=[],s=0,a=t.length;s<a;s++){var h=t[s];i[h]=!0,this._ids.has(h)||(n.push(h),this._ids.add(h))}for(var l=0,d=e.length;l<d;l++){var c=e[l],u=this._data.get(c);null==u?console.error(\"If you see this, report it please.\"):i[c]||(o.push(c),r.push(u),this._ids.delete(c))}this.length+=n.length-o.length,n.length&&this._trigger(\"add\",{items:n}),o.length&&this._trigger(\"remove\",{items:o,oldData:r})}},{key:\"get\",value:function(t,e){if(null==this._data)return null;var i,n=null;$c(t)||So(t)?(n=t,i=e):i=t;var o=At({},this._options,i),r=mr(this._options),s=i&&mr(i);return r&&s&&(o.filter=function(t){return r(t)&&s(t)}),null==n?this._data.get(o):this._data.get(n,o)}},{key:\"getIds\",value:function(t){if(this._data.length){var e,i=mr(this._options),n=null!=t?mr(t):null;return e=n?i?function(t){return i(t)&&n(t)}:n:i,this._data.getIds({filter:e,order:t&&t.order})}return[]}},{key:\"forEach\",value:function(t,e){if(this._data){var i,n,o=mr(this._options),r=e&&mr(e);n=r?o?function(t){return o(t)&&r(t)}:r:o,Wo(i=this._data).call(i,t,{filter:n,order:e&&e.order})}}},{key:\"map\",value:function(t,e){if(this._data){var i,n,o=mr(this._options),r=e&&mr(e);return n=r?o?function(t){return o(t)&&r(t)}:r:o,Io(i=this._data).call(i,t,{filter:n,order:e&&e.order})}return[]}},{key:\"getDataSet\",value:function(){return this._data.getDataSet()}},{key:\"stream\",value:function(t){var e;return this._data.stream(t||jn({},ic,Vt(e=Sc(this._ids)).call(e,this._ids)))}},{key:\"dispose\",value:function(){var t;null!==(t=this._data)&&void 0!==t&&t.off&&this._data.off(\"*\",this._listener);var e,n=\"This data view has already been disposed of.\",o={get:function(){throw new Error(n)},set:function(){throw new Error(n)},configurable:!1},r=Yc(Co(i.prototype));try{for(r.s();!(e=r.n()).done;){var s=e.value;zn(this,s,o)}}catch(t){r.e(t)}finally{r.f()}}},{key:\"_onEvent\",value:function(t,e,i){if(e&&e.items&&this._data){var n=e.items,o=[],r=[],s=[],a=[],h=[],l=[];switch(t){case\"add\":for(var d=0,c=n.length;d<c;d++){var u=n[d];this.get(u)&&(this._ids.add(u),o.push(u))}break;case\"update\":for(var f=0,p=n.length;f<p;f++){var v=n[f];this.get(v)?this._ids.has(v)?(r.push(v),h.push(e.data[f]),a.push(e.oldData[f])):(this._ids.add(v),o.push(v)):this._ids.has(v)&&(this._ids.delete(v),s.push(v),l.push(e.oldData[f]))}break;case\"remove\":for(var g=0,y=n.length;g<y;g++){var m=n[g];this._ids.has(m)&&(this._ids.delete(m),s.push(m),l.push(e.oldData[g]))}}this.length+=o.length-s.length,o.length&&this._trigger(\"add\",{items:o},i),r.length&&this._trigger(\"update\",{items:r,oldData:a,data:h},i),s.length&&this._trigger(\"remove\",{items:s,oldData:l},i)}}}]),i}(Qc);function iu(t,e){return\"object\"===go(e)&&null!==e&&t===e.idProp&&\"function\"==typeof e.add&&\"function\"==typeof e.clear&&\"function\"==typeof e.distinct&&\"function\"==typeof Wo(e)&&\"function\"==typeof e.get&&\"function\"==typeof e.getDataSet&&\"function\"==typeof e.getIds&&\"number\"==typeof e.length&&\"function\"==typeof Io(e)&&\"function\"==typeof e.max&&\"function\"==typeof e.min&&\"function\"==typeof e.off&&\"function\"==typeof e.on&&\"function\"==typeof e.remove&&\"function\"==typeof e.setOptions&&\"function\"==typeof e.stream&&\"function\"==typeof e.update&&\"function\"==typeof e.updateOnly}function nu(t,e){return\"object\"===go(e)&&null!==e&&t===e.idProp&&\"function\"==typeof Wo(e)&&\"function\"==typeof e.get&&\"function\"==typeof e.getDataSet&&\"function\"==typeof e.getIds&&\"number\"==typeof e.length&&\"function\"==typeof Io(e)&&\"function\"==typeof e.off&&\"function\"==typeof e.on&&\"function\"==typeof e.stream&&iu(t,e.getDataSet())}var ou=Object.freeze({__proto__:null,DELETE:eh,DataSet:tu,DataStream:Jc,DataView:eu,Queue:Zc,createNewDataPipeFrom:function(t){return new Kc(t)},isDataSetLike:iu,isDataViewLike:nu}),ru=Tr.trim,su=a.parseFloat,au=1/su(xr+\"-0\")!=-1/0?function(t){var e=ru(Qt(t)),i=su(e);return 0===i&&\"-\"==e.charAt(0)?-0:i}:su;gt({global:!0,forced:parseFloat!=au},{parseFloat:au});var hu=k.parseFloat,lu=Li.f,du=h((function(){return!Object.getOwnPropertyNames(1)}));gt({target:\"Object\",stat:!0,forced:du},{getOwnPropertyNames:lu});var cu=k.Object,uu=function(t){return cu.getOwnPropertyNames(t)};function fu(t,e){var i=[\"node\",\"edge\",\"label\"],n=!0,o=Qh(e,\"chosen\");if(\"boolean\"==typeof o)n=o;else if(\"object\"===go(o)){if(-1===Hr(i).call(i,t))throw new Error(\"choosify: subOption '\"+t+\"' should be one of '\"+i.join(\"', '\")+\"'\");var r=Qh(e,[\"chosen\",t]);\"boolean\"!=typeof r&&\"function\"!=typeof r||(n=r)}return n}function pu(t,e,i){if(t.width<=0||t.height<=0)return!1;if(void 0!==i){var n={x:e.x-i.x,y:e.y-i.y};if(0!==i.angle){var o=-i.angle;e={x:Math.cos(o)*n.x-Math.sin(o)*n.y,y:Math.sin(o)*n.x+Math.cos(o)*n.y}}else e=n}var r=t.x+t.width,s=t.y+t.width;return t.left<e.x&&r>e.x&&t.top<e.y&&s>e.y}function vu(t){return\"string\"==typeof t&&\"\"!==t}function gu(t,e,i,n){var o=n.x,r=n.y;if(\"function\"==typeof n.distanceToBorder){var s=n.distanceToBorder(t,e),a=Math.sin(e)*s,h=Math.cos(e)*s;h===s?(o+=s,r=n.y):a===s?(o=n.x,r-=s):(o+=h,r-=a)}else n.shape.width>n.shape.height?(o=n.x+.5*n.shape.width,r=n.y-i):(o=n.x+i,r=n.y-.5*n.shape.height);return{x:o,y:r}}var yu=function(){function t(e){Nn(this,t),this.measureText=e,this.current=0,this.width=0,this.height=0,this.lines=[]}return Fn(t,[{key:\"_add\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:\"normal\";void 0===this.lines[t]&&(this.lines[t]={width:0,height:0,blocks:[]});var n=e;void 0!==e&&\"\"!==e||(n=\" \");var o=this.measureText(n,i),r=At({},Dc(o));r.text=e,r.width=o.width,r.mod=i,void 0!==e&&\"\"!==e||(r.width=0),this.lines[t].blocks.push(r),this.lines[t].width+=r.width}},{key:\"curWidth\",value:function(){var t=this.lines[this.current];return void 0===t?0:t.width}},{key:\"append\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"normal\";this._add(this.current,t,e)}},{key:\"newLine\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"normal\";this._add(this.current,t,e),this.current++}},{key:\"determineLineHeights\",value:function(){for(var t=0;t<this.lines.length;t++){var e=this.lines[t],i=0;if(void 0!==e.blocks)for(var n=0;n<e.blocks.length;n++){var o=e.blocks[n];i<o.height&&(i=o.height)}e.height=i}}},{key:\"determineLabelSize\",value:function(){for(var t=0,e=0,i=0;i<this.lines.length;i++){var n=this.lines[i];n.width>t&&(t=n.width),e+=n.height}this.width=t,this.height=e}},{key:\"removeEmptyBlocks\",value:function(){for(var t=[],e=0;e<this.lines.length;e++){var i=this.lines[e];if(0!==i.blocks.length&&(e!==this.lines.length-1||0!==i.width)){var n={};At(n,i),n.blocks=[];for(var o=void 0,r=[],s=0;s<i.blocks.length;s++){var a=i.blocks[s];0!==a.width?r.push(a):void 0===o&&(o=a)}0===r.length&&void 0!==o&&r.push(o),n.blocks=r,t.push(n)}}return t}},{key:\"finalize\",value:function(){this.determineLineHeights(),this.determineLabelSize();var t=this.removeEmptyBlocks();return{width:this.width,height:this.height,lines:t}}}]),t}(),mu={\"<b>\":/<b>/,\"<i>\":/<i>/,\"<code>\":/<code>/,\"</b>\":/<\\/b>/,\"</i>\":/<\\/i>/,\"</code>\":/<\\/code>/,\"*\":/\\*/,_:/_/,\"`\":/`/,afterBold:/[^*]/,afterItal:/[^_]/,afterMono:/[^`]/},bu=function(){function t(e){Nn(this,t),this.text=e,this.bold=!1,this.ital=!1,this.mono=!1,this.spacing=!1,this.position=0,this.buffer=\"\",this.modStack=[],this.blocks=[]}return Fn(t,[{key:\"mod\",value:function(){return 0===this.modStack.length?\"normal\":this.modStack[0]}},{key:\"modName\",value:function(){return 0===this.modStack.length?\"normal\":\"mono\"===this.modStack[0]?\"mono\":this.bold&&this.ital?\"boldital\":this.bold?\"bold\":this.ital?\"ital\":void 0}},{key:\"emitBlock\",value:function(){this.spacing&&(this.add(\" \"),this.spacing=!1),this.buffer.length>0&&(this.blocks.push({text:this.buffer,mod:this.modName()}),this.buffer=\"\")}},{key:\"add\",value:function(t){\" \"===t&&(this.spacing=!0),this.spacing&&(this.buffer+=\" \",this.spacing=!1),\" \"!=t&&(this.buffer+=t)}},{key:\"parseWS\",value:function(t){return!!/[ \\t]/.test(t)&&(this.mono?this.add(t):this.spacing=!0,!0)}},{key:\"setTag\",value:function(t){this.emitBlock(),this[t]=!0,this.modStack.unshift(t)}},{key:\"unsetTag\",value:function(t){this.emitBlock(),this[t]=!1,this.modStack.shift()}},{key:\"parseStartTag\",value:function(t,e){return!(this.mono||this[t]||!this.match(e))&&(this.setTag(t),!0)}},{key:\"match\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this.prepareRegExp(t),n=uo(i,2),o=n[0],r=n[1],s=o.test(this.text.substr(this.position,r));return s&&e&&(this.position+=r-1),s}},{key:\"parseEndTag\",value:function(t,e,i){var n=this.mod()===t;return!(!(n=\"mono\"===t?n&&this.mono:n&&!this.mono)||!this.match(e))&&(void 0!==i?(this.position===this.text.length-1||this.match(i,!1))&&this.unsetTag(t):this.unsetTag(t),!0)}},{key:\"replace\",value:function(t,e){return!!this.match(t)&&(this.add(e),this.position+=length-1,!0)}},{key:\"prepareRegExp\",value:function(t){var e,i;if(t instanceof RegExp)i=t,e=1;else{var n=mu[t];i=void 0!==n?n:new RegExp(t),e=t.length}return[i,e]}}]),t}(),wu=function(){function t(e,i,n,o){var r=this;Nn(this,t),this.ctx=e,this.parent=i,this.selected=n,this.hover=o;this.lines=new yu((function(t,i){if(void 0===t)return 0;var s=r.parent.getFormattingValues(e,n,o,i),a=0;\"\"!==t&&(a=r.ctx.measureText(t).width);return{width:a,values:s}}))}return Fn(t,[{key:\"process\",value:function(t){if(!vu(t))return this.lines.finalize();var e=this.parent.fontOptions;t=(t=t.replace(/\\r\\n/g,\"\\n\")).replace(/\\r/g,\"\\n\");var i=String(t).split(\"\\n\"),n=i.length;if(e.multi)for(var o=0;o<n;o++){var r=this.splitBlocks(i[o],e.multi);if(void 0!==r)if(0!==r.length){if(e.maxWdt>0)for(var s=0;s<r.length;s++){var a=r[s].mod,h=r[s].text;this.splitStringIntoLines(h,a,!0)}else for(var l=0;l<r.length;l++){var d=r[l].mod,c=r[l].text;this.lines.append(c,d)}this.lines.newLine()}else this.lines.newLine(\"\")}else if(e.maxWdt>0)for(var u=0;u<n;u++)this.splitStringIntoLines(i[u]);else for(var f=0;f<n;f++)this.lines.newLine(i[f]);return this.lines.finalize()}},{key:\"decodeMarkupSystem\",value:function(t){var e=\"none\";return\"markdown\"===t||\"md\"===t?e=\"markdown\":!0!==t&&\"html\"!==t||(e=\"html\"),e}},{key:\"splitHtmlBlocks\",value:function(t){for(var e=new bu(t),i=function(t){return!!/&/.test(t)&&(e.replace(e.text,\"&lt;\",\"<\")||e.replace(e.text,\"&amp;\",\"&\")||e.add(\"&\"),!0)};e.position<e.text.length;){var n=e.text.charAt(e.position);e.parseWS(n)||/</.test(n)&&(e.parseStartTag(\"bold\",\"<b>\")||e.parseStartTag(\"ital\",\"<i>\")||e.parseStartTag(\"mono\",\"<code>\")||e.parseEndTag(\"bold\",\"</b>\")||e.parseEndTag(\"ital\",\"</i>\")||e.parseEndTag(\"mono\",\"</code>\"))||i(n)||e.add(n),e.position++}return e.emitBlock(),e.blocks}},{key:\"splitMarkdownBlocks\",value:function(t){for(var e=this,i=new bu(t),n=!0,o=function(t){return!!/\\\\/.test(t)&&(i.position<e.text.length+1&&(i.position++,t=e.text.charAt(i.position),/ \\t/.test(t)?i.spacing=!0:(i.add(t),n=!1)),!0)};i.position<i.text.length;){var r=i.text.charAt(i.position);i.parseWS(r)||o(r)||(n||i.spacing)&&(i.parseStartTag(\"bold\",\"*\")||i.parseStartTag(\"ital\",\"_\")||i.parseStartTag(\"mono\",\"`\"))||i.parseEndTag(\"bold\",\"*\",\"afterBold\")||i.parseEndTag(\"ital\",\"_\",\"afterItal\")||i.parseEndTag(\"mono\",\"`\",\"afterMono\")||(i.add(r),n=!1),i.position++}return i.emitBlock(),i.blocks}},{key:\"splitBlocks\",value:function(t,e){var i=this.decodeMarkupSystem(e);return\"none\"===i?[{text:t,mod:\"normal\"}]:\"markdown\"===i?this.splitMarkdownBlocks(t):\"html\"===i?this.splitHtmlBlocks(t):void 0}},{key:\"overMaxWidth\",value:function(t){var e=this.ctx.measureText(t).width;return this.lines.curWidth()+e>this.parent.fontOptions.maxWdt}},{key:\"getLongestFit\",value:function(t){for(var e=\"\",i=0;i<t.length;){var n=e+(\"\"===e?\"\":\" \")+t[i];if(this.overMaxWidth(n))break;e=n,i++}return i}},{key:\"getLongestFitWord\",value:function(t){for(var e=0;e<t.length&&!this.overMaxWidth(Oo(t).call(t,0,e));)e++;return e}},{key:\"splitStringIntoLines\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"normal\",i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];this.parent.getFormattingValues(this.ctx,this.selected,this.hover,e);for(var n=(t=(t=t.replace(/^( +)/g,\"$1\\r\")).replace(/([^\\r][^ ]*)( +)/g,\"$1\\r$2\\r\")).split(\"\\r\");n.length>0;){var o=this.getLongestFit(n);if(0===o){var r=n[0],s=this.getLongestFitWord(r);this.lines.newLine(Oo(r).call(r,0,s),e),n[0]=Oo(r).call(r,s)}else{var a=o;\" \"===n[o-1]?o--:\" \"===n[a]&&a++;var h=Oo(n).call(n,0,o).join(\"\");o==n.length&&i?this.lines.append(h,e):this.lines.newLine(h,e),n=Oo(n).call(n,a)}}}}]),t}(),ku=[\"bold\",\"ital\",\"boldital\",\"mono\"],_u=function(){function t(e,i){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];Nn(this,t),this.body=e,this.pointToSelf=!1,this.baseSize=void 0,this.fontOptions={},this.setOptions(i),this.size={top:0,left:0,width:0,height:0,yLine:0},this.isEdgeLabel=n}return Fn(t,[{key:\"setOptions\",value:function(t){if(this.elementOptions=t,this.initFontOptions(t.font),vu(t.label)?this.labelDirty=!0:t.label=void 0,void 0!==t.font&&null!==t.font)if(\"string\"==typeof t.font)this.baseSize=this.fontOptions.size;else if(\"object\"===go(t.font)){var e=t.font.size;void 0!==e&&(this.baseSize=e)}}},{key:\"initFontOptions\",value:function(e){var i=this;Dh(ku,(function(t){i.fontOptions[t]={}})),t.parseFontString(this.fontOptions,e)?this.fontOptions.vadjust=0:Dh(e,(function(t,e){null!=t&&\"object\"!==go(t)&&(i.fontOptions[e]=t)}))}},{key:\"constrain\",value:function(t){var e={constrainWidth:!1,maxWdt:-1,minWdt:-1,constrainHeight:!1,minHgt:-1,valign:\"middle\"},i=Qh(t,\"widthConstraint\");if(\"number\"==typeof i)e.maxWdt=Number(i),e.minWdt=Number(i);else if(\"object\"===go(i)){var n=Qh(t,[\"widthConstraint\",\"maximum\"]);\"number\"==typeof n&&(e.maxWdt=Number(n));var o=Qh(t,[\"widthConstraint\",\"minimum\"]);\"number\"==typeof o&&(e.minWdt=Number(o))}var r=Qh(t,\"heightConstraint\");if(\"number\"==typeof r)e.minHgt=Number(r);else if(\"object\"===go(r)){var s=Qh(t,[\"heightConstraint\",\"minimum\"]);\"number\"==typeof s&&(e.minHgt=Number(s));var a=Qh(t,[\"heightConstraint\",\"valign\"]);\"string\"==typeof a&&(\"top\"!==a&&\"bottom\"!==a||(e.valign=a))}return e}},{key:\"update\",value:function(t,e){this.setOptions(t,!0),this.propagateFonts(e),Ch(this.fontOptions,this.constrain(e)),this.fontOptions.chooser=fu(\"label\",e)}},{key:\"adjustSizes\",value:function(t){var e=t?t.right+t.left:0;this.fontOptions.constrainWidth&&(this.fontOptions.maxWdt-=e,this.fontOptions.minWdt-=e);var i=t?t.top+t.bottom:0;this.fontOptions.constrainHeight&&(this.fontOptions.minHgt-=i)}},{key:\"addFontOptionsToPile\",value:function(t,e){for(var i=0;i<e.length;++i)this.addFontToPile(t,e[i])}},{key:\"addFontToPile\",value:function(t,e){if(void 0!==e&&void 0!==e.font&&null!==e.font){var i=e.font;t.push(i)}}},{key:\"getBasicOptions\",value:function(e){for(var i={},n=0;n<e.length;++n){var o=e[n],r={};t.parseFontString(r,o)&&(o=r),Dh(o,(function(t,e){void 0!==t&&(Object.prototype.hasOwnProperty.call(i,e)||(-1!==Hr(ku).call(ku,e)?i[e]={}:i[e]=t))}))}return i}},{key:\"getFontOption\",value:function(e,i,n){for(var o,r=0;r<e.length;++r){var s=e[r];if(Object.prototype.hasOwnProperty.call(s,i)){if(null==(o=s[i]))continue;var a={};if(t.parseFontString(a,o)&&(o=a),Object.prototype.hasOwnProperty.call(o,n))return o[n]}}if(Object.prototype.hasOwnProperty.call(this.fontOptions,n))return this.fontOptions[n];throw new Error(\"Did not find value for multi-font for property: '\"+n+\"'\")}},{key:\"getFontOptions\",value:function(t,e){for(var i={},n=[\"color\",\"size\",\"face\",\"mod\",\"vadjust\"],o=0;o<n.length;++o){var r=n[o];i[r]=this.getFontOption(t,e,r)}return i}},{key:\"propagateFonts\",value:function(t){var e=this,i=[];this.addFontOptionsToPile(i,t),this.fontOptions=this.getBasicOptions(i);for(var n=function(t){var n=ku[t],o=e.fontOptions[n];Dh(e.getFontOptions(i,n),(function(t,e){o[e]=t})),o.size=Number(o.size),o.vadjust=Number(o.vadjust)},o=0;o<ku.length;++o)n(o)}},{key:\"draw\",value:function(t,e,i,n,o){var r=arguments.length>5&&void 0!==arguments[5]?arguments[5]:\"middle\";if(void 0!==this.elementOptions.label){var s=this.fontOptions.size*this.body.view.scale;this.elementOptions.label&&s<this.elementOptions.scaling.label.drawThreshold-1||(s>=this.elementOptions.scaling.label.maxVisible&&(s=Number(this.elementOptions.scaling.label.maxVisible)/this.body.view.scale),this.calculateLabelSize(t,n,o,e,i,r),this._drawBackground(t),this._drawText(t,e,this.size.yLine,r,s))}}},{key:\"_drawBackground\",value:function(t){if(void 0!==this.fontOptions.background&&\"none\"!==this.fontOptions.background){t.fillStyle=this.fontOptions.background;var e=this.getSize();t.fillRect(e.left,e.top,e.width,e.height)}}},{key:\"_drawText\",value:function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:\"middle\",o=arguments.length>4?arguments[4]:void 0,r=this._setAlignment(t,e,i,n),s=uo(r,2);e=s[0],i=s[1],t.textAlign=\"left\",e-=this.size.width/2,this.fontOptions.valign&&this.size.height>this.size.labelHeight&&(\"top\"===this.fontOptions.valign&&(i-=(this.size.height-this.size.labelHeight)/2),\"bottom\"===this.fontOptions.valign&&(i+=(this.size.height-this.size.labelHeight)/2));for(var a=0;a<this.lineCount;a++){var h=this.lines[a];if(h&&h.blocks){var l=0;this.isEdgeLabel||\"center\"===this.fontOptions.align?l+=(this.size.width-h.width)/2:\"right\"===this.fontOptions.align&&(l+=this.size.width-h.width);for(var d=0;d<h.blocks.length;d++){var c=h.blocks[d];t.font=c.font;var u=this._getColor(c.color,o,c.strokeColor),f=uo(u,2),p=f[0],v=f[1];c.strokeWidth>0&&(t.lineWidth=c.strokeWidth,t.strokeStyle=v,t.lineJoin=\"round\"),t.fillStyle=p,c.strokeWidth>0&&t.strokeText(c.text,e+l,i+c.vadjust),t.fillText(c.text,e+l,i+c.vadjust),l+=c.width}i+=h.height}}}},{key:\"_setAlignment\",value:function(t,e,i,n){if(this.isEdgeLabel&&\"horizontal\"!==this.fontOptions.align&&!1===this.pointToSelf){e=0,i=0;\"top\"===this.fontOptions.align?(t.textBaseline=\"alphabetic\",i-=4):\"bottom\"===this.fontOptions.align?(t.textBaseline=\"hanging\",i+=4):t.textBaseline=\"middle\"}else t.textBaseline=n;return[e,i]}},{key:\"_getColor\",value:function(t,e,i){var n=t||\"#000000\",o=i||\"#ffffff\";if(e<=this.elementOptions.scaling.label.drawThreshold){var r=Math.max(0,Math.min(1,1-(this.elementOptions.scaling.label.drawThreshold-e)));n=Fh(n,r),o=Fh(o,r)}return[n,o]}},{key:\"getTextSize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return this._processLabel(t,e,i),{width:this.size.width,height:this.size.height,lineCount:this.lineCount}}},{key:\"getSize\",value:function(){var t=this.size.left,e=this.size.top-1;if(this.isEdgeLabel){var i=.5*-this.size.width;switch(this.fontOptions.align){case\"middle\":t=i,e=.5*-this.size.height;break;case\"top\":t=i,e=-(this.size.height+2);break;case\"bottom\":t=i,e=2}}return{left:t,top:e,width:this.size.width,height:this.size.height}}},{key:\"calculateLabelSize\",value:function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,r=arguments.length>5&&void 0!==arguments[5]?arguments[5]:\"middle\";this._processLabel(t,e,i),this.size.left=n-.5*this.size.width,this.size.top=o-.5*this.size.height,this.size.yLine=o+.5*(1-this.lineCount)*this.fontOptions.size,\"hanging\"===r&&(this.size.top+=.5*this.fontOptions.size,this.size.top+=4,this.size.yLine+=4)}},{key:\"getFormattingValues\",value:function(t,e,i,n){var o=function(t,e,i){return\"normal\"===e?\"mod\"===i?\"\":t[i]:void 0!==t[e][i]?t[e][i]:t[i]},r={color:o(this.fontOptions,n,\"color\"),size:o(this.fontOptions,n,\"size\"),face:o(this.fontOptions,n,\"face\"),mod:o(this.fontOptions,n,\"mod\"),vadjust:o(this.fontOptions,n,\"vadjust\"),strokeWidth:this.fontOptions.strokeWidth,strokeColor:this.fontOptions.strokeColor};(e||i)&&(\"normal\"===n&&!0===this.fontOptions.chooser&&this.elementOptions.labelHighlightBold?r.mod=\"bold\":\"function\"==typeof this.fontOptions.chooser&&this.fontOptions.chooser(r,this.elementOptions.id,e,i));var s=\"\";return void 0!==r.mod&&\"\"!==r.mod&&(s+=r.mod+\" \"),s+=r.size+\"px \"+r.face,t.font=s.replace(/\"/g,\"\"),r.font=t.font,r.height=r.size,r}},{key:\"differentState\",value:function(t,e){return t!==this.selectedState||e!==this.hoverState}},{key:\"_processLabelText\",value:function(t,e,i,n){return new wu(t,this,e,i).process(n)}},{key:\"_processLabel\",value:function(t,e,i){if(!1!==this.labelDirty||this.differentState(e,i)){var n=this._processLabelText(t,e,i,this.elementOptions.label);this.fontOptions.minWdt>0&&n.width<this.fontOptions.minWdt&&(n.width=this.fontOptions.minWdt),this.size.labelHeight=n.height,this.fontOptions.minHgt>0&&n.height<this.fontOptions.minHgt&&(n.height=this.fontOptions.minHgt),this.lines=n.lines,this.lineCount=n.lines.length,this.size.width=n.width,this.size.height=n.height,this.selectedState=e,this.hoverState=i,this.labelDirty=!1}}},{key:\"visible\",value:function(){return 0!==this.size.width&&0!==this.size.height&&void 0!==this.elementOptions.label&&!(this.fontOptions.size*this.body.view.scale<this.elementOptions.scaling.label.drawThreshold-1)}}],[{key:\"parseFontString\",value:function(t,e){if(!e||\"string\"!=typeof e)return!1;var i=e.split(\" \");return t.size=+i[0].replace(\"px\",\"\"),t.face=i[1],t.color=i[2],!0}}]),t}(),xu=function(){function t(e,i,n){Nn(this,t),this.body=i,this.labelModule=n,this.setOptions(e),this.top=void 0,this.left=void 0,this.height=void 0,this.width=void 0,this.radius=void 0,this.margin=void 0,this.refreshNeeded=!0,this.boundingBox={top:0,left:0,right:0,bottom:0}}return Fn(t,[{key:\"setOptions\",value:function(t){this.options=t}},{key:\"_setMargins\",value:function(t){this.margin={},this.options.margin&&(\"object\"==go(this.options.margin)?(this.margin.top=this.options.margin.top,this.margin.right=this.options.margin.right,this.margin.bottom=this.options.margin.bottom,this.margin.left=this.options.margin.left):(this.margin.top=this.options.margin,this.margin.right=this.options.margin,this.margin.bottom=this.options.margin,this.margin.left=this.options.margin)),t.adjustSizes(this.margin)}},{key:\"_distanceToBorder\",value:function(t,e){var i=this.options.borderWidth;return t&&this.resize(t),Math.min(Math.abs(this.width/2/Math.cos(e)),Math.abs(this.height/2/Math.sin(e)))+i}},{key:\"enableShadow\",value:function(t,e){e.shadow&&(t.shadowColor=e.shadowColor,t.shadowBlur=e.shadowSize,t.shadowOffsetX=e.shadowX,t.shadowOffsetY=e.shadowY)}},{key:\"disableShadow\",value:function(t,e){e.shadow&&(t.shadowColor=\"rgba(0,0,0,0)\",t.shadowBlur=0,t.shadowOffsetX=0,t.shadowOffsetY=0)}},{key:\"enableBorderDashes\",value:function(t,e){if(!1!==e.borderDashes)if(void 0!==t.setLineDash){var i=e.borderDashes;!0===i&&(i=[5,15]),t.setLineDash(i)}else console.warn(\"setLineDash is not supported in this browser. The dashed borders cannot be used.\"),this.options.shapeProperties.borderDashes=!1,e.borderDashes=!1}},{key:\"disableBorderDashes\",value:function(t,e){!1!==e.borderDashes&&(void 0!==t.setLineDash?t.setLineDash([0]):(console.warn(\"setLineDash is not supported in this browser. The dashed borders cannot be used.\"),this.options.shapeProperties.borderDashes=!1,e.borderDashes=!1))}},{key:\"needsRefresh\",value:function(t,e){return!0===this.refreshNeeded?(this.refreshNeeded=!1,!0):void 0===this.width||this.labelModule.differentState(t,e)}},{key:\"initContextForDraw\",value:function(t,e){var i=e.borderWidth/this.body.view.scale;t.lineWidth=Math.min(this.width,i),t.strokeStyle=e.borderColor,t.fillStyle=e.color}},{key:\"performStroke\",value:function(t,e){var i=e.borderWidth/this.body.view.scale;t.save(),i>0&&(this.enableBorderDashes(t,e),t.stroke(),this.disableBorderDashes(t,e)),t.restore()}},{key:\"performFill\",value:function(t,e){t.save(),t.fillStyle=e.color,this.enableShadow(t,e),hs(t).call(t),this.disableShadow(t,e),t.restore(),this.performStroke(t,e)}},{key:\"_addBoundingBoxMargin\",value:function(t){this.boundingBox.left-=t,this.boundingBox.top-=t,this.boundingBox.bottom+=t,this.boundingBox.right+=t}},{key:\"_updateBoundingBox\",value:function(t,e,i,n,o){void 0!==i&&this.resize(i,n,o),this.left=t-this.width/2,this.top=e-this.height/2,this.boundingBox.left=this.left,this.boundingBox.top=this.top,this.boundingBox.bottom=this.top+this.height,this.boundingBox.right=this.left+this.width}},{key:\"updateBoundingBox\",value:function(t,e,i,n,o){this._updateBoundingBox(t,e,i,n,o)}},{key:\"getDimensionsFromLabel\",value:function(t,e,i){this.textSize=this.labelModule.getTextSize(t,e,i);var n=this.textSize.width,o=this.textSize.height;return 0===n&&(n=14,o=14),{width:n,height:o}}}]),t}();function Eu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Ou=function(t){Ad(i,t);var e=Eu(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o))._setMargins(o),r}return Fn(i,[{key:\"resize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(this.needsRefresh(e,i)){var n=this.getDimensionsFromLabel(t,e,i);this.width=n.width+this.margin.right+this.margin.left,this.height=n.height+this.margin.top+this.margin.bottom,this.radius=this.width/2}}},{key:\"draw\",value:function(t,e,i,n,o,r){this.resize(t,n,o),this.left=e-this.width/2,this.top=i-this.height/2,this.initContextForDraw(t,r),Yt(t,this.left,this.top,this.width,this.height,r.borderRadius),this.performFill(t,r),this.updateBoundingBox(e,i,t,n,o),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,n,o)}},{key:\"updateBoundingBox\",value:function(t,e,i,n,o){this._updateBoundingBox(t,e,i,n,o);var r=this.options.shapeProperties.borderRadius;this._addBoundingBoxMargin(r)}},{key:\"distanceToBorder\",value:function(t,e){t&&this.resize(t);var i=this.options.borderWidth;return Math.min(Math.abs(this.width/2/Math.cos(e)),Math.abs(this.height/2/Math.sin(e)))+i}}]),i}(xu);function Cu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Su=function(t){Ad(i,t);var e=Cu(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o)).labelOffset=0,r.selected=!1,r}return Fn(i,[{key:\"setOptions\",value:function(t,e,i){this.options=t,void 0===e&&void 0===i||this.setImages(e,i)}},{key:\"setImages\",value:function(t,e){e&&this.selected?(this.imageObj=e,this.imageObjAlt=t):(this.imageObj=t,this.imageObjAlt=e)}},{key:\"switchImages\",value:function(t){var e=t&&!this.selected||!t&&this.selected;if(this.selected=t,void 0!==this.imageObjAlt&&e){var i=this.imageObj;this.imageObj=this.imageObjAlt,this.imageObjAlt=i}}},{key:\"_getImagePadding\",value:function(){var t={top:0,right:0,bottom:0,left:0};if(this.options.imagePadding){var e=this.options.imagePadding;\"object\"==go(e)?(t.top=e.top,t.right=e.right,t.bottom=e.bottom,t.left=e.left):(t.top=e,t.right=e,t.bottom=e,t.left=e)}return t}},{key:\"_resizeImage\",value:function(){var t,e;if(!1===this.options.shapeProperties.useImageSize){var i=1,n=1;this.imageObj.width&&this.imageObj.height&&(this.imageObj.width>this.imageObj.height?i=this.imageObj.width/this.imageObj.height:n=this.imageObj.height/this.imageObj.width),t=2*this.options.size*i,e=2*this.options.size*n}else{var o=this._getImagePadding();t=this.imageObj.width+o.left+o.right,e=this.imageObj.height+o.top+o.bottom}this.width=t,this.height=e,this.radius=.5*this.width}},{key:\"_drawRawCircle\",value:function(t,e,i,n){this.initContextForDraw(t,n),Ut(t,e,i,n.size),this.performFill(t,n)}},{key:\"_drawImageAtPosition\",value:function(t,e){if(0!=this.imageObj.width){t.globalAlpha=void 0!==e.opacity?e.opacity:1,this.enableShadow(t,e);var i=1;!0===this.options.shapeProperties.interpolation&&(i=this.imageObj.width/this.width/this.body.view.scale);var n=this._getImagePadding(),o=this.left+n.left,r=this.top+n.top,s=this.width-n.left-n.right,a=this.height-n.top-n.bottom;this.imageObj.drawImageAtPosition(t,i,o,r,s,a),this.disableShadow(t,e)}}},{key:\"_drawImageLabel\",value:function(t,e,i,n,o){var r=0;if(void 0!==this.height){r=.5*this.height;var s=this.labelModule.getTextSize(t,n,o);s.lineCount>=1&&(r+=s.height/2)}var a=i+r;this.options.label&&(this.labelOffset=r),this.labelModule.draw(t,e,a,n,o,\"hanging\")}}]),i}(xu);function Tu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Mu=function(t){Ad(i,t);var e=Tu(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o))._setMargins(o),r}return Fn(i,[{key:\"resize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(this.needsRefresh(e,i)){var n=this.getDimensionsFromLabel(t,e,i),o=Math.max(n.width+this.margin.right+this.margin.left,n.height+this.margin.top+this.margin.bottom);this.options.size=o/2,this.width=o,this.height=o,this.radius=this.width/2}}},{key:\"draw\",value:function(t,e,i,n,o,r){this.resize(t,n,o),this.left=e-this.width/2,this.top=i-this.height/2,this._drawRawCircle(t,e,i,r),this.updateBoundingBox(e,i),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,i,n,o)}},{key:\"updateBoundingBox\",value:function(t,e){this.boundingBox.top=e-this.options.size,this.boundingBox.left=t-this.options.size,this.boundingBox.right=t+this.options.size,this.boundingBox.bottom=e+this.options.size}},{key:\"distanceToBorder\",value:function(t){return t&&this.resize(t),.5*this.width}}]),i}(Su);function Pu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Du=function(t){Ad(i,t);var e=Pu(i);function i(t,n,o,r,s){var a;return Nn(this,i),(a=e.call(this,t,n,o)).setImages(r,s),a}return Fn(i,[{key:\"resize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover,n=void 0===this.imageObj.src||void 0===this.imageObj.width||void 0===this.imageObj.height;if(n){var o=2*this.options.size;return this.width=o,this.height=o,void(this.radius=.5*this.width)}this.needsRefresh(e,i)&&this._resizeImage()}},{key:\"draw\",value:function(t,e,i,n,o,r){this.switchImages(n),this.resize();var s=e,a=i;\"top-left\"===this.options.shapeProperties.coordinateOrigin?(this.left=e,this.top=i,s+=this.width/2,a+=this.height/2):(this.left=e-this.width/2,this.top=i-this.height/2),this._drawRawCircle(t,s,a,r),t.save(),t.clip(),this._drawImageAtPosition(t,r),t.restore(),this._drawImageLabel(t,s,a,n,o),this.updateBoundingBox(e,i)}},{key:\"updateBoundingBox\",value:function(t,e){\"top-left\"===this.options.shapeProperties.coordinateOrigin?(this.boundingBox.top=e,this.boundingBox.left=t,this.boundingBox.right=t+2*this.options.size,this.boundingBox.bottom=e+2*this.options.size):(this.boundingBox.top=e-this.options.size,this.boundingBox.left=t-this.options.size,this.boundingBox.right=t+this.options.size,this.boundingBox.bottom=e+this.options.size),this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelOffset)}},{key:\"distanceToBorder\",value:function(t){return t&&this.resize(t),.5*this.width}}]),i}(Su);function Iu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Bu=function(t){Ad(i,t);var e=Iu(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"resize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover,n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{size:this.options.size};if(this.needsRefresh(e,i)){var o,r;this.labelModule.getTextSize(t,e,i);var s=2*n.size;this.width=null!==(o=this.customSizeWidth)&&void 0!==o?o:s,this.height=null!==(r=this.customSizeHeight)&&void 0!==r?r:s,this.radius=.5*this.width}}},{key:\"_drawShape\",value:function(t,e,i,n,o,r,s,a){var h,l=this;return this.resize(t,r,s,a),this.left=n-this.width/2,this.top=o-this.height/2,this.initContextForDraw(t,a),(h=e,Object.prototype.hasOwnProperty.call($t,h)?$t[h]:function(t){for(var e=arguments.length,i=new Array(e>1?e-1:0),n=1;n<e;n++)i[n-1]=arguments[n];CanvasRenderingContext2D.prototype[h].call(t,i)})(t,n,o,a.size),this.performFill(t,a),void 0!==this.options.icon&&void 0!==this.options.icon.code&&(t.font=(r?\"bold \":\"\")+this.height/2+\"px \"+(this.options.icon.face||\"FontAwesome\"),t.fillStyle=this.options.icon.color||\"black\",t.textAlign=\"center\",t.textBaseline=\"middle\",t.fillText(this.options.icon.code,n,o)),{drawExternalLabel:function(){if(void 0!==l.options.label){l.labelModule.calculateLabelSize(t,r,s,n,o,\"hanging\");var e=o+.5*l.height+.5*l.labelModule.size.height;l.labelModule.draw(t,n,e,r,s,\"hanging\")}l.updateBoundingBox(n,o)}}}},{key:\"updateBoundingBox\",value:function(t,e){this.boundingBox.top=e-this.options.size,this.boundingBox.left=t-this.options.size,this.boundingBox.right=t+this.options.size,this.boundingBox.bottom=e+this.options.size,void 0!==this.options.label&&this.labelModule.size.width>0&&(this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelModule.size.height))}}]),i}(xu);function zu(t,e){var i=zo(t);if(On){var n=On(t);e&&(n=mr(n).call(n,(function(e){return Mn(t,e).enumerable}))),i.push.apply(i,n)}return i}function Nu(t){for(var e=1;e<arguments.length;e++){var i,n=null!=arguments[e]?arguments[e]:{};if(e%2)Wo(i=zu(Object(n),!0)).call(i,(function(e){jn(t,e,n[e])}));else if(Dn)In(t,Dn(n));else{var o;Wo(o=zu(Object(n))).call(o,(function(e){zn(t,e,Mn(n,e))}))}}return t}function Au(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Fu=function(t){Ad(i,t);var e=Au(i);function i(t,n,o,r){var s;return Nn(this,i),(s=e.call(this,t,n,o,r)).ctxRenderer=r,s}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){this.resize(t,n,o,r),this.left=e-this.width/2,this.top=i-this.height/2,t.save();var s=this.ctxRenderer({ctx:t,id:this.options.id,x:e,y:i,state:{selected:n,hover:o},style:Nu({},r),label:this.options.label});if(null!=s.drawNode&&s.drawNode(),t.restore(),s.drawExternalLabel){var a=s.drawExternalLabel;s.drawExternalLabel=function(){t.save(),a(),t.restore()}}return s.nodeDimensions&&(this.customSizeWidth=s.nodeDimensions.width,this.customSizeHeight=s.nodeDimensions.height),s}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Bu);function ju(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Ru=function(t){Ad(i,t);var e=ju(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o))._setMargins(o),r}return Fn(i,[{key:\"resize\",value:function(t,e,i){if(this.needsRefresh(e,i)){var n=this.getDimensionsFromLabel(t,e,i).width+this.margin.right+this.margin.left;this.width=n,this.height=n,this.radius=this.width/2}}},{key:\"draw\",value:function(t,e,i,n,o,r){this.resize(t,n,o),this.left=e-this.width/2,this.top=i-this.height/2,this.initContextForDraw(t,r),Gt(t,e-this.width/2,i-this.height/2,this.width,this.height),this.performFill(t,r),this.updateBoundingBox(e,i,t,n,o),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,n,o)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(xu);function Lu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Hu=function(t){Ad(i,t);var e=Lu(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){return this._drawShape(t,\"diamond\",4,e,i,n,o,r)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Bu);function Wu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var qu=function(t){Ad(i,t);var e=Wu(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){return this._drawShape(t,\"circle\",2,e,i,n,o,r)}},{key:\"distanceToBorder\",value:function(t){return t&&this.resize(t),this.options.size}}]),i}(Bu);function Vu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Uu=function(t){Ad(i,t);var e=Vu(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"resize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(this.needsRefresh(e,i)){var n=this.getDimensionsFromLabel(t,e,i);this.height=2*n.height,this.width=n.width+n.height,this.radius=.5*this.width}}},{key:\"draw\",value:function(t,e,i,n,o,r){this.resize(t,n,o),this.left=e-.5*this.width,this.top=i-.5*this.height,this.initContextForDraw(t,r),Xt(t,this.left,this.top,this.width,this.height),this.performFill(t,r),this.updateBoundingBox(e,i,t,n,o),this.labelModule.draw(t,e,i,n,o)}},{key:\"distanceToBorder\",value:function(t,e){t&&this.resize(t);var i=.5*this.width,n=.5*this.height,o=Math.sin(e)*i,r=Math.cos(e)*n;return i*n/Math.sqrt(o*o+r*r)}}]),i}(xu);function Yu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Xu=function(t){Ad(i,t);var e=Yu(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o))._setMargins(o),r}return Fn(i,[{key:\"resize\",value:function(t,e,i){this.needsRefresh(e,i)&&(this.iconSize={width:Number(this.options.icon.size),height:Number(this.options.icon.size)},this.width=this.iconSize.width+this.margin.right+this.margin.left,this.height=this.iconSize.height+this.margin.top+this.margin.bottom,this.radius=.5*this.width)}},{key:\"draw\",value:function(t,e,i,n,o,r){var s=this;return this.resize(t,n,o),this.options.icon.size=this.options.icon.size||50,this.left=e-this.width/2,this.top=i-this.height/2,this._icon(t,e,i,n,o,r),{drawExternalLabel:function(){if(void 0!==s.options.label){s.labelModule.draw(t,s.left+s.iconSize.width/2+s.margin.left,i+s.height/2+5,n)}s.updateBoundingBox(e,i)}}}},{key:\"updateBoundingBox\",value:function(t,e){if(this.boundingBox.top=e-.5*this.options.icon.size,this.boundingBox.left=t-.5*this.options.icon.size,this.boundingBox.right=t+.5*this.options.icon.size,this.boundingBox.bottom=e+.5*this.options.icon.size,void 0!==this.options.label&&this.labelModule.size.width>0){this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelModule.size.height+5)}}},{key:\"_icon\",value:function(t,e,i,n,o,r){var s=Number(this.options.icon.size);void 0!==this.options.icon.code?(t.font=[null!=this.options.icon.weight?this.options.icon.weight:n?\"bold\":\"\",(null!=this.options.icon.weight&&n?5:0)+s+\"px\",this.options.icon.face].join(\" \"),t.fillStyle=this.options.icon.color||\"black\",t.textAlign=\"center\",t.textBaseline=\"middle\",this.enableShadow(t,r),t.fillText(this.options.icon.code,e,i),this.disableShadow(t,r)):console.error(\"When using the icon shape, you need to define the code in the icon options object. This can be done per node or globally.\")}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(xu);function Gu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Ku=function(t){Ad(i,t);var e=Gu(i);function i(t,n,o,r,s){var a;return Nn(this,i),(a=e.call(this,t,n,o)).setImages(r,s),a}return Fn(i,[{key:\"resize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover,n=void 0===this.imageObj.src||void 0===this.imageObj.width||void 0===this.imageObj.height;if(n){var o=2*this.options.size;return this.width=o,void(this.height=o)}this.needsRefresh(e,i)&&this._resizeImage()}},{key:\"draw\",value:function(t,e,i,n,o,r){t.save(),this.switchImages(n),this.resize();var s=e,a=i;if(\"top-left\"===this.options.shapeProperties.coordinateOrigin?(this.left=e,this.top=i,s+=this.width/2,a+=this.height/2):(this.left=e-this.width/2,this.top=i-this.height/2),!0===this.options.shapeProperties.useBorderWithImage){var h=this.options.borderWidth,l=this.options.borderWidthSelected||2*this.options.borderWidth,d=(n?l:h)/this.body.view.scale;t.lineWidth=Math.min(this.width,d),t.beginPath();var c=n?this.options.color.highlight.border:o?this.options.color.hover.border:this.options.color.border,u=n?this.options.color.highlight.background:o?this.options.color.hover.background:this.options.color.background;void 0!==r.opacity&&(c=Fh(c,r.opacity),u=Fh(u,r.opacity)),t.strokeStyle=c,t.fillStyle=u,t.rect(this.left-.5*t.lineWidth,this.top-.5*t.lineWidth,this.width+t.lineWidth,this.height+t.lineWidth),hs(t).call(t),this.performStroke(t,r),t.closePath()}this._drawImageAtPosition(t,r),this._drawImageLabel(t,s,a,n,o),this.updateBoundingBox(e,i),t.restore()}},{key:\"updateBoundingBox\",value:function(t,e){this.resize(),\"top-left\"===this.options.shapeProperties.coordinateOrigin?(this.left=t,this.top=e):(this.left=t-this.width/2,this.top=e-this.height/2),this.boundingBox.left=this.left,this.boundingBox.top=this.top,this.boundingBox.bottom=this.top+this.height,this.boundingBox.right=this.left+this.width,void 0!==this.options.label&&this.labelModule.size.width>0&&(this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelOffset))}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Su);function $u(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Zu=function(t){Ad(i,t);var e=$u(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){return this._drawShape(t,\"square\",2,e,i,n,o,r)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Bu);function Qu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Ju=function(t){Ad(i,t);var e=Qu(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){return this._drawShape(t,\"hexagon\",4,e,i,n,o,r)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Bu);function tf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var ef=function(t){Ad(i,t);var e=tf(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){return this._drawShape(t,\"star\",4,e,i,n,o,r)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Bu);function nf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var of=function(t){Ad(i,t);var e=nf(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o))._setMargins(o),r}return Fn(i,[{key:\"resize\",value:function(t,e,i){this.needsRefresh(e,i)&&(this.textSize=this.labelModule.getTextSize(t,e,i),this.width=this.textSize.width+this.margin.right+this.margin.left,this.height=this.textSize.height+this.margin.top+this.margin.bottom,this.radius=.5*this.width)}},{key:\"draw\",value:function(t,e,i,n,o,r){this.resize(t,n,o),this.left=e-this.width/2,this.top=i-this.height/2,this.enableShadow(t,r),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,n,o),this.disableShadow(t,r),this.updateBoundingBox(e,i,t,n,o)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(xu);function rf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var sf=function(t){Ad(i,t);var e=rf(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){return this._drawShape(t,\"triangle\",3,e,i,n,o,r)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Bu);function af(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var hf=function(t){Ad(i,t);var e=af(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){return this._drawShape(t,\"triangleDown\",3,e,i,n,o,r)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Bu);function lf(t,e){var i=zo(t);if(On){var n=On(t);e&&(n=mr(n).call(n,(function(e){return Mn(t,e).enumerable}))),i.push.apply(i,n)}return i}function df(t){for(var e=1;e<arguments.length;e++){var i,n=null!=arguments[e]?arguments[e]:{};if(e%2)Wo(i=lf(Object(n),!0)).call(i,(function(e){jn(t,e,n[e])}));else if(Dn)In(t,Dn(n));else{var o;Wo(o=lf(Object(n))).call(o,(function(e){zn(t,e,Mn(n,e))}))}}return t}var cf=function(){function t(e,i,n,o,r,s){Nn(this,t),this.options=Kh(r),this.globalOptions=r,this.defaultOptions=s,this.body=i,this.edges=[],this.id=void 0,this.imagelist=n,this.grouplist=o,this.x=void 0,this.y=void 0,this.baseSize=this.options.size,this.baseFontSize=this.options.font.size,this.predefinedPosition=!1,this.selected=!1,this.hover=!1,this.labelModule=new _u(this.body,this.options,!1),this.setOptions(e)}return Fn(t,[{key:\"attachEdge\",value:function(t){var e;-1===Hr(e=this.edges).call(e,t)&&this.edges.push(t)}},{key:\"detachEdge\",value:function(t){var e,i,n=Hr(e=this.edges).call(e,t);-1!=n&&er(i=this.edges).call(i,n,1)}},{key:\"setOptions\",value:function(e){var i=this.options.shape;if(e){if(void 0!==e.color&&(this._localColor=e.color),void 0!==e.id&&(this.id=e.id),void 0===this.id)throw new Error(\"Node must have an id\");t.checkMass(e,this.id),void 0!==e.x&&(null===e.x?(this.x=void 0,this.predefinedPosition=!1):(this.x=Br(e.x),this.predefinedPosition=!0)),void 0!==e.y&&(null===e.y?(this.y=void 0,this.predefinedPosition=!1):(this.y=Br(e.y),this.predefinedPosition=!0)),void 0!==e.size&&(this.baseSize=e.size),void 0!==e.value&&(e.value=hu(e.value)),t.parseOptions(this.options,e,!0,this.globalOptions,this.grouplist);var n=[e,this.options,this.defaultOptions];return this.chooser=fu(\"node\",n),this._load_images(),this.updateLabelModule(e),void 0!==e.opacity&&t.checkOpacity(e.opacity)&&(this.options.opacity=e.opacity),this.updateShape(i),void 0!==e.hidden||void 0!==e.physics}}},{key:\"_load_images\",value:function(){if((\"circularImage\"===this.options.shape||\"image\"===this.options.shape)&&void 0===this.options.image)throw new Error(\"Option image must be defined for node type '\"+this.options.shape+\"'\");if(void 0!==this.options.image){if(void 0===this.imagelist)throw new Error(\"Internal Error: No images provided\");if(\"string\"==typeof this.options.image)this.imageObj=this.imagelist.load(this.options.image,this.options.brokenImage,this.id);else{if(void 0===this.options.image.unselected)throw new Error(\"No unselected image provided\");this.imageObj=this.imagelist.load(this.options.image.unselected,this.options.brokenImage,this.id),void 0!==this.options.image.selected?this.imageObjAlt=this.imagelist.load(this.options.image.selected,this.options.brokenImage,this.id):this.imageObjAlt=void 0}}}},{key:\"getFormattingValues\",value:function(){var t={color:this.options.color.background,opacity:this.options.opacity,borderWidth:this.options.borderWidth,borderColor:this.options.color.border,size:this.options.size,borderDashes:this.options.shapeProperties.borderDashes,borderRadius:this.options.shapeProperties.borderRadius,shadow:this.options.shadow.enabled,shadowColor:this.options.shadow.color,shadowSize:this.options.shadow.size,shadowX:this.options.shadow.x,shadowY:this.options.shadow.y};if(this.selected||this.hover?!0===this.chooser?this.selected?(null!=this.options.borderWidthSelected?t.borderWidth=this.options.borderWidthSelected:t.borderWidth*=2,t.color=this.options.color.highlight.background,t.borderColor=this.options.color.highlight.border,t.shadow=this.options.shadow.enabled):this.hover&&(t.color=this.options.color.hover.background,t.borderColor=this.options.color.hover.border,t.shadow=this.options.shadow.enabled):\"function\"==typeof this.chooser&&(this.chooser(t,this.options.id,this.selected,this.hover),!1===t.shadow&&(t.shadowColor===this.options.shadow.color&&t.shadowSize===this.options.shadow.size&&t.shadowX===this.options.shadow.x&&t.shadowY===this.options.shadow.y||(t.shadow=!0))):t.shadow=this.options.shadow.enabled,void 0!==this.options.opacity){var e=this.options.opacity;t.borderColor=Fh(t.borderColor,e),t.color=Fh(t.color,e),t.shadowColor=Fh(t.shadowColor,e)}return t}},{key:\"updateLabelModule\",value:function(e){void 0!==this.options.label&&null!==this.options.label||(this.options.label=\"\"),t.updateGroupOptions(this.options,df(df({},e),{},{color:e&&e.color||this._localColor||void 0}),this.grouplist);var i=this.grouplist.get(this.options.group,!1),n=[e,this.options,i,this.globalOptions,this.defaultOptions];this.labelModule.update(this.options,n),void 0!==this.labelModule.baseSize&&(this.baseFontSize=this.labelModule.baseSize)}},{key:\"updateShape\",value:function(t){if(t===this.options.shape&&this.shape)this.shape.setOptions(this.options,this.imageObj,this.imageObjAlt);else switch(this.options.shape){case\"box\":this.shape=new Ou(this.options,this.body,this.labelModule);break;case\"circle\":this.shape=new Mu(this.options,this.body,this.labelModule);break;case\"circularImage\":this.shape=new Du(this.options,this.body,this.labelModule,this.imageObj,this.imageObjAlt);break;case\"custom\":this.shape=new Fu(this.options,this.body,this.labelModule,this.options.ctxRenderer);break;case\"database\":this.shape=new Ru(this.options,this.body,this.labelModule);break;case\"diamond\":this.shape=new Hu(this.options,this.body,this.labelModule);break;case\"dot\":this.shape=new qu(this.options,this.body,this.labelModule);break;case\"ellipse\":this.shape=new Uu(this.options,this.body,this.labelModule);break;case\"icon\":this.shape=new Xu(this.options,this.body,this.labelModule);break;case\"image\":this.shape=new Ku(this.options,this.body,this.labelModule,this.imageObj,this.imageObjAlt);break;case\"square\":this.shape=new Zu(this.options,this.body,this.labelModule);break;case\"hexagon\":this.shape=new Ju(this.options,this.body,this.labelModule);break;case\"star\":this.shape=new ef(this.options,this.body,this.labelModule);break;case\"text\":this.shape=new of(this.options,this.body,this.labelModule);break;case\"triangle\":this.shape=new sf(this.options,this.body,this.labelModule);break;case\"triangleDown\":this.shape=new hf(this.options,this.body,this.labelModule);break;default:this.shape=new Uu(this.options,this.body,this.labelModule)}this.needsRefresh()}},{key:\"select\",value:function(){this.selected=!0,this.needsRefresh()}},{key:\"unselect\",value:function(){this.selected=!1,this.needsRefresh()}},{key:\"needsRefresh\",value:function(){this.shape.refreshNeeded=!0}},{key:\"getTitle\",value:function(){return this.options.title}},{key:\"distanceToBorder\",value:function(t,e){return this.shape.distanceToBorder(t,e)}},{key:\"isFixed\",value:function(){return this.options.fixed.x&&this.options.fixed.y}},{key:\"isSelected\",value:function(){return this.selected}},{key:\"getValue\",value:function(){return this.options.value}},{key:\"getLabelSize\",value:function(){return this.labelModule.size()}},{key:\"setValueRange\",value:function(t,e,i){if(void 0!==this.options.value){var n=this.options.scaling.customScalingFunction(t,e,i,this.options.value),o=this.options.scaling.max-this.options.scaling.min;if(!0===this.options.scaling.label.enabled){var r=this.options.scaling.label.max-this.options.scaling.label.min;this.options.font.size=this.options.scaling.label.min+n*r}this.options.size=this.options.scaling.min+n*o}else this.options.size=this.baseSize,this.options.font.size=this.baseFontSize;this.updateLabelModule()}},{key:\"draw\",value:function(t){var e=this.getFormattingValues();return this.shape.draw(t,this.x,this.y,this.selected,this.hover,e)||{}}},{key:\"updateBoundingBox\",value:function(t){this.shape.updateBoundingBox(this.x,this.y,t)}},{key:\"resize\",value:function(t){var e=this.getFormattingValues();this.shape.resize(t,this.selected,this.hover,e)}},{key:\"getItemsOnPoint\",value:function(t){var e=[];return this.labelModule.visible()&&pu(this.labelModule.getSize(),t)&&e.push({nodeId:this.id,labelId:0}),pu(this.shape.boundingBox,t)&&e.push({nodeId:this.id}),e}},{key:\"isOverlappingWith\",value:function(t){return this.shape.left<t.right&&this.shape.left+this.shape.width>t.left&&this.shape.top<t.bottom&&this.shape.top+this.shape.height>t.top}},{key:\"isBoundingBoxOverlappingWith\",value:function(t){return this.shape.boundingBox.left<t.right&&this.shape.boundingBox.right>t.left&&this.shape.boundingBox.top<t.bottom&&this.shape.boundingBox.bottom>t.top}}],[{key:\"checkOpacity\",value:function(t){return 0<=t&&t<=1}},{key:\"checkCoordinateOrigin\",value:function(t){return void 0===t||\"center\"===t||\"top-left\"===t}},{key:\"updateGroupOptions\",value:function(e,i,n){var o;if(void 0!==n){var r=e.group;if(void 0!==i&&void 0!==i.group&&r!==i.group)throw new Error(\"updateGroupOptions: group values in options don't match.\");if(\"number\"==typeof r||\"string\"==typeof r&&\"\"!=r){var s=n.get(r);void 0!==s.opacity&&void 0===i.opacity&&(t.checkOpacity(s.opacity)||(console.error(\"Invalid option for node opacity. Value must be between 0 and 1, found: \"+s.opacity),s.opacity=void 0));var a=mr(o=uu(i)).call(o,(function(t){return null!=i[t]}));a.push(\"font\"),Oh(a,e,s),e.color=Rh(e.color)}}}},{key:\"parseOptions\",value:function(e,i){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},r=arguments.length>4?arguments[4]:void 0,s=[\"color\",\"fixed\",\"shadow\"];if(Oh(s,e,i,n),t.checkMass(i),void 0!==e.opacity&&(t.checkOpacity(e.opacity)||(console.error(\"Invalid option for node opacity. Value must be between 0 and 1, found: \"+e.opacity),e.opacity=void 0)),void 0!==i.opacity&&(t.checkOpacity(i.opacity)||(console.error(\"Invalid option for node opacity. Value must be between 0 and 1, found: \"+i.opacity),i.opacity=void 0)),i.shapeProperties&&!t.checkCoordinateOrigin(i.shapeProperties.coordinateOrigin)&&console.error(\"Invalid option for node coordinateOrigin, found: \"+i.shapeProperties.coordinateOrigin),$h(e,i,\"shadow\",o),void 0!==i.color&&null!==i.color){var a=Rh(i.color);_h(e.color,a)}else!0===n&&null===i.color&&(e.color=Kh(o.color));void 0!==i.fixed&&null!==i.fixed&&(\"boolean\"==typeof i.fixed?(e.fixed.x=i.fixed,e.fixed.y=i.fixed):(void 0!==i.fixed.x&&\"boolean\"==typeof i.fixed.x&&(e.fixed.x=i.fixed.x),void 0!==i.fixed.y&&\"boolean\"==typeof i.fixed.y&&(e.fixed.y=i.fixed.y))),!0===n&&null===i.font&&(e.font=Kh(o.font)),t.updateGroupOptions(e,i,r),void 0!==i.scaling&&$h(e.scaling,i.scaling,\"label\",o.scaling)}},{key:\"checkMass\",value:function(t,e){if(void 0!==t.mass&&t.mass<=0){var i=\"\";void 0!==e&&(i=\" in node id: \"+e),console.error(\"%cNegative or zero mass disallowed\"+i+\", setting mass to 1.\",cl),t.mass=1}}}]),t}();function uf(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return ff(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return ff(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function ff(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}var pf=function(){function t(e,i,n,o){var r,s=this;if(Nn(this,t),this.body=e,this.images=i,this.groups=n,this.layoutEngine=o,this.body.functions.createNode=Vt(r=this.create).call(r,this),this.nodesListeners={add:function(t,e){s.add(e.items)},update:function(t,e){s.update(e.items,e.data,e.oldData)},remove:function(t,e){s.remove(e.items)}},this.defaultOptions={borderWidth:1,borderWidthSelected:void 0,brokenImage:void 0,color:{border:\"#2B7CE9\",background:\"#97C2FC\",highlight:{border:\"#2B7CE9\",background:\"#D2E5FF\"},hover:{border:\"#2B7CE9\",background:\"#D2E5FF\"}},opacity:void 0,fixed:{x:!1,y:!1},font:{color:\"#343434\",size:14,face:\"arial\",background:\"none\",strokeWidth:0,strokeColor:\"#ffffff\",align:\"center\",vadjust:0,multi:!1,bold:{mod:\"bold\"},boldital:{mod:\"bold italic\"},ital:{mod:\"italic\"},mono:{mod:\"\",size:15,face:\"monospace\",vadjust:2}},group:void 0,hidden:!1,icon:{face:\"FontAwesome\",code:void 0,size:50,color:\"#2B7CE9\"},image:void 0,imagePadding:{top:0,right:0,bottom:0,left:0},label:void 0,labelHighlightBold:!0,level:void 0,margin:{top:5,right:5,bottom:5,left:5},mass:1,physics:!0,scaling:{min:10,max:30,label:{enabled:!1,min:14,max:30,maxVisible:30,drawThreshold:5},customScalingFunction:function(t,e,i,n){if(e===t)return.5;var o=1/(e-t);return Math.max(0,(n-t)*o)}},shadow:{enabled:!1,color:\"rgba(0,0,0,0.5)\",size:10,x:5,y:5},shape:\"ellipse\",shapeProperties:{borderDashes:!1,borderRadius:6,interpolation:!0,useImageSize:!1,useBorderWithImage:!1,coordinateOrigin:\"center\"},size:25,title:void 0,value:void 0,x:void 0,y:void 0},this.defaultOptions.mass<=0)throw\"Internal error: mass in defaultOptions of NodesHandler may not be zero or negative\";this.options=Kh(this.defaultOptions),this.bindEventListeners()}return Fn(t,[{key:\"bindEventListeners\",value:function(){var t,e,i=this;this.body.emitter.on(\"refreshNodes\",Vt(t=this.refresh).call(t,this)),this.body.emitter.on(\"refresh\",Vt(e=this.refresh).call(e,this)),this.body.emitter.on(\"destroy\",(function(){Dh(i.nodesListeners,(function(t,e){i.body.data.nodes&&i.body.data.nodes.off(e,t)})),delete i.body.functions.createNode,delete i.nodesListeners.add,delete i.nodesListeners.update,delete i.nodesListeners.remove,delete i.nodesListeners}))}},{key:\"setOptions\",value:function(t){if(void 0!==t){if(cf.parseOptions(this.options,t),void 0!==t.opacity&&(yd(t.opacity)||!wd(t.opacity)||t.opacity<0||t.opacity>1?console.error(\"Invalid option for node opacity. Value must be between 0 and 1, found: \"+t.opacity):this.options.opacity=t.opacity),void 0!==t.shape)for(var e in this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,e)&&this.body.nodes[e].updateShape();if(void 0!==t.font||void 0!==t.widthConstraint||void 0!==t.heightConstraint)for(var i=0,n=zo(this.body.nodes);i<n.length;i++){var o=n[i];this.body.nodes[o].updateLabelModule(),this.body.nodes[o].needsRefresh()}if(void 0!==t.size)for(var r in this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,r)&&this.body.nodes[r].needsRefresh();void 0===t.hidden&&void 0===t.physics||this.body.emitter.emit(\"_dataChanged\")}}},{key:\"setData\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=this.body.data.nodes;if(nu(\"id\",t))this.body.data.nodes=t;else if(So(t))this.body.data.nodes=new tu,this.body.data.nodes.add(t);else{if(t)throw new TypeError(\"Array or DataSet expected\");this.body.data.nodes=new tu}if(i&&Dh(this.nodesListeners,(function(t,e){i.off(e,t)})),this.body.nodes={},this.body.data.nodes){var n=this;Dh(this.nodesListeners,(function(t,e){n.body.data.nodes.on(e,t)}));var o=this.body.data.nodes.getIds();this.add(o,!0)}!1===e&&this.body.emitter.emit(\"_dataChanged\")}},{key:\"add\",value:function(t){for(var e,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=[],o=0;o<t.length;o++){e=t[o];var r=this.body.data.nodes.get(e),s=this.create(r);n.push(s),this.body.nodes[e]=s}this.layoutEngine.positionInitially(n),!1===i&&this.body.emitter.emit(\"_dataChanged\")}},{key:\"update\",value:function(t,e,i){for(var n=this.body.nodes,o=!1,r=0;r<t.length;r++){var s=t[r],a=n[s],h=e[r];void 0!==a?a.setOptions(h)&&(o=!0):(o=!0,a=this.create(h),n[s]=a)}o||void 0===i||(o=Od(e).call(e,(function(t,e){var n=i[e];return n&&n.level!==t.level}))),!0===o?this.body.emitter.emit(\"_dataChanged\"):this.body.emitter.emit(\"_dataUpdated\")}},{key:\"remove\",value:function(t){for(var e=this.body.nodes,i=0;i<t.length;i++){delete e[t[i]]}this.body.emitter.emit(\"_dataChanged\")}},{key:\"create\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:cf;return new e(t,this.body,this.images,this.groups,this.options,this.defaultOptions)}},{key:\"refresh\",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];Dh(this.body.nodes,(function(i,n){var o=t.body.data.nodes.get(n);void 0!==o&&(!0===e&&i.setOptions({x:null,y:null}),i.setOptions({fixed:!1}),i.setOptions(o))}))}},{key:\"getPositions\",value:function(t){var e={};if(void 0!==t){if(!0===So(t)){for(var i=0;i<t.length;i++)if(void 0!==this.body.nodes[t[i]]){var n=this.body.nodes[t[i]];e[t[i]]={x:Math.round(n.x),y:Math.round(n.y)}}}else if(void 0!==this.body.nodes[t]){var o=this.body.nodes[t];e[t]={x:Math.round(o.x),y:Math.round(o.y)}}}else for(var r=0;r<this.body.nodeIndices.length;r++){var s=this.body.nodes[this.body.nodeIndices[r]];e[this.body.nodeIndices[r]]={x:Math.round(s.x),y:Math.round(s.y)}}return e}},{key:\"getPosition\",value:function(t){if(null==t)throw new TypeError(\"No id was specified for getPosition method.\");if(null==this.body.nodes[t])throw new ReferenceError(\"NodeId provided for getPosition does not exist. Provided: \".concat(t));return{x:Math.round(this.body.nodes[t].x),y:Math.round(this.body.nodes[t].y)}}},{key:\"storePositions\",value:function(){var t,e=[],i=this.body.data.nodes.getDataSet(),n=uf(i.get());try{for(n.s();!(t=n.n()).done;){var o=t.value,r=o.id,s=this.body.nodes[r],a=Math.round(s.x),h=Math.round(s.y);o.x===a&&o.y===h||e.push({id:r,x:a,y:h})}}catch(t){n.e(t)}finally{n.f()}i.update(e)}},{key:\"getBoundingBox\",value:function(t){if(void 0!==this.body.nodes[t])return this.body.nodes[t].shape.boundingBox}},{key:\"getConnectedNodes\",value:function(t,e){var i=[];if(void 0!==this.body.nodes[t])for(var n=this.body.nodes[t],o={},r=0;r<n.edges.length;r++){var s=n.edges[r];\"to\"!==e&&s.toId==n.id?void 0===o[s.fromId]&&(i.push(s.fromId),o[s.fromId]=!0):\"from\"!==e&&s.fromId==n.id&&void 0===o[s.toId]&&(i.push(s.toId),o[s.toId]=!0)}return i}},{key:\"getConnectedEdges\",value:function(t){var e=[];if(void 0!==this.body.nodes[t])for(var i=this.body.nodes[t],n=0;n<i.edges.length;n++)e.push(i.edges[n].id);else console.error(\"NodeId provided for getConnectedEdges does not exist. Provided: \",t);return e}},{key:\"moveNode\",value:function(t,e,i){var n=this;void 0!==this.body.nodes[t]?(this.body.nodes[t].x=Number(e),this.body.nodes[t].y=Number(i),rs((function(){n.body.emitter.emit(\"startSimulation\")}),0)):console.error(\"Node id supplied to moveNode does not exist. Provided: \",t)}}]),t}();gt({target:\"Reflect\",stat:!0},{get:function t(e,i){var n,o,r=arguments.length<3?e:arguments[2];return dt(e)===r?e[i]:(n=tt.f(e,i))?j(n,\"value\")?n.value:void 0===n.get?void 0:n.get.call(r):w(o=Ee(e))?t(o,i,r):void 0}});var vf=k.Reflect.get,gf=Tn,yf=n((function(t){t.exports=function(t,e){for(;!Object.prototype.hasOwnProperty.call(t,e)&&null!==(t=Rd(t)););return t},t.exports.default=t.exports,t.exports.__esModule=!0}));i(yf);var mf=i(n((function(t){function e(i,n,o){return\"undefined\"!=typeof Reflect&&vf?(t.exports=e=vf,t.exports.default=t.exports,t.exports.__esModule=!0):(t.exports=e=function(t,e,i){var n=yf(t,e);if(n){var o=gf(n,e);return o.get?o.get.call(i):o.value}},t.exports.default=t.exports,t.exports.__esModule=!0),e(i,n,o||i)}t.exports=e,t.exports.default=t.exports,t.exports.__esModule=!0}))),bf=Math.hypot,wf=Math.abs,kf=Math.sqrt,_f=!!bf&&bf(1/0,NaN)!==1/0;gt({target:\"Math\",stat:!0,forced:_f},{hypot:function(t,e){for(var i,n,o=0,r=0,s=arguments.length,a=0;r<s;)a<(i=wf(arguments[r++]))?(o=o*(n=a/i)*n+1,a=i):o+=i>0?(n=i/a)*n:i;return a===1/0?1/0:a*kf(o)}});var xf=k.Math.hypot;function Ef(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Of=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"transform\",value:function(t,e){So(t)||(t=[t]);for(var i=e.point.x,n=e.point.y,o=e.angle,r=e.length,s=0;s<t.length;++s){var a=t[s],h=a.x*Math.cos(o)-a.y*Math.sin(o),l=a.x*Math.sin(o)+a.y*Math.cos(o);a.x=i+r*h,a.y=n+r*l}}},{key:\"drawPath\",value:function(t,e){t.beginPath(),t.moveTo(e[0].x,e[0].y);for(var i=1;i<e.length;++i)t.lineTo(e[i].x,e[i].y);t.closePath()}}]),t}(),Cf=function(t){Ad(i,t);var e=Ef(i);function i(){return Nn(this,i),e.apply(this,arguments)}return Fn(i,null,[{key:\"draw\",value:function(t,e){if(e.image){t.save(),t.translate(e.point.x,e.point.y),t.rotate(Math.PI/2+e.angle);var i=null!=e.imageWidth?e.imageWidth:e.image.width,n=null!=e.imageHeight?e.imageHeight:e.image.height;e.image.drawImageAtPosition(t,1,-i/2,0,i,n),t.restore()}return!1}}]),i}(Of),Sf=function(t){Ad(i,t);var e=Ef(i);function i(){return Nn(this,i),e.apply(this,arguments)}return Fn(i,null,[{key:\"draw\",value:function(t,e){var i=[{x:0,y:0},{x:-1,y:.3},{x:-.9,y:0},{x:-1,y:-.3}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),i}(Of),Tf=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i=[{x:-1,y:0},{x:0,y:.3},{x:-.4,y:0},{x:0,y:-.3}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),t}(),Mf=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i={x:-.4,y:0};Of.transform(i,e),t.strokeStyle=t.fillStyle,t.fillStyle=\"rgba(0, 0, 0, 0)\";var n=Math.PI,o=e.angle-n/2,r=e.angle+n/2;return t.beginPath(),t.arc(i.x,i.y,.4*e.length,o,r,!1),t.stroke(),!0}}]),t}(),Pf=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i={x:-.3,y:0};Of.transform(i,e),t.strokeStyle=t.fillStyle,t.fillStyle=\"rgba(0, 0, 0, 0)\";var n=Math.PI,o=e.angle+n/2,r=e.angle+3*n/2;return t.beginPath(),t.arc(i.x,i.y,.4*e.length,o,r,!1),t.stroke(),!0}}]),t}(),Df=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i=[{x:.02,y:0},{x:-1,y:.3},{x:-1,y:-.3}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),t}(),If=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i=[{x:0,y:.3},{x:0,y:-.3},{x:-1,y:0}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),t}(),Bf=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i={x:-.4,y:0};return Of.transform(i,e),Ut(t,i.x,i.y,.4*e.length),!0}}]),t}(),zf=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i=[{x:0,y:.5},{x:0,y:-.5},{x:-.15,y:-.5},{x:-.15,y:.5}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),t}(),Nf=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i=[{x:0,y:.3},{x:0,y:-.3},{x:-.6,y:-.3},{x:-.6,y:.3}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),t}(),Af=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i=[{x:0,y:0},{x:-.5,y:-.3},{x:-1,y:0},{x:-.5,y:.3}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),t}(),Ff=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i=[{x:-1,y:.3},{x:-.5,y:0},{x:-1,y:-.3},{x:0,y:0}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),t}(),jf=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i;switch(e.type&&(i=e.type.toLowerCase()),i){case\"image\":return Cf.draw(t,e);case\"circle\":return Bf.draw(t,e);case\"box\":return Nf.draw(t,e);case\"crow\":return Tf.draw(t,e);case\"curve\":return Mf.draw(t,e);case\"diamond\":return Af.draw(t,e);case\"inv_curve\":return Pf.draw(t,e);case\"triangle\":return Df.draw(t,e);case\"inv_triangle\":return If.draw(t,e);case\"bar\":return zf.draw(t,e);case\"vee\":return Ff.draw(t,e);case\"arrow\":default:return Sf.draw(t,e)}}}]),t}();function Rf(t,e){var i=zo(t);if(On){var n=On(t);e&&(n=mr(n).call(n,(function(e){return Mn(t,e).enumerable}))),i.push.apply(i,n)}return i}function Lf(t){for(var e=1;e<arguments.length;e++){var i,n=null!=arguments[e]?arguments[e]:{};if(e%2)Wo(i=Rf(Object(n),!0)).call(i,(function(e){jn(t,e,n[e])}));else if(Dn)In(t,Dn(n));else{var o;Wo(o=Rf(Object(n))).call(o,(function(e){zn(t,e,Mn(n,e))}))}}return t}var Hf=function(){function t(e,i,n){Nn(this,t),this._body=i,this._labelModule=n,this.color={},this.colorDirty=!0,this.hoverWidth=1.5,this.selectionWidth=2,this.setOptions(e),this.fromPoint=this.from,this.toPoint=this.to}return Fn(t,[{key:\"connect\",value:function(){this.from=this._body.nodes[this.options.from],this.to=this._body.nodes[this.options.to]}},{key:\"cleanup\",value:function(){return!1}},{key:\"setOptions\",value:function(t){this.options=t,this.from=this._body.nodes[this.options.from],this.to=this._body.nodes[this.options.to],this.id=this.options.id}},{key:\"drawLine\",value:function(t,e,i,n){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:this.getViaNode();t.strokeStyle=this.getColor(t,e),t.lineWidth=e.width,!1!==e.dashes?this._drawDashedLine(t,e,o):this._drawLine(t,e,o)}},{key:\"_drawLine\",value:function(t,e,i,n,o){if(this.from!=this.to)this._line(t,e,i,n,o);else{var r=this._getCircleData(t),s=uo(r,3),a=s[0],h=s[1],l=s[2];this._circle(t,e,a,h,l)}}},{key:\"_drawDashedLine\",value:function(t,e,i,n,o){t.lineCap=\"round\";var r=So(e.dashes)?e.dashes:[5,5];if(void 0!==t.setLineDash){if(t.save(),t.setLineDash(r),t.lineDashOffset=0,this.from!=this.to)this._line(t,e,i);else{var s=this._getCircleData(t),a=uo(s,3),h=a[0],l=a[1],d=a[2];this._circle(t,e,h,l,d)}t.setLineDash([0]),t.lineDashOffset=0,t.restore()}else{if(this.from!=this.to)Kt(t,this.from.x,this.from.y,this.to.x,this.to.y,r);else{var c=this._getCircleData(t),u=uo(c,3),f=u[0],p=u[1],v=u[2];this._circle(t,e,f,p,v)}this.enableShadow(t,e),t.stroke(),this.disableShadow(t,e)}}},{key:\"findBorderPosition\",value:function(t,e,i){return this.from!=this.to?this._findBorderPosition(t,e,i):this._findBorderPositionCircle(t,e,i)}},{key:\"findBorderPositions\",value:function(t){if(this.from!=this.to)return{from:this._findBorderPosition(this.from,t),to:this._findBorderPosition(this.to,t)};var e,i=Oo(e=this._getCircleData(t)).call(e,0,2),n=uo(i,2),o=n[0],r=n[1];return{from:this._findBorderPositionCircle(this.from,t,{x:o,y:r,low:.25,high:.6,direction:-1}),to:this._findBorderPositionCircle(this.from,t,{x:o,y:r,low:.6,high:.8,direction:1})}}},{key:\"_getCircleData\",value:function(t){var e=this.options.selfReference.size;void 0!==t&&void 0===this.from.shape.width&&this.from.shape.resize(t);var i=gu(t,this.options.selfReference.angle,e,this.from);return[i.x,i.y,e]}},{key:\"_pointOnCircle\",value:function(t,e,i,n){var o=2*n*Math.PI;return{x:t+i*Math.cos(o),y:e-i*Math.sin(o)}}},{key:\"_findBorderPositionCircle\",value:function(t,e,i){var n,o=i.x,r=i.y,s=i.low,a=i.high,h=i.direction,l=this.options.selfReference.size,d=.5*(s+a),c=0;!0===this.options.arrowStrikethrough&&(-1===h?c=this.options.endPointOffset.from:1===h&&(c=this.options.endPointOffset.to));var u=0;do{d=.5*(s+a),n=this._pointOnCircle(o,r,l,d);var f=Math.atan2(t.y-n.y,t.x-n.x),p=t.distanceToBorder(e,f)+c-Math.sqrt(Math.pow(n.x-t.x,2)+Math.pow(n.y-t.y,2));if(Math.abs(p)<.05)break;p>0?h>0?s=d:a=d:h>0?a=d:s=d,++u}while(s<=a&&u<10);return Lf(Lf({},n),{},{t:d})}},{key:\"getLineWidth\",value:function(t,e){return!0===t?Math.max(this.selectionWidth,.3/this._body.view.scale):!0===e?Math.max(this.hoverWidth,.3/this._body.view.scale):Math.max(this.options.width,.3/this._body.view.scale)}},{key:\"getColor\",value:function(t,e){if(!1!==e.inheritsColor){if(\"both\"===e.inheritsColor&&this.from.id!==this.to.id){var i=t.createLinearGradient(this.from.x,this.from.y,this.to.x,this.to.y),n=this.from.options.color.highlight.border,o=this.to.options.color.highlight.border;return!1===this.from.selected&&!1===this.to.selected?(n=Fh(this.from.options.color.border,e.opacity),o=Fh(this.to.options.color.border,e.opacity)):!0===this.from.selected&&!1===this.to.selected?o=this.to.options.color.border:!1===this.from.selected&&!0===this.to.selected&&(n=this.from.options.color.border),i.addColorStop(0,n),i.addColorStop(1,o),i}return\"to\"===e.inheritsColor?Fh(this.to.options.color.border,e.opacity):Fh(this.from.options.color.border,e.opacity)}return Fh(e.color,e.opacity)}},{key:\"_circle\",value:function(t,e,i,n,o){this.enableShadow(t,e);var r=0,s=2*Math.PI;if(!this.options.selfReference.renderBehindTheNode){var a=this.options.selfReference.angle,h=this.options.selfReference.angle+Math.PI,l=this._findBorderPositionCircle(this.from,t,{x:i,y:n,low:a,high:h,direction:-1}),d=this._findBorderPositionCircle(this.from,t,{x:i,y:n,low:a,high:h,direction:1});r=Math.atan2(l.y-n,l.x-i),s=Math.atan2(d.y-n,d.x-i)}t.beginPath(),t.arc(i,n,o,r,s,!1),t.stroke(),this.disableShadow(t,e)}},{key:\"getDistanceToEdge\",value:function(t,e,i,n,o,r){if(this.from!=this.to)return this._getDistanceToEdge(t,e,i,n,o,r);var s=this._getCircleData(void 0),a=uo(s,3),h=a[0],l=a[1],d=a[2],c=h-o,u=l-r;return Math.abs(Math.sqrt(c*c+u*u)-d)}},{key:\"_getDistanceToLine\",value:function(t,e,i,n,o,r){var s=i-t,a=n-e,h=((o-t)*s+(r-e)*a)/(s*s+a*a);h>1?h=1:h<0&&(h=0);var l=t+h*s-o,d=e+h*a-r;return Math.sqrt(l*l+d*d)}},{key:\"getArrowData\",value:function(t,e,i,n,o,r){var s,a,h,l,d,c,u,f=r.width;\"from\"===e?(h=this.from,l=this.to,d=r.fromArrowScale<0,c=Math.abs(r.fromArrowScale),u=r.fromArrowType):\"to\"===e?(h=this.to,l=this.from,d=r.toArrowScale<0,c=Math.abs(r.toArrowScale),u=r.toArrowType):(h=this.to,l=this.from,d=r.middleArrowScale<0,c=Math.abs(r.middleArrowScale),u=r.middleArrowType);var p=15*c+3*f;if(h!=l){var v=p/xf(h.x-l.x,h.y-l.y);if(\"middle\"!==e)if(!0===this.options.smooth.enabled){var g=this._findBorderPosition(h,t,{via:i}),y=this.getPoint(g.t+v*(\"from\"===e?1:-1),i);s=Math.atan2(g.y-y.y,g.x-y.x),a=g}else s=Math.atan2(h.y-l.y,h.x-l.x),a=this._findBorderPosition(h,t);else{var m=(d?-v:v)/2,b=this.getPoint(.5+m,i),w=this.getPoint(.5-m,i);s=Math.atan2(b.y-w.y,b.x-w.x),a=this.getPoint(.5,i)}}else{var k=this._getCircleData(t),_=uo(k,3),x=_[0],E=_[1],O=_[2];if(\"from\"===e){var C=this.options.selfReference.angle,S=this.options.selfReference.angle+Math.PI,T=this._findBorderPositionCircle(this.from,t,{x:x,y:E,low:C,high:S,direction:-1});s=-2*T.t*Math.PI+1.5*Math.PI+.1*Math.PI,a=T}else if(\"to\"===e){var M=this.options.selfReference.angle,P=this.options.selfReference.angle+Math.PI,D=this._findBorderPositionCircle(this.from,t,{x:x,y:E,low:M,high:P,direction:1});s=-2*D.t*Math.PI+1.5*Math.PI-1.1*Math.PI,a=D}else{var I=this.options.selfReference.angle/(2*Math.PI);a=this._pointOnCircle(x,E,O,I),s=-2*I*Math.PI+1.5*Math.PI+.1*Math.PI}}return{point:a,core:{x:a.x-.9*p*Math.cos(s),y:a.y-.9*p*Math.sin(s)},angle:s,length:p,type:u}}},{key:\"drawArrowHead\",value:function(t,e,i,n,o){t.strokeStyle=this.getColor(t,e),t.fillStyle=t.strokeStyle,t.lineWidth=e.width,jf.draw(t,o)&&(this.enableShadow(t,e),hs(t).call(t),this.disableShadow(t,e))}},{key:\"enableShadow\",value:function(t,e){!0===e.shadow&&(t.shadowColor=e.shadowColor,t.shadowBlur=e.shadowSize,t.shadowOffsetX=e.shadowX,t.shadowOffsetY=e.shadowY)}},{key:\"disableShadow\",value:function(t,e){!0===e.shadow&&(t.shadowColor=\"rgba(0,0,0,0)\",t.shadowBlur=0,t.shadowOffsetX=0,t.shadowOffsetY=0)}},{key:\"drawBackground\",value:function(t,e){if(!1!==e.background){var i={strokeStyle:t.strokeStyle,lineWidth:t.lineWidth,dashes:t.dashes};t.strokeStyle=e.backgroundColor,t.lineWidth=e.backgroundSize,this.setStrokeDashed(t,e.backgroundDashes),t.stroke(),t.strokeStyle=i.strokeStyle,t.lineWidth=i.lineWidth,t.dashes=i.dashes,this.setStrokeDashed(t,e.dashes)}}},{key:\"setStrokeDashed\",value:function(t,e){if(!1!==e)if(void 0!==t.setLineDash){var i=So(e)?e:[5,5];t.setLineDash(i)}else console.warn(\"setLineDash is not supported in this browser. The dashed stroke cannot be used.\");else void 0!==t.setLineDash?t.setLineDash([]):console.warn(\"setLineDash is not supported in this browser. The dashed stroke cannot be used.\")}}]),t}();function Wf(t,e){var i=zo(t);if(On){var n=On(t);e&&(n=mr(n).call(n,(function(e){return Mn(t,e).enumerable}))),i.push.apply(i,n)}return i}function qf(t){for(var e=1;e<arguments.length;e++){var i,n=null!=arguments[e]?arguments[e]:{};if(e%2)Wo(i=Wf(Object(n),!0)).call(i,(function(e){jn(t,e,n[e])}));else if(Dn)In(t,Dn(n));else{var o;Wo(o=Wf(Object(n))).call(o,(function(e){zn(t,e,Mn(n,e))}))}}return t}function Vf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Uf=function(t){Ad(i,t);var e=Vf(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"_findBorderPositionBezier\",value:function(t,e){var i,n,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this._getViaCoordinates(),r=10,s=.2,a=!1,h=1,l=0,d=this.to,c=this.options.endPointOffset?this.options.endPointOffset.to:0;t.id===this.from.id&&(d=this.from,a=!0,c=this.options.endPointOffset?this.options.endPointOffset.from:0),!1===this.options.arrowStrikethrough&&(c=0);var u=0;do{n=.5*(l+h),i=this.getPoint(n,o);var f=Math.atan2(d.y-i.y,d.x-i.x),p=d.distanceToBorder(e,f)+c,v=Math.sqrt(Math.pow(i.x-d.x,2)+Math.pow(i.y-d.y,2)),g=p-v;if(Math.abs(g)<s)break;g<0?!1===a?l=n:h=n:!1===a?h=n:l=n,++u}while(l<=h&&u<r);return qf(qf({},i),{},{t:n})}},{key:\"_getDistanceToBezierEdge\",value:function(t,e,i,n,o,r,s){var a,h,l,d,c,u=1e9,f=t,p=e;for(h=1;h<10;h++)l=.1*h,d=Math.pow(1-l,2)*t+2*l*(1-l)*s.x+Math.pow(l,2)*i,c=Math.pow(1-l,2)*e+2*l*(1-l)*s.y+Math.pow(l,2)*n,h>0&&(u=(a=this._getDistanceToLine(f,p,d,c,o,r))<u?a:u),f=d,p=c;return u}},{key:\"_bezierCurve\",value:function(t,e,i,n){t.beginPath(),t.moveTo(this.fromPoint.x,this.fromPoint.y),null!=i&&null!=i.x?null!=n&&null!=n.x?t.bezierCurveTo(i.x,i.y,n.x,n.y,this.toPoint.x,this.toPoint.y):t.quadraticCurveTo(i.x,i.y,this.toPoint.x,this.toPoint.y):t.lineTo(this.toPoint.x,this.toPoint.y),this.drawBackground(t,e),this.enableShadow(t,e),t.stroke(),this.disableShadow(t,e)}},{key:\"getViaNode\",value:function(){return this._getViaCoordinates()}}]),i}(Hf);function Yf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Xf=function(t){Ad(i,t);var e=Yf(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o)).via=r.via,r._boundFunction=function(){r.positionBezierNode()},r._body.emitter.on(\"_repositionBezierNodes\",r._boundFunction),r}return Fn(i,[{key:\"setOptions\",value:function(t){mf(Ld(i.prototype),\"setOptions\",this).call(this,t);var e=!1;this.options.physics!==t.physics&&(e=!0),this.options=t,this.id=this.options.id,this.from=this._body.nodes[this.options.from],this.to=this._body.nodes[this.options.to],this.setupSupportNode(),this.connect(),!0===e&&(this.via.setOptions({physics:this.options.physics}),this.positionBezierNode())}},{key:\"connect\",value:function(){this.from=this._body.nodes[this.options.from],this.to=this._body.nodes[this.options.to],void 0===this.from||void 0===this.to||!1===this.options.physics||this.from.id===this.to.id?this.via.setOptions({physics:!1}):this.via.setOptions({physics:!0})}},{key:\"cleanup\",value:function(){return this._body.emitter.off(\"_repositionBezierNodes\",this._boundFunction),void 0!==this.via&&(delete this._body.nodes[this.via.id],this.via=void 0,!0)}},{key:\"setupSupportNode\",value:function(){if(void 0===this.via){var t=\"edgeId:\"+this.id,e=this._body.functions.createNode({id:t,shape:\"circle\",physics:!0,hidden:!0});this._body.nodes[t]=e,this.via=e,this.via.parentEdgeId=this.id,this.positionBezierNode()}}},{key:\"positionBezierNode\",value:function(){void 0!==this.via&&void 0!==this.from&&void 0!==this.to?(this.via.x=.5*(this.from.x+this.to.x),this.via.y=.5*(this.from.y+this.to.y)):void 0!==this.via&&(this.via.x=0,this.via.y=0)}},{key:\"_line\",value:function(t,e,i){this._bezierCurve(t,e,i)}},{key:\"_getViaCoordinates\",value:function(){return this.via}},{key:\"getViaNode\",value:function(){return this.via}},{key:\"getPoint\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.via;if(this.from===this.to){var i=this._getCircleData(),n=uo(i,3),o=n[0],r=n[1],s=n[2],a=2*Math.PI*(1-t);return{x:o+s*Math.sin(a),y:r+s-s*(1-Math.cos(a))}}return{x:Math.pow(1-t,2)*this.fromPoint.x+2*t*(1-t)*e.x+Math.pow(t,2)*this.toPoint.x,y:Math.pow(1-t,2)*this.fromPoint.y+2*t*(1-t)*e.y+Math.pow(t,2)*this.toPoint.y}}},{key:\"_findBorderPosition\",value:function(t,e){return this._findBorderPositionBezier(t,e,this.via)}},{key:\"_getDistanceToEdge\",value:function(t,e,i,n,o,r){return this._getDistanceToBezierEdge(t,e,i,n,o,r,this.via)}}]),i}(Uf);function Gf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Kf=function(t){Ad(i,t);var e=Gf(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"_line\",value:function(t,e,i){this._bezierCurve(t,e,i)}},{key:\"getViaNode\",value:function(){return this._getViaCoordinates()}},{key:\"_getViaCoordinates\",value:function(){var t,e,i=this.options.smooth.roundness,n=this.options.smooth.type,o=Math.abs(this.from.x-this.to.x),r=Math.abs(this.from.y-this.to.y);if(\"discrete\"===n||\"diagonalCross\"===n){var s,a;s=a=o<=r?i*r:i*o,this.from.x>this.to.x&&(s=-s),this.from.y>=this.to.y&&(a=-a);var h=this.from.x+s,l=this.from.y+a;return\"discrete\"===n&&(o<=r?h=o<i*r?this.from.x:h:l=r<i*o?this.from.y:l),{x:h,y:l}}if(\"straightCross\"===n){var d=(1-i)*o,c=(1-i)*r;return o<=r?(d=0,this.from.y<this.to.y&&(c=-c)):(this.from.x<this.to.x&&(d=-d),c=0),{x:this.to.x+d,y:this.to.y+c}}if(\"horizontal\"===n){var u=(1-i)*o;return this.from.x<this.to.x&&(u=-u),{x:this.to.x+u,y:this.from.y}}if(\"vertical\"===n){var f=(1-i)*r;return this.from.y<this.to.y&&(f=-f),{x:this.from.x,y:this.to.y+f}}if(\"curvedCW\"===n){o=this.to.x-this.from.x,r=this.from.y-this.to.y;var p=Math.sqrt(o*o+r*r),v=Math.PI,g=(Math.atan2(r,o)+(.5*i+.5)*v)%(2*v);return{x:this.from.x+(.5*i+.5)*p*Math.sin(g),y:this.from.y+(.5*i+.5)*p*Math.cos(g)}}if(\"curvedCCW\"===n){o=this.to.x-this.from.x,r=this.from.y-this.to.y;var y=Math.sqrt(o*o+r*r),m=Math.PI,b=(Math.atan2(r,o)+(.5*-i+.5)*m)%(2*m);return{x:this.from.x+(.5*i+.5)*y*Math.sin(b),y:this.from.y+(.5*i+.5)*y*Math.cos(b)}}t=e=o<=r?i*r:i*o,this.from.x>this.to.x&&(t=-t),this.from.y>=this.to.y&&(e=-e);var w=this.from.x+t,k=this.from.y+e;return o<=r?w=this.from.x<=this.to.x?this.to.x<w?this.to.x:w:this.to.x>w?this.to.x:w:k=this.from.y>=this.to.y?this.to.y>k?this.to.y:k:this.to.y<k?this.to.y:k,{x:w,y:k}}},{key:\"_findBorderPosition\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this._findBorderPositionBezier(t,e,i.via)}},{key:\"_getDistanceToEdge\",value:function(t,e,i,n,o,r){var s=arguments.length>6&&void 0!==arguments[6]?arguments[6]:this._getViaCoordinates();return this._getDistanceToBezierEdge(t,e,i,n,o,r,s)}},{key:\"getPoint\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this._getViaCoordinates(),i=t,n=Math.pow(1-i,2)*this.fromPoint.x+2*i*(1-i)*e.x+Math.pow(i,2)*this.toPoint.x,o=Math.pow(1-i,2)*this.fromPoint.y+2*i*(1-i)*e.y+Math.pow(i,2)*this.toPoint.y;return{x:n,y:o}}}]),i}(Uf);function $f(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}function Zf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Qf=function(t){Ad(i,t);var e=Zf(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"_line\",value:function(t,e,i){var n=i[0],o=i[1];this._bezierCurve(t,e,n,o)}},{key:\"_getViaCoordinates\",value:function(){var t,e,i,n,o=this.from.x-this.to.x,r=this.from.y-this.to.y,s=this.options.smooth.roundness;return(Math.abs(o)>Math.abs(r)||!0===this.options.smooth.forceDirection||\"horizontal\"===this.options.smooth.forceDirection)&&\"vertical\"!==this.options.smooth.forceDirection?(e=this.from.y,n=this.to.y,t=this.from.x-s*o,i=this.to.x+s*o):(e=this.from.y-s*r,n=this.to.y+s*r,t=this.from.x,i=this.to.x),[{x:t,y:e},{x:i,y:n}]}},{key:\"getViaNode\",value:function(){return this._getViaCoordinates()}},{key:\"_findBorderPosition\",value:function(t,e){return this._findBorderPositionBezier(t,e)}},{key:\"_getDistanceToEdge\",value:function(t,e,i,n,o,r){var s=arguments.length>6&&void 0!==arguments[6]?arguments[6]:this._getViaCoordinates(),a=uo(s,2),h=a[0],l=a[1];return this._getDistanceToBezierEdge2(t,e,i,n,o,r,h,l)}},{key:\"getPoint\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this._getViaCoordinates(),i=uo(e,2),n=i[0],o=i[1],r=t,s=[Math.pow(1-r,3),3*r*Math.pow(1-r,2),3*Math.pow(r,2)*(1-r),Math.pow(r,3)],a=s[0]*this.fromPoint.x+s[1]*n.x+s[2]*o.x+s[3]*this.toPoint.x,h=s[0]*this.fromPoint.y+s[1]*n.y+s[2]*o.y+s[3]*this.toPoint.y;return{x:a,y:h}}}]),i}(function(t){Ad(i,t);var e=$f(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"_getDistanceToBezierEdge2\",value:function(t,e,i,n,o,r,s,a){for(var h=1e9,l=t,d=e,c=[0,0,0,0],u=1;u<10;u++){var f=.1*u;c[0]=Math.pow(1-f,3),c[1]=3*f*Math.pow(1-f,2),c[2]=3*Math.pow(f,2)*(1-f),c[3]=Math.pow(f,3);var p=c[0]*t+c[1]*s.x+c[2]*a.x+c[3]*i,v=c[0]*e+c[1]*s.y+c[2]*a.y+c[3]*n;if(u>0){var g=this._getDistanceToLine(l,d,p,v,o,r);h=g<h?g:h}l=p,d=v}return h}}]),i}(Uf));function Jf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var tp=function(t){Ad(i,t);var e=Jf(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"_line\",value:function(t,e){t.beginPath(),t.moveTo(this.fromPoint.x,this.fromPoint.y),t.lineTo(this.toPoint.x,this.toPoint.y),this.enableShadow(t,e),t.stroke(),this.disableShadow(t,e)}},{key:\"getViaNode\",value:function(){}},{key:\"getPoint\",value:function(t){return{x:(1-t)*this.fromPoint.x+t*this.toPoint.x,y:(1-t)*this.fromPoint.y+t*this.toPoint.y}}},{key:\"_findBorderPosition\",value:function(t,e){var i=this.to,n=this.from;t.id===this.from.id&&(i=this.from,n=this.to);var o=Math.atan2(i.y-n.y,i.x-n.x),r=i.x-n.x,s=i.y-n.y,a=Math.sqrt(r*r+s*s),h=(a-t.distanceToBorder(e,o))/a;return{x:(1-h)*n.x+h*i.x,y:(1-h)*n.y+h*i.y,t:0}}},{key:\"_getDistanceToEdge\",value:function(t,e,i,n,o,r){return this._getDistanceToLine(t,e,i,n,o,r)}}]),i}(Hf),ep=function(){function t(e,i,n,o,r){if(Nn(this,t),void 0===i)throw new Error(\"No body provided\");this.options=Kh(o),this.globalOptions=o,this.defaultOptions=r,this.body=i,this.imagelist=n,this.id=void 0,this.fromId=void 0,this.toId=void 0,this.selected=!1,this.hover=!1,this.labelDirty=!0,this.baseWidth=this.options.width,this.baseFontSize=this.options.font.size,this.from=void 0,this.to=void 0,this.edgeType=void 0,this.connected=!1,this.labelModule=new _u(this.body,this.options,!0),this.setOptions(e)}return Fn(t,[{key:\"setOptions\",value:function(e){if(e){var i=void 0!==e.physics&&this.options.physics!==e.physics||void 0!==e.hidden&&(this.options.hidden||!1)!==(e.hidden||!1)||void 0!==e.from&&this.options.from!==e.from||void 0!==e.to&&this.options.to!==e.to;t.parseOptions(this.options,e,!0,this.globalOptions),void 0!==e.id&&(this.id=e.id),void 0!==e.from&&(this.fromId=e.from),void 0!==e.to&&(this.toId=e.to),void 0!==e.title&&(this.title=e.title),void 0!==e.value&&(e.value=hu(e.value));var n=[e,this.options,this.defaultOptions];return this.chooser=fu(\"edge\",n),this.updateLabelModule(e),i=this.updateEdgeType()||i,this._setInteractionWidths(),this.connect(),i}}},{key:\"getFormattingValues\",value:function(){var t=!0===this.options.arrows.to||!0===this.options.arrows.to.enabled,e=!0===this.options.arrows.from||!0===this.options.arrows.from.enabled,i=!0===this.options.arrows.middle||!0===this.options.arrows.middle.enabled,n=this.options.color.inherit,o={toArrow:t,toArrowScale:this.options.arrows.to.scaleFactor,toArrowType:this.options.arrows.to.type,toArrowSrc:this.options.arrows.to.src,toArrowImageWidth:this.options.arrows.to.imageWidth,toArrowImageHeight:this.options.arrows.to.imageHeight,middleArrow:i,middleArrowScale:this.options.arrows.middle.scaleFactor,middleArrowType:this.options.arrows.middle.type,middleArrowSrc:this.options.arrows.middle.src,middleArrowImageWidth:this.options.arrows.middle.imageWidth,middleArrowImageHeight:this.options.arrows.middle.imageHeight,fromArrow:e,fromArrowScale:this.options.arrows.from.scaleFactor,fromArrowType:this.options.arrows.from.type,fromArrowSrc:this.options.arrows.from.src,fromArrowImageWidth:this.options.arrows.from.imageWidth,fromArrowImageHeight:this.options.arrows.from.imageHeight,arrowStrikethrough:this.options.arrowStrikethrough,color:n?void 0:this.options.color.color,inheritsColor:n,opacity:this.options.color.opacity,hidden:this.options.hidden,length:this.options.length,shadow:this.options.shadow.enabled,shadowColor:this.options.shadow.color,shadowSize:this.options.shadow.size,shadowX:this.options.shadow.x,shadowY:this.options.shadow.y,dashes:this.options.dashes,width:this.options.width,background:this.options.background.enabled,backgroundColor:this.options.background.color,backgroundSize:this.options.background.size,backgroundDashes:this.options.background.dashes};if(this.selected||this.hover)if(!0===this.chooser){if(this.selected){var r=this.options.selectionWidth;\"function\"==typeof r?o.width=r(o.width):\"number\"==typeof r&&(o.width+=r),o.width=Math.max(o.width,.3/this.body.view.scale),o.color=this.options.color.highlight,o.shadow=this.options.shadow.enabled}else if(this.hover){var s=this.options.hoverWidth;\"function\"==typeof s?o.width=s(o.width):\"number\"==typeof s&&(o.width+=s),o.width=Math.max(o.width,.3/this.body.view.scale),o.color=this.options.color.hover,o.shadow=this.options.shadow.enabled}}else\"function\"==typeof this.chooser&&(this.chooser(o,this.options.id,this.selected,this.hover),void 0!==o.color&&(o.inheritsColor=!1),!1===o.shadow&&(o.shadowColor===this.options.shadow.color&&o.shadowSize===this.options.shadow.size&&o.shadowX===this.options.shadow.x&&o.shadowY===this.options.shadow.y||(o.shadow=!0)));else o.shadow=this.options.shadow.enabled,o.width=Math.max(o.width,.3/this.body.view.scale);return o}},{key:\"updateLabelModule\",value:function(t){var e=[t,this.options,this.globalOptions,this.defaultOptions];this.labelModule.update(this.options,e),void 0!==this.labelModule.baseSize&&(this.baseFontSize=this.labelModule.baseSize)}},{key:\"updateEdgeType\",value:function(){var t=this.options.smooth,e=!1,i=!0;return void 0!==this.edgeType&&((this.edgeType instanceof Xf&&!0===t.enabled&&\"dynamic\"===t.type||this.edgeType instanceof Qf&&!0===t.enabled&&\"cubicBezier\"===t.type||this.edgeType instanceof Kf&&!0===t.enabled&&\"dynamic\"!==t.type&&\"cubicBezier\"!==t.type||this.edgeType instanceof tp&&!1===t.type.enabled)&&(i=!1),!0===i&&(e=this.cleanup())),!0===i?!0===t.enabled?\"dynamic\"===t.type?(e=!0,this.edgeType=new Xf(this.options,this.body,this.labelModule)):\"cubicBezier\"===t.type?this.edgeType=new Qf(this.options,this.body,this.labelModule):this.edgeType=new Kf(this.options,this.body,this.labelModule):this.edgeType=new tp(this.options,this.body,this.labelModule):this.edgeType.setOptions(this.options),e}},{key:\"connect\",value:function(){this.disconnect(),this.from=this.body.nodes[this.fromId]||void 0,this.to=this.body.nodes[this.toId]||void 0,this.connected=void 0!==this.from&&void 0!==this.to,!0===this.connected?(this.from.attachEdge(this),this.to.attachEdge(this)):(this.from&&this.from.detachEdge(this),this.to&&this.to.detachEdge(this)),this.edgeType.connect()}},{key:\"disconnect\",value:function(){this.from&&(this.from.detachEdge(this),this.from=void 0),this.to&&(this.to.detachEdge(this),this.to=void 0),this.connected=!1}},{key:\"getTitle\",value:function(){return this.title}},{key:\"isSelected\",value:function(){return this.selected}},{key:\"getValue\",value:function(){return this.options.value}},{key:\"setValueRange\",value:function(t,e,i){if(void 0!==this.options.value){var n=this.options.scaling.customScalingFunction(t,e,i,this.options.value),o=this.options.scaling.max-this.options.scaling.min;if(!0===this.options.scaling.label.enabled){var r=this.options.scaling.label.max-this.options.scaling.label.min;this.options.font.size=this.options.scaling.label.min+n*r}this.options.width=this.options.scaling.min+n*o}else this.options.width=this.baseWidth,this.options.font.size=this.baseFontSize;this._setInteractionWidths(),this.updateLabelModule()}},{key:\"_setInteractionWidths\",value:function(){\"function\"==typeof this.options.hoverWidth?this.edgeType.hoverWidth=this.options.hoverWidth(this.options.width):this.edgeType.hoverWidth=this.options.hoverWidth+this.options.width,\"function\"==typeof this.options.selectionWidth?this.edgeType.selectionWidth=this.options.selectionWidth(this.options.width):this.edgeType.selectionWidth=this.options.selectionWidth+this.options.width}},{key:\"draw\",value:function(t){var e=this.getFormattingValues();if(!e.hidden){var i=this.edgeType.getViaNode();this.edgeType.drawLine(t,e,this.selected,this.hover,i),this.drawLabel(t,i)}}},{key:\"drawArrows\",value:function(t){var e=this.getFormattingValues();if(!e.hidden){var i=this.edgeType.getViaNode(),n={};this.edgeType.fromPoint=this.edgeType.from,this.edgeType.toPoint=this.edgeType.to,e.fromArrow&&(n.from=this.edgeType.getArrowData(t,\"from\",i,this.selected,this.hover,e),!1===e.arrowStrikethrough&&(this.edgeType.fromPoint=n.from.core),e.fromArrowSrc&&(n.from.image=this.imagelist.load(e.fromArrowSrc)),e.fromArrowImageWidth&&(n.from.imageWidth=e.fromArrowImageWidth),e.fromArrowImageHeight&&(n.from.imageHeight=e.fromArrowImageHeight)),e.toArrow&&(n.to=this.edgeType.getArrowData(t,\"to\",i,this.selected,this.hover,e),!1===e.arrowStrikethrough&&(this.edgeType.toPoint=n.to.core),e.toArrowSrc&&(n.to.image=this.imagelist.load(e.toArrowSrc)),e.toArrowImageWidth&&(n.to.imageWidth=e.toArrowImageWidth),e.toArrowImageHeight&&(n.to.imageHeight=e.toArrowImageHeight)),e.middleArrow&&(n.middle=this.edgeType.getArrowData(t,\"middle\",i,this.selected,this.hover,e),e.middleArrowSrc&&(n.middle.image=this.imagelist.load(e.middleArrowSrc)),e.middleArrowImageWidth&&(n.middle.imageWidth=e.middleArrowImageWidth),e.middleArrowImageHeight&&(n.middle.imageHeight=e.middleArrowImageHeight)),e.fromArrow&&this.edgeType.drawArrowHead(t,e,this.selected,this.hover,n.from),e.middleArrow&&this.edgeType.drawArrowHead(t,e,this.selected,this.hover,n.middle),e.toArrow&&this.edgeType.drawArrowHead(t,e,this.selected,this.hover,n.to)}}},{key:\"drawLabel\",value:function(t,e){if(void 0!==this.options.label){var i,n=this.from,o=this.to;if(this.labelModule.differentState(this.selected,this.hover)&&this.labelModule.getTextSize(t,this.selected,this.hover),n.id!=o.id){this.labelModule.pointToSelf=!1,i=this.edgeType.getPoint(.5,e),t.save();var r=this._getRotation(t);0!=r.angle&&(t.translate(r.x,r.y),t.rotate(r.angle)),this.labelModule.draw(t,i.x,i.y,this.selected,this.hover),t.restore()}else{this.labelModule.pointToSelf=!0;var s=gu(t,this.options.selfReference.angle,this.options.selfReference.size,n);i=this._pointOnCircle(s.x,s.y,this.options.selfReference.size,this.options.selfReference.angle),this.labelModule.draw(t,i.x,i.y,this.selected,this.hover)}}}},{key:\"getItemsOnPoint\",value:function(t){var e=[];if(this.labelModule.visible()){var i=this._getRotation();pu(this.labelModule.getSize(),t,i)&&e.push({edgeId:this.id,labelId:0})}var n={left:t.x,top:t.y};return this.isOverlappingWith(n)&&e.push({edgeId:this.id}),e}},{key:\"isOverlappingWith\",value:function(t){if(this.connected){var e=this.from.x,i=this.from.y,n=this.to.x,o=this.to.y,r=t.left,s=t.top;return this.edgeType.getDistanceToEdge(e,i,n,o,r,s)<10}return!1}},{key:\"_getRotation\",value:function(t){var e=this.edgeType.getViaNode(),i=this.edgeType.getPoint(.5,e);void 0!==t&&this.labelModule.calculateLabelSize(t,this.selected,this.hover,i.x,i.y);var n={x:i.x,y:this.labelModule.size.yLine,angle:0};if(!this.labelModule.visible())return n;if(\"horizontal\"===this.options.font.align)return n;var o=this.from.y-this.to.y,r=this.from.x-this.to.x,s=Math.atan2(o,r);return(s<-1&&r<0||s>0&&r<0)&&(s+=Math.PI),n.angle=s,n}},{key:\"_pointOnCircle\",value:function(t,e,i,n){return{x:t+i*Math.cos(n),y:e-i*Math.sin(n)}}},{key:\"select\",value:function(){this.selected=!0}},{key:\"unselect\",value:function(){this.selected=!1}},{key:\"cleanup\",value:function(){return this.edgeType.cleanup()}},{key:\"remove\",value:function(){this.cleanup(),this.disconnect(),delete this.body.edges[this.id]}},{key:\"endPointsValid\",value:function(){return void 0!==this.body.nodes[this.fromId]&&void 0!==this.body.nodes[this.toId]}}],[{key:\"parseOptions\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},o=arguments.length>4&&void 0!==arguments[4]&&arguments[4],r=[\"endPointOffset\",\"arrowStrikethrough\",\"id\",\"from\",\"hidden\",\"hoverWidth\",\"labelHighlightBold\",\"length\",\"line\",\"opacity\",\"physics\",\"scaling\",\"selectionWidth\",\"selfReferenceSize\",\"selfReference\",\"to\",\"title\",\"value\",\"width\",\"font\",\"chosen\",\"widthConstraint\"];if(Eh(r,t,e,i),void 0!==e.endPointOffset&&void 0!==e.endPointOffset.from&&(wd(e.endPointOffset.from)?t.endPointOffset.from=e.endPointOffset.from:(t.endPointOffset.from=void 0!==n.endPointOffset.from?n.endPointOffset.from:0,console.error(\"endPointOffset.from is not a valid number\"))),void 0!==e.endPointOffset&&void 0!==e.endPointOffset.to&&(wd(e.endPointOffset.to)?t.endPointOffset.to=e.endPointOffset.to:(t.endPointOffset.to=void 0!==n.endPointOffset.to?n.endPointOffset.to:0,console.error(\"endPointOffset.to is not a valid number\"))),vu(e.label)?t.label=e.label:vu(t.label)||(t.label=void 0),$h(t,e,\"smooth\",n),$h(t,e,\"shadow\",n),$h(t,e,\"background\",n),void 0!==e.dashes&&null!==e.dashes?t.dashes=e.dashes:!0===i&&null===e.dashes&&(t.dashes=Gr(n.dashes)),void 0!==e.scaling&&null!==e.scaling?(void 0!==e.scaling.min&&(t.scaling.min=e.scaling.min),void 0!==e.scaling.max&&(t.scaling.max=e.scaling.max),$h(t.scaling,e.scaling,\"label\",n.scaling)):!0===i&&null===e.scaling&&(t.scaling=Gr(n.scaling)),void 0!==e.arrows&&null!==e.arrows)if(\"string\"==typeof e.arrows){var s=e.arrows.toLowerCase();t.arrows.to.enabled=-1!=Hr(s).call(s,\"to\"),t.arrows.middle.enabled=-1!=Hr(s).call(s,\"middle\"),t.arrows.from.enabled=-1!=Hr(s).call(s,\"from\")}else{if(\"object\"!==go(e.arrows))throw new Error(\"The arrow newOptions can only be an object or a string. Refer to the documentation. You used:\"+es(e.arrows));$h(t.arrows,e.arrows,\"to\",n.arrows),$h(t.arrows,e.arrows,\"middle\",n.arrows),$h(t.arrows,e.arrows,\"from\",n.arrows)}else!0===i&&null===e.arrows&&(t.arrows=Gr(n.arrows));if(void 0!==e.color&&null!==e.color){var a=bh(e.color)?{color:e.color,highlight:e.color,hover:e.color,inherit:!1,opacity:1}:e.color,h=t.color;if(o)Ch(h,n.color,!1,i);else for(var l in h)Object.prototype.hasOwnProperty.call(h,l)&&delete h[l];if(bh(h))h.color=h,h.highlight=h,h.hover=h,h.inherit=!1,void 0===a.opacity&&(h.opacity=1);else{var d=!1;void 0!==a.color&&(h.color=a.color,d=!0),void 0!==a.highlight&&(h.highlight=a.highlight,d=!0),void 0!==a.hover&&(h.hover=a.hover,d=!0),void 0!==a.inherit&&(h.inherit=a.inherit),void 0!==a.opacity&&(h.opacity=Math.min(1,Math.max(0,a.opacity))),!0===d?h.inherit=!1:void 0===h.inherit&&(h.inherit=\"from\")}}else!0===i&&null===e.color&&(t.color=Kh(n.color));!0===i&&null===e.font&&(t.font=Kh(n.font)),Object.prototype.hasOwnProperty.call(e,\"selfReferenceSize\")&&(console.warn(\"The selfReferenceSize property has been deprecated. Please use selfReference property instead. The selfReference can be set like thise selfReference:{size:30, angle:Math.PI / 4}\"),t.selfReference.size=e.selfReferenceSize)}}]),t}(),ip=function(){function t(e,i,n){var o,r=this;Nn(this,t),this.body=e,this.images=i,this.groups=n,this.body.functions.createEdge=Vt(o=this.create).call(o,this),this.edgesListeners={add:function(t,e){r.add(e.items)},update:function(t,e){r.update(e.items)},remove:function(t,e){r.remove(e.items)}},this.options={},this.defaultOptions={arrows:{to:{enabled:!1,scaleFactor:1,type:\"arrow\"},middle:{enabled:!1,scaleFactor:1,type:\"arrow\"},from:{enabled:!1,scaleFactor:1,type:\"arrow\"}},endPointOffset:{from:0,to:0},arrowStrikethrough:!0,color:{color:\"#848484\",highlight:\"#848484\",hover:\"#848484\",inherit:\"from\",opacity:1},dashes:!1,font:{color:\"#343434\",size:14,face:\"arial\",background:\"none\",strokeWidth:2,strokeColor:\"#ffffff\",align:\"horizontal\",multi:!1,vadjust:0,bold:{mod:\"bold\"},boldital:{mod:\"bold italic\"},ital:{mod:\"italic\"},mono:{mod:\"\",size:15,face:\"courier new\",vadjust:2}},hidden:!1,hoverWidth:1.5,label:void 0,labelHighlightBold:!0,length:void 0,physics:!0,scaling:{min:1,max:15,label:{enabled:!0,min:14,max:30,maxVisible:30,drawThreshold:5},customScalingFunction:function(t,e,i,n){if(e===t)return.5;var o=1/(e-t);return Math.max(0,(n-t)*o)}},selectionWidth:1.5,selfReference:{size:20,angle:Math.PI/4,renderBehindTheNode:!0},shadow:{enabled:!1,color:\"rgba(0,0,0,0.5)\",size:10,x:5,y:5},background:{enabled:!1,color:\"rgba(111,111,111,1)\",size:10,dashes:!1},smooth:{enabled:!0,type:\"dynamic\",forceDirection:\"none\",roundness:.5},title:void 0,width:1,value:void 0},Ch(this.options,this.defaultOptions),this.bindEventListeners()}return Fn(t,[{key:\"bindEventListeners\",value:function(){var t,e,i=this;this.body.emitter.on(\"_forceDisableDynamicCurves\",(function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];\"dynamic\"===t&&(t=\"continuous\");var n=!1;for(var o in i.body.edges)if(Object.prototype.hasOwnProperty.call(i.body.edges,o)){var r=i.body.edges[o],s=i.body.data.edges.get(o);if(null!=s){var a=s.smooth;void 0!==a&&!0===a.enabled&&\"dynamic\"===a.type&&(void 0===t?r.setOptions({smooth:!1}):r.setOptions({smooth:{type:t}}),n=!0)}}!0===e&&!0===n&&i.body.emitter.emit(\"_dataChanged\")})),this.body.emitter.on(\"_dataUpdated\",(function(){i.reconnectEdges()})),this.body.emitter.on(\"refreshEdges\",Vt(t=this.refresh).call(t,this)),this.body.emitter.on(\"refresh\",Vt(e=this.refresh).call(e,this)),this.body.emitter.on(\"destroy\",(function(){Dh(i.edgesListeners,(function(t,e){i.body.data.edges&&i.body.data.edges.off(e,t)})),delete i.body.functions.createEdge,delete i.edgesListeners.add,delete i.edgesListeners.update,delete i.edgesListeners.remove,delete i.edgesListeners}))}},{key:\"setOptions\",value:function(t){if(void 0!==t){ep.parseOptions(this.options,t,!0,this.defaultOptions,!0);var e=!1;if(void 0!==t.smooth)for(var i in this.body.edges)Object.prototype.hasOwnProperty.call(this.body.edges,i)&&(e=this.body.edges[i].updateEdgeType()||e);if(void 0!==t.font)for(var n in this.body.edges)Object.prototype.hasOwnProperty.call(this.body.edges,n)&&this.body.edges[n].updateLabelModule();void 0===t.hidden&&void 0===t.physics&&!0!==e||this.body.emitter.emit(\"_dataChanged\")}}},{key:\"setData\",value:function(t){var e=this,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=this.body.data.edges;if(nu(\"id\",t))this.body.data.edges=t;else if(So(t))this.body.data.edges=new tu,this.body.data.edges.add(t);else{if(t)throw new TypeError(\"Array or DataSet expected\");this.body.data.edges=new tu}if(n&&Dh(this.edgesListeners,(function(t,e){n.off(e,t)})),this.body.edges={},this.body.data.edges){Dh(this.edgesListeners,(function(t,i){e.body.data.edges.on(i,t)}));var o=this.body.data.edges.getIds();this.add(o,!0)}this.body.emitter.emit(\"_adjustEdgesForHierarchicalLayout\"),!1===i&&this.body.emitter.emit(\"_dataChanged\")}},{key:\"add\",value:function(t){for(var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=this.body.edges,n=this.body.data.edges,o=0;o<t.length;o++){var r=t[o],s=i[r];s&&s.disconnect();var a=n.get(r,{showInternalIds:!0});i[r]=this.create(a)}this.body.emitter.emit(\"_adjustEdgesForHierarchicalLayout\"),!1===e&&this.body.emitter.emit(\"_dataChanged\")}},{key:\"update\",value:function(t){for(var e=this.body.edges,i=this.body.data.edges,n=!1,o=0;o<t.length;o++){var r=t[o],s=i.get(r),a=e[r];void 0!==a?(a.disconnect(),n=a.setOptions(s)||n,a.connect()):(this.body.edges[r]=this.create(s),n=!0)}!0===n?(this.body.emitter.emit(\"_adjustEdgesForHierarchicalLayout\"),this.body.emitter.emit(\"_dataChanged\")):this.body.emitter.emit(\"_dataUpdated\")}},{key:\"remove\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(0!==t.length){var i=this.body.edges;Dh(t,(function(t){var e=i[t];void 0!==e&&e.remove()})),e&&this.body.emitter.emit(\"_dataChanged\")}}},{key:\"refresh\",value:function(){var t=this;Dh(this.body.edges,(function(e,i){var n=t.body.data.edges.get(i);void 0!==n&&e.setOptions(n)}))}},{key:\"create\",value:function(t){return new ep(t,this.body,this.images,this.options,this.defaultOptions)}},{key:\"reconnectEdges\",value:function(){var t,e=this.body.nodes,i=this.body.edges;for(t in e)Object.prototype.hasOwnProperty.call(e,t)&&(e[t].edges=[]);for(t in i)if(Object.prototype.hasOwnProperty.call(i,t)){var n=i[t];n.from=null,n.to=null,n.connect()}}},{key:\"getConnectedNodes\",value:function(t){var e=[];if(void 0!==this.body.edges[t]){var i=this.body.edges[t];void 0!==i.fromId&&e.push(i.fromId),void 0!==i.toId&&e.push(i.toId)}return e}},{key:\"_updateState\",value:function(){this._addMissingEdges(),this._removeInvalidEdges()}},{key:\"_removeInvalidEdges\",value:function(){var t=this,e=[];Dh(this.body.edges,(function(i,n){var o=t.body.nodes[i.toId],r=t.body.nodes[i.fromId];void 0!==o&&!0===o.isCluster||void 0!==r&&!0===r.isCluster||void 0!==o&&void 0!==r||e.push(n)})),this.remove(e,!1)}},{key:\"_addMissingEdges\",value:function(){var t=this.body.data.edges;if(null!=t){var e=this.body.edges,i=[];Wo(t).call(t,(function(t,n){void 0===e[n]&&i.push(n)})),this.add(i,!0)}}}]),t}(),np=function(){function t(e,i,n){Nn(this,t),this.body=e,this.physicsBody=i,this.barnesHutTree,this.setOptions(n),this._rng=ah(\"BARNES HUT SOLVER\")}return Fn(t,[{key:\"setOptions\",value:function(t){this.options=t,this.thetaInversed=1/this.options.theta,this.overlapAvoidanceFactor=1-Math.max(0,Math.min(1,this.options.avoidOverlap))}},{key:\"solve\",value:function(){if(0!==this.options.gravitationalConstant&&this.physicsBody.physicsNodeIndices.length>0){var t,e=this.body.nodes,i=this.physicsBody.physicsNodeIndices,n=i.length,o=this._formBarnesHutTree(e,i);this.barnesHutTree=o;for(var r=0;r<n;r++)(t=e[i[r]]).options.mass>0&&this._getForceContributions(o.root,t)}}},{key:\"_getForceContributions\",value:function(t,e){this._getForceContribution(t.children.NW,e),this._getForceContribution(t.children.NE,e),this._getForceContribution(t.children.SW,e),this._getForceContribution(t.children.SE,e)}},{key:\"_getForceContribution\",value:function(t,e){if(t.childrenCount>0){var i=t.centerOfMass.x-e.x,n=t.centerOfMass.y-e.y,o=Math.sqrt(i*i+n*n);o*t.calcSize>this.thetaInversed?this._calculateForces(o,i,n,e,t):4===t.childrenCount?this._getForceContributions(t,e):t.children.data.id!=e.id&&this._calculateForces(o,i,n,e,t)}}},{key:\"_calculateForces\",value:function(t,e,i,n,o){0===t&&(e=t=.1),this.overlapAvoidanceFactor<1&&n.shape.radius&&(t=Math.max(.1+this.overlapAvoidanceFactor*n.shape.radius,t-n.shape.radius));var r=this.options.gravitationalConstant*o.mass*n.options.mass/Math.pow(t,3),s=e*r,a=i*r;this.physicsBody.forces[n.id].x+=s,this.physicsBody.forces[n.id].y+=a}},{key:\"_formBarnesHutTree\",value:function(t,e){for(var i,n=e.length,o=t[e[0]].x,r=t[e[0]].y,s=t[e[0]].x,a=t[e[0]].y,h=1;h<n;h++){var l=t[e[h]],d=l.x,c=l.y;l.options.mass>0&&(d<o&&(o=d),d>s&&(s=d),c<r&&(r=c),c>a&&(a=c))}var u=Math.abs(s-o)-Math.abs(a-r);u>0?(r-=.5*u,a+=.5*u):(o+=.5*u,s-=.5*u);var f=Math.max(1e-5,Math.abs(s-o)),p=.5*f,v=.5*(o+s),g=.5*(r+a),y={root:{centerOfMass:{x:0,y:0},mass:0,range:{minX:v-p,maxX:v+p,minY:g-p,maxY:g+p},size:f,calcSize:1/f,children:{data:null},maxWidth:0,level:0,childrenCount:4}};this._splitBranch(y.root);for(var m=0;m<n;m++)(i=t[e[m]]).options.mass>0&&this._placeInTree(y.root,i);return y}},{key:\"_updateBranchMass\",value:function(t,e){var i=t.centerOfMass,n=t.mass+e.options.mass,o=1/n;i.x=i.x*t.mass+e.x*e.options.mass,i.x*=o,i.y=i.y*t.mass+e.y*e.options.mass,i.y*=o,t.mass=n;var r=Math.max(Math.max(e.height,e.radius),e.width);t.maxWidth=t.maxWidth<r?r:t.maxWidth}},{key:\"_placeInTree\",value:function(t,e,i){1==i&&void 0!==i||this._updateBranchMass(t,e);var n,o=t.children.NW.range;n=o.maxX>e.x?o.maxY>e.y?\"NW\":\"SW\":o.maxY>e.y?\"NE\":\"SE\",this._placeInRegion(t,e,n)}},{key:\"_placeInRegion\",value:function(t,e,i){var n=t.children[i];switch(n.childrenCount){case 0:n.children.data=e,n.childrenCount=1,this._updateBranchMass(n,e);break;case 1:n.children.data.x===e.x&&n.children.data.y===e.y?(e.x+=this._rng(),e.y+=this._rng()):(this._splitBranch(n),this._placeInTree(n,e));break;case 4:this._placeInTree(n,e)}}},{key:\"_splitBranch\",value:function(t){var e=null;1===t.childrenCount&&(e=t.children.data,t.mass=0,t.centerOfMass.x=0,t.centerOfMass.y=0),t.childrenCount=4,t.children.data=null,this._insertRegion(t,\"NW\"),this._insertRegion(t,\"NE\"),this._insertRegion(t,\"SW\"),this._insertRegion(t,\"SE\"),null!=e&&this._placeInTree(t,e)}},{key:\"_insertRegion\",value:function(t,e){var i,n,o,r,s=.5*t.size;switch(e){case\"NW\":i=t.range.minX,n=t.range.minX+s,o=t.range.minY,r=t.range.minY+s;break;case\"NE\":i=t.range.minX+s,n=t.range.maxX,o=t.range.minY,r=t.range.minY+s;break;case\"SW\":i=t.range.minX,n=t.range.minX+s,o=t.range.minY+s,r=t.range.maxY;break;case\"SE\":i=t.range.minX+s,n=t.range.maxX,o=t.range.minY+s,r=t.range.maxY}t.children[e]={centerOfMass:{x:0,y:0},mass:0,range:{minX:i,maxX:n,minY:o,maxY:r},size:.5*t.size,calcSize:2*t.calcSize,children:{data:null},maxWidth:0,level:t.level+1,childrenCount:0}}},{key:\"_debug\",value:function(t,e){void 0!==this.barnesHutTree&&(t.lineWidth=1,this._drawBranch(this.barnesHutTree.root,t,e))}},{key:\"_drawBranch\",value:function(t,e,i){void 0===i&&(i=\"#FF0000\"),4===t.childrenCount&&(this._drawBranch(t.children.NW,e),this._drawBranch(t.children.NE,e),this._drawBranch(t.children.SE,e),this._drawBranch(t.children.SW,e)),e.strokeStyle=i,e.beginPath(),e.moveTo(t.range.minX,t.range.minY),e.lineTo(t.range.maxX,t.range.minY),e.stroke(),e.beginPath(),e.moveTo(t.range.maxX,t.range.minY),e.lineTo(t.range.maxX,t.range.maxY),e.stroke(),e.beginPath(),e.moveTo(t.range.maxX,t.range.maxY),e.lineTo(t.range.minX,t.range.maxY),e.stroke(),e.beginPath(),e.moveTo(t.range.minX,t.range.maxY),e.lineTo(t.range.minX,t.range.minY),e.stroke()}}]),t}(),op=function(){function t(e,i,n){Nn(this,t),this._rng=ah(\"REPULSION SOLVER\"),this.body=e,this.physicsBody=i,this.setOptions(n)}return Fn(t,[{key:\"setOptions\",value:function(t){this.options=t}},{key:\"solve\",value:function(){for(var t,e,i,n,o,r,s,a,h=this.body.nodes,l=this.physicsBody.physicsNodeIndices,d=this.physicsBody.forces,c=this.options.nodeDistance,u=-2/3/c,f=0;f<l.length-1;f++){s=h[l[f]];for(var p=f+1;p<l.length;p++)t=(a=h[l[p]]).x-s.x,e=a.y-s.y,0===(i=Math.sqrt(t*t+e*e))&&(t=i=.1*this._rng()),i<2*c&&(r=i<.5*c?1:u*i+1.3333333333333333,n=t*(r/=i),o=e*r,d[s.id].x-=n,d[s.id].y-=o,d[a.id].x+=n,d[a.id].y+=o)}}}]),t}(),rp=function(){function t(e,i,n){Nn(this,t),this.body=e,this.physicsBody=i,this.setOptions(n)}return Fn(t,[{key:\"setOptions\",value:function(t){this.options=t,this.overlapAvoidanceFactor=Math.max(0,Math.min(1,this.options.avoidOverlap||0))}},{key:\"solve\",value:function(){for(var t=this.body.nodes,e=this.physicsBody.physicsNodeIndices,i=this.physicsBody.forces,n=this.options.nodeDistance,o=0;o<e.length-1;o++)for(var r=t[e[o]],s=o+1;s<e.length;s++){var a=t[e[s]];if(r.level===a.level){var h=n+this.overlapAvoidanceFactor*((r.shape.radius||0)/2+(a.shape.radius||0)/2),l=a.x-r.x,d=a.y-r.y,c=Math.sqrt(l*l+d*d),u=void 0;u=c<h?-Math.pow(.05*c,2)+Math.pow(.05*h,2):0,0!==c&&(u/=c);var f=l*u,p=d*u;i[r.id].x-=f,i[r.id].y-=p,i[a.id].x+=f,i[a.id].y+=p}}}}]),t}(),sp=function(){function t(e,i,n){Nn(this,t),this.body=e,this.physicsBody=i,this.setOptions(n)}return Fn(t,[{key:\"setOptions\",value:function(t){this.options=t}},{key:\"solve\",value:function(){for(var t,e,i,n,o,r=this.physicsBody.physicsEdgeIndices,s=this.body.edges,a=0;a<r.length;a++)!0===(e=s[r[a]]).connected&&e.toId!==e.fromId&&void 0!==this.body.nodes[e.toId]&&void 0!==this.body.nodes[e.fromId]&&(void 0!==e.edgeType.via?(t=void 0===e.options.length?this.options.springLength:e.options.length,i=e.to,n=e.edgeType.via,o=e.from,this._calculateSpringForce(i,n,.5*t),this._calculateSpringForce(n,o,.5*t)):(t=void 0===e.options.length?1.5*this.options.springLength:e.options.length,this._calculateSpringForce(e.from,e.to,t)))}},{key:\"_calculateSpringForce\",value:function(t,e,i){var n=t.x-e.x,o=t.y-e.y,r=Math.max(Math.sqrt(n*n+o*o),.01),s=this.options.springConstant*(i-r)/r,a=n*s,h=o*s;void 0!==this.physicsBody.forces[t.id]&&(this.physicsBody.forces[t.id].x+=a,this.physicsBody.forces[t.id].y+=h),void 0!==this.physicsBody.forces[e.id]&&(this.physicsBody.forces[e.id].x-=a,this.physicsBody.forces[e.id].y-=h)}}]),t}(),ap=function(){function t(e,i,n){Nn(this,t),this.body=e,this.physicsBody=i,this.setOptions(n)}return Fn(t,[{key:\"setOptions\",value:function(t){this.options=t}},{key:\"solve\",value:function(){for(var t,e,i,n,o,r,s,a,h,l,d=this.body.edges,c=.5,u=this.physicsBody.physicsEdgeIndices,f=this.physicsBody.physicsNodeIndices,p=this.physicsBody.forces,v=0;v<f.length;v++){var g=f[v];p[g].springFx=0,p[g].springFy=0}for(var y=0;y<u.length;y++)!0===(e=d[u[y]]).connected&&(t=void 0===e.options.length?this.options.springLength:e.options.length,i=e.from.x-e.to.x,n=e.from.y-e.to.y,a=0===(a=Math.sqrt(i*i+n*n))?.01:a,o=i*(s=this.options.springConstant*(t-a)/a),r=n*s,e.to.level!=e.from.level?(void 0!==p[e.toId]&&(p[e.toId].springFx-=o,p[e.toId].springFy-=r),void 0!==p[e.fromId]&&(p[e.fromId].springFx+=o,p[e.fromId].springFy+=r)):(void 0!==p[e.toId]&&(p[e.toId].x-=c*o,p[e.toId].y-=c*r),void 0!==p[e.fromId]&&(p[e.fromId].x+=c*o,p[e.fromId].y+=c*r)));s=1;for(var m=0;m<f.length;m++){var b=f[m];h=Math.min(s,Math.max(-s,p[b].springFx)),l=Math.min(s,Math.max(-s,p[b].springFy)),p[b].x+=h,p[b].y+=l}for(var w=0,k=0,_=0;_<f.length;_++){var x=f[_];w+=p[x].x,k+=p[x].y}for(var E=w/f.length,O=k/f.length,C=0;C<f.length;C++){var S=f[C];p[S].x-=E,p[S].y-=O}}}]),t}(),hp=function(){function t(e,i,n){Nn(this,t),this.body=e,this.physicsBody=i,this.setOptions(n)}return Fn(t,[{key:\"setOptions\",value:function(t){this.options=t}},{key:\"solve\",value:function(){for(var t,e,i,n,o=this.body.nodes,r=this.physicsBody.physicsNodeIndices,s=this.physicsBody.forces,a=0;a<r.length;a++){t=-(n=o[r[a]]).x,e=-n.y,i=Math.sqrt(t*t+e*e),this._calculateForces(i,t,e,s,n)}}},{key:\"_calculateForces\",value:function(t,e,i,n,o){var r=0===t?0:this.options.centralGravity/t;n[o.id].x=e*r,n[o.id].y=i*r}}]),t}();function lp(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var dp=function(t){Ad(i,t);var e=lp(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o))._rng=ah(\"FORCE ATLAS 2 BASED REPULSION SOLVER\"),r}return Fn(i,[{key:\"_calculateForces\",value:function(t,e,i,n,o){0===t&&(e=t=.1*this._rng()),this.overlapAvoidanceFactor<1&&n.shape.radius&&(t=Math.max(.1+this.overlapAvoidanceFactor*n.shape.radius,t-n.shape.radius));var r=n.edges.length+1,s=this.options.gravitationalConstant*o.mass*n.options.mass*r/Math.pow(t,2),a=e*s,h=i*s;this.physicsBody.forces[n.id].x+=a,this.physicsBody.forces[n.id].y+=h}}]),i}(np);function cp(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var up=function(t){Ad(i,t);var e=cp(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"_calculateForces\",value:function(t,e,i,n,o){if(t>0){var r=o.edges.length+1,s=this.options.centralGravity*r*o.options.mass;n[o.id].x=e*s,n[o.id].y=i*s}}}]),i}(hp),fp=function(){function t(e){Nn(this,t),this.body=e,this.physicsBody={physicsNodeIndices:[],physicsEdgeIndices:[],forces:{},velocities:{}},this.physicsEnabled=!0,this.simulationInterval=1e3/60,this.requiresTimeout=!0,this.previousStates={},this.referenceState={},this.freezeCache={},this.renderTimer=void 0,this.adaptiveTimestep=!1,this.adaptiveTimestepEnabled=!1,this.adaptiveCounter=0,this.adaptiveInterval=3,this.stabilized=!1,this.startedStabilization=!1,this.stabilizationIterations=0,this.ready=!1,this.options={},this.defaultOptions={enabled:!0,barnesHut:{theta:.5,gravitationalConstant:-2e3,centralGravity:.3,springLength:95,springConstant:.04,damping:.09,avoidOverlap:0},forceAtlas2Based:{theta:.5,gravitationalConstant:-50,centralGravity:.01,springConstant:.08,springLength:100,damping:.4,avoidOverlap:0},repulsion:{centralGravity:.2,springLength:200,springConstant:.05,nodeDistance:100,damping:.09,avoidOverlap:0},hierarchicalRepulsion:{centralGravity:0,springLength:100,springConstant:.01,nodeDistance:120,damping:.09},maxVelocity:50,minVelocity:.75,solver:\"barnesHut\",stabilization:{enabled:!0,iterations:1e3,updateInterval:50,onlyDynamicEdges:!1,fit:!0},timestep:.5,adaptiveTimestep:!0,wind:{x:0,y:0}},At(this.options,this.defaultOptions),this.timestep=.5,this.layoutFailed=!1,this.bindEventListeners()}return Fn(t,[{key:\"bindEventListeners\",value:function(){var t=this;this.body.emitter.on(\"initPhysics\",(function(){t.initPhysics()})),this.body.emitter.on(\"_layoutFailed\",(function(){t.layoutFailed=!0})),this.body.emitter.on(\"resetPhysics\",(function(){t.stopSimulation(),t.ready=!1})),this.body.emitter.on(\"disablePhysics\",(function(){t.physicsEnabled=!1,t.stopSimulation()})),this.body.emitter.on(\"restorePhysics\",(function(){t.setOptions(t.options),!0===t.ready&&t.startSimulation()})),this.body.emitter.on(\"startSimulation\",(function(){!0===t.ready&&t.startSimulation()})),this.body.emitter.on(\"stopSimulation\",(function(){t.stopSimulation()})),this.body.emitter.on(\"destroy\",(function(){t.stopSimulation(!1),t.body.emitter.off()})),this.body.emitter.on(\"_dataChanged\",(function(){t.updatePhysicsData()}))}},{key:\"setOptions\",value:function(t){if(void 0!==t)if(!1===t)this.options.enabled=!1,this.physicsEnabled=!1,this.stopSimulation();else if(!0===t)this.options.enabled=!0,this.physicsEnabled=!0,this.startSimulation();else{this.physicsEnabled=!0,Oh([\"stabilization\"],this.options,t),$h(this.options,t,\"stabilization\"),void 0===t.enabled&&(this.options.enabled=!0),!1===this.options.enabled&&(this.physicsEnabled=!1,this.stopSimulation());var e=this.options.wind;e&&((\"number\"!=typeof e.x||yd(e.x))&&(e.x=0),(\"number\"!=typeof e.y||yd(e.y))&&(e.y=0)),this.timestep=this.options.timestep}this.init()}},{key:\"init\",value:function(){var t;\"forceAtlas2Based\"===this.options.solver?(t=this.options.forceAtlas2Based,this.nodesSolver=new dp(this.body,this.physicsBody,t),this.edgesSolver=new sp(this.body,this.physicsBody,t),this.gravitySolver=new up(this.body,this.physicsBody,t)):\"repulsion\"===this.options.solver?(t=this.options.repulsion,this.nodesSolver=new op(this.body,this.physicsBody,t),this.edgesSolver=new sp(this.body,this.physicsBody,t),this.gravitySolver=new hp(this.body,this.physicsBody,t)):\"hierarchicalRepulsion\"===this.options.solver?(t=this.options.hierarchicalRepulsion,this.nodesSolver=new rp(this.body,this.physicsBody,t),this.edgesSolver=new ap(this.body,this.physicsBody,t),this.gravitySolver=new hp(this.body,this.physicsBody,t)):(t=this.options.barnesHut,this.nodesSolver=new np(this.body,this.physicsBody,t),this.edgesSolver=new sp(this.body,this.physicsBody,t),this.gravitySolver=new hp(this.body,this.physicsBody,t)),this.modelOptions=t}},{key:\"initPhysics\",value:function(){!0===this.physicsEnabled&&!0===this.options.enabled?!0===this.options.stabilization.enabled?this.stabilize():(this.stabilized=!1,this.ready=!0,this.body.emitter.emit(\"fit\",{},this.layoutFailed),this.startSimulation()):(this.ready=!0,this.body.emitter.emit(\"fit\"))}},{key:\"startSimulation\",value:function(){var t;!0===this.physicsEnabled&&!0===this.options.enabled?(this.stabilized=!1,this.adaptiveTimestep=!1,this.body.emitter.emit(\"_resizeNodes\"),void 0===this.viewFunction&&(this.viewFunction=Vt(t=this.simulationStep).call(t,this),this.body.emitter.on(\"initRedraw\",this.viewFunction),this.body.emitter.emit(\"_startRendering\"))):this.body.emitter.emit(\"_redraw\")}},{key:\"stopSimulation\",value:function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.stabilized=!0,!0===t&&this._emitStabilized(),void 0!==this.viewFunction&&(this.body.emitter.off(\"initRedraw\",this.viewFunction),this.viewFunction=void 0,!0===t&&this.body.emitter.emit(\"_stopRendering\"))}},{key:\"simulationStep\",value:function(){var t=No();this.physicsTick(),(No()-t<.4*this.simulationInterval||!0===this.runDoubleSpeed)&&!1===this.stabilized&&(this.physicsTick(),this.runDoubleSpeed=!0),!0===this.stabilized&&this.stopSimulation()}},{key:\"_emitStabilized\",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.stabilizationIterations;(this.stabilizationIterations>1||!0===this.startedStabilization)&&rs((function(){t.body.emitter.emit(\"stabilized\",{iterations:e}),t.startedStabilization=!1,t.stabilizationIterations=0}),0)}},{key:\"physicsStep\",value:function(){this.gravitySolver.solve(),this.nodesSolver.solve(),this.edgesSolver.solve(),this.moveNodes()}},{key:\"adjustTimeStep\",value:function(){!0===this._evaluateStepQuality()?this.timestep=1.2*this.timestep:this.timestep/1.2<this.options.timestep?this.timestep=this.options.timestep:(this.adaptiveCounter=-1,this.timestep=Math.max(this.options.timestep,this.timestep/1.2))}},{key:\"physicsTick\",value:function(){if(this._startStabilizing(),!0!==this.stabilized){if(!0===this.adaptiveTimestep&&!0===this.adaptiveTimestepEnabled)this.adaptiveCounter%this.adaptiveInterval==0?(this.timestep=2*this.timestep,this.physicsStep(),this.revert(),this.timestep=.5*this.timestep,this.physicsStep(),this.physicsStep(),this.adjustTimeStep()):this.physicsStep(),this.adaptiveCounter+=1;else this.timestep=this.options.timestep,this.physicsStep();!0===this.stabilized&&this.revert(),this.stabilizationIterations++}}},{key:\"updatePhysicsData\",value:function(){this.physicsBody.forces={},this.physicsBody.physicsNodeIndices=[],this.physicsBody.physicsEdgeIndices=[];var t=this.body.nodes,e=this.body.edges;for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&!0===t[i].options.physics&&this.physicsBody.physicsNodeIndices.push(t[i].id);for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&!0===e[n].options.physics&&this.physicsBody.physicsEdgeIndices.push(e[n].id);for(var o=0;o<this.physicsBody.physicsNodeIndices.length;o++){var r=this.physicsBody.physicsNodeIndices[o];this.physicsBody.forces[r]={x:0,y:0},void 0===this.physicsBody.velocities[r]&&(this.physicsBody.velocities[r]={x:0,y:0})}for(var s in this.physicsBody.velocities)void 0===t[s]&&delete this.physicsBody.velocities[s]}},{key:\"revert\",value:function(){var t=zo(this.previousStates),e=this.body.nodes,i=this.physicsBody.velocities;this.referenceState={};for(var n=0;n<t.length;n++){var o=t[n];void 0!==e[o]?!0===e[o].options.physics&&(this.referenceState[o]={positions:{x:e[o].x,y:e[o].y}},i[o].x=this.previousStates[o].vx,i[o].y=this.previousStates[o].vy,e[o].x=this.previousStates[o].x,e[o].y=this.previousStates[o].y):delete this.previousStates[o]}}},{key:\"_evaluateStepQuality\",value:function(){var t,e,i=this.body.nodes,n=this.referenceState;for(var o in this.referenceState)if(Object.prototype.hasOwnProperty.call(this.referenceState,o)&&void 0!==i[o]&&(t=i[o].x-n[o].positions.x,e=i[o].y-n[o].positions.y,Math.sqrt(Math.pow(t,2)+Math.pow(e,2))>.3))return!1;return!0}},{key:\"moveNodes\",value:function(){for(var t=this.physicsBody.physicsNodeIndices,e=0,i=0,n=0;n<t.length;n++){var o=t[n],r=this._performStep(o);e=Math.max(e,r),i+=r}this.adaptiveTimestepEnabled=i/t.length<5,this.stabilized=e<this.options.minVelocity}},{key:\"calculateComponentVelocity\",value:function(t,e,i){t+=(e-this.modelOptions.damping*t)/i*this.timestep;var n=this.options.maxVelocity||1e9;return Math.abs(t)>n&&(t=t>0?n:-n),t}},{key:\"_performStep\",value:function(t){var e=this.body.nodes[t],i=this.physicsBody.forces[t];this.options.wind&&(i.x+=this.options.wind.x,i.y+=this.options.wind.y);var n=this.physicsBody.velocities[t];return this.previousStates[t]={x:e.x,y:e.y,vx:n.x,vy:n.y},!1===e.options.fixed.x?(n.x=this.calculateComponentVelocity(n.x,i.x,e.options.mass),e.x+=n.x*this.timestep):(i.x=0,n.x=0),!1===e.options.fixed.y?(n.y=this.calculateComponentVelocity(n.y,i.y,e.options.mass),e.y+=n.y*this.timestep):(i.y=0,n.y=0),Math.sqrt(Math.pow(n.x,2)+Math.pow(n.y,2))}},{key:\"_freezeNodes\",value:function(){var t=this.body.nodes;for(var e in t)if(Object.prototype.hasOwnProperty.call(t,e)&&t[e].x&&t[e].y){var i=t[e].options.fixed;this.freezeCache[e]={x:i.x,y:i.y},i.x=!0,i.y=!0}}},{key:\"_restoreFrozenNodes\",value:function(){var t=this.body.nodes;for(var e in t)Object.prototype.hasOwnProperty.call(t,e)&&void 0!==this.freezeCache[e]&&(t[e].options.fixed.x=this.freezeCache[e].x,t[e].options.fixed.y=this.freezeCache[e].y);this.freezeCache={}}},{key:\"stabilize\",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.options.stabilization.iterations;\"number\"!=typeof e&&(e=this.options.stabilization.iterations,console.error(\"The stabilize method needs a numeric amount of iterations. Switching to default: \",e)),0!==this.physicsBody.physicsNodeIndices.length?(this.adaptiveTimestep=this.options.adaptiveTimestep,this.body.emitter.emit(\"_resizeNodes\"),this.stopSimulation(),this.stabilized=!1,this.body.emitter.emit(\"_blockRedraw\"),this.targetIterations=e,!0===this.options.stabilization.onlyDynamicEdges&&this._freezeNodes(),this.stabilizationIterations=0,rs((function(){return t._stabilizationBatch()}),0)):this.ready=!0}},{key:\"_startStabilizing\",value:function(){return!0!==this.startedStabilization&&(this.body.emitter.emit(\"startStabilizing\"),this.startedStabilization=!0,!0)}},{key:\"_stabilizationBatch\",value:function(){var t=this,e=function(){return!1===t.stabilized&&t.stabilizationIterations<t.targetIterations},i=function(){t.body.emitter.emit(\"stabilizationProgress\",{iterations:t.stabilizationIterations,total:t.targetIterations})};this._startStabilizing()&&i();for(var n,o=0;e()&&o<this.options.stabilization.updateInterval;)this.physicsTick(),o++;(i(),e())?rs(Vt(n=this._stabilizationBatch).call(n,this),0):this._finalizeStabilization()}},{key:\"_finalizeStabilization\",value:function(){this.body.emitter.emit(\"_allowRedraw\"),!0===this.options.stabilization.fit&&this.body.emitter.emit(\"fit\"),!0===this.options.stabilization.onlyDynamicEdges&&this._restoreFrozenNodes(),this.body.emitter.emit(\"stabilizationIterationsDone\"),this.body.emitter.emit(\"_requestRedraw\"),!0===this.stabilized?this._emitStabilized():this.startSimulation(),this.ready=!0}},{key:\"_drawForces\",value:function(t){for(var e=0;e<this.physicsBody.physicsNodeIndices.length;e++){var i=this.physicsBody.physicsNodeIndices[e],n=this.body.nodes[i],o=this.physicsBody.forces[i],r=Math.sqrt(Math.pow(o.x,2)+Math.pow(o.x,2)),s=Math.min(Math.max(5,r),15),a=3*s,h=Vh((180-180*Math.min(1,Math.max(0,.03*r)))/360,1,1),l={x:n.x+20*o.x,y:n.y+20*o.y};t.lineWidth=s,t.strokeStyle=h,t.beginPath(),t.moveTo(n.x,n.y),t.lineTo(l.x,l.y),t.stroke();var d=Math.atan2(o.y,o.x);t.fillStyle=h,jf.draw(t,{type:\"arrow\",point:l,angle:d,length:a}),hs(t).call(t)}}}]),t}(),pp=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"getRange\",value:function(t){var e,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=1e9,o=-1e9,r=1e9,s=-1e9;if(i.length>0)for(var a=0;a<i.length;a++)r>(e=t[i[a]]).shape.boundingBox.left&&(r=e.shape.boundingBox.left),s<e.shape.boundingBox.right&&(s=e.shape.boundingBox.right),n>e.shape.boundingBox.top&&(n=e.shape.boundingBox.top),o<e.shape.boundingBox.bottom&&(o=e.shape.boundingBox.bottom);return 1e9===r&&-1e9===s&&1e9===n&&-1e9===o&&(n=0,o=0,r=0,s=0),{minX:r,maxX:s,minY:n,maxY:o}}},{key:\"getRangeCore\",value:function(t){var e,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=1e9,o=-1e9,r=1e9,s=-1e9;if(i.length>0)for(var a=0;a<i.length;a++)r>(e=t[i[a]]).x&&(r=e.x),s<e.x&&(s=e.x),n>e.y&&(n=e.y),o<e.y&&(o=e.y);return 1e9===r&&-1e9===s&&1e9===n&&-1e9===o&&(n=0,o=0,r=0,s=0),{minX:r,maxX:s,minY:n,maxY:o}}},{key:\"findCenter\",value:function(t){return{x:.5*(t.maxX+t.minX),y:.5*(t.maxY+t.minY)}}},{key:\"cloneOptions\",value:function(t,e){var i={};return void 0===e||\"node\"===e?(Ch(i,t.options,!0),i.x=t.x,i.y=t.y,i.amountOfConnections=t.edges.length):Ch(i,t.options,!0),i}}]),t}();function vp(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var gp=function(t){Ad(i,t);var e=vp(i);function i(t,n,o,r,s,a){var h;return Nn(this,i),(h=e.call(this,t,n,o,r,s,a)).isCluster=!0,h.containedNodes={},h.containedEdges={},h}return Fn(i,[{key:\"_openChildCluster\",value:function(t){var e=this,i=this.body.nodes[t];if(void 0===this.containedNodes[t])throw new Error(\"node with id: \"+t+\" not in current cluster\");if(!i.isCluster)throw new Error(\"node with id: \"+t+\" is not a cluster\");delete this.containedNodes[t],Dh(i.edges,(function(t){delete e.containedEdges[t.id]})),Dh(i.containedNodes,(function(t,i){e.containedNodes[i]=t})),i.containedNodes={},Dh(i.containedEdges,(function(t,i){e.containedEdges[i]=t})),i.containedEdges={},Dh(i.edges,(function(t){Dh(e.edges,(function(i){var n,o,r=Hr(n=i.clusteringEdgeReplacingIds).call(n,t.id);-1!==r&&(Dh(t.clusteringEdgeReplacingIds,(function(t){i.clusteringEdgeReplacingIds.push(t),e.body.edges[t].edgeReplacedById=i.id})),er(o=i.clusteringEdgeReplacingIds).call(o,r,1))}))})),i.edges=[]}}]),i}(cf),yp=function(){function t(e){var i=this;Nn(this,t),this.body=e,this.clusteredNodes={},this.clusteredEdges={},this.options={},this.defaultOptions={},At(this.options,this.defaultOptions),this.body.emitter.on(\"_resetData\",(function(){i.clusteredNodes={},i.clusteredEdges={}}))}return Fn(t,[{key:\"clusterByHubsize\",value:function(t,e){void 0===t?t=this._getHubSize():\"object\"===go(t)&&(e=this._checkOptions(t),t=this._getHubSize());for(var i=[],n=0;n<this.body.nodeIndices.length;n++){var o=this.body.nodes[this.body.nodeIndices[n]];o.edges.length>=t&&i.push(o.id)}for(var r=0;r<i.length;r++)this.clusterByConnection(i[r],e,!0);this.body.emitter.emit(\"_dataChanged\")}},{key:\"cluster\",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},i=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(void 0===e.joinCondition)throw new Error(\"Cannot call clusterByNodeData without a joinCondition function in the options.\");e=this._checkOptions(e);var n={},o={};Dh(this.body.nodes,(function(i,r){i.options&&!0===e.joinCondition(i.options)&&(n[r]=i,Dh(i.edges,(function(e){void 0===t.clusteredEdges[e.id]&&(o[e.id]=e)})))})),this._cluster(n,o,e,i)}},{key:\"clusterByEdgeCount\",value:function(t,e){var i=this,n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];e=this._checkOptions(e);for(var o,r,s,a=[],h={},l=function(n){var l={},d={},c=i.body.nodeIndices[n],u=i.body.nodes[c];if(void 0===h[c]){s=0,r=[];for(var f=0;f<u.edges.length;f++)o=u.edges[f],void 0===i.clusteredEdges[o.id]&&(o.toId!==o.fromId&&s++,r.push(o));if(s===t){for(var p=function(t){if(void 0===e.joinCondition||null===e.joinCondition)return!0;var i=pp.cloneOptions(t);return e.joinCondition(i)},v=!0,g=0;g<r.length;g++){o=r[g];var y=i._getConnectedId(o,c);if(!p(u)){v=!1;break}d[o.id]=o,l[c]=u,l[y]=i.body.nodes[y],h[c]=!0}if(zo(l).length>0&&zo(d).length>0&&!0===v){var m=function(){for(var t=0;t<a.length;++t)for(var e in l)if(void 0!==a[t].nodes[e])return a[t]}();if(void 0!==m){for(var b in l)void 0===m.nodes[b]&&(m.nodes[b]=l[b]);for(var w in d)void 0===m.edges[w]&&(m.edges[w]=d[w])}else a.push({nodes:l,edges:d})}}}},d=0;d<this.body.nodeIndices.length;d++)l(d);for(var c=0;c<a.length;c++)this._cluster(a[c].nodes,a[c].edges,e,!1);!0===n&&this.body.emitter.emit(\"_dataChanged\")}},{key:\"clusterOutliers\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this.clusterByEdgeCount(1,t,e)}},{key:\"clusterBridges\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this.clusterByEdgeCount(2,t,e)}},{key:\"clusterByConnection\",value:function(t,e){var i,n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];if(void 0===t)throw new Error(\"No nodeId supplied to clusterByConnection!\");if(void 0===this.body.nodes[t])throw new Error(\"The nodeId given to clusterByConnection does not exist!\");var o=this.body.nodes[t];void 0===(e=this._checkOptions(e,o)).clusterNodeProperties.x&&(e.clusterNodeProperties.x=o.x),void 0===e.clusterNodeProperties.y&&(e.clusterNodeProperties.y=o.y),void 0===e.clusterNodeProperties.fixed&&(e.clusterNodeProperties.fixed={},e.clusterNodeProperties.fixed.x=o.options.fixed.x,e.clusterNodeProperties.fixed.y=o.options.fixed.y);var r={},s={},a=o.id,h=pp.cloneOptions(o);r[a]=o;for(var l=0;l<o.edges.length;l++){var d=o.edges[l];if(void 0===this.clusteredEdges[d.id]){var c=this._getConnectedId(d,a);if(void 0===this.clusteredNodes[c])if(c!==a)if(void 0===e.joinCondition)s[d.id]=d,r[c]=this.body.nodes[c];else{var u=pp.cloneOptions(this.body.nodes[c]);!0===e.joinCondition(h,u)&&(s[d.id]=d,r[c]=this.body.nodes[c])}else s[d.id]=d}}var f=Io(i=zo(r)).call(i,(function(t){return r[t].id}));for(var p in r)if(Object.prototype.hasOwnProperty.call(r,p))for(var v=r[p],g=0;g<v.edges.length;g++){var y=v.edges[g];Hr(f).call(f,this._getConnectedId(y,v.id))>-1&&(s[y.id]=y)}this._cluster(r,s,e,n)}},{key:\"_createClusterEdges\",value:function(t,e,i,n){for(var o,r,s,a,h,l,d=zo(t),c=[],u=0;u<d.length;u++){s=t[r=d[u]];for(var f=0;f<s.edges.length;f++)o=s.edges[f],void 0===this.clusteredEdges[o.id]&&(o.toId==o.fromId?e[o.id]=o:o.toId==r?(a=i.id,l=h=o.fromId):(a=o.toId,h=i.id,l=a),void 0===t[l]&&c.push({edge:o,fromId:h,toId:a}))}for(var p=[],v=function(t){for(var e=0;e<p.length;e++){var i=p[e],n=t.fromId===i.fromId&&t.toId===i.toId,o=t.fromId===i.toId&&t.toId===i.fromId;if(n||o)return i}return null},g=0;g<c.length;g++){var y=c[g],m=y.edge,b=v(y);null===b?(b=this._createClusteredEdge(y.fromId,y.toId,m,n),p.push(b)):b.clusteringEdgeReplacingIds.push(m.id),this.body.edges[m.id].edgeReplacedById=b.id,this._backupEdgeOptions(m),m.setOptions({physics:!1})}}},{key:\"_checkOptions\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return void 0===t.clusterEdgeProperties&&(t.clusterEdgeProperties={}),void 0===t.clusterNodeProperties&&(t.clusterNodeProperties={}),t}},{key:\"_cluster\",value:function(t,e,i){var n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],o=[];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&void 0!==this.clusteredNodes[r]&&o.push(r);for(var s=0;s<o.length;++s)delete t[o[s]];if(0!=zo(t).length&&(1!=zo(t).length||1==i.clusterNodeProperties.allowSingleNodeCluster)){var a=Ch({},i.clusterNodeProperties);if(void 0!==i.processProperties){var h=[];for(var l in t)if(Object.prototype.hasOwnProperty.call(t,l)){var d=pp.cloneOptions(t[l]);h.push(d)}var c=[];for(var u in e)if(Object.prototype.hasOwnProperty.call(e,u)&&\"clusterEdge:\"!==u.substr(0,12)){var f=pp.cloneOptions(e[u],\"edge\");c.push(f)}if(!(a=i.processProperties(a,h,c)))throw new Error(\"The processProperties function does not return properties!\")}void 0===a.id&&(a.id=\"cluster:\"+Wc());var p=a.id;void 0===a.label&&(a.label=\"cluster\");var v=void 0;void 0===a.x&&(v=this._getClusterPosition(t),a.x=v.x),void 0===a.y&&(void 0===v&&(v=this._getClusterPosition(t)),a.y=v.y),a.id=p;var g=this.body.functions.createNode(a,gp);g.containedNodes=t,g.containedEdges=e,g.clusterEdgeProperties=i.clusterEdgeProperties,this.body.nodes[a.id]=g,this._clusterEdges(t,e,a,i.clusterEdgeProperties),a.id=void 0,!0===n&&this.body.emitter.emit(\"_dataChanged\")}}},{key:\"_backupEdgeOptions\",value:function(t){void 0===this.clusteredEdges[t.id]&&(this.clusteredEdges[t.id]={physics:t.options.physics})}},{key:\"_restoreEdge\",value:function(t){var e=this.clusteredEdges[t.id];void 0!==e&&(t.setOptions({physics:e.physics}),delete this.clusteredEdges[t.id])}},{key:\"isCluster\",value:function(t){return void 0!==this.body.nodes[t]?!0===this.body.nodes[t].isCluster:(console.error(\"Node does not exist.\"),!1)}},{key:\"_getClusterPosition\",value:function(t){for(var e,i=zo(t),n=t[i[0]].x,o=t[i[0]].x,r=t[i[0]].y,s=t[i[0]].y,a=1;a<i.length;a++)n=(e=t[i[a]]).x<n?e.x:n,o=e.x>o?e.x:o,r=e.y<r?e.y:r,s=e.y>s?e.y:s;return{x:.5*(n+o),y:.5*(r+s)}}},{key:\"openCluster\",value:function(t,e){var i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];if(void 0===t)throw new Error(\"No clusterNodeId supplied to openCluster.\");var n=this.body.nodes[t];if(void 0===n)throw new Error(\"The clusterNodeId supplied to openCluster does not exist.\");if(!0!==n.isCluster||void 0===n.containedNodes||void 0===n.containedEdges)throw new Error(\"The node:\"+t+\" is not a valid cluster.\");var o=this.findNode(t),r=Hr(o).call(o,t)-1;if(r>=0){var s=o[r],a=this.body.nodes[s];return a._openChildCluster(t),delete this.body.nodes[t],void(!0===i&&this.body.emitter.emit(\"_dataChanged\"))}var h=n.containedNodes,l=n.containedEdges;if(void 0!==e&&void 0!==e.releaseFunction&&\"function\"==typeof e.releaseFunction){var d={},c={x:n.x,y:n.y};for(var u in h)if(Object.prototype.hasOwnProperty.call(h,u)){var f=this.body.nodes[u];d[u]={x:f.x,y:f.y}}var p=e.releaseFunction(c,d);for(var v in h)if(Object.prototype.hasOwnProperty.call(h,v)){var g=this.body.nodes[v];void 0!==p[v]&&(g.x=void 0===p[v].x?n.x:p[v].x,g.y=void 0===p[v].y?n.y:p[v].y)}}else Dh(h,(function(t){!1===t.options.fixed.x&&(t.x=n.x),!1===t.options.fixed.y&&(t.y=n.y)}));for(var y in h)if(Object.prototype.hasOwnProperty.call(h,y)){var m=this.body.nodes[y];m.vx=n.vx,m.vy=n.vy,m.setOptions({physics:!0}),delete this.clusteredNodes[y]}for(var b=[],w=0;w<n.edges.length;w++)b.push(n.edges[w]);for(var k=0;k<b.length;k++){for(var _=b[k],x=this._getConnectedId(_,t),E=this.clusteredNodes[x],O=0;O<_.clusteringEdgeReplacingIds.length;O++){var C=_.clusteringEdgeReplacingIds[O],S=this.body.edges[C];if(void 0!==S)if(void 0!==E){var T=this.body.nodes[E.clusterId];T.containedEdges[S.id]=S,delete l[S.id];var M=S.fromId,P=S.toId;S.toId==x?P=E.clusterId:M=E.clusterId,this._createClusteredEdge(M,P,S,T.clusterEdgeProperties,{hidden:!1,physics:!0})}else this._restoreEdge(S)}_.remove()}for(var D in l)Object.prototype.hasOwnProperty.call(l,D)&&this._restoreEdge(l[D]);delete this.body.nodes[t],!0===i&&this.body.emitter.emit(\"_dataChanged\")}},{key:\"getNodesInCluster\",value:function(t){var e=[];if(!0===this.isCluster(t)){var i=this.body.nodes[t].containedNodes;for(var n in i)Object.prototype.hasOwnProperty.call(i,n)&&e.push(this.body.nodes[n].id)}return e}},{key:\"findNode\",value:function(t){for(var e,i=[],n=0;void 0!==this.clusteredNodes[t]&&n<100;){if(void 0===(e=this.body.nodes[t]))return[];i.push(e.id),t=this.clusteredNodes[t].clusterId,n++}return void 0===(e=this.body.nodes[t])?[]:(i.push(e.id),Xo(i).call(i),i)}},{key:\"updateClusteredNode\",value:function(t,e){if(void 0===t)throw new Error(\"No clusteredNodeId supplied to updateClusteredNode.\");if(void 0===e)throw new Error(\"No newOptions supplied to updateClusteredNode.\");if(void 0===this.body.nodes[t])throw new Error(\"The clusteredNodeId supplied to updateClusteredNode does not exist.\");this.body.nodes[t].setOptions(e),this.body.emitter.emit(\"_dataChanged\")}},{key:\"updateEdge\",value:function(t,e){if(void 0===t)throw new Error(\"No startEdgeId supplied to updateEdge.\");if(void 0===e)throw new Error(\"No newOptions supplied to updateEdge.\");if(void 0===this.body.edges[t])throw new Error(\"The startEdgeId supplied to updateEdge does not exist.\");for(var i=this.getClusteredEdges(t),n=0;n<i.length;n++){this.body.edges[i[n]].setOptions(e)}this.body.emitter.emit(\"_dataChanged\")}},{key:\"getClusteredEdges\",value:function(t){for(var e=[],i=0;void 0!==t&&void 0!==this.body.edges[t]&&i<100;)e.push(this.body.edges[t].id),t=this.body.edges[t].edgeReplacedById,i++;return Xo(e).call(e),e}},{key:\"getBaseEdge\",value:function(t){return this.getBaseEdges(t)[0]}},{key:\"getBaseEdges\",value:function(t){for(var e=[t],i=[],n=[],o=0;e.length>0&&o<100;){var r=e.pop();if(void 0!==r){var s=this.body.edges[r];if(void 0!==s){o++;var a=s.clusteringEdgeReplacingIds;if(void 0===a)n.push(r);else for(var h=0;h<a.length;++h){var l=a[h];-1===Hr(e).call(e,a)&&-1===Hr(i).call(i,a)&&e.push(l)}i.push(r)}}}return n}},{key:\"_getConnectedId\",value:function(t,e){return t.toId!=e?t.toId:(t.fromId,t.fromId)}},{key:\"_getHubSize\",value:function(){for(var t=0,e=0,i=0,n=0,o=0;o<this.body.nodeIndices.length;o++){var r=this.body.nodes[this.body.nodeIndices[o]];r.edges.length>n&&(n=r.edges.length),t+=r.edges.length,e+=Math.pow(r.edges.length,2),i+=1}t/=i;var s=(e/=i)-Math.pow(t,2),a=Math.sqrt(s),h=Math.floor(t+2*a);return h>n&&(h=n),h}},{key:\"_createClusteredEdge\",value:function(t,e,i,n,o){var r=pp.cloneOptions(i,\"edge\");Ch(r,n),r.from=t,r.to=e,r.id=\"clusterEdge:\"+Wc(),void 0!==o&&Ch(r,o);var s=this.body.functions.createEdge(r);return s.clusteringEdgeReplacingIds=[i.id],s.connect(),this.body.edges[s.id]=s,s}},{key:\"_clusterEdges\",value:function(t,e,i,n){if(e instanceof ep){var o=e,r={};r[o.id]=o,e=r}if(t instanceof cf){var s=t,a={};a[s.id]=s,t=a}if(null==i)throw new Error(\"_clusterEdges: parameter clusterNode required\");for(var h in void 0===n&&(n=i.clusterEdgeProperties),this._createClusterEdges(t,e,i,n),e)if(Object.prototype.hasOwnProperty.call(e,h)&&void 0!==this.body.edges[h]){var l=this.body.edges[h];this._backupEdgeOptions(l),l.setOptions({physics:!1})}for(var d in t)Object.prototype.hasOwnProperty.call(t,d)&&(this.clusteredNodes[d]={clusterId:i.id,node:this.body.nodes[d]},this.body.nodes[d].setOptions({physics:!1}))}},{key:\"_getClusterNodeForNode\",value:function(t){if(void 0!==t){var e=this.clusteredNodes[t];if(void 0!==e){var i=e.clusterId;if(void 0!==i)return this.body.nodes[i]}}}},{key:\"_filter\",value:function(t,e){var i=[];return Dh(t,(function(t){e(t)&&i.push(t)})),i}},{key:\"_updateState\",value:function(){var t,e=this,i=[],n={},o=function(t){Dh(e.body.nodes,(function(e){!0===e.isCluster&&t(e)}))};for(t in this.clusteredNodes){if(Object.prototype.hasOwnProperty.call(this.clusteredNodes,t))void 0===this.body.nodes[t]&&i.push(t)}o((function(t){for(var e=0;e<i.length;e++)delete t.containedNodes[i[e]]}));for(var r=0;r<i.length;r++)delete this.clusteredNodes[i[r]];Dh(this.clusteredEdges,(function(t){var i=e.body.edges[t];void 0!==i&&i.endPointsValid()||(n[t]=t)})),o((function(t){Dh(t.containedEdges,(function(t,e){t.endPointsValid()||n[e]||(n[e]=e)}))})),Dh(this.body.edges,(function(t,i){var o=!0,r=t.clusteringEdgeReplacingIds;if(void 0!==r){var s=0;Dh(r,(function(t){var i=e.body.edges[t];void 0!==i&&i.endPointsValid()&&(s+=1)})),o=s>0}t.endPointsValid()&&o||(n[i]=i)})),o((function(t){Dh(n,(function(i){delete t.containedEdges[i],Dh(t.edges,(function(o,r){o.id!==i?o.clusteringEdgeReplacingIds=e._filter(o.clusteringEdgeReplacingIds,(function(t){return!n[t]})):t.edges[r]=null})),t.edges=e._filter(t.edges,(function(t){return null!==t}))}))})),Dh(n,(function(t){delete e.clusteredEdges[t]})),Dh(n,(function(t){delete e.body.edges[t]})),Dh(zo(this.body.edges),(function(t){var i=e.body.edges[t],n=e._isClusteredNode(i.fromId)||e._isClusteredNode(i.toId);if(n!==e._isClusteredEdge(i.id))if(n){var o=e._getClusterNodeForNode(i.fromId);void 0!==o&&e._clusterEdges(e.body.nodes[i.fromId],i,o);var r=e._getClusterNodeForNode(i.toId);void 0!==r&&e._clusterEdges(e.body.nodes[i.toId],i,r)}else delete e._clusterEdges[t],e._restoreEdge(i)}));for(var s=!1,a=!0,h=function(){var t=[];o((function(e){var i=zo(e.containedNodes).length,n=!0===e.options.allowSingleNodeCluster;(n&&i<1||!n&&i<2)&&t.push(e.id)}));for(var i=0;i<t.length;++i)e.openCluster(t[i],{},!1);a=t.length>0,s=s||a};a;)h();s&&this._updateState()}},{key:\"_isClusteredNode\",value:function(t){return void 0!==this.clusteredNodes[t]}},{key:\"_isClusteredEdge\",value:function(t){return void 0!==this.clusteredEdges[t]}}]),t}();function mp(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return bp(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return bp(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function bp(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}var wp=function(){function t(e,i){var n;Nn(this,t),void 0!==window&&(n=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame),window.requestAnimationFrame=void 0===n?function(t){t()}:n,this.body=e,this.canvas=i,this.redrawRequested=!1,this.renderTimer=void 0,this.requiresTimeout=!0,this.renderingActive=!1,this.renderRequests=0,this.allowRedraw=!0,this.dragging=!1,this.zooming=!1,this.options={},this.defaultOptions={hideEdgesOnDrag:!1,hideEdgesOnZoom:!1,hideNodesOnDrag:!1},At(this.options,this.defaultOptions),this._determineBrowserMethod(),this.bindEventListeners()}return Fn(t,[{key:\"bindEventListeners\",value:function(){var t,e=this;this.body.emitter.on(\"dragStart\",(function(){e.dragging=!0})),this.body.emitter.on(\"dragEnd\",(function(){e.dragging=!1})),this.body.emitter.on(\"zoom\",(function(){e.zooming=!0,window.clearTimeout(e.zoomTimeoutId),e.zoomTimeoutId=rs((function(){var t;e.zooming=!1,Vt(t=e._requestRedraw).call(t,e)()}),250)})),this.body.emitter.on(\"_resizeNodes\",(function(){e._resizeNodes()})),this.body.emitter.on(\"_redraw\",(function(){!1===e.renderingActive&&e._redraw()})),this.body.emitter.on(\"_blockRedraw\",(function(){e.allowRedraw=!1})),this.body.emitter.on(\"_allowRedraw\",(function(){e.allowRedraw=!0,e.redrawRequested=!1})),this.body.emitter.on(\"_requestRedraw\",Vt(t=this._requestRedraw).call(t,this)),this.body.emitter.on(\"_startRendering\",(function(){e.renderRequests+=1,e.renderingActive=!0,e._startRendering()})),this.body.emitter.on(\"_stopRendering\",(function(){e.renderRequests-=1,e.renderingActive=e.renderRequests>0,e.renderTimer=void 0})),this.body.emitter.on(\"destroy\",(function(){e.renderRequests=0,e.allowRedraw=!1,e.renderingActive=!1,!0===e.requiresTimeout?clearTimeout(e.renderTimer):window.cancelAnimationFrame(e.renderTimer),e.body.emitter.off()}))}},{key:\"setOptions\",value:function(t){if(void 0!==t){Eh([\"hideEdgesOnDrag\",\"hideEdgesOnZoom\",\"hideNodesOnDrag\"],this.options,t)}}},{key:\"_requestNextFrame\",value:function(t,e){if(\"undefined\"!=typeof window){var i,n=window;return!0===this.requiresTimeout?i=rs(t,e):n.requestAnimationFrame&&(i=n.requestAnimationFrame(t)),i}}},{key:\"_startRendering\",value:function(){var t;!0===this.renderingActive&&(void 0===this.renderTimer&&(this.renderTimer=this._requestNextFrame(Vt(t=this._renderStep).call(t,this),this.simulationInterval)))}},{key:\"_renderStep\",value:function(){!0===this.renderingActive&&(this.renderTimer=void 0,!0===this.requiresTimeout&&this._startRendering(),this._redraw(),!1===this.requiresTimeout&&this._startRendering())}},{key:\"redraw\",value:function(){this.body.emitter.emit(\"setSize\"),this._redraw()}},{key:\"_requestRedraw\",value:function(){var t=this;!0!==this.redrawRequested&&!1===this.renderingActive&&!0===this.allowRedraw&&(this.redrawRequested=!0,this._requestNextFrame((function(){t._redraw(!1)}),0))}},{key:\"_redraw\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(!0===this.allowRedraw){this.body.emitter.emit(\"initRedraw\"),this.redrawRequested=!1;var e={drawExternalLabels:null};0!==this.canvas.frame.canvas.width&&0!==this.canvas.frame.canvas.height||this.canvas.setSize(),this.canvas.setTransform();var i=this.canvas.getContext(),n=this.canvas.frame.canvas.clientWidth,o=this.canvas.frame.canvas.clientHeight;if(i.clearRect(0,0,n,o),0===this.canvas.frame.clientWidth)return;if(i.save(),i.translate(this.body.view.translation.x,this.body.view.translation.y),i.scale(this.body.view.scale,this.body.view.scale),i.beginPath(),this.body.emitter.emit(\"beforeDrawing\",i),i.closePath(),!1===t&&(!1===this.dragging||!0===this.dragging&&!1===this.options.hideEdgesOnDrag)&&(!1===this.zooming||!0===this.zooming&&!1===this.options.hideEdgesOnZoom)&&this._drawEdges(i),!1===this.dragging||!0===this.dragging&&!1===this.options.hideNodesOnDrag){var r=this._drawNodes(i,t),s=r.drawExternalLabels;e.drawExternalLabels=s}!1===t&&(!1===this.dragging||!0===this.dragging&&!1===this.options.hideEdgesOnDrag)&&(!1===this.zooming||!0===this.zooming&&!1===this.options.hideEdgesOnZoom)&&this._drawArrows(i),null!=e.drawExternalLabels&&e.drawExternalLabels(),!1===t&&this._drawSelectionBox(i),i.beginPath(),this.body.emitter.emit(\"afterDrawing\",i),i.closePath(),i.restore(),!0===t&&i.clearRect(0,0,n,o)}}},{key:\"_resizeNodes\",value:function(){this.canvas.setTransform();var t=this.canvas.getContext();t.save(),t.translate(this.body.view.translation.x,this.body.view.translation.y),t.scale(this.body.view.scale,this.body.view.scale);var e,i=this.body.nodes;for(var n in i)Object.prototype.hasOwnProperty.call(i,n)&&((e=i[n]).resize(t),e.updateBoundingBox(t,e.selected));t.restore()}},{key:\"_drawNodes\",value:function(t){for(var e,i,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],o=this.body.nodes,r=this.body.nodeIndices,s=[],a=[],h=20,l=this.canvas.DOMtoCanvas({x:-h,y:-h}),d=this.canvas.DOMtoCanvas({x:this.canvas.frame.canvas.clientWidth+h,y:this.canvas.frame.canvas.clientHeight+h}),c={top:l.y,left:l.x,bottom:d.y,right:d.x},u=[],f=0;f<r.length;f++)if((e=o[r[f]]).hover)a.push(r[f]);else if(e.isSelected())s.push(r[f]);else if(!0===n){var p=e.draw(t);null!=p.drawExternalLabel&&u.push(p.drawExternalLabel)}else if(!0===e.isBoundingBoxOverlappingWith(c)){var v=e.draw(t);null!=v.drawExternalLabel&&u.push(v.drawExternalLabel)}else e.updateBoundingBox(t,e.selected);var g=s.length,y=a.length;for(i=0;i<g;i++){var m=(e=o[s[i]]).draw(t);null!=m.drawExternalLabel&&u.push(m.drawExternalLabel)}for(i=0;i<y;i++){var b=(e=o[a[i]]).draw(t);null!=b.drawExternalLabel&&u.push(b.drawExternalLabel)}return{drawExternalLabels:function(){var t,e=mp(u);try{for(e.s();!(t=e.n()).done;){(0,t.value)()}}catch(t){e.e(t)}finally{e.f()}}}}},{key:\"_drawEdges\",value:function(t){for(var e=this.body.edges,i=this.body.edgeIndices,n=0;n<i.length;n++){var o=e[i[n]];!0===o.connected&&o.draw(t)}}},{key:\"_drawArrows\",value:function(t){for(var e=this.body.edges,i=this.body.edgeIndices,n=0;n<i.length;n++){var o=e[i[n]];!0===o.connected&&o.drawArrows(t)}}},{key:\"_determineBrowserMethod\",value:function(){if(\"undefined\"!=typeof window){var t=navigator.userAgent.toLowerCase();this.requiresTimeout=!1,(-1!=Hr(t).call(t,\"msie 9.0\")||-1!=Hr(t).call(t,\"safari\")&&Hr(t).call(t,\"chrome\")<=-1)&&(this.requiresTimeout=!0)}else this.requiresTimeout=!0}},{key:\"_drawSelectionBox\",value:function(t){if(this.body.selectionBox.show){t.beginPath();var e=this.body.selectionBox.position.end.x-this.body.selectionBox.position.start.x,i=this.body.selectionBox.position.end.y-this.body.selectionBox.position.start.y;t.rect(this.body.selectionBox.position.start.x,this.body.selectionBox.position.start.y,e,i),t.fillStyle=\"rgba(151, 194, 252, 0.2)\",t.fillRect(this.body.selectionBox.position.start.x,this.body.selectionBox.position.start.y,e,i),t.strokeStyle=\"rgba(151, 194, 252, 1)\",t.stroke()}else t.closePath()}}]),t}(),kp=k.setInterval;function _p(t,e){e.inputHandler=function(t){t.isFirst&&e(t)},t.on(\"hammer.input\",e.inputHandler)}function xp(t,e){return e.inputHandler=function(t){t.isFinal&&e(t)},t.on(\"hammer.input\",e.inputHandler)}var Ep=function(){function t(e){Nn(this,t),this.body=e,this.pixelRatio=1,this.cameraState={},this.initialized=!1,this.canvasViewCenter={},this._cleanupCallbacks=[],this.options={},this.defaultOptions={autoResize:!0,height:\"100%\",width:\"100%\"},At(this.options,this.defaultOptions),this.bindEventListeners()}return Fn(t,[{key:\"bindEventListeners\",value:function(){var t,e=this;this.body.emitter.once(\"resize\",(function(t){0!==t.width&&(e.body.view.translation.x=.5*t.width),0!==t.height&&(e.body.view.translation.y=.5*t.height)})),this.body.emitter.on(\"setSize\",Vt(t=this.setSize).call(t,this)),this.body.emitter.on(\"destroy\",(function(){e.hammerFrame.destroy(),e.hammer.destroy(),e._cleanUp()}))}},{key:\"setOptions\",value:function(t){var e=this;if(void 0!==t){Eh([\"width\",\"height\",\"autoResize\"],this.options,t)}if(this._cleanUp(),!0===this.options.autoResize){var i;if(window.ResizeObserver){var n=new ResizeObserver((function(){!0===e.setSize()&&e.body.emitter.emit(\"_requestRedraw\")})),o=this.frame;n.observe(o),this._cleanupCallbacks.push((function(){n.unobserve(o)}))}else{var r=kp((function(){!0===e.setSize()&&e.body.emitter.emit(\"_requestRedraw\")}),1e3);this._cleanupCallbacks.push((function(){clearInterval(r)}))}var s=Vt(i=this._onResize).call(i,this);Bh(window,\"resize\",s),this._cleanupCallbacks.push((function(){zh(window,\"resize\",s)}))}}},{key:\"_cleanUp\",value:function(){var t,e,i;Wo(t=Xo(e=er(i=this._cleanupCallbacks).call(i,0)).call(e)).call(t,(function(t){try{t()}catch(t){console.error(t)}}))}},{key:\"_onResize\",value:function(){this.setSize(),this.body.emitter.emit(\"_redraw\")}},{key:\"_getCameraState\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.pixelRatio;!0===this.initialized&&(this.cameraState.previousWidth=this.frame.canvas.width/t,this.cameraState.previousHeight=this.frame.canvas.height/t,this.cameraState.scale=this.body.view.scale,this.cameraState.position=this.DOMtoCanvas({x:.5*this.frame.canvas.width/t,y:.5*this.frame.canvas.height/t}))}},{key:\"_setCameraState\",value:function(){if(void 0!==this.cameraState.scale&&0!==this.frame.canvas.clientWidth&&0!==this.frame.canvas.clientHeight&&0!==this.pixelRatio&&this.cameraState.previousWidth>0&&this.cameraState.previousHeight>0){var t=this.frame.canvas.width/this.pixelRatio/this.cameraState.previousWidth,e=this.frame.canvas.height/this.pixelRatio/this.cameraState.previousHeight,i=this.cameraState.scale;1!=t&&1!=e?i=.5*this.cameraState.scale*(t+e):1!=t?i=this.cameraState.scale*t:1!=e&&(i=this.cameraState.scale*e),this.body.view.scale=i;var n=this.DOMtoCanvas({x:.5*this.frame.canvas.clientWidth,y:.5*this.frame.canvas.clientHeight}),o={x:n.x-this.cameraState.position.x,y:n.y-this.cameraState.position.y};this.body.view.translation.x+=o.x*this.body.view.scale,this.body.view.translation.y+=o.y*this.body.view.scale}}},{key:\"_prepareValue\",value:function(t){if(\"number\"==typeof t)return t+\"px\";if(\"string\"==typeof t){if(-1!==Hr(t).call(t,\"%\")||-1!==Hr(t).call(t,\"px\"))return t;if(-1===Hr(t).call(t,\"%\"))return t+\"px\"}throw new Error(\"Could not use the value supplied for width or height:\"+t)}},{key:\"_create\",value:function(){for(;this.body.container.hasChildNodes();)this.body.container.removeChild(this.body.container.firstChild);if(this.frame=document.createElement(\"div\"),this.frame.className=\"vis-network\",this.frame.style.position=\"relative\",this.frame.style.overflow=\"hidden\",this.frame.tabIndex=0,this.frame.canvas=document.createElement(\"canvas\"),this.frame.canvas.style.position=\"relative\",this.frame.appendChild(this.frame.canvas),this.frame.canvas.getContext)this._setPixelRatio(),this.setTransform();else{var t=document.createElement(\"DIV\");t.style.color=\"red\",t.style.fontWeight=\"bold\",t.style.padding=\"10px\",t.innerText=\"Error: your browser does not support HTML canvas\",this.frame.canvas.appendChild(t)}this.body.container.appendChild(this.frame),this.body.view.scale=1,this.body.view.translation={x:.5*this.frame.canvas.clientWidth,y:.5*this.frame.canvas.clientHeight},this._bindHammer()}},{key:\"_bindHammer\",value:function(){var t=this;void 0!==this.hammer&&this.hammer.destroy(),this.drag={},this.pinch={},this.hammer=new ll(this.frame.canvas),this.hammer.get(\"pinch\").set({enable:!0}),this.hammer.get(\"pan\").set({threshold:5,direction:ll.DIRECTION_ALL}),_p(this.hammer,(function(e){t.body.eventListeners.onTouch(e)})),this.hammer.on(\"tap\",(function(e){t.body.eventListeners.onTap(e)})),this.hammer.on(\"doubletap\",(function(e){t.body.eventListeners.onDoubleTap(e)})),this.hammer.on(\"press\",(function(e){t.body.eventListeners.onHold(e)})),this.hammer.on(\"panstart\",(function(e){t.body.eventListeners.onDragStart(e)})),this.hammer.on(\"panmove\",(function(e){t.body.eventListeners.onDrag(e)})),this.hammer.on(\"panend\",(function(e){t.body.eventListeners.onDragEnd(e)})),this.hammer.on(\"pinch\",(function(e){t.body.eventListeners.onPinch(e)})),this.frame.canvas.addEventListener(\"wheel\",(function(e){t.body.eventListeners.onMouseWheel(e)})),this.frame.canvas.addEventListener(\"mousemove\",(function(e){t.body.eventListeners.onMouseMove(e)})),this.frame.canvas.addEventListener(\"contextmenu\",(function(e){t.body.eventListeners.onContext(e)})),this.hammerFrame=new ll(this.frame),xp(this.hammerFrame,(function(e){t.body.eventListeners.onRelease(e)}))}},{key:\"setSize\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.options.width,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.options.height;t=this._prepareValue(t),e=this._prepareValue(e);var i=!1,n=this.frame.canvas.width,o=this.frame.canvas.height,r=this.pixelRatio;if(this._setPixelRatio(),t!=this.options.width||e!=this.options.height||this.frame.style.width!=t||this.frame.style.height!=e)this._getCameraState(r),this.frame.style.width=t,this.frame.style.height=e,this.frame.canvas.style.width=\"100%\",this.frame.canvas.style.height=\"100%\",this.frame.canvas.width=Math.round(this.frame.canvas.clientWidth*this.pixelRatio),this.frame.canvas.height=Math.round(this.frame.canvas.clientHeight*this.pixelRatio),this.options.width=t,this.options.height=e,this.canvasViewCenter={x:.5*this.frame.clientWidth,y:.5*this.frame.clientHeight},i=!0;else{var s=Math.round(this.frame.canvas.clientWidth*this.pixelRatio),a=Math.round(this.frame.canvas.clientHeight*this.pixelRatio);this.frame.canvas.width===s&&this.frame.canvas.height===a||this._getCameraState(r),this.frame.canvas.width!==s&&(this.frame.canvas.width=s,i=!0),this.frame.canvas.height!==a&&(this.frame.canvas.height=a,i=!0)}return!0===i&&(this.body.emitter.emit(\"resize\",{width:Math.round(this.frame.canvas.width/this.pixelRatio),height:Math.round(this.frame.canvas.height/this.pixelRatio),oldWidth:Math.round(n/this.pixelRatio),oldHeight:Math.round(o/this.pixelRatio)}),this._setCameraState()),this.initialized=!0,i}},{key:\"getContext\",value:function(){return this.frame.canvas.getContext(\"2d\")}},{key:\"_determinePixelRatio\",value:function(){var t=this.getContext();if(void 0===t)throw new Error(\"Could not get canvax context\");var e=1;return\"undefined\"!=typeof window&&(e=window.devicePixelRatio||1),e/(t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1)}},{key:\"_setPixelRatio\",value:function(){this.pixelRatio=this._determinePixelRatio()}},{key:\"setTransform\",value:function(){var t=this.getContext();if(void 0===t)throw new Error(\"Could not get canvax context\");t.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0)}},{key:\"_XconvertDOMtoCanvas\",value:function(t){return(t-this.body.view.translation.x)/this.body.view.scale}},{key:\"_XconvertCanvasToDOM\",value:function(t){return t*this.body.view.scale+this.body.view.translation.x}},{key:\"_YconvertDOMtoCanvas\",value:function(t){return(t-this.body.view.translation.y)/this.body.view.scale}},{key:\"_YconvertCanvasToDOM\",value:function(t){return t*this.body.view.scale+this.body.view.translation.y}},{key:\"canvasToDOM\",value:function(t){return{x:this._XconvertCanvasToDOM(t.x),y:this._YconvertCanvasToDOM(t.y)}}},{key:\"DOMtoCanvas\",value:function(t){return{x:this._XconvertDOMtoCanvas(t.x),y:this._YconvertDOMtoCanvas(t.y)}}}]),t}();function Op(t,e){var i=At({nodes:e,minZoomLevel:Number.MIN_VALUE,maxZoomLevel:1},null!=t?t:{});if(!So(i.nodes))throw new TypeError(\"Nodes has to be an array of ids.\");if(0===i.nodes.length&&(i.nodes=e),!(\"number\"==typeof i.minZoomLevel&&i.minZoomLevel>0))throw new TypeError(\"Min zoom level has to be a number higher than zero.\");if(!(\"number\"==typeof i.maxZoomLevel&&i.minZoomLevel<=i.maxZoomLevel))throw new TypeError(\"Max zoom level has to be a number higher than min zoom level.\");return i}var Cp=function(){function t(e,i){var n,o,r=this;Nn(this,t),this.body=e,this.canvas=i,this.animationSpeed=1/this.renderRefreshRate,this.animationEasingFunction=\"easeInOutQuint\",this.easingTime=0,this.sourceScale=0,this.targetScale=0,this.sourceTranslation=0,this.targetTranslation=0,this.lockedOnNodeId=void 0,this.lockedOnNodeOffset=void 0,this.touchTime=0,this.viewFunction=void 0,this.body.emitter.on(\"fit\",Vt(n=this.fit).call(n,this)),this.body.emitter.on(\"animationFinished\",(function(){r.body.emitter.emit(\"_stopRendering\")})),this.body.emitter.on(\"unlockNode\",Vt(o=this.releaseNode).call(o,this))}return Fn(t,[{key:\"setOptions\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.options=t}},{key:\"fit\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];t=Op(t,this.body.nodeIndices);var i,n,o=this.canvas.frame.canvas.clientWidth,r=this.canvas.frame.canvas.clientHeight;if(0===o||0===r)n=1,i=pp.getRange(this.body.nodes,t.nodes);else if(!0===e){var s=0;for(var a in this.body.nodes)if(Object.prototype.hasOwnProperty.call(this.body.nodes,a)){var h=this.body.nodes[a];!0===h.predefinedPosition&&(s+=1)}if(s>.5*this.body.nodeIndices.length)return void this.fit(t,!1);i=pp.getRange(this.body.nodes,t.nodes);var l=this.body.nodeIndices.length;n=12.662/(l+7.4147)+.0964822;var d=Math.min(o/600,r/600);n*=d}else{this.body.emitter.emit(\"_resizeNodes\"),i=pp.getRange(this.body.nodes,t.nodes);var c=1.1*Math.abs(i.maxX-i.minX),u=1.1*Math.abs(i.maxY-i.minY),f=o/c,p=r/u;n=f<=p?f:p}n>t.maxZoomLevel?n=t.maxZoomLevel:n<t.minZoomLevel&&(n=t.minZoomLevel);var v=pp.findCenter(i),g={position:v,scale:n,animation:t.animation};this.moveTo(g)}},{key:\"focus\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(void 0!==this.body.nodes[t]){var i={x:this.body.nodes[t].x,y:this.body.nodes[t].y};e.position=i,e.lockedOnNode=t,this.moveTo(e)}else console.error(\"Node: \"+t+\" cannot be found.\")}},{key:\"moveTo\",value:function(t){if(void 0!==t){if(null!=t.offset){if(null!=t.offset.x){if(t.offset.x=+t.offset.x,!wd(t.offset.x))throw new TypeError('The option \"offset.x\" has to be a finite number.')}else t.offset.x=0;if(null!=t.offset.y){if(t.offset.y=+t.offset.y,!wd(t.offset.y))throw new TypeError('The option \"offset.y\" has to be a finite number.')}else t.offset.x=0}else t.offset={x:0,y:0};if(null!=t.position){if(null!=t.position.x){if(t.position.x=+t.position.x,!wd(t.position.x))throw new TypeError('The option \"position.x\" has to be a finite number.')}else t.position.x=0;if(null!=t.position.y){if(t.position.y=+t.position.y,!wd(t.position.y))throw new TypeError('The option \"position.y\" has to be a finite number.')}else t.position.x=0}else t.position=this.getViewPosition();if(null!=t.scale){if(t.scale=+t.scale,!(t.scale>0))throw new TypeError('The option \"scale\" has to be a number greater than zero.')}else t.scale=this.body.view.scale;void 0===t.animation&&(t.animation={duration:0}),!1===t.animation&&(t.animation={duration:0}),!0===t.animation&&(t.animation={}),void 0===t.animation.duration&&(t.animation.duration=1e3),void 0===t.animation.easingFunction&&(t.animation.easingFunction=\"easeInOutQuad\"),this.animateView(t)}else t={}}},{key:\"animateView\",value:function(t){if(void 0!==t){this.animationEasingFunction=t.animation.easingFunction,this.releaseNode(),!0===t.locked&&(this.lockedOnNodeId=t.lockedOnNode,this.lockedOnNodeOffset=t.offset),0!=this.easingTime&&this._transitionRedraw(!0),this.sourceScale=this.body.view.scale,this.sourceTranslation=this.body.view.translation,this.targetScale=t.scale,this.body.view.scale=this.targetScale;var e,i,n=this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight}),o=n.x-t.position.x,r=n.y-t.position.y;if(this.targetTranslation={x:this.sourceTranslation.x+o*this.targetScale+t.offset.x,y:this.sourceTranslation.y+r*this.targetScale+t.offset.y},0===t.animation.duration)if(null!=this.lockedOnNodeId)this.viewFunction=Vt(e=this._lockedRedraw).call(e,this),this.body.emitter.on(\"initRedraw\",this.viewFunction);else this.body.view.scale=this.targetScale,this.body.view.translation=this.targetTranslation,this.body.emitter.emit(\"_requestRedraw\");else this.animationSpeed=1/(60*t.animation.duration*.001)||1/60,this.animationEasingFunction=t.animation.easingFunction,this.viewFunction=Vt(i=this._transitionRedraw).call(i,this),this.body.emitter.on(\"initRedraw\",this.viewFunction),this.body.emitter.emit(\"_startRendering\")}}},{key:\"_lockedRedraw\",value:function(){var t=this.body.nodes[this.lockedOnNodeId].x,e=this.body.nodes[this.lockedOnNodeId].y,i=this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight}),n=i.x-t,o=i.y-e,r=this.body.view.translation,s={x:r.x+n*this.body.view.scale+this.lockedOnNodeOffset.x,y:r.y+o*this.body.view.scale+this.lockedOnNodeOffset.y};this.body.view.translation=s}},{key:\"releaseNode\",value:function(){void 0!==this.lockedOnNodeId&&void 0!==this.viewFunction&&(this.body.emitter.off(\"initRedraw\",this.viewFunction),this.lockedOnNodeId=void 0,this.lockedOnNodeOffset=void 0)}},{key:\"_transitionRedraw\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.easingTime+=this.animationSpeed,this.easingTime=!0===t?1:this.easingTime;var e=Zh[this.animationEasingFunction](this.easingTime);if(this.body.view.scale=this.sourceScale+(this.targetScale-this.sourceScale)*e,this.body.view.translation={x:this.sourceTranslation.x+(this.targetTranslation.x-this.sourceTranslation.x)*e,y:this.sourceTranslation.y+(this.targetTranslation.y-this.sourceTranslation.y)*e},this.easingTime>=1){var i;if(this.body.emitter.off(\"initRedraw\",this.viewFunction),this.easingTime=0,null!=this.lockedOnNodeId)this.viewFunction=Vt(i=this._lockedRedraw).call(i,this),this.body.emitter.on(\"initRedraw\",this.viewFunction);this.body.emitter.emit(\"animationFinished\")}}},{key:\"getScale\",value:function(){return this.body.view.scale}},{key:\"getViewPosition\",value:function(){return this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight})}}]),t}();function Sp(t){var e,i=t&&t.preventDefault||!1,n=t&&t.container||window,o={},r={keydown:{},keyup:{}},s={};for(e=97;e<=122;e++)s[String.fromCharCode(e)]={code:e-97+65,shift:!1};for(e=65;e<=90;e++)s[String.fromCharCode(e)]={code:e,shift:!0};for(e=0;e<=9;e++)s[\"\"+e]={code:48+e,shift:!1};for(e=1;e<=12;e++)s[\"F\"+e]={code:111+e,shift:!1};for(e=0;e<=9;e++)s[\"num\"+e]={code:96+e,shift:!1};s[\"num*\"]={code:106,shift:!1},s[\"num+\"]={code:107,shift:!1},s[\"num-\"]={code:109,shift:!1},s[\"num/\"]={code:111,shift:!1},s[\"num.\"]={code:110,shift:!1},s.left={code:37,shift:!1},s.up={code:38,shift:!1},s.right={code:39,shift:!1},s.down={code:40,shift:!1},s.space={code:32,shift:!1},s.enter={code:13,shift:!1},s.shift={code:16,shift:void 0},s.esc={code:27,shift:!1},s.backspace={code:8,shift:!1},s.tab={code:9,shift:!1},s.ctrl={code:17,shift:!1},s.alt={code:18,shift:!1},s.delete={code:46,shift:!1},s.pageup={code:33,shift:!1},s.pagedown={code:34,shift:!1},s[\"=\"]={code:187,shift:!1},s[\"-\"]={code:189,shift:!1},s[\"]\"]={code:221,shift:!1},s[\"[\"]={code:219,shift:!1};var a=function(t){l(t,\"keydown\")},h=function(t){l(t,\"keyup\")},l=function(t,e){if(void 0!==r[e][t.keyCode]){for(var n=r[e][t.keyCode],o=0;o<n.length;o++)(void 0===n[o].shift||1==n[o].shift&&1==t.shiftKey||0==n[o].shift&&0==t.shiftKey)&&n[o].fn(t);1==i&&t.preventDefault()}};return o.bind=function(t,e,i){if(void 0===i&&(i=\"keydown\"),void 0===s[t])throw new Error(\"unsupported key: \"+t);void 0===r[i][s[t].code]&&(r[i][s[t].code]=[]),r[i][s[t].code].push({fn:e,shift:s[t].shift})},o.bindAll=function(t,e){for(var i in void 0===e&&(e=\"keydown\"),s)s.hasOwnProperty(i)&&o.bind(i,t,e)},o.getKey=function(t){for(var e in s)if(s.hasOwnProperty(e)){if(1==t.shiftKey&&1==s[e].shift&&t.keyCode==s[e].code)return e;if(0==t.shiftKey&&0==s[e].shift&&t.keyCode==s[e].code)return e;if(t.keyCode==s[e].code&&\"shift\"==e)return e}return\"unknown key, currently not supported\"},o.unbind=function(t,e,i){if(void 0===i&&(i=\"keydown\"),void 0===s[t])throw new Error(\"unsupported key: \"+t);if(void 0!==e){var n=[],o=r[i][s[t].code];if(void 0!==o)for(var a=0;a<o.length;a++)o[a].fn==e&&o[a].shift==s[t].shift||n.push(r[i][s[t].code][a]);r[i][s[t].code]=n}else r[i][s[t].code]=[]},o.reset=function(){r={keydown:{},keyup:{}}},o.destroy=function(){r={keydown:{},keyup:{}},n.removeEventListener(\"keydown\",a,!0),n.removeEventListener(\"keyup\",h,!0)},n.addEventListener(\"keydown\",a,!0),n.addEventListener(\"keyup\",h,!0),o}var Tp=Object.freeze({__proto__:null,default:Sp}),Mp=function(){function t(e,i){var n=this;Nn(this,t),this.body=e,this.canvas=i,this.iconsCreated=!1,this.navigationHammers=[],this.boundFunctions={},this.touchTime=0,this.activated=!1,this.body.emitter.on(\"activate\",(function(){n.activated=!0,n.configureKeyboardBindings()})),this.body.emitter.on(\"deactivate\",(function(){n.activated=!1,n.configureKeyboardBindings()})),this.body.emitter.on(\"destroy\",(function(){void 0!==n.keycharm&&n.keycharm.destroy()})),this.options={}}return Fn(t,[{key:\"setOptions\",value:function(t){void 0!==t&&(this.options=t,this.create())}},{key:\"create\",value:function(){!0===this.options.navigationButtons?!1===this.iconsCreated&&this.loadNavigationElements():!0===this.iconsCreated&&this.cleanNavigation(),this.configureKeyboardBindings()}},{key:\"cleanNavigation\",value:function(){if(0!=this.navigationHammers.length){for(var t=0;t<this.navigationHammers.length;t++)this.navigationHammers[t].destroy();this.navigationHammers=[]}this.navigationDOM&&this.navigationDOM.wrapper&&this.navigationDOM.wrapper.parentNode&&this.navigationDOM.wrapper.parentNode.removeChild(this.navigationDOM.wrapper),this.iconsCreated=!1}},{key:\"loadNavigationElements\",value:function(){var t=this;this.cleanNavigation(),this.navigationDOM={};var e=[\"up\",\"down\",\"left\",\"right\",\"zoomIn\",\"zoomOut\",\"zoomExtends\"],i=[\"_moveUp\",\"_moveDown\",\"_moveLeft\",\"_moveRight\",\"_zoomIn\",\"_zoomOut\",\"_fit\"];this.navigationDOM.wrapper=document.createElement(\"div\"),this.navigationDOM.wrapper.className=\"vis-navigation\",this.canvas.frame.appendChild(this.navigationDOM.wrapper);for(var n=0;n<e.length;n++){this.navigationDOM[e[n]]=document.createElement(\"div\"),this.navigationDOM[e[n]].className=\"vis-button vis-\"+e[n],this.navigationDOM.wrapper.appendChild(this.navigationDOM[e[n]]);var o,r,s=new ll(this.navigationDOM[e[n]]);if(\"_fit\"===i[n])_p(s,Vt(o=this._fit).call(o,this));else _p(s,Vt(r=this.bindToRedraw).call(r,this,i[n]));this.navigationHammers.push(s)}var a=new ll(this.canvas.frame);xp(a,(function(){t._stopMovement()})),this.navigationHammers.push(a),this.iconsCreated=!0}},{key:\"bindToRedraw\",value:function(t){var e;void 0===this.boundFunctions[t]&&(this.boundFunctions[t]=Vt(e=this[t]).call(e,this),this.body.emitter.on(\"initRedraw\",this.boundFunctions[t]),this.body.emitter.emit(\"_startRendering\"))}},{key:\"unbindFromRedraw\",value:function(t){void 0!==this.boundFunctions[t]&&(this.body.emitter.off(\"initRedraw\",this.boundFunctions[t]),this.body.emitter.emit(\"_stopRendering\"),delete this.boundFunctions[t])}},{key:\"_fit\",value:function(){(new Date).valueOf()-this.touchTime>700&&(this.body.emitter.emit(\"fit\",{duration:700}),this.touchTime=(new Date).valueOf())}},{key:\"_stopMovement\",value:function(){for(var t in this.boundFunctions)Object.prototype.hasOwnProperty.call(this.boundFunctions,t)&&(this.body.emitter.off(\"initRedraw\",this.boundFunctions[t]),this.body.emitter.emit(\"_stopRendering\"));this.boundFunctions={}}},{key:\"_moveUp\",value:function(){this.body.view.translation.y+=this.options.keyboard.speed.y}},{key:\"_moveDown\",value:function(){this.body.view.translation.y-=this.options.keyboard.speed.y}},{key:\"_moveLeft\",value:function(){this.body.view.translation.x+=this.options.keyboard.speed.x}},{key:\"_moveRight\",value:function(){this.body.view.translation.x-=this.options.keyboard.speed.x}},{key:\"_zoomIn\",value:function(){var t=this.body.view.scale,e=this.body.view.scale*(1+this.options.keyboard.speed.zoom),i=this.body.view.translation,n=e/t,o=(1-n)*this.canvas.canvasViewCenter.x+i.x*n,r=(1-n)*this.canvas.canvasViewCenter.y+i.y*n;this.body.view.scale=e,this.body.view.translation={x:o,y:r},this.body.emitter.emit(\"zoom\",{direction:\"+\",scale:this.body.view.scale,pointer:null})}},{key:\"_zoomOut\",value:function(){var t=this.body.view.scale,e=this.body.view.scale/(1+this.options.keyboard.speed.zoom),i=this.body.view.translation,n=e/t,o=(1-n)*this.canvas.canvasViewCenter.x+i.x*n,r=(1-n)*this.canvas.canvasViewCenter.y+i.y*n;this.body.view.scale=e,this.body.view.translation={x:o,y:r},this.body.emitter.emit(\"zoom\",{direction:\"-\",scale:this.body.view.scale,pointer:null})}},{key:\"configureKeyboardBindings\",value:function(){var t,e,i,n,o,r,s,a,h,l,d,c,u,f,p,v,g,y,m,b,w,k,_,x,E=this;(void 0!==this.keycharm&&this.keycharm.destroy(),!0===this.options.keyboard.enabled)&&(!0===this.options.keyboard.bindToWindow?this.keycharm=Sp({container:window,preventDefault:!0}):this.keycharm=Sp({container:this.canvas.frame,preventDefault:!0}),this.keycharm.reset(),!0===this.activated&&(Vt(t=this.keycharm).call(t,\"up\",(function(){E.bindToRedraw(\"_moveUp\")}),\"keydown\"),Vt(e=this.keycharm).call(e,\"down\",(function(){E.bindToRedraw(\"_moveDown\")}),\"keydown\"),Vt(i=this.keycharm).call(i,\"left\",(function(){E.bindToRedraw(\"_moveLeft\")}),\"keydown\"),Vt(n=this.keycharm).call(n,\"right\",(function(){E.bindToRedraw(\"_moveRight\")}),\"keydown\"),Vt(o=this.keycharm).call(o,\"=\",(function(){E.bindToRedraw(\"_zoomIn\")}),\"keydown\"),Vt(r=this.keycharm).call(r,\"num+\",(function(){E.bindToRedraw(\"_zoomIn\")}),\"keydown\"),Vt(s=this.keycharm).call(s,\"num-\",(function(){E.bindToRedraw(\"_zoomOut\")}),\"keydown\"),Vt(a=this.keycharm).call(a,\"-\",(function(){E.bindToRedraw(\"_zoomOut\")}),\"keydown\"),Vt(h=this.keycharm).call(h,\"[\",(function(){E.bindToRedraw(\"_zoomOut\")}),\"keydown\"),Vt(l=this.keycharm).call(l,\"]\",(function(){E.bindToRedraw(\"_zoomIn\")}),\"keydown\"),Vt(d=this.keycharm).call(d,\"pageup\",(function(){E.bindToRedraw(\"_zoomIn\")}),\"keydown\"),Vt(c=this.keycharm).call(c,\"pagedown\",(function(){E.bindToRedraw(\"_zoomOut\")}),\"keydown\"),Vt(u=this.keycharm).call(u,\"up\",(function(){E.unbindFromRedraw(\"_moveUp\")}),\"keyup\"),Vt(f=this.keycharm).call(f,\"down\",(function(){E.unbindFromRedraw(\"_moveDown\")}),\"keyup\"),Vt(p=this.keycharm).call(p,\"left\",(function(){E.unbindFromRedraw(\"_moveLeft\")}),\"keyup\"),Vt(v=this.keycharm).call(v,\"right\",(function(){E.unbindFromRedraw(\"_moveRight\")}),\"keyup\"),Vt(g=this.keycharm).call(g,\"=\",(function(){E.unbindFromRedraw(\"_zoomIn\")}),\"keyup\"),Vt(y=this.keycharm).call(y,\"num+\",(function(){E.unbindFromRedraw(\"_zoomIn\")}),\"keyup\"),Vt(m=this.keycharm).call(m,\"num-\",(function(){E.unbindFromRedraw(\"_zoomOut\")}),\"keyup\"),Vt(b=this.keycharm).call(b,\"-\",(function(){E.unbindFromRedraw(\"_zoomOut\")}),\"keyup\"),Vt(w=this.keycharm).call(w,\"[\",(function(){E.unbindFromRedraw(\"_zoomOut\")}),\"keyup\"),Vt(k=this.keycharm).call(k,\"]\",(function(){E.unbindFromRedraw(\"_zoomIn\")}),\"keyup\"),Vt(_=this.keycharm).call(_,\"pageup\",(function(){E.unbindFromRedraw(\"_zoomIn\")}),\"keyup\"),Vt(x=this.keycharm).call(x,\"pagedown\",(function(){E.unbindFromRedraw(\"_zoomOut\")}),\"keyup\")))}}]),t}();function Pp(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return Dp(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Dp(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function Dp(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}var Ip=function(){function t(e,i,n){var o,r,s,a,h,l,d,c,u,f,p,v,g;Nn(this,t),this.body=e,this.canvas=i,this.selectionHandler=n,this.navigationHandler=new Mp(e,i),this.body.eventListeners.onTap=Vt(o=this.onTap).call(o,this),this.body.eventListeners.onTouch=Vt(r=this.onTouch).call(r,this),this.body.eventListeners.onDoubleTap=Vt(s=this.onDoubleTap).call(s,this),this.body.eventListeners.onHold=Vt(a=this.onHold).call(a,this),this.body.eventListeners.onDragStart=Vt(h=this.onDragStart).call(h,this),this.body.eventListeners.onDrag=Vt(l=this.onDrag).call(l,this),this.body.eventListeners.onDragEnd=Vt(d=this.onDragEnd).call(d,this),this.body.eventListeners.onMouseWheel=Vt(c=this.onMouseWheel).call(c,this),this.body.eventListeners.onPinch=Vt(u=this.onPinch).call(u,this),this.body.eventListeners.onMouseMove=Vt(f=this.onMouseMove).call(f,this),this.body.eventListeners.onRelease=Vt(p=this.onRelease).call(p,this),this.body.eventListeners.onContext=Vt(v=this.onContext).call(v,this),this.touchTime=0,this.drag={},this.pinch={},this.popup=void 0,this.popupObj=void 0,this.popupTimer=void 0,this.body.functions.getPointer=Vt(g=this.getPointer).call(g,this),this.options={},this.defaultOptions={dragNodes:!0,dragView:!0,hover:!1,keyboard:{enabled:!1,speed:{x:10,y:10,zoom:.02},bindToWindow:!0,autoFocus:!0},navigationButtons:!1,tooltipDelay:300,zoomView:!0,zoomSpeed:1},At(this.options,this.defaultOptions),this.bindEventListeners()}return Fn(t,[{key:\"bindEventListeners\",value:function(){var t=this;this.body.emitter.on(\"destroy\",(function(){clearTimeout(t.popupTimer),delete t.body.functions.getPointer}))}},{key:\"setOptions\",value:function(t){if(void 0!==t){Oh([\"hideEdgesOnDrag\",\"hideEdgesOnZoom\",\"hideNodesOnDrag\",\"keyboard\",\"multiselect\",\"selectable\",\"selectConnectedEdges\"],this.options,t),$h(this.options,t,\"keyboard\"),t.tooltip&&(At(this.options.tooltip,t.tooltip),t.tooltip.color&&(this.options.tooltip.color=Rh(t.tooltip.color)))}this.navigationHandler.setOptions(this.options)}},{key:\"getPointer\",value:function(t){return{x:t.x-Mh(this.canvas.frame.canvas),y:t.y-Ph(this.canvas.frame.canvas)}}},{key:\"onTouch\",value:function(t){(new Date).valueOf()-this.touchTime>50&&(this.drag.pointer=this.getPointer(t.center),this.drag.pinched=!1,this.pinch.scale=this.body.view.scale,this.touchTime=(new Date).valueOf())}},{key:\"onTap\",value:function(t){var e=this.getPointer(t.center),i=this.selectionHandler.options.multiselect&&(t.changedPointers[0].ctrlKey||t.changedPointers[0].metaKey);this.checkSelectionChanges(e,i),this.selectionHandler.commitAndEmit(e,t),this.selectionHandler.generateClickEvent(\"click\",t,e)}},{key:\"onDoubleTap\",value:function(t){var e=this.getPointer(t.center);this.selectionHandler.generateClickEvent(\"doubleClick\",t,e)}},{key:\"onHold\",value:function(t){var e=this.getPointer(t.center),i=this.selectionHandler.options.multiselect;this.checkSelectionChanges(e,i),this.selectionHandler.commitAndEmit(e,t),this.selectionHandler.generateClickEvent(\"click\",t,e),this.selectionHandler.generateClickEvent(\"hold\",t,e)}},{key:\"onRelease\",value:function(t){if((new Date).valueOf()-this.touchTime>10){var e=this.getPointer(t.center);this.selectionHandler.generateClickEvent(\"release\",t,e),this.touchTime=(new Date).valueOf()}}},{key:\"onContext\",value:function(t){var e=this.getPointer({x:t.clientX,y:t.clientY});this.selectionHandler.generateClickEvent(\"oncontext\",t,e)}},{key:\"checkSelectionChanges\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];!0===e?this.selectionHandler.selectAdditionalOnPoint(t):this.selectionHandler.selectOnPoint(t)}},{key:\"_determineDifference\",value:function(t,e){var i=function(t,e){for(var i=[],n=0;n<t.length;n++){var o=t[n];-1===Hr(e).call(e,o)&&i.push(o)}return i};return{nodes:i(t.nodes,e.nodes),edges:i(t.edges,e.edges)}}},{key:\"onDragStart\",value:function(t){if(!this.drag.dragging){void 0===this.drag.pointer&&this.onTouch(t);var e=this.selectionHandler.getNodeAt(this.drag.pointer);if(this.drag.dragging=!0,this.drag.selection=[],this.drag.translation=At({},this.body.view.translation),this.drag.nodeId=void 0,t.srcEvent.shiftKey){this.body.selectionBox.show=!0;var i=this.getPointer(t.center);this.body.selectionBox.position.start={x:this.canvas._XconvertDOMtoCanvas(i.x),y:this.canvas._YconvertDOMtoCanvas(i.y)},this.body.selectionBox.position.end={x:this.canvas._XconvertDOMtoCanvas(i.x),y:this.canvas._YconvertDOMtoCanvas(i.y)}}if(void 0!==e&&!0===this.options.dragNodes){this.drag.nodeId=e.id,!1===e.isSelected()&&(this.selectionHandler.unselectAll(),this.selectionHandler.selectObject(e)),this.selectionHandler.generateClickEvent(\"dragStart\",t,this.drag.pointer);var n,o=Pp(this.selectionHandler.getSelectedNodes());try{for(o.s();!(n=o.n()).done;){var r=n.value,s={id:r.id,node:r,x:r.x,y:r.y,xFixed:r.options.fixed.x,yFixed:r.options.fixed.y};r.options.fixed.x=!0,r.options.fixed.y=!0,this.drag.selection.push(s)}}catch(t){o.e(t)}finally{o.f()}}else this.selectionHandler.generateClickEvent(\"dragStart\",t,this.drag.pointer,void 0,!0)}}},{key:\"onDrag\",value:function(t){var e=this;if(!0!==this.drag.pinched){this.body.emitter.emit(\"unlockNode\");var i=this.getPointer(t.center),n=this.drag.selection;if(n&&n.length&&!0===this.options.dragNodes){this.selectionHandler.generateClickEvent(\"dragging\",t,i);var o=i.x-this.drag.pointer.x,r=i.y-this.drag.pointer.y;Wo(n).call(n,(function(t){var i=t.node;!1===t.xFixed&&(i.x=e.canvas._XconvertDOMtoCanvas(e.canvas._XconvertCanvasToDOM(t.x)+o)),!1===t.yFixed&&(i.y=e.canvas._YconvertDOMtoCanvas(e.canvas._YconvertCanvasToDOM(t.y)+r))})),this.body.emitter.emit(\"startSimulation\")}else{if(t.srcEvent.shiftKey){if(this.selectionHandler.generateClickEvent(\"dragging\",t,i,void 0,!0),void 0===this.drag.pointer)return void this.onDragStart(t);this.body.selectionBox.position.end={x:this.canvas._XconvertDOMtoCanvas(i.x),y:this.canvas._YconvertDOMtoCanvas(i.y)},this.body.emitter.emit(\"_requestRedraw\")}if(!0===this.options.dragView&&!t.srcEvent.shiftKey){if(this.selectionHandler.generateClickEvent(\"dragging\",t,i,void 0,!0),void 0===this.drag.pointer)return void this.onDragStart(t);var s=i.x-this.drag.pointer.x,a=i.y-this.drag.pointer.y;this.body.view.translation={x:this.drag.translation.x+s,y:this.drag.translation.y+a},this.body.emitter.emit(\"_requestRedraw\")}}}}},{key:\"onDragEnd\",value:function(t){var e=this;if(this.drag.dragging=!1,this.body.selectionBox.show){var i;this.body.selectionBox.show=!1;var n=this.body.selectionBox.position,o={minX:Math.min(n.start.x,n.end.x),minY:Math.min(n.start.y,n.end.y),maxX:Math.max(n.start.x,n.end.x),maxY:Math.max(n.start.y,n.end.y)},r=mr(i=this.body.nodeIndices).call(i,(function(t){var i=e.body.nodes[t];return i.x>=o.minX&&i.x<=o.maxX&&i.y>=o.minY&&i.y<=o.maxY}));Wo(r).call(r,(function(t){return e.selectionHandler.selectObject(e.body.nodes[t])}));var s=this.getPointer(t.center);this.selectionHandler.commitAndEmit(s,t),this.selectionHandler.generateClickEvent(\"dragEnd\",t,this.getPointer(t.center),void 0,!0),this.body.emitter.emit(\"_requestRedraw\")}else{var a=this.drag.selection;a&&a.length?(Wo(a).call(a,(function(t){t.node.options.fixed.x=t.xFixed,t.node.options.fixed.y=t.yFixed})),this.selectionHandler.generateClickEvent(\"dragEnd\",t,this.getPointer(t.center)),this.body.emitter.emit(\"startSimulation\")):(this.selectionHandler.generateClickEvent(\"dragEnd\",t,this.getPointer(t.center),void 0,!0),this.body.emitter.emit(\"_requestRedraw\"))}}},{key:\"onPinch\",value:function(t){var e=this.getPointer(t.center);this.drag.pinched=!0,void 0===this.pinch.scale&&(this.pinch.scale=1);var i=this.pinch.scale*t.scale;this.zoom(i,e)}},{key:\"zoom\",value:function(t,e){if(!0===this.options.zoomView){var i=this.body.view.scale;t<1e-5&&(t=1e-5),t>10&&(t=10);var n=void 0;void 0!==this.drag&&!0===this.drag.dragging&&(n=this.canvas.DOMtoCanvas(this.drag.pointer));var o=this.body.view.translation,r=t/i,s=(1-r)*e.x+o.x*r,a=(1-r)*e.y+o.y*r;if(this.body.view.scale=t,this.body.view.translation={x:s,y:a},null!=n){var h=this.canvas.canvasToDOM(n);this.drag.pointer.x=h.x,this.drag.pointer.y=h.y}this.body.emitter.emit(\"_requestRedraw\"),i<t?this.body.emitter.emit(\"zoom\",{direction:\"+\",scale:this.body.view.scale,pointer:e}):this.body.emitter.emit(\"zoom\",{direction:\"-\",scale:this.body.view.scale,pointer:e})}}},{key:\"onMouseWheel\",value:function(t){if(!0===this.options.zoomView){if(0!==t.deltaY){var e=this.body.view.scale;e*=1+(t.deltaY<0?1:-1)*(.1*this.options.zoomSpeed);var i=this.getPointer({x:t.clientX,y:t.clientY});this.zoom(e,i)}t.preventDefault()}}},{key:\"onMouseMove\",value:function(t){var e=this,i=this.getPointer({x:t.clientX,y:t.clientY}),n=!1;void 0!==this.popup&&(!1===this.popup.hidden&&this._checkHidePopup(i),!1===this.popup.hidden&&(n=!0,this.popup.setPosition(i.x+3,i.y-5),this.popup.show())),this.options.keyboard.autoFocus&&!1===this.options.keyboard.bindToWindow&&!0===this.options.keyboard.enabled&&this.canvas.frame.focus(),!1===n&&(void 0!==this.popupTimer&&(clearInterval(this.popupTimer),this.popupTimer=void 0),this.drag.dragging||(this.popupTimer=rs((function(){return e._checkShowPopup(i)}),this.options.tooltipDelay))),!0===this.options.hover&&this.selectionHandler.hoverObject(t,i)}},{key:\"_checkShowPopup\",value:function(t){var e=this.canvas._XconvertDOMtoCanvas(t.x),i=this.canvas._YconvertDOMtoCanvas(t.y),n={left:e,top:i,right:e,bottom:i},o=void 0===this.popupObj?void 0:this.popupObj.id,r=!1,s=\"node\";if(void 0===this.popupObj){for(var a,h=this.body.nodeIndices,l=this.body.nodes,d=[],c=0;c<h.length;c++)!0===(a=l[h[c]]).isOverlappingWith(n)&&(r=!0,void 0!==a.getTitle()&&d.push(h[c]));d.length>0&&(this.popupObj=l[d[d.length-1]],r=!0)}if(void 0===this.popupObj&&!1===r){for(var u,f=this.body.edgeIndices,p=this.body.edges,v=[],g=0;g<f.length;g++)!0===(u=p[f[g]]).isOverlappingWith(n)&&!0===u.connected&&void 0!==u.getTitle()&&v.push(f[g]);v.length>0&&(this.popupObj=p[v[v.length-1]],s=\"edge\")}void 0!==this.popupObj?this.popupObj.id!==o&&(void 0===this.popup&&(this.popup=new dl(this.canvas.frame)),this.popup.popupTargetType=s,this.popup.popupTargetId=this.popupObj.id,this.popup.setPosition(t.x+3,t.y-5),this.popup.setText(this.popupObj.getTitle()),this.popup.show(),this.body.emitter.emit(\"showPopup\",this.popupObj.id)):void 0!==this.popup&&(this.popup.hide(),this.body.emitter.emit(\"hidePopup\"))}},{key:\"_checkHidePopup\",value:function(t){var e=this.selectionHandler._pointerToPositionObject(t),i=!1;if(\"node\"===this.popup.popupTargetType){if(void 0!==this.body.nodes[this.popup.popupTargetId]&&!0===(i=this.body.nodes[this.popup.popupTargetId].isOverlappingWith(e))){var n=this.selectionHandler.getNodeAt(t);i=void 0!==n&&n.id===this.popup.popupTargetId}}else void 0===this.selectionHandler.getNodeAt(t)&&void 0!==this.body.edges[this.popup.popupTargetId]&&(i=this.body.edges[this.popup.popupTargetId].isOverlappingWith(e));!1===i&&(this.popupObj=void 0,this.popup.hide(),this.body.emitter.emit(\"hidePopup\"))}}]),t}(),Bp=Jl.getWeakData,zp=we.set,Np=we.getterFor,Ap=Gi.find,Fp=Gi.findIndex,jp=0,Rp=function(t){return t.frozen||(t.frozen=new Lp)},Lp=function(){this.entries=[]},Hp=function(t,e){return Ap(t.entries,(function(t){return t[0]===e}))};Lp.prototype={get:function(t){var e=Hp(this,t);if(e)return e[1]},has:function(t){return!!Hp(this,t)},set:function(t,e){var i=Hp(this,t);i?i[1]=e:this.entries.push([t,e])},delete:function(t){var e=Fp(this.entries,(function(e){return e[0]===t}));return~e&&this.entries.splice(e,1),!!~e}};var Wp={getConstructor:function(t,e,i,n){var o=t((function(t,r){id(t,o,e),zp(t,{type:e,id:jp++,frozen:void 0}),null!=r&&ed(r,t[n],{that:t,AS_ENTRIES:i})})),r=Np(e),s=function(t,e,i){var n=r(t),o=Bp(dt(e),!0);return!0===o?Rp(n).set(e,i):o[n.id]=i,t};return hd(o.prototype,{delete:function(t){var e=r(this);if(!w(t))return!1;var i=Bp(t);return!0===i?Rp(e).delete(t):i&&j(i,e.id)&&delete i[e.id]},has:function(t){var e=r(this);if(!w(t))return!1;var i=Bp(t);return!0===i?Rp(e).has(t):i&&j(i,e.id)}}),hd(o.prototype,i?{get:function(t){var e=r(this);if(w(t)){var i=Bp(t);return!0===i?Rp(e).get(t):i?i[e.id]:void 0}},set:function(t,e){return s(this,t,e)}}:{add:function(t){return s(this,t,!0)}}),o}};n((function(t){var e,i=we.enforce,n=!a.ActiveXObject&&\"ActiveXObject\"in a,o=Object.isExtensible,r=function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}},s=t.exports=ad(\"WeakMap\",r,Wp);if(ae&&n){e=Wp.getConstructor(r,\"WeakMap\",!0),Jl.enable();var h=s.prototype,l=h.delete,d=h.has,c=h.get,u=h.set;hd(h,{delete:function(t){if(w(t)&&!o(t)){var n=i(this);return n.frozen||(n.frozen=new e),l.call(this,t)||n.frozen.delete(t)}return l.call(this,t)},has:function(t){if(w(t)&&!o(t)){var n=i(this);return n.frozen||(n.frozen=new e),d.call(this,t)||n.frozen.has(t)}return d.call(this,t)},get:function(t){if(w(t)&&!o(t)){var n=i(this);return n.frozen||(n.frozen=new e),d.call(this,t)?c.call(this,t):n.frozen.get(t)}return c.call(this,t)},set:function(t,n){if(w(t)&&!o(t)){var r=i(this);r.frozen||(r.frozen=new e),d.call(this,t)?u.call(this,t,n):r.frozen.set(t,n)}else u.call(this,t,n);return this}})}}));var qp,Vp,Up,Yp,Xp,Gp=k.WeakMap;function Kp(t,e,i,n){if(\"a\"===i&&!n)throw new TypeError(\"Private accessor was defined without a getter\");if(\"function\"==typeof e?t!==e||!n:!e.has(t))throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");return\"m\"===i?n:\"a\"===i?n.call(t):n?n.value:e.get(t)}function $p(t,e,i,n,o){if(\"m\"===n)throw new TypeError(\"Private method is not writable\");if(\"a\"===n&&!o)throw new TypeError(\"Private accessor was defined without a setter\");if(\"function\"==typeof e?t!==e||!o:!e.has(t))throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");return\"a\"===n?o.call(t,i):o?o.value=i:e.set(t,i),i}function Zp(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return Qp(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Qp(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function Qp(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}function Jp(t,e){var i,n=new ec,o=Zp(e);try{for(o.s();!(i=o.n()).done;){var r=i.value;t.has(r)||n.add(r)}}catch(t){o.e(t)}finally{o.f()}return n}var tv=function(){function t(){Nn(this,t),qp.set(this,new ec),Vp.set(this,new ec)}return Fn(t,[{key:\"size\",get:function(){return Kp(this,Vp,\"f\").size}},{key:\"add\",value:function(){for(var t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];for(var n=0,o=e;n<o.length;n++){var r=o[n];Kp(this,Vp,\"f\").add(r)}}},{key:\"delete\",value:function(){for(var t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];for(var n=0,o=e;n<o.length;n++){var r=o[n];Kp(this,Vp,\"f\").delete(r)}}},{key:\"clear\",value:function(){Kp(this,Vp,\"f\").clear()}},{key:\"getSelection\",value:function(){return wo(Kp(this,Vp,\"f\"))}},{key:\"getChanges\",value:function(){return{added:wo(Jp(Kp(this,qp,\"f\"),Kp(this,Vp,\"f\"))),deleted:wo(Jp(Kp(this,Vp,\"f\"),Kp(this,qp,\"f\"))),previous:wo(new ec(Kp(this,qp,\"f\"))),current:wo(new ec(Kp(this,Vp,\"f\")))}}},{key:\"commit\",value:function(){var t=this.getChanges();$p(this,qp,Kp(this,Vp,\"f\"),\"f\"),$p(this,Vp,new ec(Kp(this,qp,\"f\")),\"f\");var e,i=Zp(t.added);try{for(i.s();!(e=i.n()).done;){e.value.select()}}catch(t){i.e(t)}finally{i.f()}var n,o=Zp(t.deleted);try{for(o.s();!(n=o.n()).done;){n.value.unselect()}}catch(t){o.e(t)}finally{o.f()}return t}}]),t}();qp=new Gp,Vp=new Gp;var ev=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:function(){};Nn(this,t),Up.set(this,new tv),Yp.set(this,new tv),Xp.set(this,void 0),$p(this,Xp,e,\"f\")}return Fn(t,[{key:\"sizeNodes\",get:function(){return Kp(this,Up,\"f\").size}},{key:\"sizeEdges\",get:function(){return Kp(this,Yp,\"f\").size}},{key:\"getNodes\",value:function(){return Kp(this,Up,\"f\").getSelection()}},{key:\"getEdges\",value:function(){return Kp(this,Yp,\"f\").getSelection()}},{key:\"addNodes\",value:function(){var t;(t=Kp(this,Up,\"f\")).add.apply(t,arguments)}},{key:\"addEdges\",value:function(){var t;(t=Kp(this,Yp,\"f\")).add.apply(t,arguments)}},{key:\"deleteNodes\",value:function(t){Kp(this,Up,\"f\").delete(t)}},{key:\"deleteEdges\",value:function(t){Kp(this,Yp,\"f\").delete(t)}},{key:\"clear\",value:function(){Kp(this,Up,\"f\").clear(),Kp(this,Yp,\"f\").clear()}},{key:\"commit\",value:function(){for(var t,e,i={nodes:Kp(this,Up,\"f\").commit(),edges:Kp(this,Yp,\"f\").commit()},n=arguments.length,o=new Array(n),r=0;r<n;r++)o[r]=arguments[r];return(t=Kp(this,Xp,\"f\")).call.apply(t,Eo(e=[this,i]).call(e,o)),i}}]),t}();function iv(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return nv(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return nv(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function nv(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}Up=new Gp,Yp=new Gp,Xp=new Gp;var ov=function(){function t(e,i){var n=this;Nn(this,t),this.body=e,this.canvas=i,this._selectionAccumulator=new ev,this.hoverObj={nodes:{},edges:{}},this.options={},this.defaultOptions={multiselect:!1,selectable:!0,selectConnectedEdges:!0,hoverConnectedEdges:!0},At(this.options,this.defaultOptions),this.body.emitter.on(\"_dataChanged\",(function(){n.updateSelection()}))}return Fn(t,[{key:\"setOptions\",value:function(t){if(void 0!==t){Eh([\"multiselect\",\"hoverConnectedEdges\",\"selectable\",\"selectConnectedEdges\"],this.options,t)}}},{key:\"selectOnPoint\",value:function(t){var e=!1;if(!0===this.options.selectable){var i=this.getNodeAt(t)||this.getEdgeAt(t);this.unselectAll(),void 0!==i&&(e=this.selectObject(i)),this.body.emitter.emit(\"_requestRedraw\")}return e}},{key:\"selectAdditionalOnPoint\",value:function(t){var e=!1;if(!0===this.options.selectable){var i=this.getNodeAt(t)||this.getEdgeAt(t);void 0!==i&&(e=!0,!0===i.isSelected()?this.deselectObject(i):this.selectObject(i),this.body.emitter.emit(\"_requestRedraw\"))}return e}},{key:\"_initBaseEvent\",value:function(t,e){var i={};return i.pointer={DOM:{x:e.x,y:e.y},canvas:this.canvas.DOMtoCanvas(e)},i.event=t,i}},{key:\"generateClickEvent\",value:function(t,e,i,n){var o=arguments.length>4&&void 0!==arguments[4]&&arguments[4],r=this._initBaseEvent(e,i);if(!0===o)r.nodes=[],r.edges=[];else{var s=this.getSelection();r.nodes=s.nodes,r.edges=s.edges}void 0!==n&&(r.previousSelection=n),\"click\"==t&&(r.items=this.getClickedItems(i)),void 0!==e.controlEdge&&(r.controlEdge=e.controlEdge),this.body.emitter.emit(t,r)}},{key:\"selectObject\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.options.selectConnectedEdges;if(void 0!==t){if(t instanceof cf){var i;if(!0===e)(i=this._selectionAccumulator).addEdges.apply(i,wo(t.edges));this._selectionAccumulator.addNodes(t)}else this._selectionAccumulator.addEdges(t);return!0}return!1}},{key:\"deselectObject\",value:function(t){!0===t.isSelected()&&(t.selected=!1,this._removeFromSelection(t))}},{key:\"_getAllNodesOverlappingWith\",value:function(t){for(var e=[],i=this.body.nodes,n=0;n<this.body.nodeIndices.length;n++){var o=this.body.nodeIndices[n];i[o].isOverlappingWith(t)&&e.push(o)}return e}},{key:\"_pointerToPositionObject\",value:function(t){var e=this.canvas.DOMtoCanvas(t);return{left:e.x-1,top:e.y+1,right:e.x+1,bottom:e.y-1}}},{key:\"getNodeAt\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this._pointerToPositionObject(t),n=this._getAllNodesOverlappingWith(i);return n.length>0?!0===e?this.body.nodes[n[n.length-1]]:n[n.length-1]:void 0}},{key:\"_getEdgesOverlappingWith\",value:function(t,e){for(var i=this.body.edges,n=0;n<this.body.edgeIndices.length;n++){var o=this.body.edgeIndices[n];i[o].isOverlappingWith(t)&&e.push(o)}}},{key:\"_getAllEdgesOverlappingWith\",value:function(t){var e=[];return this._getEdgesOverlappingWith(t,e),e}},{key:\"getEdgeAt\",value:function(t){for(var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this.canvas.DOMtoCanvas(t),n=10,o=null,r=this.body.edges,s=0;s<this.body.edgeIndices.length;s++){var a=this.body.edgeIndices[s],h=r[a];if(h.connected){var l=h.from.x,d=h.from.y,c=h.to.x,u=h.to.y,f=h.edgeType.getDistanceToEdge(l,d,c,u,i.x,i.y);f<n&&(o=a,n=f)}}return null!==o?!0===e?this.body.edges[o]:o:void 0}},{key:\"_addToHover\",value:function(t){t instanceof cf?this.hoverObj.nodes[t.id]=t:this.hoverObj.edges[t.id]=t}},{key:\"_removeFromSelection\",value:function(t){var e;t instanceof cf?(this._selectionAccumulator.deleteNodes(t),(e=this._selectionAccumulator).deleteEdges.apply(e,wo(t.edges))):this._selectionAccumulator.deleteEdges(t)}},{key:\"unselectAll\",value:function(){this._selectionAccumulator.clear()}},{key:\"getSelectedNodeCount\",value:function(){return this._selectionAccumulator.sizeNodes}},{key:\"getSelectedEdgeCount\",value:function(){return this._selectionAccumulator.sizeEdges}},{key:\"_hoverConnectedEdges\",value:function(t){for(var e=0;e<t.edges.length;e++){var i=t.edges[e];i.hover=!0,this._addToHover(i)}}},{key:\"emitBlurEvent\",value:function(t,e,i){var n=this._initBaseEvent(t,e);!0===i.hover&&(i.hover=!1,i instanceof cf?(n.node=i.id,this.body.emitter.emit(\"blurNode\",n)):(n.edge=i.id,this.body.emitter.emit(\"blurEdge\",n)))}},{key:\"emitHoverEvent\",value:function(t,e,i){var n=this._initBaseEvent(t,e),o=!1;return!1===i.hover&&(i.hover=!0,this._addToHover(i),o=!0,i instanceof cf?(n.node=i.id,this.body.emitter.emit(\"hoverNode\",n)):(n.edge=i.id,this.body.emitter.emit(\"hoverEdge\",n))),o}},{key:\"hoverObject\",value:function(t,e){var i=this.getNodeAt(e);void 0===i&&(i=this.getEdgeAt(e));var n=!1;for(var o in this.hoverObj.nodes)Object.prototype.hasOwnProperty.call(this.hoverObj.nodes,o)&&(void 0===i||i instanceof cf&&i.id!=o||i instanceof ep)&&(this.emitBlurEvent(t,e,this.hoverObj.nodes[o]),delete this.hoverObj.nodes[o],n=!0);for(var r in this.hoverObj.edges)Object.prototype.hasOwnProperty.call(this.hoverObj.edges,r)&&(!0===n?(this.hoverObj.edges[r].hover=!1,delete this.hoverObj.edges[r]):(void 0===i||i instanceof ep&&i.id!=r||i instanceof cf&&!i.hover)&&(this.emitBlurEvent(t,e,this.hoverObj.edges[r]),delete this.hoverObj.edges[r],n=!0));if(void 0!==i){var s=zo(this.hoverObj.edges).length,a=zo(this.hoverObj.nodes).length;(n||i instanceof ep&&0===s&&0===a||i instanceof cf&&0===s&&0===a)&&(n=this.emitHoverEvent(t,e,i)),i instanceof cf&&!0===this.options.hoverConnectedEdges&&this._hoverConnectedEdges(i)}!0===n&&this.body.emitter.emit(\"_requestRedraw\")}},{key:\"commitWithoutEmitting\",value:function(){this._selectionAccumulator.commit()}},{key:\"commitAndEmit\",value:function(t,e){var i=!1,n=this._selectionAccumulator.commit(),o={nodes:n.nodes.previous,edges:n.edges.previous};n.edges.deleted.length>0&&(this.generateClickEvent(\"deselectEdge\",e,t,o),i=!0),n.nodes.deleted.length>0&&(this.generateClickEvent(\"deselectNode\",e,t,o),i=!0),n.nodes.added.length>0&&(this.generateClickEvent(\"selectNode\",e,t),i=!0),n.edges.added.length>0&&(this.generateClickEvent(\"selectEdge\",e,t),i=!0),!0===i&&this.generateClickEvent(\"select\",e,t)}},{key:\"getSelection\",value:function(){return{nodes:this.getSelectedNodeIds(),edges:this.getSelectedEdgeIds()}}},{key:\"getSelectedNodes\",value:function(){return this._selectionAccumulator.getNodes()}},{key:\"getSelectedEdges\",value:function(){return this._selectionAccumulator.getEdges()}},{key:\"getSelectedNodeIds\",value:function(){var t;return Io(t=this._selectionAccumulator.getNodes()).call(t,(function(t){return t.id}))}},{key:\"getSelectedEdgeIds\",value:function(){var t;return Io(t=this._selectionAccumulator.getEdges()).call(t,(function(t){return t.id}))}},{key:\"setSelection\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!t||!t.nodes&&!t.edges)throw new TypeError(\"Selection must be an object with nodes and/or edges properties\");if((e.unselectAll||void 0===e.unselectAll)&&this.unselectAll(),t.nodes){var i,n=iv(t.nodes);try{for(n.s();!(i=n.n()).done;){var o=i.value,r=this.body.nodes[o];if(!r)throw new RangeError('Node with id \"'+o+'\" not found');this.selectObject(r,e.highlightEdges)}}catch(t){n.e(t)}finally{n.f()}}if(t.edges){var s,a=iv(t.edges);try{for(a.s();!(s=a.n()).done;){var h=s.value,l=this.body.edges[h];if(!l)throw new RangeError('Edge with id \"'+h+'\" not found');this.selectObject(l)}}catch(t){a.e(t)}finally{a.f()}}this.body.emitter.emit(\"_requestRedraw\"),this._selectionAccumulator.commit()}},{key:\"selectNodes\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(!t||void 0===t.length)throw\"Selection must be an array with ids\";this.setSelection({nodes:t},{highlightEdges:e})}},{key:\"selectEdges\",value:function(t){if(!t||void 0===t.length)throw\"Selection must be an array with ids\";this.setSelection({edges:t})}},{key:\"updateSelection\",value:function(){for(var t in this._selectionAccumulator.getNodes())Object.prototype.hasOwnProperty.call(this.body.nodes,t.id)||this._selectionAccumulator.deleteNodes(t);for(var e in this._selectionAccumulator.getEdges())Object.prototype.hasOwnProperty.call(this.body.edges,e.id)||this._selectionAccumulator.deleteEdges(e)}},{key:\"getClickedItems\",value:function(t){for(var e=this.canvas.DOMtoCanvas(t),i=[],n=this.body.nodeIndices,o=this.body.nodes,r=n.length-1;r>=0;r--){var s=o[n[r]].getItemsOnPoint(e);i.push.apply(i,s)}for(var a=this.body.edgeIndices,h=this.body.edges,l=a.length-1;l>=0;l--){var d=h[a[l]].getItemsOnPoint(e);i.push.apply(i,d)}return i}}]),t}(),rv=n((function(t,e){!function(t){function e(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}t.__esModule=!0,t.sort=v;var i=32,n=7,o=256,r=[1,10,100,1e3,1e4,1e5,1e6,1e7,1e8,1e9];function s(t){return t<1e5?t<100?t<10?0:1:t<1e4?t<1e3?2:3:4:t<1e7?t<1e6?5:6:t<1e9?t<1e8?7:8:9}function a(t,e){if(t===e)return 0;if(~~t===t&&~~e===e){if(0===t||0===e)return t<e?-1:1;if(t<0||e<0){if(e>=0)return-1;if(t>=0)return 1;t=-t,e=-e}var i=s(t),n=s(e),o=0;return i<n?(t*=r[n-i-1],e/=10,o=-1):i>n&&(e*=r[i-n-1],t/=10,o=1),t===e?o:t<e?-1:1}var a=String(t),h=String(e);return a===h?0:a<h?-1:1}function h(t){for(var e=0;t>=i;)e|=1&t,t>>=1;return t+e}function l(t,e,i,n){var o=e+1;if(o===i)return 1;if(n(t[o++],t[e])<0){for(;o<i&&n(t[o],t[o-1])<0;)o++;d(t,e,o)}else for(;o<i&&n(t[o],t[o-1])>=0;)o++;return o-e}function d(t,e,i){for(i--;e<i;){var n=t[e];t[e++]=t[i],t[i--]=n}}function c(t,e,i,n,o){for(n===e&&n++;n<i;n++){for(var r=t[n],s=e,a=n;s<a;){var h=s+a>>>1;o(r,t[h])<0?a=h:s=h+1}var l=n-s;switch(l){case 3:t[s+3]=t[s+2];case 2:t[s+2]=t[s+1];case 1:t[s+1]=t[s];break;default:for(;l>0;)t[s+l]=t[s+l-1],l--}t[s]=r}}function u(t,e,i,n,o,r){var s=0,a=0,h=1;if(r(t,e[i+o])>0){for(a=n-o;h<a&&r(t,e[i+o+h])>0;)s=h,(h=1+(h<<1))<=0&&(h=a);h>a&&(h=a),s+=o,h+=o}else{for(a=o+1;h<a&&r(t,e[i+o-h])<=0;)s=h,(h=1+(h<<1))<=0&&(h=a);h>a&&(h=a);var l=s;s=o-h,h=o-l}for(s++;s<h;){var d=s+(h-s>>>1);r(t,e[i+d])>0?s=d+1:h=d}return h}function f(t,e,i,n,o,r){var s=0,a=0,h=1;if(r(t,e[i+o])<0){for(a=o+1;h<a&&r(t,e[i+o-h])<0;)s=h,(h=1+(h<<1))<=0&&(h=a);h>a&&(h=a);var l=s;s=o-h,h=o-l}else{for(a=n-o;h<a&&r(t,e[i+o+h])>=0;)s=h,(h=1+(h<<1))<=0&&(h=a);h>a&&(h=a),s+=o,h+=o}for(s++;s<h;){var d=s+(h-s>>>1);r(t,e[i+d])<0?h=d:s=d+1}return h}var p=function(){function t(i,r){e(this,t),this.array=null,this.compare=null,this.minGallop=n,this.length=0,this.tmpStorageLength=o,this.stackLength=0,this.runStart=null,this.runLength=null,this.stackSize=0,this.array=i,this.compare=r,this.length=i.length,this.length<2*o&&(this.tmpStorageLength=this.length>>>1),this.tmp=new Array(this.tmpStorageLength),this.stackLength=this.length<120?5:this.length<1542?10:this.length<119151?19:40,this.runStart=new Array(this.stackLength),this.runLength=new Array(this.stackLength)}return t.prototype.pushRun=function(t,e){this.runStart[this.stackSize]=t,this.runLength[this.stackSize]=e,this.stackSize+=1},t.prototype.mergeRuns=function(){for(;this.stackSize>1;){var t=this.stackSize-2;if(t>=1&&this.runLength[t-1]<=this.runLength[t]+this.runLength[t+1]||t>=2&&this.runLength[t-2]<=this.runLength[t]+this.runLength[t-1])this.runLength[t-1]<this.runLength[t+1]&&t--;else if(this.runLength[t]>this.runLength[t+1])break;this.mergeAt(t)}},t.prototype.forceMergeRuns=function(){for(;this.stackSize>1;){var t=this.stackSize-2;t>0&&this.runLength[t-1]<this.runLength[t+1]&&t--,this.mergeAt(t)}},t.prototype.mergeAt=function(t){var e=this.compare,i=this.array,n=this.runStart[t],o=this.runLength[t],r=this.runStart[t+1],s=this.runLength[t+1];this.runLength[t]=o+s,t===this.stackSize-3&&(this.runStart[t+1]=this.runStart[t+2],this.runLength[t+1]=this.runLength[t+2]),this.stackSize--;var a=f(i[r],i,n,o,0,e);n+=a,0!=(o-=a)&&0!==(s=u(i[n+o-1],i,r,s,s-1,e))&&(o<=s?this.mergeLow(n,o,r,s):this.mergeHigh(n,o,r,s))},t.prototype.mergeLow=function(t,e,i,o){var r=this.compare,s=this.array,a=this.tmp,h=0;for(h=0;h<e;h++)a[h]=s[t+h];var l=0,d=i,c=t;if(s[c++]=s[d++],0!=--o)if(1!==e){for(var p=this.minGallop;;){var v=0,g=0,y=!1;do{if(r(s[d],a[l])<0){if(s[c++]=s[d++],g++,v=0,0==--o){y=!0;break}}else if(s[c++]=a[l++],v++,g=0,1==--e){y=!0;break}}while((v|g)<p);if(y)break;do{if(0!==(v=f(s[d],a,l,e,0,r))){for(h=0;h<v;h++)s[c+h]=a[l+h];if(c+=v,l+=v,(e-=v)<=1){y=!0;break}}if(s[c++]=s[d++],0==--o){y=!0;break}if(0!==(g=u(a[l],s,d,o,0,r))){for(h=0;h<g;h++)s[c+h]=s[d+h];if(c+=g,d+=g,0==(o-=g)){y=!0;break}}if(s[c++]=a[l++],1==--e){y=!0;break}p--}while(v>=n||g>=n);if(y)break;p<0&&(p=0),p+=2}if(this.minGallop=p,p<1&&(this.minGallop=1),1===e){for(h=0;h<o;h++)s[c+h]=s[d+h];s[c+o]=a[l]}else{if(0===e)throw new Error(\"mergeLow preconditions were not respected\");for(h=0;h<e;h++)s[c+h]=a[l+h]}}else{for(h=0;h<o;h++)s[c+h]=s[d+h];s[c+o]=a[l]}else for(h=0;h<e;h++)s[c+h]=a[l+h]},t.prototype.mergeHigh=function(t,e,i,o){var r=this.compare,s=this.array,a=this.tmp,h=0;for(h=0;h<o;h++)a[h]=s[i+h];var l=t+e-1,d=o-1,c=i+o-1,p=0,v=0;if(s[c--]=s[l--],0!=--e)if(1!==o){for(var g=this.minGallop;;){var y=0,m=0,b=!1;do{if(r(a[d],s[l])<0){if(s[c--]=s[l--],y++,m=0,0==--e){b=!0;break}}else if(s[c--]=a[d--],m++,y=0,1==--o){b=!0;break}}while((y|m)<g);if(b)break;do{if(0!=(y=e-f(a[d],s,t,e,e-1,r))){for(e-=y,v=1+(c-=y),p=1+(l-=y),h=y-1;h>=0;h--)s[v+h]=s[p+h];if(0===e){b=!0;break}}if(s[c--]=a[d--],1==--o){b=!0;break}if(0!=(m=o-u(s[l],a,0,o,o-1,r))){for(o-=m,v=1+(c-=m),p=1+(d-=m),h=0;h<m;h++)s[v+h]=a[p+h];if(o<=1){b=!0;break}}if(s[c--]=s[l--],0==--e){b=!0;break}g--}while(y>=n||m>=n);if(b)break;g<0&&(g=0),g+=2}if(this.minGallop=g,g<1&&(this.minGallop=1),1===o){for(v=1+(c-=e),p=1+(l-=e),h=e-1;h>=0;h--)s[v+h]=s[p+h];s[c]=a[d]}else{if(0===o)throw new Error(\"mergeHigh preconditions were not respected\");for(p=c-(o-1),h=0;h<o;h++)s[p+h]=a[h]}}else{for(v=1+(c-=e),p=1+(l-=e),h=e-1;h>=0;h--)s[v+h]=s[p+h];s[c]=a[d]}else for(p=c-(o-1),h=0;h<o;h++)s[p+h]=a[h]},t}();function v(t,e,n,o){if(!Array.isArray(t))throw new TypeError(\"Can only sort arrays\");e?\"function\"!=typeof e&&(o=n,n=e,e=a):e=a,n||(n=0),o||(o=t.length);var r=o-n;if(!(r<2)){var s=0;if(r<i)c(t,n,o,n+(s=l(t,n,o,e)),e);else{var d=new p(t,e),u=h(r);do{if((s=l(t,n,o,e))<u){var f=r;f>u&&(f=u),c(t,n,n+f,n+s,e),s=f}d.pushRun(n,s),d.mergeRuns(),r-=s,n+=s}while(0!==r);d.forceMergeRuns()}}}}(e)}));i(rv);var sv=rv,av=sv.sort;function hv(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var lv=function(){function t(){Nn(this,t)}return Fn(t,[{key:\"abstract\",value:function(){throw new Error(\"Can't instantiate abstract class!\")}},{key:\"fake_use\",value:function(){}},{key:\"curveType\",value:function(){return this.abstract()}},{key:\"getPosition\",value:function(t){return this.fake_use(t),this.abstract()}},{key:\"setPosition\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;this.fake_use(t,e,i),this.abstract()}},{key:\"getTreeSize\",value:function(t){return this.fake_use(t),this.abstract()}},{key:\"sort\",value:function(t){this.fake_use(t),this.abstract()}},{key:\"fix\",value:function(t,e){this.fake_use(t,e),this.abstract()}},{key:\"shift\",value:function(t,e){this.fake_use(t,e),this.abstract()}}]),t}(),dv=function(t){Ad(i,t);var e=hv(i);function i(t){var n;return Nn(this,i),(n=e.call(this)).layout=t,n}return Fn(i,[{key:\"curveType\",value:function(){return\"horizontal\"}},{key:\"getPosition\",value:function(t){return t.x}},{key:\"setPosition\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;void 0!==i&&this.layout.hierarchical.addToOrdering(t,i),t.x=e}},{key:\"getTreeSize\",value:function(t){var e=this.layout.hierarchical.getTreeSize(this.layout.body.nodes,t);return{min:e.min_x,max:e.max_x}}},{key:\"sort\",value:function(t){av(t,(function(t,e){return t.x-e.x}))}},{key:\"fix\",value:function(t,e){t.y=this.layout.options.hierarchical.levelSeparation*e,t.options.fixed.y=!0}},{key:\"shift\",value:function(t,e){this.layout.body.nodes[t].x+=e}}]),i}(lv),cv=function(t){Ad(i,t);var e=hv(i);function i(t){var n;return Nn(this,i),(n=e.call(this)).layout=t,n}return Fn(i,[{key:\"curveType\",value:function(){return\"vertical\"}},{key:\"getPosition\",value:function(t){return t.y}},{key:\"setPosition\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;void 0!==i&&this.layout.hierarchical.addToOrdering(t,i),t.y=e}},{key:\"getTreeSize\",value:function(t){var e=this.layout.hierarchical.getTreeSize(this.layout.body.nodes,t);return{min:e.min_y,max:e.max_y}}},{key:\"sort\",value:function(t){av(t,(function(t,e){return t.y-e.y}))}},{key:\"fix\",value:function(t,e){t.x=this.layout.options.hierarchical.levelSeparation*e,t.options.fixed.x=!0}},{key:\"shift\",value:function(t,e){this.layout.body.nodes[t].y+=e}}]),i}(lv),uv=Gi.every,fv=Ao(\"every\");gt({target:\"Array\",proto:!0,forced:!fv},{every:function(t){return uv(this,t,arguments.length>1?arguments[1]:void 0)}});var pv=Ht(\"Array\").every,vv=Array.prototype,gv=function(t){var e=t.every;return t===vv||t instanceof Array&&e===vv.every?pv:e};function yv(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return mv(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return mv(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function mv(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}function bv(t,e){var i=new ec;return Wo(t).call(t,(function(t){var e;Wo(e=t.edges).call(e,(function(t){t.connected&&i.add(t)}))})),Wo(i).call(i,(function(t){var i=t.from.id,n=t.to.id;null==e[i]&&(e[i]=0),(null==e[n]||e[i]>=e[n])&&(e[n]=e[i]+1)})),e}function wv(t,e,i,n){var o,r,s=Gr(null),a=Kd(o=wo(Dc(n).call(n))).call(o,(function(t,e){return t+1+e.edges.length}),0),h=i+\"Id\",l=\"to\"===i?1:-1,d=yv(n);try{var c=function(){var o=uo(r.value,2),d=o[0],c=o[1];if(!n.has(d)||!t(c))return\"continue\";s[d]=0;for(var u=[c],f=0,p=void 0,v=function(){var t,o;if(!n.has(d))return\"continue\";var r=s[p.id]+l;if(Wo(t=mr(o=p.edges).call(o,(function(t){return t.connected&&t.to!==t.from&&t[i]!==p&&n.has(t.toId)&&n.has(t.fromId)}))).call(t,(function(t){var n=t[h],o=s[n];(null==o||e(r,o))&&(s[n]=r,u.push(t[i]))})),f>a)return{v:{v:bv(n,s)}};++f};p=u.pop();){var g=v();if(\"continue\"!==g&&\"object\"===go(g))return g.v}};for(d.s();!(r=d.n()).done;){var u=c();if(\"continue\"!==u&&\"object\"===go(u))return u.v}}catch(t){d.e(t)}finally{d.f()}return s}var kv=function(){function t(){Nn(this,t),this.childrenReference={},this.parentReference={},this.trees={},this.distributionOrdering={},this.levels={},this.distributionIndex={},this.isTree=!1,this.treeIndex=-1}return Fn(t,[{key:\"addRelation\",value:function(t,e){void 0===this.childrenReference[t]&&(this.childrenReference[t]=[]),this.childrenReference[t].push(e),void 0===this.parentReference[e]&&(this.parentReference[e]=[]),this.parentReference[e].push(t)}},{key:\"checkIfTree\",value:function(){for(var t in this.parentReference)if(this.parentReference[t].length>1)return void(this.isTree=!1);this.isTree=!0}},{key:\"numTrees\",value:function(){return this.treeIndex+1}},{key:\"setTreeIndex\",value:function(t,e){void 0!==e&&void 0===this.trees[t.id]&&(this.trees[t.id]=e,this.treeIndex=Math.max(e,this.treeIndex))}},{key:\"ensureLevel\",value:function(t){void 0===this.levels[t]&&(this.levels[t]=0)}},{key:\"getMaxLevel\",value:function(t){var e=this,i={};return function t(n){if(void 0!==i[n])return i[n];var o=e.levels[n];if(e.childrenReference[n]){var r=e.childrenReference[n];if(r.length>0)for(var s=0;s<r.length;s++)o=Math.max(o,t(r[s]))}return i[n]=o,o}(t)}},{key:\"levelDownstream\",value:function(t,e){void 0===this.levels[e.id]&&(void 0===this.levels[t.id]&&(this.levels[t.id]=0),this.levels[e.id]=this.levels[t.id]+1)}},{key:\"setMinLevelToZero\",value:function(t){var e=1e9;for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&void 0!==this.levels[i]&&(e=Math.min(this.levels[i],e));for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&void 0!==this.levels[n]&&(this.levels[n]-=e)}},{key:\"getTreeSize\",value:function(t,e){var i=1e9,n=-1e9,o=1e9,r=-1e9;for(var s in this.trees)if(Object.prototype.hasOwnProperty.call(this.trees,s)&&this.trees[s]===e){var a=t[s];i=Math.min(a.x,i),n=Math.max(a.x,n),o=Math.min(a.y,o),r=Math.max(a.y,r)}return{min_x:i,max_x:n,min_y:o,max_y:r}}},{key:\"hasSameParent\",value:function(t,e){var i=this.parentReference[t.id],n=this.parentReference[e.id];if(void 0===i||void 0===n)return!1;for(var o=0;o<i.length;o++)for(var r=0;r<n.length;r++)if(i[o]==n[r])return!0;return!1}},{key:\"inSameSubNetwork\",value:function(t,e){return this.trees[t.id]===this.trees[e.id]}},{key:\"getLevels\",value:function(){return zo(this.distributionOrdering)}},{key:\"addToOrdering\",value:function(t,e){void 0===this.distributionOrdering[e]&&(this.distributionOrdering[e]=[]);var i=!1,n=this.distributionOrdering[e];for(var o in n)if(n[o]===t){i=!0;break}i||(this.distributionOrdering[e].push(t),this.distributionIndex[t.id]=this.distributionOrdering[e].length-1)}}]),t}(),_v=function(){function t(e){Nn(this,t),this.body=e,this._resetRNG(Math.random()+\":\"+No()),this.setPhysics=!1,this.options={},this.optionsBackup={physics:{}},this.defaultOptions={randomSeed:void 0,improvedLayout:!0,clusterThreshold:150,hierarchical:{enabled:!1,levelSeparation:150,nodeSpacing:100,treeSpacing:200,blockShifting:!0,edgeMinimization:!0,parentCentralization:!0,direction:\"UD\",sortMethod:\"hubsize\"}},At(this.options,this.defaultOptions),this.bindEventListeners()}return Fn(t,[{key:\"bindEventListeners\",value:function(){var t=this;this.body.emitter.on(\"_dataChanged\",(function(){t.setupHierarchicalLayout()})),this.body.emitter.on(\"_dataLoaded\",(function(){t.layoutNetwork()})),this.body.emitter.on(\"_resetHierarchicalLayout\",(function(){t.setupHierarchicalLayout()})),this.body.emitter.on(\"_adjustEdgesForHierarchicalLayout\",(function(){if(!0===t.options.hierarchical.enabled){var e=t.direction.curveType();t.body.emitter.emit(\"_forceDisableDynamicCurves\",e,!1)}}))}},{key:\"setOptions\",value:function(t,e){if(void 0!==t){var i=this.options.hierarchical,n=i.enabled;if(Eh([\"randomSeed\",\"improvedLayout\",\"clusterThreshold\"],this.options,t),$h(this.options,t,\"hierarchical\"),void 0!==t.randomSeed&&this._resetRNG(t.randomSeed),!0===i.enabled)return!0===n&&this.body.emitter.emit(\"refresh\",!0),\"RL\"===i.direction||\"DU\"===i.direction?i.levelSeparation>0&&(i.levelSeparation*=-1):i.levelSeparation<0&&(i.levelSeparation*=-1),this.setDirectionStrategy(),this.body.emitter.emit(\"_resetHierarchicalLayout\"),this.adaptAllOptionsForHierarchicalLayout(e);if(!0===n)return this.body.emitter.emit(\"refresh\"),Ch(e,this.optionsBackup)}return e}},{key:\"_resetRNG\",value:function(t){this.initialRandomSeed=t,this._rng=ah(this.initialRandomSeed)}},{key:\"adaptAllOptionsForHierarchicalLayout\",value:function(t){if(!0===this.options.hierarchical.enabled){var e=this.optionsBackup.physics;void 0===t.physics||!0===t.physics?(t.physics={enabled:void 0===e.enabled||e.enabled,solver:\"hierarchicalRepulsion\"},e.enabled=void 0===e.enabled||e.enabled,e.solver=e.solver||\"barnesHut\"):\"object\"===go(t.physics)?(e.enabled=void 0===t.physics.enabled||t.physics.enabled,e.solver=t.physics.solver||\"barnesHut\",t.physics.solver=\"hierarchicalRepulsion\"):!1!==t.physics&&(e.solver=\"barnesHut\",t.physics={solver:\"hierarchicalRepulsion\"});var i=this.direction.curveType();if(void 0===t.edges)this.optionsBackup.edges={smooth:{enabled:!0,type:\"dynamic\"}},t.edges={smooth:!1};else if(void 0===t.edges.smooth)this.optionsBackup.edges={smooth:{enabled:!0,type:\"dynamic\"}},t.edges.smooth=!1;else if(\"boolean\"==typeof t.edges.smooth)this.optionsBackup.edges={smooth:t.edges.smooth},t.edges.smooth={enabled:t.edges.smooth,type:i};else{var n=t.edges.smooth;void 0!==n.type&&\"dynamic\"!==n.type&&(i=n.type),this.optionsBackup.edges={smooth:{enabled:void 0===n.enabled||n.enabled,type:void 0===n.type?\"dynamic\":n.type,roundness:void 0===n.roundness?.5:n.roundness,forceDirection:void 0!==n.forceDirection&&n.forceDirection}},t.edges.smooth={enabled:void 0===n.enabled||n.enabled,type:i,roundness:void 0===n.roundness?.5:n.roundness,forceDirection:void 0!==n.forceDirection&&n.forceDirection}}this.body.emitter.emit(\"_forceDisableDynamicCurves\",i)}return t}},{key:\"positionInitially\",value:function(t){if(!0!==this.options.hierarchical.enabled){this._resetRNG(this.initialRandomSeed);for(var e=t.length+50,i=0;i<t.length;i++){var n=t[i],o=2*Math.PI*this._rng();void 0===n.x&&(n.x=e*Math.cos(o)),void 0===n.y&&(n.y=e*Math.sin(o))}}}},{key:\"layoutNetwork\",value:function(){if(!0!==this.options.hierarchical.enabled&&!0===this.options.improvedLayout){for(var t=this.body.nodeIndices,e=0,i=0;i<t.length;i++){!0===this.body.nodes[t[i]].predefinedPosition&&(e+=1)}if(e<.5*t.length){var n=0,o=this.options.clusterThreshold,r={clusterNodeProperties:{shape:\"ellipse\",label:\"\",group:\"\",font:{multi:!1}},clusterEdgeProperties:{label:\"\",font:{multi:!1},smooth:{enabled:!1}}};if(t.length>o){for(var s=t.length;t.length>o&&n<=10;){n+=1;var a=t.length;if(n%3==0?this.body.modules.clustering.clusterBridges(r):this.body.modules.clustering.clusterOutliers(r),a==t.length&&n%3!=0)return this._declusterAll(),this.body.emitter.emit(\"_layoutFailed\"),void console.info(\"This network could not be positioned by this version of the improved layout algorithm. Please disable improvedLayout for better performance.\")}this.body.modules.kamadaKawai.setOptions({springLength:Math.max(150,2*s)})}n>10&&console.info(\"The clustering didn't succeed within the amount of interations allowed, progressing with partial result.\"),this.body.modules.kamadaKawai.solve(t,this.body.edgeIndices,!0),this._shiftToCenter();for(var h=0;h<t.length;h++){var l=this.body.nodes[t[h]];!1===l.predefinedPosition&&(l.x+=70*(.5-this._rng()),l.y+=70*(.5-this._rng()))}this._declusterAll(),this.body.emitter.emit(\"_repositionBezierNodes\")}}}},{key:\"_shiftToCenter\",value:function(){for(var t=pp.getRangeCore(this.body.nodes,this.body.nodeIndices),e=pp.findCenter(t),i=0;i<this.body.nodeIndices.length;i++){var n=this.body.nodes[this.body.nodeIndices[i]];n.x-=e.x,n.y-=e.y}}},{key:\"_declusterAll\",value:function(){for(var t=!0;!0===t;){t=!1;for(var e=0;e<this.body.nodeIndices.length;e++)!0===this.body.nodes[this.body.nodeIndices[e]].isCluster&&(t=!0,this.body.modules.clustering.openCluster(this.body.nodeIndices[e],{},!1));!0===t&&this.body.emitter.emit(\"_dataChanged\")}}},{key:\"getSeed\",value:function(){return this.initialRandomSeed}},{key:\"setupHierarchicalLayout\",value:function(){if(!0===this.options.hierarchical.enabled&&this.body.nodeIndices.length>0){var t,e,i=!1,n=!1;for(e in this.lastNodeOnLevel={},this.hierarchical=new kv,this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,e)&&(void 0!==(t=this.body.nodes[e]).options.level?(i=!0,this.hierarchical.levels[e]=t.options.level):n=!0);if(!0===n&&!0===i)throw new Error(\"To use the hierarchical layout, nodes require either no predefined levels or levels have to be defined for all nodes.\");if(!0===n){var o=this.options.hierarchical.sortMethod;\"hubsize\"===o?this._determineLevelsByHubsize():\"directed\"===o?this._determineLevelsDirected():\"custom\"===o&&this._determineLevelsCustomCallback()}for(var r in this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,r)&&this.hierarchical.ensureLevel(r);var s=this._getDistribution();this._generateMap(),this._placeNodesByHierarchy(s),this._condenseHierarchy(),this._shiftToCenter()}}},{key:\"_condenseHierarchy\",value:function(){var t=this,e=!1,i={},n=function(e,i){var n=t.hierarchical.trees;for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&n[o]===e&&t.direction.shift(o,i)},o=function(){for(var e=[],i=0;i<t.hierarchical.numTrees();i++)e.push(t.direction.getTreeSize(i));return e},r=function e(i,n){if(!n[i.id]&&(n[i.id]=!0,t.hierarchical.childrenReference[i.id])){var o=t.hierarchical.childrenReference[i.id];if(o.length>0)for(var r=0;r<o.length;r++)e(t.body.nodes[o[r]],n)}},s=function(e){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1e9,n=1e9,o=1e9,r=1e9,s=-1e9;for(var a in e)if(Object.prototype.hasOwnProperty.call(e,a)){var h=t.body.nodes[a],l=t.hierarchical.levels[h.id],d=t.direction.getPosition(h),c=t._getSpaceAroundNode(h,e),u=uo(c,2),f=u[0],p=u[1];n=Math.min(f,n),o=Math.min(p,o),l<=i&&(r=Math.min(d,r),s=Math.max(d,s))}return[r,s,n,o]},a=function(e,i){var n=t.hierarchical.getMaxLevel(e.id),o=t.hierarchical.getMaxLevel(i.id);return Math.min(n,o)},h=function(e,i,n){for(var o=t.hierarchical,r=0;r<i.length;r++){var s=i[r],a=o.distributionOrdering[s];if(a.length>1)for(var h=0;h<a.length-1;h++){var l=a[h],d=a[h+1];o.hasSameParent(l,d)&&o.inSameSubNetwork(l,d)&&e(l,d,n)}}},l=function(i,n){var o=arguments.length>2&&void 0!==arguments[2]&&arguments[2],h=t.direction.getPosition(i),l=t.direction.getPosition(n),d=Math.abs(l-h),c=t.options.hierarchical.nodeSpacing;if(d>c){var u={},f={};r(i,u),r(n,f);var p=a(i,n),v=s(u,p),g=s(f,p),y=v[1],m=g[0],b=g[2],w=Math.abs(y-m);if(w>c){var k=y-m+c;k<-b+c&&(k=-b+c),k<0&&(t._shiftBlock(n.id,k),e=!0,!0===o&&t._centerParent(n))}}},d=function(n,o){for(var a=o.id,h=o.edges,l=t.hierarchical.levels[o.id],d=t.options.hierarchical.levelSeparation*t.options.hierarchical.levelSeparation,c={},u=[],f=0;f<h.length;f++){var p=h[f];if(p.toId!=p.fromId){var v=p.toId==a?p.from:p.to;c[h[f].id]=v,t.hierarchical.levels[v.id]<l&&u.push(p)}}var g=function(e,i){for(var n=0,o=0;o<i.length;o++)if(void 0!==c[i[o].id]){var r=t.direction.getPosition(c[i[o].id])-e;n+=r/Math.sqrt(r*r+d)}return n},y=function(e,i){for(var n=0,o=0;o<i.length;o++)if(void 0!==c[i[o].id]){var r=t.direction.getPosition(c[i[o].id])-e;n-=d*Math.pow(r*r+d,-1.5)}return n},m=function(e,i){for(var n=t.direction.getPosition(o),r={},s=0;s<e;s++){var a=g(n,i),h=y(n,i);if(void 0!==r[n-=Math.max(-40,Math.min(40,Math.round(a/h)))])break;r[n]=s}return n},b=m(n,u);!function(n){var a=t.direction.getPosition(o);if(void 0===i[o.id]){var h={};r(o,h),i[o.id]=h}var l=s(i[o.id]),d=l[2],c=l[3],u=n-a,f=0;u>0?f=Math.min(u,c-t.options.hierarchical.nodeSpacing):u<0&&(f=-Math.min(-u,d-t.options.hierarchical.nodeSpacing)),0!=f&&(t._shiftBlock(o.id,f),e=!0)}(b),function(i){var n=t.direction.getPosition(o),r=t._getSpaceAroundNode(o),s=uo(r,2),a=s[0],h=s[1],l=i-n,d=n;l>0?d=Math.min(n+(h-t.options.hierarchical.nodeSpacing),i):l<0&&(d=Math.max(n-(a-t.options.hierarchical.nodeSpacing),i)),d!==n&&(t.direction.setPosition(o,d),e=!0)}(b=m(n,h))};!0===this.options.hierarchical.blockShifting&&(function(i){var n=t.hierarchical.getLevels();n=Xo(n).call(n);for(var o=0;o<i&&(e=!1,h(l,n,!0),!0===e);o++);}(5),function(){for(var e in t.body.nodes)Object.prototype.hasOwnProperty.call(t.body.nodes,e)&&t._centerParent(t.body.nodes[e])}()),!0===this.options.hierarchical.edgeMinimization&&function(i){var n=t.hierarchical.getLevels();n=Xo(n).call(n);for(var o=0;o<i;o++){e=!1;for(var r=0;r<n.length;r++)for(var s=n[r],a=t.hierarchical.distributionOrdering[s],h=0;h<a.length;h++)d(1e3,a[h]);if(!0!==e)break}}(20),!0===this.options.hierarchical.parentCentralization&&function(){var e=t.hierarchical.getLevels();e=Xo(e).call(e);for(var i=0;i<e.length;i++)for(var n=e[i],o=t.hierarchical.distributionOrdering[n],r=0;r<o.length;r++)t._centerParent(o[r])}(),function(){for(var e=o(),i=0,r=0;r<e.length-1;r++){i+=e[r].max-e[r+1].min+t.options.hierarchical.treeSpacing,n(r+1,i)}}()}},{key:\"_getSpaceAroundNode\",value:function(t,e){var i=!0;void 0===e&&(i=!1);var n=this.hierarchical.levels[t.id];if(void 0!==n){var o=this.hierarchical.distributionIndex[t.id],r=this.direction.getPosition(t),s=this.hierarchical.distributionOrdering[n],a=1e9,h=1e9;if(0!==o){var l=s[o-1];if(!0===i&&void 0===e[l.id]||!1===i)a=r-this.direction.getPosition(l)}if(o!=s.length-1){var d=s[o+1];if(!0===i&&void 0===e[d.id]||!1===i){var c=this.direction.getPosition(d);h=Math.min(h,c-r)}}return[a,h]}return[0,0]}},{key:\"_centerParent\",value:function(t){if(this.hierarchical.parentReference[t.id])for(var e=this.hierarchical.parentReference[t.id],i=0;i<e.length;i++){var n=e[i],o=this.body.nodes[n],r=this.hierarchical.childrenReference[n];if(void 0!==r){var s=this._getCenterPosition(r),a=this.direction.getPosition(o),h=this._getSpaceAroundNode(o),l=uo(h,2),d=l[0],c=l[1],u=a-s;(u<0&&Math.abs(u)<c-this.options.hierarchical.nodeSpacing||u>0&&Math.abs(u)<d-this.options.hierarchical.nodeSpacing)&&this.direction.setPosition(o,s)}}}},{key:\"_placeNodesByHierarchy\",value:function(t){for(var e in this.positionedNodes={},t)if(Object.prototype.hasOwnProperty.call(t,e)){var i,n=zo(t[e]);n=this._indexArrayToNodes(n),xc(i=this.direction).call(i,n);for(var o=0,r=0;r<n.length;r++){var s=n[r];if(void 0===this.positionedNodes[s.id]){var a=this.options.hierarchical.nodeSpacing,h=a*o;o>0&&(h=this.direction.getPosition(n[r-1])+a),this.direction.setPosition(s,h,e),this._validatePositionAndContinue(s,e,h),o++}}}}},{key:\"_placeBranchNodes\",value:function(t,e){var i,n=this.hierarchical.childrenReference[t];if(void 0!==n){for(var o=[],r=0;r<n.length;r++)o.push(this.body.nodes[n[r]]);xc(i=this.direction).call(i,o);for(var s=0;s<o.length;s++){var a=o[s],h=this.hierarchical.levels[a.id];if(!(h>e&&void 0===this.positionedNodes[a.id]))return;var l=this.options.hierarchical.nodeSpacing,d=void 0;d=0===s?this.direction.getPosition(this.body.nodes[t]):this.direction.getPosition(o[s-1])+l,this.direction.setPosition(a,d,h),this._validatePositionAndContinue(a,h,d)}var c=this._getCenterPosition(o);this.direction.setPosition(this.body.nodes[t],c,e)}}},{key:\"_validatePositionAndContinue\",value:function(t,e,i){if(this.hierarchical.isTree){if(void 0!==this.lastNodeOnLevel[e]){var n=this.direction.getPosition(this.body.nodes[this.lastNodeOnLevel[e]]);if(i-n<this.options.hierarchical.nodeSpacing){var o=n+this.options.hierarchical.nodeSpacing-i,r=this._findCommonParent(this.lastNodeOnLevel[e],t.id);this._shiftBlock(r.withChild,o)}}this.lastNodeOnLevel[e]=t.id,this.positionedNodes[t.id]=!0,this._placeBranchNodes(t.id,e)}}},{key:\"_indexArrayToNodes\",value:function(t){for(var e=[],i=0;i<t.length;i++)e.push(this.body.nodes[t[i]]);return e}},{key:\"_getDistribution\",value:function(){var t,e,i={};for(t in this.body.nodes)if(Object.prototype.hasOwnProperty.call(this.body.nodes,t)){e=this.body.nodes[t];var n=void 0===this.hierarchical.levels[t]?0:this.hierarchical.levels[t];this.direction.fix(e,n),void 0===i[n]&&(i[n]={}),i[n][t]=e}return i}},{key:\"_getActiveEdges\",value:function(t){var e=this,i=[];return Dh(t.edges,(function(t){var n;-1!==Hr(n=e.body.edgeIndices).call(n,t.id)&&i.push(t)})),i}},{key:\"_getHubSizes\",value:function(){var t=this,e={};Dh(this.body.nodeIndices,(function(i){var n=t.body.nodes[i],o=t._getActiveEdges(n).length;e[o]=!0}));var i=[];return Dh(e,(function(t){i.push(Number(t))})),xc(sv).call(sv,i,(function(t,e){return e-t})),i}},{key:\"_determineLevelsByHubsize\",value:function(){for(var t=this,e=function(e,i){t.hierarchical.levelDownstream(e,i)},i=this._getHubSizes(),n=function(n){var o=i[n];if(0===o)return\"break\";Dh(t.body.nodeIndices,(function(i){var n=t.body.nodes[i];o===t._getActiveEdges(n).length&&t._crawlNetwork(e,i)}))},o=0;o<i.length;++o){if(\"break\"===n(o))break}}},{key:\"_determineLevelsCustomCallback\",value:function(){var t=this;this._crawlNetwork((function(e,i,n){var o=t.hierarchical.levels[e.id];void 0===o&&(o=t.hierarchical.levels[e.id]=1e5);var r=(pp.cloneOptions(e,\"node\"),pp.cloneOptions(i,\"node\"),void pp.cloneOptions(n,\"edge\"));t.hierarchical.levels[i.id]=o+r})),this.hierarchical.setMinLevelToZero(this.body.nodes)}},{key:\"_determineLevelsDirected\",value:function(){var t,e=this,i=Kd(t=this.body.nodeIndices).call(t,(function(t,i){return t.set(i,e.body.nodes[i]),t}),new vd);\"roots\"===this.options.hierarchical.shakeTowards?this.hierarchical.levels=function(t){return wv((function(e){var i,n;return gv(i=mr(n=e.edges).call(n,(function(e){return t.has(e.toId)}))).call(i,(function(t){return t.from===e}))}),(function(t,e){return e<t}),\"to\",t)}(i):this.hierarchical.levels=function(t){return wv((function(e){var i,n;return gv(i=mr(n=e.edges).call(n,(function(e){return t.has(e.toId)}))).call(i,(function(t){return t.to===e}))}),(function(t,e){return e>t}),\"from\",t)}(i),this.hierarchical.setMinLevelToZero(this.body.nodes)}},{key:\"_generateMap\",value:function(){var t=this;this._crawlNetwork((function(e,i){t.hierarchical.levels[i.id]>t.hierarchical.levels[e.id]&&t.hierarchical.addRelation(e.id,i.id)})),this.hierarchical.checkIfTree()}},{key:\"_crawlNetwork\",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:function(){},i=arguments.length>1?arguments[1]:void 0,n={},o=function i(o,r){if(void 0===n[o.id]){var s;t.hierarchical.setTreeIndex(o,r),n[o.id]=!0;for(var a=t._getActiveEdges(o),h=0;h<a.length;h++){var l=a[h];!0===l.connected&&(s=l.toId==o.id?l.from:l.to,o.id!=s.id&&(e(o,s,l),i(s,r)))}}};if(void 0===i)for(var r=0,s=0;s<this.body.nodeIndices.length;s++){var a=this.body.nodeIndices[s];if(void 0===n[a]){var h=this.body.nodes[a];o(h,r),r+=1}}else{var l=this.body.nodes[i];if(void 0===l)return void console.error(\"Node not found:\",i);o(l)}}},{key:\"_shiftBlock\",value:function(t,e){var i=this,n={};!function t(o){if(!n[o]){n[o]=!0,i.direction.shift(o,e);var r=i.hierarchical.childrenReference[o];if(void 0!==r)for(var s=0;s<r.length;s++)t(r[s])}}(t)}},{key:\"_findCommonParent\",value:function(t,e){var i=this,n={};return function t(e,n){var o=i.hierarchical.parentReference[n];if(void 0!==o)for(var r=0;r<o.length;r++){var s=o[r];e[s]=!0,t(e,s)}}(n,t),function t(e,n){var o=i.hierarchical.parentReference[n];if(void 0!==o)for(var r=0;r<o.length;r++){var s=o[r];if(void 0!==e[s])return{foundParent:s,withChild:n};var a=t(e,s);if(null!==a.foundParent)return a}return{foundParent:null,withChild:n}}(n,e)}},{key:\"setDirectionStrategy\",value:function(){var t=\"UD\"===this.options.hierarchical.direction||\"DU\"===this.options.hierarchical.direction;this.direction=t?new dv(this):new cv(this)}},{key:\"_getCenterPosition\",value:function(t){for(var e=1e9,i=-1e9,n=0;n<t.length;n++){var o=void 0;if(void 0!==t[n].id)o=t[n];else{var r=t[n];o=this.body.nodes[r]}var s=this.direction.getPosition(o);e=Math.min(e,s),i=Math.max(i,s)}return.5*(e+i)}}]),t}();function xv(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return Ev(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Ev(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function Ev(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}var Ov=function(){function t(e,i,n,o){var r,s,a=this;Nn(this,t),this.body=e,this.canvas=i,this.selectionHandler=n,this.interactionHandler=o,this.editMode=!1,this.manipulationDiv=void 0,this.editModeDiv=void 0,this.closeDiv=void 0,this._domEventListenerCleanupQueue=[],this.temporaryUIFunctions={},this.temporaryEventFunctions=[],this.touchTime=0,this.temporaryIds={nodes:[],edges:[]},this.guiEnabled=!1,this.inMode=!1,this.selectedControlNode=void 0,this.options={},this.defaultOptions={enabled:!1,initiallyActive:!1,addNode:!0,addEdge:!0,editNode:void 0,editEdge:!0,deleteNode:!0,deleteEdge:!0,controlNodeStyle:{shape:\"dot\",size:6,color:{background:\"#ff0000\",border:\"#3c3c3c\",highlight:{background:\"#07f968\",border:\"#3c3c3c\"}},borderWidth:2,borderWidthSelected:2}},At(this.options,this.defaultOptions),this.body.emitter.on(\"destroy\",(function(){a._clean()})),this.body.emitter.on(\"_dataChanged\",Vt(r=this._restore).call(r,this)),this.body.emitter.on(\"_resetData\",Vt(s=this._restore).call(s,this))}return Fn(t,[{key:\"_restore\",value:function(){!1!==this.inMode&&(!0===this.options.initiallyActive?this.enableEditMode():this.disableEditMode())}},{key:\"setOptions\",value:function(t,e,i){void 0!==e&&(void 0!==e.locale?this.options.locale=e.locale:this.options.locale=i.locale,void 0!==e.locales?this.options.locales=e.locales:this.options.locales=i.locales),void 0!==t&&(\"boolean\"==typeof t?this.options.enabled=t:(this.options.enabled=!0,Ch(this.options,t)),!0===this.options.initiallyActive&&(this.editMode=!0),this._setup())}},{key:\"toggleEditMode\",value:function(){!0===this.editMode?this.disableEditMode():this.enableEditMode()}},{key:\"enableEditMode\",value:function(){this.editMode=!0,this._clean(),!0===this.guiEnabled&&(this.manipulationDiv.style.display=\"block\",this.closeDiv.style.display=\"block\",this.editModeDiv.style.display=\"none\",this.showManipulatorToolbar())}},{key:\"disableEditMode\",value:function(){this.editMode=!1,this._clean(),!0===this.guiEnabled&&(this.manipulationDiv.style.display=\"none\",this.closeDiv.style.display=\"none\",this.editModeDiv.style.display=\"block\",this._createEditButton())}},{key:\"showManipulatorToolbar\",value:function(){if(this._clean(),this.manipulationDOM={},!0===this.guiEnabled){var t,e;this.editMode=!0,this.manipulationDiv.style.display=\"block\",this.closeDiv.style.display=\"block\";var i=this.selectionHandler.getSelectedNodeCount(),n=this.selectionHandler.getSelectedEdgeCount(),o=i+n,r=this.options.locales[this.options.locale],s=!1;!1!==this.options.addNode&&(this._createAddNodeButton(r),s=!0),!1!==this.options.addEdge&&(!0===s?this._createSeperator(1):s=!0,this._createAddEdgeButton(r)),1===i&&\"function\"==typeof this.options.editNode?(!0===s?this._createSeperator(2):s=!0,this._createEditNodeButton(r)):1===n&&0===i&&!1!==this.options.editEdge&&(!0===s?this._createSeperator(3):s=!0,this._createEditEdgeButton(r)),0!==o&&(i>0&&!1!==this.options.deleteNode||0===i&&!1!==this.options.deleteEdge)&&(!0===s&&this._createSeperator(4),this._createDeleteButton(r)),this._bindElementEvents(this.closeDiv,Vt(t=this.toggleEditMode).call(t,this)),this._temporaryBindEvent(\"select\",Vt(e=this.showManipulatorToolbar).call(e,this))}this.body.emitter.emit(\"_redraw\")}},{key:\"addNodeMode\",value:function(){var t;if(!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode=\"addNode\",!0===this.guiEnabled){var e,i=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(i),this._createSeperator(),this._createDescription(i.addDescription||this.options.locales.en.addDescription),this._bindElementEvents(this.closeDiv,Vt(e=this.toggleEditMode).call(e,this))}this._temporaryBindEvent(\"click\",Vt(t=this._performAddNode).call(t,this))}},{key:\"editNode\",value:function(){var t=this;!0!==this.editMode&&this.enableEditMode(),this._clean();var e=this.selectionHandler.getSelectedNodes()[0];if(void 0!==e){if(this.inMode=\"editNode\",\"function\"!=typeof this.options.editNode)throw new Error(\"No function has been configured to handle the editing of nodes.\");if(!0!==e.isCluster){var i=Ch({},e.options,!1);if(i.x=e.x,i.y=e.y,2!==this.options.editNode.length)throw new Error(\"The function for edit does not support two arguments (data, callback)\");this.options.editNode(i,(function(e){null!=e&&\"editNode\"===t.inMode&&t.body.data.nodes.getDataSet().update(e),t.showManipulatorToolbar()}))}else alert(this.options.locales[this.options.locale].editClusterError||this.options.locales.en.editClusterError)}else this.showManipulatorToolbar()}},{key:\"addEdgeMode\",value:function(){var t,e,i,n,o;if(!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode=\"addEdge\",!0===this.guiEnabled){var r,s=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(s),this._createSeperator(),this._createDescription(s.edgeDescription||this.options.locales.en.edgeDescription),this._bindElementEvents(this.closeDiv,Vt(r=this.toggleEditMode).call(r,this))}this._temporaryBindUI(\"onTouch\",Vt(t=this._handleConnect).call(t,this)),this._temporaryBindUI(\"onDragEnd\",Vt(e=this._finishConnect).call(e,this)),this._temporaryBindUI(\"onDrag\",Vt(i=this._dragControlNode).call(i,this)),this._temporaryBindUI(\"onRelease\",Vt(n=this._finishConnect).call(n,this)),this._temporaryBindUI(\"onDragStart\",Vt(o=this._dragStartEdge).call(o,this)),this._temporaryBindUI(\"onHold\",(function(){}))}},{key:\"editEdgeMode\",value:function(){if(!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode=\"editEdge\",\"object\"!==go(this.options.editEdge)||\"function\"!=typeof this.options.editEdge.editWithoutDrag||(this.edgeBeingEditedId=this.selectionHandler.getSelectedEdgeIds()[0],void 0===this.edgeBeingEditedId)){if(!0===this.guiEnabled){var t,e=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(e),this._createSeperator(),this._createDescription(e.editEdgeDescription||this.options.locales.en.editEdgeDescription),this._bindElementEvents(this.closeDiv,Vt(t=this.toggleEditMode).call(t,this))}if(this.edgeBeingEditedId=this.selectionHandler.getSelectedEdgeIds()[0],void 0!==this.edgeBeingEditedId){var i,n,o,r,s=this.body.edges[this.edgeBeingEditedId],a=this._getNewTargetNode(s.from.x,s.from.y),h=this._getNewTargetNode(s.to.x,s.to.y);this.temporaryIds.nodes.push(a.id),this.temporaryIds.nodes.push(h.id),this.body.nodes[a.id]=a,this.body.nodeIndices.push(a.id),this.body.nodes[h.id]=h,this.body.nodeIndices.push(h.id),this._temporaryBindUI(\"onTouch\",Vt(i=this._controlNodeTouch).call(i,this)),this._temporaryBindUI(\"onTap\",(function(){})),this._temporaryBindUI(\"onHold\",(function(){})),this._temporaryBindUI(\"onDragStart\",Vt(n=this._controlNodeDragStart).call(n,this)),this._temporaryBindUI(\"onDrag\",Vt(o=this._controlNodeDrag).call(o,this)),this._temporaryBindUI(\"onDragEnd\",Vt(r=this._controlNodeDragEnd).call(r,this)),this._temporaryBindUI(\"onMouseMove\",(function(){})),this._temporaryBindEvent(\"beforeDrawing\",(function(t){var e=s.edgeType.findBorderPositions(t);!1===a.selected&&(a.x=e.from.x,a.y=e.from.y),!1===h.selected&&(h.x=e.to.x,h.y=e.to.y)})),this.body.emitter.emit(\"_redraw\")}else this.showManipulatorToolbar()}else{var l=this.body.edges[this.edgeBeingEditedId];this._performEditEdge(l.from.id,l.to.id)}}},{key:\"deleteSelected\",value:function(){var t=this;!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode=\"delete\";var e=this.selectionHandler.getSelectedNodeIds(),i=this.selectionHandler.getSelectedEdgeIds(),n=void 0;if(e.length>0){for(var o=0;o<e.length;o++)if(!0===this.body.nodes[e[o]].isCluster)return void alert(this.options.locales[this.options.locale].deleteClusterError||this.options.locales.en.deleteClusterError);\"function\"==typeof this.options.deleteNode&&(n=this.options.deleteNode)}else i.length>0&&\"function\"==typeof this.options.deleteEdge&&(n=this.options.deleteEdge);if(\"function\"==typeof n){var r={nodes:e,edges:i};if(2!==n.length)throw new Error(\"The function for delete does not support two arguments (data, callback)\");n(r,(function(e){null!=e&&\"delete\"===t.inMode?(t.body.data.edges.getDataSet().remove(e.edges),t.body.data.nodes.getDataSet().remove(e.nodes),t.body.emitter.emit(\"startSimulation\"),t.showManipulatorToolbar()):(t.body.emitter.emit(\"startSimulation\"),t.showManipulatorToolbar())}))}else this.body.data.edges.getDataSet().remove(i),this.body.data.nodes.getDataSet().remove(e),this.body.emitter.emit(\"startSimulation\"),this.showManipulatorToolbar()}},{key:\"_setup\",value:function(){!0===this.options.enabled?(this.guiEnabled=!0,this._createWrappers(),!1===this.editMode?this._createEditButton():this.showManipulatorToolbar()):(this._removeManipulationDOM(),this.guiEnabled=!1)}},{key:\"_createWrappers\",value:function(){var t,e;(void 0===this.manipulationDiv&&(this.manipulationDiv=document.createElement(\"div\"),this.manipulationDiv.className=\"vis-manipulation\",!0===this.editMode?this.manipulationDiv.style.display=\"block\":this.manipulationDiv.style.display=\"none\",this.canvas.frame.appendChild(this.manipulationDiv)),void 0===this.editModeDiv&&(this.editModeDiv=document.createElement(\"div\"),this.editModeDiv.className=\"vis-edit-mode\",!0===this.editMode?this.editModeDiv.style.display=\"none\":this.editModeDiv.style.display=\"block\",this.canvas.frame.appendChild(this.editModeDiv)),void 0===this.closeDiv)&&(this.closeDiv=document.createElement(\"button\"),this.closeDiv.className=\"vis-close\",this.closeDiv.setAttribute(\"aria-label\",null!==(t=null===(e=this.options.locales[this.options.locale])||void 0===e?void 0:e.close)&&void 0!==t?t:this.options.locales.en.close),this.closeDiv.style.display=this.manipulationDiv.style.display,this.canvas.frame.appendChild(this.closeDiv))}},{key:\"_getNewTargetNode\",value:function(t,e){var i=Ch({},this.options.controlNodeStyle);i.id=\"targetNode\"+Wc(),i.hidden=!1,i.physics=!1,i.x=t,i.y=e;var n=this.body.functions.createNode(i);return n.shape.boundingBox={left:t,right:t,top:e,bottom:e},n}},{key:\"_createEditButton\",value:function(){var t;this._clean(),this.manipulationDOM={},mh(this.editModeDiv);var e=this.options.locales[this.options.locale],i=this._createButton(\"editMode\",\"vis-edit vis-edit-mode\",e.edit||this.options.locales.en.edit);this.editModeDiv.appendChild(i),this._bindElementEvents(i,Vt(t=this.toggleEditMode).call(t,this))}},{key:\"_clean\",value:function(){this.inMode=!1,!0===this.guiEnabled&&(mh(this.editModeDiv),mh(this.manipulationDiv),this._cleanupDOMEventListeners()),this._cleanupTemporaryNodesAndEdges(),this._unbindTemporaryUIs(),this._unbindTemporaryEvents(),this.body.emitter.emit(\"restorePhysics\")}},{key:\"_cleanupDOMEventListeners\",value:function(){var t,e,i=xv(er(t=this._domEventListenerCleanupQueue).call(t,0));try{for(i.s();!(e=i.n()).done;){(0,e.value)()}}catch(t){i.e(t)}finally{i.f()}}},{key:\"_removeManipulationDOM\",value:function(){this._clean(),mh(this.manipulationDiv),mh(this.editModeDiv),mh(this.closeDiv),this.manipulationDiv&&this.canvas.frame.removeChild(this.manipulationDiv),this.editModeDiv&&this.canvas.frame.removeChild(this.editModeDiv),this.closeDiv&&this.canvas.frame.removeChild(this.closeDiv),this.manipulationDiv=void 0,this.editModeDiv=void 0,this.closeDiv=void 0}},{key:\"_createSeperator\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;this.manipulationDOM[\"seperatorLineDiv\"+t]=document.createElement(\"div\"),this.manipulationDOM[\"seperatorLineDiv\"+t].className=\"vis-separator-line\",this.manipulationDiv.appendChild(this.manipulationDOM[\"seperatorLineDiv\"+t])}},{key:\"_createAddNodeButton\",value:function(t){var e,i=this._createButton(\"addNode\",\"vis-add\",t.addNode||this.options.locales.en.addNode);this.manipulationDiv.appendChild(i),this._bindElementEvents(i,Vt(e=this.addNodeMode).call(e,this))}},{key:\"_createAddEdgeButton\",value:function(t){var e,i=this._createButton(\"addEdge\",\"vis-connect\",t.addEdge||this.options.locales.en.addEdge);this.manipulationDiv.appendChild(i),this._bindElementEvents(i,Vt(e=this.addEdgeMode).call(e,this))}},{key:\"_createEditNodeButton\",value:function(t){var e,i=this._createButton(\"editNode\",\"vis-edit\",t.editNode||this.options.locales.en.editNode);this.manipulationDiv.appendChild(i),this._bindElementEvents(i,Vt(e=this.editNode).call(e,this))}},{key:\"_createEditEdgeButton\",value:function(t){var e,i=this._createButton(\"editEdge\",\"vis-edit\",t.editEdge||this.options.locales.en.editEdge);this.manipulationDiv.appendChild(i),this._bindElementEvents(i,Vt(e=this.editEdgeMode).call(e,this))}},{key:\"_createDeleteButton\",value:function(t){var e,i;i=this.options.rtl?\"vis-delete-rtl\":\"vis-delete\";var n=this._createButton(\"delete\",i,t.del||this.options.locales.en.del);this.manipulationDiv.appendChild(n),this._bindElementEvents(n,Vt(e=this.deleteSelected).call(e,this))}},{key:\"_createBackButton\",value:function(t){var e,i=this._createButton(\"back\",\"vis-back\",t.back||this.options.locales.en.back);this.manipulationDiv.appendChild(i),this._bindElementEvents(i,Vt(e=this.showManipulatorToolbar).call(e,this))}},{key:\"_createButton\",value:function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:\"vis-label\";return this.manipulationDOM[t+\"Div\"]=document.createElement(\"button\"),this.manipulationDOM[t+\"Div\"].className=\"vis-button \"+e,this.manipulationDOM[t+\"Label\"]=document.createElement(\"div\"),this.manipulationDOM[t+\"Label\"].className=n,this.manipulationDOM[t+\"Label\"].innerText=i,this.manipulationDOM[t+\"Div\"].appendChild(this.manipulationDOM[t+\"Label\"]),this.manipulationDOM[t+\"Div\"]}},{key:\"_createDescription\",value:function(t){this.manipulationDOM.descriptionLabel=document.createElement(\"div\"),this.manipulationDOM.descriptionLabel.className=\"vis-none\",this.manipulationDOM.descriptionLabel.innerText=t,this.manipulationDiv.appendChild(this.manipulationDOM.descriptionLabel)}},{key:\"_temporaryBindEvent\",value:function(t,e){this.temporaryEventFunctions.push({event:t,boundFunction:e}),this.body.emitter.on(t,e)}},{key:\"_temporaryBindUI\",value:function(t,e){if(void 0===this.body.eventListeners[t])throw new Error(\"This UI function does not exist. Typo? You tried: \"+t+\" possible are: \"+es(zo(this.body.eventListeners)));this.temporaryUIFunctions[t]=this.body.eventListeners[t],this.body.eventListeners[t]=e}},{key:\"_unbindTemporaryUIs\",value:function(){for(var t in this.temporaryUIFunctions)Object.prototype.hasOwnProperty.call(this.temporaryUIFunctions,t)&&(this.body.eventListeners[t]=this.temporaryUIFunctions[t],delete this.temporaryUIFunctions[t]);this.temporaryUIFunctions={}}},{key:\"_unbindTemporaryEvents\",value:function(){for(var t=0;t<this.temporaryEventFunctions.length;t++){var e=this.temporaryEventFunctions[t].event,i=this.temporaryEventFunctions[t].boundFunction;this.body.emitter.off(e,i)}this.temporaryEventFunctions=[]}},{key:\"_bindElementEvents\",value:function(t,e){var i=new ll(t,{});_p(i,e),this._domEventListenerCleanupQueue.push((function(){i.destroy()}));var n=function(t){var i=t.keyCode,n=t.key;\"Enter\"!==n&&\" \"!==n&&13!==i&&32!==i||e()};t.addEventListener(\"keyup\",n,!1),this._domEventListenerCleanupQueue.push((function(){t.removeEventListener(\"keyup\",n,!1)}))}},{key:\"_cleanupTemporaryNodesAndEdges\",value:function(){for(var t=0;t<this.temporaryIds.edges.length;t++){var e;this.body.edges[this.temporaryIds.edges[t]].disconnect(),delete this.body.edges[this.temporaryIds.edges[t]];var i,n=Hr(e=this.body.edgeIndices).call(e,this.temporaryIds.edges[t]);if(-1!==n)er(i=this.body.edgeIndices).call(i,n,1)}for(var o=0;o<this.temporaryIds.nodes.length;o++){var r;delete this.body.nodes[this.temporaryIds.nodes[o]];var s,a=Hr(r=this.body.nodeIndices).call(r,this.temporaryIds.nodes[o]);if(-1!==a)er(s=this.body.nodeIndices).call(s,a,1)}this.temporaryIds={nodes:[],edges:[]}}},{key:\"_controlNodeTouch\",value:function(t){this.selectionHandler.unselectAll(),this.lastTouch=this.body.functions.getPointer(t.center),this.lastTouch.translation=At({},this.body.view.translation)}},{key:\"_controlNodeDragStart\",value:function(){var t=this.lastTouch,e=this.selectionHandler._pointerToPositionObject(t),i=this.body.nodes[this.temporaryIds.nodes[0]],n=this.body.nodes[this.temporaryIds.nodes[1]],o=this.body.edges[this.edgeBeingEditedId];this.selectedControlNode=void 0;var r=i.isOverlappingWith(e),s=n.isOverlappingWith(e);!0===r?(this.selectedControlNode=i,o.edgeType.from=i):!0===s&&(this.selectedControlNode=n,o.edgeType.to=n),void 0!==this.selectedControlNode&&this.selectionHandler.selectObject(this.selectedControlNode),this.body.emitter.emit(\"_redraw\")}},{key:\"_controlNodeDrag\",value:function(t){this.body.emitter.emit(\"disablePhysics\");var e=this.body.functions.getPointer(t.center),i=this.canvas.DOMtoCanvas(e);void 0!==this.selectedControlNode?(this.selectedControlNode.x=i.x,this.selectedControlNode.y=i.y):this.interactionHandler.onDrag(t),this.body.emitter.emit(\"_redraw\")}},{key:\"_controlNodeDragEnd\",value:function(t){var e=this.body.functions.getPointer(t.center),i=this.selectionHandler._pointerToPositionObject(e),n=this.body.edges[this.edgeBeingEditedId];if(void 0!==this.selectedControlNode){this.selectionHandler.unselectAll();for(var o=this.selectionHandler._getAllNodesOverlappingWith(i),r=void 0,s=o.length-1;s>=0;s--)if(o[s]!==this.selectedControlNode.id){r=this.body.nodes[o[s]];break}if(void 0!==r&&void 0!==this.selectedControlNode)if(!0===r.isCluster)alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError);else{var a=this.body.nodes[this.temporaryIds.nodes[0]];this.selectedControlNode.id===a.id?this._performEditEdge(r.id,n.to.id):this._performEditEdge(n.from.id,r.id)}else n.updateEdgeType(),this.body.emitter.emit(\"restorePhysics\");this.body.emitter.emit(\"_redraw\")}}},{key:\"_handleConnect\",value:function(t){if((new Date).valueOf()-this.touchTime>100){this.lastTouch=this.body.functions.getPointer(t.center),this.lastTouch.translation=At({},this.body.view.translation),this.interactionHandler.drag.pointer=this.lastTouch,this.interactionHandler.drag.translation=this.lastTouch.translation;var e=this.lastTouch,i=this.selectionHandler.getNodeAt(e);if(void 0!==i)if(!0===i.isCluster)alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError);else{var n=this._getNewTargetNode(i.x,i.y);this.body.nodes[n.id]=n,this.body.nodeIndices.push(n.id);var o=this.body.functions.createEdge({id:\"connectionEdge\"+Wc(),from:i.id,to:n.id,physics:!1,smooth:{enabled:!0,type:\"continuous\",roundness:.5}});this.body.edges[o.id]=o,this.body.edgeIndices.push(o.id),this.temporaryIds.nodes.push(n.id),this.temporaryIds.edges.push(o.id)}this.touchTime=(new Date).valueOf()}}},{key:\"_dragControlNode\",value:function(t){var e=this.body.functions.getPointer(t.center),i=this.selectionHandler._pointerToPositionObject(e),n=void 0;void 0!==this.temporaryIds.edges[0]&&(n=this.body.edges[this.temporaryIds.edges[0]].fromId);for(var o=this.selectionHandler._getAllNodesOverlappingWith(i),r=void 0,s=o.length-1;s>=0;s--){var a;if(-1===Hr(a=this.temporaryIds.nodes).call(a,o[s])){r=this.body.nodes[o[s]];break}}if(t.controlEdge={from:n,to:r?r.id:void 0},this.selectionHandler.generateClickEvent(\"controlNodeDragging\",t,e),void 0!==this.temporaryIds.nodes[0]){var h=this.body.nodes[this.temporaryIds.nodes[0]];h.x=this.canvas._XconvertDOMtoCanvas(e.x),h.y=this.canvas._YconvertDOMtoCanvas(e.y),this.body.emitter.emit(\"_redraw\")}else this.interactionHandler.onDrag(t)}},{key:\"_finishConnect\",value:function(t){var e=this.body.functions.getPointer(t.center),i=this.selectionHandler._pointerToPositionObject(e),n=void 0;void 0!==this.temporaryIds.edges[0]&&(n=this.body.edges[this.temporaryIds.edges[0]].fromId);for(var o=this.selectionHandler._getAllNodesOverlappingWith(i),r=void 0,s=o.length-1;s>=0;s--){var a;if(-1===Hr(a=this.temporaryIds.nodes).call(a,o[s])){r=this.body.nodes[o[s]];break}}this._cleanupTemporaryNodesAndEdges(),void 0!==r&&(!0===r.isCluster?alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError):void 0!==this.body.nodes[n]&&void 0!==this.body.nodes[r.id]&&this._performAddEdge(n,r.id)),t.controlEdge={from:n,to:r?r.id:void 0},this.selectionHandler.generateClickEvent(\"controlNodeDragEnd\",t,e),this.body.emitter.emit(\"_redraw\")}},{key:\"_dragStartEdge\",value:function(t){var e=this.lastTouch;this.selectionHandler.generateClickEvent(\"dragStart\",t,e,void 0,!0)}},{key:\"_performAddNode\",value:function(t){var e=this,i={id:Wc(),x:t.pointer.canvas.x,y:t.pointer.canvas.y,label:\"new\"};if(\"function\"==typeof this.options.addNode){if(2!==this.options.addNode.length)throw this.showManipulatorToolbar(),new Error(\"The function for add does not support two arguments (data,callback)\");this.options.addNode(i,(function(t){null!=t&&\"addNode\"===e.inMode&&e.body.data.nodes.getDataSet().add(t),e.showManipulatorToolbar()}))}else this.body.data.nodes.getDataSet().add(i),this.showManipulatorToolbar()}},{key:\"_performAddEdge\",value:function(t,e){var i=this,n={from:t,to:e};if(\"function\"==typeof this.options.addEdge){if(2!==this.options.addEdge.length)throw new Error(\"The function for connect does not support two arguments (data,callback)\");this.options.addEdge(n,(function(t){null!=t&&\"addEdge\"===i.inMode&&(i.body.data.edges.getDataSet().add(t),i.selectionHandler.unselectAll(),i.showManipulatorToolbar())}))}else this.body.data.edges.getDataSet().add(n),this.selectionHandler.unselectAll(),this.showManipulatorToolbar()}},{key:\"_performEditEdge\",value:function(t,e){var i=this,n={id:this.edgeBeingEditedId,from:t,to:e,label:this.body.data.edges.get(this.edgeBeingEditedId).label},o=this.options.editEdge;if(\"object\"===go(o)&&(o=o.editWithoutDrag),\"function\"==typeof o){if(2!==o.length)throw new Error(\"The function for edit does not support two arguments (data, callback)\");o(n,(function(t){null==t||\"editEdge\"!==i.inMode?(i.body.edges[n.id].updateEdgeType(),i.body.emitter.emit(\"_redraw\"),i.showManipulatorToolbar()):(i.body.data.edges.getDataSet().update(t),i.selectionHandler.unselectAll(),i.showManipulatorToolbar())}))}else this.body.data.edges.getDataSet().update(n),this.selectionHandler.unselectAll(),this.showManipulatorToolbar()}}]),t}(),Cv=\"string\",Sv=\"boolean\",Tv=\"number\",Mv=\"array\",Pv=\"object\",Dv=[\"arrow\",\"bar\",\"box\",\"circle\",\"crow\",\"curve\",\"diamond\",\"image\",\"inv_curve\",\"inv_triangle\",\"triangle\",\"vee\"],Iv={borderWidth:{number:Tv},borderWidthSelected:{number:Tv,undefined:\"undefined\"},brokenImage:{string:Cv,undefined:\"undefined\"},chosen:{label:{boolean:Sv,function:\"function\"},node:{boolean:Sv,function:\"function\"},__type__:{object:Pv,boolean:Sv}},color:{border:{string:Cv},background:{string:Cv},highlight:{border:{string:Cv},background:{string:Cv},__type__:{object:Pv,string:Cv}},hover:{border:{string:Cv},background:{string:Cv},__type__:{object:Pv,string:Cv}},__type__:{object:Pv,string:Cv}},opacity:{number:Tv,undefined:\"undefined\"},fixed:{x:{boolean:Sv},y:{boolean:Sv},__type__:{object:Pv,boolean:Sv}},font:{align:{string:Cv},color:{string:Cv},size:{number:Tv},face:{string:Cv},background:{string:Cv},strokeWidth:{number:Tv},strokeColor:{string:Cv},vadjust:{number:Tv},multi:{boolean:Sv,string:Cv},bold:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},boldital:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},ital:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},mono:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},__type__:{object:Pv,string:Cv}},group:{string:Cv,number:Tv,undefined:\"undefined\"},heightConstraint:{minimum:{number:Tv},valign:{string:Cv},__type__:{object:Pv,boolean:Sv,number:Tv}},hidden:{boolean:Sv},icon:{face:{string:Cv},code:{string:Cv},size:{number:Tv},color:{string:Cv},weight:{string:Cv,number:Tv},__type__:{object:Pv}},id:{string:Cv,number:Tv},image:{selected:{string:Cv,undefined:\"undefined\"},unselected:{string:Cv,undefined:\"undefined\"},__type__:{object:Pv,string:Cv}},imagePadding:{top:{number:Tv},right:{number:Tv},bottom:{number:Tv},left:{number:Tv},__type__:{object:Pv,number:Tv}},label:{string:Cv,undefined:\"undefined\"},labelHighlightBold:{boolean:Sv},level:{number:Tv,undefined:\"undefined\"},margin:{top:{number:Tv},right:{number:Tv},bottom:{number:Tv},left:{number:Tv},__type__:{object:Pv,number:Tv}},mass:{number:Tv},physics:{boolean:Sv},scaling:{min:{number:Tv},max:{number:Tv},label:{enabled:{boolean:Sv},min:{number:Tv},max:{number:Tv},maxVisible:{number:Tv},drawThreshold:{number:Tv},__type__:{object:Pv,boolean:Sv}},customScalingFunction:{function:\"function\"},__type__:{object:Pv}},shadow:{enabled:{boolean:Sv},color:{string:Cv},size:{number:Tv},x:{number:Tv},y:{number:Tv},__type__:{object:Pv,boolean:Sv}},shape:{string:[\"custom\",\"ellipse\",\"circle\",\"database\",\"box\",\"text\",\"image\",\"circularImage\",\"diamond\",\"dot\",\"star\",\"triangle\",\"triangleDown\",\"square\",\"icon\",\"hexagon\"]},ctxRenderer:{function:\"function\"},shapeProperties:{borderDashes:{boolean:Sv,array:Mv},borderRadius:{number:Tv},interpolation:{boolean:Sv},useImageSize:{boolean:Sv},useBorderWithImage:{boolean:Sv},coordinateOrigin:{string:[\"center\",\"top-left\"]},__type__:{object:Pv}},size:{number:Tv},title:{string:Cv,dom:\"dom\",undefined:\"undefined\"},value:{number:Tv,undefined:\"undefined\"},widthConstraint:{minimum:{number:Tv},maximum:{number:Tv},__type__:{object:Pv,boolean:Sv,number:Tv}},x:{number:Tv},y:{number:Tv},__type__:{object:Pv}},Bv={configure:{enabled:{boolean:Sv},filter:{boolean:Sv,string:Cv,array:Mv,function:\"function\"},container:{dom:\"dom\"},showButton:{boolean:Sv},__type__:{object:Pv,boolean:Sv,string:Cv,array:Mv,function:\"function\"}},edges:{arrows:{to:{enabled:{boolean:Sv},scaleFactor:{number:Tv},type:{string:Dv},imageHeight:{number:Tv},imageWidth:{number:Tv},src:{string:Cv},__type__:{object:Pv,boolean:Sv}},middle:{enabled:{boolean:Sv},scaleFactor:{number:Tv},type:{string:Dv},imageWidth:{number:Tv},imageHeight:{number:Tv},src:{string:Cv},__type__:{object:Pv,boolean:Sv}},from:{enabled:{boolean:Sv},scaleFactor:{number:Tv},type:{string:Dv},imageWidth:{number:Tv},imageHeight:{number:Tv},src:{string:Cv},__type__:{object:Pv,boolean:Sv}},__type__:{string:[\"from\",\"to\",\"middle\"],object:Pv}},endPointOffset:{from:{number:Tv},to:{number:Tv},__type__:{object:Pv,number:Tv}},arrowStrikethrough:{boolean:Sv},background:{enabled:{boolean:Sv},color:{string:Cv},size:{number:Tv},dashes:{boolean:Sv,array:Mv},__type__:{object:Pv,boolean:Sv}},chosen:{label:{boolean:Sv,function:\"function\"},edge:{boolean:Sv,function:\"function\"},__type__:{object:Pv,boolean:Sv}},color:{color:{string:Cv},highlight:{string:Cv},hover:{string:Cv},inherit:{string:[\"from\",\"to\",\"both\"],boolean:Sv},opacity:{number:Tv},__type__:{object:Pv,string:Cv}},dashes:{boolean:Sv,array:Mv},font:{color:{string:Cv},size:{number:Tv},face:{string:Cv},background:{string:Cv},strokeWidth:{number:Tv},strokeColor:{string:Cv},align:{string:[\"horizontal\",\"top\",\"middle\",\"bottom\"]},vadjust:{number:Tv},multi:{boolean:Sv,string:Cv},bold:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},boldital:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},ital:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},mono:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},__type__:{object:Pv,string:Cv}},hidden:{boolean:Sv},hoverWidth:{function:\"function\",number:Tv},label:{string:Cv,undefined:\"undefined\"},labelHighlightBold:{boolean:Sv},length:{number:Tv,undefined:\"undefined\"},physics:{boolean:Sv},scaling:{min:{number:Tv},max:{number:Tv},label:{enabled:{boolean:Sv},min:{number:Tv},max:{number:Tv},maxVisible:{number:Tv},drawThreshold:{number:Tv},__type__:{object:Pv,boolean:Sv}},customScalingFunction:{function:\"function\"},__type__:{object:Pv}},selectionWidth:{function:\"function\",number:Tv},selfReferenceSize:{number:Tv},selfReference:{size:{number:Tv},angle:{number:Tv},renderBehindTheNode:{boolean:Sv},__type__:{object:Pv}},shadow:{enabled:{boolean:Sv},color:{string:Cv},size:{number:Tv},x:{number:Tv},y:{number:Tv},__type__:{object:Pv,boolean:Sv}},smooth:{enabled:{boolean:Sv},type:{string:[\"dynamic\",\"continuous\",\"discrete\",\"diagonalCross\",\"straightCross\",\"horizontal\",\"vertical\",\"curvedCW\",\"curvedCCW\",\"cubicBezier\"]},roundness:{number:Tv},forceDirection:{string:[\"horizontal\",\"vertical\",\"none\"],boolean:Sv},__type__:{object:Pv,boolean:Sv}},title:{string:Cv,undefined:\"undefined\"},width:{number:Tv},widthConstraint:{maximum:{number:Tv},__type__:{object:Pv,boolean:Sv,number:Tv}},value:{number:Tv,undefined:\"undefined\"},__type__:{object:Pv}},groups:{useDefaultGroups:{boolean:Sv},__any__:Iv,__type__:{object:Pv}},interaction:{dragNodes:{boolean:Sv},dragView:{boolean:Sv},hideEdgesOnDrag:{boolean:Sv},hideEdgesOnZoom:{boolean:Sv},hideNodesOnDrag:{boolean:Sv},hover:{boolean:Sv},keyboard:{enabled:{boolean:Sv},speed:{x:{number:Tv},y:{number:Tv},zoom:{number:Tv},__type__:{object:Pv}},bindToWindow:{boolean:Sv},autoFocus:{boolean:Sv},__type__:{object:Pv,boolean:Sv}},multiselect:{boolean:Sv},navigationButtons:{boolean:Sv},selectable:{boolean:Sv},selectConnectedEdges:{boolean:Sv},hoverConnectedEdges:{boolean:Sv},tooltipDelay:{number:Tv},zoomView:{boolean:Sv},zoomSpeed:{number:Tv},__type__:{object:Pv}},layout:{randomSeed:{undefined:\"undefined\",number:Tv,string:Cv},improvedLayout:{boolean:Sv},clusterThreshold:{number:Tv},hierarchical:{enabled:{boolean:Sv},levelSeparation:{number:Tv},nodeSpacing:{number:Tv},treeSpacing:{number:Tv},blockShifting:{boolean:Sv},edgeMinimization:{boolean:Sv},parentCentralization:{boolean:Sv},direction:{string:[\"UD\",\"DU\",\"LR\",\"RL\"]},sortMethod:{string:[\"hubsize\",\"directed\"]},shakeTowards:{string:[\"leaves\",\"roots\"]},__type__:{object:Pv,boolean:Sv}},__type__:{object:Pv}},manipulation:{enabled:{boolean:Sv},initiallyActive:{boolean:Sv},addNode:{boolean:Sv,function:\"function\"},addEdge:{boolean:Sv,function:\"function\"},editNode:{function:\"function\"},editEdge:{editWithoutDrag:{function:\"function\"},__type__:{object:Pv,boolean:Sv,function:\"function\"}},deleteNode:{boolean:Sv,function:\"function\"},deleteEdge:{boolean:Sv,function:\"function\"},controlNodeStyle:Iv,__type__:{object:Pv,boolean:Sv}},nodes:Iv,physics:{enabled:{boolean:Sv},barnesHut:{theta:{number:Tv},gravitationalConstant:{number:Tv},centralGravity:{number:Tv},springLength:{number:Tv},springConstant:{number:Tv},damping:{number:Tv},avoidOverlap:{number:Tv},__type__:{object:Pv}},forceAtlas2Based:{theta:{number:Tv},gravitationalConstant:{number:Tv},centralGravity:{number:Tv},springLength:{number:Tv},springConstant:{number:Tv},damping:{number:Tv},avoidOverlap:{number:Tv},__type__:{object:Pv}},repulsion:{centralGravity:{number:Tv},springLength:{number:Tv},springConstant:{number:Tv},nodeDistance:{number:Tv},damping:{number:Tv},__type__:{object:Pv}},hierarchicalRepulsion:{centralGravity:{number:Tv},springLength:{number:Tv},springConstant:{number:Tv},nodeDistance:{number:Tv},damping:{number:Tv},avoidOverlap:{number:Tv},__type__:{object:Pv}},maxVelocity:{number:Tv},minVelocity:{number:Tv},solver:{string:[\"barnesHut\",\"repulsion\",\"hierarchicalRepulsion\",\"forceAtlas2Based\"]},stabilization:{enabled:{boolean:Sv},iterations:{number:Tv},updateInterval:{number:Tv},onlyDynamicEdges:{boolean:Sv},fit:{boolean:Sv},__type__:{object:Pv,boolean:Sv}},timestep:{number:Tv},adaptiveTimestep:{boolean:Sv},wind:{x:{number:Tv},y:{number:Tv},__type__:{object:Pv}},__type__:{object:Pv,boolean:Sv}},autoResize:{boolean:Sv},clickToUse:{boolean:Sv},locale:{string:Cv},locales:{__any__:{any:\"any\"},__type__:{object:Pv}},height:{string:Cv},width:{string:Cv},__type__:{object:Pv}},zv={nodes:{borderWidth:[1,0,10,1],borderWidthSelected:[2,0,10,1],color:{border:[\"color\",\"#2B7CE9\"],background:[\"color\",\"#97C2FC\"],highlight:{border:[\"color\",\"#2B7CE9\"],background:[\"color\",\"#D2E5FF\"]},hover:{border:[\"color\",\"#2B7CE9\"],background:[\"color\",\"#D2E5FF\"]}},opacity:[0,0,1,.1],fixed:{x:!1,y:!1},font:{color:[\"color\",\"#343434\"],size:[14,0,100,1],face:[\"arial\",\"verdana\",\"tahoma\"],background:[\"color\",\"none\"],strokeWidth:[0,0,50,1],strokeColor:[\"color\",\"#ffffff\"]},hidden:!1,labelHighlightBold:!0,physics:!0,scaling:{min:[10,0,200,1],max:[30,0,200,1],label:{enabled:!1,min:[14,0,200,1],max:[30,0,200,1],maxVisible:[30,0,200,1],drawThreshold:[5,0,20,1]}},shadow:{enabled:!1,color:\"rgba(0,0,0,0.5)\",size:[10,0,20,1],x:[5,-30,30,1],y:[5,-30,30,1]},shape:[\"ellipse\",\"box\",\"circle\",\"database\",\"diamond\",\"dot\",\"square\",\"star\",\"text\",\"triangle\",\"triangleDown\",\"hexagon\"],shapeProperties:{borderDashes:!1,borderRadius:[6,0,20,1],interpolation:!0,useImageSize:!1},size:[25,0,200,1]},edges:{arrows:{to:{enabled:!1,scaleFactor:[1,0,3,.05],type:\"arrow\"},middle:{enabled:!1,scaleFactor:[1,0,3,.05],type:\"arrow\"},from:{enabled:!1,scaleFactor:[1,0,3,.05],type:\"arrow\"}},endPointOffset:{from:[0,-10,10,1],to:[0,-10,10,1]},arrowStrikethrough:!0,color:{color:[\"color\",\"#848484\"],highlight:[\"color\",\"#848484\"],hover:[\"color\",\"#848484\"],inherit:[\"from\",\"to\",\"both\",!0,!1],opacity:[1,0,1,.05]},dashes:!1,font:{color:[\"color\",\"#343434\"],size:[14,0,100,1],face:[\"arial\",\"verdana\",\"tahoma\"],background:[\"color\",\"none\"],strokeWidth:[2,0,50,1],strokeColor:[\"color\",\"#ffffff\"],align:[\"horizontal\",\"top\",\"middle\",\"bottom\"]},hidden:!1,hoverWidth:[1.5,0,5,.1],labelHighlightBold:!0,physics:!0,scaling:{min:[1,0,100,1],max:[15,0,100,1],label:{enabled:!0,min:[14,0,200,1],max:[30,0,200,1],maxVisible:[30,0,200,1],drawThreshold:[5,0,20,1]}},selectionWidth:[1.5,0,5,.1],selfReferenceSize:[20,0,200,1],selfReference:{size:[20,0,200,1],angle:[Math.PI/2,-6*Math.PI,6*Math.PI,Math.PI/8],renderBehindTheNode:!0},shadow:{enabled:!1,color:\"rgba(0,0,0,0.5)\",size:[10,0,20,1],x:[5,-30,30,1],y:[5,-30,30,1]},smooth:{enabled:!0,type:[\"dynamic\",\"continuous\",\"discrete\",\"diagonalCross\",\"straightCross\",\"horizontal\",\"vertical\",\"curvedCW\",\"curvedCCW\",\"cubicBezier\"],forceDirection:[\"horizontal\",\"vertical\",\"none\"],roundness:[.5,0,1,.05]},width:[1,0,30,1]},layout:{hierarchical:{enabled:!1,levelSeparation:[150,20,500,5],nodeSpacing:[100,20,500,5],treeSpacing:[200,20,500,5],blockShifting:!0,edgeMinimization:!0,parentCentralization:!0,direction:[\"UD\",\"DU\",\"LR\",\"RL\"],sortMethod:[\"hubsize\",\"directed\"],shakeTowards:[\"leaves\",\"roots\"]}},interaction:{dragNodes:!0,dragView:!0,hideEdgesOnDrag:!1,hideEdgesOnZoom:!1,hideNodesOnDrag:!1,hover:!1,keyboard:{enabled:!1,speed:{x:[10,0,40,1],y:[10,0,40,1],zoom:[.02,0,.1,.005]},bindToWindow:!0,autoFocus:!0},multiselect:!1,navigationButtons:!1,selectable:!0,selectConnectedEdges:!0,hoverConnectedEdges:!0,tooltipDelay:[300,0,1e3,25],zoomView:!0,zoomSpeed:[1,.1,2,.1]},manipulation:{enabled:!1,initiallyActive:!1},physics:{enabled:!0,barnesHut:{theta:[.5,.1,1,.05],gravitationalConstant:[-2e3,-3e4,0,50],centralGravity:[.3,0,10,.05],springLength:[95,0,500,5],springConstant:[.04,0,1.2,.005],damping:[.09,0,1,.01],avoidOverlap:[0,0,1,.01]},forceAtlas2Based:{theta:[.5,.1,1,.05],gravitationalConstant:[-50,-500,0,1],centralGravity:[.01,0,1,.005],springLength:[95,0,500,5],springConstant:[.08,0,1.2,.005],damping:[.4,0,1,.01],avoidOverlap:[0,0,1,.01]},repulsion:{centralGravity:[.2,0,10,.05],springLength:[200,0,500,5],springConstant:[.05,0,1.2,.005],nodeDistance:[100,0,500,5],damping:[.09,0,1,.01]},hierarchicalRepulsion:{centralGravity:[.2,0,10,.05],springLength:[100,0,500,5],springConstant:[.01,0,1.2,.005],nodeDistance:[120,0,500,5],damping:[.09,0,1,.01],avoidOverlap:[0,0,1,.01]},maxVelocity:[50,0,150,1],minVelocity:[.1,.01,.5,.01],solver:[\"barnesHut\",\"forceAtlas2Based\",\"repulsion\",\"hierarchicalRepulsion\"],timestep:[.5,.01,1,.01],wind:{x:[0,-10,10,.1],y:[0,-10,10,.1]}}},Nv=function(t,e,i){var n;return!(!dr(t).call(t,\"physics\")||!dr(n=zv.physics.solver).call(n,e)||i.physics.solver===e||\"wind\"===e)},Av=Object.freeze({__proto__:null,configuratorHideOption:Nv,allOptions:Bv,configureOptions:zv}),Fv=function(){function t(){Nn(this,t)}return Fn(t,[{key:\"getDistances\",value:function(t,e,i){for(var n={},o=t.edges,r=0;r<e.length;r++){var s={};n[e[r]]=s;for(var a=0;a<e.length;a++)s[e[a]]=r==a?0:1e9}for(var h=0;h<i.length;h++){var l=o[i[h]];!0===l.connected&&void 0!==n[l.fromId]&&void 0!==n[l.toId]&&(n[l.fromId][l.toId]=1,n[l.toId][l.fromId]=1)}for(var d=e.length,c=0;c<d;c++)for(var u=e[c],f=n[u],p=0;p<d-1;p++)for(var v=e[p],g=n[v],y=p+1;y<d;y++){var m=e[y],b=n[m],w=Math.min(g[m],g[u]+f[m]);g[m]=w,b[v]=w}return n}}]),t}(),jv=function(){function t(e,i,n){Nn(this,t),this.body=e,this.springLength=i,this.springConstant=n,this.distanceSolver=new Fv}return Fn(t,[{key:\"setOptions\",value:function(t){t&&(t.springLength&&(this.springLength=t.springLength),t.springConstant&&(this.springConstant=t.springConstant))}},{key:\"solve\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=this.distanceSolver.getDistances(this.body,t,e);this._createL_matrix(n),this._createK_matrix(n),this._createE_matrix();for(var o=.01,r=1,s=0,a=Math.max(1e3,Math.min(10*this.body.nodeIndices.length,6e3)),h=5,l=1e9,d=0,c=0,u=0,f=0,p=0;l>o&&s<a;){s+=1;var v=this._getHighestEnergyNode(i),g=uo(v,4);for(d=g[0],l=g[1],c=g[2],u=g[3],f=l,p=0;f>r&&p<h;){p+=1,this._moveNode(d,c,u);var y=this._getEnergy(d),m=uo(y,3);f=m[0],c=m[1],u=m[2]}}}},{key:\"_getHighestEnergyNode\",value:function(t){for(var e=this.body.nodeIndices,i=this.body.nodes,n=0,o=e[0],r=0,s=0,a=0;a<e.length;a++){var h=e[a];if(!0!==i[h].predefinedPosition||!0===i[h].isCluster&&!0===t||!0!==i[h].options.fixed.x||!0!==i[h].options.fixed.y){var l=this._getEnergy(h),d=uo(l,3),c=d[0],u=d[1],f=d[2];n<c&&(n=c,o=h,r=u,s=f)}}return[o,n,r,s]}},{key:\"_getEnergy\",value:function(t){var e=uo(this.E_sums[t],2),i=e[0],n=e[1];return[Math.sqrt(Math.pow(i,2)+Math.pow(n,2)),i,n]}},{key:\"_moveNode\",value:function(t,e,i){for(var n=this.body.nodeIndices,o=this.body.nodes,r=0,s=0,a=0,h=o[t].x,l=o[t].y,d=this.K_matrix[t],c=this.L_matrix[t],u=0;u<n.length;u++){var f=n[u];if(f!==t){var p=o[f].x,v=o[f].y,g=d[f],y=c[f],m=1/Math.pow(Math.pow(h-p,2)+Math.pow(l-v,2),1.5);r+=g*(1-y*Math.pow(l-v,2)*m),s+=g*(y*(h-p)*(l-v)*m),a+=g*(1-y*Math.pow(h-p,2)*m)}}var b=(e/r+i/s)/(s/r-a/s),w=-(s*b+e)/r;o[t].x+=w,o[t].y+=b,this._updateE_matrix(t)}},{key:\"_createL_matrix\",value:function(t){var e=this.body.nodeIndices,i=this.springLength;this.L_matrix=[];for(var n=0;n<e.length;n++){this.L_matrix[e[n]]={};for(var o=0;o<e.length;o++)this.L_matrix[e[n]][e[o]]=i*t[e[n]][e[o]]}}},{key:\"_createK_matrix\",value:function(t){var e=this.body.nodeIndices,i=this.springConstant;this.K_matrix=[];for(var n=0;n<e.length;n++){this.K_matrix[e[n]]={};for(var o=0;o<e.length;o++)this.K_matrix[e[n]][e[o]]=i*Math.pow(t[e[n]][e[o]],-2)}}},{key:\"_createE_matrix\",value:function(){var t=this.body.nodeIndices,e=this.body.nodes;this.E_matrix={},this.E_sums={};for(var i=0;i<t.length;i++)this.E_matrix[t[i]]=[];for(var n=0;n<t.length;n++){for(var o=t[n],r=e[o].x,s=e[o].y,a=0,h=0,l=n;l<t.length;l++){var d=t[l];if(d!==o){var c=e[d].x,u=e[d].y,f=1/Math.sqrt(Math.pow(r-c,2)+Math.pow(s-u,2));this.E_matrix[o][l]=[this.K_matrix[o][d]*(r-c-this.L_matrix[o][d]*(r-c)*f),this.K_matrix[o][d]*(s-u-this.L_matrix[o][d]*(s-u)*f)],this.E_matrix[d][n]=this.E_matrix[o][l],a+=this.E_matrix[o][l][0],h+=this.E_matrix[o][l][1]}}this.E_sums[o]=[a,h]}}},{key:\"_updateE_matrix\",value:function(t){for(var e=this.body.nodeIndices,i=this.body.nodes,n=this.E_matrix[t],o=this.K_matrix[t],r=this.L_matrix[t],s=i[t].x,a=i[t].y,h=0,l=0,d=0;d<e.length;d++){var c=e[d];if(c!==t){var u=n[d],f=u[0],p=u[1],v=i[c].x,g=i[c].y,y=1/Math.sqrt(Math.pow(s-v,2)+Math.pow(a-g,2)),m=o[c]*(s-v-r[c]*(s-v)*y),b=o[c]*(a-g-r[c]*(a-g)*y);n[d]=[m,b],h+=m,l+=b;var w=this.E_sums[c];w[0]+=m-f,w[1]+=b-p}}this.E_sums[t]=[h,l]}}]),t}();function Rv(t,e,i){var n,o,r,s,a=this;if(!(this instanceof Rv))throw new SyntaxError(\"Constructor must be called with the new operator\");this.options={},this.defaultOptions={locale:\"en\",locales:Kl,clickToUse:!1},At(this.options,this.defaultOptions),this.body={container:t,nodes:{},nodeIndices:[],edges:{},edgeIndices:[],emitter:{on:Vt(n=this.on).call(n,this),off:Vt(o=this.off).call(o,this),emit:Vt(r=this.emit).call(r,this),once:Vt(s=this.once).call(s,this)},eventListeners:{onTap:function(){},onTouch:function(){},onDoubleTap:function(){},onHold:function(){},onDragStart:function(){},onDrag:function(){},onDragEnd:function(){},onMouseWheel:function(){},onPinch:function(){},onMouseMove:function(){},onRelease:function(){},onContext:function(){}},data:{nodes:null,edges:null},functions:{createNode:function(){},createEdge:function(){},getPointer:function(){}},modules:{},view:{scale:1,translation:{x:0,y:0}},selectionBox:{show:!1,position:{start:{x:0,y:0},end:{x:0,y:0}}}},this.bindEventListeners(),this.images=new Zl((function(){return a.body.emitter.emit(\"_requestRedraw\")})),this.groups=new gd,this.canvas=new Ep(this.body),this.selectionHandler=new ov(this.body,this.canvas),this.interactionHandler=new Ip(this.body,this.canvas,this.selectionHandler),this.view=new Cp(this.body,this.canvas),this.renderer=new wp(this.body,this.canvas),this.physics=new fp(this.body),this.layoutEngine=new _v(this.body),this.clustering=new yp(this.body),this.manipulation=new Ov(this.body,this.canvas,this.selectionHandler,this.interactionHandler),this.nodesHandler=new pf(this.body,this.images,this.groups,this.layoutEngine),this.edgesHandler=new ip(this.body,this.images,this.groups),this.body.modules.kamadaKawai=new jv(this.body,150,.05),this.body.modules.clustering=this.clustering,this.canvas._create(),this.setOptions(i),this.setData(e)}function Lv(t){for(var e in t)Object.prototype.hasOwnProperty.call(t,e)&&(t[e].redundant=t[e].used,t[e].used=[])}function Hv(t){for(var e in t)if(Object.prototype.hasOwnProperty.call(t,e)&&t[e].redundant){for(var i=0;i<t[e].redundant.length;i++)t[e].redundant[i].parentNode.removeChild(t[e].redundant[i]);t[e].redundant=[]}}function Wv(t,e,i){var n;return Object.prototype.hasOwnProperty.call(e,t)?e[t].redundant.length>0?(n=e[t].redundant[0],e[t].redundant.shift()):(n=document.createElementNS(\"http://www.w3.org/2000/svg\",t),i.appendChild(n)):(n=document.createElementNS(\"http://www.w3.org/2000/svg\",t),e[t]={used:[],redundant:[]},i.appendChild(n)),e[t].used.push(n),n}Zt(Rv.prototype),Rv.prototype.setOptions=function(t){var e=this;if(null===t&&(t=void 0),void 0!==t){!0===ul.validate(t,Bv)&&console.error(\"%cErrors have been found in the supplied options object.\",cl);if(Eh([\"locale\",\"locales\",\"clickToUse\"],this.options,t),void 0!==t.locale&&(t.locale=function(t,e){try{var i=e.split(/[-_ /]/,2),n=uo(i,2),o=n[0],r=n[1],s=null!=o?o.toLowerCase():null,a=null!=r?r.toUpperCase():null;if(s&&a){var h,l=s+\"-\"+a;if(Object.prototype.hasOwnProperty.call(t,l))return l;console.warn(Eo(h=\"Unknown variant \".concat(a,\" of language \")).call(h,s,\".\"))}if(s){var d=s;if(Object.prototype.hasOwnProperty.call(t,d))return d;console.warn(\"Unknown language \".concat(s))}return console.warn(\"Unknown locale \".concat(e,\", falling back to English.\")),\"en\"}catch(t){return console.error(t),console.warn(\"Unexpected error while normalizing locale \".concat(e,\", falling back to English.\")),\"en\"}}(t.locales||this.options.locales,t.locale)),t=this.layoutEngine.setOptions(t.layout,t),this.canvas.setOptions(t),this.groups.setOptions(t.groups),this.nodesHandler.setOptions(t.nodes),this.edgesHandler.setOptions(t.edges),this.physics.setOptions(t.physics),this.manipulation.setOptions(t.manipulation,t,this.options),this.interactionHandler.setOptions(t.interaction),this.renderer.setOptions(t.interaction),this.selectionHandler.setOptions(t.interaction),void 0!==t.groups&&this.body.emitter.emit(\"refreshNodes\"),\"configure\"in t&&(this.configurator||(this.configurator=new hl(this,this.body.container,zv,this.canvas.pixelRatio,Nv)),this.configurator.setOptions(t.configure)),this.configurator&&!0===this.configurator.options.enabled){var i={nodes:{},edges:{},layout:{},interaction:{},manipulation:{},physics:{},global:{}};Ch(i.nodes,this.nodesHandler.options),Ch(i.edges,this.edgesHandler.options),Ch(i.layout,this.layoutEngine.options),Ch(i.interaction,this.selectionHandler.options),Ch(i.interaction,this.renderer.options),Ch(i.interaction,this.interactionHandler.options),Ch(i.manipulation,this.manipulation.options),Ch(i.physics,this.physics.options),Ch(i.global,this.canvas.options),Ch(i.global,this.options),this.configurator.setModuleOptions(i)}void 0!==t.clickToUse?!0===t.clickToUse?void 0===this.activator&&(this.activator=new sl(this.canvas.frame),this.activator.on(\"change\",(function(){e.body.emitter.emit(\"activate\")}))):(void 0!==this.activator&&(this.activator.destroy(),delete this.activator),this.body.emitter.emit(\"activate\")):this.body.emitter.emit(\"activate\"),this.canvas.setSize(),this.body.emitter.emit(\"startSimulation\")}},Rv.prototype._updateVisibleIndices=function(){var t=this.body.nodes,e=this.body.edges;for(var i in this.body.nodeIndices=[],this.body.edgeIndices=[],t)Object.prototype.hasOwnProperty.call(t,i)&&(this.clustering._isClusteredNode(i)||!1!==t[i].options.hidden||this.body.nodeIndices.push(t[i].id));for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){var o=e[n],r=t[o.fromId],s=t[o.toId],a=void 0!==r&&void 0!==s;!this.clustering._isClusteredEdge(n)&&!1===o.options.hidden&&a&&!1===r.options.hidden&&!1===s.options.hidden&&this.body.edgeIndices.push(o.id)}},Rv.prototype.bindEventListeners=function(){var t=this;this.body.emitter.on(\"_dataChanged\",(function(){t.edgesHandler._updateState(),t.body.emitter.emit(\"_dataUpdated\")})),this.body.emitter.on(\"_dataUpdated\",(function(){t.clustering._updateState(),t._updateVisibleIndices(),t._updateValueRange(t.body.nodes),t._updateValueRange(t.body.edges),t.body.emitter.emit(\"startSimulation\"),t.body.emitter.emit(\"_requestRedraw\")}))},Rv.prototype.setData=function(t){if(this.body.emitter.emit(\"resetPhysics\"),this.body.emitter.emit(\"_resetData\"),this.selectionHandler.unselectAll(),t&&t.dot&&(t.nodes||t.edges))throw new SyntaxError('Data must contain either parameter \"dot\" or  parameter pair \"nodes\" and \"edges\", but not both.');if(this.setOptions(t&&t.options),t&&t.dot){console.warn(\"The dot property has been deprecated. Please use the static convertDot method to convert DOT into vis.network format and use the normal data format with nodes and edges. This converter is used like this: var data = vis.network.convertDot(dotString);\");var e=Ul(t.dot);this.setData(e)}else if(t&&t.gephi){console.warn(\"The gephi property has been deprecated. Please use the static convertGephi method to convert gephi into vis.network format and use the normal data format with nodes and edges. This converter is used like this: var data = vis.network.convertGephi(gephiJson);\");var i=Xl(t.gephi);this.setData(i)}else this.nodesHandler.setData(t&&t.nodes,!0),this.edgesHandler.setData(t&&t.edges,!0),this.body.emitter.emit(\"_dataChanged\"),this.body.emitter.emit(\"_dataLoaded\"),this.body.emitter.emit(\"initPhysics\")},Rv.prototype.destroy=function(){for(var t in this.body.emitter.emit(\"destroy\"),this.body.emitter.off(),this.off(),delete this.groups,delete this.canvas,delete this.selectionHandler,delete this.interactionHandler,delete this.view,delete this.renderer,delete this.physics,delete this.layoutEngine,delete this.clustering,delete this.manipulation,delete this.nodesHandler,delete this.edgesHandler,delete this.configurator,delete this.images,this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,t)&&delete this.body.nodes[t];for(var e in this.body.edges)Object.prototype.hasOwnProperty.call(this.body.edges,e)&&delete this.body.edges[e];mh(this.body.container)},Rv.prototype._updateValueRange=function(t){var e,i=void 0,n=void 0,o=0;for(e in t)if(Object.prototype.hasOwnProperty.call(t,e)){var r=t[e].getValue();void 0!==r&&(i=void 0===i?r:Math.min(r,i),n=void 0===n?r:Math.max(r,n),o+=r)}if(void 0!==i&&void 0!==n)for(e in t)Object.prototype.hasOwnProperty.call(t,e)&&t[e].setValueRange(i,n,o)},Rv.prototype.isActive=function(){return!this.activator||this.activator.active},Rv.prototype.setSize=function(){return this.canvas.setSize.apply(this.canvas,arguments)},Rv.prototype.canvasToDOM=function(){return this.canvas.canvasToDOM.apply(this.canvas,arguments)},Rv.prototype.DOMtoCanvas=function(){return this.canvas.DOMtoCanvas.apply(this.canvas,arguments)},Rv.prototype.findNode=function(){return this.clustering.findNode.apply(this.clustering,arguments)},Rv.prototype.isCluster=function(){return this.clustering.isCluster.apply(this.clustering,arguments)},Rv.prototype.openCluster=function(){return this.clustering.openCluster.apply(this.clustering,arguments)},Rv.prototype.cluster=function(){return this.clustering.cluster.apply(this.clustering,arguments)},Rv.prototype.getNodesInCluster=function(){return this.clustering.getNodesInCluster.apply(this.clustering,arguments)},Rv.prototype.clusterByConnection=function(){return this.clustering.clusterByConnection.apply(this.clustering,arguments)},Rv.prototype.clusterByHubsize=function(){return this.clustering.clusterByHubsize.apply(this.clustering,arguments)},Rv.prototype.updateClusteredNode=function(){return this.clustering.updateClusteredNode.apply(this.clustering,arguments)},Rv.prototype.getClusteredEdges=function(){return this.clustering.getClusteredEdges.apply(this.clustering,arguments)},Rv.prototype.getBaseEdge=function(){return this.clustering.getBaseEdge.apply(this.clustering,arguments)},Rv.prototype.getBaseEdges=function(){return this.clustering.getBaseEdges.apply(this.clustering,arguments)},Rv.prototype.updateEdge=function(){return this.clustering.updateEdge.apply(this.clustering,arguments)},Rv.prototype.clusterOutliers=function(){return this.clustering.clusterOutliers.apply(this.clustering,arguments)},Rv.prototype.getSeed=function(){return this.layoutEngine.getSeed.apply(this.layoutEngine,arguments)},Rv.prototype.enableEditMode=function(){return this.manipulation.enableEditMode.apply(this.manipulation,arguments)},Rv.prototype.disableEditMode=function(){return this.manipulation.disableEditMode.apply(this.manipulation,arguments)},Rv.prototype.addNodeMode=function(){return this.manipulation.addNodeMode.apply(this.manipulation,arguments)},Rv.prototype.editNode=function(){return this.manipulation.editNode.apply(this.manipulation,arguments)},Rv.prototype.editNodeMode=function(){return console.warn(\"Deprecated: Please use editNode instead of editNodeMode.\"),this.manipulation.editNode.apply(this.manipulation,arguments)},Rv.prototype.addEdgeMode=function(){return this.manipulation.addEdgeMode.apply(this.manipulation,arguments)},Rv.prototype.editEdgeMode=function(){return this.manipulation.editEdgeMode.apply(this.manipulation,arguments)},Rv.prototype.deleteSelected=function(){return this.manipulation.deleteSelected.apply(this.manipulation,arguments)},Rv.prototype.getPositions=function(){return this.nodesHandler.getPositions.apply(this.nodesHandler,arguments)},Rv.prototype.getPosition=function(){return this.nodesHandler.getPosition.apply(this.nodesHandler,arguments)},Rv.prototype.storePositions=function(){return this.nodesHandler.storePositions.apply(this.nodesHandler,arguments)},Rv.prototype.moveNode=function(){return this.nodesHandler.moveNode.apply(this.nodesHandler,arguments)},Rv.prototype.getBoundingBox=function(){return this.nodesHandler.getBoundingBox.apply(this.nodesHandler,arguments)},Rv.prototype.getConnectedNodes=function(t){return void 0!==this.body.nodes[t]?this.nodesHandler.getConnectedNodes.apply(this.nodesHandler,arguments):this.edgesHandler.getConnectedNodes.apply(this.edgesHandler,arguments)},Rv.prototype.getConnectedEdges=function(){return this.nodesHandler.getConnectedEdges.apply(this.nodesHandler,arguments)},Rv.prototype.startSimulation=function(){return this.physics.startSimulation.apply(this.physics,arguments)},Rv.prototype.stopSimulation=function(){return this.physics.stopSimulation.apply(this.physics,arguments)},Rv.prototype.stabilize=function(){return this.physics.stabilize.apply(this.physics,arguments)},Rv.prototype.getSelection=function(){return this.selectionHandler.getSelection.apply(this.selectionHandler,arguments)},Rv.prototype.setSelection=function(){return this.selectionHandler.setSelection.apply(this.selectionHandler,arguments)},Rv.prototype.getSelectedNodes=function(){return this.selectionHandler.getSelectedNodeIds.apply(this.selectionHandler,arguments)},Rv.prototype.getSelectedEdges=function(){return this.selectionHandler.getSelectedEdgeIds.apply(this.selectionHandler,arguments)},Rv.prototype.getNodeAt=function(){var t=this.selectionHandler.getNodeAt.apply(this.selectionHandler,arguments);return void 0!==t&&void 0!==t.id?t.id:t},Rv.prototype.getEdgeAt=function(){var t=this.selectionHandler.getEdgeAt.apply(this.selectionHandler,arguments);return void 0!==t&&void 0!==t.id?t.id:t},Rv.prototype.selectNodes=function(){return this.selectionHandler.selectNodes.apply(this.selectionHandler,arguments)},Rv.prototype.selectEdges=function(){return this.selectionHandler.selectEdges.apply(this.selectionHandler,arguments)},Rv.prototype.unselectAll=function(){this.selectionHandler.unselectAll.apply(this.selectionHandler,arguments),this.selectionHandler.commitWithoutEmitting.apply(this.selectionHandler),this.redraw()},Rv.prototype.redraw=function(){return this.renderer.redraw.apply(this.renderer,arguments)},Rv.prototype.getScale=function(){return this.view.getScale.apply(this.view,arguments)},Rv.prototype.getViewPosition=function(){return this.view.getViewPosition.apply(this.view,arguments)},Rv.prototype.fit=function(){return this.view.fit.apply(this.view,arguments)},Rv.prototype.moveTo=function(){return this.view.moveTo.apply(this.view,arguments)},Rv.prototype.focus=function(){return this.view.focus.apply(this.view,arguments)},Rv.prototype.releaseNode=function(){return this.view.releaseNode.apply(this.view,arguments)},Rv.prototype.getOptionsFromConfigurator=function(){var t={};return this.configurator&&(t=this.configurator.getOptions.apply(this.configurator)),t};var qv=Object.freeze({__proto__:null,prepareElements:Lv,cleanupElements:Hv,resetElements:function(t){Lv(t),Hv(t),Lv(t)},getSVGElement:Wv,getDOMElement:function(t,e,i,n){var o;return Object.prototype.hasOwnProperty.call(e,t)?e[t].redundant.length>0?(o=e[t].redundant[0],e[t].redundant.shift()):(o=document.createElement(t),void 0!==n?i.insertBefore(o,n):i.appendChild(o)):(o=document.createElement(t),e[t]={used:[],redundant:[]},void 0!==n?i.insertBefore(o,n):i.appendChild(o)),e[t].used.push(o),o},drawPoint:function(t,e,i,n,o,r){var s;if(\"circle\"==i.style?((s=Wv(\"circle\",n,o)).setAttributeNS(null,\"cx\",t),s.setAttributeNS(null,\"cy\",e),s.setAttributeNS(null,\"r\",.5*i.size)):((s=Wv(\"rect\",n,o)).setAttributeNS(null,\"x\",t-.5*i.size),s.setAttributeNS(null,\"y\",e-.5*i.size),s.setAttributeNS(null,\"width\",i.size),s.setAttributeNS(null,\"height\",i.size)),void 0!==i.styles&&s.setAttributeNS(null,\"style\",i.styles),s.setAttributeNS(null,\"class\",i.className+\" vis-point\"),r){var a=Wv(\"text\",n,o);r.xOffset&&(t+=r.xOffset),r.yOffset&&(e+=r.yOffset),r.content&&(a.textContent=r.content),r.className&&a.setAttributeNS(null,\"class\",r.className+\" vis-label\"),a.setAttributeNS(null,\"x\",t),a.setAttributeNS(null,\"y\",e)}return s},drawBar:function(t,e,i,n,o,r,s,a){if(0!=n){n<0&&(e-=n*=-1);var h=Wv(\"rect\",r,s);h.setAttributeNS(null,\"x\",t-.5*i),h.setAttributeNS(null,\"y\",e),h.setAttributeNS(null,\"width\",i),h.setAttributeNS(null,\"height\",n),h.setAttributeNS(null,\"class\",o),a&&h.setAttributeNS(null,\"style\",a)}}}),Vv={Images:Zl,dotparser:Yl,gephiParser:Gl,allOptions:Av,convertDot:Ul,convertGephi:Xl},Uv=Object.freeze({__proto__:null,network:Vv,DOMutil:qv,util:fl,data:ou,Hammer:ll,keycharm:Tp,DataSet:tu,DataView:eu,Queue:Zc,Network:Rv});t.DOMutil=qv,t.DataSet=tu,t.DataView=eu,t.Hammer=ll,t.Network=Rv,t.Queue=Zc,t.data=ou,t.default=Uv,t.keycharm=Tp,t.network=Vv,t.util=fl,Object.defineProperty(t,\"__esModule\",{value:!0})}\n",
       "  // ));\n",
       "  // # sourceMappingURL=vis-network.min.js.map\n",
       "\n",
       "  );\n",
       "}\n",
       "\n",
       "\n",
       "    require([\"gravis-vis-network\"], function(vis){\n",
       "      // Strict mode: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Strict_mode\n",
       "      \"use strict\";\n",
       "\n",
       "      const state = {\n",
       "        manager:{\n",
       "          // Data generation process: 1) Fetch state.rawData, 2) derive state.parsedData, 3) derive state.shownData\n",
       "\n",
       "          // 1) Fetch state.rawData\n",
       "          fetchRawDataFromTemplating(){\n",
       "            state.rawData = [{\"directed\": true, \"metadata\": {\"node_color\": \"black\", \"node_opacity\": 1, \"node_size\": 10, \"node_shape\": \"circle\", \"node_border_color\": \"black\", \"node_border_size\": 1, \"node_label_color\": \"black\", \"node_label_size\": 10, \"edge_color\": \"#999\", \"edge_opacity\": 1, \"edge_size\": 2, \"edge_shape\": \"circle\", \"edge_border_color\": \"#999\", \"edge_border_size\": 1, \"edge_label_color\": \"black\", \"edge_label_size\": 10, \"arrow_size\": 4, \"arrow_color\": \"#999\"}, \"nodes\": {\"r1MhwkDR9RGGNg07nIf5BQ\": {\"label\": \"Tom\", \"metadata\": {\"focus\": \"target\", \"label\": \"Tom\", \"color\": \"#f07f65\", \"size\": 20}}, \"JIMOIAq9XU0WsAXPLHQRBg\": {\"label\": \"MyBank\", \"metadata\": {\"focus\": \"controlled\", \"label\": \"MyBank\", \"color\": \"#f07f65\", \"size\": 20}}, \"nToxQTWUkZ4gv4iAItXSKw\": {\"label\": \"NovaCore Innovations\", \"metadata\": {\"focus\": \"controlled\", \"label\": \"NovaCore Innovations\", \"color\": \"#f07f65\", \"size\": 20}}, \"AOWmwJayFKAjAmmIlk8yOQ\": {\"label\": \"Family Doe\", \"metadata\": {\"focus\": \"target\", \"label\": \"Family Doe\", \"color\": \"#f07f65\", \"size\": 20}}, \"YlVLHV5wCROpp3hW3nbNOQ\": {\"label\": \"PhoenixRise Ventures\", \"metadata\": {\"focus\": \"controlled\", \"label\": \"PhoenixRise Ventures\", \"color\": \"#f07f65\", \"size\": 20}}, \"MYXtcytg7uj+rAyOjYhBQA\": {\"label\": \"People Bank\", \"metadata\": {\"focus\": \"controlled\", \"label\": \"People Bank\", \"color\": \"#f07f65\", \"size\": 20}}, \"uVH0cGqXVe7/eDYLCwW6XQ\": {\"label\": \"NebulaTech Solutions\", \"metadata\": {\"focus\": \"controlled\", \"label\": \"NebulaTech Solutions\", \"color\": \"#f07f65\", \"size\": 20}}, \"77IlFbWAmT0DYKSlTSVLjg\": {\"label\": \"CyberNexus Systems\", \"metadata\": {\"focus\": \"controlled\", \"label\": \"CyberNexus Systems\", \"color\": \"#f07f65\", \"size\": 20}}, \"dQIuZHbv+9dqtJ8fO/8rnA\": {\"label\": \"ACME Bank\", \"metadata\": {\"focus\": \"source\", \"label\": \"ACME Bank\", \"color\": \"#edb551\", \"size\": 20}}, \"B2ENslGgWUXwghQigOV/ng\": {\"label\": \"StellarSphere Enterprises\", \"metadata\": {\"focus\": \"controlled\", \"label\": \"StellarSphere Enterprises\", \"color\": \"#f07f65\", \"size\": 20}}, \"Lh2x5E3rMHHKwYTA4a3yyQ\": {\"label\": \"ACME Trust\", \"metadata\": {\"focus\": \"controlled\", \"label\": \"ACME Trust\", \"color\": \"#f07f65\", \"size\": 20}}, \"gb8VMWs5dsc6cteL2DOYCA\": {\"label\": \"ElysiumTech Solutions\", \"metadata\": {\"label\": \"ElysiumTech Solutions\", \"color\": \"#92979c\", \"size\": 10}}, \"DuOTZpKAvOFRrhddS9d3NA\": {\"label\": \"InfinityForge Technologies\", \"metadata\": {\"label\": \"InfinityForge Technologies\", \"color\": \"#92979c\", \"size\": 10}}, \"249BMZupWCFjqM7zue27iQ\": {\"label\": \"Quantum Dynamics Innovations\", \"metadata\": {\"label\": \"Quantum Dynamics Innovations\", \"color\": \"#92979c\", \"size\": 10}}, \"cW6S8m7PKwayYyrUFQOwnA\": {\"label\": \"Mary\", \"metadata\": {\"label\": \"Mary\", \"color\": \"#92979c\", \"size\": 10}}, \"IWkBDvnHtyJq/z5hVPdgnQ\": {\"label\": \"DreamScape Enterprises\", \"metadata\": {\"label\": \"DreamScape Enterprises\", \"color\": \"#92979c\", \"size\": 10}}, \"hZwSJYPIqnQL6SP8CAMJog\": {\"label\": \"CelestialWave Industries\", \"metadata\": {\"label\": \"CelestialWave Industries\", \"color\": \"#92979c\", \"size\": 10}}, \"sAvunE8/tDW5b4Q7IVNIwg\": {\"label\": \"Anna\", \"metadata\": {\"label\": \"Anna\", \"color\": \"#92979c\", \"size\": 10}}, \"sIMZM6956KBcjN/vk1rXzA\": {\"label\": \"Bob\", \"metadata\": {\"label\": \"Bob\", \"color\": \"#92979c\", \"size\": 10}}}, \"edges\": [{\"source\": \"AOWmwJayFKAjAmmIlk8yOQ\", \"target\": \"r1MhwkDR9RGGNg07nIf5BQ\", \"metadata\": {\"focus\": \"target\", \"color\": \"#f07f65\", \"size\": 5}}, {\"source\": \"AOWmwJayFKAjAmmIlk8yOQ\", \"target\": \"JIMOIAq9XU0WsAXPLHQRBg\", \"metadata\": {\"focus\": \"target\", \"color\": \"#f07f65\", \"size\": 5}}, {\"source\": \"AOWmwJayFKAjAmmIlk8yOQ\", \"target\": \"nToxQTWUkZ4gv4iAItXSKw\", \"metadata\": {\"focus\": \"target\", \"color\": \"#f07f65\", \"size\": 5}}, {\"source\": \"AOWmwJayFKAjAmmIlk8yOQ\", \"target\": \"YlVLHV5wCROpp3hW3nbNOQ\", \"metadata\": {\"focus\": \"target\", \"color\": \"#f07f65\", \"size\": 5}}, {\"source\": \"AOWmwJayFKAjAmmIlk8yOQ\", \"target\": \"MYXtcytg7uj+rAyOjYhBQA\", \"metadata\": {\"focus\": \"target\", \"color\": \"#f07f65\", \"size\": 5}}, {\"source\": \"AOWmwJayFKAjAmmIlk8yOQ\", \"target\": \"uVH0cGqXVe7/eDYLCwW6XQ\", \"metadata\": {\"focus\": \"target\", \"color\": \"#f07f65\", \"size\": 5}}, {\"source\": \"AOWmwJayFKAjAmmIlk8yOQ\", \"target\": \"77IlFbWAmT0DYKSlTSVLjg\", \"metadata\": {\"focus\": \"target\", \"color\": \"#f07f65\", \"size\": 5}}, {\"source\": \"AOWmwJayFKAjAmmIlk8yOQ\", \"target\": \"cW6S8m7PKwayYyrUFQOwnA\", \"metadata\": {\"focus\": \"target\", \"color\": \"#f07f65\", \"size\": 5}}, {\"source\": \"AOWmwJayFKAjAmmIlk8yOQ\", \"target\": \"B2ENslGgWUXwghQigOV/ng\", \"metadata\": {\"focus\": \"target\", \"color\": \"#f07f65\", \"size\": 5}}, {\"source\": \"AOWmwJayFKAjAmmIlk8yOQ\", \"target\": \"sAvunE8/tDW5b4Q7IVNIwg\", \"metadata\": {\"focus\": \"target\", \"color\": \"#f07f65\", \"size\": 5}}, {\"source\": \"AOWmwJayFKAjAmmIlk8yOQ\", \"target\": \"Lh2x5E3rMHHKwYTA4a3yyQ\", \"metadata\": {\"focus\": \"target\", \"color\": \"#f07f65\", \"size\": 5}}, {\"source\": \"AOWmwJayFKAjAmmIlk8yOQ\", \"target\": \"sIMZM6956KBcjN/vk1rXzA\", \"metadata\": {\"focus\": \"target\", \"color\": \"#f07f65\", \"size\": 5}}, {\"source\": \"JIMOIAq9XU0WsAXPLHQRBg\", \"target\": \"nToxQTWUkZ4gv4iAItXSKw\", \"metadata\": {\"color\": \"#92979c\", \"size\": 1}}, {\"source\": \"JIMOIAq9XU0WsAXPLHQRBg\", \"target\": \"YlVLHV5wCROpp3hW3nbNOQ\", \"metadata\": {\"color\": \"#92979c\", \"size\": 1}}, {\"source\": \"JIMOIAq9XU0WsAXPLHQRBg\", \"target\": \"uVH0cGqXVe7/eDYLCwW6XQ\", \"metadata\": {\"color\": \"#92979c\", \"size\": 1}}, {\"source\": \"JIMOIAq9XU0WsAXPLHQRBg\", \"target\": \"77IlFbWAmT0DYKSlTSVLjg\", \"metadata\": {\"color\": \"#92979c\", \"size\": 1}}, {\"source\": \"JIMOIAq9XU0WsAXPLHQRBg\", \"target\": \"B2ENslGgWUXwghQigOV/ng\", \"metadata\": {\"color\": \"#92979c\", \"size\": 1}}, {\"source\": \"YlVLHV5wCROpp3hW3nbNOQ\", \"target\": \"nToxQTWUkZ4gv4iAItXSKw\", \"metadata\": {\"color\": \"#92979c\", \"size\": 1}}, {\"source\": \"MYXtcytg7uj+rAyOjYhBQA\", \"target\": \"Lh2x5E3rMHHKwYTA4a3yyQ\", \"metadata\": {\"color\": \"#92979c\", \"size\": 1}}, {\"source\": \"B2ENslGgWUXwghQigOV/ng\", \"target\": \"nToxQTWUkZ4gv4iAItXSKw\", \"metadata\": {\"color\": \"#92979c\", \"size\": 1}}, {\"source\": \"B2ENslGgWUXwghQigOV/ng\", \"target\": \"YlVLHV5wCROpp3hW3nbNOQ\", \"metadata\": {\"color\": \"#92979c\", \"size\": 1}}, {\"source\": \"B2ENslGgWUXwghQigOV/ng\", \"target\": \"77IlFbWAmT0DYKSlTSVLjg\", \"metadata\": {\"color\": \"#92979c\", \"size\": 1}}, {\"source\": \"sIMZM6956KBcjN/vk1rXzA\", \"target\": \"MYXtcytg7uj+rAyOjYhBQA\", \"metadata\": {\"color\": \"#92979c\", \"size\": 1}}, {\"source\": \"sIMZM6956KBcjN/vk1rXzA\", \"target\": \"Lh2x5E3rMHHKwYTA4a3yyQ\", \"metadata\": {\"color\": \"#92979c\", \"size\": 1}}]}];\n",
       "            // Data selection and normalization\n",
       "            state.nodeSizeDataSource = \"size\";\n",
       "            state.useNodeSizeNormalization = false;\n",
       "            state.nodeSizeNormalizationMin = 5.0;\n",
       "            state.nodeSizeNormalizationMax = 75.0;\n",
       "            state.nodeLabelTextDataSource = \"label\";\n",
       "            state.edgeSizeDataSource = \"size\";\n",
       "            state.useEdgeSizeNormalization = false;\n",
       "            state.edgeSizeNormalizationMin = 0.2;\n",
       "            state.edgeSizeNormalizationMax = 5.0;\n",
       "            state.edgeLabelTextDataSource = \"label\";\n",
       "            // Containers\n",
       "            state.graphContainerHeight = 450;\n",
       "            state.detailsContainerHeight = 100;\n",
       "            state.showDetails = false,\n",
       "            state.showDetailsToggleButton = true,\n",
       "            state.showMenu = false,\n",
       "            state.showMenuToggleButton = true,\n",
       "            // Nodes\n",
       "            state.showNodes = true;\n",
       "            state.nodeSizeFactor = 1.0;\n",
       "            state.nodeDragFix = false;\n",
       "            state.nodeHoverNeighborhood = false;\n",
       "            state.nodeHoverTooltip = true;\n",
       "            state.showNodeImages = true;\n",
       "            state.nodeImageSizeFactor = 1.0;\n",
       "            state.showNodeLabels = true;\n",
       "            state.showNodeLabelBorders = true;\n",
       "            state.nodeLabelSizeFactor = 1.0;\n",
       "            state.nodeLabelRotation = 0.0;\n",
       "            state.nodeLabelFont = \"Arial\";\n",
       "            // Edges\n",
       "            state.showEdges = true;\n",
       "            state.edgeSizeFactor = 1.0;\n",
       "            state.edgeCurvature = 0.4;\n",
       "            state.edgeHoverTooltip = true,\n",
       "            state.showEdgeLabels = true;\n",
       "            state.showEdgeLabelBorders = true;\n",
       "            state.edgeLabelSizeFactor = 1.0;\n",
       "            state.edgeLabelRotation = 0.0;\n",
       "            state.edgeLabelFont = \"Arial\";\n",
       "            // Layout algorithm\n",
       "            state.layoutAlgorithmActive = true;\n",
       "            state.layoutAlgorithm = \"barnesHut\";\n",
       "            state.gravitationalConstant = -2000.0;\n",
       "            state.centralGravity = 0.1;\n",
       "            state.springLength = 70.0;\n",
       "            state.springConstant = 0.1;\n",
       "            state.avoidOverlap = 0.0;\n",
       "            // Other\n",
       "            state.initZoomFactor = 0.75;\n",
       "            state.largeGraphThreshold = 500;\n",
       "          },\n",
       "\n",
       "          // 2) Derive state.parsedData from state.givenData\n",
       "          rawDataParser:{\n",
       "            getBool(obj, prop, def){\n",
       "              try{\n",
       "                const value = obj[prop];\n",
       "                if(value == \"true\" || value == \"True\"){\n",
       "                  value = true;\n",
       "                } else if(value == \"false\" || value == \"False\"){\n",
       "                  value = false;\n",
       "                }\n",
       "                if(value !== true && value !== false){\n",
       "                  throw \"Invalid value. Not a bool.\";\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return def;\n",
       "              }\n",
       "              return def\n",
       "            },\n",
       "\n",
       "            getString(obj, prop, def) {\n",
       "              try{\n",
       "                const value = String(obj[prop]);\n",
       "                if(value === \"undefined\"){\n",
       "                  throw \"Invalid value. Not a proper string.\";\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return def;\n",
       "              }\n",
       "              return def;\n",
       "            },\n",
       "\n",
       "            getArrayLengthOrZero(array){\n",
       "              try{\n",
       "                const value = parseInt(array.length);\n",
       "                if(!((value + 1) > 0)){\n",
       "                  throw \"Invalid value. Not a proper length.\";\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return 0;\n",
       "              }\n",
       "            },\n",
       "\n",
       "            getObjectLengthOrZero(obj){\n",
       "              try{\n",
       "                const value = Object.keys(obj).length;\n",
       "                if(!((value + 1) > 0)){\n",
       "                  throw \"Invalid value. Not a proper length.\";\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return 0;\n",
       "              }\n",
       "            },\n",
       "\n",
       "            createUniqueEdgeId(sourceId, targetId, knownEdgeIds){\n",
       "              let newEdgeIdBase = \"(\" + sourceId + \", \" + targetId + \")\",\n",
       "                newEdgeId = newEdgeIdBase,\n",
       "                multiEdgeCounter = 1;\n",
       "              for(let i=1; knownEdgeIds.has(newEdgeId); i++){\n",
       "                newEdgeId = newEdgeIdBase + \"_\" + String(i);\n",
       "                multiEdgeCounter += 1;\n",
       "              }\n",
       "              knownEdgeIds.add(newEdgeId);\n",
       "              return {\"id\": newEdgeId, \"count\": multiEdgeCounter}\n",
       "            },\n",
       "          },\n",
       "\n",
       "          rawMetadataParser:{\n",
       "            getString(obj, prop, def){\n",
       "              try{\n",
       "                const value = String(obj.metadata[prop]);\n",
       "                if(value === \"undefined\"){\n",
       "                  throw \"Invalid value. Not a proper string.\";\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return def;\n",
       "              }\n",
       "            },\n",
       "            getShape(obj, prop, def){\n",
       "              const givenShape = state.manager.rawMetadataParser.getString(obj, prop, def);\n",
       "              let visShape = def;\n",
       "              if(givenShape === \"circle\"){\n",
       "                visShape = \"dot\";\n",
       "              } else if(givenShape === \"rectangle\"){\n",
       "                visShape = \"square\";\n",
       "              } else if(givenShape === \"hexagon\"){\n",
       "                visShape = \"hexagon\";\n",
       "              }\n",
       "              return visShape;\n",
       "            },\n",
       "            getColor(obj, prop, def){\n",
       "              function isBodyidColor(strColor) {\n",
       "                const sty = new Option().style;\n",
       "                sty.color = strColor;\n",
       "                return sty.color !== \"\";\n",
       "              }\n",
       "              try{\n",
       "                const value = obj.metadata[prop];\n",
       "                if(!isBodyidColor(value)){\n",
       "                  throw \"Invalid value. Not a color.\"\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return def;\n",
       "              }\n",
       "            },\n",
       "            getFiniteNumber(obj, prop, def){\n",
       "              try{\n",
       "                const value = parseFloat(obj.metadata[prop]);\n",
       "                if(!isFinite(value) || value === null){\n",
       "                  throw \"Invalid value. Not a finite number.\"\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return def;\n",
       "              }\n",
       "            },\n",
       "            getFiniteNumberOrNull(obj, prop, def){\n",
       "              try{\n",
       "                const value = parseFloat(obj.metadata[prop]);\n",
       "                if(!isFinite(value)){  // Note: isFinite(null) gives true\n",
       "                  throw \"Invalid value. Not a finite number or null.\"\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return def;\n",
       "              }\n",
       "            },\n",
       "            getFinitePositiveNumber(obj, prop, def){\n",
       "              try{\n",
       "                const value = parseFloat(obj.metadata[prop]);\n",
       "                if(!isFinite(value) || value === null || value < 0.0){\n",
       "                  throw \"Invalid value. Not a finite positive number.\"\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return def;\n",
       "              }\n",
       "            },\n",
       "            collectOtherMetadata(sourceObject, targetObject, definedMetadata){\n",
       "              if(typeof(sourceObject) !== \"undefined\" && typeof(sourceObject.metadata) !== \"undefined\"){\n",
       "                const properties = Object.keys(sourceObject.metadata);\n",
       "                for(let i=0; i<properties.length; i++){\n",
       "                  const property = properties[i];\n",
       "                  if(!definedMetadata.has(property)){\n",
       "                    targetObject[property] = sourceObject.metadata[property];\n",
       "                  }\n",
       "                }\n",
       "              }\n",
       "            },\n",
       "          },\n",
       "\n",
       "          propertyClassifier:{\n",
       "            numeric: null,\n",
       "            nonNumeric: null,\n",
       "            init(){\n",
       "              this.numeric = new Set(),\n",
       "              this.nonNumeric = new Set();\n",
       "            },\n",
       "            isNumeric(d){\n",
       "              return d === null || typeof(d) === \"undefined\" || String(parseFloat(d)) === String(d);\n",
       "            },\n",
       "            inspect(object, property){\n",
       "              const value = object[property];\n",
       "              if(!this.nonNumeric.has(property)){\n",
       "                if(this.isNumeric(value)){\n",
       "                  this.numeric.add(property);\n",
       "                } else{\n",
       "                  this.nonNumeric.add(property);\n",
       "                  this.numeric.delete(property);\n",
       "                }\n",
       "              }\n",
       "            }\n",
       "          },\n",
       "\n",
       "          replaceStringVariables(givenString, givenItem, variables){\n",
       "            let newString = givenString;\n",
       "            for(let i=0; i<variables.length; i++){\n",
       "              let variable = variables[i],\n",
       "                variableText = \"$\" + variable;\n",
       "              if(variable === \"x\"){\n",
       "                variable = \"fx\";\n",
       "              } else if (variable === \"y\"){\n",
       "                variable = \"fy\";\n",
       "              }\n",
       "              let insertedText = String(givenItem[variable]);\n",
       "              if(insertedText === \"undefined\"){\n",
       "                insertedText = \"\";\n",
       "              }\n",
       "              newString = newString.replace(variableText, insertedText);\n",
       "            }\n",
       "            return newString;\n",
       "          },\n",
       "\n",
       "          parseGeneral(givenData, parsedData){\n",
       "            parsedData.general = {\n",
       "              // General\n",
       "              directed: state.manager.rawDataParser.getBool(givenData, \"directed\", true),\n",
       "              label: state.manager.rawDataParser.getString(givenData, \"label\", \"\"),\n",
       "              background_color: state.manager.rawMetadataParser.getColor(givenData, \"background_color\", \"white\"),\n",
       "              arrow_color: state.manager.rawMetadataParser.getColor(givenData, \"arrow_color\", \"black\"),\n",
       "              arrow_size: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"arrow_size\", 10.0),\n",
       "              // Nodes\n",
       "              node_color: state.manager.rawMetadataParser.getColor(givenData, \"node_color\", \"black\"),\n",
       "              node_opacity: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"node_opacity\", 1.0),\n",
       "              node_size: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"node_size\", 10.0),\n",
       "              node_shape: state.manager.rawMetadataParser.getString(givenData, \"node_shape\", \"circle\"),\n",
       "              node_border_color: state.manager.rawMetadataParser.getColor(givenData, \"node_border_color\", \"black\"),\n",
       "              node_border_size: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"node_border_size\", 0.0),\n",
       "              node_label_color: state.manager.rawMetadataParser.getColor(givenData, \"node_label_color\", \"black\"),\n",
       "              node_label_size: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"node_label_size\", 12.0),\n",
       "              node_hover: state.manager.rawMetadataParser.getString(givenData, \"node_hover\", \"\"),\n",
       "              node_click: state.manager.rawMetadataParser.getString(givenData, \"node_click\", \"\"),\n",
       "              node_image: state.manager.rawMetadataParser.getString(givenData, \"node_image\", \"\"),\n",
       "              node_x: state.manager.rawMetadataParser.getFiniteNumberOrNull(givenData, \"node_x\", null),\n",
       "              node_y: state.manager.rawMetadataParser.getFiniteNumberOrNull(givenData, \"node_y\", null),\n",
       "              contains_node_hover: false,\n",
       "              contains_node_click: false,\n",
       "              contains_node_image: false,\n",
       "              // Edges\n",
       "              edge_color: state.manager.rawMetadataParser.getColor(givenData, \"edge_color\", \"black\"),\n",
       "              edge_opacity: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"edge_opacity\", 1.0),\n",
       "              edge_size: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"edge_size\", 1.0),\n",
       "              edge_label_color: state.manager.rawMetadataParser.getColor(givenData, \"edge_label_color\", \"black\"),\n",
       "              edge_label_size: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"edge_label_size\", 8.0),\n",
       "              edge_hover: state.manager.rawMetadataParser.getString(givenData, \"edge_hover\", \"\"),\n",
       "              edge_click: state.manager.rawMetadataParser.getString(givenData, \"edge_click\", \"\"),\n",
       "              contains_edge_hover: false,\n",
       "              contains_edge_click: false,\n",
       "            };\n",
       "            if(!parsedData.general.directed){\n",
       "              parsedData.general.arrow_size = 0.0;\n",
       "            }\n",
       "          },\n",
       "\n",
       "          parseNodes(givenData, parsedData){\n",
       "            const numNodes = state.manager.rawDataParser.getObjectLengthOrZero(givenData.nodes),\n",
       "              nodeIdToObjectMap = new Map(),\n",
       "              nodeDefinedMetadata = new Set(\n",
       "                [\"color\", \"opacity\", \"size\", \"shape\", \"border_color\", \"border_size\",\n",
       "                 \"label_color\", \"label_size\", \"hover\", \"click\", \"image\", \"x\", \"y\"]),\n",
       "              nodeReplacementVariables = [\n",
       "                \"id\", \"label\",\n",
       "                \"color\", \"opacity\", \"size\", \"shape\", \"border_color\", \"border_size\",\n",
       "                \"label_color\", \"label_size\", \"image\", \"x\", \"y\"];\n",
       "            state.manager.propertyClassifier.init();\n",
       "            try {\n",
       "              Object.entries(givenData.nodes);\n",
       "            }\n",
       "            catch(e){\n",
       "               givenData.nodes = {};\n",
       "            }\n",
       "            for (const [givenNodeId, givenNode] of Object.entries(givenData.nodes)) {\n",
       "              const parsedNode = {};\n",
       "              // data: id, label\n",
       "              parsedNode.id = String(givenNodeId);\n",
       "              parsedNode.label = state.manager.rawDataParser.getString(givenNode, \"label\", \"\");\n",
       "              // defined metadata\n",
       "              parsedNode.color = state.manager.rawMetadataParser.getColor(givenNode, \"color\", parsedData.general.node_color);\n",
       "              parsedNode.opacity = state.manager.rawMetadataParser.getFinitePositiveNumber(givenNode, \"opacity\", parsedData.general.node_opacity);\n",
       "              parsedNode.size = state.manager.rawMetadataParser.getFinitePositiveNumber(givenNode, \"size\", parsedData.general.node_size);\n",
       "              parsedNode.shape = state.manager.rawMetadataParser.getShape(givenNode, \"shape\", parsedData.general.node_shape);\n",
       "              parsedNode.border_color = state.manager.rawMetadataParser.getColor(givenNode, \"border_color\", parsedData.general.node_border_color);\n",
       "              parsedNode.border_size = state.manager.rawMetadataParser.getFinitePositiveNumber(givenNode, \"border_size\", parsedData.general.node_border_size);\n",
       "              parsedNode.label_color = state.manager.rawMetadataParser.getColor(givenNode, \"label_color\", parsedData.general.node_label_color);\n",
       "              parsedNode.label_size = state.manager.rawMetadataParser.getFinitePositiveNumber(givenNode, \"label_size\", parsedData.general.node_label_size);\n",
       "              const hover = state.manager.rawMetadataParser.getString(givenNode, \"hover\", parsedData.general.node_hover);\n",
       "              const image = state.manager.rawMetadataParser.getString(givenNode, \"image\", parsedData.general.node_image);\n",
       "              if(image !== \"\"){\n",
       "                parsedNode.image = image;\n",
       "                parsedData.general.contains_node_image = true;\n",
       "              }\n",
       "              if(hover !== \"\"){\n",
       "                parsedNode.hover = hover;\n",
       "                parsedData.general.contains_node_hover = true;\n",
       "              }\n",
       "              const click = state.manager.rawMetadataParser.getString(givenNode, \"click\", parsedData.general.node_click);\n",
       "              if(click !== \"\"){\n",
       "                parsedNode.click = click;\n",
       "                parsedData.general.contains_node_click = true;\n",
       "              }\n",
       "              const x = state.manager.rawMetadataParser.getFiniteNumberOrNull(givenNode, \"x\", parsedData.general.node_x);\n",
       "              const y = state.manager.rawMetadataParser.getFiniteNumberOrNull(givenNode, \"y\", parsedData.general.node_y);\n",
       "              if(x !== null){\n",
       "                parsedNode.fx = x;\n",
       "              }\n",
       "              if(y !== null){\n",
       "                parsedNode.fy = y;\n",
       "              }\n",
       "              // other metadata\n",
       "              const otherMetadata = state.manager.rawMetadataParser.collectOtherMetadata(givenNode, parsedNode, nodeDefinedMetadata);\n",
       "              // feature classification\n",
       "              const parsedNodeProperties = Object.keys(parsedNode);\n",
       "              for(let i=0; i<parsedNodeProperties.length; i++){\n",
       "                const property = parsedNodeProperties[i],\n",
       "                  value = parsedNode[property];\n",
       "                state.manager.propertyClassifier.inspect(parsedNode, property);\n",
       "              }\n",
       "              // variable replacements\n",
       "              if(parsedNode.hover){\n",
       "                parsedNode.hover = state.manager.replaceStringVariables(parsedNode.hover, parsedNode, nodeReplacementVariables);\n",
       "              }\n",
       "              if(parsedNode.click){\n",
       "                parsedNode.click = state.manager.replaceStringVariables(parsedNode.click, parsedNode, nodeReplacementVariables.concat([\"hover\"]));\n",
       "              }\n",
       "              // store the parsed node\n",
       "              parsedData.nodes.push(parsedNode);\n",
       "              // data structure for inserting node object references into edge data\n",
       "              nodeIdToObjectMap.set(parsedNode.id, parsedNode);\n",
       "            }\n",
       "            // Ensure numeric properties (except fx and fy) are stored as numbers and remember their extrema\n",
       "            const numericProperties = Array.from(state.manager.propertyClassifier.numeric).filter(name => name !== \"fx\" && name !== \"fy\"),\n",
       "              nonNumericProperties = Array.from(state.manager.propertyClassifier.nonNumeric),\n",
       "              minima = {},\n",
       "              maxima = {};\n",
       "            for(let i=0; i<numNodes; i++){\n",
       "              const parsedNode = parsedData.nodes[i];\n",
       "              for(let p=0; p<numericProperties.length; p++){\n",
       "                const property = numericProperties[p],\n",
       "                  numericValue = parseFloat(parsedNode[property]);\n",
       "                parsedNode[property] = numericValue;\n",
       "                if(isFinite(numericValue)){\n",
       "                  if(typeof(minima[property]) === \"undefined\" || numericValue < minima[property]){\n",
       "                    minima[property] = numericValue;\n",
       "                  }\n",
       "                  if(typeof(maxima[property]) === \"undefined\" || numericValue > maxima[property]){\n",
       "                    maxima[property] = numericValue;\n",
       "                  }\n",
       "                }\n",
       "              }\n",
       "            }\n",
       "            // Store feature classification and extrema\n",
       "            parsedData.general.node_properties = {\n",
       "              \"node_size_data_sources\": numericProperties,\n",
       "              \"node_label_text_data_sources\": nonNumericProperties.concat(numericProperties),\n",
       "              \"minima\": minima,\n",
       "              \"maxima\": maxima,\n",
       "            }\n",
       "            // Report empty graph\n",
       "            if(!(numNodes > 0)){\n",
       "              console.log(\"Caution: Graph with 0 nodes. The provided data might be in the wrong format.\");\n",
       "            }\n",
       "            return nodeIdToObjectMap;\n",
       "          },\n",
       "\n",
       "          parseEdges(givenData, parsedData, nodeIdToObjectMap){\n",
       "            let numEdges = state.manager.rawDataParser.getArrayLengthOrZero(givenData.edges);\n",
       "            const knownEdgeIds = new Set(),\n",
       "              ignoredEdges = [],\n",
       "              edgeDefinedMetadata = new Set(\n",
       "                [\"color\", \"opacity\", \"size\", \"label_color\", \"label_size\", \"hover\", \"click\"]),\n",
       "              edgeReplacementVariables = [\n",
       "                \"id\", \"label\",\n",
       "                \"color\", \"opacity\", \"size\", \"label_color\", \"label_size\"];\n",
       "            state.manager.propertyClassifier.init();\n",
       "            for(let i=0; i<numEdges; i++){\n",
       "              const givenEdge = givenData.edges[i],\n",
       "                parsedEdge = {},\n",
       "                sourceId = String(givenEdge.source),\n",
       "                targetId = String(givenEdge.target);\n",
       "              // data: source, target, id, multi_edge_counter, label\n",
       "              try{\n",
       "                const sourceObj = nodeIdToObjectMap.get(sourceId);\n",
       "                const targetObj = nodeIdToObjectMap.get(targetId);\n",
       "                if(typeof(sourceObj) === \"undefined\" || typeof(targetObj) === \"undefined\"){\n",
       "                  throw \"Invalid node reference.\";\n",
       "                }\n",
       "                parsedEdge.source = sourceObj;\n",
       "                parsedEdge.target = targetObj;\n",
       "              } catch(e){\n",
       "                const ignoredEdge = {\n",
       "                  index: i,\n",
       "                  source: sourceId,\n",
       "                  target: targetId,\n",
       "                }\n",
       "                ignoredEdges.push(ignoredEdge);\n",
       "                continue;\n",
       "              }\n",
       "              const result = state.manager.rawDataParser.createUniqueEdgeId(sourceId, targetId, knownEdgeIds);\n",
       "              parsedEdge.id = result.id;\n",
       "              parsedEdge.multi_edge_counter = result.count;\n",
       "              parsedEdge.label = state.manager.rawDataParser.getString(givenEdge, \"label\", \"\");\n",
       "              // defined metadata\n",
       "              parsedEdge.color = state.manager.rawMetadataParser.getColor(givenEdge, \"color\", parsedData.general.edge_color);\n",
       "              parsedEdge.opacity = state.manager.rawMetadataParser.getFinitePositiveNumber(givenEdge, \"opacity\", parsedData.general.edge_opacity);\n",
       "              parsedEdge.size = state.manager.rawMetadataParser.getFinitePositiveNumber(givenEdge, \"size\", parsedData.general.edge_size);\n",
       "              parsedEdge.label_color = state.manager.rawMetadataParser.getColor(givenEdge, \"label_color\", parsedData.general.edge_label_color);\n",
       "              parsedEdge.label_size = state.manager.rawMetadataParser.getFinitePositiveNumber(givenEdge, \"label_size\", parsedData.general.edge_label_size);\n",
       "              const hover = state.manager.rawMetadataParser.getString(givenEdge, \"hover\", parsedData.general.edge_hover);\n",
       "              if(hover !== \"\"){\n",
       "                parsedEdge.hover = hover;\n",
       "                parsedData.general.contains_edge_hover = true;\n",
       "              }\n",
       "              const click = state.manager.rawMetadataParser.getString(givenEdge, \"click\", parsedData.general.edge_click);\n",
       "              if(click !== \"\"){\n",
       "                parsedEdge.click = click;\n",
       "                parsedData.general.contains_edge_click = true;\n",
       "              }\n",
       "              // other metadata\n",
       "              const otherMetadata = state.manager.rawMetadataParser.collectOtherMetadata(givenEdge, parsedEdge, edgeDefinedMetadata);\n",
       "              // feature classification\n",
       "              const parsedEdgeProperties = Object.keys(parsedEdge);\n",
       "              for(let i=0; i<parsedEdgeProperties.length; i++){\n",
       "                const property = parsedEdgeProperties[i],\n",
       "                  value = parsedEdge[property];\n",
       "                state.manager.propertyClassifier.inspect(parsedEdge, property);\n",
       "              }\n",
       "              // variable replacements\n",
       "              if(parsedEdge.hover){\n",
       "                parsedEdge.hover = state.manager.replaceStringVariables(parsedEdge.hover, parsedEdge, edgeReplacementVariables);\n",
       "              }\n",
       "              if(parsedEdge.click){\n",
       "                parsedEdge.click = state.manager.replaceStringVariables(parsedEdge.click, parsedEdge, edgeReplacementVariables.concat([\"hover\"]));\n",
       "              }\n",
       "              // store it\n",
       "              parsedData.edges.push(parsedEdge);\n",
       "            }\n",
       "            // Ensure numeric properties are stored as numbers and remember their extrema\n",
       "            const numericProperties = Array.from(state.manager.propertyClassifier.numeric),\n",
       "              nonNumericProperties = Array.from(state.manager.propertyClassifier.nonNumeric),\n",
       "              minima = {},\n",
       "              maxima = {};\n",
       "            numEdges = state.manager.rawDataParser.getArrayLengthOrZero(parsedData.edges);\n",
       "            for(let i=0; i<numEdges; i++){\n",
       "              const parsedEdge = parsedData.edges[i];\n",
       "              for(let p=0; p<numericProperties.length; p++){\n",
       "                const property = numericProperties[p],\n",
       "                  numericValue = parseFloat(parsedEdge[property]);\n",
       "                parsedEdge[property] = numericValue;\n",
       "                if(isFinite(numericValue)){\n",
       "                  if(typeof(minima[property]) === \"undefined\" || numericValue < minima[property]){\n",
       "                    minima[property] = numericValue;\n",
       "                  }\n",
       "                  if(typeof(maxima[property]) === \"undefined\" || numericValue > maxima[property]){\n",
       "                    maxima[property] = numericValue;\n",
       "                  }\n",
       "                }\n",
       "              }\n",
       "            }\n",
       "            // Store feature classification and extrema\n",
       "            parsedData.general.edge_properties = {\n",
       "              \"edge_size_data_sources\": numericProperties.filter(item => item !== \"multi_edge_counter\"),\n",
       "              \"edge_label_text_data_sources\": nonNumericProperties.concat(numericProperties).filter(\n",
       "                item => item !== \"source\" && item !== \"target\" && item !== \"multi_edge_counter\"),\n",
       "              \"minima\": minima,\n",
       "              \"maxima\": maxima,\n",
       "            }\n",
       "            // Report invalid edges\n",
       "            if(ignoredEdges.length > 0){\n",
       "              let message = undefined;\n",
       "              if(ignoredEdges.length == 1){\n",
       "                message = \"Caution: \" + ignoredEdges.length + \" edge was ignored because it \" +\n",
       "                  \"refers to a node that is not part of the node list:\\n\";\n",
       "              } else{\n",
       "                message = \"Caution: \" + ignoredEdges.length + \" edges were ignored because they \" +\n",
       "                  \"refer to a node that is not part of the node list:\\n\";\n",
       "              }\n",
       "              for(let i=0; i<ignoredEdges.length; i++){\n",
       "                const ignoredEdge = ignoredEdges[i];\n",
       "                message += '- Edge with index ' + ignoredEdge.index;\n",
       "                message += ', source \"' + ignoredEdge.source;\n",
       "                message += '\", target \"' + ignoredEdge.target + '\"\\n';\n",
       "                if(i==9){\n",
       "                  message += '...';\n",
       "                  break;\n",
       "                }\n",
       "              }\n",
       "              console.log(message);\n",
       "            }\n",
       "          },\n",
       "\n",
       "          parseChosenData(chosenGraphNumber){\n",
       "            let givenData = state.rawData[chosenGraphNumber],\n",
       "              parsedData = {\n",
       "                general: {},\n",
       "                nodes: [],\n",
       "                edges: [],\n",
       "                adjacency: null,\n",
       "                incidence: null,\n",
       "              };\n",
       "            if(!givenData || givenData === null){\n",
       "              givenData = [];\n",
       "            }\n",
       "            // a) General\n",
       "            state.manager.parseGeneral(givenData, parsedData);\n",
       "            // b) Nodes\n",
       "            const nodeIdToObjectMap = state.manager.parseNodes(givenData, parsedData);\n",
       "            // c) Edges\n",
       "            state.manager.parseEdges(givenData, parsedData, nodeIdToObjectMap);\n",
       "            // Update state\n",
       "            state.parsedData = parsedData;\n",
       "            state.currentGraphParts = {};\n",
       "            // Update UI: show or hide containers\n",
       "            ui.elements.graphContainer.style.display = ui.convert.boolToDisplayStyle(true);\n",
       "            ui.elements.detailsContainer.style.display = ui.convert.boolToDisplayStyle(state.showDetails);\n",
       "            ui.elements.nodeImageMetaControl.style.display = ui.convert.boolToDisplayStyle(parsedData.general.contains_node_image);\n",
       "          },\n",
       "\n",
       "          // 3) Derive state.shownData from state.parsedData\n",
       "          createNodeToAdjacentNodesMap(){\n",
       "            const dataStructure = {\n",
       "              map: new Map(),\n",
       "              add(sourceNode, targetNode){\n",
       "                let adjacentNodes = this.map.get(sourceNode);\n",
       "                if(adjacentNodes){\n",
       "                  adjacentNodes.add(targetNode);\n",
       "                } else{\n",
       "                  adjacentNodes = new Set([targetNode]);\n",
       "                  this.map.set(sourceNode, adjacentNodes);\n",
       "                }\n",
       "              },\n",
       "            }\n",
       "            return dataStructure;\n",
       "          },\n",
       "\n",
       "          createNodeToIncidentEdgesMap(){\n",
       "            const dataStructure = {\n",
       "              map: new Map(),\n",
       "              add(node, edge){\n",
       "                let incidentEdges = this.map.get(node);\n",
       "                if(incidentEdges){\n",
       "                  incidentEdges.add(edge);\n",
       "                } else{\n",
       "                  incidentEdges = new Set([edge]);\n",
       "                  this.map.set(node, incidentEdges);\n",
       "                }\n",
       "              },\n",
       "            }\n",
       "            return dataStructure;\n",
       "          },\n",
       "\n",
       "          hoverTextToHtml(text) {\n",
       "            // https://visjs.github.io/vis-network/examples/network/other/html-in-titles.html\n",
       "            const div = document.createElement(\"div\");\n",
       "            div.innerHTML = text;\n",
       "            return div;\n",
       "          },\n",
       "\n",
       "          prepareShownData(){\n",
       "            const numNodes = state.parsedData.nodes.length,\n",
       "              numEdges = state.parsedData.edges.length;\n",
       "            state.shownData = {\n",
       "              \"general\": null,\n",
       "              \"nodes\": new Array(numNodes),\n",
       "              \"edges\": new Array(numEdges),\n",
       "            }\n",
       "            const nodeIdToObjectMap = new Map(),\n",
       "              nodeSizeNormalizer = state.manager.createNodeSizeNormalizer();\n",
       "            // a) General\n",
       "            state.shownData.general = {\n",
       "              \"background_color\": state.parsedData.general.background_color,\n",
       "              \"arrow_size\": state.parsedData.general.arrow_size,\n",
       "              \"arrow_color\": state.parsedData.general.arrow_color,\n",
       "              \"directed\": state.parsedData.general.directed,\n",
       "            };\n",
       "            // b) Nodes\n",
       "            for(let i=0; i<numNodes; i++){\n",
       "              state.shownData.nodes[i] = {};\n",
       "              const parsedNode = state.parsedData.nodes[i],\n",
       "                shownNode = state.shownData.nodes[i];\n",
       "              shownNode.id = parsedNode.id;\n",
       "              shownNode.label = state.manager.calcSingleNodeLabelText(parsedNode);\n",
       "              shownNode.color = parsedNode.color;\n",
       "              shownNode.opacity = parsedNode.opacity;\n",
       "              shownNode.size = state.manager.calcSingleNodeSize(parsedNode, nodeSizeNormalizer);\n",
       "              shownNode.shape = parsedNode.shape;\n",
       "              shownNode.border_color = parsedNode.border_color;\n",
       "              shownNode.border_size = parsedNode.border_size;\n",
       "              shownNode.label_color = parsedNode.label_color;\n",
       "              shownNode.label_size = state.manager.calcSingleNodeLabelSize(parsedNode);\n",
       "              if(typeof(parsedNode.image) !== \"undefined\"){\n",
       "                shownNode.image = parsedNode.image;\n",
       "              }\n",
       "              if(typeof(parsedNode.hover) !== \"undefined\"){\n",
       "                shownNode.hover = state.manager.hoverTextToHtml(parsedNode.hover);\n",
       "              }\n",
       "              if(typeof(parsedNode.click) !== \"undefined\"){\n",
       "                shownNode.click = parsedNode.click;\n",
       "              }\n",
       "              if(typeof(parsedNode.fx) !== \"undefined\"){\n",
       "                shownNode.fx = parsedNode.fx;\n",
       "              }\n",
       "              if(typeof(parsedNode.fy) !== \"undefined\"){\n",
       "                shownNode.fy = parsedNode.fy;\n",
       "              }\n",
       "              nodeIdToObjectMap.set(shownNode.id, shownNode);\n",
       "              // Derived properties for performance improvement in updateNodePositions\n",
       "              state.manager.calcSingleNodeSizeDerivatives(shownNode);\n",
       "              state.manager.calcSingleNodeBorderSizeDerivatives(shownNode);\n",
       "            }\n",
       "            // c) Edges\n",
       "            const edgeSizeNormalizer = state.manager.createEdgeSizeNormalizer(),\n",
       "              nodeToAdjacentNodesMap = state.manager.createNodeToAdjacentNodesMap(),\n",
       "              nodeToIncidentEdgesMap = state.manager.createNodeToIncidentEdgesMap();\n",
       "            for(let i=0; i<numEdges; i++){\n",
       "              state.shownData.edges[i] = {};\n",
       "              const parsedEdge = state.parsedData.edges[i],\n",
       "                shownEdge = state.shownData.edges[i];\n",
       "              shownEdge.source = nodeIdToObjectMap.get(parsedEdge.source.id);\n",
       "              shownEdge.target = nodeIdToObjectMap.get(parsedEdge.target.id);\n",
       "              shownEdge.id = parsedEdge.id;\n",
       "              shownEdge.label = state.manager.calcSingleEdgeLabelText(parsedEdge);\n",
       "              shownEdge.color = parsedEdge.color;\n",
       "              shownEdge.opacity = parsedEdge.opacity;\n",
       "              shownEdge.size = state.manager.calcSingleEdgeSize(parsedEdge, edgeSizeNormalizer);\n",
       "              shownEdge.label_color = parsedEdge.label_color;\n",
       "              shownEdge.label_size = state.manager.calcSingleEdgeLabelSize(parsedEdge);\n",
       "              if(typeof(parsedEdge.hover) !== \"undefined\"){\n",
       "                shownEdge.hover = state.manager.hoverTextToHtml(parsedEdge.hover);\n",
       "              }\n",
       "              if(typeof(parsedEdge.click) !== \"undefined\"){\n",
       "                shownEdge.click = parsedEdge.click;\n",
       "              }\n",
       "              // Derived properties for performance improvement in updateEdgePositions\n",
       "              shownEdge.multiEdgeCurvatureFactor = state.manager.calcSingleEdgeCurvatureFactor(parsedEdge);\n",
       "              // Data structure for highlighting adjacent nodes and incident edges to this node\n",
       "              nodeToAdjacentNodesMap.add(shownEdge.source, shownEdge.target);\n",
       "              nodeToAdjacentNodesMap.add(shownEdge.target, shownEdge.source);\n",
       "              nodeToIncidentEdgesMap.add(shownEdge.source, shownEdge);\n",
       "              nodeToIncidentEdgesMap.add(shownEdge.target, shownEdge);\n",
       "            }\n",
       "            state.shownData.adjacency = nodeToAdjacentNodesMap;\n",
       "            state.shownData.incidence = nodeToIncidentEdgesMap;\n",
       "          },\n",
       "\n",
       "          calcSingleNodeSize(parsedNode, nodeSizeNormalizer){\n",
       "            const appearanceAdaptionFactor = 0.5;\n",
       "            let nodeSize = nodeSizeNormalizer(parsedNode[state.nodeSizeDataSource]);\n",
       "            if(!isFinite(nodeSize)){\n",
       "              nodeSize = state.parsedData.general.node_size;\n",
       "            }\n",
       "            return nodeSize * state.nodeSizeFactor * appearanceAdaptionFactor;\n",
       "          },\n",
       "\n",
       "          calcSingleNodeSizeDerivatives(shownNode){\n",
       "            shownNode.image_size = shownNode.size / 1.42 * state.nodeImageSizeFactor;\n",
       "          },\n",
       "\n",
       "          calcSingleNodeLabelText(parsedNode){\n",
       "            return String(parsedNode[state.nodeLabelTextDataSource]);\n",
       "          },\n",
       "\n",
       "          calcSingleNodeLabelSize(parsedNode){\n",
       "            return parsedNode.label_size * state.nodeLabelSizeFactor;\n",
       "          },\n",
       "\n",
       "          calcSingleEdgeSize(parsedEdge, edgeSizeNormalizer){\n",
       "            let edgeSize = edgeSizeNormalizer(parsedEdge[state.edgeSizeDataSource]);\n",
       "            if(!isFinite(edgeSize)){\n",
       "              edgeSize = state.parsedData.general.edge_size;\n",
       "            }\n",
       "            return edgeSize * state.edgeSizeFactor;\n",
       "          },\n",
       "\n",
       "          calcSingleEdgeCurvatureFactor(parsedEdge){\n",
       "            // Caution: Currently a single value is used for all edges instead of these here\n",
       "            const appearanceAdaptionFactor = 0.5;\n",
       "            return state.edgeCurvature * parsedEdge.multiEdgeCounter * appearanceAdaptionFactor;\n",
       "          },\n",
       "\n",
       "          calcSingleEdgeLabelText(parsedEdge){\n",
       "            return String(parsedEdge[state.edgeLabelTextDataSource]);\n",
       "          },\n",
       "\n",
       "          calcSingleEdgeLabelSize(parsedEdge){\n",
       "            return parsedEdge.label_size * state.edgeLabelSizeFactor;\n",
       "          },\n",
       "\n",
       "          calcSingleNodeBorderSizeDerivatives(shownNode){\n",
       "            shownNode.border_size_half = shownNode.border_size / 2.0;\n",
       "          },\n",
       "\n",
       "          createNodeSizeNormalizer(){\n",
       "            let normalizer;\n",
       "            if(state.useNodeSizeNormalization){\n",
       "              const dataMin = state.parsedData.general.node_properties.minima[state.nodeSizeDataSource],\n",
       "                dataMax = state.parsedData.general.node_properties.maxima[state.nodeSizeDataSource],\n",
       "                targetMin = state.nodeSizeNormalizationMin,\n",
       "                targetMax = state.nodeSizeNormalizationMax,\n",
       "                dataDiff = dataMax - dataMin,\n",
       "                targetDiff = targetMax - targetMin;\n",
       "              let factor = targetDiff / dataDiff;\n",
       "              if(!isFinite(factor) || factor === null){\n",
       "                factor = 0.0;\n",
       "              }\n",
       "              normalizer = function(val){\n",
       "                return (val - dataMin) * factor + targetMin;\n",
       "              }\n",
       "            } else{\n",
       "              normalizer = function(val){\n",
       "                return val;\n",
       "              }\n",
       "            }\n",
       "            return normalizer;\n",
       "          },\n",
       "\n",
       "          createEdgeSizeNormalizer(){\n",
       "            let normalizer;\n",
       "            if(state.useEdgeSizeNormalization){\n",
       "              const dataMin = state.parsedData.general.edge_properties.minima[state.edgeSizeDataSource],\n",
       "                dataMax = state.parsedData.general.edge_properties.maxima[state.edgeSizeDataSource],\n",
       "                targetMin = state.edgeSizeNormalizationMin,\n",
       "                targetMax = state.edgeSizeNormalizationMax,\n",
       "                dataDiff = dataMax - dataMin,\n",
       "                targetDiff = targetMax - targetMin;\n",
       "              let factor = targetDiff / dataDiff;\n",
       "              if(!isFinite(factor)){\n",
       "                factor = 0.0;\n",
       "              }\n",
       "              normalizer = function(val){\n",
       "                return (val - dataMin) * factor + targetMin;\n",
       "              }\n",
       "            } else{\n",
       "              normalizer = function(val){\n",
       "                return val;\n",
       "              }\n",
       "            }\n",
       "            return normalizer;\n",
       "          },\n",
       "\n",
       "          updateNodeSizes(){\n",
       "            // Data\n",
       "            const nodeSizeNormalizer = state.manager.createNodeSizeNormalizer();\n",
       "            for(let i=0; i<state.parsedData.nodes.length; i++){\n",
       "              const parsedNode = state.parsedData.nodes[i],\n",
       "                shownNode = state.shownData.nodes[i];\n",
       "              shownNode.size = state.manager.calcSingleNodeSize(parsedNode, nodeSizeNormalizer);\n",
       "              state.manager.calcSingleNodeSizeDerivatives(shownNode);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateNodeSizes();\n",
       "          },\n",
       "\n",
       "          updateNodeLabelTexts(){\n",
       "            // Data\n",
       "            for(let i=0; i<state.parsedData.nodes.length; i++){\n",
       "              const parsedNode = state.parsedData.nodes[i],\n",
       "                shownNode = state.shownData.nodes[i];\n",
       "              shownNode.label = state.manager.calcSingleNodeLabelText(parsedNode);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateNodeLabels();\n",
       "          },\n",
       "\n",
       "          updateNodeLabelSizes(){\n",
       "            // Data\n",
       "            for(let i=0; i<state.parsedData.nodes.length; i++){\n",
       "              const parsedNode = state.parsedData.nodes[i],\n",
       "                shownNode = state.shownData.nodes[i];\n",
       "              shownNode.label_size = state.manager.calcSingleNodeLabelSize(parsedNode);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateNodeLabels();\n",
       "          },\n",
       "\n",
       "          updateNodeImages(){\n",
       "            // Data\n",
       "            for(let i=0; i<state.parsedData.nodes.length; i++){\n",
       "              const parsedNode = state.parsedData.nodes[i],\n",
       "                shownNode = state.shownData.nodes[i];\n",
       "              state.manager.calcSingleNodeSizeDerivatives(shownNode);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateNodeImages();\n",
       "          },\n",
       "\n",
       "          updateEdgeSizes(){\n",
       "            // Data\n",
       "            const edgeSizeNormalizer = state.manager.createEdgeSizeNormalizer();\n",
       "            for(let i=0; i<state.parsedData.edges.length; i++){\n",
       "              const parsedEdge = state.parsedData.edges[i],\n",
       "                shownEdge = state.shownData.edges[i];\n",
       "              shownEdge.size = state.manager.calcSingleEdgeSize(parsedEdge, edgeSizeNormalizer);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateEdgeSizes();\n",
       "          },\n",
       "\n",
       "          updateEdgeCurvatures(){\n",
       "            // Data\n",
       "            for(let i=0; i<state.parsedData.edges.length; i++){\n",
       "              const parsedEdge = state.parsedData.edges[i],\n",
       "                shownEdge = state.shownData.edges[i];\n",
       "              shownEdge.multiEdgeCurvatureFactor = state.manager.calcSingleEdgeCurvatureFactor(parsedEdge);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateEdgeCurvatures();\n",
       "          },\n",
       "\n",
       "          updateEdgeLabelTexts(){\n",
       "            // Data\n",
       "            for(let i=0; i<state.parsedData.edges.length; i++){\n",
       "              const parsedEdge = state.parsedData.edges[i],\n",
       "                shownEdge = state.shownData.edges[i];\n",
       "              shownEdge.label = state.manager.calcSingleEdgeLabelText(parsedEdge);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateEdgeLabels();\n",
       "          },\n",
       "\n",
       "          updateEdgeLabelSizes(){\n",
       "            // Data\n",
       "            for(let i=0; i<state.parsedData.edges.length; i++){\n",
       "              const parsedEdge = state.parsedData.edges[i],\n",
       "                shownEdge = state.shownData.edges[i];\n",
       "              shownEdge.label_size = state.manager.calcSingleEdgeLabelSize(parsedEdge);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateEdgeLabels();\n",
       "          },\n",
       "        }\n",
       "      }\n",
       "\n",
       "      const ui = {\n",
       "        symbols:{\n",
       "          // Choice of symbols is influenced by their appearance in different browsers\n",
       "          // Alternatives: \"▼\", \"▽\", \"▾\" / \"▲\", \"△\", \"▴\" / \"▶\", \"▷\", \"▸\" / \"◀\", \"◁\", \"◂\"\n",
       "          // ▶ is rendered strangely on some mobile phone browsers, ▸ remains normal\n",
       "          detailsShown: \"▾\",\n",
       "          detailsHidden: \"▴\",\n",
       "          menuShown: \"▸\",\n",
       "          menuHidden: \"◂\",\n",
       "          menuItemActive: \"▸\",\n",
       "          menuItemInactive: \"▾\",\n",
       "        },\n",
       "\n",
       "        elements:{\n",
       "          // Containers\n",
       "          mainContainer: document.getElementById(\"iOm92LxjhHNLGxz9O-main-div\"),\n",
       "          tooltipContainer: document.getElementById(\"iOm92LxjhHNLGxz9O-tooltip-div\"),\n",
       "          leftContainer: document.getElementById(\"iOm92LxjhHNLGxz9O-left-div\"),\n",
       "          rightContainer: document.getElementById(\"iOm92LxjhHNLGxz9O-right-div\"),\n",
       "          graphContainer: document.getElementById(\"iOm92LxjhHNLGxz9O-graph-div\"),\n",
       "          detailsContainer: document.getElementById(\"iOm92LxjhHNLGxz9O-details-div\"),\n",
       "          detailsHead: document.getElementById(\"iOm92LxjhHNLGxz9O-details-head\"),\n",
       "          detailsBody: document.getElementById(\"iOm92LxjhHNLGxz9O-details-body\"),\n",
       "          // Data sources\n",
       "          dataHead: document.getElementById(\"iOm92LxjhHNLGxz9O-data-head\"),\n",
       "          dataBody: document.getElementById(\"iOm92LxjhHNLGxz9O-data-body\"),\n",
       "          graphSelectionContainer: document.getElementById(\"iOm92LxjhHNLGxz9O-graph-select-div\"),\n",
       "          graphSelection: document.getElementById(\"iOm92LxjhHNLGxz9O-graph-select\"),\n",
       "          nodeSizeDataSourceSelect: document.getElementById(\"iOm92LxjhHNLGxz9O-node-size-data-source-select\"),\n",
       "          nodeSizeNormalizationCheckbox: document.getElementById(\"iOm92LxjhHNLGxz9O-node-size-normalization-checkbox\"),\n",
       "          nodeSizeNormalizationContainer: document.getElementById(\"iOm92LxjhHNLGxz9O-node-size-norm-div\"),\n",
       "          nodeSizeNormalizationMinText: document.getElementById(\"iOm92LxjhHNLGxz9O-node-size-normalization-min-text\"),\n",
       "          nodeSizeNormalizationMinSlider: document.getElementById(\"iOm92LxjhHNLGxz9O-node-size-normalization-min-slider\"),\n",
       "          nodeSizeNormalizationMaxText: document.getElementById(\"iOm92LxjhHNLGxz9O-node-size-normalization-max-text\"),\n",
       "          nodeSizeNormalizationMaxSlider: document.getElementById(\"iOm92LxjhHNLGxz9O-node-size-normalization-max-slider\"),\n",
       "          edgeSizeDataSourceSelect: document.getElementById(\"iOm92LxjhHNLGxz9O-edge-size-data-source-select\"),\n",
       "          edgeSizeNormalizationCheckbox: document.getElementById(\"iOm92LxjhHNLGxz9O-edge-size-normalization-checkbox\"),\n",
       "          edgeSizeNormalizationContainer: document.getElementById(\"iOm92LxjhHNLGxz9O-edge-size-norm-div\"),\n",
       "          edgeSizeNormalizationMinText: document.getElementById(\"iOm92LxjhHNLGxz9O-edge-size-normalization-min-text\"),\n",
       "          edgeSizeNormalizationMinSlider: document.getElementById(\"iOm92LxjhHNLGxz9O-edge-size-normalization-min-slider\"),\n",
       "          edgeSizeNormalizationMaxText: document.getElementById(\"iOm92LxjhHNLGxz9O-edge-size-normalization-max-text\"),\n",
       "          edgeSizeNormalizationMaxSlider: document.getElementById(\"iOm92LxjhHNLGxz9O-edge-size-normalization-max-slider\"),\n",
       "          // General\n",
       "          generalHead: document.getElementById(\"iOm92LxjhHNLGxz9O-general-head\"),\n",
       "          generalBody: document.getElementById(\"iOm92LxjhHNLGxz9O-general-body\"),\n",
       "          resetButton: document.getElementById(\"iOm92LxjhHNLGxz9O-reset\"),\n",
       "          fullscreenButton: document.getElementById(\"iOm92LxjhHNLGxz9O-fullscreen-button\"),\n",
       "          svgExportButton: document.getElementById(\"iOm92LxjhHNLGxz9O-svg\"),\n",
       "          pngExportButton: document.getElementById(\"iOm92LxjhHNLGxz9O-png\"),\n",
       "          jpgExportButton: document.getElementById(\"iOm92LxjhHNLGxz9O-jpg\"),\n",
       "          // Nodes\n",
       "          nodeHead: document.getElementById(\"iOm92LxjhHNLGxz9O-node-head\"),\n",
       "          nodeBody: document.getElementById(\"iOm92LxjhHNLGxz9O-node-body\"),\n",
       "          nodeCheckbox: document.getElementById(\"iOm92LxjhHNLGxz9O-node-checkbox\"),\n",
       "          nodeSizeFactorText: document.getElementById(\"iOm92LxjhHNLGxz9O-node-size-factor-text\"),\n",
       "          nodeSizeFactorSlider: document.getElementById(\"iOm92LxjhHNLGxz9O-node-size-factor-slider\"),\n",
       "          nodeDragFixCheckbox: document.getElementById(\"iOm92LxjhHNLGxz9O-node-drag-fix-checkbox\"),\n",
       "          nodeHoverNeighborhoodCheckbox: document.getElementById(\"iOm92LxjhHNLGxz9O-node-hover-neighborhood-checkbox\"),\n",
       "          nodeHoverTooltipCheckbox: document.getElementById(\"iOm92LxjhHNLGxz9O-node-hover-tooltip-checkbox\"),\n",
       "          nodeReleaseButton: document.getElementById(\"iOm92LxjhHNLGxz9O-node-release-button\"),\n",
       "          // Node images\n",
       "          nodeImageHead: document.getElementById(\"iOm92LxjhHNLGxz9O-node-image-head\"),\n",
       "          nodeImageBody: document.getElementById(\"iOm92LxjhHNLGxz9O-node-image-body\"),\n",
       "          nodeImageCheckbox: document.getElementById(\"iOm92LxjhHNLGxz9O-node-image-checkbox\"),\n",
       "          nodeImageMetaControl: document.getElementById(\"iOm92LxjhHNLGxz9O-node-image-meta-control\"),\n",
       "          nodeImageSizeFactorText: document.getElementById(\"iOm92LxjhHNLGxz9O-node-image-size-factor-text\"),\n",
       "          nodeImageSizeFactorSlider: document.getElementById(\"iOm92LxjhHNLGxz9O-node-image-size-factor-slider\"),\n",
       "          // Node labels\n",
       "          nodeLabelHead: document.getElementById(\"iOm92LxjhHNLGxz9O-node-label-head\"),\n",
       "          nodeLabelBody: document.getElementById(\"iOm92LxjhHNLGxz9O-node-label-body\"),\n",
       "          nodeLabelCheckbox: document.getElementById(\"iOm92LxjhHNLGxz9O-node-label-checkbox\"),\n",
       "          nodeLabelBorderCheckbox: document.getElementById(\"iOm92LxjhHNLGxz9O-node-label-border-checkbox\"),\n",
       "          nodeLabelTextDataSourceSelect: document.getElementById(\"iOm92LxjhHNLGxz9O-node-label-data-source-select\"),\n",
       "          nodeLabelSizeFactorText: document.getElementById(\"iOm92LxjhHNLGxz9O-node-label-size-factor-text\"),\n",
       "          nodeLabelSizeFactorSlider: document.getElementById(\"iOm92LxjhHNLGxz9O-node-label-size-factor-slider\"),\n",
       "          nodeLabelRotationText: document.getElementById(\"iOm92LxjhHNLGxz9O-node-label-rotation-text\"),\n",
       "          nodeLabelRotationSlider: document.getElementById(\"iOm92LxjhHNLGxz9O-node-label-rotation-slider\"),\n",
       "          // Edges\n",
       "          edgeHead: document.getElementById(\"iOm92LxjhHNLGxz9O-edge-head\"),\n",
       "          edgeBody: document.getElementById(\"iOm92LxjhHNLGxz9O-edge-body\"),\n",
       "          edgeCheckbox: document.getElementById(\"iOm92LxjhHNLGxz9O-edge-checkbox\"),\n",
       "          edgeSizeFactorText: document.getElementById(\"iOm92LxjhHNLGxz9O-edge-size-factor-text\"),\n",
       "          edgeSizeFactorSlider: document.getElementById(\"iOm92LxjhHNLGxz9O-edge-size-factor-slider\"),\n",
       "          edgeCurvatureText: document.getElementById(\"iOm92LxjhHNLGxz9O-edge-curvature-text\"),\n",
       "          edgeCurvatureSlider: document.getElementById(\"iOm92LxjhHNLGxz9O-edge-curvature-slider\"),\n",
       "          edgeHoverTooltipCheckbox: document.getElementById(\"iOm92LxjhHNLGxz9O-edge-hover-tooltip-checkbox\"),\n",
       "          // Edge labels\n",
       "          edgeLabelHead: document.getElementById(\"iOm92LxjhHNLGxz9O-edge-label-head\"),\n",
       "          edgeLabelBody: document.getElementById(\"iOm92LxjhHNLGxz9O-edge-label-body\"),\n",
       "          edgeLabelCheckbox: document.getElementById(\"iOm92LxjhHNLGxz9O-edge-label-checkbox\"),\n",
       "          edgeLabelBorderCheckbox: document.getElementById(\"iOm92LxjhHNLGxz9O-edge-label-border-checkbox\"),\n",
       "          edgeLabelTextDataSourceSelect: document.getElementById(\"iOm92LxjhHNLGxz9O-edge-label-data-source-select\"),\n",
       "          edgeLabelSizeFactorText: document.getElementById(\"iOm92LxjhHNLGxz9O-edge-label-size-factor-text\"),\n",
       "          edgeLabelSizeFactorSlider: document.getElementById(\"iOm92LxjhHNLGxz9O-edge-label-size-factor-slider\"),\n",
       "          edgeLabelRotationText: document.getElementById(\"iOm92LxjhHNLGxz9O-edge-label-rotation-text\"),\n",
       "          edgeLabelRotationSlider: document.getElementById(\"iOm92LxjhHNLGxz9O-edge-label-rotation-slider\"),\n",
       "          // Layout algorithm\n",
       "          layoutAlgorithmHead: document.getElementById(\"iOm92LxjhHNLGxz9O-layout-algorithm-head\"),\n",
       "          layoutAlgorithmBody: document.getElementById(\"iOm92LxjhHNLGxz9O-layout-algorithm-body\"),\n",
       "          simulationCheckbox: document.getElementById(\"iOm92LxjhHNLGxz9O-simulation-active-checkbox\"),\n",
       "          layoutAlgorithmSelection: document.getElementById(\"iOm92LxjhHNLGxz9O-layout-algorithm-select\"),\n",
       "          centralGravitySlider: document.getElementById(\"iOm92LxjhHNLGxz9O-central-gravity-slider\"),\n",
       "          centralGravityText: document.getElementById(\"iOm92LxjhHNLGxz9O-central-gravity-text\"),\n",
       "          springLengthSlider: document.getElementById(\"iOm92LxjhHNLGxz9O-spring-length-slider\"),\n",
       "          springLengthText: document.getElementById(\"iOm92LxjhHNLGxz9O-spring-length-text\"),\n",
       "          springConstantSlider: document.getElementById(\"iOm92LxjhHNLGxz9O-spring-constant-slider\"),\n",
       "          springConstantText: document.getElementById(\"iOm92LxjhHNLGxz9O-spring-constant-text\"),\n",
       "          gravitationalConstantContainer: document.getElementById(\"iOm92LxjhHNLGxz9O-gravitational-constant-div\"),\n",
       "          gravitationalConstantSlider: document.getElementById(\"iOm92LxjhHNLGxz9O-gravitational-constant-slider\"),\n",
       "          gravitationalConstantText: document.getElementById(\"iOm92LxjhHNLGxz9O-gravitational-constant-text\"),\n",
       "          avoidOverlapContainer: document.getElementById(\"iOm92LxjhHNLGxz9O-avoid-overlap-div\"),\n",
       "          avoidOverlapSlider: document.getElementById(\"iOm92LxjhHNLGxz9O-avoid-overlap-slider\"),\n",
       "          avoidOverlapText: document.getElementById(\"iOm92LxjhHNLGxz9O-avoid-overlap-text\"),\n",
       "        },\n",
       "\n",
       "        composites:{\n",
       "          responsiveContainer:{\n",
       "            init(){\n",
       "              // Delete all contained items (relevant only for reset, not first creation)\n",
       "              ui.deleteChildElements(ui.elements.graphContainer);\n",
       "              ui.deleteChildElements(ui.elements.detailsBody);\n",
       "              // Menu\n",
       "              if(state.showMenu){\n",
       "                ui.composites.menu.show();\n",
       "              } else{\n",
       "                ui.composites.menu.hide();\n",
       "              }\n",
       "              // Details\n",
       "              if(state.showDetails){\n",
       "                ui.composites.details.show(true);\n",
       "              } else{\n",
       "                ui.composites.details.hide(true);\n",
       "              }\n",
       "              // Divs\n",
       "              ui.composites.responsiveContainer.setInnerHeights();\n",
       "              ui.composites.responsiveContainer.setOuterHeights();\n",
       "              ui.composites.responsiveContainer.getInnerWidths();\n",
       "            },\n",
       "\n",
       "            getInnerWidths(){\n",
       "              state.graphContainerWidth = parseInt(ui.elements.graphContainer.clientWidth);\n",
       "              state.detailsContainerWidth = parseInt(ui.elements.detailsContainer.clientWidth);\n",
       "            },\n",
       "\n",
       "            getInnerHeights(){\n",
       "              state.graphContainerHeight = parseInt(ui.elements.graphContainer.clientHeight);\n",
       "              if(state.showDetails){\n",
       "                state.detailsContainerHeight = parseInt(ui.elements.detailsContainer.clientHeight);\n",
       "              }\n",
       "            },\n",
       "\n",
       "            setInnerHeights(){\n",
       "              ui.elements.graphContainer.style.height = state.graphContainerHeight + \"px\";\n",
       "              ui.elements.detailsContainer.style.height = state.detailsContainerHeight + \"px\";\n",
       "            },\n",
       "\n",
       "            setOuterHeights(){\n",
       "              ui.elements.mainContainer.style.height = ui.elements.leftContainer.offsetHeight + \"px\";\n",
       "            },\n",
       "\n",
       "            getSizes(){\n",
       "              ui.composites.responsiveContainer.getInnerWidths();\n",
       "              ui.composites.responsiveContainer.getInnerHeights();\n",
       "            },\n",
       "\n",
       "            setSizes(){\n",
       "              ui.composites.responsiveContainer.setInnerHeights();\n",
       "              ui.composites.responsiveContainer.setOuterHeights();\n",
       "            },\n",
       "\n",
       "            adaptToResize(){\n",
       "              ui.composites.responsiveContainer.getSizes();\n",
       "              ui.composites.responsiveContainer.setSizes();\n",
       "            },\n",
       "\n",
       "            adaptToFullscreen(){\n",
       "              ui.composites.responsiveContainer.getSizes();\n",
       "              if(document.fullscreenElement){\n",
       "                // On entering fullscreen, remember the current container heights\n",
       "                state.beforeFullscreenGraphContainerHeight = state.graphContainerHeight;\n",
       "                state.beforeFullscreenDetailsContainerHeight = state.detailsContainerHeight;\n",
       "                // and then adapt them to maximum height possible in full screen mode\n",
       "                function calculateFullscreenMaxGraphHeight(){\n",
       "                  let outerHeight = null;\n",
       "                  try{\n",
       "                    const mainDivComputedStyle = window.getComputedStyle(ui.elements.mainContainer),\n",
       "                      graphDivComputedStyle = window.getComputedStyle(ui.elements.graphContainer),\n",
       "                      paddingTop = parseFloat(mainDivComputedStyle.paddingTop),\n",
       "                      borderTop = parseFloat(graphDivComputedStyle.borderTopWidth),\n",
       "                      borderBottom = parseFloat(graphDivComputedStyle.borderBottomWidth),\n",
       "                      paddingBottom = parseFloat(mainDivComputedStyle.paddingBottom);\n",
       "                    outerHeight = paddingTop + borderTop + borderBottom + paddingBottom;\n",
       "                    if(!isFinite(outerHeight) || outerHeight === null){\n",
       "                      throw \"Invalid number\";\n",
       "                    }\n",
       "                  } catch(e){\n",
       "                    // Hard coded fallback, depends on CSS of containers (1px borders, 6px padding)\n",
       "                    outerHeight = 1 + 3 + 3 + 1;\n",
       "                  }\n",
       "                  let graphHeight = screen.height - outerHeight;\n",
       "                  if(state.showDetails){\n",
       "                    graphHeight -= ui.composites.details.calculateHeightDifference();\n",
       "                  }\n",
       "                  return graphHeight;\n",
       "                }\n",
       "                state.graphContainerHeight = calculateFullscreenMaxGraphHeight();\n",
       "              } else{\n",
       "                // On leaving fullscreen, set container heights back to remembered values\n",
       "                state.graphContainerHeight = state.beforeFullscreenGraphContainerHeight;\n",
       "                state.detailsContainerHeight = state.beforeFullscreenDetailsContainerHeight;\n",
       "              }\n",
       "              ui.composites.responsiveContainer.setSizes();\n",
       "            },\n",
       "          },\n",
       "\n",
       "          menu:{\n",
       "            show(){\n",
       "              ui.elements.leftContainer.style.width = \"80%\";\n",
       "              ui.elements.rightContainer.style.width = \"20%\";\n",
       "              ui.elements.rightContainer.style.display = \"block\";\n",
       "            },\n",
       "\n",
       "            hide(){\n",
       "              ui.elements.leftContainer.style.width = \"100%\";\n",
       "              ui.elements.rightContainer.style.width = \"0%\";\n",
       "              ui.elements.rightContainer.style.display = \"none\";\n",
       "            },\n",
       "\n",
       "            toggle(){\n",
       "              // Update menu button\n",
       "              const div = ui.elements.menuToggleDiv;\n",
       "              state.showMenu = !state.showMenu;\n",
       "              if(state.showMenu){\n",
       "                div.innerText = ui.symbols.menuShown;\n",
       "                ui.composites.menu.show();\n",
       "              } else {\n",
       "                div.innerHTML = ui.symbols.menuHidden;\n",
       "                ui.composites.menu.hide();\n",
       "              }\n",
       "\n",
       "              // Update rest of UI\n",
       "              ui.composites.responsiveContainer.getInnerWidths();\n",
       "              ui.composites.responsiveContainer.getInnerHeights();\n",
       "              ui.composites.responsiveContainer.setOuterHeights();\n",
       "              ui.composites.graph.updateGraphDrawingArea();\n",
       "            },\n",
       "\n",
       "            setItem(keyElement, valElement, toActive){\n",
       "              const currentText = keyElement.innerHTML;\n",
       "              let sliceStart = 0;\n",
       "              if(currentText.startsWith(ui.symbols.menuItemActive)){\n",
       "                sliceStart = ui.symbols.menuItemActive.length;\n",
       "              } else if (currentText.startsWith(ui.symbols.menuItemInactive)){\n",
       "                sliceStart = ui.symbols.menuItemInactive.length;\n",
       "              }\n",
       "              if(toActive){\n",
       "                keyElement.innerHTML = ui.symbols.menuItemActive + currentText.slice(sliceStart);\n",
       "                keyElement.style.backgroundColor = \"#f5f5f5\";\n",
       "                keyElement.style.color = \"black\";\n",
       "                keyElement.style.borderColor = \"#999\";\n",
       "                keyElement.style.boxShadow = \"0px 0px 3px rgba(0, 0, 0, 0.35)\";\n",
       "                valElement.style.display = \"block\";\n",
       "              } else {\n",
       "                keyElement.innerHTML = ui.symbols.menuItemInactive + currentText.slice(sliceStart);\n",
       "                keyElement.style.backgroundColor = \"white\";\n",
       "                keyElement.style.color = \"#222\";\n",
       "                keyElement.style.borderColor = \"#ccc\";\n",
       "                keyElement.style.boxShadow = \"0px 0px 3px rgba(0, 0, 0, 0.2)\";\n",
       "                valElement.style.display = \"none\";\n",
       "              }\n",
       "            },\n",
       "\n",
       "            toggleItem(keyElement, valElement){\n",
       "              const toActive = !(valElement.style.display !== \"none\");\n",
       "              ui.composites.menu.setItem(keyElement, valElement, toActive);\n",
       "            },\n",
       "          },\n",
       "\n",
       "          details:{\n",
       "            calculateHeightDifference(){\n",
       "              let outerHeight = null;\n",
       "              try{\n",
       "                const graphContainerComputedStyle = window.getComputedStyle(ui.elements.graphContainer),\n",
       "                  detailsContainerComputedStyle = window.getComputedStyle(ui.elements.detailsContainer),\n",
       "                  border1 = parseFloat(graphContainerComputedStyle.borderBottomWidth),\n",
       "                  margin = parseFloat(detailsContainerComputedStyle.marginTop),\n",
       "                  border2 = parseFloat(detailsContainerComputedStyle.borderTopWidth);\n",
       "                outerHeight = border1 + margin + border2;\n",
       "                if(!isFinite(outerHeight) || outerHeight === null){\n",
       "                  throw \"Invalid number\";\n",
       "                }\n",
       "              } catch(e){\n",
       "                // Hard coded fallback, depends on CSS of containers (1px borders, 5px margin)\n",
       "                outerHeight = 7.0;\n",
       "              }\n",
       "              return state.detailsContainerHeight + outerHeight\n",
       "            },\n",
       "\n",
       "            show(init=false){\n",
       "              // Visibility\n",
       "              ui.elements.detailsContainer.style.display = \"block\";\n",
       "              if(!init){\n",
       "                // Height\n",
       "                const heightDiff = ui.composites.details.calculateHeightDifference();\n",
       "                state.graphContainerHeight -= heightDiff;\n",
       "                if(state.graphContainerHeight < 70){\n",
       "                  state.graphContainerHeight = 70;\n",
       "                }\n",
       "                // Update rest of UI\n",
       "                ui.composites.responsiveContainer.setSizes();\n",
       "                ui.composites.graph.updateGraphDrawingArea();\n",
       "              }\n",
       "            },\n",
       "\n",
       "            hide(init=false){\n",
       "              // Visibility\n",
       "              ui.elements.detailsContainer.style.display = \"none\";\n",
       "              if(!init){\n",
       "                // Height\n",
       "                const heightDiff = ui.composites.details.calculateHeightDifference();\n",
       "                state.graphContainerHeight += heightDiff;\n",
       "                // Update rest of UI\n",
       "                ui.composites.responsiveContainer.setSizes();\n",
       "                ui.composites.graph.updateGraphDrawingArea();\n",
       "              }\n",
       "            },\n",
       "\n",
       "            toggle(){\n",
       "              // Update details button\n",
       "              const toggleDiv = ui.elements.detailsToggleDiv;\n",
       "              state.showDetails = !state.showDetails;\n",
       "              if(state.showDetails){\n",
       "                toggleDiv.innerText = ui.symbols.detailsShown;\n",
       "                ui.composites.details.show();\n",
       "              } else {\n",
       "                toggleDiv.innerHTML = ui.symbols.detailsHidden;\n",
       "                ui.composites.details.hide();\n",
       "              }\n",
       "            },\n",
       "          },\n",
       "\n",
       "          download:{\n",
       "            png(filename){\n",
       "              ui.composites.download._rasterImage(filename, \"png\");\n",
       "            },\n",
       "\n",
       "            jpg(filename){\n",
       "              ui.composites.download._rasterImage(filename, \"jpeg\");\n",
       "            },\n",
       "\n",
       "            _rasterImage(filename, format){\n",
       "              const canvas = ui.elements.graphContainer.getElementsByTagName(\"canvas\")[0],\n",
       "                mimeType = \"image/\" + format;\n",
       "              function finishedBlobCallback(blob){\n",
       "                ui.composites.download._blobToFileDownload(blob, filename);\n",
       "              }\n",
       "              try{\n",
       "                // Blob to overcome size limitations for data URLs (e.g. 4MB in Chrome)\n",
       "                canvas.toBlob(finishedBlobCallback, mimeType, 1.0);\n",
       "              } catch(e){\n",
       "                if(e.name === \"SecurityError\"){\n",
       "                  alert(\"Image creation failed. Some images within the nodes of the graph can \" +\n",
       "                      \"not be fetched from within JavaScript due to security settings of the \" +\n",
       "                      \"server that provides the images.\");\n",
       "                } else{\n",
       "                  throw e;\n",
       "                }\n",
       "              }\n",
       "            },\n",
       "\n",
       "            _blobToFileDownload(blob, filename){\n",
       "              const url = URL.createObjectURL(blob),\n",
       "                a = document.createElement(\"a\");\n",
       "              function handleClick(){\n",
       "                setTimeout(function(){\n",
       "                  // Long waiting time before removal for slow devices like mobile phones\n",
       "                  URL.revokeObjectURL(url);\n",
       "                  this.removeEventListener(\"click\", handleClick);\n",
       "                }, 20000);\n",
       "              };\n",
       "              document.body.appendChild(a);\n",
       "              a.href = url;\n",
       "              a.download = filename;\n",
       "              a.addEventListener(\"click\", handleClick, false);\n",
       "              a.click();\n",
       "              document.body.removeChild(a);\n",
       "            },\n",
       "          },\n",
       "\n",
       "          selection(element, optionList, valueList=undefined) {\n",
       "            while(element.hasChildNodes()){\n",
       "              element.removeChild(element.firstChild);\n",
       "            }\n",
       "            for(let i=0; i<optionList.length; i++){\n",
       "              let text = optionList[i];\n",
       "              let value = text;\n",
       "              if(valueList){\n",
       "                value = valueList[i];\n",
       "              }\n",
       "              let opt = document.createElement(\"option\");\n",
       "              opt.appendChild(document.createTextNode(text));\n",
       "              opt.value = value;\n",
       "              element.appendChild(opt);\n",
       "            }\n",
       "          },\n",
       "\n",
       "          tooltip:{\n",
       "            show(xShift=null, yShift=null){\n",
       "              if(isFinite(xShift) && xShift !== null){\n",
       "                ui.elements.tooltipContainer.style.left =  parseInt(xShift) + \"px\";\n",
       "              }\n",
       "              if(isFinite(yShift) && yShift !== null){\n",
       "                ui.elements.tooltipContainer.style.top = parseInt(yShift) + \"px\";\n",
       "              }\n",
       "              ui.elements.tooltipContainer.style.transition = \"visibility 0s, opacity 0.1s\";\n",
       "              ui.elements.tooltipContainer.style.visibility = \"visible\";\n",
       "              ui.elements.tooltipContainer.style.opacity = 1.0;\n",
       "            },\n",
       "\n",
       "            hide(){\n",
       "              ui.elements.tooltipContainer.style.transition = \"visibility 0.3s, opacity 0.3s ease-in\";\n",
       "              ui.elements.tooltipContainer.style.visibility = \"hidden\";\n",
       "              ui.elements.tooltipContainer.style.opacity = 0.0;\n",
       "            },\n",
       "          },\n",
       "\n",
       "          progressBar:{\n",
       "            create(){\n",
       "              // Main container\n",
       "              this.mainContainer = document.createElement(\"div\");\n",
       "              this.mainContainer.id = \"iOm92LxjhHNLGxz9O-progress-container\";\n",
       "              this.mainContainer.style.backgroundColor = state.shownData.general.background_color;\n",
       "              ui.elements.graphContainer.style.backgroundColor = state.shownData.general.background_color;\n",
       "              // Text container\n",
       "              const numNodes = state.parsedData.nodes.length;\n",
       "              this.textContainer = document.createElement(\"div\");\n",
       "              this.textContainer.innerText = \"Large graph with \" + numNodes + \" nodes. Calculating an initial layout before visualizing it.\";\n",
       "              this.textContainer.style.textAlign = \"center\";\n",
       "              // Bar container\n",
       "              this.outerBarContainer = document.createElement(\"div\");\n",
       "              this.outerBarContainer.style.border = \"1px solid black\";\n",
       "              this.outerBarContainer.style.borderRadius = \"4px\";\n",
       "              this.outerBarContainer.style.marginTop = \"1ex\";\n",
       "              this.outerBarContainer.style.padding = \"1px\";\n",
       "              this.innerBarContainer = document.createElement(\"div\");\n",
       "              this.innerBarContainer.style.backgroundColor = \"black\";\n",
       "              this.innerBarContainer.style.width = \"0%\";\n",
       "              this.innerBarContainer.style.height = \"8px\";\n",
       "              this.innerBarContainer.style.borderRadius = \"3px\";\n",
       "              // Add them to DOM\n",
       "              this.outerBarContainer.appendChild(this.innerBarContainer);\n",
       "              this.mainContainer.appendChild(this.textContainer);\n",
       "              this.mainContainer.appendChild(this.outerBarContainer);\n",
       "              ui.elements.graphContainer.appendChild(this.mainContainer);\n",
       "            },\n",
       "\n",
       "            update(percentage){\n",
       "              this.innerBarContainer.style.width = percentage + \"%\";\n",
       "            },\n",
       "\n",
       "            remove(){\n",
       "              ui.elements.graphContainer.removeChild(this.mainContainer);\n",
       "            }\n",
       "          },\n",
       "\n",
       "          graph:{\n",
       "            createGraph(){\n",
       "              // Remove existing elements\n",
       "              ui.deleteChildElements(ui.elements.graphContainer);\n",
       "\n",
       "              // Create new elements\n",
       "              // I) Set graph options\n",
       "              // a) Nodes: https://visjs.github.io/vis-network/docs/network/nodes.html\n",
       "              const data = state.shownData,\n",
       "                visNodes = [];\n",
       "              let graphContainsFixedPositions = false;\n",
       "              for(let i=0; i<data.nodes.length; i++){\n",
       "                const node = data.nodes[i];\n",
       "                let visNode = {\n",
       "                  id: node.id,\n",
       "                  shape: node.shape,\n",
       "                  borderWidth: node.border_size,\n",
       "                  color: {\n",
       "                    background: node.color,\n",
       "                    border: node.border_color,\n",
       "                  },\n",
       "                }\n",
       "                // - Node labels\n",
       "                if(state.showNodeLabels){\n",
       "                  if(typeof(node.label) !== \"undefined\"){\n",
       "                    visNode.label = node.label;\n",
       "                    visNode.font = {\n",
       "                      size: node.label_size,\n",
       "                      color: node.label_color,\n",
       "                      strokeWidth: (state.showNodeLabelBorders ? 1.2 : 0.0),\n",
       "                      strokeColor: data.general.background_color,\n",
       "                    }\n",
       "                  }\n",
       "                }\n",
       "                // - Nodes hidden/shown (\"hidden\" property hides entire graph, using size=0 instead)\n",
       "                if(state.showNodes || (typeof(node.image) !== \"undefined\" && state.showNodeImages)){\n",
       "                  visNode.size = node.size;\n",
       "                } else {\n",
       "                  visNode.size = 0.0;\n",
       "                }\n",
       "                // - Node images\n",
       "                if(typeof(node.image) !== \"undefined\"){\n",
       "                  if(state.showNodeImages){\n",
       "                    visNode.shape = \"image\";\n",
       "                    visNode.image = node.image;\n",
       "                    visNode.size = node.image_size;\n",
       "                    // prevent a visual change of nodes with images upon selection (not deactivatable)\n",
       "                    visNode.color.highlight = {\n",
       "                      background: visNode.color.background,\n",
       "                      border: visNode.color.border,\n",
       "                    };\n",
       "                    visNode.borderWidthSelected = visNode.borderWidth;\n",
       "                  }\n",
       "                }\n",
       "                // - Node positions\n",
       "                const x = node.fx,\n",
       "                  y = node.fy;\n",
       "                if((typeof(x) !== \"undefined\") || (typeof(y) !== \"undefined\")){\n",
       "                  graphContainsFixedPositions = true;\n",
       "                  visNode.fixed = {}\n",
       "                  if(typeof(x) !== \"undefined\"){\n",
       "                    visNode.x = x;\n",
       "                    visNode.fixed.x = true;\n",
       "                  }\n",
       "                  if(typeof(y) !== \"undefined\"){\n",
       "                    visNode.y = y;\n",
       "                    visNode.fixed.y = true;\n",
       "                  }\n",
       "                }\n",
       "                // - Node hover behavior 1: highlight neighborhood\n",
       "                visNode.color.hover = {\n",
       "                  background: visNode.color.background,\n",
       "                  border: visNode.color.background,\n",
       "                };\n",
       "                // - Node hover behavior 2: show tooltip\n",
       "                if(state.nodeHoverTooltip){\n",
       "                  if(typeof(node.hover) !== \"undefined\"){\n",
       "                    visNode.title = node.hover;\n",
       "                  }\n",
       "                }\n",
       "                // - Node click behavior: show details\n",
       "                if(typeof(node.click) !== \"undefined\" && node.click !== \"\"){\n",
       "                  visNode.click = node.click;\n",
       "                }\n",
       "                visNodes.push(visNode);\n",
       "              }\n",
       "\n",
       "              // b) Edges: https://visjs.github.io/vis-network/docs/network/edges.html\n",
       "              const visEdges = [];\n",
       "              for(let i=0; i<data.edges.length; i++){\n",
       "                const edge = data.edges[i];\n",
       "                const visEdge = {\n",
       "                  id: edge.id,\n",
       "                  from: edge.source.id,\n",
       "                  to: edge.target.id,\n",
       "                  color: edge.color,\n",
       "                  width: edge.size,\n",
       "                };\n",
       "                // - Edge labels\n",
       "                if(state.showEdgeLabels){\n",
       "                  if(typeof(edge.label) !== \"undefined\"){\n",
       "                    visEdge.label = edge.label;\n",
       "                    visEdge.font = {\n",
       "                      size: edge.label_size,\n",
       "                      color: edge.label_color,\n",
       "                      strokeWidth: (state.showEdgeLabelBorders ? 1.2 : 0.0),\n",
       "                      strokeColor: data.general.background_color,\n",
       "                    }\n",
       "                  }\n",
       "                }\n",
       "                // - Edges hidden/shown\n",
       "                if(!state.showEdges){\n",
       "                  visEdge.hidden = true;\n",
       "                }\n",
       "                // - Edge hover behavior\n",
       "                if(state.edgeHoverTooltip){\n",
       "                  if(typeof(edge.hover) !== \"undefined\") {\n",
       "                    visEdge.title = edge.hover;\n",
       "                  }\n",
       "                }\n",
       "                // - Edge click behavior\n",
       "                if(typeof(edge.click) !== \"undefined\" && edge.click !== \"\"){\n",
       "                  visEdge.click = edge.click;\n",
       "                }\n",
       "                visEdges.push(visEdge);\n",
       "              }\n",
       "              // c) Options: https://visjs.github.io/vis-network/docs/network/\n",
       "              const options = {};\n",
       "              // - Nodes\n",
       "              options.nodes = {};\n",
       "              options.nodes.chosen = false;\n",
       "              options.nodes.imagePadding = 1.5;\n",
       "              options.nodes.labelHighlightBold = false;\n",
       "              options.nodes.shapeProperties = {};\n",
       "              options.nodes.shapeProperties.useBorderWithImage = true;\n",
       "              // - Node label font family\n",
       "              if(state.nodeLabelFont !== null){\n",
       "                options.nodes.font = {\n",
       "                  \"face\": state.nodeLabelFont,\n",
       "                }\n",
       "              }\n",
       "              // - Edges\n",
       "              options.edges = {};\n",
       "              // - Edges hidden/shown\n",
       "              if(!state.showEdges){\n",
       "                options.edges.hidden = true;\n",
       "              }\n",
       "              // - Edge curvature\n",
       "              if(state.edgeCurvature === 0.0){\n",
       "                options.edges.smooth = false;\n",
       "              } else {\n",
       "                options.edges.smooth = ui.composites.graph.calculateEdgeCurvatureOptions();\n",
       "              }\n",
       "              // - Edge arrows\n",
       "              if(data.general.directed){\n",
       "                options.edges.arrows = {};\n",
       "                options.edges.arrows.to = {};\n",
       "                options.edges.arrows.to.enabled = true;\n",
       "                if(data.general.arrow_size !== 0.0){\n",
       "                  options.edges.arrows.to.scaleFactor = data.general.arrow_size / 10.0;\n",
       "                }\n",
       "              }\n",
       "              // - Edge label font family\n",
       "              if(state.edgeLabelFont !== null){\n",
       "                options.edges.font = {\n",
       "                  \"face\": state.edgeLabelFont,\n",
       "                }\n",
       "              }\n",
       "              // - Drawing area\n",
       "              options.autoResize = false;\n",
       "              // - Interaction\n",
       "              options.interaction = {};\n",
       "              options.interaction.selectable = false;\n",
       "              options.interaction.selectConnectedEdges = false;\n",
       "              options.interaction.tooltipDelay = 0.0;\n",
       "              options.interaction.hover = state.nodeHoverNeighborhood;\n",
       "              options.interaction.hoverConnectedEdges = state.nodeHoverNeighborhood;\n",
       "              // - Layout algorithm\n",
       "              const numNodes = state.parsedData.nodes.length;\n",
       "              options.layout = {};\n",
       "              if(numNodes < 400){\n",
       "                options.layout.improvedLayout = true;\n",
       "              } else{\n",
       "                options.layout.improvedLayout = false;\n",
       "              }\n",
       "              options.physics = {};\n",
       "              options.physics.barnesHut = {\"damping\": 0.25};\n",
       "              options.physics.forceAtlas2Based = {\"damping\": 3.0};\n",
       "              options.physics.repulsion = {};\n",
       "              options.physics.hierarchicalRepulsion = {};\n",
       "              options.physics.stabilization = {};\n",
       "              options.physics.stabilization.enabled = false;\n",
       "              if(numNodes > state.largeGraphThreshold){\n",
       "                let numIterations = 800;\n",
       "                if(numNodes >= 25000){\n",
       "                  numIterations = 100;\n",
       "                } else if(numNodes >= 10000){\n",
       "                  numIterations = 300;\n",
       "                } else if(numNodes >= 5000){\n",
       "                  numIterations = 400;\n",
       "                } else if(numNodes >= 2000){\n",
       "                  numIterations = 500;\n",
       "                } else if(numNodes >= 1000){\n",
       "                  numIterations = 600;\n",
       "                }\n",
       "                options.physics.stabilization = {\n",
       "                  \"enabled\": true,\n",
       "                  \"fit\": true,\n",
       "                  \"iterations\": numIterations,\n",
       "                  \"updateInterval\": 1,\n",
       "                };\n",
       "              }\n",
       "              // II) Create graph\n",
       "              // - DataSet and Network: https://visjs.github.io/vis-network/docs/network\n",
       "              state.visOptions = options;\n",
       "              state.visData = {\n",
       "                nodes: new vis.DataSet(visNodes),\n",
       "                edges: new vis.DataSet(visEdges),\n",
       "              };\n",
       "              state.visGraph = new vis.Network(ui.elements.graphContainer, state.visData, state.visOptions);\n",
       "              // III) Set further graph options after its creation\n",
       "              // - Background: https://github.com/almende/vis/issues/2292\n",
       "              state.visGraph.on(\"beforeDrawing\", function(ctx){\n",
       "                  ctx.save();\n",
       "                  ctx.setTransform(1, 0, 0, 1, 0, 0);\n",
       "                  ctx.fillStyle = data.general.background_color;\n",
       "                  ctx.fillRect(0, 0, ctx.canvas.width, ctx.canvas.height);\n",
       "                  ctx.restore();\n",
       "              })\n",
       "              // - Node positions: node update after graph creation seems to prevent a bug\n",
       "              if(graphContainsFixedPositions){\n",
       "                state.visData.nodes.update(visNodes);\n",
       "              }\n",
       "              // - Graph behavior\n",
       "              ui.composites.graph.setBehavior();\n",
       "\n",
       "              // Menu toggle button\n",
       "              if(state.showMenuToggleButton){\n",
       "                const menuDiv = document.createElement(\"div\");\n",
       "                if(state.showMenu){\n",
       "                  menuDiv.innerText = ui.symbols.menuShown;\n",
       "                } else {\n",
       "                  menuDiv.innerText = ui.symbols.menuHidden;\n",
       "                }\n",
       "                menuDiv.id = \"iOm92LxjhHNLGxz9O-menu-toggle-button\";\n",
       "                menuDiv.onclick = ui.composites.menu.toggle;\n",
       "                ui.elements.graphContainer.appendChild(menuDiv);\n",
       "                ui.elements.menuToggleDiv = menuDiv;\n",
       "              }\n",
       "              // Details toggle button\n",
       "              if(state.showDetailsToggleButton){\n",
       "                const detailsDiv = document.createElement(\"div\");\n",
       "                if(state.showDetails){\n",
       "                  detailsDiv.innerText = ui.symbols.detailsShown;\n",
       "                } else {\n",
       "                  detailsDiv.innerText = ui.symbols.detailsHidden;\n",
       "                }\n",
       "                detailsDiv.id = \"iOm92LxjhHNLGxz9O-details-toggle-button\";\n",
       "                detailsDiv.onclick = ui.composites.details.toggle;\n",
       "                ui.elements.graphContainer.appendChild(detailsDiv);\n",
       "                ui.elements.detailsToggleDiv = detailsDiv;\n",
       "              }\n",
       "            },\n",
       "\n",
       "            setBehavior(){\n",
       "              // - Progress bar: only if large graph, stops simulation to get initial static image\n",
       "              // https://visjs.github.io/vis-network/examples/network/exampleApplications/loadingBar.html\n",
       "              const numNodes = state.parsedData.nodes.length;\n",
       "              if(numNodes > state.largeGraphThreshold){\n",
       "                // Layout start\n",
       "                ui.composites.progressBar.create();\n",
       "                // Layout update\n",
       "                state.visGraph.on(\"stabilizationProgress\", function(params){\n",
       "                  var progressPercentage = params.iterations / params.total * 100;\n",
       "                  ui.composites.progressBar.update(progressPercentage);\n",
       "                });\n",
       "                // Layout finished\n",
       "                state.visGraph.once(\"stabilizationIterationsDone\", function(){\n",
       "                  setTimeout(function(){\n",
       "                    ui.composites.progressBar.remove();\n",
       "                    ui.composites.graph.simulationManager.stop();\n",
       "                  }, 60);\n",
       "                });\n",
       "              }\n",
       "              // - Node drag behavior: move node, fix its position or release it afterwards\n",
       "              state.visGraph.on(\"dragStart\", function(params){\n",
       "                params.event = \"[original event]\";\n",
       "                const nodeId = this.getNodeAt(params.pointer.DOM);\n",
       "                if(nodeId){\n",
       "                  const visNode = state.visData.nodes.get(nodeId),\n",
       "                    position = state.visGraph.getPositions(nodeId);\n",
       "                  visNode.x = position.x;\n",
       "                  visNode.y = position.y;\n",
       "                  visNode.fixed = false;\n",
       "                  state.visData.nodes.update(visNode);\n",
       "                }\n",
       "              });\n",
       "              state.visGraph.on(\"dragEnd\", function(params){\n",
       "                params.event = \"[original event]\";\n",
       "                const nodeId = this.getNodeAt(params.pointer.DOM);\n",
       "                if(nodeId){\n",
       "                  if(state.nodeDragFix){\n",
       "                    const visNode = state.visData.nodes.get(nodeId),\n",
       "                      position = state.visGraph.getPositions(nodeId);\n",
       "                    visNode.x = position.x;\n",
       "                    visNode.y = position.y;\n",
       "                    visNode.fixed = {\"x\": true, \"y\": true}\n",
       "                    state.visData.nodes.update(visNode);\n",
       "                  }\n",
       "                }\n",
       "              });\n",
       "              // - Node and edge hover behavior: already covered\n",
       "              // - Node and edge click behavior\n",
       "              // https://visjs.github.io/vis-network/examples/network/events/interactionEvents.html\n",
       "              function createNodeText(node){\n",
       "                let htmlText = \"<div>Node: \" + String(node.id) + \"</div>\";\n",
       "                if(typeof(node.click) !== \"undefined\" && node.click !== \"\"){\n",
       "                  htmlText += '<div id=\"iOm92LxjhHNLGxz9O-details-user-provided\">' + node.click + '</div>';\n",
       "                }\n",
       "                return htmlText;\n",
       "              }\n",
       "              function createEdgeText(edge){\n",
       "                let htmlText = \"<div>Edge: \" + String(edge.id) + \"</div>\";\n",
       "                if(typeof(edge.click) !== \"undefined\" && edge.click !== \"\"){\n",
       "                  htmlText += '<div id=\"iOm92LxjhHNLGxz9O-details-user-provided\">' + edge.click + '</div>';\n",
       "                }\n",
       "                return htmlText;\n",
       "              }\n",
       "              state.visGraph.on(\"click\", function(params){\n",
       "                params.event = \"[original event]\";\n",
       "                let htmlText = \"\";\n",
       "                const nodeId = this.getNodeAt(params.pointer.DOM);\n",
       "                if(nodeId){\n",
       "                  const node = state.visData.nodes.get(nodeId);\n",
       "                  if(node){\n",
       "                    htmlText = createNodeText(node);\n",
       "                  }\n",
       "                } else {\n",
       "                  const edgeId = this.getEdgeAt(params.pointer.DOM);\n",
       "                  if(edgeId){\n",
       "                    const edge = state.visData.edges.get(edgeId);\n",
       "                    if(edge){\n",
       "                      htmlText = createEdgeText(edge);\n",
       "                    }\n",
       "                  }\n",
       "                }\n",
       "                ui.elements.detailsBody.innerHTML = htmlText;\n",
       "              });\n",
       "              // - Simulation behavior\n",
       "              state.visGraph.on(\"startStabilizing\", function(params){\n",
       "                // A manually stopped simulation restarts automatically by dragging a node or\n",
       "                // altering a dataset, immediately triggering this event. So if the simulation\n",
       "                // shall be inactive, any automatic restart can be turned off immediately here.\n",
       "                if(!state.layoutAlgorithmActive){\n",
       "                  state.visGraph.stopSimulation();\n",
       "                }\n",
       "              });\n",
       "              // Start (considers all simulation parameters)\n",
       "              ui.composites.graph.simulationManager.start();\n",
       "            },\n",
       "\n",
       "            // Graph\n",
       "            updateGraphDrawingArea(){\n",
       "              state.visGraph.setSize(state.graphContainerWidth, state.graphContainerHeight);\n",
       "              state.visGraph.redraw();\n",
       "            },\n",
       "\n",
       "            // Nodes\n",
       "            updateNodes(){\n",
       "              const data = state.shownData,\n",
       "                newVisNodes = [];\n",
       "              for(let i=0; i<data.nodes.length; i++){\n",
       "                const node = data.nodes[i],\n",
       "                  visNode = state.visData.nodes.get(node.id);\n",
       "                // Node shape\n",
       "                visNode.shape = node.shape;\n",
       "                // Node size\n",
       "                if(state.showNodes){\n",
       "                  visNode.size = node.size;\n",
       "                } else {\n",
       "                  visNode.size = 0.0;\n",
       "                }\n",
       "                // Node images\n",
       "                if(state.showNodeImages){\n",
       "                  if(typeof(node.image) !== \"undefined\"){\n",
       "                    visNode.size = node.image_size;\n",
       "                    visNode.shape = \"image\";\n",
       "                    visNode.image = node.image;\n",
       "                  }\n",
       "                }\n",
       "                // Prevent node movements: Remove stored positions of nodes once fixed and now released\n",
       "                if(visNode.fixed === false){\n",
       "                  delete visNode.x;\n",
       "                  delete visNode.y;\n",
       "                }\n",
       "                newVisNodes.push(visNode);\n",
       "              }\n",
       "              state.visData.nodes.update(newVisNodes);\n",
       "            },\n",
       "\n",
       "            preventNodeJump(visNode){\n",
       "              if(visNode.fixed === false){\n",
       "                delete visNode.x;\n",
       "                delete visNode.y;\n",
       "              }\n",
       "            },\n",
       "\n",
       "            updateNodeVisibilities(){\n",
       "              ui.composites.graph.updateNodes();\n",
       "            },\n",
       "\n",
       "            updateNodeSizes(){\n",
       "              const data = state.shownData,\n",
       "                newVisNodes = [];\n",
       "              for(let i=0; i<data.nodes.length; i++){\n",
       "                const node = data.nodes[i],\n",
       "                  visNode = state.visData.nodes.get(node.id);\n",
       "                visNode.size = node.size;\n",
       "                if(state.showNodeImages && typeof(node.image) !== \"undefined\"){\n",
       "                  visNode.size = node.image_size;\n",
       "                }\n",
       "                ui.composites.graph.preventNodeJump(visNode);\n",
       "                newVisNodes.push(visNode);\n",
       "              }\n",
       "              state.visData.nodes.update(newVisNodes);\n",
       "            },\n",
       "\n",
       "            updateNodeHoverNeighborhoodBehavior(){\n",
       "              state.visOptions.interaction.hover = state.nodeHoverNeighborhood;\n",
       "              state.visOptions.interaction.hoverConnectedEdges = state.nodeHoverNeighborhood;\n",
       "              state.visGraph.setOptions(state.visOptions);\n",
       "            },\n",
       "\n",
       "            updateNodeHoverTooltipBehavior(){\n",
       "              const data = state.shownData,\n",
       "                newVisNodes = [];\n",
       "              for(let i=0; i<data.nodes.length; i++){\n",
       "                const node = data.nodes[i],\n",
       "                  visNode = state.visData.nodes.get(node.id);\n",
       "                if(typeof(node.hover) !== \"undefined\"){\n",
       "                  visNode.title = state.nodeHoverTooltip ? node.hover : null;\n",
       "                }\n",
       "                newVisNodes.push(visNode);\n",
       "              }\n",
       "              state.visData.nodes.update(newVisNodes);\n",
       "            },\n",
       "\n",
       "            // Node images\n",
       "            updateNodeImages(){\n",
       "              const data = state.shownData,\n",
       "                newVisNodes = [];\n",
       "              for(let i=0; i<data.nodes.length; i++){\n",
       "                const node = data.nodes[i],\n",
       "                  visNode = state.visData.nodes.get(node.id);\n",
       "                visNode.shape = node.shape;\n",
       "                if(state.showNodes){\n",
       "                  visNode.size = node.size;\n",
       "                } else {\n",
       "                  visNode.size = 0.0;\n",
       "                }\n",
       "                if(state.showNodeImages){\n",
       "                  if(typeof(node.image) !== \"undefined\"){\n",
       "                    visNode.size = node.image_size;\n",
       "                    visNode.shape = \"image\";\n",
       "                    visNode.image = node.image;\n",
       "                  }\n",
       "                }\n",
       "                ui.composites.graph.preventNodeJump(visNode);\n",
       "                newVisNodes.push(visNode);\n",
       "              }\n",
       "              state.visData.nodes.update(newVisNodes);\n",
       "            },\n",
       "\n",
       "            // Node labels\n",
       "            updateNodeLabels(){\n",
       "              // Vis data sets: https://visjs.github.io/vis-data/data/dataset.html\n",
       "              const data = state.shownData,\n",
       "                newVisNodes = [];\n",
       "              for(let i=0; i<data.nodes.length; i++){\n",
       "                const node = data.nodes[i];\n",
       "                const visNode = state.visData.nodes.get(node.id);\n",
       "                if(state.showNodeLabels){\n",
       "                  visNode.label = node.label;\n",
       "                  visNode.font = {\n",
       "                    size: node.label_size,\n",
       "                    color: node.label_color,\n",
       "                    strokeWidth: (state.showNodeLabelBorders ? 1.2 : 0.0),\n",
       "                    strokeColor: data.general.background_color,\n",
       "                  }\n",
       "                } else{\n",
       "                  visNode.label = undefined;\n",
       "                }\n",
       "                ui.composites.graph.preventNodeJump(visNode);\n",
       "                newVisNodes.push(visNode);\n",
       "              }\n",
       "              state.visData.nodes.update(newVisNodes);\n",
       "            },\n",
       "\n",
       "            // Edges\n",
       "            calculateEdgeCurvatureOptions(){\n",
       "              const appearanceAdaptionFactor = 0.5,\n",
       "                options = {\n",
       "                \"type\": state.edgeCurvature > 0.0 ? \"curvedCW\" : \"curvedCCW\",\n",
       "                \"roundness\": Math.abs(state.edgeCurvature) * appearanceAdaptionFactor,\n",
       "              };\n",
       "              return options\n",
       "            },\n",
       "\n",
       "            updateEdgeVisibility(){\n",
       "              const data = state.shownData,\n",
       "                newVisEdges = [];\n",
       "              for(let i=0; i<data.edges.length; i++){\n",
       "                const edge = data.edges[i],\n",
       "                  visEdge = state.visData.edges.get(edge.id);\n",
       "                visEdge.hidden = !state.showEdges;\n",
       "                newVisEdges.push(visEdge);\n",
       "              }\n",
       "              state.visData.edges.update(newVisEdges);\n",
       "            },\n",
       "\n",
       "            updateEdgeSizes(){\n",
       "              const data = state.shownData,\n",
       "                newVisEdges = [];\n",
       "              for (let i=0; i<data.edges.length; i++){\n",
       "                const edge = data.edges[i],\n",
       "                  newVisEdge = state.visData.edges.get(edge.id);\n",
       "                newVisEdge.width = edge.size;\n",
       "                newVisEdges.push(newVisEdge);\n",
       "              }\n",
       "              state.visData.edges.update(newVisEdges);\n",
       "            },\n",
       "\n",
       "            updateEdgeCurvatures(){\n",
       "              if(state.edgeCurvature === 0.0){\n",
       "                state.visOptions.edges.smooth = false;\n",
       "              } else {\n",
       "                state.visOptions.edges.smooth = ui.composites.graph.calculateEdgeCurvatureOptions();\n",
       "              }\n",
       "              state.visGraph.setOptions(state.visOptions);\n",
       "            },\n",
       "\n",
       "            updateEdgeHoverTooltipBehavior(){\n",
       "              /* Correct code, but there is a bug that renders null values as empty div (instead of ignoring them)\n",
       "              const data = state.shownData,\n",
       "                newVisEdges = [];\n",
       "              for(let i=0; i<data.edges.length; i++){\n",
       "                const edge = data.edges[i],\n",
       "                  visEdge = state.visData.edges.get(edge.id);\n",
       "                if(typeof(edge.hover) !== \"undefined\"){\n",
       "                  visEdge.title = state.edgeHoverTooltip ? edge.hover : null;\n",
       "                }\n",
       "                newVisEdges.push(visEdge);\n",
       "              }\n",
       "              state.visData.edges.update(newVisEdges);\n",
       "              */\n",
       "              // Workaround code\n",
       "              function cloneObject(obj){\n",
       "                return Object.assign({}, obj);\n",
       "              }\n",
       "              const data = state.shownData,\n",
       "                newVisEdges = [];\n",
       "              for(let i=0; i<data.edges.length; i++){\n",
       "                const edge = data.edges[i],\n",
       "                  visEdge = state.visData.edges.get(edge.id);\n",
       "                if(typeof(edge.hover) !== \"undefined\"){\n",
       "                  if(state.edgeHoverTooltip){\n",
       "                    visEdge.title = edge.hover;\n",
       "                    newVisEdges.push(visEdge);\n",
       "                  } else{\n",
       "                    // edges.update can only add properties, not delete them, hence use of clone/remove/add\n",
       "                    clonedEdge = cloneObject(visEdge);\n",
       "                    delete clonedEdge.title;\n",
       "                    state.visData.edges.remove(edge.id);\n",
       "                    state.visData.edges.add(clonedEdge);\n",
       "                  }\n",
       "                }\n",
       "              }\n",
       "              if(state.edgeHoverTooltip){\n",
       "                state.visData.edges.update(newVisEdges);\n",
       "              }\n",
       "            },\n",
       "\n",
       "            // Edge labels\n",
       "            updateEdgeLabels(){\n",
       "              const data = state.shownData,\n",
       "                newVisEdges = [],\n",
       "                noLabel = \" \";  // undefined, null, \"\" or deleting label property does not work\n",
       "              for(let i=0; i<data.edges.length; i++){\n",
       "                const edge = data.edges[i],\n",
       "                  visEdge = state.visData.edges.get(edge.id);\n",
       "                if(state.showEdgeLabels){\n",
       "                  visEdge.label = edge.label;\n",
       "                  visEdge.font = {\n",
       "                    size: edge.label_size,\n",
       "                    color: edge.label_color,\n",
       "                    strokeWidth: (state.showEdgeLabelBorders ? 1.2 : 0.0),\n",
       "                    strokeColor: data.general.background_color,\n",
       "                  }\n",
       "                } else {\n",
       "                  visEdge.label = noLabel;\n",
       "                }\n",
       "                newVisEdges.push(visEdge);\n",
       "              }\n",
       "              state.visData.edges.update(newVisEdges);\n",
       "            },\n",
       "\n",
       "            // Layout algorithm\n",
       "            simulationManager:{\n",
       "              start(){\n",
       "                state.visGraph.startSimulation();\n",
       "                this.setAlgorithm();\n",
       "                this.setSpringLength();\n",
       "                this.setSpringConstant();\n",
       "                this.setCentralGravity();\n",
       "                this.setGravitationalConstant();\n",
       "                this.setAvoidOverlap();\n",
       "              },\n",
       "              stop(){\n",
       "                state.visGraph.stopSimulation();\n",
       "              },\n",
       "              setActivity(on){\n",
       "                if(on){\n",
       "                  this.start();\n",
       "                } else{\n",
       "                  this.stop();\n",
       "                }\n",
       "              },\n",
       "              setAlgorithm(){\n",
       "                const name = state.layoutAlgorithm;\n",
       "                state.visOptions.physics.solver = name;\n",
       "                state.visGraph.setOptions(state.visOptions);\n",
       "                if(name === \"repulsion\"){\n",
       "                  ui.elements.avoidOverlapContainer.style.opacity = ui.convert.boolToOpacity(false);\n",
       "                  ui.elements.gravitationalConstantContainer.style.opacity = ui.convert.boolToOpacity(false);\n",
       "                } else if(name === \"hierarchicalRepulsion\"){\n",
       "                  ui.elements.avoidOverlapContainer.style.opacity = ui.convert.boolToOpacity(true);\n",
       "                  ui.elements.gravitationalConstantContainer.style.opacity = ui.convert.boolToOpacity(false);\n",
       "                } else {\n",
       "                  ui.elements.avoidOverlapContainer.style.opacity = ui.convert.boolToOpacity(true);\n",
       "                  ui.elements.gravitationalConstantContainer.style.opacity = ui.convert.boolToOpacity(true);\n",
       "                }\n",
       "              },\n",
       "              releaseFixedNodes(){\n",
       "                const data = state.shownData,\n",
       "                  newVisNodes = [];\n",
       "                for(let i=0; i<data.nodes.length; i++){\n",
       "                  const node = data.nodes[i],\n",
       "                    visNode = state.visData.nodes.get(node.id);\n",
       "                  ui.composites.graph.preventNodeJump(visNode);\n",
       "                  visNode.fixed = false;\n",
       "                  // Note: Deletion of x, y and fixed may work too, but .update does not delete props\n",
       "                  newVisNodes.push(visNode);\n",
       "                }\n",
       "                state.visData.nodes.update(newVisNodes);\n",
       "              },\n",
       "              setSpringLength(){\n",
       "                state.visOptions.physics.barnesHut.springLength = state.springLength;\n",
       "                state.visOptions.physics.forceAtlas2Based.springLength = state.springLength;\n",
       "                state.visOptions.physics.repulsion.springLength = state.springLength;\n",
       "                state.visOptions.physics.hierarchicalRepulsion.springLength = state.springLength;\n",
       "                state.visGraph.setOptions(state.visOptions);\n",
       "              },\n",
       "              setSpringConstant(){\n",
       "                state.visOptions.physics.barnesHut.springConstant = state.springConstant / 10.0;\n",
       "                state.visOptions.physics.forceAtlas2Based.springConstant = state.springConstant;\n",
       "                state.visOptions.physics.repulsion.springConstant = state.springConstant;\n",
       "                state.visOptions.physics.hierarchicalRepulsion.springConstant = state.springConstant;\n",
       "                state.visGraph.setOptions(state.visOptions);\n",
       "              },\n",
       "              setCentralGravity(){\n",
       "                state.visOptions.physics.barnesHut.centralGravity = state.centralGravity;\n",
       "                state.visOptions.physics.forceAtlas2Based.centralGravity = state.centralGravity / 100.0;\n",
       "                state.visOptions.physics.repulsion.centralGravity = state.centralGravity;\n",
       "                state.visOptions.physics.hierarchicalRepulsion.centralGravity = state.centralGravity;\n",
       "                state.visGraph.setOptions(state.visOptions);\n",
       "              },\n",
       "              setGravitationalConstant(){\n",
       "                state.visOptions.physics.barnesHut.gravitationalConstant = state.gravitationalConstant;\n",
       "                state.visOptions.physics.forceAtlas2Based.gravitationalConstant = state.gravitationalConstant / 10.0;\n",
       "                // Not a parameter in repulsion and hierarchicalRepulsion\n",
       "                state.visGraph.setOptions(state.visOptions);\n",
       "              },\n",
       "              setAvoidOverlap(){\n",
       "                state.visOptions.physics.barnesHut.avoidOverlap = state.avoidOverlap;\n",
       "                state.visOptions.physics.forceAtlas2Based.avoidOverlap = state.avoidOverlap;\n",
       "                // Not a parameter in repulsion and hierarchicalRepulsion\n",
       "                state.visGraph.setOptions(state.visOptions);\n",
       "              },\n",
       "            }\n",
       "          },\n",
       "        },\n",
       "\n",
       "        init(){\n",
       "          // Containers\n",
       "          ui.composites.responsiveContainer.init();\n",
       "          // Graph selection (only visible if multiple graphs in data)\n",
       "          if(state.rawData.length > 1){\n",
       "            ui.elements.graphSelectionContainer.style.display = ui.convert.boolToDisplayStyle(true);\n",
       "            const optionList = [],\n",
       "              valueList = [];\n",
       "            let label;\n",
       "            for(let i=0; i<state.rawData.length; i++){\n",
       "              const graph = state.rawData[i];\n",
       "              try{\n",
       "                label = String(graph.label);\n",
       "                if(label === \"undefined\" || label === \"\"){\n",
       "                  throw \"Invalid label\";\n",
       "                }\n",
       "              } catch(e){\n",
       "                label = \"Unnamed graph\";\n",
       "              }\n",
       "              const name = String(i+1) + \": \" + label;\n",
       "              optionList.push(name);\n",
       "              valueList.push(String(i));\n",
       "            }\n",
       "            ui.composites.selection(ui.elements.graphSelection, optionList, valueList);\n",
       "          }\n",
       "          // General (menu item)\n",
       "          ui.composites.menu.setItem(ui.elements.generalHead, ui.elements.generalBody, true);\n",
       "          // Data selection (menu item)\n",
       "          ui.composites.menu.setItem(ui.elements.dataHead, ui.elements.dataBody, false);\n",
       "          // - Node size\n",
       "          ui.elements.nodeSizeNormalizationCheckbox.checked = state.useNodeSizeNormalization;\n",
       "          ui.elements.nodeSizeNormalizationContainer.style.display = ui.convert.boolToDisplayStyle(state.useNodeSizeNormalization);\n",
       "          ui.elements.nodeSizeNormalizationMinText.innerHTML = ui.convert.numberToText(state.nodeSizeNormalizationMin);\n",
       "          ui.elements.nodeSizeNormalizationMinSlider.value = state.nodeSizeNormalizationMin;\n",
       "          ui.elements.nodeSizeNormalizationMaxText.innerHTML = ui.convert.numberToText(state.nodeSizeNormalizationMax);\n",
       "          ui.elements.nodeSizeNormalizationMaxSlider.value = state.nodeSizeNormalizationMax;\n",
       "          // - Edge size\n",
       "          ui.elements.edgeSizeNormalizationCheckbox.checked = state.useEdgeSizeNormalization;\n",
       "          ui.elements.edgeSizeNormalizationContainer.style.display = ui.convert.boolToDisplayStyle(state.useEdgeSizeNormalization);\n",
       "          ui.elements.edgeSizeNormalizationMinText.innerHTML = ui.convert.numberToText(state.edgeSizeNormalizationMin);\n",
       "          ui.elements.edgeSizeNormalizationMinSlider.value = state.edgeSizeNormalizationMin;\n",
       "          ui.elements.edgeSizeNormalizationMaxText.innerHTML = ui.convert.numberToText(state.edgeSizeNormalizationMax);\n",
       "          ui.elements.edgeSizeNormalizationMaxSlider.value = state.edgeSizeNormalizationMax;\n",
       "          // Nodes\n",
       "          ui.composites.menu.setItem(ui.elements.nodeHead, ui.elements.nodeBody, false);\n",
       "          ui.elements.nodeCheckbox.checked = state.showNodes;\n",
       "          ui.elements.nodeSizeFactorText.innerHTML = ui.convert.numberToText(state.nodeSizeFactor);\n",
       "          ui.elements.nodeSizeFactorSlider.value = state.nodeSizeFactor;\n",
       "          ui.elements.nodeDragFixCheckbox.checked = state.nodeDragFix;\n",
       "          ui.elements.nodeHoverNeighborhoodCheckbox.checked = state.nodeHoverNeighborhood;\n",
       "          ui.elements.nodeHoverTooltipCheckbox.checked = state.nodeHoverTooltip;\n",
       "          // Node images\n",
       "          ui.composites.menu.setItem(ui.elements.nodeImageHead, ui.elements.nodeImageBody, false);\n",
       "          ui.elements.nodeImageMetaControl.style.display = false;\n",
       "          ui.elements.nodeImageCheckbox.checked = state.showNodeImages;\n",
       "          ui.elements.nodeImageSizeFactorText.innerHTML = ui.convert.numberToText(state.nodeImageSizeFactor);\n",
       "          ui.elements.nodeImageSizeFactorSlider.value = state.nodeImageSizeFactor;\n",
       "          // Node labels\n",
       "          ui.composites.menu.setItem(ui.elements.nodeLabelHead, ui.elements.nodeLabelBody, false);\n",
       "          ui.elements.nodeLabelCheckbox.checked = state.showNodeLabels;\n",
       "          ui.elements.nodeLabelBorderCheckbox.checked = state.showNodeLabelBorders;\n",
       "          ui.elements.nodeLabelSizeFactorText.innerHTML = ui.convert.numberToText(state.nodeLabelSizeFactor);\n",
       "          ui.elements.nodeLabelSizeFactorSlider.value = state.nodeLabelSizeFactor;\n",
       "          ui.elements.nodeLabelRotationText.innerHTML = ui.convert.numberToText(state.nodeLabelRotation);\n",
       "          ui.elements.nodeLabelRotationSlider.value = state.nodeLabelRotation;\n",
       "          // Edges\n",
       "          ui.composites.menu.setItem(ui.elements.edgeHead, ui.elements.edgeBody, false);\n",
       "          ui.elements.edgeCheckbox.checked = state.showEdges;\n",
       "          ui.elements.edgeSizeFactorText.innerHTML = ui.convert.numberToText(state.edgeSizeFactor);\n",
       "          ui.elements.edgeSizeFactorSlider.value = state.edgeSizeFactor;\n",
       "          ui.elements.edgeCurvatureText.innerHTML = ui.convert.numberToText(state.edgeCurvature);\n",
       "          ui.elements.edgeCurvatureSlider.value = state.edgeCurvature;\n",
       "          ui.elements.edgeHoverTooltipCheckbox.checked = state.edgeHoverTooltip;\n",
       "          // Edge labels\n",
       "          ui.composites.menu.setItem(ui.elements.edgeLabelHead, ui.elements.edgeLabelBody, false);\n",
       "          ui.elements.edgeLabelCheckbox.checked = state.showEdgeLabels;\n",
       "          ui.elements.edgeLabelBorderCheckbox.checked = state.showEdgeLabelBorders;\n",
       "          ui.elements.edgeLabelSizeFactorText.innerHTML = ui.convert.numberToText(state.edgeLabelSizeFactor);\n",
       "          ui.elements.edgeLabelSizeFactorSlider.value = state.edgeLabelSizeFactor;\n",
       "          ui.elements.edgeLabelRotationText.innerHTML = ui.convert.numberToText(state.edgeLabelRotation);\n",
       "          ui.elements.edgeLabelRotationSlider.value = state.edgeLabelRotation;\n",
       "          // Layout algorithm\n",
       "          ui.composites.menu.setItem(ui.elements.layoutAlgorithmHead, ui.elements.layoutAlgorithmBody, false);\n",
       "          ui.elements.simulationCheckbox.checked = state.layoutAlgorithmActive;\n",
       "          ui.elements.layoutAlgorithmSelection.value = state.layoutAlgorithm;\n",
       "          ui.elements.centralGravitySlider.value = state.centralGravity;\n",
       "          ui.elements.centralGravityText.innerHTML = ui.convert.numberToText(state.centralGravity);\n",
       "          ui.elements.springLengthSlider.value = state.springLength;\n",
       "          ui.elements.springLengthText.innerHTML = ui.convert.numberToText(state.springLength);\n",
       "          ui.elements.springConstantSlider.value = state.springConstant;\n",
       "          ui.elements.springConstantText.innerHTML = ui.convert.numberToText(state.springConstant);\n",
       "          ui.elements.gravitationalConstantSlider.value = state.gravitationalConstant;\n",
       "          ui.elements.gravitationalConstantText.innerHTML = ui.convert.numberToText(state.gravitationalConstant);\n",
       "          ui.elements.avoidOverlapSlider.value = state.avoidOverlap;\n",
       "          ui.elements.avoidOverlapText.innerHTML = ui.convert.numberToText(state.avoidOverlap);\n",
       "\n",
       "          ui.initSelectionValues();\n",
       "        },\n",
       "\n",
       "        initSelectionValues(){\n",
       "          function setSelectionOptionsAndValue(element, options, value, values=null){\n",
       "            if(values === null){\n",
       "              values = options;\n",
       "            }\n",
       "            if(!values.includes(value)){\n",
       "              value = values[0];\n",
       "            }\n",
       "            ui.composites.selection(element, options, values);\n",
       "            element.value = value;\n",
       "          }\n",
       "          // Node label text data source\n",
       "          setSelectionOptionsAndValue(\n",
       "            ui.elements.nodeLabelTextDataSourceSelect,\n",
       "            state.parsedData.general.node_properties.node_label_text_data_sources,\n",
       "            state.nodeLabelTextDataSource,\n",
       "          );\n",
       "          // Edge label text data source\n",
       "          setSelectionOptionsAndValue(\n",
       "            ui.elements.edgeLabelTextDataSourceSelect,\n",
       "            state.parsedData.general.edge_properties.edge_label_text_data_sources,\n",
       "            state.edgeLabelTextDataSource,\n",
       "          );\n",
       "          // Node size data source\n",
       "          setSelectionOptionsAndValue(\n",
       "            ui.elements.nodeSizeDataSourceSelect,\n",
       "            state.parsedData.general.node_properties.node_size_data_sources,\n",
       "            state.nodeSizeDataSource,\n",
       "          );\n",
       "          // Edge size data source\n",
       "          setSelectionOptionsAndValue(\n",
       "            ui.elements.edgeSizeDataSourceSelect,\n",
       "            state.parsedData.general.edge_properties.edge_size_data_sources,\n",
       "            state.edgeSizeDataSource,\n",
       "          );\n",
       "          // Layout algorithm\n",
       "          setSelectionOptionsAndValue(\n",
       "            ui.elements.layoutAlgorithmSelection,\n",
       "            [\"Barnes-Hut\", \"Force Atlas 2\", \"Repulsion\", \"Hierarchical repulsion\"],\n",
       "            state.layoutAlgorithm,\n",
       "            [\"barnesHut\", \"forceAtlas2Based\", \"repulsion\", \"hierarchicalRepulsion\"],\n",
       "          );\n",
       "        },\n",
       "\n",
       "        deleteChildElements(element){\n",
       "          while(element.firstChild){\n",
       "            // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management\n",
       "            // As of 2019, it is not possible to explicitly or programmatically trigger\n",
       "            // garbage collection in JavaScript.\n",
       "            element.removeChild(element.firstChild);\n",
       "          }\n",
       "        },\n",
       "\n",
       "        convert:{\n",
       "          numberToText(number, numDigits=2) {\n",
       "            return String(Number(number).toFixed(numDigits));\n",
       "          },\n",
       "\n",
       "          boolToDisplayStyle(isVisible){\n",
       "            if(isVisible){\n",
       "              return \"block\";\n",
       "            }\n",
       "            return \"none\";\n",
       "          },\n",
       "\n",
       "          boolToOpacity(isActive){\n",
       "            if(isActive){\n",
       "              return 1.0;\n",
       "            }\n",
       "            return 0.25;\n",
       "          },\n",
       "\n",
       "          boolToTooltipDelay(isActive){\n",
       "            if(isActive){\n",
       "              return 0;\n",
       "            }\n",
       "            return 100000000;\n",
       "          },\n",
       "        },\n",
       "\n",
       "        setBehavior(){\n",
       "          // Window resize (includes ctrl+wheel zoom, landscape/portrait orientation on phones)\n",
       "          window.onresize = function(){\n",
       "            ui.composites.responsiveContainer.adaptToResize();\n",
       "            ui.composites.graph.updateGraphDrawingArea();\n",
       "          }\n",
       "          // Container resize\n",
       "          ui.elements.graphContainer.onmouseup = function(){\n",
       "            const currentHeight = parseInt(ui.elements.graphContainer.clientHeight);\n",
       "            if(currentHeight != state.graphContainerHeight){\n",
       "              ui.composites.responsiveContainer.adaptToResize();\n",
       "              ui.composites.graph.updateGraphDrawingArea();\n",
       "            }\n",
       "          };\n",
       "          ui.elements.detailsContainer.onmouseup = function(){\n",
       "            const currentHeight = parseInt(ui.elements.detailsContainer.clientHeight);\n",
       "            if(currentHeight != state.detailsContainerHeight){\n",
       "              ui.composites.responsiveContainer.adaptToResize();\n",
       "            }\n",
       "          };\n",
       "          // Tooltip\n",
       "          ui.elements.tooltipContainer.onmouseover = function(){\n",
       "            ui.composites.tooltip.show();\n",
       "          }\n",
       "          ui.elements.tooltipContainer.onmouseout = function(){\n",
       "            ui.composites.tooltip.hide();\n",
       "          }\n",
       "          // General menu\n",
       "          ui.elements.generalHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.generalHead, ui.elements.generalBody);\n",
       "          };\n",
       "          ui.elements.resetButton.onclick = function(){\n",
       "            app.restart();\n",
       "          };\n",
       "          ui.elements.fullscreenButton.onclick = function(){\n",
       "            if(document.fullscreenElement){\n",
       "              document.exitFullscreen();\n",
       "            } else{\n",
       "              ui.elements.mainContainer.requestFullscreen()\n",
       "                .catch(function(err){\n",
       "                  alert(\"Error attempting to enable full-screen mode: \" + err.message);\n",
       "                });\n",
       "            }\n",
       "          };\n",
       "          ui.elements.mainContainer.onfullscreenchange = function(){\n",
       "            if(document.fullscreenElement){\n",
       "              ui.elements.fullscreenButton.innerText = \"Exit full screen\";\n",
       "            } else{\n",
       "              ui.elements.fullscreenButton.innerText = \"Enter full screen\";\n",
       "            }\n",
       "            // Wait for browser to switch to fullscreen and resize divs, then adapt to new sizes\n",
       "            setTimeout(function(){\n",
       "              ui.composites.responsiveContainer.adaptToFullscreen();\n",
       "              ui.composites.graph.updateGraphDrawingArea();\n",
       "            }, 250);\n",
       "          };\n",
       "          ui.elements.pngExportButton.onclick = function(){\n",
       "            ui.composites.download.png(\"graph.png\");\n",
       "          };\n",
       "          ui.elements.jpgExportButton.onclick = function(){\n",
       "            ui.composites.download.jpg(\"graph.jpg\");\n",
       "          };\n",
       "          // Data menu\n",
       "          ui.elements.dataHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.dataHead, ui.elements.dataBody);\n",
       "          };\n",
       "          // - Graph selection\n",
       "          ui.elements.graphSelection.onchange = function(){\n",
       "            const chosenGraphIndex = parseInt(this.value);\n",
       "            state.manager.parseChosenData(chosenGraphIndex);\n",
       "            state.manager.prepareShownData();\n",
       "            ui.initSelectionValues();\n",
       "            ui.composites.graph.createGraph();\n",
       "          };\n",
       "          // - Node label text\n",
       "          ui.elements.nodeLabelTextDataSourceSelect.onchange = function(){\n",
       "            state.nodeLabelTextDataSource = this.value;\n",
       "            state.manager.updateNodeLabelTexts();\n",
       "          };\n",
       "          // - Edge label text\n",
       "          ui.elements.edgeLabelTextDataSourceSelect.onchange = function(){\n",
       "            state.edgeLabelTextDataSource = this.value;\n",
       "            state.manager.updateEdgeLabelTexts();\n",
       "          };\n",
       "          // - Node size\n",
       "          ui.elements.nodeSizeDataSourceSelect.onchange = function(){\n",
       "            state.nodeSizeDataSource = this.value;\n",
       "            state.manager.updateNodeSizes();\n",
       "          };\n",
       "          ui.elements.nodeSizeNormalizationCheckbox.onchange = function(){\n",
       "            state.useNodeSizeNormalization = this.checked;\n",
       "            ui.elements.nodeSizeNormalizationContainer.style.display = ui.convert.boolToDisplayStyle(state.useNodeSizeNormalization);\n",
       "            state.manager.updateNodeSizes();\n",
       "          };\n",
       "          ui.elements.nodeSizeNormalizationMinSlider.oninput = function(){\n",
       "            ui.elements.nodeSizeNormalizationMinText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.nodeSizeNormalizationMinSlider.onchange = function(){\n",
       "            state.nodeSizeNormalizationMin = parseFloat(this.value);\n",
       "            if(state.nodeSizeNormalizationMin > state.nodeSizeNormalizationMax){\n",
       "              state.nodeSizeNormalizationMax = state.nodeSizeNormalizationMin;\n",
       "              ui.elements.nodeSizeNormalizationMaxSlider.value = state.nodeSizeNormalizationMax;\n",
       "              ui.elements.nodeSizeNormalizationMaxText.innerHTML = ui.convert.numberToText(state.nodeSizeNormalizationMax);\n",
       "            }\n",
       "            state.manager.updateNodeSizes();\n",
       "          };\n",
       "          ui.elements.nodeSizeNormalizationMaxSlider.oninput = function(){\n",
       "            ui.elements.nodeSizeNormalizationMaxText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.nodeSizeNormalizationMaxSlider.onchange = function(){\n",
       "            state.nodeSizeNormalizationMax = parseFloat(this.value);\n",
       "            if(state.nodeSizeNormalizationMax < state.nodeSizeNormalizationMin){\n",
       "              state.nodeSizeNormalizationMin = state.nodeSizeNormalizationMax;\n",
       "              ui.elements.nodeSizeNormalizationMinSlider.value = state.nodeSizeNormalizationMin;\n",
       "              ui.elements.nodeSizeNormalizationMinText.innerHTML = ui.convert.numberToText(state.nodeSizeNormalizationMin);\n",
       "            }\n",
       "            state.manager.updateNodeSizes();\n",
       "          };\n",
       "          // - Edge size\n",
       "          ui.elements.edgeSizeDataSourceSelect.onchange = function(){\n",
       "            state.edgeSizeDataSource = this.value;\n",
       "            state.manager.updateEdgeSizes();\n",
       "          };\n",
       "          ui.elements.edgeSizeNormalizationCheckbox.onchange = function(){\n",
       "            state.useEdgeSizeNormalization = this.checked;\n",
       "            ui.elements.edgeSizeNormalizationContainer.style.display = ui.convert.boolToDisplayStyle(state.useEdgeSizeNormalization);\n",
       "            state.manager.updateEdgeSizes();\n",
       "          };\n",
       "          ui.elements.edgeSizeNormalizationMinSlider.oninput = function(){\n",
       "            ui.elements.edgeSizeNormalizationMinText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.edgeSizeNormalizationMinSlider.onchange = function(){\n",
       "            state.edgeSizeNormalizationMin = parseFloat(this.value);\n",
       "            if(state.edgeSizeNormalizationMin > state.edgeSizeNormalizationMax){\n",
       "              state.edgeSizeNormalizationMax = state.edgeSizeNormalizationMin;\n",
       "              ui.elements.edgeSizeNormalizationMaxSlider.value = state.edgeSizeNormalizationMax;\n",
       "              ui.elements.edgeSizeNormalizationMaxText.innerHTML = ui.convert.numberToText(state.edgeSizeNormalizationMax);\n",
       "            }\n",
       "            state.manager.updateEdgeSizes();\n",
       "          };\n",
       "          ui.elements.edgeSizeNormalizationMaxSlider.oninput = function(){\n",
       "            ui.elements.edgeSizeNormalizationMaxText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.edgeSizeNormalizationMaxSlider.onchange = function(){\n",
       "            state.edgeSizeNormalizationMax = parseFloat(this.value);\n",
       "            if(state.edgeSizeNormalizationMax < state.edgeSizeNormalizationMin){\n",
       "              state.edgeSizeNormalizationMin = state.edgeSizeNormalizationMax;\n",
       "              ui.elements.edgeSizeNormalizationMinSlider.value = state.edgeSizeNormalizationMin;\n",
       "              ui.elements.edgeSizeNormalizationMinText.innerHTML = ui.convert.numberToText(state.edgeSizeNormalizationMin);\n",
       "            }\n",
       "            state.manager.updateEdgeSizes();\n",
       "          };\n",
       "          // Nodes menu\n",
       "          ui.elements.nodeHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.nodeHead, ui.elements.nodeBody);\n",
       "          };\n",
       "          ui.elements.nodeCheckbox.onchange = function(){\n",
       "            state.showNodes = this.checked;\n",
       "            ui.composites.graph.updateNodeVisibilities();\n",
       "          };\n",
       "          ui.elements.nodeSizeFactorSlider.oninput = function(){\n",
       "            ui.elements.nodeSizeFactorText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.nodeSizeFactorSlider.onchange = function(){\n",
       "            state.nodeSizeFactor = parseFloat(this.value);\n",
       "            state.manager.updateNodeSizes();\n",
       "          };\n",
       "          ui.elements.nodeDragFixCheckbox.onchange = function(){\n",
       "            state.nodeDragFix = this.checked;\n",
       "          };\n",
       "          ui.elements.nodeHoverNeighborhoodCheckbox.onchange = function(){\n",
       "            state.nodeHoverNeighborhood = this.checked;\n",
       "            ui.composites.graph.updateNodeHoverNeighborhoodBehavior();\n",
       "          };\n",
       "          ui.elements.nodeHoverTooltipCheckbox.onchange = function(){\n",
       "            state.nodeHoverTooltip = this.checked;\n",
       "            ui.composites.graph.updateNodeHoverTooltipBehavior();\n",
       "          };\n",
       "          ui.elements.nodeReleaseButton.onclick = function(){\n",
       "            ui.composites.graph.simulationManager.releaseFixedNodes();\n",
       "          };\n",
       "          // Node images menu\n",
       "          ui.elements.nodeImageHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.nodeImageHead, ui.elements.nodeImageBody);\n",
       "          };\n",
       "          ui.elements.nodeImageCheckbox.onchange = function(){\n",
       "            state.showNodeImages = this.checked;\n",
       "            state.manager.updateNodeImages();\n",
       "          };\n",
       "          ui.elements.nodeImageSizeFactorSlider.oninput = function(){\n",
       "            ui.elements.nodeImageSizeFactorText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.nodeImageSizeFactorSlider.onchange = function(){\n",
       "            state.nodeImageSizeFactor = parseFloat(this.value);\n",
       "            state.manager.updateNodeImages();\n",
       "          };\n",
       "          // Node labels menu\n",
       "          ui.elements.nodeLabelHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.nodeLabelHead, ui.elements.nodeLabelBody);\n",
       "          };\n",
       "          ui.elements.nodeLabelCheckbox.onchange = function(){\n",
       "            state.showNodeLabels = this.checked;\n",
       "            ui.composites.graph.updateNodeLabels();\n",
       "          };\n",
       "          ui.elements.nodeLabelBorderCheckbox.onchange = function(){\n",
       "            state.showNodeLabelBorders = this.checked;\n",
       "            ui.composites.graph.updateNodeLabels();\n",
       "          };\n",
       "          ui.elements.nodeLabelSizeFactorSlider.oninput = function(){\n",
       "            ui.elements.nodeLabelSizeFactorText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.nodeLabelSizeFactorSlider.onchange = function(){\n",
       "            state.nodeLabelSizeFactor = parseFloat(this.value);\n",
       "            state.manager.updateNodeLabelSizes();\n",
       "          };\n",
       "          // Edges menu\n",
       "          ui.elements.edgeHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.edgeHead, ui.elements.edgeBody);\n",
       "          };\n",
       "          ui.elements.edgeCheckbox.onchange = function(){\n",
       "            state.showEdges = this.checked;\n",
       "            ui.composites.graph.updateEdgeVisibility();\n",
       "          };\n",
       "          ui.elements.edgeSizeFactorSlider.oninput = function(){\n",
       "            ui.elements.edgeSizeFactorText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.edgeSizeFactorSlider.onchange = function(){\n",
       "            state.edgeSizeFactor = parseFloat(this.value);\n",
       "            state.manager.updateEdgeSizes();\n",
       "          };\n",
       "          ui.elements.edgeCurvatureSlider.oninput = function(){\n",
       "            ui.elements.edgeCurvatureText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.edgeCurvatureSlider.onchange = function(){\n",
       "            state.edgeCurvature = parseFloat(this.value);\n",
       "            state.manager.updateEdgeCurvatures();\n",
       "          };\n",
       "          ui.elements.edgeHoverTooltipCheckbox.onchange = function(){\n",
       "            state.edgeHoverTooltip = this.checked;\n",
       "            ui.composites.graph.updateEdgeHoverTooltipBehavior();\n",
       "          };\n",
       "          // Edge labels menu\n",
       "          ui.elements.edgeLabelHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.edgeLabelHead, ui.elements.edgeLabelBody);\n",
       "          };\n",
       "          ui.elements.edgeLabelCheckbox.onchange = function(){\n",
       "            state.showEdgeLabels = this.checked;\n",
       "            ui.composites.graph.updateEdgeLabels();\n",
       "          };\n",
       "          ui.elements.edgeLabelBorderCheckbox.onchange = function(){\n",
       "            state.showEdgeLabelBorders = this.checked;\n",
       "            ui.composites.graph.updateEdgeLabels();\n",
       "          };\n",
       "          ui.elements.edgeLabelSizeFactorSlider.oninput = function(){\n",
       "            ui.elements.edgeLabelSizeFactorText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.edgeLabelSizeFactorSlider.onchange = function(){\n",
       "            state.edgeLabelSizeFactor = parseFloat(this.value);\n",
       "            state.manager.updateEdgeLabelSizes();\n",
       "          };\n",
       "          // Layout algorithm menu\n",
       "          ui.elements.layoutAlgorithmHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.layoutAlgorithmHead, ui.elements.layoutAlgorithmBody);\n",
       "          };\n",
       "          ui.elements.simulationCheckbox.onchange = function(){\n",
       "            state.layoutAlgorithmActive = !state.layoutAlgorithmActive;\n",
       "            ui.composites.graph.simulationManager.setActivity(state.layoutAlgorithmActive);\n",
       "          };\n",
       "          ui.elements.layoutAlgorithmSelection.onchange = function(){\n",
       "            state.layoutAlgorithm = this.value;\n",
       "            ui.composites.graph.simulationManager.setAlgorithm();\n",
       "          };\n",
       "          ui.elements.centralGravitySlider.oninput = function(){\n",
       "            ui.elements.centralGravityText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.centralGravitySlider.onchange = function(){\n",
       "            state.centralGravity = parseFloat(this.value);\n",
       "            ui.composites.graph.simulationManager.setCentralGravity();\n",
       "          };\n",
       "          ui.elements.springLengthSlider.oninput = function(){\n",
       "            ui.elements.springLengthText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.springLengthSlider.onchange = function(){\n",
       "            state.springLength = parseFloat(this.value);\n",
       "            ui.composites.graph.simulationManager.setSpringLength();\n",
       "          };\n",
       "          ui.elements.springConstantSlider.oninput = function(){\n",
       "            ui.elements.springConstantText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.springConstantSlider.onchange = function(){\n",
       "            state.springConstant = parseFloat(this.value);\n",
       "            ui.composites.graph.simulationManager.setSpringConstant();\n",
       "          };\n",
       "          ui.elements.gravitationalConstantSlider.oninput = function(){\n",
       "            ui.elements.gravitationalConstantText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.gravitationalConstantSlider.onchange = function(){\n",
       "            state.gravitationalConstant = parseFloat(this.value);\n",
       "            ui.composites.graph.simulationManager.setGravitationalConstant();\n",
       "          };\n",
       "          ui.elements.avoidOverlapSlider.oninput = function(){\n",
       "            ui.elements.avoidOverlapText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.avoidOverlapSlider.onchange = function(){\n",
       "            state.avoidOverlap = parseFloat(this.value);\n",
       "            ui.composites.graph.simulationManager.setAvoidOverlap();\n",
       "          };\n",
       "        },\n",
       "      }\n",
       "\n",
       "      const app = {\n",
       "        start(){\n",
       "          state.manager.fetchRawDataFromTemplating();\n",
       "          state.manager.parseChosenData(0);\n",
       "          state.manager.prepareShownData();\n",
       "          ui.init();\n",
       "          // Wait a bit to finish UI rendering, then start potentially slow layout computation\n",
       "          setTimeout(function(){\n",
       "            ui.composites.graph.createGraph();\n",
       "            ui.setBehavior();\n",
       "          }, 400);\n",
       "          // Reduce risk of getting stuck with a wrong drawing area size\n",
       "          function checkIfSizeUpdateRequired(){\n",
       "            if(ui.elements.graphContainer.clientWidth != state.graphContainerWidth){\n",
       "              ui.composites.responsiveContainer.adaptToResize();\n",
       "              ui.composites.graph.updateGraphDrawingArea();\n",
       "            }\n",
       "          }\n",
       "          [1, 2, 5, 8, 12, 15, 20, 25, 30, 35, 40, 45, 50, 60, 90].forEach(function(delay){\n",
       "            setTimeout(checkIfSizeUpdateRequired, delay*1000);\n",
       "          })\n",
       "        },\n",
       "\n",
       "        restart(){\n",
       "          app.start();\n",
       "        },\n",
       "      }\n",
       "\n",
       "      // Start website dynamics\n",
       "      app.start();\n",
       "    });\n",
       "  </script>\n",
       "\n"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "vis = control_graph.visualize(three=False, style=control_graph_style)\n",
    "vis.display(inline=True) # interactive visualization can be commented out in favor of zoomed in inserted image"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "source": [
    "> **Tip**. Look, family Doe controls more and more! But the link to \"ACME Bank\" is still missing."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Deriving accumulated ownership using recursion\n",
    "Add rules to accumulate direct and indirect ownerships that Tom exerts on ACME Bank, along all possible ownership paths."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "source": [
    "\n",
    "> **Note**. Another recursive rule now uses two `Ownership` instances to derive sub-part that entity owns through another entity. We introduce `DerivedOwnership` which is identified additionally by `sub_owner`, as there can be multiple paths - entities, through which ownership can be derived. Note how we then add both instances of `Ownership` used to create a `DerivedOwnership` to a multi-valued property `sub_source`, using `extend` method. We will use it later to explain the numbers."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": [
     "hide-input"
    ]
   },
   "outputs": [],
   "source": [
    "# Initialize recursive derived ownership rule with known direct ownerships\n",
    "with model.rule():\n",
    "    DirectOwnership().set(DerivedOwnership)\n",
    "\n",
    "# Recursively add every path from E1 to E3 via E2,\n",
    "# where E1 -> E2 is a known direct ownership and E2 -> E3 is previously derived path\n",
    "with model.rule():\n",
    "    o = DirectOwnership()\n",
    "    sub_o = TotalOwnership(owner = o.asset)\n",
    "    # Keyed not only by owner and asset, but also by intermediate sub_owner\n",
    "    new = DerivedOwnership.add(owner = o.owner, sub_owner = o.asset, asset = sub_o.asset).set(part = o.part * sub_o.part)\n",
    "    new.sub_source.extend([o, sub_o])\n",
    "\n",
    "# Sum up all of the derived paths from E1 to E2 to identify the total ownership\n",
    "with model.rule():\n",
    "    do = DerivedOwnership()\n",
    "    to = TotalOwnership.add(owner = do.owner, asset = do.asset).set(part = sum(do, do.part, per = [do.owner, do.asset]))\n",
    "    to.sub_source.add(do)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's take a look at all the ownerships that we just derived."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "source": [
    "**Note**: because we included the `sub_owner` in our results, we only get derived ownerships and direct ones are excluded"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": [
     "hide-input"
    ]
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th>owner</th>\n",
       "      <th>sub_owner</th>\n",
       "      <th>asset</th>\n",
       "      <th>derived (%)</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>Anna</td>\n",
       "      <td>MyBank</td>\n",
       "      <td>ACME Bank</td>\n",
       "      <td>14.705432</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>Anna</td>\n",
       "      <td>MyBank</td>\n",
       "      <td>CelestialWave Industries</td>\n",
       "      <td>5.075200</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>Anna</td>\n",
       "      <td>MyBank</td>\n",
       "      <td>CyberNexus Systems</td>\n",
       "      <td>20.800000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>Anna</td>\n",
       "      <td>MyBank</td>\n",
       "      <td>DreamScape Enterprises</td>\n",
       "      <td>0.380640</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>Anna</td>\n",
       "      <td>MyBank</td>\n",
       "      <td>ElysiumTech Solutions</td>\n",
       "      <td>1.130501</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>Anna</td>\n",
       "      <td>MyBank</td>\n",
       "      <td>InfinityForge Technologies</td>\n",
       "      <td>8.320000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>Anna</td>\n",
       "      <td>MyBank</td>\n",
       "      <td>NebulaTech Solutions</td>\n",
       "      <td>22.400000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>Anna</td>\n",
       "      <td>MyBank</td>\n",
       "      <td>NovaCore Innovations</td>\n",
       "      <td>10.277280</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>Anna</td>\n",
       "      <td>MyBank</td>\n",
       "      <td>PhoenixRise Ventures</td>\n",
       "      <td>12.688000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>Anna</td>\n",
       "      <td>MyBank</td>\n",
       "      <td>Quantum Dynamics Innovations</td>\n",
       "      <td>3.840000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>Anna</td>\n",
       "      <td>MyBank</td>\n",
       "      <td>StellarSphere Enterprises</td>\n",
       "      <td>20.800000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>"
      ],
      "text/plain": [
       "<relationalai.dsl.Context at 0x149317650>"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "with model.query() as select:\n",
    "    d = DerivedOwnership() \n",
    "    d.owner.name == 'Anna'\n",
    "    res = select(alias(d.owner.name, 'owner'), alias(d.sub_owner.name,'sub_owner'), alias(d.asset.name, 'asset'), alias(d.part*100, 'derived (%)'))\n",
    "\n",
    "res"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "source": [
    "> **Tip**. Quite a lot of new indirectly-owned assets (and that's for Anna alone)."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Extending `Control` relationship with accumulated ownership\n",
    "Let's now use total values that we get from summing up all of the possible paths in order identify more controlling relationships"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "source": [
    "> **Note**. We now want to repeat the same rules, defining `Control` relationship, but using new accumulated ownership values from `TotalOwnership` instead of `DirectOwnership`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": [
     "hide-input"
    ]
   },
   "outputs": [],
   "source": [
    "with model.rule():\n",
    "    o = TotalOwnership()\n",
    "    o.part > 0.5\n",
    "    c = Control.add(controller = o.owner, controlled = o.asset)\n",
    "    c.reason.add(1) #used later for visualization purposes\n",
    "\n",
    "with model.rule():\n",
    "    ctrl = Control()\n",
    "    o = TotalOwnership()\n",
    "    with model.match(multiple=True) as all_ownerships:\n",
    "        with o.owner == ctrl.controlled: all_ownerships.add(o)\n",
    "        with o.owner == ctrl.controller: all_ownerships.add(o)\n",
    "    sum(all_ownerships, all_ownerships.part, per = [ctrl.controller, all_ownerships.asset]) > 0.5\n",
    "    c = Control.add(controller = ctrl.controller, controlled = all_ownerships.asset)\n",
    "    c.reason.add(2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "  <style>\n",
       "    /* Main divisions */\n",
       "    #iX0kYNYWSSTeQTImz-main-div {\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "      padding: 3px;\n",
       "      background-color: white;\n",
       "    }\n",
       "    #iX0kYNYWSSTeQTImz-left-div {\n",
       "      float: left;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    #iX0kYNYWSSTeQTImz-right-div {\n",
       "      float: left;\n",
       "      height: 100%;\n",
       "      display: none;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    #iX0kYNYWSSTeQTImz-right-inner-div {\n",
       "      padding-left: 5px;\n",
       "      padding-right: 2px;\n",
       "      overflow-x: hidden;\n",
       "      overflow-y: auto;\n",
       "      height: 100%;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "\n",
       "    /* Graph and details (contained in left-inner-div) */\n",
       "    #iX0kYNYWSSTeQTImz-graph-div {\n",
       "      overflow: hidden;\n",
       "      resize: vertical;\n",
       "      position: relative;\n",
       "      border: 1px solid #ccc;\n",
       "      border-radius: 4px;\n",
       "      box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2);\n",
       "      display: none;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    #iX0kYNYWSSTeQTImz-details-div {\n",
       "      overflow: auto;\n",
       "      resize: vertical;\n",
       "      margin-top: 5px;\n",
       "      border: 1px solid #ccc;\n",
       "      border-radius: 4px;\n",
       "      box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2);\n",
       "      display: none;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    #iX0kYNYWSSTeQTImz-details-head {\n",
       "      user-select: none;\n",
       "      padding-left: 4px !important;\n",
       "      padding-top: 4px !important;\n",
       "      font-size: 8px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      color: gray;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    #iX0kYNYWSSTeQTImz-details-body {\n",
       "      padding: 10px;\n",
       "      padding-top: 6px;\n",
       "      font-size: 10px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "\n",
       "    /* Control menu (contained in right-inner-div) */\n",
       "    .iX0kYNYWSSTeQTImz-menu-item-head {\n",
       "      font-size: 11px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      color: black;\n",
       "      cursor: pointer;\n",
       "      padding-left: 5px;\n",
       "      padding-right: 0px;\n",
       "      padding-top: 5px;\n",
       "      padding-bottom: 5px;\n",
       "      margin-bottom: 5px;\n",
       "      border-radius: 4px;\n",
       "      border: 1px solid #ccc;\n",
       "      box-shadow: 0px 0px 3px rgba(0, 0, 0, 0.2);\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    .iX0kYNYWSSTeQTImz-menu-item-body {\n",
       "      margin-left: 5px;\n",
       "      margin-bottom: 10px;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    .iX0kYNYWSSTeQTImz-menu-subitem-head {\n",
       "      font-size: 9px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      font-weight: 600;\n",
       "      color: #006429;\n",
       "      cursor: default;\n",
       "      margin-bottom: 2px;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    .iX0kYNYWSSTeQTImz-menu-subitem-body {\n",
       "      font-size: 8px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      margin-left: 7px;\n",
       "      margin-bottom: 5px;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    .iX0kYNYWSSTeQTImz-labeled-input {\n",
       "      all: initial;\n",
       "      display: flex;\n",
       "      align-items: center;\n",
       "      margin-top: 1px;\n",
       "      margin-bottom: 1px;\n",
       "    }\n",
       "    .iX0kYNYWSSTeQTImz-label {\n",
       "      all: initial;\n",
       "      font-size: 8px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      font-style: italic;\n",
       "      cursor: pointer;\n",
       "    }\n",
       "    .iX0kYNYWSSTeQTImz-slider {\n",
       "      width: 100%;\n",
       "      margin-bottom: 2px;\n",
       "    }\n",
       "    .iX0kYNYWSSTeQTImz-slider::-moz-focus-outer {\n",
       "      border: 0;\n",
       "    }\n",
       "    .iX0kYNYWSSTeQTImz-slider-text-left {\n",
       "      font-size: 8px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      font-style: italic;\n",
       "      color: black;\n",
       "      float: left;\n",
       "      margin-top: 2px;\n",
       "    }\n",
       "    .iX0kYNYWSSTeQTImz-slider-text-right {\n",
       "      font-size: 8px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      color: black;\n",
       "      float: right;\n",
       "    }\n",
       "    .iX0kYNYWSSTeQTImz-checkbox {\n",
       "      margin-left: 0px !important;\n",
       "      margin-right: 4px !important;\n",
       "      margin-top: 2px !important;\n",
       "      margin-bottom: 2px !important;\n",
       "      padding: 0px !important;\n",
       "    }\n",
       "    .iX0kYNYWSSTeQTImz-select {\n",
       "      cursor: pointer;\n",
       "      outline: none;\n",
       "      font-size: 8px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      color: black;\n",
       "      background-color: #f5f5f5;\n",
       "      width: 100%;\n",
       "      padding-top: 4px !important;\n",
       "      padding-bottom: 4px !important;\n",
       "      padding-left: 5px;\n",
       "      padding-right: 10px;\n",
       "      margin-right: 5px;\n",
       "      margin-top: 2px;\n",
       "      margin-bottom: 2px;\n",
       "      border-radius: 4px;\n",
       "      border: 1.2px solid #bbb;\n",
       "      box-shadow: 0 1px 0 1px rgba(0, 0, 0, 0.04);\n",
       "\n",
       "      -moz-appearance: none;\n",
       "      -webkit-appearance: none;\n",
       "      appearance: none;\n",
       "      background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyOTIuNCIgaGVpZ2h0PSIyOTIuNCI+PHBhdGggZmlsbD0iIzAwMDAwMCIgZD0iTSAtNS4yMDY0NjJlLTYsNjQuNTcyNjU2IDI5Mi4zOTk5OSw2NC41NzI2NTQgMTQ2LjE5OTk3LDIzMy42Mjg0NyAtNS4yMDY0NjJlLTYsNjQuNTcyNjU2Ii8+PC9zdmc+Cg==');\n",
       "      background-repeat: no-repeat;\n",
       "      background-position: right 4px top 50%;\n",
       "      background-size: 6px;\n",
       "    }\n",
       "    @-moz-document url-prefix() {\n",
       "      /* Dirty hack to remove dotted border on focus */\n",
       "      .iX0kYNYWSSTeQTImz-select {\n",
       "        color: transparent !important;\n",
       "        text-shadow: 0 0 0 black !important;\n",
       "      }\n",
       "    }\n",
       "    .iX0kYNYWSSTeQTImz-select:after {\n",
       "      cursor: pointer;\n",
       "    }\n",
       "    .iX0kYNYWSSTeQTImz-button {\n",
       "      cursor: pointer;\n",
       "      outline: none;\n",
       "      font-size: 8px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      color: black;\n",
       "      background-color: #f2f2f2;\n",
       "      padding-top: 4px !important;\n",
       "      padding-bottom: 4px !important;\n",
       "      padding-left: 10px;\n",
       "      padding-right: 10px;\n",
       "      margin-top: 2px;\n",
       "      margin-bottom: 2px;\n",
       "      border-radius: 4px;\n",
       "      border: 1.2px solid #bbb;\n",
       "      box-shadow: 0 1px 0 1px rgba(0, 0, 0, 0.04);\n",
       "    }\n",
       "    .iX0kYNYWSSTeQTImz-button:hover {\n",
       "      border: 1.2px solid #999;\n",
       "      background-color: #f2f2f2;\n",
       "    }\n",
       "    .iX0kYNYWSSTeQTImz-button:active {\n",
       "      background-color: #ddd;\n",
       "    }\n",
       "    .iX0kYNYWSSTeQTImz-button::-moz-focus-inner {\n",
       "      border: 0;\n",
       "    }\n",
       "    /* Hidden menu items */\n",
       "    #iX0kYNYWSSTeQTImz-graph-select-div {\n",
       "      display: none;\n",
       "    }\n",
       "    #iX0kYNYWSSTeQTImz-node-size-norm-div {\n",
       "      display: none;\n",
       "    }\n",
       "    #iX0kYNYWSSTeQTImz-edge-size-norm-div {\n",
       "      display: none;\n",
       "    }\n",
       "\n",
       "    /* Graph */\n",
       "    #iX0kYNYWSSTeQTImz-tooltip-div {\n",
       "      font-size: 10px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      z-index: 42001;\n",
       "      opacity: 0;\n",
       "      visibility: hidden;\n",
       "      position: absolute !important;\n",
       "      max-width: 40%;\n",
       "      padding: 5px;\n",
       "      white-space: pre-wrap;\n",
       "      word-break: break-word;\n",
       "      color: black;\n",
       "      background-color: white;\n",
       "      border-radius: 4px;\n",
       "      border: 1px solid #ccc;\n",
       "      box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.2);\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    #iX0kYNYWSSTeQTImz-menu-toggle-button, #iX0kYNYWSSTeQTImz-details-toggle-button, #iX0kYNYWSSTeQTImz-progress-container {\n",
       "      font-size: 14px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      z-index: 42000;\n",
       "      cursor: pointer;\n",
       "      position: absolute;\n",
       "      background-color: white;\n",
       "      border-radius: 4px;\n",
       "      box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.2);\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    #iX0kYNYWSSTeQTImz-menu-toggle-button {\n",
       "      top: 0;\n",
       "      right: 0;\n",
       "      padding-left: 6px;\n",
       "      padding-right: 6px;\n",
       "      padding-top: 12px;\n",
       "      padding-bottom: 12px;\n",
       "      border-top: 0px;\n",
       "      border-right: 0px;\n",
       "      border-bottom: 1px solid #ccc;\n",
       "      border-left: 1px solid #ccc;\n",
       "    }\n",
       "    #iX0kYNYWSSTeQTImz-details-toggle-button {\n",
       "      bottom: 0;\n",
       "      left: 0;\n",
       "      padding-left: 19px;\n",
       "      padding-right: 19px;\n",
       "      padding-top: 0.5px;\n",
       "      padding-bottom: 2px;\n",
       "      border-top: 1px solid #ccc;\n",
       "      border-right: 1px solid #ccc;\n",
       "      border-bottom: 0px;\n",
       "      border-left: 0px;\n",
       "    }\n",
       "    #iX0kYNYWSSTeQTImz-progress-container {\n",
       "      font-size: 10px;\n",
       "      text-align: center;\n",
       "      top: 46%;\n",
       "      left: 15%;\n",
       "      width: 70%;\n",
       "      padding: 8px;\n",
       "      border: none;\n",
       "      box-shadow: none;\n",
       "    }\n",
       "\n",
       "    /* Details */\n",
       "    #iX0kYNYWSSTeQTImz-details-user-provided {\n",
       "      margin-top: 3px;\n",
       "      padding-top: 3.5px;\n",
       "      border-top: 0.5px dashed black;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "      white-space: pre-wrap;\n",
       "      word-break: break-word;\n",
       "    }\n",
       "    #iX0kYNYWSSTeQTImz-details-user-provided ul {\n",
       "      list-style-position: inside;\n",
       "      padding-left: 6px;\n",
       "    }\n",
       "\n",
       "    /* Unavailable in vis.js and therefore hidden */\n",
       "    #iX0kYNYWSSTeQTImz-svg,\n",
       "    #iX0kYNYWSSTeQTImz-node-label-rotation,\n",
       "    #iX0kYNYWSSTeQTImz-edge-label-rotation {\n",
       "      display: none;\n",
       "    }\n",
       "    /* Specific to vis.js */\n",
       "    div.vis-tooltip {\n",
       "      position: absolute;\n",
       "      visibility: hidden;\n",
       "      pointer-events: none;\n",
       "      z-index: 5;\n",
       "      max-width: 40%;\n",
       "      white-space: pre-wrap;\n",
       "      word-break: break-word;\n",
       "      font-size: 10px;\n",
       "      padding: 5px;\n",
       "      color: black;\n",
       "      background-color: white;\n",
       "      -moz-border-radius: 3px;\n",
       "      -webkit-border-radius: 3px;\n",
       "      border-radius: 3px;\n",
       "      border: 0.5px solid black;\n",
       "      box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.3);\n",
       "    }\n",
       "  </style>\n",
       "\n",
       "  <div id=\"iX0kYNYWSSTeQTImz-main-div\">\n",
       "    <div id=\"iX0kYNYWSSTeQTImz-tooltip-div\"></div>\n",
       "\n",
       "    <div id=\"iX0kYNYWSSTeQTImz-left-div\">\n",
       "      <div id=\"iX0kYNYWSSTeQTImz-left-inner-div\">\n",
       "        <div id=\"iX0kYNYWSSTeQTImz-graph-div\"></div>\n",
       "        <div id=\"iX0kYNYWSSTeQTImz-details-div\">\n",
       "          <div id=\"iX0kYNYWSSTeQTImz-details-head\">\n",
       "            Details for selected element\n",
       "          </div>\n",
       "          <div id=\"iX0kYNYWSSTeQTImz-details-body\">\n",
       "          </div>\n",
       "        </div>\n",
       "      </div>\n",
       "    </div>\n",
       "\n",
       "    <div id=\"iX0kYNYWSSTeQTImz-right-div\">\n",
       "      <div id=\"iX0kYNYWSSTeQTImz-right-inner-div\">\n",
       "        <!-- Menu: General -->\n",
       "        <div class=\"iX0kYNYWSSTeQTImz-menu-item-head\"\n",
       "             id=\"iX0kYNYWSSTeQTImz-general-head\">\n",
       "          General\n",
       "        </div>\n",
       "        <div class=\"iX0kYNYWSSTeQTImz-menu-item-body\"\n",
       "             id=\"iX0kYNYWSSTeQTImz-general-body\">\n",
       "          <!-- Sub-menu: State -->\n",
       "          <div>\n",
       "            <div class=\"iX0kYNYWSSTeQTImz-menu-subitem-head\">\n",
       "              App state\n",
       "            </div>\n",
       "            <div class=\"iX0kYNYWSSTeQTImz-menu-subitem-body\">\n",
       "              <button class=\"iX0kYNYWSSTeQTImz-button\"\n",
       "                      id=\"iX0kYNYWSSTeQTImz-reset\"\n",
       "                      type=\"button\">Reset</button>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Display mode (fullscreen or not) -->\n",
       "          <div>\n",
       "            <div class=\"iX0kYNYWSSTeQTImz-menu-subitem-head\">\n",
       "              Display mode\n",
       "            </div>\n",
       "            <div class=\"iX0kYNYWSSTeQTImz-menu-subitem-body\">\n",
       "              <button class=\"iX0kYNYWSSTeQTImz-button\"\n",
       "                      id=\"iX0kYNYWSSTeQTImz-fullscreen-button\"\n",
       "                      type=\"button\">Enter full screen</button>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Export -->\n",
       "          <div>\n",
       "            <div class=\"iX0kYNYWSSTeQTImz-menu-subitem-head\">\n",
       "              Export\n",
       "            </div>\n",
       "            <div class=\"iX0kYNYWSSTeQTImz-menu-subitem-body\">\n",
       "              <button class=\"iX0kYNYWSSTeQTImz-button\"\n",
       "                      id=\"iX0kYNYWSSTeQTImz-svg\"\n",
       "                      type=\"button\">SVG</button>\n",
       "              <button class=\"iX0kYNYWSSTeQTImz-button\"\n",
       "                      id=\"iX0kYNYWSSTeQTImz-png\"\n",
       "                      type=\"button\">PNG</button>\n",
       "              <button class=\"iX0kYNYWSSTeQTImz-button\"\n",
       "                      id=\"iX0kYNYWSSTeQTImz-jpg\"\n",
       "                      type=\"button\">JPG</button>\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "        <!-- Menu: Data -->\n",
       "        <div class=\"iX0kYNYWSSTeQTImz-menu-item-head\"\n",
       "             id=\"iX0kYNYWSSTeQTImz-data-head\">\n",
       "          Data selection\n",
       "        </div>\n",
       "        <div class=\"iX0kYNYWSSTeQTImz-menu-item-body\"\n",
       "             id=\"iX0kYNYWSSTeQTImz-data-body\">\n",
       "          <!-- Sub-menu: Graph (only shown if multiple graphs in data) -->\n",
       "          <div id=\"iX0kYNYWSSTeQTImz-graph-select-div\">\n",
       "            <div class=\"iX0kYNYWSSTeQTImz-menu-subitem-head\">\n",
       "              Graph\n",
       "            </div>\n",
       "            <div class=\"iX0kYNYWSSTeQTImz-menu-subitem-body\">\n",
       "              <select class=\"iX0kYNYWSSTeQTImz-select\"\n",
       "                      id=\"iX0kYNYWSSTeQTImz-graph-select\"></select>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Node label text -->\n",
       "          <div>\n",
       "            <div class=\"iX0kYNYWSSTeQTImz-menu-subitem-head\">\n",
       "              Node label text\n",
       "            </div>\n",
       "            <div class=\"iX0kYNYWSSTeQTImz-menu-subitem-body\">\n",
       "              <select class=\"iX0kYNYWSSTeQTImz-select\"\n",
       "                      id=\"iX0kYNYWSSTeQTImz-node-label-data-source-select\"></select>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Edge label text -->\n",
       "          <div>\n",
       "            <div class=\"iX0kYNYWSSTeQTImz-menu-subitem-head\">\n",
       "              Edge label text\n",
       "            </div>\n",
       "            <div class=\"iX0kYNYWSSTeQTImz-menu-subitem-body\">\n",
       "              <select class=\"iX0kYNYWSSTeQTImz-select\"\n",
       "                      id=\"iX0kYNYWSSTeQTImz-edge-label-data-source-select\"></select>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Node size -->\n",
       "          <div class=\"iX0kYNYWSSTeQTImz-menu-subitem-head\">\n",
       "            Node size\n",
       "          </div>\n",
       "          <div class=\"iX0kYNYWSSTeQTImz-menu-subitem-body\">\n",
       "            <div>\n",
       "              <select class=\"iX0kYNYWSSTeQTImz-select\"\n",
       "                      id=\"iX0kYNYWSSTeQTImz-node-size-data-source-select\"></select>\n",
       "            </div>\n",
       "            <div class=\"iX0kYNYWSSTeQTImz-labeled-input\">\n",
       "              <input class=\"iX0kYNYWSSTeQTImz-checkbox\"\n",
       "                     id=\"iX0kYNYWSSTeQTImz-node-size-normalization-checkbox\"\n",
       "                     type=\"checkbox\">\n",
       "              <label class=\"iX0kYNYWSSTeQTImz-label\"\n",
       "                     for=\"iX0kYNYWSSTeQTImz-node-size-normalization-checkbox\">Normalize</label>\n",
       "            </div>\n",
       "            <div id=\"iX0kYNYWSSTeQTImz-node-size-norm-div\">\n",
       "              <div>\n",
       "                <span class=\"iX0kYNYWSSTeQTImz-slider-text-left\">Minimum</span>\n",
       "                <span class=\"iX0kYNYWSSTeQTImz-slider-text-right\"\n",
       "                      id=\"iX0kYNYWSSTeQTImz-node-size-normalization-min-text\"></span>\n",
       "                <input class=\"iX0kYNYWSSTeQTImz-slider\"\n",
       "                       id=\"iX0kYNYWSSTeQTImz-node-size-normalization-min-slider\"\n",
       "                       type=\"range\" min=\"0.01\" max=\"300.0\" step=\"0.01\">\n",
       "              </div>\n",
       "              <div>\n",
       "                <span class=\"iX0kYNYWSSTeQTImz-slider-text-left\">Maximum</span>\n",
       "                <span class=\"iX0kYNYWSSTeQTImz-slider-text-right\"\n",
       "                      id=\"iX0kYNYWSSTeQTImz-node-size-normalization-max-text\"></span>\n",
       "                <input class=\"iX0kYNYWSSTeQTImz-slider\"\n",
       "                       id=\"iX0kYNYWSSTeQTImz-node-size-normalization-max-slider\"\n",
       "                       type=\"range\" min=\"0.01\" max=\"300.0\" step=\"0.01\">\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Edge size -->\n",
       "          <div class=\"iX0kYNYWSSTeQTImz-menu-subitem-head\">\n",
       "            Edge size\n",
       "          </div>\n",
       "          <div class=\"iX0kYNYWSSTeQTImz-menu-subitem-body\">\n",
       "            <div>\n",
       "              <select class=\"iX0kYNYWSSTeQTImz-select\"\n",
       "                      id=\"iX0kYNYWSSTeQTImz-edge-size-data-source-select\"></select>\n",
       "            </div>\n",
       "            <div class=\"iX0kYNYWSSTeQTImz-labeled-input\">\n",
       "              <input class=\"iX0kYNYWSSTeQTImz-checkbox\"\n",
       "                     id=\"iX0kYNYWSSTeQTImz-edge-size-normalization-checkbox\"\n",
       "                     type=\"checkbox\">\n",
       "              <label class=\"iX0kYNYWSSTeQTImz-label\"\n",
       "                     for=\"iX0kYNYWSSTeQTImz-edge-size-normalization-checkbox\">Normalize</label>\n",
       "            </div>\n",
       "            <div id=\"iX0kYNYWSSTeQTImz-edge-size-norm-div\">\n",
       "              <div>\n",
       "                <span class=\"iX0kYNYWSSTeQTImz-slider-text-left\">Minimum</span>\n",
       "                <span class=\"iX0kYNYWSSTeQTImz-slider-text-right\"\n",
       "                      id=\"iX0kYNYWSSTeQTImz-edge-size-normalization-min-text\"></span>\n",
       "                <input class=\"iX0kYNYWSSTeQTImz-slider\"\n",
       "                       id=\"iX0kYNYWSSTeQTImz-edge-size-normalization-min-slider\"\n",
       "                       type=\"range\" min=\"0.01\" max=\"50.0\" step=\"0.01\">\n",
       "              </div>\n",
       "              <div>\n",
       "                <span class=\"iX0kYNYWSSTeQTImz-slider-text-left\">Maximum</span>\n",
       "                <span class=\"iX0kYNYWSSTeQTImz-slider-text-right\"\n",
       "                      id=\"iX0kYNYWSSTeQTImz-edge-size-normalization-max-text\"></span>\n",
       "                <input class=\"iX0kYNYWSSTeQTImz-slider\"\n",
       "                       id=\"iX0kYNYWSSTeQTImz-edge-size-normalization-max-slider\"\n",
       "                       type=\"range\" min=\"0.01\" max=\"50.0\" step=\"0.01\">\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "        <!-- Menu: Nodes -->\n",
       "        <div class=\"iX0kYNYWSSTeQTImz-menu-item-head\"\n",
       "             id=\"iX0kYNYWSSTeQTImz-node-head\">\n",
       "          Nodes\n",
       "        </div>\n",
       "        <div class=\"iX0kYNYWSSTeQTImz-menu-item-body\"\n",
       "             id=\"iX0kYNYWSSTeQTImz-node-body\">\n",
       "          <!-- Sub-menu: Visibility -->\n",
       "          <div>\n",
       "            <div class=\"iX0kYNYWSSTeQTImz-menu-subitem-head\">\n",
       "              Visibility\n",
       "            </div>\n",
       "            <div class=\"iX0kYNYWSSTeQTImz-menu-subitem-body\">\n",
       "              <div class=\"iX0kYNYWSSTeQTImz-labeled-input\">\n",
       "                <input class=\"iX0kYNYWSSTeQTImz-checkbox\"\n",
       "                       id=\"iX0kYNYWSSTeQTImz-node-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"iX0kYNYWSSTeQTImz-label\"\n",
       "                       for=\"iX0kYNYWSSTeQTImz-node-checkbox\">Show nodes</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Size -->\n",
       "          <div>\n",
       "            <div class=\"iX0kYNYWSSTeQTImz-menu-subitem-head\">\n",
       "              Size\n",
       "            </div>\n",
       "            <div class=\"iX0kYNYWSSTeQTImz-menu-subitem-body\">\n",
       "              <div>\n",
       "                <span class=\"iX0kYNYWSSTeQTImz-slider-text-left\">Scaling factor</span>\n",
       "                <span class=\"iX0kYNYWSSTeQTImz-slider-text-right\"\n",
       "                      id=\"iX0kYNYWSSTeQTImz-node-size-factor-text\"></span>\n",
       "                <input class=\"iX0kYNYWSSTeQTImz-slider\"\n",
       "                       id=\"iX0kYNYWSSTeQTImz-node-size-factor-slider\"\n",
       "                       type=\"range\" min=\"0.01\" max=\"5.0\" step=\"0.01\">\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Position -->\n",
       "          <div>\n",
       "            <div class=\"iX0kYNYWSSTeQTImz-menu-subitem-head\">\n",
       "              Position\n",
       "            </div>\n",
       "            <div class=\"iX0kYNYWSSTeQTImz-menu-subitem-body\">\n",
       "              <button class=\"iX0kYNYWSSTeQTImz-button\"\n",
       "                      id=\"iX0kYNYWSSTeQTImz-node-release-button\"\n",
       "                      type=\"button\">Release fixed nodes</button>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Drag behavior -->\n",
       "          <div>\n",
       "            <div class=\"iX0kYNYWSSTeQTImz-menu-subitem-head\">\n",
       "              Drag behavior\n",
       "            </div>\n",
       "            <div class=\"iX0kYNYWSSTeQTImz-menu-subitem-body\">\n",
       "              <div class=\"iX0kYNYWSSTeQTImz-labeled-input\">\n",
       "                <input class=\"iX0kYNYWSSTeQTImz-checkbox\"\n",
       "                       id=\"iX0kYNYWSSTeQTImz-node-drag-fix-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"iX0kYNYWSSTeQTImz-label\"\n",
       "                       for=\"iX0kYNYWSSTeQTImz-node-drag-fix-checkbox\">Fix node position</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Hover behavior -->\n",
       "          <div>\n",
       "            <div class=\"iX0kYNYWSSTeQTImz-menu-subitem-head\">\n",
       "              Hover behavior\n",
       "            </div>\n",
       "            <div class=\"iX0kYNYWSSTeQTImz-menu-subitem-body\">\n",
       "              <div class=\"iX0kYNYWSSTeQTImz-labeled-input\">\n",
       "                <input class=\"iX0kYNYWSSTeQTImz-checkbox\"\n",
       "                       id=\"iX0kYNYWSSTeQTImz-node-hover-neighborhood-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"iX0kYNYWSSTeQTImz-label\"\n",
       "                       for=\"iX0kYNYWSSTeQTImz-node-hover-neighborhood-checkbox\">Show neighborhood</label>\n",
       "              </div>\n",
       "              <div class=\"iX0kYNYWSSTeQTImz-labeled-input\">\n",
       "                <input class=\"iX0kYNYWSSTeQTImz-checkbox\"\n",
       "                       id=\"iX0kYNYWSSTeQTImz-node-hover-tooltip-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"iX0kYNYWSSTeQTImz-label\"\n",
       "                       for=\"iX0kYNYWSSTeQTImz-node-hover-tooltip-checkbox\">Show tooltips (if provided)</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "        <!-- Menu: Node images -->\n",
       "        <div id=\"iX0kYNYWSSTeQTImz-node-image-meta-control\">\n",
       "          <div class=\"iX0kYNYWSSTeQTImz-menu-item-head\"\n",
       "               id=\"iX0kYNYWSSTeQTImz-node-image-head\">\n",
       "            Node images\n",
       "          </div>\n",
       "          <div class=\"iX0kYNYWSSTeQTImz-menu-item-body\"\n",
       "               id=\"iX0kYNYWSSTeQTImz-node-image-body\">\n",
       "            <!-- Sub-menu: Visibility -->\n",
       "            <div>\n",
       "              <div class=\"iX0kYNYWSSTeQTImz-menu-subitem-head\">\n",
       "                Visibility\n",
       "              </div>\n",
       "              <div class=\"iX0kYNYWSSTeQTImz-menu-subitem-body\">\n",
       "                <div class=\"iX0kYNYWSSTeQTImz-labeled-input\">\n",
       "                  <input class=\"iX0kYNYWSSTeQTImz-checkbox\"\n",
       "                         id=\"iX0kYNYWSSTeQTImz-node-image-checkbox\"\n",
       "                         type=\"checkbox\">\n",
       "                  <label class=\"iX0kYNYWSSTeQTImz-label\"\n",
       "                         for=\"iX0kYNYWSSTeQTImz-node-image-checkbox\">Show node images</label>\n",
       "                </div>\n",
       "              </div>\n",
       "            </div>\n",
       "            <!-- Sub-menu: Size -->\n",
       "            <div>\n",
       "              <div class=\"iX0kYNYWSSTeQTImz-menu-subitem-head\">\n",
       "                Size\n",
       "              </div>\n",
       "              <div class=\"iX0kYNYWSSTeQTImz-menu-subitem-body\">\n",
       "                <span class=\"iX0kYNYWSSTeQTImz-slider-text-left\">Scaling factor</span>\n",
       "                <span class=\"iX0kYNYWSSTeQTImz-slider-text-right\"\n",
       "                      id=\"iX0kYNYWSSTeQTImz-node-image-size-factor-text\"></span>\n",
       "                <input class=\"iX0kYNYWSSTeQTImz-slider\"\n",
       "                       id=\"iX0kYNYWSSTeQTImz-node-image-size-factor-slider\"\n",
       "                       type=\"range\" min=\"0.01\" max=\"5.0\" step=\"0.01\">\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "        <!-- Menu: Node labels -->\n",
       "        <div class=\"iX0kYNYWSSTeQTImz-menu-item-head\"\n",
       "             id=\"iX0kYNYWSSTeQTImz-node-label-head\">\n",
       "          Node labels\n",
       "        </div>\n",
       "        <div class=\"iX0kYNYWSSTeQTImz-menu-item-body\"\n",
       "             id=\"iX0kYNYWSSTeQTImz-node-label-body\">\n",
       "          <!-- Sub-menu: Visibility -->\n",
       "          <div>\n",
       "            <div class=\"iX0kYNYWSSTeQTImz-menu-subitem-head\">\n",
       "              Visibility\n",
       "            </div>\n",
       "            <div class=\"iX0kYNYWSSTeQTImz-menu-subitem-body\">\n",
       "              <div class=\"iX0kYNYWSSTeQTImz-labeled-input\">\n",
       "                <input class=\"iX0kYNYWSSTeQTImz-checkbox\"\n",
       "                       id=\"iX0kYNYWSSTeQTImz-node-label-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"iX0kYNYWSSTeQTImz-label\"\n",
       "                       for=\"iX0kYNYWSSTeQTImz-node-label-checkbox\">Show node labels</label>\n",
       "              </div>\n",
       "              <div class=\"iX0kYNYWSSTeQTImz-labeled-input\">\n",
       "                <input class=\"iX0kYNYWSSTeQTImz-checkbox\"\n",
       "                       id=\"iX0kYNYWSSTeQTImz-node-label-border-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"iX0kYNYWSSTeQTImz-label\"\n",
       "                       for=\"iX0kYNYWSSTeQTImz-node-label-border-checkbox\">Show borders</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Size -->\n",
       "          <div>\n",
       "            <div class=\"iX0kYNYWSSTeQTImz-menu-subitem-head\">\n",
       "              Size\n",
       "            </div>\n",
       "            <div class=\"iX0kYNYWSSTeQTImz-menu-subitem-body\">\n",
       "              <span class=\"iX0kYNYWSSTeQTImz-slider-text-left\">Scaling factor</span>\n",
       "              <span class=\"iX0kYNYWSSTeQTImz-slider-text-right\"\n",
       "                    id=\"iX0kYNYWSSTeQTImz-node-label-size-factor-text\"></span>\n",
       "              <input class=\"iX0kYNYWSSTeQTImz-slider\"\n",
       "                     id=\"iX0kYNYWSSTeQTImz-node-label-size-factor-slider\"\n",
       "                     type=\"range\" min=\"0.01\" max=\"5.0\" step=\"0.01\">\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Rotation -->\n",
       "          <div id=\"iX0kYNYWSSTeQTImz-node-label-rotation\">\n",
       "            <div class=\"iX0kYNYWSSTeQTImz-menu-subitem-head\">\n",
       "              Rotation\n",
       "            </div>\n",
       "            <div class=\"iX0kYNYWSSTeQTImz-menu-subitem-body\">\n",
       "              <span class=\"iX0kYNYWSSTeQTImz-slider-text-left\">Angle</span>\n",
       "              <span class=\"iX0kYNYWSSTeQTImz-slider-text-right\"\n",
       "                    id=\"iX0kYNYWSSTeQTImz-node-label-rotation-text\"></span>\n",
       "              <input class=\"iX0kYNYWSSTeQTImz-slider\"\n",
       "                     id=\"iX0kYNYWSSTeQTImz-node-label-rotation-slider\"\n",
       "                     type=\"range\" min=\"0.0\" max=\"359.0\" step=\"1.0\">\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "        <!-- Menu: Edges -->\n",
       "        <div class=\"iX0kYNYWSSTeQTImz-menu-item-head\"\n",
       "             id=\"iX0kYNYWSSTeQTImz-edge-head\">\n",
       "          Edges\n",
       "        </div>\n",
       "        <div class=\"iX0kYNYWSSTeQTImz-menu-item-body\"\n",
       "             id=\"iX0kYNYWSSTeQTImz-edge-body\">\n",
       "          <!-- Sub-menu: Visibility -->\n",
       "          <div>\n",
       "            <div class=\"iX0kYNYWSSTeQTImz-menu-subitem-head\">\n",
       "              Visibility\n",
       "            </div>\n",
       "            <div class=\"iX0kYNYWSSTeQTImz-menu-subitem-body\">\n",
       "              <div class=\"iX0kYNYWSSTeQTImz-labeled-input\">\n",
       "                <input class=\"iX0kYNYWSSTeQTImz-checkbox\"\n",
       "                       id=\"iX0kYNYWSSTeQTImz-edge-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"iX0kYNYWSSTeQTImz-label\"\n",
       "                       for=\"iX0kYNYWSSTeQTImz-edge-checkbox\">Show edges</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Size -->\n",
       "          <div>\n",
       "            <div class=\"iX0kYNYWSSTeQTImz-menu-subitem-head\">\n",
       "              Size\n",
       "            </div>\n",
       "            <div class=\"iX0kYNYWSSTeQTImz-menu-subitem-body\">\n",
       "              <span class=\"iX0kYNYWSSTeQTImz-slider-text-left\">Scaling factor</span>\n",
       "              <span class=\"iX0kYNYWSSTeQTImz-slider-text-right\"\n",
       "                    id=\"iX0kYNYWSSTeQTImz-edge-size-factor-text\"></span>\n",
       "              <input class=\"iX0kYNYWSSTeQTImz-slider\"\n",
       "                     id=\"iX0kYNYWSSTeQTImz-edge-size-factor-slider\"\n",
       "                     type=\"range\" min=\"0.01\" max=\"5.0\" step=\"0.01\">\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Form -->\n",
       "          <div>\n",
       "            <div class=\"iX0kYNYWSSTeQTImz-menu-subitem-head\">\n",
       "              Form\n",
       "            </div>\n",
       "            <div class=\"iX0kYNYWSSTeQTImz-menu-subitem-body\">\n",
       "              <span class=\"iX0kYNYWSSTeQTImz-slider-text-left\">Curvature</span>\n",
       "              <span class=\"iX0kYNYWSSTeQTImz-slider-text-right\"\n",
       "                    id=\"iX0kYNYWSSTeQTImz-edge-curvature-text\"></span>\n",
       "              <input class=\"iX0kYNYWSSTeQTImz-slider\"\n",
       "                     id=\"iX0kYNYWSSTeQTImz-edge-curvature-slider\"\n",
       "                     type=\"range\" min=\"-1.2\" max=\"1.2\" step=\"0.02\">\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Hover behavior -->\n",
       "          <div>\n",
       "            <div class=\"iX0kYNYWSSTeQTImz-menu-subitem-head\">\n",
       "              Hover behavior\n",
       "            </div>\n",
       "            <div class=\"iX0kYNYWSSTeQTImz-menu-subitem-body\">\n",
       "              <div class=\"iX0kYNYWSSTeQTImz-labeled-input\">\n",
       "                <input class=\"iX0kYNYWSSTeQTImz-checkbox\"\n",
       "                       id=\"iX0kYNYWSSTeQTImz-edge-hover-tooltip-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"iX0kYNYWSSTeQTImz-label\"\n",
       "                       for=\"iX0kYNYWSSTeQTImz-edge-hover-tooltip-checkbox\">Show tooltips (if provided)</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "        <!-- Menu: Edge labels -->\n",
       "        <div class=\"iX0kYNYWSSTeQTImz-menu-item-head\"\n",
       "             id=\"iX0kYNYWSSTeQTImz-edge-label-head\">\n",
       "          Edge labels\n",
       "        </div>\n",
       "        <div class=\"iX0kYNYWSSTeQTImz-menu-item-body\"\n",
       "             id=\"iX0kYNYWSSTeQTImz-edge-label-body\">\n",
       "          <!-- Sub-menu: Visibility -->\n",
       "          <div>\n",
       "            <div class=\"iX0kYNYWSSTeQTImz-menu-subitem-head\">\n",
       "              Visibility\n",
       "            </div>\n",
       "            <div class=\"iX0kYNYWSSTeQTImz-menu-subitem-body\">\n",
       "              <div class=\"iX0kYNYWSSTeQTImz-labeled-input\">\n",
       "                <input class=\"iX0kYNYWSSTeQTImz-checkbox\"\n",
       "                       id=\"iX0kYNYWSSTeQTImz-edge-label-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"iX0kYNYWSSTeQTImz-label\"\n",
       "                       for=\"iX0kYNYWSSTeQTImz-edge-label-checkbox\">Show edge labels</label>\n",
       "              </div>\n",
       "              <div class=\"iX0kYNYWSSTeQTImz-labeled-input\">\n",
       "                <input class=\"iX0kYNYWSSTeQTImz-checkbox\"\n",
       "                       id=\"iX0kYNYWSSTeQTImz-edge-label-border-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"iX0kYNYWSSTeQTImz-label\"\n",
       "                       for=\"iX0kYNYWSSTeQTImz-edge-label-border-checkbox\">Show borders</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Size -->\n",
       "          <div>\n",
       "            <div class=\"iX0kYNYWSSTeQTImz-menu-subitem-head\">\n",
       "              Size\n",
       "            </div>\n",
       "            <div class=\"iX0kYNYWSSTeQTImz-menu-subitem-body\">\n",
       "              <span class=\"iX0kYNYWSSTeQTImz-slider-text-left\">Scaling factor</span>\n",
       "              <span class=\"iX0kYNYWSSTeQTImz-slider-text-right\"\n",
       "                    id=\"iX0kYNYWSSTeQTImz-edge-label-size-factor-text\"></span>\n",
       "              <input class=\"iX0kYNYWSSTeQTImz-slider\"\n",
       "                     id=\"iX0kYNYWSSTeQTImz-edge-label-size-factor-slider\"\n",
       "                     type=\"range\" min=\"0.01\" max=\"5.0\" step=\"0.01\">\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Rotation -->\n",
       "          <div id=\"iX0kYNYWSSTeQTImz-edge-label-rotation\">\n",
       "            <div class=\"iX0kYNYWSSTeQTImz-menu-subitem-head\">\n",
       "              Rotation\n",
       "            </div>\n",
       "            <div class=\"iX0kYNYWSSTeQTImz-menu-subitem-body\">\n",
       "              <span class=\"iX0kYNYWSSTeQTImz-slider-text-left\">Angle</span>\n",
       "              <span class=\"iX0kYNYWSSTeQTImz-slider-text-right\"\n",
       "                      id=\"iX0kYNYWSSTeQTImz-edge-label-rotation-text\"></span>\n",
       "              <input class=\"iX0kYNYWSSTeQTImz-slider\"\n",
       "                     id=\"iX0kYNYWSSTeQTImz-edge-label-rotation-slider\"\n",
       "                     type=\"range\" min=\"0.0\" max=\"359.0\" step=\"1.0\">\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "        <!-- Menu: Layout algorithm -->\n",
       "        <div class=\"iX0kYNYWSSTeQTImz-menu-item-head\"\n",
       "             id=\"iX0kYNYWSSTeQTImz-layout-algorithm-head\">\n",
       "          Layout algorithm\n",
       "        </div>\n",
       "        <div class=\"iX0kYNYWSSTeQTImz-menu-item-body\"\n",
       "             id=\"iX0kYNYWSSTeQTImz-layout-algorithm-body\">\n",
       "          <!-- Sub-menu: Simulation -->\n",
       "          <div>\n",
       "            <div class=\"iX0kYNYWSSTeQTImz-menu-subitem-head\">\n",
       "              Simulation\n",
       "            </div>\n",
       "            <div class=\"iX0kYNYWSSTeQTImz-menu-subitem-body\">\n",
       "              <div class=\"iX0kYNYWSSTeQTImz-labeled-input\">\n",
       "                <input class=\"iX0kYNYWSSTeQTImz-checkbox\"\n",
       "                       id=\"iX0kYNYWSSTeQTImz-simulation-active-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"iX0kYNYWSSTeQTImz-label\"\n",
       "                       for=\"iX0kYNYWSSTeQTImz-simulation-active-checkbox\">Active</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Algorithm -->\n",
       "          <div>\n",
       "            <div class=\"iX0kYNYWSSTeQTImz-menu-subitem-head\">\n",
       "              Algorithm\n",
       "            </div>\n",
       "            <div class=\"iX0kYNYWSSTeQTImz-menu-subitem-body\">\n",
       "              <div>\n",
       "                <select class=\"iX0kYNYWSSTeQTImz-select\"\n",
       "                        id=\"iX0kYNYWSSTeQTImz-layout-algorithm-select\"></select>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Parameters -->\n",
       "          <div>\n",
       "            <div class=\"iX0kYNYWSSTeQTImz-menu-subitem-head\">\n",
       "              Parameters\n",
       "            </div>\n",
       "            <div class=\"iX0kYNYWSSTeQTImz-menu-subitem-body\">\n",
       "              <div id=\"iX0kYNYWSSTeQTImz-gravitational-constant-div\">\n",
       "                <span class=\"iX0kYNYWSSTeQTImz-slider-text-left\">Gravitational constant</span>\n",
       "                <span class=\"iX0kYNYWSSTeQTImz-slider-text-right\"\n",
       "                      id=\"iX0kYNYWSSTeQTImz-gravitational-constant-text\"></span>\n",
       "                <input class=\"iX0kYNYWSSTeQTImz-slider\"\n",
       "                       id=\"iX0kYNYWSSTeQTImz-gravitational-constant-slider\"\n",
       "                       type=\"range\" min=\"-50000\" max=\"0\" step=\"1\"\n",
       "                       style=\"direction:rtl;\">\n",
       "              </div>\n",
       "              <div id=\"iX0kYNYWSSTeQTImz-spring-length-div\">\n",
       "                <span class=\"iX0kYNYWSSTeQTImz-slider-text-left\">Spring length</span>\n",
       "                <span class=\"iX0kYNYWSSTeQTImz-slider-text-right\"\n",
       "                      id=\"iX0kYNYWSSTeQTImz-spring-length-text\"></span>\n",
       "                <input class=\"iX0kYNYWSSTeQTImz-slider\"\n",
       "                       id=\"iX0kYNYWSSTeQTImz-spring-length-slider\"\n",
       "                       type=\"range\" min=\"0.0\" max=\"500\" step=\"0.1\">\n",
       "              </div>\n",
       "              <div id=\"iX0kYNYWSSTeQTImz-spring-constant-div\">\n",
       "                <span class=\"iX0kYNYWSSTeQTImz-slider-text-left\">Spring constant</span>\n",
       "                <span class=\"iX0kYNYWSSTeQTImz-slider-text-right\"\n",
       "                      id=\"iX0kYNYWSSTeQTImz-spring-constant-text\"></span>\n",
       "                <input class=\"iX0kYNYWSSTeQTImz-slider\"\n",
       "                       id=\"iX0kYNYWSSTeQTImz-spring-constant-slider\"\n",
       "                       type=\"range\" min=\"0.0\" max=\"1.0\" step=\"0.01\">\n",
       "              </div>\n",
       "              <div id=\"iX0kYNYWSSTeQTImz-avoid-overlap-div\">\n",
       "                <span class=\"iX0kYNYWSSTeQTImz-slider-text-left\">Avoid overlap</span>\n",
       "                <span class=\"iX0kYNYWSSTeQTImz-slider-text-right\"\n",
       "                      id=\"iX0kYNYWSSTeQTImz-avoid-overlap-text\"></span>\n",
       "                <input class=\"iX0kYNYWSSTeQTImz-slider\"\n",
       "                       id=\"iX0kYNYWSSTeQTImz-avoid-overlap-slider\"\n",
       "                       type=\"range\" min=\"0.0\" max=\"1.0\" step=\"0.01\">\n",
       "              </div>\n",
       "              <div id=\"iX0kYNYWSSTeQTImz-central-gravity-div\">\n",
       "                <span class=\"iX0kYNYWSSTeQTImz-slider-text-left\">Central gravity</span>\n",
       "                <span class=\"iX0kYNYWSSTeQTImz-slider-text-right\"\n",
       "                      id=\"iX0kYNYWSSTeQTImz-central-gravity-text\"></span>\n",
       "                <input class=\"iX0kYNYWSSTeQTImz-slider\"\n",
       "                       id=\"iX0kYNYWSSTeQTImz-central-gravity-slider\"\n",
       "                       type=\"range\" min=\"0.0\" max=\"10.0\" step=\"0.001\">\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "      </div>\n",
       "    </div>\n",
       "  </div>\n",
       "\n",
       "  <script charset=\"utf-8\" type=\"text/javascript\">\n",
       "    if(typeof(require) === \"undefined\"){\n",
       "      // Project sites:    https://requirejs.org\n",
       "//                   https://github.com/requirejs/requirejs\n",
       "// Code source:      https://requirejs.org/docs/release/2.3.6/minified/require.js - accessed on 19.11.2020\n",
       "// Original license: MIT\n",
       "// Code changes:     None\n",
       "\n",
       "/** vim: et:ts=4:sw=4:sts=4\n",
       " * @license RequireJS 2.3.6 Copyright jQuery Foundation and other contributors.\n",
       " * Released under MIT license, https://github.com/requirejs/requirejs/blob/master/LICENSE\n",
       " */\n",
       "var requirejs,require,define;!function(global,setTimeout){var req,s,head,baseElement,dataMain,src,interactiveScript,currentlyAddingScript,mainScript,subPath,version=\"2.3.6\",commentRegExp=/\\/\\*[\\s\\S]*?\\*\\/|([^:\"'=]|^)\\/\\/.*$/gm,cjsRequireRegExp=/[^.]\\s*require\\s*\\(\\s*[\"']([^'\"\\s]+)[\"']\\s*\\)/g,jsSuffixRegExp=/\\.js$/,currDirRegExp=/^\\.\\//,op=Object.prototype,ostring=op.toString,hasOwn=op.hasOwnProperty,isBrowser=!(\"undefined\"==typeof window||\"undefined\"==typeof navigator||!window.document),isWebWorker=!isBrowser&&\"undefined\"!=typeof importScripts,readyRegExp=isBrowser&&\"PLAYSTATION 3\"===navigator.platform?/^complete$/:/^(complete|loaded)$/,defContextName=\"_\",isOpera=\"undefined\"!=typeof opera&&\"[object Opera]\"===opera.toString(),contexts={},cfg={},globalDefQueue=[],useInteractive=!1;function commentReplace(e,t){return t||\"\"}function isFunction(e){return\"[object Function]\"===ostring.call(e)}function isArray(e){return\"[object Array]\"===ostring.call(e)}function each(e,t){var i;if(e)for(i=0;i<e.length&&(!e[i]||!t(e[i],i,e));i+=1);}function eachReverse(e,t){var i;if(e)for(i=e.length-1;-1<i&&(!e[i]||!t(e[i],i,e));i-=1);}function hasProp(e,t){return hasOwn.call(e,t)}function getOwn(e,t){return hasProp(e,t)&&e[t]}function eachProp(e,t){var i;for(i in e)if(hasProp(e,i)&&t(e[i],i))break}function mixin(i,e,r,n){return e&&eachProp(e,function(e,t){!r&&hasProp(i,t)||(!n||\"object\"!=typeof e||!e||isArray(e)||isFunction(e)||e instanceof RegExp?i[t]=e:(i[t]||(i[t]={}),mixin(i[t],e,r,n)))}),i}function bind(e,t){return function(){return t.apply(e,arguments)}}function scripts(){return document.getElementsByTagName(\"script\")}function defaultOnError(e){throw e}function getGlobal(e){if(!e)return e;var t=global;return each(e.split(\".\"),function(e){t=t[e]}),t}function makeError(e,t,i,r){var n=new Error(t+\"\\nhttps://requirejs.org/docs/errors.html#\"+e);return n.requireType=e,n.requireModules=r,i&&(n.originalError=i),n}if(void 0===define){if(void 0!==requirejs){if(isFunction(requirejs))return;cfg=requirejs,requirejs=void 0}void 0===require||isFunction(require)||(cfg=require,require=void 0),req=requirejs=function(e,t,i,r){var n,o,a=defContextName;return isArray(e)||\"string\"==typeof e||(o=e,isArray(t)?(e=t,t=i,i=r):e=[]),o&&o.context&&(a=o.context),(n=getOwn(contexts,a))||(n=contexts[a]=req.s.newContext(a)),o&&n.configure(o),n.require(e,t,i)},req.config=function(e){return req(e)},req.nextTick=void 0!==setTimeout?function(e){setTimeout(e,4)}:function(e){e()},require||(require=req),req.version=version,req.jsExtRegExp=/^\\/|:|\\?|\\.js$/,req.isBrowser=isBrowser,s=req.s={contexts:contexts,newContext:newContext},req({}),each([\"toUrl\",\"undef\",\"defined\",\"specified\"],function(t){req[t]=function(){var e=contexts[defContextName];return e.require[t].apply(e,arguments)}}),isBrowser&&(head=s.head=document.getElementsByTagName(\"head\")[0],baseElement=document.getElementsByTagName(\"base\")[0],baseElement&&(head=s.head=baseElement.parentNode)),req.onError=defaultOnError,req.createNode=function(e,t,i){var r=e.xhtml?document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"html:script\"):document.createElement(\"script\");return r.type=e.scriptType||\"text/javascript\",r.charset=\"utf-8\",r.async=!0,r},req.load=function(t,i,r){var e,n=t&&t.config||{};if(isBrowser)return(e=req.createNode(n,i,r)).setAttribute(\"data-requirecontext\",t.contextName),e.setAttribute(\"data-requiremodule\",i),!e.attachEvent||e.attachEvent.toString&&e.attachEvent.toString().indexOf(\"[native code\")<0||isOpera?(e.addEventListener(\"load\",t.onScriptLoad,!1),e.addEventListener(\"error\",t.onScriptError,!1)):(useInteractive=!0,e.attachEvent(\"onreadystatechange\",t.onScriptLoad)),e.src=r,n.onNodeCreated&&n.onNodeCreated(e,n,i,r),currentlyAddingScript=e,baseElement?head.insertBefore(e,baseElement):head.appendChild(e),currentlyAddingScript=null,e;if(isWebWorker)try{setTimeout(function(){},0),importScripts(r),t.completeLoad(i)}catch(e){t.onError(makeError(\"importscripts\",\"importScripts failed for \"+i+\" at \"+r,e,[i]))}},isBrowser&&!cfg.skipDataMain&&eachReverse(scripts(),function(e){if(head||(head=e.parentNode),dataMain=e.getAttribute(\"data-main\"))return mainScript=dataMain,cfg.baseUrl||-1!==mainScript.indexOf(\"!\")||(mainScript=(src=mainScript.split(\"/\")).pop(),subPath=src.length?src.join(\"/\")+\"/\":\"./\",cfg.baseUrl=subPath),mainScript=mainScript.replace(jsSuffixRegExp,\"\"),req.jsExtRegExp.test(mainScript)&&(mainScript=dataMain),cfg.deps=cfg.deps?cfg.deps.concat(mainScript):[mainScript],!0}),define=function(e,i,t){var r,n;\"string\"!=typeof e&&(t=i,i=e,e=null),isArray(i)||(t=i,i=null),!i&&isFunction(t)&&(i=[],t.length&&(t.toString().replace(commentRegExp,commentReplace).replace(cjsRequireRegExp,function(e,t){i.push(t)}),i=(1===t.length?[\"require\"]:[\"require\",\"exports\",\"module\"]).concat(i))),useInteractive&&(r=currentlyAddingScript||getInteractiveScript())&&(e||(e=r.getAttribute(\"data-requiremodule\")),n=contexts[r.getAttribute(\"data-requirecontext\")]),n?(n.defQueue.push([e,i,t]),n.defQueueMap[e]=!0):globalDefQueue.push([e,i,t])},define.amd={jQuery:!0},req.exec=function(text){return eval(text)},req(cfg)}function newContext(u){var i,e,l,c,d,g={waitSeconds:7,baseUrl:\"./\",paths:{},bundles:{},pkgs:{},shim:{},config:{}},p={},f={},r={},h=[],m={},n={},v={},x=1,b=1;function q(e,t,i){var r,n,o,a,s,u,c,d,p,f,l=t&&t.split(\"/\"),h=g.map,m=h&&h[\"*\"];if(e&&(u=(e=e.split(\"/\")).length-1,g.nodeIdCompat&&jsSuffixRegExp.test(e[u])&&(e[u]=e[u].replace(jsSuffixRegExp,\"\")),\".\"===e[0].charAt(0)&&l&&(e=l.slice(0,l.length-1).concat(e)),function(e){var t,i;for(t=0;t<e.length;t++)if(\".\"===(i=e[t]))e.splice(t,1),t-=1;else if(\"..\"===i){if(0===t||1===t&&\"..\"===e[2]||\"..\"===e[t-1])continue;0<t&&(e.splice(t-1,2),t-=2)}}(e),e=e.join(\"/\")),i&&h&&(l||m)){e:for(o=(n=e.split(\"/\")).length;0<o;o-=1){if(s=n.slice(0,o).join(\"/\"),l)for(a=l.length;0<a;a-=1)if((r=getOwn(h,l.slice(0,a).join(\"/\")))&&(r=getOwn(r,s))){c=r,d=o;break e}!p&&m&&getOwn(m,s)&&(p=getOwn(m,s),f=o)}!c&&p&&(c=p,d=f),c&&(n.splice(0,d,c),e=n.join(\"/\"))}return getOwn(g.pkgs,e)||e}function E(t){isBrowser&&each(scripts(),function(e){if(e.getAttribute(\"data-requiremodule\")===t&&e.getAttribute(\"data-requirecontext\")===l.contextName)return e.parentNode.removeChild(e),!0})}function w(e){var t=getOwn(g.paths,e);if(t&&isArray(t)&&1<t.length)return t.shift(),l.require.undef(e),l.makeRequire(null,{skipMap:!0})([e]),!0}function y(e){var t,i=e?e.indexOf(\"!\"):-1;return-1<i&&(t=e.substring(0,i),e=e.substring(i+1,e.length)),[t,e]}function S(e,t,i,r){var n,o,a,s,u=null,c=t?t.name:null,d=e,p=!0,f=\"\";return e||(p=!1,e=\"_@r\"+(x+=1)),u=(s=y(e))[0],e=s[1],u&&(u=q(u,c,r),o=getOwn(m,u)),e&&(u?f=i?e:o&&o.normalize?o.normalize(e,function(e){return q(e,c,r)}):-1===e.indexOf(\"!\")?q(e,c,r):e:(u=(s=y(f=q(e,c,r)))[0],f=s[1],i=!0,n=l.nameToUrl(f))),{prefix:u,name:f,parentMap:t,unnormalized:!!(a=!u||o||i?\"\":\"_unnormalized\"+(b+=1)),url:n,originalName:d,isDefine:p,id:(u?u+\"!\"+f:f)+a}}function k(e){var t=e.id,i=getOwn(p,t);return i||(i=p[t]=new l.Module(e)),i}function M(e,t,i){var r=e.id,n=getOwn(p,r);!hasProp(m,r)||n&&!n.defineEmitComplete?(n=k(e)).error&&\"error\"===t?i(n.error):n.on(t,i):\"defined\"===t&&i(m[r])}function O(i,e){var t=i.requireModules,r=!1;e?e(i):(each(t,function(e){var t=getOwn(p,e);t&&(t.error=i,t.events.error&&(r=!0,t.emit(\"error\",i)))}),r||req.onError(i))}function j(){globalDefQueue.length&&(each(globalDefQueue,function(e){var t=e[0];\"string\"==typeof t&&(l.defQueueMap[t]=!0),h.push(e)}),globalDefQueue=[])}function P(e){delete p[e],delete f[e]}function R(){var e,r,t=1e3*g.waitSeconds,n=t&&l.startTime+t<(new Date).getTime(),o=[],a=[],s=!1,u=!0;if(!i){if(i=!0,eachProp(f,function(e){var t=e.map,i=t.id;if(e.enabled&&(t.isDefine||a.push(e),!e.error))if(!e.inited&&n)w(i)?s=r=!0:(o.push(i),E(i));else if(!e.inited&&e.fetched&&t.isDefine&&(s=!0,!t.prefix))return u=!1}),n&&o.length)return(e=makeError(\"timeout\",\"Load timeout for modules: \"+o,null,o)).contextName=l.contextName,O(e);u&&each(a,function(e){!function n(o,a,s){var e=o.map.id;o.error?o.emit(\"error\",o.error):(a[e]=!0,each(o.depMaps,function(e,t){var i=e.id,r=getOwn(p,i);!r||o.depMatched[t]||s[i]||(getOwn(a,i)?(o.defineDep(t,m[i]),o.check()):n(r,a,s))}),s[e]=!0)}(e,{},{})}),n&&!r||!s||!isBrowser&&!isWebWorker||d||(d=setTimeout(function(){d=0,R()},50)),i=!1}}function a(e){hasProp(m,e[0])||k(S(e[0],null,!0)).init(e[1],e[2])}function o(e,t,i,r){e.detachEvent&&!isOpera?r&&e.detachEvent(r,t):e.removeEventListener(i,t,!1)}function s(e){var t=e.currentTarget||e.srcElement;return o(t,l.onScriptLoad,\"load\",\"onreadystatechange\"),o(t,l.onScriptError,\"error\"),{node:t,id:t&&t.getAttribute(\"data-requiremodule\")}}function T(){var e;for(j();h.length;){if(null===(e=h.shift())[0])return O(makeError(\"mismatch\",\"Mismatched anonymous define() module: \"+e[e.length-1]));a(e)}l.defQueueMap={}}return c={require:function(e){return e.require?e.require:e.require=l.makeRequire(e.map)},exports:function(e){if(e.usingExports=!0,e.map.isDefine)return e.exports?m[e.map.id]=e.exports:e.exports=m[e.map.id]={}},module:function(e){return e.module?e.module:e.module={id:e.map.id,uri:e.map.url,config:function(){return getOwn(g.config,e.map.id)||{}},exports:e.exports||(e.exports={})}}},(e=function(e){this.events=getOwn(r,e.id)||{},this.map=e,this.shim=getOwn(g.shim,e.id),this.depExports=[],this.depMaps=[],this.depMatched=[],this.pluginMaps={},this.depCount=0}).prototype={init:function(e,t,i,r){r=r||{},this.inited||(this.factory=t,i?this.on(\"error\",i):this.events.error&&(i=bind(this,function(e){this.emit(\"error\",e)})),this.depMaps=e&&e.slice(0),this.errback=i,this.inited=!0,this.ignore=r.ignore,r.enabled||this.enabled?this.enable():this.check())},defineDep:function(e,t){this.depMatched[e]||(this.depMatched[e]=!0,this.depCount-=1,this.depExports[e]=t)},fetch:function(){if(!this.fetched){this.fetched=!0,l.startTime=(new Date).getTime();var e=this.map;if(!this.shim)return e.prefix?this.callPlugin():this.load();l.makeRequire(this.map,{enableBuildCallback:!0})(this.shim.deps||[],bind(this,function(){return e.prefix?this.callPlugin():this.load()}))}},load:function(){var e=this.map.url;n[e]||(n[e]=!0,l.load(this.map.id,e))},check:function(){if(this.enabled&&!this.enabling){var t,e,i=this.map.id,r=this.depExports,n=this.exports,o=this.factory;if(this.inited){if(this.error)this.emit(\"error\",this.error);else if(!this.defining){if(this.defining=!0,this.depCount<1&&!this.defined){if(isFunction(o)){if(this.events.error&&this.map.isDefine||req.onError!==defaultOnError)try{n=l.execCb(i,o,r,n)}catch(e){t=e}else n=l.execCb(i,o,r,n);if(this.map.isDefine&&void 0===n&&((e=this.module)?n=e.exports:this.usingExports&&(n=this.exports)),t)return t.requireMap=this.map,t.requireModules=this.map.isDefine?[this.map.id]:null,t.requireType=this.map.isDefine?\"define\":\"require\",O(this.error=t)}else n=o;if(this.exports=n,this.map.isDefine&&!this.ignore&&(m[i]=n,req.onResourceLoad)){var a=[];each(this.depMaps,function(e){a.push(e.normalizedMap||e)}),req.onResourceLoad(l,this.map,a)}P(i),this.defined=!0}this.defining=!1,this.defined&&!this.defineEmitted&&(this.defineEmitted=!0,this.emit(\"defined\",this.exports),this.defineEmitComplete=!0)}}else hasProp(l.defQueueMap,i)||this.fetch()}},callPlugin:function(){var u=this.map,c=u.id,e=S(u.prefix);this.depMaps.push(e),M(e,\"defined\",bind(this,function(e){var o,t,i,r=getOwn(v,this.map.id),n=this.map.name,a=this.map.parentMap?this.map.parentMap.name:null,s=l.makeRequire(u.parentMap,{enableBuildCallback:!0});return this.map.unnormalized?(e.normalize&&(n=e.normalize(n,function(e){return q(e,a,!0)})||\"\"),M(t=S(u.prefix+\"!\"+n,this.map.parentMap,!0),\"defined\",bind(this,function(e){this.map.normalizedMap=t,this.init([],function(){return e},null,{enabled:!0,ignore:!0})})),void((i=getOwn(p,t.id))&&(this.depMaps.push(t),this.events.error&&i.on(\"error\",bind(this,function(e){this.emit(\"error\",e)})),i.enable()))):r?(this.map.url=l.nameToUrl(r),void this.load()):((o=bind(this,function(e){this.init([],function(){return e},null,{enabled:!0})})).error=bind(this,function(e){this.inited=!0,(this.error=e).requireModules=[c],eachProp(p,function(e){0===e.map.id.indexOf(c+\"_unnormalized\")&&P(e.map.id)}),O(e)}),o.fromText=bind(this,function(e,t){var i=u.name,r=S(i),n=useInteractive;t&&(e=t),n&&(useInteractive=!1),k(r),hasProp(g.config,c)&&(g.config[i]=g.config[c]);try{req.exec(e)}catch(e){return O(makeError(\"fromtexteval\",\"fromText eval for \"+c+\" failed: \"+e,e,[c]))}n&&(useInteractive=!0),this.depMaps.push(r),l.completeLoad(i),s([i],o)}),void e.load(u.name,s,o,g))})),l.enable(e,this),this.pluginMaps[e.id]=e},enable:function(){(f[this.map.id]=this).enabled=!0,this.enabling=!0,each(this.depMaps,bind(this,function(e,t){var i,r,n;if(\"string\"==typeof e){if(e=S(e,this.map.isDefine?this.map:this.map.parentMap,!1,!this.skipMap),this.depMaps[t]=e,n=getOwn(c,e.id))return void(this.depExports[t]=n(this));this.depCount+=1,M(e,\"defined\",bind(this,function(e){this.undefed||(this.defineDep(t,e),this.check())})),this.errback?M(e,\"error\",bind(this,this.errback)):this.events.error&&M(e,\"error\",bind(this,function(e){this.emit(\"error\",e)}))}i=e.id,r=p[i],hasProp(c,i)||!r||r.enabled||l.enable(e,this)})),eachProp(this.pluginMaps,bind(this,function(e){var t=getOwn(p,e.id);t&&!t.enabled&&l.enable(e,this)})),this.enabling=!1,this.check()},on:function(e,t){var i=this.events[e];i||(i=this.events[e]=[]),i.push(t)},emit:function(e,t){each(this.events[e],function(e){e(t)}),\"error\"===e&&delete this.events[e]}},(l={config:g,contextName:u,registry:p,defined:m,urlFetched:n,defQueue:h,defQueueMap:{},Module:e,makeModuleMap:S,nextTick:req.nextTick,onError:O,configure:function(e){if(e.baseUrl&&\"/\"!==e.baseUrl.charAt(e.baseUrl.length-1)&&(e.baseUrl+=\"/\"),\"string\"==typeof e.urlArgs){var i=e.urlArgs;e.urlArgs=function(e,t){return(-1===t.indexOf(\"?\")?\"?\":\"&\")+i}}var r=g.shim,n={paths:!0,bundles:!0,config:!0,map:!0};eachProp(e,function(e,t){n[t]?(g[t]||(g[t]={}),mixin(g[t],e,!0,!0)):g[t]=e}),e.bundles&&eachProp(e.bundles,function(e,t){each(e,function(e){e!==t&&(v[e]=t)})}),e.shim&&(eachProp(e.shim,function(e,t){isArray(e)&&(e={deps:e}),!e.exports&&!e.init||e.exportsFn||(e.exportsFn=l.makeShimExports(e)),r[t]=e}),g.shim=r),e.packages&&each(e.packages,function(e){var t;t=(e=\"string\"==typeof e?{name:e}:e).name,e.location&&(g.paths[t]=e.location),g.pkgs[t]=e.name+\"/\"+(e.main||\"main\").replace(currDirRegExp,\"\").replace(jsSuffixRegExp,\"\")}),eachProp(p,function(e,t){e.inited||e.map.unnormalized||(e.map=S(t,null,!0))}),(e.deps||e.callback)&&l.require(e.deps||[],e.callback)},makeShimExports:function(t){return function(){var e;return t.init&&(e=t.init.apply(global,arguments)),e||t.exports&&getGlobal(t.exports)}},makeRequire:function(o,a){function s(e,t,i){var r,n;return a.enableBuildCallback&&t&&isFunction(t)&&(t.__requireJsBuild=!0),\"string\"==typeof e?isFunction(t)?O(makeError(\"requireargs\",\"Invalid require call\"),i):o&&hasProp(c,e)?c[e](p[o.id]):req.get?req.get(l,e,o,s):(r=S(e,o,!1,!0).id,hasProp(m,r)?m[r]:O(makeError(\"notloaded\",'Module name \"'+r+'\" has not been loaded yet for context: '+u+(o?\"\":\". Use require([])\")))):(T(),l.nextTick(function(){T(),(n=k(S(null,o))).skipMap=a.skipMap,n.init(e,t,i,{enabled:!0}),R()}),s)}return a=a||{},mixin(s,{isBrowser:isBrowser,toUrl:function(e){var t,i=e.lastIndexOf(\".\"),r=e.split(\"/\")[0];return-1!==i&&(!(\".\"===r||\"..\"===r)||1<i)&&(t=e.substring(i,e.length),e=e.substring(0,i)),l.nameToUrl(q(e,o&&o.id,!0),t,!0)},defined:function(e){return hasProp(m,S(e,o,!1,!0).id)},specified:function(e){return e=S(e,o,!1,!0).id,hasProp(m,e)||hasProp(p,e)}}),o||(s.undef=function(i){j();var e=S(i,o,!0),t=getOwn(p,i);t.undefed=!0,E(i),delete m[i],delete n[e.url],delete r[i],eachReverse(h,function(e,t){e[0]===i&&h.splice(t,1)}),delete l.defQueueMap[i],t&&(t.events.defined&&(r[i]=t.events),P(i))}),s},enable:function(e){getOwn(p,e.id)&&k(e).enable()},completeLoad:function(e){var t,i,r,n=getOwn(g.shim,e)||{},o=n.exports;for(j();h.length;){if(null===(i=h.shift())[0]){if(i[0]=e,t)break;t=!0}else i[0]===e&&(t=!0);a(i)}if(l.defQueueMap={},r=getOwn(p,e),!t&&!hasProp(m,e)&&r&&!r.inited){if(!(!g.enforceDefine||o&&getGlobal(o)))return w(e)?void 0:O(makeError(\"nodefine\",\"No define call for \"+e,null,[e]));a([e,n.deps||[],n.exportsFn])}R()},nameToUrl:function(e,t,i){var r,n,o,a,s,u,c=getOwn(g.pkgs,e);if(c&&(e=c),u=getOwn(v,e))return l.nameToUrl(u,t,i);if(req.jsExtRegExp.test(e))a=e+(t||\"\");else{for(r=g.paths,o=(n=e.split(\"/\")).length;0<o;o-=1)if(s=getOwn(r,n.slice(0,o).join(\"/\"))){isArray(s)&&(s=s[0]),n.splice(0,o,s);break}a=n.join(\"/\"),a=(\"/\"===(a+=t||(/^data\\:|^blob\\:|\\?/.test(a)||i?\"\":\".js\")).charAt(0)||a.match(/^[\\w\\+\\.\\-]+:/)?\"\":g.baseUrl)+a}return g.urlArgs&&!/^blob\\:/.test(a)?a+g.urlArgs(e,a):a},load:function(e,t){req.load(l,e,t)},execCb:function(e,t,i,r){return t.apply(r,i)},onScriptLoad:function(e){if(\"load\"===e.type||readyRegExp.test((e.currentTarget||e.srcElement).readyState)){interactiveScript=null;var t=s(e);l.completeLoad(t.id)}},onScriptError:function(e){var i=s(e);if(!w(i.id)){var r=[];return eachProp(p,function(e,t){0!==t.indexOf(\"_@r\")&&each(e.depMaps,function(e){if(e.id===i.id)return r.push(t),!0})}),O(makeError(\"scripterror\",'Script error for \"'+i.id+(r.length?'\", needed by: '+r.join(\", \"):'\"'),e,[i.id]))}}}).require=l.makeRequire(),l}function getInteractiveScript(){return interactiveScript&&\"interactive\"===interactiveScript.readyState||eachReverse(scripts(),function(e){if(\"interactive\"===e.readyState)return interactiveScript=e}),interactiveScript}}(this,\"undefined\"==typeof setTimeout?void 0:setTimeout);\n",
       "\n",
       "    }\n",
       "    // Project sites:    https://visjs.org\n",
       "//                   https://visjs.github.io/vis-network/docs/network\n",
       "//                   https://github.com/visjs/vis-network\n",
       "// Code source:      https://unpkg.com/vis-network@9.1.0/dist/vis-network.min.js - accessed on 19.11.2021\n",
       "// Original license: Apache 2.0 (and MIT because of dual licensing)\n",
       "// Code changes:     Commented out outermost functions\n",
       "//                   Wrapped all into a require define function\n",
       "\n",
       "//                   Replaced two \"NEL\" (=unescaped newline, Unicode U+0085, which can be entered\n",
       "//                   with Ctrl+Shift+U followed be the 4 digits and Enter) symbols by \"\\n\" to\n",
       "//                   prevent browser error when using sphinx docs in combination with Jupyter\n",
       "//                   notebooks and nbsphinx. This might cause unexpected behavior in other cases.\n",
       "\n",
       "if(!require.defined(\"gravis-vis-network\")){\n",
       "  define(\"gravis-vis-network\", [\"exports\"],\n",
       "\n",
       "  /**\n",
       "   * vis-network\n",
       "   * https://visjs.github.io/vis-network/\n",
       "   *\n",
       "   * A dynamic, browser-based visualization library.\n",
       "   *\n",
       "   * @version 9.1.0\n",
       "   * @date    2021-08-29T08:47:25.454Z\n",
       "   *\n",
       "   * @copyright (c) 2011-2017 Almende B.V, http://almende.com\n",
       "   * @copyright (c) 2017-2019 visjs contributors, https://github.com/visjs\n",
       "   *\n",
       "   * @license\n",
       "   * vis.js is dual licensed under both\n",
       "   *\n",
       "   *   1. The Apache 2.0 License\n",
       "   *      http://www.apache.org/licenses/LICENSE-2.0\n",
       "   *\n",
       "   *   and\n",
       "   *\n",
       "   *   2. The MIT License\n",
       "   *      http://opensource.org/licenses/MIT\n",
       "   *\n",
       "   * vis.js may be distributed under either license.\n",
       "   */\n",
       "  // !function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?e(exports):\n",
       "  // \"function\"==typeof define&&define.amd?define([\"exports\"],e):e((t=\"undefined\"!=typeof globalThis?globalThis:t||self).vis=t.vis||{})}(this,(\n",
       "  function(t){\"use strict\";var e=\"undefined\"!=typeof globalThis?globalThis:\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:{};function i(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,\"default\")?t.default:t}function n(t,e){return t(e={exports:{}},e.exports),e.exports}var o,r,s=function(t){return t&&t.Math==Math&&t},a=s(\"object\"==typeof globalThis&&globalThis)||s(\"object\"==typeof window&&window)||s(\"object\"==typeof self&&self)||s(\"object\"==typeof e&&e)||function(){return this}()||Function(\"return this\")(),h=function(t){try{return!!t()}catch(t){return!0}},l=!h((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]})),d={}.propertyIsEnumerable,c=Object.getOwnPropertyDescriptor,u={f:c&&!d.call({1:2},1)?function(t){var e=c(this,t);return!!e&&e.enumerable}:d},f=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}},p={}.toString,v=function(t){return p.call(t).slice(8,-1)},g=\"\".split,y=h((function(){return!Object(\"z\").propertyIsEnumerable(0)}))?function(t){return\"String\"==v(t)?g.call(t,\"\"):Object(t)}:Object,m=function(t){if(null==t)throw TypeError(\"Can't call method on \"+t);return t},b=function(t){return y(m(t))},w=function(t){return\"object\"==typeof t?null!==t:\"function\"==typeof t},k={},_=function(t){return\"function\"==typeof t?t:void 0},x=function(t,e){return arguments.length<2?_(k[t])||_(a[t]):k[t]&&k[t][e]||a[t]&&a[t][e]},E=x(\"navigator\",\"userAgent\")||\"\",O=a.process,C=a.Deno,S=O&&O.versions||C&&C.version,T=S&&S.v8;T?r=(o=T.split(\".\"))[0]<4?1:o[0]+o[1]:E&&(!(o=E.match(/Edge\\/(\\d+)/))||o[1]>=74)&&(o=E.match(/Chrome\\/(\\d+)/))&&(r=o[1]);var M=r&&+r,P=!!Object.getOwnPropertySymbols&&!h((function(){var t=Symbol();return!String(t)||!(Object(t)instanceof Symbol)||!Symbol.sham&&M&&M<41})),D=P&&!Symbol.sham&&\"symbol\"==typeof Symbol.iterator,I=D?function(t){return\"symbol\"==typeof t}:function(t){var e=x(\"Symbol\");return\"function\"==typeof e&&Object(t)instanceof e},B=\"__core-js_shared__\",z=a[B]||function(t,e){try{Object.defineProperty(a,t,{value:e,configurable:!0,writable:!0})}catch(i){a[t]=e}return e}(B,{}),N=n((function(t){(t.exports=function(t,e){return z[t]||(z[t]=void 0!==e?e:{})})(\"versions\",[]).push({version:\"3.16.1\",mode:\"pure\",copyright:\"© 2021 Denis Pushkarev (zloirock.ru)\"})})),A=function(t){return Object(m(t))},F={}.hasOwnProperty,j=Object.hasOwn||function(t,e){return F.call(A(t),e)},R=0,L=Math.random(),H=function(t){return\"Symbol(\"+String(void 0===t?\"\":t)+\")_\"+(++R+L).toString(36)},W=N(\"wks\"),q=a.Symbol,V=D?q:q&&q.withoutSetter||H,U=function(t){return j(W,t)&&(P||\"string\"==typeof W[t])||(P&&j(q,t)?W[t]=q[t]:W[t]=V(\"Symbol.\"+t)),W[t]},Y=U(\"toPrimitive\"),X=function(t,e){if(!w(t)||I(t))return t;var i,n=t[Y];if(void 0!==n){if(void 0===e&&(e=\"default\"),i=n.call(t,e),!w(i)||I(i))return i;throw TypeError(\"Can't convert object to primitive value\")}return void 0===e&&(e=\"number\"),function(t,e){var i,n;if(\"string\"===e&&\"function\"==typeof(i=t.toString)&&!w(n=i.call(t)))return n;if(\"function\"==typeof(i=t.valueOf)&&!w(n=i.call(t)))return n;if(\"string\"!==e&&\"function\"==typeof(i=t.toString)&&!w(n=i.call(t)))return n;throw TypeError(\"Can't convert object to primitive value\")}(t,e)},G=function(t){var e=X(t,\"string\");return I(e)?e:String(e)},K=a.document,$=w(K)&&w(K.createElement),Z=function(t){return $?K.createElement(t):{}},Q=!l&&!h((function(){return 7!=Object.defineProperty(Z(\"div\"),\"a\",{get:function(){return 7}}).a})),J=Object.getOwnPropertyDescriptor,tt={f:l?J:function(t,e){if(t=b(t),e=G(e),Q)try{return J(t,e)}catch(t){}if(j(t,e))return f(!u.f.call(t,e),t[e])}},et=/#|\\.prototype\\./,it=function(t,e){var i=ot[nt(t)];return i==st||i!=rt&&(\"function\"==typeof e?h(e):!!e)},nt=it.normalize=function(t){return String(t).replace(et,\".\").toLowerCase()},ot=it.data={},rt=it.NATIVE=\"N\",st=it.POLYFILL=\"P\",at=it,ht=function(t){if(\"function\"!=typeof t)throw TypeError(String(t)+\" is not a function\");return t},lt=function(t,e,i){if(ht(t),void 0===e)return t;switch(i){case 0:return function(){return t.call(e)};case 1:return function(i){return t.call(e,i)};case 2:return function(i,n){return t.call(e,i,n)};case 3:return function(i,n,o){return t.call(e,i,n,o)}}return function(){return t.apply(e,arguments)}},dt=function(t){if(!w(t))throw TypeError(String(t)+\" is not an object\");return t},ct=Object.defineProperty,ut={f:l?ct:function(t,e,i){if(dt(t),e=G(e),dt(i),Q)try{return ct(t,e,i)}catch(t){}if(\"get\"in i||\"set\"in i)throw TypeError(\"Accessors not supported\");return\"value\"in i&&(t[e]=i.value),t}},ft=l?function(t,e,i){return ut.f(t,e,f(1,i))}:function(t,e,i){return t[e]=i,t},pt=tt.f,vt=function(t){var e=function(e,i,n){if(this instanceof t){switch(arguments.length){case 0:return new t;case 1:return new t(e);case 2:return new t(e,i)}return new t(e,i,n)}return t.apply(this,arguments)};return e.prototype=t.prototype,e},gt=function(t,e){var i,n,o,r,s,h,l,d,c=t.target,u=t.global,f=t.stat,p=t.proto,v=u?a:f?a[c]:(a[c]||{}).prototype,g=u?k:k[c]||(k[c]={}),y=g.prototype;for(o in e)i=!at(u?o:c+(f?\".\":\"#\")+o,t.forced)&&v&&j(v,o),s=g[o],i&&(h=t.noTargetGet?(d=pt(v,o))&&d.value:v[o]),r=i&&h?h:e[o],i&&typeof s==typeof r||(l=t.bind&&i?lt(r,a):t.wrap&&i?vt(r):p&&\"function\"==typeof r?lt(Function.call,r):r,(t.sham||r&&r.sham||s&&s.sham)&&ft(l,\"sham\",!0),g[o]=l,p&&(j(k,n=c+\"Prototype\")||ft(k,n,{}),k[n][o]=r,t.real&&y&&!y[o]&&ft(y,o,r)))},yt=Math.ceil,mt=Math.floor,bt=function(t){return isNaN(t=+t)?0:(t>0?mt:yt)(t)},wt=Math.min,kt=function(t){return t>0?wt(bt(t),9007199254740991):0},_t=Math.max,xt=Math.min,Et=function(t,e){var i=bt(t);return i<0?_t(i+e,0):xt(i,e)},Ot=function(t){return function(e,i,n){var o,r=b(e),s=kt(r.length),a=Et(n,s);if(t&&i!=i){for(;s>a;)if((o=r[a++])!=o)return!0}else for(;s>a;a++)if((t||a in r)&&r[a]===i)return t||a||0;return!t&&-1}},Ct={includes:Ot(!0),indexOf:Ot(!1)},St={},Tt=Ct.indexOf,Mt=function(t,e){var i,n=b(t),o=0,r=[];for(i in n)!j(St,i)&&j(n,i)&&r.push(i);for(;e.length>o;)j(n,i=e[o++])&&(~Tt(r,i)||r.push(i));return r},Pt=[\"constructor\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"toLocaleString\",\"toString\",\"valueOf\"],Dt=Object.keys||function(t){return Mt(t,Pt)},It={f:Object.getOwnPropertySymbols},Bt=Object.assign,zt=Object.defineProperty,Nt=!Bt||h((function(){if(l&&1!==Bt({b:1},Bt(zt({},\"a\",{enumerable:!0,get:function(){zt(this,\"b\",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var t={},e={},i=Symbol(),n=\"abcdefghijklmnopqrst\";return t[i]=7,n.split(\"\").forEach((function(t){e[t]=t})),7!=Bt({},t)[i]||Dt(Bt({},e)).join(\"\")!=n}))?function(t,e){for(var i=A(t),n=arguments.length,o=1,r=It.f,s=u.f;n>o;)for(var a,h=y(arguments[o++]),d=r?Dt(h).concat(r(h)):Dt(h),c=d.length,f=0;c>f;)a=d[f++],l&&!s.call(h,a)||(i[a]=h[a]);return i}:Bt;gt({target:\"Object\",stat:!0,forced:Object.assign!==Nt},{assign:Nt});var At=k.Object.assign,Ft=[].slice,jt={},Rt=function(t,e,i){if(!(e in jt)){for(var n=[],o=0;o<e;o++)n[o]=\"a[\"+o+\"]\";jt[e]=Function(\"C,a\",\"return new C(\"+n.join(\",\")+\")\")}return jt[e](t,i)},Lt=Function.bind||function(t){var e=ht(this),i=Ft.call(arguments,1),n=function(){var o=i.concat(Ft.call(arguments));return this instanceof n?Rt(e,o.length,o):e.apply(t,o)};return w(e.prototype)&&(n.prototype=e.prototype),n};gt({target:\"Function\",proto:!0},{bind:Lt});var Ht=function(t){return k[t+\"Prototype\"]},Wt=Ht(\"Function\").bind,qt=Function.prototype,Vt=function(t){var e=t.bind;return t===qt||t instanceof Function&&e===qt.bind?Wt:e};function Ut(t,e,i,n){t.beginPath(),t.arc(e,i,n,0,2*Math.PI,!1),t.closePath()}function Yt(t,e,i,n,o,r){var s=Math.PI/180;n-2*r<0&&(r=n/2),o-2*r<0&&(r=o/2),t.beginPath(),t.moveTo(e+r,i),t.lineTo(e+n-r,i),t.arc(e+n-r,i+r,r,270*s,360*s,!1),t.lineTo(e+n,i+o-r),t.arc(e+n-r,i+o-r,r,0,90*s,!1),t.lineTo(e+r,i+o),t.arc(e+r,i+o-r,r,90*s,180*s,!1),t.lineTo(e,i+r),t.arc(e+r,i+r,r,180*s,270*s,!1),t.closePath()}function Xt(t,e,i,n,o){var r=.5522848,s=n/2*r,a=o/2*r,h=e+n,l=i+o,d=e+n/2,c=i+o/2;t.beginPath(),t.moveTo(e,c),t.bezierCurveTo(e,c-a,d-s,i,d,i),t.bezierCurveTo(d+s,i,h,c-a,h,c),t.bezierCurveTo(h,c+a,d+s,l,d,l),t.bezierCurveTo(d-s,l,e,c+a,e,c),t.closePath()}function Gt(t,e,i,n,o){var r=o*(1/3),s=.5522848,a=n/2*s,h=r/2*s,l=e+n,d=i+r,c=e+n/2,u=i+r/2,f=i+(o-r/2),p=i+o;t.beginPath(),t.moveTo(l,u),t.bezierCurveTo(l,u+h,c+a,d,c,d),t.bezierCurveTo(c-a,d,e,u+h,e,u),t.bezierCurveTo(e,u-h,c-a,i,c,i),t.bezierCurveTo(c+a,i,l,u-h,l,u),t.lineTo(l,f),t.bezierCurveTo(l,f+h,c+a,p,c,p),t.bezierCurveTo(c-a,p,e,f+h,e,f),t.lineTo(e,u)}function Kt(t,e,i,n,o,r){t.beginPath(),t.moveTo(e,i);for(var s=r.length,a=n-e,h=o-i,l=h/a,d=Math.sqrt(a*a+h*h),c=0,u=!0,f=0,p=+r[0];d>=.1;)(p=+r[c++%s])>d&&(p=d),f=Math.sqrt(p*p/(1+l*l)),e+=f=a<0?-f:f,i+=l*f,!0===u?t.lineTo(e,i):t.moveTo(e,i),d-=p,u=!u}var $t={circle:Ut,dashedLine:Kt,database:Gt,diamond:function(t,e,i,n){t.beginPath(),t.lineTo(e,i+n),t.lineTo(e+n,i),t.lineTo(e,i-n),t.lineTo(e-n,i),t.closePath()},ellipse:Xt,ellipse_vis:Xt,hexagon:function(t,e,i,n){t.beginPath();var o=2*Math.PI/6;t.moveTo(e+n,i);for(var r=1;r<6;r++)t.lineTo(e+n*Math.cos(o*r),i+n*Math.sin(o*r));t.closePath()},roundRect:Yt,square:function(t,e,i,n){t.beginPath(),t.rect(e-n,i-n,2*n,2*n),t.closePath()},star:function(t,e,i,n){t.beginPath(),i+=.1*(n*=.82);for(var o=0;o<10;o++){var r=o%2==0?1.3*n:.5*n;t.lineTo(e+r*Math.sin(2*o*Math.PI/10),i-r*Math.cos(2*o*Math.PI/10))}t.closePath()},triangle:function(t,e,i,n){t.beginPath(),i+=.275*(n*=1.15);var o=2*n,r=o/2,s=Math.sqrt(3)/6*o,a=Math.sqrt(o*o-r*r);t.moveTo(e,i-(a-s)),t.lineTo(e+r,i+s),t.lineTo(e-r,i+s),t.lineTo(e,i-(a-s)),t.closePath()},triangleDown:function(t,e,i,n){t.beginPath(),i-=.275*(n*=1.15);var o=2*n,r=o/2,s=Math.sqrt(3)/6*o,a=Math.sqrt(o*o-r*r);t.moveTo(e,i+(a-s)),t.lineTo(e+r,i-s),t.lineTo(e-r,i-s),t.lineTo(e,i+(a-s)),t.closePath()}};var Zt=n((function(t){function e(t){if(t)return function(t){for(var i in e.prototype)t[i]=e.prototype[i];return t}(t)}t.exports=e,e.prototype.on=e.prototype.addEventListener=function(t,e){return this._callbacks=this._callbacks||{},(this._callbacks[\"$\"+t]=this._callbacks[\"$\"+t]||[]).push(e),this},e.prototype.once=function(t,e){function i(){this.off(t,i),e.apply(this,arguments)}return i.fn=e,this.on(t,i),this},e.prototype.off=e.prototype.removeListener=e.prototype.removeAllListeners=e.prototype.removeEventListener=function(t,e){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var i,n=this._callbacks[\"$\"+t];if(!n)return this;if(1==arguments.length)return delete this._callbacks[\"$\"+t],this;for(var o=0;o<n.length;o++)if((i=n[o])===e||i.fn===e){n.splice(o,1);break}return 0===n.length&&delete this._callbacks[\"$\"+t],this},e.prototype.emit=function(t){this._callbacks=this._callbacks||{};for(var e=new Array(arguments.length-1),i=this._callbacks[\"$\"+t],n=1;n<arguments.length;n++)e[n-1]=arguments[n];if(i){n=0;for(var o=(i=i.slice(0)).length;n<o;++n)i[n].apply(this,e)}return this},e.prototype.listeners=function(t){return this._callbacks=this._callbacks||{},this._callbacks[\"$\"+t]||[]},e.prototype.hasListeners=function(t){return!!this.listeners(t).length}})),Qt=function(t){if(I(t))throw TypeError(\"Cannot convert a Symbol value to a string\");return String(t)},Jt=function(t){return function(e,i){var n,o,r=Qt(m(e)),s=bt(i),a=r.length;return s<0||s>=a?t?\"\":void 0:(n=r.charCodeAt(s))<55296||n>56319||s+1===a||(o=r.charCodeAt(s+1))<56320||o>57343?t?r.charAt(s):n:t?r.slice(s,s+2):o-56320+(n-55296<<10)+65536}},te={codeAt:Jt(!1),charAt:Jt(!0)},ee=Function.toString;\"function\"!=typeof z.inspectSource&&(z.inspectSource=function(t){return ee.call(t)});var ie,ne,oe,re=z.inspectSource,se=a.WeakMap,ae=\"function\"==typeof se&&/native code/.test(re(se)),he=N(\"keys\"),le=function(t){return he[t]||(he[t]=H(t))},de=\"Object already initialized\",ce=a.WeakMap;if(ae||z.state){var ue=z.state||(z.state=new ce),fe=ue.get,pe=ue.has,ve=ue.set;ie=function(t,e){if(pe.call(ue,t))throw new TypeError(de);return e.facade=t,ve.call(ue,t,e),e},ne=function(t){return fe.call(ue,t)||{}},oe=function(t){return pe.call(ue,t)}}else{var ge=le(\"state\");St[ge]=!0,ie=function(t,e){if(j(t,ge))throw new TypeError(de);return e.facade=t,ft(t,ge,e),e},ne=function(t){return j(t,ge)?t[ge]:{}},oe=function(t){return j(t,ge)}}var ye,me,be,we={set:ie,get:ne,has:oe,enforce:function(t){return oe(t)?ne(t):ie(t,{})},getterFor:function(t){return function(e){var i;if(!w(e)||(i=ne(e)).type!==t)throw TypeError(\"Incompatible receiver, \"+t+\" required\");return i}}},ke=!h((function(){function t(){}return t.prototype.constructor=null,Object.getPrototypeOf(new t)!==t.prototype})),_e=le(\"IE_PROTO\"),xe=Object.prototype,Ee=ke?Object.getPrototypeOf:function(t){return t=A(t),j(t,_e)?t[_e]:\"function\"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?xe:null},Oe=U(\"iterator\"),Ce=!1;[].keys&&(\"next\"in(be=[].keys())?(me=Ee(Ee(be)))!==Object.prototype&&(ye=me):Ce=!0);var Se=null==ye||h((function(){var t={};return ye[Oe].call(t)!==t}));Se&&(ye={}),Se&&!j(ye,Oe)&&ft(ye,Oe,(function(){return this}));var Te,Me={IteratorPrototype:ye,BUGGY_SAFARI_ITERATORS:Ce},Pe=l?Object.defineProperties:function(t,e){dt(t);for(var i,n=Dt(e),o=n.length,r=0;o>r;)ut.f(t,i=n[r++],e[i]);return t},De=x(\"document\",\"documentElement\"),Ie=le(\"IE_PROTO\"),Be=function(){},ze=function(t){return\"<script>\"+t+\"</\"+\"script>\"},Ne=function(t){t.write(ze(\"\")),t.close();var e=t.parentWindow.Object;return t=null,e},Ae=function(){try{Te=new ActiveXObject(\"htmlfile\")}catch(t){}Ae=document.domain&&Te?Ne(Te):function(){var t,e=Z(\"iframe\");if(e.style)return e.style.display=\"none\",De.appendChild(e),e.src=String(\"javascript:\"),(t=e.contentWindow.document).open(),t.write(ze(\"document.F=Object\")),t.close(),t.F}()||Ne(Te);for(var t=Pt.length;t--;)delete Ae.prototype[Pt[t]];return Ae()};St[Ie]=!0;var Fe=Object.create||function(t,e){var i;return null!==t?(Be.prototype=dt(t),i=new Be,Be.prototype=null,i[Ie]=t):i=Ae(),void 0===e?i:Pe(i,e)},je={};je[U(\"toStringTag\")]=\"z\";var Re=\"[object z]\"===String(je),Le=U(\"toStringTag\"),He=\"Arguments\"==v(function(){return arguments}()),We=Re?v:function(t){var e,i,n;return void 0===t?\"Undefined\":null===t?\"Null\":\"string\"==typeof(i=function(t,e){try{return t[e]}catch(t){}}(e=Object(t),Le))?i:He?v(e):\"Object\"==(n=v(e))&&\"function\"==typeof e.callee?\"Arguments\":n},qe=Re?{}.toString:function(){return\"[object \"+We(this)+\"]\"},Ve=ut.f,Ue=U(\"toStringTag\"),Ye=function(t,e,i,n){if(t){var o=i?t:t.prototype;j(o,Ue)||Ve(o,Ue,{configurable:!0,value:e}),n&&!Re&&ft(o,\"toString\",qe)}},Xe={},Ge=Me.IteratorPrototype,Ke=function(){return this},$e=Object.setPrototypeOf||(\"__proto__\"in{}?function(){var t,e=!1,i={};try{(t=Object.getOwnPropertyDescriptor(Object.prototype,\"__proto__\").set).call(i,[]),e=i instanceof Array}catch(t){}return function(i,n){return dt(i),function(t){if(!w(t)&&null!==t)throw TypeError(\"Can't set \"+String(t)+\" as a prototype\")}(n),e?t.call(i,n):i.__proto__=n,i}}():void 0),Ze=function(t,e,i,n){n&&n.enumerable?t[e]=i:ft(t,e,i)},Qe=Me.IteratorPrototype,Je=Me.BUGGY_SAFARI_ITERATORS,ti=U(\"iterator\"),ei=\"keys\",ii=\"values\",ni=\"entries\",oi=function(){return this},ri=function(t,e,i,n,o,r,s){!function(t,e,i){var n=e+\" Iterator\";t.prototype=Fe(Ge,{next:f(1,i)}),Ye(t,n,!1,!0),Xe[n]=Ke}(i,e,n);var a,h,l,d=function(t){if(t===o&&g)return g;if(!Je&&t in p)return p[t];switch(t){case ei:case ii:case ni:return function(){return new i(this,t)}}return function(){return new i(this)}},c=e+\" Iterator\",u=!1,p=t.prototype,v=p[ti]||p[\"@@iterator\"]||o&&p[o],g=!Je&&v||d(o),y=\"Array\"==e&&p.entries||v;if(y&&(a=Ee(y.call(new t)),Qe!==Object.prototype&&a.next&&(Ye(a,c,!0,!0),Xe[c]=oi)),o==ii&&v&&v.name!==ii&&(u=!0,g=function(){return v.call(this)}),s&&p[ti]!==g&&ft(p,ti,g),Xe[e]=g,o)if(h={values:d(ii),keys:r?g:d(ei),entries:d(ni)},s)for(l in h)(Je||u||!(l in p))&&Ze(p,l,h[l]);else gt({target:e,proto:!0,forced:Je||u},h);return h},si=te.charAt,ai=\"String Iterator\",hi=we.set,li=we.getterFor(ai);ri(String,\"String\",(function(t){hi(this,{type:ai,string:Qt(t),index:0})}),(function(){var t,e=li(this),i=e.string,n=e.index;return n>=i.length?{value:void 0,done:!0}:(t=si(i,n),e.index+=t.length,{value:t,done:!1})}));var di=function(t){var e=t.return;if(void 0!==e)return dt(e.call(t)).value},ci=function(t,e,i,n){try{return n?e(dt(i)[0],i[1]):e(i)}catch(e){throw di(t),e}},ui=U(\"iterator\"),fi=Array.prototype,pi=function(t){return void 0!==t&&(Xe.Array===t||fi[ui]===t)},vi=function(t,e,i){var n=G(e);n in t?ut.f(t,n,f(0,i)):t[n]=i},gi=U(\"iterator\"),yi=function(t){if(null!=t)return t[gi]||t[\"@@iterator\"]||Xe[We(t)]},mi=U(\"iterator\"),bi=!1;try{var wi=0,ki={next:function(){return{done:!!wi++}},return:function(){bi=!0}};ki[mi]=function(){return this},Array.from(ki,(function(){throw 2}))}catch(t){}var _i=!function(t,e){if(!e&&!bi)return!1;var i=!1;try{var n={};n[mi]=function(){return{next:function(){return{done:i=!0}}}},t(n)}catch(t){}return i}((function(t){Array.from(t)}));gt({target:\"Array\",stat:!0,forced:_i},{from:function(t){var e,i,n,o,r,s,a=A(t),h=\"function\"==typeof this?this:Array,l=arguments.length,d=l>1?arguments[1]:void 0,c=void 0!==d,u=yi(a),f=0;if(c&&(d=lt(d,l>2?arguments[2]:void 0,2)),null==u||h==Array&&pi(u))for(i=new h(e=kt(a.length));e>f;f++)s=c?d(a[f],f):a[f],vi(i,f,s);else for(r=(o=u.call(a)).next,i=new h;!(n=r.call(o)).done;f++)s=c?ci(o,d,[n.value,f],!0):n.value,vi(i,f,s);return i.length=f,i}});var xi=k.Array.from,Ei=xi,Oi=\"Array Iterator\",Ci=we.set,Si=we.getterFor(Oi);ri(Array,\"Array\",(function(t,e){Ci(this,{type:Oi,target:b(t),index:0,kind:e})}),(function(){var t=Si(this),e=t.target,i=t.kind,n=t.index++;return!e||n>=e.length?(t.target=void 0,{value:void 0,done:!0}):\"keys\"==i?{value:n,done:!1}:\"values\"==i?{value:e[n],done:!1}:{value:[n,e[n]],done:!1}}),\"values\"),Xe.Arguments=Xe.Array;var Ti=yi,Mi=U(\"toStringTag\");for(var Pi in{CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}){var Di=a[Pi],Ii=Di&&Di.prototype;Ii&&We(Ii)!==Mi&&ft(Ii,Mi,Pi),Xe[Pi]=Xe.Array}var Bi=Ti,zi=Array.isArray||function(t){return\"Array\"==v(t)},Ni=Pt.concat(\"length\",\"prototype\"),Ai={f:Object.getOwnPropertyNames||function(t){return Mt(t,Ni)}},Fi=Ai.f,ji={}.toString,Ri=\"object\"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],Li={f:function(t){return Ri&&\"[object Window]\"==ji.call(t)?function(t){try{return Fi(t)}catch(t){return Ri.slice()}}(t):Fi(b(t))}},Hi={f:U},Wi=ut.f,qi=function(t){var e=k.Symbol||(k.Symbol={});j(e,t)||Wi(e,t,{value:Hi.f(t)})},Vi=U(\"species\"),Ui=function(t,e){return new(function(t){var e;return zi(t)&&(\"function\"!=typeof(e=t.constructor)||e!==Array&&!zi(e.prototype)?w(e)&&null===(e=e[Vi])&&(e=void 0):e=void 0),void 0===e?Array:e}(t))(0===e?0:e)},Yi=[].push,Xi=function(t){var e=1==t,i=2==t,n=3==t,o=4==t,r=6==t,s=7==t,a=5==t||r;return function(h,l,d,c){for(var u,f,p=A(h),v=y(p),g=lt(l,d,3),m=kt(v.length),b=0,w=c||Ui,k=e?w(h,m):i||s?w(h,0):void 0;m>b;b++)if((a||b in v)&&(f=g(u=v[b],b,p),t))if(e)k[b]=f;else if(f)switch(t){case 3:return!0;case 5:return u;case 6:return b;case 2:Yi.call(k,u)}else switch(t){case 4:return!1;case 7:Yi.call(k,u)}return r?-1:n||o?o:k}},Gi={forEach:Xi(0),map:Xi(1),filter:Xi(2),some:Xi(3),every:Xi(4),find:Xi(5),findIndex:Xi(6),filterReject:Xi(7)},Ki=Gi.forEach,$i=le(\"hidden\"),Zi=\"Symbol\",Qi=U(\"toPrimitive\"),Ji=we.set,tn=we.getterFor(Zi),en=Object.prototype,nn=a.Symbol,on=x(\"JSON\",\"stringify\"),rn=tt.f,sn=ut.f,an=Li.f,hn=u.f,ln=N(\"symbols\"),dn=N(\"op-symbols\"),cn=N(\"string-to-symbol-registry\"),un=N(\"symbol-to-string-registry\"),fn=N(\"wks\"),pn=a.QObject,vn=!pn||!pn.prototype||!pn.prototype.findChild,gn=l&&h((function(){return 7!=Fe(sn({},\"a\",{get:function(){return sn(this,\"a\",{value:7}).a}})).a}))?function(t,e,i){var n=rn(en,e);n&&delete en[e],sn(t,e,i),n&&t!==en&&sn(en,e,n)}:sn,yn=function(t,e){var i=ln[t]=Fe(nn.prototype);return Ji(i,{type:Zi,tag:t,description:e}),l||(i.description=e),i},mn=function(t,e,i){t===en&&mn(dn,e,i),dt(t);var n=G(e);return dt(i),j(ln,n)?(i.enumerable?(j(t,$i)&&t[$i][n]&&(t[$i][n]=!1),i=Fe(i,{enumerable:f(0,!1)})):(j(t,$i)||sn(t,$i,f(1,{})),t[$i][n]=!0),gn(t,n,i)):sn(t,n,i)},bn=function(t,e){dt(t);var i=b(e),n=Dt(i).concat(xn(i));return Ki(n,(function(e){l&&!wn.call(i,e)||mn(t,e,i[e])})),t},wn=function(t){var e=G(t),i=hn.call(this,e);return!(this===en&&j(ln,e)&&!j(dn,e))&&(!(i||!j(this,e)||!j(ln,e)||j(this,$i)&&this[$i][e])||i)},kn=function(t,e){var i=b(t),n=G(e);if(i!==en||!j(ln,n)||j(dn,n)){var o=rn(i,n);return!o||!j(ln,n)||j(i,$i)&&i[$i][n]||(o.enumerable=!0),o}},_n=function(t){var e=an(b(t)),i=[];return Ki(e,(function(t){j(ln,t)||j(St,t)||i.push(t)})),i},xn=function(t){var e=t===en,i=an(e?dn:b(t)),n=[];return Ki(i,(function(t){!j(ln,t)||e&&!j(en,t)||n.push(ln[t])})),n};if(P||(Ze((nn=function(){if(this instanceof nn)throw TypeError(\"Symbol is not a constructor\");var t=arguments.length&&void 0!==arguments[0]?Qt(arguments[0]):void 0,e=H(t),i=function(t){this===en&&i.call(dn,t),j(this,$i)&&j(this[$i],e)&&(this[$i][e]=!1),gn(this,e,f(1,t))};return l&&vn&&gn(en,e,{configurable:!0,set:i}),yn(e,t)}).prototype,\"toString\",(function(){return tn(this).tag})),Ze(nn,\"withoutSetter\",(function(t){return yn(H(t),t)})),u.f=wn,ut.f=mn,tt.f=kn,Ai.f=Li.f=_n,It.f=xn,Hi.f=function(t){return yn(U(t),t)},l&&sn(nn.prototype,\"description\",{configurable:!0,get:function(){return tn(this).description}})),gt({global:!0,wrap:!0,forced:!P,sham:!P},{Symbol:nn}),Ki(Dt(fn),(function(t){qi(t)})),gt({target:Zi,stat:!0,forced:!P},{for:function(t){var e=Qt(t);if(j(cn,e))return cn[e];var i=nn(e);return cn[e]=i,un[i]=e,i},keyFor:function(t){if(!I(t))throw TypeError(t+\" is not a symbol\");if(j(un,t))return un[t]},useSetter:function(){vn=!0},useSimple:function(){vn=!1}}),gt({target:\"Object\",stat:!0,forced:!P,sham:!l},{create:function(t,e){return void 0===e?Fe(t):bn(Fe(t),e)},defineProperty:mn,defineProperties:bn,getOwnPropertyDescriptor:kn}),gt({target:\"Object\",stat:!0,forced:!P},{getOwnPropertyNames:_n,getOwnPropertySymbols:xn}),gt({target:\"Object\",stat:!0,forced:h((function(){It.f(1)}))},{getOwnPropertySymbols:function(t){return It.f(A(t))}}),on){var En=!P||h((function(){var t=nn();return\"[null]\"!=on([t])||\"{}\"!=on({a:t})||\"{}\"!=on(Object(t))}));gt({target:\"JSON\",stat:!0,forced:En},{stringify:function(t,e,i){for(var n,o=[t],r=1;arguments.length>r;)o.push(arguments[r++]);if(n=e,(w(e)||void 0!==t)&&!I(t))return zi(e)||(e=function(t,e){if(\"function\"==typeof n&&(e=n.call(this,t,e)),!I(e))return e}),o[1]=e,on.apply(null,o)}})}nn.prototype[Qi]||ft(nn.prototype,Qi,nn.prototype.valueOf),Ye(nn,Zi),St[$i]=!0;var On=k.Object.getOwnPropertySymbols,Cn=tt.f,Sn=h((function(){Cn(1)}));gt({target:\"Object\",stat:!0,forced:!l||Sn,sham:!l},{getOwnPropertyDescriptor:function(t,e){return Cn(b(t),e)}});var Tn=n((function(t){var e=k.Object,i=t.exports=function(t,i){return e.getOwnPropertyDescriptor(t,i)};e.getOwnPropertyDescriptor.sham&&(i.sham=!0)})),Mn=Tn,Pn=x(\"Reflect\",\"ownKeys\")||function(t){var e=Ai.f(dt(t)),i=It.f;return i?e.concat(i(t)):e};gt({target:\"Object\",stat:!0,sham:!l},{getOwnPropertyDescriptors:function(t){for(var e,i,n=b(t),o=tt.f,r=Pn(n),s={},a=0;r.length>a;)void 0!==(i=o(n,e=r[a++]))&&vi(s,e,i);return s}});var Dn=k.Object.getOwnPropertyDescriptors;gt({target:\"Object\",stat:!0,forced:!l,sham:!l},{defineProperties:Pe});var In=n((function(t){var e=k.Object,i=t.exports=function(t,i){return e.defineProperties(t,i)};e.defineProperties.sham&&(i.sham=!0)}));gt({target:\"Object\",stat:!0,forced:!l,sham:!l},{defineProperty:ut.f});var Bn=n((function(t){var e=k.Object,i=t.exports=function(t,i,n){return e.defineProperty(t,i,n)};e.defineProperty.sham&&(i.sham=!0)})),zn=Bn,Nn=i(n((function(t){t.exports=function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")},t.exports.default=t.exports,t.exports.__esModule=!0}))),An=Bn,Fn=i(n((function(t){function e(t,e){for(var i=0;i<e.length;i++){var n=e[i];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),An(t,n.key,n)}}t.exports=function(t,i,n){return i&&e(t.prototype,i),n&&e(t,n),t},t.exports.default=t.exports,t.exports.__esModule=!0}))),jn=i(n((function(t){t.exports=function(t,e,i){return e in t?An(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[e]=i,t},t.exports.default=t.exports,t.exports.__esModule=!0})));gt({target:\"Array\",stat:!0},{isArray:zi});var Rn=k.Array.isArray,Ln=Rn,Hn=n((function(t){t.exports=function(t){if(Ln(t))return t},t.exports.default=t.exports,t.exports.__esModule=!0}));i(Hn);var Wn=U(\"species\"),qn=function(t){return M>=51||!h((function(){var e=[];return(e.constructor={})[Wn]=function(){return{foo:1}},1!==e[t](Boolean).foo}))},Vn=U(\"isConcatSpreadable\"),Un=9007199254740991,Yn=\"Maximum allowed index exceeded\",Xn=M>=51||!h((function(){var t=[];return t[Vn]=!1,t.concat()[0]!==t})),Gn=qn(\"concat\"),Kn=function(t){if(!w(t))return!1;var e=t[Vn];return void 0!==e?!!e:zi(t)};gt({target:\"Array\",proto:!0,forced:!Xn||!Gn},{concat:function(t){var e,i,n,o,r,s=A(this),a=Ui(s,0),h=0;for(e=-1,n=arguments.length;e<n;e++)if(Kn(r=-1===e?s:arguments[e])){if(h+(o=kt(r.length))>Un)throw TypeError(Yn);for(i=0;i<o;i++,h++)i in r&&vi(a,h,r[i])}else{if(h>=Un)throw TypeError(Yn);vi(a,h++,r)}return a.length=h,a}}),qi(\"asyncIterator\"),qi(\"hasInstance\"),qi(\"isConcatSpreadable\"),qi(\"iterator\"),qi(\"match\"),qi(\"matchAll\"),qi(\"replace\"),qi(\"search\"),qi(\"species\"),qi(\"split\"),qi(\"toPrimitive\"),qi(\"toStringTag\"),qi(\"unscopables\"),Ye(a.JSON,\"JSON\",!0);var $n=k.Symbol;qi(\"asyncDispose\"),qi(\"dispose\"),qi(\"matcher\"),qi(\"metadata\"),qi(\"observable\"),qi(\"patternMatch\"),qi(\"replaceAll\");var Zn=$n,Qn=n((function(t){t.exports=function(t,e){var i=null==t?null:void 0!==Zn&&Bi(t)||t[\"@@iterator\"];if(null!=i){var n,o,r=[],s=!0,a=!1;try{for(i=i.call(t);!(s=(n=i.next()).done)&&(r.push(n.value),!e||r.length!==e);s=!0);}catch(t){a=!0,o=t}finally{try{s||null==i.return||i.return()}finally{if(a)throw o}}return r}},t.exports.default=t.exports,t.exports.__esModule=!0}));i(Qn);var Jn=qn(\"slice\"),to=U(\"species\"),eo=[].slice,io=Math.max;gt({target:\"Array\",proto:!0,forced:!Jn},{slice:function(t,e){var i,n,o,r=b(this),s=kt(r.length),a=Et(t,s),h=Et(void 0===e?s:e,s);if(zi(r)&&(\"function\"!=typeof(i=r.constructor)||i!==Array&&!zi(i.prototype)?w(i)&&null===(i=i[to])&&(i=void 0):i=void 0,i===Array||void 0===i))return eo.call(r,a,h);for(n=new(void 0===i?Array:i)(io(h-a,0)),o=0;a<h;a++,o++)a in r&&vi(n,o,r[a]);return n.length=o,n}});var no=Ht(\"Array\").slice,oo=Array.prototype,ro=function(t){var e=t.slice;return t===oo||t instanceof Array&&e===oo.slice?no:e},so=ro,ao=xi,ho=n((function(t){t.exports=function(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n},t.exports.default=t.exports,t.exports.__esModule=!0}));i(ho);var lo=n((function(t){t.exports=function(t,e){var i;if(t){if(\"string\"==typeof t)return ho(t,e);var n=so(i=Object.prototype.toString.call(t)).call(i,8,-1);return\"Object\"===n&&t.constructor&&(n=t.constructor.name),\"Map\"===n||\"Set\"===n?ao(t):\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?ho(t,e):void 0}},t.exports.default=t.exports,t.exports.__esModule=!0}));i(lo);var co=n((function(t){t.exports=function(){throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")},t.exports.default=t.exports,t.exports.__esModule=!0}));i(co);var uo=i(n((function(t){t.exports=function(t,e){return Hn(t)||Qn(t,e)||lo(t,e)||co()},t.exports.default=t.exports,t.exports.__esModule=!0}))),fo=Hi.f(\"iterator\"),po=fo,vo=n((function(t){function e(i){return\"function\"==typeof Zn&&\"symbol\"==typeof po?(t.exports=e=function(t){return typeof t},t.exports.default=t.exports,t.exports.__esModule=!0):(t.exports=e=function(t){return t&&\"function\"==typeof Zn&&t.constructor===Zn&&t!==Zn.prototype?\"symbol\":typeof t},t.exports.default=t.exports,t.exports.__esModule=!0),e(i)}t.exports=e,t.exports.default=t.exports,t.exports.__esModule=!0})),go=i(vo),yo=n((function(t){t.exports=function(t){if(Ln(t))return ho(t)},t.exports.default=t.exports,t.exports.__esModule=!0}));i(yo);var mo=n((function(t){t.exports=function(t){if(void 0!==Zn&&null!=Bi(t)||null!=t[\"@@iterator\"])return ao(t)},t.exports.default=t.exports,t.exports.__esModule=!0}));i(mo);var bo=n((function(t){t.exports=function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")},t.exports.default=t.exports,t.exports.__esModule=!0}));i(bo);var wo=i(n((function(t){t.exports=function(t){return yo(t)||mo(t)||lo(t)||bo()},t.exports.default=t.exports,t.exports.__esModule=!0}))),ko=$n,_o=Ht(\"Array\").concat,xo=Array.prototype,Eo=function(t){var e=t.concat;return t===xo||t instanceof Array&&e===xo.concat?_o:e},Oo=ro;gt({target:\"Reflect\",stat:!0},{ownKeys:Pn});var Co=k.Reflect.ownKeys,So=Rn,To=Gi.map,Mo=qn(\"map\");gt({target:\"Array\",proto:!0,forced:!Mo},{map:function(t){return To(this,t,arguments.length>1?arguments[1]:void 0)}});var Po=Ht(\"Array\").map,Do=Array.prototype,Io=function(t){var e=t.map;return t===Do||t instanceof Array&&e===Do.map?Po:e},Bo=h((function(){Dt(1)}));gt({target:\"Object\",stat:!0,forced:Bo},{keys:function(t){return Dt(A(t))}});var zo=k.Object.keys;gt({target:\"Date\",stat:!0},{now:function(){return(new Date).getTime()}});var No=k.Date.now,Ao=function(t,e){var i=[][t];return!!i&&h((function(){i.call(null,e||function(){throw 1},1)}))},Fo=Gi.forEach,jo=Ao(\"forEach\")?[].forEach:function(t){return Fo(this,t,arguments.length>1?arguments[1]:void 0)};gt({target:\"Array\",proto:!0,forced:[].forEach!=jo},{forEach:jo});var Ro=Ht(\"Array\").forEach,Lo=Array.prototype,Ho={DOMTokenList:!0,NodeList:!0},Wo=function(t){var e=t.forEach;return t===Lo||t instanceof Array&&e===Lo.forEach||Ho.hasOwnProperty(We(t))?Ro:e},qo=[].reverse,Vo=[1,2];gt({target:\"Array\",proto:!0,forced:String(Vo)===String(Vo.reverse())},{reverse:function(){return zi(this)&&(this.length=this.length),qo.call(this)}});var Uo=Ht(\"Array\").reverse,Yo=Array.prototype,Xo=function(t){var e=t.reverse;return t===Yo||t instanceof Array&&e===Yo.reverse?Uo:e},Go=qn(\"splice\"),Ko=Math.max,$o=Math.min,Zo=9007199254740991,Qo=\"Maximum allowed length exceeded\";gt({target:\"Array\",proto:!0,forced:!Go},{splice:function(t,e){var i,n,o,r,s,a,h=A(this),l=kt(h.length),d=Et(t,l),c=arguments.length;if(0===c?i=n=0:1===c?(i=0,n=l-d):(i=c-2,n=$o(Ko(bt(e),0),l-d)),l+i-n>Zo)throw TypeError(Qo);for(o=Ui(h,n),r=0;r<n;r++)(s=d+r)in h&&vi(o,r,h[s]);if(o.length=n,i<n){for(r=d;r<l-n;r++)a=r+i,(s=r+n)in h?h[a]=h[s]:delete h[a];for(r=l;r>l-n+i;r--)delete h[r-1]}else if(i>n)for(r=l-n;r>d;r--)a=r+i-1,(s=r+n-1)in h?h[a]=h[s]:delete h[a];for(r=0;r<i;r++)h[r+d]=arguments[r+2];return h.length=l-n+i,o}});var Jo=Ht(\"Array\").splice,tr=Array.prototype,er=function(t){var e=t.splice;return t===tr||t instanceof Array&&e===tr.splice?Jo:e},ir=Ct.includes;gt({target:\"Array\",proto:!0},{includes:function(t){return ir(this,t,arguments.length>1?arguments[1]:void 0)}});var nr=Ht(\"Array\").includes,or=U(\"match\"),rr=function(t){if(function(t){var e;return w(t)&&(void 0!==(e=t[or])?!!e:\"RegExp\"==v(t))}(t))throw TypeError(\"The method doesn't accept regular expressions\");return t},sr=U(\"match\");gt({target:\"String\",proto:!0,forced:!function(t){var e=/./;try{\"/./\"[t](e)}catch(i){try{return e[sr]=!1,\"/./\"[t](e)}catch(t){}}return!1}(\"includes\")},{includes:function(t){return!!~Qt(m(this)).indexOf(Qt(rr(t)),arguments.length>1?arguments[1]:void 0)}});var ar=Ht(\"String\").includes,hr=Array.prototype,lr=String.prototype,dr=function(t){var e=t.includes;return t===hr||t instanceof Array&&e===hr.includes?nr:\"string\"==typeof t||t===lr||t instanceof String&&e===lr.includes?ar:e},cr=h((function(){Ee(1)}));gt({target:\"Object\",stat:!0,forced:cr,sham:!ke},{getPrototypeOf:function(t){return Ee(A(t))}});var ur=k.Object.getPrototypeOf,fr=ur,pr=Gi.filter,vr=qn(\"filter\");gt({target:\"Array\",proto:!0,forced:!vr},{filter:function(t){return pr(this,t,arguments.length>1?arguments[1]:void 0)}});var gr=Ht(\"Array\").filter,yr=Array.prototype,mr=function(t){var e=t.filter;return t===yr||t instanceof Array&&e===yr.filter?gr:e},br=u.f,wr=function(t){return function(e){for(var i,n=b(e),o=Dt(n),r=o.length,s=0,a=[];r>s;)i=o[s++],l&&!br.call(n,i)||a.push(t?[i,n[i]]:n[i]);return a}},kr={entries:wr(!0),values:wr(!1)}.values;gt({target:\"Object\",stat:!0},{values:function(t){return kr(t)}});var _r=k.Object.values,xr=\"\\t\\n\\v\\f\\r                　\\u2028\\u2029\\ufeff\",Er=\"[\"+xr+\"]\",Or=RegExp(\"^\"+Er+Er+\"*\"),Cr=RegExp(Er+Er+\"*$\"),Sr=function(t){return function(e){var i=Qt(m(e));return 1&t&&(i=i.replace(Or,\"\")),2&t&&(i=i.replace(Cr,\"\")),i}},Tr={start:Sr(1),end:Sr(2),trim:Sr(3)},Mr=Tr.trim,Pr=a.parseInt,Dr=/^[+-]?0[Xx]/,Ir=8!==Pr(xr+\"08\")||22!==Pr(xr+\"0x16\")?function(t,e){var i=Mr(Qt(t));return Pr(i,e>>>0||(Dr.test(i)?16:10))}:Pr;gt({global:!0,forced:parseInt!=Ir},{parseInt:Ir});var Br=k.parseInt,zr=Ct.indexOf,Nr=[].indexOf,Ar=!!Nr&&1/[1].indexOf(1,-0)<0,Fr=Ao(\"indexOf\");gt({target:\"Array\",proto:!0,forced:Ar||!Fr},{indexOf:function(t){return Ar?Nr.apply(this,arguments)||0:zr(this,t,arguments.length>1?arguments[1]:void 0)}});var jr,Rr=Ht(\"Array\").indexOf,Lr=Array.prototype,Hr=function(t){var e=t.indexOf;return t===Lr||t instanceof Array&&e===Lr.indexOf?Rr:e},Wr=Tr.trim;gt({target:\"String\",proto:!0,forced:(jr=\"trim\",h((function(){return!!xr[jr]()||\"​\\n᠎\"!=\"​\\n᠎\"[jr]()||xr[jr].name!==jr})))},{trim:function(){return Wr(this)}});var qr=Ht(\"String\").trim,Vr=String.prototype,Ur=function(t){var e=t.trim;return\"string\"==typeof t||t===Vr||t instanceof String&&e===Vr.trim?qr:e};gt({target:\"Object\",stat:!0,sham:!l},{create:Fe});var Yr=k.Object,Xr=function(t,e){return Yr.create(t,e)},Gr=Xr,Kr=x(\"JSON\",\"stringify\"),$r=/[\\uD800-\\uDFFF]/g,Zr=/^[\\uD800-\\uDBFF]$/,Qr=/^[\\uDC00-\\uDFFF]$/,Jr=function(t,e,i){var n=i.charAt(e-1),o=i.charAt(e+1);return Zr.test(t)&&!Qr.test(o)||Qr.test(t)&&!Zr.test(n)?\"\\\\u\"+t.charCodeAt(0).toString(16):t},ts=h((function(){return'\"\\\\udf06\\\\ud834\"'!==Kr(\"\\udf06\\ud834\")||'\"\\\\udead\"'!==Kr(\"\\udead\")}));Kr&&gt({target:\"JSON\",stat:!0,forced:ts},{stringify:function(t,e,i){var n=Kr.apply(null,arguments);return\"string\"==typeof n?n.replace($r,Jr):n}}),k.JSON||(k.JSON={stringify:JSON.stringify});var es=function(t,e,i){return k.JSON.stringify.apply(null,arguments)},is=[].slice,ns=/MSIE .\\./.test(E),os=function(t){return function(e,i){var n=arguments.length>2,o=n?is.call(arguments,2):void 0;return t(n?function(){(\"function\"==typeof e?e:Function(e)).apply(this,o)}:e,i)}};gt({global:!0,bind:!0,forced:ns},{setTimeout:os(a.setTimeout),setInterval:os(a.setInterval)});var rs=k.setTimeout;gt({target:\"Array\",proto:!0},{fill:function(t){for(var e=A(this),i=kt(e.length),n=arguments.length,o=Et(n>1?arguments[1]:void 0,i),r=n>2?arguments[2]:void 0,s=void 0===r?i:Et(r,i);s>o;)e[o++]=t;return e}});var ss=Ht(\"Array\").fill,as=Array.prototype,hs=function(t){var e=t.fill;return t===as||t instanceof Array&&e===as.fill?ss:e};function ls(){return(ls=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var i=arguments[e];for(var n in i)Object.prototype.hasOwnProperty.call(i,n)&&(t[n]=i[n])}return t}).apply(this,arguments)}function ds(t,e){t.prototype=Object.create(e.prototype),t.prototype.constructor=t,t.__proto__=e}function cs(t){if(void 0===t)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return t}var us,fs=\"function\"!=typeof Object.assign?function(t){if(null==t)throw new TypeError(\"Cannot convert undefined or null to object\");for(var e=Object(t),i=1;i<arguments.length;i++){var n=arguments[i];if(null!=n)for(var o in n)n.hasOwnProperty(o)&&(e[o]=n[o])}return e}:Object.assign,ps=[\"\",\"webkit\",\"Moz\",\"MS\",\"ms\",\"o\"],vs=\"undefined\"==typeof document?{style:{}}:document.createElement(\"div\"),gs=Math.round,ys=Math.abs,ms=Date.now;function bs(t,e){for(var i,n,o=e[0].toUpperCase()+e.slice(1),r=0;r<ps.length;){if((n=(i=ps[r])?i+o:e)in t)return n;r++}}us=\"undefined\"==typeof window?{}:window;var ws=bs(vs.style,\"touchAction\"),ks=void 0!==ws;var _s=\"compute\",xs=\"auto\",Es=\"manipulation\",Os=\"none\",Cs=\"pan-x\",Ss=\"pan-y\",Ts=function(){if(!ks)return!1;var t={},e=us.CSS&&us.CSS.supports;return[\"auto\",\"manipulation\",\"pan-y\",\"pan-x\",\"pan-x pan-y\",\"none\"].forEach((function(i){return t[i]=!e||us.CSS.supports(\"touch-action\",i)})),t}(),Ms=\"ontouchstart\"in us,Ps=void 0!==bs(us,\"PointerEvent\"),Ds=Ms&&/mobile|tablet|ip(ad|hone|od)|android/i.test(navigator.userAgent),Is=\"touch\",Bs=\"mouse\",zs=16,Ns=24,As=[\"x\",\"y\"],Fs=[\"clientX\",\"clientY\"];function js(t,e,i){var n;if(t)if(t.forEach)t.forEach(e,i);else if(void 0!==t.length)for(n=0;n<t.length;)e.call(i,t[n],n,t),n++;else for(n in t)t.hasOwnProperty(n)&&e.call(i,t[n],n,t)}function Rs(t,e){return\"function\"==typeof t?t.apply(e&&e[0]||void 0,e):t}function Ls(t,e){return t.indexOf(e)>-1}var Hs=function(){function t(t,e){this.manager=t,this.set(e)}var e=t.prototype;return e.set=function(t){t===_s&&(t=this.compute()),ks&&this.manager.element.style&&Ts[t]&&(this.manager.element.style[ws]=t),this.actions=t.toLowerCase().trim()},e.update=function(){this.set(this.manager.options.touchAction)},e.compute=function(){var t=[];return js(this.manager.recognizers,(function(e){Rs(e.options.enable,[e])&&(t=t.concat(e.getTouchAction()))})),function(t){if(Ls(t,Os))return Os;var e=Ls(t,Cs),i=Ls(t,Ss);return e&&i?Os:e||i?e?Cs:Ss:Ls(t,Es)?Es:xs}(t.join(\" \"))},e.preventDefaults=function(t){var e=t.srcEvent,i=t.offsetDirection;if(this.manager.session.prevented)e.preventDefault();else{var n=this.actions,o=Ls(n,Os)&&!Ts.none,r=Ls(n,Ss)&&!Ts[\"pan-y\"],s=Ls(n,Cs)&&!Ts[\"pan-x\"];if(o){var a=1===t.pointers.length,h=t.distance<2,l=t.deltaTime<250;if(a&&h&&l)return}if(!s||!r)return o||r&&6&i||s&&i&Ns?this.preventSrc(e):void 0}},e.preventSrc=function(t){this.manager.session.prevented=!0,t.preventDefault()},t}();function Ws(t,e){for(;t;){if(t===e)return!0;t=t.parentNode}return!1}function qs(t){var e=t.length;if(1===e)return{x:gs(t[0].clientX),y:gs(t[0].clientY)};for(var i=0,n=0,o=0;o<e;)i+=t[o].clientX,n+=t[o].clientY,o++;return{x:gs(i/e),y:gs(n/e)}}function Vs(t){for(var e=[],i=0;i<t.pointers.length;)e[i]={clientX:gs(t.pointers[i].clientX),clientY:gs(t.pointers[i].clientY)},i++;return{timeStamp:ms(),pointers:e,center:qs(e),deltaX:t.deltaX,deltaY:t.deltaY}}function Us(t,e,i){i||(i=As);var n=e[i[0]]-t[i[0]],o=e[i[1]]-t[i[1]];return Math.sqrt(n*n+o*o)}function Ys(t,e,i){i||(i=As);var n=e[i[0]]-t[i[0]],o=e[i[1]]-t[i[1]];return 180*Math.atan2(o,n)/Math.PI}function Xs(t,e){return t===e?1:ys(t)>=ys(e)?t<0?2:4:e<0?8:zs}function Gs(t,e,i){return{x:e/t||0,y:i/t||0}}function Ks(t,e){var i=t.session,n=e.pointers,o=n.length;i.firstInput||(i.firstInput=Vs(e)),o>1&&!i.firstMultiple?i.firstMultiple=Vs(e):1===o&&(i.firstMultiple=!1);var r=i.firstInput,s=i.firstMultiple,a=s?s.center:r.center,h=e.center=qs(n);e.timeStamp=ms(),e.deltaTime=e.timeStamp-r.timeStamp,e.angle=Ys(a,h),e.distance=Us(a,h),function(t,e){var i=e.center,n=t.offsetDelta||{},o=t.prevDelta||{},r=t.prevInput||{};1!==e.eventType&&4!==r.eventType||(o=t.prevDelta={x:r.deltaX||0,y:r.deltaY||0},n=t.offsetDelta={x:i.x,y:i.y}),e.deltaX=o.x+(i.x-n.x),e.deltaY=o.y+(i.y-n.y)}(i,e),e.offsetDirection=Xs(e.deltaX,e.deltaY);var l,d,c=Gs(e.deltaTime,e.deltaX,e.deltaY);e.overallVelocityX=c.x,e.overallVelocityY=c.y,e.overallVelocity=ys(c.x)>ys(c.y)?c.x:c.y,e.scale=s?(l=s.pointers,Us((d=n)[0],d[1],Fs)/Us(l[0],l[1],Fs)):1,e.rotation=s?function(t,e){return Ys(e[1],e[0],Fs)+Ys(t[1],t[0],Fs)}(s.pointers,n):0,e.maxPointers=i.prevInput?e.pointers.length>i.prevInput.maxPointers?e.pointers.length:i.prevInput.maxPointers:e.pointers.length,function(t,e){var i,n,o,r,s=t.lastInterval||e,a=e.timeStamp-s.timeStamp;if(8!==e.eventType&&(a>25||void 0===s.velocity)){var h=e.deltaX-s.deltaX,l=e.deltaY-s.deltaY,d=Gs(a,h,l);n=d.x,o=d.y,i=ys(d.x)>ys(d.y)?d.x:d.y,r=Xs(h,l),t.lastInterval=e}else i=s.velocity,n=s.velocityX,o=s.velocityY,r=s.direction;e.velocity=i,e.velocityX=n,e.velocityY=o,e.direction=r}(i,e);var u,f=t.element,p=e.srcEvent;Ws(u=p.composedPath?p.composedPath()[0]:p.path?p.path[0]:p.target,f)&&(f=u),e.target=f}function $s(t,e,i){var n=i.pointers.length,o=i.changedPointers.length,r=1&e&&n-o==0,s=12&e&&n-o==0;i.isFirst=!!r,i.isFinal=!!s,r&&(t.session={}),i.eventType=e,Ks(t,i),t.emit(\"hammer.input\",i),t.recognize(i),t.session.prevInput=i}function Zs(t){return t.trim().split(/\\s+/g)}function Qs(t,e,i){js(Zs(e),(function(e){t.addEventListener(e,i,!1)}))}function Js(t,e,i){js(Zs(e),(function(e){t.removeEventListener(e,i,!1)}))}function ta(t){var e=t.ownerDocument||t;return e.defaultView||e.parentWindow||window}var ea=function(){function t(t,e){var i=this;this.manager=t,this.callback=e,this.element=t.element,this.target=t.options.inputTarget,this.domHandler=function(e){Rs(t.options.enable,[t])&&i.handler(e)},this.init()}var e=t.prototype;return e.handler=function(){},e.init=function(){this.evEl&&Qs(this.element,this.evEl,this.domHandler),this.evTarget&&Qs(this.target,this.evTarget,this.domHandler),this.evWin&&Qs(ta(this.element),this.evWin,this.domHandler)},e.destroy=function(){this.evEl&&Js(this.element,this.evEl,this.domHandler),this.evTarget&&Js(this.target,this.evTarget,this.domHandler),this.evWin&&Js(ta(this.element),this.evWin,this.domHandler)},t}();function ia(t,e,i){if(t.indexOf&&!i)return t.indexOf(e);for(var n=0;n<t.length;){if(i&&t[n][i]==e||!i&&t[n]===e)return n;n++}return-1}var na={pointerdown:1,pointermove:2,pointerup:4,pointercancel:8,pointerout:8},oa={2:Is,3:\"pen\",4:Bs,5:\"kinect\"},ra=\"pointerdown\",sa=\"pointermove pointerup pointercancel\";us.MSPointerEvent&&!us.PointerEvent&&(ra=\"MSPointerDown\",sa=\"MSPointerMove MSPointerUp MSPointerCancel\");var aa=function(t){function e(){var i,n=e.prototype;return n.evEl=ra,n.evWin=sa,(i=t.apply(this,arguments)||this).store=i.manager.session.pointerEvents=[],i}return ds(e,t),e.prototype.handler=function(t){var e=this.store,i=!1,n=t.type.toLowerCase().replace(\"ms\",\"\"),o=na[n],r=oa[t.pointerType]||t.pointerType,s=r===Is,a=ia(e,t.pointerId,\"pointerId\");1&o&&(0===t.button||s)?a<0&&(e.push(t),a=e.length-1):12&o&&(i=!0),a<0||(e[a]=t,this.callback(this.manager,o,{pointers:e,changedPointers:[t],pointerType:r,srcEvent:t}),i&&e.splice(a,1))},e}(ea);function ha(t){return Array.prototype.slice.call(t,0)}function la(t,e,i){for(var n=[],o=[],r=0;r<t.length;){var s=e?t[r][e]:t[r];ia(o,s)<0&&n.push(t[r]),o[r]=s,r++}return i&&(n=e?n.sort((function(t,i){return t[e]>i[e]})):n.sort()),n}var da={touchstart:1,touchmove:2,touchend:4,touchcancel:8},ca=\"touchstart touchmove touchend touchcancel\",ua=function(t){function e(){var i;return e.prototype.evTarget=ca,(i=t.apply(this,arguments)||this).targetIds={},i}return ds(e,t),e.prototype.handler=function(t){var e=da[t.type],i=fa.call(this,t,e);i&&this.callback(this.manager,e,{pointers:i[0],changedPointers:i[1],pointerType:Is,srcEvent:t})},e}(ea);function fa(t,e){var i,n,o=ha(t.touches),r=this.targetIds;if(3&e&&1===o.length)return r[o[0].identifier]=!0,[o,o];var s=ha(t.changedTouches),a=[],h=this.target;if(n=o.filter((function(t){return Ws(t.target,h)})),1===e)for(i=0;i<n.length;)r[n[i].identifier]=!0,i++;for(i=0;i<s.length;)r[s[i].identifier]&&a.push(s[i]),12&e&&delete r[s[i].identifier],i++;return a.length?[la(n.concat(a),\"identifier\",!0),a]:void 0}var pa={mousedown:1,mousemove:2,mouseup:4},va=\"mousedown\",ga=\"mousemove mouseup\",ya=function(t){function e(){var i,n=e.prototype;return n.evEl=va,n.evWin=ga,(i=t.apply(this,arguments)||this).pressed=!1,i}return ds(e,t),e.prototype.handler=function(t){var e=pa[t.type];1&e&&0===t.button&&(this.pressed=!0),2&e&&1!==t.which&&(e=4),this.pressed&&(4&e&&(this.pressed=!1),this.callback(this.manager,e,{pointers:[t],changedPointers:[t],pointerType:Bs,srcEvent:t}))},e}(ea);function ma(t){var e=t.changedPointers[0];if(e.identifier===this.primaryTouch){var i={x:e.clientX,y:e.clientY},n=this.lastTouches;this.lastTouches.push(i);setTimeout((function(){var t=n.indexOf(i);t>-1&&n.splice(t,1)}),2500)}}function ba(t,e){1&t?(this.primaryTouch=e.changedPointers[0].identifier,ma.call(this,e)):12&t&&ma.call(this,e)}function wa(t){for(var e=t.srcEvent.clientX,i=t.srcEvent.clientY,n=0;n<this.lastTouches.length;n++){var o=this.lastTouches[n],r=Math.abs(e-o.x),s=Math.abs(i-o.y);if(r<=25&&s<=25)return!0}return!1}var ka=function(){return function(t){function e(e,i){var n;return(n=t.call(this,e,i)||this).handler=function(t,e,i){var o=i.pointerType===Is,r=i.pointerType===Bs;if(!(r&&i.sourceCapabilities&&i.sourceCapabilities.firesTouchEvents)){if(o)ba.call(cs(cs(n)),e,i);else if(r&&wa.call(cs(cs(n)),i))return;n.callback(t,e,i)}},n.touch=new ua(n.manager,n.handler),n.mouse=new ya(n.manager,n.handler),n.primaryTouch=null,n.lastTouches=[],n}return ds(e,t),e.prototype.destroy=function(){this.touch.destroy(),this.mouse.destroy()},e}(ea)}();function _a(t,e,i){return!!Array.isArray(t)&&(js(t,i[e],i),!0)}var xa=32,Ea=1;function Oa(t,e){var i=e.manager;return i?i.get(t):t}function Ca(t){return 16&t?\"cancel\":8&t?\"end\":4&t?\"move\":2&t?\"start\":\"\"}var Sa=function(){function t(t){void 0===t&&(t={}),this.options=ls({enable:!0},t),this.id=Ea++,this.manager=null,this.state=1,this.simultaneous={},this.requireFail=[]}var e=t.prototype;return e.set=function(t){return fs(this.options,t),this.manager&&this.manager.touchAction.update(),this},e.recognizeWith=function(t){if(_a(t,\"recognizeWith\",this))return this;var e=this.simultaneous;return e[(t=Oa(t,this)).id]||(e[t.id]=t,t.recognizeWith(this)),this},e.dropRecognizeWith=function(t){return _a(t,\"dropRecognizeWith\",this)||(t=Oa(t,this),delete this.simultaneous[t.id]),this},e.requireFailure=function(t){if(_a(t,\"requireFailure\",this))return this;var e=this.requireFail;return-1===ia(e,t=Oa(t,this))&&(e.push(t),t.requireFailure(this)),this},e.dropRequireFailure=function(t){if(_a(t,\"dropRequireFailure\",this))return this;t=Oa(t,this);var e=ia(this.requireFail,t);return e>-1&&this.requireFail.splice(e,1),this},e.hasRequireFailures=function(){return this.requireFail.length>0},e.canRecognizeWith=function(t){return!!this.simultaneous[t.id]},e.emit=function(t){var e=this,i=this.state;function n(i){e.manager.emit(i,t)}i<8&&n(e.options.event+Ca(i)),n(e.options.event),t.additionalEvent&&n(t.additionalEvent),i>=8&&n(e.options.event+Ca(i))},e.tryEmit=function(t){if(this.canEmit())return this.emit(t);this.state=xa},e.canEmit=function(){for(var t=0;t<this.requireFail.length;){if(!(33&this.requireFail[t].state))return!1;t++}return!0},e.recognize=function(t){var e=fs({},t);if(!Rs(this.options.enable,[this,e]))return this.reset(),void(this.state=xa);56&this.state&&(this.state=1),this.state=this.process(e),30&this.state&&this.tryEmit(e)},e.process=function(t){},e.getTouchAction=function(){},e.reset=function(){},t}(),Ta=function(t){function e(e){var i;return void 0===e&&(e={}),(i=t.call(this,ls({event:\"tap\",pointers:1,taps:1,interval:300,time:250,threshold:9,posThreshold:10},e))||this).pTime=!1,i.pCenter=!1,i._timer=null,i._input=null,i.count=0,i}ds(e,t);var i=e.prototype;return i.getTouchAction=function(){return[Es]},i.process=function(t){var e=this,i=this.options,n=t.pointers.length===i.pointers,o=t.distance<i.threshold,r=t.deltaTime<i.time;if(this.reset(),1&t.eventType&&0===this.count)return this.failTimeout();if(o&&r&&n){if(4!==t.eventType)return this.failTimeout();var s=!this.pTime||t.timeStamp-this.pTime<i.interval,a=!this.pCenter||Us(this.pCenter,t.center)<i.posThreshold;if(this.pTime=t.timeStamp,this.pCenter=t.center,a&&s?this.count+=1:this.count=1,this._input=t,0===this.count%i.taps)return this.hasRequireFailures()?(this._timer=setTimeout((function(){e.state=8,e.tryEmit()}),i.interval),2):8}return xa},i.failTimeout=function(){var t=this;return this._timer=setTimeout((function(){t.state=xa}),this.options.interval),xa},i.reset=function(){clearTimeout(this._timer)},i.emit=function(){8===this.state&&(this._input.tapCount=this.count,this.manager.emit(this.options.event,this._input))},e}(Sa),Ma=function(t){function e(e){return void 0===e&&(e={}),t.call(this,ls({pointers:1},e))||this}ds(e,t);var i=e.prototype;return i.attrTest=function(t){var e=this.options.pointers;return 0===e||t.pointers.length===e},i.process=function(t){var e=this.state,i=t.eventType,n=6&e,o=this.attrTest(t);return n&&(8&i||!o)?16|e:n||o?4&i?8|e:2&e?4|e:2:xa},e}(Sa);function Pa(t){return t===zs?\"down\":8===t?\"up\":2===t?\"left\":4===t?\"right\":\"\"}var Da=function(t){function e(e){var i;return void 0===e&&(e={}),(i=t.call(this,ls({event:\"pan\",threshold:10,pointers:1,direction:30},e))||this).pX=null,i.pY=null,i}ds(e,t);var i=e.prototype;return i.getTouchAction=function(){var t=this.options.direction,e=[];return 6&t&&e.push(Ss),t&Ns&&e.push(Cs),e},i.directionTest=function(t){var e=this.options,i=!0,n=t.distance,o=t.direction,r=t.deltaX,s=t.deltaY;return o&e.direction||(6&e.direction?(o=0===r?1:r<0?2:4,i=r!==this.pX,n=Math.abs(t.deltaX)):(o=0===s?1:s<0?8:zs,i=s!==this.pY,n=Math.abs(t.deltaY))),t.direction=o,i&&n>e.threshold&&o&e.direction},i.attrTest=function(t){return Ma.prototype.attrTest.call(this,t)&&(2&this.state||!(2&this.state)&&this.directionTest(t))},i.emit=function(e){this.pX=e.deltaX,this.pY=e.deltaY;var i=Pa(e.direction);i&&(e.additionalEvent=this.options.event+i),t.prototype.emit.call(this,e)},e}(Ma),Ia=function(t){function e(e){return void 0===e&&(e={}),t.call(this,ls({event:\"swipe\",threshold:10,velocity:.3,direction:30,pointers:1},e))||this}ds(e,t);var i=e.prototype;return i.getTouchAction=function(){return Da.prototype.getTouchAction.call(this)},i.attrTest=function(e){var i,n=this.options.direction;return 30&n?i=e.overallVelocity:6&n?i=e.overallVelocityX:n&Ns&&(i=e.overallVelocityY),t.prototype.attrTest.call(this,e)&&n&e.offsetDirection&&e.distance>this.options.threshold&&e.maxPointers===this.options.pointers&&ys(i)>this.options.velocity&&4&e.eventType},i.emit=function(t){var e=Pa(t.offsetDirection);e&&this.manager.emit(this.options.event+e,t),this.manager.emit(this.options.event,t)},e}(Ma),Ba=function(t){function e(e){return void 0===e&&(e={}),t.call(this,ls({event:\"pinch\",threshold:0,pointers:2},e))||this}ds(e,t);var i=e.prototype;return i.getTouchAction=function(){return[Os]},i.attrTest=function(e){return t.prototype.attrTest.call(this,e)&&(Math.abs(e.scale-1)>this.options.threshold||2&this.state)},i.emit=function(e){if(1!==e.scale){var i=e.scale<1?\"in\":\"out\";e.additionalEvent=this.options.event+i}t.prototype.emit.call(this,e)},e}(Ma),za=function(t){function e(e){return void 0===e&&(e={}),t.call(this,ls({event:\"rotate\",threshold:0,pointers:2},e))||this}ds(e,t);var i=e.prototype;return i.getTouchAction=function(){return[Os]},i.attrTest=function(e){return t.prototype.attrTest.call(this,e)&&(Math.abs(e.rotation)>this.options.threshold||2&this.state)},e}(Ma),Na=function(t){function e(e){var i;return void 0===e&&(e={}),(i=t.call(this,ls({event:\"press\",pointers:1,time:251,threshold:9},e))||this)._timer=null,i._input=null,i}ds(e,t);var i=e.prototype;return i.getTouchAction=function(){return[xs]},i.process=function(t){var e=this,i=this.options,n=t.pointers.length===i.pointers,o=t.distance<i.threshold,r=t.deltaTime>i.time;if(this._input=t,!o||!n||12&t.eventType&&!r)this.reset();else if(1&t.eventType)this.reset(),this._timer=setTimeout((function(){e.state=8,e.tryEmit()}),i.time);else if(4&t.eventType)return 8;return xa},i.reset=function(){clearTimeout(this._timer)},i.emit=function(t){8===this.state&&(t&&4&t.eventType?this.manager.emit(this.options.event+\"up\",t):(this._input.timeStamp=ms(),this.manager.emit(this.options.event,this._input)))},e}(Sa),Aa={domEvents:!1,touchAction:_s,enable:!0,inputTarget:null,inputClass:null,cssProps:{userSelect:\"none\",touchSelect:\"none\",touchCallout:\"none\",contentZooming:\"none\",userDrag:\"none\",tapHighlightColor:\"rgba(0,0,0,0)\"}},Fa=[[za,{enable:!1}],[Ba,{enable:!1},[\"rotate\"]],[Ia,{direction:6}],[Da,{direction:6},[\"swipe\"]],[Ta],[Ta,{event:\"doubletap\",taps:2},[\"tap\"]],[Na]];function ja(t,e){var i,n=t.element;n.style&&(js(t.options.cssProps,(function(o,r){i=bs(n.style,r),e?(t.oldCssProps[i]=n.style[i],n.style[i]=o):n.style[i]=t.oldCssProps[i]||\"\"})),e||(t.oldCssProps={}))}var Ra=function(){function t(t,e){var i,n=this;this.options=fs({},Aa,e||{}),this.options.inputTarget=this.options.inputTarget||t,this.handlers={},this.session={},this.recognizers=[],this.oldCssProps={},this.element=t,this.input=new((i=this).options.inputClass||(Ps?aa:Ds?ua:Ms?ka:ya))(i,$s),this.touchAction=new Hs(this,this.options.touchAction),ja(this,!0),js(this.options.recognizers,(function(t){var e=n.add(new t[0](t[1]));t[2]&&e.recognizeWith(t[2]),t[3]&&e.requireFailure(t[3])}),this)}var e=t.prototype;return e.set=function(t){return fs(this.options,t),t.touchAction&&this.touchAction.update(),t.inputTarget&&(this.input.destroy(),this.input.target=t.inputTarget,this.input.init()),this},e.stop=function(t){this.session.stopped=t?2:1},e.recognize=function(t){var e=this.session;if(!e.stopped){var i;this.touchAction.preventDefaults(t);var n=this.recognizers,o=e.curRecognizer;(!o||o&&8&o.state)&&(e.curRecognizer=null,o=null);for(var r=0;r<n.length;)i=n[r],2===e.stopped||o&&i!==o&&!i.canRecognizeWith(o)?i.reset():i.recognize(t),!o&&14&i.state&&(e.curRecognizer=i,o=i),r++}},e.get=function(t){if(t instanceof Sa)return t;for(var e=this.recognizers,i=0;i<e.length;i++)if(e[i].options.event===t)return e[i];return null},e.add=function(t){if(_a(t,\"add\",this))return this;var e=this.get(t.options.event);return e&&this.remove(e),this.recognizers.push(t),t.manager=this,this.touchAction.update(),t},e.remove=function(t){if(_a(t,\"remove\",this))return this;var e=this.get(t);if(t){var i=this.recognizers,n=ia(i,e);-1!==n&&(i.splice(n,1),this.touchAction.update())}return this},e.on=function(t,e){if(void 0===t||void 0===e)return this;var i=this.handlers;return js(Zs(t),(function(t){i[t]=i[t]||[],i[t].push(e)})),this},e.off=function(t,e){if(void 0===t)return this;var i=this.handlers;return js(Zs(t),(function(t){e?i[t]&&i[t].splice(ia(i[t],e),1):delete i[t]})),this},e.emit=function(t,e){this.options.domEvents&&function(t,e){var i=document.createEvent(\"Event\");i.initEvent(t,!0,!0),i.gesture=e,e.target.dispatchEvent(i)}(t,e);var i=this.handlers[t]&&this.handlers[t].slice();if(i&&i.length){e.type=t,e.preventDefault=function(){e.srcEvent.preventDefault()};for(var n=0;n<i.length;)i[n](e),n++}},e.destroy=function(){this.element&&ja(this,!1),this.handlers={},this.session={},this.input.destroy(),this.element=null},t}(),La={touchstart:1,touchmove:2,touchend:4,touchcancel:8},Ha=\"touchstart\",Wa=\"touchstart touchmove touchend touchcancel\",qa=function(t){function e(){var i,n=e.prototype;return n.evTarget=Ha,n.evWin=Wa,(i=t.apply(this,arguments)||this).started=!1,i}return ds(e,t),e.prototype.handler=function(t){var e=La[t.type];if(1===e&&(this.started=!0),this.started){var i=Va.call(this,t,e);12&e&&i[0].length-i[1].length==0&&(this.started=!1),this.callback(this.manager,e,{pointers:i[0],changedPointers:i[1],pointerType:Is,srcEvent:t})}},e}(ea);function Va(t,e){var i=ha(t.touches),n=ha(t.changedTouches);return 12&e&&(i=la(i.concat(n),\"identifier\",!0)),[i,n]}function Ua(t,e,i){var n=\"DEPRECATED METHOD: \"+e+\"\\n\"+i+\" AT \\n\";return function(){var e=new Error(\"get-stack-trace\"),i=e&&e.stack?e.stack.replace(/^[^\\(]+?[\\n$]/gm,\"\").replace(/^\\s+at\\s+/gm,\"\").replace(/^Object.<anonymous>\\s*\\(/gm,\"{anonymous}()@\"):\"Unknown Stack Trace\",o=window.console&&(window.console.warn||window.console.log);return o&&o.call(window.console,n,i),t.apply(this,arguments)}}var Ya=Ua((function(t,e,i){for(var n=Object.keys(e),o=0;o<n.length;)(!i||i&&void 0===t[n[o]])&&(t[n[o]]=e[n[o]]),o++;return t}),\"extend\",\"Use `assign`.\"),Xa=Ua((function(t,e){return Ya(t,e,!0)}),\"merge\",\"Use `assign`.\");function Ga(t,e,i){var n,o=e.prototype;(n=t.prototype=Object.create(o)).constructor=t,n._super=o,i&&fs(n,i)}function Ka(t,e){return function(){return t.apply(e,arguments)}}var $a=function(){var t=function(t,e){return void 0===e&&(e={}),new Ra(t,ls({recognizers:Fa.concat()},e))};return t.VERSION=\"2.0.17-rc\",t.DIRECTION_ALL=30,t.DIRECTION_DOWN=zs,t.DIRECTION_LEFT=2,t.DIRECTION_RIGHT=4,t.DIRECTION_UP=8,t.DIRECTION_HORIZONTAL=6,t.DIRECTION_VERTICAL=Ns,t.DIRECTION_NONE=1,t.DIRECTION_DOWN=zs,t.INPUT_START=1,t.INPUT_MOVE=2,t.INPUT_END=4,t.INPUT_CANCEL=8,t.STATE_POSSIBLE=1,t.STATE_BEGAN=2,t.STATE_CHANGED=4,t.STATE_ENDED=8,t.STATE_RECOGNIZED=8,t.STATE_CANCELLED=16,t.STATE_FAILED=xa,t.Manager=Ra,t.Input=ea,t.TouchAction=Hs,t.TouchInput=ua,t.MouseInput=ya,t.PointerEventInput=aa,t.TouchMouseInput=ka,t.SingleTouchInput=qa,t.Recognizer=Sa,t.AttrRecognizer=Ma,t.Tap=Ta,t.Pan=Da,t.Swipe=Ia,t.Pinch=Ba,t.Rotate=za,t.Press=Na,t.on=Qs,t.off=Js,t.each=js,t.merge=Xa,t.extend=Ya,t.bindFn=Ka,t.assign=fs,t.inherit=Ga,t.bindFn=Ka,t.prefixed=bs,t.toArray=ha,t.inArray=ia,t.uniqueArray=la,t.splitStr=Zs,t.boolOrFn=Rs,t.hasParent=Ws,t.addEventListeners=Qs,t.removeEventListeners=Js,t.defaults=fs({},Aa,{preset:Fa}),t}();function Za(t,e){var i=zo(t);if(On){var n=On(t);e&&(n=mr(n).call(n,(function(e){return Mn(t,e).enumerable}))),i.push.apply(i,n)}return i}function Qa(t){for(var e=1;e<arguments.length;e++){var i,n=null!=arguments[e]?arguments[e]:{};if(e%2)Wo(i=Za(Object(n),!0)).call(i,(function(e){jn(t,e,n[e])}));else if(Dn)In(t,Dn(n));else{var o;Wo(o=Za(Object(n))).call(o,(function(e){zn(t,e,Mn(n,e))}))}}return t}function Ja(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return th(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return th(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function th(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}var eh=ko(\"DELETE\");function ih(t){for(var e,i=arguments.length,n=new Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];return nh.apply(void 0,Eo(e=[{},t]).call(e,n))}function nh(){var t=oh.apply(void 0,arguments);return sh(t),t}function oh(){for(var t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];if(e.length<2)return e[0];var n;if(e.length>2)return oh.apply(void 0,Eo(n=[nh(e[0],e[1])]).call(n,wo(Oo(e).call(e,2))));var o,r=e[0],s=e[1],a=Ja(Co(s));try{for(a.s();!(o=a.n()).done;){var h=o.value;Object.prototype.propertyIsEnumerable.call(s,h)&&(s[h]===eh?delete r[h]:null===r[h]||null===s[h]||\"object\"!==go(r[h])||\"object\"!==go(s[h])||So(r[h])||So(s[h])?r[h]=rh(s[h]):r[h]=oh(r[h],s[h]))}}catch(t){a.e(t)}finally{a.f()}return r}function rh(t){return So(t)?Io(t).call(t,(function(t){return rh(t)})):\"object\"===go(t)&&null!==t?oh({},t):t}function sh(t){for(var e=0,i=zo(t);e<i.length;e++){var n=i[e];t[n]===eh?delete t[n]:\"object\"===go(t[n])&&null!==t[n]&&sh(t[n])}}function ah(){for(var t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];return hh(e.length?e:[No()])}function hh(t){var e=function(){for(var t=lh(),e=t(\" \"),i=t(\" \"),n=t(\" \"),o=0;o<arguments.length;o++)(e-=t(o<0||arguments.length<=o?void 0:arguments[o]))<0&&(e+=1),(i-=t(o<0||arguments.length<=o?void 0:arguments[o]))<0&&(i+=1),(n-=t(o<0||arguments.length<=o?void 0:arguments[o]))<0&&(n+=1);return[e,i,n]}(t),i=uo(e,3),n=i[0],o=i[1],r=i[2],s=1,a=function(){var t=2091639*n+2.3283064365386963e-10*s;return n=o,o=r,r=t-(s=0|t)};return a.uint32=function(){return 4294967296*a()},a.fract53=function(){return a()+11102230246251565e-32*(2097152*a()|0)},a.algorithm=\"Alea\",a.seed=t,a.version=\"0.9\",a}function lh(){var t=4022871197;return function(e){for(var i=e.toString(),n=0;n<i.length;n++){var o=.02519603282416938*(t+=i.charCodeAt(n));o-=t=o>>>0,t=(o*=t)>>>0,t+=4294967296*(o-=t)}return 2.3283064365386963e-10*(t>>>0)}}var dh=\"undefined\"!=typeof window?window.Hammer||$a:function(){return{on:t=function(){},off:t,destroy:t,emit:t,get:function(){return{set:t}}};var t};function ch(t){var e,i=this;this._cleanupQueue=[],this.active=!1,this._dom={container:t,overlay:document.createElement(\"div\")},this._dom.overlay.classList.add(\"vis-overlay\"),this._dom.container.appendChild(this._dom.overlay),this._cleanupQueue.push((function(){i._dom.overlay.parentNode.removeChild(i._dom.overlay)}));var n=dh(this._dom.overlay);n.on(\"tap\",Vt(e=this._onTapOverlay).call(e,this)),this._cleanupQueue.push((function(){n.destroy()}));var o=[\"tap\",\"doubletap\",\"press\",\"pinch\",\"pan\",\"panstart\",\"panmove\",\"panend\"];Wo(o).call(o,(function(t){n.on(t,(function(t){t.srcEvent.stopPropagation()}))})),document&&document.body&&(this._onClick=function(e){(function(t,e){for(;t;){if(t===e)return!0;t=t.parentNode}return!1})(e.target,t)||i.deactivate()},document.body.addEventListener(\"click\",this._onClick),this._cleanupQueue.push((function(){document.body.removeEventListener(\"click\",i._onClick)}))),this._escListener=function(t){(\"key\"in t?\"Escape\"===t.key:27===t.keyCode)&&i.deactivate()}}Zt(ch.prototype),ch.current=null,ch.prototype.destroy=function(){var t,e;this.deactivate();var i,n=Ja(Xo(t=er(e=this._cleanupQueue).call(e,0)).call(t));try{for(n.s();!(i=n.n()).done;){(0,i.value)()}}catch(t){n.e(t)}finally{n.f()}},ch.prototype.activate=function(){ch.current&&ch.current.deactivate(),ch.current=this,this.active=!0,this._dom.overlay.style.display=\"none\",this._dom.container.classList.add(\"vis-active\"),this.emit(\"change\"),this.emit(\"activate\"),document.body.addEventListener(\"keydown\",this._escListener)},ch.prototype.deactivate=function(){this.active=!1,this._dom.overlay.style.display=\"block\",this._dom.container.classList.remove(\"vis-active\"),document.body.removeEventListener(\"keydown\",this._escListener),this.emit(\"change\"),this.emit(\"deactivate\")},ch.prototype._onTapOverlay=function(t){this.activate(),t.srcEvent.stopPropagation()};var uh=/^\\/?Date\\((-?\\d+)/i,fh=/^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i,ph=/^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i,vh=/^rgb\\( *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *\\)$/i,gh=/^rgba\\( *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *([01]|0?\\.\\d+) *\\)$/i;function yh(t){return t instanceof Number||\"number\"==typeof t}function mh(t){if(t)for(;!0===t.hasChildNodes();){var e=t.firstChild;e&&(mh(e),t.removeChild(e))}}function bh(t){return t instanceof String||\"string\"==typeof t}function wh(t){return\"object\"===go(t)&&null!==t}function kh(t,e,i,n){var o=!1;!0===n&&(o=null===e[i]&&void 0!==t[i]),o?delete t[i]:t[i]=e[i]}function _h(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];for(var n in t)if(void 0!==e[n])if(null===e[n]||\"object\"!==go(e[n]))kh(t,e,n,i);else{var o=t[n],r=e[n];wh(o)&&wh(r)&&_h(o,r,i)}}var xh=At;function Eh(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(So(i))throw new TypeError(\"Arrays are not supported by deepExtend\");for(var o=0;o<t.length;o++){var r=t[o];if(Object.prototype.hasOwnProperty.call(i,r))if(i[r]&&i[r].constructor===Object)void 0===e[r]&&(e[r]={}),e[r].constructor===Object?Ch(e[r],i[r],!1,n):kh(e,i,r,n);else{if(So(i[r]))throw new TypeError(\"Arrays are not supported by deepExtend\");kh(e,i,r,n)}}return e}function Oh(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(So(i))throw new TypeError(\"Arrays are not supported by deepExtend\");for(var o in i)if(Object.prototype.hasOwnProperty.call(i,o)&&!dr(t).call(t,o))if(i[o]&&i[o].constructor===Object)void 0===e[o]&&(e[o]={}),e[o].constructor===Object?Ch(e[o],i[o]):kh(e,i,o,n);else if(So(i[o])){e[o]=[];for(var r=0;r<i[o].length;r++)e[o].push(i[o][r])}else kh(e,i,o,n);return e}function Ch(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];for(var o in e)if(Object.prototype.hasOwnProperty.call(e,o)||!0===i)if(\"object\"===go(e[o])&&null!==e[o]&&fr(e[o])===Object.prototype)void 0===t[o]?t[o]=Ch({},e[o],i):\"object\"===go(t[o])&&null!==t[o]&&fr(t[o])===Object.prototype?Ch(t[o],e[o],i):kh(t,e,o,n);else if(So(e[o])){var r;t[o]=Oo(r=e[o]).call(r)}else kh(t,e,o,n);return t}function Sh(t,e){var i;return Eo(i=[]).call(i,wo(t),[e])}function Th(t){return Oo(t).call(t)}function Mh(t){return t.getBoundingClientRect().left}function Ph(t){return t.getBoundingClientRect().top}function Dh(t,e){if(So(t))for(var i=t.length,n=0;n<i;n++)e(t[n],n,t);else for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&e(t[o],o,t)}var Ih=_r;function Bh(t,e,i,n){var o;t.addEventListener?(void 0===n&&(n=!1),\"mousewheel\"===e&&dr(o=navigator.userAgent).call(o,\"Firefox\")&&(e=\"DOMMouseScroll\"),t.addEventListener(e,i,n)):t.attachEvent(\"on\"+e,i)}function zh(t,e,i,n){var o;t.removeEventListener?(void 0===n&&(n=!1),\"mousewheel\"===e&&dr(o=navigator.userAgent).call(o,\"Firefox\")&&(e=\"DOMMouseScroll\"),t.removeEventListener(e,i,n)):t.detachEvent(\"on\"+e,i)}var Nh={asBoolean:function(t,e){return\"function\"==typeof t&&(t=t()),null!=t?0!=t:e||null},asNumber:function(t,e){return\"function\"==typeof t&&(t=t()),null!=t?Number(t)||e||null:e||null},asString:function(t,e){return\"function\"==typeof t&&(t=t()),null!=t?String(t):e||null},asSize:function(t,e){return\"function\"==typeof t&&(t=t()),bh(t)?t:yh(t)?t+\"px\":e||null},asElement:function(t,e){return\"function\"==typeof t&&(t=t()),t||e||null}};function Ah(t){var e;switch(t.length){case 3:case 4:return(e=ph.exec(t))?{r:Br(e[1]+e[1],16),g:Br(e[2]+e[2],16),b:Br(e[3]+e[3],16)}:null;case 6:case 7:return(e=fh.exec(t))?{r:Br(e[1],16),g:Br(e[2],16),b:Br(e[3],16)}:null;default:return null}}function Fh(t,e){if(dr(t).call(t,\"rgba\"))return t;if(dr(t).call(t,\"rgb\")){var i=t.substr(Hr(t).call(t,\"(\")+1).replace(\")\",\"\").split(\",\");return\"rgba(\"+i[0]+\",\"+i[1]+\",\"+i[2]+\",\"+e+\")\"}var n=Ah(t);return null==n?t:\"rgba(\"+n.r+\",\"+n.g+\",\"+n.b+\",\"+e+\")\"}function jh(t,e,i){var n;return\"#\"+Oo(n=((1<<24)+(t<<16)+(e<<8)+i).toString(16)).call(n,1)}function Rh(t,e){if(bh(t)){var i=t;if(Xh(i)){var n,o=Io(n=i.substr(4).substr(0,i.length-5).split(\",\")).call(n,(function(t){return Br(t)}));i=jh(o[0],o[1],o[2])}if(!0===Yh(i)){var r=Uh(i),s={h:r.h,s:.8*r.s,v:Math.min(1,1.02*r.v)},a={h:r.h,s:Math.min(1,1.25*r.s),v:.8*r.v},h=Vh(a.h,a.s,a.v),l=Vh(s.h,s.s,s.v);return{background:i,border:h,highlight:{background:l,border:h},hover:{background:l,border:h}}}return{background:i,border:i,highlight:{background:i,border:i},hover:{background:i,border:i}}}return e?{background:t.background||e.background,border:t.border||e.border,highlight:bh(t.highlight)?{border:t.highlight,background:t.highlight}:{background:t.highlight&&t.highlight.background||e.highlight.background,border:t.highlight&&t.highlight.border||e.highlight.border},hover:bh(t.hover)?{border:t.hover,background:t.hover}:{border:t.hover&&t.hover.border||e.hover.border,background:t.hover&&t.hover.background||e.hover.background}}:{background:t.background||void 0,border:t.border||void 0,highlight:bh(t.highlight)?{border:t.highlight,background:t.highlight}:{background:t.highlight&&t.highlight.background||void 0,border:t.highlight&&t.highlight.border||void 0},hover:bh(t.hover)?{border:t.hover,background:t.hover}:{border:t.hover&&t.hover.border||void 0,background:t.hover&&t.hover.background||void 0}}}function Lh(t,e,i){t/=255,e/=255,i/=255;var n=Math.min(t,Math.min(e,i)),o=Math.max(t,Math.max(e,i));return n===o?{h:0,s:0,v:n}:{h:60*((t===n?3:i===n?1:5)-(t===n?e-i:i===n?t-e:i-t)/(o-n))/360,s:(o-n)/o,v:o}}var Hh=function(t){var e,i={};return Wo(e=t.split(\";\")).call(e,(function(t){if(\"\"!=Ur(t).call(t)){var e,n,o=t.split(\":\"),r=Ur(e=o[0]).call(e),s=Ur(n=o[1]).call(n);i[r]=s}})),i},Wh=function(t){var e;return Io(e=zo(t)).call(e,(function(e){return e+\": \"+t[e]})).join(\"; \")};function qh(t,e,i){var n,o,r,s=Math.floor(6*t),a=6*t-s,h=i*(1-e),l=i*(1-a*e),d=i*(1-(1-a)*e);switch(s%6){case 0:n=i,o=d,r=h;break;case 1:n=l,o=i,r=h;break;case 2:n=h,o=i,r=d;break;case 3:n=h,o=l,r=i;break;case 4:n=d,o=h,r=i;break;case 5:n=i,o=h,r=l}return{r:Math.floor(255*n),g:Math.floor(255*o),b:Math.floor(255*r)}}function Vh(t,e,i){var n=qh(t,e,i);return jh(n.r,n.g,n.b)}function Uh(t){var e=Ah(t);if(!e)throw new TypeError(\"'\".concat(t,\"' is not a valid color.\"));return Lh(e.r,e.g,e.b)}function Yh(t){return/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(t)}function Xh(t){return vh.test(t)}function Gh(t){return gh.test(t)}function Kh(t){if(null===t||\"object\"!==go(t))return null;if(t instanceof Element)return t;var e=Gr(t);for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&\"object\"==go(t[i])&&(e[i]=Kh(t[i]));return e}function $h(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},o=function(t){return null!=t},r=function(t){return null!==t&&\"object\"===go(t)},s=function(t){for(var e in t)if(Object.prototype.hasOwnProperty.call(t,e))return!1;return!0};if(!r(t))throw new Error(\"Parameter mergeTarget must be an object\");if(!r(e))throw new Error(\"Parameter options must be an object\");if(!o(i))throw new Error(\"Parameter option must have a value\");if(!r(n))throw new Error(\"Parameter globalOptions must be an object\");var a=function(t,e,i){r(t[i])||(t[i]={});var n=e[i],o=t[i];for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(o[s]=n[s])},h=e[i],l=r(n)&&!s(n),d=l?n[i]:void 0,c=d?d.enabled:void 0;if(void 0!==h){if(\"boolean\"==typeof h)return r(t[i])||(t[i]={}),void(t[i].enabled=h);if(null===h&&!r(t[i])){if(!o(d))return;t[i]=Gr(d)}if(r(h)){var u=!0;void 0!==h.enabled?u=h.enabled:void 0!==c&&(u=d.enabled),a(t,e,i),t[i].enabled=u}}}var Zh={linear:function(t){return t},easeInQuad:function(t){return t*t},easeOutQuad:function(t){return t*(2-t)},easeInOutQuad:function(t){return t<.5?2*t*t:(4-2*t)*t-1},easeInCubic:function(t){return t*t*t},easeOutCubic:function(t){return--t*t*t+1},easeInOutCubic:function(t){return t<.5?4*t*t*t:(t-1)*(2*t-2)*(2*t-2)+1},easeInQuart:function(t){return t*t*t*t},easeOutQuart:function(t){return 1- --t*t*t*t},easeInOutQuart:function(t){return t<.5?8*t*t*t*t:1-8*--t*t*t*t},easeInQuint:function(t){return t*t*t*t*t},easeOutQuint:function(t){return 1+--t*t*t*t*t},easeInOutQuint:function(t){return t<.5?16*t*t*t*t*t:1+16*--t*t*t*t*t}};function Qh(t,e){var i;So(e)||(e=[e]);var n,o=Ja(t);try{for(o.s();!(n=o.n()).done;){var r=n.value;if(r){i=r[e[0]];for(var s=1;s<e.length;s++)i&&(i=i[e[s]]);if(void 0!==i)break}}}catch(t){o.e(t)}finally{o.f()}return i}var Jh={black:\"#000000\",navy:\"#000080\",darkblue:\"#00008B\",mediumblue:\"#0000CD\",blue:\"#0000FF\",darkgreen:\"#006400\",green:\"#008000\",teal:\"#008080\",darkcyan:\"#008B8B\",deepskyblue:\"#00BFFF\",darkturquoise:\"#00CED1\",mediumspringgreen:\"#00FA9A\",lime:\"#00FF00\",springgreen:\"#00FF7F\",aqua:\"#00FFFF\",cyan:\"#00FFFF\",midnightblue:\"#191970\",dodgerblue:\"#1E90FF\",lightseagreen:\"#20B2AA\",forestgreen:\"#228B22\",seagreen:\"#2E8B57\",darkslategray:\"#2F4F4F\",limegreen:\"#32CD32\",mediumseagreen:\"#3CB371\",turquoise:\"#40E0D0\",royalblue:\"#4169E1\",steelblue:\"#4682B4\",darkslateblue:\"#483D8B\",mediumturquoise:\"#48D1CC\",indigo:\"#4B0082\",darkolivegreen:\"#556B2F\",cadetblue:\"#5F9EA0\",cornflowerblue:\"#6495ED\",mediumaquamarine:\"#66CDAA\",dimgray:\"#696969\",slateblue:\"#6A5ACD\",olivedrab:\"#6B8E23\",slategray:\"#708090\",lightslategray:\"#778899\",mediumslateblue:\"#7B68EE\",lawngreen:\"#7CFC00\",chartreuse:\"#7FFF00\",aquamarine:\"#7FFFD4\",maroon:\"#800000\",purple:\"#800080\",olive:\"#808000\",gray:\"#808080\",skyblue:\"#87CEEB\",lightskyblue:\"#87CEFA\",blueviolet:\"#8A2BE2\",darkred:\"#8B0000\",darkmagenta:\"#8B008B\",saddlebrown:\"#8B4513\",darkseagreen:\"#8FBC8F\",lightgreen:\"#90EE90\",mediumpurple:\"#9370D8\",darkviolet:\"#9400D3\",palegreen:\"#98FB98\",darkorchid:\"#9932CC\",yellowgreen:\"#9ACD32\",sienna:\"#A0522D\",brown:\"#A52A2A\",darkgray:\"#A9A9A9\",lightblue:\"#ADD8E6\",greenyellow:\"#ADFF2F\",paleturquoise:\"#AFEEEE\",lightsteelblue:\"#B0C4DE\",powderblue:\"#B0E0E6\",firebrick:\"#B22222\",darkgoldenrod:\"#B8860B\",mediumorchid:\"#BA55D3\",rosybrown:\"#BC8F8F\",darkkhaki:\"#BDB76B\",silver:\"#C0C0C0\",mediumvioletred:\"#C71585\",indianred:\"#CD5C5C\",peru:\"#CD853F\",chocolate:\"#D2691E\",tan:\"#D2B48C\",lightgrey:\"#D3D3D3\",palevioletred:\"#D87093\",thistle:\"#D8BFD8\",orchid:\"#DA70D6\",goldenrod:\"#DAA520\",crimson:\"#DC143C\",gainsboro:\"#DCDCDC\",plum:\"#DDA0DD\",burlywood:\"#DEB887\",lightcyan:\"#E0FFFF\",lavender:\"#E6E6FA\",darksalmon:\"#E9967A\",violet:\"#EE82EE\",palegoldenrod:\"#EEE8AA\",lightcoral:\"#F08080\",khaki:\"#F0E68C\",aliceblue:\"#F0F8FF\",honeydew:\"#F0FFF0\",azure:\"#F0FFFF\",sandybrown:\"#F4A460\",wheat:\"#F5DEB3\",beige:\"#F5F5DC\",whitesmoke:\"#F5F5F5\",mintcream:\"#F5FFFA\",ghostwhite:\"#F8F8FF\",salmon:\"#FA8072\",antiquewhite:\"#FAEBD7\",linen:\"#FAF0E6\",lightgoldenrodyellow:\"#FAFAD2\",oldlace:\"#FDF5E6\",red:\"#FF0000\",fuchsia:\"#FF00FF\",magenta:\"#FF00FF\",deeppink:\"#FF1493\",orangered:\"#FF4500\",tomato:\"#FF6347\",hotpink:\"#FF69B4\",coral:\"#FF7F50\",darkorange:\"#FF8C00\",lightsalmon:\"#FFA07A\",orange:\"#FFA500\",lightpink:\"#FFB6C1\",pink:\"#FFC0CB\",gold:\"#FFD700\",peachpuff:\"#FFDAB9\",navajowhite:\"#FFDEAD\",moccasin:\"#FFE4B5\",bisque:\"#FFE4C4\",mistyrose:\"#FFE4E1\",blanchedalmond:\"#FFEBCD\",papayawhip:\"#FFEFD5\",lavenderblush:\"#FFF0F5\",seashell:\"#FFF5EE\",cornsilk:\"#FFF8DC\",lemonchiffon:\"#FFFACD\",floralwhite:\"#FFFAF0\",snow:\"#FFFAFA\",yellow:\"#FFFF00\",lightyellow:\"#FFFFE0\",ivory:\"#FFFFF0\",white:\"#FFFFFF\"},tl=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;Nn(this,t),this.pixelRatio=e,this.generated=!1,this.centerCoordinates={x:144.5,y:144.5},this.r=289*.49,this.color={r:255,g:255,b:255,a:1},this.hueCircle=void 0,this.initialColor={r:255,g:255,b:255,a:1},this.previousColor=void 0,this.applied=!1,this.updateCallback=function(){},this.closeCallback=function(){},this._create()}return Fn(t,[{key:\"insertTo\",value:function(t){void 0!==this.hammer&&(this.hammer.destroy(),this.hammer=void 0),this.container=t,this.container.appendChild(this.frame),this._bindHammer(),this._setSize()}},{key:\"setUpdateCallback\",value:function(t){if(\"function\"!=typeof t)throw new Error(\"Function attempted to set as colorPicker update callback is not a function.\");this.updateCallback=t}},{key:\"setCloseCallback\",value:function(t){if(\"function\"!=typeof t)throw new Error(\"Function attempted to set as colorPicker closing callback is not a function.\");this.closeCallback=t}},{key:\"_isColorString\",value:function(t){if(\"string\"==typeof t)return Jh[t]}},{key:\"setColor\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(\"none\"!==t){var i,n=this._isColorString(t);if(void 0!==n&&(t=n),!0===bh(t)){if(!0===Xh(t)){var o=t.substr(4).substr(0,t.length-5).split(\",\");i={r:o[0],g:o[1],b:o[2],a:1}}else if(!0===Gh(t)){var r=t.substr(5).substr(0,t.length-6).split(\",\");i={r:r[0],g:r[1],b:r[2],a:r[3]}}else if(!0===Yh(t)){var s=Ah(t);i={r:s.r,g:s.g,b:s.b,a:1}}}else if(t instanceof Object&&void 0!==t.r&&void 0!==t.g&&void 0!==t.b){var a=void 0!==t.a?t.a:\"1.0\";i={r:t.r,g:t.g,b:t.b,a:a}}if(void 0===i)throw new Error(\"Unknown color passed to the colorPicker. Supported are strings: rgb, hex, rgba. Object: rgb ({r:r,g:g,b:b,[a:a]}). Supplied: \"+es(t));this._setColor(i,e)}}},{key:\"show\",value:function(){void 0!==this.closeCallback&&(this.closeCallback(),this.closeCallback=void 0),this.applied=!1,this.frame.style.display=\"block\",this._generateHueCircle()}},{key:\"_hide\",value:function(){var t=this,e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];!0===e&&(this.previousColor=At({},this.color)),!0===this.applied&&this.updateCallback(this.initialColor),this.frame.style.display=\"none\",rs((function(){void 0!==t.closeCallback&&(t.closeCallback(),t.closeCallback=void 0)}),0)}},{key:\"_save\",value:function(){this.updateCallback(this.color),this.applied=!1,this._hide()}},{key:\"_apply\",value:function(){this.applied=!0,this.updateCallback(this.color),this._updatePicker(this.color)}},{key:\"_loadLast\",value:function(){void 0!==this.previousColor?this.setColor(this.previousColor,!1):alert(\"There is no last color to load...\")}},{key:\"_setColor\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];!0===e&&(this.initialColor=At({},t)),this.color=t;var i=Lh(t.r,t.g,t.b),n=2*Math.PI,o=this.r*i.s,r=this.centerCoordinates.x+o*Math.sin(n*i.h),s=this.centerCoordinates.y+o*Math.cos(n*i.h);this.colorPickerSelector.style.left=r-.5*this.colorPickerSelector.clientWidth+\"px\",this.colorPickerSelector.style.top=s-.5*this.colorPickerSelector.clientHeight+\"px\",this._updatePicker(t)}},{key:\"_setOpacity\",value:function(t){this.color.a=t/100,this._updatePicker(this.color)}},{key:\"_setBrightness\",value:function(t){var e=Lh(this.color.r,this.color.g,this.color.b);e.v=t/100;var i=qh(e.h,e.s,e.v);i.a=this.color.a,this.color=i,this._updatePicker()}},{key:\"_updatePicker\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.color,e=Lh(t.r,t.g,t.b),i=this.colorPickerCanvas.getContext(\"2d\");void 0===this.pixelRation&&(this.pixelRatio=(window.devicePixelRatio||1)/(i.webkitBackingStorePixelRatio||i.mozBackingStorePixelRatio||i.msBackingStorePixelRatio||i.oBackingStorePixelRatio||i.backingStorePixelRatio||1)),i.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0);var n=this.colorPickerCanvas.clientWidth,o=this.colorPickerCanvas.clientHeight;i.clearRect(0,0,n,o),i.putImageData(this.hueCircle,0,0),i.fillStyle=\"rgba(0,0,0,\"+(1-e.v)+\")\",i.circle(this.centerCoordinates.x,this.centerCoordinates.y,this.r),hs(i).call(i),this.brightnessRange.value=100*e.v,this.opacityRange.value=100*t.a,this.initialColorDiv.style.backgroundColor=\"rgba(\"+this.initialColor.r+\",\"+this.initialColor.g+\",\"+this.initialColor.b+\",\"+this.initialColor.a+\")\",this.newColorDiv.style.backgroundColor=\"rgba(\"+this.color.r+\",\"+this.color.g+\",\"+this.color.b+\",\"+this.color.a+\")\"}},{key:\"_setSize\",value:function(){this.colorPickerCanvas.style.width=\"100%\",this.colorPickerCanvas.style.height=\"100%\",this.colorPickerCanvas.width=289*this.pixelRatio,this.colorPickerCanvas.height=289*this.pixelRatio}},{key:\"_create\",value:function(){var t,e,i,n;if(this.frame=document.createElement(\"div\"),this.frame.className=\"vis-color-picker\",this.colorPickerDiv=document.createElement(\"div\"),this.colorPickerSelector=document.createElement(\"div\"),this.colorPickerSelector.className=\"vis-selector\",this.colorPickerDiv.appendChild(this.colorPickerSelector),this.colorPickerCanvas=document.createElement(\"canvas\"),this.colorPickerDiv.appendChild(this.colorPickerCanvas),this.colorPickerCanvas.getContext){var o=this.colorPickerCanvas.getContext(\"2d\");this.pixelRatio=(window.devicePixelRatio||1)/(o.webkitBackingStorePixelRatio||o.mozBackingStorePixelRatio||o.msBackingStorePixelRatio||o.oBackingStorePixelRatio||o.backingStorePixelRatio||1),this.colorPickerCanvas.getContext(\"2d\").setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0)}else{var r=document.createElement(\"DIV\");r.style.color=\"red\",r.style.fontWeight=\"bold\",r.style.padding=\"10px\",r.innerText=\"Error: your browser does not support HTML canvas\",this.colorPickerCanvas.appendChild(r)}this.colorPickerDiv.className=\"vis-color\",this.opacityDiv=document.createElement(\"div\"),this.opacityDiv.className=\"vis-opacity\",this.brightnessDiv=document.createElement(\"div\"),this.brightnessDiv.className=\"vis-brightness\",this.arrowDiv=document.createElement(\"div\"),this.arrowDiv.className=\"vis-arrow\",this.opacityRange=document.createElement(\"input\");try{this.opacityRange.type=\"range\",this.opacityRange.min=\"0\",this.opacityRange.max=\"100\"}catch(t){}this.opacityRange.value=\"100\",this.opacityRange.className=\"vis-range\",this.brightnessRange=document.createElement(\"input\");try{this.brightnessRange.type=\"range\",this.brightnessRange.min=\"0\",this.brightnessRange.max=\"100\"}catch(t){}this.brightnessRange.value=\"100\",this.brightnessRange.className=\"vis-range\",this.opacityDiv.appendChild(this.opacityRange),this.brightnessDiv.appendChild(this.brightnessRange);var s=this;this.opacityRange.onchange=function(){s._setOpacity(this.value)},this.opacityRange.oninput=function(){s._setOpacity(this.value)},this.brightnessRange.onchange=function(){s._setBrightness(this.value)},this.brightnessRange.oninput=function(){s._setBrightness(this.value)},this.brightnessLabel=document.createElement(\"div\"),this.brightnessLabel.className=\"vis-label vis-brightness\",this.brightnessLabel.innerText=\"brightness:\",this.opacityLabel=document.createElement(\"div\"),this.opacityLabel.className=\"vis-label vis-opacity\",this.opacityLabel.innerText=\"opacity:\",this.newColorDiv=document.createElement(\"div\"),this.newColorDiv.className=\"vis-new-color\",this.newColorDiv.innerText=\"new\",this.initialColorDiv=document.createElement(\"div\"),this.initialColorDiv.className=\"vis-initial-color\",this.initialColorDiv.innerText=\"initial\",this.cancelButton=document.createElement(\"div\"),this.cancelButton.className=\"vis-button vis-cancel\",this.cancelButton.innerText=\"cancel\",this.cancelButton.onclick=Vt(t=this._hide).call(t,this,!1),this.applyButton=document.createElement(\"div\"),this.applyButton.className=\"vis-button vis-apply\",this.applyButton.innerText=\"apply\",this.applyButton.onclick=Vt(e=this._apply).call(e,this),this.saveButton=document.createElement(\"div\"),this.saveButton.className=\"vis-button vis-save\",this.saveButton.innerText=\"save\",this.saveButton.onclick=Vt(i=this._save).call(i,this),this.loadButton=document.createElement(\"div\"),this.loadButton.className=\"vis-button vis-load\",this.loadButton.innerText=\"load last\",this.loadButton.onclick=Vt(n=this._loadLast).call(n,this),this.frame.appendChild(this.colorPickerDiv),this.frame.appendChild(this.arrowDiv),this.frame.appendChild(this.brightnessLabel),this.frame.appendChild(this.brightnessDiv),this.frame.appendChild(this.opacityLabel),this.frame.appendChild(this.opacityDiv),this.frame.appendChild(this.newColorDiv),this.frame.appendChild(this.initialColorDiv),this.frame.appendChild(this.cancelButton),this.frame.appendChild(this.applyButton),this.frame.appendChild(this.saveButton),this.frame.appendChild(this.loadButton)}},{key:\"_bindHammer\",value:function(){var t=this;this.drag={},this.pinch={},this.hammer=new dh(this.colorPickerCanvas),this.hammer.get(\"pinch\").set({enable:!0}),this.hammer.on(\"hammer.input\",(function(e){e.isFirst&&t._moveSelector(e)})),this.hammer.on(\"tap\",(function(e){t._moveSelector(e)})),this.hammer.on(\"panstart\",(function(e){t._moveSelector(e)})),this.hammer.on(\"panmove\",(function(e){t._moveSelector(e)})),this.hammer.on(\"panend\",(function(e){t._moveSelector(e)}))}},{key:\"_generateHueCircle\",value:function(){if(!1===this.generated){var t=this.colorPickerCanvas.getContext(\"2d\");void 0===this.pixelRation&&(this.pixelRatio=(window.devicePixelRatio||1)/(t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1)),t.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0);var e,i,n,o,r=this.colorPickerCanvas.clientWidth,s=this.colorPickerCanvas.clientHeight;t.clearRect(0,0,r,s),this.centerCoordinates={x:.5*r,y:.5*s},this.r=.49*r;var a,h=2*Math.PI/360,l=1/this.r;for(n=0;n<360;n++)for(o=0;o<this.r;o++)e=this.centerCoordinates.x+o*Math.sin(h*n),i=this.centerCoordinates.y+o*Math.cos(h*n),a=qh(.002777777777777778*n,o*l,1),t.fillStyle=\"rgb(\"+a.r+\",\"+a.g+\",\"+a.b+\")\",t.fillRect(e-.5,i-.5,2,2);t.strokeStyle=\"rgba(0,0,0,1)\",t.circle(this.centerCoordinates.x,this.centerCoordinates.y,this.r),t.stroke(),this.hueCircle=t.getImageData(0,0,r,s)}this.generated=!0}},{key:\"_moveSelector\",value:function(t){var e=this.colorPickerDiv.getBoundingClientRect(),i=t.center.x-e.left,n=t.center.y-e.top,o=.5*this.colorPickerDiv.clientHeight,r=.5*this.colorPickerDiv.clientWidth,s=i-r,a=n-o,h=Math.atan2(s,a),l=.98*Math.min(Math.sqrt(s*s+a*a),r),d=Math.cos(h)*l+o,c=Math.sin(h)*l+r;this.colorPickerSelector.style.top=d-.5*this.colorPickerSelector.clientHeight+\"px\",this.colorPickerSelector.style.left=c-.5*this.colorPickerSelector.clientWidth+\"px\";var u=h/(2*Math.PI);u=u<0?u+1:u;var f=l/this.r,p=Lh(this.color.r,this.color.g,this.color.b);p.h=u,p.s=f;var v=qh(p.h,p.s,p.v);v.a=this.color.a,this.color=v,this.initialColorDiv.style.backgroundColor=\"rgba(\"+this.initialColor.r+\",\"+this.initialColor.g+\",\"+this.initialColor.b+\",\"+this.initialColor.a+\")\",this.newColorDiv.style.backgroundColor=\"rgba(\"+this.color.r+\",\"+this.color.g+\",\"+this.color.b+\",\"+this.color.a+\")\"}}]),t}();function el(){for(var t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];if(e.length<1)throw new TypeError(\"Invalid arguments.\");if(1===e.length)return document.createTextNode(e[0]);var n=document.createElement(e[0]);return n.appendChild(el.apply(void 0,wo(Oo(e).call(e,1)))),n}var il,nl=function(){function t(e,i,n){var o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1,r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:function(){return!1};Nn(this,t),this.parent=e,this.changedOptions=[],this.container=i,this.allowCreation=!1,this.hideOption=r,this.options={},this.initialized=!1,this.popupCounter=0,this.defaultOptions={enabled:!1,filter:!0,container:void 0,showButton:!0},At(this.options,this.defaultOptions),this.configureOptions=n,this.moduleOptions={},this.domElements=[],this.popupDiv={},this.popupLimit=5,this.popupHistory={},this.colorPicker=new tl(o),this.wrapper=void 0}return Fn(t,[{key:\"setOptions\",value:function(t){if(void 0!==t){this.popupHistory={},this._removePopup();var e=!0;if(\"string\"==typeof t)this.options.filter=t;else if(So(t))this.options.filter=t.join();else if(\"object\"===go(t)){if(null==t)throw new TypeError(\"options cannot be null\");void 0!==t.container&&(this.options.container=t.container),void 0!==mr(t)&&(this.options.filter=mr(t)),void 0!==t.showButton&&(this.options.showButton=t.showButton),void 0!==t.enabled&&(e=t.enabled)}else\"boolean\"==typeof t?(this.options.filter=!0,e=t):\"function\"==typeof t&&(this.options.filter=t,e=!0);!1===mr(this.options)&&(e=!1),this.options.enabled=e}this._clean()}},{key:\"setModuleOptions\",value:function(t){this.moduleOptions=t,!0===this.options.enabled&&(this._clean(),void 0!==this.options.container&&(this.container=this.options.container),this._create())}},{key:\"_create\",value:function(){this._clean(),this.changedOptions=[];var t=mr(this.options),e=0,i=!1;for(var n in this.configureOptions)Object.prototype.hasOwnProperty.call(this.configureOptions,n)&&(this.allowCreation=!1,i=!1,\"function\"==typeof t?i=(i=t(n,[]))||this._handleObject(this.configureOptions[n],[n],!0):!0!==t&&-1===Hr(t).call(t,n)||(i=!0),!1!==i&&(this.allowCreation=!0,e>0&&this._makeItem([]),this._makeHeader(n),this._handleObject(this.configureOptions[n],[n])),e++);this._makeButton(),this._push()}},{key:\"_push\",value:function(){this.wrapper=document.createElement(\"div\"),this.wrapper.className=\"vis-configuration-wrapper\",this.container.appendChild(this.wrapper);for(var t=0;t<this.domElements.length;t++)this.wrapper.appendChild(this.domElements[t]);this._showPopupIfNeeded()}},{key:\"_clean\",value:function(){for(var t=0;t<this.domElements.length;t++)this.wrapper.removeChild(this.domElements[t]);void 0!==this.wrapper&&(this.container.removeChild(this.wrapper),this.wrapper=void 0),this.domElements=[],this._removePopup()}},{key:\"_getValue\",value:function(t){for(var e=this.moduleOptions,i=0;i<t.length;i++){if(void 0===e[t[i]]){e=void 0;break}e=e[t[i]]}return e}},{key:\"_makeItem\",value:function(t){if(!0===this.allowCreation){var e=document.createElement(\"div\");e.className=\"vis-configuration vis-config-item vis-config-s\"+t.length;for(var i=arguments.length,n=new Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];return Wo(n).call(n,(function(t){e.appendChild(t)})),this.domElements.push(e),this.domElements.length}return 0}},{key:\"_makeHeader\",value:function(t){var e=document.createElement(\"div\");e.className=\"vis-configuration vis-config-header\",e.innerText=t,this._makeItem([],e)}},{key:\"_makeLabel\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=document.createElement(\"div\");if(n.className=\"vis-configuration vis-config-label vis-config-s\"+e.length,!0===i){for(;n.firstChild;)n.removeChild(n.firstChild);n.appendChild(el(\"i\",\"b\",t))}else n.innerText=t+\":\";return n}},{key:\"_makeDropdown\",value:function(t,e,i){var n=document.createElement(\"select\");n.className=\"vis-configuration vis-config-select\";var o=0;void 0!==e&&-1!==Hr(t).call(t,e)&&(o=Hr(t).call(t,e));for(var r=0;r<t.length;r++){var s=document.createElement(\"option\");s.value=t[r],r===o&&(s.selected=\"selected\"),s.innerText=t[r],n.appendChild(s)}var a=this;n.onchange=function(){a._update(this.value,i)};var h=this._makeLabel(i[i.length-1],i);this._makeItem(i,h,n)}},{key:\"_makeRange\",value:function(t,e,i){var n=t[0],o=t[1],r=t[2],s=t[3],a=document.createElement(\"input\");a.className=\"vis-configuration vis-config-range\";try{a.type=\"range\",a.min=o,a.max=r}catch(t){}a.step=s;var h=\"\",l=0;if(void 0!==e){var d=1.2;e<0&&e*d<o?(a.min=Math.ceil(e*d),l=a.min,h=\"range increased\"):e/d<o&&(a.min=Math.ceil(e/d),l=a.min,h=\"range increased\"),e*d>r&&1!==r&&(a.max=Math.ceil(e*d),l=a.max,h=\"range increased\"),a.value=e}else a.value=n;var c=document.createElement(\"input\");c.className=\"vis-configuration vis-config-rangeinput\",c.value=a.value;var u=this;a.onchange=function(){c.value=this.value,u._update(Number(this.value),i)},a.oninput=function(){c.value=this.value};var f=this._makeLabel(i[i.length-1],i),p=this._makeItem(i,f,a,c);\"\"!==h&&this.popupHistory[p]!==l&&(this.popupHistory[p]=l,this._setupPopup(h,p))}},{key:\"_makeButton\",value:function(){var t=this;if(!0===this.options.showButton){var e=document.createElement(\"div\");e.className=\"vis-configuration vis-config-button\",e.innerText=\"generate options\",e.onclick=function(){t._printOptions()},e.onmouseover=function(){e.className=\"vis-configuration vis-config-button hover\"},e.onmouseout=function(){e.className=\"vis-configuration vis-config-button\"},this.optionsContainer=document.createElement(\"div\"),this.optionsContainer.className=\"vis-configuration vis-config-option-container\",this.domElements.push(this.optionsContainer),this.domElements.push(e)}}},{key:\"_setupPopup\",value:function(t,e){var i=this;if(!0===this.initialized&&!0===this.allowCreation&&this.popupCounter<this.popupLimit){var n=document.createElement(\"div\");n.id=\"vis-configuration-popup\",n.className=\"vis-configuration-popup\",n.innerText=t,n.onclick=function(){i._removePopup()},this.popupCounter+=1,this.popupDiv={html:n,index:e}}}},{key:\"_removePopup\",value:function(){void 0!==this.popupDiv.html&&(this.popupDiv.html.parentNode.removeChild(this.popupDiv.html),clearTimeout(this.popupDiv.hideTimeout),clearTimeout(this.popupDiv.deleteTimeout),this.popupDiv={})}},{key:\"_showPopupIfNeeded\",value:function(){var t=this;if(void 0!==this.popupDiv.html){var e=this.domElements[this.popupDiv.index].getBoundingClientRect();this.popupDiv.html.style.left=e.left+\"px\",this.popupDiv.html.style.top=e.top-30+\"px\",document.body.appendChild(this.popupDiv.html),this.popupDiv.hideTimeout=rs((function(){t.popupDiv.html.style.opacity=0}),1500),this.popupDiv.deleteTimeout=rs((function(){t._removePopup()}),1800)}}},{key:\"_makeCheckbox\",value:function(t,e,i){var n=document.createElement(\"input\");n.type=\"checkbox\",n.className=\"vis-configuration vis-config-checkbox\",n.checked=t,void 0!==e&&(n.checked=e,e!==t&&(\"object\"===go(t)?e!==t.enabled&&this.changedOptions.push({path:i,value:e}):this.changedOptions.push({path:i,value:e})));var o=this;n.onchange=function(){o._update(this.checked,i)};var r=this._makeLabel(i[i.length-1],i);this._makeItem(i,r,n)}},{key:\"_makeTextInput\",value:function(t,e,i){var n=document.createElement(\"input\");n.type=\"text\",n.className=\"vis-configuration vis-config-text\",n.value=e,e!==t&&this.changedOptions.push({path:i,value:e});var o=this;n.onchange=function(){o._update(this.value,i)};var r=this._makeLabel(i[i.length-1],i);this._makeItem(i,r,n)}},{key:\"_makeColorField\",value:function(t,e,i){var n=this,o=t[1],r=document.createElement(\"div\");\"none\"!==(e=void 0===e?o:e)?(r.className=\"vis-configuration vis-config-colorBlock\",r.style.backgroundColor=e):r.className=\"vis-configuration vis-config-colorBlock none\",e=void 0===e?o:e,r.onclick=function(){n._showColorPicker(e,r,i)};var s=this._makeLabel(i[i.length-1],i);this._makeItem(i,s,r)}},{key:\"_showColorPicker\",value:function(t,e,i){var n=this;e.onclick=function(){},this.colorPicker.insertTo(e),this.colorPicker.show(),this.colorPicker.setColor(t),this.colorPicker.setUpdateCallback((function(t){var o=\"rgba(\"+t.r+\",\"+t.g+\",\"+t.b+\",\"+t.a+\")\";e.style.backgroundColor=o,n._update(o,i)})),this.colorPicker.setCloseCallback((function(){e.onclick=function(){n._showColorPicker(t,e,i)}}))}},{key:\"_handleObject\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=!1,o=mr(this.options),r=!1;for(var s in t)if(Object.prototype.hasOwnProperty.call(t,s)){n=!0;var a=t[s],h=Sh(e,s);if(\"function\"==typeof o&&!1===(n=o(s,e))&&!So(a)&&\"string\"!=typeof a&&\"boolean\"!=typeof a&&a instanceof Object&&(this.allowCreation=!1,n=this._handleObject(a,h,!0),this.allowCreation=!1===i),!1!==n){r=!0;var l=this._getValue(h);if(So(a))this._handleArray(a,l,h);else if(\"string\"==typeof a)this._makeTextInput(a,l,h);else if(\"boolean\"==typeof a)this._makeCheckbox(a,l,h);else if(a instanceof Object){if(!this.hideOption(e,s,this.moduleOptions))if(void 0!==a.enabled){var d=Sh(h,\"enabled\"),c=this._getValue(d);if(!0===c){var u=this._makeLabel(s,h,!0);this._makeItem(h,u),r=this._handleObject(a,h)||r}else this._makeCheckbox(a,c,h)}else{var f=this._makeLabel(s,h,!0);this._makeItem(h,f),r=this._handleObject(a,h)||r}}else console.error(\"dont know how to handle\",a,s,h)}}return r}},{key:\"_handleArray\",value:function(t,e,i){\"string\"==typeof t[0]&&\"color\"===t[0]?(this._makeColorField(t,e,i),t[1]!==e&&this.changedOptions.push({path:i,value:e})):\"string\"==typeof t[0]?(this._makeDropdown(t,e,i),t[0]!==e&&this.changedOptions.push({path:i,value:e})):\"number\"==typeof t[0]&&(this._makeRange(t,e,i),t[0]!==e&&this.changedOptions.push({path:i,value:Number(e)}))}},{key:\"_update\",value:function(t,e){var i=this._constructOptions(t,e);this.parent.body&&this.parent.body.emitter&&this.parent.body.emitter.emit&&this.parent.body.emitter.emit(\"configChange\",i),this.initialized=!0,this.parent.setOptions(i)}},{key:\"_constructOptions\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=i;t=\"false\"!==(t=\"true\"===t||t)&&t;for(var o=0;o<e.length;o++)\"global\"!==e[o]&&(void 0===n[e[o]]&&(n[e[o]]={}),o!==e.length-1?n=n[e[o]]:n[e[o]]=t);return i}},{key:\"_printOptions\",value:function(){for(var t=this.getOptions();this.optionsContainer.firstChild;)this.optionsContainer.removeChild(this.optionsContainer.firstChild);this.optionsContainer.appendChild(el(\"pre\",\"const options = \"+es(t,null,2)))}},{key:\"getOptions\",value:function(){for(var t={},e=0;e<this.changedOptions.length;e++)this._constructOptions(this.changedOptions[e].value,this.changedOptions[e].path,t);return t}}]),t}(),ol=!1,rl=\"background: #FFeeee; color: #dd0000\",sl=ch,al=tl,hl=nl,ll=dh,dl=function(){function t(e,i){Nn(this,t),this.container=e,this.overflowMethod=i||\"cap\",this.x=0,this.y=0,this.padding=5,this.hidden=!1,this.frame=document.createElement(\"div\"),this.frame.className=\"vis-tooltip\",this.container.appendChild(this.frame)}return Fn(t,[{key:\"setPosition\",value:function(t,e){this.x=Br(t),this.y=Br(e)}},{key:\"setText\",value:function(t){if(t instanceof Element){for(;this.frame.firstChild;)this.frame.removeChild(this.frame.firstChild);this.frame.appendChild(t)}else this.frame.innerText=t}},{key:\"show\",value:function(t){if(void 0===t&&(t=!0),!0===t){var e=this.frame.clientHeight,i=this.frame.clientWidth,n=this.frame.parentNode.clientHeight,o=this.frame.parentNode.clientWidth,r=0,s=0;if(\"flip\"==this.overflowMethod){var a=!1,h=!0;this.y-e<this.padding&&(h=!1),this.x+i>o-this.padding&&(a=!0),r=a?this.x-i:this.x,s=h?this.y-e:this.y}else(s=this.y-e)+e+this.padding>n&&(s=n-e-this.padding),s<this.padding&&(s=this.padding),(r=this.x)+i+this.padding>o&&(r=o-i-this.padding),r<this.padding&&(r=this.padding);this.frame.style.left=r+\"px\",this.frame.style.top=s+\"px\",this.frame.style.visibility=\"visible\",this.hidden=!1}else this.hide()}},{key:\"hide\",value:function(){this.hidden=!0,this.frame.style.left=\"0\",this.frame.style.top=\"0\",this.frame.style.visibility=\"hidden\"}},{key:\"destroy\",value:function(){this.frame.parentNode.removeChild(this.frame)}}]),t}(),cl=rl,ul=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"validate\",value:function(e,i,n){ol=!1,il=i;var o=i;return void 0!==n&&(o=i[n]),t.parse(e,o,[]),ol}},{key:\"parse\",value:function(e,i,n){for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&t.check(o,e,i,n)}},{key:\"check\",value:function(e,i,n,o){if(void 0!==n[e]||void 0!==n.__any__){var r=e,s=!0;void 0===n[e]&&void 0!==n.__any__&&(r=\"__any__\",s=\"object\"===t.getType(i[e]));var a=n[r];s&&void 0!==a.__type__&&(a=a.__type__),t.checkFields(e,i,n,r,a,o)}else t.getSuggestion(e,n,o)}},{key:\"checkFields\",value:function(e,i,n,o,r,s){var a=function(i){console.error(\"%c\"+i+t.printLocation(s,e),rl)},h=t.getType(i[e]),l=r[h];void 0!==l?\"array\"===t.getType(l)&&-1===Hr(l).call(l,i[e])?(a('Invalid option detected in \"'+e+'\". Allowed values are:'+t.print(l)+' not \"'+i[e]+'\". '),ol=!0):\"object\"===h&&\"__any__\"!==o&&(s=Sh(s,e),t.parse(i[e],n[o],s)):void 0===r.any&&(a('Invalid type received for \"'+e+'\". Expected: '+t.print(zo(r))+\". Received [\"+h+'] \"'+i[e]+'\"'),ol=!0)}},{key:\"getType\",value:function(t){var e=go(t);return\"object\"===e?null===t?\"null\":t instanceof Boolean?\"boolean\":t instanceof Number?\"number\":t instanceof String?\"string\":So(t)?\"array\":t instanceof Date?\"date\":void 0!==t.nodeType?\"dom\":!0===t._isAMomentObject?\"moment\":\"object\":\"number\"===e?\"number\":\"boolean\"===e?\"boolean\":\"string\"===e?\"string\":void 0===e?\"undefined\":e}},{key:\"getSuggestion\",value:function(e,i,n){var o,r=t.findInOptions(e,i,n,!1),s=t.findInOptions(e,il,[],!0);o=void 0!==r.indexMatch?\" in \"+t.printLocation(r.path,e,\"\")+'Perhaps it was incomplete? Did you mean: \"'+r.indexMatch+'\"?\\n\\n':s.distance<=4&&r.distance>s.distance?\" in \"+t.printLocation(r.path,e,\"\")+\"Perhaps it was misplaced? Matching option found at: \"+t.printLocation(s.path,s.closestMatch,\"\"):r.distance<=8?'. Did you mean \"'+r.closestMatch+'\"?'+t.printLocation(r.path,e):\". Did you mean one of these: \"+t.print(zo(i))+t.printLocation(n,e),console.error('%cUnknown option detected: \"'+e+'\"'+o,rl),ol=!0}},{key:\"findInOptions\",value:function(e,i,n){var o=arguments.length>3&&void 0!==arguments[3]&&arguments[3],r=1e9,s=\"\",a=[],h=e.toLowerCase(),l=void 0;for(var d in i){var c=void 0;if(void 0!==i[d].__type__&&!0===o){var u=t.findInOptions(e,i[d],Sh(n,d));r>u.distance&&(s=u.closestMatch,a=u.path,r=u.distance,l=u.indexMatch)}else{var f;-1!==Hr(f=d.toLowerCase()).call(f,h)&&(l=d),r>(c=t.levenshteinDistance(e,d))&&(s=d,a=Th(n),r=c)}}return{closestMatch:s,path:a,distance:r,indexMatch:l}}},{key:\"printLocation\",value:function(t,e){for(var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:\"Problem value found at: \\n\",n=\"\\n\\n\"+i+\"options = {\\n\",o=0;o<t.length;o++){for(var r=0;r<o+1;r++)n+=\"  \";n+=t[o]+\": {\\n\"}for(var s=0;s<t.length+1;s++)n+=\"  \";n+=e+\"\\n\";for(var a=0;a<t.length+1;a++){for(var h=0;h<t.length-a;h++)n+=\"  \";n+=\"}\\n\"}return n+\"\\n\\n\"}},{key:\"print\",value:function(t){return es(t).replace(/(\")|(\\[)|(\\])|(,\"__type__\")/g,\"\").replace(/(,)/g,\", \")}},{key:\"levenshteinDistance\",value:function(t,e){if(0===t.length)return e.length;if(0===e.length)return t.length;var i,n,o=[];for(i=0;i<=e.length;i++)o[i]=[i];for(n=0;n<=t.length;n++)o[0][n]=n;for(i=1;i<=e.length;i++)for(n=1;n<=t.length;n++)e.charAt(i-1)==t.charAt(n-1)?o[i][n]=o[i-1][n-1]:o[i][n]=Math.min(o[i-1][n-1]+1,Math.min(o[i][n-1]+1,o[i-1][n]+1));return o[e.length][t.length]}}]),t}(),fl=Object.freeze({__proto__:null,Activator:sl,Alea:ah,ColorPicker:al,Configurator:hl,DELETE:eh,HSVToHex:Vh,HSVToRGB:qh,Hammer:ll,Popup:dl,RGBToHSV:Lh,RGBToHex:jh,VALIDATOR_PRINT_STYLE:cl,Validator:ul,addClassName:function(t,e){var i=t.className.split(\" \"),n=e.split(\" \");i=Eo(i).call(i,mr(n).call(n,(function(t){return!dr(i).call(i,t)}))),t.className=i.join(\" \")},addCssText:function(t,e){var i=Hh(t.style.cssText),n=Hh(e),o=Qa(Qa({},i),n);t.style.cssText=Wh(o)},addEventListener:Bh,binarySearchCustom:function(t,e,i,n){for(var o=0,r=0,s=t.length-1;r<=s&&o<1e4;){var a=Math.floor((r+s)/2),h=t[a],l=e(void 0===n?h[i]:h[i][n]);if(0==l)return a;-1==l?r=a+1:s=a-1,o++}return-1},binarySearchValue:function(t,e,i,n,o){var r,s,a,h,l=0,d=0,c=t.length-1;for(o=null!=o?o:function(t,e){return t==e?0:t<e?-1:1};d<=c&&l<1e4;){if(h=Math.floor(.5*(c+d)),r=t[Math.max(0,h-1)][i],s=t[h][i],a=t[Math.min(t.length-1,h+1)][i],0==o(s,e))return h;if(o(r,e)<0&&o(s,e)>0)return\"before\"==n?Math.max(0,h-1):h;if(o(s,e)<0&&o(a,e)>0)return\"before\"==n?h:Math.min(t.length-1,h+1);o(s,e)<0?d=h+1:c=h-1,l++}return-1},bridgeObject:Kh,copyAndExtendArray:Sh,copyArray:Th,deepExtend:Ch,deepObjectAssign:nh,easingFunctions:Zh,equalArray:function(t,e){if(t.length!==e.length)return!1;for(var i=0,n=t.length;i<n;i++)if(t[i]!=e[i])return!1;return!0},extend:xh,fillIfDefined:_h,forEach:Dh,getAbsoluteLeft:Mh,getAbsoluteRight:function(t){return t.getBoundingClientRect().right},getAbsoluteTop:Ph,getScrollBarWidth:function(){var t=document.createElement(\"p\");t.style.width=\"100%\",t.style.height=\"200px\";var e=document.createElement(\"div\");e.style.position=\"absolute\",e.style.top=\"0px\",e.style.left=\"0px\",e.style.visibility=\"hidden\",e.style.width=\"200px\",e.style.height=\"150px\",e.style.overflow=\"hidden\",e.appendChild(t),document.body.appendChild(e);var i=t.offsetWidth;e.style.overflow=\"scroll\";var n=t.offsetWidth;return i==n&&(n=e.clientWidth),document.body.removeChild(e),i-n},getTarget:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window.event,e=null;return t&&(t.target?e=t.target:t.srcElement&&(e=t.srcElement)),e instanceof Element&&(null==e.nodeType||3!=e.nodeType||(e=e.parentNode)instanceof Element)?e:null},getType:function(t){var e=go(t);return\"object\"===e?null===t?\"null\":t instanceof Boolean?\"Boolean\":t instanceof Number?\"Number\":t instanceof String?\"String\":So(t)?\"Array\":t instanceof Date?\"Date\":\"Object\":\"number\"===e?\"Number\":\"boolean\"===e?\"Boolean\":\"string\"===e?\"String\":void 0===e?\"undefined\":e},hasParent:function(t,e){for(var i=t;i;){if(i===e)return!0;if(!i.parentNode)return!1;i=i.parentNode}return!1},hexToHSV:Uh,hexToRGB:Ah,insertSort:function(t,e){for(var i=0;i<t.length;i++){var n=t[i],o=void 0;for(o=i;o>0&&e(n,t[o-1])<0;o--)t[o]=t[o-1];t[o]=n}return t},isDate:function(t){if(t instanceof Date)return!0;if(bh(t)){if(uh.exec(t))return!0;if(!isNaN(Date.parse(t)))return!0}return!1},isNumber:yh,isObject:wh,isString:bh,isValidHex:Yh,isValidRGB:Xh,isValidRGBA:Gh,mergeOptions:$h,option:Nh,overrideOpacity:Fh,parseColor:Rh,preventDefault:function(t){t||(t=window.event),t&&(t.preventDefault?t.preventDefault():t.returnValue=!1)},pureDeepObjectAssign:ih,recursiveDOMDelete:mh,removeClassName:function(t,e){var i=t.className.split(\" \"),n=e.split(\" \");i=mr(i).call(i,(function(t){return!dr(n).call(n,t)})),t.className=i.join(\" \")},removeCssText:function(t,e){var i=Hh(t.style.cssText),n=Hh(e);for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&delete i[o];t.style.cssText=Wh(i)},removeEventListener:zh,selectiveBridgeObject:function(t,e){if(null!==e&&\"object\"===go(e)){for(var i=Gr(e),n=0;n<t.length;n++)Object.prototype.hasOwnProperty.call(e,t[n])&&\"object\"==go(e[t[n]])&&(i[t[n]]=Kh(e[t[n]]));return i}return null},selectiveDeepExtend:Eh,selectiveExtend:function(t,e){if(!So(t))throw new Error(\"Array with property names expected as first argument\");for(var i=arguments.length,n=new Array(i>2?i-2:0),o=2;o<i;o++)n[o-2]=arguments[o];for(var r=0,s=n;r<s.length;r++)for(var a=s[r],h=0;h<t.length;h++){var l=t[h];a&&Object.prototype.hasOwnProperty.call(a,l)&&(e[l]=a[l])}return e},selectiveNotDeepExtend:Oh,throttle:function(t){var e=!1;return function(){e||(e=!0,requestAnimationFrame((function(){e=!1,t()})))}},toArray:Ih,topMost:Qh,updateProperty:function(t,e,i){return t[e]!==i&&(t[e]=i,!0)}});function pl(t){return _l=t,function(){var t={};xl=0,void(El=_l.charAt(0)),Nl(),\"strict\"===Ol&&(t.strict=!0,Nl());\"graph\"!==Ol&&\"digraph\"!==Ol||(t.type=Ol,Nl());Cl===bl&&(t.id=Ol,Nl());if(\"{\"!=Ol)throw Hl(\"Angle bracket { expected\");if(Nl(),Al(t),\"}\"!=Ol)throw Hl(\"Angle bracket } expected\");if(Nl(),\"\"!==Ol)throw Hl(\"End of file expected\");return Nl(),delete t.node,delete t.edge,delete t.graph,t}()}var vl={fontsize:\"font.size\",fontcolor:\"font.color\",labelfontcolor:\"font.color\",fontname:\"font.face\",color:[\"color.border\",\"color.background\"],fillcolor:\"color.background\",tooltip:\"title\",labeltooltip:\"title\"},gl=Gr(vl);gl.color=\"color.color\",gl.style=\"dashes\";var yl=0,ml=1,bl=2,wl=3,kl={\"{\":!0,\"}\":!0,\"[\":!0,\"]\":!0,\";\":!0,\"=\":!0,\",\":!0,\"->\":!0,\"--\":!0},_l=\"\",xl=0,El=\"\",Ol=\"\",Cl=yl;function Sl(){xl++,El=_l.charAt(xl)}function Tl(){return _l.charAt(xl+1)}function Ml(t){var e=t.charCodeAt(0);return e<47?35===e||46===e:e<59?e>47:e<91?e>64:e<96?95===e:e<123&&e>96}function Pl(t,e){if(t||(t={}),e)for(var i in e)e.hasOwnProperty(i)&&(t[i]=e[i]);return t}function Dl(t,e,i){for(var n=e.split(\".\"),o=t;n.length;){var r=n.shift();n.length?(o[r]||(o[r]={}),o=o[r]):o[r]=i}}function Il(t,e){for(var i,n,o=null,r=[t],s=t;s.parent;)r.push(s.parent),s=s.parent;if(s.nodes)for(i=0,n=s.nodes.length;i<n;i++)if(e.id===s.nodes[i].id){o=s.nodes[i];break}for(o||(o={id:e.id},t.node&&(o.attr=Pl(o.attr,t.node))),i=r.length-1;i>=0;i--){var a,h=r[i];h.nodes||(h.nodes=[]),-1===Hr(a=h.nodes).call(a,o)&&h.nodes.push(o)}e.attr&&(o.attr=Pl(o.attr,e.attr))}function Bl(t,e){if(t.edges||(t.edges=[]),t.edges.push(e),t.edge){var i=Pl({},t.edge);e.attr=Pl(i,e.attr)}}function zl(t,e,i,n,o){var r={from:e,to:i,type:n};return t.edge&&(r.attr=Pl({},t.edge)),r.attr=Pl(r.attr||{},o),null!=o&&o.hasOwnProperty(\"arrows\")&&null!=o.arrows&&(r.arrows={to:{enabled:!0,type:o.arrows.type}},o.arrows=null),r}function Nl(){for(Cl=yl,Ol=\"\";\" \"===El||\"\\t\"===El||\"\\n\"===El||\"\\r\"===El;)Sl();do{var t=!1;if(\"#\"===El){for(var e=xl-1;\" \"===_l.charAt(e)||\"\\t\"===_l.charAt(e);)e--;if(\"\\n\"===_l.charAt(e)||\"\"===_l.charAt(e)){for(;\"\"!=El&&\"\\n\"!=El;)Sl();t=!0}}if(\"/\"===El&&\"/\"===Tl()){for(;\"\"!=El&&\"\\n\"!=El;)Sl();t=!0}if(\"/\"===El&&\"*\"===Tl()){for(;\"\"!=El;){if(\"*\"===El&&\"/\"===Tl()){Sl(),Sl();break}Sl()}t=!0}for(;\" \"===El||\"\\t\"===El||\"\\n\"===El||\"\\r\"===El;)Sl()}while(t);if(\"\"!==El){var i=El+Tl();if(kl[i])return Cl=ml,Ol=i,Sl(),void Sl();if(kl[El])return Cl=ml,Ol=El,void Sl();if(Ml(El)||\"-\"===El){for(Ol+=El,Sl();Ml(El);)Ol+=El,Sl();return\"false\"===Ol?Ol=!1:\"true\"===Ol?Ol=!0:isNaN(Number(Ol))||(Ol=Number(Ol)),void(Cl=bl)}if('\"'===El){for(Sl();\"\"!=El&&('\"'!=El||'\"'===El&&'\"'===Tl());)'\"'===El?(Ol+=El,Sl()):\"\\\\\"===El&&\"n\"===Tl()?(Ol+=\"\\n\",Sl()):Ol+=El,Sl();if('\"'!=El)throw Hl('End of string \" expected');return Sl(),void(Cl=bl)}for(Cl=wl;\"\"!=El;)Ol+=El,Sl();throw new SyntaxError('Syntax error in part \"'+Wl(Ol,30)+'\"')}Cl=ml}function Al(t){for(;\"\"!==Ol&&\"}\"!=Ol;)Fl(t),\";\"===Ol&&Nl()}function Fl(t){var e=jl(t);if(e)Rl(t,e);else if(!function(t){if(\"node\"===Ol)return Nl(),t.node=Ll(),\"node\";if(\"edge\"===Ol)return Nl(),t.edge=Ll(),\"edge\";if(\"graph\"===Ol)return Nl(),t.graph=Ll(),\"graph\";return null}(t)){if(Cl!=bl)throw Hl(\"Identifier expected\");var i=Ol;if(Nl(),\"=\"===Ol){if(Nl(),Cl!=bl)throw Hl(\"Identifier expected\");t[i]=Ol,Nl()}else!function(t,e){var i={id:e},n=Ll();n&&(i.attr=n);Il(t,i),Rl(t,e)}(t,i)}}function jl(t){var e=null;if(\"subgraph\"===Ol&&((e={}).type=\"subgraph\",Nl(),Cl===bl&&(e.id=Ol,Nl())),\"{\"===Ol){if(Nl(),e||(e={}),e.parent=t,e.node=t.node,e.edge=t.edge,e.graph=t.graph,Al(e),\"}\"!=Ol)throw Hl(\"Angle bracket } expected\");Nl(),delete e.node,delete e.edge,delete e.graph,delete e.parent,t.subgraphs||(t.subgraphs=[]),t.subgraphs.push(e)}return e}function Rl(t,e){for(;\"->\"===Ol||\"--\"===Ol;){var i,n=Ol;Nl();var o=jl(t);if(o)i=o;else{if(Cl!=bl)throw Hl(\"Identifier or subgraph expected\");Il(t,{id:i=Ol}),Nl()}Bl(t,zl(t,e,i,n,Ll())),e=i}}function Ll(){for(var t,e,i=null,n={dashed:!0,solid:!1,dotted:[1,5]},o={dot:\"circle\",box:\"box\",crow:\"crow\",curve:\"curve\",icurve:\"inv_curve\",normal:\"triangle\",inv:\"inv_triangle\",diamond:\"diamond\",tee:\"bar\",vee:\"vee\"},r=new Array,s=new Array;\"[\"===Ol;){for(Nl(),i={};\"\"!==Ol&&\"]\"!=Ol;){if(Cl!=bl)throw Hl(\"Attribute name expected\");var a=Ol;if(Nl(),\"=\"!=Ol)throw Hl(\"Equal sign = expected\");if(Nl(),Cl!=bl)throw Hl(\"Attribute value expected\");var h=Ol;\"style\"===a&&(h=n[h]),\"arrowhead\"===a&&(a=\"arrows\",h={to:{enabled:!0,type:o[h]}}),\"arrowtail\"===a&&(a=\"arrows\",h={from:{enabled:!0,type:o[h]}}),r.push({attr:i,name:a,value:h}),s.push(a),Nl(),\",\"==Ol&&Nl()}if(\"]\"!=Ol)throw Hl(\"Bracket ] expected\");Nl()}if(dr(s).call(s,\"dir\")){var l={arrows:{}};for(t=0;t<r.length;t++)if(\"arrows\"===r[t].name)if(null!=r[t].value.to)l.arrows.to=t;else{if(null==r[t].value.from)throw Hl(\"Invalid value of arrows\");l.arrows.from=t}else\"dir\"===r[t].name&&(l.dir=t);var d,c,u=r[l.dir].value;if(!dr(s).call(s,\"arrows\"))if(\"both\"===u)r.push({attr:r[l.dir].attr,name:\"arrows\",value:{to:{enabled:!0}}}),l.arrows.to=r.length-1,r.push({attr:r[l.dir].attr,name:\"arrows\",value:{from:{enabled:!0}}}),l.arrows.from=r.length-1;else if(\"forward\"===u)r.push({attr:r[l.dir].attr,name:\"arrows\",value:{to:{enabled:!0}}}),l.arrows.to=r.length-1;else if(\"back\"===u)r.push({attr:r[l.dir].attr,name:\"arrows\",value:{from:{enabled:!0}}}),l.arrows.from=r.length-1;else{if(\"none\"!==u)throw Hl('Invalid dir type \"'+u+'\"');r.push({attr:r[l.dir].attr,name:\"arrows\",value:\"\"}),l.arrows.to=r.length-1}if(\"both\"===u)l.arrows.to&&l.arrows.from?(c=r[l.arrows.to].value.to.type,d=r[l.arrows.from].value.from.type,r[l.arrows.to]={attr:r[l.arrows.to].attr,name:r[l.arrows.to].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}},er(r).call(r,l.arrows.from,1)):l.arrows.to?(c=r[l.arrows.to].value.to.type,d=\"arrow\",r[l.arrows.to]={attr:r[l.arrows.to].attr,name:r[l.arrows.to].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}}):l.arrows.from&&(c=\"arrow\",d=r[l.arrows.from].value.from.type,r[l.arrows.from]={attr:r[l.arrows.from].attr,name:r[l.arrows.from].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}});else if(\"back\"===u)l.arrows.to&&l.arrows.from?(c=\"\",d=r[l.arrows.from].value.from.type,r[l.arrows.from]={attr:r[l.arrows.from].attr,name:r[l.arrows.from].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}}):l.arrows.to?(c=\"\",d=\"arrow\",l.arrows.from=l.arrows.to,r[l.arrows.from]={attr:r[l.arrows.from].attr,name:r[l.arrows.from].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}}):l.arrows.from&&(c=\"\",d=r[l.arrows.from].value.from.type,r[l.arrows.to]={attr:r[l.arrows.from].attr,name:r[l.arrows.from].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}}),r[l.arrows.from]={attr:r[l.arrows.from].attr,name:r[l.arrows.from].name,value:{from:{enabled:!0,type:r[l.arrows.from].value.from.type}}};else if(\"none\"===u){var f;r[f=l.arrows.to?l.arrows.to:l.arrows.from]={attr:r[f].attr,name:r[f].name,value:\"\"}}else{if(\"forward\"!==u)throw Hl('Invalid dir type \"'+u+'\"');l.arrows.to&&l.arrows.from||l.arrows.to?(c=r[l.arrows.to].value.to.type,d=\"\",r[l.arrows.to]={attr:r[l.arrows.to].attr,name:r[l.arrows.to].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}}):l.arrows.from&&(c=\"arrow\",d=\"\",l.arrows.to=l.arrows.from,r[l.arrows.to]={attr:r[l.arrows.to].attr,name:r[l.arrows.to].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}}),r[l.arrows.to]={attr:r[l.arrows.to].attr,name:r[l.arrows.to].name,value:{to:{enabled:!0,type:r[l.arrows.to].value.to.type}}}}er(r).call(r,l.dir,1)}if(dr(s).call(s,\"penwidth\")){var p=[];for(e=r.length,t=0;t<e;t++)\"width\"!==r[t].name&&(\"penwidth\"===r[t].name&&(r[t].name=\"width\"),p.push(r[t]));r=p}for(e=r.length,t=0;t<e;t++)Dl(r[t].attr,r[t].name,r[t].value);return i}function Hl(t){return new SyntaxError(t+', got \"'+Wl(Ol,30)+'\" (char '+xl+\")\")}function Wl(t,e){return t.length<=e?t:t.substr(0,27)+\"...\"}function ql(t,e,i){for(var n=e.split(\".\"),o=n.pop(),r=t,s=0;s<n.length;s++){var a=n[s];a in r||(r[a]={}),r=r[a]}return r[o]=i,t}function Vl(t,e){var i={};for(var n in t)if(t.hasOwnProperty(n)){var o=e[n];So(o)?Wo(o).call(o,(function(e){ql(i,e,t[n])})):ql(i,\"string\"==typeof o?o:n,t[n])}return i}function Ul(t){var e,i=pl(t),n={nodes:[],edges:[],options:{}};i.nodes&&Wo(e=i.nodes).call(e,(function(t){var e={id:t.id,label:String(t.label||t.id)};Pl(e,Vl(t.attr,vl)),e.image&&(e.shape=\"image\"),n.nodes.push(e)}));if(i.edges){var o,r=function(t){var e={from:t.from,to:t.to};return Pl(e,Vl(t.attr,gl)),null==e.arrows&&\"->\"===t.type&&(e.arrows=\"to\"),e};Wo(o=i.edges).call(o,(function(t){var e,i,o,s,a,h,l;(e=t.from instanceof Object?t.from.nodes:{id:t.from},i=t.to instanceof Object?t.to.nodes:{id:t.to},t.from instanceof Object&&t.from.edges)&&Wo(o=t.from.edges).call(o,(function(t){var e=r(t);n.edges.push(e)}));(a=i,h=function(e,i){var o=zl(n,e.id,i.id,t.type,t.attr),s=r(o);n.edges.push(s)},So(s=e)?Wo(s).call(s,(function(t){So(a)?Wo(a).call(a,(function(e){h(t,e)})):h(t,a)})):So(a)?Wo(a).call(a,(function(t){h(s,t)})):h(s,a),t.to instanceof Object&&t.to.edges)&&Wo(l=t.to.edges).call(l,(function(t){var e=r(t);n.edges.push(e)}))}))}return i.attr&&(n.options=i.attr),n}var Yl=Object.freeze({__proto__:null,parseDOT:pl,DOTToGraph:Ul});function Xl(t,e){var i,n={edges:{inheritColor:!1},nodes:{fixed:!1,parseColor:!1}};null!=e&&(null!=e.fixed&&(n.nodes.fixed=e.fixed),null!=e.parseColor&&(n.nodes.parseColor=e.parseColor),null!=e.inheritColor&&(n.edges.inheritColor=e.inheritColor));var o=t.edges,r=Io(o).call(o,(function(t){var e={from:t.source,id:t.id,to:t.target};return null!=t.attributes&&(e.attributes=t.attributes),null!=t.label&&(e.label=t.label),null!=t.attributes&&null!=t.attributes.title&&(e.title=t.attributes.title),\"Directed\"===t.type&&(e.arrows=\"to\"),t.color&&!1===n.edges.inheritColor&&(e.color=t.color),e}));return{nodes:Io(i=t.nodes).call(i,(function(t){var e={id:t.id,fixed:n.nodes.fixed&&null!=t.x&&null!=t.y};return null!=t.attributes&&(e.attributes=t.attributes),null!=t.label&&(e.label=t.label),null!=t.size&&(e.size=t.size),null!=t.attributes&&null!=t.attributes.title&&(e.title=t.attributes.title),null!=t.title&&(e.title=t.title),null!=t.x&&(e.x=t.x),null!=t.y&&(e.y=t.y),null!=t.color&&(!0===n.nodes.parseColor?e.color=t.color:e.color={background:t.color,border:t.color,highlight:{background:t.color,border:t.color},hover:{background:t.color,border:t.color}}),e})),edges:r}}var Gl=Object.freeze({__proto__:null,parseGephi:Xl}),Kl=Object.freeze({__proto__:null,en:{addDescription:\"Click in an empty space to place a new node.\",addEdge:\"Add Edge\",addNode:\"Add Node\",back:\"Back\",close:\"Close\",createEdgeError:\"Cannot link edges to a cluster.\",del:\"Delete selected\",deleteClusterError:\"Clusters cannot be deleted.\",edgeDescription:\"Click on a node and drag the edge to another node to connect them.\",edit:\"Edit\",editClusterError:\"Clusters cannot be edited.\",editEdge:\"Edit Edge\",editEdgeDescription:\"Click on the control points and drag them to a node to connect to it.\",editNode:\"Edit Node\"},de:{addDescription:\"Klicke auf eine freie Stelle, um einen neuen Knoten zu plazieren.\",addEdge:\"Kante hinzufügen\",addNode:\"Knoten hinzufügen\",back:\"Zurück\",close:\"Schließen\",createEdgeError:\"Es ist nicht möglich, Kanten mit Clustern zu verbinden.\",del:\"Lösche Auswahl\",deleteClusterError:\"Cluster können nicht gelöscht werden.\",edgeDescription:\"Klicke auf einen Knoten und ziehe die Kante zu einem anderen Knoten, um diese zu verbinden.\",edit:\"Editieren\",editClusterError:\"Cluster können nicht editiert werden.\",editEdge:\"Kante editieren\",editEdgeDescription:\"Klicke auf die Verbindungspunkte und ziehe diese auf einen Knoten, um sie zu verbinden.\",editNode:\"Knoten editieren\"},es:{addDescription:\"Haga clic en un lugar vacío para colocar un nuevo nodo.\",addEdge:\"Añadir arista\",addNode:\"Añadir nodo\",back:\"Atrás\",close:\"Cerrar\",createEdgeError:\"No se puede conectar una arista a un grupo.\",del:\"Eliminar selección\",deleteClusterError:\"No es posible eliminar grupos.\",edgeDescription:\"Haga clic en un nodo y arrastre la arista hacia otro nodo para conectarlos.\",edit:\"Editar\",editClusterError:\"No es posible editar grupos.\",editEdge:\"Editar arista\",editEdgeDescription:\"Haga clic en un punto de control y arrastrelo a un nodo para conectarlo.\",editNode:\"Editar nodo\"},it:{addDescription:\"Clicca per aggiungere un nuovo nodo\",addEdge:\"Aggiungi un vertice\",addNode:\"Aggiungi un nodo\",back:\"Indietro\",close:\"Chiudere\",createEdgeError:\"Non si possono collegare vertici ad un cluster\",del:\"Cancella la selezione\",deleteClusterError:\"I cluster non possono essere cancellati\",edgeDescription:\"Clicca su un nodo e trascinalo ad un altro nodo per connetterli.\",edit:\"Modifica\",editClusterError:\"I clusters non possono essere modificati.\",editEdge:\"Modifica il vertice\",editEdgeDescription:\"Clicca sui Punti di controllo e trascinali ad un nodo per connetterli.\",editNode:\"Modifica il nodo\"},nl:{addDescription:\"Klik op een leeg gebied om een nieuwe node te maken.\",addEdge:\"Link toevoegen\",addNode:\"Node toevoegen\",back:\"Terug\",close:\"Sluiten\",createEdgeError:\"Kan geen link maken naar een cluster.\",del:\"Selectie verwijderen\",deleteClusterError:\"Clusters kunnen niet worden verwijderd.\",edgeDescription:\"Klik op een node en sleep de link naar een andere node om ze te verbinden.\",edit:\"Wijzigen\",editClusterError:\"Clusters kunnen niet worden aangepast.\",editEdge:\"Link wijzigen\",editEdgeDescription:\"Klik op de verbindingspunten en sleep ze naar een node om daarmee te verbinden.\",editNode:\"Node wijzigen\"},pt:{addDescription:\"Clique em um espaço em branco para adicionar um novo nó\",addEdge:\"Adicionar aresta\",addNode:\"Adicionar nó\",back:\"Voltar\",close:\"Fechar\",createEdgeError:\"Não foi possível linkar arestas a um cluster.\",del:\"Remover selecionado\",deleteClusterError:\"Clusters não puderam ser removidos.\",edgeDescription:\"Clique em um nó e arraste a aresta até outro nó para conectá-los\",edit:\"Editar\",editClusterError:\"Clusters não puderam ser editados.\",editEdge:\"Editar aresta\",editEdgeDescription:\"Clique nos pontos de controle e os arraste para um nó para conectá-los\",editNode:\"Editar nó\"},ru:{addDescription:\"Кликните в свободное место, чтобы добавить новый узел.\",addEdge:\"Добавить ребро\",addNode:\"Добавить узел\",back:\"Назад\",close:\"Закрывать\",createEdgeError:\"Невозможно соединить ребра в кластер.\",del:\"Удалить выбранное\",deleteClusterError:\"Кластеры не могут быть удалены\",edgeDescription:\"Кликните на узел и протяните ребро к другому узлу, чтобы соединить их.\",edit:\"Редактировать\",editClusterError:\"Кластеры недоступны для редактирования.\",editEdge:\"Редактировать ребро\",editEdgeDescription:\"Кликните на контрольные точки и перетащите их в узел, чтобы подключиться к нему.\",editNode:\"Редактировать узел\"},cn:{addDescription:\"单击空白处放置新节点。\",addEdge:\"添加连接线\",addNode:\"添加节点\",back:\"返回\",close:\"關閉\",createEdgeError:\"无法将连接线连接到群集。\",del:\"删除选定\",deleteClusterError:\"无法删除群集。\",edgeDescription:\"单击某个节点并将该连接线拖动到另一个节点以连接它们。\",edit:\"编辑\",editClusterError:\"无法编辑群集。\",editEdge:\"编辑连接线\",editEdgeDescription:\"单击控制节点并将它们拖到节点上连接。\",editNode:\"编辑节点\"},uk:{addDescription:\"Kлікніть на вільне місце, щоб додати новий вузол.\",addEdge:\"Додати край\",addNode:\"Додати вузол\",back:\"Назад\",close:\"Закрити\",createEdgeError:\"Не можливо об'єднати краї в групу.\",del:\"Видалити обране\",deleteClusterError:\"Групи не можуть бути видалені.\",edgeDescription:\"Клікніть на вузол і перетягніть край до іншого вузла, щоб їх з'єднати.\",edit:\"Редагувати\",editClusterError:\"Групи недоступні для редагування.\",editEdge:\"Редагувати край\",editEdgeDescription:\"Клікніть на контрольні точки і перетягніть їх у вузол, щоб підключитися до нього.\",editNode:\"Редагувати вузол\"},fr:{addDescription:\"Cliquez dans un endroit vide pour placer un nœud.\",addEdge:\"Ajouter un lien\",addNode:\"Ajouter un nœud\",back:\"Retour\",close:\"Fermer\",createEdgeError:\"Impossible de créer un lien vers un cluster.\",del:\"Effacer la sélection\",deleteClusterError:\"Les clusters ne peuvent pas être effacés.\",edgeDescription:\"Cliquez sur un nœud et glissez le lien vers un autre nœud pour les connecter.\",edit:\"Éditer\",editClusterError:\"Les clusters ne peuvent pas être édités.\",editEdge:\"Éditer le lien\",editEdgeDescription:\"Cliquez sur les points de contrôle et glissez-les pour connecter un nœud.\",editNode:\"Éditer le nœud\"},cs:{addDescription:\"Kluknutím do prázdného prostoru můžete přidat nový vrchol.\",addEdge:\"Přidat hranu\",addNode:\"Přidat vrchol\",back:\"Zpět\",close:\"Zavřít\",createEdgeError:\"Nelze připojit hranu ke shluku.\",del:\"Smazat výběr\",deleteClusterError:\"Nelze mazat shluky.\",edgeDescription:\"Přetažením z jednoho vrcholu do druhého můžete spojit tyto vrcholy novou hranou.\",edit:\"Upravit\",editClusterError:\"Nelze upravovat shluky.\",editEdge:\"Upravit hranu\",editEdgeDescription:\"Přetažením kontrolního vrcholu hrany ji můžete připojit k jinému vrcholu.\",editNode:\"Upravit vrchol\"}});var $l=function(){function t(){Nn(this,t),this.NUM_ITERATIONS=4,this.image=new Image,this.canvas=document.createElement(\"canvas\")}return Fn(t,[{key:\"init\",value:function(){if(!this.initialized()){this.src=this.image.src;var t=this.image.width,e=this.image.height;this.width=t,this.height=e;var i=Math.floor(e/2),n=Math.floor(e/4),o=Math.floor(e/8),r=Math.floor(e/16),s=Math.floor(t/2),a=Math.floor(t/4),h=Math.floor(t/8),l=Math.floor(t/16);this.canvas.width=3*a,this.canvas.height=i,this.coordinates=[[0,0,s,i],[s,0,a,n],[s,n,h,o],[5*h,n,l,r]],this._fillMipMap()}}},{key:\"initialized\",value:function(){return void 0!==this.coordinates}},{key:\"_fillMipMap\",value:function(){var t=this.canvas.getContext(\"2d\"),e=this.coordinates[0];t.drawImage(this.image,e[0],e[1],e[2],e[3]);for(var i=1;i<this.NUM_ITERATIONS;i++){var n=this.coordinates[i-1],o=this.coordinates[i];t.drawImage(this.canvas,n[0],n[1],n[2],n[3],o[0],o[1],o[2],o[3])}}},{key:\"drawImageAtPosition\",value:function(t,e,i,n,o,r){if(this.initialized())if(e>2){e*=.5;for(var s=0;e>2&&s<this.NUM_ITERATIONS;)e*=.5,s+=1;s>=this.NUM_ITERATIONS&&(s=this.NUM_ITERATIONS-1);var a=this.coordinates[s];t.drawImage(this.canvas,a[0],a[1],a[2],a[3],i,n,o,r)}else t.drawImage(this.image,i,n,o,r)}}]),t}(),Zl=function(){function t(e){Nn(this,t),this.images={},this.imageBroken={},this.callback=e}return Fn(t,[{key:\"_tryloadBrokenUrl\",value:function(t,e,i){void 0!==t&&void 0!==i&&(void 0!==e?(i.image.onerror=function(){console.error(\"Could not load brokenImage:\",e)},i.image.src=e):console.warn(\"No broken url image defined\"))}},{key:\"_redrawWithImage\",value:function(t){this.callback&&this.callback(t)}},{key:\"load\",value:function(t,e){var i=this,n=this.images[t];if(n)return n;var o=new $l;return this.images[t]=o,o.image.onload=function(){i._fixImageCoordinates(o.image),o.init(),i._redrawWithImage(o)},o.image.onerror=function(){console.error(\"Could not load image:\",t),i._tryloadBrokenUrl(t,e,o)},o.image.src=t,o}},{key:\"_fixImageCoordinates\",value:function(t){0===t.width&&(document.body.appendChild(t),t.width=t.offsetWidth,t.height=t.offsetHeight,document.body.removeChild(t))}}]),t}(),Ql=!h((function(){return Object.isExtensible(Object.preventExtensions({}))})),Jl=n((function(t){var e=ut.f,i=!1,n=H(\"meta\"),o=0,r=Object.isExtensible||function(){return!0},s=function(t){e(t,n,{value:{objectID:\"O\"+o++,weakData:{}}})},a=t.exports={enable:function(){a.enable=function(){},i=!0;var t=Ai.f,e=[].splice,o={};o[n]=1,t(o).length&&(Ai.f=function(i){for(var o=t(i),r=0,s=o.length;r<s;r++)if(o[r]===n){e.call(o,r,1);break}return o},gt({target:\"Object\",stat:!0,forced:!0},{getOwnPropertyNames:Li.f}))},fastKey:function(t,e){if(!w(t))return\"symbol\"==typeof t?t:(\"string\"==typeof t?\"S\":\"P\")+t;if(!j(t,n)){if(!r(t))return\"F\";if(!e)return\"E\";s(t)}return t[n].objectID},getWeakData:function(t,e){if(!j(t,n)){if(!r(t))return!0;if(!e)return!1;s(t)}return t[n].weakData},onFreeze:function(t){return Ql&&i&&r(t)&&!j(t,n)&&s(t),t}};St[n]=!0}));Jl.enable,Jl.fastKey,Jl.getWeakData,Jl.onFreeze;var td=function(t,e){this.stopped=t,this.result=e},ed=function(t,e,i){var n,o,r,s,a,h,l,d=i&&i.that,c=!(!i||!i.AS_ENTRIES),u=!(!i||!i.IS_ITERATOR),f=!(!i||!i.INTERRUPTED),p=lt(e,d,1+c+f),v=function(t){return n&&di(n),new td(!0,t)},g=function(t){return c?(dt(t),f?p(t[0],t[1],v):p(t[0],t[1])):f?p(t,v):p(t)};if(u)n=t;else{if(\"function\"!=typeof(o=yi(t)))throw TypeError(\"Target is not iterable\");if(pi(o)){for(r=0,s=kt(t.length);s>r;r++)if((a=g(t[r]))&&a instanceof td)return a;return new td(!1)}n=o.call(t)}for(h=n.next;!(l=h.call(n)).done;){try{a=g(l.value)}catch(t){throw di(n),t}if(\"object\"==typeof a&&a&&a instanceof td)return a}return new td(!1)},id=function(t,e,i){if(!(t instanceof e))throw TypeError(\"Incorrect \"+(i?i+\" \":\"\")+\"invocation\");return t},nd=ut.f,od=Gi.forEach,rd=we.set,sd=we.getterFor,ad=function(t,e,i){var n,o=-1!==t.indexOf(\"Map\"),r=-1!==t.indexOf(\"Weak\"),s=o?\"set\":\"add\",d=a[t],c=d&&d.prototype,u={};if(l&&\"function\"==typeof d&&(r||c.forEach&&!h((function(){(new d).entries().next()})))){n=e((function(e,i){rd(id(e,n,t),{type:t,collection:new d}),null!=i&&ed(i,e[s],{that:e,AS_ENTRIES:o})}));var f=sd(t);od([\"add\",\"clear\",\"delete\",\"forEach\",\"get\",\"has\",\"set\",\"keys\",\"values\",\"entries\"],(function(t){var e=\"add\"==t||\"set\"==t;!(t in c)||r&&\"clear\"==t||ft(n.prototype,t,(function(i,n){var o=f(this).collection;if(!e&&r&&!w(i))return\"get\"==t&&void 0;var s=o[t](0===i?0:i,n);return e?this:s}))})),r||nd(n.prototype,\"size\",{configurable:!0,get:function(){return f(this).collection.size}})}else n=i.getConstructor(e,t,o,s),Jl.enable();return Ye(n,t,!1,!0),u[t]=n,gt({global:!0,forced:!0},u),r||i.setStrong(n,t,o),n},hd=function(t,e,i){for(var n in e)i&&i.unsafe&&t[n]?t[n]=e[n]:Ze(t,n,e[n],i);return t},ld=U(\"species\"),dd=ut.f,cd=Jl.fastKey,ud=we.set,fd=we.getterFor,pd={getConstructor:function(t,e,i,n){var o=t((function(t,r){id(t,o,e),ud(t,{type:e,index:Fe(null),first:void 0,last:void 0,size:0}),l||(t.size=0),null!=r&&ed(r,t[n],{that:t,AS_ENTRIES:i})})),r=fd(e),s=function(t,e,i){var n,o,s=r(t),h=a(t,e);return h?h.value=i:(s.last=h={index:o=cd(e,!0),key:e,value:i,previous:n=s.last,next:void 0,removed:!1},s.first||(s.first=h),n&&(n.next=h),l?s.size++:t.size++,\"F\"!==o&&(s.index[o]=h)),t},a=function(t,e){var i,n=r(t),o=cd(e);if(\"F\"!==o)return n.index[o];for(i=n.first;i;i=i.next)if(i.key==e)return i};return hd(o.prototype,{clear:function(){for(var t=r(this),e=t.index,i=t.first;i;)i.removed=!0,i.previous&&(i.previous=i.previous.next=void 0),delete e[i.index],i=i.next;t.first=t.last=void 0,l?t.size=0:this.size=0},delete:function(t){var e=this,i=r(e),n=a(e,t);if(n){var o=n.next,s=n.previous;delete i.index[n.index],n.removed=!0,s&&(s.next=o),o&&(o.previous=s),i.first==n&&(i.first=o),i.last==n&&(i.last=s),l?i.size--:e.size--}return!!n},forEach:function(t){for(var e,i=r(this),n=lt(t,arguments.length>1?arguments[1]:void 0,3);e=e?e.next:i.first;)for(n(e.value,e.key,this);e&&e.removed;)e=e.previous},has:function(t){return!!a(this,t)}}),hd(o.prototype,i?{get:function(t){var e=a(this,t);return e&&e.value},set:function(t,e){return s(this,0===t?0:t,e)}}:{add:function(t){return s(this,t=0===t?0:t,t)}}),l&&dd(o.prototype,\"size\",{get:function(){return r(this).size}}),o},setStrong:function(t,e,i){var n=e+\" Iterator\",o=fd(e),r=fd(n);ri(t,e,(function(t,e){ud(this,{type:n,target:t,state:o(t),kind:e,last:void 0})}),(function(){for(var t=r(this),e=t.kind,i=t.last;i&&i.removed;)i=i.previous;return t.target&&(t.last=i=i?i.next:t.state.first)?\"keys\"==e?{value:i.key,done:!1}:\"values\"==e?{value:i.value,done:!1}:{value:[i.key,i.value],done:!1}:(t.target=void 0,{value:void 0,done:!0})}),i?\"entries\":\"values\",!i,!0),function(t){var e=x(t),i=ut.f;l&&e&&!e[ld]&&i(e,ld,{configurable:!0,get:function(){return this}})}(e)}};ad(\"Map\",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),pd);var vd=k.Map,gd=function(){function t(){Nn(this,t),this.clear(),this._defaultIndex=0,this._groupIndex=0,this._defaultGroups=[{border:\"#2B7CE9\",background:\"#97C2FC\",highlight:{border:\"#2B7CE9\",background:\"#D2E5FF\"},hover:{border:\"#2B7CE9\",background:\"#D2E5FF\"}},{border:\"#FFA500\",background:\"#FFFF00\",highlight:{border:\"#FFA500\",background:\"#FFFFA3\"},hover:{border:\"#FFA500\",background:\"#FFFFA3\"}},{border:\"#FA0A10\",background:\"#FB7E81\",highlight:{border:\"#FA0A10\",background:\"#FFAFB1\"},hover:{border:\"#FA0A10\",background:\"#FFAFB1\"}},{border:\"#41A906\",background:\"#7BE141\",highlight:{border:\"#41A906\",background:\"#A1EC76\"},hover:{border:\"#41A906\",background:\"#A1EC76\"}},{border:\"#E129F0\",background:\"#EB7DF4\",highlight:{border:\"#E129F0\",background:\"#F0B3F5\"},hover:{border:\"#E129F0\",background:\"#F0B3F5\"}},{border:\"#7C29F0\",background:\"#AD85E4\",highlight:{border:\"#7C29F0\",background:\"#D3BDF0\"},hover:{border:\"#7C29F0\",background:\"#D3BDF0\"}},{border:\"#C37F00\",background:\"#FFA807\",highlight:{border:\"#C37F00\",background:\"#FFCA66\"},hover:{border:\"#C37F00\",background:\"#FFCA66\"}},{border:\"#4220FB\",background:\"#6E6EFD\",highlight:{border:\"#4220FB\",background:\"#9B9BFD\"},hover:{border:\"#4220FB\",background:\"#9B9BFD\"}},{border:\"#FD5A77\",background:\"#FFC0CB\",highlight:{border:\"#FD5A77\",background:\"#FFD1D9\"},hover:{border:\"#FD5A77\",background:\"#FFD1D9\"}},{border:\"#4AD63A\",background:\"#C2FABC\",highlight:{border:\"#4AD63A\",background:\"#E6FFE3\"},hover:{border:\"#4AD63A\",background:\"#E6FFE3\"}},{border:\"#990000\",background:\"#EE0000\",highlight:{border:\"#BB0000\",background:\"#FF3333\"},hover:{border:\"#BB0000\",background:\"#FF3333\"}},{border:\"#FF6000\",background:\"#FF6000\",highlight:{border:\"#FF6000\",background:\"#FF6000\"},hover:{border:\"#FF6000\",background:\"#FF6000\"}},{border:\"#97C2FC\",background:\"#2B7CE9\",highlight:{border:\"#D2E5FF\",background:\"#2B7CE9\"},hover:{border:\"#D2E5FF\",background:\"#2B7CE9\"}},{border:\"#399605\",background:\"#255C03\",highlight:{border:\"#399605\",background:\"#255C03\"},hover:{border:\"#399605\",background:\"#255C03\"}},{border:\"#B70054\",background:\"#FF007E\",highlight:{border:\"#B70054\",background:\"#FF007E\"},hover:{border:\"#B70054\",background:\"#FF007E\"}},{border:\"#AD85E4\",background:\"#7C29F0\",highlight:{border:\"#D3BDF0\",background:\"#7C29F0\"},hover:{border:\"#D3BDF0\",background:\"#7C29F0\"}},{border:\"#4557FA\",background:\"#000EA1\",highlight:{border:\"#6E6EFD\",background:\"#000EA1\"},hover:{border:\"#6E6EFD\",background:\"#000EA1\"}},{border:\"#FFC0CB\",background:\"#FD5A77\",highlight:{border:\"#FFD1D9\",background:\"#FD5A77\"},hover:{border:\"#FFD1D9\",background:\"#FD5A77\"}},{border:\"#C2FABC\",background:\"#74D66A\",highlight:{border:\"#E6FFE3\",background:\"#74D66A\"},hover:{border:\"#E6FFE3\",background:\"#74D66A\"}},{border:\"#EE0000\",background:\"#990000\",highlight:{border:\"#FF3333\",background:\"#BB0000\"},hover:{border:\"#FF3333\",background:\"#BB0000\"}}],this.options={},this.defaultOptions={useDefaultGroups:!0},At(this.options,this.defaultOptions)}return Fn(t,[{key:\"setOptions\",value:function(t){var e=[\"useDefaultGroups\"];if(void 0!==t)for(var i in t)if(Object.prototype.hasOwnProperty.call(t,i)&&-1===Hr(e).call(e,i)){var n=t[i];this.add(i,n)}}},{key:\"clear\",value:function(){this._groups=new vd,this._groupNames=[]}},{key:\"get\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this._groups.get(t);if(void 0===i&&e)if(!1===this.options.useDefaultGroups&&this._groupNames.length>0){var n=this._groupIndex%this._groupNames.length;++this._groupIndex,(i={}).color=this._groups.get(this._groupNames[n]),this._groups.set(t,i)}else{var o=this._defaultIndex%this._defaultGroups.length;this._defaultIndex++,(i={}).color=this._defaultGroups[o],this._groups.set(t,i)}return i}},{key:\"add\",value:function(t,e){return this._groups.has(t)||this._groupNames.push(t),this._groups.set(t,e),e}}]),t}();gt({target:\"Number\",stat:!0},{isNaN:function(t){return t!=t}});var yd=k.Number.isNaN,md=a.isFinite,bd=Number.isFinite||function(t){return\"number\"==typeof t&&md(t)};gt({target:\"Number\",stat:!0},{isFinite:bd});var wd=k.Number.isFinite,kd=Gi.some,_d=Ao(\"some\");gt({target:\"Array\",proto:!0,forced:!_d},{some:function(t){return kd(this,t,arguments.length>1?arguments[1]:void 0)}});var xd=Ht(\"Array\").some,Ed=Array.prototype,Od=function(t){var e=t.some;return t===Ed||t instanceof Array&&e===Ed.some?xd:e},Cd=x(\"Reflect\",\"construct\"),Sd=h((function(){function t(){}return!(Cd((function(){}),[],t)instanceof t)})),Td=!h((function(){Cd((function(){}))})),Md=Sd||Td;gt({target:\"Reflect\",stat:!0,forced:Md,sham:Md},{construct:function(t,e){ht(t),dt(e);var i=arguments.length<3?t:ht(arguments[2]);if(Td&&!Sd)return Cd(t,e,i);if(t==i){switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3])}var n=[null];return n.push.apply(n,e),new(Lt.apply(t,n))}var o=i.prototype,r=Fe(w(o)?o:Object.prototype),s=Function.apply.call(t,r,e);return w(s)?s:r}});var Pd=k.Reflect.construct,Dd=n((function(t){t.exports=function(t){if(void 0===t)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return t},t.exports.default=t.exports,t.exports.__esModule=!0})),Id=i(Dd),Bd=Xr;gt({target:\"Object\",stat:!0},{setPrototypeOf:$e});var zd=k.Object.setPrototypeOf,Nd=n((function(t){function e(i,n){return t.exports=e=zd||function(t,e){return t.__proto__=e,t},t.exports.default=t.exports,t.exports.__esModule=!0,e(i,n)}t.exports=e,t.exports.default=t.exports,t.exports.__esModule=!0}));i(Nd);var Ad=i(n((function(t){t.exports=function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Super expression must either be null or a function\");t.prototype=Bd(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&Nd(t,e)},t.exports.default=t.exports,t.exports.__esModule=!0}))),Fd=i(n((function(t){var e=vo.default;t.exports=function(t,i){if(i&&(\"object\"===e(i)||\"function\"==typeof i))return i;if(void 0!==i)throw new TypeError(\"Derived constructors may only return object or undefined\");return Dd(t)},t.exports.default=t.exports,t.exports.__esModule=!0}))),jd=ur,Rd=n((function(t){function e(i){return t.exports=e=zd?jd:function(t){return t.__proto__||jd(t)},t.exports.default=t.exports,t.exports.__esModule=!0,e(i)}t.exports=e,t.exports.default=t.exports,t.exports.__esModule=!0})),Ld=i(Rd),Hd=n((function(t){var e=function(t){var e,i=Object.prototype,n=i.hasOwnProperty,o=\"function\"==typeof Symbol?Symbol:{},r=o.iterator||\"@@iterator\",s=o.asyncIterator||\"@@asyncIterator\",a=o.toStringTag||\"@@toStringTag\";function h(t,e,i){return Object.defineProperty(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{h({},\"\")}catch(t){h=function(t,e,i){return t[e]=i}}function l(t,e,i,n){var o=e&&e.prototype instanceof g?e:g,r=Object.create(o.prototype),s=new T(n||[]);return r._invoke=function(t,e,i){var n=c;return function(o,r){if(n===f)throw new Error(\"Generator is already running\");if(n===p){if(\"throw\"===o)throw r;return P()}for(i.method=o,i.arg=r;;){var s=i.delegate;if(s){var a=O(s,i);if(a){if(a===v)continue;return a}}if(\"next\"===i.method)i.sent=i._sent=i.arg;else if(\"throw\"===i.method){if(n===c)throw n=p,i.arg;i.dispatchException(i.arg)}else\"return\"===i.method&&i.abrupt(\"return\",i.arg);n=f;var h=d(t,e,i);if(\"normal\"===h.type){if(n=i.done?p:u,h.arg===v)continue;return{value:h.arg,done:i.done}}\"throw\"===h.type&&(n=p,i.method=\"throw\",i.arg=h.arg)}}}(t,i,s),r}function d(t,e,i){try{return{type:\"normal\",arg:t.call(e,i)}}catch(t){return{type:\"throw\",arg:t}}}t.wrap=l;var c=\"suspendedStart\",u=\"suspendedYield\",f=\"executing\",p=\"completed\",v={};function g(){}function y(){}function m(){}var b={};b[r]=function(){return this};var w=Object.getPrototypeOf,k=w&&w(w(M([])));k&&k!==i&&n.call(k,r)&&(b=k);var _=m.prototype=g.prototype=Object.create(b);function x(t){[\"next\",\"throw\",\"return\"].forEach((function(e){h(t,e,(function(t){return this._invoke(e,t)}))}))}function E(t,e){function i(o,r,s,a){var h=d(t[o],t,r);if(\"throw\"!==h.type){var l=h.arg,c=l.value;return c&&\"object\"==typeof c&&n.call(c,\"__await\")?e.resolve(c.__await).then((function(t){i(\"next\",t,s,a)}),(function(t){i(\"throw\",t,s,a)})):e.resolve(c).then((function(t){l.value=t,s(l)}),(function(t){return i(\"throw\",t,s,a)}))}a(h.arg)}var o;this._invoke=function(t,n){function r(){return new e((function(e,o){i(t,n,e,o)}))}return o=o?o.then(r,r):r()}}function O(t,i){var n=t.iterator[i.method];if(n===e){if(i.delegate=null,\"throw\"===i.method){if(t.iterator.return&&(i.method=\"return\",i.arg=e,O(t,i),\"throw\"===i.method))return v;i.method=\"throw\",i.arg=new TypeError(\"The iterator does not provide a 'throw' method\")}return v}var o=d(n,t.iterator,i.arg);if(\"throw\"===o.type)return i.method=\"throw\",i.arg=o.arg,i.delegate=null,v;var r=o.arg;return r?r.done?(i[t.resultName]=r.value,i.next=t.nextLoc,\"return\"!==i.method&&(i.method=\"next\",i.arg=e),i.delegate=null,v):r:(i.method=\"throw\",i.arg=new TypeError(\"iterator result is not an object\"),i.delegate=null,v)}function C(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function S(t){var e=t.completion||{};e.type=\"normal\",delete e.arg,t.completion=e}function T(t){this.tryEntries=[{tryLoc:\"root\"}],t.forEach(C,this),this.reset(!0)}function M(t){if(t){var i=t[r];if(i)return i.call(t);if(\"function\"==typeof t.next)return t;if(!isNaN(t.length)){var o=-1,s=function i(){for(;++o<t.length;)if(n.call(t,o))return i.value=t[o],i.done=!1,i;return i.value=e,i.done=!0,i};return s.next=s}}return{next:P}}function P(){return{value:e,done:!0}}return y.prototype=_.constructor=m,m.constructor=y,y.displayName=h(m,a,\"GeneratorFunction\"),t.isGeneratorFunction=function(t){var e=\"function\"==typeof t&&t.constructor;return!!e&&(e===y||\"GeneratorFunction\"===(e.displayName||e.name))},t.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,m):(t.__proto__=m,h(t,a,\"GeneratorFunction\")),t.prototype=Object.create(_),t},t.awrap=function(t){return{__await:t}},x(E.prototype),E.prototype[s]=function(){return this},t.AsyncIterator=E,t.async=function(e,i,n,o,r){void 0===r&&(r=Promise);var s=new E(l(e,i,n,o),r);return t.isGeneratorFunction(i)?s:s.next().then((function(t){return t.done?t.value:s.next()}))},x(_),h(_,a,\"Generator\"),_[r]=function(){return this},_.toString=function(){return\"[object Generator]\"},t.keys=function(t){var e=[];for(var i in t)e.push(i);return e.reverse(),function i(){for(;e.length;){var n=e.pop();if(n in t)return i.value=n,i.done=!1,i}return i.done=!0,i}},t.values=M,T.prototype={constructor:T,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method=\"next\",this.arg=e,this.tryEntries.forEach(S),!t)for(var i in this)\"t\"===i.charAt(0)&&n.call(this,i)&&!isNaN(+i.slice(1))&&(this[i]=e)},stop:function(){this.done=!0;var t=this.tryEntries[0].completion;if(\"throw\"===t.type)throw t.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var i=this;function o(n,o){return a.type=\"throw\",a.arg=t,i.next=n,o&&(i.method=\"next\",i.arg=e),!!o}for(var r=this.tryEntries.length-1;r>=0;--r){var s=this.tryEntries[r],a=s.completion;if(\"root\"===s.tryLoc)return o(\"end\");if(s.tryLoc<=this.prev){var h=n.call(s,\"catchLoc\"),l=n.call(s,\"finallyLoc\");if(h&&l){if(this.prev<s.catchLoc)return o(s.catchLoc,!0);if(this.prev<s.finallyLoc)return o(s.finallyLoc)}else if(h){if(this.prev<s.catchLoc)return o(s.catchLoc,!0)}else{if(!l)throw new Error(\"try statement without catch or finally\");if(this.prev<s.finallyLoc)return o(s.finallyLoc)}}}},abrupt:function(t,e){for(var i=this.tryEntries.length-1;i>=0;--i){var o=this.tryEntries[i];if(o.tryLoc<=this.prev&&n.call(o,\"finallyLoc\")&&this.prev<o.finallyLoc){var r=o;break}}r&&(\"break\"===t||\"continue\"===t)&&r.tryLoc<=e&&e<=r.finallyLoc&&(r=null);var s=r?r.completion:{};return s.type=t,s.arg=e,r?(this.method=\"next\",this.next=r.finallyLoc,v):this.complete(s)},complete:function(t,e){if(\"throw\"===t.type)throw t.arg;return\"break\"===t.type||\"continue\"===t.type?this.next=t.arg:\"return\"===t.type?(this.rval=this.arg=t.arg,this.method=\"return\",this.next=\"end\"):\"normal\"===t.type&&e&&(this.next=e),v},finish:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var i=this.tryEntries[e];if(i.finallyLoc===t)return this.complete(i.completion,i.afterLoc),S(i),v}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var i=this.tryEntries[e];if(i.tryLoc===t){var n=i.completion;if(\"throw\"===n.type){var o=n.arg;S(i)}return o}}throw new Error(\"illegal catch attempt\")},delegateYield:function(t,i,n){return this.delegate={iterator:M(t),resultName:i,nextLoc:n},\"next\"===this.method&&(this.arg=e),v}},t}(t.exports);try{regeneratorRuntime=e}catch(t){Function(\"r\",\"regeneratorRuntime = r\")(e)}})),Wd=function(t){return function(e,i,n,o){ht(i);var r=A(e),s=y(r),a=kt(r.length),h=t?a-1:0,l=t?-1:1;if(n<2)for(;;){if(h in s){o=s[h],h+=l;break}if(h+=l,t?h<0:a<=h)throw TypeError(\"Reduce of empty array with no initial value\")}for(;t?h>=0:a>h;h+=l)h in s&&(o=i(o,s[h],h,r));return o}},qd={left:Wd(!1),right:Wd(!0)},Vd=\"process\"==v(a.process),Ud=qd.left,Yd=Ao(\"reduce\");gt({target:\"Array\",proto:!0,forced:!Yd||!Vd&&M>79&&M<83},{reduce:function(t){return Ud(this,t,arguments.length,arguments.length>1?arguments[1]:void 0)}});var Xd=Ht(\"Array\").reduce,Gd=Array.prototype,Kd=function(t){var e=t.reduce;return t===Gd||t instanceof Array&&e===Gd.reduce?Xd:e},$d=function(t,e,i,n,o,r,s,a){for(var h,l=o,d=0,c=!!s&&lt(s,a,3);d<n;){if(d in i){if(h=c?c(i[d],d,e):i[d],r>0&&zi(h))l=$d(t,e,h,kt(h.length),l,r-1)-1;else{if(l>=9007199254740991)throw TypeError(\"Exceed the acceptable array length\");t[l]=h}l++}d++}return l},Zd=$d;gt({target:\"Array\",proto:!0},{flatMap:function(t){var e,i=A(this),n=kt(i.length);return ht(t),(e=Ui(i,0)).length=Zd(e,i,i,n,0,1,t,arguments.length>1?arguments[1]:void 0),e}});var Qd=Ht(\"Array\").flatMap,Jd=Array.prototype,tc=function(t){var e=t.flatMap;return t===Jd||t instanceof Array&&e===Jd.flatMap?Qd:e};ad(\"Set\",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),pd);var ec=k.Set,ic=fo,nc=function(t){var e=yi(t);if(\"function\"!=typeof e)throw TypeError(String(t)+\" is not iterable\");return dt(e.call(t))},oc=Math.floor,rc=function(t,e){var i=t.length,n=oc(i/2);return i<8?sc(t,e):ac(rc(t.slice(0,n),e),rc(t.slice(n),e),e)},sc=function(t,e){for(var i,n,o=t.length,r=1;r<o;){for(n=r,i=t[r];n&&e(t[n-1],i)>0;)t[n]=t[--n];n!==r++&&(t[n]=i)}return t},ac=function(t,e,i){for(var n=t.length,o=e.length,r=0,s=0,a=[];r<n||s<o;)r<n&&s<o?a.push(i(t[r],e[s])<=0?t[r++]:e[s++]):a.push(r<n?t[r++]:e[s++]);return a},hc=rc,lc=E.match(/firefox\\/(\\d+)/i),dc=!!lc&&+lc[1],cc=/MSIE|Trident/.test(E),uc=E.match(/AppleWebKit\\/(\\d+)\\./),fc=!!uc&&+uc[1],pc=[],vc=pc.sort,gc=h((function(){pc.sort(void 0)})),yc=h((function(){pc.sort(null)})),mc=Ao(\"sort\"),bc=!h((function(){if(M)return M<70;if(!(dc&&dc>3)){if(cc)return!0;if(fc)return fc<603;var t,e,i,n,o=\"\";for(t=65;t<76;t++){switch(e=String.fromCharCode(t),t){case 66:case 69:case 70:case 72:i=3;break;case 68:case 71:i=4;break;default:i=2}for(n=0;n<47;n++)pc.push({k:e+n,v:i})}for(pc.sort((function(t,e){return e.v-t.v})),n=0;n<pc.length;n++)e=pc[n].k.charAt(0),o.charAt(o.length-1)!==e&&(o+=e);return\"DGBEFHACIJK\"!==o}}));gt({target:\"Array\",proto:!0,forced:gc||!yc||!mc||!bc},{sort:function(t){void 0!==t&&ht(t);var e=A(this);if(bc)return void 0===t?vc.call(e):vc.call(e,t);var i,n,o=[],r=kt(e.length);for(n=0;n<r;n++)n in e&&o.push(e[n]);for(i=(o=hc(o,function(t){return function(e,i){return void 0===i?-1:void 0===e?1:void 0!==t?+t(e,i)||0:Qt(e)>Qt(i)?1:-1}}(t))).length,n=0;n<i;)e[n]=o[n++];for(;n<r;)delete e[n++];return e}});var wc,kc=Ht(\"Array\").sort,_c=Array.prototype,xc=function(t){var e=t.sort;return t===_c||t instanceof Array&&e===_c.sort?kc:e},Ec=Ht(\"Array\").keys,Oc=Array.prototype,Cc={DOMTokenList:!0,NodeList:!0},Sc=function(t){var e=t.keys;return t===Oc||t instanceof Array&&e===Oc.keys||Cc.hasOwnProperty(We(t))?Ec:e},Tc=Ht(\"Array\").values,Mc=Array.prototype,Pc={DOMTokenList:!0,NodeList:!0},Dc=function(t){var e=t.values;return t===Mc||t instanceof Array&&e===Mc.values||Pc.hasOwnProperty(We(t))?Tc:e},Ic=Ht(\"Array\").entries,Bc=Array.prototype,zc={DOMTokenList:!0,NodeList:!0},Nc=function(t){var e=t.entries;return t===Bc||t instanceof Array&&e===Bc.entries||zc.hasOwnProperty(We(t))?Ic:e},Ac=new Uint8Array(16);function Fc(){if(!wc&&!(wc=\"undefined\"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||\"undefined\"!=typeof msCrypto&&\"function\"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error(\"crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported\");return wc(Ac)}var jc=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function Rc(t){return\"string\"==typeof t&&jc.test(t)}for(var Lc=[],Hc=0;Hc<256;++Hc)Lc.push((Hc+256).toString(16).substr(1));function Wc(t,e,i){var n=(t=t||{}).random||(t.rng||Fc)();if(n[6]=15&n[6]|64,n[8]=63&n[8]|128,e){i=i||0;for(var o=0;o<16;++o)e[i+o]=n[o];return e}return function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=(Lc[t[e+0]]+Lc[t[e+1]]+Lc[t[e+2]]+Lc[t[e+3]]+\"-\"+Lc[t[e+4]]+Lc[t[e+5]]+\"-\"+Lc[t[e+6]]+Lc[t[e+7]]+\"-\"+Lc[t[e+8]]+Lc[t[e+9]]+\"-\"+Lc[t[e+10]]+Lc[t[e+11]]+Lc[t[e+12]]+Lc[t[e+13]]+Lc[t[e+14]]+Lc[t[e+15]]).toLowerCase();if(!Rc(i))throw TypeError(\"Stringified UUID is invalid\");return i}(n)}function qc(t,e){var i=zo(t);if(On){var n=On(t);e&&(n=mr(n).call(n,(function(e){return Mn(t,e).enumerable}))),i.push.apply(i,n)}return i}function Vc(t){for(var e=1;e<arguments.length;e++){var i,n=null!=arguments[e]?arguments[e]:{};if(e%2)Wo(i=qc(Object(n),!0)).call(i,(function(e){jn(t,e,n[e])}));else if(Dn)In(t,Dn(n));else{var o;Wo(o=qc(Object(n))).call(o,(function(e){zn(t,e,Mn(n,e))}))}}return t}function Uc(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}function Yc(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return Xc(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Xc(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function Xc(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}var Gc=function(){function t(e,i,n){var o,r,s;Nn(this,t),this._source=e,this._transformers=i,this._target=n,this._listeners={add:Vt(o=this._add).call(o,this),remove:Vt(r=this._remove).call(r,this),update:Vt(s=this._update).call(s,this)}}return Fn(t,[{key:\"all\",value:function(){return this._target.update(this._transformItems(this._source.get())),this}},{key:\"start\",value:function(){return this._source.on(\"add\",this._listeners.add),this._source.on(\"remove\",this._listeners.remove),this._source.on(\"update\",this._listeners.update),this}},{key:\"stop\",value:function(){return this._source.off(\"add\",this._listeners.add),this._source.off(\"remove\",this._listeners.remove),this._source.off(\"update\",this._listeners.update),this}},{key:\"_transformItems\",value:function(t){var e;return Kd(e=this._transformers).call(e,(function(t,e){return e(t)}),t)}},{key:\"_add\",value:function(t,e){null!=e&&this._target.add(this._transformItems(this._source.get(e.items)))}},{key:\"_update\",value:function(t,e){null!=e&&this._target.update(this._transformItems(this._source.get(e.items)))}},{key:\"_remove\",value:function(t,e){null!=e&&this._target.remove(this._transformItems(e.oldData))}}]),t}(),Kc=function(){function t(e){Nn(this,t),this._source=e,this._transformers=[]}return Fn(t,[{key:\"filter\",value:function(t){return this._transformers.push((function(e){return mr(e).call(e,t)})),this}},{key:\"map\",value:function(t){return this._transformers.push((function(e){return Io(e).call(e,t)})),this}},{key:\"flatMap\",value:function(t){return this._transformers.push((function(e){return tc(e).call(e,t)})),this}},{key:\"to\",value:function(t){return new Gc(this._source,this._transformers,t)}}]),t}();function $c(t){return\"string\"==typeof t||\"number\"==typeof t}var Zc=function(){function t(e){Nn(this,t),this._queue=[],this._timeout=null,this._extended=null,this.delay=null,this.max=1/0,this.setOptions(e)}return Fn(t,[{key:\"setOptions\",value:function(t){t&&void 0!==t.delay&&(this.delay=t.delay),t&&void 0!==t.max&&(this.max=t.max),this._flushIfNeeded()}},{key:\"destroy\",value:function(){if(this.flush(),this._extended){for(var t=this._extended.object,e=this._extended.methods,i=0;i<e.length;i++){var n=e[i];n.original?t[n.name]=n.original:delete t[n.name]}this._extended=null}}},{key:\"replace\",value:function(t,e){var i=this,n=t[e];if(!n)throw new Error(\"Method \"+e+\" undefined\");t[e]=function(){for(var t=arguments.length,e=new Array(t),o=0;o<t;o++)e[o]=arguments[o];i.queue({args:e,fn:n,context:this})}}},{key:\"queue\",value:function(t){\"function\"==typeof t?this._queue.push({fn:t}):this._queue.push(t),this._flushIfNeeded()}},{key:\"_flushIfNeeded\",value:function(){var t=this;this._queue.length>this.max&&this.flush(),null!=this._timeout&&(clearTimeout(this._timeout),this._timeout=null),this.queue.length>0&&\"number\"==typeof this.delay&&(this._timeout=rs((function(){t.flush()}),this.delay))}},{key:\"flush\",value:function(){var t,e;Wo(t=er(e=this._queue).call(e,0)).call(t,(function(t){t.fn.apply(t.context||t.fn,t.args||[])}))}}],[{key:\"extend\",value:function(e,i){var n=new t(i);if(void 0!==e.flush)throw new Error(\"Target object already has a property flush\");e.flush=function(){n.flush()};var o=[{name:\"flush\",original:void 0}];if(i&&i.replace)for(var r=0;r<i.replace.length;r++){var s=i.replace[r];o.push({name:s,original:e[s]}),n.replace(e,s)}return n._extended={object:e,methods:o},n}}]),t}(),Qc=function(){function t(){Nn(this,t),this._subscribers={\"*\":[],add:[],remove:[],update:[]},this.subscribe=t.prototype.on,this.unsubscribe=t.prototype.off}return Fn(t,[{key:\"_trigger\",value:function(t,e,i){var n,o;if(\"*\"===t)throw new Error(\"Cannot trigger event *\");Wo(n=Eo(o=[]).call(o,wo(this._subscribers[t]),wo(this._subscribers[\"*\"]))).call(n,(function(n){n(t,e,null!=i?i:null)}))}},{key:\"on\",value:function(t,e){\"function\"==typeof e&&this._subscribers[t].push(e)}},{key:\"off\",value:function(t,e){var i;this._subscribers[t]=mr(i=this._subscribers[t]).call(i,(function(t){return t!==e}))}}]),t}(),Jc=function(t){function e(t){Nn(this,e),this._pairs=t}return Fn(e,[{key:t,value:Hd.mark((function t(){var e,i,n,o,r;return Hd.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:e=Yc(this._pairs),t.prev=1,e.s();case 3:if((i=e.n()).done){t.next=9;break}return n=uo(i.value,2),o=n[0],r=n[1],t.next=7,[o,r];case 7:t.next=3;break;case 9:t.next=14;break;case 11:t.prev=11,t.t0=t.catch(1),e.e(t.t0);case 14:return t.prev=14,e.f(),t.finish(14);case 17:case\"end\":return t.stop()}}),t,this,[[1,11,14,17]])}))},{key:\"entries\",value:Hd.mark((function t(){var e,i,n,o,r;return Hd.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:e=Yc(this._pairs),t.prev=1,e.s();case 3:if((i=e.n()).done){t.next=9;break}return n=uo(i.value,2),o=n[0],r=n[1],t.next=7,[o,r];case 7:t.next=3;break;case 9:t.next=14;break;case 11:t.prev=11,t.t0=t.catch(1),e.e(t.t0);case 14:return t.prev=14,e.f(),t.finish(14);case 17:case\"end\":return t.stop()}}),t,this,[[1,11,14,17]])}))},{key:\"keys\",value:Hd.mark((function t(){var e,i,n,o;return Hd.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:e=Yc(this._pairs),t.prev=1,e.s();case 3:if((i=e.n()).done){t.next=9;break}return n=uo(i.value,1),o=n[0],t.next=7,o;case 7:t.next=3;break;case 9:t.next=14;break;case 11:t.prev=11,t.t0=t.catch(1),e.e(t.t0);case 14:return t.prev=14,e.f(),t.finish(14);case 17:case\"end\":return t.stop()}}),t,this,[[1,11,14,17]])}))},{key:\"values\",value:Hd.mark((function t(){var e,i,n,o;return Hd.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:e=Yc(this._pairs),t.prev=1,e.s();case 3:if((i=e.n()).done){t.next=9;break}return n=uo(i.value,2),o=n[1],t.next=7,o;case 7:t.next=3;break;case 9:t.next=14;break;case 11:t.prev=11,t.t0=t.catch(1),e.e(t.t0);case 14:return t.prev=14,e.f(),t.finish(14);case 17:case\"end\":return t.stop()}}),t,this,[[1,11,14,17]])}))},{key:\"toIdArray\",value:function(){var t;return Io(t=wo(this._pairs)).call(t,(function(t){return t[0]}))}},{key:\"toItemArray\",value:function(){var t;return Io(t=wo(this._pairs)).call(t,(function(t){return t[1]}))}},{key:\"toEntryArray\",value:function(){return wo(this._pairs)}},{key:\"toObjectMap\",value:function(){var t,e=Gr(null),i=Yc(this._pairs);try{for(i.s();!(t=i.n()).done;){var n=uo(t.value,2),o=n[0],r=n[1];e[o]=r}}catch(t){i.e(t)}finally{i.f()}return e}},{key:\"toMap\",value:function(){return new vd(this._pairs)}},{key:\"toIdSet\",value:function(){return new ec(this.toIdArray())}},{key:\"toItemSet\",value:function(){return new ec(this.toItemArray())}},{key:\"cache\",value:function(){return new e(wo(this._pairs))}},{key:\"distinct\",value:function(t){var e,i=new ec,n=Yc(this._pairs);try{for(n.s();!(e=n.n()).done;){var o=uo(e.value,2),r=o[0],s=o[1];i.add(t(s,r))}}catch(t){n.e(t)}finally{n.f()}return i}},{key:\"filter\",value:function(t){var i=this._pairs;return new e(jn({},ic,Hd.mark((function e(){var n,o,r,s,a;return Hd.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:n=Yc(i),e.prev=1,n.s();case 3:if((o=n.n()).done){e.next=10;break}if(r=uo(o.value,2),s=r[0],a=r[1],!t(a,s)){e.next=8;break}return e.next=8,[s,a];case 8:e.next=3;break;case 10:e.next=15;break;case 12:e.prev=12,e.t0=e.catch(1),n.e(e.t0);case 15:return e.prev=15,n.f(),e.finish(15);case 18:case\"end\":return e.stop()}}),e,null,[[1,12,15,18]])}))))}},{key:\"forEach\",value:function(t){var e,i=Yc(this._pairs);try{for(i.s();!(e=i.n()).done;){var n=uo(e.value,2),o=n[0];t(n[1],o)}}catch(t){i.e(t)}finally{i.f()}}},{key:\"map\",value:function(t){var i=this._pairs;return new e(jn({},ic,Hd.mark((function e(){var n,o,r,s,a;return Hd.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:n=Yc(i),e.prev=1,n.s();case 3:if((o=n.n()).done){e.next=9;break}return r=uo(o.value,2),s=r[0],a=r[1],e.next=7,[s,t(a,s)];case 7:e.next=3;break;case 9:e.next=14;break;case 11:e.prev=11,e.t0=e.catch(1),n.e(e.t0);case 14:return e.prev=14,n.f(),e.finish(14);case 17:case\"end\":return e.stop()}}),e,null,[[1,11,14,17]])}))))}},{key:\"max\",value:function(t){var e=nc(this._pairs),i=e.next();if(i.done)return null;for(var n=i.value[1],o=t(i.value[1],i.value[0]);!(i=e.next()).done;){var r=uo(i.value,2),s=r[0],a=r[1],h=t(a,s);h>o&&(o=h,n=a)}return n}},{key:\"min\",value:function(t){var e=nc(this._pairs),i=e.next();if(i.done)return null;for(var n=i.value[1],o=t(i.value[1],i.value[0]);!(i=e.next()).done;){var r=uo(i.value,2),s=r[0],a=r[1],h=t(a,s);h<o&&(o=h,n=a)}return n}},{key:\"reduce\",value:function(t,e){var i,n=Yc(this._pairs);try{for(n.s();!(i=n.n()).done;){var o=uo(i.value,2),r=o[0];e=t(e,o[1],r)}}catch(t){n.e(t)}finally{n.f()}return e}},{key:\"sort\",value:function(t){var i=this;return new e(jn({},ic,(function(){var e;return nc(xc(e=wo(i._pairs)).call(e,(function(e,i){var n=uo(e,2),o=n[0],r=n[1],s=uo(i,2),a=s[0],h=s[1];return t(r,h,o,a)})))})))}}]),e}(ic);var tu=function(t){Ad(i,t);var e=Uc(i);function i(t,n){var o;return Nn(this,i),(o=e.call(this))._queue=null,t&&!So(t)&&(n=t,t=[]),o._options=n||{},o._data=new vd,o.length=0,o._idProp=o._options.fieldId||\"id\",t&&t.length&&o.add(t),o.setOptions(n),o}return Fn(i,[{key:\"idProp\",get:function(){return this._idProp}},{key:\"setOptions\",value:function(t){t&&void 0!==t.queue&&(!1===t.queue?this._queue&&(this._queue.destroy(),this._queue=null):(this._queue||(this._queue=Zc.extend(this,{replace:[\"add\",\"update\",\"remove\"]})),t.queue&&\"object\"===go(t.queue)&&this._queue.setOptions(t.queue)))}},{key:\"add\",value:function(t,e){var i,n=this,o=[];if(So(t)){var r=Io(t).call(t,(function(t){return t[n._idProp]}));if(Od(r).call(r,(function(t){return n._data.has(t)})))throw new Error(\"A duplicate id was found in the parameter array.\");for(var s=0,a=t.length;s<a;s++)i=this._addItem(t[s]),o.push(i)}else{if(!t||\"object\"!==go(t))throw new Error(\"Unknown dataType\");i=this._addItem(t),o.push(i)}return o.length&&this._trigger(\"add\",{items:o},e),o}},{key:\"update\",value:function(t,e){var i=this,n=[],o=[],r=[],s=[],a=this._idProp,h=function(t){var e=t[a];if(null!=e&&i._data.has(e)){var h=t,l=At({},i._data.get(e)),d=i._updateItem(h);o.push(d),s.push(h),r.push(l)}else{var c=i._addItem(t);n.push(c)}};if(So(t))for(var l=0,d=t.length;l<d;l++)t[l]&&\"object\"===go(t[l])?h(t[l]):console.warn(\"Ignoring input item, which is not an object at index \"+l);else{if(!t||\"object\"!==go(t))throw new Error(\"Unknown dataType\");h(t)}if(n.length&&this._trigger(\"add\",{items:n},e),o.length){var c={items:o,oldData:r,data:s};this._trigger(\"update\",c,e)}return Eo(n).call(n,o)}},{key:\"updateOnly\",value:function(t,e){var i,n=this;So(t)||(t=[t]);var o=Io(i=Io(t).call(t,(function(t){var e=n._data.get(t[n._idProp]);if(null==e)throw new Error(\"Updating non-existent items is not allowed.\");return{oldData:e,update:t}}))).call(i,(function(t){var e=t.oldData,i=t.update,o=e[n._idProp],r=ih(e,i);return n._data.set(o,r),{id:o,oldData:e,updatedData:r}}));if(o.length){var r={items:Io(o).call(o,(function(t){return t.id})),oldData:Io(o).call(o,(function(t){return t.oldData})),data:Io(o).call(o,(function(t){return t.updatedData}))};return this._trigger(\"update\",r,e),r.items}return[]}},{key:\"get\",value:function(t,e){var i=void 0,n=void 0,o=void 0;$c(t)?(i=t,o=e):So(t)?(n=t,o=e):o=t;var r,s=o&&\"Object\"===o.returnType?\"Object\":\"Array\",a=o&&mr(o),h=[],l=void 0,d=void 0,c=void 0;if(null!=i)(l=this._data.get(i))&&a&&!a(l)&&(l=void 0);else if(null!=n)for(var u=0,f=n.length;u<f;u++)null==(l=this._data.get(n[u]))||a&&!a(l)||h.push(l);else for(var p,v=0,g=(d=wo(Sc(p=this._data).call(p))).length;v<g;v++)c=d[v],null==(l=this._data.get(c))||a&&!a(l)||h.push(l);if(o&&o.order&&null==i&&this._sort(h,o.order),o&&o.fields){var y=o.fields;if(null!=i&&null!=l)l=this._filterFields(l,y);else for(var m=0,b=h.length;m<b;m++)h[m]=this._filterFields(h[m],y)}if(\"Object\"==s){for(var w={},k=0,_=h.length;k<_;k++){var x=h[k];w[x[this._idProp]]=x}return w}return null!=i?null!==(r=l)&&void 0!==r?r:null:h}},{key:\"getIds\",value:function(t){var e=this._data,i=t&&mr(t),n=t&&t.order,o=wo(Sc(e).call(e)),r=[];if(i)if(n){for(var s=[],a=0,h=o.length;a<h;a++){var l=o[a],d=this._data.get(l);null!=d&&i(d)&&s.push(d)}this._sort(s,n);for(var c=0,u=s.length;c<u;c++)r.push(s[c][this._idProp])}else for(var f=0,p=o.length;f<p;f++){var v=o[f],g=this._data.get(v);null!=g&&i(g)&&r.push(g[this._idProp])}else if(n){for(var y=[],m=0,b=o.length;m<b;m++){var w=o[m];y.push(e.get(w))}this._sort(y,n);for(var k=0,_=y.length;k<_;k++)r.push(y[k][this._idProp])}else for(var x=0,E=o.length;x<E;x++){var O=o[x],C=e.get(O);null!=C&&r.push(C[this._idProp])}return r}},{key:\"getDataSet\",value:function(){return this}},{key:\"forEach\",value:function(t,e){var i=e&&mr(e),n=this._data,o=wo(Sc(n).call(n));if(e&&e.order)for(var r=this.get(e),s=0,a=r.length;s<a;s++){var h=r[s];t(h,h[this._idProp])}else for(var l=0,d=o.length;l<d;l++){var c=o[l],u=this._data.get(c);null==u||i&&!i(u)||t(u,c)}}},{key:\"map\",value:function(t,e){for(var i=e&&mr(e),n=[],o=this._data,r=wo(Sc(o).call(o)),s=0,a=r.length;s<a;s++){var h=r[s],l=this._data.get(h);null==l||i&&!i(l)||n.push(t(l,h))}return e&&e.order&&this._sort(n,e.order),n}},{key:\"_filterFields\",value:function(t,e){var i;return t?Kd(i=So(e)?e:zo(e)).call(i,(function(e,i){return e[i]=t[i],e}),{}):t}},{key:\"_sort\",value:function(t,e){if(\"string\"==typeof e){var i=e;xc(t).call(t,(function(t,e){var n=t[i],o=e[i];return n>o?1:n<o?-1:0}))}else{if(\"function\"!=typeof e)throw new TypeError(\"Order must be a function or a string\");xc(t).call(t,e)}}},{key:\"remove\",value:function(t,e){for(var i=[],n=[],o=So(t)?t:[t],r=0,s=o.length;r<s;r++){var a=this._remove(o[r]);if(a){var h=a[this._idProp];null!=h&&(i.push(h),n.push(a))}}return i.length&&this._trigger(\"remove\",{items:i,oldData:n},e),i}},{key:\"_remove\",value:function(t){var e;if($c(t)?e=t:t&&\"object\"===go(t)&&(e=t[this._idProp]),null!=e&&this._data.has(e)){var i=this._data.get(e)||null;return this._data.delete(e),--this.length,i}return null}},{key:\"clear\",value:function(t){for(var e,i=wo(Sc(e=this._data).call(e)),n=[],o=0,r=i.length;o<r;o++)n.push(this._data.get(i[o]));return this._data.clear(),this.length=0,this._trigger(\"remove\",{items:i,oldData:n},t),i}},{key:\"max\",value:function(t){var e,i,n=null,o=null,r=Yc(Dc(e=this._data).call(e));try{for(r.s();!(i=r.n()).done;){var s=i.value,a=s[t];\"number\"==typeof a&&(null==o||a>o)&&(n=s,o=a)}}catch(t){r.e(t)}finally{r.f()}return n||null}},{key:\"min\",value:function(t){var e,i,n=null,o=null,r=Yc(Dc(e=this._data).call(e));try{for(r.s();!(i=r.n()).done;){var s=i.value,a=s[t];\"number\"==typeof a&&(null==o||a<o)&&(n=s,o=a)}}catch(t){r.e(t)}finally{r.f()}return n||null}},{key:\"distinct\",value:function(t){for(var e=this._data,i=wo(Sc(e).call(e)),n=[],o=0,r=0,s=i.length;r<s;r++){for(var a=i[r],h=e.get(a)[t],l=!1,d=0;d<o;d++)if(n[d]==h){l=!0;break}l||void 0===h||(n[o]=h,o++)}return n}},{key:\"_addItem\",value:function(t){var e=function(t,e){return null==t[e]&&(t[e]=Wc()),t}(t,this._idProp),i=e[this._idProp];if(this._data.has(i))throw new Error(\"Cannot add item: item with id \"+i+\" already exists\");return this._data.set(i,e),++this.length,i}},{key:\"_updateItem\",value:function(t){var e=t[this._idProp];if(null==e)throw new Error(\"Cannot update item: item has no id (item: \"+es(t)+\")\");var i=this._data.get(e);if(!i)throw new Error(\"Cannot update item: no item with id \"+e+\" found\");return this._data.set(e,Vc(Vc({},i),t)),e}},{key:\"stream\",value:function(t){if(t){var e=this._data;return new Jc(jn({},ic,Hd.mark((function i(){var n,o,r,s;return Hd.wrap((function(i){for(;;)switch(i.prev=i.next){case 0:n=Yc(t),i.prev=1,n.s();case 3:if((o=n.n()).done){i.next=11;break}if(r=o.value,null==(s=e.get(r))){i.next=9;break}return i.next=9,[r,s];case 9:i.next=3;break;case 11:i.next=16;break;case 13:i.prev=13,i.t0=i.catch(1),n.e(i.t0);case 16:return i.prev=16,n.f(),i.finish(16);case 19:case\"end\":return i.stop()}}),i,null,[[1,13,16,19]])}))))}var i;return new Jc(jn({},ic,Vt(i=Nc(this._data)).call(i,this._data)))}}]),i}(Qc),eu=function(t){Ad(i,t);var e=Uc(i);function i(t,n){var o,r;return Nn(this,i),(r=e.call(this)).length=0,r._ids=new ec,r._options=n||{},r._listener=Vt(o=r._onEvent).call(o,Id(r)),r.setData(t),r}return Fn(i,[{key:\"idProp\",get:function(){return this.getDataSet().idProp}},{key:\"setData\",value:function(t){if(this._data){this._data.off&&this._data.off(\"*\",this._listener);var e=this._data.getIds({filter:mr(this._options)}),i=this._data.get(e);this._ids.clear(),this.length=0,this._trigger(\"remove\",{items:e,oldData:i})}if(null!=t){this._data=t;for(var n=this._data.getIds({filter:mr(this._options)}),o=0,r=n.length;o<r;o++){var s=n[o];this._ids.add(s)}this.length=n.length,this._trigger(\"add\",{items:n})}else this._data=new tu;this._data.on&&this._data.on(\"*\",this._listener)}},{key:\"refresh\",value:function(){for(var t=this._data.getIds({filter:mr(this._options)}),e=wo(this._ids),i={},n=[],o=[],r=[],s=0,a=t.length;s<a;s++){var h=t[s];i[h]=!0,this._ids.has(h)||(n.push(h),this._ids.add(h))}for(var l=0,d=e.length;l<d;l++){var c=e[l],u=this._data.get(c);null==u?console.error(\"If you see this, report it please.\"):i[c]||(o.push(c),r.push(u),this._ids.delete(c))}this.length+=n.length-o.length,n.length&&this._trigger(\"add\",{items:n}),o.length&&this._trigger(\"remove\",{items:o,oldData:r})}},{key:\"get\",value:function(t,e){if(null==this._data)return null;var i,n=null;$c(t)||So(t)?(n=t,i=e):i=t;var o=At({},this._options,i),r=mr(this._options),s=i&&mr(i);return r&&s&&(o.filter=function(t){return r(t)&&s(t)}),null==n?this._data.get(o):this._data.get(n,o)}},{key:\"getIds\",value:function(t){if(this._data.length){var e,i=mr(this._options),n=null!=t?mr(t):null;return e=n?i?function(t){return i(t)&&n(t)}:n:i,this._data.getIds({filter:e,order:t&&t.order})}return[]}},{key:\"forEach\",value:function(t,e){if(this._data){var i,n,o=mr(this._options),r=e&&mr(e);n=r?o?function(t){return o(t)&&r(t)}:r:o,Wo(i=this._data).call(i,t,{filter:n,order:e&&e.order})}}},{key:\"map\",value:function(t,e){if(this._data){var i,n,o=mr(this._options),r=e&&mr(e);return n=r?o?function(t){return o(t)&&r(t)}:r:o,Io(i=this._data).call(i,t,{filter:n,order:e&&e.order})}return[]}},{key:\"getDataSet\",value:function(){return this._data.getDataSet()}},{key:\"stream\",value:function(t){var e;return this._data.stream(t||jn({},ic,Vt(e=Sc(this._ids)).call(e,this._ids)))}},{key:\"dispose\",value:function(){var t;null!==(t=this._data)&&void 0!==t&&t.off&&this._data.off(\"*\",this._listener);var e,n=\"This data view has already been disposed of.\",o={get:function(){throw new Error(n)},set:function(){throw new Error(n)},configurable:!1},r=Yc(Co(i.prototype));try{for(r.s();!(e=r.n()).done;){var s=e.value;zn(this,s,o)}}catch(t){r.e(t)}finally{r.f()}}},{key:\"_onEvent\",value:function(t,e,i){if(e&&e.items&&this._data){var n=e.items,o=[],r=[],s=[],a=[],h=[],l=[];switch(t){case\"add\":for(var d=0,c=n.length;d<c;d++){var u=n[d];this.get(u)&&(this._ids.add(u),o.push(u))}break;case\"update\":for(var f=0,p=n.length;f<p;f++){var v=n[f];this.get(v)?this._ids.has(v)?(r.push(v),h.push(e.data[f]),a.push(e.oldData[f])):(this._ids.add(v),o.push(v)):this._ids.has(v)&&(this._ids.delete(v),s.push(v),l.push(e.oldData[f]))}break;case\"remove\":for(var g=0,y=n.length;g<y;g++){var m=n[g];this._ids.has(m)&&(this._ids.delete(m),s.push(m),l.push(e.oldData[g]))}}this.length+=o.length-s.length,o.length&&this._trigger(\"add\",{items:o},i),r.length&&this._trigger(\"update\",{items:r,oldData:a,data:h},i),s.length&&this._trigger(\"remove\",{items:s,oldData:l},i)}}}]),i}(Qc);function iu(t,e){return\"object\"===go(e)&&null!==e&&t===e.idProp&&\"function\"==typeof e.add&&\"function\"==typeof e.clear&&\"function\"==typeof e.distinct&&\"function\"==typeof Wo(e)&&\"function\"==typeof e.get&&\"function\"==typeof e.getDataSet&&\"function\"==typeof e.getIds&&\"number\"==typeof e.length&&\"function\"==typeof Io(e)&&\"function\"==typeof e.max&&\"function\"==typeof e.min&&\"function\"==typeof e.off&&\"function\"==typeof e.on&&\"function\"==typeof e.remove&&\"function\"==typeof e.setOptions&&\"function\"==typeof e.stream&&\"function\"==typeof e.update&&\"function\"==typeof e.updateOnly}function nu(t,e){return\"object\"===go(e)&&null!==e&&t===e.idProp&&\"function\"==typeof Wo(e)&&\"function\"==typeof e.get&&\"function\"==typeof e.getDataSet&&\"function\"==typeof e.getIds&&\"number\"==typeof e.length&&\"function\"==typeof Io(e)&&\"function\"==typeof e.off&&\"function\"==typeof e.on&&\"function\"==typeof e.stream&&iu(t,e.getDataSet())}var ou=Object.freeze({__proto__:null,DELETE:eh,DataSet:tu,DataStream:Jc,DataView:eu,Queue:Zc,createNewDataPipeFrom:function(t){return new Kc(t)},isDataSetLike:iu,isDataViewLike:nu}),ru=Tr.trim,su=a.parseFloat,au=1/su(xr+\"-0\")!=-1/0?function(t){var e=ru(Qt(t)),i=su(e);return 0===i&&\"-\"==e.charAt(0)?-0:i}:su;gt({global:!0,forced:parseFloat!=au},{parseFloat:au});var hu=k.parseFloat,lu=Li.f,du=h((function(){return!Object.getOwnPropertyNames(1)}));gt({target:\"Object\",stat:!0,forced:du},{getOwnPropertyNames:lu});var cu=k.Object,uu=function(t){return cu.getOwnPropertyNames(t)};function fu(t,e){var i=[\"node\",\"edge\",\"label\"],n=!0,o=Qh(e,\"chosen\");if(\"boolean\"==typeof o)n=o;else if(\"object\"===go(o)){if(-1===Hr(i).call(i,t))throw new Error(\"choosify: subOption '\"+t+\"' should be one of '\"+i.join(\"', '\")+\"'\");var r=Qh(e,[\"chosen\",t]);\"boolean\"!=typeof r&&\"function\"!=typeof r||(n=r)}return n}function pu(t,e,i){if(t.width<=0||t.height<=0)return!1;if(void 0!==i){var n={x:e.x-i.x,y:e.y-i.y};if(0!==i.angle){var o=-i.angle;e={x:Math.cos(o)*n.x-Math.sin(o)*n.y,y:Math.sin(o)*n.x+Math.cos(o)*n.y}}else e=n}var r=t.x+t.width,s=t.y+t.width;return t.left<e.x&&r>e.x&&t.top<e.y&&s>e.y}function vu(t){return\"string\"==typeof t&&\"\"!==t}function gu(t,e,i,n){var o=n.x,r=n.y;if(\"function\"==typeof n.distanceToBorder){var s=n.distanceToBorder(t,e),a=Math.sin(e)*s,h=Math.cos(e)*s;h===s?(o+=s,r=n.y):a===s?(o=n.x,r-=s):(o+=h,r-=a)}else n.shape.width>n.shape.height?(o=n.x+.5*n.shape.width,r=n.y-i):(o=n.x+i,r=n.y-.5*n.shape.height);return{x:o,y:r}}var yu=function(){function t(e){Nn(this,t),this.measureText=e,this.current=0,this.width=0,this.height=0,this.lines=[]}return Fn(t,[{key:\"_add\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:\"normal\";void 0===this.lines[t]&&(this.lines[t]={width:0,height:0,blocks:[]});var n=e;void 0!==e&&\"\"!==e||(n=\" \");var o=this.measureText(n,i),r=At({},Dc(o));r.text=e,r.width=o.width,r.mod=i,void 0!==e&&\"\"!==e||(r.width=0),this.lines[t].blocks.push(r),this.lines[t].width+=r.width}},{key:\"curWidth\",value:function(){var t=this.lines[this.current];return void 0===t?0:t.width}},{key:\"append\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"normal\";this._add(this.current,t,e)}},{key:\"newLine\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"normal\";this._add(this.current,t,e),this.current++}},{key:\"determineLineHeights\",value:function(){for(var t=0;t<this.lines.length;t++){var e=this.lines[t],i=0;if(void 0!==e.blocks)for(var n=0;n<e.blocks.length;n++){var o=e.blocks[n];i<o.height&&(i=o.height)}e.height=i}}},{key:\"determineLabelSize\",value:function(){for(var t=0,e=0,i=0;i<this.lines.length;i++){var n=this.lines[i];n.width>t&&(t=n.width),e+=n.height}this.width=t,this.height=e}},{key:\"removeEmptyBlocks\",value:function(){for(var t=[],e=0;e<this.lines.length;e++){var i=this.lines[e];if(0!==i.blocks.length&&(e!==this.lines.length-1||0!==i.width)){var n={};At(n,i),n.blocks=[];for(var o=void 0,r=[],s=0;s<i.blocks.length;s++){var a=i.blocks[s];0!==a.width?r.push(a):void 0===o&&(o=a)}0===r.length&&void 0!==o&&r.push(o),n.blocks=r,t.push(n)}}return t}},{key:\"finalize\",value:function(){this.determineLineHeights(),this.determineLabelSize();var t=this.removeEmptyBlocks();return{width:this.width,height:this.height,lines:t}}}]),t}(),mu={\"<b>\":/<b>/,\"<i>\":/<i>/,\"<code>\":/<code>/,\"</b>\":/<\\/b>/,\"</i>\":/<\\/i>/,\"</code>\":/<\\/code>/,\"*\":/\\*/,_:/_/,\"`\":/`/,afterBold:/[^*]/,afterItal:/[^_]/,afterMono:/[^`]/},bu=function(){function t(e){Nn(this,t),this.text=e,this.bold=!1,this.ital=!1,this.mono=!1,this.spacing=!1,this.position=0,this.buffer=\"\",this.modStack=[],this.blocks=[]}return Fn(t,[{key:\"mod\",value:function(){return 0===this.modStack.length?\"normal\":this.modStack[0]}},{key:\"modName\",value:function(){return 0===this.modStack.length?\"normal\":\"mono\"===this.modStack[0]?\"mono\":this.bold&&this.ital?\"boldital\":this.bold?\"bold\":this.ital?\"ital\":void 0}},{key:\"emitBlock\",value:function(){this.spacing&&(this.add(\" \"),this.spacing=!1),this.buffer.length>0&&(this.blocks.push({text:this.buffer,mod:this.modName()}),this.buffer=\"\")}},{key:\"add\",value:function(t){\" \"===t&&(this.spacing=!0),this.spacing&&(this.buffer+=\" \",this.spacing=!1),\" \"!=t&&(this.buffer+=t)}},{key:\"parseWS\",value:function(t){return!!/[ \\t]/.test(t)&&(this.mono?this.add(t):this.spacing=!0,!0)}},{key:\"setTag\",value:function(t){this.emitBlock(),this[t]=!0,this.modStack.unshift(t)}},{key:\"unsetTag\",value:function(t){this.emitBlock(),this[t]=!1,this.modStack.shift()}},{key:\"parseStartTag\",value:function(t,e){return!(this.mono||this[t]||!this.match(e))&&(this.setTag(t),!0)}},{key:\"match\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this.prepareRegExp(t),n=uo(i,2),o=n[0],r=n[1],s=o.test(this.text.substr(this.position,r));return s&&e&&(this.position+=r-1),s}},{key:\"parseEndTag\",value:function(t,e,i){var n=this.mod()===t;return!(!(n=\"mono\"===t?n&&this.mono:n&&!this.mono)||!this.match(e))&&(void 0!==i?(this.position===this.text.length-1||this.match(i,!1))&&this.unsetTag(t):this.unsetTag(t),!0)}},{key:\"replace\",value:function(t,e){return!!this.match(t)&&(this.add(e),this.position+=length-1,!0)}},{key:\"prepareRegExp\",value:function(t){var e,i;if(t instanceof RegExp)i=t,e=1;else{var n=mu[t];i=void 0!==n?n:new RegExp(t),e=t.length}return[i,e]}}]),t}(),wu=function(){function t(e,i,n,o){var r=this;Nn(this,t),this.ctx=e,this.parent=i,this.selected=n,this.hover=o;this.lines=new yu((function(t,i){if(void 0===t)return 0;var s=r.parent.getFormattingValues(e,n,o,i),a=0;\"\"!==t&&(a=r.ctx.measureText(t).width);return{width:a,values:s}}))}return Fn(t,[{key:\"process\",value:function(t){if(!vu(t))return this.lines.finalize();var e=this.parent.fontOptions;t=(t=t.replace(/\\r\\n/g,\"\\n\")).replace(/\\r/g,\"\\n\");var i=String(t).split(\"\\n\"),n=i.length;if(e.multi)for(var o=0;o<n;o++){var r=this.splitBlocks(i[o],e.multi);if(void 0!==r)if(0!==r.length){if(e.maxWdt>0)for(var s=0;s<r.length;s++){var a=r[s].mod,h=r[s].text;this.splitStringIntoLines(h,a,!0)}else for(var l=0;l<r.length;l++){var d=r[l].mod,c=r[l].text;this.lines.append(c,d)}this.lines.newLine()}else this.lines.newLine(\"\")}else if(e.maxWdt>0)for(var u=0;u<n;u++)this.splitStringIntoLines(i[u]);else for(var f=0;f<n;f++)this.lines.newLine(i[f]);return this.lines.finalize()}},{key:\"decodeMarkupSystem\",value:function(t){var e=\"none\";return\"markdown\"===t||\"md\"===t?e=\"markdown\":!0!==t&&\"html\"!==t||(e=\"html\"),e}},{key:\"splitHtmlBlocks\",value:function(t){for(var e=new bu(t),i=function(t){return!!/&/.test(t)&&(e.replace(e.text,\"&lt;\",\"<\")||e.replace(e.text,\"&amp;\",\"&\")||e.add(\"&\"),!0)};e.position<e.text.length;){var n=e.text.charAt(e.position);e.parseWS(n)||/</.test(n)&&(e.parseStartTag(\"bold\",\"<b>\")||e.parseStartTag(\"ital\",\"<i>\")||e.parseStartTag(\"mono\",\"<code>\")||e.parseEndTag(\"bold\",\"</b>\")||e.parseEndTag(\"ital\",\"</i>\")||e.parseEndTag(\"mono\",\"</code>\"))||i(n)||e.add(n),e.position++}return e.emitBlock(),e.blocks}},{key:\"splitMarkdownBlocks\",value:function(t){for(var e=this,i=new bu(t),n=!0,o=function(t){return!!/\\\\/.test(t)&&(i.position<e.text.length+1&&(i.position++,t=e.text.charAt(i.position),/ \\t/.test(t)?i.spacing=!0:(i.add(t),n=!1)),!0)};i.position<i.text.length;){var r=i.text.charAt(i.position);i.parseWS(r)||o(r)||(n||i.spacing)&&(i.parseStartTag(\"bold\",\"*\")||i.parseStartTag(\"ital\",\"_\")||i.parseStartTag(\"mono\",\"`\"))||i.parseEndTag(\"bold\",\"*\",\"afterBold\")||i.parseEndTag(\"ital\",\"_\",\"afterItal\")||i.parseEndTag(\"mono\",\"`\",\"afterMono\")||(i.add(r),n=!1),i.position++}return i.emitBlock(),i.blocks}},{key:\"splitBlocks\",value:function(t,e){var i=this.decodeMarkupSystem(e);return\"none\"===i?[{text:t,mod:\"normal\"}]:\"markdown\"===i?this.splitMarkdownBlocks(t):\"html\"===i?this.splitHtmlBlocks(t):void 0}},{key:\"overMaxWidth\",value:function(t){var e=this.ctx.measureText(t).width;return this.lines.curWidth()+e>this.parent.fontOptions.maxWdt}},{key:\"getLongestFit\",value:function(t){for(var e=\"\",i=0;i<t.length;){var n=e+(\"\"===e?\"\":\" \")+t[i];if(this.overMaxWidth(n))break;e=n,i++}return i}},{key:\"getLongestFitWord\",value:function(t){for(var e=0;e<t.length&&!this.overMaxWidth(Oo(t).call(t,0,e));)e++;return e}},{key:\"splitStringIntoLines\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"normal\",i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];this.parent.getFormattingValues(this.ctx,this.selected,this.hover,e);for(var n=(t=(t=t.replace(/^( +)/g,\"$1\\r\")).replace(/([^\\r][^ ]*)( +)/g,\"$1\\r$2\\r\")).split(\"\\r\");n.length>0;){var o=this.getLongestFit(n);if(0===o){var r=n[0],s=this.getLongestFitWord(r);this.lines.newLine(Oo(r).call(r,0,s),e),n[0]=Oo(r).call(r,s)}else{var a=o;\" \"===n[o-1]?o--:\" \"===n[a]&&a++;var h=Oo(n).call(n,0,o).join(\"\");o==n.length&&i?this.lines.append(h,e):this.lines.newLine(h,e),n=Oo(n).call(n,a)}}}}]),t}(),ku=[\"bold\",\"ital\",\"boldital\",\"mono\"],_u=function(){function t(e,i){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];Nn(this,t),this.body=e,this.pointToSelf=!1,this.baseSize=void 0,this.fontOptions={},this.setOptions(i),this.size={top:0,left:0,width:0,height:0,yLine:0},this.isEdgeLabel=n}return Fn(t,[{key:\"setOptions\",value:function(t){if(this.elementOptions=t,this.initFontOptions(t.font),vu(t.label)?this.labelDirty=!0:t.label=void 0,void 0!==t.font&&null!==t.font)if(\"string\"==typeof t.font)this.baseSize=this.fontOptions.size;else if(\"object\"===go(t.font)){var e=t.font.size;void 0!==e&&(this.baseSize=e)}}},{key:\"initFontOptions\",value:function(e){var i=this;Dh(ku,(function(t){i.fontOptions[t]={}})),t.parseFontString(this.fontOptions,e)?this.fontOptions.vadjust=0:Dh(e,(function(t,e){null!=t&&\"object\"!==go(t)&&(i.fontOptions[e]=t)}))}},{key:\"constrain\",value:function(t){var e={constrainWidth:!1,maxWdt:-1,minWdt:-1,constrainHeight:!1,minHgt:-1,valign:\"middle\"},i=Qh(t,\"widthConstraint\");if(\"number\"==typeof i)e.maxWdt=Number(i),e.minWdt=Number(i);else if(\"object\"===go(i)){var n=Qh(t,[\"widthConstraint\",\"maximum\"]);\"number\"==typeof n&&(e.maxWdt=Number(n));var o=Qh(t,[\"widthConstraint\",\"minimum\"]);\"number\"==typeof o&&(e.minWdt=Number(o))}var r=Qh(t,\"heightConstraint\");if(\"number\"==typeof r)e.minHgt=Number(r);else if(\"object\"===go(r)){var s=Qh(t,[\"heightConstraint\",\"minimum\"]);\"number\"==typeof s&&(e.minHgt=Number(s));var a=Qh(t,[\"heightConstraint\",\"valign\"]);\"string\"==typeof a&&(\"top\"!==a&&\"bottom\"!==a||(e.valign=a))}return e}},{key:\"update\",value:function(t,e){this.setOptions(t,!0),this.propagateFonts(e),Ch(this.fontOptions,this.constrain(e)),this.fontOptions.chooser=fu(\"label\",e)}},{key:\"adjustSizes\",value:function(t){var e=t?t.right+t.left:0;this.fontOptions.constrainWidth&&(this.fontOptions.maxWdt-=e,this.fontOptions.minWdt-=e);var i=t?t.top+t.bottom:0;this.fontOptions.constrainHeight&&(this.fontOptions.minHgt-=i)}},{key:\"addFontOptionsToPile\",value:function(t,e){for(var i=0;i<e.length;++i)this.addFontToPile(t,e[i])}},{key:\"addFontToPile\",value:function(t,e){if(void 0!==e&&void 0!==e.font&&null!==e.font){var i=e.font;t.push(i)}}},{key:\"getBasicOptions\",value:function(e){for(var i={},n=0;n<e.length;++n){var o=e[n],r={};t.parseFontString(r,o)&&(o=r),Dh(o,(function(t,e){void 0!==t&&(Object.prototype.hasOwnProperty.call(i,e)||(-1!==Hr(ku).call(ku,e)?i[e]={}:i[e]=t))}))}return i}},{key:\"getFontOption\",value:function(e,i,n){for(var o,r=0;r<e.length;++r){var s=e[r];if(Object.prototype.hasOwnProperty.call(s,i)){if(null==(o=s[i]))continue;var a={};if(t.parseFontString(a,o)&&(o=a),Object.prototype.hasOwnProperty.call(o,n))return o[n]}}if(Object.prototype.hasOwnProperty.call(this.fontOptions,n))return this.fontOptions[n];throw new Error(\"Did not find value for multi-font for property: '\"+n+\"'\")}},{key:\"getFontOptions\",value:function(t,e){for(var i={},n=[\"color\",\"size\",\"face\",\"mod\",\"vadjust\"],o=0;o<n.length;++o){var r=n[o];i[r]=this.getFontOption(t,e,r)}return i}},{key:\"propagateFonts\",value:function(t){var e=this,i=[];this.addFontOptionsToPile(i,t),this.fontOptions=this.getBasicOptions(i);for(var n=function(t){var n=ku[t],o=e.fontOptions[n];Dh(e.getFontOptions(i,n),(function(t,e){o[e]=t})),o.size=Number(o.size),o.vadjust=Number(o.vadjust)},o=0;o<ku.length;++o)n(o)}},{key:\"draw\",value:function(t,e,i,n,o){var r=arguments.length>5&&void 0!==arguments[5]?arguments[5]:\"middle\";if(void 0!==this.elementOptions.label){var s=this.fontOptions.size*this.body.view.scale;this.elementOptions.label&&s<this.elementOptions.scaling.label.drawThreshold-1||(s>=this.elementOptions.scaling.label.maxVisible&&(s=Number(this.elementOptions.scaling.label.maxVisible)/this.body.view.scale),this.calculateLabelSize(t,n,o,e,i,r),this._drawBackground(t),this._drawText(t,e,this.size.yLine,r,s))}}},{key:\"_drawBackground\",value:function(t){if(void 0!==this.fontOptions.background&&\"none\"!==this.fontOptions.background){t.fillStyle=this.fontOptions.background;var e=this.getSize();t.fillRect(e.left,e.top,e.width,e.height)}}},{key:\"_drawText\",value:function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:\"middle\",o=arguments.length>4?arguments[4]:void 0,r=this._setAlignment(t,e,i,n),s=uo(r,2);e=s[0],i=s[1],t.textAlign=\"left\",e-=this.size.width/2,this.fontOptions.valign&&this.size.height>this.size.labelHeight&&(\"top\"===this.fontOptions.valign&&(i-=(this.size.height-this.size.labelHeight)/2),\"bottom\"===this.fontOptions.valign&&(i+=(this.size.height-this.size.labelHeight)/2));for(var a=0;a<this.lineCount;a++){var h=this.lines[a];if(h&&h.blocks){var l=0;this.isEdgeLabel||\"center\"===this.fontOptions.align?l+=(this.size.width-h.width)/2:\"right\"===this.fontOptions.align&&(l+=this.size.width-h.width);for(var d=0;d<h.blocks.length;d++){var c=h.blocks[d];t.font=c.font;var u=this._getColor(c.color,o,c.strokeColor),f=uo(u,2),p=f[0],v=f[1];c.strokeWidth>0&&(t.lineWidth=c.strokeWidth,t.strokeStyle=v,t.lineJoin=\"round\"),t.fillStyle=p,c.strokeWidth>0&&t.strokeText(c.text,e+l,i+c.vadjust),t.fillText(c.text,e+l,i+c.vadjust),l+=c.width}i+=h.height}}}},{key:\"_setAlignment\",value:function(t,e,i,n){if(this.isEdgeLabel&&\"horizontal\"!==this.fontOptions.align&&!1===this.pointToSelf){e=0,i=0;\"top\"===this.fontOptions.align?(t.textBaseline=\"alphabetic\",i-=4):\"bottom\"===this.fontOptions.align?(t.textBaseline=\"hanging\",i+=4):t.textBaseline=\"middle\"}else t.textBaseline=n;return[e,i]}},{key:\"_getColor\",value:function(t,e,i){var n=t||\"#000000\",o=i||\"#ffffff\";if(e<=this.elementOptions.scaling.label.drawThreshold){var r=Math.max(0,Math.min(1,1-(this.elementOptions.scaling.label.drawThreshold-e)));n=Fh(n,r),o=Fh(o,r)}return[n,o]}},{key:\"getTextSize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return this._processLabel(t,e,i),{width:this.size.width,height:this.size.height,lineCount:this.lineCount}}},{key:\"getSize\",value:function(){var t=this.size.left,e=this.size.top-1;if(this.isEdgeLabel){var i=.5*-this.size.width;switch(this.fontOptions.align){case\"middle\":t=i,e=.5*-this.size.height;break;case\"top\":t=i,e=-(this.size.height+2);break;case\"bottom\":t=i,e=2}}return{left:t,top:e,width:this.size.width,height:this.size.height}}},{key:\"calculateLabelSize\",value:function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,r=arguments.length>5&&void 0!==arguments[5]?arguments[5]:\"middle\";this._processLabel(t,e,i),this.size.left=n-.5*this.size.width,this.size.top=o-.5*this.size.height,this.size.yLine=o+.5*(1-this.lineCount)*this.fontOptions.size,\"hanging\"===r&&(this.size.top+=.5*this.fontOptions.size,this.size.top+=4,this.size.yLine+=4)}},{key:\"getFormattingValues\",value:function(t,e,i,n){var o=function(t,e,i){return\"normal\"===e?\"mod\"===i?\"\":t[i]:void 0!==t[e][i]?t[e][i]:t[i]},r={color:o(this.fontOptions,n,\"color\"),size:o(this.fontOptions,n,\"size\"),face:o(this.fontOptions,n,\"face\"),mod:o(this.fontOptions,n,\"mod\"),vadjust:o(this.fontOptions,n,\"vadjust\"),strokeWidth:this.fontOptions.strokeWidth,strokeColor:this.fontOptions.strokeColor};(e||i)&&(\"normal\"===n&&!0===this.fontOptions.chooser&&this.elementOptions.labelHighlightBold?r.mod=\"bold\":\"function\"==typeof this.fontOptions.chooser&&this.fontOptions.chooser(r,this.elementOptions.id,e,i));var s=\"\";return void 0!==r.mod&&\"\"!==r.mod&&(s+=r.mod+\" \"),s+=r.size+\"px \"+r.face,t.font=s.replace(/\"/g,\"\"),r.font=t.font,r.height=r.size,r}},{key:\"differentState\",value:function(t,e){return t!==this.selectedState||e!==this.hoverState}},{key:\"_processLabelText\",value:function(t,e,i,n){return new wu(t,this,e,i).process(n)}},{key:\"_processLabel\",value:function(t,e,i){if(!1!==this.labelDirty||this.differentState(e,i)){var n=this._processLabelText(t,e,i,this.elementOptions.label);this.fontOptions.minWdt>0&&n.width<this.fontOptions.minWdt&&(n.width=this.fontOptions.minWdt),this.size.labelHeight=n.height,this.fontOptions.minHgt>0&&n.height<this.fontOptions.minHgt&&(n.height=this.fontOptions.minHgt),this.lines=n.lines,this.lineCount=n.lines.length,this.size.width=n.width,this.size.height=n.height,this.selectedState=e,this.hoverState=i,this.labelDirty=!1}}},{key:\"visible\",value:function(){return 0!==this.size.width&&0!==this.size.height&&void 0!==this.elementOptions.label&&!(this.fontOptions.size*this.body.view.scale<this.elementOptions.scaling.label.drawThreshold-1)}}],[{key:\"parseFontString\",value:function(t,e){if(!e||\"string\"!=typeof e)return!1;var i=e.split(\" \");return t.size=+i[0].replace(\"px\",\"\"),t.face=i[1],t.color=i[2],!0}}]),t}(),xu=function(){function t(e,i,n){Nn(this,t),this.body=i,this.labelModule=n,this.setOptions(e),this.top=void 0,this.left=void 0,this.height=void 0,this.width=void 0,this.radius=void 0,this.margin=void 0,this.refreshNeeded=!0,this.boundingBox={top:0,left:0,right:0,bottom:0}}return Fn(t,[{key:\"setOptions\",value:function(t){this.options=t}},{key:\"_setMargins\",value:function(t){this.margin={},this.options.margin&&(\"object\"==go(this.options.margin)?(this.margin.top=this.options.margin.top,this.margin.right=this.options.margin.right,this.margin.bottom=this.options.margin.bottom,this.margin.left=this.options.margin.left):(this.margin.top=this.options.margin,this.margin.right=this.options.margin,this.margin.bottom=this.options.margin,this.margin.left=this.options.margin)),t.adjustSizes(this.margin)}},{key:\"_distanceToBorder\",value:function(t,e){var i=this.options.borderWidth;return t&&this.resize(t),Math.min(Math.abs(this.width/2/Math.cos(e)),Math.abs(this.height/2/Math.sin(e)))+i}},{key:\"enableShadow\",value:function(t,e){e.shadow&&(t.shadowColor=e.shadowColor,t.shadowBlur=e.shadowSize,t.shadowOffsetX=e.shadowX,t.shadowOffsetY=e.shadowY)}},{key:\"disableShadow\",value:function(t,e){e.shadow&&(t.shadowColor=\"rgba(0,0,0,0)\",t.shadowBlur=0,t.shadowOffsetX=0,t.shadowOffsetY=0)}},{key:\"enableBorderDashes\",value:function(t,e){if(!1!==e.borderDashes)if(void 0!==t.setLineDash){var i=e.borderDashes;!0===i&&(i=[5,15]),t.setLineDash(i)}else console.warn(\"setLineDash is not supported in this browser. The dashed borders cannot be used.\"),this.options.shapeProperties.borderDashes=!1,e.borderDashes=!1}},{key:\"disableBorderDashes\",value:function(t,e){!1!==e.borderDashes&&(void 0!==t.setLineDash?t.setLineDash([0]):(console.warn(\"setLineDash is not supported in this browser. The dashed borders cannot be used.\"),this.options.shapeProperties.borderDashes=!1,e.borderDashes=!1))}},{key:\"needsRefresh\",value:function(t,e){return!0===this.refreshNeeded?(this.refreshNeeded=!1,!0):void 0===this.width||this.labelModule.differentState(t,e)}},{key:\"initContextForDraw\",value:function(t,e){var i=e.borderWidth/this.body.view.scale;t.lineWidth=Math.min(this.width,i),t.strokeStyle=e.borderColor,t.fillStyle=e.color}},{key:\"performStroke\",value:function(t,e){var i=e.borderWidth/this.body.view.scale;t.save(),i>0&&(this.enableBorderDashes(t,e),t.stroke(),this.disableBorderDashes(t,e)),t.restore()}},{key:\"performFill\",value:function(t,e){t.save(),t.fillStyle=e.color,this.enableShadow(t,e),hs(t).call(t),this.disableShadow(t,e),t.restore(),this.performStroke(t,e)}},{key:\"_addBoundingBoxMargin\",value:function(t){this.boundingBox.left-=t,this.boundingBox.top-=t,this.boundingBox.bottom+=t,this.boundingBox.right+=t}},{key:\"_updateBoundingBox\",value:function(t,e,i,n,o){void 0!==i&&this.resize(i,n,o),this.left=t-this.width/2,this.top=e-this.height/2,this.boundingBox.left=this.left,this.boundingBox.top=this.top,this.boundingBox.bottom=this.top+this.height,this.boundingBox.right=this.left+this.width}},{key:\"updateBoundingBox\",value:function(t,e,i,n,o){this._updateBoundingBox(t,e,i,n,o)}},{key:\"getDimensionsFromLabel\",value:function(t,e,i){this.textSize=this.labelModule.getTextSize(t,e,i);var n=this.textSize.width,o=this.textSize.height;return 0===n&&(n=14,o=14),{width:n,height:o}}}]),t}();function Eu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Ou=function(t){Ad(i,t);var e=Eu(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o))._setMargins(o),r}return Fn(i,[{key:\"resize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(this.needsRefresh(e,i)){var n=this.getDimensionsFromLabel(t,e,i);this.width=n.width+this.margin.right+this.margin.left,this.height=n.height+this.margin.top+this.margin.bottom,this.radius=this.width/2}}},{key:\"draw\",value:function(t,e,i,n,o,r){this.resize(t,n,o),this.left=e-this.width/2,this.top=i-this.height/2,this.initContextForDraw(t,r),Yt(t,this.left,this.top,this.width,this.height,r.borderRadius),this.performFill(t,r),this.updateBoundingBox(e,i,t,n,o),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,n,o)}},{key:\"updateBoundingBox\",value:function(t,e,i,n,o){this._updateBoundingBox(t,e,i,n,o);var r=this.options.shapeProperties.borderRadius;this._addBoundingBoxMargin(r)}},{key:\"distanceToBorder\",value:function(t,e){t&&this.resize(t);var i=this.options.borderWidth;return Math.min(Math.abs(this.width/2/Math.cos(e)),Math.abs(this.height/2/Math.sin(e)))+i}}]),i}(xu);function Cu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Su=function(t){Ad(i,t);var e=Cu(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o)).labelOffset=0,r.selected=!1,r}return Fn(i,[{key:\"setOptions\",value:function(t,e,i){this.options=t,void 0===e&&void 0===i||this.setImages(e,i)}},{key:\"setImages\",value:function(t,e){e&&this.selected?(this.imageObj=e,this.imageObjAlt=t):(this.imageObj=t,this.imageObjAlt=e)}},{key:\"switchImages\",value:function(t){var e=t&&!this.selected||!t&&this.selected;if(this.selected=t,void 0!==this.imageObjAlt&&e){var i=this.imageObj;this.imageObj=this.imageObjAlt,this.imageObjAlt=i}}},{key:\"_getImagePadding\",value:function(){var t={top:0,right:0,bottom:0,left:0};if(this.options.imagePadding){var e=this.options.imagePadding;\"object\"==go(e)?(t.top=e.top,t.right=e.right,t.bottom=e.bottom,t.left=e.left):(t.top=e,t.right=e,t.bottom=e,t.left=e)}return t}},{key:\"_resizeImage\",value:function(){var t,e;if(!1===this.options.shapeProperties.useImageSize){var i=1,n=1;this.imageObj.width&&this.imageObj.height&&(this.imageObj.width>this.imageObj.height?i=this.imageObj.width/this.imageObj.height:n=this.imageObj.height/this.imageObj.width),t=2*this.options.size*i,e=2*this.options.size*n}else{var o=this._getImagePadding();t=this.imageObj.width+o.left+o.right,e=this.imageObj.height+o.top+o.bottom}this.width=t,this.height=e,this.radius=.5*this.width}},{key:\"_drawRawCircle\",value:function(t,e,i,n){this.initContextForDraw(t,n),Ut(t,e,i,n.size),this.performFill(t,n)}},{key:\"_drawImageAtPosition\",value:function(t,e){if(0!=this.imageObj.width){t.globalAlpha=void 0!==e.opacity?e.opacity:1,this.enableShadow(t,e);var i=1;!0===this.options.shapeProperties.interpolation&&(i=this.imageObj.width/this.width/this.body.view.scale);var n=this._getImagePadding(),o=this.left+n.left,r=this.top+n.top,s=this.width-n.left-n.right,a=this.height-n.top-n.bottom;this.imageObj.drawImageAtPosition(t,i,o,r,s,a),this.disableShadow(t,e)}}},{key:\"_drawImageLabel\",value:function(t,e,i,n,o){var r=0;if(void 0!==this.height){r=.5*this.height;var s=this.labelModule.getTextSize(t,n,o);s.lineCount>=1&&(r+=s.height/2)}var a=i+r;this.options.label&&(this.labelOffset=r),this.labelModule.draw(t,e,a,n,o,\"hanging\")}}]),i}(xu);function Tu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Mu=function(t){Ad(i,t);var e=Tu(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o))._setMargins(o),r}return Fn(i,[{key:\"resize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(this.needsRefresh(e,i)){var n=this.getDimensionsFromLabel(t,e,i),o=Math.max(n.width+this.margin.right+this.margin.left,n.height+this.margin.top+this.margin.bottom);this.options.size=o/2,this.width=o,this.height=o,this.radius=this.width/2}}},{key:\"draw\",value:function(t,e,i,n,o,r){this.resize(t,n,o),this.left=e-this.width/2,this.top=i-this.height/2,this._drawRawCircle(t,e,i,r),this.updateBoundingBox(e,i),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,i,n,o)}},{key:\"updateBoundingBox\",value:function(t,e){this.boundingBox.top=e-this.options.size,this.boundingBox.left=t-this.options.size,this.boundingBox.right=t+this.options.size,this.boundingBox.bottom=e+this.options.size}},{key:\"distanceToBorder\",value:function(t){return t&&this.resize(t),.5*this.width}}]),i}(Su);function Pu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Du=function(t){Ad(i,t);var e=Pu(i);function i(t,n,o,r,s){var a;return Nn(this,i),(a=e.call(this,t,n,o)).setImages(r,s),a}return Fn(i,[{key:\"resize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover,n=void 0===this.imageObj.src||void 0===this.imageObj.width||void 0===this.imageObj.height;if(n){var o=2*this.options.size;return this.width=o,this.height=o,void(this.radius=.5*this.width)}this.needsRefresh(e,i)&&this._resizeImage()}},{key:\"draw\",value:function(t,e,i,n,o,r){this.switchImages(n),this.resize();var s=e,a=i;\"top-left\"===this.options.shapeProperties.coordinateOrigin?(this.left=e,this.top=i,s+=this.width/2,a+=this.height/2):(this.left=e-this.width/2,this.top=i-this.height/2),this._drawRawCircle(t,s,a,r),t.save(),t.clip(),this._drawImageAtPosition(t,r),t.restore(),this._drawImageLabel(t,s,a,n,o),this.updateBoundingBox(e,i)}},{key:\"updateBoundingBox\",value:function(t,e){\"top-left\"===this.options.shapeProperties.coordinateOrigin?(this.boundingBox.top=e,this.boundingBox.left=t,this.boundingBox.right=t+2*this.options.size,this.boundingBox.bottom=e+2*this.options.size):(this.boundingBox.top=e-this.options.size,this.boundingBox.left=t-this.options.size,this.boundingBox.right=t+this.options.size,this.boundingBox.bottom=e+this.options.size),this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelOffset)}},{key:\"distanceToBorder\",value:function(t){return t&&this.resize(t),.5*this.width}}]),i}(Su);function Iu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Bu=function(t){Ad(i,t);var e=Iu(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"resize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover,n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{size:this.options.size};if(this.needsRefresh(e,i)){var o,r;this.labelModule.getTextSize(t,e,i);var s=2*n.size;this.width=null!==(o=this.customSizeWidth)&&void 0!==o?o:s,this.height=null!==(r=this.customSizeHeight)&&void 0!==r?r:s,this.radius=.5*this.width}}},{key:\"_drawShape\",value:function(t,e,i,n,o,r,s,a){var h,l=this;return this.resize(t,r,s,a),this.left=n-this.width/2,this.top=o-this.height/2,this.initContextForDraw(t,a),(h=e,Object.prototype.hasOwnProperty.call($t,h)?$t[h]:function(t){for(var e=arguments.length,i=new Array(e>1?e-1:0),n=1;n<e;n++)i[n-1]=arguments[n];CanvasRenderingContext2D.prototype[h].call(t,i)})(t,n,o,a.size),this.performFill(t,a),void 0!==this.options.icon&&void 0!==this.options.icon.code&&(t.font=(r?\"bold \":\"\")+this.height/2+\"px \"+(this.options.icon.face||\"FontAwesome\"),t.fillStyle=this.options.icon.color||\"black\",t.textAlign=\"center\",t.textBaseline=\"middle\",t.fillText(this.options.icon.code,n,o)),{drawExternalLabel:function(){if(void 0!==l.options.label){l.labelModule.calculateLabelSize(t,r,s,n,o,\"hanging\");var e=o+.5*l.height+.5*l.labelModule.size.height;l.labelModule.draw(t,n,e,r,s,\"hanging\")}l.updateBoundingBox(n,o)}}}},{key:\"updateBoundingBox\",value:function(t,e){this.boundingBox.top=e-this.options.size,this.boundingBox.left=t-this.options.size,this.boundingBox.right=t+this.options.size,this.boundingBox.bottom=e+this.options.size,void 0!==this.options.label&&this.labelModule.size.width>0&&(this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelModule.size.height))}}]),i}(xu);function zu(t,e){var i=zo(t);if(On){var n=On(t);e&&(n=mr(n).call(n,(function(e){return Mn(t,e).enumerable}))),i.push.apply(i,n)}return i}function Nu(t){for(var e=1;e<arguments.length;e++){var i,n=null!=arguments[e]?arguments[e]:{};if(e%2)Wo(i=zu(Object(n),!0)).call(i,(function(e){jn(t,e,n[e])}));else if(Dn)In(t,Dn(n));else{var o;Wo(o=zu(Object(n))).call(o,(function(e){zn(t,e,Mn(n,e))}))}}return t}function Au(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Fu=function(t){Ad(i,t);var e=Au(i);function i(t,n,o,r){var s;return Nn(this,i),(s=e.call(this,t,n,o,r)).ctxRenderer=r,s}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){this.resize(t,n,o,r),this.left=e-this.width/2,this.top=i-this.height/2,t.save();var s=this.ctxRenderer({ctx:t,id:this.options.id,x:e,y:i,state:{selected:n,hover:o},style:Nu({},r),label:this.options.label});if(null!=s.drawNode&&s.drawNode(),t.restore(),s.drawExternalLabel){var a=s.drawExternalLabel;s.drawExternalLabel=function(){t.save(),a(),t.restore()}}return s.nodeDimensions&&(this.customSizeWidth=s.nodeDimensions.width,this.customSizeHeight=s.nodeDimensions.height),s}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Bu);function ju(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Ru=function(t){Ad(i,t);var e=ju(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o))._setMargins(o),r}return Fn(i,[{key:\"resize\",value:function(t,e,i){if(this.needsRefresh(e,i)){var n=this.getDimensionsFromLabel(t,e,i).width+this.margin.right+this.margin.left;this.width=n,this.height=n,this.radius=this.width/2}}},{key:\"draw\",value:function(t,e,i,n,o,r){this.resize(t,n,o),this.left=e-this.width/2,this.top=i-this.height/2,this.initContextForDraw(t,r),Gt(t,e-this.width/2,i-this.height/2,this.width,this.height),this.performFill(t,r),this.updateBoundingBox(e,i,t,n,o),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,n,o)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(xu);function Lu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Hu=function(t){Ad(i,t);var e=Lu(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){return this._drawShape(t,\"diamond\",4,e,i,n,o,r)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Bu);function Wu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var qu=function(t){Ad(i,t);var e=Wu(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){return this._drawShape(t,\"circle\",2,e,i,n,o,r)}},{key:\"distanceToBorder\",value:function(t){return t&&this.resize(t),this.options.size}}]),i}(Bu);function Vu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Uu=function(t){Ad(i,t);var e=Vu(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"resize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(this.needsRefresh(e,i)){var n=this.getDimensionsFromLabel(t,e,i);this.height=2*n.height,this.width=n.width+n.height,this.radius=.5*this.width}}},{key:\"draw\",value:function(t,e,i,n,o,r){this.resize(t,n,o),this.left=e-.5*this.width,this.top=i-.5*this.height,this.initContextForDraw(t,r),Xt(t,this.left,this.top,this.width,this.height),this.performFill(t,r),this.updateBoundingBox(e,i,t,n,o),this.labelModule.draw(t,e,i,n,o)}},{key:\"distanceToBorder\",value:function(t,e){t&&this.resize(t);var i=.5*this.width,n=.5*this.height,o=Math.sin(e)*i,r=Math.cos(e)*n;return i*n/Math.sqrt(o*o+r*r)}}]),i}(xu);function Yu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Xu=function(t){Ad(i,t);var e=Yu(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o))._setMargins(o),r}return Fn(i,[{key:\"resize\",value:function(t,e,i){this.needsRefresh(e,i)&&(this.iconSize={width:Number(this.options.icon.size),height:Number(this.options.icon.size)},this.width=this.iconSize.width+this.margin.right+this.margin.left,this.height=this.iconSize.height+this.margin.top+this.margin.bottom,this.radius=.5*this.width)}},{key:\"draw\",value:function(t,e,i,n,o,r){var s=this;return this.resize(t,n,o),this.options.icon.size=this.options.icon.size||50,this.left=e-this.width/2,this.top=i-this.height/2,this._icon(t,e,i,n,o,r),{drawExternalLabel:function(){if(void 0!==s.options.label){s.labelModule.draw(t,s.left+s.iconSize.width/2+s.margin.left,i+s.height/2+5,n)}s.updateBoundingBox(e,i)}}}},{key:\"updateBoundingBox\",value:function(t,e){if(this.boundingBox.top=e-.5*this.options.icon.size,this.boundingBox.left=t-.5*this.options.icon.size,this.boundingBox.right=t+.5*this.options.icon.size,this.boundingBox.bottom=e+.5*this.options.icon.size,void 0!==this.options.label&&this.labelModule.size.width>0){this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelModule.size.height+5)}}},{key:\"_icon\",value:function(t,e,i,n,o,r){var s=Number(this.options.icon.size);void 0!==this.options.icon.code?(t.font=[null!=this.options.icon.weight?this.options.icon.weight:n?\"bold\":\"\",(null!=this.options.icon.weight&&n?5:0)+s+\"px\",this.options.icon.face].join(\" \"),t.fillStyle=this.options.icon.color||\"black\",t.textAlign=\"center\",t.textBaseline=\"middle\",this.enableShadow(t,r),t.fillText(this.options.icon.code,e,i),this.disableShadow(t,r)):console.error(\"When using the icon shape, you need to define the code in the icon options object. This can be done per node or globally.\")}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(xu);function Gu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Ku=function(t){Ad(i,t);var e=Gu(i);function i(t,n,o,r,s){var a;return Nn(this,i),(a=e.call(this,t,n,o)).setImages(r,s),a}return Fn(i,[{key:\"resize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover,n=void 0===this.imageObj.src||void 0===this.imageObj.width||void 0===this.imageObj.height;if(n){var o=2*this.options.size;return this.width=o,void(this.height=o)}this.needsRefresh(e,i)&&this._resizeImage()}},{key:\"draw\",value:function(t,e,i,n,o,r){t.save(),this.switchImages(n),this.resize();var s=e,a=i;if(\"top-left\"===this.options.shapeProperties.coordinateOrigin?(this.left=e,this.top=i,s+=this.width/2,a+=this.height/2):(this.left=e-this.width/2,this.top=i-this.height/2),!0===this.options.shapeProperties.useBorderWithImage){var h=this.options.borderWidth,l=this.options.borderWidthSelected||2*this.options.borderWidth,d=(n?l:h)/this.body.view.scale;t.lineWidth=Math.min(this.width,d),t.beginPath();var c=n?this.options.color.highlight.border:o?this.options.color.hover.border:this.options.color.border,u=n?this.options.color.highlight.background:o?this.options.color.hover.background:this.options.color.background;void 0!==r.opacity&&(c=Fh(c,r.opacity),u=Fh(u,r.opacity)),t.strokeStyle=c,t.fillStyle=u,t.rect(this.left-.5*t.lineWidth,this.top-.5*t.lineWidth,this.width+t.lineWidth,this.height+t.lineWidth),hs(t).call(t),this.performStroke(t,r),t.closePath()}this._drawImageAtPosition(t,r),this._drawImageLabel(t,s,a,n,o),this.updateBoundingBox(e,i),t.restore()}},{key:\"updateBoundingBox\",value:function(t,e){this.resize(),\"top-left\"===this.options.shapeProperties.coordinateOrigin?(this.left=t,this.top=e):(this.left=t-this.width/2,this.top=e-this.height/2),this.boundingBox.left=this.left,this.boundingBox.top=this.top,this.boundingBox.bottom=this.top+this.height,this.boundingBox.right=this.left+this.width,void 0!==this.options.label&&this.labelModule.size.width>0&&(this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelOffset))}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Su);function $u(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Zu=function(t){Ad(i,t);var e=$u(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){return this._drawShape(t,\"square\",2,e,i,n,o,r)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Bu);function Qu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Ju=function(t){Ad(i,t);var e=Qu(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){return this._drawShape(t,\"hexagon\",4,e,i,n,o,r)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Bu);function tf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var ef=function(t){Ad(i,t);var e=tf(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){return this._drawShape(t,\"star\",4,e,i,n,o,r)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Bu);function nf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var of=function(t){Ad(i,t);var e=nf(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o))._setMargins(o),r}return Fn(i,[{key:\"resize\",value:function(t,e,i){this.needsRefresh(e,i)&&(this.textSize=this.labelModule.getTextSize(t,e,i),this.width=this.textSize.width+this.margin.right+this.margin.left,this.height=this.textSize.height+this.margin.top+this.margin.bottom,this.radius=.5*this.width)}},{key:\"draw\",value:function(t,e,i,n,o,r){this.resize(t,n,o),this.left=e-this.width/2,this.top=i-this.height/2,this.enableShadow(t,r),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,n,o),this.disableShadow(t,r),this.updateBoundingBox(e,i,t,n,o)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(xu);function rf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var sf=function(t){Ad(i,t);var e=rf(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){return this._drawShape(t,\"triangle\",3,e,i,n,o,r)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Bu);function af(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var hf=function(t){Ad(i,t);var e=af(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){return this._drawShape(t,\"triangleDown\",3,e,i,n,o,r)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Bu);function lf(t,e){var i=zo(t);if(On){var n=On(t);e&&(n=mr(n).call(n,(function(e){return Mn(t,e).enumerable}))),i.push.apply(i,n)}return i}function df(t){for(var e=1;e<arguments.length;e++){var i,n=null!=arguments[e]?arguments[e]:{};if(e%2)Wo(i=lf(Object(n),!0)).call(i,(function(e){jn(t,e,n[e])}));else if(Dn)In(t,Dn(n));else{var o;Wo(o=lf(Object(n))).call(o,(function(e){zn(t,e,Mn(n,e))}))}}return t}var cf=function(){function t(e,i,n,o,r,s){Nn(this,t),this.options=Kh(r),this.globalOptions=r,this.defaultOptions=s,this.body=i,this.edges=[],this.id=void 0,this.imagelist=n,this.grouplist=o,this.x=void 0,this.y=void 0,this.baseSize=this.options.size,this.baseFontSize=this.options.font.size,this.predefinedPosition=!1,this.selected=!1,this.hover=!1,this.labelModule=new _u(this.body,this.options,!1),this.setOptions(e)}return Fn(t,[{key:\"attachEdge\",value:function(t){var e;-1===Hr(e=this.edges).call(e,t)&&this.edges.push(t)}},{key:\"detachEdge\",value:function(t){var e,i,n=Hr(e=this.edges).call(e,t);-1!=n&&er(i=this.edges).call(i,n,1)}},{key:\"setOptions\",value:function(e){var i=this.options.shape;if(e){if(void 0!==e.color&&(this._localColor=e.color),void 0!==e.id&&(this.id=e.id),void 0===this.id)throw new Error(\"Node must have an id\");t.checkMass(e,this.id),void 0!==e.x&&(null===e.x?(this.x=void 0,this.predefinedPosition=!1):(this.x=Br(e.x),this.predefinedPosition=!0)),void 0!==e.y&&(null===e.y?(this.y=void 0,this.predefinedPosition=!1):(this.y=Br(e.y),this.predefinedPosition=!0)),void 0!==e.size&&(this.baseSize=e.size),void 0!==e.value&&(e.value=hu(e.value)),t.parseOptions(this.options,e,!0,this.globalOptions,this.grouplist);var n=[e,this.options,this.defaultOptions];return this.chooser=fu(\"node\",n),this._load_images(),this.updateLabelModule(e),void 0!==e.opacity&&t.checkOpacity(e.opacity)&&(this.options.opacity=e.opacity),this.updateShape(i),void 0!==e.hidden||void 0!==e.physics}}},{key:\"_load_images\",value:function(){if((\"circularImage\"===this.options.shape||\"image\"===this.options.shape)&&void 0===this.options.image)throw new Error(\"Option image must be defined for node type '\"+this.options.shape+\"'\");if(void 0!==this.options.image){if(void 0===this.imagelist)throw new Error(\"Internal Error: No images provided\");if(\"string\"==typeof this.options.image)this.imageObj=this.imagelist.load(this.options.image,this.options.brokenImage,this.id);else{if(void 0===this.options.image.unselected)throw new Error(\"No unselected image provided\");this.imageObj=this.imagelist.load(this.options.image.unselected,this.options.brokenImage,this.id),void 0!==this.options.image.selected?this.imageObjAlt=this.imagelist.load(this.options.image.selected,this.options.brokenImage,this.id):this.imageObjAlt=void 0}}}},{key:\"getFormattingValues\",value:function(){var t={color:this.options.color.background,opacity:this.options.opacity,borderWidth:this.options.borderWidth,borderColor:this.options.color.border,size:this.options.size,borderDashes:this.options.shapeProperties.borderDashes,borderRadius:this.options.shapeProperties.borderRadius,shadow:this.options.shadow.enabled,shadowColor:this.options.shadow.color,shadowSize:this.options.shadow.size,shadowX:this.options.shadow.x,shadowY:this.options.shadow.y};if(this.selected||this.hover?!0===this.chooser?this.selected?(null!=this.options.borderWidthSelected?t.borderWidth=this.options.borderWidthSelected:t.borderWidth*=2,t.color=this.options.color.highlight.background,t.borderColor=this.options.color.highlight.border,t.shadow=this.options.shadow.enabled):this.hover&&(t.color=this.options.color.hover.background,t.borderColor=this.options.color.hover.border,t.shadow=this.options.shadow.enabled):\"function\"==typeof this.chooser&&(this.chooser(t,this.options.id,this.selected,this.hover),!1===t.shadow&&(t.shadowColor===this.options.shadow.color&&t.shadowSize===this.options.shadow.size&&t.shadowX===this.options.shadow.x&&t.shadowY===this.options.shadow.y||(t.shadow=!0))):t.shadow=this.options.shadow.enabled,void 0!==this.options.opacity){var e=this.options.opacity;t.borderColor=Fh(t.borderColor,e),t.color=Fh(t.color,e),t.shadowColor=Fh(t.shadowColor,e)}return t}},{key:\"updateLabelModule\",value:function(e){void 0!==this.options.label&&null!==this.options.label||(this.options.label=\"\"),t.updateGroupOptions(this.options,df(df({},e),{},{color:e&&e.color||this._localColor||void 0}),this.grouplist);var i=this.grouplist.get(this.options.group,!1),n=[e,this.options,i,this.globalOptions,this.defaultOptions];this.labelModule.update(this.options,n),void 0!==this.labelModule.baseSize&&(this.baseFontSize=this.labelModule.baseSize)}},{key:\"updateShape\",value:function(t){if(t===this.options.shape&&this.shape)this.shape.setOptions(this.options,this.imageObj,this.imageObjAlt);else switch(this.options.shape){case\"box\":this.shape=new Ou(this.options,this.body,this.labelModule);break;case\"circle\":this.shape=new Mu(this.options,this.body,this.labelModule);break;case\"circularImage\":this.shape=new Du(this.options,this.body,this.labelModule,this.imageObj,this.imageObjAlt);break;case\"custom\":this.shape=new Fu(this.options,this.body,this.labelModule,this.options.ctxRenderer);break;case\"database\":this.shape=new Ru(this.options,this.body,this.labelModule);break;case\"diamond\":this.shape=new Hu(this.options,this.body,this.labelModule);break;case\"dot\":this.shape=new qu(this.options,this.body,this.labelModule);break;case\"ellipse\":this.shape=new Uu(this.options,this.body,this.labelModule);break;case\"icon\":this.shape=new Xu(this.options,this.body,this.labelModule);break;case\"image\":this.shape=new Ku(this.options,this.body,this.labelModule,this.imageObj,this.imageObjAlt);break;case\"square\":this.shape=new Zu(this.options,this.body,this.labelModule);break;case\"hexagon\":this.shape=new Ju(this.options,this.body,this.labelModule);break;case\"star\":this.shape=new ef(this.options,this.body,this.labelModule);break;case\"text\":this.shape=new of(this.options,this.body,this.labelModule);break;case\"triangle\":this.shape=new sf(this.options,this.body,this.labelModule);break;case\"triangleDown\":this.shape=new hf(this.options,this.body,this.labelModule);break;default:this.shape=new Uu(this.options,this.body,this.labelModule)}this.needsRefresh()}},{key:\"select\",value:function(){this.selected=!0,this.needsRefresh()}},{key:\"unselect\",value:function(){this.selected=!1,this.needsRefresh()}},{key:\"needsRefresh\",value:function(){this.shape.refreshNeeded=!0}},{key:\"getTitle\",value:function(){return this.options.title}},{key:\"distanceToBorder\",value:function(t,e){return this.shape.distanceToBorder(t,e)}},{key:\"isFixed\",value:function(){return this.options.fixed.x&&this.options.fixed.y}},{key:\"isSelected\",value:function(){return this.selected}},{key:\"getValue\",value:function(){return this.options.value}},{key:\"getLabelSize\",value:function(){return this.labelModule.size()}},{key:\"setValueRange\",value:function(t,e,i){if(void 0!==this.options.value){var n=this.options.scaling.customScalingFunction(t,e,i,this.options.value),o=this.options.scaling.max-this.options.scaling.min;if(!0===this.options.scaling.label.enabled){var r=this.options.scaling.label.max-this.options.scaling.label.min;this.options.font.size=this.options.scaling.label.min+n*r}this.options.size=this.options.scaling.min+n*o}else this.options.size=this.baseSize,this.options.font.size=this.baseFontSize;this.updateLabelModule()}},{key:\"draw\",value:function(t){var e=this.getFormattingValues();return this.shape.draw(t,this.x,this.y,this.selected,this.hover,e)||{}}},{key:\"updateBoundingBox\",value:function(t){this.shape.updateBoundingBox(this.x,this.y,t)}},{key:\"resize\",value:function(t){var e=this.getFormattingValues();this.shape.resize(t,this.selected,this.hover,e)}},{key:\"getItemsOnPoint\",value:function(t){var e=[];return this.labelModule.visible()&&pu(this.labelModule.getSize(),t)&&e.push({nodeId:this.id,labelId:0}),pu(this.shape.boundingBox,t)&&e.push({nodeId:this.id}),e}},{key:\"isOverlappingWith\",value:function(t){return this.shape.left<t.right&&this.shape.left+this.shape.width>t.left&&this.shape.top<t.bottom&&this.shape.top+this.shape.height>t.top}},{key:\"isBoundingBoxOverlappingWith\",value:function(t){return this.shape.boundingBox.left<t.right&&this.shape.boundingBox.right>t.left&&this.shape.boundingBox.top<t.bottom&&this.shape.boundingBox.bottom>t.top}}],[{key:\"checkOpacity\",value:function(t){return 0<=t&&t<=1}},{key:\"checkCoordinateOrigin\",value:function(t){return void 0===t||\"center\"===t||\"top-left\"===t}},{key:\"updateGroupOptions\",value:function(e,i,n){var o;if(void 0!==n){var r=e.group;if(void 0!==i&&void 0!==i.group&&r!==i.group)throw new Error(\"updateGroupOptions: group values in options don't match.\");if(\"number\"==typeof r||\"string\"==typeof r&&\"\"!=r){var s=n.get(r);void 0!==s.opacity&&void 0===i.opacity&&(t.checkOpacity(s.opacity)||(console.error(\"Invalid option for node opacity. Value must be between 0 and 1, found: \"+s.opacity),s.opacity=void 0));var a=mr(o=uu(i)).call(o,(function(t){return null!=i[t]}));a.push(\"font\"),Oh(a,e,s),e.color=Rh(e.color)}}}},{key:\"parseOptions\",value:function(e,i){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},r=arguments.length>4?arguments[4]:void 0,s=[\"color\",\"fixed\",\"shadow\"];if(Oh(s,e,i,n),t.checkMass(i),void 0!==e.opacity&&(t.checkOpacity(e.opacity)||(console.error(\"Invalid option for node opacity. Value must be between 0 and 1, found: \"+e.opacity),e.opacity=void 0)),void 0!==i.opacity&&(t.checkOpacity(i.opacity)||(console.error(\"Invalid option for node opacity. Value must be between 0 and 1, found: \"+i.opacity),i.opacity=void 0)),i.shapeProperties&&!t.checkCoordinateOrigin(i.shapeProperties.coordinateOrigin)&&console.error(\"Invalid option for node coordinateOrigin, found: \"+i.shapeProperties.coordinateOrigin),$h(e,i,\"shadow\",o),void 0!==i.color&&null!==i.color){var a=Rh(i.color);_h(e.color,a)}else!0===n&&null===i.color&&(e.color=Kh(o.color));void 0!==i.fixed&&null!==i.fixed&&(\"boolean\"==typeof i.fixed?(e.fixed.x=i.fixed,e.fixed.y=i.fixed):(void 0!==i.fixed.x&&\"boolean\"==typeof i.fixed.x&&(e.fixed.x=i.fixed.x),void 0!==i.fixed.y&&\"boolean\"==typeof i.fixed.y&&(e.fixed.y=i.fixed.y))),!0===n&&null===i.font&&(e.font=Kh(o.font)),t.updateGroupOptions(e,i,r),void 0!==i.scaling&&$h(e.scaling,i.scaling,\"label\",o.scaling)}},{key:\"checkMass\",value:function(t,e){if(void 0!==t.mass&&t.mass<=0){var i=\"\";void 0!==e&&(i=\" in node id: \"+e),console.error(\"%cNegative or zero mass disallowed\"+i+\", setting mass to 1.\",cl),t.mass=1}}}]),t}();function uf(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return ff(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return ff(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function ff(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}var pf=function(){function t(e,i,n,o){var r,s=this;if(Nn(this,t),this.body=e,this.images=i,this.groups=n,this.layoutEngine=o,this.body.functions.createNode=Vt(r=this.create).call(r,this),this.nodesListeners={add:function(t,e){s.add(e.items)},update:function(t,e){s.update(e.items,e.data,e.oldData)},remove:function(t,e){s.remove(e.items)}},this.defaultOptions={borderWidth:1,borderWidthSelected:void 0,brokenImage:void 0,color:{border:\"#2B7CE9\",background:\"#97C2FC\",highlight:{border:\"#2B7CE9\",background:\"#D2E5FF\"},hover:{border:\"#2B7CE9\",background:\"#D2E5FF\"}},opacity:void 0,fixed:{x:!1,y:!1},font:{color:\"#343434\",size:14,face:\"arial\",background:\"none\",strokeWidth:0,strokeColor:\"#ffffff\",align:\"center\",vadjust:0,multi:!1,bold:{mod:\"bold\"},boldital:{mod:\"bold italic\"},ital:{mod:\"italic\"},mono:{mod:\"\",size:15,face:\"monospace\",vadjust:2}},group:void 0,hidden:!1,icon:{face:\"FontAwesome\",code:void 0,size:50,color:\"#2B7CE9\"},image:void 0,imagePadding:{top:0,right:0,bottom:0,left:0},label:void 0,labelHighlightBold:!0,level:void 0,margin:{top:5,right:5,bottom:5,left:5},mass:1,physics:!0,scaling:{min:10,max:30,label:{enabled:!1,min:14,max:30,maxVisible:30,drawThreshold:5},customScalingFunction:function(t,e,i,n){if(e===t)return.5;var o=1/(e-t);return Math.max(0,(n-t)*o)}},shadow:{enabled:!1,color:\"rgba(0,0,0,0.5)\",size:10,x:5,y:5},shape:\"ellipse\",shapeProperties:{borderDashes:!1,borderRadius:6,interpolation:!0,useImageSize:!1,useBorderWithImage:!1,coordinateOrigin:\"center\"},size:25,title:void 0,value:void 0,x:void 0,y:void 0},this.defaultOptions.mass<=0)throw\"Internal error: mass in defaultOptions of NodesHandler may not be zero or negative\";this.options=Kh(this.defaultOptions),this.bindEventListeners()}return Fn(t,[{key:\"bindEventListeners\",value:function(){var t,e,i=this;this.body.emitter.on(\"refreshNodes\",Vt(t=this.refresh).call(t,this)),this.body.emitter.on(\"refresh\",Vt(e=this.refresh).call(e,this)),this.body.emitter.on(\"destroy\",(function(){Dh(i.nodesListeners,(function(t,e){i.body.data.nodes&&i.body.data.nodes.off(e,t)})),delete i.body.functions.createNode,delete i.nodesListeners.add,delete i.nodesListeners.update,delete i.nodesListeners.remove,delete i.nodesListeners}))}},{key:\"setOptions\",value:function(t){if(void 0!==t){if(cf.parseOptions(this.options,t),void 0!==t.opacity&&(yd(t.opacity)||!wd(t.opacity)||t.opacity<0||t.opacity>1?console.error(\"Invalid option for node opacity. Value must be between 0 and 1, found: \"+t.opacity):this.options.opacity=t.opacity),void 0!==t.shape)for(var e in this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,e)&&this.body.nodes[e].updateShape();if(void 0!==t.font||void 0!==t.widthConstraint||void 0!==t.heightConstraint)for(var i=0,n=zo(this.body.nodes);i<n.length;i++){var o=n[i];this.body.nodes[o].updateLabelModule(),this.body.nodes[o].needsRefresh()}if(void 0!==t.size)for(var r in this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,r)&&this.body.nodes[r].needsRefresh();void 0===t.hidden&&void 0===t.physics||this.body.emitter.emit(\"_dataChanged\")}}},{key:\"setData\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=this.body.data.nodes;if(nu(\"id\",t))this.body.data.nodes=t;else if(So(t))this.body.data.nodes=new tu,this.body.data.nodes.add(t);else{if(t)throw new TypeError(\"Array or DataSet expected\");this.body.data.nodes=new tu}if(i&&Dh(this.nodesListeners,(function(t,e){i.off(e,t)})),this.body.nodes={},this.body.data.nodes){var n=this;Dh(this.nodesListeners,(function(t,e){n.body.data.nodes.on(e,t)}));var o=this.body.data.nodes.getIds();this.add(o,!0)}!1===e&&this.body.emitter.emit(\"_dataChanged\")}},{key:\"add\",value:function(t){for(var e,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=[],o=0;o<t.length;o++){e=t[o];var r=this.body.data.nodes.get(e),s=this.create(r);n.push(s),this.body.nodes[e]=s}this.layoutEngine.positionInitially(n),!1===i&&this.body.emitter.emit(\"_dataChanged\")}},{key:\"update\",value:function(t,e,i){for(var n=this.body.nodes,o=!1,r=0;r<t.length;r++){var s=t[r],a=n[s],h=e[r];void 0!==a?a.setOptions(h)&&(o=!0):(o=!0,a=this.create(h),n[s]=a)}o||void 0===i||(o=Od(e).call(e,(function(t,e){var n=i[e];return n&&n.level!==t.level}))),!0===o?this.body.emitter.emit(\"_dataChanged\"):this.body.emitter.emit(\"_dataUpdated\")}},{key:\"remove\",value:function(t){for(var e=this.body.nodes,i=0;i<t.length;i++){delete e[t[i]]}this.body.emitter.emit(\"_dataChanged\")}},{key:\"create\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:cf;return new e(t,this.body,this.images,this.groups,this.options,this.defaultOptions)}},{key:\"refresh\",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];Dh(this.body.nodes,(function(i,n){var o=t.body.data.nodes.get(n);void 0!==o&&(!0===e&&i.setOptions({x:null,y:null}),i.setOptions({fixed:!1}),i.setOptions(o))}))}},{key:\"getPositions\",value:function(t){var e={};if(void 0!==t){if(!0===So(t)){for(var i=0;i<t.length;i++)if(void 0!==this.body.nodes[t[i]]){var n=this.body.nodes[t[i]];e[t[i]]={x:Math.round(n.x),y:Math.round(n.y)}}}else if(void 0!==this.body.nodes[t]){var o=this.body.nodes[t];e[t]={x:Math.round(o.x),y:Math.round(o.y)}}}else for(var r=0;r<this.body.nodeIndices.length;r++){var s=this.body.nodes[this.body.nodeIndices[r]];e[this.body.nodeIndices[r]]={x:Math.round(s.x),y:Math.round(s.y)}}return e}},{key:\"getPosition\",value:function(t){if(null==t)throw new TypeError(\"No id was specified for getPosition method.\");if(null==this.body.nodes[t])throw new ReferenceError(\"NodeId provided for getPosition does not exist. Provided: \".concat(t));return{x:Math.round(this.body.nodes[t].x),y:Math.round(this.body.nodes[t].y)}}},{key:\"storePositions\",value:function(){var t,e=[],i=this.body.data.nodes.getDataSet(),n=uf(i.get());try{for(n.s();!(t=n.n()).done;){var o=t.value,r=o.id,s=this.body.nodes[r],a=Math.round(s.x),h=Math.round(s.y);o.x===a&&o.y===h||e.push({id:r,x:a,y:h})}}catch(t){n.e(t)}finally{n.f()}i.update(e)}},{key:\"getBoundingBox\",value:function(t){if(void 0!==this.body.nodes[t])return this.body.nodes[t].shape.boundingBox}},{key:\"getConnectedNodes\",value:function(t,e){var i=[];if(void 0!==this.body.nodes[t])for(var n=this.body.nodes[t],o={},r=0;r<n.edges.length;r++){var s=n.edges[r];\"to\"!==e&&s.toId==n.id?void 0===o[s.fromId]&&(i.push(s.fromId),o[s.fromId]=!0):\"from\"!==e&&s.fromId==n.id&&void 0===o[s.toId]&&(i.push(s.toId),o[s.toId]=!0)}return i}},{key:\"getConnectedEdges\",value:function(t){var e=[];if(void 0!==this.body.nodes[t])for(var i=this.body.nodes[t],n=0;n<i.edges.length;n++)e.push(i.edges[n].id);else console.error(\"NodeId provided for getConnectedEdges does not exist. Provided: \",t);return e}},{key:\"moveNode\",value:function(t,e,i){var n=this;void 0!==this.body.nodes[t]?(this.body.nodes[t].x=Number(e),this.body.nodes[t].y=Number(i),rs((function(){n.body.emitter.emit(\"startSimulation\")}),0)):console.error(\"Node id supplied to moveNode does not exist. Provided: \",t)}}]),t}();gt({target:\"Reflect\",stat:!0},{get:function t(e,i){var n,o,r=arguments.length<3?e:arguments[2];return dt(e)===r?e[i]:(n=tt.f(e,i))?j(n,\"value\")?n.value:void 0===n.get?void 0:n.get.call(r):w(o=Ee(e))?t(o,i,r):void 0}});var vf=k.Reflect.get,gf=Tn,yf=n((function(t){t.exports=function(t,e){for(;!Object.prototype.hasOwnProperty.call(t,e)&&null!==(t=Rd(t)););return t},t.exports.default=t.exports,t.exports.__esModule=!0}));i(yf);var mf=i(n((function(t){function e(i,n,o){return\"undefined\"!=typeof Reflect&&vf?(t.exports=e=vf,t.exports.default=t.exports,t.exports.__esModule=!0):(t.exports=e=function(t,e,i){var n=yf(t,e);if(n){var o=gf(n,e);return o.get?o.get.call(i):o.value}},t.exports.default=t.exports,t.exports.__esModule=!0),e(i,n,o||i)}t.exports=e,t.exports.default=t.exports,t.exports.__esModule=!0}))),bf=Math.hypot,wf=Math.abs,kf=Math.sqrt,_f=!!bf&&bf(1/0,NaN)!==1/0;gt({target:\"Math\",stat:!0,forced:_f},{hypot:function(t,e){for(var i,n,o=0,r=0,s=arguments.length,a=0;r<s;)a<(i=wf(arguments[r++]))?(o=o*(n=a/i)*n+1,a=i):o+=i>0?(n=i/a)*n:i;return a===1/0?1/0:a*kf(o)}});var xf=k.Math.hypot;function Ef(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Of=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"transform\",value:function(t,e){So(t)||(t=[t]);for(var i=e.point.x,n=e.point.y,o=e.angle,r=e.length,s=0;s<t.length;++s){var a=t[s],h=a.x*Math.cos(o)-a.y*Math.sin(o),l=a.x*Math.sin(o)+a.y*Math.cos(o);a.x=i+r*h,a.y=n+r*l}}},{key:\"drawPath\",value:function(t,e){t.beginPath(),t.moveTo(e[0].x,e[0].y);for(var i=1;i<e.length;++i)t.lineTo(e[i].x,e[i].y);t.closePath()}}]),t}(),Cf=function(t){Ad(i,t);var e=Ef(i);function i(){return Nn(this,i),e.apply(this,arguments)}return Fn(i,null,[{key:\"draw\",value:function(t,e){if(e.image){t.save(),t.translate(e.point.x,e.point.y),t.rotate(Math.PI/2+e.angle);var i=null!=e.imageWidth?e.imageWidth:e.image.width,n=null!=e.imageHeight?e.imageHeight:e.image.height;e.image.drawImageAtPosition(t,1,-i/2,0,i,n),t.restore()}return!1}}]),i}(Of),Sf=function(t){Ad(i,t);var e=Ef(i);function i(){return Nn(this,i),e.apply(this,arguments)}return Fn(i,null,[{key:\"draw\",value:function(t,e){var i=[{x:0,y:0},{x:-1,y:.3},{x:-.9,y:0},{x:-1,y:-.3}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),i}(Of),Tf=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i=[{x:-1,y:0},{x:0,y:.3},{x:-.4,y:0},{x:0,y:-.3}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),t}(),Mf=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i={x:-.4,y:0};Of.transform(i,e),t.strokeStyle=t.fillStyle,t.fillStyle=\"rgba(0, 0, 0, 0)\";var n=Math.PI,o=e.angle-n/2,r=e.angle+n/2;return t.beginPath(),t.arc(i.x,i.y,.4*e.length,o,r,!1),t.stroke(),!0}}]),t}(),Pf=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i={x:-.3,y:0};Of.transform(i,e),t.strokeStyle=t.fillStyle,t.fillStyle=\"rgba(0, 0, 0, 0)\";var n=Math.PI,o=e.angle+n/2,r=e.angle+3*n/2;return t.beginPath(),t.arc(i.x,i.y,.4*e.length,o,r,!1),t.stroke(),!0}}]),t}(),Df=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i=[{x:.02,y:0},{x:-1,y:.3},{x:-1,y:-.3}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),t}(),If=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i=[{x:0,y:.3},{x:0,y:-.3},{x:-1,y:0}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),t}(),Bf=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i={x:-.4,y:0};return Of.transform(i,e),Ut(t,i.x,i.y,.4*e.length),!0}}]),t}(),zf=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i=[{x:0,y:.5},{x:0,y:-.5},{x:-.15,y:-.5},{x:-.15,y:.5}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),t}(),Nf=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i=[{x:0,y:.3},{x:0,y:-.3},{x:-.6,y:-.3},{x:-.6,y:.3}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),t}(),Af=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i=[{x:0,y:0},{x:-.5,y:-.3},{x:-1,y:0},{x:-.5,y:.3}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),t}(),Ff=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i=[{x:-1,y:.3},{x:-.5,y:0},{x:-1,y:-.3},{x:0,y:0}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),t}(),jf=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i;switch(e.type&&(i=e.type.toLowerCase()),i){case\"image\":return Cf.draw(t,e);case\"circle\":return Bf.draw(t,e);case\"box\":return Nf.draw(t,e);case\"crow\":return Tf.draw(t,e);case\"curve\":return Mf.draw(t,e);case\"diamond\":return Af.draw(t,e);case\"inv_curve\":return Pf.draw(t,e);case\"triangle\":return Df.draw(t,e);case\"inv_triangle\":return If.draw(t,e);case\"bar\":return zf.draw(t,e);case\"vee\":return Ff.draw(t,e);case\"arrow\":default:return Sf.draw(t,e)}}}]),t}();function Rf(t,e){var i=zo(t);if(On){var n=On(t);e&&(n=mr(n).call(n,(function(e){return Mn(t,e).enumerable}))),i.push.apply(i,n)}return i}function Lf(t){for(var e=1;e<arguments.length;e++){var i,n=null!=arguments[e]?arguments[e]:{};if(e%2)Wo(i=Rf(Object(n),!0)).call(i,(function(e){jn(t,e,n[e])}));else if(Dn)In(t,Dn(n));else{var o;Wo(o=Rf(Object(n))).call(o,(function(e){zn(t,e,Mn(n,e))}))}}return t}var Hf=function(){function t(e,i,n){Nn(this,t),this._body=i,this._labelModule=n,this.color={},this.colorDirty=!0,this.hoverWidth=1.5,this.selectionWidth=2,this.setOptions(e),this.fromPoint=this.from,this.toPoint=this.to}return Fn(t,[{key:\"connect\",value:function(){this.from=this._body.nodes[this.options.from],this.to=this._body.nodes[this.options.to]}},{key:\"cleanup\",value:function(){return!1}},{key:\"setOptions\",value:function(t){this.options=t,this.from=this._body.nodes[this.options.from],this.to=this._body.nodes[this.options.to],this.id=this.options.id}},{key:\"drawLine\",value:function(t,e,i,n){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:this.getViaNode();t.strokeStyle=this.getColor(t,e),t.lineWidth=e.width,!1!==e.dashes?this._drawDashedLine(t,e,o):this._drawLine(t,e,o)}},{key:\"_drawLine\",value:function(t,e,i,n,o){if(this.from!=this.to)this._line(t,e,i,n,o);else{var r=this._getCircleData(t),s=uo(r,3),a=s[0],h=s[1],l=s[2];this._circle(t,e,a,h,l)}}},{key:\"_drawDashedLine\",value:function(t,e,i,n,o){t.lineCap=\"round\";var r=So(e.dashes)?e.dashes:[5,5];if(void 0!==t.setLineDash){if(t.save(),t.setLineDash(r),t.lineDashOffset=0,this.from!=this.to)this._line(t,e,i);else{var s=this._getCircleData(t),a=uo(s,3),h=a[0],l=a[1],d=a[2];this._circle(t,e,h,l,d)}t.setLineDash([0]),t.lineDashOffset=0,t.restore()}else{if(this.from!=this.to)Kt(t,this.from.x,this.from.y,this.to.x,this.to.y,r);else{var c=this._getCircleData(t),u=uo(c,3),f=u[0],p=u[1],v=u[2];this._circle(t,e,f,p,v)}this.enableShadow(t,e),t.stroke(),this.disableShadow(t,e)}}},{key:\"findBorderPosition\",value:function(t,e,i){return this.from!=this.to?this._findBorderPosition(t,e,i):this._findBorderPositionCircle(t,e,i)}},{key:\"findBorderPositions\",value:function(t){if(this.from!=this.to)return{from:this._findBorderPosition(this.from,t),to:this._findBorderPosition(this.to,t)};var e,i=Oo(e=this._getCircleData(t)).call(e,0,2),n=uo(i,2),o=n[0],r=n[1];return{from:this._findBorderPositionCircle(this.from,t,{x:o,y:r,low:.25,high:.6,direction:-1}),to:this._findBorderPositionCircle(this.from,t,{x:o,y:r,low:.6,high:.8,direction:1})}}},{key:\"_getCircleData\",value:function(t){var e=this.options.selfReference.size;void 0!==t&&void 0===this.from.shape.width&&this.from.shape.resize(t);var i=gu(t,this.options.selfReference.angle,e,this.from);return[i.x,i.y,e]}},{key:\"_pointOnCircle\",value:function(t,e,i,n){var o=2*n*Math.PI;return{x:t+i*Math.cos(o),y:e-i*Math.sin(o)}}},{key:\"_findBorderPositionCircle\",value:function(t,e,i){var n,o=i.x,r=i.y,s=i.low,a=i.high,h=i.direction,l=this.options.selfReference.size,d=.5*(s+a),c=0;!0===this.options.arrowStrikethrough&&(-1===h?c=this.options.endPointOffset.from:1===h&&(c=this.options.endPointOffset.to));var u=0;do{d=.5*(s+a),n=this._pointOnCircle(o,r,l,d);var f=Math.atan2(t.y-n.y,t.x-n.x),p=t.distanceToBorder(e,f)+c-Math.sqrt(Math.pow(n.x-t.x,2)+Math.pow(n.y-t.y,2));if(Math.abs(p)<.05)break;p>0?h>0?s=d:a=d:h>0?a=d:s=d,++u}while(s<=a&&u<10);return Lf(Lf({},n),{},{t:d})}},{key:\"getLineWidth\",value:function(t,e){return!0===t?Math.max(this.selectionWidth,.3/this._body.view.scale):!0===e?Math.max(this.hoverWidth,.3/this._body.view.scale):Math.max(this.options.width,.3/this._body.view.scale)}},{key:\"getColor\",value:function(t,e){if(!1!==e.inheritsColor){if(\"both\"===e.inheritsColor&&this.from.id!==this.to.id){var i=t.createLinearGradient(this.from.x,this.from.y,this.to.x,this.to.y),n=this.from.options.color.highlight.border,o=this.to.options.color.highlight.border;return!1===this.from.selected&&!1===this.to.selected?(n=Fh(this.from.options.color.border,e.opacity),o=Fh(this.to.options.color.border,e.opacity)):!0===this.from.selected&&!1===this.to.selected?o=this.to.options.color.border:!1===this.from.selected&&!0===this.to.selected&&(n=this.from.options.color.border),i.addColorStop(0,n),i.addColorStop(1,o),i}return\"to\"===e.inheritsColor?Fh(this.to.options.color.border,e.opacity):Fh(this.from.options.color.border,e.opacity)}return Fh(e.color,e.opacity)}},{key:\"_circle\",value:function(t,e,i,n,o){this.enableShadow(t,e);var r=0,s=2*Math.PI;if(!this.options.selfReference.renderBehindTheNode){var a=this.options.selfReference.angle,h=this.options.selfReference.angle+Math.PI,l=this._findBorderPositionCircle(this.from,t,{x:i,y:n,low:a,high:h,direction:-1}),d=this._findBorderPositionCircle(this.from,t,{x:i,y:n,low:a,high:h,direction:1});r=Math.atan2(l.y-n,l.x-i),s=Math.atan2(d.y-n,d.x-i)}t.beginPath(),t.arc(i,n,o,r,s,!1),t.stroke(),this.disableShadow(t,e)}},{key:\"getDistanceToEdge\",value:function(t,e,i,n,o,r){if(this.from!=this.to)return this._getDistanceToEdge(t,e,i,n,o,r);var s=this._getCircleData(void 0),a=uo(s,3),h=a[0],l=a[1],d=a[2],c=h-o,u=l-r;return Math.abs(Math.sqrt(c*c+u*u)-d)}},{key:\"_getDistanceToLine\",value:function(t,e,i,n,o,r){var s=i-t,a=n-e,h=((o-t)*s+(r-e)*a)/(s*s+a*a);h>1?h=1:h<0&&(h=0);var l=t+h*s-o,d=e+h*a-r;return Math.sqrt(l*l+d*d)}},{key:\"getArrowData\",value:function(t,e,i,n,o,r){var s,a,h,l,d,c,u,f=r.width;\"from\"===e?(h=this.from,l=this.to,d=r.fromArrowScale<0,c=Math.abs(r.fromArrowScale),u=r.fromArrowType):\"to\"===e?(h=this.to,l=this.from,d=r.toArrowScale<0,c=Math.abs(r.toArrowScale),u=r.toArrowType):(h=this.to,l=this.from,d=r.middleArrowScale<0,c=Math.abs(r.middleArrowScale),u=r.middleArrowType);var p=15*c+3*f;if(h!=l){var v=p/xf(h.x-l.x,h.y-l.y);if(\"middle\"!==e)if(!0===this.options.smooth.enabled){var g=this._findBorderPosition(h,t,{via:i}),y=this.getPoint(g.t+v*(\"from\"===e?1:-1),i);s=Math.atan2(g.y-y.y,g.x-y.x),a=g}else s=Math.atan2(h.y-l.y,h.x-l.x),a=this._findBorderPosition(h,t);else{var m=(d?-v:v)/2,b=this.getPoint(.5+m,i),w=this.getPoint(.5-m,i);s=Math.atan2(b.y-w.y,b.x-w.x),a=this.getPoint(.5,i)}}else{var k=this._getCircleData(t),_=uo(k,3),x=_[0],E=_[1],O=_[2];if(\"from\"===e){var C=this.options.selfReference.angle,S=this.options.selfReference.angle+Math.PI,T=this._findBorderPositionCircle(this.from,t,{x:x,y:E,low:C,high:S,direction:-1});s=-2*T.t*Math.PI+1.5*Math.PI+.1*Math.PI,a=T}else if(\"to\"===e){var M=this.options.selfReference.angle,P=this.options.selfReference.angle+Math.PI,D=this._findBorderPositionCircle(this.from,t,{x:x,y:E,low:M,high:P,direction:1});s=-2*D.t*Math.PI+1.5*Math.PI-1.1*Math.PI,a=D}else{var I=this.options.selfReference.angle/(2*Math.PI);a=this._pointOnCircle(x,E,O,I),s=-2*I*Math.PI+1.5*Math.PI+.1*Math.PI}}return{point:a,core:{x:a.x-.9*p*Math.cos(s),y:a.y-.9*p*Math.sin(s)},angle:s,length:p,type:u}}},{key:\"drawArrowHead\",value:function(t,e,i,n,o){t.strokeStyle=this.getColor(t,e),t.fillStyle=t.strokeStyle,t.lineWidth=e.width,jf.draw(t,o)&&(this.enableShadow(t,e),hs(t).call(t),this.disableShadow(t,e))}},{key:\"enableShadow\",value:function(t,e){!0===e.shadow&&(t.shadowColor=e.shadowColor,t.shadowBlur=e.shadowSize,t.shadowOffsetX=e.shadowX,t.shadowOffsetY=e.shadowY)}},{key:\"disableShadow\",value:function(t,e){!0===e.shadow&&(t.shadowColor=\"rgba(0,0,0,0)\",t.shadowBlur=0,t.shadowOffsetX=0,t.shadowOffsetY=0)}},{key:\"drawBackground\",value:function(t,e){if(!1!==e.background){var i={strokeStyle:t.strokeStyle,lineWidth:t.lineWidth,dashes:t.dashes};t.strokeStyle=e.backgroundColor,t.lineWidth=e.backgroundSize,this.setStrokeDashed(t,e.backgroundDashes),t.stroke(),t.strokeStyle=i.strokeStyle,t.lineWidth=i.lineWidth,t.dashes=i.dashes,this.setStrokeDashed(t,e.dashes)}}},{key:\"setStrokeDashed\",value:function(t,e){if(!1!==e)if(void 0!==t.setLineDash){var i=So(e)?e:[5,5];t.setLineDash(i)}else console.warn(\"setLineDash is not supported in this browser. The dashed stroke cannot be used.\");else void 0!==t.setLineDash?t.setLineDash([]):console.warn(\"setLineDash is not supported in this browser. The dashed stroke cannot be used.\")}}]),t}();function Wf(t,e){var i=zo(t);if(On){var n=On(t);e&&(n=mr(n).call(n,(function(e){return Mn(t,e).enumerable}))),i.push.apply(i,n)}return i}function qf(t){for(var e=1;e<arguments.length;e++){var i,n=null!=arguments[e]?arguments[e]:{};if(e%2)Wo(i=Wf(Object(n),!0)).call(i,(function(e){jn(t,e,n[e])}));else if(Dn)In(t,Dn(n));else{var o;Wo(o=Wf(Object(n))).call(o,(function(e){zn(t,e,Mn(n,e))}))}}return t}function Vf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Uf=function(t){Ad(i,t);var e=Vf(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"_findBorderPositionBezier\",value:function(t,e){var i,n,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this._getViaCoordinates(),r=10,s=.2,a=!1,h=1,l=0,d=this.to,c=this.options.endPointOffset?this.options.endPointOffset.to:0;t.id===this.from.id&&(d=this.from,a=!0,c=this.options.endPointOffset?this.options.endPointOffset.from:0),!1===this.options.arrowStrikethrough&&(c=0);var u=0;do{n=.5*(l+h),i=this.getPoint(n,o);var f=Math.atan2(d.y-i.y,d.x-i.x),p=d.distanceToBorder(e,f)+c,v=Math.sqrt(Math.pow(i.x-d.x,2)+Math.pow(i.y-d.y,2)),g=p-v;if(Math.abs(g)<s)break;g<0?!1===a?l=n:h=n:!1===a?h=n:l=n,++u}while(l<=h&&u<r);return qf(qf({},i),{},{t:n})}},{key:\"_getDistanceToBezierEdge\",value:function(t,e,i,n,o,r,s){var a,h,l,d,c,u=1e9,f=t,p=e;for(h=1;h<10;h++)l=.1*h,d=Math.pow(1-l,2)*t+2*l*(1-l)*s.x+Math.pow(l,2)*i,c=Math.pow(1-l,2)*e+2*l*(1-l)*s.y+Math.pow(l,2)*n,h>0&&(u=(a=this._getDistanceToLine(f,p,d,c,o,r))<u?a:u),f=d,p=c;return u}},{key:\"_bezierCurve\",value:function(t,e,i,n){t.beginPath(),t.moveTo(this.fromPoint.x,this.fromPoint.y),null!=i&&null!=i.x?null!=n&&null!=n.x?t.bezierCurveTo(i.x,i.y,n.x,n.y,this.toPoint.x,this.toPoint.y):t.quadraticCurveTo(i.x,i.y,this.toPoint.x,this.toPoint.y):t.lineTo(this.toPoint.x,this.toPoint.y),this.drawBackground(t,e),this.enableShadow(t,e),t.stroke(),this.disableShadow(t,e)}},{key:\"getViaNode\",value:function(){return this._getViaCoordinates()}}]),i}(Hf);function Yf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Xf=function(t){Ad(i,t);var e=Yf(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o)).via=r.via,r._boundFunction=function(){r.positionBezierNode()},r._body.emitter.on(\"_repositionBezierNodes\",r._boundFunction),r}return Fn(i,[{key:\"setOptions\",value:function(t){mf(Ld(i.prototype),\"setOptions\",this).call(this,t);var e=!1;this.options.physics!==t.physics&&(e=!0),this.options=t,this.id=this.options.id,this.from=this._body.nodes[this.options.from],this.to=this._body.nodes[this.options.to],this.setupSupportNode(),this.connect(),!0===e&&(this.via.setOptions({physics:this.options.physics}),this.positionBezierNode())}},{key:\"connect\",value:function(){this.from=this._body.nodes[this.options.from],this.to=this._body.nodes[this.options.to],void 0===this.from||void 0===this.to||!1===this.options.physics||this.from.id===this.to.id?this.via.setOptions({physics:!1}):this.via.setOptions({physics:!0})}},{key:\"cleanup\",value:function(){return this._body.emitter.off(\"_repositionBezierNodes\",this._boundFunction),void 0!==this.via&&(delete this._body.nodes[this.via.id],this.via=void 0,!0)}},{key:\"setupSupportNode\",value:function(){if(void 0===this.via){var t=\"edgeId:\"+this.id,e=this._body.functions.createNode({id:t,shape:\"circle\",physics:!0,hidden:!0});this._body.nodes[t]=e,this.via=e,this.via.parentEdgeId=this.id,this.positionBezierNode()}}},{key:\"positionBezierNode\",value:function(){void 0!==this.via&&void 0!==this.from&&void 0!==this.to?(this.via.x=.5*(this.from.x+this.to.x),this.via.y=.5*(this.from.y+this.to.y)):void 0!==this.via&&(this.via.x=0,this.via.y=0)}},{key:\"_line\",value:function(t,e,i){this._bezierCurve(t,e,i)}},{key:\"_getViaCoordinates\",value:function(){return this.via}},{key:\"getViaNode\",value:function(){return this.via}},{key:\"getPoint\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.via;if(this.from===this.to){var i=this._getCircleData(),n=uo(i,3),o=n[0],r=n[1],s=n[2],a=2*Math.PI*(1-t);return{x:o+s*Math.sin(a),y:r+s-s*(1-Math.cos(a))}}return{x:Math.pow(1-t,2)*this.fromPoint.x+2*t*(1-t)*e.x+Math.pow(t,2)*this.toPoint.x,y:Math.pow(1-t,2)*this.fromPoint.y+2*t*(1-t)*e.y+Math.pow(t,2)*this.toPoint.y}}},{key:\"_findBorderPosition\",value:function(t,e){return this._findBorderPositionBezier(t,e,this.via)}},{key:\"_getDistanceToEdge\",value:function(t,e,i,n,o,r){return this._getDistanceToBezierEdge(t,e,i,n,o,r,this.via)}}]),i}(Uf);function Gf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Kf=function(t){Ad(i,t);var e=Gf(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"_line\",value:function(t,e,i){this._bezierCurve(t,e,i)}},{key:\"getViaNode\",value:function(){return this._getViaCoordinates()}},{key:\"_getViaCoordinates\",value:function(){var t,e,i=this.options.smooth.roundness,n=this.options.smooth.type,o=Math.abs(this.from.x-this.to.x),r=Math.abs(this.from.y-this.to.y);if(\"discrete\"===n||\"diagonalCross\"===n){var s,a;s=a=o<=r?i*r:i*o,this.from.x>this.to.x&&(s=-s),this.from.y>=this.to.y&&(a=-a);var h=this.from.x+s,l=this.from.y+a;return\"discrete\"===n&&(o<=r?h=o<i*r?this.from.x:h:l=r<i*o?this.from.y:l),{x:h,y:l}}if(\"straightCross\"===n){var d=(1-i)*o,c=(1-i)*r;return o<=r?(d=0,this.from.y<this.to.y&&(c=-c)):(this.from.x<this.to.x&&(d=-d),c=0),{x:this.to.x+d,y:this.to.y+c}}if(\"horizontal\"===n){var u=(1-i)*o;return this.from.x<this.to.x&&(u=-u),{x:this.to.x+u,y:this.from.y}}if(\"vertical\"===n){var f=(1-i)*r;return this.from.y<this.to.y&&(f=-f),{x:this.from.x,y:this.to.y+f}}if(\"curvedCW\"===n){o=this.to.x-this.from.x,r=this.from.y-this.to.y;var p=Math.sqrt(o*o+r*r),v=Math.PI,g=(Math.atan2(r,o)+(.5*i+.5)*v)%(2*v);return{x:this.from.x+(.5*i+.5)*p*Math.sin(g),y:this.from.y+(.5*i+.5)*p*Math.cos(g)}}if(\"curvedCCW\"===n){o=this.to.x-this.from.x,r=this.from.y-this.to.y;var y=Math.sqrt(o*o+r*r),m=Math.PI,b=(Math.atan2(r,o)+(.5*-i+.5)*m)%(2*m);return{x:this.from.x+(.5*i+.5)*y*Math.sin(b),y:this.from.y+(.5*i+.5)*y*Math.cos(b)}}t=e=o<=r?i*r:i*o,this.from.x>this.to.x&&(t=-t),this.from.y>=this.to.y&&(e=-e);var w=this.from.x+t,k=this.from.y+e;return o<=r?w=this.from.x<=this.to.x?this.to.x<w?this.to.x:w:this.to.x>w?this.to.x:w:k=this.from.y>=this.to.y?this.to.y>k?this.to.y:k:this.to.y<k?this.to.y:k,{x:w,y:k}}},{key:\"_findBorderPosition\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this._findBorderPositionBezier(t,e,i.via)}},{key:\"_getDistanceToEdge\",value:function(t,e,i,n,o,r){var s=arguments.length>6&&void 0!==arguments[6]?arguments[6]:this._getViaCoordinates();return this._getDistanceToBezierEdge(t,e,i,n,o,r,s)}},{key:\"getPoint\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this._getViaCoordinates(),i=t,n=Math.pow(1-i,2)*this.fromPoint.x+2*i*(1-i)*e.x+Math.pow(i,2)*this.toPoint.x,o=Math.pow(1-i,2)*this.fromPoint.y+2*i*(1-i)*e.y+Math.pow(i,2)*this.toPoint.y;return{x:n,y:o}}}]),i}(Uf);function $f(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}function Zf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Qf=function(t){Ad(i,t);var e=Zf(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"_line\",value:function(t,e,i){var n=i[0],o=i[1];this._bezierCurve(t,e,n,o)}},{key:\"_getViaCoordinates\",value:function(){var t,e,i,n,o=this.from.x-this.to.x,r=this.from.y-this.to.y,s=this.options.smooth.roundness;return(Math.abs(o)>Math.abs(r)||!0===this.options.smooth.forceDirection||\"horizontal\"===this.options.smooth.forceDirection)&&\"vertical\"!==this.options.smooth.forceDirection?(e=this.from.y,n=this.to.y,t=this.from.x-s*o,i=this.to.x+s*o):(e=this.from.y-s*r,n=this.to.y+s*r,t=this.from.x,i=this.to.x),[{x:t,y:e},{x:i,y:n}]}},{key:\"getViaNode\",value:function(){return this._getViaCoordinates()}},{key:\"_findBorderPosition\",value:function(t,e){return this._findBorderPositionBezier(t,e)}},{key:\"_getDistanceToEdge\",value:function(t,e,i,n,o,r){var s=arguments.length>6&&void 0!==arguments[6]?arguments[6]:this._getViaCoordinates(),a=uo(s,2),h=a[0],l=a[1];return this._getDistanceToBezierEdge2(t,e,i,n,o,r,h,l)}},{key:\"getPoint\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this._getViaCoordinates(),i=uo(e,2),n=i[0],o=i[1],r=t,s=[Math.pow(1-r,3),3*r*Math.pow(1-r,2),3*Math.pow(r,2)*(1-r),Math.pow(r,3)],a=s[0]*this.fromPoint.x+s[1]*n.x+s[2]*o.x+s[3]*this.toPoint.x,h=s[0]*this.fromPoint.y+s[1]*n.y+s[2]*o.y+s[3]*this.toPoint.y;return{x:a,y:h}}}]),i}(function(t){Ad(i,t);var e=$f(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"_getDistanceToBezierEdge2\",value:function(t,e,i,n,o,r,s,a){for(var h=1e9,l=t,d=e,c=[0,0,0,0],u=1;u<10;u++){var f=.1*u;c[0]=Math.pow(1-f,3),c[1]=3*f*Math.pow(1-f,2),c[2]=3*Math.pow(f,2)*(1-f),c[3]=Math.pow(f,3);var p=c[0]*t+c[1]*s.x+c[2]*a.x+c[3]*i,v=c[0]*e+c[1]*s.y+c[2]*a.y+c[3]*n;if(u>0){var g=this._getDistanceToLine(l,d,p,v,o,r);h=g<h?g:h}l=p,d=v}return h}}]),i}(Uf));function Jf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var tp=function(t){Ad(i,t);var e=Jf(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"_line\",value:function(t,e){t.beginPath(),t.moveTo(this.fromPoint.x,this.fromPoint.y),t.lineTo(this.toPoint.x,this.toPoint.y),this.enableShadow(t,e),t.stroke(),this.disableShadow(t,e)}},{key:\"getViaNode\",value:function(){}},{key:\"getPoint\",value:function(t){return{x:(1-t)*this.fromPoint.x+t*this.toPoint.x,y:(1-t)*this.fromPoint.y+t*this.toPoint.y}}},{key:\"_findBorderPosition\",value:function(t,e){var i=this.to,n=this.from;t.id===this.from.id&&(i=this.from,n=this.to);var o=Math.atan2(i.y-n.y,i.x-n.x),r=i.x-n.x,s=i.y-n.y,a=Math.sqrt(r*r+s*s),h=(a-t.distanceToBorder(e,o))/a;return{x:(1-h)*n.x+h*i.x,y:(1-h)*n.y+h*i.y,t:0}}},{key:\"_getDistanceToEdge\",value:function(t,e,i,n,o,r){return this._getDistanceToLine(t,e,i,n,o,r)}}]),i}(Hf),ep=function(){function t(e,i,n,o,r){if(Nn(this,t),void 0===i)throw new Error(\"No body provided\");this.options=Kh(o),this.globalOptions=o,this.defaultOptions=r,this.body=i,this.imagelist=n,this.id=void 0,this.fromId=void 0,this.toId=void 0,this.selected=!1,this.hover=!1,this.labelDirty=!0,this.baseWidth=this.options.width,this.baseFontSize=this.options.font.size,this.from=void 0,this.to=void 0,this.edgeType=void 0,this.connected=!1,this.labelModule=new _u(this.body,this.options,!0),this.setOptions(e)}return Fn(t,[{key:\"setOptions\",value:function(e){if(e){var i=void 0!==e.physics&&this.options.physics!==e.physics||void 0!==e.hidden&&(this.options.hidden||!1)!==(e.hidden||!1)||void 0!==e.from&&this.options.from!==e.from||void 0!==e.to&&this.options.to!==e.to;t.parseOptions(this.options,e,!0,this.globalOptions),void 0!==e.id&&(this.id=e.id),void 0!==e.from&&(this.fromId=e.from),void 0!==e.to&&(this.toId=e.to),void 0!==e.title&&(this.title=e.title),void 0!==e.value&&(e.value=hu(e.value));var n=[e,this.options,this.defaultOptions];return this.chooser=fu(\"edge\",n),this.updateLabelModule(e),i=this.updateEdgeType()||i,this._setInteractionWidths(),this.connect(),i}}},{key:\"getFormattingValues\",value:function(){var t=!0===this.options.arrows.to||!0===this.options.arrows.to.enabled,e=!0===this.options.arrows.from||!0===this.options.arrows.from.enabled,i=!0===this.options.arrows.middle||!0===this.options.arrows.middle.enabled,n=this.options.color.inherit,o={toArrow:t,toArrowScale:this.options.arrows.to.scaleFactor,toArrowType:this.options.arrows.to.type,toArrowSrc:this.options.arrows.to.src,toArrowImageWidth:this.options.arrows.to.imageWidth,toArrowImageHeight:this.options.arrows.to.imageHeight,middleArrow:i,middleArrowScale:this.options.arrows.middle.scaleFactor,middleArrowType:this.options.arrows.middle.type,middleArrowSrc:this.options.arrows.middle.src,middleArrowImageWidth:this.options.arrows.middle.imageWidth,middleArrowImageHeight:this.options.arrows.middle.imageHeight,fromArrow:e,fromArrowScale:this.options.arrows.from.scaleFactor,fromArrowType:this.options.arrows.from.type,fromArrowSrc:this.options.arrows.from.src,fromArrowImageWidth:this.options.arrows.from.imageWidth,fromArrowImageHeight:this.options.arrows.from.imageHeight,arrowStrikethrough:this.options.arrowStrikethrough,color:n?void 0:this.options.color.color,inheritsColor:n,opacity:this.options.color.opacity,hidden:this.options.hidden,length:this.options.length,shadow:this.options.shadow.enabled,shadowColor:this.options.shadow.color,shadowSize:this.options.shadow.size,shadowX:this.options.shadow.x,shadowY:this.options.shadow.y,dashes:this.options.dashes,width:this.options.width,background:this.options.background.enabled,backgroundColor:this.options.background.color,backgroundSize:this.options.background.size,backgroundDashes:this.options.background.dashes};if(this.selected||this.hover)if(!0===this.chooser){if(this.selected){var r=this.options.selectionWidth;\"function\"==typeof r?o.width=r(o.width):\"number\"==typeof r&&(o.width+=r),o.width=Math.max(o.width,.3/this.body.view.scale),o.color=this.options.color.highlight,o.shadow=this.options.shadow.enabled}else if(this.hover){var s=this.options.hoverWidth;\"function\"==typeof s?o.width=s(o.width):\"number\"==typeof s&&(o.width+=s),o.width=Math.max(o.width,.3/this.body.view.scale),o.color=this.options.color.hover,o.shadow=this.options.shadow.enabled}}else\"function\"==typeof this.chooser&&(this.chooser(o,this.options.id,this.selected,this.hover),void 0!==o.color&&(o.inheritsColor=!1),!1===o.shadow&&(o.shadowColor===this.options.shadow.color&&o.shadowSize===this.options.shadow.size&&o.shadowX===this.options.shadow.x&&o.shadowY===this.options.shadow.y||(o.shadow=!0)));else o.shadow=this.options.shadow.enabled,o.width=Math.max(o.width,.3/this.body.view.scale);return o}},{key:\"updateLabelModule\",value:function(t){var e=[t,this.options,this.globalOptions,this.defaultOptions];this.labelModule.update(this.options,e),void 0!==this.labelModule.baseSize&&(this.baseFontSize=this.labelModule.baseSize)}},{key:\"updateEdgeType\",value:function(){var t=this.options.smooth,e=!1,i=!0;return void 0!==this.edgeType&&((this.edgeType instanceof Xf&&!0===t.enabled&&\"dynamic\"===t.type||this.edgeType instanceof Qf&&!0===t.enabled&&\"cubicBezier\"===t.type||this.edgeType instanceof Kf&&!0===t.enabled&&\"dynamic\"!==t.type&&\"cubicBezier\"!==t.type||this.edgeType instanceof tp&&!1===t.type.enabled)&&(i=!1),!0===i&&(e=this.cleanup())),!0===i?!0===t.enabled?\"dynamic\"===t.type?(e=!0,this.edgeType=new Xf(this.options,this.body,this.labelModule)):\"cubicBezier\"===t.type?this.edgeType=new Qf(this.options,this.body,this.labelModule):this.edgeType=new Kf(this.options,this.body,this.labelModule):this.edgeType=new tp(this.options,this.body,this.labelModule):this.edgeType.setOptions(this.options),e}},{key:\"connect\",value:function(){this.disconnect(),this.from=this.body.nodes[this.fromId]||void 0,this.to=this.body.nodes[this.toId]||void 0,this.connected=void 0!==this.from&&void 0!==this.to,!0===this.connected?(this.from.attachEdge(this),this.to.attachEdge(this)):(this.from&&this.from.detachEdge(this),this.to&&this.to.detachEdge(this)),this.edgeType.connect()}},{key:\"disconnect\",value:function(){this.from&&(this.from.detachEdge(this),this.from=void 0),this.to&&(this.to.detachEdge(this),this.to=void 0),this.connected=!1}},{key:\"getTitle\",value:function(){return this.title}},{key:\"isSelected\",value:function(){return this.selected}},{key:\"getValue\",value:function(){return this.options.value}},{key:\"setValueRange\",value:function(t,e,i){if(void 0!==this.options.value){var n=this.options.scaling.customScalingFunction(t,e,i,this.options.value),o=this.options.scaling.max-this.options.scaling.min;if(!0===this.options.scaling.label.enabled){var r=this.options.scaling.label.max-this.options.scaling.label.min;this.options.font.size=this.options.scaling.label.min+n*r}this.options.width=this.options.scaling.min+n*o}else this.options.width=this.baseWidth,this.options.font.size=this.baseFontSize;this._setInteractionWidths(),this.updateLabelModule()}},{key:\"_setInteractionWidths\",value:function(){\"function\"==typeof this.options.hoverWidth?this.edgeType.hoverWidth=this.options.hoverWidth(this.options.width):this.edgeType.hoverWidth=this.options.hoverWidth+this.options.width,\"function\"==typeof this.options.selectionWidth?this.edgeType.selectionWidth=this.options.selectionWidth(this.options.width):this.edgeType.selectionWidth=this.options.selectionWidth+this.options.width}},{key:\"draw\",value:function(t){var e=this.getFormattingValues();if(!e.hidden){var i=this.edgeType.getViaNode();this.edgeType.drawLine(t,e,this.selected,this.hover,i),this.drawLabel(t,i)}}},{key:\"drawArrows\",value:function(t){var e=this.getFormattingValues();if(!e.hidden){var i=this.edgeType.getViaNode(),n={};this.edgeType.fromPoint=this.edgeType.from,this.edgeType.toPoint=this.edgeType.to,e.fromArrow&&(n.from=this.edgeType.getArrowData(t,\"from\",i,this.selected,this.hover,e),!1===e.arrowStrikethrough&&(this.edgeType.fromPoint=n.from.core),e.fromArrowSrc&&(n.from.image=this.imagelist.load(e.fromArrowSrc)),e.fromArrowImageWidth&&(n.from.imageWidth=e.fromArrowImageWidth),e.fromArrowImageHeight&&(n.from.imageHeight=e.fromArrowImageHeight)),e.toArrow&&(n.to=this.edgeType.getArrowData(t,\"to\",i,this.selected,this.hover,e),!1===e.arrowStrikethrough&&(this.edgeType.toPoint=n.to.core),e.toArrowSrc&&(n.to.image=this.imagelist.load(e.toArrowSrc)),e.toArrowImageWidth&&(n.to.imageWidth=e.toArrowImageWidth),e.toArrowImageHeight&&(n.to.imageHeight=e.toArrowImageHeight)),e.middleArrow&&(n.middle=this.edgeType.getArrowData(t,\"middle\",i,this.selected,this.hover,e),e.middleArrowSrc&&(n.middle.image=this.imagelist.load(e.middleArrowSrc)),e.middleArrowImageWidth&&(n.middle.imageWidth=e.middleArrowImageWidth),e.middleArrowImageHeight&&(n.middle.imageHeight=e.middleArrowImageHeight)),e.fromArrow&&this.edgeType.drawArrowHead(t,e,this.selected,this.hover,n.from),e.middleArrow&&this.edgeType.drawArrowHead(t,e,this.selected,this.hover,n.middle),e.toArrow&&this.edgeType.drawArrowHead(t,e,this.selected,this.hover,n.to)}}},{key:\"drawLabel\",value:function(t,e){if(void 0!==this.options.label){var i,n=this.from,o=this.to;if(this.labelModule.differentState(this.selected,this.hover)&&this.labelModule.getTextSize(t,this.selected,this.hover),n.id!=o.id){this.labelModule.pointToSelf=!1,i=this.edgeType.getPoint(.5,e),t.save();var r=this._getRotation(t);0!=r.angle&&(t.translate(r.x,r.y),t.rotate(r.angle)),this.labelModule.draw(t,i.x,i.y,this.selected,this.hover),t.restore()}else{this.labelModule.pointToSelf=!0;var s=gu(t,this.options.selfReference.angle,this.options.selfReference.size,n);i=this._pointOnCircle(s.x,s.y,this.options.selfReference.size,this.options.selfReference.angle),this.labelModule.draw(t,i.x,i.y,this.selected,this.hover)}}}},{key:\"getItemsOnPoint\",value:function(t){var e=[];if(this.labelModule.visible()){var i=this._getRotation();pu(this.labelModule.getSize(),t,i)&&e.push({edgeId:this.id,labelId:0})}var n={left:t.x,top:t.y};return this.isOverlappingWith(n)&&e.push({edgeId:this.id}),e}},{key:\"isOverlappingWith\",value:function(t){if(this.connected){var e=this.from.x,i=this.from.y,n=this.to.x,o=this.to.y,r=t.left,s=t.top;return this.edgeType.getDistanceToEdge(e,i,n,o,r,s)<10}return!1}},{key:\"_getRotation\",value:function(t){var e=this.edgeType.getViaNode(),i=this.edgeType.getPoint(.5,e);void 0!==t&&this.labelModule.calculateLabelSize(t,this.selected,this.hover,i.x,i.y);var n={x:i.x,y:this.labelModule.size.yLine,angle:0};if(!this.labelModule.visible())return n;if(\"horizontal\"===this.options.font.align)return n;var o=this.from.y-this.to.y,r=this.from.x-this.to.x,s=Math.atan2(o,r);return(s<-1&&r<0||s>0&&r<0)&&(s+=Math.PI),n.angle=s,n}},{key:\"_pointOnCircle\",value:function(t,e,i,n){return{x:t+i*Math.cos(n),y:e-i*Math.sin(n)}}},{key:\"select\",value:function(){this.selected=!0}},{key:\"unselect\",value:function(){this.selected=!1}},{key:\"cleanup\",value:function(){return this.edgeType.cleanup()}},{key:\"remove\",value:function(){this.cleanup(),this.disconnect(),delete this.body.edges[this.id]}},{key:\"endPointsValid\",value:function(){return void 0!==this.body.nodes[this.fromId]&&void 0!==this.body.nodes[this.toId]}}],[{key:\"parseOptions\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},o=arguments.length>4&&void 0!==arguments[4]&&arguments[4],r=[\"endPointOffset\",\"arrowStrikethrough\",\"id\",\"from\",\"hidden\",\"hoverWidth\",\"labelHighlightBold\",\"length\",\"line\",\"opacity\",\"physics\",\"scaling\",\"selectionWidth\",\"selfReferenceSize\",\"selfReference\",\"to\",\"title\",\"value\",\"width\",\"font\",\"chosen\",\"widthConstraint\"];if(Eh(r,t,e,i),void 0!==e.endPointOffset&&void 0!==e.endPointOffset.from&&(wd(e.endPointOffset.from)?t.endPointOffset.from=e.endPointOffset.from:(t.endPointOffset.from=void 0!==n.endPointOffset.from?n.endPointOffset.from:0,console.error(\"endPointOffset.from is not a valid number\"))),void 0!==e.endPointOffset&&void 0!==e.endPointOffset.to&&(wd(e.endPointOffset.to)?t.endPointOffset.to=e.endPointOffset.to:(t.endPointOffset.to=void 0!==n.endPointOffset.to?n.endPointOffset.to:0,console.error(\"endPointOffset.to is not a valid number\"))),vu(e.label)?t.label=e.label:vu(t.label)||(t.label=void 0),$h(t,e,\"smooth\",n),$h(t,e,\"shadow\",n),$h(t,e,\"background\",n),void 0!==e.dashes&&null!==e.dashes?t.dashes=e.dashes:!0===i&&null===e.dashes&&(t.dashes=Gr(n.dashes)),void 0!==e.scaling&&null!==e.scaling?(void 0!==e.scaling.min&&(t.scaling.min=e.scaling.min),void 0!==e.scaling.max&&(t.scaling.max=e.scaling.max),$h(t.scaling,e.scaling,\"label\",n.scaling)):!0===i&&null===e.scaling&&(t.scaling=Gr(n.scaling)),void 0!==e.arrows&&null!==e.arrows)if(\"string\"==typeof e.arrows){var s=e.arrows.toLowerCase();t.arrows.to.enabled=-1!=Hr(s).call(s,\"to\"),t.arrows.middle.enabled=-1!=Hr(s).call(s,\"middle\"),t.arrows.from.enabled=-1!=Hr(s).call(s,\"from\")}else{if(\"object\"!==go(e.arrows))throw new Error(\"The arrow newOptions can only be an object or a string. Refer to the documentation. You used:\"+es(e.arrows));$h(t.arrows,e.arrows,\"to\",n.arrows),$h(t.arrows,e.arrows,\"middle\",n.arrows),$h(t.arrows,e.arrows,\"from\",n.arrows)}else!0===i&&null===e.arrows&&(t.arrows=Gr(n.arrows));if(void 0!==e.color&&null!==e.color){var a=bh(e.color)?{color:e.color,highlight:e.color,hover:e.color,inherit:!1,opacity:1}:e.color,h=t.color;if(o)Ch(h,n.color,!1,i);else for(var l in h)Object.prototype.hasOwnProperty.call(h,l)&&delete h[l];if(bh(h))h.color=h,h.highlight=h,h.hover=h,h.inherit=!1,void 0===a.opacity&&(h.opacity=1);else{var d=!1;void 0!==a.color&&(h.color=a.color,d=!0),void 0!==a.highlight&&(h.highlight=a.highlight,d=!0),void 0!==a.hover&&(h.hover=a.hover,d=!0),void 0!==a.inherit&&(h.inherit=a.inherit),void 0!==a.opacity&&(h.opacity=Math.min(1,Math.max(0,a.opacity))),!0===d?h.inherit=!1:void 0===h.inherit&&(h.inherit=\"from\")}}else!0===i&&null===e.color&&(t.color=Kh(n.color));!0===i&&null===e.font&&(t.font=Kh(n.font)),Object.prototype.hasOwnProperty.call(e,\"selfReferenceSize\")&&(console.warn(\"The selfReferenceSize property has been deprecated. Please use selfReference property instead. The selfReference can be set like thise selfReference:{size:30, angle:Math.PI / 4}\"),t.selfReference.size=e.selfReferenceSize)}}]),t}(),ip=function(){function t(e,i,n){var o,r=this;Nn(this,t),this.body=e,this.images=i,this.groups=n,this.body.functions.createEdge=Vt(o=this.create).call(o,this),this.edgesListeners={add:function(t,e){r.add(e.items)},update:function(t,e){r.update(e.items)},remove:function(t,e){r.remove(e.items)}},this.options={},this.defaultOptions={arrows:{to:{enabled:!1,scaleFactor:1,type:\"arrow\"},middle:{enabled:!1,scaleFactor:1,type:\"arrow\"},from:{enabled:!1,scaleFactor:1,type:\"arrow\"}},endPointOffset:{from:0,to:0},arrowStrikethrough:!0,color:{color:\"#848484\",highlight:\"#848484\",hover:\"#848484\",inherit:\"from\",opacity:1},dashes:!1,font:{color:\"#343434\",size:14,face:\"arial\",background:\"none\",strokeWidth:2,strokeColor:\"#ffffff\",align:\"horizontal\",multi:!1,vadjust:0,bold:{mod:\"bold\"},boldital:{mod:\"bold italic\"},ital:{mod:\"italic\"},mono:{mod:\"\",size:15,face:\"courier new\",vadjust:2}},hidden:!1,hoverWidth:1.5,label:void 0,labelHighlightBold:!0,length:void 0,physics:!0,scaling:{min:1,max:15,label:{enabled:!0,min:14,max:30,maxVisible:30,drawThreshold:5},customScalingFunction:function(t,e,i,n){if(e===t)return.5;var o=1/(e-t);return Math.max(0,(n-t)*o)}},selectionWidth:1.5,selfReference:{size:20,angle:Math.PI/4,renderBehindTheNode:!0},shadow:{enabled:!1,color:\"rgba(0,0,0,0.5)\",size:10,x:5,y:5},background:{enabled:!1,color:\"rgba(111,111,111,1)\",size:10,dashes:!1},smooth:{enabled:!0,type:\"dynamic\",forceDirection:\"none\",roundness:.5},title:void 0,width:1,value:void 0},Ch(this.options,this.defaultOptions),this.bindEventListeners()}return Fn(t,[{key:\"bindEventListeners\",value:function(){var t,e,i=this;this.body.emitter.on(\"_forceDisableDynamicCurves\",(function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];\"dynamic\"===t&&(t=\"continuous\");var n=!1;for(var o in i.body.edges)if(Object.prototype.hasOwnProperty.call(i.body.edges,o)){var r=i.body.edges[o],s=i.body.data.edges.get(o);if(null!=s){var a=s.smooth;void 0!==a&&!0===a.enabled&&\"dynamic\"===a.type&&(void 0===t?r.setOptions({smooth:!1}):r.setOptions({smooth:{type:t}}),n=!0)}}!0===e&&!0===n&&i.body.emitter.emit(\"_dataChanged\")})),this.body.emitter.on(\"_dataUpdated\",(function(){i.reconnectEdges()})),this.body.emitter.on(\"refreshEdges\",Vt(t=this.refresh).call(t,this)),this.body.emitter.on(\"refresh\",Vt(e=this.refresh).call(e,this)),this.body.emitter.on(\"destroy\",(function(){Dh(i.edgesListeners,(function(t,e){i.body.data.edges&&i.body.data.edges.off(e,t)})),delete i.body.functions.createEdge,delete i.edgesListeners.add,delete i.edgesListeners.update,delete i.edgesListeners.remove,delete i.edgesListeners}))}},{key:\"setOptions\",value:function(t){if(void 0!==t){ep.parseOptions(this.options,t,!0,this.defaultOptions,!0);var e=!1;if(void 0!==t.smooth)for(var i in this.body.edges)Object.prototype.hasOwnProperty.call(this.body.edges,i)&&(e=this.body.edges[i].updateEdgeType()||e);if(void 0!==t.font)for(var n in this.body.edges)Object.prototype.hasOwnProperty.call(this.body.edges,n)&&this.body.edges[n].updateLabelModule();void 0===t.hidden&&void 0===t.physics&&!0!==e||this.body.emitter.emit(\"_dataChanged\")}}},{key:\"setData\",value:function(t){var e=this,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=this.body.data.edges;if(nu(\"id\",t))this.body.data.edges=t;else if(So(t))this.body.data.edges=new tu,this.body.data.edges.add(t);else{if(t)throw new TypeError(\"Array or DataSet expected\");this.body.data.edges=new tu}if(n&&Dh(this.edgesListeners,(function(t,e){n.off(e,t)})),this.body.edges={},this.body.data.edges){Dh(this.edgesListeners,(function(t,i){e.body.data.edges.on(i,t)}));var o=this.body.data.edges.getIds();this.add(o,!0)}this.body.emitter.emit(\"_adjustEdgesForHierarchicalLayout\"),!1===i&&this.body.emitter.emit(\"_dataChanged\")}},{key:\"add\",value:function(t){for(var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=this.body.edges,n=this.body.data.edges,o=0;o<t.length;o++){var r=t[o],s=i[r];s&&s.disconnect();var a=n.get(r,{showInternalIds:!0});i[r]=this.create(a)}this.body.emitter.emit(\"_adjustEdgesForHierarchicalLayout\"),!1===e&&this.body.emitter.emit(\"_dataChanged\")}},{key:\"update\",value:function(t){for(var e=this.body.edges,i=this.body.data.edges,n=!1,o=0;o<t.length;o++){var r=t[o],s=i.get(r),a=e[r];void 0!==a?(a.disconnect(),n=a.setOptions(s)||n,a.connect()):(this.body.edges[r]=this.create(s),n=!0)}!0===n?(this.body.emitter.emit(\"_adjustEdgesForHierarchicalLayout\"),this.body.emitter.emit(\"_dataChanged\")):this.body.emitter.emit(\"_dataUpdated\")}},{key:\"remove\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(0!==t.length){var i=this.body.edges;Dh(t,(function(t){var e=i[t];void 0!==e&&e.remove()})),e&&this.body.emitter.emit(\"_dataChanged\")}}},{key:\"refresh\",value:function(){var t=this;Dh(this.body.edges,(function(e,i){var n=t.body.data.edges.get(i);void 0!==n&&e.setOptions(n)}))}},{key:\"create\",value:function(t){return new ep(t,this.body,this.images,this.options,this.defaultOptions)}},{key:\"reconnectEdges\",value:function(){var t,e=this.body.nodes,i=this.body.edges;for(t in e)Object.prototype.hasOwnProperty.call(e,t)&&(e[t].edges=[]);for(t in i)if(Object.prototype.hasOwnProperty.call(i,t)){var n=i[t];n.from=null,n.to=null,n.connect()}}},{key:\"getConnectedNodes\",value:function(t){var e=[];if(void 0!==this.body.edges[t]){var i=this.body.edges[t];void 0!==i.fromId&&e.push(i.fromId),void 0!==i.toId&&e.push(i.toId)}return e}},{key:\"_updateState\",value:function(){this._addMissingEdges(),this._removeInvalidEdges()}},{key:\"_removeInvalidEdges\",value:function(){var t=this,e=[];Dh(this.body.edges,(function(i,n){var o=t.body.nodes[i.toId],r=t.body.nodes[i.fromId];void 0!==o&&!0===o.isCluster||void 0!==r&&!0===r.isCluster||void 0!==o&&void 0!==r||e.push(n)})),this.remove(e,!1)}},{key:\"_addMissingEdges\",value:function(){var t=this.body.data.edges;if(null!=t){var e=this.body.edges,i=[];Wo(t).call(t,(function(t,n){void 0===e[n]&&i.push(n)})),this.add(i,!0)}}}]),t}(),np=function(){function t(e,i,n){Nn(this,t),this.body=e,this.physicsBody=i,this.barnesHutTree,this.setOptions(n),this._rng=ah(\"BARNES HUT SOLVER\")}return Fn(t,[{key:\"setOptions\",value:function(t){this.options=t,this.thetaInversed=1/this.options.theta,this.overlapAvoidanceFactor=1-Math.max(0,Math.min(1,this.options.avoidOverlap))}},{key:\"solve\",value:function(){if(0!==this.options.gravitationalConstant&&this.physicsBody.physicsNodeIndices.length>0){var t,e=this.body.nodes,i=this.physicsBody.physicsNodeIndices,n=i.length,o=this._formBarnesHutTree(e,i);this.barnesHutTree=o;for(var r=0;r<n;r++)(t=e[i[r]]).options.mass>0&&this._getForceContributions(o.root,t)}}},{key:\"_getForceContributions\",value:function(t,e){this._getForceContribution(t.children.NW,e),this._getForceContribution(t.children.NE,e),this._getForceContribution(t.children.SW,e),this._getForceContribution(t.children.SE,e)}},{key:\"_getForceContribution\",value:function(t,e){if(t.childrenCount>0){var i=t.centerOfMass.x-e.x,n=t.centerOfMass.y-e.y,o=Math.sqrt(i*i+n*n);o*t.calcSize>this.thetaInversed?this._calculateForces(o,i,n,e,t):4===t.childrenCount?this._getForceContributions(t,e):t.children.data.id!=e.id&&this._calculateForces(o,i,n,e,t)}}},{key:\"_calculateForces\",value:function(t,e,i,n,o){0===t&&(e=t=.1),this.overlapAvoidanceFactor<1&&n.shape.radius&&(t=Math.max(.1+this.overlapAvoidanceFactor*n.shape.radius,t-n.shape.radius));var r=this.options.gravitationalConstant*o.mass*n.options.mass/Math.pow(t,3),s=e*r,a=i*r;this.physicsBody.forces[n.id].x+=s,this.physicsBody.forces[n.id].y+=a}},{key:\"_formBarnesHutTree\",value:function(t,e){for(var i,n=e.length,o=t[e[0]].x,r=t[e[0]].y,s=t[e[0]].x,a=t[e[0]].y,h=1;h<n;h++){var l=t[e[h]],d=l.x,c=l.y;l.options.mass>0&&(d<o&&(o=d),d>s&&(s=d),c<r&&(r=c),c>a&&(a=c))}var u=Math.abs(s-o)-Math.abs(a-r);u>0?(r-=.5*u,a+=.5*u):(o+=.5*u,s-=.5*u);var f=Math.max(1e-5,Math.abs(s-o)),p=.5*f,v=.5*(o+s),g=.5*(r+a),y={root:{centerOfMass:{x:0,y:0},mass:0,range:{minX:v-p,maxX:v+p,minY:g-p,maxY:g+p},size:f,calcSize:1/f,children:{data:null},maxWidth:0,level:0,childrenCount:4}};this._splitBranch(y.root);for(var m=0;m<n;m++)(i=t[e[m]]).options.mass>0&&this._placeInTree(y.root,i);return y}},{key:\"_updateBranchMass\",value:function(t,e){var i=t.centerOfMass,n=t.mass+e.options.mass,o=1/n;i.x=i.x*t.mass+e.x*e.options.mass,i.x*=o,i.y=i.y*t.mass+e.y*e.options.mass,i.y*=o,t.mass=n;var r=Math.max(Math.max(e.height,e.radius),e.width);t.maxWidth=t.maxWidth<r?r:t.maxWidth}},{key:\"_placeInTree\",value:function(t,e,i){1==i&&void 0!==i||this._updateBranchMass(t,e);var n,o=t.children.NW.range;n=o.maxX>e.x?o.maxY>e.y?\"NW\":\"SW\":o.maxY>e.y?\"NE\":\"SE\",this._placeInRegion(t,e,n)}},{key:\"_placeInRegion\",value:function(t,e,i){var n=t.children[i];switch(n.childrenCount){case 0:n.children.data=e,n.childrenCount=1,this._updateBranchMass(n,e);break;case 1:n.children.data.x===e.x&&n.children.data.y===e.y?(e.x+=this._rng(),e.y+=this._rng()):(this._splitBranch(n),this._placeInTree(n,e));break;case 4:this._placeInTree(n,e)}}},{key:\"_splitBranch\",value:function(t){var e=null;1===t.childrenCount&&(e=t.children.data,t.mass=0,t.centerOfMass.x=0,t.centerOfMass.y=0),t.childrenCount=4,t.children.data=null,this._insertRegion(t,\"NW\"),this._insertRegion(t,\"NE\"),this._insertRegion(t,\"SW\"),this._insertRegion(t,\"SE\"),null!=e&&this._placeInTree(t,e)}},{key:\"_insertRegion\",value:function(t,e){var i,n,o,r,s=.5*t.size;switch(e){case\"NW\":i=t.range.minX,n=t.range.minX+s,o=t.range.minY,r=t.range.minY+s;break;case\"NE\":i=t.range.minX+s,n=t.range.maxX,o=t.range.minY,r=t.range.minY+s;break;case\"SW\":i=t.range.minX,n=t.range.minX+s,o=t.range.minY+s,r=t.range.maxY;break;case\"SE\":i=t.range.minX+s,n=t.range.maxX,o=t.range.minY+s,r=t.range.maxY}t.children[e]={centerOfMass:{x:0,y:0},mass:0,range:{minX:i,maxX:n,minY:o,maxY:r},size:.5*t.size,calcSize:2*t.calcSize,children:{data:null},maxWidth:0,level:t.level+1,childrenCount:0}}},{key:\"_debug\",value:function(t,e){void 0!==this.barnesHutTree&&(t.lineWidth=1,this._drawBranch(this.barnesHutTree.root,t,e))}},{key:\"_drawBranch\",value:function(t,e,i){void 0===i&&(i=\"#FF0000\"),4===t.childrenCount&&(this._drawBranch(t.children.NW,e),this._drawBranch(t.children.NE,e),this._drawBranch(t.children.SE,e),this._drawBranch(t.children.SW,e)),e.strokeStyle=i,e.beginPath(),e.moveTo(t.range.minX,t.range.minY),e.lineTo(t.range.maxX,t.range.minY),e.stroke(),e.beginPath(),e.moveTo(t.range.maxX,t.range.minY),e.lineTo(t.range.maxX,t.range.maxY),e.stroke(),e.beginPath(),e.moveTo(t.range.maxX,t.range.maxY),e.lineTo(t.range.minX,t.range.maxY),e.stroke(),e.beginPath(),e.moveTo(t.range.minX,t.range.maxY),e.lineTo(t.range.minX,t.range.minY),e.stroke()}}]),t}(),op=function(){function t(e,i,n){Nn(this,t),this._rng=ah(\"REPULSION SOLVER\"),this.body=e,this.physicsBody=i,this.setOptions(n)}return Fn(t,[{key:\"setOptions\",value:function(t){this.options=t}},{key:\"solve\",value:function(){for(var t,e,i,n,o,r,s,a,h=this.body.nodes,l=this.physicsBody.physicsNodeIndices,d=this.physicsBody.forces,c=this.options.nodeDistance,u=-2/3/c,f=0;f<l.length-1;f++){s=h[l[f]];for(var p=f+1;p<l.length;p++)t=(a=h[l[p]]).x-s.x,e=a.y-s.y,0===(i=Math.sqrt(t*t+e*e))&&(t=i=.1*this._rng()),i<2*c&&(r=i<.5*c?1:u*i+1.3333333333333333,n=t*(r/=i),o=e*r,d[s.id].x-=n,d[s.id].y-=o,d[a.id].x+=n,d[a.id].y+=o)}}}]),t}(),rp=function(){function t(e,i,n){Nn(this,t),this.body=e,this.physicsBody=i,this.setOptions(n)}return Fn(t,[{key:\"setOptions\",value:function(t){this.options=t,this.overlapAvoidanceFactor=Math.max(0,Math.min(1,this.options.avoidOverlap||0))}},{key:\"solve\",value:function(){for(var t=this.body.nodes,e=this.physicsBody.physicsNodeIndices,i=this.physicsBody.forces,n=this.options.nodeDistance,o=0;o<e.length-1;o++)for(var r=t[e[o]],s=o+1;s<e.length;s++){var a=t[e[s]];if(r.level===a.level){var h=n+this.overlapAvoidanceFactor*((r.shape.radius||0)/2+(a.shape.radius||0)/2),l=a.x-r.x,d=a.y-r.y,c=Math.sqrt(l*l+d*d),u=void 0;u=c<h?-Math.pow(.05*c,2)+Math.pow(.05*h,2):0,0!==c&&(u/=c);var f=l*u,p=d*u;i[r.id].x-=f,i[r.id].y-=p,i[a.id].x+=f,i[a.id].y+=p}}}}]),t}(),sp=function(){function t(e,i,n){Nn(this,t),this.body=e,this.physicsBody=i,this.setOptions(n)}return Fn(t,[{key:\"setOptions\",value:function(t){this.options=t}},{key:\"solve\",value:function(){for(var t,e,i,n,o,r=this.physicsBody.physicsEdgeIndices,s=this.body.edges,a=0;a<r.length;a++)!0===(e=s[r[a]]).connected&&e.toId!==e.fromId&&void 0!==this.body.nodes[e.toId]&&void 0!==this.body.nodes[e.fromId]&&(void 0!==e.edgeType.via?(t=void 0===e.options.length?this.options.springLength:e.options.length,i=e.to,n=e.edgeType.via,o=e.from,this._calculateSpringForce(i,n,.5*t),this._calculateSpringForce(n,o,.5*t)):(t=void 0===e.options.length?1.5*this.options.springLength:e.options.length,this._calculateSpringForce(e.from,e.to,t)))}},{key:\"_calculateSpringForce\",value:function(t,e,i){var n=t.x-e.x,o=t.y-e.y,r=Math.max(Math.sqrt(n*n+o*o),.01),s=this.options.springConstant*(i-r)/r,a=n*s,h=o*s;void 0!==this.physicsBody.forces[t.id]&&(this.physicsBody.forces[t.id].x+=a,this.physicsBody.forces[t.id].y+=h),void 0!==this.physicsBody.forces[e.id]&&(this.physicsBody.forces[e.id].x-=a,this.physicsBody.forces[e.id].y-=h)}}]),t}(),ap=function(){function t(e,i,n){Nn(this,t),this.body=e,this.physicsBody=i,this.setOptions(n)}return Fn(t,[{key:\"setOptions\",value:function(t){this.options=t}},{key:\"solve\",value:function(){for(var t,e,i,n,o,r,s,a,h,l,d=this.body.edges,c=.5,u=this.physicsBody.physicsEdgeIndices,f=this.physicsBody.physicsNodeIndices,p=this.physicsBody.forces,v=0;v<f.length;v++){var g=f[v];p[g].springFx=0,p[g].springFy=0}for(var y=0;y<u.length;y++)!0===(e=d[u[y]]).connected&&(t=void 0===e.options.length?this.options.springLength:e.options.length,i=e.from.x-e.to.x,n=e.from.y-e.to.y,a=0===(a=Math.sqrt(i*i+n*n))?.01:a,o=i*(s=this.options.springConstant*(t-a)/a),r=n*s,e.to.level!=e.from.level?(void 0!==p[e.toId]&&(p[e.toId].springFx-=o,p[e.toId].springFy-=r),void 0!==p[e.fromId]&&(p[e.fromId].springFx+=o,p[e.fromId].springFy+=r)):(void 0!==p[e.toId]&&(p[e.toId].x-=c*o,p[e.toId].y-=c*r),void 0!==p[e.fromId]&&(p[e.fromId].x+=c*o,p[e.fromId].y+=c*r)));s=1;for(var m=0;m<f.length;m++){var b=f[m];h=Math.min(s,Math.max(-s,p[b].springFx)),l=Math.min(s,Math.max(-s,p[b].springFy)),p[b].x+=h,p[b].y+=l}for(var w=0,k=0,_=0;_<f.length;_++){var x=f[_];w+=p[x].x,k+=p[x].y}for(var E=w/f.length,O=k/f.length,C=0;C<f.length;C++){var S=f[C];p[S].x-=E,p[S].y-=O}}}]),t}(),hp=function(){function t(e,i,n){Nn(this,t),this.body=e,this.physicsBody=i,this.setOptions(n)}return Fn(t,[{key:\"setOptions\",value:function(t){this.options=t}},{key:\"solve\",value:function(){for(var t,e,i,n,o=this.body.nodes,r=this.physicsBody.physicsNodeIndices,s=this.physicsBody.forces,a=0;a<r.length;a++){t=-(n=o[r[a]]).x,e=-n.y,i=Math.sqrt(t*t+e*e),this._calculateForces(i,t,e,s,n)}}},{key:\"_calculateForces\",value:function(t,e,i,n,o){var r=0===t?0:this.options.centralGravity/t;n[o.id].x=e*r,n[o.id].y=i*r}}]),t}();function lp(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var dp=function(t){Ad(i,t);var e=lp(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o))._rng=ah(\"FORCE ATLAS 2 BASED REPULSION SOLVER\"),r}return Fn(i,[{key:\"_calculateForces\",value:function(t,e,i,n,o){0===t&&(e=t=.1*this._rng()),this.overlapAvoidanceFactor<1&&n.shape.radius&&(t=Math.max(.1+this.overlapAvoidanceFactor*n.shape.radius,t-n.shape.radius));var r=n.edges.length+1,s=this.options.gravitationalConstant*o.mass*n.options.mass*r/Math.pow(t,2),a=e*s,h=i*s;this.physicsBody.forces[n.id].x+=a,this.physicsBody.forces[n.id].y+=h}}]),i}(np);function cp(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var up=function(t){Ad(i,t);var e=cp(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"_calculateForces\",value:function(t,e,i,n,o){if(t>0){var r=o.edges.length+1,s=this.options.centralGravity*r*o.options.mass;n[o.id].x=e*s,n[o.id].y=i*s}}}]),i}(hp),fp=function(){function t(e){Nn(this,t),this.body=e,this.physicsBody={physicsNodeIndices:[],physicsEdgeIndices:[],forces:{},velocities:{}},this.physicsEnabled=!0,this.simulationInterval=1e3/60,this.requiresTimeout=!0,this.previousStates={},this.referenceState={},this.freezeCache={},this.renderTimer=void 0,this.adaptiveTimestep=!1,this.adaptiveTimestepEnabled=!1,this.adaptiveCounter=0,this.adaptiveInterval=3,this.stabilized=!1,this.startedStabilization=!1,this.stabilizationIterations=0,this.ready=!1,this.options={},this.defaultOptions={enabled:!0,barnesHut:{theta:.5,gravitationalConstant:-2e3,centralGravity:.3,springLength:95,springConstant:.04,damping:.09,avoidOverlap:0},forceAtlas2Based:{theta:.5,gravitationalConstant:-50,centralGravity:.01,springConstant:.08,springLength:100,damping:.4,avoidOverlap:0},repulsion:{centralGravity:.2,springLength:200,springConstant:.05,nodeDistance:100,damping:.09,avoidOverlap:0},hierarchicalRepulsion:{centralGravity:0,springLength:100,springConstant:.01,nodeDistance:120,damping:.09},maxVelocity:50,minVelocity:.75,solver:\"barnesHut\",stabilization:{enabled:!0,iterations:1e3,updateInterval:50,onlyDynamicEdges:!1,fit:!0},timestep:.5,adaptiveTimestep:!0,wind:{x:0,y:0}},At(this.options,this.defaultOptions),this.timestep=.5,this.layoutFailed=!1,this.bindEventListeners()}return Fn(t,[{key:\"bindEventListeners\",value:function(){var t=this;this.body.emitter.on(\"initPhysics\",(function(){t.initPhysics()})),this.body.emitter.on(\"_layoutFailed\",(function(){t.layoutFailed=!0})),this.body.emitter.on(\"resetPhysics\",(function(){t.stopSimulation(),t.ready=!1})),this.body.emitter.on(\"disablePhysics\",(function(){t.physicsEnabled=!1,t.stopSimulation()})),this.body.emitter.on(\"restorePhysics\",(function(){t.setOptions(t.options),!0===t.ready&&t.startSimulation()})),this.body.emitter.on(\"startSimulation\",(function(){!0===t.ready&&t.startSimulation()})),this.body.emitter.on(\"stopSimulation\",(function(){t.stopSimulation()})),this.body.emitter.on(\"destroy\",(function(){t.stopSimulation(!1),t.body.emitter.off()})),this.body.emitter.on(\"_dataChanged\",(function(){t.updatePhysicsData()}))}},{key:\"setOptions\",value:function(t){if(void 0!==t)if(!1===t)this.options.enabled=!1,this.physicsEnabled=!1,this.stopSimulation();else if(!0===t)this.options.enabled=!0,this.physicsEnabled=!0,this.startSimulation();else{this.physicsEnabled=!0,Oh([\"stabilization\"],this.options,t),$h(this.options,t,\"stabilization\"),void 0===t.enabled&&(this.options.enabled=!0),!1===this.options.enabled&&(this.physicsEnabled=!1,this.stopSimulation());var e=this.options.wind;e&&((\"number\"!=typeof e.x||yd(e.x))&&(e.x=0),(\"number\"!=typeof e.y||yd(e.y))&&(e.y=0)),this.timestep=this.options.timestep}this.init()}},{key:\"init\",value:function(){var t;\"forceAtlas2Based\"===this.options.solver?(t=this.options.forceAtlas2Based,this.nodesSolver=new dp(this.body,this.physicsBody,t),this.edgesSolver=new sp(this.body,this.physicsBody,t),this.gravitySolver=new up(this.body,this.physicsBody,t)):\"repulsion\"===this.options.solver?(t=this.options.repulsion,this.nodesSolver=new op(this.body,this.physicsBody,t),this.edgesSolver=new sp(this.body,this.physicsBody,t),this.gravitySolver=new hp(this.body,this.physicsBody,t)):\"hierarchicalRepulsion\"===this.options.solver?(t=this.options.hierarchicalRepulsion,this.nodesSolver=new rp(this.body,this.physicsBody,t),this.edgesSolver=new ap(this.body,this.physicsBody,t),this.gravitySolver=new hp(this.body,this.physicsBody,t)):(t=this.options.barnesHut,this.nodesSolver=new np(this.body,this.physicsBody,t),this.edgesSolver=new sp(this.body,this.physicsBody,t),this.gravitySolver=new hp(this.body,this.physicsBody,t)),this.modelOptions=t}},{key:\"initPhysics\",value:function(){!0===this.physicsEnabled&&!0===this.options.enabled?!0===this.options.stabilization.enabled?this.stabilize():(this.stabilized=!1,this.ready=!0,this.body.emitter.emit(\"fit\",{},this.layoutFailed),this.startSimulation()):(this.ready=!0,this.body.emitter.emit(\"fit\"))}},{key:\"startSimulation\",value:function(){var t;!0===this.physicsEnabled&&!0===this.options.enabled?(this.stabilized=!1,this.adaptiveTimestep=!1,this.body.emitter.emit(\"_resizeNodes\"),void 0===this.viewFunction&&(this.viewFunction=Vt(t=this.simulationStep).call(t,this),this.body.emitter.on(\"initRedraw\",this.viewFunction),this.body.emitter.emit(\"_startRendering\"))):this.body.emitter.emit(\"_redraw\")}},{key:\"stopSimulation\",value:function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.stabilized=!0,!0===t&&this._emitStabilized(),void 0!==this.viewFunction&&(this.body.emitter.off(\"initRedraw\",this.viewFunction),this.viewFunction=void 0,!0===t&&this.body.emitter.emit(\"_stopRendering\"))}},{key:\"simulationStep\",value:function(){var t=No();this.physicsTick(),(No()-t<.4*this.simulationInterval||!0===this.runDoubleSpeed)&&!1===this.stabilized&&(this.physicsTick(),this.runDoubleSpeed=!0),!0===this.stabilized&&this.stopSimulation()}},{key:\"_emitStabilized\",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.stabilizationIterations;(this.stabilizationIterations>1||!0===this.startedStabilization)&&rs((function(){t.body.emitter.emit(\"stabilized\",{iterations:e}),t.startedStabilization=!1,t.stabilizationIterations=0}),0)}},{key:\"physicsStep\",value:function(){this.gravitySolver.solve(),this.nodesSolver.solve(),this.edgesSolver.solve(),this.moveNodes()}},{key:\"adjustTimeStep\",value:function(){!0===this._evaluateStepQuality()?this.timestep=1.2*this.timestep:this.timestep/1.2<this.options.timestep?this.timestep=this.options.timestep:(this.adaptiveCounter=-1,this.timestep=Math.max(this.options.timestep,this.timestep/1.2))}},{key:\"physicsTick\",value:function(){if(this._startStabilizing(),!0!==this.stabilized){if(!0===this.adaptiveTimestep&&!0===this.adaptiveTimestepEnabled)this.adaptiveCounter%this.adaptiveInterval==0?(this.timestep=2*this.timestep,this.physicsStep(),this.revert(),this.timestep=.5*this.timestep,this.physicsStep(),this.physicsStep(),this.adjustTimeStep()):this.physicsStep(),this.adaptiveCounter+=1;else this.timestep=this.options.timestep,this.physicsStep();!0===this.stabilized&&this.revert(),this.stabilizationIterations++}}},{key:\"updatePhysicsData\",value:function(){this.physicsBody.forces={},this.physicsBody.physicsNodeIndices=[],this.physicsBody.physicsEdgeIndices=[];var t=this.body.nodes,e=this.body.edges;for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&!0===t[i].options.physics&&this.physicsBody.physicsNodeIndices.push(t[i].id);for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&!0===e[n].options.physics&&this.physicsBody.physicsEdgeIndices.push(e[n].id);for(var o=0;o<this.physicsBody.physicsNodeIndices.length;o++){var r=this.physicsBody.physicsNodeIndices[o];this.physicsBody.forces[r]={x:0,y:0},void 0===this.physicsBody.velocities[r]&&(this.physicsBody.velocities[r]={x:0,y:0})}for(var s in this.physicsBody.velocities)void 0===t[s]&&delete this.physicsBody.velocities[s]}},{key:\"revert\",value:function(){var t=zo(this.previousStates),e=this.body.nodes,i=this.physicsBody.velocities;this.referenceState={};for(var n=0;n<t.length;n++){var o=t[n];void 0!==e[o]?!0===e[o].options.physics&&(this.referenceState[o]={positions:{x:e[o].x,y:e[o].y}},i[o].x=this.previousStates[o].vx,i[o].y=this.previousStates[o].vy,e[o].x=this.previousStates[o].x,e[o].y=this.previousStates[o].y):delete this.previousStates[o]}}},{key:\"_evaluateStepQuality\",value:function(){var t,e,i=this.body.nodes,n=this.referenceState;for(var o in this.referenceState)if(Object.prototype.hasOwnProperty.call(this.referenceState,o)&&void 0!==i[o]&&(t=i[o].x-n[o].positions.x,e=i[o].y-n[o].positions.y,Math.sqrt(Math.pow(t,2)+Math.pow(e,2))>.3))return!1;return!0}},{key:\"moveNodes\",value:function(){for(var t=this.physicsBody.physicsNodeIndices,e=0,i=0,n=0;n<t.length;n++){var o=t[n],r=this._performStep(o);e=Math.max(e,r),i+=r}this.adaptiveTimestepEnabled=i/t.length<5,this.stabilized=e<this.options.minVelocity}},{key:\"calculateComponentVelocity\",value:function(t,e,i){t+=(e-this.modelOptions.damping*t)/i*this.timestep;var n=this.options.maxVelocity||1e9;return Math.abs(t)>n&&(t=t>0?n:-n),t}},{key:\"_performStep\",value:function(t){var e=this.body.nodes[t],i=this.physicsBody.forces[t];this.options.wind&&(i.x+=this.options.wind.x,i.y+=this.options.wind.y);var n=this.physicsBody.velocities[t];return this.previousStates[t]={x:e.x,y:e.y,vx:n.x,vy:n.y},!1===e.options.fixed.x?(n.x=this.calculateComponentVelocity(n.x,i.x,e.options.mass),e.x+=n.x*this.timestep):(i.x=0,n.x=0),!1===e.options.fixed.y?(n.y=this.calculateComponentVelocity(n.y,i.y,e.options.mass),e.y+=n.y*this.timestep):(i.y=0,n.y=0),Math.sqrt(Math.pow(n.x,2)+Math.pow(n.y,2))}},{key:\"_freezeNodes\",value:function(){var t=this.body.nodes;for(var e in t)if(Object.prototype.hasOwnProperty.call(t,e)&&t[e].x&&t[e].y){var i=t[e].options.fixed;this.freezeCache[e]={x:i.x,y:i.y},i.x=!0,i.y=!0}}},{key:\"_restoreFrozenNodes\",value:function(){var t=this.body.nodes;for(var e in t)Object.prototype.hasOwnProperty.call(t,e)&&void 0!==this.freezeCache[e]&&(t[e].options.fixed.x=this.freezeCache[e].x,t[e].options.fixed.y=this.freezeCache[e].y);this.freezeCache={}}},{key:\"stabilize\",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.options.stabilization.iterations;\"number\"!=typeof e&&(e=this.options.stabilization.iterations,console.error(\"The stabilize method needs a numeric amount of iterations. Switching to default: \",e)),0!==this.physicsBody.physicsNodeIndices.length?(this.adaptiveTimestep=this.options.adaptiveTimestep,this.body.emitter.emit(\"_resizeNodes\"),this.stopSimulation(),this.stabilized=!1,this.body.emitter.emit(\"_blockRedraw\"),this.targetIterations=e,!0===this.options.stabilization.onlyDynamicEdges&&this._freezeNodes(),this.stabilizationIterations=0,rs((function(){return t._stabilizationBatch()}),0)):this.ready=!0}},{key:\"_startStabilizing\",value:function(){return!0!==this.startedStabilization&&(this.body.emitter.emit(\"startStabilizing\"),this.startedStabilization=!0,!0)}},{key:\"_stabilizationBatch\",value:function(){var t=this,e=function(){return!1===t.stabilized&&t.stabilizationIterations<t.targetIterations},i=function(){t.body.emitter.emit(\"stabilizationProgress\",{iterations:t.stabilizationIterations,total:t.targetIterations})};this._startStabilizing()&&i();for(var n,o=0;e()&&o<this.options.stabilization.updateInterval;)this.physicsTick(),o++;(i(),e())?rs(Vt(n=this._stabilizationBatch).call(n,this),0):this._finalizeStabilization()}},{key:\"_finalizeStabilization\",value:function(){this.body.emitter.emit(\"_allowRedraw\"),!0===this.options.stabilization.fit&&this.body.emitter.emit(\"fit\"),!0===this.options.stabilization.onlyDynamicEdges&&this._restoreFrozenNodes(),this.body.emitter.emit(\"stabilizationIterationsDone\"),this.body.emitter.emit(\"_requestRedraw\"),!0===this.stabilized?this._emitStabilized():this.startSimulation(),this.ready=!0}},{key:\"_drawForces\",value:function(t){for(var e=0;e<this.physicsBody.physicsNodeIndices.length;e++){var i=this.physicsBody.physicsNodeIndices[e],n=this.body.nodes[i],o=this.physicsBody.forces[i],r=Math.sqrt(Math.pow(o.x,2)+Math.pow(o.x,2)),s=Math.min(Math.max(5,r),15),a=3*s,h=Vh((180-180*Math.min(1,Math.max(0,.03*r)))/360,1,1),l={x:n.x+20*o.x,y:n.y+20*o.y};t.lineWidth=s,t.strokeStyle=h,t.beginPath(),t.moveTo(n.x,n.y),t.lineTo(l.x,l.y),t.stroke();var d=Math.atan2(o.y,o.x);t.fillStyle=h,jf.draw(t,{type:\"arrow\",point:l,angle:d,length:a}),hs(t).call(t)}}}]),t}(),pp=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"getRange\",value:function(t){var e,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=1e9,o=-1e9,r=1e9,s=-1e9;if(i.length>0)for(var a=0;a<i.length;a++)r>(e=t[i[a]]).shape.boundingBox.left&&(r=e.shape.boundingBox.left),s<e.shape.boundingBox.right&&(s=e.shape.boundingBox.right),n>e.shape.boundingBox.top&&(n=e.shape.boundingBox.top),o<e.shape.boundingBox.bottom&&(o=e.shape.boundingBox.bottom);return 1e9===r&&-1e9===s&&1e9===n&&-1e9===o&&(n=0,o=0,r=0,s=0),{minX:r,maxX:s,minY:n,maxY:o}}},{key:\"getRangeCore\",value:function(t){var e,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=1e9,o=-1e9,r=1e9,s=-1e9;if(i.length>0)for(var a=0;a<i.length;a++)r>(e=t[i[a]]).x&&(r=e.x),s<e.x&&(s=e.x),n>e.y&&(n=e.y),o<e.y&&(o=e.y);return 1e9===r&&-1e9===s&&1e9===n&&-1e9===o&&(n=0,o=0,r=0,s=0),{minX:r,maxX:s,minY:n,maxY:o}}},{key:\"findCenter\",value:function(t){return{x:.5*(t.maxX+t.minX),y:.5*(t.maxY+t.minY)}}},{key:\"cloneOptions\",value:function(t,e){var i={};return void 0===e||\"node\"===e?(Ch(i,t.options,!0),i.x=t.x,i.y=t.y,i.amountOfConnections=t.edges.length):Ch(i,t.options,!0),i}}]),t}();function vp(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var gp=function(t){Ad(i,t);var e=vp(i);function i(t,n,o,r,s,a){var h;return Nn(this,i),(h=e.call(this,t,n,o,r,s,a)).isCluster=!0,h.containedNodes={},h.containedEdges={},h}return Fn(i,[{key:\"_openChildCluster\",value:function(t){var e=this,i=this.body.nodes[t];if(void 0===this.containedNodes[t])throw new Error(\"node with id: \"+t+\" not in current cluster\");if(!i.isCluster)throw new Error(\"node with id: \"+t+\" is not a cluster\");delete this.containedNodes[t],Dh(i.edges,(function(t){delete e.containedEdges[t.id]})),Dh(i.containedNodes,(function(t,i){e.containedNodes[i]=t})),i.containedNodes={},Dh(i.containedEdges,(function(t,i){e.containedEdges[i]=t})),i.containedEdges={},Dh(i.edges,(function(t){Dh(e.edges,(function(i){var n,o,r=Hr(n=i.clusteringEdgeReplacingIds).call(n,t.id);-1!==r&&(Dh(t.clusteringEdgeReplacingIds,(function(t){i.clusteringEdgeReplacingIds.push(t),e.body.edges[t].edgeReplacedById=i.id})),er(o=i.clusteringEdgeReplacingIds).call(o,r,1))}))})),i.edges=[]}}]),i}(cf),yp=function(){function t(e){var i=this;Nn(this,t),this.body=e,this.clusteredNodes={},this.clusteredEdges={},this.options={},this.defaultOptions={},At(this.options,this.defaultOptions),this.body.emitter.on(\"_resetData\",(function(){i.clusteredNodes={},i.clusteredEdges={}}))}return Fn(t,[{key:\"clusterByHubsize\",value:function(t,e){void 0===t?t=this._getHubSize():\"object\"===go(t)&&(e=this._checkOptions(t),t=this._getHubSize());for(var i=[],n=0;n<this.body.nodeIndices.length;n++){var o=this.body.nodes[this.body.nodeIndices[n]];o.edges.length>=t&&i.push(o.id)}for(var r=0;r<i.length;r++)this.clusterByConnection(i[r],e,!0);this.body.emitter.emit(\"_dataChanged\")}},{key:\"cluster\",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},i=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(void 0===e.joinCondition)throw new Error(\"Cannot call clusterByNodeData without a joinCondition function in the options.\");e=this._checkOptions(e);var n={},o={};Dh(this.body.nodes,(function(i,r){i.options&&!0===e.joinCondition(i.options)&&(n[r]=i,Dh(i.edges,(function(e){void 0===t.clusteredEdges[e.id]&&(o[e.id]=e)})))})),this._cluster(n,o,e,i)}},{key:\"clusterByEdgeCount\",value:function(t,e){var i=this,n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];e=this._checkOptions(e);for(var o,r,s,a=[],h={},l=function(n){var l={},d={},c=i.body.nodeIndices[n],u=i.body.nodes[c];if(void 0===h[c]){s=0,r=[];for(var f=0;f<u.edges.length;f++)o=u.edges[f],void 0===i.clusteredEdges[o.id]&&(o.toId!==o.fromId&&s++,r.push(o));if(s===t){for(var p=function(t){if(void 0===e.joinCondition||null===e.joinCondition)return!0;var i=pp.cloneOptions(t);return e.joinCondition(i)},v=!0,g=0;g<r.length;g++){o=r[g];var y=i._getConnectedId(o,c);if(!p(u)){v=!1;break}d[o.id]=o,l[c]=u,l[y]=i.body.nodes[y],h[c]=!0}if(zo(l).length>0&&zo(d).length>0&&!0===v){var m=function(){for(var t=0;t<a.length;++t)for(var e in l)if(void 0!==a[t].nodes[e])return a[t]}();if(void 0!==m){for(var b in l)void 0===m.nodes[b]&&(m.nodes[b]=l[b]);for(var w in d)void 0===m.edges[w]&&(m.edges[w]=d[w])}else a.push({nodes:l,edges:d})}}}},d=0;d<this.body.nodeIndices.length;d++)l(d);for(var c=0;c<a.length;c++)this._cluster(a[c].nodes,a[c].edges,e,!1);!0===n&&this.body.emitter.emit(\"_dataChanged\")}},{key:\"clusterOutliers\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this.clusterByEdgeCount(1,t,e)}},{key:\"clusterBridges\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this.clusterByEdgeCount(2,t,e)}},{key:\"clusterByConnection\",value:function(t,e){var i,n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];if(void 0===t)throw new Error(\"No nodeId supplied to clusterByConnection!\");if(void 0===this.body.nodes[t])throw new Error(\"The nodeId given to clusterByConnection does not exist!\");var o=this.body.nodes[t];void 0===(e=this._checkOptions(e,o)).clusterNodeProperties.x&&(e.clusterNodeProperties.x=o.x),void 0===e.clusterNodeProperties.y&&(e.clusterNodeProperties.y=o.y),void 0===e.clusterNodeProperties.fixed&&(e.clusterNodeProperties.fixed={},e.clusterNodeProperties.fixed.x=o.options.fixed.x,e.clusterNodeProperties.fixed.y=o.options.fixed.y);var r={},s={},a=o.id,h=pp.cloneOptions(o);r[a]=o;for(var l=0;l<o.edges.length;l++){var d=o.edges[l];if(void 0===this.clusteredEdges[d.id]){var c=this._getConnectedId(d,a);if(void 0===this.clusteredNodes[c])if(c!==a)if(void 0===e.joinCondition)s[d.id]=d,r[c]=this.body.nodes[c];else{var u=pp.cloneOptions(this.body.nodes[c]);!0===e.joinCondition(h,u)&&(s[d.id]=d,r[c]=this.body.nodes[c])}else s[d.id]=d}}var f=Io(i=zo(r)).call(i,(function(t){return r[t].id}));for(var p in r)if(Object.prototype.hasOwnProperty.call(r,p))for(var v=r[p],g=0;g<v.edges.length;g++){var y=v.edges[g];Hr(f).call(f,this._getConnectedId(y,v.id))>-1&&(s[y.id]=y)}this._cluster(r,s,e,n)}},{key:\"_createClusterEdges\",value:function(t,e,i,n){for(var o,r,s,a,h,l,d=zo(t),c=[],u=0;u<d.length;u++){s=t[r=d[u]];for(var f=0;f<s.edges.length;f++)o=s.edges[f],void 0===this.clusteredEdges[o.id]&&(o.toId==o.fromId?e[o.id]=o:o.toId==r?(a=i.id,l=h=o.fromId):(a=o.toId,h=i.id,l=a),void 0===t[l]&&c.push({edge:o,fromId:h,toId:a}))}for(var p=[],v=function(t){for(var e=0;e<p.length;e++){var i=p[e],n=t.fromId===i.fromId&&t.toId===i.toId,o=t.fromId===i.toId&&t.toId===i.fromId;if(n||o)return i}return null},g=0;g<c.length;g++){var y=c[g],m=y.edge,b=v(y);null===b?(b=this._createClusteredEdge(y.fromId,y.toId,m,n),p.push(b)):b.clusteringEdgeReplacingIds.push(m.id),this.body.edges[m.id].edgeReplacedById=b.id,this._backupEdgeOptions(m),m.setOptions({physics:!1})}}},{key:\"_checkOptions\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return void 0===t.clusterEdgeProperties&&(t.clusterEdgeProperties={}),void 0===t.clusterNodeProperties&&(t.clusterNodeProperties={}),t}},{key:\"_cluster\",value:function(t,e,i){var n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],o=[];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&void 0!==this.clusteredNodes[r]&&o.push(r);for(var s=0;s<o.length;++s)delete t[o[s]];if(0!=zo(t).length&&(1!=zo(t).length||1==i.clusterNodeProperties.allowSingleNodeCluster)){var a=Ch({},i.clusterNodeProperties);if(void 0!==i.processProperties){var h=[];for(var l in t)if(Object.prototype.hasOwnProperty.call(t,l)){var d=pp.cloneOptions(t[l]);h.push(d)}var c=[];for(var u in e)if(Object.prototype.hasOwnProperty.call(e,u)&&\"clusterEdge:\"!==u.substr(0,12)){var f=pp.cloneOptions(e[u],\"edge\");c.push(f)}if(!(a=i.processProperties(a,h,c)))throw new Error(\"The processProperties function does not return properties!\")}void 0===a.id&&(a.id=\"cluster:\"+Wc());var p=a.id;void 0===a.label&&(a.label=\"cluster\");var v=void 0;void 0===a.x&&(v=this._getClusterPosition(t),a.x=v.x),void 0===a.y&&(void 0===v&&(v=this._getClusterPosition(t)),a.y=v.y),a.id=p;var g=this.body.functions.createNode(a,gp);g.containedNodes=t,g.containedEdges=e,g.clusterEdgeProperties=i.clusterEdgeProperties,this.body.nodes[a.id]=g,this._clusterEdges(t,e,a,i.clusterEdgeProperties),a.id=void 0,!0===n&&this.body.emitter.emit(\"_dataChanged\")}}},{key:\"_backupEdgeOptions\",value:function(t){void 0===this.clusteredEdges[t.id]&&(this.clusteredEdges[t.id]={physics:t.options.physics})}},{key:\"_restoreEdge\",value:function(t){var e=this.clusteredEdges[t.id];void 0!==e&&(t.setOptions({physics:e.physics}),delete this.clusteredEdges[t.id])}},{key:\"isCluster\",value:function(t){return void 0!==this.body.nodes[t]?!0===this.body.nodes[t].isCluster:(console.error(\"Node does not exist.\"),!1)}},{key:\"_getClusterPosition\",value:function(t){for(var e,i=zo(t),n=t[i[0]].x,o=t[i[0]].x,r=t[i[0]].y,s=t[i[0]].y,a=1;a<i.length;a++)n=(e=t[i[a]]).x<n?e.x:n,o=e.x>o?e.x:o,r=e.y<r?e.y:r,s=e.y>s?e.y:s;return{x:.5*(n+o),y:.5*(r+s)}}},{key:\"openCluster\",value:function(t,e){var i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];if(void 0===t)throw new Error(\"No clusterNodeId supplied to openCluster.\");var n=this.body.nodes[t];if(void 0===n)throw new Error(\"The clusterNodeId supplied to openCluster does not exist.\");if(!0!==n.isCluster||void 0===n.containedNodes||void 0===n.containedEdges)throw new Error(\"The node:\"+t+\" is not a valid cluster.\");var o=this.findNode(t),r=Hr(o).call(o,t)-1;if(r>=0){var s=o[r],a=this.body.nodes[s];return a._openChildCluster(t),delete this.body.nodes[t],void(!0===i&&this.body.emitter.emit(\"_dataChanged\"))}var h=n.containedNodes,l=n.containedEdges;if(void 0!==e&&void 0!==e.releaseFunction&&\"function\"==typeof e.releaseFunction){var d={},c={x:n.x,y:n.y};for(var u in h)if(Object.prototype.hasOwnProperty.call(h,u)){var f=this.body.nodes[u];d[u]={x:f.x,y:f.y}}var p=e.releaseFunction(c,d);for(var v in h)if(Object.prototype.hasOwnProperty.call(h,v)){var g=this.body.nodes[v];void 0!==p[v]&&(g.x=void 0===p[v].x?n.x:p[v].x,g.y=void 0===p[v].y?n.y:p[v].y)}}else Dh(h,(function(t){!1===t.options.fixed.x&&(t.x=n.x),!1===t.options.fixed.y&&(t.y=n.y)}));for(var y in h)if(Object.prototype.hasOwnProperty.call(h,y)){var m=this.body.nodes[y];m.vx=n.vx,m.vy=n.vy,m.setOptions({physics:!0}),delete this.clusteredNodes[y]}for(var b=[],w=0;w<n.edges.length;w++)b.push(n.edges[w]);for(var k=0;k<b.length;k++){for(var _=b[k],x=this._getConnectedId(_,t),E=this.clusteredNodes[x],O=0;O<_.clusteringEdgeReplacingIds.length;O++){var C=_.clusteringEdgeReplacingIds[O],S=this.body.edges[C];if(void 0!==S)if(void 0!==E){var T=this.body.nodes[E.clusterId];T.containedEdges[S.id]=S,delete l[S.id];var M=S.fromId,P=S.toId;S.toId==x?P=E.clusterId:M=E.clusterId,this._createClusteredEdge(M,P,S,T.clusterEdgeProperties,{hidden:!1,physics:!0})}else this._restoreEdge(S)}_.remove()}for(var D in l)Object.prototype.hasOwnProperty.call(l,D)&&this._restoreEdge(l[D]);delete this.body.nodes[t],!0===i&&this.body.emitter.emit(\"_dataChanged\")}},{key:\"getNodesInCluster\",value:function(t){var e=[];if(!0===this.isCluster(t)){var i=this.body.nodes[t].containedNodes;for(var n in i)Object.prototype.hasOwnProperty.call(i,n)&&e.push(this.body.nodes[n].id)}return e}},{key:\"findNode\",value:function(t){for(var e,i=[],n=0;void 0!==this.clusteredNodes[t]&&n<100;){if(void 0===(e=this.body.nodes[t]))return[];i.push(e.id),t=this.clusteredNodes[t].clusterId,n++}return void 0===(e=this.body.nodes[t])?[]:(i.push(e.id),Xo(i).call(i),i)}},{key:\"updateClusteredNode\",value:function(t,e){if(void 0===t)throw new Error(\"No clusteredNodeId supplied to updateClusteredNode.\");if(void 0===e)throw new Error(\"No newOptions supplied to updateClusteredNode.\");if(void 0===this.body.nodes[t])throw new Error(\"The clusteredNodeId supplied to updateClusteredNode does not exist.\");this.body.nodes[t].setOptions(e),this.body.emitter.emit(\"_dataChanged\")}},{key:\"updateEdge\",value:function(t,e){if(void 0===t)throw new Error(\"No startEdgeId supplied to updateEdge.\");if(void 0===e)throw new Error(\"No newOptions supplied to updateEdge.\");if(void 0===this.body.edges[t])throw new Error(\"The startEdgeId supplied to updateEdge does not exist.\");for(var i=this.getClusteredEdges(t),n=0;n<i.length;n++){this.body.edges[i[n]].setOptions(e)}this.body.emitter.emit(\"_dataChanged\")}},{key:\"getClusteredEdges\",value:function(t){for(var e=[],i=0;void 0!==t&&void 0!==this.body.edges[t]&&i<100;)e.push(this.body.edges[t].id),t=this.body.edges[t].edgeReplacedById,i++;return Xo(e).call(e),e}},{key:\"getBaseEdge\",value:function(t){return this.getBaseEdges(t)[0]}},{key:\"getBaseEdges\",value:function(t){for(var e=[t],i=[],n=[],o=0;e.length>0&&o<100;){var r=e.pop();if(void 0!==r){var s=this.body.edges[r];if(void 0!==s){o++;var a=s.clusteringEdgeReplacingIds;if(void 0===a)n.push(r);else for(var h=0;h<a.length;++h){var l=a[h];-1===Hr(e).call(e,a)&&-1===Hr(i).call(i,a)&&e.push(l)}i.push(r)}}}return n}},{key:\"_getConnectedId\",value:function(t,e){return t.toId!=e?t.toId:(t.fromId,t.fromId)}},{key:\"_getHubSize\",value:function(){for(var t=0,e=0,i=0,n=0,o=0;o<this.body.nodeIndices.length;o++){var r=this.body.nodes[this.body.nodeIndices[o]];r.edges.length>n&&(n=r.edges.length),t+=r.edges.length,e+=Math.pow(r.edges.length,2),i+=1}t/=i;var s=(e/=i)-Math.pow(t,2),a=Math.sqrt(s),h=Math.floor(t+2*a);return h>n&&(h=n),h}},{key:\"_createClusteredEdge\",value:function(t,e,i,n,o){var r=pp.cloneOptions(i,\"edge\");Ch(r,n),r.from=t,r.to=e,r.id=\"clusterEdge:\"+Wc(),void 0!==o&&Ch(r,o);var s=this.body.functions.createEdge(r);return s.clusteringEdgeReplacingIds=[i.id],s.connect(),this.body.edges[s.id]=s,s}},{key:\"_clusterEdges\",value:function(t,e,i,n){if(e instanceof ep){var o=e,r={};r[o.id]=o,e=r}if(t instanceof cf){var s=t,a={};a[s.id]=s,t=a}if(null==i)throw new Error(\"_clusterEdges: parameter clusterNode required\");for(var h in void 0===n&&(n=i.clusterEdgeProperties),this._createClusterEdges(t,e,i,n),e)if(Object.prototype.hasOwnProperty.call(e,h)&&void 0!==this.body.edges[h]){var l=this.body.edges[h];this._backupEdgeOptions(l),l.setOptions({physics:!1})}for(var d in t)Object.prototype.hasOwnProperty.call(t,d)&&(this.clusteredNodes[d]={clusterId:i.id,node:this.body.nodes[d]},this.body.nodes[d].setOptions({physics:!1}))}},{key:\"_getClusterNodeForNode\",value:function(t){if(void 0!==t){var e=this.clusteredNodes[t];if(void 0!==e){var i=e.clusterId;if(void 0!==i)return this.body.nodes[i]}}}},{key:\"_filter\",value:function(t,e){var i=[];return Dh(t,(function(t){e(t)&&i.push(t)})),i}},{key:\"_updateState\",value:function(){var t,e=this,i=[],n={},o=function(t){Dh(e.body.nodes,(function(e){!0===e.isCluster&&t(e)}))};for(t in this.clusteredNodes){if(Object.prototype.hasOwnProperty.call(this.clusteredNodes,t))void 0===this.body.nodes[t]&&i.push(t)}o((function(t){for(var e=0;e<i.length;e++)delete t.containedNodes[i[e]]}));for(var r=0;r<i.length;r++)delete this.clusteredNodes[i[r]];Dh(this.clusteredEdges,(function(t){var i=e.body.edges[t];void 0!==i&&i.endPointsValid()||(n[t]=t)})),o((function(t){Dh(t.containedEdges,(function(t,e){t.endPointsValid()||n[e]||(n[e]=e)}))})),Dh(this.body.edges,(function(t,i){var o=!0,r=t.clusteringEdgeReplacingIds;if(void 0!==r){var s=0;Dh(r,(function(t){var i=e.body.edges[t];void 0!==i&&i.endPointsValid()&&(s+=1)})),o=s>0}t.endPointsValid()&&o||(n[i]=i)})),o((function(t){Dh(n,(function(i){delete t.containedEdges[i],Dh(t.edges,(function(o,r){o.id!==i?o.clusteringEdgeReplacingIds=e._filter(o.clusteringEdgeReplacingIds,(function(t){return!n[t]})):t.edges[r]=null})),t.edges=e._filter(t.edges,(function(t){return null!==t}))}))})),Dh(n,(function(t){delete e.clusteredEdges[t]})),Dh(n,(function(t){delete e.body.edges[t]})),Dh(zo(this.body.edges),(function(t){var i=e.body.edges[t],n=e._isClusteredNode(i.fromId)||e._isClusteredNode(i.toId);if(n!==e._isClusteredEdge(i.id))if(n){var o=e._getClusterNodeForNode(i.fromId);void 0!==o&&e._clusterEdges(e.body.nodes[i.fromId],i,o);var r=e._getClusterNodeForNode(i.toId);void 0!==r&&e._clusterEdges(e.body.nodes[i.toId],i,r)}else delete e._clusterEdges[t],e._restoreEdge(i)}));for(var s=!1,a=!0,h=function(){var t=[];o((function(e){var i=zo(e.containedNodes).length,n=!0===e.options.allowSingleNodeCluster;(n&&i<1||!n&&i<2)&&t.push(e.id)}));for(var i=0;i<t.length;++i)e.openCluster(t[i],{},!1);a=t.length>0,s=s||a};a;)h();s&&this._updateState()}},{key:\"_isClusteredNode\",value:function(t){return void 0!==this.clusteredNodes[t]}},{key:\"_isClusteredEdge\",value:function(t){return void 0!==this.clusteredEdges[t]}}]),t}();function mp(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return bp(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return bp(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function bp(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}var wp=function(){function t(e,i){var n;Nn(this,t),void 0!==window&&(n=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame),window.requestAnimationFrame=void 0===n?function(t){t()}:n,this.body=e,this.canvas=i,this.redrawRequested=!1,this.renderTimer=void 0,this.requiresTimeout=!0,this.renderingActive=!1,this.renderRequests=0,this.allowRedraw=!0,this.dragging=!1,this.zooming=!1,this.options={},this.defaultOptions={hideEdgesOnDrag:!1,hideEdgesOnZoom:!1,hideNodesOnDrag:!1},At(this.options,this.defaultOptions),this._determineBrowserMethod(),this.bindEventListeners()}return Fn(t,[{key:\"bindEventListeners\",value:function(){var t,e=this;this.body.emitter.on(\"dragStart\",(function(){e.dragging=!0})),this.body.emitter.on(\"dragEnd\",(function(){e.dragging=!1})),this.body.emitter.on(\"zoom\",(function(){e.zooming=!0,window.clearTimeout(e.zoomTimeoutId),e.zoomTimeoutId=rs((function(){var t;e.zooming=!1,Vt(t=e._requestRedraw).call(t,e)()}),250)})),this.body.emitter.on(\"_resizeNodes\",(function(){e._resizeNodes()})),this.body.emitter.on(\"_redraw\",(function(){!1===e.renderingActive&&e._redraw()})),this.body.emitter.on(\"_blockRedraw\",(function(){e.allowRedraw=!1})),this.body.emitter.on(\"_allowRedraw\",(function(){e.allowRedraw=!0,e.redrawRequested=!1})),this.body.emitter.on(\"_requestRedraw\",Vt(t=this._requestRedraw).call(t,this)),this.body.emitter.on(\"_startRendering\",(function(){e.renderRequests+=1,e.renderingActive=!0,e._startRendering()})),this.body.emitter.on(\"_stopRendering\",(function(){e.renderRequests-=1,e.renderingActive=e.renderRequests>0,e.renderTimer=void 0})),this.body.emitter.on(\"destroy\",(function(){e.renderRequests=0,e.allowRedraw=!1,e.renderingActive=!1,!0===e.requiresTimeout?clearTimeout(e.renderTimer):window.cancelAnimationFrame(e.renderTimer),e.body.emitter.off()}))}},{key:\"setOptions\",value:function(t){if(void 0!==t){Eh([\"hideEdgesOnDrag\",\"hideEdgesOnZoom\",\"hideNodesOnDrag\"],this.options,t)}}},{key:\"_requestNextFrame\",value:function(t,e){if(\"undefined\"!=typeof window){var i,n=window;return!0===this.requiresTimeout?i=rs(t,e):n.requestAnimationFrame&&(i=n.requestAnimationFrame(t)),i}}},{key:\"_startRendering\",value:function(){var t;!0===this.renderingActive&&(void 0===this.renderTimer&&(this.renderTimer=this._requestNextFrame(Vt(t=this._renderStep).call(t,this),this.simulationInterval)))}},{key:\"_renderStep\",value:function(){!0===this.renderingActive&&(this.renderTimer=void 0,!0===this.requiresTimeout&&this._startRendering(),this._redraw(),!1===this.requiresTimeout&&this._startRendering())}},{key:\"redraw\",value:function(){this.body.emitter.emit(\"setSize\"),this._redraw()}},{key:\"_requestRedraw\",value:function(){var t=this;!0!==this.redrawRequested&&!1===this.renderingActive&&!0===this.allowRedraw&&(this.redrawRequested=!0,this._requestNextFrame((function(){t._redraw(!1)}),0))}},{key:\"_redraw\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(!0===this.allowRedraw){this.body.emitter.emit(\"initRedraw\"),this.redrawRequested=!1;var e={drawExternalLabels:null};0!==this.canvas.frame.canvas.width&&0!==this.canvas.frame.canvas.height||this.canvas.setSize(),this.canvas.setTransform();var i=this.canvas.getContext(),n=this.canvas.frame.canvas.clientWidth,o=this.canvas.frame.canvas.clientHeight;if(i.clearRect(0,0,n,o),0===this.canvas.frame.clientWidth)return;if(i.save(),i.translate(this.body.view.translation.x,this.body.view.translation.y),i.scale(this.body.view.scale,this.body.view.scale),i.beginPath(),this.body.emitter.emit(\"beforeDrawing\",i),i.closePath(),!1===t&&(!1===this.dragging||!0===this.dragging&&!1===this.options.hideEdgesOnDrag)&&(!1===this.zooming||!0===this.zooming&&!1===this.options.hideEdgesOnZoom)&&this._drawEdges(i),!1===this.dragging||!0===this.dragging&&!1===this.options.hideNodesOnDrag){var r=this._drawNodes(i,t),s=r.drawExternalLabels;e.drawExternalLabels=s}!1===t&&(!1===this.dragging||!0===this.dragging&&!1===this.options.hideEdgesOnDrag)&&(!1===this.zooming||!0===this.zooming&&!1===this.options.hideEdgesOnZoom)&&this._drawArrows(i),null!=e.drawExternalLabels&&e.drawExternalLabels(),!1===t&&this._drawSelectionBox(i),i.beginPath(),this.body.emitter.emit(\"afterDrawing\",i),i.closePath(),i.restore(),!0===t&&i.clearRect(0,0,n,o)}}},{key:\"_resizeNodes\",value:function(){this.canvas.setTransform();var t=this.canvas.getContext();t.save(),t.translate(this.body.view.translation.x,this.body.view.translation.y),t.scale(this.body.view.scale,this.body.view.scale);var e,i=this.body.nodes;for(var n in i)Object.prototype.hasOwnProperty.call(i,n)&&((e=i[n]).resize(t),e.updateBoundingBox(t,e.selected));t.restore()}},{key:\"_drawNodes\",value:function(t){for(var e,i,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],o=this.body.nodes,r=this.body.nodeIndices,s=[],a=[],h=20,l=this.canvas.DOMtoCanvas({x:-h,y:-h}),d=this.canvas.DOMtoCanvas({x:this.canvas.frame.canvas.clientWidth+h,y:this.canvas.frame.canvas.clientHeight+h}),c={top:l.y,left:l.x,bottom:d.y,right:d.x},u=[],f=0;f<r.length;f++)if((e=o[r[f]]).hover)a.push(r[f]);else if(e.isSelected())s.push(r[f]);else if(!0===n){var p=e.draw(t);null!=p.drawExternalLabel&&u.push(p.drawExternalLabel)}else if(!0===e.isBoundingBoxOverlappingWith(c)){var v=e.draw(t);null!=v.drawExternalLabel&&u.push(v.drawExternalLabel)}else e.updateBoundingBox(t,e.selected);var g=s.length,y=a.length;for(i=0;i<g;i++){var m=(e=o[s[i]]).draw(t);null!=m.drawExternalLabel&&u.push(m.drawExternalLabel)}for(i=0;i<y;i++){var b=(e=o[a[i]]).draw(t);null!=b.drawExternalLabel&&u.push(b.drawExternalLabel)}return{drawExternalLabels:function(){var t,e=mp(u);try{for(e.s();!(t=e.n()).done;){(0,t.value)()}}catch(t){e.e(t)}finally{e.f()}}}}},{key:\"_drawEdges\",value:function(t){for(var e=this.body.edges,i=this.body.edgeIndices,n=0;n<i.length;n++){var o=e[i[n]];!0===o.connected&&o.draw(t)}}},{key:\"_drawArrows\",value:function(t){for(var e=this.body.edges,i=this.body.edgeIndices,n=0;n<i.length;n++){var o=e[i[n]];!0===o.connected&&o.drawArrows(t)}}},{key:\"_determineBrowserMethod\",value:function(){if(\"undefined\"!=typeof window){var t=navigator.userAgent.toLowerCase();this.requiresTimeout=!1,(-1!=Hr(t).call(t,\"msie 9.0\")||-1!=Hr(t).call(t,\"safari\")&&Hr(t).call(t,\"chrome\")<=-1)&&(this.requiresTimeout=!0)}else this.requiresTimeout=!0}},{key:\"_drawSelectionBox\",value:function(t){if(this.body.selectionBox.show){t.beginPath();var e=this.body.selectionBox.position.end.x-this.body.selectionBox.position.start.x,i=this.body.selectionBox.position.end.y-this.body.selectionBox.position.start.y;t.rect(this.body.selectionBox.position.start.x,this.body.selectionBox.position.start.y,e,i),t.fillStyle=\"rgba(151, 194, 252, 0.2)\",t.fillRect(this.body.selectionBox.position.start.x,this.body.selectionBox.position.start.y,e,i),t.strokeStyle=\"rgba(151, 194, 252, 1)\",t.stroke()}else t.closePath()}}]),t}(),kp=k.setInterval;function _p(t,e){e.inputHandler=function(t){t.isFirst&&e(t)},t.on(\"hammer.input\",e.inputHandler)}function xp(t,e){return e.inputHandler=function(t){t.isFinal&&e(t)},t.on(\"hammer.input\",e.inputHandler)}var Ep=function(){function t(e){Nn(this,t),this.body=e,this.pixelRatio=1,this.cameraState={},this.initialized=!1,this.canvasViewCenter={},this._cleanupCallbacks=[],this.options={},this.defaultOptions={autoResize:!0,height:\"100%\",width:\"100%\"},At(this.options,this.defaultOptions),this.bindEventListeners()}return Fn(t,[{key:\"bindEventListeners\",value:function(){var t,e=this;this.body.emitter.once(\"resize\",(function(t){0!==t.width&&(e.body.view.translation.x=.5*t.width),0!==t.height&&(e.body.view.translation.y=.5*t.height)})),this.body.emitter.on(\"setSize\",Vt(t=this.setSize).call(t,this)),this.body.emitter.on(\"destroy\",(function(){e.hammerFrame.destroy(),e.hammer.destroy(),e._cleanUp()}))}},{key:\"setOptions\",value:function(t){var e=this;if(void 0!==t){Eh([\"width\",\"height\",\"autoResize\"],this.options,t)}if(this._cleanUp(),!0===this.options.autoResize){var i;if(window.ResizeObserver){var n=new ResizeObserver((function(){!0===e.setSize()&&e.body.emitter.emit(\"_requestRedraw\")})),o=this.frame;n.observe(o),this._cleanupCallbacks.push((function(){n.unobserve(o)}))}else{var r=kp((function(){!0===e.setSize()&&e.body.emitter.emit(\"_requestRedraw\")}),1e3);this._cleanupCallbacks.push((function(){clearInterval(r)}))}var s=Vt(i=this._onResize).call(i,this);Bh(window,\"resize\",s),this._cleanupCallbacks.push((function(){zh(window,\"resize\",s)}))}}},{key:\"_cleanUp\",value:function(){var t,e,i;Wo(t=Xo(e=er(i=this._cleanupCallbacks).call(i,0)).call(e)).call(t,(function(t){try{t()}catch(t){console.error(t)}}))}},{key:\"_onResize\",value:function(){this.setSize(),this.body.emitter.emit(\"_redraw\")}},{key:\"_getCameraState\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.pixelRatio;!0===this.initialized&&(this.cameraState.previousWidth=this.frame.canvas.width/t,this.cameraState.previousHeight=this.frame.canvas.height/t,this.cameraState.scale=this.body.view.scale,this.cameraState.position=this.DOMtoCanvas({x:.5*this.frame.canvas.width/t,y:.5*this.frame.canvas.height/t}))}},{key:\"_setCameraState\",value:function(){if(void 0!==this.cameraState.scale&&0!==this.frame.canvas.clientWidth&&0!==this.frame.canvas.clientHeight&&0!==this.pixelRatio&&this.cameraState.previousWidth>0&&this.cameraState.previousHeight>0){var t=this.frame.canvas.width/this.pixelRatio/this.cameraState.previousWidth,e=this.frame.canvas.height/this.pixelRatio/this.cameraState.previousHeight,i=this.cameraState.scale;1!=t&&1!=e?i=.5*this.cameraState.scale*(t+e):1!=t?i=this.cameraState.scale*t:1!=e&&(i=this.cameraState.scale*e),this.body.view.scale=i;var n=this.DOMtoCanvas({x:.5*this.frame.canvas.clientWidth,y:.5*this.frame.canvas.clientHeight}),o={x:n.x-this.cameraState.position.x,y:n.y-this.cameraState.position.y};this.body.view.translation.x+=o.x*this.body.view.scale,this.body.view.translation.y+=o.y*this.body.view.scale}}},{key:\"_prepareValue\",value:function(t){if(\"number\"==typeof t)return t+\"px\";if(\"string\"==typeof t){if(-1!==Hr(t).call(t,\"%\")||-1!==Hr(t).call(t,\"px\"))return t;if(-1===Hr(t).call(t,\"%\"))return t+\"px\"}throw new Error(\"Could not use the value supplied for width or height:\"+t)}},{key:\"_create\",value:function(){for(;this.body.container.hasChildNodes();)this.body.container.removeChild(this.body.container.firstChild);if(this.frame=document.createElement(\"div\"),this.frame.className=\"vis-network\",this.frame.style.position=\"relative\",this.frame.style.overflow=\"hidden\",this.frame.tabIndex=0,this.frame.canvas=document.createElement(\"canvas\"),this.frame.canvas.style.position=\"relative\",this.frame.appendChild(this.frame.canvas),this.frame.canvas.getContext)this._setPixelRatio(),this.setTransform();else{var t=document.createElement(\"DIV\");t.style.color=\"red\",t.style.fontWeight=\"bold\",t.style.padding=\"10px\",t.innerText=\"Error: your browser does not support HTML canvas\",this.frame.canvas.appendChild(t)}this.body.container.appendChild(this.frame),this.body.view.scale=1,this.body.view.translation={x:.5*this.frame.canvas.clientWidth,y:.5*this.frame.canvas.clientHeight},this._bindHammer()}},{key:\"_bindHammer\",value:function(){var t=this;void 0!==this.hammer&&this.hammer.destroy(),this.drag={},this.pinch={},this.hammer=new ll(this.frame.canvas),this.hammer.get(\"pinch\").set({enable:!0}),this.hammer.get(\"pan\").set({threshold:5,direction:ll.DIRECTION_ALL}),_p(this.hammer,(function(e){t.body.eventListeners.onTouch(e)})),this.hammer.on(\"tap\",(function(e){t.body.eventListeners.onTap(e)})),this.hammer.on(\"doubletap\",(function(e){t.body.eventListeners.onDoubleTap(e)})),this.hammer.on(\"press\",(function(e){t.body.eventListeners.onHold(e)})),this.hammer.on(\"panstart\",(function(e){t.body.eventListeners.onDragStart(e)})),this.hammer.on(\"panmove\",(function(e){t.body.eventListeners.onDrag(e)})),this.hammer.on(\"panend\",(function(e){t.body.eventListeners.onDragEnd(e)})),this.hammer.on(\"pinch\",(function(e){t.body.eventListeners.onPinch(e)})),this.frame.canvas.addEventListener(\"wheel\",(function(e){t.body.eventListeners.onMouseWheel(e)})),this.frame.canvas.addEventListener(\"mousemove\",(function(e){t.body.eventListeners.onMouseMove(e)})),this.frame.canvas.addEventListener(\"contextmenu\",(function(e){t.body.eventListeners.onContext(e)})),this.hammerFrame=new ll(this.frame),xp(this.hammerFrame,(function(e){t.body.eventListeners.onRelease(e)}))}},{key:\"setSize\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.options.width,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.options.height;t=this._prepareValue(t),e=this._prepareValue(e);var i=!1,n=this.frame.canvas.width,o=this.frame.canvas.height,r=this.pixelRatio;if(this._setPixelRatio(),t!=this.options.width||e!=this.options.height||this.frame.style.width!=t||this.frame.style.height!=e)this._getCameraState(r),this.frame.style.width=t,this.frame.style.height=e,this.frame.canvas.style.width=\"100%\",this.frame.canvas.style.height=\"100%\",this.frame.canvas.width=Math.round(this.frame.canvas.clientWidth*this.pixelRatio),this.frame.canvas.height=Math.round(this.frame.canvas.clientHeight*this.pixelRatio),this.options.width=t,this.options.height=e,this.canvasViewCenter={x:.5*this.frame.clientWidth,y:.5*this.frame.clientHeight},i=!0;else{var s=Math.round(this.frame.canvas.clientWidth*this.pixelRatio),a=Math.round(this.frame.canvas.clientHeight*this.pixelRatio);this.frame.canvas.width===s&&this.frame.canvas.height===a||this._getCameraState(r),this.frame.canvas.width!==s&&(this.frame.canvas.width=s,i=!0),this.frame.canvas.height!==a&&(this.frame.canvas.height=a,i=!0)}return!0===i&&(this.body.emitter.emit(\"resize\",{width:Math.round(this.frame.canvas.width/this.pixelRatio),height:Math.round(this.frame.canvas.height/this.pixelRatio),oldWidth:Math.round(n/this.pixelRatio),oldHeight:Math.round(o/this.pixelRatio)}),this._setCameraState()),this.initialized=!0,i}},{key:\"getContext\",value:function(){return this.frame.canvas.getContext(\"2d\")}},{key:\"_determinePixelRatio\",value:function(){var t=this.getContext();if(void 0===t)throw new Error(\"Could not get canvax context\");var e=1;return\"undefined\"!=typeof window&&(e=window.devicePixelRatio||1),e/(t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1)}},{key:\"_setPixelRatio\",value:function(){this.pixelRatio=this._determinePixelRatio()}},{key:\"setTransform\",value:function(){var t=this.getContext();if(void 0===t)throw new Error(\"Could not get canvax context\");t.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0)}},{key:\"_XconvertDOMtoCanvas\",value:function(t){return(t-this.body.view.translation.x)/this.body.view.scale}},{key:\"_XconvertCanvasToDOM\",value:function(t){return t*this.body.view.scale+this.body.view.translation.x}},{key:\"_YconvertDOMtoCanvas\",value:function(t){return(t-this.body.view.translation.y)/this.body.view.scale}},{key:\"_YconvertCanvasToDOM\",value:function(t){return t*this.body.view.scale+this.body.view.translation.y}},{key:\"canvasToDOM\",value:function(t){return{x:this._XconvertCanvasToDOM(t.x),y:this._YconvertCanvasToDOM(t.y)}}},{key:\"DOMtoCanvas\",value:function(t){return{x:this._XconvertDOMtoCanvas(t.x),y:this._YconvertDOMtoCanvas(t.y)}}}]),t}();function Op(t,e){var i=At({nodes:e,minZoomLevel:Number.MIN_VALUE,maxZoomLevel:1},null!=t?t:{});if(!So(i.nodes))throw new TypeError(\"Nodes has to be an array of ids.\");if(0===i.nodes.length&&(i.nodes=e),!(\"number\"==typeof i.minZoomLevel&&i.minZoomLevel>0))throw new TypeError(\"Min zoom level has to be a number higher than zero.\");if(!(\"number\"==typeof i.maxZoomLevel&&i.minZoomLevel<=i.maxZoomLevel))throw new TypeError(\"Max zoom level has to be a number higher than min zoom level.\");return i}var Cp=function(){function t(e,i){var n,o,r=this;Nn(this,t),this.body=e,this.canvas=i,this.animationSpeed=1/this.renderRefreshRate,this.animationEasingFunction=\"easeInOutQuint\",this.easingTime=0,this.sourceScale=0,this.targetScale=0,this.sourceTranslation=0,this.targetTranslation=0,this.lockedOnNodeId=void 0,this.lockedOnNodeOffset=void 0,this.touchTime=0,this.viewFunction=void 0,this.body.emitter.on(\"fit\",Vt(n=this.fit).call(n,this)),this.body.emitter.on(\"animationFinished\",(function(){r.body.emitter.emit(\"_stopRendering\")})),this.body.emitter.on(\"unlockNode\",Vt(o=this.releaseNode).call(o,this))}return Fn(t,[{key:\"setOptions\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.options=t}},{key:\"fit\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];t=Op(t,this.body.nodeIndices);var i,n,o=this.canvas.frame.canvas.clientWidth,r=this.canvas.frame.canvas.clientHeight;if(0===o||0===r)n=1,i=pp.getRange(this.body.nodes,t.nodes);else if(!0===e){var s=0;for(var a in this.body.nodes)if(Object.prototype.hasOwnProperty.call(this.body.nodes,a)){var h=this.body.nodes[a];!0===h.predefinedPosition&&(s+=1)}if(s>.5*this.body.nodeIndices.length)return void this.fit(t,!1);i=pp.getRange(this.body.nodes,t.nodes);var l=this.body.nodeIndices.length;n=12.662/(l+7.4147)+.0964822;var d=Math.min(o/600,r/600);n*=d}else{this.body.emitter.emit(\"_resizeNodes\"),i=pp.getRange(this.body.nodes,t.nodes);var c=1.1*Math.abs(i.maxX-i.minX),u=1.1*Math.abs(i.maxY-i.minY),f=o/c,p=r/u;n=f<=p?f:p}n>t.maxZoomLevel?n=t.maxZoomLevel:n<t.minZoomLevel&&(n=t.minZoomLevel);var v=pp.findCenter(i),g={position:v,scale:n,animation:t.animation};this.moveTo(g)}},{key:\"focus\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(void 0!==this.body.nodes[t]){var i={x:this.body.nodes[t].x,y:this.body.nodes[t].y};e.position=i,e.lockedOnNode=t,this.moveTo(e)}else console.error(\"Node: \"+t+\" cannot be found.\")}},{key:\"moveTo\",value:function(t){if(void 0!==t){if(null!=t.offset){if(null!=t.offset.x){if(t.offset.x=+t.offset.x,!wd(t.offset.x))throw new TypeError('The option \"offset.x\" has to be a finite number.')}else t.offset.x=0;if(null!=t.offset.y){if(t.offset.y=+t.offset.y,!wd(t.offset.y))throw new TypeError('The option \"offset.y\" has to be a finite number.')}else t.offset.x=0}else t.offset={x:0,y:0};if(null!=t.position){if(null!=t.position.x){if(t.position.x=+t.position.x,!wd(t.position.x))throw new TypeError('The option \"position.x\" has to be a finite number.')}else t.position.x=0;if(null!=t.position.y){if(t.position.y=+t.position.y,!wd(t.position.y))throw new TypeError('The option \"position.y\" has to be a finite number.')}else t.position.x=0}else t.position=this.getViewPosition();if(null!=t.scale){if(t.scale=+t.scale,!(t.scale>0))throw new TypeError('The option \"scale\" has to be a number greater than zero.')}else t.scale=this.body.view.scale;void 0===t.animation&&(t.animation={duration:0}),!1===t.animation&&(t.animation={duration:0}),!0===t.animation&&(t.animation={}),void 0===t.animation.duration&&(t.animation.duration=1e3),void 0===t.animation.easingFunction&&(t.animation.easingFunction=\"easeInOutQuad\"),this.animateView(t)}else t={}}},{key:\"animateView\",value:function(t){if(void 0!==t){this.animationEasingFunction=t.animation.easingFunction,this.releaseNode(),!0===t.locked&&(this.lockedOnNodeId=t.lockedOnNode,this.lockedOnNodeOffset=t.offset),0!=this.easingTime&&this._transitionRedraw(!0),this.sourceScale=this.body.view.scale,this.sourceTranslation=this.body.view.translation,this.targetScale=t.scale,this.body.view.scale=this.targetScale;var e,i,n=this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight}),o=n.x-t.position.x,r=n.y-t.position.y;if(this.targetTranslation={x:this.sourceTranslation.x+o*this.targetScale+t.offset.x,y:this.sourceTranslation.y+r*this.targetScale+t.offset.y},0===t.animation.duration)if(null!=this.lockedOnNodeId)this.viewFunction=Vt(e=this._lockedRedraw).call(e,this),this.body.emitter.on(\"initRedraw\",this.viewFunction);else this.body.view.scale=this.targetScale,this.body.view.translation=this.targetTranslation,this.body.emitter.emit(\"_requestRedraw\");else this.animationSpeed=1/(60*t.animation.duration*.001)||1/60,this.animationEasingFunction=t.animation.easingFunction,this.viewFunction=Vt(i=this._transitionRedraw).call(i,this),this.body.emitter.on(\"initRedraw\",this.viewFunction),this.body.emitter.emit(\"_startRendering\")}}},{key:\"_lockedRedraw\",value:function(){var t=this.body.nodes[this.lockedOnNodeId].x,e=this.body.nodes[this.lockedOnNodeId].y,i=this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight}),n=i.x-t,o=i.y-e,r=this.body.view.translation,s={x:r.x+n*this.body.view.scale+this.lockedOnNodeOffset.x,y:r.y+o*this.body.view.scale+this.lockedOnNodeOffset.y};this.body.view.translation=s}},{key:\"releaseNode\",value:function(){void 0!==this.lockedOnNodeId&&void 0!==this.viewFunction&&(this.body.emitter.off(\"initRedraw\",this.viewFunction),this.lockedOnNodeId=void 0,this.lockedOnNodeOffset=void 0)}},{key:\"_transitionRedraw\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.easingTime+=this.animationSpeed,this.easingTime=!0===t?1:this.easingTime;var e=Zh[this.animationEasingFunction](this.easingTime);if(this.body.view.scale=this.sourceScale+(this.targetScale-this.sourceScale)*e,this.body.view.translation={x:this.sourceTranslation.x+(this.targetTranslation.x-this.sourceTranslation.x)*e,y:this.sourceTranslation.y+(this.targetTranslation.y-this.sourceTranslation.y)*e},this.easingTime>=1){var i;if(this.body.emitter.off(\"initRedraw\",this.viewFunction),this.easingTime=0,null!=this.lockedOnNodeId)this.viewFunction=Vt(i=this._lockedRedraw).call(i,this),this.body.emitter.on(\"initRedraw\",this.viewFunction);this.body.emitter.emit(\"animationFinished\")}}},{key:\"getScale\",value:function(){return this.body.view.scale}},{key:\"getViewPosition\",value:function(){return this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight})}}]),t}();function Sp(t){var e,i=t&&t.preventDefault||!1,n=t&&t.container||window,o={},r={keydown:{},keyup:{}},s={};for(e=97;e<=122;e++)s[String.fromCharCode(e)]={code:e-97+65,shift:!1};for(e=65;e<=90;e++)s[String.fromCharCode(e)]={code:e,shift:!0};for(e=0;e<=9;e++)s[\"\"+e]={code:48+e,shift:!1};for(e=1;e<=12;e++)s[\"F\"+e]={code:111+e,shift:!1};for(e=0;e<=9;e++)s[\"num\"+e]={code:96+e,shift:!1};s[\"num*\"]={code:106,shift:!1},s[\"num+\"]={code:107,shift:!1},s[\"num-\"]={code:109,shift:!1},s[\"num/\"]={code:111,shift:!1},s[\"num.\"]={code:110,shift:!1},s.left={code:37,shift:!1},s.up={code:38,shift:!1},s.right={code:39,shift:!1},s.down={code:40,shift:!1},s.space={code:32,shift:!1},s.enter={code:13,shift:!1},s.shift={code:16,shift:void 0},s.esc={code:27,shift:!1},s.backspace={code:8,shift:!1},s.tab={code:9,shift:!1},s.ctrl={code:17,shift:!1},s.alt={code:18,shift:!1},s.delete={code:46,shift:!1},s.pageup={code:33,shift:!1},s.pagedown={code:34,shift:!1},s[\"=\"]={code:187,shift:!1},s[\"-\"]={code:189,shift:!1},s[\"]\"]={code:221,shift:!1},s[\"[\"]={code:219,shift:!1};var a=function(t){l(t,\"keydown\")},h=function(t){l(t,\"keyup\")},l=function(t,e){if(void 0!==r[e][t.keyCode]){for(var n=r[e][t.keyCode],o=0;o<n.length;o++)(void 0===n[o].shift||1==n[o].shift&&1==t.shiftKey||0==n[o].shift&&0==t.shiftKey)&&n[o].fn(t);1==i&&t.preventDefault()}};return o.bind=function(t,e,i){if(void 0===i&&(i=\"keydown\"),void 0===s[t])throw new Error(\"unsupported key: \"+t);void 0===r[i][s[t].code]&&(r[i][s[t].code]=[]),r[i][s[t].code].push({fn:e,shift:s[t].shift})},o.bindAll=function(t,e){for(var i in void 0===e&&(e=\"keydown\"),s)s.hasOwnProperty(i)&&o.bind(i,t,e)},o.getKey=function(t){for(var e in s)if(s.hasOwnProperty(e)){if(1==t.shiftKey&&1==s[e].shift&&t.keyCode==s[e].code)return e;if(0==t.shiftKey&&0==s[e].shift&&t.keyCode==s[e].code)return e;if(t.keyCode==s[e].code&&\"shift\"==e)return e}return\"unknown key, currently not supported\"},o.unbind=function(t,e,i){if(void 0===i&&(i=\"keydown\"),void 0===s[t])throw new Error(\"unsupported key: \"+t);if(void 0!==e){var n=[],o=r[i][s[t].code];if(void 0!==o)for(var a=0;a<o.length;a++)o[a].fn==e&&o[a].shift==s[t].shift||n.push(r[i][s[t].code][a]);r[i][s[t].code]=n}else r[i][s[t].code]=[]},o.reset=function(){r={keydown:{},keyup:{}}},o.destroy=function(){r={keydown:{},keyup:{}},n.removeEventListener(\"keydown\",a,!0),n.removeEventListener(\"keyup\",h,!0)},n.addEventListener(\"keydown\",a,!0),n.addEventListener(\"keyup\",h,!0),o}var Tp=Object.freeze({__proto__:null,default:Sp}),Mp=function(){function t(e,i){var n=this;Nn(this,t),this.body=e,this.canvas=i,this.iconsCreated=!1,this.navigationHammers=[],this.boundFunctions={},this.touchTime=0,this.activated=!1,this.body.emitter.on(\"activate\",(function(){n.activated=!0,n.configureKeyboardBindings()})),this.body.emitter.on(\"deactivate\",(function(){n.activated=!1,n.configureKeyboardBindings()})),this.body.emitter.on(\"destroy\",(function(){void 0!==n.keycharm&&n.keycharm.destroy()})),this.options={}}return Fn(t,[{key:\"setOptions\",value:function(t){void 0!==t&&(this.options=t,this.create())}},{key:\"create\",value:function(){!0===this.options.navigationButtons?!1===this.iconsCreated&&this.loadNavigationElements():!0===this.iconsCreated&&this.cleanNavigation(),this.configureKeyboardBindings()}},{key:\"cleanNavigation\",value:function(){if(0!=this.navigationHammers.length){for(var t=0;t<this.navigationHammers.length;t++)this.navigationHammers[t].destroy();this.navigationHammers=[]}this.navigationDOM&&this.navigationDOM.wrapper&&this.navigationDOM.wrapper.parentNode&&this.navigationDOM.wrapper.parentNode.removeChild(this.navigationDOM.wrapper),this.iconsCreated=!1}},{key:\"loadNavigationElements\",value:function(){var t=this;this.cleanNavigation(),this.navigationDOM={};var e=[\"up\",\"down\",\"left\",\"right\",\"zoomIn\",\"zoomOut\",\"zoomExtends\"],i=[\"_moveUp\",\"_moveDown\",\"_moveLeft\",\"_moveRight\",\"_zoomIn\",\"_zoomOut\",\"_fit\"];this.navigationDOM.wrapper=document.createElement(\"div\"),this.navigationDOM.wrapper.className=\"vis-navigation\",this.canvas.frame.appendChild(this.navigationDOM.wrapper);for(var n=0;n<e.length;n++){this.navigationDOM[e[n]]=document.createElement(\"div\"),this.navigationDOM[e[n]].className=\"vis-button vis-\"+e[n],this.navigationDOM.wrapper.appendChild(this.navigationDOM[e[n]]);var o,r,s=new ll(this.navigationDOM[e[n]]);if(\"_fit\"===i[n])_p(s,Vt(o=this._fit).call(o,this));else _p(s,Vt(r=this.bindToRedraw).call(r,this,i[n]));this.navigationHammers.push(s)}var a=new ll(this.canvas.frame);xp(a,(function(){t._stopMovement()})),this.navigationHammers.push(a),this.iconsCreated=!0}},{key:\"bindToRedraw\",value:function(t){var e;void 0===this.boundFunctions[t]&&(this.boundFunctions[t]=Vt(e=this[t]).call(e,this),this.body.emitter.on(\"initRedraw\",this.boundFunctions[t]),this.body.emitter.emit(\"_startRendering\"))}},{key:\"unbindFromRedraw\",value:function(t){void 0!==this.boundFunctions[t]&&(this.body.emitter.off(\"initRedraw\",this.boundFunctions[t]),this.body.emitter.emit(\"_stopRendering\"),delete this.boundFunctions[t])}},{key:\"_fit\",value:function(){(new Date).valueOf()-this.touchTime>700&&(this.body.emitter.emit(\"fit\",{duration:700}),this.touchTime=(new Date).valueOf())}},{key:\"_stopMovement\",value:function(){for(var t in this.boundFunctions)Object.prototype.hasOwnProperty.call(this.boundFunctions,t)&&(this.body.emitter.off(\"initRedraw\",this.boundFunctions[t]),this.body.emitter.emit(\"_stopRendering\"));this.boundFunctions={}}},{key:\"_moveUp\",value:function(){this.body.view.translation.y+=this.options.keyboard.speed.y}},{key:\"_moveDown\",value:function(){this.body.view.translation.y-=this.options.keyboard.speed.y}},{key:\"_moveLeft\",value:function(){this.body.view.translation.x+=this.options.keyboard.speed.x}},{key:\"_moveRight\",value:function(){this.body.view.translation.x-=this.options.keyboard.speed.x}},{key:\"_zoomIn\",value:function(){var t=this.body.view.scale,e=this.body.view.scale*(1+this.options.keyboard.speed.zoom),i=this.body.view.translation,n=e/t,o=(1-n)*this.canvas.canvasViewCenter.x+i.x*n,r=(1-n)*this.canvas.canvasViewCenter.y+i.y*n;this.body.view.scale=e,this.body.view.translation={x:o,y:r},this.body.emitter.emit(\"zoom\",{direction:\"+\",scale:this.body.view.scale,pointer:null})}},{key:\"_zoomOut\",value:function(){var t=this.body.view.scale,e=this.body.view.scale/(1+this.options.keyboard.speed.zoom),i=this.body.view.translation,n=e/t,o=(1-n)*this.canvas.canvasViewCenter.x+i.x*n,r=(1-n)*this.canvas.canvasViewCenter.y+i.y*n;this.body.view.scale=e,this.body.view.translation={x:o,y:r},this.body.emitter.emit(\"zoom\",{direction:\"-\",scale:this.body.view.scale,pointer:null})}},{key:\"configureKeyboardBindings\",value:function(){var t,e,i,n,o,r,s,a,h,l,d,c,u,f,p,v,g,y,m,b,w,k,_,x,E=this;(void 0!==this.keycharm&&this.keycharm.destroy(),!0===this.options.keyboard.enabled)&&(!0===this.options.keyboard.bindToWindow?this.keycharm=Sp({container:window,preventDefault:!0}):this.keycharm=Sp({container:this.canvas.frame,preventDefault:!0}),this.keycharm.reset(),!0===this.activated&&(Vt(t=this.keycharm).call(t,\"up\",(function(){E.bindToRedraw(\"_moveUp\")}),\"keydown\"),Vt(e=this.keycharm).call(e,\"down\",(function(){E.bindToRedraw(\"_moveDown\")}),\"keydown\"),Vt(i=this.keycharm).call(i,\"left\",(function(){E.bindToRedraw(\"_moveLeft\")}),\"keydown\"),Vt(n=this.keycharm).call(n,\"right\",(function(){E.bindToRedraw(\"_moveRight\")}),\"keydown\"),Vt(o=this.keycharm).call(o,\"=\",(function(){E.bindToRedraw(\"_zoomIn\")}),\"keydown\"),Vt(r=this.keycharm).call(r,\"num+\",(function(){E.bindToRedraw(\"_zoomIn\")}),\"keydown\"),Vt(s=this.keycharm).call(s,\"num-\",(function(){E.bindToRedraw(\"_zoomOut\")}),\"keydown\"),Vt(a=this.keycharm).call(a,\"-\",(function(){E.bindToRedraw(\"_zoomOut\")}),\"keydown\"),Vt(h=this.keycharm).call(h,\"[\",(function(){E.bindToRedraw(\"_zoomOut\")}),\"keydown\"),Vt(l=this.keycharm).call(l,\"]\",(function(){E.bindToRedraw(\"_zoomIn\")}),\"keydown\"),Vt(d=this.keycharm).call(d,\"pageup\",(function(){E.bindToRedraw(\"_zoomIn\")}),\"keydown\"),Vt(c=this.keycharm).call(c,\"pagedown\",(function(){E.bindToRedraw(\"_zoomOut\")}),\"keydown\"),Vt(u=this.keycharm).call(u,\"up\",(function(){E.unbindFromRedraw(\"_moveUp\")}),\"keyup\"),Vt(f=this.keycharm).call(f,\"down\",(function(){E.unbindFromRedraw(\"_moveDown\")}),\"keyup\"),Vt(p=this.keycharm).call(p,\"left\",(function(){E.unbindFromRedraw(\"_moveLeft\")}),\"keyup\"),Vt(v=this.keycharm).call(v,\"right\",(function(){E.unbindFromRedraw(\"_moveRight\")}),\"keyup\"),Vt(g=this.keycharm).call(g,\"=\",(function(){E.unbindFromRedraw(\"_zoomIn\")}),\"keyup\"),Vt(y=this.keycharm).call(y,\"num+\",(function(){E.unbindFromRedraw(\"_zoomIn\")}),\"keyup\"),Vt(m=this.keycharm).call(m,\"num-\",(function(){E.unbindFromRedraw(\"_zoomOut\")}),\"keyup\"),Vt(b=this.keycharm).call(b,\"-\",(function(){E.unbindFromRedraw(\"_zoomOut\")}),\"keyup\"),Vt(w=this.keycharm).call(w,\"[\",(function(){E.unbindFromRedraw(\"_zoomOut\")}),\"keyup\"),Vt(k=this.keycharm).call(k,\"]\",(function(){E.unbindFromRedraw(\"_zoomIn\")}),\"keyup\"),Vt(_=this.keycharm).call(_,\"pageup\",(function(){E.unbindFromRedraw(\"_zoomIn\")}),\"keyup\"),Vt(x=this.keycharm).call(x,\"pagedown\",(function(){E.unbindFromRedraw(\"_zoomOut\")}),\"keyup\")))}}]),t}();function Pp(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return Dp(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Dp(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function Dp(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}var Ip=function(){function t(e,i,n){var o,r,s,a,h,l,d,c,u,f,p,v,g;Nn(this,t),this.body=e,this.canvas=i,this.selectionHandler=n,this.navigationHandler=new Mp(e,i),this.body.eventListeners.onTap=Vt(o=this.onTap).call(o,this),this.body.eventListeners.onTouch=Vt(r=this.onTouch).call(r,this),this.body.eventListeners.onDoubleTap=Vt(s=this.onDoubleTap).call(s,this),this.body.eventListeners.onHold=Vt(a=this.onHold).call(a,this),this.body.eventListeners.onDragStart=Vt(h=this.onDragStart).call(h,this),this.body.eventListeners.onDrag=Vt(l=this.onDrag).call(l,this),this.body.eventListeners.onDragEnd=Vt(d=this.onDragEnd).call(d,this),this.body.eventListeners.onMouseWheel=Vt(c=this.onMouseWheel).call(c,this),this.body.eventListeners.onPinch=Vt(u=this.onPinch).call(u,this),this.body.eventListeners.onMouseMove=Vt(f=this.onMouseMove).call(f,this),this.body.eventListeners.onRelease=Vt(p=this.onRelease).call(p,this),this.body.eventListeners.onContext=Vt(v=this.onContext).call(v,this),this.touchTime=0,this.drag={},this.pinch={},this.popup=void 0,this.popupObj=void 0,this.popupTimer=void 0,this.body.functions.getPointer=Vt(g=this.getPointer).call(g,this),this.options={},this.defaultOptions={dragNodes:!0,dragView:!0,hover:!1,keyboard:{enabled:!1,speed:{x:10,y:10,zoom:.02},bindToWindow:!0,autoFocus:!0},navigationButtons:!1,tooltipDelay:300,zoomView:!0,zoomSpeed:1},At(this.options,this.defaultOptions),this.bindEventListeners()}return Fn(t,[{key:\"bindEventListeners\",value:function(){var t=this;this.body.emitter.on(\"destroy\",(function(){clearTimeout(t.popupTimer),delete t.body.functions.getPointer}))}},{key:\"setOptions\",value:function(t){if(void 0!==t){Oh([\"hideEdgesOnDrag\",\"hideEdgesOnZoom\",\"hideNodesOnDrag\",\"keyboard\",\"multiselect\",\"selectable\",\"selectConnectedEdges\"],this.options,t),$h(this.options,t,\"keyboard\"),t.tooltip&&(At(this.options.tooltip,t.tooltip),t.tooltip.color&&(this.options.tooltip.color=Rh(t.tooltip.color)))}this.navigationHandler.setOptions(this.options)}},{key:\"getPointer\",value:function(t){return{x:t.x-Mh(this.canvas.frame.canvas),y:t.y-Ph(this.canvas.frame.canvas)}}},{key:\"onTouch\",value:function(t){(new Date).valueOf()-this.touchTime>50&&(this.drag.pointer=this.getPointer(t.center),this.drag.pinched=!1,this.pinch.scale=this.body.view.scale,this.touchTime=(new Date).valueOf())}},{key:\"onTap\",value:function(t){var e=this.getPointer(t.center),i=this.selectionHandler.options.multiselect&&(t.changedPointers[0].ctrlKey||t.changedPointers[0].metaKey);this.checkSelectionChanges(e,i),this.selectionHandler.commitAndEmit(e,t),this.selectionHandler.generateClickEvent(\"click\",t,e)}},{key:\"onDoubleTap\",value:function(t){var e=this.getPointer(t.center);this.selectionHandler.generateClickEvent(\"doubleClick\",t,e)}},{key:\"onHold\",value:function(t){var e=this.getPointer(t.center),i=this.selectionHandler.options.multiselect;this.checkSelectionChanges(e,i),this.selectionHandler.commitAndEmit(e,t),this.selectionHandler.generateClickEvent(\"click\",t,e),this.selectionHandler.generateClickEvent(\"hold\",t,e)}},{key:\"onRelease\",value:function(t){if((new Date).valueOf()-this.touchTime>10){var e=this.getPointer(t.center);this.selectionHandler.generateClickEvent(\"release\",t,e),this.touchTime=(new Date).valueOf()}}},{key:\"onContext\",value:function(t){var e=this.getPointer({x:t.clientX,y:t.clientY});this.selectionHandler.generateClickEvent(\"oncontext\",t,e)}},{key:\"checkSelectionChanges\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];!0===e?this.selectionHandler.selectAdditionalOnPoint(t):this.selectionHandler.selectOnPoint(t)}},{key:\"_determineDifference\",value:function(t,e){var i=function(t,e){for(var i=[],n=0;n<t.length;n++){var o=t[n];-1===Hr(e).call(e,o)&&i.push(o)}return i};return{nodes:i(t.nodes,e.nodes),edges:i(t.edges,e.edges)}}},{key:\"onDragStart\",value:function(t){if(!this.drag.dragging){void 0===this.drag.pointer&&this.onTouch(t);var e=this.selectionHandler.getNodeAt(this.drag.pointer);if(this.drag.dragging=!0,this.drag.selection=[],this.drag.translation=At({},this.body.view.translation),this.drag.nodeId=void 0,t.srcEvent.shiftKey){this.body.selectionBox.show=!0;var i=this.getPointer(t.center);this.body.selectionBox.position.start={x:this.canvas._XconvertDOMtoCanvas(i.x),y:this.canvas._YconvertDOMtoCanvas(i.y)},this.body.selectionBox.position.end={x:this.canvas._XconvertDOMtoCanvas(i.x),y:this.canvas._YconvertDOMtoCanvas(i.y)}}if(void 0!==e&&!0===this.options.dragNodes){this.drag.nodeId=e.id,!1===e.isSelected()&&(this.selectionHandler.unselectAll(),this.selectionHandler.selectObject(e)),this.selectionHandler.generateClickEvent(\"dragStart\",t,this.drag.pointer);var n,o=Pp(this.selectionHandler.getSelectedNodes());try{for(o.s();!(n=o.n()).done;){var r=n.value,s={id:r.id,node:r,x:r.x,y:r.y,xFixed:r.options.fixed.x,yFixed:r.options.fixed.y};r.options.fixed.x=!0,r.options.fixed.y=!0,this.drag.selection.push(s)}}catch(t){o.e(t)}finally{o.f()}}else this.selectionHandler.generateClickEvent(\"dragStart\",t,this.drag.pointer,void 0,!0)}}},{key:\"onDrag\",value:function(t){var e=this;if(!0!==this.drag.pinched){this.body.emitter.emit(\"unlockNode\");var i=this.getPointer(t.center),n=this.drag.selection;if(n&&n.length&&!0===this.options.dragNodes){this.selectionHandler.generateClickEvent(\"dragging\",t,i);var o=i.x-this.drag.pointer.x,r=i.y-this.drag.pointer.y;Wo(n).call(n,(function(t){var i=t.node;!1===t.xFixed&&(i.x=e.canvas._XconvertDOMtoCanvas(e.canvas._XconvertCanvasToDOM(t.x)+o)),!1===t.yFixed&&(i.y=e.canvas._YconvertDOMtoCanvas(e.canvas._YconvertCanvasToDOM(t.y)+r))})),this.body.emitter.emit(\"startSimulation\")}else{if(t.srcEvent.shiftKey){if(this.selectionHandler.generateClickEvent(\"dragging\",t,i,void 0,!0),void 0===this.drag.pointer)return void this.onDragStart(t);this.body.selectionBox.position.end={x:this.canvas._XconvertDOMtoCanvas(i.x),y:this.canvas._YconvertDOMtoCanvas(i.y)},this.body.emitter.emit(\"_requestRedraw\")}if(!0===this.options.dragView&&!t.srcEvent.shiftKey){if(this.selectionHandler.generateClickEvent(\"dragging\",t,i,void 0,!0),void 0===this.drag.pointer)return void this.onDragStart(t);var s=i.x-this.drag.pointer.x,a=i.y-this.drag.pointer.y;this.body.view.translation={x:this.drag.translation.x+s,y:this.drag.translation.y+a},this.body.emitter.emit(\"_requestRedraw\")}}}}},{key:\"onDragEnd\",value:function(t){var e=this;if(this.drag.dragging=!1,this.body.selectionBox.show){var i;this.body.selectionBox.show=!1;var n=this.body.selectionBox.position,o={minX:Math.min(n.start.x,n.end.x),minY:Math.min(n.start.y,n.end.y),maxX:Math.max(n.start.x,n.end.x),maxY:Math.max(n.start.y,n.end.y)},r=mr(i=this.body.nodeIndices).call(i,(function(t){var i=e.body.nodes[t];return i.x>=o.minX&&i.x<=o.maxX&&i.y>=o.minY&&i.y<=o.maxY}));Wo(r).call(r,(function(t){return e.selectionHandler.selectObject(e.body.nodes[t])}));var s=this.getPointer(t.center);this.selectionHandler.commitAndEmit(s,t),this.selectionHandler.generateClickEvent(\"dragEnd\",t,this.getPointer(t.center),void 0,!0),this.body.emitter.emit(\"_requestRedraw\")}else{var a=this.drag.selection;a&&a.length?(Wo(a).call(a,(function(t){t.node.options.fixed.x=t.xFixed,t.node.options.fixed.y=t.yFixed})),this.selectionHandler.generateClickEvent(\"dragEnd\",t,this.getPointer(t.center)),this.body.emitter.emit(\"startSimulation\")):(this.selectionHandler.generateClickEvent(\"dragEnd\",t,this.getPointer(t.center),void 0,!0),this.body.emitter.emit(\"_requestRedraw\"))}}},{key:\"onPinch\",value:function(t){var e=this.getPointer(t.center);this.drag.pinched=!0,void 0===this.pinch.scale&&(this.pinch.scale=1);var i=this.pinch.scale*t.scale;this.zoom(i,e)}},{key:\"zoom\",value:function(t,e){if(!0===this.options.zoomView){var i=this.body.view.scale;t<1e-5&&(t=1e-5),t>10&&(t=10);var n=void 0;void 0!==this.drag&&!0===this.drag.dragging&&(n=this.canvas.DOMtoCanvas(this.drag.pointer));var o=this.body.view.translation,r=t/i,s=(1-r)*e.x+o.x*r,a=(1-r)*e.y+o.y*r;if(this.body.view.scale=t,this.body.view.translation={x:s,y:a},null!=n){var h=this.canvas.canvasToDOM(n);this.drag.pointer.x=h.x,this.drag.pointer.y=h.y}this.body.emitter.emit(\"_requestRedraw\"),i<t?this.body.emitter.emit(\"zoom\",{direction:\"+\",scale:this.body.view.scale,pointer:e}):this.body.emitter.emit(\"zoom\",{direction:\"-\",scale:this.body.view.scale,pointer:e})}}},{key:\"onMouseWheel\",value:function(t){if(!0===this.options.zoomView){if(0!==t.deltaY){var e=this.body.view.scale;e*=1+(t.deltaY<0?1:-1)*(.1*this.options.zoomSpeed);var i=this.getPointer({x:t.clientX,y:t.clientY});this.zoom(e,i)}t.preventDefault()}}},{key:\"onMouseMove\",value:function(t){var e=this,i=this.getPointer({x:t.clientX,y:t.clientY}),n=!1;void 0!==this.popup&&(!1===this.popup.hidden&&this._checkHidePopup(i),!1===this.popup.hidden&&(n=!0,this.popup.setPosition(i.x+3,i.y-5),this.popup.show())),this.options.keyboard.autoFocus&&!1===this.options.keyboard.bindToWindow&&!0===this.options.keyboard.enabled&&this.canvas.frame.focus(),!1===n&&(void 0!==this.popupTimer&&(clearInterval(this.popupTimer),this.popupTimer=void 0),this.drag.dragging||(this.popupTimer=rs((function(){return e._checkShowPopup(i)}),this.options.tooltipDelay))),!0===this.options.hover&&this.selectionHandler.hoverObject(t,i)}},{key:\"_checkShowPopup\",value:function(t){var e=this.canvas._XconvertDOMtoCanvas(t.x),i=this.canvas._YconvertDOMtoCanvas(t.y),n={left:e,top:i,right:e,bottom:i},o=void 0===this.popupObj?void 0:this.popupObj.id,r=!1,s=\"node\";if(void 0===this.popupObj){for(var a,h=this.body.nodeIndices,l=this.body.nodes,d=[],c=0;c<h.length;c++)!0===(a=l[h[c]]).isOverlappingWith(n)&&(r=!0,void 0!==a.getTitle()&&d.push(h[c]));d.length>0&&(this.popupObj=l[d[d.length-1]],r=!0)}if(void 0===this.popupObj&&!1===r){for(var u,f=this.body.edgeIndices,p=this.body.edges,v=[],g=0;g<f.length;g++)!0===(u=p[f[g]]).isOverlappingWith(n)&&!0===u.connected&&void 0!==u.getTitle()&&v.push(f[g]);v.length>0&&(this.popupObj=p[v[v.length-1]],s=\"edge\")}void 0!==this.popupObj?this.popupObj.id!==o&&(void 0===this.popup&&(this.popup=new dl(this.canvas.frame)),this.popup.popupTargetType=s,this.popup.popupTargetId=this.popupObj.id,this.popup.setPosition(t.x+3,t.y-5),this.popup.setText(this.popupObj.getTitle()),this.popup.show(),this.body.emitter.emit(\"showPopup\",this.popupObj.id)):void 0!==this.popup&&(this.popup.hide(),this.body.emitter.emit(\"hidePopup\"))}},{key:\"_checkHidePopup\",value:function(t){var e=this.selectionHandler._pointerToPositionObject(t),i=!1;if(\"node\"===this.popup.popupTargetType){if(void 0!==this.body.nodes[this.popup.popupTargetId]&&!0===(i=this.body.nodes[this.popup.popupTargetId].isOverlappingWith(e))){var n=this.selectionHandler.getNodeAt(t);i=void 0!==n&&n.id===this.popup.popupTargetId}}else void 0===this.selectionHandler.getNodeAt(t)&&void 0!==this.body.edges[this.popup.popupTargetId]&&(i=this.body.edges[this.popup.popupTargetId].isOverlappingWith(e));!1===i&&(this.popupObj=void 0,this.popup.hide(),this.body.emitter.emit(\"hidePopup\"))}}]),t}(),Bp=Jl.getWeakData,zp=we.set,Np=we.getterFor,Ap=Gi.find,Fp=Gi.findIndex,jp=0,Rp=function(t){return t.frozen||(t.frozen=new Lp)},Lp=function(){this.entries=[]},Hp=function(t,e){return Ap(t.entries,(function(t){return t[0]===e}))};Lp.prototype={get:function(t){var e=Hp(this,t);if(e)return e[1]},has:function(t){return!!Hp(this,t)},set:function(t,e){var i=Hp(this,t);i?i[1]=e:this.entries.push([t,e])},delete:function(t){var e=Fp(this.entries,(function(e){return e[0]===t}));return~e&&this.entries.splice(e,1),!!~e}};var Wp={getConstructor:function(t,e,i,n){var o=t((function(t,r){id(t,o,e),zp(t,{type:e,id:jp++,frozen:void 0}),null!=r&&ed(r,t[n],{that:t,AS_ENTRIES:i})})),r=Np(e),s=function(t,e,i){var n=r(t),o=Bp(dt(e),!0);return!0===o?Rp(n).set(e,i):o[n.id]=i,t};return hd(o.prototype,{delete:function(t){var e=r(this);if(!w(t))return!1;var i=Bp(t);return!0===i?Rp(e).delete(t):i&&j(i,e.id)&&delete i[e.id]},has:function(t){var e=r(this);if(!w(t))return!1;var i=Bp(t);return!0===i?Rp(e).has(t):i&&j(i,e.id)}}),hd(o.prototype,i?{get:function(t){var e=r(this);if(w(t)){var i=Bp(t);return!0===i?Rp(e).get(t):i?i[e.id]:void 0}},set:function(t,e){return s(this,t,e)}}:{add:function(t){return s(this,t,!0)}}),o}};n((function(t){var e,i=we.enforce,n=!a.ActiveXObject&&\"ActiveXObject\"in a,o=Object.isExtensible,r=function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}},s=t.exports=ad(\"WeakMap\",r,Wp);if(ae&&n){e=Wp.getConstructor(r,\"WeakMap\",!0),Jl.enable();var h=s.prototype,l=h.delete,d=h.has,c=h.get,u=h.set;hd(h,{delete:function(t){if(w(t)&&!o(t)){var n=i(this);return n.frozen||(n.frozen=new e),l.call(this,t)||n.frozen.delete(t)}return l.call(this,t)},has:function(t){if(w(t)&&!o(t)){var n=i(this);return n.frozen||(n.frozen=new e),d.call(this,t)||n.frozen.has(t)}return d.call(this,t)},get:function(t){if(w(t)&&!o(t)){var n=i(this);return n.frozen||(n.frozen=new e),d.call(this,t)?c.call(this,t):n.frozen.get(t)}return c.call(this,t)},set:function(t,n){if(w(t)&&!o(t)){var r=i(this);r.frozen||(r.frozen=new e),d.call(this,t)?u.call(this,t,n):r.frozen.set(t,n)}else u.call(this,t,n);return this}})}}));var qp,Vp,Up,Yp,Xp,Gp=k.WeakMap;function Kp(t,e,i,n){if(\"a\"===i&&!n)throw new TypeError(\"Private accessor was defined without a getter\");if(\"function\"==typeof e?t!==e||!n:!e.has(t))throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");return\"m\"===i?n:\"a\"===i?n.call(t):n?n.value:e.get(t)}function $p(t,e,i,n,o){if(\"m\"===n)throw new TypeError(\"Private method is not writable\");if(\"a\"===n&&!o)throw new TypeError(\"Private accessor was defined without a setter\");if(\"function\"==typeof e?t!==e||!o:!e.has(t))throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");return\"a\"===n?o.call(t,i):o?o.value=i:e.set(t,i),i}function Zp(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return Qp(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Qp(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function Qp(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}function Jp(t,e){var i,n=new ec,o=Zp(e);try{for(o.s();!(i=o.n()).done;){var r=i.value;t.has(r)||n.add(r)}}catch(t){o.e(t)}finally{o.f()}return n}var tv=function(){function t(){Nn(this,t),qp.set(this,new ec),Vp.set(this,new ec)}return Fn(t,[{key:\"size\",get:function(){return Kp(this,Vp,\"f\").size}},{key:\"add\",value:function(){for(var t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];for(var n=0,o=e;n<o.length;n++){var r=o[n];Kp(this,Vp,\"f\").add(r)}}},{key:\"delete\",value:function(){for(var t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];for(var n=0,o=e;n<o.length;n++){var r=o[n];Kp(this,Vp,\"f\").delete(r)}}},{key:\"clear\",value:function(){Kp(this,Vp,\"f\").clear()}},{key:\"getSelection\",value:function(){return wo(Kp(this,Vp,\"f\"))}},{key:\"getChanges\",value:function(){return{added:wo(Jp(Kp(this,qp,\"f\"),Kp(this,Vp,\"f\"))),deleted:wo(Jp(Kp(this,Vp,\"f\"),Kp(this,qp,\"f\"))),previous:wo(new ec(Kp(this,qp,\"f\"))),current:wo(new ec(Kp(this,Vp,\"f\")))}}},{key:\"commit\",value:function(){var t=this.getChanges();$p(this,qp,Kp(this,Vp,\"f\"),\"f\"),$p(this,Vp,new ec(Kp(this,qp,\"f\")),\"f\");var e,i=Zp(t.added);try{for(i.s();!(e=i.n()).done;){e.value.select()}}catch(t){i.e(t)}finally{i.f()}var n,o=Zp(t.deleted);try{for(o.s();!(n=o.n()).done;){n.value.unselect()}}catch(t){o.e(t)}finally{o.f()}return t}}]),t}();qp=new Gp,Vp=new Gp;var ev=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:function(){};Nn(this,t),Up.set(this,new tv),Yp.set(this,new tv),Xp.set(this,void 0),$p(this,Xp,e,\"f\")}return Fn(t,[{key:\"sizeNodes\",get:function(){return Kp(this,Up,\"f\").size}},{key:\"sizeEdges\",get:function(){return Kp(this,Yp,\"f\").size}},{key:\"getNodes\",value:function(){return Kp(this,Up,\"f\").getSelection()}},{key:\"getEdges\",value:function(){return Kp(this,Yp,\"f\").getSelection()}},{key:\"addNodes\",value:function(){var t;(t=Kp(this,Up,\"f\")).add.apply(t,arguments)}},{key:\"addEdges\",value:function(){var t;(t=Kp(this,Yp,\"f\")).add.apply(t,arguments)}},{key:\"deleteNodes\",value:function(t){Kp(this,Up,\"f\").delete(t)}},{key:\"deleteEdges\",value:function(t){Kp(this,Yp,\"f\").delete(t)}},{key:\"clear\",value:function(){Kp(this,Up,\"f\").clear(),Kp(this,Yp,\"f\").clear()}},{key:\"commit\",value:function(){for(var t,e,i={nodes:Kp(this,Up,\"f\").commit(),edges:Kp(this,Yp,\"f\").commit()},n=arguments.length,o=new Array(n),r=0;r<n;r++)o[r]=arguments[r];return(t=Kp(this,Xp,\"f\")).call.apply(t,Eo(e=[this,i]).call(e,o)),i}}]),t}();function iv(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return nv(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return nv(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function nv(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}Up=new Gp,Yp=new Gp,Xp=new Gp;var ov=function(){function t(e,i){var n=this;Nn(this,t),this.body=e,this.canvas=i,this._selectionAccumulator=new ev,this.hoverObj={nodes:{},edges:{}},this.options={},this.defaultOptions={multiselect:!1,selectable:!0,selectConnectedEdges:!0,hoverConnectedEdges:!0},At(this.options,this.defaultOptions),this.body.emitter.on(\"_dataChanged\",(function(){n.updateSelection()}))}return Fn(t,[{key:\"setOptions\",value:function(t){if(void 0!==t){Eh([\"multiselect\",\"hoverConnectedEdges\",\"selectable\",\"selectConnectedEdges\"],this.options,t)}}},{key:\"selectOnPoint\",value:function(t){var e=!1;if(!0===this.options.selectable){var i=this.getNodeAt(t)||this.getEdgeAt(t);this.unselectAll(),void 0!==i&&(e=this.selectObject(i)),this.body.emitter.emit(\"_requestRedraw\")}return e}},{key:\"selectAdditionalOnPoint\",value:function(t){var e=!1;if(!0===this.options.selectable){var i=this.getNodeAt(t)||this.getEdgeAt(t);void 0!==i&&(e=!0,!0===i.isSelected()?this.deselectObject(i):this.selectObject(i),this.body.emitter.emit(\"_requestRedraw\"))}return e}},{key:\"_initBaseEvent\",value:function(t,e){var i={};return i.pointer={DOM:{x:e.x,y:e.y},canvas:this.canvas.DOMtoCanvas(e)},i.event=t,i}},{key:\"generateClickEvent\",value:function(t,e,i,n){var o=arguments.length>4&&void 0!==arguments[4]&&arguments[4],r=this._initBaseEvent(e,i);if(!0===o)r.nodes=[],r.edges=[];else{var s=this.getSelection();r.nodes=s.nodes,r.edges=s.edges}void 0!==n&&(r.previousSelection=n),\"click\"==t&&(r.items=this.getClickedItems(i)),void 0!==e.controlEdge&&(r.controlEdge=e.controlEdge),this.body.emitter.emit(t,r)}},{key:\"selectObject\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.options.selectConnectedEdges;if(void 0!==t){if(t instanceof cf){var i;if(!0===e)(i=this._selectionAccumulator).addEdges.apply(i,wo(t.edges));this._selectionAccumulator.addNodes(t)}else this._selectionAccumulator.addEdges(t);return!0}return!1}},{key:\"deselectObject\",value:function(t){!0===t.isSelected()&&(t.selected=!1,this._removeFromSelection(t))}},{key:\"_getAllNodesOverlappingWith\",value:function(t){for(var e=[],i=this.body.nodes,n=0;n<this.body.nodeIndices.length;n++){var o=this.body.nodeIndices[n];i[o].isOverlappingWith(t)&&e.push(o)}return e}},{key:\"_pointerToPositionObject\",value:function(t){var e=this.canvas.DOMtoCanvas(t);return{left:e.x-1,top:e.y+1,right:e.x+1,bottom:e.y-1}}},{key:\"getNodeAt\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this._pointerToPositionObject(t),n=this._getAllNodesOverlappingWith(i);return n.length>0?!0===e?this.body.nodes[n[n.length-1]]:n[n.length-1]:void 0}},{key:\"_getEdgesOverlappingWith\",value:function(t,e){for(var i=this.body.edges,n=0;n<this.body.edgeIndices.length;n++){var o=this.body.edgeIndices[n];i[o].isOverlappingWith(t)&&e.push(o)}}},{key:\"_getAllEdgesOverlappingWith\",value:function(t){var e=[];return this._getEdgesOverlappingWith(t,e),e}},{key:\"getEdgeAt\",value:function(t){for(var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this.canvas.DOMtoCanvas(t),n=10,o=null,r=this.body.edges,s=0;s<this.body.edgeIndices.length;s++){var a=this.body.edgeIndices[s],h=r[a];if(h.connected){var l=h.from.x,d=h.from.y,c=h.to.x,u=h.to.y,f=h.edgeType.getDistanceToEdge(l,d,c,u,i.x,i.y);f<n&&(o=a,n=f)}}return null!==o?!0===e?this.body.edges[o]:o:void 0}},{key:\"_addToHover\",value:function(t){t instanceof cf?this.hoverObj.nodes[t.id]=t:this.hoverObj.edges[t.id]=t}},{key:\"_removeFromSelection\",value:function(t){var e;t instanceof cf?(this._selectionAccumulator.deleteNodes(t),(e=this._selectionAccumulator).deleteEdges.apply(e,wo(t.edges))):this._selectionAccumulator.deleteEdges(t)}},{key:\"unselectAll\",value:function(){this._selectionAccumulator.clear()}},{key:\"getSelectedNodeCount\",value:function(){return this._selectionAccumulator.sizeNodes}},{key:\"getSelectedEdgeCount\",value:function(){return this._selectionAccumulator.sizeEdges}},{key:\"_hoverConnectedEdges\",value:function(t){for(var e=0;e<t.edges.length;e++){var i=t.edges[e];i.hover=!0,this._addToHover(i)}}},{key:\"emitBlurEvent\",value:function(t,e,i){var n=this._initBaseEvent(t,e);!0===i.hover&&(i.hover=!1,i instanceof cf?(n.node=i.id,this.body.emitter.emit(\"blurNode\",n)):(n.edge=i.id,this.body.emitter.emit(\"blurEdge\",n)))}},{key:\"emitHoverEvent\",value:function(t,e,i){var n=this._initBaseEvent(t,e),o=!1;return!1===i.hover&&(i.hover=!0,this._addToHover(i),o=!0,i instanceof cf?(n.node=i.id,this.body.emitter.emit(\"hoverNode\",n)):(n.edge=i.id,this.body.emitter.emit(\"hoverEdge\",n))),o}},{key:\"hoverObject\",value:function(t,e){var i=this.getNodeAt(e);void 0===i&&(i=this.getEdgeAt(e));var n=!1;for(var o in this.hoverObj.nodes)Object.prototype.hasOwnProperty.call(this.hoverObj.nodes,o)&&(void 0===i||i instanceof cf&&i.id!=o||i instanceof ep)&&(this.emitBlurEvent(t,e,this.hoverObj.nodes[o]),delete this.hoverObj.nodes[o],n=!0);for(var r in this.hoverObj.edges)Object.prototype.hasOwnProperty.call(this.hoverObj.edges,r)&&(!0===n?(this.hoverObj.edges[r].hover=!1,delete this.hoverObj.edges[r]):(void 0===i||i instanceof ep&&i.id!=r||i instanceof cf&&!i.hover)&&(this.emitBlurEvent(t,e,this.hoverObj.edges[r]),delete this.hoverObj.edges[r],n=!0));if(void 0!==i){var s=zo(this.hoverObj.edges).length,a=zo(this.hoverObj.nodes).length;(n||i instanceof ep&&0===s&&0===a||i instanceof cf&&0===s&&0===a)&&(n=this.emitHoverEvent(t,e,i)),i instanceof cf&&!0===this.options.hoverConnectedEdges&&this._hoverConnectedEdges(i)}!0===n&&this.body.emitter.emit(\"_requestRedraw\")}},{key:\"commitWithoutEmitting\",value:function(){this._selectionAccumulator.commit()}},{key:\"commitAndEmit\",value:function(t,e){var i=!1,n=this._selectionAccumulator.commit(),o={nodes:n.nodes.previous,edges:n.edges.previous};n.edges.deleted.length>0&&(this.generateClickEvent(\"deselectEdge\",e,t,o),i=!0),n.nodes.deleted.length>0&&(this.generateClickEvent(\"deselectNode\",e,t,o),i=!0),n.nodes.added.length>0&&(this.generateClickEvent(\"selectNode\",e,t),i=!0),n.edges.added.length>0&&(this.generateClickEvent(\"selectEdge\",e,t),i=!0),!0===i&&this.generateClickEvent(\"select\",e,t)}},{key:\"getSelection\",value:function(){return{nodes:this.getSelectedNodeIds(),edges:this.getSelectedEdgeIds()}}},{key:\"getSelectedNodes\",value:function(){return this._selectionAccumulator.getNodes()}},{key:\"getSelectedEdges\",value:function(){return this._selectionAccumulator.getEdges()}},{key:\"getSelectedNodeIds\",value:function(){var t;return Io(t=this._selectionAccumulator.getNodes()).call(t,(function(t){return t.id}))}},{key:\"getSelectedEdgeIds\",value:function(){var t;return Io(t=this._selectionAccumulator.getEdges()).call(t,(function(t){return t.id}))}},{key:\"setSelection\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!t||!t.nodes&&!t.edges)throw new TypeError(\"Selection must be an object with nodes and/or edges properties\");if((e.unselectAll||void 0===e.unselectAll)&&this.unselectAll(),t.nodes){var i,n=iv(t.nodes);try{for(n.s();!(i=n.n()).done;){var o=i.value,r=this.body.nodes[o];if(!r)throw new RangeError('Node with id \"'+o+'\" not found');this.selectObject(r,e.highlightEdges)}}catch(t){n.e(t)}finally{n.f()}}if(t.edges){var s,a=iv(t.edges);try{for(a.s();!(s=a.n()).done;){var h=s.value,l=this.body.edges[h];if(!l)throw new RangeError('Edge with id \"'+h+'\" not found');this.selectObject(l)}}catch(t){a.e(t)}finally{a.f()}}this.body.emitter.emit(\"_requestRedraw\"),this._selectionAccumulator.commit()}},{key:\"selectNodes\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(!t||void 0===t.length)throw\"Selection must be an array with ids\";this.setSelection({nodes:t},{highlightEdges:e})}},{key:\"selectEdges\",value:function(t){if(!t||void 0===t.length)throw\"Selection must be an array with ids\";this.setSelection({edges:t})}},{key:\"updateSelection\",value:function(){for(var t in this._selectionAccumulator.getNodes())Object.prototype.hasOwnProperty.call(this.body.nodes,t.id)||this._selectionAccumulator.deleteNodes(t);for(var e in this._selectionAccumulator.getEdges())Object.prototype.hasOwnProperty.call(this.body.edges,e.id)||this._selectionAccumulator.deleteEdges(e)}},{key:\"getClickedItems\",value:function(t){for(var e=this.canvas.DOMtoCanvas(t),i=[],n=this.body.nodeIndices,o=this.body.nodes,r=n.length-1;r>=0;r--){var s=o[n[r]].getItemsOnPoint(e);i.push.apply(i,s)}for(var a=this.body.edgeIndices,h=this.body.edges,l=a.length-1;l>=0;l--){var d=h[a[l]].getItemsOnPoint(e);i.push.apply(i,d)}return i}}]),t}(),rv=n((function(t,e){!function(t){function e(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}t.__esModule=!0,t.sort=v;var i=32,n=7,o=256,r=[1,10,100,1e3,1e4,1e5,1e6,1e7,1e8,1e9];function s(t){return t<1e5?t<100?t<10?0:1:t<1e4?t<1e3?2:3:4:t<1e7?t<1e6?5:6:t<1e9?t<1e8?7:8:9}function a(t,e){if(t===e)return 0;if(~~t===t&&~~e===e){if(0===t||0===e)return t<e?-1:1;if(t<0||e<0){if(e>=0)return-1;if(t>=0)return 1;t=-t,e=-e}var i=s(t),n=s(e),o=0;return i<n?(t*=r[n-i-1],e/=10,o=-1):i>n&&(e*=r[i-n-1],t/=10,o=1),t===e?o:t<e?-1:1}var a=String(t),h=String(e);return a===h?0:a<h?-1:1}function h(t){for(var e=0;t>=i;)e|=1&t,t>>=1;return t+e}function l(t,e,i,n){var o=e+1;if(o===i)return 1;if(n(t[o++],t[e])<0){for(;o<i&&n(t[o],t[o-1])<0;)o++;d(t,e,o)}else for(;o<i&&n(t[o],t[o-1])>=0;)o++;return o-e}function d(t,e,i){for(i--;e<i;){var n=t[e];t[e++]=t[i],t[i--]=n}}function c(t,e,i,n,o){for(n===e&&n++;n<i;n++){for(var r=t[n],s=e,a=n;s<a;){var h=s+a>>>1;o(r,t[h])<0?a=h:s=h+1}var l=n-s;switch(l){case 3:t[s+3]=t[s+2];case 2:t[s+2]=t[s+1];case 1:t[s+1]=t[s];break;default:for(;l>0;)t[s+l]=t[s+l-1],l--}t[s]=r}}function u(t,e,i,n,o,r){var s=0,a=0,h=1;if(r(t,e[i+o])>0){for(a=n-o;h<a&&r(t,e[i+o+h])>0;)s=h,(h=1+(h<<1))<=0&&(h=a);h>a&&(h=a),s+=o,h+=o}else{for(a=o+1;h<a&&r(t,e[i+o-h])<=0;)s=h,(h=1+(h<<1))<=0&&(h=a);h>a&&(h=a);var l=s;s=o-h,h=o-l}for(s++;s<h;){var d=s+(h-s>>>1);r(t,e[i+d])>0?s=d+1:h=d}return h}function f(t,e,i,n,o,r){var s=0,a=0,h=1;if(r(t,e[i+o])<0){for(a=o+1;h<a&&r(t,e[i+o-h])<0;)s=h,(h=1+(h<<1))<=0&&(h=a);h>a&&(h=a);var l=s;s=o-h,h=o-l}else{for(a=n-o;h<a&&r(t,e[i+o+h])>=0;)s=h,(h=1+(h<<1))<=0&&(h=a);h>a&&(h=a),s+=o,h+=o}for(s++;s<h;){var d=s+(h-s>>>1);r(t,e[i+d])<0?h=d:s=d+1}return h}var p=function(){function t(i,r){e(this,t),this.array=null,this.compare=null,this.minGallop=n,this.length=0,this.tmpStorageLength=o,this.stackLength=0,this.runStart=null,this.runLength=null,this.stackSize=0,this.array=i,this.compare=r,this.length=i.length,this.length<2*o&&(this.tmpStorageLength=this.length>>>1),this.tmp=new Array(this.tmpStorageLength),this.stackLength=this.length<120?5:this.length<1542?10:this.length<119151?19:40,this.runStart=new Array(this.stackLength),this.runLength=new Array(this.stackLength)}return t.prototype.pushRun=function(t,e){this.runStart[this.stackSize]=t,this.runLength[this.stackSize]=e,this.stackSize+=1},t.prototype.mergeRuns=function(){for(;this.stackSize>1;){var t=this.stackSize-2;if(t>=1&&this.runLength[t-1]<=this.runLength[t]+this.runLength[t+1]||t>=2&&this.runLength[t-2]<=this.runLength[t]+this.runLength[t-1])this.runLength[t-1]<this.runLength[t+1]&&t--;else if(this.runLength[t]>this.runLength[t+1])break;this.mergeAt(t)}},t.prototype.forceMergeRuns=function(){for(;this.stackSize>1;){var t=this.stackSize-2;t>0&&this.runLength[t-1]<this.runLength[t+1]&&t--,this.mergeAt(t)}},t.prototype.mergeAt=function(t){var e=this.compare,i=this.array,n=this.runStart[t],o=this.runLength[t],r=this.runStart[t+1],s=this.runLength[t+1];this.runLength[t]=o+s,t===this.stackSize-3&&(this.runStart[t+1]=this.runStart[t+2],this.runLength[t+1]=this.runLength[t+2]),this.stackSize--;var a=f(i[r],i,n,o,0,e);n+=a,0!=(o-=a)&&0!==(s=u(i[n+o-1],i,r,s,s-1,e))&&(o<=s?this.mergeLow(n,o,r,s):this.mergeHigh(n,o,r,s))},t.prototype.mergeLow=function(t,e,i,o){var r=this.compare,s=this.array,a=this.tmp,h=0;for(h=0;h<e;h++)a[h]=s[t+h];var l=0,d=i,c=t;if(s[c++]=s[d++],0!=--o)if(1!==e){for(var p=this.minGallop;;){var v=0,g=0,y=!1;do{if(r(s[d],a[l])<0){if(s[c++]=s[d++],g++,v=0,0==--o){y=!0;break}}else if(s[c++]=a[l++],v++,g=0,1==--e){y=!0;break}}while((v|g)<p);if(y)break;do{if(0!==(v=f(s[d],a,l,e,0,r))){for(h=0;h<v;h++)s[c+h]=a[l+h];if(c+=v,l+=v,(e-=v)<=1){y=!0;break}}if(s[c++]=s[d++],0==--o){y=!0;break}if(0!==(g=u(a[l],s,d,o,0,r))){for(h=0;h<g;h++)s[c+h]=s[d+h];if(c+=g,d+=g,0==(o-=g)){y=!0;break}}if(s[c++]=a[l++],1==--e){y=!0;break}p--}while(v>=n||g>=n);if(y)break;p<0&&(p=0),p+=2}if(this.minGallop=p,p<1&&(this.minGallop=1),1===e){for(h=0;h<o;h++)s[c+h]=s[d+h];s[c+o]=a[l]}else{if(0===e)throw new Error(\"mergeLow preconditions were not respected\");for(h=0;h<e;h++)s[c+h]=a[l+h]}}else{for(h=0;h<o;h++)s[c+h]=s[d+h];s[c+o]=a[l]}else for(h=0;h<e;h++)s[c+h]=a[l+h]},t.prototype.mergeHigh=function(t,e,i,o){var r=this.compare,s=this.array,a=this.tmp,h=0;for(h=0;h<o;h++)a[h]=s[i+h];var l=t+e-1,d=o-1,c=i+o-1,p=0,v=0;if(s[c--]=s[l--],0!=--e)if(1!==o){for(var g=this.minGallop;;){var y=0,m=0,b=!1;do{if(r(a[d],s[l])<0){if(s[c--]=s[l--],y++,m=0,0==--e){b=!0;break}}else if(s[c--]=a[d--],m++,y=0,1==--o){b=!0;break}}while((y|m)<g);if(b)break;do{if(0!=(y=e-f(a[d],s,t,e,e-1,r))){for(e-=y,v=1+(c-=y),p=1+(l-=y),h=y-1;h>=0;h--)s[v+h]=s[p+h];if(0===e){b=!0;break}}if(s[c--]=a[d--],1==--o){b=!0;break}if(0!=(m=o-u(s[l],a,0,o,o-1,r))){for(o-=m,v=1+(c-=m),p=1+(d-=m),h=0;h<m;h++)s[v+h]=a[p+h];if(o<=1){b=!0;break}}if(s[c--]=s[l--],0==--e){b=!0;break}g--}while(y>=n||m>=n);if(b)break;g<0&&(g=0),g+=2}if(this.minGallop=g,g<1&&(this.minGallop=1),1===o){for(v=1+(c-=e),p=1+(l-=e),h=e-1;h>=0;h--)s[v+h]=s[p+h];s[c]=a[d]}else{if(0===o)throw new Error(\"mergeHigh preconditions were not respected\");for(p=c-(o-1),h=0;h<o;h++)s[p+h]=a[h]}}else{for(v=1+(c-=e),p=1+(l-=e),h=e-1;h>=0;h--)s[v+h]=s[p+h];s[c]=a[d]}else for(p=c-(o-1),h=0;h<o;h++)s[p+h]=a[h]},t}();function v(t,e,n,o){if(!Array.isArray(t))throw new TypeError(\"Can only sort arrays\");e?\"function\"!=typeof e&&(o=n,n=e,e=a):e=a,n||(n=0),o||(o=t.length);var r=o-n;if(!(r<2)){var s=0;if(r<i)c(t,n,o,n+(s=l(t,n,o,e)),e);else{var d=new p(t,e),u=h(r);do{if((s=l(t,n,o,e))<u){var f=r;f>u&&(f=u),c(t,n,n+f,n+s,e),s=f}d.pushRun(n,s),d.mergeRuns(),r-=s,n+=s}while(0!==r);d.forceMergeRuns()}}}}(e)}));i(rv);var sv=rv,av=sv.sort;function hv(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var lv=function(){function t(){Nn(this,t)}return Fn(t,[{key:\"abstract\",value:function(){throw new Error(\"Can't instantiate abstract class!\")}},{key:\"fake_use\",value:function(){}},{key:\"curveType\",value:function(){return this.abstract()}},{key:\"getPosition\",value:function(t){return this.fake_use(t),this.abstract()}},{key:\"setPosition\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;this.fake_use(t,e,i),this.abstract()}},{key:\"getTreeSize\",value:function(t){return this.fake_use(t),this.abstract()}},{key:\"sort\",value:function(t){this.fake_use(t),this.abstract()}},{key:\"fix\",value:function(t,e){this.fake_use(t,e),this.abstract()}},{key:\"shift\",value:function(t,e){this.fake_use(t,e),this.abstract()}}]),t}(),dv=function(t){Ad(i,t);var e=hv(i);function i(t){var n;return Nn(this,i),(n=e.call(this)).layout=t,n}return Fn(i,[{key:\"curveType\",value:function(){return\"horizontal\"}},{key:\"getPosition\",value:function(t){return t.x}},{key:\"setPosition\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;void 0!==i&&this.layout.hierarchical.addToOrdering(t,i),t.x=e}},{key:\"getTreeSize\",value:function(t){var e=this.layout.hierarchical.getTreeSize(this.layout.body.nodes,t);return{min:e.min_x,max:e.max_x}}},{key:\"sort\",value:function(t){av(t,(function(t,e){return t.x-e.x}))}},{key:\"fix\",value:function(t,e){t.y=this.layout.options.hierarchical.levelSeparation*e,t.options.fixed.y=!0}},{key:\"shift\",value:function(t,e){this.layout.body.nodes[t].x+=e}}]),i}(lv),cv=function(t){Ad(i,t);var e=hv(i);function i(t){var n;return Nn(this,i),(n=e.call(this)).layout=t,n}return Fn(i,[{key:\"curveType\",value:function(){return\"vertical\"}},{key:\"getPosition\",value:function(t){return t.y}},{key:\"setPosition\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;void 0!==i&&this.layout.hierarchical.addToOrdering(t,i),t.y=e}},{key:\"getTreeSize\",value:function(t){var e=this.layout.hierarchical.getTreeSize(this.layout.body.nodes,t);return{min:e.min_y,max:e.max_y}}},{key:\"sort\",value:function(t){av(t,(function(t,e){return t.y-e.y}))}},{key:\"fix\",value:function(t,e){t.x=this.layout.options.hierarchical.levelSeparation*e,t.options.fixed.x=!0}},{key:\"shift\",value:function(t,e){this.layout.body.nodes[t].y+=e}}]),i}(lv),uv=Gi.every,fv=Ao(\"every\");gt({target:\"Array\",proto:!0,forced:!fv},{every:function(t){return uv(this,t,arguments.length>1?arguments[1]:void 0)}});var pv=Ht(\"Array\").every,vv=Array.prototype,gv=function(t){var e=t.every;return t===vv||t instanceof Array&&e===vv.every?pv:e};function yv(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return mv(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return mv(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function mv(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}function bv(t,e){var i=new ec;return Wo(t).call(t,(function(t){var e;Wo(e=t.edges).call(e,(function(t){t.connected&&i.add(t)}))})),Wo(i).call(i,(function(t){var i=t.from.id,n=t.to.id;null==e[i]&&(e[i]=0),(null==e[n]||e[i]>=e[n])&&(e[n]=e[i]+1)})),e}function wv(t,e,i,n){var o,r,s=Gr(null),a=Kd(o=wo(Dc(n).call(n))).call(o,(function(t,e){return t+1+e.edges.length}),0),h=i+\"Id\",l=\"to\"===i?1:-1,d=yv(n);try{var c=function(){var o=uo(r.value,2),d=o[0],c=o[1];if(!n.has(d)||!t(c))return\"continue\";s[d]=0;for(var u=[c],f=0,p=void 0,v=function(){var t,o;if(!n.has(d))return\"continue\";var r=s[p.id]+l;if(Wo(t=mr(o=p.edges).call(o,(function(t){return t.connected&&t.to!==t.from&&t[i]!==p&&n.has(t.toId)&&n.has(t.fromId)}))).call(t,(function(t){var n=t[h],o=s[n];(null==o||e(r,o))&&(s[n]=r,u.push(t[i]))})),f>a)return{v:{v:bv(n,s)}};++f};p=u.pop();){var g=v();if(\"continue\"!==g&&\"object\"===go(g))return g.v}};for(d.s();!(r=d.n()).done;){var u=c();if(\"continue\"!==u&&\"object\"===go(u))return u.v}}catch(t){d.e(t)}finally{d.f()}return s}var kv=function(){function t(){Nn(this,t),this.childrenReference={},this.parentReference={},this.trees={},this.distributionOrdering={},this.levels={},this.distributionIndex={},this.isTree=!1,this.treeIndex=-1}return Fn(t,[{key:\"addRelation\",value:function(t,e){void 0===this.childrenReference[t]&&(this.childrenReference[t]=[]),this.childrenReference[t].push(e),void 0===this.parentReference[e]&&(this.parentReference[e]=[]),this.parentReference[e].push(t)}},{key:\"checkIfTree\",value:function(){for(var t in this.parentReference)if(this.parentReference[t].length>1)return void(this.isTree=!1);this.isTree=!0}},{key:\"numTrees\",value:function(){return this.treeIndex+1}},{key:\"setTreeIndex\",value:function(t,e){void 0!==e&&void 0===this.trees[t.id]&&(this.trees[t.id]=e,this.treeIndex=Math.max(e,this.treeIndex))}},{key:\"ensureLevel\",value:function(t){void 0===this.levels[t]&&(this.levels[t]=0)}},{key:\"getMaxLevel\",value:function(t){var e=this,i={};return function t(n){if(void 0!==i[n])return i[n];var o=e.levels[n];if(e.childrenReference[n]){var r=e.childrenReference[n];if(r.length>0)for(var s=0;s<r.length;s++)o=Math.max(o,t(r[s]))}return i[n]=o,o}(t)}},{key:\"levelDownstream\",value:function(t,e){void 0===this.levels[e.id]&&(void 0===this.levels[t.id]&&(this.levels[t.id]=0),this.levels[e.id]=this.levels[t.id]+1)}},{key:\"setMinLevelToZero\",value:function(t){var e=1e9;for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&void 0!==this.levels[i]&&(e=Math.min(this.levels[i],e));for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&void 0!==this.levels[n]&&(this.levels[n]-=e)}},{key:\"getTreeSize\",value:function(t,e){var i=1e9,n=-1e9,o=1e9,r=-1e9;for(var s in this.trees)if(Object.prototype.hasOwnProperty.call(this.trees,s)&&this.trees[s]===e){var a=t[s];i=Math.min(a.x,i),n=Math.max(a.x,n),o=Math.min(a.y,o),r=Math.max(a.y,r)}return{min_x:i,max_x:n,min_y:o,max_y:r}}},{key:\"hasSameParent\",value:function(t,e){var i=this.parentReference[t.id],n=this.parentReference[e.id];if(void 0===i||void 0===n)return!1;for(var o=0;o<i.length;o++)for(var r=0;r<n.length;r++)if(i[o]==n[r])return!0;return!1}},{key:\"inSameSubNetwork\",value:function(t,e){return this.trees[t.id]===this.trees[e.id]}},{key:\"getLevels\",value:function(){return zo(this.distributionOrdering)}},{key:\"addToOrdering\",value:function(t,e){void 0===this.distributionOrdering[e]&&(this.distributionOrdering[e]=[]);var i=!1,n=this.distributionOrdering[e];for(var o in n)if(n[o]===t){i=!0;break}i||(this.distributionOrdering[e].push(t),this.distributionIndex[t.id]=this.distributionOrdering[e].length-1)}}]),t}(),_v=function(){function t(e){Nn(this,t),this.body=e,this._resetRNG(Math.random()+\":\"+No()),this.setPhysics=!1,this.options={},this.optionsBackup={physics:{}},this.defaultOptions={randomSeed:void 0,improvedLayout:!0,clusterThreshold:150,hierarchical:{enabled:!1,levelSeparation:150,nodeSpacing:100,treeSpacing:200,blockShifting:!0,edgeMinimization:!0,parentCentralization:!0,direction:\"UD\",sortMethod:\"hubsize\"}},At(this.options,this.defaultOptions),this.bindEventListeners()}return Fn(t,[{key:\"bindEventListeners\",value:function(){var t=this;this.body.emitter.on(\"_dataChanged\",(function(){t.setupHierarchicalLayout()})),this.body.emitter.on(\"_dataLoaded\",(function(){t.layoutNetwork()})),this.body.emitter.on(\"_resetHierarchicalLayout\",(function(){t.setupHierarchicalLayout()})),this.body.emitter.on(\"_adjustEdgesForHierarchicalLayout\",(function(){if(!0===t.options.hierarchical.enabled){var e=t.direction.curveType();t.body.emitter.emit(\"_forceDisableDynamicCurves\",e,!1)}}))}},{key:\"setOptions\",value:function(t,e){if(void 0!==t){var i=this.options.hierarchical,n=i.enabled;if(Eh([\"randomSeed\",\"improvedLayout\",\"clusterThreshold\"],this.options,t),$h(this.options,t,\"hierarchical\"),void 0!==t.randomSeed&&this._resetRNG(t.randomSeed),!0===i.enabled)return!0===n&&this.body.emitter.emit(\"refresh\",!0),\"RL\"===i.direction||\"DU\"===i.direction?i.levelSeparation>0&&(i.levelSeparation*=-1):i.levelSeparation<0&&(i.levelSeparation*=-1),this.setDirectionStrategy(),this.body.emitter.emit(\"_resetHierarchicalLayout\"),this.adaptAllOptionsForHierarchicalLayout(e);if(!0===n)return this.body.emitter.emit(\"refresh\"),Ch(e,this.optionsBackup)}return e}},{key:\"_resetRNG\",value:function(t){this.initialRandomSeed=t,this._rng=ah(this.initialRandomSeed)}},{key:\"adaptAllOptionsForHierarchicalLayout\",value:function(t){if(!0===this.options.hierarchical.enabled){var e=this.optionsBackup.physics;void 0===t.physics||!0===t.physics?(t.physics={enabled:void 0===e.enabled||e.enabled,solver:\"hierarchicalRepulsion\"},e.enabled=void 0===e.enabled||e.enabled,e.solver=e.solver||\"barnesHut\"):\"object\"===go(t.physics)?(e.enabled=void 0===t.physics.enabled||t.physics.enabled,e.solver=t.physics.solver||\"barnesHut\",t.physics.solver=\"hierarchicalRepulsion\"):!1!==t.physics&&(e.solver=\"barnesHut\",t.physics={solver:\"hierarchicalRepulsion\"});var i=this.direction.curveType();if(void 0===t.edges)this.optionsBackup.edges={smooth:{enabled:!0,type:\"dynamic\"}},t.edges={smooth:!1};else if(void 0===t.edges.smooth)this.optionsBackup.edges={smooth:{enabled:!0,type:\"dynamic\"}},t.edges.smooth=!1;else if(\"boolean\"==typeof t.edges.smooth)this.optionsBackup.edges={smooth:t.edges.smooth},t.edges.smooth={enabled:t.edges.smooth,type:i};else{var n=t.edges.smooth;void 0!==n.type&&\"dynamic\"!==n.type&&(i=n.type),this.optionsBackup.edges={smooth:{enabled:void 0===n.enabled||n.enabled,type:void 0===n.type?\"dynamic\":n.type,roundness:void 0===n.roundness?.5:n.roundness,forceDirection:void 0!==n.forceDirection&&n.forceDirection}},t.edges.smooth={enabled:void 0===n.enabled||n.enabled,type:i,roundness:void 0===n.roundness?.5:n.roundness,forceDirection:void 0!==n.forceDirection&&n.forceDirection}}this.body.emitter.emit(\"_forceDisableDynamicCurves\",i)}return t}},{key:\"positionInitially\",value:function(t){if(!0!==this.options.hierarchical.enabled){this._resetRNG(this.initialRandomSeed);for(var e=t.length+50,i=0;i<t.length;i++){var n=t[i],o=2*Math.PI*this._rng();void 0===n.x&&(n.x=e*Math.cos(o)),void 0===n.y&&(n.y=e*Math.sin(o))}}}},{key:\"layoutNetwork\",value:function(){if(!0!==this.options.hierarchical.enabled&&!0===this.options.improvedLayout){for(var t=this.body.nodeIndices,e=0,i=0;i<t.length;i++){!0===this.body.nodes[t[i]].predefinedPosition&&(e+=1)}if(e<.5*t.length){var n=0,o=this.options.clusterThreshold,r={clusterNodeProperties:{shape:\"ellipse\",label:\"\",group:\"\",font:{multi:!1}},clusterEdgeProperties:{label:\"\",font:{multi:!1},smooth:{enabled:!1}}};if(t.length>o){for(var s=t.length;t.length>o&&n<=10;){n+=1;var a=t.length;if(n%3==0?this.body.modules.clustering.clusterBridges(r):this.body.modules.clustering.clusterOutliers(r),a==t.length&&n%3!=0)return this._declusterAll(),this.body.emitter.emit(\"_layoutFailed\"),void console.info(\"This network could not be positioned by this version of the improved layout algorithm. Please disable improvedLayout for better performance.\")}this.body.modules.kamadaKawai.setOptions({springLength:Math.max(150,2*s)})}n>10&&console.info(\"The clustering didn't succeed within the amount of interations allowed, progressing with partial result.\"),this.body.modules.kamadaKawai.solve(t,this.body.edgeIndices,!0),this._shiftToCenter();for(var h=0;h<t.length;h++){var l=this.body.nodes[t[h]];!1===l.predefinedPosition&&(l.x+=70*(.5-this._rng()),l.y+=70*(.5-this._rng()))}this._declusterAll(),this.body.emitter.emit(\"_repositionBezierNodes\")}}}},{key:\"_shiftToCenter\",value:function(){for(var t=pp.getRangeCore(this.body.nodes,this.body.nodeIndices),e=pp.findCenter(t),i=0;i<this.body.nodeIndices.length;i++){var n=this.body.nodes[this.body.nodeIndices[i]];n.x-=e.x,n.y-=e.y}}},{key:\"_declusterAll\",value:function(){for(var t=!0;!0===t;){t=!1;for(var e=0;e<this.body.nodeIndices.length;e++)!0===this.body.nodes[this.body.nodeIndices[e]].isCluster&&(t=!0,this.body.modules.clustering.openCluster(this.body.nodeIndices[e],{},!1));!0===t&&this.body.emitter.emit(\"_dataChanged\")}}},{key:\"getSeed\",value:function(){return this.initialRandomSeed}},{key:\"setupHierarchicalLayout\",value:function(){if(!0===this.options.hierarchical.enabled&&this.body.nodeIndices.length>0){var t,e,i=!1,n=!1;for(e in this.lastNodeOnLevel={},this.hierarchical=new kv,this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,e)&&(void 0!==(t=this.body.nodes[e]).options.level?(i=!0,this.hierarchical.levels[e]=t.options.level):n=!0);if(!0===n&&!0===i)throw new Error(\"To use the hierarchical layout, nodes require either no predefined levels or levels have to be defined for all nodes.\");if(!0===n){var o=this.options.hierarchical.sortMethod;\"hubsize\"===o?this._determineLevelsByHubsize():\"directed\"===o?this._determineLevelsDirected():\"custom\"===o&&this._determineLevelsCustomCallback()}for(var r in this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,r)&&this.hierarchical.ensureLevel(r);var s=this._getDistribution();this._generateMap(),this._placeNodesByHierarchy(s),this._condenseHierarchy(),this._shiftToCenter()}}},{key:\"_condenseHierarchy\",value:function(){var t=this,e=!1,i={},n=function(e,i){var n=t.hierarchical.trees;for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&n[o]===e&&t.direction.shift(o,i)},o=function(){for(var e=[],i=0;i<t.hierarchical.numTrees();i++)e.push(t.direction.getTreeSize(i));return e},r=function e(i,n){if(!n[i.id]&&(n[i.id]=!0,t.hierarchical.childrenReference[i.id])){var o=t.hierarchical.childrenReference[i.id];if(o.length>0)for(var r=0;r<o.length;r++)e(t.body.nodes[o[r]],n)}},s=function(e){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1e9,n=1e9,o=1e9,r=1e9,s=-1e9;for(var a in e)if(Object.prototype.hasOwnProperty.call(e,a)){var h=t.body.nodes[a],l=t.hierarchical.levels[h.id],d=t.direction.getPosition(h),c=t._getSpaceAroundNode(h,e),u=uo(c,2),f=u[0],p=u[1];n=Math.min(f,n),o=Math.min(p,o),l<=i&&(r=Math.min(d,r),s=Math.max(d,s))}return[r,s,n,o]},a=function(e,i){var n=t.hierarchical.getMaxLevel(e.id),o=t.hierarchical.getMaxLevel(i.id);return Math.min(n,o)},h=function(e,i,n){for(var o=t.hierarchical,r=0;r<i.length;r++){var s=i[r],a=o.distributionOrdering[s];if(a.length>1)for(var h=0;h<a.length-1;h++){var l=a[h],d=a[h+1];o.hasSameParent(l,d)&&o.inSameSubNetwork(l,d)&&e(l,d,n)}}},l=function(i,n){var o=arguments.length>2&&void 0!==arguments[2]&&arguments[2],h=t.direction.getPosition(i),l=t.direction.getPosition(n),d=Math.abs(l-h),c=t.options.hierarchical.nodeSpacing;if(d>c){var u={},f={};r(i,u),r(n,f);var p=a(i,n),v=s(u,p),g=s(f,p),y=v[1],m=g[0],b=g[2],w=Math.abs(y-m);if(w>c){var k=y-m+c;k<-b+c&&(k=-b+c),k<0&&(t._shiftBlock(n.id,k),e=!0,!0===o&&t._centerParent(n))}}},d=function(n,o){for(var a=o.id,h=o.edges,l=t.hierarchical.levels[o.id],d=t.options.hierarchical.levelSeparation*t.options.hierarchical.levelSeparation,c={},u=[],f=0;f<h.length;f++){var p=h[f];if(p.toId!=p.fromId){var v=p.toId==a?p.from:p.to;c[h[f].id]=v,t.hierarchical.levels[v.id]<l&&u.push(p)}}var g=function(e,i){for(var n=0,o=0;o<i.length;o++)if(void 0!==c[i[o].id]){var r=t.direction.getPosition(c[i[o].id])-e;n+=r/Math.sqrt(r*r+d)}return n},y=function(e,i){for(var n=0,o=0;o<i.length;o++)if(void 0!==c[i[o].id]){var r=t.direction.getPosition(c[i[o].id])-e;n-=d*Math.pow(r*r+d,-1.5)}return n},m=function(e,i){for(var n=t.direction.getPosition(o),r={},s=0;s<e;s++){var a=g(n,i),h=y(n,i);if(void 0!==r[n-=Math.max(-40,Math.min(40,Math.round(a/h)))])break;r[n]=s}return n},b=m(n,u);!function(n){var a=t.direction.getPosition(o);if(void 0===i[o.id]){var h={};r(o,h),i[o.id]=h}var l=s(i[o.id]),d=l[2],c=l[3],u=n-a,f=0;u>0?f=Math.min(u,c-t.options.hierarchical.nodeSpacing):u<0&&(f=-Math.min(-u,d-t.options.hierarchical.nodeSpacing)),0!=f&&(t._shiftBlock(o.id,f),e=!0)}(b),function(i){var n=t.direction.getPosition(o),r=t._getSpaceAroundNode(o),s=uo(r,2),a=s[0],h=s[1],l=i-n,d=n;l>0?d=Math.min(n+(h-t.options.hierarchical.nodeSpacing),i):l<0&&(d=Math.max(n-(a-t.options.hierarchical.nodeSpacing),i)),d!==n&&(t.direction.setPosition(o,d),e=!0)}(b=m(n,h))};!0===this.options.hierarchical.blockShifting&&(function(i){var n=t.hierarchical.getLevels();n=Xo(n).call(n);for(var o=0;o<i&&(e=!1,h(l,n,!0),!0===e);o++);}(5),function(){for(var e in t.body.nodes)Object.prototype.hasOwnProperty.call(t.body.nodes,e)&&t._centerParent(t.body.nodes[e])}()),!0===this.options.hierarchical.edgeMinimization&&function(i){var n=t.hierarchical.getLevels();n=Xo(n).call(n);for(var o=0;o<i;o++){e=!1;for(var r=0;r<n.length;r++)for(var s=n[r],a=t.hierarchical.distributionOrdering[s],h=0;h<a.length;h++)d(1e3,a[h]);if(!0!==e)break}}(20),!0===this.options.hierarchical.parentCentralization&&function(){var e=t.hierarchical.getLevels();e=Xo(e).call(e);for(var i=0;i<e.length;i++)for(var n=e[i],o=t.hierarchical.distributionOrdering[n],r=0;r<o.length;r++)t._centerParent(o[r])}(),function(){for(var e=o(),i=0,r=0;r<e.length-1;r++){i+=e[r].max-e[r+1].min+t.options.hierarchical.treeSpacing,n(r+1,i)}}()}},{key:\"_getSpaceAroundNode\",value:function(t,e){var i=!0;void 0===e&&(i=!1);var n=this.hierarchical.levels[t.id];if(void 0!==n){var o=this.hierarchical.distributionIndex[t.id],r=this.direction.getPosition(t),s=this.hierarchical.distributionOrdering[n],a=1e9,h=1e9;if(0!==o){var l=s[o-1];if(!0===i&&void 0===e[l.id]||!1===i)a=r-this.direction.getPosition(l)}if(o!=s.length-1){var d=s[o+1];if(!0===i&&void 0===e[d.id]||!1===i){var c=this.direction.getPosition(d);h=Math.min(h,c-r)}}return[a,h]}return[0,0]}},{key:\"_centerParent\",value:function(t){if(this.hierarchical.parentReference[t.id])for(var e=this.hierarchical.parentReference[t.id],i=0;i<e.length;i++){var n=e[i],o=this.body.nodes[n],r=this.hierarchical.childrenReference[n];if(void 0!==r){var s=this._getCenterPosition(r),a=this.direction.getPosition(o),h=this._getSpaceAroundNode(o),l=uo(h,2),d=l[0],c=l[1],u=a-s;(u<0&&Math.abs(u)<c-this.options.hierarchical.nodeSpacing||u>0&&Math.abs(u)<d-this.options.hierarchical.nodeSpacing)&&this.direction.setPosition(o,s)}}}},{key:\"_placeNodesByHierarchy\",value:function(t){for(var e in this.positionedNodes={},t)if(Object.prototype.hasOwnProperty.call(t,e)){var i,n=zo(t[e]);n=this._indexArrayToNodes(n),xc(i=this.direction).call(i,n);for(var o=0,r=0;r<n.length;r++){var s=n[r];if(void 0===this.positionedNodes[s.id]){var a=this.options.hierarchical.nodeSpacing,h=a*o;o>0&&(h=this.direction.getPosition(n[r-1])+a),this.direction.setPosition(s,h,e),this._validatePositionAndContinue(s,e,h),o++}}}}},{key:\"_placeBranchNodes\",value:function(t,e){var i,n=this.hierarchical.childrenReference[t];if(void 0!==n){for(var o=[],r=0;r<n.length;r++)o.push(this.body.nodes[n[r]]);xc(i=this.direction).call(i,o);for(var s=0;s<o.length;s++){var a=o[s],h=this.hierarchical.levels[a.id];if(!(h>e&&void 0===this.positionedNodes[a.id]))return;var l=this.options.hierarchical.nodeSpacing,d=void 0;d=0===s?this.direction.getPosition(this.body.nodes[t]):this.direction.getPosition(o[s-1])+l,this.direction.setPosition(a,d,h),this._validatePositionAndContinue(a,h,d)}var c=this._getCenterPosition(o);this.direction.setPosition(this.body.nodes[t],c,e)}}},{key:\"_validatePositionAndContinue\",value:function(t,e,i){if(this.hierarchical.isTree){if(void 0!==this.lastNodeOnLevel[e]){var n=this.direction.getPosition(this.body.nodes[this.lastNodeOnLevel[e]]);if(i-n<this.options.hierarchical.nodeSpacing){var o=n+this.options.hierarchical.nodeSpacing-i,r=this._findCommonParent(this.lastNodeOnLevel[e],t.id);this._shiftBlock(r.withChild,o)}}this.lastNodeOnLevel[e]=t.id,this.positionedNodes[t.id]=!0,this._placeBranchNodes(t.id,e)}}},{key:\"_indexArrayToNodes\",value:function(t){for(var e=[],i=0;i<t.length;i++)e.push(this.body.nodes[t[i]]);return e}},{key:\"_getDistribution\",value:function(){var t,e,i={};for(t in this.body.nodes)if(Object.prototype.hasOwnProperty.call(this.body.nodes,t)){e=this.body.nodes[t];var n=void 0===this.hierarchical.levels[t]?0:this.hierarchical.levels[t];this.direction.fix(e,n),void 0===i[n]&&(i[n]={}),i[n][t]=e}return i}},{key:\"_getActiveEdges\",value:function(t){var e=this,i=[];return Dh(t.edges,(function(t){var n;-1!==Hr(n=e.body.edgeIndices).call(n,t.id)&&i.push(t)})),i}},{key:\"_getHubSizes\",value:function(){var t=this,e={};Dh(this.body.nodeIndices,(function(i){var n=t.body.nodes[i],o=t._getActiveEdges(n).length;e[o]=!0}));var i=[];return Dh(e,(function(t){i.push(Number(t))})),xc(sv).call(sv,i,(function(t,e){return e-t})),i}},{key:\"_determineLevelsByHubsize\",value:function(){for(var t=this,e=function(e,i){t.hierarchical.levelDownstream(e,i)},i=this._getHubSizes(),n=function(n){var o=i[n];if(0===o)return\"break\";Dh(t.body.nodeIndices,(function(i){var n=t.body.nodes[i];o===t._getActiveEdges(n).length&&t._crawlNetwork(e,i)}))},o=0;o<i.length;++o){if(\"break\"===n(o))break}}},{key:\"_determineLevelsCustomCallback\",value:function(){var t=this;this._crawlNetwork((function(e,i,n){var o=t.hierarchical.levels[e.id];void 0===o&&(o=t.hierarchical.levels[e.id]=1e5);var r=(pp.cloneOptions(e,\"node\"),pp.cloneOptions(i,\"node\"),void pp.cloneOptions(n,\"edge\"));t.hierarchical.levels[i.id]=o+r})),this.hierarchical.setMinLevelToZero(this.body.nodes)}},{key:\"_determineLevelsDirected\",value:function(){var t,e=this,i=Kd(t=this.body.nodeIndices).call(t,(function(t,i){return t.set(i,e.body.nodes[i]),t}),new vd);\"roots\"===this.options.hierarchical.shakeTowards?this.hierarchical.levels=function(t){return wv((function(e){var i,n;return gv(i=mr(n=e.edges).call(n,(function(e){return t.has(e.toId)}))).call(i,(function(t){return t.from===e}))}),(function(t,e){return e<t}),\"to\",t)}(i):this.hierarchical.levels=function(t){return wv((function(e){var i,n;return gv(i=mr(n=e.edges).call(n,(function(e){return t.has(e.toId)}))).call(i,(function(t){return t.to===e}))}),(function(t,e){return e>t}),\"from\",t)}(i),this.hierarchical.setMinLevelToZero(this.body.nodes)}},{key:\"_generateMap\",value:function(){var t=this;this._crawlNetwork((function(e,i){t.hierarchical.levels[i.id]>t.hierarchical.levels[e.id]&&t.hierarchical.addRelation(e.id,i.id)})),this.hierarchical.checkIfTree()}},{key:\"_crawlNetwork\",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:function(){},i=arguments.length>1?arguments[1]:void 0,n={},o=function i(o,r){if(void 0===n[o.id]){var s;t.hierarchical.setTreeIndex(o,r),n[o.id]=!0;for(var a=t._getActiveEdges(o),h=0;h<a.length;h++){var l=a[h];!0===l.connected&&(s=l.toId==o.id?l.from:l.to,o.id!=s.id&&(e(o,s,l),i(s,r)))}}};if(void 0===i)for(var r=0,s=0;s<this.body.nodeIndices.length;s++){var a=this.body.nodeIndices[s];if(void 0===n[a]){var h=this.body.nodes[a];o(h,r),r+=1}}else{var l=this.body.nodes[i];if(void 0===l)return void console.error(\"Node not found:\",i);o(l)}}},{key:\"_shiftBlock\",value:function(t,e){var i=this,n={};!function t(o){if(!n[o]){n[o]=!0,i.direction.shift(o,e);var r=i.hierarchical.childrenReference[o];if(void 0!==r)for(var s=0;s<r.length;s++)t(r[s])}}(t)}},{key:\"_findCommonParent\",value:function(t,e){var i=this,n={};return function t(e,n){var o=i.hierarchical.parentReference[n];if(void 0!==o)for(var r=0;r<o.length;r++){var s=o[r];e[s]=!0,t(e,s)}}(n,t),function t(e,n){var o=i.hierarchical.parentReference[n];if(void 0!==o)for(var r=0;r<o.length;r++){var s=o[r];if(void 0!==e[s])return{foundParent:s,withChild:n};var a=t(e,s);if(null!==a.foundParent)return a}return{foundParent:null,withChild:n}}(n,e)}},{key:\"setDirectionStrategy\",value:function(){var t=\"UD\"===this.options.hierarchical.direction||\"DU\"===this.options.hierarchical.direction;this.direction=t?new dv(this):new cv(this)}},{key:\"_getCenterPosition\",value:function(t){for(var e=1e9,i=-1e9,n=0;n<t.length;n++){var o=void 0;if(void 0!==t[n].id)o=t[n];else{var r=t[n];o=this.body.nodes[r]}var s=this.direction.getPosition(o);e=Math.min(e,s),i=Math.max(i,s)}return.5*(e+i)}}]),t}();function xv(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return Ev(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Ev(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function Ev(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}var Ov=function(){function t(e,i,n,o){var r,s,a=this;Nn(this,t),this.body=e,this.canvas=i,this.selectionHandler=n,this.interactionHandler=o,this.editMode=!1,this.manipulationDiv=void 0,this.editModeDiv=void 0,this.closeDiv=void 0,this._domEventListenerCleanupQueue=[],this.temporaryUIFunctions={},this.temporaryEventFunctions=[],this.touchTime=0,this.temporaryIds={nodes:[],edges:[]},this.guiEnabled=!1,this.inMode=!1,this.selectedControlNode=void 0,this.options={},this.defaultOptions={enabled:!1,initiallyActive:!1,addNode:!0,addEdge:!0,editNode:void 0,editEdge:!0,deleteNode:!0,deleteEdge:!0,controlNodeStyle:{shape:\"dot\",size:6,color:{background:\"#ff0000\",border:\"#3c3c3c\",highlight:{background:\"#07f968\",border:\"#3c3c3c\"}},borderWidth:2,borderWidthSelected:2}},At(this.options,this.defaultOptions),this.body.emitter.on(\"destroy\",(function(){a._clean()})),this.body.emitter.on(\"_dataChanged\",Vt(r=this._restore).call(r,this)),this.body.emitter.on(\"_resetData\",Vt(s=this._restore).call(s,this))}return Fn(t,[{key:\"_restore\",value:function(){!1!==this.inMode&&(!0===this.options.initiallyActive?this.enableEditMode():this.disableEditMode())}},{key:\"setOptions\",value:function(t,e,i){void 0!==e&&(void 0!==e.locale?this.options.locale=e.locale:this.options.locale=i.locale,void 0!==e.locales?this.options.locales=e.locales:this.options.locales=i.locales),void 0!==t&&(\"boolean\"==typeof t?this.options.enabled=t:(this.options.enabled=!0,Ch(this.options,t)),!0===this.options.initiallyActive&&(this.editMode=!0),this._setup())}},{key:\"toggleEditMode\",value:function(){!0===this.editMode?this.disableEditMode():this.enableEditMode()}},{key:\"enableEditMode\",value:function(){this.editMode=!0,this._clean(),!0===this.guiEnabled&&(this.manipulationDiv.style.display=\"block\",this.closeDiv.style.display=\"block\",this.editModeDiv.style.display=\"none\",this.showManipulatorToolbar())}},{key:\"disableEditMode\",value:function(){this.editMode=!1,this._clean(),!0===this.guiEnabled&&(this.manipulationDiv.style.display=\"none\",this.closeDiv.style.display=\"none\",this.editModeDiv.style.display=\"block\",this._createEditButton())}},{key:\"showManipulatorToolbar\",value:function(){if(this._clean(),this.manipulationDOM={},!0===this.guiEnabled){var t,e;this.editMode=!0,this.manipulationDiv.style.display=\"block\",this.closeDiv.style.display=\"block\";var i=this.selectionHandler.getSelectedNodeCount(),n=this.selectionHandler.getSelectedEdgeCount(),o=i+n,r=this.options.locales[this.options.locale],s=!1;!1!==this.options.addNode&&(this._createAddNodeButton(r),s=!0),!1!==this.options.addEdge&&(!0===s?this._createSeperator(1):s=!0,this._createAddEdgeButton(r)),1===i&&\"function\"==typeof this.options.editNode?(!0===s?this._createSeperator(2):s=!0,this._createEditNodeButton(r)):1===n&&0===i&&!1!==this.options.editEdge&&(!0===s?this._createSeperator(3):s=!0,this._createEditEdgeButton(r)),0!==o&&(i>0&&!1!==this.options.deleteNode||0===i&&!1!==this.options.deleteEdge)&&(!0===s&&this._createSeperator(4),this._createDeleteButton(r)),this._bindElementEvents(this.closeDiv,Vt(t=this.toggleEditMode).call(t,this)),this._temporaryBindEvent(\"select\",Vt(e=this.showManipulatorToolbar).call(e,this))}this.body.emitter.emit(\"_redraw\")}},{key:\"addNodeMode\",value:function(){var t;if(!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode=\"addNode\",!0===this.guiEnabled){var e,i=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(i),this._createSeperator(),this._createDescription(i.addDescription||this.options.locales.en.addDescription),this._bindElementEvents(this.closeDiv,Vt(e=this.toggleEditMode).call(e,this))}this._temporaryBindEvent(\"click\",Vt(t=this._performAddNode).call(t,this))}},{key:\"editNode\",value:function(){var t=this;!0!==this.editMode&&this.enableEditMode(),this._clean();var e=this.selectionHandler.getSelectedNodes()[0];if(void 0!==e){if(this.inMode=\"editNode\",\"function\"!=typeof this.options.editNode)throw new Error(\"No function has been configured to handle the editing of nodes.\");if(!0!==e.isCluster){var i=Ch({},e.options,!1);if(i.x=e.x,i.y=e.y,2!==this.options.editNode.length)throw new Error(\"The function for edit does not support two arguments (data, callback)\");this.options.editNode(i,(function(e){null!=e&&\"editNode\"===t.inMode&&t.body.data.nodes.getDataSet().update(e),t.showManipulatorToolbar()}))}else alert(this.options.locales[this.options.locale].editClusterError||this.options.locales.en.editClusterError)}else this.showManipulatorToolbar()}},{key:\"addEdgeMode\",value:function(){var t,e,i,n,o;if(!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode=\"addEdge\",!0===this.guiEnabled){var r,s=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(s),this._createSeperator(),this._createDescription(s.edgeDescription||this.options.locales.en.edgeDescription),this._bindElementEvents(this.closeDiv,Vt(r=this.toggleEditMode).call(r,this))}this._temporaryBindUI(\"onTouch\",Vt(t=this._handleConnect).call(t,this)),this._temporaryBindUI(\"onDragEnd\",Vt(e=this._finishConnect).call(e,this)),this._temporaryBindUI(\"onDrag\",Vt(i=this._dragControlNode).call(i,this)),this._temporaryBindUI(\"onRelease\",Vt(n=this._finishConnect).call(n,this)),this._temporaryBindUI(\"onDragStart\",Vt(o=this._dragStartEdge).call(o,this)),this._temporaryBindUI(\"onHold\",(function(){}))}},{key:\"editEdgeMode\",value:function(){if(!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode=\"editEdge\",\"object\"!==go(this.options.editEdge)||\"function\"!=typeof this.options.editEdge.editWithoutDrag||(this.edgeBeingEditedId=this.selectionHandler.getSelectedEdgeIds()[0],void 0===this.edgeBeingEditedId)){if(!0===this.guiEnabled){var t,e=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(e),this._createSeperator(),this._createDescription(e.editEdgeDescription||this.options.locales.en.editEdgeDescription),this._bindElementEvents(this.closeDiv,Vt(t=this.toggleEditMode).call(t,this))}if(this.edgeBeingEditedId=this.selectionHandler.getSelectedEdgeIds()[0],void 0!==this.edgeBeingEditedId){var i,n,o,r,s=this.body.edges[this.edgeBeingEditedId],a=this._getNewTargetNode(s.from.x,s.from.y),h=this._getNewTargetNode(s.to.x,s.to.y);this.temporaryIds.nodes.push(a.id),this.temporaryIds.nodes.push(h.id),this.body.nodes[a.id]=a,this.body.nodeIndices.push(a.id),this.body.nodes[h.id]=h,this.body.nodeIndices.push(h.id),this._temporaryBindUI(\"onTouch\",Vt(i=this._controlNodeTouch).call(i,this)),this._temporaryBindUI(\"onTap\",(function(){})),this._temporaryBindUI(\"onHold\",(function(){})),this._temporaryBindUI(\"onDragStart\",Vt(n=this._controlNodeDragStart).call(n,this)),this._temporaryBindUI(\"onDrag\",Vt(o=this._controlNodeDrag).call(o,this)),this._temporaryBindUI(\"onDragEnd\",Vt(r=this._controlNodeDragEnd).call(r,this)),this._temporaryBindUI(\"onMouseMove\",(function(){})),this._temporaryBindEvent(\"beforeDrawing\",(function(t){var e=s.edgeType.findBorderPositions(t);!1===a.selected&&(a.x=e.from.x,a.y=e.from.y),!1===h.selected&&(h.x=e.to.x,h.y=e.to.y)})),this.body.emitter.emit(\"_redraw\")}else this.showManipulatorToolbar()}else{var l=this.body.edges[this.edgeBeingEditedId];this._performEditEdge(l.from.id,l.to.id)}}},{key:\"deleteSelected\",value:function(){var t=this;!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode=\"delete\";var e=this.selectionHandler.getSelectedNodeIds(),i=this.selectionHandler.getSelectedEdgeIds(),n=void 0;if(e.length>0){for(var o=0;o<e.length;o++)if(!0===this.body.nodes[e[o]].isCluster)return void alert(this.options.locales[this.options.locale].deleteClusterError||this.options.locales.en.deleteClusterError);\"function\"==typeof this.options.deleteNode&&(n=this.options.deleteNode)}else i.length>0&&\"function\"==typeof this.options.deleteEdge&&(n=this.options.deleteEdge);if(\"function\"==typeof n){var r={nodes:e,edges:i};if(2!==n.length)throw new Error(\"The function for delete does not support two arguments (data, callback)\");n(r,(function(e){null!=e&&\"delete\"===t.inMode?(t.body.data.edges.getDataSet().remove(e.edges),t.body.data.nodes.getDataSet().remove(e.nodes),t.body.emitter.emit(\"startSimulation\"),t.showManipulatorToolbar()):(t.body.emitter.emit(\"startSimulation\"),t.showManipulatorToolbar())}))}else this.body.data.edges.getDataSet().remove(i),this.body.data.nodes.getDataSet().remove(e),this.body.emitter.emit(\"startSimulation\"),this.showManipulatorToolbar()}},{key:\"_setup\",value:function(){!0===this.options.enabled?(this.guiEnabled=!0,this._createWrappers(),!1===this.editMode?this._createEditButton():this.showManipulatorToolbar()):(this._removeManipulationDOM(),this.guiEnabled=!1)}},{key:\"_createWrappers\",value:function(){var t,e;(void 0===this.manipulationDiv&&(this.manipulationDiv=document.createElement(\"div\"),this.manipulationDiv.className=\"vis-manipulation\",!0===this.editMode?this.manipulationDiv.style.display=\"block\":this.manipulationDiv.style.display=\"none\",this.canvas.frame.appendChild(this.manipulationDiv)),void 0===this.editModeDiv&&(this.editModeDiv=document.createElement(\"div\"),this.editModeDiv.className=\"vis-edit-mode\",!0===this.editMode?this.editModeDiv.style.display=\"none\":this.editModeDiv.style.display=\"block\",this.canvas.frame.appendChild(this.editModeDiv)),void 0===this.closeDiv)&&(this.closeDiv=document.createElement(\"button\"),this.closeDiv.className=\"vis-close\",this.closeDiv.setAttribute(\"aria-label\",null!==(t=null===(e=this.options.locales[this.options.locale])||void 0===e?void 0:e.close)&&void 0!==t?t:this.options.locales.en.close),this.closeDiv.style.display=this.manipulationDiv.style.display,this.canvas.frame.appendChild(this.closeDiv))}},{key:\"_getNewTargetNode\",value:function(t,e){var i=Ch({},this.options.controlNodeStyle);i.id=\"targetNode\"+Wc(),i.hidden=!1,i.physics=!1,i.x=t,i.y=e;var n=this.body.functions.createNode(i);return n.shape.boundingBox={left:t,right:t,top:e,bottom:e},n}},{key:\"_createEditButton\",value:function(){var t;this._clean(),this.manipulationDOM={},mh(this.editModeDiv);var e=this.options.locales[this.options.locale],i=this._createButton(\"editMode\",\"vis-edit vis-edit-mode\",e.edit||this.options.locales.en.edit);this.editModeDiv.appendChild(i),this._bindElementEvents(i,Vt(t=this.toggleEditMode).call(t,this))}},{key:\"_clean\",value:function(){this.inMode=!1,!0===this.guiEnabled&&(mh(this.editModeDiv),mh(this.manipulationDiv),this._cleanupDOMEventListeners()),this._cleanupTemporaryNodesAndEdges(),this._unbindTemporaryUIs(),this._unbindTemporaryEvents(),this.body.emitter.emit(\"restorePhysics\")}},{key:\"_cleanupDOMEventListeners\",value:function(){var t,e,i=xv(er(t=this._domEventListenerCleanupQueue).call(t,0));try{for(i.s();!(e=i.n()).done;){(0,e.value)()}}catch(t){i.e(t)}finally{i.f()}}},{key:\"_removeManipulationDOM\",value:function(){this._clean(),mh(this.manipulationDiv),mh(this.editModeDiv),mh(this.closeDiv),this.manipulationDiv&&this.canvas.frame.removeChild(this.manipulationDiv),this.editModeDiv&&this.canvas.frame.removeChild(this.editModeDiv),this.closeDiv&&this.canvas.frame.removeChild(this.closeDiv),this.manipulationDiv=void 0,this.editModeDiv=void 0,this.closeDiv=void 0}},{key:\"_createSeperator\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;this.manipulationDOM[\"seperatorLineDiv\"+t]=document.createElement(\"div\"),this.manipulationDOM[\"seperatorLineDiv\"+t].className=\"vis-separator-line\",this.manipulationDiv.appendChild(this.manipulationDOM[\"seperatorLineDiv\"+t])}},{key:\"_createAddNodeButton\",value:function(t){var e,i=this._createButton(\"addNode\",\"vis-add\",t.addNode||this.options.locales.en.addNode);this.manipulationDiv.appendChild(i),this._bindElementEvents(i,Vt(e=this.addNodeMode).call(e,this))}},{key:\"_createAddEdgeButton\",value:function(t){var e,i=this._createButton(\"addEdge\",\"vis-connect\",t.addEdge||this.options.locales.en.addEdge);this.manipulationDiv.appendChild(i),this._bindElementEvents(i,Vt(e=this.addEdgeMode).call(e,this))}},{key:\"_createEditNodeButton\",value:function(t){var e,i=this._createButton(\"editNode\",\"vis-edit\",t.editNode||this.options.locales.en.editNode);this.manipulationDiv.appendChild(i),this._bindElementEvents(i,Vt(e=this.editNode).call(e,this))}},{key:\"_createEditEdgeButton\",value:function(t){var e,i=this._createButton(\"editEdge\",\"vis-edit\",t.editEdge||this.options.locales.en.editEdge);this.manipulationDiv.appendChild(i),this._bindElementEvents(i,Vt(e=this.editEdgeMode).call(e,this))}},{key:\"_createDeleteButton\",value:function(t){var e,i;i=this.options.rtl?\"vis-delete-rtl\":\"vis-delete\";var n=this._createButton(\"delete\",i,t.del||this.options.locales.en.del);this.manipulationDiv.appendChild(n),this._bindElementEvents(n,Vt(e=this.deleteSelected).call(e,this))}},{key:\"_createBackButton\",value:function(t){var e,i=this._createButton(\"back\",\"vis-back\",t.back||this.options.locales.en.back);this.manipulationDiv.appendChild(i),this._bindElementEvents(i,Vt(e=this.showManipulatorToolbar).call(e,this))}},{key:\"_createButton\",value:function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:\"vis-label\";return this.manipulationDOM[t+\"Div\"]=document.createElement(\"button\"),this.manipulationDOM[t+\"Div\"].className=\"vis-button \"+e,this.manipulationDOM[t+\"Label\"]=document.createElement(\"div\"),this.manipulationDOM[t+\"Label\"].className=n,this.manipulationDOM[t+\"Label\"].innerText=i,this.manipulationDOM[t+\"Div\"].appendChild(this.manipulationDOM[t+\"Label\"]),this.manipulationDOM[t+\"Div\"]}},{key:\"_createDescription\",value:function(t){this.manipulationDOM.descriptionLabel=document.createElement(\"div\"),this.manipulationDOM.descriptionLabel.className=\"vis-none\",this.manipulationDOM.descriptionLabel.innerText=t,this.manipulationDiv.appendChild(this.manipulationDOM.descriptionLabel)}},{key:\"_temporaryBindEvent\",value:function(t,e){this.temporaryEventFunctions.push({event:t,boundFunction:e}),this.body.emitter.on(t,e)}},{key:\"_temporaryBindUI\",value:function(t,e){if(void 0===this.body.eventListeners[t])throw new Error(\"This UI function does not exist. Typo? You tried: \"+t+\" possible are: \"+es(zo(this.body.eventListeners)));this.temporaryUIFunctions[t]=this.body.eventListeners[t],this.body.eventListeners[t]=e}},{key:\"_unbindTemporaryUIs\",value:function(){for(var t in this.temporaryUIFunctions)Object.prototype.hasOwnProperty.call(this.temporaryUIFunctions,t)&&(this.body.eventListeners[t]=this.temporaryUIFunctions[t],delete this.temporaryUIFunctions[t]);this.temporaryUIFunctions={}}},{key:\"_unbindTemporaryEvents\",value:function(){for(var t=0;t<this.temporaryEventFunctions.length;t++){var e=this.temporaryEventFunctions[t].event,i=this.temporaryEventFunctions[t].boundFunction;this.body.emitter.off(e,i)}this.temporaryEventFunctions=[]}},{key:\"_bindElementEvents\",value:function(t,e){var i=new ll(t,{});_p(i,e),this._domEventListenerCleanupQueue.push((function(){i.destroy()}));var n=function(t){var i=t.keyCode,n=t.key;\"Enter\"!==n&&\" \"!==n&&13!==i&&32!==i||e()};t.addEventListener(\"keyup\",n,!1),this._domEventListenerCleanupQueue.push((function(){t.removeEventListener(\"keyup\",n,!1)}))}},{key:\"_cleanupTemporaryNodesAndEdges\",value:function(){for(var t=0;t<this.temporaryIds.edges.length;t++){var e;this.body.edges[this.temporaryIds.edges[t]].disconnect(),delete this.body.edges[this.temporaryIds.edges[t]];var i,n=Hr(e=this.body.edgeIndices).call(e,this.temporaryIds.edges[t]);if(-1!==n)er(i=this.body.edgeIndices).call(i,n,1)}for(var o=0;o<this.temporaryIds.nodes.length;o++){var r;delete this.body.nodes[this.temporaryIds.nodes[o]];var s,a=Hr(r=this.body.nodeIndices).call(r,this.temporaryIds.nodes[o]);if(-1!==a)er(s=this.body.nodeIndices).call(s,a,1)}this.temporaryIds={nodes:[],edges:[]}}},{key:\"_controlNodeTouch\",value:function(t){this.selectionHandler.unselectAll(),this.lastTouch=this.body.functions.getPointer(t.center),this.lastTouch.translation=At({},this.body.view.translation)}},{key:\"_controlNodeDragStart\",value:function(){var t=this.lastTouch,e=this.selectionHandler._pointerToPositionObject(t),i=this.body.nodes[this.temporaryIds.nodes[0]],n=this.body.nodes[this.temporaryIds.nodes[1]],o=this.body.edges[this.edgeBeingEditedId];this.selectedControlNode=void 0;var r=i.isOverlappingWith(e),s=n.isOverlappingWith(e);!0===r?(this.selectedControlNode=i,o.edgeType.from=i):!0===s&&(this.selectedControlNode=n,o.edgeType.to=n),void 0!==this.selectedControlNode&&this.selectionHandler.selectObject(this.selectedControlNode),this.body.emitter.emit(\"_redraw\")}},{key:\"_controlNodeDrag\",value:function(t){this.body.emitter.emit(\"disablePhysics\");var e=this.body.functions.getPointer(t.center),i=this.canvas.DOMtoCanvas(e);void 0!==this.selectedControlNode?(this.selectedControlNode.x=i.x,this.selectedControlNode.y=i.y):this.interactionHandler.onDrag(t),this.body.emitter.emit(\"_redraw\")}},{key:\"_controlNodeDragEnd\",value:function(t){var e=this.body.functions.getPointer(t.center),i=this.selectionHandler._pointerToPositionObject(e),n=this.body.edges[this.edgeBeingEditedId];if(void 0!==this.selectedControlNode){this.selectionHandler.unselectAll();for(var o=this.selectionHandler._getAllNodesOverlappingWith(i),r=void 0,s=o.length-1;s>=0;s--)if(o[s]!==this.selectedControlNode.id){r=this.body.nodes[o[s]];break}if(void 0!==r&&void 0!==this.selectedControlNode)if(!0===r.isCluster)alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError);else{var a=this.body.nodes[this.temporaryIds.nodes[0]];this.selectedControlNode.id===a.id?this._performEditEdge(r.id,n.to.id):this._performEditEdge(n.from.id,r.id)}else n.updateEdgeType(),this.body.emitter.emit(\"restorePhysics\");this.body.emitter.emit(\"_redraw\")}}},{key:\"_handleConnect\",value:function(t){if((new Date).valueOf()-this.touchTime>100){this.lastTouch=this.body.functions.getPointer(t.center),this.lastTouch.translation=At({},this.body.view.translation),this.interactionHandler.drag.pointer=this.lastTouch,this.interactionHandler.drag.translation=this.lastTouch.translation;var e=this.lastTouch,i=this.selectionHandler.getNodeAt(e);if(void 0!==i)if(!0===i.isCluster)alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError);else{var n=this._getNewTargetNode(i.x,i.y);this.body.nodes[n.id]=n,this.body.nodeIndices.push(n.id);var o=this.body.functions.createEdge({id:\"connectionEdge\"+Wc(),from:i.id,to:n.id,physics:!1,smooth:{enabled:!0,type:\"continuous\",roundness:.5}});this.body.edges[o.id]=o,this.body.edgeIndices.push(o.id),this.temporaryIds.nodes.push(n.id),this.temporaryIds.edges.push(o.id)}this.touchTime=(new Date).valueOf()}}},{key:\"_dragControlNode\",value:function(t){var e=this.body.functions.getPointer(t.center),i=this.selectionHandler._pointerToPositionObject(e),n=void 0;void 0!==this.temporaryIds.edges[0]&&(n=this.body.edges[this.temporaryIds.edges[0]].fromId);for(var o=this.selectionHandler._getAllNodesOverlappingWith(i),r=void 0,s=o.length-1;s>=0;s--){var a;if(-1===Hr(a=this.temporaryIds.nodes).call(a,o[s])){r=this.body.nodes[o[s]];break}}if(t.controlEdge={from:n,to:r?r.id:void 0},this.selectionHandler.generateClickEvent(\"controlNodeDragging\",t,e),void 0!==this.temporaryIds.nodes[0]){var h=this.body.nodes[this.temporaryIds.nodes[0]];h.x=this.canvas._XconvertDOMtoCanvas(e.x),h.y=this.canvas._YconvertDOMtoCanvas(e.y),this.body.emitter.emit(\"_redraw\")}else this.interactionHandler.onDrag(t)}},{key:\"_finishConnect\",value:function(t){var e=this.body.functions.getPointer(t.center),i=this.selectionHandler._pointerToPositionObject(e),n=void 0;void 0!==this.temporaryIds.edges[0]&&(n=this.body.edges[this.temporaryIds.edges[0]].fromId);for(var o=this.selectionHandler._getAllNodesOverlappingWith(i),r=void 0,s=o.length-1;s>=0;s--){var a;if(-1===Hr(a=this.temporaryIds.nodes).call(a,o[s])){r=this.body.nodes[o[s]];break}}this._cleanupTemporaryNodesAndEdges(),void 0!==r&&(!0===r.isCluster?alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError):void 0!==this.body.nodes[n]&&void 0!==this.body.nodes[r.id]&&this._performAddEdge(n,r.id)),t.controlEdge={from:n,to:r?r.id:void 0},this.selectionHandler.generateClickEvent(\"controlNodeDragEnd\",t,e),this.body.emitter.emit(\"_redraw\")}},{key:\"_dragStartEdge\",value:function(t){var e=this.lastTouch;this.selectionHandler.generateClickEvent(\"dragStart\",t,e,void 0,!0)}},{key:\"_performAddNode\",value:function(t){var e=this,i={id:Wc(),x:t.pointer.canvas.x,y:t.pointer.canvas.y,label:\"new\"};if(\"function\"==typeof this.options.addNode){if(2!==this.options.addNode.length)throw this.showManipulatorToolbar(),new Error(\"The function for add does not support two arguments (data,callback)\");this.options.addNode(i,(function(t){null!=t&&\"addNode\"===e.inMode&&e.body.data.nodes.getDataSet().add(t),e.showManipulatorToolbar()}))}else this.body.data.nodes.getDataSet().add(i),this.showManipulatorToolbar()}},{key:\"_performAddEdge\",value:function(t,e){var i=this,n={from:t,to:e};if(\"function\"==typeof this.options.addEdge){if(2!==this.options.addEdge.length)throw new Error(\"The function for connect does not support two arguments (data,callback)\");this.options.addEdge(n,(function(t){null!=t&&\"addEdge\"===i.inMode&&(i.body.data.edges.getDataSet().add(t),i.selectionHandler.unselectAll(),i.showManipulatorToolbar())}))}else this.body.data.edges.getDataSet().add(n),this.selectionHandler.unselectAll(),this.showManipulatorToolbar()}},{key:\"_performEditEdge\",value:function(t,e){var i=this,n={id:this.edgeBeingEditedId,from:t,to:e,label:this.body.data.edges.get(this.edgeBeingEditedId).label},o=this.options.editEdge;if(\"object\"===go(o)&&(o=o.editWithoutDrag),\"function\"==typeof o){if(2!==o.length)throw new Error(\"The function for edit does not support two arguments (data, callback)\");o(n,(function(t){null==t||\"editEdge\"!==i.inMode?(i.body.edges[n.id].updateEdgeType(),i.body.emitter.emit(\"_redraw\"),i.showManipulatorToolbar()):(i.body.data.edges.getDataSet().update(t),i.selectionHandler.unselectAll(),i.showManipulatorToolbar())}))}else this.body.data.edges.getDataSet().update(n),this.selectionHandler.unselectAll(),this.showManipulatorToolbar()}}]),t}(),Cv=\"string\",Sv=\"boolean\",Tv=\"number\",Mv=\"array\",Pv=\"object\",Dv=[\"arrow\",\"bar\",\"box\",\"circle\",\"crow\",\"curve\",\"diamond\",\"image\",\"inv_curve\",\"inv_triangle\",\"triangle\",\"vee\"],Iv={borderWidth:{number:Tv},borderWidthSelected:{number:Tv,undefined:\"undefined\"},brokenImage:{string:Cv,undefined:\"undefined\"},chosen:{label:{boolean:Sv,function:\"function\"},node:{boolean:Sv,function:\"function\"},__type__:{object:Pv,boolean:Sv}},color:{border:{string:Cv},background:{string:Cv},highlight:{border:{string:Cv},background:{string:Cv},__type__:{object:Pv,string:Cv}},hover:{border:{string:Cv},background:{string:Cv},__type__:{object:Pv,string:Cv}},__type__:{object:Pv,string:Cv}},opacity:{number:Tv,undefined:\"undefined\"},fixed:{x:{boolean:Sv},y:{boolean:Sv},__type__:{object:Pv,boolean:Sv}},font:{align:{string:Cv},color:{string:Cv},size:{number:Tv},face:{string:Cv},background:{string:Cv},strokeWidth:{number:Tv},strokeColor:{string:Cv},vadjust:{number:Tv},multi:{boolean:Sv,string:Cv},bold:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},boldital:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},ital:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},mono:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},__type__:{object:Pv,string:Cv}},group:{string:Cv,number:Tv,undefined:\"undefined\"},heightConstraint:{minimum:{number:Tv},valign:{string:Cv},__type__:{object:Pv,boolean:Sv,number:Tv}},hidden:{boolean:Sv},icon:{face:{string:Cv},code:{string:Cv},size:{number:Tv},color:{string:Cv},weight:{string:Cv,number:Tv},__type__:{object:Pv}},id:{string:Cv,number:Tv},image:{selected:{string:Cv,undefined:\"undefined\"},unselected:{string:Cv,undefined:\"undefined\"},__type__:{object:Pv,string:Cv}},imagePadding:{top:{number:Tv},right:{number:Tv},bottom:{number:Tv},left:{number:Tv},__type__:{object:Pv,number:Tv}},label:{string:Cv,undefined:\"undefined\"},labelHighlightBold:{boolean:Sv},level:{number:Tv,undefined:\"undefined\"},margin:{top:{number:Tv},right:{number:Tv},bottom:{number:Tv},left:{number:Tv},__type__:{object:Pv,number:Tv}},mass:{number:Tv},physics:{boolean:Sv},scaling:{min:{number:Tv},max:{number:Tv},label:{enabled:{boolean:Sv},min:{number:Tv},max:{number:Tv},maxVisible:{number:Tv},drawThreshold:{number:Tv},__type__:{object:Pv,boolean:Sv}},customScalingFunction:{function:\"function\"},__type__:{object:Pv}},shadow:{enabled:{boolean:Sv},color:{string:Cv},size:{number:Tv},x:{number:Tv},y:{number:Tv},__type__:{object:Pv,boolean:Sv}},shape:{string:[\"custom\",\"ellipse\",\"circle\",\"database\",\"box\",\"text\",\"image\",\"circularImage\",\"diamond\",\"dot\",\"star\",\"triangle\",\"triangleDown\",\"square\",\"icon\",\"hexagon\"]},ctxRenderer:{function:\"function\"},shapeProperties:{borderDashes:{boolean:Sv,array:Mv},borderRadius:{number:Tv},interpolation:{boolean:Sv},useImageSize:{boolean:Sv},useBorderWithImage:{boolean:Sv},coordinateOrigin:{string:[\"center\",\"top-left\"]},__type__:{object:Pv}},size:{number:Tv},title:{string:Cv,dom:\"dom\",undefined:\"undefined\"},value:{number:Tv,undefined:\"undefined\"},widthConstraint:{minimum:{number:Tv},maximum:{number:Tv},__type__:{object:Pv,boolean:Sv,number:Tv}},x:{number:Tv},y:{number:Tv},__type__:{object:Pv}},Bv={configure:{enabled:{boolean:Sv},filter:{boolean:Sv,string:Cv,array:Mv,function:\"function\"},container:{dom:\"dom\"},showButton:{boolean:Sv},__type__:{object:Pv,boolean:Sv,string:Cv,array:Mv,function:\"function\"}},edges:{arrows:{to:{enabled:{boolean:Sv},scaleFactor:{number:Tv},type:{string:Dv},imageHeight:{number:Tv},imageWidth:{number:Tv},src:{string:Cv},__type__:{object:Pv,boolean:Sv}},middle:{enabled:{boolean:Sv},scaleFactor:{number:Tv},type:{string:Dv},imageWidth:{number:Tv},imageHeight:{number:Tv},src:{string:Cv},__type__:{object:Pv,boolean:Sv}},from:{enabled:{boolean:Sv},scaleFactor:{number:Tv},type:{string:Dv},imageWidth:{number:Tv},imageHeight:{number:Tv},src:{string:Cv},__type__:{object:Pv,boolean:Sv}},__type__:{string:[\"from\",\"to\",\"middle\"],object:Pv}},endPointOffset:{from:{number:Tv},to:{number:Tv},__type__:{object:Pv,number:Tv}},arrowStrikethrough:{boolean:Sv},background:{enabled:{boolean:Sv},color:{string:Cv},size:{number:Tv},dashes:{boolean:Sv,array:Mv},__type__:{object:Pv,boolean:Sv}},chosen:{label:{boolean:Sv,function:\"function\"},edge:{boolean:Sv,function:\"function\"},__type__:{object:Pv,boolean:Sv}},color:{color:{string:Cv},highlight:{string:Cv},hover:{string:Cv},inherit:{string:[\"from\",\"to\",\"both\"],boolean:Sv},opacity:{number:Tv},__type__:{object:Pv,string:Cv}},dashes:{boolean:Sv,array:Mv},font:{color:{string:Cv},size:{number:Tv},face:{string:Cv},background:{string:Cv},strokeWidth:{number:Tv},strokeColor:{string:Cv},align:{string:[\"horizontal\",\"top\",\"middle\",\"bottom\"]},vadjust:{number:Tv},multi:{boolean:Sv,string:Cv},bold:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},boldital:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},ital:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},mono:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},__type__:{object:Pv,string:Cv}},hidden:{boolean:Sv},hoverWidth:{function:\"function\",number:Tv},label:{string:Cv,undefined:\"undefined\"},labelHighlightBold:{boolean:Sv},length:{number:Tv,undefined:\"undefined\"},physics:{boolean:Sv},scaling:{min:{number:Tv},max:{number:Tv},label:{enabled:{boolean:Sv},min:{number:Tv},max:{number:Tv},maxVisible:{number:Tv},drawThreshold:{number:Tv},__type__:{object:Pv,boolean:Sv}},customScalingFunction:{function:\"function\"},__type__:{object:Pv}},selectionWidth:{function:\"function\",number:Tv},selfReferenceSize:{number:Tv},selfReference:{size:{number:Tv},angle:{number:Tv},renderBehindTheNode:{boolean:Sv},__type__:{object:Pv}},shadow:{enabled:{boolean:Sv},color:{string:Cv},size:{number:Tv},x:{number:Tv},y:{number:Tv},__type__:{object:Pv,boolean:Sv}},smooth:{enabled:{boolean:Sv},type:{string:[\"dynamic\",\"continuous\",\"discrete\",\"diagonalCross\",\"straightCross\",\"horizontal\",\"vertical\",\"curvedCW\",\"curvedCCW\",\"cubicBezier\"]},roundness:{number:Tv},forceDirection:{string:[\"horizontal\",\"vertical\",\"none\"],boolean:Sv},__type__:{object:Pv,boolean:Sv}},title:{string:Cv,undefined:\"undefined\"},width:{number:Tv},widthConstraint:{maximum:{number:Tv},__type__:{object:Pv,boolean:Sv,number:Tv}},value:{number:Tv,undefined:\"undefined\"},__type__:{object:Pv}},groups:{useDefaultGroups:{boolean:Sv},__any__:Iv,__type__:{object:Pv}},interaction:{dragNodes:{boolean:Sv},dragView:{boolean:Sv},hideEdgesOnDrag:{boolean:Sv},hideEdgesOnZoom:{boolean:Sv},hideNodesOnDrag:{boolean:Sv},hover:{boolean:Sv},keyboard:{enabled:{boolean:Sv},speed:{x:{number:Tv},y:{number:Tv},zoom:{number:Tv},__type__:{object:Pv}},bindToWindow:{boolean:Sv},autoFocus:{boolean:Sv},__type__:{object:Pv,boolean:Sv}},multiselect:{boolean:Sv},navigationButtons:{boolean:Sv},selectable:{boolean:Sv},selectConnectedEdges:{boolean:Sv},hoverConnectedEdges:{boolean:Sv},tooltipDelay:{number:Tv},zoomView:{boolean:Sv},zoomSpeed:{number:Tv},__type__:{object:Pv}},layout:{randomSeed:{undefined:\"undefined\",number:Tv,string:Cv},improvedLayout:{boolean:Sv},clusterThreshold:{number:Tv},hierarchical:{enabled:{boolean:Sv},levelSeparation:{number:Tv},nodeSpacing:{number:Tv},treeSpacing:{number:Tv},blockShifting:{boolean:Sv},edgeMinimization:{boolean:Sv},parentCentralization:{boolean:Sv},direction:{string:[\"UD\",\"DU\",\"LR\",\"RL\"]},sortMethod:{string:[\"hubsize\",\"directed\"]},shakeTowards:{string:[\"leaves\",\"roots\"]},__type__:{object:Pv,boolean:Sv}},__type__:{object:Pv}},manipulation:{enabled:{boolean:Sv},initiallyActive:{boolean:Sv},addNode:{boolean:Sv,function:\"function\"},addEdge:{boolean:Sv,function:\"function\"},editNode:{function:\"function\"},editEdge:{editWithoutDrag:{function:\"function\"},__type__:{object:Pv,boolean:Sv,function:\"function\"}},deleteNode:{boolean:Sv,function:\"function\"},deleteEdge:{boolean:Sv,function:\"function\"},controlNodeStyle:Iv,__type__:{object:Pv,boolean:Sv}},nodes:Iv,physics:{enabled:{boolean:Sv},barnesHut:{theta:{number:Tv},gravitationalConstant:{number:Tv},centralGravity:{number:Tv},springLength:{number:Tv},springConstant:{number:Tv},damping:{number:Tv},avoidOverlap:{number:Tv},__type__:{object:Pv}},forceAtlas2Based:{theta:{number:Tv},gravitationalConstant:{number:Tv},centralGravity:{number:Tv},springLength:{number:Tv},springConstant:{number:Tv},damping:{number:Tv},avoidOverlap:{number:Tv},__type__:{object:Pv}},repulsion:{centralGravity:{number:Tv},springLength:{number:Tv},springConstant:{number:Tv},nodeDistance:{number:Tv},damping:{number:Tv},__type__:{object:Pv}},hierarchicalRepulsion:{centralGravity:{number:Tv},springLength:{number:Tv},springConstant:{number:Tv},nodeDistance:{number:Tv},damping:{number:Tv},avoidOverlap:{number:Tv},__type__:{object:Pv}},maxVelocity:{number:Tv},minVelocity:{number:Tv},solver:{string:[\"barnesHut\",\"repulsion\",\"hierarchicalRepulsion\",\"forceAtlas2Based\"]},stabilization:{enabled:{boolean:Sv},iterations:{number:Tv},updateInterval:{number:Tv},onlyDynamicEdges:{boolean:Sv},fit:{boolean:Sv},__type__:{object:Pv,boolean:Sv}},timestep:{number:Tv},adaptiveTimestep:{boolean:Sv},wind:{x:{number:Tv},y:{number:Tv},__type__:{object:Pv}},__type__:{object:Pv,boolean:Sv}},autoResize:{boolean:Sv},clickToUse:{boolean:Sv},locale:{string:Cv},locales:{__any__:{any:\"any\"},__type__:{object:Pv}},height:{string:Cv},width:{string:Cv},__type__:{object:Pv}},zv={nodes:{borderWidth:[1,0,10,1],borderWidthSelected:[2,0,10,1],color:{border:[\"color\",\"#2B7CE9\"],background:[\"color\",\"#97C2FC\"],highlight:{border:[\"color\",\"#2B7CE9\"],background:[\"color\",\"#D2E5FF\"]},hover:{border:[\"color\",\"#2B7CE9\"],background:[\"color\",\"#D2E5FF\"]}},opacity:[0,0,1,.1],fixed:{x:!1,y:!1},font:{color:[\"color\",\"#343434\"],size:[14,0,100,1],face:[\"arial\",\"verdana\",\"tahoma\"],background:[\"color\",\"none\"],strokeWidth:[0,0,50,1],strokeColor:[\"color\",\"#ffffff\"]},hidden:!1,labelHighlightBold:!0,physics:!0,scaling:{min:[10,0,200,1],max:[30,0,200,1],label:{enabled:!1,min:[14,0,200,1],max:[30,0,200,1],maxVisible:[30,0,200,1],drawThreshold:[5,0,20,1]}},shadow:{enabled:!1,color:\"rgba(0,0,0,0.5)\",size:[10,0,20,1],x:[5,-30,30,1],y:[5,-30,30,1]},shape:[\"ellipse\",\"box\",\"circle\",\"database\",\"diamond\",\"dot\",\"square\",\"star\",\"text\",\"triangle\",\"triangleDown\",\"hexagon\"],shapeProperties:{borderDashes:!1,borderRadius:[6,0,20,1],interpolation:!0,useImageSize:!1},size:[25,0,200,1]},edges:{arrows:{to:{enabled:!1,scaleFactor:[1,0,3,.05],type:\"arrow\"},middle:{enabled:!1,scaleFactor:[1,0,3,.05],type:\"arrow\"},from:{enabled:!1,scaleFactor:[1,0,3,.05],type:\"arrow\"}},endPointOffset:{from:[0,-10,10,1],to:[0,-10,10,1]},arrowStrikethrough:!0,color:{color:[\"color\",\"#848484\"],highlight:[\"color\",\"#848484\"],hover:[\"color\",\"#848484\"],inherit:[\"from\",\"to\",\"both\",!0,!1],opacity:[1,0,1,.05]},dashes:!1,font:{color:[\"color\",\"#343434\"],size:[14,0,100,1],face:[\"arial\",\"verdana\",\"tahoma\"],background:[\"color\",\"none\"],strokeWidth:[2,0,50,1],strokeColor:[\"color\",\"#ffffff\"],align:[\"horizontal\",\"top\",\"middle\",\"bottom\"]},hidden:!1,hoverWidth:[1.5,0,5,.1],labelHighlightBold:!0,physics:!0,scaling:{min:[1,0,100,1],max:[15,0,100,1],label:{enabled:!0,min:[14,0,200,1],max:[30,0,200,1],maxVisible:[30,0,200,1],drawThreshold:[5,0,20,1]}},selectionWidth:[1.5,0,5,.1],selfReferenceSize:[20,0,200,1],selfReference:{size:[20,0,200,1],angle:[Math.PI/2,-6*Math.PI,6*Math.PI,Math.PI/8],renderBehindTheNode:!0},shadow:{enabled:!1,color:\"rgba(0,0,0,0.5)\",size:[10,0,20,1],x:[5,-30,30,1],y:[5,-30,30,1]},smooth:{enabled:!0,type:[\"dynamic\",\"continuous\",\"discrete\",\"diagonalCross\",\"straightCross\",\"horizontal\",\"vertical\",\"curvedCW\",\"curvedCCW\",\"cubicBezier\"],forceDirection:[\"horizontal\",\"vertical\",\"none\"],roundness:[.5,0,1,.05]},width:[1,0,30,1]},layout:{hierarchical:{enabled:!1,levelSeparation:[150,20,500,5],nodeSpacing:[100,20,500,5],treeSpacing:[200,20,500,5],blockShifting:!0,edgeMinimization:!0,parentCentralization:!0,direction:[\"UD\",\"DU\",\"LR\",\"RL\"],sortMethod:[\"hubsize\",\"directed\"],shakeTowards:[\"leaves\",\"roots\"]}},interaction:{dragNodes:!0,dragView:!0,hideEdgesOnDrag:!1,hideEdgesOnZoom:!1,hideNodesOnDrag:!1,hover:!1,keyboard:{enabled:!1,speed:{x:[10,0,40,1],y:[10,0,40,1],zoom:[.02,0,.1,.005]},bindToWindow:!0,autoFocus:!0},multiselect:!1,navigationButtons:!1,selectable:!0,selectConnectedEdges:!0,hoverConnectedEdges:!0,tooltipDelay:[300,0,1e3,25],zoomView:!0,zoomSpeed:[1,.1,2,.1]},manipulation:{enabled:!1,initiallyActive:!1},physics:{enabled:!0,barnesHut:{theta:[.5,.1,1,.05],gravitationalConstant:[-2e3,-3e4,0,50],centralGravity:[.3,0,10,.05],springLength:[95,0,500,5],springConstant:[.04,0,1.2,.005],damping:[.09,0,1,.01],avoidOverlap:[0,0,1,.01]},forceAtlas2Based:{theta:[.5,.1,1,.05],gravitationalConstant:[-50,-500,0,1],centralGravity:[.01,0,1,.005],springLength:[95,0,500,5],springConstant:[.08,0,1.2,.005],damping:[.4,0,1,.01],avoidOverlap:[0,0,1,.01]},repulsion:{centralGravity:[.2,0,10,.05],springLength:[200,0,500,5],springConstant:[.05,0,1.2,.005],nodeDistance:[100,0,500,5],damping:[.09,0,1,.01]},hierarchicalRepulsion:{centralGravity:[.2,0,10,.05],springLength:[100,0,500,5],springConstant:[.01,0,1.2,.005],nodeDistance:[120,0,500,5],damping:[.09,0,1,.01],avoidOverlap:[0,0,1,.01]},maxVelocity:[50,0,150,1],minVelocity:[.1,.01,.5,.01],solver:[\"barnesHut\",\"forceAtlas2Based\",\"repulsion\",\"hierarchicalRepulsion\"],timestep:[.5,.01,1,.01],wind:{x:[0,-10,10,.1],y:[0,-10,10,.1]}}},Nv=function(t,e,i){var n;return!(!dr(t).call(t,\"physics\")||!dr(n=zv.physics.solver).call(n,e)||i.physics.solver===e||\"wind\"===e)},Av=Object.freeze({__proto__:null,configuratorHideOption:Nv,allOptions:Bv,configureOptions:zv}),Fv=function(){function t(){Nn(this,t)}return Fn(t,[{key:\"getDistances\",value:function(t,e,i){for(var n={},o=t.edges,r=0;r<e.length;r++){var s={};n[e[r]]=s;for(var a=0;a<e.length;a++)s[e[a]]=r==a?0:1e9}for(var h=0;h<i.length;h++){var l=o[i[h]];!0===l.connected&&void 0!==n[l.fromId]&&void 0!==n[l.toId]&&(n[l.fromId][l.toId]=1,n[l.toId][l.fromId]=1)}for(var d=e.length,c=0;c<d;c++)for(var u=e[c],f=n[u],p=0;p<d-1;p++)for(var v=e[p],g=n[v],y=p+1;y<d;y++){var m=e[y],b=n[m],w=Math.min(g[m],g[u]+f[m]);g[m]=w,b[v]=w}return n}}]),t}(),jv=function(){function t(e,i,n){Nn(this,t),this.body=e,this.springLength=i,this.springConstant=n,this.distanceSolver=new Fv}return Fn(t,[{key:\"setOptions\",value:function(t){t&&(t.springLength&&(this.springLength=t.springLength),t.springConstant&&(this.springConstant=t.springConstant))}},{key:\"solve\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=this.distanceSolver.getDistances(this.body,t,e);this._createL_matrix(n),this._createK_matrix(n),this._createE_matrix();for(var o=.01,r=1,s=0,a=Math.max(1e3,Math.min(10*this.body.nodeIndices.length,6e3)),h=5,l=1e9,d=0,c=0,u=0,f=0,p=0;l>o&&s<a;){s+=1;var v=this._getHighestEnergyNode(i),g=uo(v,4);for(d=g[0],l=g[1],c=g[2],u=g[3],f=l,p=0;f>r&&p<h;){p+=1,this._moveNode(d,c,u);var y=this._getEnergy(d),m=uo(y,3);f=m[0],c=m[1],u=m[2]}}}},{key:\"_getHighestEnergyNode\",value:function(t){for(var e=this.body.nodeIndices,i=this.body.nodes,n=0,o=e[0],r=0,s=0,a=0;a<e.length;a++){var h=e[a];if(!0!==i[h].predefinedPosition||!0===i[h].isCluster&&!0===t||!0!==i[h].options.fixed.x||!0!==i[h].options.fixed.y){var l=this._getEnergy(h),d=uo(l,3),c=d[0],u=d[1],f=d[2];n<c&&(n=c,o=h,r=u,s=f)}}return[o,n,r,s]}},{key:\"_getEnergy\",value:function(t){var e=uo(this.E_sums[t],2),i=e[0],n=e[1];return[Math.sqrt(Math.pow(i,2)+Math.pow(n,2)),i,n]}},{key:\"_moveNode\",value:function(t,e,i){for(var n=this.body.nodeIndices,o=this.body.nodes,r=0,s=0,a=0,h=o[t].x,l=o[t].y,d=this.K_matrix[t],c=this.L_matrix[t],u=0;u<n.length;u++){var f=n[u];if(f!==t){var p=o[f].x,v=o[f].y,g=d[f],y=c[f],m=1/Math.pow(Math.pow(h-p,2)+Math.pow(l-v,2),1.5);r+=g*(1-y*Math.pow(l-v,2)*m),s+=g*(y*(h-p)*(l-v)*m),a+=g*(1-y*Math.pow(h-p,2)*m)}}var b=(e/r+i/s)/(s/r-a/s),w=-(s*b+e)/r;o[t].x+=w,o[t].y+=b,this._updateE_matrix(t)}},{key:\"_createL_matrix\",value:function(t){var e=this.body.nodeIndices,i=this.springLength;this.L_matrix=[];for(var n=0;n<e.length;n++){this.L_matrix[e[n]]={};for(var o=0;o<e.length;o++)this.L_matrix[e[n]][e[o]]=i*t[e[n]][e[o]]}}},{key:\"_createK_matrix\",value:function(t){var e=this.body.nodeIndices,i=this.springConstant;this.K_matrix=[];for(var n=0;n<e.length;n++){this.K_matrix[e[n]]={};for(var o=0;o<e.length;o++)this.K_matrix[e[n]][e[o]]=i*Math.pow(t[e[n]][e[o]],-2)}}},{key:\"_createE_matrix\",value:function(){var t=this.body.nodeIndices,e=this.body.nodes;this.E_matrix={},this.E_sums={};for(var i=0;i<t.length;i++)this.E_matrix[t[i]]=[];for(var n=0;n<t.length;n++){for(var o=t[n],r=e[o].x,s=e[o].y,a=0,h=0,l=n;l<t.length;l++){var d=t[l];if(d!==o){var c=e[d].x,u=e[d].y,f=1/Math.sqrt(Math.pow(r-c,2)+Math.pow(s-u,2));this.E_matrix[o][l]=[this.K_matrix[o][d]*(r-c-this.L_matrix[o][d]*(r-c)*f),this.K_matrix[o][d]*(s-u-this.L_matrix[o][d]*(s-u)*f)],this.E_matrix[d][n]=this.E_matrix[o][l],a+=this.E_matrix[o][l][0],h+=this.E_matrix[o][l][1]}}this.E_sums[o]=[a,h]}}},{key:\"_updateE_matrix\",value:function(t){for(var e=this.body.nodeIndices,i=this.body.nodes,n=this.E_matrix[t],o=this.K_matrix[t],r=this.L_matrix[t],s=i[t].x,a=i[t].y,h=0,l=0,d=0;d<e.length;d++){var c=e[d];if(c!==t){var u=n[d],f=u[0],p=u[1],v=i[c].x,g=i[c].y,y=1/Math.sqrt(Math.pow(s-v,2)+Math.pow(a-g,2)),m=o[c]*(s-v-r[c]*(s-v)*y),b=o[c]*(a-g-r[c]*(a-g)*y);n[d]=[m,b],h+=m,l+=b;var w=this.E_sums[c];w[0]+=m-f,w[1]+=b-p}}this.E_sums[t]=[h,l]}}]),t}();function Rv(t,e,i){var n,o,r,s,a=this;if(!(this instanceof Rv))throw new SyntaxError(\"Constructor must be called with the new operator\");this.options={},this.defaultOptions={locale:\"en\",locales:Kl,clickToUse:!1},At(this.options,this.defaultOptions),this.body={container:t,nodes:{},nodeIndices:[],edges:{},edgeIndices:[],emitter:{on:Vt(n=this.on).call(n,this),off:Vt(o=this.off).call(o,this),emit:Vt(r=this.emit).call(r,this),once:Vt(s=this.once).call(s,this)},eventListeners:{onTap:function(){},onTouch:function(){},onDoubleTap:function(){},onHold:function(){},onDragStart:function(){},onDrag:function(){},onDragEnd:function(){},onMouseWheel:function(){},onPinch:function(){},onMouseMove:function(){},onRelease:function(){},onContext:function(){}},data:{nodes:null,edges:null},functions:{createNode:function(){},createEdge:function(){},getPointer:function(){}},modules:{},view:{scale:1,translation:{x:0,y:0}},selectionBox:{show:!1,position:{start:{x:0,y:0},end:{x:0,y:0}}}},this.bindEventListeners(),this.images=new Zl((function(){return a.body.emitter.emit(\"_requestRedraw\")})),this.groups=new gd,this.canvas=new Ep(this.body),this.selectionHandler=new ov(this.body,this.canvas),this.interactionHandler=new Ip(this.body,this.canvas,this.selectionHandler),this.view=new Cp(this.body,this.canvas),this.renderer=new wp(this.body,this.canvas),this.physics=new fp(this.body),this.layoutEngine=new _v(this.body),this.clustering=new yp(this.body),this.manipulation=new Ov(this.body,this.canvas,this.selectionHandler,this.interactionHandler),this.nodesHandler=new pf(this.body,this.images,this.groups,this.layoutEngine),this.edgesHandler=new ip(this.body,this.images,this.groups),this.body.modules.kamadaKawai=new jv(this.body,150,.05),this.body.modules.clustering=this.clustering,this.canvas._create(),this.setOptions(i),this.setData(e)}function Lv(t){for(var e in t)Object.prototype.hasOwnProperty.call(t,e)&&(t[e].redundant=t[e].used,t[e].used=[])}function Hv(t){for(var e in t)if(Object.prototype.hasOwnProperty.call(t,e)&&t[e].redundant){for(var i=0;i<t[e].redundant.length;i++)t[e].redundant[i].parentNode.removeChild(t[e].redundant[i]);t[e].redundant=[]}}function Wv(t,e,i){var n;return Object.prototype.hasOwnProperty.call(e,t)?e[t].redundant.length>0?(n=e[t].redundant[0],e[t].redundant.shift()):(n=document.createElementNS(\"http://www.w3.org/2000/svg\",t),i.appendChild(n)):(n=document.createElementNS(\"http://www.w3.org/2000/svg\",t),e[t]={used:[],redundant:[]},i.appendChild(n)),e[t].used.push(n),n}Zt(Rv.prototype),Rv.prototype.setOptions=function(t){var e=this;if(null===t&&(t=void 0),void 0!==t){!0===ul.validate(t,Bv)&&console.error(\"%cErrors have been found in the supplied options object.\",cl);if(Eh([\"locale\",\"locales\",\"clickToUse\"],this.options,t),void 0!==t.locale&&(t.locale=function(t,e){try{var i=e.split(/[-_ /]/,2),n=uo(i,2),o=n[0],r=n[1],s=null!=o?o.toLowerCase():null,a=null!=r?r.toUpperCase():null;if(s&&a){var h,l=s+\"-\"+a;if(Object.prototype.hasOwnProperty.call(t,l))return l;console.warn(Eo(h=\"Unknown variant \".concat(a,\" of language \")).call(h,s,\".\"))}if(s){var d=s;if(Object.prototype.hasOwnProperty.call(t,d))return d;console.warn(\"Unknown language \".concat(s))}return console.warn(\"Unknown locale \".concat(e,\", falling back to English.\")),\"en\"}catch(t){return console.error(t),console.warn(\"Unexpected error while normalizing locale \".concat(e,\", falling back to English.\")),\"en\"}}(t.locales||this.options.locales,t.locale)),t=this.layoutEngine.setOptions(t.layout,t),this.canvas.setOptions(t),this.groups.setOptions(t.groups),this.nodesHandler.setOptions(t.nodes),this.edgesHandler.setOptions(t.edges),this.physics.setOptions(t.physics),this.manipulation.setOptions(t.manipulation,t,this.options),this.interactionHandler.setOptions(t.interaction),this.renderer.setOptions(t.interaction),this.selectionHandler.setOptions(t.interaction),void 0!==t.groups&&this.body.emitter.emit(\"refreshNodes\"),\"configure\"in t&&(this.configurator||(this.configurator=new hl(this,this.body.container,zv,this.canvas.pixelRatio,Nv)),this.configurator.setOptions(t.configure)),this.configurator&&!0===this.configurator.options.enabled){var i={nodes:{},edges:{},layout:{},interaction:{},manipulation:{},physics:{},global:{}};Ch(i.nodes,this.nodesHandler.options),Ch(i.edges,this.edgesHandler.options),Ch(i.layout,this.layoutEngine.options),Ch(i.interaction,this.selectionHandler.options),Ch(i.interaction,this.renderer.options),Ch(i.interaction,this.interactionHandler.options),Ch(i.manipulation,this.manipulation.options),Ch(i.physics,this.physics.options),Ch(i.global,this.canvas.options),Ch(i.global,this.options),this.configurator.setModuleOptions(i)}void 0!==t.clickToUse?!0===t.clickToUse?void 0===this.activator&&(this.activator=new sl(this.canvas.frame),this.activator.on(\"change\",(function(){e.body.emitter.emit(\"activate\")}))):(void 0!==this.activator&&(this.activator.destroy(),delete this.activator),this.body.emitter.emit(\"activate\")):this.body.emitter.emit(\"activate\"),this.canvas.setSize(),this.body.emitter.emit(\"startSimulation\")}},Rv.prototype._updateVisibleIndices=function(){var t=this.body.nodes,e=this.body.edges;for(var i in this.body.nodeIndices=[],this.body.edgeIndices=[],t)Object.prototype.hasOwnProperty.call(t,i)&&(this.clustering._isClusteredNode(i)||!1!==t[i].options.hidden||this.body.nodeIndices.push(t[i].id));for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){var o=e[n],r=t[o.fromId],s=t[o.toId],a=void 0!==r&&void 0!==s;!this.clustering._isClusteredEdge(n)&&!1===o.options.hidden&&a&&!1===r.options.hidden&&!1===s.options.hidden&&this.body.edgeIndices.push(o.id)}},Rv.prototype.bindEventListeners=function(){var t=this;this.body.emitter.on(\"_dataChanged\",(function(){t.edgesHandler._updateState(),t.body.emitter.emit(\"_dataUpdated\")})),this.body.emitter.on(\"_dataUpdated\",(function(){t.clustering._updateState(),t._updateVisibleIndices(),t._updateValueRange(t.body.nodes),t._updateValueRange(t.body.edges),t.body.emitter.emit(\"startSimulation\"),t.body.emitter.emit(\"_requestRedraw\")}))},Rv.prototype.setData=function(t){if(this.body.emitter.emit(\"resetPhysics\"),this.body.emitter.emit(\"_resetData\"),this.selectionHandler.unselectAll(),t&&t.dot&&(t.nodes||t.edges))throw new SyntaxError('Data must contain either parameter \"dot\" or  parameter pair \"nodes\" and \"edges\", but not both.');if(this.setOptions(t&&t.options),t&&t.dot){console.warn(\"The dot property has been deprecated. Please use the static convertDot method to convert DOT into vis.network format and use the normal data format with nodes and edges. This converter is used like this: var data = vis.network.convertDot(dotString);\");var e=Ul(t.dot);this.setData(e)}else if(t&&t.gephi){console.warn(\"The gephi property has been deprecated. Please use the static convertGephi method to convert gephi into vis.network format and use the normal data format with nodes and edges. This converter is used like this: var data = vis.network.convertGephi(gephiJson);\");var i=Xl(t.gephi);this.setData(i)}else this.nodesHandler.setData(t&&t.nodes,!0),this.edgesHandler.setData(t&&t.edges,!0),this.body.emitter.emit(\"_dataChanged\"),this.body.emitter.emit(\"_dataLoaded\"),this.body.emitter.emit(\"initPhysics\")},Rv.prototype.destroy=function(){for(var t in this.body.emitter.emit(\"destroy\"),this.body.emitter.off(),this.off(),delete this.groups,delete this.canvas,delete this.selectionHandler,delete this.interactionHandler,delete this.view,delete this.renderer,delete this.physics,delete this.layoutEngine,delete this.clustering,delete this.manipulation,delete this.nodesHandler,delete this.edgesHandler,delete this.configurator,delete this.images,this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,t)&&delete this.body.nodes[t];for(var e in this.body.edges)Object.prototype.hasOwnProperty.call(this.body.edges,e)&&delete this.body.edges[e];mh(this.body.container)},Rv.prototype._updateValueRange=function(t){var e,i=void 0,n=void 0,o=0;for(e in t)if(Object.prototype.hasOwnProperty.call(t,e)){var r=t[e].getValue();void 0!==r&&(i=void 0===i?r:Math.min(r,i),n=void 0===n?r:Math.max(r,n),o+=r)}if(void 0!==i&&void 0!==n)for(e in t)Object.prototype.hasOwnProperty.call(t,e)&&t[e].setValueRange(i,n,o)},Rv.prototype.isActive=function(){return!this.activator||this.activator.active},Rv.prototype.setSize=function(){return this.canvas.setSize.apply(this.canvas,arguments)},Rv.prototype.canvasToDOM=function(){return this.canvas.canvasToDOM.apply(this.canvas,arguments)},Rv.prototype.DOMtoCanvas=function(){return this.canvas.DOMtoCanvas.apply(this.canvas,arguments)},Rv.prototype.findNode=function(){return this.clustering.findNode.apply(this.clustering,arguments)},Rv.prototype.isCluster=function(){return this.clustering.isCluster.apply(this.clustering,arguments)},Rv.prototype.openCluster=function(){return this.clustering.openCluster.apply(this.clustering,arguments)},Rv.prototype.cluster=function(){return this.clustering.cluster.apply(this.clustering,arguments)},Rv.prototype.getNodesInCluster=function(){return this.clustering.getNodesInCluster.apply(this.clustering,arguments)},Rv.prototype.clusterByConnection=function(){return this.clustering.clusterByConnection.apply(this.clustering,arguments)},Rv.prototype.clusterByHubsize=function(){return this.clustering.clusterByHubsize.apply(this.clustering,arguments)},Rv.prototype.updateClusteredNode=function(){return this.clustering.updateClusteredNode.apply(this.clustering,arguments)},Rv.prototype.getClusteredEdges=function(){return this.clustering.getClusteredEdges.apply(this.clustering,arguments)},Rv.prototype.getBaseEdge=function(){return this.clustering.getBaseEdge.apply(this.clustering,arguments)},Rv.prototype.getBaseEdges=function(){return this.clustering.getBaseEdges.apply(this.clustering,arguments)},Rv.prototype.updateEdge=function(){return this.clustering.updateEdge.apply(this.clustering,arguments)},Rv.prototype.clusterOutliers=function(){return this.clustering.clusterOutliers.apply(this.clustering,arguments)},Rv.prototype.getSeed=function(){return this.layoutEngine.getSeed.apply(this.layoutEngine,arguments)},Rv.prototype.enableEditMode=function(){return this.manipulation.enableEditMode.apply(this.manipulation,arguments)},Rv.prototype.disableEditMode=function(){return this.manipulation.disableEditMode.apply(this.manipulation,arguments)},Rv.prototype.addNodeMode=function(){return this.manipulation.addNodeMode.apply(this.manipulation,arguments)},Rv.prototype.editNode=function(){return this.manipulation.editNode.apply(this.manipulation,arguments)},Rv.prototype.editNodeMode=function(){return console.warn(\"Deprecated: Please use editNode instead of editNodeMode.\"),this.manipulation.editNode.apply(this.manipulation,arguments)},Rv.prototype.addEdgeMode=function(){return this.manipulation.addEdgeMode.apply(this.manipulation,arguments)},Rv.prototype.editEdgeMode=function(){return this.manipulation.editEdgeMode.apply(this.manipulation,arguments)},Rv.prototype.deleteSelected=function(){return this.manipulation.deleteSelected.apply(this.manipulation,arguments)},Rv.prototype.getPositions=function(){return this.nodesHandler.getPositions.apply(this.nodesHandler,arguments)},Rv.prototype.getPosition=function(){return this.nodesHandler.getPosition.apply(this.nodesHandler,arguments)},Rv.prototype.storePositions=function(){return this.nodesHandler.storePositions.apply(this.nodesHandler,arguments)},Rv.prototype.moveNode=function(){return this.nodesHandler.moveNode.apply(this.nodesHandler,arguments)},Rv.prototype.getBoundingBox=function(){return this.nodesHandler.getBoundingBox.apply(this.nodesHandler,arguments)},Rv.prototype.getConnectedNodes=function(t){return void 0!==this.body.nodes[t]?this.nodesHandler.getConnectedNodes.apply(this.nodesHandler,arguments):this.edgesHandler.getConnectedNodes.apply(this.edgesHandler,arguments)},Rv.prototype.getConnectedEdges=function(){return this.nodesHandler.getConnectedEdges.apply(this.nodesHandler,arguments)},Rv.prototype.startSimulation=function(){return this.physics.startSimulation.apply(this.physics,arguments)},Rv.prototype.stopSimulation=function(){return this.physics.stopSimulation.apply(this.physics,arguments)},Rv.prototype.stabilize=function(){return this.physics.stabilize.apply(this.physics,arguments)},Rv.prototype.getSelection=function(){return this.selectionHandler.getSelection.apply(this.selectionHandler,arguments)},Rv.prototype.setSelection=function(){return this.selectionHandler.setSelection.apply(this.selectionHandler,arguments)},Rv.prototype.getSelectedNodes=function(){return this.selectionHandler.getSelectedNodeIds.apply(this.selectionHandler,arguments)},Rv.prototype.getSelectedEdges=function(){return this.selectionHandler.getSelectedEdgeIds.apply(this.selectionHandler,arguments)},Rv.prototype.getNodeAt=function(){var t=this.selectionHandler.getNodeAt.apply(this.selectionHandler,arguments);return void 0!==t&&void 0!==t.id?t.id:t},Rv.prototype.getEdgeAt=function(){var t=this.selectionHandler.getEdgeAt.apply(this.selectionHandler,arguments);return void 0!==t&&void 0!==t.id?t.id:t},Rv.prototype.selectNodes=function(){return this.selectionHandler.selectNodes.apply(this.selectionHandler,arguments)},Rv.prototype.selectEdges=function(){return this.selectionHandler.selectEdges.apply(this.selectionHandler,arguments)},Rv.prototype.unselectAll=function(){this.selectionHandler.unselectAll.apply(this.selectionHandler,arguments),this.selectionHandler.commitWithoutEmitting.apply(this.selectionHandler),this.redraw()},Rv.prototype.redraw=function(){return this.renderer.redraw.apply(this.renderer,arguments)},Rv.prototype.getScale=function(){return this.view.getScale.apply(this.view,arguments)},Rv.prototype.getViewPosition=function(){return this.view.getViewPosition.apply(this.view,arguments)},Rv.prototype.fit=function(){return this.view.fit.apply(this.view,arguments)},Rv.prototype.moveTo=function(){return this.view.moveTo.apply(this.view,arguments)},Rv.prototype.focus=function(){return this.view.focus.apply(this.view,arguments)},Rv.prototype.releaseNode=function(){return this.view.releaseNode.apply(this.view,arguments)},Rv.prototype.getOptionsFromConfigurator=function(){var t={};return this.configurator&&(t=this.configurator.getOptions.apply(this.configurator)),t};var qv=Object.freeze({__proto__:null,prepareElements:Lv,cleanupElements:Hv,resetElements:function(t){Lv(t),Hv(t),Lv(t)},getSVGElement:Wv,getDOMElement:function(t,e,i,n){var o;return Object.prototype.hasOwnProperty.call(e,t)?e[t].redundant.length>0?(o=e[t].redundant[0],e[t].redundant.shift()):(o=document.createElement(t),void 0!==n?i.insertBefore(o,n):i.appendChild(o)):(o=document.createElement(t),e[t]={used:[],redundant:[]},void 0!==n?i.insertBefore(o,n):i.appendChild(o)),e[t].used.push(o),o},drawPoint:function(t,e,i,n,o,r){var s;if(\"circle\"==i.style?((s=Wv(\"circle\",n,o)).setAttributeNS(null,\"cx\",t),s.setAttributeNS(null,\"cy\",e),s.setAttributeNS(null,\"r\",.5*i.size)):((s=Wv(\"rect\",n,o)).setAttributeNS(null,\"x\",t-.5*i.size),s.setAttributeNS(null,\"y\",e-.5*i.size),s.setAttributeNS(null,\"width\",i.size),s.setAttributeNS(null,\"height\",i.size)),void 0!==i.styles&&s.setAttributeNS(null,\"style\",i.styles),s.setAttributeNS(null,\"class\",i.className+\" vis-point\"),r){var a=Wv(\"text\",n,o);r.xOffset&&(t+=r.xOffset),r.yOffset&&(e+=r.yOffset),r.content&&(a.textContent=r.content),r.className&&a.setAttributeNS(null,\"class\",r.className+\" vis-label\"),a.setAttributeNS(null,\"x\",t),a.setAttributeNS(null,\"y\",e)}return s},drawBar:function(t,e,i,n,o,r,s,a){if(0!=n){n<0&&(e-=n*=-1);var h=Wv(\"rect\",r,s);h.setAttributeNS(null,\"x\",t-.5*i),h.setAttributeNS(null,\"y\",e),h.setAttributeNS(null,\"width\",i),h.setAttributeNS(null,\"height\",n),h.setAttributeNS(null,\"class\",o),a&&h.setAttributeNS(null,\"style\",a)}}}),Vv={Images:Zl,dotparser:Yl,gephiParser:Gl,allOptions:Av,convertDot:Ul,convertGephi:Xl},Uv=Object.freeze({__proto__:null,network:Vv,DOMutil:qv,util:fl,data:ou,Hammer:ll,keycharm:Tp,DataSet:tu,DataView:eu,Queue:Zc,Network:Rv});t.DOMutil=qv,t.DataSet=tu,t.DataView=eu,t.Hammer=ll,t.Network=Rv,t.Queue=Zc,t.data=ou,t.default=Uv,t.keycharm=Tp,t.network=Vv,t.util=fl,Object.defineProperty(t,\"__esModule\",{value:!0})}\n",
       "  // ));\n",
       "  // # sourceMappingURL=vis-network.min.js.map\n",
       "\n",
       "  );\n",
       "}\n",
       "\n",
       "\n",
       "    require([\"gravis-vis-network\"], function(vis){\n",
       "      // Strict mode: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Strict_mode\n",
       "      \"use strict\";\n",
       "\n",
       "      const state = {\n",
       "        manager:{\n",
       "          // Data generation process: 1) Fetch state.rawData, 2) derive state.parsedData, 3) derive state.shownData\n",
       "\n",
       "          // 1) Fetch state.rawData\n",
       "          fetchRawDataFromTemplating(){\n",
       "            state.rawData = [{\"directed\": true, \"metadata\": {\"node_color\": \"black\", \"node_opacity\": 1, \"node_size\": 10, \"node_shape\": \"circle\", \"node_border_color\": \"black\", \"node_border_size\": 1, \"node_label_color\": \"black\", \"node_label_size\": 10, \"edge_color\": \"#999\", \"edge_opacity\": 1, \"edge_size\": 2, \"edge_shape\": \"circle\", \"edge_border_color\": \"#999\", \"edge_border_size\": 1, \"edge_label_color\": \"black\", \"edge_label_size\": 10, \"arrow_size\": 4, \"arrow_color\": \"#999\"}, \"nodes\": {\"r1MhwkDR9RGGNg07nIf5BQ\": {\"label\": \"Tom\", \"metadata\": {\"focus\": \"target\", \"label\": \"Tom\", \"color\": \"#f07f65\", \"size\": 20}}, \"JIMOIAq9XU0WsAXPLHQRBg\": {\"label\": \"MyBank\", \"metadata\": {\"focus\": \"controlled\", \"label\": \"MyBank\", \"color\": \"#f07f65\", \"size\": 20}}, \"nToxQTWUkZ4gv4iAItXSKw\": {\"label\": \"NovaCore Innovations\", \"metadata\": {\"focus\": \"controlled\", \"label\": \"NovaCore Innovations\", \"color\": \"#f07f65\", \"size\": 20}}, \"DuOTZpKAvOFRrhddS9d3NA\": {\"label\": \"InfinityForge Technologies\", \"metadata\": {\"focus\": \"controlled\", \"label\": \"InfinityForge Technologies\", \"color\": \"#f07f65\", \"size\": 20}}, \"AOWmwJayFKAjAmmIlk8yOQ\": {\"label\": \"Family Doe\", \"metadata\": {\"focus\": \"target\", \"label\": \"Family Doe\", \"color\": \"#f07f65\", \"size\": 20}}, \"YlVLHV5wCROpp3hW3nbNOQ\": {\"label\": \"PhoenixRise Ventures\", \"metadata\": {\"focus\": \"controlled\", \"label\": \"PhoenixRise Ventures\", \"color\": \"#f07f65\", \"size\": 20}}, \"MYXtcytg7uj+rAyOjYhBQA\": {\"label\": \"People Bank\", \"metadata\": {\"focus\": \"controlled\", \"label\": \"People Bank\", \"color\": \"#f07f65\", \"size\": 20}}, \"uVH0cGqXVe7/eDYLCwW6XQ\": {\"label\": \"NebulaTech Solutions\", \"metadata\": {\"focus\": \"controlled\", \"label\": \"NebulaTech Solutions\", \"color\": \"#f07f65\", \"size\": 20}}, \"77IlFbWAmT0DYKSlTSVLjg\": {\"label\": \"CyberNexus Systems\", \"metadata\": {\"focus\": \"controlled\", \"label\": \"CyberNexus Systems\", \"color\": \"#f07f65\", \"size\": 20}}, \"dQIuZHbv+9dqtJ8fO/8rnA\": {\"label\": \"ACME Bank\", \"metadata\": {\"focus\": \"controlled\", \"label\": \"ACME Bank\", \"color\": \"#f07f65\", \"size\": 20}}, \"B2ENslGgWUXwghQigOV/ng\": {\"label\": \"StellarSphere Enterprises\", \"metadata\": {\"focus\": \"controlled\", \"label\": \"StellarSphere Enterprises\", \"color\": \"#f07f65\", \"size\": 20}}, \"hZwSJYPIqnQL6SP8CAMJog\": {\"label\": \"CelestialWave Industries\", \"metadata\": {\"focus\": \"controlled\", \"label\": \"CelestialWave Industries\", \"color\": \"#f07f65\", \"size\": 20}}, \"Lh2x5E3rMHHKwYTA4a3yyQ\": {\"label\": \"ACME Trust\", \"metadata\": {\"focus\": \"controlled\", \"label\": \"ACME Trust\", \"color\": \"#f07f65\", \"size\": 20}}, \"gb8VMWs5dsc6cteL2DOYCA\": {\"label\": \"ElysiumTech Solutions\", \"metadata\": {\"label\": \"ElysiumTech Solutions\", \"color\": \"#92979c\", \"size\": 10}}, \"249BMZupWCFjqM7zue27iQ\": {\"label\": \"Quantum Dynamics Innovations\", \"metadata\": {\"label\": \"Quantum Dynamics Innovations\", \"color\": \"#92979c\", \"size\": 10}}, \"cW6S8m7PKwayYyrUFQOwnA\": {\"label\": \"Mary\", \"metadata\": {\"label\": \"Mary\", \"color\": \"#92979c\", \"size\": 10}}, \"IWkBDvnHtyJq/z5hVPdgnQ\": {\"label\": \"DreamScape Enterprises\", \"metadata\": {\"label\": \"DreamScape Enterprises\", \"color\": \"#92979c\", \"size\": 10}}, \"sAvunE8/tDW5b4Q7IVNIwg\": {\"label\": \"Anna\", \"metadata\": {\"label\": \"Anna\", \"color\": \"#92979c\", \"size\": 10}}, \"sIMZM6956KBcjN/vk1rXzA\": {\"label\": \"Bob\", \"metadata\": {\"label\": \"Bob\", \"color\": \"#92979c\", \"size\": 10}}}, \"edges\": [{\"source\": \"AOWmwJayFKAjAmmIlk8yOQ\", \"target\": \"r1MhwkDR9RGGNg07nIf5BQ\", \"metadata\": {\"focus\": \"target\", \"color\": \"#f07f65\", \"size\": 5}}, {\"source\": \"AOWmwJayFKAjAmmIlk8yOQ\", \"target\": \"JIMOIAq9XU0WsAXPLHQRBg\", \"metadata\": {\"focus\": \"target\", \"color\": \"#f07f65\", \"size\": 5}}, {\"source\": \"AOWmwJayFKAjAmmIlk8yOQ\", \"target\": \"nToxQTWUkZ4gv4iAItXSKw\", \"metadata\": {\"focus\": \"target\", \"color\": \"#f07f65\", \"size\": 5}}, {\"source\": \"AOWmwJayFKAjAmmIlk8yOQ\", \"target\": \"DuOTZpKAvOFRrhddS9d3NA\", \"metadata\": {\"focus\": \"target\", \"color\": \"#f07f65\", \"size\": 5}}, {\"source\": \"AOWmwJayFKAjAmmIlk8yOQ\", \"target\": \"YlVLHV5wCROpp3hW3nbNOQ\", \"metadata\": {\"focus\": \"target\", \"color\": \"#f07f65\", \"size\": 5}}, {\"source\": \"AOWmwJayFKAjAmmIlk8yOQ\", \"target\": \"MYXtcytg7uj+rAyOjYhBQA\", \"metadata\": {\"focus\": \"target\", \"color\": \"#f07f65\", \"size\": 5}}, {\"source\": \"AOWmwJayFKAjAmmIlk8yOQ\", \"target\": \"uVH0cGqXVe7/eDYLCwW6XQ\", \"metadata\": {\"focus\": \"target\", \"color\": \"#f07f65\", \"size\": 5}}, {\"source\": \"AOWmwJayFKAjAmmIlk8yOQ\", \"target\": \"77IlFbWAmT0DYKSlTSVLjg\", \"metadata\": {\"focus\": \"target\", \"color\": \"#f07f65\", \"size\": 5}}, {\"source\": \"AOWmwJayFKAjAmmIlk8yOQ\", \"target\": \"dQIuZHbv+9dqtJ8fO/8rnA\", \"metadata\": {\"focus\": \"target\", \"color\": \"#f07f65\", \"size\": 5}}, {\"source\": \"AOWmwJayFKAjAmmIlk8yOQ\", \"target\": \"cW6S8m7PKwayYyrUFQOwnA\", \"metadata\": {\"focus\": \"target\", \"color\": \"#f07f65\", \"size\": 5}}, {\"source\": \"AOWmwJayFKAjAmmIlk8yOQ\", \"target\": \"B2ENslGgWUXwghQigOV/ng\", \"metadata\": {\"focus\": \"target\", \"color\": \"#f07f65\", \"size\": 5}}, {\"source\": \"AOWmwJayFKAjAmmIlk8yOQ\", \"target\": \"hZwSJYPIqnQL6SP8CAMJog\", \"metadata\": {\"focus\": \"target\", \"color\": \"#f07f65\", \"size\": 5}}, {\"source\": \"AOWmwJayFKAjAmmIlk8yOQ\", \"target\": \"sAvunE8/tDW5b4Q7IVNIwg\", \"metadata\": {\"focus\": \"target\", \"color\": \"#f07f65\", \"size\": 5}}, {\"source\": \"AOWmwJayFKAjAmmIlk8yOQ\", \"target\": \"Lh2x5E3rMHHKwYTA4a3yyQ\", \"metadata\": {\"focus\": \"target\", \"color\": \"#f07f65\", \"size\": 5}}, {\"source\": \"AOWmwJayFKAjAmmIlk8yOQ\", \"target\": \"sIMZM6956KBcjN/vk1rXzA\", \"metadata\": {\"focus\": \"target\", \"color\": \"#f07f65\", \"size\": 5}}, {\"source\": \"JIMOIAq9XU0WsAXPLHQRBg\", \"target\": \"nToxQTWUkZ4gv4iAItXSKw\", \"metadata\": {\"color\": \"#92979c\", \"size\": 1}}, {\"source\": \"JIMOIAq9XU0WsAXPLHQRBg\", \"target\": \"DuOTZpKAvOFRrhddS9d3NA\", \"metadata\": {\"color\": \"#92979c\", \"size\": 1}}, {\"source\": \"JIMOIAq9XU0WsAXPLHQRBg\", \"target\": \"YlVLHV5wCROpp3hW3nbNOQ\", \"metadata\": {\"color\": \"#92979c\", \"size\": 1}}, {\"source\": \"JIMOIAq9XU0WsAXPLHQRBg\", \"target\": \"uVH0cGqXVe7/eDYLCwW6XQ\", \"metadata\": {\"color\": \"#92979c\", \"size\": 1}}, {\"source\": \"JIMOIAq9XU0WsAXPLHQRBg\", \"target\": \"77IlFbWAmT0DYKSlTSVLjg\", \"metadata\": {\"color\": \"#92979c\", \"size\": 1}}, {\"source\": \"JIMOIAq9XU0WsAXPLHQRBg\", \"target\": \"dQIuZHbv+9dqtJ8fO/8rnA\", \"metadata\": {\"color\": \"#92979c\", \"size\": 1}}, {\"source\": \"JIMOIAq9XU0WsAXPLHQRBg\", \"target\": \"B2ENslGgWUXwghQigOV/ng\", \"metadata\": {\"color\": \"#92979c\", \"size\": 1}}, {\"source\": \"JIMOIAq9XU0WsAXPLHQRBg\", \"target\": \"hZwSJYPIqnQL6SP8CAMJog\", \"metadata\": {\"color\": \"#92979c\", \"size\": 1}}, {\"source\": \"YlVLHV5wCROpp3hW3nbNOQ\", \"target\": \"nToxQTWUkZ4gv4iAItXSKw\", \"metadata\": {\"color\": \"#92979c\", \"size\": 1}}, {\"source\": \"MYXtcytg7uj+rAyOjYhBQA\", \"target\": \"Lh2x5E3rMHHKwYTA4a3yyQ\", \"metadata\": {\"color\": \"#92979c\", \"size\": 1}}, {\"source\": \"B2ENslGgWUXwghQigOV/ng\", \"target\": \"nToxQTWUkZ4gv4iAItXSKw\", \"metadata\": {\"color\": \"#92979c\", \"size\": 1}}, {\"source\": \"B2ENslGgWUXwghQigOV/ng\", \"target\": \"YlVLHV5wCROpp3hW3nbNOQ\", \"metadata\": {\"color\": \"#92979c\", \"size\": 1}}, {\"source\": \"B2ENslGgWUXwghQigOV/ng\", \"target\": \"77IlFbWAmT0DYKSlTSVLjg\", \"metadata\": {\"color\": \"#92979c\", \"size\": 1}}, {\"source\": \"B2ENslGgWUXwghQigOV/ng\", \"target\": \"dQIuZHbv+9dqtJ8fO/8rnA\", \"metadata\": {\"color\": \"#92979c\", \"size\": 1}}, {\"source\": \"B2ENslGgWUXwghQigOV/ng\", \"target\": \"hZwSJYPIqnQL6SP8CAMJog\", \"metadata\": {\"color\": \"#92979c\", \"size\": 1}}, {\"source\": \"sIMZM6956KBcjN/vk1rXzA\", \"target\": \"JIMOIAq9XU0WsAXPLHQRBg\", \"metadata\": {\"color\": \"#92979c\", \"size\": 1}}, {\"source\": \"sIMZM6956KBcjN/vk1rXzA\", \"target\": \"nToxQTWUkZ4gv4iAItXSKw\", \"metadata\": {\"color\": \"#92979c\", \"size\": 1}}, {\"source\": \"sIMZM6956KBcjN/vk1rXzA\", \"target\": \"DuOTZpKAvOFRrhddS9d3NA\", \"metadata\": {\"color\": \"#92979c\", \"size\": 1}}, {\"source\": \"sIMZM6956KBcjN/vk1rXzA\", \"target\": \"YlVLHV5wCROpp3hW3nbNOQ\", \"metadata\": {\"color\": \"#92979c\", \"size\": 1}}, {\"source\": \"sIMZM6956KBcjN/vk1rXzA\", \"target\": \"MYXtcytg7uj+rAyOjYhBQA\", \"metadata\": {\"color\": \"#92979c\", \"size\": 1}}, {\"source\": \"sIMZM6956KBcjN/vk1rXzA\", \"target\": \"uVH0cGqXVe7/eDYLCwW6XQ\", \"metadata\": {\"color\": \"#92979c\", \"size\": 1}}, {\"source\": \"sIMZM6956KBcjN/vk1rXzA\", \"target\": \"77IlFbWAmT0DYKSlTSVLjg\", \"metadata\": {\"color\": \"#92979c\", \"size\": 1}}, {\"source\": \"sIMZM6956KBcjN/vk1rXzA\", \"target\": \"dQIuZHbv+9dqtJ8fO/8rnA\", \"metadata\": {\"color\": \"#92979c\", \"size\": 1}}, {\"source\": \"sIMZM6956KBcjN/vk1rXzA\", \"target\": \"B2ENslGgWUXwghQigOV/ng\", \"metadata\": {\"color\": \"#92979c\", \"size\": 1}}, {\"source\": \"sIMZM6956KBcjN/vk1rXzA\", \"target\": \"hZwSJYPIqnQL6SP8CAMJog\", \"metadata\": {\"color\": \"#92979c\", \"size\": 1}}, {\"source\": \"sIMZM6956KBcjN/vk1rXzA\", \"target\": \"Lh2x5E3rMHHKwYTA4a3yyQ\", \"metadata\": {\"color\": \"#92979c\", \"size\": 1}}]}];\n",
       "            // Data selection and normalization\n",
       "            state.nodeSizeDataSource = \"size\";\n",
       "            state.useNodeSizeNormalization = false;\n",
       "            state.nodeSizeNormalizationMin = 5.0;\n",
       "            state.nodeSizeNormalizationMax = 75.0;\n",
       "            state.nodeLabelTextDataSource = \"label\";\n",
       "            state.edgeSizeDataSource = \"size\";\n",
       "            state.useEdgeSizeNormalization = false;\n",
       "            state.edgeSizeNormalizationMin = 0.2;\n",
       "            state.edgeSizeNormalizationMax = 5.0;\n",
       "            state.edgeLabelTextDataSource = \"label\";\n",
       "            // Containers\n",
       "            state.graphContainerHeight = 450;\n",
       "            state.detailsContainerHeight = 100;\n",
       "            state.showDetails = false,\n",
       "            state.showDetailsToggleButton = true,\n",
       "            state.showMenu = false,\n",
       "            state.showMenuToggleButton = true,\n",
       "            // Nodes\n",
       "            state.showNodes = true;\n",
       "            state.nodeSizeFactor = 1.0;\n",
       "            state.nodeDragFix = false;\n",
       "            state.nodeHoverNeighborhood = false;\n",
       "            state.nodeHoverTooltip = true;\n",
       "            state.showNodeImages = true;\n",
       "            state.nodeImageSizeFactor = 1.0;\n",
       "            state.showNodeLabels = true;\n",
       "            state.showNodeLabelBorders = true;\n",
       "            state.nodeLabelSizeFactor = 1.0;\n",
       "            state.nodeLabelRotation = 0.0;\n",
       "            state.nodeLabelFont = \"Arial\";\n",
       "            // Edges\n",
       "            state.showEdges = true;\n",
       "            state.edgeSizeFactor = 1.0;\n",
       "            state.edgeCurvature = 0.4;\n",
       "            state.edgeHoverTooltip = true,\n",
       "            state.showEdgeLabels = true;\n",
       "            state.showEdgeLabelBorders = true;\n",
       "            state.edgeLabelSizeFactor = 1.0;\n",
       "            state.edgeLabelRotation = 0.0;\n",
       "            state.edgeLabelFont = \"Arial\";\n",
       "            // Layout algorithm\n",
       "            state.layoutAlgorithmActive = true;\n",
       "            state.layoutAlgorithm = \"barnesHut\";\n",
       "            state.gravitationalConstant = -2000.0;\n",
       "            state.centralGravity = 0.1;\n",
       "            state.springLength = 70.0;\n",
       "            state.springConstant = 0.1;\n",
       "            state.avoidOverlap = 0.0;\n",
       "            // Other\n",
       "            state.initZoomFactor = 0.75;\n",
       "            state.largeGraphThreshold = 500;\n",
       "          },\n",
       "\n",
       "          // 2) Derive state.parsedData from state.givenData\n",
       "          rawDataParser:{\n",
       "            getBool(obj, prop, def){\n",
       "              try{\n",
       "                const value = obj[prop];\n",
       "                if(value == \"true\" || value == \"True\"){\n",
       "                  value = true;\n",
       "                } else if(value == \"false\" || value == \"False\"){\n",
       "                  value = false;\n",
       "                }\n",
       "                if(value !== true && value !== false){\n",
       "                  throw \"Invalid value. Not a bool.\";\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return def;\n",
       "              }\n",
       "              return def\n",
       "            },\n",
       "\n",
       "            getString(obj, prop, def) {\n",
       "              try{\n",
       "                const value = String(obj[prop]);\n",
       "                if(value === \"undefined\"){\n",
       "                  throw \"Invalid value. Not a proper string.\";\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return def;\n",
       "              }\n",
       "              return def;\n",
       "            },\n",
       "\n",
       "            getArrayLengthOrZero(array){\n",
       "              try{\n",
       "                const value = parseInt(array.length);\n",
       "                if(!((value + 1) > 0)){\n",
       "                  throw \"Invalid value. Not a proper length.\";\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return 0;\n",
       "              }\n",
       "            },\n",
       "\n",
       "            getObjectLengthOrZero(obj){\n",
       "              try{\n",
       "                const value = Object.keys(obj).length;\n",
       "                if(!((value + 1) > 0)){\n",
       "                  throw \"Invalid value. Not a proper length.\";\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return 0;\n",
       "              }\n",
       "            },\n",
       "\n",
       "            createUniqueEdgeId(sourceId, targetId, knownEdgeIds){\n",
       "              let newEdgeIdBase = \"(\" + sourceId + \", \" + targetId + \")\",\n",
       "                newEdgeId = newEdgeIdBase,\n",
       "                multiEdgeCounter = 1;\n",
       "              for(let i=1; knownEdgeIds.has(newEdgeId); i++){\n",
       "                newEdgeId = newEdgeIdBase + \"_\" + String(i);\n",
       "                multiEdgeCounter += 1;\n",
       "              }\n",
       "              knownEdgeIds.add(newEdgeId);\n",
       "              return {\"id\": newEdgeId, \"count\": multiEdgeCounter}\n",
       "            },\n",
       "          },\n",
       "\n",
       "          rawMetadataParser:{\n",
       "            getString(obj, prop, def){\n",
       "              try{\n",
       "                const value = String(obj.metadata[prop]);\n",
       "                if(value === \"undefined\"){\n",
       "                  throw \"Invalid value. Not a proper string.\";\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return def;\n",
       "              }\n",
       "            },\n",
       "            getShape(obj, prop, def){\n",
       "              const givenShape = state.manager.rawMetadataParser.getString(obj, prop, def);\n",
       "              let visShape = def;\n",
       "              if(givenShape === \"circle\"){\n",
       "                visShape = \"dot\";\n",
       "              } else if(givenShape === \"rectangle\"){\n",
       "                visShape = \"square\";\n",
       "              } else if(givenShape === \"hexagon\"){\n",
       "                visShape = \"hexagon\";\n",
       "              }\n",
       "              return visShape;\n",
       "            },\n",
       "            getColor(obj, prop, def){\n",
       "              function isBodyidColor(strColor) {\n",
       "                const sty = new Option().style;\n",
       "                sty.color = strColor;\n",
       "                return sty.color !== \"\";\n",
       "              }\n",
       "              try{\n",
       "                const value = obj.metadata[prop];\n",
       "                if(!isBodyidColor(value)){\n",
       "                  throw \"Invalid value. Not a color.\"\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return def;\n",
       "              }\n",
       "            },\n",
       "            getFiniteNumber(obj, prop, def){\n",
       "              try{\n",
       "                const value = parseFloat(obj.metadata[prop]);\n",
       "                if(!isFinite(value) || value === null){\n",
       "                  throw \"Invalid value. Not a finite number.\"\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return def;\n",
       "              }\n",
       "            },\n",
       "            getFiniteNumberOrNull(obj, prop, def){\n",
       "              try{\n",
       "                const value = parseFloat(obj.metadata[prop]);\n",
       "                if(!isFinite(value)){  // Note: isFinite(null) gives true\n",
       "                  throw \"Invalid value. Not a finite number or null.\"\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return def;\n",
       "              }\n",
       "            },\n",
       "            getFinitePositiveNumber(obj, prop, def){\n",
       "              try{\n",
       "                const value = parseFloat(obj.metadata[prop]);\n",
       "                if(!isFinite(value) || value === null || value < 0.0){\n",
       "                  throw \"Invalid value. Not a finite positive number.\"\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return def;\n",
       "              }\n",
       "            },\n",
       "            collectOtherMetadata(sourceObject, targetObject, definedMetadata){\n",
       "              if(typeof(sourceObject) !== \"undefined\" && typeof(sourceObject.metadata) !== \"undefined\"){\n",
       "                const properties = Object.keys(sourceObject.metadata);\n",
       "                for(let i=0; i<properties.length; i++){\n",
       "                  const property = properties[i];\n",
       "                  if(!definedMetadata.has(property)){\n",
       "                    targetObject[property] = sourceObject.metadata[property];\n",
       "                  }\n",
       "                }\n",
       "              }\n",
       "            },\n",
       "          },\n",
       "\n",
       "          propertyClassifier:{\n",
       "            numeric: null,\n",
       "            nonNumeric: null,\n",
       "            init(){\n",
       "              this.numeric = new Set(),\n",
       "              this.nonNumeric = new Set();\n",
       "            },\n",
       "            isNumeric(d){\n",
       "              return d === null || typeof(d) === \"undefined\" || String(parseFloat(d)) === String(d);\n",
       "            },\n",
       "            inspect(object, property){\n",
       "              const value = object[property];\n",
       "              if(!this.nonNumeric.has(property)){\n",
       "                if(this.isNumeric(value)){\n",
       "                  this.numeric.add(property);\n",
       "                } else{\n",
       "                  this.nonNumeric.add(property);\n",
       "                  this.numeric.delete(property);\n",
       "                }\n",
       "              }\n",
       "            }\n",
       "          },\n",
       "\n",
       "          replaceStringVariables(givenString, givenItem, variables){\n",
       "            let newString = givenString;\n",
       "            for(let i=0; i<variables.length; i++){\n",
       "              let variable = variables[i],\n",
       "                variableText = \"$\" + variable;\n",
       "              if(variable === \"x\"){\n",
       "                variable = \"fx\";\n",
       "              } else if (variable === \"y\"){\n",
       "                variable = \"fy\";\n",
       "              }\n",
       "              let insertedText = String(givenItem[variable]);\n",
       "              if(insertedText === \"undefined\"){\n",
       "                insertedText = \"\";\n",
       "              }\n",
       "              newString = newString.replace(variableText, insertedText);\n",
       "            }\n",
       "            return newString;\n",
       "          },\n",
       "\n",
       "          parseGeneral(givenData, parsedData){\n",
       "            parsedData.general = {\n",
       "              // General\n",
       "              directed: state.manager.rawDataParser.getBool(givenData, \"directed\", true),\n",
       "              label: state.manager.rawDataParser.getString(givenData, \"label\", \"\"),\n",
       "              background_color: state.manager.rawMetadataParser.getColor(givenData, \"background_color\", \"white\"),\n",
       "              arrow_color: state.manager.rawMetadataParser.getColor(givenData, \"arrow_color\", \"black\"),\n",
       "              arrow_size: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"arrow_size\", 10.0),\n",
       "              // Nodes\n",
       "              node_color: state.manager.rawMetadataParser.getColor(givenData, \"node_color\", \"black\"),\n",
       "              node_opacity: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"node_opacity\", 1.0),\n",
       "              node_size: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"node_size\", 10.0),\n",
       "              node_shape: state.manager.rawMetadataParser.getString(givenData, \"node_shape\", \"circle\"),\n",
       "              node_border_color: state.manager.rawMetadataParser.getColor(givenData, \"node_border_color\", \"black\"),\n",
       "              node_border_size: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"node_border_size\", 0.0),\n",
       "              node_label_color: state.manager.rawMetadataParser.getColor(givenData, \"node_label_color\", \"black\"),\n",
       "              node_label_size: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"node_label_size\", 12.0),\n",
       "              node_hover: state.manager.rawMetadataParser.getString(givenData, \"node_hover\", \"\"),\n",
       "              node_click: state.manager.rawMetadataParser.getString(givenData, \"node_click\", \"\"),\n",
       "              node_image: state.manager.rawMetadataParser.getString(givenData, \"node_image\", \"\"),\n",
       "              node_x: state.manager.rawMetadataParser.getFiniteNumberOrNull(givenData, \"node_x\", null),\n",
       "              node_y: state.manager.rawMetadataParser.getFiniteNumberOrNull(givenData, \"node_y\", null),\n",
       "              contains_node_hover: false,\n",
       "              contains_node_click: false,\n",
       "              contains_node_image: false,\n",
       "              // Edges\n",
       "              edge_color: state.manager.rawMetadataParser.getColor(givenData, \"edge_color\", \"black\"),\n",
       "              edge_opacity: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"edge_opacity\", 1.0),\n",
       "              edge_size: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"edge_size\", 1.0),\n",
       "              edge_label_color: state.manager.rawMetadataParser.getColor(givenData, \"edge_label_color\", \"black\"),\n",
       "              edge_label_size: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"edge_label_size\", 8.0),\n",
       "              edge_hover: state.manager.rawMetadataParser.getString(givenData, \"edge_hover\", \"\"),\n",
       "              edge_click: state.manager.rawMetadataParser.getString(givenData, \"edge_click\", \"\"),\n",
       "              contains_edge_hover: false,\n",
       "              contains_edge_click: false,\n",
       "            };\n",
       "            if(!parsedData.general.directed){\n",
       "              parsedData.general.arrow_size = 0.0;\n",
       "            }\n",
       "          },\n",
       "\n",
       "          parseNodes(givenData, parsedData){\n",
       "            const numNodes = state.manager.rawDataParser.getObjectLengthOrZero(givenData.nodes),\n",
       "              nodeIdToObjectMap = new Map(),\n",
       "              nodeDefinedMetadata = new Set(\n",
       "                [\"color\", \"opacity\", \"size\", \"shape\", \"border_color\", \"border_size\",\n",
       "                 \"label_color\", \"label_size\", \"hover\", \"click\", \"image\", \"x\", \"y\"]),\n",
       "              nodeReplacementVariables = [\n",
       "                \"id\", \"label\",\n",
       "                \"color\", \"opacity\", \"size\", \"shape\", \"border_color\", \"border_size\",\n",
       "                \"label_color\", \"label_size\", \"image\", \"x\", \"y\"];\n",
       "            state.manager.propertyClassifier.init();\n",
       "            try {\n",
       "              Object.entries(givenData.nodes);\n",
       "            }\n",
       "            catch(e){\n",
       "               givenData.nodes = {};\n",
       "            }\n",
       "            for (const [givenNodeId, givenNode] of Object.entries(givenData.nodes)) {\n",
       "              const parsedNode = {};\n",
       "              // data: id, label\n",
       "              parsedNode.id = String(givenNodeId);\n",
       "              parsedNode.label = state.manager.rawDataParser.getString(givenNode, \"label\", \"\");\n",
       "              // defined metadata\n",
       "              parsedNode.color = state.manager.rawMetadataParser.getColor(givenNode, \"color\", parsedData.general.node_color);\n",
       "              parsedNode.opacity = state.manager.rawMetadataParser.getFinitePositiveNumber(givenNode, \"opacity\", parsedData.general.node_opacity);\n",
       "              parsedNode.size = state.manager.rawMetadataParser.getFinitePositiveNumber(givenNode, \"size\", parsedData.general.node_size);\n",
       "              parsedNode.shape = state.manager.rawMetadataParser.getShape(givenNode, \"shape\", parsedData.general.node_shape);\n",
       "              parsedNode.border_color = state.manager.rawMetadataParser.getColor(givenNode, \"border_color\", parsedData.general.node_border_color);\n",
       "              parsedNode.border_size = state.manager.rawMetadataParser.getFinitePositiveNumber(givenNode, \"border_size\", parsedData.general.node_border_size);\n",
       "              parsedNode.label_color = state.manager.rawMetadataParser.getColor(givenNode, \"label_color\", parsedData.general.node_label_color);\n",
       "              parsedNode.label_size = state.manager.rawMetadataParser.getFinitePositiveNumber(givenNode, \"label_size\", parsedData.general.node_label_size);\n",
       "              const hover = state.manager.rawMetadataParser.getString(givenNode, \"hover\", parsedData.general.node_hover);\n",
       "              const image = state.manager.rawMetadataParser.getString(givenNode, \"image\", parsedData.general.node_image);\n",
       "              if(image !== \"\"){\n",
       "                parsedNode.image = image;\n",
       "                parsedData.general.contains_node_image = true;\n",
       "              }\n",
       "              if(hover !== \"\"){\n",
       "                parsedNode.hover = hover;\n",
       "                parsedData.general.contains_node_hover = true;\n",
       "              }\n",
       "              const click = state.manager.rawMetadataParser.getString(givenNode, \"click\", parsedData.general.node_click);\n",
       "              if(click !== \"\"){\n",
       "                parsedNode.click = click;\n",
       "                parsedData.general.contains_node_click = true;\n",
       "              }\n",
       "              const x = state.manager.rawMetadataParser.getFiniteNumberOrNull(givenNode, \"x\", parsedData.general.node_x);\n",
       "              const y = state.manager.rawMetadataParser.getFiniteNumberOrNull(givenNode, \"y\", parsedData.general.node_y);\n",
       "              if(x !== null){\n",
       "                parsedNode.fx = x;\n",
       "              }\n",
       "              if(y !== null){\n",
       "                parsedNode.fy = y;\n",
       "              }\n",
       "              // other metadata\n",
       "              const otherMetadata = state.manager.rawMetadataParser.collectOtherMetadata(givenNode, parsedNode, nodeDefinedMetadata);\n",
       "              // feature classification\n",
       "              const parsedNodeProperties = Object.keys(parsedNode);\n",
       "              for(let i=0; i<parsedNodeProperties.length; i++){\n",
       "                const property = parsedNodeProperties[i],\n",
       "                  value = parsedNode[property];\n",
       "                state.manager.propertyClassifier.inspect(parsedNode, property);\n",
       "              }\n",
       "              // variable replacements\n",
       "              if(parsedNode.hover){\n",
       "                parsedNode.hover = state.manager.replaceStringVariables(parsedNode.hover, parsedNode, nodeReplacementVariables);\n",
       "              }\n",
       "              if(parsedNode.click){\n",
       "                parsedNode.click = state.manager.replaceStringVariables(parsedNode.click, parsedNode, nodeReplacementVariables.concat([\"hover\"]));\n",
       "              }\n",
       "              // store the parsed node\n",
       "              parsedData.nodes.push(parsedNode);\n",
       "              // data structure for inserting node object references into edge data\n",
       "              nodeIdToObjectMap.set(parsedNode.id, parsedNode);\n",
       "            }\n",
       "            // Ensure numeric properties (except fx and fy) are stored as numbers and remember their extrema\n",
       "            const numericProperties = Array.from(state.manager.propertyClassifier.numeric).filter(name => name !== \"fx\" && name !== \"fy\"),\n",
       "              nonNumericProperties = Array.from(state.manager.propertyClassifier.nonNumeric),\n",
       "              minima = {},\n",
       "              maxima = {};\n",
       "            for(let i=0; i<numNodes; i++){\n",
       "              const parsedNode = parsedData.nodes[i];\n",
       "              for(let p=0; p<numericProperties.length; p++){\n",
       "                const property = numericProperties[p],\n",
       "                  numericValue = parseFloat(parsedNode[property]);\n",
       "                parsedNode[property] = numericValue;\n",
       "                if(isFinite(numericValue)){\n",
       "                  if(typeof(minima[property]) === \"undefined\" || numericValue < minima[property]){\n",
       "                    minima[property] = numericValue;\n",
       "                  }\n",
       "                  if(typeof(maxima[property]) === \"undefined\" || numericValue > maxima[property]){\n",
       "                    maxima[property] = numericValue;\n",
       "                  }\n",
       "                }\n",
       "              }\n",
       "            }\n",
       "            // Store feature classification and extrema\n",
       "            parsedData.general.node_properties = {\n",
       "              \"node_size_data_sources\": numericProperties,\n",
       "              \"node_label_text_data_sources\": nonNumericProperties.concat(numericProperties),\n",
       "              \"minima\": minima,\n",
       "              \"maxima\": maxima,\n",
       "            }\n",
       "            // Report empty graph\n",
       "            if(!(numNodes > 0)){\n",
       "              console.log(\"Caution: Graph with 0 nodes. The provided data might be in the wrong format.\");\n",
       "            }\n",
       "            return nodeIdToObjectMap;\n",
       "          },\n",
       "\n",
       "          parseEdges(givenData, parsedData, nodeIdToObjectMap){\n",
       "            let numEdges = state.manager.rawDataParser.getArrayLengthOrZero(givenData.edges);\n",
       "            const knownEdgeIds = new Set(),\n",
       "              ignoredEdges = [],\n",
       "              edgeDefinedMetadata = new Set(\n",
       "                [\"color\", \"opacity\", \"size\", \"label_color\", \"label_size\", \"hover\", \"click\"]),\n",
       "              edgeReplacementVariables = [\n",
       "                \"id\", \"label\",\n",
       "                \"color\", \"opacity\", \"size\", \"label_color\", \"label_size\"];\n",
       "            state.manager.propertyClassifier.init();\n",
       "            for(let i=0; i<numEdges; i++){\n",
       "              const givenEdge = givenData.edges[i],\n",
       "                parsedEdge = {},\n",
       "                sourceId = String(givenEdge.source),\n",
       "                targetId = String(givenEdge.target);\n",
       "              // data: source, target, id, multi_edge_counter, label\n",
       "              try{\n",
       "                const sourceObj = nodeIdToObjectMap.get(sourceId);\n",
       "                const targetObj = nodeIdToObjectMap.get(targetId);\n",
       "                if(typeof(sourceObj) === \"undefined\" || typeof(targetObj) === \"undefined\"){\n",
       "                  throw \"Invalid node reference.\";\n",
       "                }\n",
       "                parsedEdge.source = sourceObj;\n",
       "                parsedEdge.target = targetObj;\n",
       "              } catch(e){\n",
       "                const ignoredEdge = {\n",
       "                  index: i,\n",
       "                  source: sourceId,\n",
       "                  target: targetId,\n",
       "                }\n",
       "                ignoredEdges.push(ignoredEdge);\n",
       "                continue;\n",
       "              }\n",
       "              const result = state.manager.rawDataParser.createUniqueEdgeId(sourceId, targetId, knownEdgeIds);\n",
       "              parsedEdge.id = result.id;\n",
       "              parsedEdge.multi_edge_counter = result.count;\n",
       "              parsedEdge.label = state.manager.rawDataParser.getString(givenEdge, \"label\", \"\");\n",
       "              // defined metadata\n",
       "              parsedEdge.color = state.manager.rawMetadataParser.getColor(givenEdge, \"color\", parsedData.general.edge_color);\n",
       "              parsedEdge.opacity = state.manager.rawMetadataParser.getFinitePositiveNumber(givenEdge, \"opacity\", parsedData.general.edge_opacity);\n",
       "              parsedEdge.size = state.manager.rawMetadataParser.getFinitePositiveNumber(givenEdge, \"size\", parsedData.general.edge_size);\n",
       "              parsedEdge.label_color = state.manager.rawMetadataParser.getColor(givenEdge, \"label_color\", parsedData.general.edge_label_color);\n",
       "              parsedEdge.label_size = state.manager.rawMetadataParser.getFinitePositiveNumber(givenEdge, \"label_size\", parsedData.general.edge_label_size);\n",
       "              const hover = state.manager.rawMetadataParser.getString(givenEdge, \"hover\", parsedData.general.edge_hover);\n",
       "              if(hover !== \"\"){\n",
       "                parsedEdge.hover = hover;\n",
       "                parsedData.general.contains_edge_hover = true;\n",
       "              }\n",
       "              const click = state.manager.rawMetadataParser.getString(givenEdge, \"click\", parsedData.general.edge_click);\n",
       "              if(click !== \"\"){\n",
       "                parsedEdge.click = click;\n",
       "                parsedData.general.contains_edge_click = true;\n",
       "              }\n",
       "              // other metadata\n",
       "              const otherMetadata = state.manager.rawMetadataParser.collectOtherMetadata(givenEdge, parsedEdge, edgeDefinedMetadata);\n",
       "              // feature classification\n",
       "              const parsedEdgeProperties = Object.keys(parsedEdge);\n",
       "              for(let i=0; i<parsedEdgeProperties.length; i++){\n",
       "                const property = parsedEdgeProperties[i],\n",
       "                  value = parsedEdge[property];\n",
       "                state.manager.propertyClassifier.inspect(parsedEdge, property);\n",
       "              }\n",
       "              // variable replacements\n",
       "              if(parsedEdge.hover){\n",
       "                parsedEdge.hover = state.manager.replaceStringVariables(parsedEdge.hover, parsedEdge, edgeReplacementVariables);\n",
       "              }\n",
       "              if(parsedEdge.click){\n",
       "                parsedEdge.click = state.manager.replaceStringVariables(parsedEdge.click, parsedEdge, edgeReplacementVariables.concat([\"hover\"]));\n",
       "              }\n",
       "              // store it\n",
       "              parsedData.edges.push(parsedEdge);\n",
       "            }\n",
       "            // Ensure numeric properties are stored as numbers and remember their extrema\n",
       "            const numericProperties = Array.from(state.manager.propertyClassifier.numeric),\n",
       "              nonNumericProperties = Array.from(state.manager.propertyClassifier.nonNumeric),\n",
       "              minima = {},\n",
       "              maxima = {};\n",
       "            numEdges = state.manager.rawDataParser.getArrayLengthOrZero(parsedData.edges);\n",
       "            for(let i=0; i<numEdges; i++){\n",
       "              const parsedEdge = parsedData.edges[i];\n",
       "              for(let p=0; p<numericProperties.length; p++){\n",
       "                const property = numericProperties[p],\n",
       "                  numericValue = parseFloat(parsedEdge[property]);\n",
       "                parsedEdge[property] = numericValue;\n",
       "                if(isFinite(numericValue)){\n",
       "                  if(typeof(minima[property]) === \"undefined\" || numericValue < minima[property]){\n",
       "                    minima[property] = numericValue;\n",
       "                  }\n",
       "                  if(typeof(maxima[property]) === \"undefined\" || numericValue > maxima[property]){\n",
       "                    maxima[property] = numericValue;\n",
       "                  }\n",
       "                }\n",
       "              }\n",
       "            }\n",
       "            // Store feature classification and extrema\n",
       "            parsedData.general.edge_properties = {\n",
       "              \"edge_size_data_sources\": numericProperties.filter(item => item !== \"multi_edge_counter\"),\n",
       "              \"edge_label_text_data_sources\": nonNumericProperties.concat(numericProperties).filter(\n",
       "                item => item !== \"source\" && item !== \"target\" && item !== \"multi_edge_counter\"),\n",
       "              \"minima\": minima,\n",
       "              \"maxima\": maxima,\n",
       "            }\n",
       "            // Report invalid edges\n",
       "            if(ignoredEdges.length > 0){\n",
       "              let message = undefined;\n",
       "              if(ignoredEdges.length == 1){\n",
       "                message = \"Caution: \" + ignoredEdges.length + \" edge was ignored because it \" +\n",
       "                  \"refers to a node that is not part of the node list:\\n\";\n",
       "              } else{\n",
       "                message = \"Caution: \" + ignoredEdges.length + \" edges were ignored because they \" +\n",
       "                  \"refer to a node that is not part of the node list:\\n\";\n",
       "              }\n",
       "              for(let i=0; i<ignoredEdges.length; i++){\n",
       "                const ignoredEdge = ignoredEdges[i];\n",
       "                message += '- Edge with index ' + ignoredEdge.index;\n",
       "                message += ', source \"' + ignoredEdge.source;\n",
       "                message += '\", target \"' + ignoredEdge.target + '\"\\n';\n",
       "                if(i==9){\n",
       "                  message += '...';\n",
       "                  break;\n",
       "                }\n",
       "              }\n",
       "              console.log(message);\n",
       "            }\n",
       "          },\n",
       "\n",
       "          parseChosenData(chosenGraphNumber){\n",
       "            let givenData = state.rawData[chosenGraphNumber],\n",
       "              parsedData = {\n",
       "                general: {},\n",
       "                nodes: [],\n",
       "                edges: [],\n",
       "                adjacency: null,\n",
       "                incidence: null,\n",
       "              };\n",
       "            if(!givenData || givenData === null){\n",
       "              givenData = [];\n",
       "            }\n",
       "            // a) General\n",
       "            state.manager.parseGeneral(givenData, parsedData);\n",
       "            // b) Nodes\n",
       "            const nodeIdToObjectMap = state.manager.parseNodes(givenData, parsedData);\n",
       "            // c) Edges\n",
       "            state.manager.parseEdges(givenData, parsedData, nodeIdToObjectMap);\n",
       "            // Update state\n",
       "            state.parsedData = parsedData;\n",
       "            state.currentGraphParts = {};\n",
       "            // Update UI: show or hide containers\n",
       "            ui.elements.graphContainer.style.display = ui.convert.boolToDisplayStyle(true);\n",
       "            ui.elements.detailsContainer.style.display = ui.convert.boolToDisplayStyle(state.showDetails);\n",
       "            ui.elements.nodeImageMetaControl.style.display = ui.convert.boolToDisplayStyle(parsedData.general.contains_node_image);\n",
       "          },\n",
       "\n",
       "          // 3) Derive state.shownData from state.parsedData\n",
       "          createNodeToAdjacentNodesMap(){\n",
       "            const dataStructure = {\n",
       "              map: new Map(),\n",
       "              add(sourceNode, targetNode){\n",
       "                let adjacentNodes = this.map.get(sourceNode);\n",
       "                if(adjacentNodes){\n",
       "                  adjacentNodes.add(targetNode);\n",
       "                } else{\n",
       "                  adjacentNodes = new Set([targetNode]);\n",
       "                  this.map.set(sourceNode, adjacentNodes);\n",
       "                }\n",
       "              },\n",
       "            }\n",
       "            return dataStructure;\n",
       "          },\n",
       "\n",
       "          createNodeToIncidentEdgesMap(){\n",
       "            const dataStructure = {\n",
       "              map: new Map(),\n",
       "              add(node, edge){\n",
       "                let incidentEdges = this.map.get(node);\n",
       "                if(incidentEdges){\n",
       "                  incidentEdges.add(edge);\n",
       "                } else{\n",
       "                  incidentEdges = new Set([edge]);\n",
       "                  this.map.set(node, incidentEdges);\n",
       "                }\n",
       "              },\n",
       "            }\n",
       "            return dataStructure;\n",
       "          },\n",
       "\n",
       "          hoverTextToHtml(text) {\n",
       "            // https://visjs.github.io/vis-network/examples/network/other/html-in-titles.html\n",
       "            const div = document.createElement(\"div\");\n",
       "            div.innerHTML = text;\n",
       "            return div;\n",
       "          },\n",
       "\n",
       "          prepareShownData(){\n",
       "            const numNodes = state.parsedData.nodes.length,\n",
       "              numEdges = state.parsedData.edges.length;\n",
       "            state.shownData = {\n",
       "              \"general\": null,\n",
       "              \"nodes\": new Array(numNodes),\n",
       "              \"edges\": new Array(numEdges),\n",
       "            }\n",
       "            const nodeIdToObjectMap = new Map(),\n",
       "              nodeSizeNormalizer = state.manager.createNodeSizeNormalizer();\n",
       "            // a) General\n",
       "            state.shownData.general = {\n",
       "              \"background_color\": state.parsedData.general.background_color,\n",
       "              \"arrow_size\": state.parsedData.general.arrow_size,\n",
       "              \"arrow_color\": state.parsedData.general.arrow_color,\n",
       "              \"directed\": state.parsedData.general.directed,\n",
       "            };\n",
       "            // b) Nodes\n",
       "            for(let i=0; i<numNodes; i++){\n",
       "              state.shownData.nodes[i] = {};\n",
       "              const parsedNode = state.parsedData.nodes[i],\n",
       "                shownNode = state.shownData.nodes[i];\n",
       "              shownNode.id = parsedNode.id;\n",
       "              shownNode.label = state.manager.calcSingleNodeLabelText(parsedNode);\n",
       "              shownNode.color = parsedNode.color;\n",
       "              shownNode.opacity = parsedNode.opacity;\n",
       "              shownNode.size = state.manager.calcSingleNodeSize(parsedNode, nodeSizeNormalizer);\n",
       "              shownNode.shape = parsedNode.shape;\n",
       "              shownNode.border_color = parsedNode.border_color;\n",
       "              shownNode.border_size = parsedNode.border_size;\n",
       "              shownNode.label_color = parsedNode.label_color;\n",
       "              shownNode.label_size = state.manager.calcSingleNodeLabelSize(parsedNode);\n",
       "              if(typeof(parsedNode.image) !== \"undefined\"){\n",
       "                shownNode.image = parsedNode.image;\n",
       "              }\n",
       "              if(typeof(parsedNode.hover) !== \"undefined\"){\n",
       "                shownNode.hover = state.manager.hoverTextToHtml(parsedNode.hover);\n",
       "              }\n",
       "              if(typeof(parsedNode.click) !== \"undefined\"){\n",
       "                shownNode.click = parsedNode.click;\n",
       "              }\n",
       "              if(typeof(parsedNode.fx) !== \"undefined\"){\n",
       "                shownNode.fx = parsedNode.fx;\n",
       "              }\n",
       "              if(typeof(parsedNode.fy) !== \"undefined\"){\n",
       "                shownNode.fy = parsedNode.fy;\n",
       "              }\n",
       "              nodeIdToObjectMap.set(shownNode.id, shownNode);\n",
       "              // Derived properties for performance improvement in updateNodePositions\n",
       "              state.manager.calcSingleNodeSizeDerivatives(shownNode);\n",
       "              state.manager.calcSingleNodeBorderSizeDerivatives(shownNode);\n",
       "            }\n",
       "            // c) Edges\n",
       "            const edgeSizeNormalizer = state.manager.createEdgeSizeNormalizer(),\n",
       "              nodeToAdjacentNodesMap = state.manager.createNodeToAdjacentNodesMap(),\n",
       "              nodeToIncidentEdgesMap = state.manager.createNodeToIncidentEdgesMap();\n",
       "            for(let i=0; i<numEdges; i++){\n",
       "              state.shownData.edges[i] = {};\n",
       "              const parsedEdge = state.parsedData.edges[i],\n",
       "                shownEdge = state.shownData.edges[i];\n",
       "              shownEdge.source = nodeIdToObjectMap.get(parsedEdge.source.id);\n",
       "              shownEdge.target = nodeIdToObjectMap.get(parsedEdge.target.id);\n",
       "              shownEdge.id = parsedEdge.id;\n",
       "              shownEdge.label = state.manager.calcSingleEdgeLabelText(parsedEdge);\n",
       "              shownEdge.color = parsedEdge.color;\n",
       "              shownEdge.opacity = parsedEdge.opacity;\n",
       "              shownEdge.size = state.manager.calcSingleEdgeSize(parsedEdge, edgeSizeNormalizer);\n",
       "              shownEdge.label_color = parsedEdge.label_color;\n",
       "              shownEdge.label_size = state.manager.calcSingleEdgeLabelSize(parsedEdge);\n",
       "              if(typeof(parsedEdge.hover) !== \"undefined\"){\n",
       "                shownEdge.hover = state.manager.hoverTextToHtml(parsedEdge.hover);\n",
       "              }\n",
       "              if(typeof(parsedEdge.click) !== \"undefined\"){\n",
       "                shownEdge.click = parsedEdge.click;\n",
       "              }\n",
       "              // Derived properties for performance improvement in updateEdgePositions\n",
       "              shownEdge.multiEdgeCurvatureFactor = state.manager.calcSingleEdgeCurvatureFactor(parsedEdge);\n",
       "              // Data structure for highlighting adjacent nodes and incident edges to this node\n",
       "              nodeToAdjacentNodesMap.add(shownEdge.source, shownEdge.target);\n",
       "              nodeToAdjacentNodesMap.add(shownEdge.target, shownEdge.source);\n",
       "              nodeToIncidentEdgesMap.add(shownEdge.source, shownEdge);\n",
       "              nodeToIncidentEdgesMap.add(shownEdge.target, shownEdge);\n",
       "            }\n",
       "            state.shownData.adjacency = nodeToAdjacentNodesMap;\n",
       "            state.shownData.incidence = nodeToIncidentEdgesMap;\n",
       "          },\n",
       "\n",
       "          calcSingleNodeSize(parsedNode, nodeSizeNormalizer){\n",
       "            const appearanceAdaptionFactor = 0.5;\n",
       "            let nodeSize = nodeSizeNormalizer(parsedNode[state.nodeSizeDataSource]);\n",
       "            if(!isFinite(nodeSize)){\n",
       "              nodeSize = state.parsedData.general.node_size;\n",
       "            }\n",
       "            return nodeSize * state.nodeSizeFactor * appearanceAdaptionFactor;\n",
       "          },\n",
       "\n",
       "          calcSingleNodeSizeDerivatives(shownNode){\n",
       "            shownNode.image_size = shownNode.size / 1.42 * state.nodeImageSizeFactor;\n",
       "          },\n",
       "\n",
       "          calcSingleNodeLabelText(parsedNode){\n",
       "            return String(parsedNode[state.nodeLabelTextDataSource]);\n",
       "          },\n",
       "\n",
       "          calcSingleNodeLabelSize(parsedNode){\n",
       "            return parsedNode.label_size * state.nodeLabelSizeFactor;\n",
       "          },\n",
       "\n",
       "          calcSingleEdgeSize(parsedEdge, edgeSizeNormalizer){\n",
       "            let edgeSize = edgeSizeNormalizer(parsedEdge[state.edgeSizeDataSource]);\n",
       "            if(!isFinite(edgeSize)){\n",
       "              edgeSize = state.parsedData.general.edge_size;\n",
       "            }\n",
       "            return edgeSize * state.edgeSizeFactor;\n",
       "          },\n",
       "\n",
       "          calcSingleEdgeCurvatureFactor(parsedEdge){\n",
       "            // Caution: Currently a single value is used for all edges instead of these here\n",
       "            const appearanceAdaptionFactor = 0.5;\n",
       "            return state.edgeCurvature * parsedEdge.multiEdgeCounter * appearanceAdaptionFactor;\n",
       "          },\n",
       "\n",
       "          calcSingleEdgeLabelText(parsedEdge){\n",
       "            return String(parsedEdge[state.edgeLabelTextDataSource]);\n",
       "          },\n",
       "\n",
       "          calcSingleEdgeLabelSize(parsedEdge){\n",
       "            return parsedEdge.label_size * state.edgeLabelSizeFactor;\n",
       "          },\n",
       "\n",
       "          calcSingleNodeBorderSizeDerivatives(shownNode){\n",
       "            shownNode.border_size_half = shownNode.border_size / 2.0;\n",
       "          },\n",
       "\n",
       "          createNodeSizeNormalizer(){\n",
       "            let normalizer;\n",
       "            if(state.useNodeSizeNormalization){\n",
       "              const dataMin = state.parsedData.general.node_properties.minima[state.nodeSizeDataSource],\n",
       "                dataMax = state.parsedData.general.node_properties.maxima[state.nodeSizeDataSource],\n",
       "                targetMin = state.nodeSizeNormalizationMin,\n",
       "                targetMax = state.nodeSizeNormalizationMax,\n",
       "                dataDiff = dataMax - dataMin,\n",
       "                targetDiff = targetMax - targetMin;\n",
       "              let factor = targetDiff / dataDiff;\n",
       "              if(!isFinite(factor) || factor === null){\n",
       "                factor = 0.0;\n",
       "              }\n",
       "              normalizer = function(val){\n",
       "                return (val - dataMin) * factor + targetMin;\n",
       "              }\n",
       "            } else{\n",
       "              normalizer = function(val){\n",
       "                return val;\n",
       "              }\n",
       "            }\n",
       "            return normalizer;\n",
       "          },\n",
       "\n",
       "          createEdgeSizeNormalizer(){\n",
       "            let normalizer;\n",
       "            if(state.useEdgeSizeNormalization){\n",
       "              const dataMin = state.parsedData.general.edge_properties.minima[state.edgeSizeDataSource],\n",
       "                dataMax = state.parsedData.general.edge_properties.maxima[state.edgeSizeDataSource],\n",
       "                targetMin = state.edgeSizeNormalizationMin,\n",
       "                targetMax = state.edgeSizeNormalizationMax,\n",
       "                dataDiff = dataMax - dataMin,\n",
       "                targetDiff = targetMax - targetMin;\n",
       "              let factor = targetDiff / dataDiff;\n",
       "              if(!isFinite(factor)){\n",
       "                factor = 0.0;\n",
       "              }\n",
       "              normalizer = function(val){\n",
       "                return (val - dataMin) * factor + targetMin;\n",
       "              }\n",
       "            } else{\n",
       "              normalizer = function(val){\n",
       "                return val;\n",
       "              }\n",
       "            }\n",
       "            return normalizer;\n",
       "          },\n",
       "\n",
       "          updateNodeSizes(){\n",
       "            // Data\n",
       "            const nodeSizeNormalizer = state.manager.createNodeSizeNormalizer();\n",
       "            for(let i=0; i<state.parsedData.nodes.length; i++){\n",
       "              const parsedNode = state.parsedData.nodes[i],\n",
       "                shownNode = state.shownData.nodes[i];\n",
       "              shownNode.size = state.manager.calcSingleNodeSize(parsedNode, nodeSizeNormalizer);\n",
       "              state.manager.calcSingleNodeSizeDerivatives(shownNode);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateNodeSizes();\n",
       "          },\n",
       "\n",
       "          updateNodeLabelTexts(){\n",
       "            // Data\n",
       "            for(let i=0; i<state.parsedData.nodes.length; i++){\n",
       "              const parsedNode = state.parsedData.nodes[i],\n",
       "                shownNode = state.shownData.nodes[i];\n",
       "              shownNode.label = state.manager.calcSingleNodeLabelText(parsedNode);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateNodeLabels();\n",
       "          },\n",
       "\n",
       "          updateNodeLabelSizes(){\n",
       "            // Data\n",
       "            for(let i=0; i<state.parsedData.nodes.length; i++){\n",
       "              const parsedNode = state.parsedData.nodes[i],\n",
       "                shownNode = state.shownData.nodes[i];\n",
       "              shownNode.label_size = state.manager.calcSingleNodeLabelSize(parsedNode);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateNodeLabels();\n",
       "          },\n",
       "\n",
       "          updateNodeImages(){\n",
       "            // Data\n",
       "            for(let i=0; i<state.parsedData.nodes.length; i++){\n",
       "              const parsedNode = state.parsedData.nodes[i],\n",
       "                shownNode = state.shownData.nodes[i];\n",
       "              state.manager.calcSingleNodeSizeDerivatives(shownNode);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateNodeImages();\n",
       "          },\n",
       "\n",
       "          updateEdgeSizes(){\n",
       "            // Data\n",
       "            const edgeSizeNormalizer = state.manager.createEdgeSizeNormalizer();\n",
       "            for(let i=0; i<state.parsedData.edges.length; i++){\n",
       "              const parsedEdge = state.parsedData.edges[i],\n",
       "                shownEdge = state.shownData.edges[i];\n",
       "              shownEdge.size = state.manager.calcSingleEdgeSize(parsedEdge, edgeSizeNormalizer);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateEdgeSizes();\n",
       "          },\n",
       "\n",
       "          updateEdgeCurvatures(){\n",
       "            // Data\n",
       "            for(let i=0; i<state.parsedData.edges.length; i++){\n",
       "              const parsedEdge = state.parsedData.edges[i],\n",
       "                shownEdge = state.shownData.edges[i];\n",
       "              shownEdge.multiEdgeCurvatureFactor = state.manager.calcSingleEdgeCurvatureFactor(parsedEdge);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateEdgeCurvatures();\n",
       "          },\n",
       "\n",
       "          updateEdgeLabelTexts(){\n",
       "            // Data\n",
       "            for(let i=0; i<state.parsedData.edges.length; i++){\n",
       "              const parsedEdge = state.parsedData.edges[i],\n",
       "                shownEdge = state.shownData.edges[i];\n",
       "              shownEdge.label = state.manager.calcSingleEdgeLabelText(parsedEdge);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateEdgeLabels();\n",
       "          },\n",
       "\n",
       "          updateEdgeLabelSizes(){\n",
       "            // Data\n",
       "            for(let i=0; i<state.parsedData.edges.length; i++){\n",
       "              const parsedEdge = state.parsedData.edges[i],\n",
       "                shownEdge = state.shownData.edges[i];\n",
       "              shownEdge.label_size = state.manager.calcSingleEdgeLabelSize(parsedEdge);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateEdgeLabels();\n",
       "          },\n",
       "        }\n",
       "      }\n",
       "\n",
       "      const ui = {\n",
       "        symbols:{\n",
       "          // Choice of symbols is influenced by their appearance in different browsers\n",
       "          // Alternatives: \"▼\", \"▽\", \"▾\" / \"▲\", \"△\", \"▴\" / \"▶\", \"▷\", \"▸\" / \"◀\", \"◁\", \"◂\"\n",
       "          // ▶ is rendered strangely on some mobile phone browsers, ▸ remains normal\n",
       "          detailsShown: \"▾\",\n",
       "          detailsHidden: \"▴\",\n",
       "          menuShown: \"▸\",\n",
       "          menuHidden: \"◂\",\n",
       "          menuItemActive: \"▸\",\n",
       "          menuItemInactive: \"▾\",\n",
       "        },\n",
       "\n",
       "        elements:{\n",
       "          // Containers\n",
       "          mainContainer: document.getElementById(\"iX0kYNYWSSTeQTImz-main-div\"),\n",
       "          tooltipContainer: document.getElementById(\"iX0kYNYWSSTeQTImz-tooltip-div\"),\n",
       "          leftContainer: document.getElementById(\"iX0kYNYWSSTeQTImz-left-div\"),\n",
       "          rightContainer: document.getElementById(\"iX0kYNYWSSTeQTImz-right-div\"),\n",
       "          graphContainer: document.getElementById(\"iX0kYNYWSSTeQTImz-graph-div\"),\n",
       "          detailsContainer: document.getElementById(\"iX0kYNYWSSTeQTImz-details-div\"),\n",
       "          detailsHead: document.getElementById(\"iX0kYNYWSSTeQTImz-details-head\"),\n",
       "          detailsBody: document.getElementById(\"iX0kYNYWSSTeQTImz-details-body\"),\n",
       "          // Data sources\n",
       "          dataHead: document.getElementById(\"iX0kYNYWSSTeQTImz-data-head\"),\n",
       "          dataBody: document.getElementById(\"iX0kYNYWSSTeQTImz-data-body\"),\n",
       "          graphSelectionContainer: document.getElementById(\"iX0kYNYWSSTeQTImz-graph-select-div\"),\n",
       "          graphSelection: document.getElementById(\"iX0kYNYWSSTeQTImz-graph-select\"),\n",
       "          nodeSizeDataSourceSelect: document.getElementById(\"iX0kYNYWSSTeQTImz-node-size-data-source-select\"),\n",
       "          nodeSizeNormalizationCheckbox: document.getElementById(\"iX0kYNYWSSTeQTImz-node-size-normalization-checkbox\"),\n",
       "          nodeSizeNormalizationContainer: document.getElementById(\"iX0kYNYWSSTeQTImz-node-size-norm-div\"),\n",
       "          nodeSizeNormalizationMinText: document.getElementById(\"iX0kYNYWSSTeQTImz-node-size-normalization-min-text\"),\n",
       "          nodeSizeNormalizationMinSlider: document.getElementById(\"iX0kYNYWSSTeQTImz-node-size-normalization-min-slider\"),\n",
       "          nodeSizeNormalizationMaxText: document.getElementById(\"iX0kYNYWSSTeQTImz-node-size-normalization-max-text\"),\n",
       "          nodeSizeNormalizationMaxSlider: document.getElementById(\"iX0kYNYWSSTeQTImz-node-size-normalization-max-slider\"),\n",
       "          edgeSizeDataSourceSelect: document.getElementById(\"iX0kYNYWSSTeQTImz-edge-size-data-source-select\"),\n",
       "          edgeSizeNormalizationCheckbox: document.getElementById(\"iX0kYNYWSSTeQTImz-edge-size-normalization-checkbox\"),\n",
       "          edgeSizeNormalizationContainer: document.getElementById(\"iX0kYNYWSSTeQTImz-edge-size-norm-div\"),\n",
       "          edgeSizeNormalizationMinText: document.getElementById(\"iX0kYNYWSSTeQTImz-edge-size-normalization-min-text\"),\n",
       "          edgeSizeNormalizationMinSlider: document.getElementById(\"iX0kYNYWSSTeQTImz-edge-size-normalization-min-slider\"),\n",
       "          edgeSizeNormalizationMaxText: document.getElementById(\"iX0kYNYWSSTeQTImz-edge-size-normalization-max-text\"),\n",
       "          edgeSizeNormalizationMaxSlider: document.getElementById(\"iX0kYNYWSSTeQTImz-edge-size-normalization-max-slider\"),\n",
       "          // General\n",
       "          generalHead: document.getElementById(\"iX0kYNYWSSTeQTImz-general-head\"),\n",
       "          generalBody: document.getElementById(\"iX0kYNYWSSTeQTImz-general-body\"),\n",
       "          resetButton: document.getElementById(\"iX0kYNYWSSTeQTImz-reset\"),\n",
       "          fullscreenButton: document.getElementById(\"iX0kYNYWSSTeQTImz-fullscreen-button\"),\n",
       "          svgExportButton: document.getElementById(\"iX0kYNYWSSTeQTImz-svg\"),\n",
       "          pngExportButton: document.getElementById(\"iX0kYNYWSSTeQTImz-png\"),\n",
       "          jpgExportButton: document.getElementById(\"iX0kYNYWSSTeQTImz-jpg\"),\n",
       "          // Nodes\n",
       "          nodeHead: document.getElementById(\"iX0kYNYWSSTeQTImz-node-head\"),\n",
       "          nodeBody: document.getElementById(\"iX0kYNYWSSTeQTImz-node-body\"),\n",
       "          nodeCheckbox: document.getElementById(\"iX0kYNYWSSTeQTImz-node-checkbox\"),\n",
       "          nodeSizeFactorText: document.getElementById(\"iX0kYNYWSSTeQTImz-node-size-factor-text\"),\n",
       "          nodeSizeFactorSlider: document.getElementById(\"iX0kYNYWSSTeQTImz-node-size-factor-slider\"),\n",
       "          nodeDragFixCheckbox: document.getElementById(\"iX0kYNYWSSTeQTImz-node-drag-fix-checkbox\"),\n",
       "          nodeHoverNeighborhoodCheckbox: document.getElementById(\"iX0kYNYWSSTeQTImz-node-hover-neighborhood-checkbox\"),\n",
       "          nodeHoverTooltipCheckbox: document.getElementById(\"iX0kYNYWSSTeQTImz-node-hover-tooltip-checkbox\"),\n",
       "          nodeReleaseButton: document.getElementById(\"iX0kYNYWSSTeQTImz-node-release-button\"),\n",
       "          // Node images\n",
       "          nodeImageHead: document.getElementById(\"iX0kYNYWSSTeQTImz-node-image-head\"),\n",
       "          nodeImageBody: document.getElementById(\"iX0kYNYWSSTeQTImz-node-image-body\"),\n",
       "          nodeImageCheckbox: document.getElementById(\"iX0kYNYWSSTeQTImz-node-image-checkbox\"),\n",
       "          nodeImageMetaControl: document.getElementById(\"iX0kYNYWSSTeQTImz-node-image-meta-control\"),\n",
       "          nodeImageSizeFactorText: document.getElementById(\"iX0kYNYWSSTeQTImz-node-image-size-factor-text\"),\n",
       "          nodeImageSizeFactorSlider: document.getElementById(\"iX0kYNYWSSTeQTImz-node-image-size-factor-slider\"),\n",
       "          // Node labels\n",
       "          nodeLabelHead: document.getElementById(\"iX0kYNYWSSTeQTImz-node-label-head\"),\n",
       "          nodeLabelBody: document.getElementById(\"iX0kYNYWSSTeQTImz-node-label-body\"),\n",
       "          nodeLabelCheckbox: document.getElementById(\"iX0kYNYWSSTeQTImz-node-label-checkbox\"),\n",
       "          nodeLabelBorderCheckbox: document.getElementById(\"iX0kYNYWSSTeQTImz-node-label-border-checkbox\"),\n",
       "          nodeLabelTextDataSourceSelect: document.getElementById(\"iX0kYNYWSSTeQTImz-node-label-data-source-select\"),\n",
       "          nodeLabelSizeFactorText: document.getElementById(\"iX0kYNYWSSTeQTImz-node-label-size-factor-text\"),\n",
       "          nodeLabelSizeFactorSlider: document.getElementById(\"iX0kYNYWSSTeQTImz-node-label-size-factor-slider\"),\n",
       "          nodeLabelRotationText: document.getElementById(\"iX0kYNYWSSTeQTImz-node-label-rotation-text\"),\n",
       "          nodeLabelRotationSlider: document.getElementById(\"iX0kYNYWSSTeQTImz-node-label-rotation-slider\"),\n",
       "          // Edges\n",
       "          edgeHead: document.getElementById(\"iX0kYNYWSSTeQTImz-edge-head\"),\n",
       "          edgeBody: document.getElementById(\"iX0kYNYWSSTeQTImz-edge-body\"),\n",
       "          edgeCheckbox: document.getElementById(\"iX0kYNYWSSTeQTImz-edge-checkbox\"),\n",
       "          edgeSizeFactorText: document.getElementById(\"iX0kYNYWSSTeQTImz-edge-size-factor-text\"),\n",
       "          edgeSizeFactorSlider: document.getElementById(\"iX0kYNYWSSTeQTImz-edge-size-factor-slider\"),\n",
       "          edgeCurvatureText: document.getElementById(\"iX0kYNYWSSTeQTImz-edge-curvature-text\"),\n",
       "          edgeCurvatureSlider: document.getElementById(\"iX0kYNYWSSTeQTImz-edge-curvature-slider\"),\n",
       "          edgeHoverTooltipCheckbox: document.getElementById(\"iX0kYNYWSSTeQTImz-edge-hover-tooltip-checkbox\"),\n",
       "          // Edge labels\n",
       "          edgeLabelHead: document.getElementById(\"iX0kYNYWSSTeQTImz-edge-label-head\"),\n",
       "          edgeLabelBody: document.getElementById(\"iX0kYNYWSSTeQTImz-edge-label-body\"),\n",
       "          edgeLabelCheckbox: document.getElementById(\"iX0kYNYWSSTeQTImz-edge-label-checkbox\"),\n",
       "          edgeLabelBorderCheckbox: document.getElementById(\"iX0kYNYWSSTeQTImz-edge-label-border-checkbox\"),\n",
       "          edgeLabelTextDataSourceSelect: document.getElementById(\"iX0kYNYWSSTeQTImz-edge-label-data-source-select\"),\n",
       "          edgeLabelSizeFactorText: document.getElementById(\"iX0kYNYWSSTeQTImz-edge-label-size-factor-text\"),\n",
       "          edgeLabelSizeFactorSlider: document.getElementById(\"iX0kYNYWSSTeQTImz-edge-label-size-factor-slider\"),\n",
       "          edgeLabelRotationText: document.getElementById(\"iX0kYNYWSSTeQTImz-edge-label-rotation-text\"),\n",
       "          edgeLabelRotationSlider: document.getElementById(\"iX0kYNYWSSTeQTImz-edge-label-rotation-slider\"),\n",
       "          // Layout algorithm\n",
       "          layoutAlgorithmHead: document.getElementById(\"iX0kYNYWSSTeQTImz-layout-algorithm-head\"),\n",
       "          layoutAlgorithmBody: document.getElementById(\"iX0kYNYWSSTeQTImz-layout-algorithm-body\"),\n",
       "          simulationCheckbox: document.getElementById(\"iX0kYNYWSSTeQTImz-simulation-active-checkbox\"),\n",
       "          layoutAlgorithmSelection: document.getElementById(\"iX0kYNYWSSTeQTImz-layout-algorithm-select\"),\n",
       "          centralGravitySlider: document.getElementById(\"iX0kYNYWSSTeQTImz-central-gravity-slider\"),\n",
       "          centralGravityText: document.getElementById(\"iX0kYNYWSSTeQTImz-central-gravity-text\"),\n",
       "          springLengthSlider: document.getElementById(\"iX0kYNYWSSTeQTImz-spring-length-slider\"),\n",
       "          springLengthText: document.getElementById(\"iX0kYNYWSSTeQTImz-spring-length-text\"),\n",
       "          springConstantSlider: document.getElementById(\"iX0kYNYWSSTeQTImz-spring-constant-slider\"),\n",
       "          springConstantText: document.getElementById(\"iX0kYNYWSSTeQTImz-spring-constant-text\"),\n",
       "          gravitationalConstantContainer: document.getElementById(\"iX0kYNYWSSTeQTImz-gravitational-constant-div\"),\n",
       "          gravitationalConstantSlider: document.getElementById(\"iX0kYNYWSSTeQTImz-gravitational-constant-slider\"),\n",
       "          gravitationalConstantText: document.getElementById(\"iX0kYNYWSSTeQTImz-gravitational-constant-text\"),\n",
       "          avoidOverlapContainer: document.getElementById(\"iX0kYNYWSSTeQTImz-avoid-overlap-div\"),\n",
       "          avoidOverlapSlider: document.getElementById(\"iX0kYNYWSSTeQTImz-avoid-overlap-slider\"),\n",
       "          avoidOverlapText: document.getElementById(\"iX0kYNYWSSTeQTImz-avoid-overlap-text\"),\n",
       "        },\n",
       "\n",
       "        composites:{\n",
       "          responsiveContainer:{\n",
       "            init(){\n",
       "              // Delete all contained items (relevant only for reset, not first creation)\n",
       "              ui.deleteChildElements(ui.elements.graphContainer);\n",
       "              ui.deleteChildElements(ui.elements.detailsBody);\n",
       "              // Menu\n",
       "              if(state.showMenu){\n",
       "                ui.composites.menu.show();\n",
       "              } else{\n",
       "                ui.composites.menu.hide();\n",
       "              }\n",
       "              // Details\n",
       "              if(state.showDetails){\n",
       "                ui.composites.details.show(true);\n",
       "              } else{\n",
       "                ui.composites.details.hide(true);\n",
       "              }\n",
       "              // Divs\n",
       "              ui.composites.responsiveContainer.setInnerHeights();\n",
       "              ui.composites.responsiveContainer.setOuterHeights();\n",
       "              ui.composites.responsiveContainer.getInnerWidths();\n",
       "            },\n",
       "\n",
       "            getInnerWidths(){\n",
       "              state.graphContainerWidth = parseInt(ui.elements.graphContainer.clientWidth);\n",
       "              state.detailsContainerWidth = parseInt(ui.elements.detailsContainer.clientWidth);\n",
       "            },\n",
       "\n",
       "            getInnerHeights(){\n",
       "              state.graphContainerHeight = parseInt(ui.elements.graphContainer.clientHeight);\n",
       "              if(state.showDetails){\n",
       "                state.detailsContainerHeight = parseInt(ui.elements.detailsContainer.clientHeight);\n",
       "              }\n",
       "            },\n",
       "\n",
       "            setInnerHeights(){\n",
       "              ui.elements.graphContainer.style.height = state.graphContainerHeight + \"px\";\n",
       "              ui.elements.detailsContainer.style.height = state.detailsContainerHeight + \"px\";\n",
       "            },\n",
       "\n",
       "            setOuterHeights(){\n",
       "              ui.elements.mainContainer.style.height = ui.elements.leftContainer.offsetHeight + \"px\";\n",
       "            },\n",
       "\n",
       "            getSizes(){\n",
       "              ui.composites.responsiveContainer.getInnerWidths();\n",
       "              ui.composites.responsiveContainer.getInnerHeights();\n",
       "            },\n",
       "\n",
       "            setSizes(){\n",
       "              ui.composites.responsiveContainer.setInnerHeights();\n",
       "              ui.composites.responsiveContainer.setOuterHeights();\n",
       "            },\n",
       "\n",
       "            adaptToResize(){\n",
       "              ui.composites.responsiveContainer.getSizes();\n",
       "              ui.composites.responsiveContainer.setSizes();\n",
       "            },\n",
       "\n",
       "            adaptToFullscreen(){\n",
       "              ui.composites.responsiveContainer.getSizes();\n",
       "              if(document.fullscreenElement){\n",
       "                // On entering fullscreen, remember the current container heights\n",
       "                state.beforeFullscreenGraphContainerHeight = state.graphContainerHeight;\n",
       "                state.beforeFullscreenDetailsContainerHeight = state.detailsContainerHeight;\n",
       "                // and then adapt them to maximum height possible in full screen mode\n",
       "                function calculateFullscreenMaxGraphHeight(){\n",
       "                  let outerHeight = null;\n",
       "                  try{\n",
       "                    const mainDivComputedStyle = window.getComputedStyle(ui.elements.mainContainer),\n",
       "                      graphDivComputedStyle = window.getComputedStyle(ui.elements.graphContainer),\n",
       "                      paddingTop = parseFloat(mainDivComputedStyle.paddingTop),\n",
       "                      borderTop = parseFloat(graphDivComputedStyle.borderTopWidth),\n",
       "                      borderBottom = parseFloat(graphDivComputedStyle.borderBottomWidth),\n",
       "                      paddingBottom = parseFloat(mainDivComputedStyle.paddingBottom);\n",
       "                    outerHeight = paddingTop + borderTop + borderBottom + paddingBottom;\n",
       "                    if(!isFinite(outerHeight) || outerHeight === null){\n",
       "                      throw \"Invalid number\";\n",
       "                    }\n",
       "                  } catch(e){\n",
       "                    // Hard coded fallback, depends on CSS of containers (1px borders, 6px padding)\n",
       "                    outerHeight = 1 + 3 + 3 + 1;\n",
       "                  }\n",
       "                  let graphHeight = screen.height - outerHeight;\n",
       "                  if(state.showDetails){\n",
       "                    graphHeight -= ui.composites.details.calculateHeightDifference();\n",
       "                  }\n",
       "                  return graphHeight;\n",
       "                }\n",
       "                state.graphContainerHeight = calculateFullscreenMaxGraphHeight();\n",
       "              } else{\n",
       "                // On leaving fullscreen, set container heights back to remembered values\n",
       "                state.graphContainerHeight = state.beforeFullscreenGraphContainerHeight;\n",
       "                state.detailsContainerHeight = state.beforeFullscreenDetailsContainerHeight;\n",
       "              }\n",
       "              ui.composites.responsiveContainer.setSizes();\n",
       "            },\n",
       "          },\n",
       "\n",
       "          menu:{\n",
       "            show(){\n",
       "              ui.elements.leftContainer.style.width = \"80%\";\n",
       "              ui.elements.rightContainer.style.width = \"20%\";\n",
       "              ui.elements.rightContainer.style.display = \"block\";\n",
       "            },\n",
       "\n",
       "            hide(){\n",
       "              ui.elements.leftContainer.style.width = \"100%\";\n",
       "              ui.elements.rightContainer.style.width = \"0%\";\n",
       "              ui.elements.rightContainer.style.display = \"none\";\n",
       "            },\n",
       "\n",
       "            toggle(){\n",
       "              // Update menu button\n",
       "              const div = ui.elements.menuToggleDiv;\n",
       "              state.showMenu = !state.showMenu;\n",
       "              if(state.showMenu){\n",
       "                div.innerText = ui.symbols.menuShown;\n",
       "                ui.composites.menu.show();\n",
       "              } else {\n",
       "                div.innerHTML = ui.symbols.menuHidden;\n",
       "                ui.composites.menu.hide();\n",
       "              }\n",
       "\n",
       "              // Update rest of UI\n",
       "              ui.composites.responsiveContainer.getInnerWidths();\n",
       "              ui.composites.responsiveContainer.getInnerHeights();\n",
       "              ui.composites.responsiveContainer.setOuterHeights();\n",
       "              ui.composites.graph.updateGraphDrawingArea();\n",
       "            },\n",
       "\n",
       "            setItem(keyElement, valElement, toActive){\n",
       "              const currentText = keyElement.innerHTML;\n",
       "              let sliceStart = 0;\n",
       "              if(currentText.startsWith(ui.symbols.menuItemActive)){\n",
       "                sliceStart = ui.symbols.menuItemActive.length;\n",
       "              } else if (currentText.startsWith(ui.symbols.menuItemInactive)){\n",
       "                sliceStart = ui.symbols.menuItemInactive.length;\n",
       "              }\n",
       "              if(toActive){\n",
       "                keyElement.innerHTML = ui.symbols.menuItemActive + currentText.slice(sliceStart);\n",
       "                keyElement.style.backgroundColor = \"#f5f5f5\";\n",
       "                keyElement.style.color = \"black\";\n",
       "                keyElement.style.borderColor = \"#999\";\n",
       "                keyElement.style.boxShadow = \"0px 0px 3px rgba(0, 0, 0, 0.35)\";\n",
       "                valElement.style.display = \"block\";\n",
       "              } else {\n",
       "                keyElement.innerHTML = ui.symbols.menuItemInactive + currentText.slice(sliceStart);\n",
       "                keyElement.style.backgroundColor = \"white\";\n",
       "                keyElement.style.color = \"#222\";\n",
       "                keyElement.style.borderColor = \"#ccc\";\n",
       "                keyElement.style.boxShadow = \"0px 0px 3px rgba(0, 0, 0, 0.2)\";\n",
       "                valElement.style.display = \"none\";\n",
       "              }\n",
       "            },\n",
       "\n",
       "            toggleItem(keyElement, valElement){\n",
       "              const toActive = !(valElement.style.display !== \"none\");\n",
       "              ui.composites.menu.setItem(keyElement, valElement, toActive);\n",
       "            },\n",
       "          },\n",
       "\n",
       "          details:{\n",
       "            calculateHeightDifference(){\n",
       "              let outerHeight = null;\n",
       "              try{\n",
       "                const graphContainerComputedStyle = window.getComputedStyle(ui.elements.graphContainer),\n",
       "                  detailsContainerComputedStyle = window.getComputedStyle(ui.elements.detailsContainer),\n",
       "                  border1 = parseFloat(graphContainerComputedStyle.borderBottomWidth),\n",
       "                  margin = parseFloat(detailsContainerComputedStyle.marginTop),\n",
       "                  border2 = parseFloat(detailsContainerComputedStyle.borderTopWidth);\n",
       "                outerHeight = border1 + margin + border2;\n",
       "                if(!isFinite(outerHeight) || outerHeight === null){\n",
       "                  throw \"Invalid number\";\n",
       "                }\n",
       "              } catch(e){\n",
       "                // Hard coded fallback, depends on CSS of containers (1px borders, 5px margin)\n",
       "                outerHeight = 7.0;\n",
       "              }\n",
       "              return state.detailsContainerHeight + outerHeight\n",
       "            },\n",
       "\n",
       "            show(init=false){\n",
       "              // Visibility\n",
       "              ui.elements.detailsContainer.style.display = \"block\";\n",
       "              if(!init){\n",
       "                // Height\n",
       "                const heightDiff = ui.composites.details.calculateHeightDifference();\n",
       "                state.graphContainerHeight -= heightDiff;\n",
       "                if(state.graphContainerHeight < 70){\n",
       "                  state.graphContainerHeight = 70;\n",
       "                }\n",
       "                // Update rest of UI\n",
       "                ui.composites.responsiveContainer.setSizes();\n",
       "                ui.composites.graph.updateGraphDrawingArea();\n",
       "              }\n",
       "            },\n",
       "\n",
       "            hide(init=false){\n",
       "              // Visibility\n",
       "              ui.elements.detailsContainer.style.display = \"none\";\n",
       "              if(!init){\n",
       "                // Height\n",
       "                const heightDiff = ui.composites.details.calculateHeightDifference();\n",
       "                state.graphContainerHeight += heightDiff;\n",
       "                // Update rest of UI\n",
       "                ui.composites.responsiveContainer.setSizes();\n",
       "                ui.composites.graph.updateGraphDrawingArea();\n",
       "              }\n",
       "            },\n",
       "\n",
       "            toggle(){\n",
       "              // Update details button\n",
       "              const toggleDiv = ui.elements.detailsToggleDiv;\n",
       "              state.showDetails = !state.showDetails;\n",
       "              if(state.showDetails){\n",
       "                toggleDiv.innerText = ui.symbols.detailsShown;\n",
       "                ui.composites.details.show();\n",
       "              } else {\n",
       "                toggleDiv.innerHTML = ui.symbols.detailsHidden;\n",
       "                ui.composites.details.hide();\n",
       "              }\n",
       "            },\n",
       "          },\n",
       "\n",
       "          download:{\n",
       "            png(filename){\n",
       "              ui.composites.download._rasterImage(filename, \"png\");\n",
       "            },\n",
       "\n",
       "            jpg(filename){\n",
       "              ui.composites.download._rasterImage(filename, \"jpeg\");\n",
       "            },\n",
       "\n",
       "            _rasterImage(filename, format){\n",
       "              const canvas = ui.elements.graphContainer.getElementsByTagName(\"canvas\")[0],\n",
       "                mimeType = \"image/\" + format;\n",
       "              function finishedBlobCallback(blob){\n",
       "                ui.composites.download._blobToFileDownload(blob, filename);\n",
       "              }\n",
       "              try{\n",
       "                // Blob to overcome size limitations for data URLs (e.g. 4MB in Chrome)\n",
       "                canvas.toBlob(finishedBlobCallback, mimeType, 1.0);\n",
       "              } catch(e){\n",
       "                if(e.name === \"SecurityError\"){\n",
       "                  alert(\"Image creation failed. Some images within the nodes of the graph can \" +\n",
       "                      \"not be fetched from within JavaScript due to security settings of the \" +\n",
       "                      \"server that provides the images.\");\n",
       "                } else{\n",
       "                  throw e;\n",
       "                }\n",
       "              }\n",
       "            },\n",
       "\n",
       "            _blobToFileDownload(blob, filename){\n",
       "              const url = URL.createObjectURL(blob),\n",
       "                a = document.createElement(\"a\");\n",
       "              function handleClick(){\n",
       "                setTimeout(function(){\n",
       "                  // Long waiting time before removal for slow devices like mobile phones\n",
       "                  URL.revokeObjectURL(url);\n",
       "                  this.removeEventListener(\"click\", handleClick);\n",
       "                }, 20000);\n",
       "              };\n",
       "              document.body.appendChild(a);\n",
       "              a.href = url;\n",
       "              a.download = filename;\n",
       "              a.addEventListener(\"click\", handleClick, false);\n",
       "              a.click();\n",
       "              document.body.removeChild(a);\n",
       "            },\n",
       "          },\n",
       "\n",
       "          selection(element, optionList, valueList=undefined) {\n",
       "            while(element.hasChildNodes()){\n",
       "              element.removeChild(element.firstChild);\n",
       "            }\n",
       "            for(let i=0; i<optionList.length; i++){\n",
       "              let text = optionList[i];\n",
       "              let value = text;\n",
       "              if(valueList){\n",
       "                value = valueList[i];\n",
       "              }\n",
       "              let opt = document.createElement(\"option\");\n",
       "              opt.appendChild(document.createTextNode(text));\n",
       "              opt.value = value;\n",
       "              element.appendChild(opt);\n",
       "            }\n",
       "          },\n",
       "\n",
       "          tooltip:{\n",
       "            show(xShift=null, yShift=null){\n",
       "              if(isFinite(xShift) && xShift !== null){\n",
       "                ui.elements.tooltipContainer.style.left =  parseInt(xShift) + \"px\";\n",
       "              }\n",
       "              if(isFinite(yShift) && yShift !== null){\n",
       "                ui.elements.tooltipContainer.style.top = parseInt(yShift) + \"px\";\n",
       "              }\n",
       "              ui.elements.tooltipContainer.style.transition = \"visibility 0s, opacity 0.1s\";\n",
       "              ui.elements.tooltipContainer.style.visibility = \"visible\";\n",
       "              ui.elements.tooltipContainer.style.opacity = 1.0;\n",
       "            },\n",
       "\n",
       "            hide(){\n",
       "              ui.elements.tooltipContainer.style.transition = \"visibility 0.3s, opacity 0.3s ease-in\";\n",
       "              ui.elements.tooltipContainer.style.visibility = \"hidden\";\n",
       "              ui.elements.tooltipContainer.style.opacity = 0.0;\n",
       "            },\n",
       "          },\n",
       "\n",
       "          progressBar:{\n",
       "            create(){\n",
       "              // Main container\n",
       "              this.mainContainer = document.createElement(\"div\");\n",
       "              this.mainContainer.id = \"iX0kYNYWSSTeQTImz-progress-container\";\n",
       "              this.mainContainer.style.backgroundColor = state.shownData.general.background_color;\n",
       "              ui.elements.graphContainer.style.backgroundColor = state.shownData.general.background_color;\n",
       "              // Text container\n",
       "              const numNodes = state.parsedData.nodes.length;\n",
       "              this.textContainer = document.createElement(\"div\");\n",
       "              this.textContainer.innerText = \"Large graph with \" + numNodes + \" nodes. Calculating an initial layout before visualizing it.\";\n",
       "              this.textContainer.style.textAlign = \"center\";\n",
       "              // Bar container\n",
       "              this.outerBarContainer = document.createElement(\"div\");\n",
       "              this.outerBarContainer.style.border = \"1px solid black\";\n",
       "              this.outerBarContainer.style.borderRadius = \"4px\";\n",
       "              this.outerBarContainer.style.marginTop = \"1ex\";\n",
       "              this.outerBarContainer.style.padding = \"1px\";\n",
       "              this.innerBarContainer = document.createElement(\"div\");\n",
       "              this.innerBarContainer.style.backgroundColor = \"black\";\n",
       "              this.innerBarContainer.style.width = \"0%\";\n",
       "              this.innerBarContainer.style.height = \"8px\";\n",
       "              this.innerBarContainer.style.borderRadius = \"3px\";\n",
       "              // Add them to DOM\n",
       "              this.outerBarContainer.appendChild(this.innerBarContainer);\n",
       "              this.mainContainer.appendChild(this.textContainer);\n",
       "              this.mainContainer.appendChild(this.outerBarContainer);\n",
       "              ui.elements.graphContainer.appendChild(this.mainContainer);\n",
       "            },\n",
       "\n",
       "            update(percentage){\n",
       "              this.innerBarContainer.style.width = percentage + \"%\";\n",
       "            },\n",
       "\n",
       "            remove(){\n",
       "              ui.elements.graphContainer.removeChild(this.mainContainer);\n",
       "            }\n",
       "          },\n",
       "\n",
       "          graph:{\n",
       "            createGraph(){\n",
       "              // Remove existing elements\n",
       "              ui.deleteChildElements(ui.elements.graphContainer);\n",
       "\n",
       "              // Create new elements\n",
       "              // I) Set graph options\n",
       "              // a) Nodes: https://visjs.github.io/vis-network/docs/network/nodes.html\n",
       "              const data = state.shownData,\n",
       "                visNodes = [];\n",
       "              let graphContainsFixedPositions = false;\n",
       "              for(let i=0; i<data.nodes.length; i++){\n",
       "                const node = data.nodes[i];\n",
       "                let visNode = {\n",
       "                  id: node.id,\n",
       "                  shape: node.shape,\n",
       "                  borderWidth: node.border_size,\n",
       "                  color: {\n",
       "                    background: node.color,\n",
       "                    border: node.border_color,\n",
       "                  },\n",
       "                }\n",
       "                // - Node labels\n",
       "                if(state.showNodeLabels){\n",
       "                  if(typeof(node.label) !== \"undefined\"){\n",
       "                    visNode.label = node.label;\n",
       "                    visNode.font = {\n",
       "                      size: node.label_size,\n",
       "                      color: node.label_color,\n",
       "                      strokeWidth: (state.showNodeLabelBorders ? 1.2 : 0.0),\n",
       "                      strokeColor: data.general.background_color,\n",
       "                    }\n",
       "                  }\n",
       "                }\n",
       "                // - Nodes hidden/shown (\"hidden\" property hides entire graph, using size=0 instead)\n",
       "                if(state.showNodes || (typeof(node.image) !== \"undefined\" && state.showNodeImages)){\n",
       "                  visNode.size = node.size;\n",
       "                } else {\n",
       "                  visNode.size = 0.0;\n",
       "                }\n",
       "                // - Node images\n",
       "                if(typeof(node.image) !== \"undefined\"){\n",
       "                  if(state.showNodeImages){\n",
       "                    visNode.shape = \"image\";\n",
       "                    visNode.image = node.image;\n",
       "                    visNode.size = node.image_size;\n",
       "                    // prevent a visual change of nodes with images upon selection (not deactivatable)\n",
       "                    visNode.color.highlight = {\n",
       "                      background: visNode.color.background,\n",
       "                      border: visNode.color.border,\n",
       "                    };\n",
       "                    visNode.borderWidthSelected = visNode.borderWidth;\n",
       "                  }\n",
       "                }\n",
       "                // - Node positions\n",
       "                const x = node.fx,\n",
       "                  y = node.fy;\n",
       "                if((typeof(x) !== \"undefined\") || (typeof(y) !== \"undefined\")){\n",
       "                  graphContainsFixedPositions = true;\n",
       "                  visNode.fixed = {}\n",
       "                  if(typeof(x) !== \"undefined\"){\n",
       "                    visNode.x = x;\n",
       "                    visNode.fixed.x = true;\n",
       "                  }\n",
       "                  if(typeof(y) !== \"undefined\"){\n",
       "                    visNode.y = y;\n",
       "                    visNode.fixed.y = true;\n",
       "                  }\n",
       "                }\n",
       "                // - Node hover behavior 1: highlight neighborhood\n",
       "                visNode.color.hover = {\n",
       "                  background: visNode.color.background,\n",
       "                  border: visNode.color.background,\n",
       "                };\n",
       "                // - Node hover behavior 2: show tooltip\n",
       "                if(state.nodeHoverTooltip){\n",
       "                  if(typeof(node.hover) !== \"undefined\"){\n",
       "                    visNode.title = node.hover;\n",
       "                  }\n",
       "                }\n",
       "                // - Node click behavior: show details\n",
       "                if(typeof(node.click) !== \"undefined\" && node.click !== \"\"){\n",
       "                  visNode.click = node.click;\n",
       "                }\n",
       "                visNodes.push(visNode);\n",
       "              }\n",
       "\n",
       "              // b) Edges: https://visjs.github.io/vis-network/docs/network/edges.html\n",
       "              const visEdges = [];\n",
       "              for(let i=0; i<data.edges.length; i++){\n",
       "                const edge = data.edges[i];\n",
       "                const visEdge = {\n",
       "                  id: edge.id,\n",
       "                  from: edge.source.id,\n",
       "                  to: edge.target.id,\n",
       "                  color: edge.color,\n",
       "                  width: edge.size,\n",
       "                };\n",
       "                // - Edge labels\n",
       "                if(state.showEdgeLabels){\n",
       "                  if(typeof(edge.label) !== \"undefined\"){\n",
       "                    visEdge.label = edge.label;\n",
       "                    visEdge.font = {\n",
       "                      size: edge.label_size,\n",
       "                      color: edge.label_color,\n",
       "                      strokeWidth: (state.showEdgeLabelBorders ? 1.2 : 0.0),\n",
       "                      strokeColor: data.general.background_color,\n",
       "                    }\n",
       "                  }\n",
       "                }\n",
       "                // - Edges hidden/shown\n",
       "                if(!state.showEdges){\n",
       "                  visEdge.hidden = true;\n",
       "                }\n",
       "                // - Edge hover behavior\n",
       "                if(state.edgeHoverTooltip){\n",
       "                  if(typeof(edge.hover) !== \"undefined\") {\n",
       "                    visEdge.title = edge.hover;\n",
       "                  }\n",
       "                }\n",
       "                // - Edge click behavior\n",
       "                if(typeof(edge.click) !== \"undefined\" && edge.click !== \"\"){\n",
       "                  visEdge.click = edge.click;\n",
       "                }\n",
       "                visEdges.push(visEdge);\n",
       "              }\n",
       "              // c) Options: https://visjs.github.io/vis-network/docs/network/\n",
       "              const options = {};\n",
       "              // - Nodes\n",
       "              options.nodes = {};\n",
       "              options.nodes.chosen = false;\n",
       "              options.nodes.imagePadding = 1.5;\n",
       "              options.nodes.labelHighlightBold = false;\n",
       "              options.nodes.shapeProperties = {};\n",
       "              options.nodes.shapeProperties.useBorderWithImage = true;\n",
       "              // - Node label font family\n",
       "              if(state.nodeLabelFont !== null){\n",
       "                options.nodes.font = {\n",
       "                  \"face\": state.nodeLabelFont,\n",
       "                }\n",
       "              }\n",
       "              // - Edges\n",
       "              options.edges = {};\n",
       "              // - Edges hidden/shown\n",
       "              if(!state.showEdges){\n",
       "                options.edges.hidden = true;\n",
       "              }\n",
       "              // - Edge curvature\n",
       "              if(state.edgeCurvature === 0.0){\n",
       "                options.edges.smooth = false;\n",
       "              } else {\n",
       "                options.edges.smooth = ui.composites.graph.calculateEdgeCurvatureOptions();\n",
       "              }\n",
       "              // - Edge arrows\n",
       "              if(data.general.directed){\n",
       "                options.edges.arrows = {};\n",
       "                options.edges.arrows.to = {};\n",
       "                options.edges.arrows.to.enabled = true;\n",
       "                if(data.general.arrow_size !== 0.0){\n",
       "                  options.edges.arrows.to.scaleFactor = data.general.arrow_size / 10.0;\n",
       "                }\n",
       "              }\n",
       "              // - Edge label font family\n",
       "              if(state.edgeLabelFont !== null){\n",
       "                options.edges.font = {\n",
       "                  \"face\": state.edgeLabelFont,\n",
       "                }\n",
       "              }\n",
       "              // - Drawing area\n",
       "              options.autoResize = false;\n",
       "              // - Interaction\n",
       "              options.interaction = {};\n",
       "              options.interaction.selectable = false;\n",
       "              options.interaction.selectConnectedEdges = false;\n",
       "              options.interaction.tooltipDelay = 0.0;\n",
       "              options.interaction.hover = state.nodeHoverNeighborhood;\n",
       "              options.interaction.hoverConnectedEdges = state.nodeHoverNeighborhood;\n",
       "              // - Layout algorithm\n",
       "              const numNodes = state.parsedData.nodes.length;\n",
       "              options.layout = {};\n",
       "              if(numNodes < 400){\n",
       "                options.layout.improvedLayout = true;\n",
       "              } else{\n",
       "                options.layout.improvedLayout = false;\n",
       "              }\n",
       "              options.physics = {};\n",
       "              options.physics.barnesHut = {\"damping\": 0.25};\n",
       "              options.physics.forceAtlas2Based = {\"damping\": 3.0};\n",
       "              options.physics.repulsion = {};\n",
       "              options.physics.hierarchicalRepulsion = {};\n",
       "              options.physics.stabilization = {};\n",
       "              options.physics.stabilization.enabled = false;\n",
       "              if(numNodes > state.largeGraphThreshold){\n",
       "                let numIterations = 800;\n",
       "                if(numNodes >= 25000){\n",
       "                  numIterations = 100;\n",
       "                } else if(numNodes >= 10000){\n",
       "                  numIterations = 300;\n",
       "                } else if(numNodes >= 5000){\n",
       "                  numIterations = 400;\n",
       "                } else if(numNodes >= 2000){\n",
       "                  numIterations = 500;\n",
       "                } else if(numNodes >= 1000){\n",
       "                  numIterations = 600;\n",
       "                }\n",
       "                options.physics.stabilization = {\n",
       "                  \"enabled\": true,\n",
       "                  \"fit\": true,\n",
       "                  \"iterations\": numIterations,\n",
       "                  \"updateInterval\": 1,\n",
       "                };\n",
       "              }\n",
       "              // II) Create graph\n",
       "              // - DataSet and Network: https://visjs.github.io/vis-network/docs/network\n",
       "              state.visOptions = options;\n",
       "              state.visData = {\n",
       "                nodes: new vis.DataSet(visNodes),\n",
       "                edges: new vis.DataSet(visEdges),\n",
       "              };\n",
       "              state.visGraph = new vis.Network(ui.elements.graphContainer, state.visData, state.visOptions);\n",
       "              // III) Set further graph options after its creation\n",
       "              // - Background: https://github.com/almende/vis/issues/2292\n",
       "              state.visGraph.on(\"beforeDrawing\", function(ctx){\n",
       "                  ctx.save();\n",
       "                  ctx.setTransform(1, 0, 0, 1, 0, 0);\n",
       "                  ctx.fillStyle = data.general.background_color;\n",
       "                  ctx.fillRect(0, 0, ctx.canvas.width, ctx.canvas.height);\n",
       "                  ctx.restore();\n",
       "              })\n",
       "              // - Node positions: node update after graph creation seems to prevent a bug\n",
       "              if(graphContainsFixedPositions){\n",
       "                state.visData.nodes.update(visNodes);\n",
       "              }\n",
       "              // - Graph behavior\n",
       "              ui.composites.graph.setBehavior();\n",
       "\n",
       "              // Menu toggle button\n",
       "              if(state.showMenuToggleButton){\n",
       "                const menuDiv = document.createElement(\"div\");\n",
       "                if(state.showMenu){\n",
       "                  menuDiv.innerText = ui.symbols.menuShown;\n",
       "                } else {\n",
       "                  menuDiv.innerText = ui.symbols.menuHidden;\n",
       "                }\n",
       "                menuDiv.id = \"iX0kYNYWSSTeQTImz-menu-toggle-button\";\n",
       "                menuDiv.onclick = ui.composites.menu.toggle;\n",
       "                ui.elements.graphContainer.appendChild(menuDiv);\n",
       "                ui.elements.menuToggleDiv = menuDiv;\n",
       "              }\n",
       "              // Details toggle button\n",
       "              if(state.showDetailsToggleButton){\n",
       "                const detailsDiv = document.createElement(\"div\");\n",
       "                if(state.showDetails){\n",
       "                  detailsDiv.innerText = ui.symbols.detailsShown;\n",
       "                } else {\n",
       "                  detailsDiv.innerText = ui.symbols.detailsHidden;\n",
       "                }\n",
       "                detailsDiv.id = \"iX0kYNYWSSTeQTImz-details-toggle-button\";\n",
       "                detailsDiv.onclick = ui.composites.details.toggle;\n",
       "                ui.elements.graphContainer.appendChild(detailsDiv);\n",
       "                ui.elements.detailsToggleDiv = detailsDiv;\n",
       "              }\n",
       "            },\n",
       "\n",
       "            setBehavior(){\n",
       "              // - Progress bar: only if large graph, stops simulation to get initial static image\n",
       "              // https://visjs.github.io/vis-network/examples/network/exampleApplications/loadingBar.html\n",
       "              const numNodes = state.parsedData.nodes.length;\n",
       "              if(numNodes > state.largeGraphThreshold){\n",
       "                // Layout start\n",
       "                ui.composites.progressBar.create();\n",
       "                // Layout update\n",
       "                state.visGraph.on(\"stabilizationProgress\", function(params){\n",
       "                  var progressPercentage = params.iterations / params.total * 100;\n",
       "                  ui.composites.progressBar.update(progressPercentage);\n",
       "                });\n",
       "                // Layout finished\n",
       "                state.visGraph.once(\"stabilizationIterationsDone\", function(){\n",
       "                  setTimeout(function(){\n",
       "                    ui.composites.progressBar.remove();\n",
       "                    ui.composites.graph.simulationManager.stop();\n",
       "                  }, 60);\n",
       "                });\n",
       "              }\n",
       "              // - Node drag behavior: move node, fix its position or release it afterwards\n",
       "              state.visGraph.on(\"dragStart\", function(params){\n",
       "                params.event = \"[original event]\";\n",
       "                const nodeId = this.getNodeAt(params.pointer.DOM);\n",
       "                if(nodeId){\n",
       "                  const visNode = state.visData.nodes.get(nodeId),\n",
       "                    position = state.visGraph.getPositions(nodeId);\n",
       "                  visNode.x = position.x;\n",
       "                  visNode.y = position.y;\n",
       "                  visNode.fixed = false;\n",
       "                  state.visData.nodes.update(visNode);\n",
       "                }\n",
       "              });\n",
       "              state.visGraph.on(\"dragEnd\", function(params){\n",
       "                params.event = \"[original event]\";\n",
       "                const nodeId = this.getNodeAt(params.pointer.DOM);\n",
       "                if(nodeId){\n",
       "                  if(state.nodeDragFix){\n",
       "                    const visNode = state.visData.nodes.get(nodeId),\n",
       "                      position = state.visGraph.getPositions(nodeId);\n",
       "                    visNode.x = position.x;\n",
       "                    visNode.y = position.y;\n",
       "                    visNode.fixed = {\"x\": true, \"y\": true}\n",
       "                    state.visData.nodes.update(visNode);\n",
       "                  }\n",
       "                }\n",
       "              });\n",
       "              // - Node and edge hover behavior: already covered\n",
       "              // - Node and edge click behavior\n",
       "              // https://visjs.github.io/vis-network/examples/network/events/interactionEvents.html\n",
       "              function createNodeText(node){\n",
       "                let htmlText = \"<div>Node: \" + String(node.id) + \"</div>\";\n",
       "                if(typeof(node.click) !== \"undefined\" && node.click !== \"\"){\n",
       "                  htmlText += '<div id=\"iX0kYNYWSSTeQTImz-details-user-provided\">' + node.click + '</div>';\n",
       "                }\n",
       "                return htmlText;\n",
       "              }\n",
       "              function createEdgeText(edge){\n",
       "                let htmlText = \"<div>Edge: \" + String(edge.id) + \"</div>\";\n",
       "                if(typeof(edge.click) !== \"undefined\" && edge.click !== \"\"){\n",
       "                  htmlText += '<div id=\"iX0kYNYWSSTeQTImz-details-user-provided\">' + edge.click + '</div>';\n",
       "                }\n",
       "                return htmlText;\n",
       "              }\n",
       "              state.visGraph.on(\"click\", function(params){\n",
       "                params.event = \"[original event]\";\n",
       "                let htmlText = \"\";\n",
       "                const nodeId = this.getNodeAt(params.pointer.DOM);\n",
       "                if(nodeId){\n",
       "                  const node = state.visData.nodes.get(nodeId);\n",
       "                  if(node){\n",
       "                    htmlText = createNodeText(node);\n",
       "                  }\n",
       "                } else {\n",
       "                  const edgeId = this.getEdgeAt(params.pointer.DOM);\n",
       "                  if(edgeId){\n",
       "                    const edge = state.visData.edges.get(edgeId);\n",
       "                    if(edge){\n",
       "                      htmlText = createEdgeText(edge);\n",
       "                    }\n",
       "                  }\n",
       "                }\n",
       "                ui.elements.detailsBody.innerHTML = htmlText;\n",
       "              });\n",
       "              // - Simulation behavior\n",
       "              state.visGraph.on(\"startStabilizing\", function(params){\n",
       "                // A manually stopped simulation restarts automatically by dragging a node or\n",
       "                // altering a dataset, immediately triggering this event. So if the simulation\n",
       "                // shall be inactive, any automatic restart can be turned off immediately here.\n",
       "                if(!state.layoutAlgorithmActive){\n",
       "                  state.visGraph.stopSimulation();\n",
       "                }\n",
       "              });\n",
       "              // Start (considers all simulation parameters)\n",
       "              ui.composites.graph.simulationManager.start();\n",
       "            },\n",
       "\n",
       "            // Graph\n",
       "            updateGraphDrawingArea(){\n",
       "              state.visGraph.setSize(state.graphContainerWidth, state.graphContainerHeight);\n",
       "              state.visGraph.redraw();\n",
       "            },\n",
       "\n",
       "            // Nodes\n",
       "            updateNodes(){\n",
       "              const data = state.shownData,\n",
       "                newVisNodes = [];\n",
       "              for(let i=0; i<data.nodes.length; i++){\n",
       "                const node = data.nodes[i],\n",
       "                  visNode = state.visData.nodes.get(node.id);\n",
       "                // Node shape\n",
       "                visNode.shape = node.shape;\n",
       "                // Node size\n",
       "                if(state.showNodes){\n",
       "                  visNode.size = node.size;\n",
       "                } else {\n",
       "                  visNode.size = 0.0;\n",
       "                }\n",
       "                // Node images\n",
       "                if(state.showNodeImages){\n",
       "                  if(typeof(node.image) !== \"undefined\"){\n",
       "                    visNode.size = node.image_size;\n",
       "                    visNode.shape = \"image\";\n",
       "                    visNode.image = node.image;\n",
       "                  }\n",
       "                }\n",
       "                // Prevent node movements: Remove stored positions of nodes once fixed and now released\n",
       "                if(visNode.fixed === false){\n",
       "                  delete visNode.x;\n",
       "                  delete visNode.y;\n",
       "                }\n",
       "                newVisNodes.push(visNode);\n",
       "              }\n",
       "              state.visData.nodes.update(newVisNodes);\n",
       "            },\n",
       "\n",
       "            preventNodeJump(visNode){\n",
       "              if(visNode.fixed === false){\n",
       "                delete visNode.x;\n",
       "                delete visNode.y;\n",
       "              }\n",
       "            },\n",
       "\n",
       "            updateNodeVisibilities(){\n",
       "              ui.composites.graph.updateNodes();\n",
       "            },\n",
       "\n",
       "            updateNodeSizes(){\n",
       "              const data = state.shownData,\n",
       "                newVisNodes = [];\n",
       "              for(let i=0; i<data.nodes.length; i++){\n",
       "                const node = data.nodes[i],\n",
       "                  visNode = state.visData.nodes.get(node.id);\n",
       "                visNode.size = node.size;\n",
       "                if(state.showNodeImages && typeof(node.image) !== \"undefined\"){\n",
       "                  visNode.size = node.image_size;\n",
       "                }\n",
       "                ui.composites.graph.preventNodeJump(visNode);\n",
       "                newVisNodes.push(visNode);\n",
       "              }\n",
       "              state.visData.nodes.update(newVisNodes);\n",
       "            },\n",
       "\n",
       "            updateNodeHoverNeighborhoodBehavior(){\n",
       "              state.visOptions.interaction.hover = state.nodeHoverNeighborhood;\n",
       "              state.visOptions.interaction.hoverConnectedEdges = state.nodeHoverNeighborhood;\n",
       "              state.visGraph.setOptions(state.visOptions);\n",
       "            },\n",
       "\n",
       "            updateNodeHoverTooltipBehavior(){\n",
       "              const data = state.shownData,\n",
       "                newVisNodes = [];\n",
       "              for(let i=0; i<data.nodes.length; i++){\n",
       "                const node = data.nodes[i],\n",
       "                  visNode = state.visData.nodes.get(node.id);\n",
       "                if(typeof(node.hover) !== \"undefined\"){\n",
       "                  visNode.title = state.nodeHoverTooltip ? node.hover : null;\n",
       "                }\n",
       "                newVisNodes.push(visNode);\n",
       "              }\n",
       "              state.visData.nodes.update(newVisNodes);\n",
       "            },\n",
       "\n",
       "            // Node images\n",
       "            updateNodeImages(){\n",
       "              const data = state.shownData,\n",
       "                newVisNodes = [];\n",
       "              for(let i=0; i<data.nodes.length; i++){\n",
       "                const node = data.nodes[i],\n",
       "                  visNode = state.visData.nodes.get(node.id);\n",
       "                visNode.shape = node.shape;\n",
       "                if(state.showNodes){\n",
       "                  visNode.size = node.size;\n",
       "                } else {\n",
       "                  visNode.size = 0.0;\n",
       "                }\n",
       "                if(state.showNodeImages){\n",
       "                  if(typeof(node.image) !== \"undefined\"){\n",
       "                    visNode.size = node.image_size;\n",
       "                    visNode.shape = \"image\";\n",
       "                    visNode.image = node.image;\n",
       "                  }\n",
       "                }\n",
       "                ui.composites.graph.preventNodeJump(visNode);\n",
       "                newVisNodes.push(visNode);\n",
       "              }\n",
       "              state.visData.nodes.update(newVisNodes);\n",
       "            },\n",
       "\n",
       "            // Node labels\n",
       "            updateNodeLabels(){\n",
       "              // Vis data sets: https://visjs.github.io/vis-data/data/dataset.html\n",
       "              const data = state.shownData,\n",
       "                newVisNodes = [];\n",
       "              for(let i=0; i<data.nodes.length; i++){\n",
       "                const node = data.nodes[i];\n",
       "                const visNode = state.visData.nodes.get(node.id);\n",
       "                if(state.showNodeLabels){\n",
       "                  visNode.label = node.label;\n",
       "                  visNode.font = {\n",
       "                    size: node.label_size,\n",
       "                    color: node.label_color,\n",
       "                    strokeWidth: (state.showNodeLabelBorders ? 1.2 : 0.0),\n",
       "                    strokeColor: data.general.background_color,\n",
       "                  }\n",
       "                } else{\n",
       "                  visNode.label = undefined;\n",
       "                }\n",
       "                ui.composites.graph.preventNodeJump(visNode);\n",
       "                newVisNodes.push(visNode);\n",
       "              }\n",
       "              state.visData.nodes.update(newVisNodes);\n",
       "            },\n",
       "\n",
       "            // Edges\n",
       "            calculateEdgeCurvatureOptions(){\n",
       "              const appearanceAdaptionFactor = 0.5,\n",
       "                options = {\n",
       "                \"type\": state.edgeCurvature > 0.0 ? \"curvedCW\" : \"curvedCCW\",\n",
       "                \"roundness\": Math.abs(state.edgeCurvature) * appearanceAdaptionFactor,\n",
       "              };\n",
       "              return options\n",
       "            },\n",
       "\n",
       "            updateEdgeVisibility(){\n",
       "              const data = state.shownData,\n",
       "                newVisEdges = [];\n",
       "              for(let i=0; i<data.edges.length; i++){\n",
       "                const edge = data.edges[i],\n",
       "                  visEdge = state.visData.edges.get(edge.id);\n",
       "                visEdge.hidden = !state.showEdges;\n",
       "                newVisEdges.push(visEdge);\n",
       "              }\n",
       "              state.visData.edges.update(newVisEdges);\n",
       "            },\n",
       "\n",
       "            updateEdgeSizes(){\n",
       "              const data = state.shownData,\n",
       "                newVisEdges = [];\n",
       "              for (let i=0; i<data.edges.length; i++){\n",
       "                const edge = data.edges[i],\n",
       "                  newVisEdge = state.visData.edges.get(edge.id);\n",
       "                newVisEdge.width = edge.size;\n",
       "                newVisEdges.push(newVisEdge);\n",
       "              }\n",
       "              state.visData.edges.update(newVisEdges);\n",
       "            },\n",
       "\n",
       "            updateEdgeCurvatures(){\n",
       "              if(state.edgeCurvature === 0.0){\n",
       "                state.visOptions.edges.smooth = false;\n",
       "              } else {\n",
       "                state.visOptions.edges.smooth = ui.composites.graph.calculateEdgeCurvatureOptions();\n",
       "              }\n",
       "              state.visGraph.setOptions(state.visOptions);\n",
       "            },\n",
       "\n",
       "            updateEdgeHoverTooltipBehavior(){\n",
       "              /* Correct code, but there is a bug that renders null values as empty div (instead of ignoring them)\n",
       "              const data = state.shownData,\n",
       "                newVisEdges = [];\n",
       "              for(let i=0; i<data.edges.length; i++){\n",
       "                const edge = data.edges[i],\n",
       "                  visEdge = state.visData.edges.get(edge.id);\n",
       "                if(typeof(edge.hover) !== \"undefined\"){\n",
       "                  visEdge.title = state.edgeHoverTooltip ? edge.hover : null;\n",
       "                }\n",
       "                newVisEdges.push(visEdge);\n",
       "              }\n",
       "              state.visData.edges.update(newVisEdges);\n",
       "              */\n",
       "              // Workaround code\n",
       "              function cloneObject(obj){\n",
       "                return Object.assign({}, obj);\n",
       "              }\n",
       "              const data = state.shownData,\n",
       "                newVisEdges = [];\n",
       "              for(let i=0; i<data.edges.length; i++){\n",
       "                const edge = data.edges[i],\n",
       "                  visEdge = state.visData.edges.get(edge.id);\n",
       "                if(typeof(edge.hover) !== \"undefined\"){\n",
       "                  if(state.edgeHoverTooltip){\n",
       "                    visEdge.title = edge.hover;\n",
       "                    newVisEdges.push(visEdge);\n",
       "                  } else{\n",
       "                    // edges.update can only add properties, not delete them, hence use of clone/remove/add\n",
       "                    clonedEdge = cloneObject(visEdge);\n",
       "                    delete clonedEdge.title;\n",
       "                    state.visData.edges.remove(edge.id);\n",
       "                    state.visData.edges.add(clonedEdge);\n",
       "                  }\n",
       "                }\n",
       "              }\n",
       "              if(state.edgeHoverTooltip){\n",
       "                state.visData.edges.update(newVisEdges);\n",
       "              }\n",
       "            },\n",
       "\n",
       "            // Edge labels\n",
       "            updateEdgeLabels(){\n",
       "              const data = state.shownData,\n",
       "                newVisEdges = [],\n",
       "                noLabel = \" \";  // undefined, null, \"\" or deleting label property does not work\n",
       "              for(let i=0; i<data.edges.length; i++){\n",
       "                const edge = data.edges[i],\n",
       "                  visEdge = state.visData.edges.get(edge.id);\n",
       "                if(state.showEdgeLabels){\n",
       "                  visEdge.label = edge.label;\n",
       "                  visEdge.font = {\n",
       "                    size: edge.label_size,\n",
       "                    color: edge.label_color,\n",
       "                    strokeWidth: (state.showEdgeLabelBorders ? 1.2 : 0.0),\n",
       "                    strokeColor: data.general.background_color,\n",
       "                  }\n",
       "                } else {\n",
       "                  visEdge.label = noLabel;\n",
       "                }\n",
       "                newVisEdges.push(visEdge);\n",
       "              }\n",
       "              state.visData.edges.update(newVisEdges);\n",
       "            },\n",
       "\n",
       "            // Layout algorithm\n",
       "            simulationManager:{\n",
       "              start(){\n",
       "                state.visGraph.startSimulation();\n",
       "                this.setAlgorithm();\n",
       "                this.setSpringLength();\n",
       "                this.setSpringConstant();\n",
       "                this.setCentralGravity();\n",
       "                this.setGravitationalConstant();\n",
       "                this.setAvoidOverlap();\n",
       "              },\n",
       "              stop(){\n",
       "                state.visGraph.stopSimulation();\n",
       "              },\n",
       "              setActivity(on){\n",
       "                if(on){\n",
       "                  this.start();\n",
       "                } else{\n",
       "                  this.stop();\n",
       "                }\n",
       "              },\n",
       "              setAlgorithm(){\n",
       "                const name = state.layoutAlgorithm;\n",
       "                state.visOptions.physics.solver = name;\n",
       "                state.visGraph.setOptions(state.visOptions);\n",
       "                if(name === \"repulsion\"){\n",
       "                  ui.elements.avoidOverlapContainer.style.opacity = ui.convert.boolToOpacity(false);\n",
       "                  ui.elements.gravitationalConstantContainer.style.opacity = ui.convert.boolToOpacity(false);\n",
       "                } else if(name === \"hierarchicalRepulsion\"){\n",
       "                  ui.elements.avoidOverlapContainer.style.opacity = ui.convert.boolToOpacity(true);\n",
       "                  ui.elements.gravitationalConstantContainer.style.opacity = ui.convert.boolToOpacity(false);\n",
       "                } else {\n",
       "                  ui.elements.avoidOverlapContainer.style.opacity = ui.convert.boolToOpacity(true);\n",
       "                  ui.elements.gravitationalConstantContainer.style.opacity = ui.convert.boolToOpacity(true);\n",
       "                }\n",
       "              },\n",
       "              releaseFixedNodes(){\n",
       "                const data = state.shownData,\n",
       "                  newVisNodes = [];\n",
       "                for(let i=0; i<data.nodes.length; i++){\n",
       "                  const node = data.nodes[i],\n",
       "                    visNode = state.visData.nodes.get(node.id);\n",
       "                  ui.composites.graph.preventNodeJump(visNode);\n",
       "                  visNode.fixed = false;\n",
       "                  // Note: Deletion of x, y and fixed may work too, but .update does not delete props\n",
       "                  newVisNodes.push(visNode);\n",
       "                }\n",
       "                state.visData.nodes.update(newVisNodes);\n",
       "              },\n",
       "              setSpringLength(){\n",
       "                state.visOptions.physics.barnesHut.springLength = state.springLength;\n",
       "                state.visOptions.physics.forceAtlas2Based.springLength = state.springLength;\n",
       "                state.visOptions.physics.repulsion.springLength = state.springLength;\n",
       "                state.visOptions.physics.hierarchicalRepulsion.springLength = state.springLength;\n",
       "                state.visGraph.setOptions(state.visOptions);\n",
       "              },\n",
       "              setSpringConstant(){\n",
       "                state.visOptions.physics.barnesHut.springConstant = state.springConstant / 10.0;\n",
       "                state.visOptions.physics.forceAtlas2Based.springConstant = state.springConstant;\n",
       "                state.visOptions.physics.repulsion.springConstant = state.springConstant;\n",
       "                state.visOptions.physics.hierarchicalRepulsion.springConstant = state.springConstant;\n",
       "                state.visGraph.setOptions(state.visOptions);\n",
       "              },\n",
       "              setCentralGravity(){\n",
       "                state.visOptions.physics.barnesHut.centralGravity = state.centralGravity;\n",
       "                state.visOptions.physics.forceAtlas2Based.centralGravity = state.centralGravity / 100.0;\n",
       "                state.visOptions.physics.repulsion.centralGravity = state.centralGravity;\n",
       "                state.visOptions.physics.hierarchicalRepulsion.centralGravity = state.centralGravity;\n",
       "                state.visGraph.setOptions(state.visOptions);\n",
       "              },\n",
       "              setGravitationalConstant(){\n",
       "                state.visOptions.physics.barnesHut.gravitationalConstant = state.gravitationalConstant;\n",
       "                state.visOptions.physics.forceAtlas2Based.gravitationalConstant = state.gravitationalConstant / 10.0;\n",
       "                // Not a parameter in repulsion and hierarchicalRepulsion\n",
       "                state.visGraph.setOptions(state.visOptions);\n",
       "              },\n",
       "              setAvoidOverlap(){\n",
       "                state.visOptions.physics.barnesHut.avoidOverlap = state.avoidOverlap;\n",
       "                state.visOptions.physics.forceAtlas2Based.avoidOverlap = state.avoidOverlap;\n",
       "                // Not a parameter in repulsion and hierarchicalRepulsion\n",
       "                state.visGraph.setOptions(state.visOptions);\n",
       "              },\n",
       "            }\n",
       "          },\n",
       "        },\n",
       "\n",
       "        init(){\n",
       "          // Containers\n",
       "          ui.composites.responsiveContainer.init();\n",
       "          // Graph selection (only visible if multiple graphs in data)\n",
       "          if(state.rawData.length > 1){\n",
       "            ui.elements.graphSelectionContainer.style.display = ui.convert.boolToDisplayStyle(true);\n",
       "            const optionList = [],\n",
       "              valueList = [];\n",
       "            let label;\n",
       "            for(let i=0; i<state.rawData.length; i++){\n",
       "              const graph = state.rawData[i];\n",
       "              try{\n",
       "                label = String(graph.label);\n",
       "                if(label === \"undefined\" || label === \"\"){\n",
       "                  throw \"Invalid label\";\n",
       "                }\n",
       "              } catch(e){\n",
       "                label = \"Unnamed graph\";\n",
       "              }\n",
       "              const name = String(i+1) + \": \" + label;\n",
       "              optionList.push(name);\n",
       "              valueList.push(String(i));\n",
       "            }\n",
       "            ui.composites.selection(ui.elements.graphSelection, optionList, valueList);\n",
       "          }\n",
       "          // General (menu item)\n",
       "          ui.composites.menu.setItem(ui.elements.generalHead, ui.elements.generalBody, true);\n",
       "          // Data selection (menu item)\n",
       "          ui.composites.menu.setItem(ui.elements.dataHead, ui.elements.dataBody, false);\n",
       "          // - Node size\n",
       "          ui.elements.nodeSizeNormalizationCheckbox.checked = state.useNodeSizeNormalization;\n",
       "          ui.elements.nodeSizeNormalizationContainer.style.display = ui.convert.boolToDisplayStyle(state.useNodeSizeNormalization);\n",
       "          ui.elements.nodeSizeNormalizationMinText.innerHTML = ui.convert.numberToText(state.nodeSizeNormalizationMin);\n",
       "          ui.elements.nodeSizeNormalizationMinSlider.value = state.nodeSizeNormalizationMin;\n",
       "          ui.elements.nodeSizeNormalizationMaxText.innerHTML = ui.convert.numberToText(state.nodeSizeNormalizationMax);\n",
       "          ui.elements.nodeSizeNormalizationMaxSlider.value = state.nodeSizeNormalizationMax;\n",
       "          // - Edge size\n",
       "          ui.elements.edgeSizeNormalizationCheckbox.checked = state.useEdgeSizeNormalization;\n",
       "          ui.elements.edgeSizeNormalizationContainer.style.display = ui.convert.boolToDisplayStyle(state.useEdgeSizeNormalization);\n",
       "          ui.elements.edgeSizeNormalizationMinText.innerHTML = ui.convert.numberToText(state.edgeSizeNormalizationMin);\n",
       "          ui.elements.edgeSizeNormalizationMinSlider.value = state.edgeSizeNormalizationMin;\n",
       "          ui.elements.edgeSizeNormalizationMaxText.innerHTML = ui.convert.numberToText(state.edgeSizeNormalizationMax);\n",
       "          ui.elements.edgeSizeNormalizationMaxSlider.value = state.edgeSizeNormalizationMax;\n",
       "          // Nodes\n",
       "          ui.composites.menu.setItem(ui.elements.nodeHead, ui.elements.nodeBody, false);\n",
       "          ui.elements.nodeCheckbox.checked = state.showNodes;\n",
       "          ui.elements.nodeSizeFactorText.innerHTML = ui.convert.numberToText(state.nodeSizeFactor);\n",
       "          ui.elements.nodeSizeFactorSlider.value = state.nodeSizeFactor;\n",
       "          ui.elements.nodeDragFixCheckbox.checked = state.nodeDragFix;\n",
       "          ui.elements.nodeHoverNeighborhoodCheckbox.checked = state.nodeHoverNeighborhood;\n",
       "          ui.elements.nodeHoverTooltipCheckbox.checked = state.nodeHoverTooltip;\n",
       "          // Node images\n",
       "          ui.composites.menu.setItem(ui.elements.nodeImageHead, ui.elements.nodeImageBody, false);\n",
       "          ui.elements.nodeImageMetaControl.style.display = false;\n",
       "          ui.elements.nodeImageCheckbox.checked = state.showNodeImages;\n",
       "          ui.elements.nodeImageSizeFactorText.innerHTML = ui.convert.numberToText(state.nodeImageSizeFactor);\n",
       "          ui.elements.nodeImageSizeFactorSlider.value = state.nodeImageSizeFactor;\n",
       "          // Node labels\n",
       "          ui.composites.menu.setItem(ui.elements.nodeLabelHead, ui.elements.nodeLabelBody, false);\n",
       "          ui.elements.nodeLabelCheckbox.checked = state.showNodeLabels;\n",
       "          ui.elements.nodeLabelBorderCheckbox.checked = state.showNodeLabelBorders;\n",
       "          ui.elements.nodeLabelSizeFactorText.innerHTML = ui.convert.numberToText(state.nodeLabelSizeFactor);\n",
       "          ui.elements.nodeLabelSizeFactorSlider.value = state.nodeLabelSizeFactor;\n",
       "          ui.elements.nodeLabelRotationText.innerHTML = ui.convert.numberToText(state.nodeLabelRotation);\n",
       "          ui.elements.nodeLabelRotationSlider.value = state.nodeLabelRotation;\n",
       "          // Edges\n",
       "          ui.composites.menu.setItem(ui.elements.edgeHead, ui.elements.edgeBody, false);\n",
       "          ui.elements.edgeCheckbox.checked = state.showEdges;\n",
       "          ui.elements.edgeSizeFactorText.innerHTML = ui.convert.numberToText(state.edgeSizeFactor);\n",
       "          ui.elements.edgeSizeFactorSlider.value = state.edgeSizeFactor;\n",
       "          ui.elements.edgeCurvatureText.innerHTML = ui.convert.numberToText(state.edgeCurvature);\n",
       "          ui.elements.edgeCurvatureSlider.value = state.edgeCurvature;\n",
       "          ui.elements.edgeHoverTooltipCheckbox.checked = state.edgeHoverTooltip;\n",
       "          // Edge labels\n",
       "          ui.composites.menu.setItem(ui.elements.edgeLabelHead, ui.elements.edgeLabelBody, false);\n",
       "          ui.elements.edgeLabelCheckbox.checked = state.showEdgeLabels;\n",
       "          ui.elements.edgeLabelBorderCheckbox.checked = state.showEdgeLabelBorders;\n",
       "          ui.elements.edgeLabelSizeFactorText.innerHTML = ui.convert.numberToText(state.edgeLabelSizeFactor);\n",
       "          ui.elements.edgeLabelSizeFactorSlider.value = state.edgeLabelSizeFactor;\n",
       "          ui.elements.edgeLabelRotationText.innerHTML = ui.convert.numberToText(state.edgeLabelRotation);\n",
       "          ui.elements.edgeLabelRotationSlider.value = state.edgeLabelRotation;\n",
       "          // Layout algorithm\n",
       "          ui.composites.menu.setItem(ui.elements.layoutAlgorithmHead, ui.elements.layoutAlgorithmBody, false);\n",
       "          ui.elements.simulationCheckbox.checked = state.layoutAlgorithmActive;\n",
       "          ui.elements.layoutAlgorithmSelection.value = state.layoutAlgorithm;\n",
       "          ui.elements.centralGravitySlider.value = state.centralGravity;\n",
       "          ui.elements.centralGravityText.innerHTML = ui.convert.numberToText(state.centralGravity);\n",
       "          ui.elements.springLengthSlider.value = state.springLength;\n",
       "          ui.elements.springLengthText.innerHTML = ui.convert.numberToText(state.springLength);\n",
       "          ui.elements.springConstantSlider.value = state.springConstant;\n",
       "          ui.elements.springConstantText.innerHTML = ui.convert.numberToText(state.springConstant);\n",
       "          ui.elements.gravitationalConstantSlider.value = state.gravitationalConstant;\n",
       "          ui.elements.gravitationalConstantText.innerHTML = ui.convert.numberToText(state.gravitationalConstant);\n",
       "          ui.elements.avoidOverlapSlider.value = state.avoidOverlap;\n",
       "          ui.elements.avoidOverlapText.innerHTML = ui.convert.numberToText(state.avoidOverlap);\n",
       "\n",
       "          ui.initSelectionValues();\n",
       "        },\n",
       "\n",
       "        initSelectionValues(){\n",
       "          function setSelectionOptionsAndValue(element, options, value, values=null){\n",
       "            if(values === null){\n",
       "              values = options;\n",
       "            }\n",
       "            if(!values.includes(value)){\n",
       "              value = values[0];\n",
       "            }\n",
       "            ui.composites.selection(element, options, values);\n",
       "            element.value = value;\n",
       "          }\n",
       "          // Node label text data source\n",
       "          setSelectionOptionsAndValue(\n",
       "            ui.elements.nodeLabelTextDataSourceSelect,\n",
       "            state.parsedData.general.node_properties.node_label_text_data_sources,\n",
       "            state.nodeLabelTextDataSource,\n",
       "          );\n",
       "          // Edge label text data source\n",
       "          setSelectionOptionsAndValue(\n",
       "            ui.elements.edgeLabelTextDataSourceSelect,\n",
       "            state.parsedData.general.edge_properties.edge_label_text_data_sources,\n",
       "            state.edgeLabelTextDataSource,\n",
       "          );\n",
       "          // Node size data source\n",
       "          setSelectionOptionsAndValue(\n",
       "            ui.elements.nodeSizeDataSourceSelect,\n",
       "            state.parsedData.general.node_properties.node_size_data_sources,\n",
       "            state.nodeSizeDataSource,\n",
       "          );\n",
       "          // Edge size data source\n",
       "          setSelectionOptionsAndValue(\n",
       "            ui.elements.edgeSizeDataSourceSelect,\n",
       "            state.parsedData.general.edge_properties.edge_size_data_sources,\n",
       "            state.edgeSizeDataSource,\n",
       "          );\n",
       "          // Layout algorithm\n",
       "          setSelectionOptionsAndValue(\n",
       "            ui.elements.layoutAlgorithmSelection,\n",
       "            [\"Barnes-Hut\", \"Force Atlas 2\", \"Repulsion\", \"Hierarchical repulsion\"],\n",
       "            state.layoutAlgorithm,\n",
       "            [\"barnesHut\", \"forceAtlas2Based\", \"repulsion\", \"hierarchicalRepulsion\"],\n",
       "          );\n",
       "        },\n",
       "\n",
       "        deleteChildElements(element){\n",
       "          while(element.firstChild){\n",
       "            // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management\n",
       "            // As of 2019, it is not possible to explicitly or programmatically trigger\n",
       "            // garbage collection in JavaScript.\n",
       "            element.removeChild(element.firstChild);\n",
       "          }\n",
       "        },\n",
       "\n",
       "        convert:{\n",
       "          numberToText(number, numDigits=2) {\n",
       "            return String(Number(number).toFixed(numDigits));\n",
       "          },\n",
       "\n",
       "          boolToDisplayStyle(isVisible){\n",
       "            if(isVisible){\n",
       "              return \"block\";\n",
       "            }\n",
       "            return \"none\";\n",
       "          },\n",
       "\n",
       "          boolToOpacity(isActive){\n",
       "            if(isActive){\n",
       "              return 1.0;\n",
       "            }\n",
       "            return 0.25;\n",
       "          },\n",
       "\n",
       "          boolToTooltipDelay(isActive){\n",
       "            if(isActive){\n",
       "              return 0;\n",
       "            }\n",
       "            return 100000000;\n",
       "          },\n",
       "        },\n",
       "\n",
       "        setBehavior(){\n",
       "          // Window resize (includes ctrl+wheel zoom, landscape/portrait orientation on phones)\n",
       "          window.onresize = function(){\n",
       "            ui.composites.responsiveContainer.adaptToResize();\n",
       "            ui.composites.graph.updateGraphDrawingArea();\n",
       "          }\n",
       "          // Container resize\n",
       "          ui.elements.graphContainer.onmouseup = function(){\n",
       "            const currentHeight = parseInt(ui.elements.graphContainer.clientHeight);\n",
       "            if(currentHeight != state.graphContainerHeight){\n",
       "              ui.composites.responsiveContainer.adaptToResize();\n",
       "              ui.composites.graph.updateGraphDrawingArea();\n",
       "            }\n",
       "          };\n",
       "          ui.elements.detailsContainer.onmouseup = function(){\n",
       "            const currentHeight = parseInt(ui.elements.detailsContainer.clientHeight);\n",
       "            if(currentHeight != state.detailsContainerHeight){\n",
       "              ui.composites.responsiveContainer.adaptToResize();\n",
       "            }\n",
       "          };\n",
       "          // Tooltip\n",
       "          ui.elements.tooltipContainer.onmouseover = function(){\n",
       "            ui.composites.tooltip.show();\n",
       "          }\n",
       "          ui.elements.tooltipContainer.onmouseout = function(){\n",
       "            ui.composites.tooltip.hide();\n",
       "          }\n",
       "          // General menu\n",
       "          ui.elements.generalHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.generalHead, ui.elements.generalBody);\n",
       "          };\n",
       "          ui.elements.resetButton.onclick = function(){\n",
       "            app.restart();\n",
       "          };\n",
       "          ui.elements.fullscreenButton.onclick = function(){\n",
       "            if(document.fullscreenElement){\n",
       "              document.exitFullscreen();\n",
       "            } else{\n",
       "              ui.elements.mainContainer.requestFullscreen()\n",
       "                .catch(function(err){\n",
       "                  alert(\"Error attempting to enable full-screen mode: \" + err.message);\n",
       "                });\n",
       "            }\n",
       "          };\n",
       "          ui.elements.mainContainer.onfullscreenchange = function(){\n",
       "            if(document.fullscreenElement){\n",
       "              ui.elements.fullscreenButton.innerText = \"Exit full screen\";\n",
       "            } else{\n",
       "              ui.elements.fullscreenButton.innerText = \"Enter full screen\";\n",
       "            }\n",
       "            // Wait for browser to switch to fullscreen and resize divs, then adapt to new sizes\n",
       "            setTimeout(function(){\n",
       "              ui.composites.responsiveContainer.adaptToFullscreen();\n",
       "              ui.composites.graph.updateGraphDrawingArea();\n",
       "            }, 250);\n",
       "          };\n",
       "          ui.elements.pngExportButton.onclick = function(){\n",
       "            ui.composites.download.png(\"graph.png\");\n",
       "          };\n",
       "          ui.elements.jpgExportButton.onclick = function(){\n",
       "            ui.composites.download.jpg(\"graph.jpg\");\n",
       "          };\n",
       "          // Data menu\n",
       "          ui.elements.dataHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.dataHead, ui.elements.dataBody);\n",
       "          };\n",
       "          // - Graph selection\n",
       "          ui.elements.graphSelection.onchange = function(){\n",
       "            const chosenGraphIndex = parseInt(this.value);\n",
       "            state.manager.parseChosenData(chosenGraphIndex);\n",
       "            state.manager.prepareShownData();\n",
       "            ui.initSelectionValues();\n",
       "            ui.composites.graph.createGraph();\n",
       "          };\n",
       "          // - Node label text\n",
       "          ui.elements.nodeLabelTextDataSourceSelect.onchange = function(){\n",
       "            state.nodeLabelTextDataSource = this.value;\n",
       "            state.manager.updateNodeLabelTexts();\n",
       "          };\n",
       "          // - Edge label text\n",
       "          ui.elements.edgeLabelTextDataSourceSelect.onchange = function(){\n",
       "            state.edgeLabelTextDataSource = this.value;\n",
       "            state.manager.updateEdgeLabelTexts();\n",
       "          };\n",
       "          // - Node size\n",
       "          ui.elements.nodeSizeDataSourceSelect.onchange = function(){\n",
       "            state.nodeSizeDataSource = this.value;\n",
       "            state.manager.updateNodeSizes();\n",
       "          };\n",
       "          ui.elements.nodeSizeNormalizationCheckbox.onchange = function(){\n",
       "            state.useNodeSizeNormalization = this.checked;\n",
       "            ui.elements.nodeSizeNormalizationContainer.style.display = ui.convert.boolToDisplayStyle(state.useNodeSizeNormalization);\n",
       "            state.manager.updateNodeSizes();\n",
       "          };\n",
       "          ui.elements.nodeSizeNormalizationMinSlider.oninput = function(){\n",
       "            ui.elements.nodeSizeNormalizationMinText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.nodeSizeNormalizationMinSlider.onchange = function(){\n",
       "            state.nodeSizeNormalizationMin = parseFloat(this.value);\n",
       "            if(state.nodeSizeNormalizationMin > state.nodeSizeNormalizationMax){\n",
       "              state.nodeSizeNormalizationMax = state.nodeSizeNormalizationMin;\n",
       "              ui.elements.nodeSizeNormalizationMaxSlider.value = state.nodeSizeNormalizationMax;\n",
       "              ui.elements.nodeSizeNormalizationMaxText.innerHTML = ui.convert.numberToText(state.nodeSizeNormalizationMax);\n",
       "            }\n",
       "            state.manager.updateNodeSizes();\n",
       "          };\n",
       "          ui.elements.nodeSizeNormalizationMaxSlider.oninput = function(){\n",
       "            ui.elements.nodeSizeNormalizationMaxText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.nodeSizeNormalizationMaxSlider.onchange = function(){\n",
       "            state.nodeSizeNormalizationMax = parseFloat(this.value);\n",
       "            if(state.nodeSizeNormalizationMax < state.nodeSizeNormalizationMin){\n",
       "              state.nodeSizeNormalizationMin = state.nodeSizeNormalizationMax;\n",
       "              ui.elements.nodeSizeNormalizationMinSlider.value = state.nodeSizeNormalizationMin;\n",
       "              ui.elements.nodeSizeNormalizationMinText.innerHTML = ui.convert.numberToText(state.nodeSizeNormalizationMin);\n",
       "            }\n",
       "            state.manager.updateNodeSizes();\n",
       "          };\n",
       "          // - Edge size\n",
       "          ui.elements.edgeSizeDataSourceSelect.onchange = function(){\n",
       "            state.edgeSizeDataSource = this.value;\n",
       "            state.manager.updateEdgeSizes();\n",
       "          };\n",
       "          ui.elements.edgeSizeNormalizationCheckbox.onchange = function(){\n",
       "            state.useEdgeSizeNormalization = this.checked;\n",
       "            ui.elements.edgeSizeNormalizationContainer.style.display = ui.convert.boolToDisplayStyle(state.useEdgeSizeNormalization);\n",
       "            state.manager.updateEdgeSizes();\n",
       "          };\n",
       "          ui.elements.edgeSizeNormalizationMinSlider.oninput = function(){\n",
       "            ui.elements.edgeSizeNormalizationMinText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.edgeSizeNormalizationMinSlider.onchange = function(){\n",
       "            state.edgeSizeNormalizationMin = parseFloat(this.value);\n",
       "            if(state.edgeSizeNormalizationMin > state.edgeSizeNormalizationMax){\n",
       "              state.edgeSizeNormalizationMax = state.edgeSizeNormalizationMin;\n",
       "              ui.elements.edgeSizeNormalizationMaxSlider.value = state.edgeSizeNormalizationMax;\n",
       "              ui.elements.edgeSizeNormalizationMaxText.innerHTML = ui.convert.numberToText(state.edgeSizeNormalizationMax);\n",
       "            }\n",
       "            state.manager.updateEdgeSizes();\n",
       "          };\n",
       "          ui.elements.edgeSizeNormalizationMaxSlider.oninput = function(){\n",
       "            ui.elements.edgeSizeNormalizationMaxText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.edgeSizeNormalizationMaxSlider.onchange = function(){\n",
       "            state.edgeSizeNormalizationMax = parseFloat(this.value);\n",
       "            if(state.edgeSizeNormalizationMax < state.edgeSizeNormalizationMin){\n",
       "              state.edgeSizeNormalizationMin = state.edgeSizeNormalizationMax;\n",
       "              ui.elements.edgeSizeNormalizationMinSlider.value = state.edgeSizeNormalizationMin;\n",
       "              ui.elements.edgeSizeNormalizationMinText.innerHTML = ui.convert.numberToText(state.edgeSizeNormalizationMin);\n",
       "            }\n",
       "            state.manager.updateEdgeSizes();\n",
       "          };\n",
       "          // Nodes menu\n",
       "          ui.elements.nodeHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.nodeHead, ui.elements.nodeBody);\n",
       "          };\n",
       "          ui.elements.nodeCheckbox.onchange = function(){\n",
       "            state.showNodes = this.checked;\n",
       "            ui.composites.graph.updateNodeVisibilities();\n",
       "          };\n",
       "          ui.elements.nodeSizeFactorSlider.oninput = function(){\n",
       "            ui.elements.nodeSizeFactorText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.nodeSizeFactorSlider.onchange = function(){\n",
       "            state.nodeSizeFactor = parseFloat(this.value);\n",
       "            state.manager.updateNodeSizes();\n",
       "          };\n",
       "          ui.elements.nodeDragFixCheckbox.onchange = function(){\n",
       "            state.nodeDragFix = this.checked;\n",
       "          };\n",
       "          ui.elements.nodeHoverNeighborhoodCheckbox.onchange = function(){\n",
       "            state.nodeHoverNeighborhood = this.checked;\n",
       "            ui.composites.graph.updateNodeHoverNeighborhoodBehavior();\n",
       "          };\n",
       "          ui.elements.nodeHoverTooltipCheckbox.onchange = function(){\n",
       "            state.nodeHoverTooltip = this.checked;\n",
       "            ui.composites.graph.updateNodeHoverTooltipBehavior();\n",
       "          };\n",
       "          ui.elements.nodeReleaseButton.onclick = function(){\n",
       "            ui.composites.graph.simulationManager.releaseFixedNodes();\n",
       "          };\n",
       "          // Node images menu\n",
       "          ui.elements.nodeImageHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.nodeImageHead, ui.elements.nodeImageBody);\n",
       "          };\n",
       "          ui.elements.nodeImageCheckbox.onchange = function(){\n",
       "            state.showNodeImages = this.checked;\n",
       "            state.manager.updateNodeImages();\n",
       "          };\n",
       "          ui.elements.nodeImageSizeFactorSlider.oninput = function(){\n",
       "            ui.elements.nodeImageSizeFactorText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.nodeImageSizeFactorSlider.onchange = function(){\n",
       "            state.nodeImageSizeFactor = parseFloat(this.value);\n",
       "            state.manager.updateNodeImages();\n",
       "          };\n",
       "          // Node labels menu\n",
       "          ui.elements.nodeLabelHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.nodeLabelHead, ui.elements.nodeLabelBody);\n",
       "          };\n",
       "          ui.elements.nodeLabelCheckbox.onchange = function(){\n",
       "            state.showNodeLabels = this.checked;\n",
       "            ui.composites.graph.updateNodeLabels();\n",
       "          };\n",
       "          ui.elements.nodeLabelBorderCheckbox.onchange = function(){\n",
       "            state.showNodeLabelBorders = this.checked;\n",
       "            ui.composites.graph.updateNodeLabels();\n",
       "          };\n",
       "          ui.elements.nodeLabelSizeFactorSlider.oninput = function(){\n",
       "            ui.elements.nodeLabelSizeFactorText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.nodeLabelSizeFactorSlider.onchange = function(){\n",
       "            state.nodeLabelSizeFactor = parseFloat(this.value);\n",
       "            state.manager.updateNodeLabelSizes();\n",
       "          };\n",
       "          // Edges menu\n",
       "          ui.elements.edgeHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.edgeHead, ui.elements.edgeBody);\n",
       "          };\n",
       "          ui.elements.edgeCheckbox.onchange = function(){\n",
       "            state.showEdges = this.checked;\n",
       "            ui.composites.graph.updateEdgeVisibility();\n",
       "          };\n",
       "          ui.elements.edgeSizeFactorSlider.oninput = function(){\n",
       "            ui.elements.edgeSizeFactorText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.edgeSizeFactorSlider.onchange = function(){\n",
       "            state.edgeSizeFactor = parseFloat(this.value);\n",
       "            state.manager.updateEdgeSizes();\n",
       "          };\n",
       "          ui.elements.edgeCurvatureSlider.oninput = function(){\n",
       "            ui.elements.edgeCurvatureText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.edgeCurvatureSlider.onchange = function(){\n",
       "            state.edgeCurvature = parseFloat(this.value);\n",
       "            state.manager.updateEdgeCurvatures();\n",
       "          };\n",
       "          ui.elements.edgeHoverTooltipCheckbox.onchange = function(){\n",
       "            state.edgeHoverTooltip = this.checked;\n",
       "            ui.composites.graph.updateEdgeHoverTooltipBehavior();\n",
       "          };\n",
       "          // Edge labels menu\n",
       "          ui.elements.edgeLabelHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.edgeLabelHead, ui.elements.edgeLabelBody);\n",
       "          };\n",
       "          ui.elements.edgeLabelCheckbox.onchange = function(){\n",
       "            state.showEdgeLabels = this.checked;\n",
       "            ui.composites.graph.updateEdgeLabels();\n",
       "          };\n",
       "          ui.elements.edgeLabelBorderCheckbox.onchange = function(){\n",
       "            state.showEdgeLabelBorders = this.checked;\n",
       "            ui.composites.graph.updateEdgeLabels();\n",
       "          };\n",
       "          ui.elements.edgeLabelSizeFactorSlider.oninput = function(){\n",
       "            ui.elements.edgeLabelSizeFactorText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.edgeLabelSizeFactorSlider.onchange = function(){\n",
       "            state.edgeLabelSizeFactor = parseFloat(this.value);\n",
       "            state.manager.updateEdgeLabelSizes();\n",
       "          };\n",
       "          // Layout algorithm menu\n",
       "          ui.elements.layoutAlgorithmHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.layoutAlgorithmHead, ui.elements.layoutAlgorithmBody);\n",
       "          };\n",
       "          ui.elements.simulationCheckbox.onchange = function(){\n",
       "            state.layoutAlgorithmActive = !state.layoutAlgorithmActive;\n",
       "            ui.composites.graph.simulationManager.setActivity(state.layoutAlgorithmActive);\n",
       "          };\n",
       "          ui.elements.layoutAlgorithmSelection.onchange = function(){\n",
       "            state.layoutAlgorithm = this.value;\n",
       "            ui.composites.graph.simulationManager.setAlgorithm();\n",
       "          };\n",
       "          ui.elements.centralGravitySlider.oninput = function(){\n",
       "            ui.elements.centralGravityText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.centralGravitySlider.onchange = function(){\n",
       "            state.centralGravity = parseFloat(this.value);\n",
       "            ui.composites.graph.simulationManager.setCentralGravity();\n",
       "          };\n",
       "          ui.elements.springLengthSlider.oninput = function(){\n",
       "            ui.elements.springLengthText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.springLengthSlider.onchange = function(){\n",
       "            state.springLength = parseFloat(this.value);\n",
       "            ui.composites.graph.simulationManager.setSpringLength();\n",
       "          };\n",
       "          ui.elements.springConstantSlider.oninput = function(){\n",
       "            ui.elements.springConstantText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.springConstantSlider.onchange = function(){\n",
       "            state.springConstant = parseFloat(this.value);\n",
       "            ui.composites.graph.simulationManager.setSpringConstant();\n",
       "          };\n",
       "          ui.elements.gravitationalConstantSlider.oninput = function(){\n",
       "            ui.elements.gravitationalConstantText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.gravitationalConstantSlider.onchange = function(){\n",
       "            state.gravitationalConstant = parseFloat(this.value);\n",
       "            ui.composites.graph.simulationManager.setGravitationalConstant();\n",
       "          };\n",
       "          ui.elements.avoidOverlapSlider.oninput = function(){\n",
       "            ui.elements.avoidOverlapText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.avoidOverlapSlider.onchange = function(){\n",
       "            state.avoidOverlap = parseFloat(this.value);\n",
       "            ui.composites.graph.simulationManager.setAvoidOverlap();\n",
       "          };\n",
       "        },\n",
       "      }\n",
       "\n",
       "      const app = {\n",
       "        start(){\n",
       "          state.manager.fetchRawDataFromTemplating();\n",
       "          state.manager.parseChosenData(0);\n",
       "          state.manager.prepareShownData();\n",
       "          ui.init();\n",
       "          // Wait a bit to finish UI rendering, then start potentially slow layout computation\n",
       "          setTimeout(function(){\n",
       "            ui.composites.graph.createGraph();\n",
       "            ui.setBehavior();\n",
       "          }, 400);\n",
       "          // Reduce risk of getting stuck with a wrong drawing area size\n",
       "          function checkIfSizeUpdateRequired(){\n",
       "            if(ui.elements.graphContainer.clientWidth != state.graphContainerWidth){\n",
       "              ui.composites.responsiveContainer.adaptToResize();\n",
       "              ui.composites.graph.updateGraphDrawingArea();\n",
       "            }\n",
       "          }\n",
       "          [1, 2, 5, 8, 12, 15, 20, 25, 30, 35, 40, 45, 50, 60, 90].forEach(function(delay){\n",
       "            setTimeout(checkIfSizeUpdateRequired, delay*1000);\n",
       "          })\n",
       "        },\n",
       "\n",
       "        restart(){\n",
       "          app.start();\n",
       "        },\n",
       "      }\n",
       "\n",
       "      // Start website dynamics\n",
       "      app.start();\n",
       "    });\n",
       "  </script>\n",
       "\n"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "control_graph.visualize(three=False, style=control_graph_style).display(inline=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "source": [
    "> **Tip**. Now here's a surprise, it looks like ACME Bank is actually controlled by the Doe Family!"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Overall Pattern:\n",
    "\n",
    "  1. Anna directly owns 0.32 of My Bank and Bob indirectly owns 0.21 = 1 * 0.93 * 0.23 of My Bank.\n",
    "  2. In total, family Doe controls My Bank owning 0.53 of the shares.\n",
    "  3. My Bank, in turn, controls ACME Bank holding 0.34 of the shares directly and controlling Phoenix Ventures company with 0.30 of the shares via a pyramidal shareholding structure, probably set up to obfuscate the connection between the two companies.\n",
    "    \n",
    "**Conclusion: family Doe controls ACME Bank.**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": [
     "hide-input"
    ]
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th>controller</th>\n",
       "      <th>controlled</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>Family Doe</td>\n",
       "      <td>ACME Bank</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>"
      ],
      "text/plain": [
       "<relationalai.dsl.Context at 0x1493c1b90>"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "with model.query() as select:\n",
    "    p = Person(name = person_name)\n",
    "    fi = FinancialInstitution(name = bank_name)\n",
    "    ctrl = Control(controller = p.family, controlled = fi)\n",
    "    res = select(alias(p.family.name, 'controller'), alias(fi.name, 'controlled'))\n",
    "\n",
    "res"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Full explanation of the specific financial fraudulent schemes\n",
    "Let's query all relevant ownerships from which the accumulated family ownership of the ACME Bank got derived."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "editable": true,
    "scrolled": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": [
     "hide-input"
    ]
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>owner</th>\n",
       "      <th>asset</th>\n",
       "      <th>part</th>\n",
       "      <th>type/sub owner</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Family Doe</td>\n",
       "      <td>ACME Bank</td>\n",
       "      <td>0.245351</td>\n",
       "      <td>total</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Family Doe</td>\n",
       "      <td>ACME Bank</td>\n",
       "      <td>0.098297</td>\n",
       "      <td>Bob</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Family Doe</td>\n",
       "      <td>ACME Bank</td>\n",
       "      <td>0.147054</td>\n",
       "      <td>Anna</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Bob</td>\n",
       "      <td>ACME Bank</td>\n",
       "      <td>0.098297</td>\n",
       "      <td>total</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Family Doe</td>\n",
       "      <td>Bob</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>direct</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>Anna</td>\n",
       "      <td>ACME Bank</td>\n",
       "      <td>0.147054</td>\n",
       "      <td>total</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>Family Doe</td>\n",
       "      <td>Anna</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>direct</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>Bob</td>\n",
       "      <td>ACME Bank</td>\n",
       "      <td>0.098297</td>\n",
       "      <td>People Bank</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>Anna</td>\n",
       "      <td>ACME Bank</td>\n",
       "      <td>0.147054</td>\n",
       "      <td>MyBank</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>People Bank</td>\n",
       "      <td>ACME Bank</td>\n",
       "      <td>0.098297</td>\n",
       "      <td>total</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>Bob</td>\n",
       "      <td>People Bank</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>direct</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>Anna</td>\n",
       "      <td>MyBank</td>\n",
       "      <td>0.320000</td>\n",
       "      <td>direct</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>MyBank</td>\n",
       "      <td>ACME Bank</td>\n",
       "      <td>0.459545</td>\n",
       "      <td>total</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>People Bank</td>\n",
       "      <td>ACME Bank</td>\n",
       "      <td>0.098297</td>\n",
       "      <td>ACME Trust</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>MyBank</td>\n",
       "      <td>ACME Bank</td>\n",
       "      <td>0.119545</td>\n",
       "      <td>StellarSphere Enterprises</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>MyBank</td>\n",
       "      <td>ACME Bank</td>\n",
       "      <td>0.340000</td>\n",
       "      <td>direct</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          owner        asset      part             type/sub owner\n",
       "0    Family Doe    ACME Bank  0.245351                      total\n",
       "1    Family Doe    ACME Bank  0.098297                        Bob\n",
       "2    Family Doe    ACME Bank  0.147054                       Anna\n",
       "3           Bob    ACME Bank  0.098297                      total\n",
       "4    Family Doe          Bob  1.000000                     direct\n",
       "5          Anna    ACME Bank  0.147054                      total\n",
       "6    Family Doe         Anna  1.000000                     direct\n",
       "7           Bob    ACME Bank  0.098297                People Bank\n",
       "8          Anna    ACME Bank  0.147054                     MyBank\n",
       "9   People Bank    ACME Bank  0.098297                      total\n",
       "10          Bob  People Bank  1.000000                     direct\n",
       "11         Anna       MyBank  0.320000                     direct\n",
       "12       MyBank    ACME Bank  0.459545                      total\n",
       "13  People Bank    ACME Bank  0.098297                 ACME Trust\n",
       "14       MyBank    ACME Bank  0.119545  StellarSphere Enterprises\n",
       "15       MyBank    ACME Bank  0.340000                     direct"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "with model.rule():\n",
    "    TotalOwnership().set(type='total')\n",
    "    DirectOwnership().set(type='direct')\n",
    "    d = DerivedOwnership()\n",
    "    d.set(type=d.sub_owner.name)\n",
    "\n",
    "max_depth = 5 # set the level of sub-ownerships to be explained\n",
    "with model.query(dynamic=True) as select:\n",
    "    main_own = TotalOwnership(owner=Person(name = person_name).family, asset=FinancialInstitution(name = bank_name))\n",
    "    with model.match(multiple=True, dynamic=True) as rel_ownerships:\n",
    "        with model.case():\n",
    "            rel_ownerships.add(main_own, own=main_own, order = 0, type=main_own.type)\n",
    "        for i in range(max_depth):\n",
    "            with model.case(dynamic=True):\n",
    "                own = main_own\n",
    "                rank = 0\n",
    "                for j in range(i):\n",
    "                    rank = rank_asc(own.sub_source, per = [own])*(10**(i-j)) + rank\n",
    "                    own = own.sub_source\n",
    "                sub_own = own.sub_source\n",
    "                rank = rank + rank_asc(sub_own, per = [own])\n",
    "                rel_ownerships.add(sub_own, own=sub_own, order = rank, type = sub_own.type)\n",
    "    res = select(rel_ownerships.order, alias(rel_ownerships.own.owner.name, 'owner'), alias(rel_ownerships.own.asset.name, 'asset'), rel_ownerships.own.part, alias(rel_ownerships.type, 'type/sub owner'))\n",
    "pd.DataFrame(res.results, columns = ['owner', 'asset', 'part', 'type/sub owner'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Relevant ownerships graph"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": [
     "hide-input"
    ]
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "  <style>\n",
       "    /* Main divisions */\n",
       "    #i3GPEm2B72QnLGW7o-main-div {\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "      padding: 3px;\n",
       "      background-color: white;\n",
       "    }\n",
       "    #i3GPEm2B72QnLGW7o-left-div {\n",
       "      float: left;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    #i3GPEm2B72QnLGW7o-right-div {\n",
       "      float: left;\n",
       "      height: 100%;\n",
       "      display: none;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    #i3GPEm2B72QnLGW7o-right-inner-div {\n",
       "      padding-left: 5px;\n",
       "      padding-right: 2px;\n",
       "      overflow-x: hidden;\n",
       "      overflow-y: auto;\n",
       "      height: 100%;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "\n",
       "    /* Graph and details (contained in left-inner-div) */\n",
       "    #i3GPEm2B72QnLGW7o-graph-div {\n",
       "      overflow: hidden;\n",
       "      resize: vertical;\n",
       "      position: relative;\n",
       "      border: 1px solid #ccc;\n",
       "      border-radius: 4px;\n",
       "      box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2);\n",
       "      display: none;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    #i3GPEm2B72QnLGW7o-details-div {\n",
       "      overflow: auto;\n",
       "      resize: vertical;\n",
       "      margin-top: 5px;\n",
       "      border: 1px solid #ccc;\n",
       "      border-radius: 4px;\n",
       "      box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2);\n",
       "      display: none;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    #i3GPEm2B72QnLGW7o-details-head {\n",
       "      user-select: none;\n",
       "      padding-left: 4px !important;\n",
       "      padding-top: 4px !important;\n",
       "      font-size: 8px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      color: gray;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    #i3GPEm2B72QnLGW7o-details-body {\n",
       "      padding: 10px;\n",
       "      padding-top: 6px;\n",
       "      font-size: 10px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "\n",
       "    /* Control menu (contained in right-inner-div) */\n",
       "    .i3GPEm2B72QnLGW7o-menu-item-head {\n",
       "      font-size: 11px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      color: black;\n",
       "      cursor: pointer;\n",
       "      padding-left: 5px;\n",
       "      padding-right: 0px;\n",
       "      padding-top: 5px;\n",
       "      padding-bottom: 5px;\n",
       "      margin-bottom: 5px;\n",
       "      border-radius: 4px;\n",
       "      border: 1px solid #ccc;\n",
       "      box-shadow: 0px 0px 3px rgba(0, 0, 0, 0.2);\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    .i3GPEm2B72QnLGW7o-menu-item-body {\n",
       "      margin-left: 5px;\n",
       "      margin-bottom: 10px;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    .i3GPEm2B72QnLGW7o-menu-subitem-head {\n",
       "      font-size: 9px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      font-weight: 600;\n",
       "      color: #006429;\n",
       "      cursor: default;\n",
       "      margin-bottom: 2px;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    .i3GPEm2B72QnLGW7o-menu-subitem-body {\n",
       "      font-size: 8px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      margin-left: 7px;\n",
       "      margin-bottom: 5px;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    .i3GPEm2B72QnLGW7o-labeled-input {\n",
       "      all: initial;\n",
       "      display: flex;\n",
       "      align-items: center;\n",
       "      margin-top: 1px;\n",
       "      margin-bottom: 1px;\n",
       "    }\n",
       "    .i3GPEm2B72QnLGW7o-label {\n",
       "      all: initial;\n",
       "      font-size: 8px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      font-style: italic;\n",
       "      cursor: pointer;\n",
       "    }\n",
       "    .i3GPEm2B72QnLGW7o-slider {\n",
       "      width: 100%;\n",
       "      margin-bottom: 2px;\n",
       "    }\n",
       "    .i3GPEm2B72QnLGW7o-slider::-moz-focus-outer {\n",
       "      border: 0;\n",
       "    }\n",
       "    .i3GPEm2B72QnLGW7o-slider-text-left {\n",
       "      font-size: 8px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      font-style: italic;\n",
       "      color: black;\n",
       "      float: left;\n",
       "      margin-top: 2px;\n",
       "    }\n",
       "    .i3GPEm2B72QnLGW7o-slider-text-right {\n",
       "      font-size: 8px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      color: black;\n",
       "      float: right;\n",
       "    }\n",
       "    .i3GPEm2B72QnLGW7o-checkbox {\n",
       "      margin-left: 0px !important;\n",
       "      margin-right: 4px !important;\n",
       "      margin-top: 2px !important;\n",
       "      margin-bottom: 2px !important;\n",
       "      padding: 0px !important;\n",
       "    }\n",
       "    .i3GPEm2B72QnLGW7o-select {\n",
       "      cursor: pointer;\n",
       "      outline: none;\n",
       "      font-size: 8px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      color: black;\n",
       "      background-color: #f5f5f5;\n",
       "      width: 100%;\n",
       "      padding-top: 4px !important;\n",
       "      padding-bottom: 4px !important;\n",
       "      padding-left: 5px;\n",
       "      padding-right: 10px;\n",
       "      margin-right: 5px;\n",
       "      margin-top: 2px;\n",
       "      margin-bottom: 2px;\n",
       "      border-radius: 4px;\n",
       "      border: 1.2px solid #bbb;\n",
       "      box-shadow: 0 1px 0 1px rgba(0, 0, 0, 0.04);\n",
       "\n",
       "      -moz-appearance: none;\n",
       "      -webkit-appearance: none;\n",
       "      appearance: none;\n",
       "      background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyOTIuNCIgaGVpZ2h0PSIyOTIuNCI+PHBhdGggZmlsbD0iIzAwMDAwMCIgZD0iTSAtNS4yMDY0NjJlLTYsNjQuNTcyNjU2IDI5Mi4zOTk5OSw2NC41NzI2NTQgMTQ2LjE5OTk3LDIzMy42Mjg0NyAtNS4yMDY0NjJlLTYsNjQuNTcyNjU2Ii8+PC9zdmc+Cg==');\n",
       "      background-repeat: no-repeat;\n",
       "      background-position: right 4px top 50%;\n",
       "      background-size: 6px;\n",
       "    }\n",
       "    @-moz-document url-prefix() {\n",
       "      /* Dirty hack to remove dotted border on focus */\n",
       "      .i3GPEm2B72QnLGW7o-select {\n",
       "        color: transparent !important;\n",
       "        text-shadow: 0 0 0 black !important;\n",
       "      }\n",
       "    }\n",
       "    .i3GPEm2B72QnLGW7o-select:after {\n",
       "      cursor: pointer;\n",
       "    }\n",
       "    .i3GPEm2B72QnLGW7o-button {\n",
       "      cursor: pointer;\n",
       "      outline: none;\n",
       "      font-size: 8px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      color: black;\n",
       "      background-color: #f2f2f2;\n",
       "      padding-top: 4px !important;\n",
       "      padding-bottom: 4px !important;\n",
       "      padding-left: 10px;\n",
       "      padding-right: 10px;\n",
       "      margin-top: 2px;\n",
       "      margin-bottom: 2px;\n",
       "      border-radius: 4px;\n",
       "      border: 1.2px solid #bbb;\n",
       "      box-shadow: 0 1px 0 1px rgba(0, 0, 0, 0.04);\n",
       "    }\n",
       "    .i3GPEm2B72QnLGW7o-button:hover {\n",
       "      border: 1.2px solid #999;\n",
       "      background-color: #f2f2f2;\n",
       "    }\n",
       "    .i3GPEm2B72QnLGW7o-button:active {\n",
       "      background-color: #ddd;\n",
       "    }\n",
       "    .i3GPEm2B72QnLGW7o-button::-moz-focus-inner {\n",
       "      border: 0;\n",
       "    }\n",
       "    /* Hidden menu items */\n",
       "    #i3GPEm2B72QnLGW7o-graph-select-div {\n",
       "      display: none;\n",
       "    }\n",
       "    #i3GPEm2B72QnLGW7o-node-size-norm-div {\n",
       "      display: none;\n",
       "    }\n",
       "    #i3GPEm2B72QnLGW7o-edge-size-norm-div {\n",
       "      display: none;\n",
       "    }\n",
       "\n",
       "    /* Graph */\n",
       "    #i3GPEm2B72QnLGW7o-tooltip-div {\n",
       "      font-size: 10px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      z-index: 42001;\n",
       "      opacity: 0;\n",
       "      visibility: hidden;\n",
       "      position: absolute !important;\n",
       "      max-width: 40%;\n",
       "      padding: 5px;\n",
       "      white-space: pre-wrap;\n",
       "      word-break: break-word;\n",
       "      color: black;\n",
       "      background-color: white;\n",
       "      border-radius: 4px;\n",
       "      border: 1px solid #ccc;\n",
       "      box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.2);\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    #i3GPEm2B72QnLGW7o-menu-toggle-button, #i3GPEm2B72QnLGW7o-details-toggle-button, #i3GPEm2B72QnLGW7o-progress-container {\n",
       "      font-size: 14px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      z-index: 42000;\n",
       "      cursor: pointer;\n",
       "      position: absolute;\n",
       "      background-color: white;\n",
       "      border-radius: 4px;\n",
       "      box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.2);\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    #i3GPEm2B72QnLGW7o-menu-toggle-button {\n",
       "      top: 0;\n",
       "      right: 0;\n",
       "      padding-left: 6px;\n",
       "      padding-right: 6px;\n",
       "      padding-top: 12px;\n",
       "      padding-bottom: 12px;\n",
       "      border-top: 0px;\n",
       "      border-right: 0px;\n",
       "      border-bottom: 1px solid #ccc;\n",
       "      border-left: 1px solid #ccc;\n",
       "    }\n",
       "    #i3GPEm2B72QnLGW7o-details-toggle-button {\n",
       "      bottom: 0;\n",
       "      left: 0;\n",
       "      padding-left: 19px;\n",
       "      padding-right: 19px;\n",
       "      padding-top: 0.5px;\n",
       "      padding-bottom: 2px;\n",
       "      border-top: 1px solid #ccc;\n",
       "      border-right: 1px solid #ccc;\n",
       "      border-bottom: 0px;\n",
       "      border-left: 0px;\n",
       "    }\n",
       "    #i3GPEm2B72QnLGW7o-progress-container {\n",
       "      font-size: 10px;\n",
       "      text-align: center;\n",
       "      top: 46%;\n",
       "      left: 15%;\n",
       "      width: 70%;\n",
       "      padding: 8px;\n",
       "      border: none;\n",
       "      box-shadow: none;\n",
       "    }\n",
       "\n",
       "    /* Details */\n",
       "    #i3GPEm2B72QnLGW7o-details-user-provided {\n",
       "      margin-top: 3px;\n",
       "      padding-top: 3.5px;\n",
       "      border-top: 0.5px dashed black;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "      white-space: pre-wrap;\n",
       "      word-break: break-word;\n",
       "    }\n",
       "    #i3GPEm2B72QnLGW7o-details-user-provided ul {\n",
       "      list-style-position: inside;\n",
       "      padding-left: 6px;\n",
       "    }\n",
       "\n",
       "    /* Unavailable in vis.js and therefore hidden */\n",
       "    #i3GPEm2B72QnLGW7o-svg,\n",
       "    #i3GPEm2B72QnLGW7o-node-label-rotation,\n",
       "    #i3GPEm2B72QnLGW7o-edge-label-rotation {\n",
       "      display: none;\n",
       "    }\n",
       "    /* Specific to vis.js */\n",
       "    div.vis-tooltip {\n",
       "      position: absolute;\n",
       "      visibility: hidden;\n",
       "      pointer-events: none;\n",
       "      z-index: 5;\n",
       "      max-width: 40%;\n",
       "      white-space: pre-wrap;\n",
       "      word-break: break-word;\n",
       "      font-size: 10px;\n",
       "      padding: 5px;\n",
       "      color: black;\n",
       "      background-color: white;\n",
       "      -moz-border-radius: 3px;\n",
       "      -webkit-border-radius: 3px;\n",
       "      border-radius: 3px;\n",
       "      border: 0.5px solid black;\n",
       "      box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.3);\n",
       "    }\n",
       "  </style>\n",
       "\n",
       "  <div id=\"i3GPEm2B72QnLGW7o-main-div\">\n",
       "    <div id=\"i3GPEm2B72QnLGW7o-tooltip-div\"></div>\n",
       "\n",
       "    <div id=\"i3GPEm2B72QnLGW7o-left-div\">\n",
       "      <div id=\"i3GPEm2B72QnLGW7o-left-inner-div\">\n",
       "        <div id=\"i3GPEm2B72QnLGW7o-graph-div\"></div>\n",
       "        <div id=\"i3GPEm2B72QnLGW7o-details-div\">\n",
       "          <div id=\"i3GPEm2B72QnLGW7o-details-head\">\n",
       "            Details for selected element\n",
       "          </div>\n",
       "          <div id=\"i3GPEm2B72QnLGW7o-details-body\">\n",
       "          </div>\n",
       "        </div>\n",
       "      </div>\n",
       "    </div>\n",
       "\n",
       "    <div id=\"i3GPEm2B72QnLGW7o-right-div\">\n",
       "      <div id=\"i3GPEm2B72QnLGW7o-right-inner-div\">\n",
       "        <!-- Menu: General -->\n",
       "        <div class=\"i3GPEm2B72QnLGW7o-menu-item-head\"\n",
       "             id=\"i3GPEm2B72QnLGW7o-general-head\">\n",
       "          General\n",
       "        </div>\n",
       "        <div class=\"i3GPEm2B72QnLGW7o-menu-item-body\"\n",
       "             id=\"i3GPEm2B72QnLGW7o-general-body\">\n",
       "          <!-- Sub-menu: State -->\n",
       "          <div>\n",
       "            <div class=\"i3GPEm2B72QnLGW7o-menu-subitem-head\">\n",
       "              App state\n",
       "            </div>\n",
       "            <div class=\"i3GPEm2B72QnLGW7o-menu-subitem-body\">\n",
       "              <button class=\"i3GPEm2B72QnLGW7o-button\"\n",
       "                      id=\"i3GPEm2B72QnLGW7o-reset\"\n",
       "                      type=\"button\">Reset</button>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Display mode (fullscreen or not) -->\n",
       "          <div>\n",
       "            <div class=\"i3GPEm2B72QnLGW7o-menu-subitem-head\">\n",
       "              Display mode\n",
       "            </div>\n",
       "            <div class=\"i3GPEm2B72QnLGW7o-menu-subitem-body\">\n",
       "              <button class=\"i3GPEm2B72QnLGW7o-button\"\n",
       "                      id=\"i3GPEm2B72QnLGW7o-fullscreen-button\"\n",
       "                      type=\"button\">Enter full screen</button>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Export -->\n",
       "          <div>\n",
       "            <div class=\"i3GPEm2B72QnLGW7o-menu-subitem-head\">\n",
       "              Export\n",
       "            </div>\n",
       "            <div class=\"i3GPEm2B72QnLGW7o-menu-subitem-body\">\n",
       "              <button class=\"i3GPEm2B72QnLGW7o-button\"\n",
       "                      id=\"i3GPEm2B72QnLGW7o-svg\"\n",
       "                      type=\"button\">SVG</button>\n",
       "              <button class=\"i3GPEm2B72QnLGW7o-button\"\n",
       "                      id=\"i3GPEm2B72QnLGW7o-png\"\n",
       "                      type=\"button\">PNG</button>\n",
       "              <button class=\"i3GPEm2B72QnLGW7o-button\"\n",
       "                      id=\"i3GPEm2B72QnLGW7o-jpg\"\n",
       "                      type=\"button\">JPG</button>\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "        <!-- Menu: Data -->\n",
       "        <div class=\"i3GPEm2B72QnLGW7o-menu-item-head\"\n",
       "             id=\"i3GPEm2B72QnLGW7o-data-head\">\n",
       "          Data selection\n",
       "        </div>\n",
       "        <div class=\"i3GPEm2B72QnLGW7o-menu-item-body\"\n",
       "             id=\"i3GPEm2B72QnLGW7o-data-body\">\n",
       "          <!-- Sub-menu: Graph (only shown if multiple graphs in data) -->\n",
       "          <div id=\"i3GPEm2B72QnLGW7o-graph-select-div\">\n",
       "            <div class=\"i3GPEm2B72QnLGW7o-menu-subitem-head\">\n",
       "              Graph\n",
       "            </div>\n",
       "            <div class=\"i3GPEm2B72QnLGW7o-menu-subitem-body\">\n",
       "              <select class=\"i3GPEm2B72QnLGW7o-select\"\n",
       "                      id=\"i3GPEm2B72QnLGW7o-graph-select\"></select>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Node label text -->\n",
       "          <div>\n",
       "            <div class=\"i3GPEm2B72QnLGW7o-menu-subitem-head\">\n",
       "              Node label text\n",
       "            </div>\n",
       "            <div class=\"i3GPEm2B72QnLGW7o-menu-subitem-body\">\n",
       "              <select class=\"i3GPEm2B72QnLGW7o-select\"\n",
       "                      id=\"i3GPEm2B72QnLGW7o-node-label-data-source-select\"></select>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Edge label text -->\n",
       "          <div>\n",
       "            <div class=\"i3GPEm2B72QnLGW7o-menu-subitem-head\">\n",
       "              Edge label text\n",
       "            </div>\n",
       "            <div class=\"i3GPEm2B72QnLGW7o-menu-subitem-body\">\n",
       "              <select class=\"i3GPEm2B72QnLGW7o-select\"\n",
       "                      id=\"i3GPEm2B72QnLGW7o-edge-label-data-source-select\"></select>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Node size -->\n",
       "          <div class=\"i3GPEm2B72QnLGW7o-menu-subitem-head\">\n",
       "            Node size\n",
       "          </div>\n",
       "          <div class=\"i3GPEm2B72QnLGW7o-menu-subitem-body\">\n",
       "            <div>\n",
       "              <select class=\"i3GPEm2B72QnLGW7o-select\"\n",
       "                      id=\"i3GPEm2B72QnLGW7o-node-size-data-source-select\"></select>\n",
       "            </div>\n",
       "            <div class=\"i3GPEm2B72QnLGW7o-labeled-input\">\n",
       "              <input class=\"i3GPEm2B72QnLGW7o-checkbox\"\n",
       "                     id=\"i3GPEm2B72QnLGW7o-node-size-normalization-checkbox\"\n",
       "                     type=\"checkbox\">\n",
       "              <label class=\"i3GPEm2B72QnLGW7o-label\"\n",
       "                     for=\"i3GPEm2B72QnLGW7o-node-size-normalization-checkbox\">Normalize</label>\n",
       "            </div>\n",
       "            <div id=\"i3GPEm2B72QnLGW7o-node-size-norm-div\">\n",
       "              <div>\n",
       "                <span class=\"i3GPEm2B72QnLGW7o-slider-text-left\">Minimum</span>\n",
       "                <span class=\"i3GPEm2B72QnLGW7o-slider-text-right\"\n",
       "                      id=\"i3GPEm2B72QnLGW7o-node-size-normalization-min-text\"></span>\n",
       "                <input class=\"i3GPEm2B72QnLGW7o-slider\"\n",
       "                       id=\"i3GPEm2B72QnLGW7o-node-size-normalization-min-slider\"\n",
       "                       type=\"range\" min=\"0.01\" max=\"300.0\" step=\"0.01\">\n",
       "              </div>\n",
       "              <div>\n",
       "                <span class=\"i3GPEm2B72QnLGW7o-slider-text-left\">Maximum</span>\n",
       "                <span class=\"i3GPEm2B72QnLGW7o-slider-text-right\"\n",
       "                      id=\"i3GPEm2B72QnLGW7o-node-size-normalization-max-text\"></span>\n",
       "                <input class=\"i3GPEm2B72QnLGW7o-slider\"\n",
       "                       id=\"i3GPEm2B72QnLGW7o-node-size-normalization-max-slider\"\n",
       "                       type=\"range\" min=\"0.01\" max=\"300.0\" step=\"0.01\">\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Edge size -->\n",
       "          <div class=\"i3GPEm2B72QnLGW7o-menu-subitem-head\">\n",
       "            Edge size\n",
       "          </div>\n",
       "          <div class=\"i3GPEm2B72QnLGW7o-menu-subitem-body\">\n",
       "            <div>\n",
       "              <select class=\"i3GPEm2B72QnLGW7o-select\"\n",
       "                      id=\"i3GPEm2B72QnLGW7o-edge-size-data-source-select\"></select>\n",
       "            </div>\n",
       "            <div class=\"i3GPEm2B72QnLGW7o-labeled-input\">\n",
       "              <input class=\"i3GPEm2B72QnLGW7o-checkbox\"\n",
       "                     id=\"i3GPEm2B72QnLGW7o-edge-size-normalization-checkbox\"\n",
       "                     type=\"checkbox\">\n",
       "              <label class=\"i3GPEm2B72QnLGW7o-label\"\n",
       "                     for=\"i3GPEm2B72QnLGW7o-edge-size-normalization-checkbox\">Normalize</label>\n",
       "            </div>\n",
       "            <div id=\"i3GPEm2B72QnLGW7o-edge-size-norm-div\">\n",
       "              <div>\n",
       "                <span class=\"i3GPEm2B72QnLGW7o-slider-text-left\">Minimum</span>\n",
       "                <span class=\"i3GPEm2B72QnLGW7o-slider-text-right\"\n",
       "                      id=\"i3GPEm2B72QnLGW7o-edge-size-normalization-min-text\"></span>\n",
       "                <input class=\"i3GPEm2B72QnLGW7o-slider\"\n",
       "                       id=\"i3GPEm2B72QnLGW7o-edge-size-normalization-min-slider\"\n",
       "                       type=\"range\" min=\"0.01\" max=\"50.0\" step=\"0.01\">\n",
       "              </div>\n",
       "              <div>\n",
       "                <span class=\"i3GPEm2B72QnLGW7o-slider-text-left\">Maximum</span>\n",
       "                <span class=\"i3GPEm2B72QnLGW7o-slider-text-right\"\n",
       "                      id=\"i3GPEm2B72QnLGW7o-edge-size-normalization-max-text\"></span>\n",
       "                <input class=\"i3GPEm2B72QnLGW7o-slider\"\n",
       "                       id=\"i3GPEm2B72QnLGW7o-edge-size-normalization-max-slider\"\n",
       "                       type=\"range\" min=\"0.01\" max=\"50.0\" step=\"0.01\">\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "        <!-- Menu: Nodes -->\n",
       "        <div class=\"i3GPEm2B72QnLGW7o-menu-item-head\"\n",
       "             id=\"i3GPEm2B72QnLGW7o-node-head\">\n",
       "          Nodes\n",
       "        </div>\n",
       "        <div class=\"i3GPEm2B72QnLGW7o-menu-item-body\"\n",
       "             id=\"i3GPEm2B72QnLGW7o-node-body\">\n",
       "          <!-- Sub-menu: Visibility -->\n",
       "          <div>\n",
       "            <div class=\"i3GPEm2B72QnLGW7o-menu-subitem-head\">\n",
       "              Visibility\n",
       "            </div>\n",
       "            <div class=\"i3GPEm2B72QnLGW7o-menu-subitem-body\">\n",
       "              <div class=\"i3GPEm2B72QnLGW7o-labeled-input\">\n",
       "                <input class=\"i3GPEm2B72QnLGW7o-checkbox\"\n",
       "                       id=\"i3GPEm2B72QnLGW7o-node-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"i3GPEm2B72QnLGW7o-label\"\n",
       "                       for=\"i3GPEm2B72QnLGW7o-node-checkbox\">Show nodes</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Size -->\n",
       "          <div>\n",
       "            <div class=\"i3GPEm2B72QnLGW7o-menu-subitem-head\">\n",
       "              Size\n",
       "            </div>\n",
       "            <div class=\"i3GPEm2B72QnLGW7o-menu-subitem-body\">\n",
       "              <div>\n",
       "                <span class=\"i3GPEm2B72QnLGW7o-slider-text-left\">Scaling factor</span>\n",
       "                <span class=\"i3GPEm2B72QnLGW7o-slider-text-right\"\n",
       "                      id=\"i3GPEm2B72QnLGW7o-node-size-factor-text\"></span>\n",
       "                <input class=\"i3GPEm2B72QnLGW7o-slider\"\n",
       "                       id=\"i3GPEm2B72QnLGW7o-node-size-factor-slider\"\n",
       "                       type=\"range\" min=\"0.01\" max=\"5.0\" step=\"0.01\">\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Position -->\n",
       "          <div>\n",
       "            <div class=\"i3GPEm2B72QnLGW7o-menu-subitem-head\">\n",
       "              Position\n",
       "            </div>\n",
       "            <div class=\"i3GPEm2B72QnLGW7o-menu-subitem-body\">\n",
       "              <button class=\"i3GPEm2B72QnLGW7o-button\"\n",
       "                      id=\"i3GPEm2B72QnLGW7o-node-release-button\"\n",
       "                      type=\"button\">Release fixed nodes</button>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Drag behavior -->\n",
       "          <div>\n",
       "            <div class=\"i3GPEm2B72QnLGW7o-menu-subitem-head\">\n",
       "              Drag behavior\n",
       "            </div>\n",
       "            <div class=\"i3GPEm2B72QnLGW7o-menu-subitem-body\">\n",
       "              <div class=\"i3GPEm2B72QnLGW7o-labeled-input\">\n",
       "                <input class=\"i3GPEm2B72QnLGW7o-checkbox\"\n",
       "                       id=\"i3GPEm2B72QnLGW7o-node-drag-fix-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"i3GPEm2B72QnLGW7o-label\"\n",
       "                       for=\"i3GPEm2B72QnLGW7o-node-drag-fix-checkbox\">Fix node position</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Hover behavior -->\n",
       "          <div>\n",
       "            <div class=\"i3GPEm2B72QnLGW7o-menu-subitem-head\">\n",
       "              Hover behavior\n",
       "            </div>\n",
       "            <div class=\"i3GPEm2B72QnLGW7o-menu-subitem-body\">\n",
       "              <div class=\"i3GPEm2B72QnLGW7o-labeled-input\">\n",
       "                <input class=\"i3GPEm2B72QnLGW7o-checkbox\"\n",
       "                       id=\"i3GPEm2B72QnLGW7o-node-hover-neighborhood-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"i3GPEm2B72QnLGW7o-label\"\n",
       "                       for=\"i3GPEm2B72QnLGW7o-node-hover-neighborhood-checkbox\">Show neighborhood</label>\n",
       "              </div>\n",
       "              <div class=\"i3GPEm2B72QnLGW7o-labeled-input\">\n",
       "                <input class=\"i3GPEm2B72QnLGW7o-checkbox\"\n",
       "                       id=\"i3GPEm2B72QnLGW7o-node-hover-tooltip-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"i3GPEm2B72QnLGW7o-label\"\n",
       "                       for=\"i3GPEm2B72QnLGW7o-node-hover-tooltip-checkbox\">Show tooltips (if provided)</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "        <!-- Menu: Node images -->\n",
       "        <div id=\"i3GPEm2B72QnLGW7o-node-image-meta-control\">\n",
       "          <div class=\"i3GPEm2B72QnLGW7o-menu-item-head\"\n",
       "               id=\"i3GPEm2B72QnLGW7o-node-image-head\">\n",
       "            Node images\n",
       "          </div>\n",
       "          <div class=\"i3GPEm2B72QnLGW7o-menu-item-body\"\n",
       "               id=\"i3GPEm2B72QnLGW7o-node-image-body\">\n",
       "            <!-- Sub-menu: Visibility -->\n",
       "            <div>\n",
       "              <div class=\"i3GPEm2B72QnLGW7o-menu-subitem-head\">\n",
       "                Visibility\n",
       "              </div>\n",
       "              <div class=\"i3GPEm2B72QnLGW7o-menu-subitem-body\">\n",
       "                <div class=\"i3GPEm2B72QnLGW7o-labeled-input\">\n",
       "                  <input class=\"i3GPEm2B72QnLGW7o-checkbox\"\n",
       "                         id=\"i3GPEm2B72QnLGW7o-node-image-checkbox\"\n",
       "                         type=\"checkbox\">\n",
       "                  <label class=\"i3GPEm2B72QnLGW7o-label\"\n",
       "                         for=\"i3GPEm2B72QnLGW7o-node-image-checkbox\">Show node images</label>\n",
       "                </div>\n",
       "              </div>\n",
       "            </div>\n",
       "            <!-- Sub-menu: Size -->\n",
       "            <div>\n",
       "              <div class=\"i3GPEm2B72QnLGW7o-menu-subitem-head\">\n",
       "                Size\n",
       "              </div>\n",
       "              <div class=\"i3GPEm2B72QnLGW7o-menu-subitem-body\">\n",
       "                <span class=\"i3GPEm2B72QnLGW7o-slider-text-left\">Scaling factor</span>\n",
       "                <span class=\"i3GPEm2B72QnLGW7o-slider-text-right\"\n",
       "                      id=\"i3GPEm2B72QnLGW7o-node-image-size-factor-text\"></span>\n",
       "                <input class=\"i3GPEm2B72QnLGW7o-slider\"\n",
       "                       id=\"i3GPEm2B72QnLGW7o-node-image-size-factor-slider\"\n",
       "                       type=\"range\" min=\"0.01\" max=\"5.0\" step=\"0.01\">\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "        <!-- Menu: Node labels -->\n",
       "        <div class=\"i3GPEm2B72QnLGW7o-menu-item-head\"\n",
       "             id=\"i3GPEm2B72QnLGW7o-node-label-head\">\n",
       "          Node labels\n",
       "        </div>\n",
       "        <div class=\"i3GPEm2B72QnLGW7o-menu-item-body\"\n",
       "             id=\"i3GPEm2B72QnLGW7o-node-label-body\">\n",
       "          <!-- Sub-menu: Visibility -->\n",
       "          <div>\n",
       "            <div class=\"i3GPEm2B72QnLGW7o-menu-subitem-head\">\n",
       "              Visibility\n",
       "            </div>\n",
       "            <div class=\"i3GPEm2B72QnLGW7o-menu-subitem-body\">\n",
       "              <div class=\"i3GPEm2B72QnLGW7o-labeled-input\">\n",
       "                <input class=\"i3GPEm2B72QnLGW7o-checkbox\"\n",
       "                       id=\"i3GPEm2B72QnLGW7o-node-label-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"i3GPEm2B72QnLGW7o-label\"\n",
       "                       for=\"i3GPEm2B72QnLGW7o-node-label-checkbox\">Show node labels</label>\n",
       "              </div>\n",
       "              <div class=\"i3GPEm2B72QnLGW7o-labeled-input\">\n",
       "                <input class=\"i3GPEm2B72QnLGW7o-checkbox\"\n",
       "                       id=\"i3GPEm2B72QnLGW7o-node-label-border-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"i3GPEm2B72QnLGW7o-label\"\n",
       "                       for=\"i3GPEm2B72QnLGW7o-node-label-border-checkbox\">Show borders</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Size -->\n",
       "          <div>\n",
       "            <div class=\"i3GPEm2B72QnLGW7o-menu-subitem-head\">\n",
       "              Size\n",
       "            </div>\n",
       "            <div class=\"i3GPEm2B72QnLGW7o-menu-subitem-body\">\n",
       "              <span class=\"i3GPEm2B72QnLGW7o-slider-text-left\">Scaling factor</span>\n",
       "              <span class=\"i3GPEm2B72QnLGW7o-slider-text-right\"\n",
       "                    id=\"i3GPEm2B72QnLGW7o-node-label-size-factor-text\"></span>\n",
       "              <input class=\"i3GPEm2B72QnLGW7o-slider\"\n",
       "                     id=\"i3GPEm2B72QnLGW7o-node-label-size-factor-slider\"\n",
       "                     type=\"range\" min=\"0.01\" max=\"5.0\" step=\"0.01\">\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Rotation -->\n",
       "          <div id=\"i3GPEm2B72QnLGW7o-node-label-rotation\">\n",
       "            <div class=\"i3GPEm2B72QnLGW7o-menu-subitem-head\">\n",
       "              Rotation\n",
       "            </div>\n",
       "            <div class=\"i3GPEm2B72QnLGW7o-menu-subitem-body\">\n",
       "              <span class=\"i3GPEm2B72QnLGW7o-slider-text-left\">Angle</span>\n",
       "              <span class=\"i3GPEm2B72QnLGW7o-slider-text-right\"\n",
       "                    id=\"i3GPEm2B72QnLGW7o-node-label-rotation-text\"></span>\n",
       "              <input class=\"i3GPEm2B72QnLGW7o-slider\"\n",
       "                     id=\"i3GPEm2B72QnLGW7o-node-label-rotation-slider\"\n",
       "                     type=\"range\" min=\"0.0\" max=\"359.0\" step=\"1.0\">\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "        <!-- Menu: Edges -->\n",
       "        <div class=\"i3GPEm2B72QnLGW7o-menu-item-head\"\n",
       "             id=\"i3GPEm2B72QnLGW7o-edge-head\">\n",
       "          Edges\n",
       "        </div>\n",
       "        <div class=\"i3GPEm2B72QnLGW7o-menu-item-body\"\n",
       "             id=\"i3GPEm2B72QnLGW7o-edge-body\">\n",
       "          <!-- Sub-menu: Visibility -->\n",
       "          <div>\n",
       "            <div class=\"i3GPEm2B72QnLGW7o-menu-subitem-head\">\n",
       "              Visibility\n",
       "            </div>\n",
       "            <div class=\"i3GPEm2B72QnLGW7o-menu-subitem-body\">\n",
       "              <div class=\"i3GPEm2B72QnLGW7o-labeled-input\">\n",
       "                <input class=\"i3GPEm2B72QnLGW7o-checkbox\"\n",
       "                       id=\"i3GPEm2B72QnLGW7o-edge-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"i3GPEm2B72QnLGW7o-label\"\n",
       "                       for=\"i3GPEm2B72QnLGW7o-edge-checkbox\">Show edges</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Size -->\n",
       "          <div>\n",
       "            <div class=\"i3GPEm2B72QnLGW7o-menu-subitem-head\">\n",
       "              Size\n",
       "            </div>\n",
       "            <div class=\"i3GPEm2B72QnLGW7o-menu-subitem-body\">\n",
       "              <span class=\"i3GPEm2B72QnLGW7o-slider-text-left\">Scaling factor</span>\n",
       "              <span class=\"i3GPEm2B72QnLGW7o-slider-text-right\"\n",
       "                    id=\"i3GPEm2B72QnLGW7o-edge-size-factor-text\"></span>\n",
       "              <input class=\"i3GPEm2B72QnLGW7o-slider\"\n",
       "                     id=\"i3GPEm2B72QnLGW7o-edge-size-factor-slider\"\n",
       "                     type=\"range\" min=\"0.01\" max=\"5.0\" step=\"0.01\">\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Form -->\n",
       "          <div>\n",
       "            <div class=\"i3GPEm2B72QnLGW7o-menu-subitem-head\">\n",
       "              Form\n",
       "            </div>\n",
       "            <div class=\"i3GPEm2B72QnLGW7o-menu-subitem-body\">\n",
       "              <span class=\"i3GPEm2B72QnLGW7o-slider-text-left\">Curvature</span>\n",
       "              <span class=\"i3GPEm2B72QnLGW7o-slider-text-right\"\n",
       "                    id=\"i3GPEm2B72QnLGW7o-edge-curvature-text\"></span>\n",
       "              <input class=\"i3GPEm2B72QnLGW7o-slider\"\n",
       "                     id=\"i3GPEm2B72QnLGW7o-edge-curvature-slider\"\n",
       "                     type=\"range\" min=\"-1.2\" max=\"1.2\" step=\"0.02\">\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Hover behavior -->\n",
       "          <div>\n",
       "            <div class=\"i3GPEm2B72QnLGW7o-menu-subitem-head\">\n",
       "              Hover behavior\n",
       "            </div>\n",
       "            <div class=\"i3GPEm2B72QnLGW7o-menu-subitem-body\">\n",
       "              <div class=\"i3GPEm2B72QnLGW7o-labeled-input\">\n",
       "                <input class=\"i3GPEm2B72QnLGW7o-checkbox\"\n",
       "                       id=\"i3GPEm2B72QnLGW7o-edge-hover-tooltip-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"i3GPEm2B72QnLGW7o-label\"\n",
       "                       for=\"i3GPEm2B72QnLGW7o-edge-hover-tooltip-checkbox\">Show tooltips (if provided)</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "        <!-- Menu: Edge labels -->\n",
       "        <div class=\"i3GPEm2B72QnLGW7o-menu-item-head\"\n",
       "             id=\"i3GPEm2B72QnLGW7o-edge-label-head\">\n",
       "          Edge labels\n",
       "        </div>\n",
       "        <div class=\"i3GPEm2B72QnLGW7o-menu-item-body\"\n",
       "             id=\"i3GPEm2B72QnLGW7o-edge-label-body\">\n",
       "          <!-- Sub-menu: Visibility -->\n",
       "          <div>\n",
       "            <div class=\"i3GPEm2B72QnLGW7o-menu-subitem-head\">\n",
       "              Visibility\n",
       "            </div>\n",
       "            <div class=\"i3GPEm2B72QnLGW7o-menu-subitem-body\">\n",
       "              <div class=\"i3GPEm2B72QnLGW7o-labeled-input\">\n",
       "                <input class=\"i3GPEm2B72QnLGW7o-checkbox\"\n",
       "                       id=\"i3GPEm2B72QnLGW7o-edge-label-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"i3GPEm2B72QnLGW7o-label\"\n",
       "                       for=\"i3GPEm2B72QnLGW7o-edge-label-checkbox\">Show edge labels</label>\n",
       "              </div>\n",
       "              <div class=\"i3GPEm2B72QnLGW7o-labeled-input\">\n",
       "                <input class=\"i3GPEm2B72QnLGW7o-checkbox\"\n",
       "                       id=\"i3GPEm2B72QnLGW7o-edge-label-border-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"i3GPEm2B72QnLGW7o-label\"\n",
       "                       for=\"i3GPEm2B72QnLGW7o-edge-label-border-checkbox\">Show borders</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Size -->\n",
       "          <div>\n",
       "            <div class=\"i3GPEm2B72QnLGW7o-menu-subitem-head\">\n",
       "              Size\n",
       "            </div>\n",
       "            <div class=\"i3GPEm2B72QnLGW7o-menu-subitem-body\">\n",
       "              <span class=\"i3GPEm2B72QnLGW7o-slider-text-left\">Scaling factor</span>\n",
       "              <span class=\"i3GPEm2B72QnLGW7o-slider-text-right\"\n",
       "                    id=\"i3GPEm2B72QnLGW7o-edge-label-size-factor-text\"></span>\n",
       "              <input class=\"i3GPEm2B72QnLGW7o-slider\"\n",
       "                     id=\"i3GPEm2B72QnLGW7o-edge-label-size-factor-slider\"\n",
       "                     type=\"range\" min=\"0.01\" max=\"5.0\" step=\"0.01\">\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Rotation -->\n",
       "          <div id=\"i3GPEm2B72QnLGW7o-edge-label-rotation\">\n",
       "            <div class=\"i3GPEm2B72QnLGW7o-menu-subitem-head\">\n",
       "              Rotation\n",
       "            </div>\n",
       "            <div class=\"i3GPEm2B72QnLGW7o-menu-subitem-body\">\n",
       "              <span class=\"i3GPEm2B72QnLGW7o-slider-text-left\">Angle</span>\n",
       "              <span class=\"i3GPEm2B72QnLGW7o-slider-text-right\"\n",
       "                      id=\"i3GPEm2B72QnLGW7o-edge-label-rotation-text\"></span>\n",
       "              <input class=\"i3GPEm2B72QnLGW7o-slider\"\n",
       "                     id=\"i3GPEm2B72QnLGW7o-edge-label-rotation-slider\"\n",
       "                     type=\"range\" min=\"0.0\" max=\"359.0\" step=\"1.0\">\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "        <!-- Menu: Layout algorithm -->\n",
       "        <div class=\"i3GPEm2B72QnLGW7o-menu-item-head\"\n",
       "             id=\"i3GPEm2B72QnLGW7o-layout-algorithm-head\">\n",
       "          Layout algorithm\n",
       "        </div>\n",
       "        <div class=\"i3GPEm2B72QnLGW7o-menu-item-body\"\n",
       "             id=\"i3GPEm2B72QnLGW7o-layout-algorithm-body\">\n",
       "          <!-- Sub-menu: Simulation -->\n",
       "          <div>\n",
       "            <div class=\"i3GPEm2B72QnLGW7o-menu-subitem-head\">\n",
       "              Simulation\n",
       "            </div>\n",
       "            <div class=\"i3GPEm2B72QnLGW7o-menu-subitem-body\">\n",
       "              <div class=\"i3GPEm2B72QnLGW7o-labeled-input\">\n",
       "                <input class=\"i3GPEm2B72QnLGW7o-checkbox\"\n",
       "                       id=\"i3GPEm2B72QnLGW7o-simulation-active-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"i3GPEm2B72QnLGW7o-label\"\n",
       "                       for=\"i3GPEm2B72QnLGW7o-simulation-active-checkbox\">Active</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Algorithm -->\n",
       "          <div>\n",
       "            <div class=\"i3GPEm2B72QnLGW7o-menu-subitem-head\">\n",
       "              Algorithm\n",
       "            </div>\n",
       "            <div class=\"i3GPEm2B72QnLGW7o-menu-subitem-body\">\n",
       "              <div>\n",
       "                <select class=\"i3GPEm2B72QnLGW7o-select\"\n",
       "                        id=\"i3GPEm2B72QnLGW7o-layout-algorithm-select\"></select>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Parameters -->\n",
       "          <div>\n",
       "            <div class=\"i3GPEm2B72QnLGW7o-menu-subitem-head\">\n",
       "              Parameters\n",
       "            </div>\n",
       "            <div class=\"i3GPEm2B72QnLGW7o-menu-subitem-body\">\n",
       "              <div id=\"i3GPEm2B72QnLGW7o-gravitational-constant-div\">\n",
       "                <span class=\"i3GPEm2B72QnLGW7o-slider-text-left\">Gravitational constant</span>\n",
       "                <span class=\"i3GPEm2B72QnLGW7o-slider-text-right\"\n",
       "                      id=\"i3GPEm2B72QnLGW7o-gravitational-constant-text\"></span>\n",
       "                <input class=\"i3GPEm2B72QnLGW7o-slider\"\n",
       "                       id=\"i3GPEm2B72QnLGW7o-gravitational-constant-slider\"\n",
       "                       type=\"range\" min=\"-50000\" max=\"0\" step=\"1\"\n",
       "                       style=\"direction:rtl;\">\n",
       "              </div>\n",
       "              <div id=\"i3GPEm2B72QnLGW7o-spring-length-div\">\n",
       "                <span class=\"i3GPEm2B72QnLGW7o-slider-text-left\">Spring length</span>\n",
       "                <span class=\"i3GPEm2B72QnLGW7o-slider-text-right\"\n",
       "                      id=\"i3GPEm2B72QnLGW7o-spring-length-text\"></span>\n",
       "                <input class=\"i3GPEm2B72QnLGW7o-slider\"\n",
       "                       id=\"i3GPEm2B72QnLGW7o-spring-length-slider\"\n",
       "                       type=\"range\" min=\"0.0\" max=\"500\" step=\"0.1\">\n",
       "              </div>\n",
       "              <div id=\"i3GPEm2B72QnLGW7o-spring-constant-div\">\n",
       "                <span class=\"i3GPEm2B72QnLGW7o-slider-text-left\">Spring constant</span>\n",
       "                <span class=\"i3GPEm2B72QnLGW7o-slider-text-right\"\n",
       "                      id=\"i3GPEm2B72QnLGW7o-spring-constant-text\"></span>\n",
       "                <input class=\"i3GPEm2B72QnLGW7o-slider\"\n",
       "                       id=\"i3GPEm2B72QnLGW7o-spring-constant-slider\"\n",
       "                       type=\"range\" min=\"0.0\" max=\"1.0\" step=\"0.01\">\n",
       "              </div>\n",
       "              <div id=\"i3GPEm2B72QnLGW7o-avoid-overlap-div\">\n",
       "                <span class=\"i3GPEm2B72QnLGW7o-slider-text-left\">Avoid overlap</span>\n",
       "                <span class=\"i3GPEm2B72QnLGW7o-slider-text-right\"\n",
       "                      id=\"i3GPEm2B72QnLGW7o-avoid-overlap-text\"></span>\n",
       "                <input class=\"i3GPEm2B72QnLGW7o-slider\"\n",
       "                       id=\"i3GPEm2B72QnLGW7o-avoid-overlap-slider\"\n",
       "                       type=\"range\" min=\"0.0\" max=\"1.0\" step=\"0.01\">\n",
       "              </div>\n",
       "              <div id=\"i3GPEm2B72QnLGW7o-central-gravity-div\">\n",
       "                <span class=\"i3GPEm2B72QnLGW7o-slider-text-left\">Central gravity</span>\n",
       "                <span class=\"i3GPEm2B72QnLGW7o-slider-text-right\"\n",
       "                      id=\"i3GPEm2B72QnLGW7o-central-gravity-text\"></span>\n",
       "                <input class=\"i3GPEm2B72QnLGW7o-slider\"\n",
       "                       id=\"i3GPEm2B72QnLGW7o-central-gravity-slider\"\n",
       "                       type=\"range\" min=\"0.0\" max=\"10.0\" step=\"0.001\">\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "      </div>\n",
       "    </div>\n",
       "  </div>\n",
       "\n",
       "  <script charset=\"utf-8\" type=\"text/javascript\">\n",
       "    if(typeof(require) === \"undefined\"){\n",
       "      // Project sites:    https://requirejs.org\n",
       "//                   https://github.com/requirejs/requirejs\n",
       "// Code source:      https://requirejs.org/docs/release/2.3.6/minified/require.js - accessed on 19.11.2020\n",
       "// Original license: MIT\n",
       "// Code changes:     None\n",
       "\n",
       "/** vim: et:ts=4:sw=4:sts=4\n",
       " * @license RequireJS 2.3.6 Copyright jQuery Foundation and other contributors.\n",
       " * Released under MIT license, https://github.com/requirejs/requirejs/blob/master/LICENSE\n",
       " */\n",
       "var requirejs,require,define;!function(global,setTimeout){var req,s,head,baseElement,dataMain,src,interactiveScript,currentlyAddingScript,mainScript,subPath,version=\"2.3.6\",commentRegExp=/\\/\\*[\\s\\S]*?\\*\\/|([^:\"'=]|^)\\/\\/.*$/gm,cjsRequireRegExp=/[^.]\\s*require\\s*\\(\\s*[\"']([^'\"\\s]+)[\"']\\s*\\)/g,jsSuffixRegExp=/\\.js$/,currDirRegExp=/^\\.\\//,op=Object.prototype,ostring=op.toString,hasOwn=op.hasOwnProperty,isBrowser=!(\"undefined\"==typeof window||\"undefined\"==typeof navigator||!window.document),isWebWorker=!isBrowser&&\"undefined\"!=typeof importScripts,readyRegExp=isBrowser&&\"PLAYSTATION 3\"===navigator.platform?/^complete$/:/^(complete|loaded)$/,defContextName=\"_\",isOpera=\"undefined\"!=typeof opera&&\"[object Opera]\"===opera.toString(),contexts={},cfg={},globalDefQueue=[],useInteractive=!1;function commentReplace(e,t){return t||\"\"}function isFunction(e){return\"[object Function]\"===ostring.call(e)}function isArray(e){return\"[object Array]\"===ostring.call(e)}function each(e,t){var i;if(e)for(i=0;i<e.length&&(!e[i]||!t(e[i],i,e));i+=1);}function eachReverse(e,t){var i;if(e)for(i=e.length-1;-1<i&&(!e[i]||!t(e[i],i,e));i-=1);}function hasProp(e,t){return hasOwn.call(e,t)}function getOwn(e,t){return hasProp(e,t)&&e[t]}function eachProp(e,t){var i;for(i in e)if(hasProp(e,i)&&t(e[i],i))break}function mixin(i,e,r,n){return e&&eachProp(e,function(e,t){!r&&hasProp(i,t)||(!n||\"object\"!=typeof e||!e||isArray(e)||isFunction(e)||e instanceof RegExp?i[t]=e:(i[t]||(i[t]={}),mixin(i[t],e,r,n)))}),i}function bind(e,t){return function(){return t.apply(e,arguments)}}function scripts(){return document.getElementsByTagName(\"script\")}function defaultOnError(e){throw e}function getGlobal(e){if(!e)return e;var t=global;return each(e.split(\".\"),function(e){t=t[e]}),t}function makeError(e,t,i,r){var n=new Error(t+\"\\nhttps://requirejs.org/docs/errors.html#\"+e);return n.requireType=e,n.requireModules=r,i&&(n.originalError=i),n}if(void 0===define){if(void 0!==requirejs){if(isFunction(requirejs))return;cfg=requirejs,requirejs=void 0}void 0===require||isFunction(require)||(cfg=require,require=void 0),req=requirejs=function(e,t,i,r){var n,o,a=defContextName;return isArray(e)||\"string\"==typeof e||(o=e,isArray(t)?(e=t,t=i,i=r):e=[]),o&&o.context&&(a=o.context),(n=getOwn(contexts,a))||(n=contexts[a]=req.s.newContext(a)),o&&n.configure(o),n.require(e,t,i)},req.config=function(e){return req(e)},req.nextTick=void 0!==setTimeout?function(e){setTimeout(e,4)}:function(e){e()},require||(require=req),req.version=version,req.jsExtRegExp=/^\\/|:|\\?|\\.js$/,req.isBrowser=isBrowser,s=req.s={contexts:contexts,newContext:newContext},req({}),each([\"toUrl\",\"undef\",\"defined\",\"specified\"],function(t){req[t]=function(){var e=contexts[defContextName];return e.require[t].apply(e,arguments)}}),isBrowser&&(head=s.head=document.getElementsByTagName(\"head\")[0],baseElement=document.getElementsByTagName(\"base\")[0],baseElement&&(head=s.head=baseElement.parentNode)),req.onError=defaultOnError,req.createNode=function(e,t,i){var r=e.xhtml?document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"html:script\"):document.createElement(\"script\");return r.type=e.scriptType||\"text/javascript\",r.charset=\"utf-8\",r.async=!0,r},req.load=function(t,i,r){var e,n=t&&t.config||{};if(isBrowser)return(e=req.createNode(n,i,r)).setAttribute(\"data-requirecontext\",t.contextName),e.setAttribute(\"data-requiremodule\",i),!e.attachEvent||e.attachEvent.toString&&e.attachEvent.toString().indexOf(\"[native code\")<0||isOpera?(e.addEventListener(\"load\",t.onScriptLoad,!1),e.addEventListener(\"error\",t.onScriptError,!1)):(useInteractive=!0,e.attachEvent(\"onreadystatechange\",t.onScriptLoad)),e.src=r,n.onNodeCreated&&n.onNodeCreated(e,n,i,r),currentlyAddingScript=e,baseElement?head.insertBefore(e,baseElement):head.appendChild(e),currentlyAddingScript=null,e;if(isWebWorker)try{setTimeout(function(){},0),importScripts(r),t.completeLoad(i)}catch(e){t.onError(makeError(\"importscripts\",\"importScripts failed for \"+i+\" at \"+r,e,[i]))}},isBrowser&&!cfg.skipDataMain&&eachReverse(scripts(),function(e){if(head||(head=e.parentNode),dataMain=e.getAttribute(\"data-main\"))return mainScript=dataMain,cfg.baseUrl||-1!==mainScript.indexOf(\"!\")||(mainScript=(src=mainScript.split(\"/\")).pop(),subPath=src.length?src.join(\"/\")+\"/\":\"./\",cfg.baseUrl=subPath),mainScript=mainScript.replace(jsSuffixRegExp,\"\"),req.jsExtRegExp.test(mainScript)&&(mainScript=dataMain),cfg.deps=cfg.deps?cfg.deps.concat(mainScript):[mainScript],!0}),define=function(e,i,t){var r,n;\"string\"!=typeof e&&(t=i,i=e,e=null),isArray(i)||(t=i,i=null),!i&&isFunction(t)&&(i=[],t.length&&(t.toString().replace(commentRegExp,commentReplace).replace(cjsRequireRegExp,function(e,t){i.push(t)}),i=(1===t.length?[\"require\"]:[\"require\",\"exports\",\"module\"]).concat(i))),useInteractive&&(r=currentlyAddingScript||getInteractiveScript())&&(e||(e=r.getAttribute(\"data-requiremodule\")),n=contexts[r.getAttribute(\"data-requirecontext\")]),n?(n.defQueue.push([e,i,t]),n.defQueueMap[e]=!0):globalDefQueue.push([e,i,t])},define.amd={jQuery:!0},req.exec=function(text){return eval(text)},req(cfg)}function newContext(u){var i,e,l,c,d,g={waitSeconds:7,baseUrl:\"./\",paths:{},bundles:{},pkgs:{},shim:{},config:{}},p={},f={},r={},h=[],m={},n={},v={},x=1,b=1;function q(e,t,i){var r,n,o,a,s,u,c,d,p,f,l=t&&t.split(\"/\"),h=g.map,m=h&&h[\"*\"];if(e&&(u=(e=e.split(\"/\")).length-1,g.nodeIdCompat&&jsSuffixRegExp.test(e[u])&&(e[u]=e[u].replace(jsSuffixRegExp,\"\")),\".\"===e[0].charAt(0)&&l&&(e=l.slice(0,l.length-1).concat(e)),function(e){var t,i;for(t=0;t<e.length;t++)if(\".\"===(i=e[t]))e.splice(t,1),t-=1;else if(\"..\"===i){if(0===t||1===t&&\"..\"===e[2]||\"..\"===e[t-1])continue;0<t&&(e.splice(t-1,2),t-=2)}}(e),e=e.join(\"/\")),i&&h&&(l||m)){e:for(o=(n=e.split(\"/\")).length;0<o;o-=1){if(s=n.slice(0,o).join(\"/\"),l)for(a=l.length;0<a;a-=1)if((r=getOwn(h,l.slice(0,a).join(\"/\")))&&(r=getOwn(r,s))){c=r,d=o;break e}!p&&m&&getOwn(m,s)&&(p=getOwn(m,s),f=o)}!c&&p&&(c=p,d=f),c&&(n.splice(0,d,c),e=n.join(\"/\"))}return getOwn(g.pkgs,e)||e}function E(t){isBrowser&&each(scripts(),function(e){if(e.getAttribute(\"data-requiremodule\")===t&&e.getAttribute(\"data-requirecontext\")===l.contextName)return e.parentNode.removeChild(e),!0})}function w(e){var t=getOwn(g.paths,e);if(t&&isArray(t)&&1<t.length)return t.shift(),l.require.undef(e),l.makeRequire(null,{skipMap:!0})([e]),!0}function y(e){var t,i=e?e.indexOf(\"!\"):-1;return-1<i&&(t=e.substring(0,i),e=e.substring(i+1,e.length)),[t,e]}function S(e,t,i,r){var n,o,a,s,u=null,c=t?t.name:null,d=e,p=!0,f=\"\";return e||(p=!1,e=\"_@r\"+(x+=1)),u=(s=y(e))[0],e=s[1],u&&(u=q(u,c,r),o=getOwn(m,u)),e&&(u?f=i?e:o&&o.normalize?o.normalize(e,function(e){return q(e,c,r)}):-1===e.indexOf(\"!\")?q(e,c,r):e:(u=(s=y(f=q(e,c,r)))[0],f=s[1],i=!0,n=l.nameToUrl(f))),{prefix:u,name:f,parentMap:t,unnormalized:!!(a=!u||o||i?\"\":\"_unnormalized\"+(b+=1)),url:n,originalName:d,isDefine:p,id:(u?u+\"!\"+f:f)+a}}function k(e){var t=e.id,i=getOwn(p,t);return i||(i=p[t]=new l.Module(e)),i}function M(e,t,i){var r=e.id,n=getOwn(p,r);!hasProp(m,r)||n&&!n.defineEmitComplete?(n=k(e)).error&&\"error\"===t?i(n.error):n.on(t,i):\"defined\"===t&&i(m[r])}function O(i,e){var t=i.requireModules,r=!1;e?e(i):(each(t,function(e){var t=getOwn(p,e);t&&(t.error=i,t.events.error&&(r=!0,t.emit(\"error\",i)))}),r||req.onError(i))}function j(){globalDefQueue.length&&(each(globalDefQueue,function(e){var t=e[0];\"string\"==typeof t&&(l.defQueueMap[t]=!0),h.push(e)}),globalDefQueue=[])}function P(e){delete p[e],delete f[e]}function R(){var e,r,t=1e3*g.waitSeconds,n=t&&l.startTime+t<(new Date).getTime(),o=[],a=[],s=!1,u=!0;if(!i){if(i=!0,eachProp(f,function(e){var t=e.map,i=t.id;if(e.enabled&&(t.isDefine||a.push(e),!e.error))if(!e.inited&&n)w(i)?s=r=!0:(o.push(i),E(i));else if(!e.inited&&e.fetched&&t.isDefine&&(s=!0,!t.prefix))return u=!1}),n&&o.length)return(e=makeError(\"timeout\",\"Load timeout for modules: \"+o,null,o)).contextName=l.contextName,O(e);u&&each(a,function(e){!function n(o,a,s){var e=o.map.id;o.error?o.emit(\"error\",o.error):(a[e]=!0,each(o.depMaps,function(e,t){var i=e.id,r=getOwn(p,i);!r||o.depMatched[t]||s[i]||(getOwn(a,i)?(o.defineDep(t,m[i]),o.check()):n(r,a,s))}),s[e]=!0)}(e,{},{})}),n&&!r||!s||!isBrowser&&!isWebWorker||d||(d=setTimeout(function(){d=0,R()},50)),i=!1}}function a(e){hasProp(m,e[0])||k(S(e[0],null,!0)).init(e[1],e[2])}function o(e,t,i,r){e.detachEvent&&!isOpera?r&&e.detachEvent(r,t):e.removeEventListener(i,t,!1)}function s(e){var t=e.currentTarget||e.srcElement;return o(t,l.onScriptLoad,\"load\",\"onreadystatechange\"),o(t,l.onScriptError,\"error\"),{node:t,id:t&&t.getAttribute(\"data-requiremodule\")}}function T(){var e;for(j();h.length;){if(null===(e=h.shift())[0])return O(makeError(\"mismatch\",\"Mismatched anonymous define() module: \"+e[e.length-1]));a(e)}l.defQueueMap={}}return c={require:function(e){return e.require?e.require:e.require=l.makeRequire(e.map)},exports:function(e){if(e.usingExports=!0,e.map.isDefine)return e.exports?m[e.map.id]=e.exports:e.exports=m[e.map.id]={}},module:function(e){return e.module?e.module:e.module={id:e.map.id,uri:e.map.url,config:function(){return getOwn(g.config,e.map.id)||{}},exports:e.exports||(e.exports={})}}},(e=function(e){this.events=getOwn(r,e.id)||{},this.map=e,this.shim=getOwn(g.shim,e.id),this.depExports=[],this.depMaps=[],this.depMatched=[],this.pluginMaps={},this.depCount=0}).prototype={init:function(e,t,i,r){r=r||{},this.inited||(this.factory=t,i?this.on(\"error\",i):this.events.error&&(i=bind(this,function(e){this.emit(\"error\",e)})),this.depMaps=e&&e.slice(0),this.errback=i,this.inited=!0,this.ignore=r.ignore,r.enabled||this.enabled?this.enable():this.check())},defineDep:function(e,t){this.depMatched[e]||(this.depMatched[e]=!0,this.depCount-=1,this.depExports[e]=t)},fetch:function(){if(!this.fetched){this.fetched=!0,l.startTime=(new Date).getTime();var e=this.map;if(!this.shim)return e.prefix?this.callPlugin():this.load();l.makeRequire(this.map,{enableBuildCallback:!0})(this.shim.deps||[],bind(this,function(){return e.prefix?this.callPlugin():this.load()}))}},load:function(){var e=this.map.url;n[e]||(n[e]=!0,l.load(this.map.id,e))},check:function(){if(this.enabled&&!this.enabling){var t,e,i=this.map.id,r=this.depExports,n=this.exports,o=this.factory;if(this.inited){if(this.error)this.emit(\"error\",this.error);else if(!this.defining){if(this.defining=!0,this.depCount<1&&!this.defined){if(isFunction(o)){if(this.events.error&&this.map.isDefine||req.onError!==defaultOnError)try{n=l.execCb(i,o,r,n)}catch(e){t=e}else n=l.execCb(i,o,r,n);if(this.map.isDefine&&void 0===n&&((e=this.module)?n=e.exports:this.usingExports&&(n=this.exports)),t)return t.requireMap=this.map,t.requireModules=this.map.isDefine?[this.map.id]:null,t.requireType=this.map.isDefine?\"define\":\"require\",O(this.error=t)}else n=o;if(this.exports=n,this.map.isDefine&&!this.ignore&&(m[i]=n,req.onResourceLoad)){var a=[];each(this.depMaps,function(e){a.push(e.normalizedMap||e)}),req.onResourceLoad(l,this.map,a)}P(i),this.defined=!0}this.defining=!1,this.defined&&!this.defineEmitted&&(this.defineEmitted=!0,this.emit(\"defined\",this.exports),this.defineEmitComplete=!0)}}else hasProp(l.defQueueMap,i)||this.fetch()}},callPlugin:function(){var u=this.map,c=u.id,e=S(u.prefix);this.depMaps.push(e),M(e,\"defined\",bind(this,function(e){var o,t,i,r=getOwn(v,this.map.id),n=this.map.name,a=this.map.parentMap?this.map.parentMap.name:null,s=l.makeRequire(u.parentMap,{enableBuildCallback:!0});return this.map.unnormalized?(e.normalize&&(n=e.normalize(n,function(e){return q(e,a,!0)})||\"\"),M(t=S(u.prefix+\"!\"+n,this.map.parentMap,!0),\"defined\",bind(this,function(e){this.map.normalizedMap=t,this.init([],function(){return e},null,{enabled:!0,ignore:!0})})),void((i=getOwn(p,t.id))&&(this.depMaps.push(t),this.events.error&&i.on(\"error\",bind(this,function(e){this.emit(\"error\",e)})),i.enable()))):r?(this.map.url=l.nameToUrl(r),void this.load()):((o=bind(this,function(e){this.init([],function(){return e},null,{enabled:!0})})).error=bind(this,function(e){this.inited=!0,(this.error=e).requireModules=[c],eachProp(p,function(e){0===e.map.id.indexOf(c+\"_unnormalized\")&&P(e.map.id)}),O(e)}),o.fromText=bind(this,function(e,t){var i=u.name,r=S(i),n=useInteractive;t&&(e=t),n&&(useInteractive=!1),k(r),hasProp(g.config,c)&&(g.config[i]=g.config[c]);try{req.exec(e)}catch(e){return O(makeError(\"fromtexteval\",\"fromText eval for \"+c+\" failed: \"+e,e,[c]))}n&&(useInteractive=!0),this.depMaps.push(r),l.completeLoad(i),s([i],o)}),void e.load(u.name,s,o,g))})),l.enable(e,this),this.pluginMaps[e.id]=e},enable:function(){(f[this.map.id]=this).enabled=!0,this.enabling=!0,each(this.depMaps,bind(this,function(e,t){var i,r,n;if(\"string\"==typeof e){if(e=S(e,this.map.isDefine?this.map:this.map.parentMap,!1,!this.skipMap),this.depMaps[t]=e,n=getOwn(c,e.id))return void(this.depExports[t]=n(this));this.depCount+=1,M(e,\"defined\",bind(this,function(e){this.undefed||(this.defineDep(t,e),this.check())})),this.errback?M(e,\"error\",bind(this,this.errback)):this.events.error&&M(e,\"error\",bind(this,function(e){this.emit(\"error\",e)}))}i=e.id,r=p[i],hasProp(c,i)||!r||r.enabled||l.enable(e,this)})),eachProp(this.pluginMaps,bind(this,function(e){var t=getOwn(p,e.id);t&&!t.enabled&&l.enable(e,this)})),this.enabling=!1,this.check()},on:function(e,t){var i=this.events[e];i||(i=this.events[e]=[]),i.push(t)},emit:function(e,t){each(this.events[e],function(e){e(t)}),\"error\"===e&&delete this.events[e]}},(l={config:g,contextName:u,registry:p,defined:m,urlFetched:n,defQueue:h,defQueueMap:{},Module:e,makeModuleMap:S,nextTick:req.nextTick,onError:O,configure:function(e){if(e.baseUrl&&\"/\"!==e.baseUrl.charAt(e.baseUrl.length-1)&&(e.baseUrl+=\"/\"),\"string\"==typeof e.urlArgs){var i=e.urlArgs;e.urlArgs=function(e,t){return(-1===t.indexOf(\"?\")?\"?\":\"&\")+i}}var r=g.shim,n={paths:!0,bundles:!0,config:!0,map:!0};eachProp(e,function(e,t){n[t]?(g[t]||(g[t]={}),mixin(g[t],e,!0,!0)):g[t]=e}),e.bundles&&eachProp(e.bundles,function(e,t){each(e,function(e){e!==t&&(v[e]=t)})}),e.shim&&(eachProp(e.shim,function(e,t){isArray(e)&&(e={deps:e}),!e.exports&&!e.init||e.exportsFn||(e.exportsFn=l.makeShimExports(e)),r[t]=e}),g.shim=r),e.packages&&each(e.packages,function(e){var t;t=(e=\"string\"==typeof e?{name:e}:e).name,e.location&&(g.paths[t]=e.location),g.pkgs[t]=e.name+\"/\"+(e.main||\"main\").replace(currDirRegExp,\"\").replace(jsSuffixRegExp,\"\")}),eachProp(p,function(e,t){e.inited||e.map.unnormalized||(e.map=S(t,null,!0))}),(e.deps||e.callback)&&l.require(e.deps||[],e.callback)},makeShimExports:function(t){return function(){var e;return t.init&&(e=t.init.apply(global,arguments)),e||t.exports&&getGlobal(t.exports)}},makeRequire:function(o,a){function s(e,t,i){var r,n;return a.enableBuildCallback&&t&&isFunction(t)&&(t.__requireJsBuild=!0),\"string\"==typeof e?isFunction(t)?O(makeError(\"requireargs\",\"Invalid require call\"),i):o&&hasProp(c,e)?c[e](p[o.id]):req.get?req.get(l,e,o,s):(r=S(e,o,!1,!0).id,hasProp(m,r)?m[r]:O(makeError(\"notloaded\",'Module name \"'+r+'\" has not been loaded yet for context: '+u+(o?\"\":\". Use require([])\")))):(T(),l.nextTick(function(){T(),(n=k(S(null,o))).skipMap=a.skipMap,n.init(e,t,i,{enabled:!0}),R()}),s)}return a=a||{},mixin(s,{isBrowser:isBrowser,toUrl:function(e){var t,i=e.lastIndexOf(\".\"),r=e.split(\"/\")[0];return-1!==i&&(!(\".\"===r||\"..\"===r)||1<i)&&(t=e.substring(i,e.length),e=e.substring(0,i)),l.nameToUrl(q(e,o&&o.id,!0),t,!0)},defined:function(e){return hasProp(m,S(e,o,!1,!0).id)},specified:function(e){return e=S(e,o,!1,!0).id,hasProp(m,e)||hasProp(p,e)}}),o||(s.undef=function(i){j();var e=S(i,o,!0),t=getOwn(p,i);t.undefed=!0,E(i),delete m[i],delete n[e.url],delete r[i],eachReverse(h,function(e,t){e[0]===i&&h.splice(t,1)}),delete l.defQueueMap[i],t&&(t.events.defined&&(r[i]=t.events),P(i))}),s},enable:function(e){getOwn(p,e.id)&&k(e).enable()},completeLoad:function(e){var t,i,r,n=getOwn(g.shim,e)||{},o=n.exports;for(j();h.length;){if(null===(i=h.shift())[0]){if(i[0]=e,t)break;t=!0}else i[0]===e&&(t=!0);a(i)}if(l.defQueueMap={},r=getOwn(p,e),!t&&!hasProp(m,e)&&r&&!r.inited){if(!(!g.enforceDefine||o&&getGlobal(o)))return w(e)?void 0:O(makeError(\"nodefine\",\"No define call for \"+e,null,[e]));a([e,n.deps||[],n.exportsFn])}R()},nameToUrl:function(e,t,i){var r,n,o,a,s,u,c=getOwn(g.pkgs,e);if(c&&(e=c),u=getOwn(v,e))return l.nameToUrl(u,t,i);if(req.jsExtRegExp.test(e))a=e+(t||\"\");else{for(r=g.paths,o=(n=e.split(\"/\")).length;0<o;o-=1)if(s=getOwn(r,n.slice(0,o).join(\"/\"))){isArray(s)&&(s=s[0]),n.splice(0,o,s);break}a=n.join(\"/\"),a=(\"/\"===(a+=t||(/^data\\:|^blob\\:|\\?/.test(a)||i?\"\":\".js\")).charAt(0)||a.match(/^[\\w\\+\\.\\-]+:/)?\"\":g.baseUrl)+a}return g.urlArgs&&!/^blob\\:/.test(a)?a+g.urlArgs(e,a):a},load:function(e,t){req.load(l,e,t)},execCb:function(e,t,i,r){return t.apply(r,i)},onScriptLoad:function(e){if(\"load\"===e.type||readyRegExp.test((e.currentTarget||e.srcElement).readyState)){interactiveScript=null;var t=s(e);l.completeLoad(t.id)}},onScriptError:function(e){var i=s(e);if(!w(i.id)){var r=[];return eachProp(p,function(e,t){0!==t.indexOf(\"_@r\")&&each(e.depMaps,function(e){if(e.id===i.id)return r.push(t),!0})}),O(makeError(\"scripterror\",'Script error for \"'+i.id+(r.length?'\", needed by: '+r.join(\", \"):'\"'),e,[i.id]))}}}).require=l.makeRequire(),l}function getInteractiveScript(){return interactiveScript&&\"interactive\"===interactiveScript.readyState||eachReverse(scripts(),function(e){if(\"interactive\"===e.readyState)return interactiveScript=e}),interactiveScript}}(this,\"undefined\"==typeof setTimeout?void 0:setTimeout);\n",
       "\n",
       "    }\n",
       "    // Project sites:    https://visjs.org\n",
       "//                   https://visjs.github.io/vis-network/docs/network\n",
       "//                   https://github.com/visjs/vis-network\n",
       "// Code source:      https://unpkg.com/vis-network@9.1.0/dist/vis-network.min.js - accessed on 19.11.2021\n",
       "// Original license: Apache 2.0 (and MIT because of dual licensing)\n",
       "// Code changes:     Commented out outermost functions\n",
       "//                   Wrapped all into a require define function\n",
       "\n",
       "//                   Replaced two \"NEL\" (=unescaped newline, Unicode U+0085, which can be entered\n",
       "//                   with Ctrl+Shift+U followed be the 4 digits and Enter) symbols by \"\\n\" to\n",
       "//                   prevent browser error when using sphinx docs in combination with Jupyter\n",
       "//                   notebooks and nbsphinx. This might cause unexpected behavior in other cases.\n",
       "\n",
       "if(!require.defined(\"gravis-vis-network\")){\n",
       "  define(\"gravis-vis-network\", [\"exports\"],\n",
       "\n",
       "  /**\n",
       "   * vis-network\n",
       "   * https://visjs.github.io/vis-network/\n",
       "   *\n",
       "   * A dynamic, browser-based visualization library.\n",
       "   *\n",
       "   * @version 9.1.0\n",
       "   * @date    2021-08-29T08:47:25.454Z\n",
       "   *\n",
       "   * @copyright (c) 2011-2017 Almende B.V, http://almende.com\n",
       "   * @copyright (c) 2017-2019 visjs contributors, https://github.com/visjs\n",
       "   *\n",
       "   * @license\n",
       "   * vis.js is dual licensed under both\n",
       "   *\n",
       "   *   1. The Apache 2.0 License\n",
       "   *      http://www.apache.org/licenses/LICENSE-2.0\n",
       "   *\n",
       "   *   and\n",
       "   *\n",
       "   *   2. The MIT License\n",
       "   *      http://opensource.org/licenses/MIT\n",
       "   *\n",
       "   * vis.js may be distributed under either license.\n",
       "   */\n",
       "  // !function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?e(exports):\n",
       "  // \"function\"==typeof define&&define.amd?define([\"exports\"],e):e((t=\"undefined\"!=typeof globalThis?globalThis:t||self).vis=t.vis||{})}(this,(\n",
       "  function(t){\"use strict\";var e=\"undefined\"!=typeof globalThis?globalThis:\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:{};function i(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,\"default\")?t.default:t}function n(t,e){return t(e={exports:{}},e.exports),e.exports}var o,r,s=function(t){return t&&t.Math==Math&&t},a=s(\"object\"==typeof globalThis&&globalThis)||s(\"object\"==typeof window&&window)||s(\"object\"==typeof self&&self)||s(\"object\"==typeof e&&e)||function(){return this}()||Function(\"return this\")(),h=function(t){try{return!!t()}catch(t){return!0}},l=!h((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]})),d={}.propertyIsEnumerable,c=Object.getOwnPropertyDescriptor,u={f:c&&!d.call({1:2},1)?function(t){var e=c(this,t);return!!e&&e.enumerable}:d},f=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}},p={}.toString,v=function(t){return p.call(t).slice(8,-1)},g=\"\".split,y=h((function(){return!Object(\"z\").propertyIsEnumerable(0)}))?function(t){return\"String\"==v(t)?g.call(t,\"\"):Object(t)}:Object,m=function(t){if(null==t)throw TypeError(\"Can't call method on \"+t);return t},b=function(t){return y(m(t))},w=function(t){return\"object\"==typeof t?null!==t:\"function\"==typeof t},k={},_=function(t){return\"function\"==typeof t?t:void 0},x=function(t,e){return arguments.length<2?_(k[t])||_(a[t]):k[t]&&k[t][e]||a[t]&&a[t][e]},E=x(\"navigator\",\"userAgent\")||\"\",O=a.process,C=a.Deno,S=O&&O.versions||C&&C.version,T=S&&S.v8;T?r=(o=T.split(\".\"))[0]<4?1:o[0]+o[1]:E&&(!(o=E.match(/Edge\\/(\\d+)/))||o[1]>=74)&&(o=E.match(/Chrome\\/(\\d+)/))&&(r=o[1]);var M=r&&+r,P=!!Object.getOwnPropertySymbols&&!h((function(){var t=Symbol();return!String(t)||!(Object(t)instanceof Symbol)||!Symbol.sham&&M&&M<41})),D=P&&!Symbol.sham&&\"symbol\"==typeof Symbol.iterator,I=D?function(t){return\"symbol\"==typeof t}:function(t){var e=x(\"Symbol\");return\"function\"==typeof e&&Object(t)instanceof e},B=\"__core-js_shared__\",z=a[B]||function(t,e){try{Object.defineProperty(a,t,{value:e,configurable:!0,writable:!0})}catch(i){a[t]=e}return e}(B,{}),N=n((function(t){(t.exports=function(t,e){return z[t]||(z[t]=void 0!==e?e:{})})(\"versions\",[]).push({version:\"3.16.1\",mode:\"pure\",copyright:\"© 2021 Denis Pushkarev (zloirock.ru)\"})})),A=function(t){return Object(m(t))},F={}.hasOwnProperty,j=Object.hasOwn||function(t,e){return F.call(A(t),e)},R=0,L=Math.random(),H=function(t){return\"Symbol(\"+String(void 0===t?\"\":t)+\")_\"+(++R+L).toString(36)},W=N(\"wks\"),q=a.Symbol,V=D?q:q&&q.withoutSetter||H,U=function(t){return j(W,t)&&(P||\"string\"==typeof W[t])||(P&&j(q,t)?W[t]=q[t]:W[t]=V(\"Symbol.\"+t)),W[t]},Y=U(\"toPrimitive\"),X=function(t,e){if(!w(t)||I(t))return t;var i,n=t[Y];if(void 0!==n){if(void 0===e&&(e=\"default\"),i=n.call(t,e),!w(i)||I(i))return i;throw TypeError(\"Can't convert object to primitive value\")}return void 0===e&&(e=\"number\"),function(t,e){var i,n;if(\"string\"===e&&\"function\"==typeof(i=t.toString)&&!w(n=i.call(t)))return n;if(\"function\"==typeof(i=t.valueOf)&&!w(n=i.call(t)))return n;if(\"string\"!==e&&\"function\"==typeof(i=t.toString)&&!w(n=i.call(t)))return n;throw TypeError(\"Can't convert object to primitive value\")}(t,e)},G=function(t){var e=X(t,\"string\");return I(e)?e:String(e)},K=a.document,$=w(K)&&w(K.createElement),Z=function(t){return $?K.createElement(t):{}},Q=!l&&!h((function(){return 7!=Object.defineProperty(Z(\"div\"),\"a\",{get:function(){return 7}}).a})),J=Object.getOwnPropertyDescriptor,tt={f:l?J:function(t,e){if(t=b(t),e=G(e),Q)try{return J(t,e)}catch(t){}if(j(t,e))return f(!u.f.call(t,e),t[e])}},et=/#|\\.prototype\\./,it=function(t,e){var i=ot[nt(t)];return i==st||i!=rt&&(\"function\"==typeof e?h(e):!!e)},nt=it.normalize=function(t){return String(t).replace(et,\".\").toLowerCase()},ot=it.data={},rt=it.NATIVE=\"N\",st=it.POLYFILL=\"P\",at=it,ht=function(t){if(\"function\"!=typeof t)throw TypeError(String(t)+\" is not a function\");return t},lt=function(t,e,i){if(ht(t),void 0===e)return t;switch(i){case 0:return function(){return t.call(e)};case 1:return function(i){return t.call(e,i)};case 2:return function(i,n){return t.call(e,i,n)};case 3:return function(i,n,o){return t.call(e,i,n,o)}}return function(){return t.apply(e,arguments)}},dt=function(t){if(!w(t))throw TypeError(String(t)+\" is not an object\");return t},ct=Object.defineProperty,ut={f:l?ct:function(t,e,i){if(dt(t),e=G(e),dt(i),Q)try{return ct(t,e,i)}catch(t){}if(\"get\"in i||\"set\"in i)throw TypeError(\"Accessors not supported\");return\"value\"in i&&(t[e]=i.value),t}},ft=l?function(t,e,i){return ut.f(t,e,f(1,i))}:function(t,e,i){return t[e]=i,t},pt=tt.f,vt=function(t){var e=function(e,i,n){if(this instanceof t){switch(arguments.length){case 0:return new t;case 1:return new t(e);case 2:return new t(e,i)}return new t(e,i,n)}return t.apply(this,arguments)};return e.prototype=t.prototype,e},gt=function(t,e){var i,n,o,r,s,h,l,d,c=t.target,u=t.global,f=t.stat,p=t.proto,v=u?a:f?a[c]:(a[c]||{}).prototype,g=u?k:k[c]||(k[c]={}),y=g.prototype;for(o in e)i=!at(u?o:c+(f?\".\":\"#\")+o,t.forced)&&v&&j(v,o),s=g[o],i&&(h=t.noTargetGet?(d=pt(v,o))&&d.value:v[o]),r=i&&h?h:e[o],i&&typeof s==typeof r||(l=t.bind&&i?lt(r,a):t.wrap&&i?vt(r):p&&\"function\"==typeof r?lt(Function.call,r):r,(t.sham||r&&r.sham||s&&s.sham)&&ft(l,\"sham\",!0),g[o]=l,p&&(j(k,n=c+\"Prototype\")||ft(k,n,{}),k[n][o]=r,t.real&&y&&!y[o]&&ft(y,o,r)))},yt=Math.ceil,mt=Math.floor,bt=function(t){return isNaN(t=+t)?0:(t>0?mt:yt)(t)},wt=Math.min,kt=function(t){return t>0?wt(bt(t),9007199254740991):0},_t=Math.max,xt=Math.min,Et=function(t,e){var i=bt(t);return i<0?_t(i+e,0):xt(i,e)},Ot=function(t){return function(e,i,n){var o,r=b(e),s=kt(r.length),a=Et(n,s);if(t&&i!=i){for(;s>a;)if((o=r[a++])!=o)return!0}else for(;s>a;a++)if((t||a in r)&&r[a]===i)return t||a||0;return!t&&-1}},Ct={includes:Ot(!0),indexOf:Ot(!1)},St={},Tt=Ct.indexOf,Mt=function(t,e){var i,n=b(t),o=0,r=[];for(i in n)!j(St,i)&&j(n,i)&&r.push(i);for(;e.length>o;)j(n,i=e[o++])&&(~Tt(r,i)||r.push(i));return r},Pt=[\"constructor\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"toLocaleString\",\"toString\",\"valueOf\"],Dt=Object.keys||function(t){return Mt(t,Pt)},It={f:Object.getOwnPropertySymbols},Bt=Object.assign,zt=Object.defineProperty,Nt=!Bt||h((function(){if(l&&1!==Bt({b:1},Bt(zt({},\"a\",{enumerable:!0,get:function(){zt(this,\"b\",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var t={},e={},i=Symbol(),n=\"abcdefghijklmnopqrst\";return t[i]=7,n.split(\"\").forEach((function(t){e[t]=t})),7!=Bt({},t)[i]||Dt(Bt({},e)).join(\"\")!=n}))?function(t,e){for(var i=A(t),n=arguments.length,o=1,r=It.f,s=u.f;n>o;)for(var a,h=y(arguments[o++]),d=r?Dt(h).concat(r(h)):Dt(h),c=d.length,f=0;c>f;)a=d[f++],l&&!s.call(h,a)||(i[a]=h[a]);return i}:Bt;gt({target:\"Object\",stat:!0,forced:Object.assign!==Nt},{assign:Nt});var At=k.Object.assign,Ft=[].slice,jt={},Rt=function(t,e,i){if(!(e in jt)){for(var n=[],o=0;o<e;o++)n[o]=\"a[\"+o+\"]\";jt[e]=Function(\"C,a\",\"return new C(\"+n.join(\",\")+\")\")}return jt[e](t,i)},Lt=Function.bind||function(t){var e=ht(this),i=Ft.call(arguments,1),n=function(){var o=i.concat(Ft.call(arguments));return this instanceof n?Rt(e,o.length,o):e.apply(t,o)};return w(e.prototype)&&(n.prototype=e.prototype),n};gt({target:\"Function\",proto:!0},{bind:Lt});var Ht=function(t){return k[t+\"Prototype\"]},Wt=Ht(\"Function\").bind,qt=Function.prototype,Vt=function(t){var e=t.bind;return t===qt||t instanceof Function&&e===qt.bind?Wt:e};function Ut(t,e,i,n){t.beginPath(),t.arc(e,i,n,0,2*Math.PI,!1),t.closePath()}function Yt(t,e,i,n,o,r){var s=Math.PI/180;n-2*r<0&&(r=n/2),o-2*r<0&&(r=o/2),t.beginPath(),t.moveTo(e+r,i),t.lineTo(e+n-r,i),t.arc(e+n-r,i+r,r,270*s,360*s,!1),t.lineTo(e+n,i+o-r),t.arc(e+n-r,i+o-r,r,0,90*s,!1),t.lineTo(e+r,i+o),t.arc(e+r,i+o-r,r,90*s,180*s,!1),t.lineTo(e,i+r),t.arc(e+r,i+r,r,180*s,270*s,!1),t.closePath()}function Xt(t,e,i,n,o){var r=.5522848,s=n/2*r,a=o/2*r,h=e+n,l=i+o,d=e+n/2,c=i+o/2;t.beginPath(),t.moveTo(e,c),t.bezierCurveTo(e,c-a,d-s,i,d,i),t.bezierCurveTo(d+s,i,h,c-a,h,c),t.bezierCurveTo(h,c+a,d+s,l,d,l),t.bezierCurveTo(d-s,l,e,c+a,e,c),t.closePath()}function Gt(t,e,i,n,o){var r=o*(1/3),s=.5522848,a=n/2*s,h=r/2*s,l=e+n,d=i+r,c=e+n/2,u=i+r/2,f=i+(o-r/2),p=i+o;t.beginPath(),t.moveTo(l,u),t.bezierCurveTo(l,u+h,c+a,d,c,d),t.bezierCurveTo(c-a,d,e,u+h,e,u),t.bezierCurveTo(e,u-h,c-a,i,c,i),t.bezierCurveTo(c+a,i,l,u-h,l,u),t.lineTo(l,f),t.bezierCurveTo(l,f+h,c+a,p,c,p),t.bezierCurveTo(c-a,p,e,f+h,e,f),t.lineTo(e,u)}function Kt(t,e,i,n,o,r){t.beginPath(),t.moveTo(e,i);for(var s=r.length,a=n-e,h=o-i,l=h/a,d=Math.sqrt(a*a+h*h),c=0,u=!0,f=0,p=+r[0];d>=.1;)(p=+r[c++%s])>d&&(p=d),f=Math.sqrt(p*p/(1+l*l)),e+=f=a<0?-f:f,i+=l*f,!0===u?t.lineTo(e,i):t.moveTo(e,i),d-=p,u=!u}var $t={circle:Ut,dashedLine:Kt,database:Gt,diamond:function(t,e,i,n){t.beginPath(),t.lineTo(e,i+n),t.lineTo(e+n,i),t.lineTo(e,i-n),t.lineTo(e-n,i),t.closePath()},ellipse:Xt,ellipse_vis:Xt,hexagon:function(t,e,i,n){t.beginPath();var o=2*Math.PI/6;t.moveTo(e+n,i);for(var r=1;r<6;r++)t.lineTo(e+n*Math.cos(o*r),i+n*Math.sin(o*r));t.closePath()},roundRect:Yt,square:function(t,e,i,n){t.beginPath(),t.rect(e-n,i-n,2*n,2*n),t.closePath()},star:function(t,e,i,n){t.beginPath(),i+=.1*(n*=.82);for(var o=0;o<10;o++){var r=o%2==0?1.3*n:.5*n;t.lineTo(e+r*Math.sin(2*o*Math.PI/10),i-r*Math.cos(2*o*Math.PI/10))}t.closePath()},triangle:function(t,e,i,n){t.beginPath(),i+=.275*(n*=1.15);var o=2*n,r=o/2,s=Math.sqrt(3)/6*o,a=Math.sqrt(o*o-r*r);t.moveTo(e,i-(a-s)),t.lineTo(e+r,i+s),t.lineTo(e-r,i+s),t.lineTo(e,i-(a-s)),t.closePath()},triangleDown:function(t,e,i,n){t.beginPath(),i-=.275*(n*=1.15);var o=2*n,r=o/2,s=Math.sqrt(3)/6*o,a=Math.sqrt(o*o-r*r);t.moveTo(e,i+(a-s)),t.lineTo(e+r,i-s),t.lineTo(e-r,i-s),t.lineTo(e,i+(a-s)),t.closePath()}};var Zt=n((function(t){function e(t){if(t)return function(t){for(var i in e.prototype)t[i]=e.prototype[i];return t}(t)}t.exports=e,e.prototype.on=e.prototype.addEventListener=function(t,e){return this._callbacks=this._callbacks||{},(this._callbacks[\"$\"+t]=this._callbacks[\"$\"+t]||[]).push(e),this},e.prototype.once=function(t,e){function i(){this.off(t,i),e.apply(this,arguments)}return i.fn=e,this.on(t,i),this},e.prototype.off=e.prototype.removeListener=e.prototype.removeAllListeners=e.prototype.removeEventListener=function(t,e){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var i,n=this._callbacks[\"$\"+t];if(!n)return this;if(1==arguments.length)return delete this._callbacks[\"$\"+t],this;for(var o=0;o<n.length;o++)if((i=n[o])===e||i.fn===e){n.splice(o,1);break}return 0===n.length&&delete this._callbacks[\"$\"+t],this},e.prototype.emit=function(t){this._callbacks=this._callbacks||{};for(var e=new Array(arguments.length-1),i=this._callbacks[\"$\"+t],n=1;n<arguments.length;n++)e[n-1]=arguments[n];if(i){n=0;for(var o=(i=i.slice(0)).length;n<o;++n)i[n].apply(this,e)}return this},e.prototype.listeners=function(t){return this._callbacks=this._callbacks||{},this._callbacks[\"$\"+t]||[]},e.prototype.hasListeners=function(t){return!!this.listeners(t).length}})),Qt=function(t){if(I(t))throw TypeError(\"Cannot convert a Symbol value to a string\");return String(t)},Jt=function(t){return function(e,i){var n,o,r=Qt(m(e)),s=bt(i),a=r.length;return s<0||s>=a?t?\"\":void 0:(n=r.charCodeAt(s))<55296||n>56319||s+1===a||(o=r.charCodeAt(s+1))<56320||o>57343?t?r.charAt(s):n:t?r.slice(s,s+2):o-56320+(n-55296<<10)+65536}},te={codeAt:Jt(!1),charAt:Jt(!0)},ee=Function.toString;\"function\"!=typeof z.inspectSource&&(z.inspectSource=function(t){return ee.call(t)});var ie,ne,oe,re=z.inspectSource,se=a.WeakMap,ae=\"function\"==typeof se&&/native code/.test(re(se)),he=N(\"keys\"),le=function(t){return he[t]||(he[t]=H(t))},de=\"Object already initialized\",ce=a.WeakMap;if(ae||z.state){var ue=z.state||(z.state=new ce),fe=ue.get,pe=ue.has,ve=ue.set;ie=function(t,e){if(pe.call(ue,t))throw new TypeError(de);return e.facade=t,ve.call(ue,t,e),e},ne=function(t){return fe.call(ue,t)||{}},oe=function(t){return pe.call(ue,t)}}else{var ge=le(\"state\");St[ge]=!0,ie=function(t,e){if(j(t,ge))throw new TypeError(de);return e.facade=t,ft(t,ge,e),e},ne=function(t){return j(t,ge)?t[ge]:{}},oe=function(t){return j(t,ge)}}var ye,me,be,we={set:ie,get:ne,has:oe,enforce:function(t){return oe(t)?ne(t):ie(t,{})},getterFor:function(t){return function(e){var i;if(!w(e)||(i=ne(e)).type!==t)throw TypeError(\"Incompatible receiver, \"+t+\" required\");return i}}},ke=!h((function(){function t(){}return t.prototype.constructor=null,Object.getPrototypeOf(new t)!==t.prototype})),_e=le(\"IE_PROTO\"),xe=Object.prototype,Ee=ke?Object.getPrototypeOf:function(t){return t=A(t),j(t,_e)?t[_e]:\"function\"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?xe:null},Oe=U(\"iterator\"),Ce=!1;[].keys&&(\"next\"in(be=[].keys())?(me=Ee(Ee(be)))!==Object.prototype&&(ye=me):Ce=!0);var Se=null==ye||h((function(){var t={};return ye[Oe].call(t)!==t}));Se&&(ye={}),Se&&!j(ye,Oe)&&ft(ye,Oe,(function(){return this}));var Te,Me={IteratorPrototype:ye,BUGGY_SAFARI_ITERATORS:Ce},Pe=l?Object.defineProperties:function(t,e){dt(t);for(var i,n=Dt(e),o=n.length,r=0;o>r;)ut.f(t,i=n[r++],e[i]);return t},De=x(\"document\",\"documentElement\"),Ie=le(\"IE_PROTO\"),Be=function(){},ze=function(t){return\"<script>\"+t+\"</\"+\"script>\"},Ne=function(t){t.write(ze(\"\")),t.close();var e=t.parentWindow.Object;return t=null,e},Ae=function(){try{Te=new ActiveXObject(\"htmlfile\")}catch(t){}Ae=document.domain&&Te?Ne(Te):function(){var t,e=Z(\"iframe\");if(e.style)return e.style.display=\"none\",De.appendChild(e),e.src=String(\"javascript:\"),(t=e.contentWindow.document).open(),t.write(ze(\"document.F=Object\")),t.close(),t.F}()||Ne(Te);for(var t=Pt.length;t--;)delete Ae.prototype[Pt[t]];return Ae()};St[Ie]=!0;var Fe=Object.create||function(t,e){var i;return null!==t?(Be.prototype=dt(t),i=new Be,Be.prototype=null,i[Ie]=t):i=Ae(),void 0===e?i:Pe(i,e)},je={};je[U(\"toStringTag\")]=\"z\";var Re=\"[object z]\"===String(je),Le=U(\"toStringTag\"),He=\"Arguments\"==v(function(){return arguments}()),We=Re?v:function(t){var e,i,n;return void 0===t?\"Undefined\":null===t?\"Null\":\"string\"==typeof(i=function(t,e){try{return t[e]}catch(t){}}(e=Object(t),Le))?i:He?v(e):\"Object\"==(n=v(e))&&\"function\"==typeof e.callee?\"Arguments\":n},qe=Re?{}.toString:function(){return\"[object \"+We(this)+\"]\"},Ve=ut.f,Ue=U(\"toStringTag\"),Ye=function(t,e,i,n){if(t){var o=i?t:t.prototype;j(o,Ue)||Ve(o,Ue,{configurable:!0,value:e}),n&&!Re&&ft(o,\"toString\",qe)}},Xe={},Ge=Me.IteratorPrototype,Ke=function(){return this},$e=Object.setPrototypeOf||(\"__proto__\"in{}?function(){var t,e=!1,i={};try{(t=Object.getOwnPropertyDescriptor(Object.prototype,\"__proto__\").set).call(i,[]),e=i instanceof Array}catch(t){}return function(i,n){return dt(i),function(t){if(!w(t)&&null!==t)throw TypeError(\"Can't set \"+String(t)+\" as a prototype\")}(n),e?t.call(i,n):i.__proto__=n,i}}():void 0),Ze=function(t,e,i,n){n&&n.enumerable?t[e]=i:ft(t,e,i)},Qe=Me.IteratorPrototype,Je=Me.BUGGY_SAFARI_ITERATORS,ti=U(\"iterator\"),ei=\"keys\",ii=\"values\",ni=\"entries\",oi=function(){return this},ri=function(t,e,i,n,o,r,s){!function(t,e,i){var n=e+\" Iterator\";t.prototype=Fe(Ge,{next:f(1,i)}),Ye(t,n,!1,!0),Xe[n]=Ke}(i,e,n);var a,h,l,d=function(t){if(t===o&&g)return g;if(!Je&&t in p)return p[t];switch(t){case ei:case ii:case ni:return function(){return new i(this,t)}}return function(){return new i(this)}},c=e+\" Iterator\",u=!1,p=t.prototype,v=p[ti]||p[\"@@iterator\"]||o&&p[o],g=!Je&&v||d(o),y=\"Array\"==e&&p.entries||v;if(y&&(a=Ee(y.call(new t)),Qe!==Object.prototype&&a.next&&(Ye(a,c,!0,!0),Xe[c]=oi)),o==ii&&v&&v.name!==ii&&(u=!0,g=function(){return v.call(this)}),s&&p[ti]!==g&&ft(p,ti,g),Xe[e]=g,o)if(h={values:d(ii),keys:r?g:d(ei),entries:d(ni)},s)for(l in h)(Je||u||!(l in p))&&Ze(p,l,h[l]);else gt({target:e,proto:!0,forced:Je||u},h);return h},si=te.charAt,ai=\"String Iterator\",hi=we.set,li=we.getterFor(ai);ri(String,\"String\",(function(t){hi(this,{type:ai,string:Qt(t),index:0})}),(function(){var t,e=li(this),i=e.string,n=e.index;return n>=i.length?{value:void 0,done:!0}:(t=si(i,n),e.index+=t.length,{value:t,done:!1})}));var di=function(t){var e=t.return;if(void 0!==e)return dt(e.call(t)).value},ci=function(t,e,i,n){try{return n?e(dt(i)[0],i[1]):e(i)}catch(e){throw di(t),e}},ui=U(\"iterator\"),fi=Array.prototype,pi=function(t){return void 0!==t&&(Xe.Array===t||fi[ui]===t)},vi=function(t,e,i){var n=G(e);n in t?ut.f(t,n,f(0,i)):t[n]=i},gi=U(\"iterator\"),yi=function(t){if(null!=t)return t[gi]||t[\"@@iterator\"]||Xe[We(t)]},mi=U(\"iterator\"),bi=!1;try{var wi=0,ki={next:function(){return{done:!!wi++}},return:function(){bi=!0}};ki[mi]=function(){return this},Array.from(ki,(function(){throw 2}))}catch(t){}var _i=!function(t,e){if(!e&&!bi)return!1;var i=!1;try{var n={};n[mi]=function(){return{next:function(){return{done:i=!0}}}},t(n)}catch(t){}return i}((function(t){Array.from(t)}));gt({target:\"Array\",stat:!0,forced:_i},{from:function(t){var e,i,n,o,r,s,a=A(t),h=\"function\"==typeof this?this:Array,l=arguments.length,d=l>1?arguments[1]:void 0,c=void 0!==d,u=yi(a),f=0;if(c&&(d=lt(d,l>2?arguments[2]:void 0,2)),null==u||h==Array&&pi(u))for(i=new h(e=kt(a.length));e>f;f++)s=c?d(a[f],f):a[f],vi(i,f,s);else for(r=(o=u.call(a)).next,i=new h;!(n=r.call(o)).done;f++)s=c?ci(o,d,[n.value,f],!0):n.value,vi(i,f,s);return i.length=f,i}});var xi=k.Array.from,Ei=xi,Oi=\"Array Iterator\",Ci=we.set,Si=we.getterFor(Oi);ri(Array,\"Array\",(function(t,e){Ci(this,{type:Oi,target:b(t),index:0,kind:e})}),(function(){var t=Si(this),e=t.target,i=t.kind,n=t.index++;return!e||n>=e.length?(t.target=void 0,{value:void 0,done:!0}):\"keys\"==i?{value:n,done:!1}:\"values\"==i?{value:e[n],done:!1}:{value:[n,e[n]],done:!1}}),\"values\"),Xe.Arguments=Xe.Array;var Ti=yi,Mi=U(\"toStringTag\");for(var Pi in{CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}){var Di=a[Pi],Ii=Di&&Di.prototype;Ii&&We(Ii)!==Mi&&ft(Ii,Mi,Pi),Xe[Pi]=Xe.Array}var Bi=Ti,zi=Array.isArray||function(t){return\"Array\"==v(t)},Ni=Pt.concat(\"length\",\"prototype\"),Ai={f:Object.getOwnPropertyNames||function(t){return Mt(t,Ni)}},Fi=Ai.f,ji={}.toString,Ri=\"object\"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],Li={f:function(t){return Ri&&\"[object Window]\"==ji.call(t)?function(t){try{return Fi(t)}catch(t){return Ri.slice()}}(t):Fi(b(t))}},Hi={f:U},Wi=ut.f,qi=function(t){var e=k.Symbol||(k.Symbol={});j(e,t)||Wi(e,t,{value:Hi.f(t)})},Vi=U(\"species\"),Ui=function(t,e){return new(function(t){var e;return zi(t)&&(\"function\"!=typeof(e=t.constructor)||e!==Array&&!zi(e.prototype)?w(e)&&null===(e=e[Vi])&&(e=void 0):e=void 0),void 0===e?Array:e}(t))(0===e?0:e)},Yi=[].push,Xi=function(t){var e=1==t,i=2==t,n=3==t,o=4==t,r=6==t,s=7==t,a=5==t||r;return function(h,l,d,c){for(var u,f,p=A(h),v=y(p),g=lt(l,d,3),m=kt(v.length),b=0,w=c||Ui,k=e?w(h,m):i||s?w(h,0):void 0;m>b;b++)if((a||b in v)&&(f=g(u=v[b],b,p),t))if(e)k[b]=f;else if(f)switch(t){case 3:return!0;case 5:return u;case 6:return b;case 2:Yi.call(k,u)}else switch(t){case 4:return!1;case 7:Yi.call(k,u)}return r?-1:n||o?o:k}},Gi={forEach:Xi(0),map:Xi(1),filter:Xi(2),some:Xi(3),every:Xi(4),find:Xi(5),findIndex:Xi(6),filterReject:Xi(7)},Ki=Gi.forEach,$i=le(\"hidden\"),Zi=\"Symbol\",Qi=U(\"toPrimitive\"),Ji=we.set,tn=we.getterFor(Zi),en=Object.prototype,nn=a.Symbol,on=x(\"JSON\",\"stringify\"),rn=tt.f,sn=ut.f,an=Li.f,hn=u.f,ln=N(\"symbols\"),dn=N(\"op-symbols\"),cn=N(\"string-to-symbol-registry\"),un=N(\"symbol-to-string-registry\"),fn=N(\"wks\"),pn=a.QObject,vn=!pn||!pn.prototype||!pn.prototype.findChild,gn=l&&h((function(){return 7!=Fe(sn({},\"a\",{get:function(){return sn(this,\"a\",{value:7}).a}})).a}))?function(t,e,i){var n=rn(en,e);n&&delete en[e],sn(t,e,i),n&&t!==en&&sn(en,e,n)}:sn,yn=function(t,e){var i=ln[t]=Fe(nn.prototype);return Ji(i,{type:Zi,tag:t,description:e}),l||(i.description=e),i},mn=function(t,e,i){t===en&&mn(dn,e,i),dt(t);var n=G(e);return dt(i),j(ln,n)?(i.enumerable?(j(t,$i)&&t[$i][n]&&(t[$i][n]=!1),i=Fe(i,{enumerable:f(0,!1)})):(j(t,$i)||sn(t,$i,f(1,{})),t[$i][n]=!0),gn(t,n,i)):sn(t,n,i)},bn=function(t,e){dt(t);var i=b(e),n=Dt(i).concat(xn(i));return Ki(n,(function(e){l&&!wn.call(i,e)||mn(t,e,i[e])})),t},wn=function(t){var e=G(t),i=hn.call(this,e);return!(this===en&&j(ln,e)&&!j(dn,e))&&(!(i||!j(this,e)||!j(ln,e)||j(this,$i)&&this[$i][e])||i)},kn=function(t,e){var i=b(t),n=G(e);if(i!==en||!j(ln,n)||j(dn,n)){var o=rn(i,n);return!o||!j(ln,n)||j(i,$i)&&i[$i][n]||(o.enumerable=!0),o}},_n=function(t){var e=an(b(t)),i=[];return Ki(e,(function(t){j(ln,t)||j(St,t)||i.push(t)})),i},xn=function(t){var e=t===en,i=an(e?dn:b(t)),n=[];return Ki(i,(function(t){!j(ln,t)||e&&!j(en,t)||n.push(ln[t])})),n};if(P||(Ze((nn=function(){if(this instanceof nn)throw TypeError(\"Symbol is not a constructor\");var t=arguments.length&&void 0!==arguments[0]?Qt(arguments[0]):void 0,e=H(t),i=function(t){this===en&&i.call(dn,t),j(this,$i)&&j(this[$i],e)&&(this[$i][e]=!1),gn(this,e,f(1,t))};return l&&vn&&gn(en,e,{configurable:!0,set:i}),yn(e,t)}).prototype,\"toString\",(function(){return tn(this).tag})),Ze(nn,\"withoutSetter\",(function(t){return yn(H(t),t)})),u.f=wn,ut.f=mn,tt.f=kn,Ai.f=Li.f=_n,It.f=xn,Hi.f=function(t){return yn(U(t),t)},l&&sn(nn.prototype,\"description\",{configurable:!0,get:function(){return tn(this).description}})),gt({global:!0,wrap:!0,forced:!P,sham:!P},{Symbol:nn}),Ki(Dt(fn),(function(t){qi(t)})),gt({target:Zi,stat:!0,forced:!P},{for:function(t){var e=Qt(t);if(j(cn,e))return cn[e];var i=nn(e);return cn[e]=i,un[i]=e,i},keyFor:function(t){if(!I(t))throw TypeError(t+\" is not a symbol\");if(j(un,t))return un[t]},useSetter:function(){vn=!0},useSimple:function(){vn=!1}}),gt({target:\"Object\",stat:!0,forced:!P,sham:!l},{create:function(t,e){return void 0===e?Fe(t):bn(Fe(t),e)},defineProperty:mn,defineProperties:bn,getOwnPropertyDescriptor:kn}),gt({target:\"Object\",stat:!0,forced:!P},{getOwnPropertyNames:_n,getOwnPropertySymbols:xn}),gt({target:\"Object\",stat:!0,forced:h((function(){It.f(1)}))},{getOwnPropertySymbols:function(t){return It.f(A(t))}}),on){var En=!P||h((function(){var t=nn();return\"[null]\"!=on([t])||\"{}\"!=on({a:t})||\"{}\"!=on(Object(t))}));gt({target:\"JSON\",stat:!0,forced:En},{stringify:function(t,e,i){for(var n,o=[t],r=1;arguments.length>r;)o.push(arguments[r++]);if(n=e,(w(e)||void 0!==t)&&!I(t))return zi(e)||(e=function(t,e){if(\"function\"==typeof n&&(e=n.call(this,t,e)),!I(e))return e}),o[1]=e,on.apply(null,o)}})}nn.prototype[Qi]||ft(nn.prototype,Qi,nn.prototype.valueOf),Ye(nn,Zi),St[$i]=!0;var On=k.Object.getOwnPropertySymbols,Cn=tt.f,Sn=h((function(){Cn(1)}));gt({target:\"Object\",stat:!0,forced:!l||Sn,sham:!l},{getOwnPropertyDescriptor:function(t,e){return Cn(b(t),e)}});var Tn=n((function(t){var e=k.Object,i=t.exports=function(t,i){return e.getOwnPropertyDescriptor(t,i)};e.getOwnPropertyDescriptor.sham&&(i.sham=!0)})),Mn=Tn,Pn=x(\"Reflect\",\"ownKeys\")||function(t){var e=Ai.f(dt(t)),i=It.f;return i?e.concat(i(t)):e};gt({target:\"Object\",stat:!0,sham:!l},{getOwnPropertyDescriptors:function(t){for(var e,i,n=b(t),o=tt.f,r=Pn(n),s={},a=0;r.length>a;)void 0!==(i=o(n,e=r[a++]))&&vi(s,e,i);return s}});var Dn=k.Object.getOwnPropertyDescriptors;gt({target:\"Object\",stat:!0,forced:!l,sham:!l},{defineProperties:Pe});var In=n((function(t){var e=k.Object,i=t.exports=function(t,i){return e.defineProperties(t,i)};e.defineProperties.sham&&(i.sham=!0)}));gt({target:\"Object\",stat:!0,forced:!l,sham:!l},{defineProperty:ut.f});var Bn=n((function(t){var e=k.Object,i=t.exports=function(t,i,n){return e.defineProperty(t,i,n)};e.defineProperty.sham&&(i.sham=!0)})),zn=Bn,Nn=i(n((function(t){t.exports=function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")},t.exports.default=t.exports,t.exports.__esModule=!0}))),An=Bn,Fn=i(n((function(t){function e(t,e){for(var i=0;i<e.length;i++){var n=e[i];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),An(t,n.key,n)}}t.exports=function(t,i,n){return i&&e(t.prototype,i),n&&e(t,n),t},t.exports.default=t.exports,t.exports.__esModule=!0}))),jn=i(n((function(t){t.exports=function(t,e,i){return e in t?An(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[e]=i,t},t.exports.default=t.exports,t.exports.__esModule=!0})));gt({target:\"Array\",stat:!0},{isArray:zi});var Rn=k.Array.isArray,Ln=Rn,Hn=n((function(t){t.exports=function(t){if(Ln(t))return t},t.exports.default=t.exports,t.exports.__esModule=!0}));i(Hn);var Wn=U(\"species\"),qn=function(t){return M>=51||!h((function(){var e=[];return(e.constructor={})[Wn]=function(){return{foo:1}},1!==e[t](Boolean).foo}))},Vn=U(\"isConcatSpreadable\"),Un=9007199254740991,Yn=\"Maximum allowed index exceeded\",Xn=M>=51||!h((function(){var t=[];return t[Vn]=!1,t.concat()[0]!==t})),Gn=qn(\"concat\"),Kn=function(t){if(!w(t))return!1;var e=t[Vn];return void 0!==e?!!e:zi(t)};gt({target:\"Array\",proto:!0,forced:!Xn||!Gn},{concat:function(t){var e,i,n,o,r,s=A(this),a=Ui(s,0),h=0;for(e=-1,n=arguments.length;e<n;e++)if(Kn(r=-1===e?s:arguments[e])){if(h+(o=kt(r.length))>Un)throw TypeError(Yn);for(i=0;i<o;i++,h++)i in r&&vi(a,h,r[i])}else{if(h>=Un)throw TypeError(Yn);vi(a,h++,r)}return a.length=h,a}}),qi(\"asyncIterator\"),qi(\"hasInstance\"),qi(\"isConcatSpreadable\"),qi(\"iterator\"),qi(\"match\"),qi(\"matchAll\"),qi(\"replace\"),qi(\"search\"),qi(\"species\"),qi(\"split\"),qi(\"toPrimitive\"),qi(\"toStringTag\"),qi(\"unscopables\"),Ye(a.JSON,\"JSON\",!0);var $n=k.Symbol;qi(\"asyncDispose\"),qi(\"dispose\"),qi(\"matcher\"),qi(\"metadata\"),qi(\"observable\"),qi(\"patternMatch\"),qi(\"replaceAll\");var Zn=$n,Qn=n((function(t){t.exports=function(t,e){var i=null==t?null:void 0!==Zn&&Bi(t)||t[\"@@iterator\"];if(null!=i){var n,o,r=[],s=!0,a=!1;try{for(i=i.call(t);!(s=(n=i.next()).done)&&(r.push(n.value),!e||r.length!==e);s=!0);}catch(t){a=!0,o=t}finally{try{s||null==i.return||i.return()}finally{if(a)throw o}}return r}},t.exports.default=t.exports,t.exports.__esModule=!0}));i(Qn);var Jn=qn(\"slice\"),to=U(\"species\"),eo=[].slice,io=Math.max;gt({target:\"Array\",proto:!0,forced:!Jn},{slice:function(t,e){var i,n,o,r=b(this),s=kt(r.length),a=Et(t,s),h=Et(void 0===e?s:e,s);if(zi(r)&&(\"function\"!=typeof(i=r.constructor)||i!==Array&&!zi(i.prototype)?w(i)&&null===(i=i[to])&&(i=void 0):i=void 0,i===Array||void 0===i))return eo.call(r,a,h);for(n=new(void 0===i?Array:i)(io(h-a,0)),o=0;a<h;a++,o++)a in r&&vi(n,o,r[a]);return n.length=o,n}});var no=Ht(\"Array\").slice,oo=Array.prototype,ro=function(t){var e=t.slice;return t===oo||t instanceof Array&&e===oo.slice?no:e},so=ro,ao=xi,ho=n((function(t){t.exports=function(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n},t.exports.default=t.exports,t.exports.__esModule=!0}));i(ho);var lo=n((function(t){t.exports=function(t,e){var i;if(t){if(\"string\"==typeof t)return ho(t,e);var n=so(i=Object.prototype.toString.call(t)).call(i,8,-1);return\"Object\"===n&&t.constructor&&(n=t.constructor.name),\"Map\"===n||\"Set\"===n?ao(t):\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?ho(t,e):void 0}},t.exports.default=t.exports,t.exports.__esModule=!0}));i(lo);var co=n((function(t){t.exports=function(){throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")},t.exports.default=t.exports,t.exports.__esModule=!0}));i(co);var uo=i(n((function(t){t.exports=function(t,e){return Hn(t)||Qn(t,e)||lo(t,e)||co()},t.exports.default=t.exports,t.exports.__esModule=!0}))),fo=Hi.f(\"iterator\"),po=fo,vo=n((function(t){function e(i){return\"function\"==typeof Zn&&\"symbol\"==typeof po?(t.exports=e=function(t){return typeof t},t.exports.default=t.exports,t.exports.__esModule=!0):(t.exports=e=function(t){return t&&\"function\"==typeof Zn&&t.constructor===Zn&&t!==Zn.prototype?\"symbol\":typeof t},t.exports.default=t.exports,t.exports.__esModule=!0),e(i)}t.exports=e,t.exports.default=t.exports,t.exports.__esModule=!0})),go=i(vo),yo=n((function(t){t.exports=function(t){if(Ln(t))return ho(t)},t.exports.default=t.exports,t.exports.__esModule=!0}));i(yo);var mo=n((function(t){t.exports=function(t){if(void 0!==Zn&&null!=Bi(t)||null!=t[\"@@iterator\"])return ao(t)},t.exports.default=t.exports,t.exports.__esModule=!0}));i(mo);var bo=n((function(t){t.exports=function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")},t.exports.default=t.exports,t.exports.__esModule=!0}));i(bo);var wo=i(n((function(t){t.exports=function(t){return yo(t)||mo(t)||lo(t)||bo()},t.exports.default=t.exports,t.exports.__esModule=!0}))),ko=$n,_o=Ht(\"Array\").concat,xo=Array.prototype,Eo=function(t){var e=t.concat;return t===xo||t instanceof Array&&e===xo.concat?_o:e},Oo=ro;gt({target:\"Reflect\",stat:!0},{ownKeys:Pn});var Co=k.Reflect.ownKeys,So=Rn,To=Gi.map,Mo=qn(\"map\");gt({target:\"Array\",proto:!0,forced:!Mo},{map:function(t){return To(this,t,arguments.length>1?arguments[1]:void 0)}});var Po=Ht(\"Array\").map,Do=Array.prototype,Io=function(t){var e=t.map;return t===Do||t instanceof Array&&e===Do.map?Po:e},Bo=h((function(){Dt(1)}));gt({target:\"Object\",stat:!0,forced:Bo},{keys:function(t){return Dt(A(t))}});var zo=k.Object.keys;gt({target:\"Date\",stat:!0},{now:function(){return(new Date).getTime()}});var No=k.Date.now,Ao=function(t,e){var i=[][t];return!!i&&h((function(){i.call(null,e||function(){throw 1},1)}))},Fo=Gi.forEach,jo=Ao(\"forEach\")?[].forEach:function(t){return Fo(this,t,arguments.length>1?arguments[1]:void 0)};gt({target:\"Array\",proto:!0,forced:[].forEach!=jo},{forEach:jo});var Ro=Ht(\"Array\").forEach,Lo=Array.prototype,Ho={DOMTokenList:!0,NodeList:!0},Wo=function(t){var e=t.forEach;return t===Lo||t instanceof Array&&e===Lo.forEach||Ho.hasOwnProperty(We(t))?Ro:e},qo=[].reverse,Vo=[1,2];gt({target:\"Array\",proto:!0,forced:String(Vo)===String(Vo.reverse())},{reverse:function(){return zi(this)&&(this.length=this.length),qo.call(this)}});var Uo=Ht(\"Array\").reverse,Yo=Array.prototype,Xo=function(t){var e=t.reverse;return t===Yo||t instanceof Array&&e===Yo.reverse?Uo:e},Go=qn(\"splice\"),Ko=Math.max,$o=Math.min,Zo=9007199254740991,Qo=\"Maximum allowed length exceeded\";gt({target:\"Array\",proto:!0,forced:!Go},{splice:function(t,e){var i,n,o,r,s,a,h=A(this),l=kt(h.length),d=Et(t,l),c=arguments.length;if(0===c?i=n=0:1===c?(i=0,n=l-d):(i=c-2,n=$o(Ko(bt(e),0),l-d)),l+i-n>Zo)throw TypeError(Qo);for(o=Ui(h,n),r=0;r<n;r++)(s=d+r)in h&&vi(o,r,h[s]);if(o.length=n,i<n){for(r=d;r<l-n;r++)a=r+i,(s=r+n)in h?h[a]=h[s]:delete h[a];for(r=l;r>l-n+i;r--)delete h[r-1]}else if(i>n)for(r=l-n;r>d;r--)a=r+i-1,(s=r+n-1)in h?h[a]=h[s]:delete h[a];for(r=0;r<i;r++)h[r+d]=arguments[r+2];return h.length=l-n+i,o}});var Jo=Ht(\"Array\").splice,tr=Array.prototype,er=function(t){var e=t.splice;return t===tr||t instanceof Array&&e===tr.splice?Jo:e},ir=Ct.includes;gt({target:\"Array\",proto:!0},{includes:function(t){return ir(this,t,arguments.length>1?arguments[1]:void 0)}});var nr=Ht(\"Array\").includes,or=U(\"match\"),rr=function(t){if(function(t){var e;return w(t)&&(void 0!==(e=t[or])?!!e:\"RegExp\"==v(t))}(t))throw TypeError(\"The method doesn't accept regular expressions\");return t},sr=U(\"match\");gt({target:\"String\",proto:!0,forced:!function(t){var e=/./;try{\"/./\"[t](e)}catch(i){try{return e[sr]=!1,\"/./\"[t](e)}catch(t){}}return!1}(\"includes\")},{includes:function(t){return!!~Qt(m(this)).indexOf(Qt(rr(t)),arguments.length>1?arguments[1]:void 0)}});var ar=Ht(\"String\").includes,hr=Array.prototype,lr=String.prototype,dr=function(t){var e=t.includes;return t===hr||t instanceof Array&&e===hr.includes?nr:\"string\"==typeof t||t===lr||t instanceof String&&e===lr.includes?ar:e},cr=h((function(){Ee(1)}));gt({target:\"Object\",stat:!0,forced:cr,sham:!ke},{getPrototypeOf:function(t){return Ee(A(t))}});var ur=k.Object.getPrototypeOf,fr=ur,pr=Gi.filter,vr=qn(\"filter\");gt({target:\"Array\",proto:!0,forced:!vr},{filter:function(t){return pr(this,t,arguments.length>1?arguments[1]:void 0)}});var gr=Ht(\"Array\").filter,yr=Array.prototype,mr=function(t){var e=t.filter;return t===yr||t instanceof Array&&e===yr.filter?gr:e},br=u.f,wr=function(t){return function(e){for(var i,n=b(e),o=Dt(n),r=o.length,s=0,a=[];r>s;)i=o[s++],l&&!br.call(n,i)||a.push(t?[i,n[i]]:n[i]);return a}},kr={entries:wr(!0),values:wr(!1)}.values;gt({target:\"Object\",stat:!0},{values:function(t){return kr(t)}});var _r=k.Object.values,xr=\"\\t\\n\\v\\f\\r                　\\u2028\\u2029\\ufeff\",Er=\"[\"+xr+\"]\",Or=RegExp(\"^\"+Er+Er+\"*\"),Cr=RegExp(Er+Er+\"*$\"),Sr=function(t){return function(e){var i=Qt(m(e));return 1&t&&(i=i.replace(Or,\"\")),2&t&&(i=i.replace(Cr,\"\")),i}},Tr={start:Sr(1),end:Sr(2),trim:Sr(3)},Mr=Tr.trim,Pr=a.parseInt,Dr=/^[+-]?0[Xx]/,Ir=8!==Pr(xr+\"08\")||22!==Pr(xr+\"0x16\")?function(t,e){var i=Mr(Qt(t));return Pr(i,e>>>0||(Dr.test(i)?16:10))}:Pr;gt({global:!0,forced:parseInt!=Ir},{parseInt:Ir});var Br=k.parseInt,zr=Ct.indexOf,Nr=[].indexOf,Ar=!!Nr&&1/[1].indexOf(1,-0)<0,Fr=Ao(\"indexOf\");gt({target:\"Array\",proto:!0,forced:Ar||!Fr},{indexOf:function(t){return Ar?Nr.apply(this,arguments)||0:zr(this,t,arguments.length>1?arguments[1]:void 0)}});var jr,Rr=Ht(\"Array\").indexOf,Lr=Array.prototype,Hr=function(t){var e=t.indexOf;return t===Lr||t instanceof Array&&e===Lr.indexOf?Rr:e},Wr=Tr.trim;gt({target:\"String\",proto:!0,forced:(jr=\"trim\",h((function(){return!!xr[jr]()||\"​\\n᠎\"!=\"​\\n᠎\"[jr]()||xr[jr].name!==jr})))},{trim:function(){return Wr(this)}});var qr=Ht(\"String\").trim,Vr=String.prototype,Ur=function(t){var e=t.trim;return\"string\"==typeof t||t===Vr||t instanceof String&&e===Vr.trim?qr:e};gt({target:\"Object\",stat:!0,sham:!l},{create:Fe});var Yr=k.Object,Xr=function(t,e){return Yr.create(t,e)},Gr=Xr,Kr=x(\"JSON\",\"stringify\"),$r=/[\\uD800-\\uDFFF]/g,Zr=/^[\\uD800-\\uDBFF]$/,Qr=/^[\\uDC00-\\uDFFF]$/,Jr=function(t,e,i){var n=i.charAt(e-1),o=i.charAt(e+1);return Zr.test(t)&&!Qr.test(o)||Qr.test(t)&&!Zr.test(n)?\"\\\\u\"+t.charCodeAt(0).toString(16):t},ts=h((function(){return'\"\\\\udf06\\\\ud834\"'!==Kr(\"\\udf06\\ud834\")||'\"\\\\udead\"'!==Kr(\"\\udead\")}));Kr&&gt({target:\"JSON\",stat:!0,forced:ts},{stringify:function(t,e,i){var n=Kr.apply(null,arguments);return\"string\"==typeof n?n.replace($r,Jr):n}}),k.JSON||(k.JSON={stringify:JSON.stringify});var es=function(t,e,i){return k.JSON.stringify.apply(null,arguments)},is=[].slice,ns=/MSIE .\\./.test(E),os=function(t){return function(e,i){var n=arguments.length>2,o=n?is.call(arguments,2):void 0;return t(n?function(){(\"function\"==typeof e?e:Function(e)).apply(this,o)}:e,i)}};gt({global:!0,bind:!0,forced:ns},{setTimeout:os(a.setTimeout),setInterval:os(a.setInterval)});var rs=k.setTimeout;gt({target:\"Array\",proto:!0},{fill:function(t){for(var e=A(this),i=kt(e.length),n=arguments.length,o=Et(n>1?arguments[1]:void 0,i),r=n>2?arguments[2]:void 0,s=void 0===r?i:Et(r,i);s>o;)e[o++]=t;return e}});var ss=Ht(\"Array\").fill,as=Array.prototype,hs=function(t){var e=t.fill;return t===as||t instanceof Array&&e===as.fill?ss:e};function ls(){return(ls=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var i=arguments[e];for(var n in i)Object.prototype.hasOwnProperty.call(i,n)&&(t[n]=i[n])}return t}).apply(this,arguments)}function ds(t,e){t.prototype=Object.create(e.prototype),t.prototype.constructor=t,t.__proto__=e}function cs(t){if(void 0===t)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return t}var us,fs=\"function\"!=typeof Object.assign?function(t){if(null==t)throw new TypeError(\"Cannot convert undefined or null to object\");for(var e=Object(t),i=1;i<arguments.length;i++){var n=arguments[i];if(null!=n)for(var o in n)n.hasOwnProperty(o)&&(e[o]=n[o])}return e}:Object.assign,ps=[\"\",\"webkit\",\"Moz\",\"MS\",\"ms\",\"o\"],vs=\"undefined\"==typeof document?{style:{}}:document.createElement(\"div\"),gs=Math.round,ys=Math.abs,ms=Date.now;function bs(t,e){for(var i,n,o=e[0].toUpperCase()+e.slice(1),r=0;r<ps.length;){if((n=(i=ps[r])?i+o:e)in t)return n;r++}}us=\"undefined\"==typeof window?{}:window;var ws=bs(vs.style,\"touchAction\"),ks=void 0!==ws;var _s=\"compute\",xs=\"auto\",Es=\"manipulation\",Os=\"none\",Cs=\"pan-x\",Ss=\"pan-y\",Ts=function(){if(!ks)return!1;var t={},e=us.CSS&&us.CSS.supports;return[\"auto\",\"manipulation\",\"pan-y\",\"pan-x\",\"pan-x pan-y\",\"none\"].forEach((function(i){return t[i]=!e||us.CSS.supports(\"touch-action\",i)})),t}(),Ms=\"ontouchstart\"in us,Ps=void 0!==bs(us,\"PointerEvent\"),Ds=Ms&&/mobile|tablet|ip(ad|hone|od)|android/i.test(navigator.userAgent),Is=\"touch\",Bs=\"mouse\",zs=16,Ns=24,As=[\"x\",\"y\"],Fs=[\"clientX\",\"clientY\"];function js(t,e,i){var n;if(t)if(t.forEach)t.forEach(e,i);else if(void 0!==t.length)for(n=0;n<t.length;)e.call(i,t[n],n,t),n++;else for(n in t)t.hasOwnProperty(n)&&e.call(i,t[n],n,t)}function Rs(t,e){return\"function\"==typeof t?t.apply(e&&e[0]||void 0,e):t}function Ls(t,e){return t.indexOf(e)>-1}var Hs=function(){function t(t,e){this.manager=t,this.set(e)}var e=t.prototype;return e.set=function(t){t===_s&&(t=this.compute()),ks&&this.manager.element.style&&Ts[t]&&(this.manager.element.style[ws]=t),this.actions=t.toLowerCase().trim()},e.update=function(){this.set(this.manager.options.touchAction)},e.compute=function(){var t=[];return js(this.manager.recognizers,(function(e){Rs(e.options.enable,[e])&&(t=t.concat(e.getTouchAction()))})),function(t){if(Ls(t,Os))return Os;var e=Ls(t,Cs),i=Ls(t,Ss);return e&&i?Os:e||i?e?Cs:Ss:Ls(t,Es)?Es:xs}(t.join(\" \"))},e.preventDefaults=function(t){var e=t.srcEvent,i=t.offsetDirection;if(this.manager.session.prevented)e.preventDefault();else{var n=this.actions,o=Ls(n,Os)&&!Ts.none,r=Ls(n,Ss)&&!Ts[\"pan-y\"],s=Ls(n,Cs)&&!Ts[\"pan-x\"];if(o){var a=1===t.pointers.length,h=t.distance<2,l=t.deltaTime<250;if(a&&h&&l)return}if(!s||!r)return o||r&&6&i||s&&i&Ns?this.preventSrc(e):void 0}},e.preventSrc=function(t){this.manager.session.prevented=!0,t.preventDefault()},t}();function Ws(t,e){for(;t;){if(t===e)return!0;t=t.parentNode}return!1}function qs(t){var e=t.length;if(1===e)return{x:gs(t[0].clientX),y:gs(t[0].clientY)};for(var i=0,n=0,o=0;o<e;)i+=t[o].clientX,n+=t[o].clientY,o++;return{x:gs(i/e),y:gs(n/e)}}function Vs(t){for(var e=[],i=0;i<t.pointers.length;)e[i]={clientX:gs(t.pointers[i].clientX),clientY:gs(t.pointers[i].clientY)},i++;return{timeStamp:ms(),pointers:e,center:qs(e),deltaX:t.deltaX,deltaY:t.deltaY}}function Us(t,e,i){i||(i=As);var n=e[i[0]]-t[i[0]],o=e[i[1]]-t[i[1]];return Math.sqrt(n*n+o*o)}function Ys(t,e,i){i||(i=As);var n=e[i[0]]-t[i[0]],o=e[i[1]]-t[i[1]];return 180*Math.atan2(o,n)/Math.PI}function Xs(t,e){return t===e?1:ys(t)>=ys(e)?t<0?2:4:e<0?8:zs}function Gs(t,e,i){return{x:e/t||0,y:i/t||0}}function Ks(t,e){var i=t.session,n=e.pointers,o=n.length;i.firstInput||(i.firstInput=Vs(e)),o>1&&!i.firstMultiple?i.firstMultiple=Vs(e):1===o&&(i.firstMultiple=!1);var r=i.firstInput,s=i.firstMultiple,a=s?s.center:r.center,h=e.center=qs(n);e.timeStamp=ms(),e.deltaTime=e.timeStamp-r.timeStamp,e.angle=Ys(a,h),e.distance=Us(a,h),function(t,e){var i=e.center,n=t.offsetDelta||{},o=t.prevDelta||{},r=t.prevInput||{};1!==e.eventType&&4!==r.eventType||(o=t.prevDelta={x:r.deltaX||0,y:r.deltaY||0},n=t.offsetDelta={x:i.x,y:i.y}),e.deltaX=o.x+(i.x-n.x),e.deltaY=o.y+(i.y-n.y)}(i,e),e.offsetDirection=Xs(e.deltaX,e.deltaY);var l,d,c=Gs(e.deltaTime,e.deltaX,e.deltaY);e.overallVelocityX=c.x,e.overallVelocityY=c.y,e.overallVelocity=ys(c.x)>ys(c.y)?c.x:c.y,e.scale=s?(l=s.pointers,Us((d=n)[0],d[1],Fs)/Us(l[0],l[1],Fs)):1,e.rotation=s?function(t,e){return Ys(e[1],e[0],Fs)+Ys(t[1],t[0],Fs)}(s.pointers,n):0,e.maxPointers=i.prevInput?e.pointers.length>i.prevInput.maxPointers?e.pointers.length:i.prevInput.maxPointers:e.pointers.length,function(t,e){var i,n,o,r,s=t.lastInterval||e,a=e.timeStamp-s.timeStamp;if(8!==e.eventType&&(a>25||void 0===s.velocity)){var h=e.deltaX-s.deltaX,l=e.deltaY-s.deltaY,d=Gs(a,h,l);n=d.x,o=d.y,i=ys(d.x)>ys(d.y)?d.x:d.y,r=Xs(h,l),t.lastInterval=e}else i=s.velocity,n=s.velocityX,o=s.velocityY,r=s.direction;e.velocity=i,e.velocityX=n,e.velocityY=o,e.direction=r}(i,e);var u,f=t.element,p=e.srcEvent;Ws(u=p.composedPath?p.composedPath()[0]:p.path?p.path[0]:p.target,f)&&(f=u),e.target=f}function $s(t,e,i){var n=i.pointers.length,o=i.changedPointers.length,r=1&e&&n-o==0,s=12&e&&n-o==0;i.isFirst=!!r,i.isFinal=!!s,r&&(t.session={}),i.eventType=e,Ks(t,i),t.emit(\"hammer.input\",i),t.recognize(i),t.session.prevInput=i}function Zs(t){return t.trim().split(/\\s+/g)}function Qs(t,e,i){js(Zs(e),(function(e){t.addEventListener(e,i,!1)}))}function Js(t,e,i){js(Zs(e),(function(e){t.removeEventListener(e,i,!1)}))}function ta(t){var e=t.ownerDocument||t;return e.defaultView||e.parentWindow||window}var ea=function(){function t(t,e){var i=this;this.manager=t,this.callback=e,this.element=t.element,this.target=t.options.inputTarget,this.domHandler=function(e){Rs(t.options.enable,[t])&&i.handler(e)},this.init()}var e=t.prototype;return e.handler=function(){},e.init=function(){this.evEl&&Qs(this.element,this.evEl,this.domHandler),this.evTarget&&Qs(this.target,this.evTarget,this.domHandler),this.evWin&&Qs(ta(this.element),this.evWin,this.domHandler)},e.destroy=function(){this.evEl&&Js(this.element,this.evEl,this.domHandler),this.evTarget&&Js(this.target,this.evTarget,this.domHandler),this.evWin&&Js(ta(this.element),this.evWin,this.domHandler)},t}();function ia(t,e,i){if(t.indexOf&&!i)return t.indexOf(e);for(var n=0;n<t.length;){if(i&&t[n][i]==e||!i&&t[n]===e)return n;n++}return-1}var na={pointerdown:1,pointermove:2,pointerup:4,pointercancel:8,pointerout:8},oa={2:Is,3:\"pen\",4:Bs,5:\"kinect\"},ra=\"pointerdown\",sa=\"pointermove pointerup pointercancel\";us.MSPointerEvent&&!us.PointerEvent&&(ra=\"MSPointerDown\",sa=\"MSPointerMove MSPointerUp MSPointerCancel\");var aa=function(t){function e(){var i,n=e.prototype;return n.evEl=ra,n.evWin=sa,(i=t.apply(this,arguments)||this).store=i.manager.session.pointerEvents=[],i}return ds(e,t),e.prototype.handler=function(t){var e=this.store,i=!1,n=t.type.toLowerCase().replace(\"ms\",\"\"),o=na[n],r=oa[t.pointerType]||t.pointerType,s=r===Is,a=ia(e,t.pointerId,\"pointerId\");1&o&&(0===t.button||s)?a<0&&(e.push(t),a=e.length-1):12&o&&(i=!0),a<0||(e[a]=t,this.callback(this.manager,o,{pointers:e,changedPointers:[t],pointerType:r,srcEvent:t}),i&&e.splice(a,1))},e}(ea);function ha(t){return Array.prototype.slice.call(t,0)}function la(t,e,i){for(var n=[],o=[],r=0;r<t.length;){var s=e?t[r][e]:t[r];ia(o,s)<0&&n.push(t[r]),o[r]=s,r++}return i&&(n=e?n.sort((function(t,i){return t[e]>i[e]})):n.sort()),n}var da={touchstart:1,touchmove:2,touchend:4,touchcancel:8},ca=\"touchstart touchmove touchend touchcancel\",ua=function(t){function e(){var i;return e.prototype.evTarget=ca,(i=t.apply(this,arguments)||this).targetIds={},i}return ds(e,t),e.prototype.handler=function(t){var e=da[t.type],i=fa.call(this,t,e);i&&this.callback(this.manager,e,{pointers:i[0],changedPointers:i[1],pointerType:Is,srcEvent:t})},e}(ea);function fa(t,e){var i,n,o=ha(t.touches),r=this.targetIds;if(3&e&&1===o.length)return r[o[0].identifier]=!0,[o,o];var s=ha(t.changedTouches),a=[],h=this.target;if(n=o.filter((function(t){return Ws(t.target,h)})),1===e)for(i=0;i<n.length;)r[n[i].identifier]=!0,i++;for(i=0;i<s.length;)r[s[i].identifier]&&a.push(s[i]),12&e&&delete r[s[i].identifier],i++;return a.length?[la(n.concat(a),\"identifier\",!0),a]:void 0}var pa={mousedown:1,mousemove:2,mouseup:4},va=\"mousedown\",ga=\"mousemove mouseup\",ya=function(t){function e(){var i,n=e.prototype;return n.evEl=va,n.evWin=ga,(i=t.apply(this,arguments)||this).pressed=!1,i}return ds(e,t),e.prototype.handler=function(t){var e=pa[t.type];1&e&&0===t.button&&(this.pressed=!0),2&e&&1!==t.which&&(e=4),this.pressed&&(4&e&&(this.pressed=!1),this.callback(this.manager,e,{pointers:[t],changedPointers:[t],pointerType:Bs,srcEvent:t}))},e}(ea);function ma(t){var e=t.changedPointers[0];if(e.identifier===this.primaryTouch){var i={x:e.clientX,y:e.clientY},n=this.lastTouches;this.lastTouches.push(i);setTimeout((function(){var t=n.indexOf(i);t>-1&&n.splice(t,1)}),2500)}}function ba(t,e){1&t?(this.primaryTouch=e.changedPointers[0].identifier,ma.call(this,e)):12&t&&ma.call(this,e)}function wa(t){for(var e=t.srcEvent.clientX,i=t.srcEvent.clientY,n=0;n<this.lastTouches.length;n++){var o=this.lastTouches[n],r=Math.abs(e-o.x),s=Math.abs(i-o.y);if(r<=25&&s<=25)return!0}return!1}var ka=function(){return function(t){function e(e,i){var n;return(n=t.call(this,e,i)||this).handler=function(t,e,i){var o=i.pointerType===Is,r=i.pointerType===Bs;if(!(r&&i.sourceCapabilities&&i.sourceCapabilities.firesTouchEvents)){if(o)ba.call(cs(cs(n)),e,i);else if(r&&wa.call(cs(cs(n)),i))return;n.callback(t,e,i)}},n.touch=new ua(n.manager,n.handler),n.mouse=new ya(n.manager,n.handler),n.primaryTouch=null,n.lastTouches=[],n}return ds(e,t),e.prototype.destroy=function(){this.touch.destroy(),this.mouse.destroy()},e}(ea)}();function _a(t,e,i){return!!Array.isArray(t)&&(js(t,i[e],i),!0)}var xa=32,Ea=1;function Oa(t,e){var i=e.manager;return i?i.get(t):t}function Ca(t){return 16&t?\"cancel\":8&t?\"end\":4&t?\"move\":2&t?\"start\":\"\"}var Sa=function(){function t(t){void 0===t&&(t={}),this.options=ls({enable:!0},t),this.id=Ea++,this.manager=null,this.state=1,this.simultaneous={},this.requireFail=[]}var e=t.prototype;return e.set=function(t){return fs(this.options,t),this.manager&&this.manager.touchAction.update(),this},e.recognizeWith=function(t){if(_a(t,\"recognizeWith\",this))return this;var e=this.simultaneous;return e[(t=Oa(t,this)).id]||(e[t.id]=t,t.recognizeWith(this)),this},e.dropRecognizeWith=function(t){return _a(t,\"dropRecognizeWith\",this)||(t=Oa(t,this),delete this.simultaneous[t.id]),this},e.requireFailure=function(t){if(_a(t,\"requireFailure\",this))return this;var e=this.requireFail;return-1===ia(e,t=Oa(t,this))&&(e.push(t),t.requireFailure(this)),this},e.dropRequireFailure=function(t){if(_a(t,\"dropRequireFailure\",this))return this;t=Oa(t,this);var e=ia(this.requireFail,t);return e>-1&&this.requireFail.splice(e,1),this},e.hasRequireFailures=function(){return this.requireFail.length>0},e.canRecognizeWith=function(t){return!!this.simultaneous[t.id]},e.emit=function(t){var e=this,i=this.state;function n(i){e.manager.emit(i,t)}i<8&&n(e.options.event+Ca(i)),n(e.options.event),t.additionalEvent&&n(t.additionalEvent),i>=8&&n(e.options.event+Ca(i))},e.tryEmit=function(t){if(this.canEmit())return this.emit(t);this.state=xa},e.canEmit=function(){for(var t=0;t<this.requireFail.length;){if(!(33&this.requireFail[t].state))return!1;t++}return!0},e.recognize=function(t){var e=fs({},t);if(!Rs(this.options.enable,[this,e]))return this.reset(),void(this.state=xa);56&this.state&&(this.state=1),this.state=this.process(e),30&this.state&&this.tryEmit(e)},e.process=function(t){},e.getTouchAction=function(){},e.reset=function(){},t}(),Ta=function(t){function e(e){var i;return void 0===e&&(e={}),(i=t.call(this,ls({event:\"tap\",pointers:1,taps:1,interval:300,time:250,threshold:9,posThreshold:10},e))||this).pTime=!1,i.pCenter=!1,i._timer=null,i._input=null,i.count=0,i}ds(e,t);var i=e.prototype;return i.getTouchAction=function(){return[Es]},i.process=function(t){var e=this,i=this.options,n=t.pointers.length===i.pointers,o=t.distance<i.threshold,r=t.deltaTime<i.time;if(this.reset(),1&t.eventType&&0===this.count)return this.failTimeout();if(o&&r&&n){if(4!==t.eventType)return this.failTimeout();var s=!this.pTime||t.timeStamp-this.pTime<i.interval,a=!this.pCenter||Us(this.pCenter,t.center)<i.posThreshold;if(this.pTime=t.timeStamp,this.pCenter=t.center,a&&s?this.count+=1:this.count=1,this._input=t,0===this.count%i.taps)return this.hasRequireFailures()?(this._timer=setTimeout((function(){e.state=8,e.tryEmit()}),i.interval),2):8}return xa},i.failTimeout=function(){var t=this;return this._timer=setTimeout((function(){t.state=xa}),this.options.interval),xa},i.reset=function(){clearTimeout(this._timer)},i.emit=function(){8===this.state&&(this._input.tapCount=this.count,this.manager.emit(this.options.event,this._input))},e}(Sa),Ma=function(t){function e(e){return void 0===e&&(e={}),t.call(this,ls({pointers:1},e))||this}ds(e,t);var i=e.prototype;return i.attrTest=function(t){var e=this.options.pointers;return 0===e||t.pointers.length===e},i.process=function(t){var e=this.state,i=t.eventType,n=6&e,o=this.attrTest(t);return n&&(8&i||!o)?16|e:n||o?4&i?8|e:2&e?4|e:2:xa},e}(Sa);function Pa(t){return t===zs?\"down\":8===t?\"up\":2===t?\"left\":4===t?\"right\":\"\"}var Da=function(t){function e(e){var i;return void 0===e&&(e={}),(i=t.call(this,ls({event:\"pan\",threshold:10,pointers:1,direction:30},e))||this).pX=null,i.pY=null,i}ds(e,t);var i=e.prototype;return i.getTouchAction=function(){var t=this.options.direction,e=[];return 6&t&&e.push(Ss),t&Ns&&e.push(Cs),e},i.directionTest=function(t){var e=this.options,i=!0,n=t.distance,o=t.direction,r=t.deltaX,s=t.deltaY;return o&e.direction||(6&e.direction?(o=0===r?1:r<0?2:4,i=r!==this.pX,n=Math.abs(t.deltaX)):(o=0===s?1:s<0?8:zs,i=s!==this.pY,n=Math.abs(t.deltaY))),t.direction=o,i&&n>e.threshold&&o&e.direction},i.attrTest=function(t){return Ma.prototype.attrTest.call(this,t)&&(2&this.state||!(2&this.state)&&this.directionTest(t))},i.emit=function(e){this.pX=e.deltaX,this.pY=e.deltaY;var i=Pa(e.direction);i&&(e.additionalEvent=this.options.event+i),t.prototype.emit.call(this,e)},e}(Ma),Ia=function(t){function e(e){return void 0===e&&(e={}),t.call(this,ls({event:\"swipe\",threshold:10,velocity:.3,direction:30,pointers:1},e))||this}ds(e,t);var i=e.prototype;return i.getTouchAction=function(){return Da.prototype.getTouchAction.call(this)},i.attrTest=function(e){var i,n=this.options.direction;return 30&n?i=e.overallVelocity:6&n?i=e.overallVelocityX:n&Ns&&(i=e.overallVelocityY),t.prototype.attrTest.call(this,e)&&n&e.offsetDirection&&e.distance>this.options.threshold&&e.maxPointers===this.options.pointers&&ys(i)>this.options.velocity&&4&e.eventType},i.emit=function(t){var e=Pa(t.offsetDirection);e&&this.manager.emit(this.options.event+e,t),this.manager.emit(this.options.event,t)},e}(Ma),Ba=function(t){function e(e){return void 0===e&&(e={}),t.call(this,ls({event:\"pinch\",threshold:0,pointers:2},e))||this}ds(e,t);var i=e.prototype;return i.getTouchAction=function(){return[Os]},i.attrTest=function(e){return t.prototype.attrTest.call(this,e)&&(Math.abs(e.scale-1)>this.options.threshold||2&this.state)},i.emit=function(e){if(1!==e.scale){var i=e.scale<1?\"in\":\"out\";e.additionalEvent=this.options.event+i}t.prototype.emit.call(this,e)},e}(Ma),za=function(t){function e(e){return void 0===e&&(e={}),t.call(this,ls({event:\"rotate\",threshold:0,pointers:2},e))||this}ds(e,t);var i=e.prototype;return i.getTouchAction=function(){return[Os]},i.attrTest=function(e){return t.prototype.attrTest.call(this,e)&&(Math.abs(e.rotation)>this.options.threshold||2&this.state)},e}(Ma),Na=function(t){function e(e){var i;return void 0===e&&(e={}),(i=t.call(this,ls({event:\"press\",pointers:1,time:251,threshold:9},e))||this)._timer=null,i._input=null,i}ds(e,t);var i=e.prototype;return i.getTouchAction=function(){return[xs]},i.process=function(t){var e=this,i=this.options,n=t.pointers.length===i.pointers,o=t.distance<i.threshold,r=t.deltaTime>i.time;if(this._input=t,!o||!n||12&t.eventType&&!r)this.reset();else if(1&t.eventType)this.reset(),this._timer=setTimeout((function(){e.state=8,e.tryEmit()}),i.time);else if(4&t.eventType)return 8;return xa},i.reset=function(){clearTimeout(this._timer)},i.emit=function(t){8===this.state&&(t&&4&t.eventType?this.manager.emit(this.options.event+\"up\",t):(this._input.timeStamp=ms(),this.manager.emit(this.options.event,this._input)))},e}(Sa),Aa={domEvents:!1,touchAction:_s,enable:!0,inputTarget:null,inputClass:null,cssProps:{userSelect:\"none\",touchSelect:\"none\",touchCallout:\"none\",contentZooming:\"none\",userDrag:\"none\",tapHighlightColor:\"rgba(0,0,0,0)\"}},Fa=[[za,{enable:!1}],[Ba,{enable:!1},[\"rotate\"]],[Ia,{direction:6}],[Da,{direction:6},[\"swipe\"]],[Ta],[Ta,{event:\"doubletap\",taps:2},[\"tap\"]],[Na]];function ja(t,e){var i,n=t.element;n.style&&(js(t.options.cssProps,(function(o,r){i=bs(n.style,r),e?(t.oldCssProps[i]=n.style[i],n.style[i]=o):n.style[i]=t.oldCssProps[i]||\"\"})),e||(t.oldCssProps={}))}var Ra=function(){function t(t,e){var i,n=this;this.options=fs({},Aa,e||{}),this.options.inputTarget=this.options.inputTarget||t,this.handlers={},this.session={},this.recognizers=[],this.oldCssProps={},this.element=t,this.input=new((i=this).options.inputClass||(Ps?aa:Ds?ua:Ms?ka:ya))(i,$s),this.touchAction=new Hs(this,this.options.touchAction),ja(this,!0),js(this.options.recognizers,(function(t){var e=n.add(new t[0](t[1]));t[2]&&e.recognizeWith(t[2]),t[3]&&e.requireFailure(t[3])}),this)}var e=t.prototype;return e.set=function(t){return fs(this.options,t),t.touchAction&&this.touchAction.update(),t.inputTarget&&(this.input.destroy(),this.input.target=t.inputTarget,this.input.init()),this},e.stop=function(t){this.session.stopped=t?2:1},e.recognize=function(t){var e=this.session;if(!e.stopped){var i;this.touchAction.preventDefaults(t);var n=this.recognizers,o=e.curRecognizer;(!o||o&&8&o.state)&&(e.curRecognizer=null,o=null);for(var r=0;r<n.length;)i=n[r],2===e.stopped||o&&i!==o&&!i.canRecognizeWith(o)?i.reset():i.recognize(t),!o&&14&i.state&&(e.curRecognizer=i,o=i),r++}},e.get=function(t){if(t instanceof Sa)return t;for(var e=this.recognizers,i=0;i<e.length;i++)if(e[i].options.event===t)return e[i];return null},e.add=function(t){if(_a(t,\"add\",this))return this;var e=this.get(t.options.event);return e&&this.remove(e),this.recognizers.push(t),t.manager=this,this.touchAction.update(),t},e.remove=function(t){if(_a(t,\"remove\",this))return this;var e=this.get(t);if(t){var i=this.recognizers,n=ia(i,e);-1!==n&&(i.splice(n,1),this.touchAction.update())}return this},e.on=function(t,e){if(void 0===t||void 0===e)return this;var i=this.handlers;return js(Zs(t),(function(t){i[t]=i[t]||[],i[t].push(e)})),this},e.off=function(t,e){if(void 0===t)return this;var i=this.handlers;return js(Zs(t),(function(t){e?i[t]&&i[t].splice(ia(i[t],e),1):delete i[t]})),this},e.emit=function(t,e){this.options.domEvents&&function(t,e){var i=document.createEvent(\"Event\");i.initEvent(t,!0,!0),i.gesture=e,e.target.dispatchEvent(i)}(t,e);var i=this.handlers[t]&&this.handlers[t].slice();if(i&&i.length){e.type=t,e.preventDefault=function(){e.srcEvent.preventDefault()};for(var n=0;n<i.length;)i[n](e),n++}},e.destroy=function(){this.element&&ja(this,!1),this.handlers={},this.session={},this.input.destroy(),this.element=null},t}(),La={touchstart:1,touchmove:2,touchend:4,touchcancel:8},Ha=\"touchstart\",Wa=\"touchstart touchmove touchend touchcancel\",qa=function(t){function e(){var i,n=e.prototype;return n.evTarget=Ha,n.evWin=Wa,(i=t.apply(this,arguments)||this).started=!1,i}return ds(e,t),e.prototype.handler=function(t){var e=La[t.type];if(1===e&&(this.started=!0),this.started){var i=Va.call(this,t,e);12&e&&i[0].length-i[1].length==0&&(this.started=!1),this.callback(this.manager,e,{pointers:i[0],changedPointers:i[1],pointerType:Is,srcEvent:t})}},e}(ea);function Va(t,e){var i=ha(t.touches),n=ha(t.changedTouches);return 12&e&&(i=la(i.concat(n),\"identifier\",!0)),[i,n]}function Ua(t,e,i){var n=\"DEPRECATED METHOD: \"+e+\"\\n\"+i+\" AT \\n\";return function(){var e=new Error(\"get-stack-trace\"),i=e&&e.stack?e.stack.replace(/^[^\\(]+?[\\n$]/gm,\"\").replace(/^\\s+at\\s+/gm,\"\").replace(/^Object.<anonymous>\\s*\\(/gm,\"{anonymous}()@\"):\"Unknown Stack Trace\",o=window.console&&(window.console.warn||window.console.log);return o&&o.call(window.console,n,i),t.apply(this,arguments)}}var Ya=Ua((function(t,e,i){for(var n=Object.keys(e),o=0;o<n.length;)(!i||i&&void 0===t[n[o]])&&(t[n[o]]=e[n[o]]),o++;return t}),\"extend\",\"Use `assign`.\"),Xa=Ua((function(t,e){return Ya(t,e,!0)}),\"merge\",\"Use `assign`.\");function Ga(t,e,i){var n,o=e.prototype;(n=t.prototype=Object.create(o)).constructor=t,n._super=o,i&&fs(n,i)}function Ka(t,e){return function(){return t.apply(e,arguments)}}var $a=function(){var t=function(t,e){return void 0===e&&(e={}),new Ra(t,ls({recognizers:Fa.concat()},e))};return t.VERSION=\"2.0.17-rc\",t.DIRECTION_ALL=30,t.DIRECTION_DOWN=zs,t.DIRECTION_LEFT=2,t.DIRECTION_RIGHT=4,t.DIRECTION_UP=8,t.DIRECTION_HORIZONTAL=6,t.DIRECTION_VERTICAL=Ns,t.DIRECTION_NONE=1,t.DIRECTION_DOWN=zs,t.INPUT_START=1,t.INPUT_MOVE=2,t.INPUT_END=4,t.INPUT_CANCEL=8,t.STATE_POSSIBLE=1,t.STATE_BEGAN=2,t.STATE_CHANGED=4,t.STATE_ENDED=8,t.STATE_RECOGNIZED=8,t.STATE_CANCELLED=16,t.STATE_FAILED=xa,t.Manager=Ra,t.Input=ea,t.TouchAction=Hs,t.TouchInput=ua,t.MouseInput=ya,t.PointerEventInput=aa,t.TouchMouseInput=ka,t.SingleTouchInput=qa,t.Recognizer=Sa,t.AttrRecognizer=Ma,t.Tap=Ta,t.Pan=Da,t.Swipe=Ia,t.Pinch=Ba,t.Rotate=za,t.Press=Na,t.on=Qs,t.off=Js,t.each=js,t.merge=Xa,t.extend=Ya,t.bindFn=Ka,t.assign=fs,t.inherit=Ga,t.bindFn=Ka,t.prefixed=bs,t.toArray=ha,t.inArray=ia,t.uniqueArray=la,t.splitStr=Zs,t.boolOrFn=Rs,t.hasParent=Ws,t.addEventListeners=Qs,t.removeEventListeners=Js,t.defaults=fs({},Aa,{preset:Fa}),t}();function Za(t,e){var i=zo(t);if(On){var n=On(t);e&&(n=mr(n).call(n,(function(e){return Mn(t,e).enumerable}))),i.push.apply(i,n)}return i}function Qa(t){for(var e=1;e<arguments.length;e++){var i,n=null!=arguments[e]?arguments[e]:{};if(e%2)Wo(i=Za(Object(n),!0)).call(i,(function(e){jn(t,e,n[e])}));else if(Dn)In(t,Dn(n));else{var o;Wo(o=Za(Object(n))).call(o,(function(e){zn(t,e,Mn(n,e))}))}}return t}function Ja(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return th(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return th(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function th(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}var eh=ko(\"DELETE\");function ih(t){for(var e,i=arguments.length,n=new Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];return nh.apply(void 0,Eo(e=[{},t]).call(e,n))}function nh(){var t=oh.apply(void 0,arguments);return sh(t),t}function oh(){for(var t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];if(e.length<2)return e[0];var n;if(e.length>2)return oh.apply(void 0,Eo(n=[nh(e[0],e[1])]).call(n,wo(Oo(e).call(e,2))));var o,r=e[0],s=e[1],a=Ja(Co(s));try{for(a.s();!(o=a.n()).done;){var h=o.value;Object.prototype.propertyIsEnumerable.call(s,h)&&(s[h]===eh?delete r[h]:null===r[h]||null===s[h]||\"object\"!==go(r[h])||\"object\"!==go(s[h])||So(r[h])||So(s[h])?r[h]=rh(s[h]):r[h]=oh(r[h],s[h]))}}catch(t){a.e(t)}finally{a.f()}return r}function rh(t){return So(t)?Io(t).call(t,(function(t){return rh(t)})):\"object\"===go(t)&&null!==t?oh({},t):t}function sh(t){for(var e=0,i=zo(t);e<i.length;e++){var n=i[e];t[n]===eh?delete t[n]:\"object\"===go(t[n])&&null!==t[n]&&sh(t[n])}}function ah(){for(var t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];return hh(e.length?e:[No()])}function hh(t){var e=function(){for(var t=lh(),e=t(\" \"),i=t(\" \"),n=t(\" \"),o=0;o<arguments.length;o++)(e-=t(o<0||arguments.length<=o?void 0:arguments[o]))<0&&(e+=1),(i-=t(o<0||arguments.length<=o?void 0:arguments[o]))<0&&(i+=1),(n-=t(o<0||arguments.length<=o?void 0:arguments[o]))<0&&(n+=1);return[e,i,n]}(t),i=uo(e,3),n=i[0],o=i[1],r=i[2],s=1,a=function(){var t=2091639*n+2.3283064365386963e-10*s;return n=o,o=r,r=t-(s=0|t)};return a.uint32=function(){return 4294967296*a()},a.fract53=function(){return a()+11102230246251565e-32*(2097152*a()|0)},a.algorithm=\"Alea\",a.seed=t,a.version=\"0.9\",a}function lh(){var t=4022871197;return function(e){for(var i=e.toString(),n=0;n<i.length;n++){var o=.02519603282416938*(t+=i.charCodeAt(n));o-=t=o>>>0,t=(o*=t)>>>0,t+=4294967296*(o-=t)}return 2.3283064365386963e-10*(t>>>0)}}var dh=\"undefined\"!=typeof window?window.Hammer||$a:function(){return{on:t=function(){},off:t,destroy:t,emit:t,get:function(){return{set:t}}};var t};function ch(t){var e,i=this;this._cleanupQueue=[],this.active=!1,this._dom={container:t,overlay:document.createElement(\"div\")},this._dom.overlay.classList.add(\"vis-overlay\"),this._dom.container.appendChild(this._dom.overlay),this._cleanupQueue.push((function(){i._dom.overlay.parentNode.removeChild(i._dom.overlay)}));var n=dh(this._dom.overlay);n.on(\"tap\",Vt(e=this._onTapOverlay).call(e,this)),this._cleanupQueue.push((function(){n.destroy()}));var o=[\"tap\",\"doubletap\",\"press\",\"pinch\",\"pan\",\"panstart\",\"panmove\",\"panend\"];Wo(o).call(o,(function(t){n.on(t,(function(t){t.srcEvent.stopPropagation()}))})),document&&document.body&&(this._onClick=function(e){(function(t,e){for(;t;){if(t===e)return!0;t=t.parentNode}return!1})(e.target,t)||i.deactivate()},document.body.addEventListener(\"click\",this._onClick),this._cleanupQueue.push((function(){document.body.removeEventListener(\"click\",i._onClick)}))),this._escListener=function(t){(\"key\"in t?\"Escape\"===t.key:27===t.keyCode)&&i.deactivate()}}Zt(ch.prototype),ch.current=null,ch.prototype.destroy=function(){var t,e;this.deactivate();var i,n=Ja(Xo(t=er(e=this._cleanupQueue).call(e,0)).call(t));try{for(n.s();!(i=n.n()).done;){(0,i.value)()}}catch(t){n.e(t)}finally{n.f()}},ch.prototype.activate=function(){ch.current&&ch.current.deactivate(),ch.current=this,this.active=!0,this._dom.overlay.style.display=\"none\",this._dom.container.classList.add(\"vis-active\"),this.emit(\"change\"),this.emit(\"activate\"),document.body.addEventListener(\"keydown\",this._escListener)},ch.prototype.deactivate=function(){this.active=!1,this._dom.overlay.style.display=\"block\",this._dom.container.classList.remove(\"vis-active\"),document.body.removeEventListener(\"keydown\",this._escListener),this.emit(\"change\"),this.emit(\"deactivate\")},ch.prototype._onTapOverlay=function(t){this.activate(),t.srcEvent.stopPropagation()};var uh=/^\\/?Date\\((-?\\d+)/i,fh=/^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i,ph=/^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i,vh=/^rgb\\( *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *\\)$/i,gh=/^rgba\\( *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *([01]|0?\\.\\d+) *\\)$/i;function yh(t){return t instanceof Number||\"number\"==typeof t}function mh(t){if(t)for(;!0===t.hasChildNodes();){var e=t.firstChild;e&&(mh(e),t.removeChild(e))}}function bh(t){return t instanceof String||\"string\"==typeof t}function wh(t){return\"object\"===go(t)&&null!==t}function kh(t,e,i,n){var o=!1;!0===n&&(o=null===e[i]&&void 0!==t[i]),o?delete t[i]:t[i]=e[i]}function _h(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];for(var n in t)if(void 0!==e[n])if(null===e[n]||\"object\"!==go(e[n]))kh(t,e,n,i);else{var o=t[n],r=e[n];wh(o)&&wh(r)&&_h(o,r,i)}}var xh=At;function Eh(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(So(i))throw new TypeError(\"Arrays are not supported by deepExtend\");for(var o=0;o<t.length;o++){var r=t[o];if(Object.prototype.hasOwnProperty.call(i,r))if(i[r]&&i[r].constructor===Object)void 0===e[r]&&(e[r]={}),e[r].constructor===Object?Ch(e[r],i[r],!1,n):kh(e,i,r,n);else{if(So(i[r]))throw new TypeError(\"Arrays are not supported by deepExtend\");kh(e,i,r,n)}}return e}function Oh(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(So(i))throw new TypeError(\"Arrays are not supported by deepExtend\");for(var o in i)if(Object.prototype.hasOwnProperty.call(i,o)&&!dr(t).call(t,o))if(i[o]&&i[o].constructor===Object)void 0===e[o]&&(e[o]={}),e[o].constructor===Object?Ch(e[o],i[o]):kh(e,i,o,n);else if(So(i[o])){e[o]=[];for(var r=0;r<i[o].length;r++)e[o].push(i[o][r])}else kh(e,i,o,n);return e}function Ch(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];for(var o in e)if(Object.prototype.hasOwnProperty.call(e,o)||!0===i)if(\"object\"===go(e[o])&&null!==e[o]&&fr(e[o])===Object.prototype)void 0===t[o]?t[o]=Ch({},e[o],i):\"object\"===go(t[o])&&null!==t[o]&&fr(t[o])===Object.prototype?Ch(t[o],e[o],i):kh(t,e,o,n);else if(So(e[o])){var r;t[o]=Oo(r=e[o]).call(r)}else kh(t,e,o,n);return t}function Sh(t,e){var i;return Eo(i=[]).call(i,wo(t),[e])}function Th(t){return Oo(t).call(t)}function Mh(t){return t.getBoundingClientRect().left}function Ph(t){return t.getBoundingClientRect().top}function Dh(t,e){if(So(t))for(var i=t.length,n=0;n<i;n++)e(t[n],n,t);else for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&e(t[o],o,t)}var Ih=_r;function Bh(t,e,i,n){var o;t.addEventListener?(void 0===n&&(n=!1),\"mousewheel\"===e&&dr(o=navigator.userAgent).call(o,\"Firefox\")&&(e=\"DOMMouseScroll\"),t.addEventListener(e,i,n)):t.attachEvent(\"on\"+e,i)}function zh(t,e,i,n){var o;t.removeEventListener?(void 0===n&&(n=!1),\"mousewheel\"===e&&dr(o=navigator.userAgent).call(o,\"Firefox\")&&(e=\"DOMMouseScroll\"),t.removeEventListener(e,i,n)):t.detachEvent(\"on\"+e,i)}var Nh={asBoolean:function(t,e){return\"function\"==typeof t&&(t=t()),null!=t?0!=t:e||null},asNumber:function(t,e){return\"function\"==typeof t&&(t=t()),null!=t?Number(t)||e||null:e||null},asString:function(t,e){return\"function\"==typeof t&&(t=t()),null!=t?String(t):e||null},asSize:function(t,e){return\"function\"==typeof t&&(t=t()),bh(t)?t:yh(t)?t+\"px\":e||null},asElement:function(t,e){return\"function\"==typeof t&&(t=t()),t||e||null}};function Ah(t){var e;switch(t.length){case 3:case 4:return(e=ph.exec(t))?{r:Br(e[1]+e[1],16),g:Br(e[2]+e[2],16),b:Br(e[3]+e[3],16)}:null;case 6:case 7:return(e=fh.exec(t))?{r:Br(e[1],16),g:Br(e[2],16),b:Br(e[3],16)}:null;default:return null}}function Fh(t,e){if(dr(t).call(t,\"rgba\"))return t;if(dr(t).call(t,\"rgb\")){var i=t.substr(Hr(t).call(t,\"(\")+1).replace(\")\",\"\").split(\",\");return\"rgba(\"+i[0]+\",\"+i[1]+\",\"+i[2]+\",\"+e+\")\"}var n=Ah(t);return null==n?t:\"rgba(\"+n.r+\",\"+n.g+\",\"+n.b+\",\"+e+\")\"}function jh(t,e,i){var n;return\"#\"+Oo(n=((1<<24)+(t<<16)+(e<<8)+i).toString(16)).call(n,1)}function Rh(t,e){if(bh(t)){var i=t;if(Xh(i)){var n,o=Io(n=i.substr(4).substr(0,i.length-5).split(\",\")).call(n,(function(t){return Br(t)}));i=jh(o[0],o[1],o[2])}if(!0===Yh(i)){var r=Uh(i),s={h:r.h,s:.8*r.s,v:Math.min(1,1.02*r.v)},a={h:r.h,s:Math.min(1,1.25*r.s),v:.8*r.v},h=Vh(a.h,a.s,a.v),l=Vh(s.h,s.s,s.v);return{background:i,border:h,highlight:{background:l,border:h},hover:{background:l,border:h}}}return{background:i,border:i,highlight:{background:i,border:i},hover:{background:i,border:i}}}return e?{background:t.background||e.background,border:t.border||e.border,highlight:bh(t.highlight)?{border:t.highlight,background:t.highlight}:{background:t.highlight&&t.highlight.background||e.highlight.background,border:t.highlight&&t.highlight.border||e.highlight.border},hover:bh(t.hover)?{border:t.hover,background:t.hover}:{border:t.hover&&t.hover.border||e.hover.border,background:t.hover&&t.hover.background||e.hover.background}}:{background:t.background||void 0,border:t.border||void 0,highlight:bh(t.highlight)?{border:t.highlight,background:t.highlight}:{background:t.highlight&&t.highlight.background||void 0,border:t.highlight&&t.highlight.border||void 0},hover:bh(t.hover)?{border:t.hover,background:t.hover}:{border:t.hover&&t.hover.border||void 0,background:t.hover&&t.hover.background||void 0}}}function Lh(t,e,i){t/=255,e/=255,i/=255;var n=Math.min(t,Math.min(e,i)),o=Math.max(t,Math.max(e,i));return n===o?{h:0,s:0,v:n}:{h:60*((t===n?3:i===n?1:5)-(t===n?e-i:i===n?t-e:i-t)/(o-n))/360,s:(o-n)/o,v:o}}var Hh=function(t){var e,i={};return Wo(e=t.split(\";\")).call(e,(function(t){if(\"\"!=Ur(t).call(t)){var e,n,o=t.split(\":\"),r=Ur(e=o[0]).call(e),s=Ur(n=o[1]).call(n);i[r]=s}})),i},Wh=function(t){var e;return Io(e=zo(t)).call(e,(function(e){return e+\": \"+t[e]})).join(\"; \")};function qh(t,e,i){var n,o,r,s=Math.floor(6*t),a=6*t-s,h=i*(1-e),l=i*(1-a*e),d=i*(1-(1-a)*e);switch(s%6){case 0:n=i,o=d,r=h;break;case 1:n=l,o=i,r=h;break;case 2:n=h,o=i,r=d;break;case 3:n=h,o=l,r=i;break;case 4:n=d,o=h,r=i;break;case 5:n=i,o=h,r=l}return{r:Math.floor(255*n),g:Math.floor(255*o),b:Math.floor(255*r)}}function Vh(t,e,i){var n=qh(t,e,i);return jh(n.r,n.g,n.b)}function Uh(t){var e=Ah(t);if(!e)throw new TypeError(\"'\".concat(t,\"' is not a valid color.\"));return Lh(e.r,e.g,e.b)}function Yh(t){return/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(t)}function Xh(t){return vh.test(t)}function Gh(t){return gh.test(t)}function Kh(t){if(null===t||\"object\"!==go(t))return null;if(t instanceof Element)return t;var e=Gr(t);for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&\"object\"==go(t[i])&&(e[i]=Kh(t[i]));return e}function $h(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},o=function(t){return null!=t},r=function(t){return null!==t&&\"object\"===go(t)},s=function(t){for(var e in t)if(Object.prototype.hasOwnProperty.call(t,e))return!1;return!0};if(!r(t))throw new Error(\"Parameter mergeTarget must be an object\");if(!r(e))throw new Error(\"Parameter options must be an object\");if(!o(i))throw new Error(\"Parameter option must have a value\");if(!r(n))throw new Error(\"Parameter globalOptions must be an object\");var a=function(t,e,i){r(t[i])||(t[i]={});var n=e[i],o=t[i];for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(o[s]=n[s])},h=e[i],l=r(n)&&!s(n),d=l?n[i]:void 0,c=d?d.enabled:void 0;if(void 0!==h){if(\"boolean\"==typeof h)return r(t[i])||(t[i]={}),void(t[i].enabled=h);if(null===h&&!r(t[i])){if(!o(d))return;t[i]=Gr(d)}if(r(h)){var u=!0;void 0!==h.enabled?u=h.enabled:void 0!==c&&(u=d.enabled),a(t,e,i),t[i].enabled=u}}}var Zh={linear:function(t){return t},easeInQuad:function(t){return t*t},easeOutQuad:function(t){return t*(2-t)},easeInOutQuad:function(t){return t<.5?2*t*t:(4-2*t)*t-1},easeInCubic:function(t){return t*t*t},easeOutCubic:function(t){return--t*t*t+1},easeInOutCubic:function(t){return t<.5?4*t*t*t:(t-1)*(2*t-2)*(2*t-2)+1},easeInQuart:function(t){return t*t*t*t},easeOutQuart:function(t){return 1- --t*t*t*t},easeInOutQuart:function(t){return t<.5?8*t*t*t*t:1-8*--t*t*t*t},easeInQuint:function(t){return t*t*t*t*t},easeOutQuint:function(t){return 1+--t*t*t*t*t},easeInOutQuint:function(t){return t<.5?16*t*t*t*t*t:1+16*--t*t*t*t*t}};function Qh(t,e){var i;So(e)||(e=[e]);var n,o=Ja(t);try{for(o.s();!(n=o.n()).done;){var r=n.value;if(r){i=r[e[0]];for(var s=1;s<e.length;s++)i&&(i=i[e[s]]);if(void 0!==i)break}}}catch(t){o.e(t)}finally{o.f()}return i}var Jh={black:\"#000000\",navy:\"#000080\",darkblue:\"#00008B\",mediumblue:\"#0000CD\",blue:\"#0000FF\",darkgreen:\"#006400\",green:\"#008000\",teal:\"#008080\",darkcyan:\"#008B8B\",deepskyblue:\"#00BFFF\",darkturquoise:\"#00CED1\",mediumspringgreen:\"#00FA9A\",lime:\"#00FF00\",springgreen:\"#00FF7F\",aqua:\"#00FFFF\",cyan:\"#00FFFF\",midnightblue:\"#191970\",dodgerblue:\"#1E90FF\",lightseagreen:\"#20B2AA\",forestgreen:\"#228B22\",seagreen:\"#2E8B57\",darkslategray:\"#2F4F4F\",limegreen:\"#32CD32\",mediumseagreen:\"#3CB371\",turquoise:\"#40E0D0\",royalblue:\"#4169E1\",steelblue:\"#4682B4\",darkslateblue:\"#483D8B\",mediumturquoise:\"#48D1CC\",indigo:\"#4B0082\",darkolivegreen:\"#556B2F\",cadetblue:\"#5F9EA0\",cornflowerblue:\"#6495ED\",mediumaquamarine:\"#66CDAA\",dimgray:\"#696969\",slateblue:\"#6A5ACD\",olivedrab:\"#6B8E23\",slategray:\"#708090\",lightslategray:\"#778899\",mediumslateblue:\"#7B68EE\",lawngreen:\"#7CFC00\",chartreuse:\"#7FFF00\",aquamarine:\"#7FFFD4\",maroon:\"#800000\",purple:\"#800080\",olive:\"#808000\",gray:\"#808080\",skyblue:\"#87CEEB\",lightskyblue:\"#87CEFA\",blueviolet:\"#8A2BE2\",darkred:\"#8B0000\",darkmagenta:\"#8B008B\",saddlebrown:\"#8B4513\",darkseagreen:\"#8FBC8F\",lightgreen:\"#90EE90\",mediumpurple:\"#9370D8\",darkviolet:\"#9400D3\",palegreen:\"#98FB98\",darkorchid:\"#9932CC\",yellowgreen:\"#9ACD32\",sienna:\"#A0522D\",brown:\"#A52A2A\",darkgray:\"#A9A9A9\",lightblue:\"#ADD8E6\",greenyellow:\"#ADFF2F\",paleturquoise:\"#AFEEEE\",lightsteelblue:\"#B0C4DE\",powderblue:\"#B0E0E6\",firebrick:\"#B22222\",darkgoldenrod:\"#B8860B\",mediumorchid:\"#BA55D3\",rosybrown:\"#BC8F8F\",darkkhaki:\"#BDB76B\",silver:\"#C0C0C0\",mediumvioletred:\"#C71585\",indianred:\"#CD5C5C\",peru:\"#CD853F\",chocolate:\"#D2691E\",tan:\"#D2B48C\",lightgrey:\"#D3D3D3\",palevioletred:\"#D87093\",thistle:\"#D8BFD8\",orchid:\"#DA70D6\",goldenrod:\"#DAA520\",crimson:\"#DC143C\",gainsboro:\"#DCDCDC\",plum:\"#DDA0DD\",burlywood:\"#DEB887\",lightcyan:\"#E0FFFF\",lavender:\"#E6E6FA\",darksalmon:\"#E9967A\",violet:\"#EE82EE\",palegoldenrod:\"#EEE8AA\",lightcoral:\"#F08080\",khaki:\"#F0E68C\",aliceblue:\"#F0F8FF\",honeydew:\"#F0FFF0\",azure:\"#F0FFFF\",sandybrown:\"#F4A460\",wheat:\"#F5DEB3\",beige:\"#F5F5DC\",whitesmoke:\"#F5F5F5\",mintcream:\"#F5FFFA\",ghostwhite:\"#F8F8FF\",salmon:\"#FA8072\",antiquewhite:\"#FAEBD7\",linen:\"#FAF0E6\",lightgoldenrodyellow:\"#FAFAD2\",oldlace:\"#FDF5E6\",red:\"#FF0000\",fuchsia:\"#FF00FF\",magenta:\"#FF00FF\",deeppink:\"#FF1493\",orangered:\"#FF4500\",tomato:\"#FF6347\",hotpink:\"#FF69B4\",coral:\"#FF7F50\",darkorange:\"#FF8C00\",lightsalmon:\"#FFA07A\",orange:\"#FFA500\",lightpink:\"#FFB6C1\",pink:\"#FFC0CB\",gold:\"#FFD700\",peachpuff:\"#FFDAB9\",navajowhite:\"#FFDEAD\",moccasin:\"#FFE4B5\",bisque:\"#FFE4C4\",mistyrose:\"#FFE4E1\",blanchedalmond:\"#FFEBCD\",papayawhip:\"#FFEFD5\",lavenderblush:\"#FFF0F5\",seashell:\"#FFF5EE\",cornsilk:\"#FFF8DC\",lemonchiffon:\"#FFFACD\",floralwhite:\"#FFFAF0\",snow:\"#FFFAFA\",yellow:\"#FFFF00\",lightyellow:\"#FFFFE0\",ivory:\"#FFFFF0\",white:\"#FFFFFF\"},tl=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;Nn(this,t),this.pixelRatio=e,this.generated=!1,this.centerCoordinates={x:144.5,y:144.5},this.r=289*.49,this.color={r:255,g:255,b:255,a:1},this.hueCircle=void 0,this.initialColor={r:255,g:255,b:255,a:1},this.previousColor=void 0,this.applied=!1,this.updateCallback=function(){},this.closeCallback=function(){},this._create()}return Fn(t,[{key:\"insertTo\",value:function(t){void 0!==this.hammer&&(this.hammer.destroy(),this.hammer=void 0),this.container=t,this.container.appendChild(this.frame),this._bindHammer(),this._setSize()}},{key:\"setUpdateCallback\",value:function(t){if(\"function\"!=typeof t)throw new Error(\"Function attempted to set as colorPicker update callback is not a function.\");this.updateCallback=t}},{key:\"setCloseCallback\",value:function(t){if(\"function\"!=typeof t)throw new Error(\"Function attempted to set as colorPicker closing callback is not a function.\");this.closeCallback=t}},{key:\"_isColorString\",value:function(t){if(\"string\"==typeof t)return Jh[t]}},{key:\"setColor\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(\"none\"!==t){var i,n=this._isColorString(t);if(void 0!==n&&(t=n),!0===bh(t)){if(!0===Xh(t)){var o=t.substr(4).substr(0,t.length-5).split(\",\");i={r:o[0],g:o[1],b:o[2],a:1}}else if(!0===Gh(t)){var r=t.substr(5).substr(0,t.length-6).split(\",\");i={r:r[0],g:r[1],b:r[2],a:r[3]}}else if(!0===Yh(t)){var s=Ah(t);i={r:s.r,g:s.g,b:s.b,a:1}}}else if(t instanceof Object&&void 0!==t.r&&void 0!==t.g&&void 0!==t.b){var a=void 0!==t.a?t.a:\"1.0\";i={r:t.r,g:t.g,b:t.b,a:a}}if(void 0===i)throw new Error(\"Unknown color passed to the colorPicker. Supported are strings: rgb, hex, rgba. Object: rgb ({r:r,g:g,b:b,[a:a]}). Supplied: \"+es(t));this._setColor(i,e)}}},{key:\"show\",value:function(){void 0!==this.closeCallback&&(this.closeCallback(),this.closeCallback=void 0),this.applied=!1,this.frame.style.display=\"block\",this._generateHueCircle()}},{key:\"_hide\",value:function(){var t=this,e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];!0===e&&(this.previousColor=At({},this.color)),!0===this.applied&&this.updateCallback(this.initialColor),this.frame.style.display=\"none\",rs((function(){void 0!==t.closeCallback&&(t.closeCallback(),t.closeCallback=void 0)}),0)}},{key:\"_save\",value:function(){this.updateCallback(this.color),this.applied=!1,this._hide()}},{key:\"_apply\",value:function(){this.applied=!0,this.updateCallback(this.color),this._updatePicker(this.color)}},{key:\"_loadLast\",value:function(){void 0!==this.previousColor?this.setColor(this.previousColor,!1):alert(\"There is no last color to load...\")}},{key:\"_setColor\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];!0===e&&(this.initialColor=At({},t)),this.color=t;var i=Lh(t.r,t.g,t.b),n=2*Math.PI,o=this.r*i.s,r=this.centerCoordinates.x+o*Math.sin(n*i.h),s=this.centerCoordinates.y+o*Math.cos(n*i.h);this.colorPickerSelector.style.left=r-.5*this.colorPickerSelector.clientWidth+\"px\",this.colorPickerSelector.style.top=s-.5*this.colorPickerSelector.clientHeight+\"px\",this._updatePicker(t)}},{key:\"_setOpacity\",value:function(t){this.color.a=t/100,this._updatePicker(this.color)}},{key:\"_setBrightness\",value:function(t){var e=Lh(this.color.r,this.color.g,this.color.b);e.v=t/100;var i=qh(e.h,e.s,e.v);i.a=this.color.a,this.color=i,this._updatePicker()}},{key:\"_updatePicker\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.color,e=Lh(t.r,t.g,t.b),i=this.colorPickerCanvas.getContext(\"2d\");void 0===this.pixelRation&&(this.pixelRatio=(window.devicePixelRatio||1)/(i.webkitBackingStorePixelRatio||i.mozBackingStorePixelRatio||i.msBackingStorePixelRatio||i.oBackingStorePixelRatio||i.backingStorePixelRatio||1)),i.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0);var n=this.colorPickerCanvas.clientWidth,o=this.colorPickerCanvas.clientHeight;i.clearRect(0,0,n,o),i.putImageData(this.hueCircle,0,0),i.fillStyle=\"rgba(0,0,0,\"+(1-e.v)+\")\",i.circle(this.centerCoordinates.x,this.centerCoordinates.y,this.r),hs(i).call(i),this.brightnessRange.value=100*e.v,this.opacityRange.value=100*t.a,this.initialColorDiv.style.backgroundColor=\"rgba(\"+this.initialColor.r+\",\"+this.initialColor.g+\",\"+this.initialColor.b+\",\"+this.initialColor.a+\")\",this.newColorDiv.style.backgroundColor=\"rgba(\"+this.color.r+\",\"+this.color.g+\",\"+this.color.b+\",\"+this.color.a+\")\"}},{key:\"_setSize\",value:function(){this.colorPickerCanvas.style.width=\"100%\",this.colorPickerCanvas.style.height=\"100%\",this.colorPickerCanvas.width=289*this.pixelRatio,this.colorPickerCanvas.height=289*this.pixelRatio}},{key:\"_create\",value:function(){var t,e,i,n;if(this.frame=document.createElement(\"div\"),this.frame.className=\"vis-color-picker\",this.colorPickerDiv=document.createElement(\"div\"),this.colorPickerSelector=document.createElement(\"div\"),this.colorPickerSelector.className=\"vis-selector\",this.colorPickerDiv.appendChild(this.colorPickerSelector),this.colorPickerCanvas=document.createElement(\"canvas\"),this.colorPickerDiv.appendChild(this.colorPickerCanvas),this.colorPickerCanvas.getContext){var o=this.colorPickerCanvas.getContext(\"2d\");this.pixelRatio=(window.devicePixelRatio||1)/(o.webkitBackingStorePixelRatio||o.mozBackingStorePixelRatio||o.msBackingStorePixelRatio||o.oBackingStorePixelRatio||o.backingStorePixelRatio||1),this.colorPickerCanvas.getContext(\"2d\").setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0)}else{var r=document.createElement(\"DIV\");r.style.color=\"red\",r.style.fontWeight=\"bold\",r.style.padding=\"10px\",r.innerText=\"Error: your browser does not support HTML canvas\",this.colorPickerCanvas.appendChild(r)}this.colorPickerDiv.className=\"vis-color\",this.opacityDiv=document.createElement(\"div\"),this.opacityDiv.className=\"vis-opacity\",this.brightnessDiv=document.createElement(\"div\"),this.brightnessDiv.className=\"vis-brightness\",this.arrowDiv=document.createElement(\"div\"),this.arrowDiv.className=\"vis-arrow\",this.opacityRange=document.createElement(\"input\");try{this.opacityRange.type=\"range\",this.opacityRange.min=\"0\",this.opacityRange.max=\"100\"}catch(t){}this.opacityRange.value=\"100\",this.opacityRange.className=\"vis-range\",this.brightnessRange=document.createElement(\"input\");try{this.brightnessRange.type=\"range\",this.brightnessRange.min=\"0\",this.brightnessRange.max=\"100\"}catch(t){}this.brightnessRange.value=\"100\",this.brightnessRange.className=\"vis-range\",this.opacityDiv.appendChild(this.opacityRange),this.brightnessDiv.appendChild(this.brightnessRange);var s=this;this.opacityRange.onchange=function(){s._setOpacity(this.value)},this.opacityRange.oninput=function(){s._setOpacity(this.value)},this.brightnessRange.onchange=function(){s._setBrightness(this.value)},this.brightnessRange.oninput=function(){s._setBrightness(this.value)},this.brightnessLabel=document.createElement(\"div\"),this.brightnessLabel.className=\"vis-label vis-brightness\",this.brightnessLabel.innerText=\"brightness:\",this.opacityLabel=document.createElement(\"div\"),this.opacityLabel.className=\"vis-label vis-opacity\",this.opacityLabel.innerText=\"opacity:\",this.newColorDiv=document.createElement(\"div\"),this.newColorDiv.className=\"vis-new-color\",this.newColorDiv.innerText=\"new\",this.initialColorDiv=document.createElement(\"div\"),this.initialColorDiv.className=\"vis-initial-color\",this.initialColorDiv.innerText=\"initial\",this.cancelButton=document.createElement(\"div\"),this.cancelButton.className=\"vis-button vis-cancel\",this.cancelButton.innerText=\"cancel\",this.cancelButton.onclick=Vt(t=this._hide).call(t,this,!1),this.applyButton=document.createElement(\"div\"),this.applyButton.className=\"vis-button vis-apply\",this.applyButton.innerText=\"apply\",this.applyButton.onclick=Vt(e=this._apply).call(e,this),this.saveButton=document.createElement(\"div\"),this.saveButton.className=\"vis-button vis-save\",this.saveButton.innerText=\"save\",this.saveButton.onclick=Vt(i=this._save).call(i,this),this.loadButton=document.createElement(\"div\"),this.loadButton.className=\"vis-button vis-load\",this.loadButton.innerText=\"load last\",this.loadButton.onclick=Vt(n=this._loadLast).call(n,this),this.frame.appendChild(this.colorPickerDiv),this.frame.appendChild(this.arrowDiv),this.frame.appendChild(this.brightnessLabel),this.frame.appendChild(this.brightnessDiv),this.frame.appendChild(this.opacityLabel),this.frame.appendChild(this.opacityDiv),this.frame.appendChild(this.newColorDiv),this.frame.appendChild(this.initialColorDiv),this.frame.appendChild(this.cancelButton),this.frame.appendChild(this.applyButton),this.frame.appendChild(this.saveButton),this.frame.appendChild(this.loadButton)}},{key:\"_bindHammer\",value:function(){var t=this;this.drag={},this.pinch={},this.hammer=new dh(this.colorPickerCanvas),this.hammer.get(\"pinch\").set({enable:!0}),this.hammer.on(\"hammer.input\",(function(e){e.isFirst&&t._moveSelector(e)})),this.hammer.on(\"tap\",(function(e){t._moveSelector(e)})),this.hammer.on(\"panstart\",(function(e){t._moveSelector(e)})),this.hammer.on(\"panmove\",(function(e){t._moveSelector(e)})),this.hammer.on(\"panend\",(function(e){t._moveSelector(e)}))}},{key:\"_generateHueCircle\",value:function(){if(!1===this.generated){var t=this.colorPickerCanvas.getContext(\"2d\");void 0===this.pixelRation&&(this.pixelRatio=(window.devicePixelRatio||1)/(t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1)),t.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0);var e,i,n,o,r=this.colorPickerCanvas.clientWidth,s=this.colorPickerCanvas.clientHeight;t.clearRect(0,0,r,s),this.centerCoordinates={x:.5*r,y:.5*s},this.r=.49*r;var a,h=2*Math.PI/360,l=1/this.r;for(n=0;n<360;n++)for(o=0;o<this.r;o++)e=this.centerCoordinates.x+o*Math.sin(h*n),i=this.centerCoordinates.y+o*Math.cos(h*n),a=qh(.002777777777777778*n,o*l,1),t.fillStyle=\"rgb(\"+a.r+\",\"+a.g+\",\"+a.b+\")\",t.fillRect(e-.5,i-.5,2,2);t.strokeStyle=\"rgba(0,0,0,1)\",t.circle(this.centerCoordinates.x,this.centerCoordinates.y,this.r),t.stroke(),this.hueCircle=t.getImageData(0,0,r,s)}this.generated=!0}},{key:\"_moveSelector\",value:function(t){var e=this.colorPickerDiv.getBoundingClientRect(),i=t.center.x-e.left,n=t.center.y-e.top,o=.5*this.colorPickerDiv.clientHeight,r=.5*this.colorPickerDiv.clientWidth,s=i-r,a=n-o,h=Math.atan2(s,a),l=.98*Math.min(Math.sqrt(s*s+a*a),r),d=Math.cos(h)*l+o,c=Math.sin(h)*l+r;this.colorPickerSelector.style.top=d-.5*this.colorPickerSelector.clientHeight+\"px\",this.colorPickerSelector.style.left=c-.5*this.colorPickerSelector.clientWidth+\"px\";var u=h/(2*Math.PI);u=u<0?u+1:u;var f=l/this.r,p=Lh(this.color.r,this.color.g,this.color.b);p.h=u,p.s=f;var v=qh(p.h,p.s,p.v);v.a=this.color.a,this.color=v,this.initialColorDiv.style.backgroundColor=\"rgba(\"+this.initialColor.r+\",\"+this.initialColor.g+\",\"+this.initialColor.b+\",\"+this.initialColor.a+\")\",this.newColorDiv.style.backgroundColor=\"rgba(\"+this.color.r+\",\"+this.color.g+\",\"+this.color.b+\",\"+this.color.a+\")\"}}]),t}();function el(){for(var t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];if(e.length<1)throw new TypeError(\"Invalid arguments.\");if(1===e.length)return document.createTextNode(e[0]);var n=document.createElement(e[0]);return n.appendChild(el.apply(void 0,wo(Oo(e).call(e,1)))),n}var il,nl=function(){function t(e,i,n){var o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1,r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:function(){return!1};Nn(this,t),this.parent=e,this.changedOptions=[],this.container=i,this.allowCreation=!1,this.hideOption=r,this.options={},this.initialized=!1,this.popupCounter=0,this.defaultOptions={enabled:!1,filter:!0,container:void 0,showButton:!0},At(this.options,this.defaultOptions),this.configureOptions=n,this.moduleOptions={},this.domElements=[],this.popupDiv={},this.popupLimit=5,this.popupHistory={},this.colorPicker=new tl(o),this.wrapper=void 0}return Fn(t,[{key:\"setOptions\",value:function(t){if(void 0!==t){this.popupHistory={},this._removePopup();var e=!0;if(\"string\"==typeof t)this.options.filter=t;else if(So(t))this.options.filter=t.join();else if(\"object\"===go(t)){if(null==t)throw new TypeError(\"options cannot be null\");void 0!==t.container&&(this.options.container=t.container),void 0!==mr(t)&&(this.options.filter=mr(t)),void 0!==t.showButton&&(this.options.showButton=t.showButton),void 0!==t.enabled&&(e=t.enabled)}else\"boolean\"==typeof t?(this.options.filter=!0,e=t):\"function\"==typeof t&&(this.options.filter=t,e=!0);!1===mr(this.options)&&(e=!1),this.options.enabled=e}this._clean()}},{key:\"setModuleOptions\",value:function(t){this.moduleOptions=t,!0===this.options.enabled&&(this._clean(),void 0!==this.options.container&&(this.container=this.options.container),this._create())}},{key:\"_create\",value:function(){this._clean(),this.changedOptions=[];var t=mr(this.options),e=0,i=!1;for(var n in this.configureOptions)Object.prototype.hasOwnProperty.call(this.configureOptions,n)&&(this.allowCreation=!1,i=!1,\"function\"==typeof t?i=(i=t(n,[]))||this._handleObject(this.configureOptions[n],[n],!0):!0!==t&&-1===Hr(t).call(t,n)||(i=!0),!1!==i&&(this.allowCreation=!0,e>0&&this._makeItem([]),this._makeHeader(n),this._handleObject(this.configureOptions[n],[n])),e++);this._makeButton(),this._push()}},{key:\"_push\",value:function(){this.wrapper=document.createElement(\"div\"),this.wrapper.className=\"vis-configuration-wrapper\",this.container.appendChild(this.wrapper);for(var t=0;t<this.domElements.length;t++)this.wrapper.appendChild(this.domElements[t]);this._showPopupIfNeeded()}},{key:\"_clean\",value:function(){for(var t=0;t<this.domElements.length;t++)this.wrapper.removeChild(this.domElements[t]);void 0!==this.wrapper&&(this.container.removeChild(this.wrapper),this.wrapper=void 0),this.domElements=[],this._removePopup()}},{key:\"_getValue\",value:function(t){for(var e=this.moduleOptions,i=0;i<t.length;i++){if(void 0===e[t[i]]){e=void 0;break}e=e[t[i]]}return e}},{key:\"_makeItem\",value:function(t){if(!0===this.allowCreation){var e=document.createElement(\"div\");e.className=\"vis-configuration vis-config-item vis-config-s\"+t.length;for(var i=arguments.length,n=new Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];return Wo(n).call(n,(function(t){e.appendChild(t)})),this.domElements.push(e),this.domElements.length}return 0}},{key:\"_makeHeader\",value:function(t){var e=document.createElement(\"div\");e.className=\"vis-configuration vis-config-header\",e.innerText=t,this._makeItem([],e)}},{key:\"_makeLabel\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=document.createElement(\"div\");if(n.className=\"vis-configuration vis-config-label vis-config-s\"+e.length,!0===i){for(;n.firstChild;)n.removeChild(n.firstChild);n.appendChild(el(\"i\",\"b\",t))}else n.innerText=t+\":\";return n}},{key:\"_makeDropdown\",value:function(t,e,i){var n=document.createElement(\"select\");n.className=\"vis-configuration vis-config-select\";var o=0;void 0!==e&&-1!==Hr(t).call(t,e)&&(o=Hr(t).call(t,e));for(var r=0;r<t.length;r++){var s=document.createElement(\"option\");s.value=t[r],r===o&&(s.selected=\"selected\"),s.innerText=t[r],n.appendChild(s)}var a=this;n.onchange=function(){a._update(this.value,i)};var h=this._makeLabel(i[i.length-1],i);this._makeItem(i,h,n)}},{key:\"_makeRange\",value:function(t,e,i){var n=t[0],o=t[1],r=t[2],s=t[3],a=document.createElement(\"input\");a.className=\"vis-configuration vis-config-range\";try{a.type=\"range\",a.min=o,a.max=r}catch(t){}a.step=s;var h=\"\",l=0;if(void 0!==e){var d=1.2;e<0&&e*d<o?(a.min=Math.ceil(e*d),l=a.min,h=\"range increased\"):e/d<o&&(a.min=Math.ceil(e/d),l=a.min,h=\"range increased\"),e*d>r&&1!==r&&(a.max=Math.ceil(e*d),l=a.max,h=\"range increased\"),a.value=e}else a.value=n;var c=document.createElement(\"input\");c.className=\"vis-configuration vis-config-rangeinput\",c.value=a.value;var u=this;a.onchange=function(){c.value=this.value,u._update(Number(this.value),i)},a.oninput=function(){c.value=this.value};var f=this._makeLabel(i[i.length-1],i),p=this._makeItem(i,f,a,c);\"\"!==h&&this.popupHistory[p]!==l&&(this.popupHistory[p]=l,this._setupPopup(h,p))}},{key:\"_makeButton\",value:function(){var t=this;if(!0===this.options.showButton){var e=document.createElement(\"div\");e.className=\"vis-configuration vis-config-button\",e.innerText=\"generate options\",e.onclick=function(){t._printOptions()},e.onmouseover=function(){e.className=\"vis-configuration vis-config-button hover\"},e.onmouseout=function(){e.className=\"vis-configuration vis-config-button\"},this.optionsContainer=document.createElement(\"div\"),this.optionsContainer.className=\"vis-configuration vis-config-option-container\",this.domElements.push(this.optionsContainer),this.domElements.push(e)}}},{key:\"_setupPopup\",value:function(t,e){var i=this;if(!0===this.initialized&&!0===this.allowCreation&&this.popupCounter<this.popupLimit){var n=document.createElement(\"div\");n.id=\"vis-configuration-popup\",n.className=\"vis-configuration-popup\",n.innerText=t,n.onclick=function(){i._removePopup()},this.popupCounter+=1,this.popupDiv={html:n,index:e}}}},{key:\"_removePopup\",value:function(){void 0!==this.popupDiv.html&&(this.popupDiv.html.parentNode.removeChild(this.popupDiv.html),clearTimeout(this.popupDiv.hideTimeout),clearTimeout(this.popupDiv.deleteTimeout),this.popupDiv={})}},{key:\"_showPopupIfNeeded\",value:function(){var t=this;if(void 0!==this.popupDiv.html){var e=this.domElements[this.popupDiv.index].getBoundingClientRect();this.popupDiv.html.style.left=e.left+\"px\",this.popupDiv.html.style.top=e.top-30+\"px\",document.body.appendChild(this.popupDiv.html),this.popupDiv.hideTimeout=rs((function(){t.popupDiv.html.style.opacity=0}),1500),this.popupDiv.deleteTimeout=rs((function(){t._removePopup()}),1800)}}},{key:\"_makeCheckbox\",value:function(t,e,i){var n=document.createElement(\"input\");n.type=\"checkbox\",n.className=\"vis-configuration vis-config-checkbox\",n.checked=t,void 0!==e&&(n.checked=e,e!==t&&(\"object\"===go(t)?e!==t.enabled&&this.changedOptions.push({path:i,value:e}):this.changedOptions.push({path:i,value:e})));var o=this;n.onchange=function(){o._update(this.checked,i)};var r=this._makeLabel(i[i.length-1],i);this._makeItem(i,r,n)}},{key:\"_makeTextInput\",value:function(t,e,i){var n=document.createElement(\"input\");n.type=\"text\",n.className=\"vis-configuration vis-config-text\",n.value=e,e!==t&&this.changedOptions.push({path:i,value:e});var o=this;n.onchange=function(){o._update(this.value,i)};var r=this._makeLabel(i[i.length-1],i);this._makeItem(i,r,n)}},{key:\"_makeColorField\",value:function(t,e,i){var n=this,o=t[1],r=document.createElement(\"div\");\"none\"!==(e=void 0===e?o:e)?(r.className=\"vis-configuration vis-config-colorBlock\",r.style.backgroundColor=e):r.className=\"vis-configuration vis-config-colorBlock none\",e=void 0===e?o:e,r.onclick=function(){n._showColorPicker(e,r,i)};var s=this._makeLabel(i[i.length-1],i);this._makeItem(i,s,r)}},{key:\"_showColorPicker\",value:function(t,e,i){var n=this;e.onclick=function(){},this.colorPicker.insertTo(e),this.colorPicker.show(),this.colorPicker.setColor(t),this.colorPicker.setUpdateCallback((function(t){var o=\"rgba(\"+t.r+\",\"+t.g+\",\"+t.b+\",\"+t.a+\")\";e.style.backgroundColor=o,n._update(o,i)})),this.colorPicker.setCloseCallback((function(){e.onclick=function(){n._showColorPicker(t,e,i)}}))}},{key:\"_handleObject\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=!1,o=mr(this.options),r=!1;for(var s in t)if(Object.prototype.hasOwnProperty.call(t,s)){n=!0;var a=t[s],h=Sh(e,s);if(\"function\"==typeof o&&!1===(n=o(s,e))&&!So(a)&&\"string\"!=typeof a&&\"boolean\"!=typeof a&&a instanceof Object&&(this.allowCreation=!1,n=this._handleObject(a,h,!0),this.allowCreation=!1===i),!1!==n){r=!0;var l=this._getValue(h);if(So(a))this._handleArray(a,l,h);else if(\"string\"==typeof a)this._makeTextInput(a,l,h);else if(\"boolean\"==typeof a)this._makeCheckbox(a,l,h);else if(a instanceof Object){if(!this.hideOption(e,s,this.moduleOptions))if(void 0!==a.enabled){var d=Sh(h,\"enabled\"),c=this._getValue(d);if(!0===c){var u=this._makeLabel(s,h,!0);this._makeItem(h,u),r=this._handleObject(a,h)||r}else this._makeCheckbox(a,c,h)}else{var f=this._makeLabel(s,h,!0);this._makeItem(h,f),r=this._handleObject(a,h)||r}}else console.error(\"dont know how to handle\",a,s,h)}}return r}},{key:\"_handleArray\",value:function(t,e,i){\"string\"==typeof t[0]&&\"color\"===t[0]?(this._makeColorField(t,e,i),t[1]!==e&&this.changedOptions.push({path:i,value:e})):\"string\"==typeof t[0]?(this._makeDropdown(t,e,i),t[0]!==e&&this.changedOptions.push({path:i,value:e})):\"number\"==typeof t[0]&&(this._makeRange(t,e,i),t[0]!==e&&this.changedOptions.push({path:i,value:Number(e)}))}},{key:\"_update\",value:function(t,e){var i=this._constructOptions(t,e);this.parent.body&&this.parent.body.emitter&&this.parent.body.emitter.emit&&this.parent.body.emitter.emit(\"configChange\",i),this.initialized=!0,this.parent.setOptions(i)}},{key:\"_constructOptions\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=i;t=\"false\"!==(t=\"true\"===t||t)&&t;for(var o=0;o<e.length;o++)\"global\"!==e[o]&&(void 0===n[e[o]]&&(n[e[o]]={}),o!==e.length-1?n=n[e[o]]:n[e[o]]=t);return i}},{key:\"_printOptions\",value:function(){for(var t=this.getOptions();this.optionsContainer.firstChild;)this.optionsContainer.removeChild(this.optionsContainer.firstChild);this.optionsContainer.appendChild(el(\"pre\",\"const options = \"+es(t,null,2)))}},{key:\"getOptions\",value:function(){for(var t={},e=0;e<this.changedOptions.length;e++)this._constructOptions(this.changedOptions[e].value,this.changedOptions[e].path,t);return t}}]),t}(),ol=!1,rl=\"background: #FFeeee; color: #dd0000\",sl=ch,al=tl,hl=nl,ll=dh,dl=function(){function t(e,i){Nn(this,t),this.container=e,this.overflowMethod=i||\"cap\",this.x=0,this.y=0,this.padding=5,this.hidden=!1,this.frame=document.createElement(\"div\"),this.frame.className=\"vis-tooltip\",this.container.appendChild(this.frame)}return Fn(t,[{key:\"setPosition\",value:function(t,e){this.x=Br(t),this.y=Br(e)}},{key:\"setText\",value:function(t){if(t instanceof Element){for(;this.frame.firstChild;)this.frame.removeChild(this.frame.firstChild);this.frame.appendChild(t)}else this.frame.innerText=t}},{key:\"show\",value:function(t){if(void 0===t&&(t=!0),!0===t){var e=this.frame.clientHeight,i=this.frame.clientWidth,n=this.frame.parentNode.clientHeight,o=this.frame.parentNode.clientWidth,r=0,s=0;if(\"flip\"==this.overflowMethod){var a=!1,h=!0;this.y-e<this.padding&&(h=!1),this.x+i>o-this.padding&&(a=!0),r=a?this.x-i:this.x,s=h?this.y-e:this.y}else(s=this.y-e)+e+this.padding>n&&(s=n-e-this.padding),s<this.padding&&(s=this.padding),(r=this.x)+i+this.padding>o&&(r=o-i-this.padding),r<this.padding&&(r=this.padding);this.frame.style.left=r+\"px\",this.frame.style.top=s+\"px\",this.frame.style.visibility=\"visible\",this.hidden=!1}else this.hide()}},{key:\"hide\",value:function(){this.hidden=!0,this.frame.style.left=\"0\",this.frame.style.top=\"0\",this.frame.style.visibility=\"hidden\"}},{key:\"destroy\",value:function(){this.frame.parentNode.removeChild(this.frame)}}]),t}(),cl=rl,ul=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"validate\",value:function(e,i,n){ol=!1,il=i;var o=i;return void 0!==n&&(o=i[n]),t.parse(e,o,[]),ol}},{key:\"parse\",value:function(e,i,n){for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&t.check(o,e,i,n)}},{key:\"check\",value:function(e,i,n,o){if(void 0!==n[e]||void 0!==n.__any__){var r=e,s=!0;void 0===n[e]&&void 0!==n.__any__&&(r=\"__any__\",s=\"object\"===t.getType(i[e]));var a=n[r];s&&void 0!==a.__type__&&(a=a.__type__),t.checkFields(e,i,n,r,a,o)}else t.getSuggestion(e,n,o)}},{key:\"checkFields\",value:function(e,i,n,o,r,s){var a=function(i){console.error(\"%c\"+i+t.printLocation(s,e),rl)},h=t.getType(i[e]),l=r[h];void 0!==l?\"array\"===t.getType(l)&&-1===Hr(l).call(l,i[e])?(a('Invalid option detected in \"'+e+'\". Allowed values are:'+t.print(l)+' not \"'+i[e]+'\". '),ol=!0):\"object\"===h&&\"__any__\"!==o&&(s=Sh(s,e),t.parse(i[e],n[o],s)):void 0===r.any&&(a('Invalid type received for \"'+e+'\". Expected: '+t.print(zo(r))+\". Received [\"+h+'] \"'+i[e]+'\"'),ol=!0)}},{key:\"getType\",value:function(t){var e=go(t);return\"object\"===e?null===t?\"null\":t instanceof Boolean?\"boolean\":t instanceof Number?\"number\":t instanceof String?\"string\":So(t)?\"array\":t instanceof Date?\"date\":void 0!==t.nodeType?\"dom\":!0===t._isAMomentObject?\"moment\":\"object\":\"number\"===e?\"number\":\"boolean\"===e?\"boolean\":\"string\"===e?\"string\":void 0===e?\"undefined\":e}},{key:\"getSuggestion\",value:function(e,i,n){var o,r=t.findInOptions(e,i,n,!1),s=t.findInOptions(e,il,[],!0);o=void 0!==r.indexMatch?\" in \"+t.printLocation(r.path,e,\"\")+'Perhaps it was incomplete? Did you mean: \"'+r.indexMatch+'\"?\\n\\n':s.distance<=4&&r.distance>s.distance?\" in \"+t.printLocation(r.path,e,\"\")+\"Perhaps it was misplaced? Matching option found at: \"+t.printLocation(s.path,s.closestMatch,\"\"):r.distance<=8?'. Did you mean \"'+r.closestMatch+'\"?'+t.printLocation(r.path,e):\". Did you mean one of these: \"+t.print(zo(i))+t.printLocation(n,e),console.error('%cUnknown option detected: \"'+e+'\"'+o,rl),ol=!0}},{key:\"findInOptions\",value:function(e,i,n){var o=arguments.length>3&&void 0!==arguments[3]&&arguments[3],r=1e9,s=\"\",a=[],h=e.toLowerCase(),l=void 0;for(var d in i){var c=void 0;if(void 0!==i[d].__type__&&!0===o){var u=t.findInOptions(e,i[d],Sh(n,d));r>u.distance&&(s=u.closestMatch,a=u.path,r=u.distance,l=u.indexMatch)}else{var f;-1!==Hr(f=d.toLowerCase()).call(f,h)&&(l=d),r>(c=t.levenshteinDistance(e,d))&&(s=d,a=Th(n),r=c)}}return{closestMatch:s,path:a,distance:r,indexMatch:l}}},{key:\"printLocation\",value:function(t,e){for(var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:\"Problem value found at: \\n\",n=\"\\n\\n\"+i+\"options = {\\n\",o=0;o<t.length;o++){for(var r=0;r<o+1;r++)n+=\"  \";n+=t[o]+\": {\\n\"}for(var s=0;s<t.length+1;s++)n+=\"  \";n+=e+\"\\n\";for(var a=0;a<t.length+1;a++){for(var h=0;h<t.length-a;h++)n+=\"  \";n+=\"}\\n\"}return n+\"\\n\\n\"}},{key:\"print\",value:function(t){return es(t).replace(/(\")|(\\[)|(\\])|(,\"__type__\")/g,\"\").replace(/(,)/g,\", \")}},{key:\"levenshteinDistance\",value:function(t,e){if(0===t.length)return e.length;if(0===e.length)return t.length;var i,n,o=[];for(i=0;i<=e.length;i++)o[i]=[i];for(n=0;n<=t.length;n++)o[0][n]=n;for(i=1;i<=e.length;i++)for(n=1;n<=t.length;n++)e.charAt(i-1)==t.charAt(n-1)?o[i][n]=o[i-1][n-1]:o[i][n]=Math.min(o[i-1][n-1]+1,Math.min(o[i][n-1]+1,o[i-1][n]+1));return o[e.length][t.length]}}]),t}(),fl=Object.freeze({__proto__:null,Activator:sl,Alea:ah,ColorPicker:al,Configurator:hl,DELETE:eh,HSVToHex:Vh,HSVToRGB:qh,Hammer:ll,Popup:dl,RGBToHSV:Lh,RGBToHex:jh,VALIDATOR_PRINT_STYLE:cl,Validator:ul,addClassName:function(t,e){var i=t.className.split(\" \"),n=e.split(\" \");i=Eo(i).call(i,mr(n).call(n,(function(t){return!dr(i).call(i,t)}))),t.className=i.join(\" \")},addCssText:function(t,e){var i=Hh(t.style.cssText),n=Hh(e),o=Qa(Qa({},i),n);t.style.cssText=Wh(o)},addEventListener:Bh,binarySearchCustom:function(t,e,i,n){for(var o=0,r=0,s=t.length-1;r<=s&&o<1e4;){var a=Math.floor((r+s)/2),h=t[a],l=e(void 0===n?h[i]:h[i][n]);if(0==l)return a;-1==l?r=a+1:s=a-1,o++}return-1},binarySearchValue:function(t,e,i,n,o){var r,s,a,h,l=0,d=0,c=t.length-1;for(o=null!=o?o:function(t,e){return t==e?0:t<e?-1:1};d<=c&&l<1e4;){if(h=Math.floor(.5*(c+d)),r=t[Math.max(0,h-1)][i],s=t[h][i],a=t[Math.min(t.length-1,h+1)][i],0==o(s,e))return h;if(o(r,e)<0&&o(s,e)>0)return\"before\"==n?Math.max(0,h-1):h;if(o(s,e)<0&&o(a,e)>0)return\"before\"==n?h:Math.min(t.length-1,h+1);o(s,e)<0?d=h+1:c=h-1,l++}return-1},bridgeObject:Kh,copyAndExtendArray:Sh,copyArray:Th,deepExtend:Ch,deepObjectAssign:nh,easingFunctions:Zh,equalArray:function(t,e){if(t.length!==e.length)return!1;for(var i=0,n=t.length;i<n;i++)if(t[i]!=e[i])return!1;return!0},extend:xh,fillIfDefined:_h,forEach:Dh,getAbsoluteLeft:Mh,getAbsoluteRight:function(t){return t.getBoundingClientRect().right},getAbsoluteTop:Ph,getScrollBarWidth:function(){var t=document.createElement(\"p\");t.style.width=\"100%\",t.style.height=\"200px\";var e=document.createElement(\"div\");e.style.position=\"absolute\",e.style.top=\"0px\",e.style.left=\"0px\",e.style.visibility=\"hidden\",e.style.width=\"200px\",e.style.height=\"150px\",e.style.overflow=\"hidden\",e.appendChild(t),document.body.appendChild(e);var i=t.offsetWidth;e.style.overflow=\"scroll\";var n=t.offsetWidth;return i==n&&(n=e.clientWidth),document.body.removeChild(e),i-n},getTarget:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window.event,e=null;return t&&(t.target?e=t.target:t.srcElement&&(e=t.srcElement)),e instanceof Element&&(null==e.nodeType||3!=e.nodeType||(e=e.parentNode)instanceof Element)?e:null},getType:function(t){var e=go(t);return\"object\"===e?null===t?\"null\":t instanceof Boolean?\"Boolean\":t instanceof Number?\"Number\":t instanceof String?\"String\":So(t)?\"Array\":t instanceof Date?\"Date\":\"Object\":\"number\"===e?\"Number\":\"boolean\"===e?\"Boolean\":\"string\"===e?\"String\":void 0===e?\"undefined\":e},hasParent:function(t,e){for(var i=t;i;){if(i===e)return!0;if(!i.parentNode)return!1;i=i.parentNode}return!1},hexToHSV:Uh,hexToRGB:Ah,insertSort:function(t,e){for(var i=0;i<t.length;i++){var n=t[i],o=void 0;for(o=i;o>0&&e(n,t[o-1])<0;o--)t[o]=t[o-1];t[o]=n}return t},isDate:function(t){if(t instanceof Date)return!0;if(bh(t)){if(uh.exec(t))return!0;if(!isNaN(Date.parse(t)))return!0}return!1},isNumber:yh,isObject:wh,isString:bh,isValidHex:Yh,isValidRGB:Xh,isValidRGBA:Gh,mergeOptions:$h,option:Nh,overrideOpacity:Fh,parseColor:Rh,preventDefault:function(t){t||(t=window.event),t&&(t.preventDefault?t.preventDefault():t.returnValue=!1)},pureDeepObjectAssign:ih,recursiveDOMDelete:mh,removeClassName:function(t,e){var i=t.className.split(\" \"),n=e.split(\" \");i=mr(i).call(i,(function(t){return!dr(n).call(n,t)})),t.className=i.join(\" \")},removeCssText:function(t,e){var i=Hh(t.style.cssText),n=Hh(e);for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&delete i[o];t.style.cssText=Wh(i)},removeEventListener:zh,selectiveBridgeObject:function(t,e){if(null!==e&&\"object\"===go(e)){for(var i=Gr(e),n=0;n<t.length;n++)Object.prototype.hasOwnProperty.call(e,t[n])&&\"object\"==go(e[t[n]])&&(i[t[n]]=Kh(e[t[n]]));return i}return null},selectiveDeepExtend:Eh,selectiveExtend:function(t,e){if(!So(t))throw new Error(\"Array with property names expected as first argument\");for(var i=arguments.length,n=new Array(i>2?i-2:0),o=2;o<i;o++)n[o-2]=arguments[o];for(var r=0,s=n;r<s.length;r++)for(var a=s[r],h=0;h<t.length;h++){var l=t[h];a&&Object.prototype.hasOwnProperty.call(a,l)&&(e[l]=a[l])}return e},selectiveNotDeepExtend:Oh,throttle:function(t){var e=!1;return function(){e||(e=!0,requestAnimationFrame((function(){e=!1,t()})))}},toArray:Ih,topMost:Qh,updateProperty:function(t,e,i){return t[e]!==i&&(t[e]=i,!0)}});function pl(t){return _l=t,function(){var t={};xl=0,void(El=_l.charAt(0)),Nl(),\"strict\"===Ol&&(t.strict=!0,Nl());\"graph\"!==Ol&&\"digraph\"!==Ol||(t.type=Ol,Nl());Cl===bl&&(t.id=Ol,Nl());if(\"{\"!=Ol)throw Hl(\"Angle bracket { expected\");if(Nl(),Al(t),\"}\"!=Ol)throw Hl(\"Angle bracket } expected\");if(Nl(),\"\"!==Ol)throw Hl(\"End of file expected\");return Nl(),delete t.node,delete t.edge,delete t.graph,t}()}var vl={fontsize:\"font.size\",fontcolor:\"font.color\",labelfontcolor:\"font.color\",fontname:\"font.face\",color:[\"color.border\",\"color.background\"],fillcolor:\"color.background\",tooltip:\"title\",labeltooltip:\"title\"},gl=Gr(vl);gl.color=\"color.color\",gl.style=\"dashes\";var yl=0,ml=1,bl=2,wl=3,kl={\"{\":!0,\"}\":!0,\"[\":!0,\"]\":!0,\";\":!0,\"=\":!0,\",\":!0,\"->\":!0,\"--\":!0},_l=\"\",xl=0,El=\"\",Ol=\"\",Cl=yl;function Sl(){xl++,El=_l.charAt(xl)}function Tl(){return _l.charAt(xl+1)}function Ml(t){var e=t.charCodeAt(0);return e<47?35===e||46===e:e<59?e>47:e<91?e>64:e<96?95===e:e<123&&e>96}function Pl(t,e){if(t||(t={}),e)for(var i in e)e.hasOwnProperty(i)&&(t[i]=e[i]);return t}function Dl(t,e,i){for(var n=e.split(\".\"),o=t;n.length;){var r=n.shift();n.length?(o[r]||(o[r]={}),o=o[r]):o[r]=i}}function Il(t,e){for(var i,n,o=null,r=[t],s=t;s.parent;)r.push(s.parent),s=s.parent;if(s.nodes)for(i=0,n=s.nodes.length;i<n;i++)if(e.id===s.nodes[i].id){o=s.nodes[i];break}for(o||(o={id:e.id},t.node&&(o.attr=Pl(o.attr,t.node))),i=r.length-1;i>=0;i--){var a,h=r[i];h.nodes||(h.nodes=[]),-1===Hr(a=h.nodes).call(a,o)&&h.nodes.push(o)}e.attr&&(o.attr=Pl(o.attr,e.attr))}function Bl(t,e){if(t.edges||(t.edges=[]),t.edges.push(e),t.edge){var i=Pl({},t.edge);e.attr=Pl(i,e.attr)}}function zl(t,e,i,n,o){var r={from:e,to:i,type:n};return t.edge&&(r.attr=Pl({},t.edge)),r.attr=Pl(r.attr||{},o),null!=o&&o.hasOwnProperty(\"arrows\")&&null!=o.arrows&&(r.arrows={to:{enabled:!0,type:o.arrows.type}},o.arrows=null),r}function Nl(){for(Cl=yl,Ol=\"\";\" \"===El||\"\\t\"===El||\"\\n\"===El||\"\\r\"===El;)Sl();do{var t=!1;if(\"#\"===El){for(var e=xl-1;\" \"===_l.charAt(e)||\"\\t\"===_l.charAt(e);)e--;if(\"\\n\"===_l.charAt(e)||\"\"===_l.charAt(e)){for(;\"\"!=El&&\"\\n\"!=El;)Sl();t=!0}}if(\"/\"===El&&\"/\"===Tl()){for(;\"\"!=El&&\"\\n\"!=El;)Sl();t=!0}if(\"/\"===El&&\"*\"===Tl()){for(;\"\"!=El;){if(\"*\"===El&&\"/\"===Tl()){Sl(),Sl();break}Sl()}t=!0}for(;\" \"===El||\"\\t\"===El||\"\\n\"===El||\"\\r\"===El;)Sl()}while(t);if(\"\"!==El){var i=El+Tl();if(kl[i])return Cl=ml,Ol=i,Sl(),void Sl();if(kl[El])return Cl=ml,Ol=El,void Sl();if(Ml(El)||\"-\"===El){for(Ol+=El,Sl();Ml(El);)Ol+=El,Sl();return\"false\"===Ol?Ol=!1:\"true\"===Ol?Ol=!0:isNaN(Number(Ol))||(Ol=Number(Ol)),void(Cl=bl)}if('\"'===El){for(Sl();\"\"!=El&&('\"'!=El||'\"'===El&&'\"'===Tl());)'\"'===El?(Ol+=El,Sl()):\"\\\\\"===El&&\"n\"===Tl()?(Ol+=\"\\n\",Sl()):Ol+=El,Sl();if('\"'!=El)throw Hl('End of string \" expected');return Sl(),void(Cl=bl)}for(Cl=wl;\"\"!=El;)Ol+=El,Sl();throw new SyntaxError('Syntax error in part \"'+Wl(Ol,30)+'\"')}Cl=ml}function Al(t){for(;\"\"!==Ol&&\"}\"!=Ol;)Fl(t),\";\"===Ol&&Nl()}function Fl(t){var e=jl(t);if(e)Rl(t,e);else if(!function(t){if(\"node\"===Ol)return Nl(),t.node=Ll(),\"node\";if(\"edge\"===Ol)return Nl(),t.edge=Ll(),\"edge\";if(\"graph\"===Ol)return Nl(),t.graph=Ll(),\"graph\";return null}(t)){if(Cl!=bl)throw Hl(\"Identifier expected\");var i=Ol;if(Nl(),\"=\"===Ol){if(Nl(),Cl!=bl)throw Hl(\"Identifier expected\");t[i]=Ol,Nl()}else!function(t,e){var i={id:e},n=Ll();n&&(i.attr=n);Il(t,i),Rl(t,e)}(t,i)}}function jl(t){var e=null;if(\"subgraph\"===Ol&&((e={}).type=\"subgraph\",Nl(),Cl===bl&&(e.id=Ol,Nl())),\"{\"===Ol){if(Nl(),e||(e={}),e.parent=t,e.node=t.node,e.edge=t.edge,e.graph=t.graph,Al(e),\"}\"!=Ol)throw Hl(\"Angle bracket } expected\");Nl(),delete e.node,delete e.edge,delete e.graph,delete e.parent,t.subgraphs||(t.subgraphs=[]),t.subgraphs.push(e)}return e}function Rl(t,e){for(;\"->\"===Ol||\"--\"===Ol;){var i,n=Ol;Nl();var o=jl(t);if(o)i=o;else{if(Cl!=bl)throw Hl(\"Identifier or subgraph expected\");Il(t,{id:i=Ol}),Nl()}Bl(t,zl(t,e,i,n,Ll())),e=i}}function Ll(){for(var t,e,i=null,n={dashed:!0,solid:!1,dotted:[1,5]},o={dot:\"circle\",box:\"box\",crow:\"crow\",curve:\"curve\",icurve:\"inv_curve\",normal:\"triangle\",inv:\"inv_triangle\",diamond:\"diamond\",tee:\"bar\",vee:\"vee\"},r=new Array,s=new Array;\"[\"===Ol;){for(Nl(),i={};\"\"!==Ol&&\"]\"!=Ol;){if(Cl!=bl)throw Hl(\"Attribute name expected\");var a=Ol;if(Nl(),\"=\"!=Ol)throw Hl(\"Equal sign = expected\");if(Nl(),Cl!=bl)throw Hl(\"Attribute value expected\");var h=Ol;\"style\"===a&&(h=n[h]),\"arrowhead\"===a&&(a=\"arrows\",h={to:{enabled:!0,type:o[h]}}),\"arrowtail\"===a&&(a=\"arrows\",h={from:{enabled:!0,type:o[h]}}),r.push({attr:i,name:a,value:h}),s.push(a),Nl(),\",\"==Ol&&Nl()}if(\"]\"!=Ol)throw Hl(\"Bracket ] expected\");Nl()}if(dr(s).call(s,\"dir\")){var l={arrows:{}};for(t=0;t<r.length;t++)if(\"arrows\"===r[t].name)if(null!=r[t].value.to)l.arrows.to=t;else{if(null==r[t].value.from)throw Hl(\"Invalid value of arrows\");l.arrows.from=t}else\"dir\"===r[t].name&&(l.dir=t);var d,c,u=r[l.dir].value;if(!dr(s).call(s,\"arrows\"))if(\"both\"===u)r.push({attr:r[l.dir].attr,name:\"arrows\",value:{to:{enabled:!0}}}),l.arrows.to=r.length-1,r.push({attr:r[l.dir].attr,name:\"arrows\",value:{from:{enabled:!0}}}),l.arrows.from=r.length-1;else if(\"forward\"===u)r.push({attr:r[l.dir].attr,name:\"arrows\",value:{to:{enabled:!0}}}),l.arrows.to=r.length-1;else if(\"back\"===u)r.push({attr:r[l.dir].attr,name:\"arrows\",value:{from:{enabled:!0}}}),l.arrows.from=r.length-1;else{if(\"none\"!==u)throw Hl('Invalid dir type \"'+u+'\"');r.push({attr:r[l.dir].attr,name:\"arrows\",value:\"\"}),l.arrows.to=r.length-1}if(\"both\"===u)l.arrows.to&&l.arrows.from?(c=r[l.arrows.to].value.to.type,d=r[l.arrows.from].value.from.type,r[l.arrows.to]={attr:r[l.arrows.to].attr,name:r[l.arrows.to].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}},er(r).call(r,l.arrows.from,1)):l.arrows.to?(c=r[l.arrows.to].value.to.type,d=\"arrow\",r[l.arrows.to]={attr:r[l.arrows.to].attr,name:r[l.arrows.to].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}}):l.arrows.from&&(c=\"arrow\",d=r[l.arrows.from].value.from.type,r[l.arrows.from]={attr:r[l.arrows.from].attr,name:r[l.arrows.from].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}});else if(\"back\"===u)l.arrows.to&&l.arrows.from?(c=\"\",d=r[l.arrows.from].value.from.type,r[l.arrows.from]={attr:r[l.arrows.from].attr,name:r[l.arrows.from].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}}):l.arrows.to?(c=\"\",d=\"arrow\",l.arrows.from=l.arrows.to,r[l.arrows.from]={attr:r[l.arrows.from].attr,name:r[l.arrows.from].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}}):l.arrows.from&&(c=\"\",d=r[l.arrows.from].value.from.type,r[l.arrows.to]={attr:r[l.arrows.from].attr,name:r[l.arrows.from].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}}),r[l.arrows.from]={attr:r[l.arrows.from].attr,name:r[l.arrows.from].name,value:{from:{enabled:!0,type:r[l.arrows.from].value.from.type}}};else if(\"none\"===u){var f;r[f=l.arrows.to?l.arrows.to:l.arrows.from]={attr:r[f].attr,name:r[f].name,value:\"\"}}else{if(\"forward\"!==u)throw Hl('Invalid dir type \"'+u+'\"');l.arrows.to&&l.arrows.from||l.arrows.to?(c=r[l.arrows.to].value.to.type,d=\"\",r[l.arrows.to]={attr:r[l.arrows.to].attr,name:r[l.arrows.to].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}}):l.arrows.from&&(c=\"arrow\",d=\"\",l.arrows.to=l.arrows.from,r[l.arrows.to]={attr:r[l.arrows.to].attr,name:r[l.arrows.to].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}}),r[l.arrows.to]={attr:r[l.arrows.to].attr,name:r[l.arrows.to].name,value:{to:{enabled:!0,type:r[l.arrows.to].value.to.type}}}}er(r).call(r,l.dir,1)}if(dr(s).call(s,\"penwidth\")){var p=[];for(e=r.length,t=0;t<e;t++)\"width\"!==r[t].name&&(\"penwidth\"===r[t].name&&(r[t].name=\"width\"),p.push(r[t]));r=p}for(e=r.length,t=0;t<e;t++)Dl(r[t].attr,r[t].name,r[t].value);return i}function Hl(t){return new SyntaxError(t+', got \"'+Wl(Ol,30)+'\" (char '+xl+\")\")}function Wl(t,e){return t.length<=e?t:t.substr(0,27)+\"...\"}function ql(t,e,i){for(var n=e.split(\".\"),o=n.pop(),r=t,s=0;s<n.length;s++){var a=n[s];a in r||(r[a]={}),r=r[a]}return r[o]=i,t}function Vl(t,e){var i={};for(var n in t)if(t.hasOwnProperty(n)){var o=e[n];So(o)?Wo(o).call(o,(function(e){ql(i,e,t[n])})):ql(i,\"string\"==typeof o?o:n,t[n])}return i}function Ul(t){var e,i=pl(t),n={nodes:[],edges:[],options:{}};i.nodes&&Wo(e=i.nodes).call(e,(function(t){var e={id:t.id,label:String(t.label||t.id)};Pl(e,Vl(t.attr,vl)),e.image&&(e.shape=\"image\"),n.nodes.push(e)}));if(i.edges){var o,r=function(t){var e={from:t.from,to:t.to};return Pl(e,Vl(t.attr,gl)),null==e.arrows&&\"->\"===t.type&&(e.arrows=\"to\"),e};Wo(o=i.edges).call(o,(function(t){var e,i,o,s,a,h,l;(e=t.from instanceof Object?t.from.nodes:{id:t.from},i=t.to instanceof Object?t.to.nodes:{id:t.to},t.from instanceof Object&&t.from.edges)&&Wo(o=t.from.edges).call(o,(function(t){var e=r(t);n.edges.push(e)}));(a=i,h=function(e,i){var o=zl(n,e.id,i.id,t.type,t.attr),s=r(o);n.edges.push(s)},So(s=e)?Wo(s).call(s,(function(t){So(a)?Wo(a).call(a,(function(e){h(t,e)})):h(t,a)})):So(a)?Wo(a).call(a,(function(t){h(s,t)})):h(s,a),t.to instanceof Object&&t.to.edges)&&Wo(l=t.to.edges).call(l,(function(t){var e=r(t);n.edges.push(e)}))}))}return i.attr&&(n.options=i.attr),n}var Yl=Object.freeze({__proto__:null,parseDOT:pl,DOTToGraph:Ul});function Xl(t,e){var i,n={edges:{inheritColor:!1},nodes:{fixed:!1,parseColor:!1}};null!=e&&(null!=e.fixed&&(n.nodes.fixed=e.fixed),null!=e.parseColor&&(n.nodes.parseColor=e.parseColor),null!=e.inheritColor&&(n.edges.inheritColor=e.inheritColor));var o=t.edges,r=Io(o).call(o,(function(t){var e={from:t.source,id:t.id,to:t.target};return null!=t.attributes&&(e.attributes=t.attributes),null!=t.label&&(e.label=t.label),null!=t.attributes&&null!=t.attributes.title&&(e.title=t.attributes.title),\"Directed\"===t.type&&(e.arrows=\"to\"),t.color&&!1===n.edges.inheritColor&&(e.color=t.color),e}));return{nodes:Io(i=t.nodes).call(i,(function(t){var e={id:t.id,fixed:n.nodes.fixed&&null!=t.x&&null!=t.y};return null!=t.attributes&&(e.attributes=t.attributes),null!=t.label&&(e.label=t.label),null!=t.size&&(e.size=t.size),null!=t.attributes&&null!=t.attributes.title&&(e.title=t.attributes.title),null!=t.title&&(e.title=t.title),null!=t.x&&(e.x=t.x),null!=t.y&&(e.y=t.y),null!=t.color&&(!0===n.nodes.parseColor?e.color=t.color:e.color={background:t.color,border:t.color,highlight:{background:t.color,border:t.color},hover:{background:t.color,border:t.color}}),e})),edges:r}}var Gl=Object.freeze({__proto__:null,parseGephi:Xl}),Kl=Object.freeze({__proto__:null,en:{addDescription:\"Click in an empty space to place a new node.\",addEdge:\"Add Edge\",addNode:\"Add Node\",back:\"Back\",close:\"Close\",createEdgeError:\"Cannot link edges to a cluster.\",del:\"Delete selected\",deleteClusterError:\"Clusters cannot be deleted.\",edgeDescription:\"Click on a node and drag the edge to another node to connect them.\",edit:\"Edit\",editClusterError:\"Clusters cannot be edited.\",editEdge:\"Edit Edge\",editEdgeDescription:\"Click on the control points and drag them to a node to connect to it.\",editNode:\"Edit Node\"},de:{addDescription:\"Klicke auf eine freie Stelle, um einen neuen Knoten zu plazieren.\",addEdge:\"Kante hinzufügen\",addNode:\"Knoten hinzufügen\",back:\"Zurück\",close:\"Schließen\",createEdgeError:\"Es ist nicht möglich, Kanten mit Clustern zu verbinden.\",del:\"Lösche Auswahl\",deleteClusterError:\"Cluster können nicht gelöscht werden.\",edgeDescription:\"Klicke auf einen Knoten und ziehe die Kante zu einem anderen Knoten, um diese zu verbinden.\",edit:\"Editieren\",editClusterError:\"Cluster können nicht editiert werden.\",editEdge:\"Kante editieren\",editEdgeDescription:\"Klicke auf die Verbindungspunkte und ziehe diese auf einen Knoten, um sie zu verbinden.\",editNode:\"Knoten editieren\"},es:{addDescription:\"Haga clic en un lugar vacío para colocar un nuevo nodo.\",addEdge:\"Añadir arista\",addNode:\"Añadir nodo\",back:\"Atrás\",close:\"Cerrar\",createEdgeError:\"No se puede conectar una arista a un grupo.\",del:\"Eliminar selección\",deleteClusterError:\"No es posible eliminar grupos.\",edgeDescription:\"Haga clic en un nodo y arrastre la arista hacia otro nodo para conectarlos.\",edit:\"Editar\",editClusterError:\"No es posible editar grupos.\",editEdge:\"Editar arista\",editEdgeDescription:\"Haga clic en un punto de control y arrastrelo a un nodo para conectarlo.\",editNode:\"Editar nodo\"},it:{addDescription:\"Clicca per aggiungere un nuovo nodo\",addEdge:\"Aggiungi un vertice\",addNode:\"Aggiungi un nodo\",back:\"Indietro\",close:\"Chiudere\",createEdgeError:\"Non si possono collegare vertici ad un cluster\",del:\"Cancella la selezione\",deleteClusterError:\"I cluster non possono essere cancellati\",edgeDescription:\"Clicca su un nodo e trascinalo ad un altro nodo per connetterli.\",edit:\"Modifica\",editClusterError:\"I clusters non possono essere modificati.\",editEdge:\"Modifica il vertice\",editEdgeDescription:\"Clicca sui Punti di controllo e trascinali ad un nodo per connetterli.\",editNode:\"Modifica il nodo\"},nl:{addDescription:\"Klik op een leeg gebied om een nieuwe node te maken.\",addEdge:\"Link toevoegen\",addNode:\"Node toevoegen\",back:\"Terug\",close:\"Sluiten\",createEdgeError:\"Kan geen link maken naar een cluster.\",del:\"Selectie verwijderen\",deleteClusterError:\"Clusters kunnen niet worden verwijderd.\",edgeDescription:\"Klik op een node en sleep de link naar een andere node om ze te verbinden.\",edit:\"Wijzigen\",editClusterError:\"Clusters kunnen niet worden aangepast.\",editEdge:\"Link wijzigen\",editEdgeDescription:\"Klik op de verbindingspunten en sleep ze naar een node om daarmee te verbinden.\",editNode:\"Node wijzigen\"},pt:{addDescription:\"Clique em um espaço em branco para adicionar um novo nó\",addEdge:\"Adicionar aresta\",addNode:\"Adicionar nó\",back:\"Voltar\",close:\"Fechar\",createEdgeError:\"Não foi possível linkar arestas a um cluster.\",del:\"Remover selecionado\",deleteClusterError:\"Clusters não puderam ser removidos.\",edgeDescription:\"Clique em um nó e arraste a aresta até outro nó para conectá-los\",edit:\"Editar\",editClusterError:\"Clusters não puderam ser editados.\",editEdge:\"Editar aresta\",editEdgeDescription:\"Clique nos pontos de controle e os arraste para um nó para conectá-los\",editNode:\"Editar nó\"},ru:{addDescription:\"Кликните в свободное место, чтобы добавить новый узел.\",addEdge:\"Добавить ребро\",addNode:\"Добавить узел\",back:\"Назад\",close:\"Закрывать\",createEdgeError:\"Невозможно соединить ребра в кластер.\",del:\"Удалить выбранное\",deleteClusterError:\"Кластеры не могут быть удалены\",edgeDescription:\"Кликните на узел и протяните ребро к другому узлу, чтобы соединить их.\",edit:\"Редактировать\",editClusterError:\"Кластеры недоступны для редактирования.\",editEdge:\"Редактировать ребро\",editEdgeDescription:\"Кликните на контрольные точки и перетащите их в узел, чтобы подключиться к нему.\",editNode:\"Редактировать узел\"},cn:{addDescription:\"单击空白处放置新节点。\",addEdge:\"添加连接线\",addNode:\"添加节点\",back:\"返回\",close:\"關閉\",createEdgeError:\"无法将连接线连接到群集。\",del:\"删除选定\",deleteClusterError:\"无法删除群集。\",edgeDescription:\"单击某个节点并将该连接线拖动到另一个节点以连接它们。\",edit:\"编辑\",editClusterError:\"无法编辑群集。\",editEdge:\"编辑连接线\",editEdgeDescription:\"单击控制节点并将它们拖到节点上连接。\",editNode:\"编辑节点\"},uk:{addDescription:\"Kлікніть на вільне місце, щоб додати новий вузол.\",addEdge:\"Додати край\",addNode:\"Додати вузол\",back:\"Назад\",close:\"Закрити\",createEdgeError:\"Не можливо об'єднати краї в групу.\",del:\"Видалити обране\",deleteClusterError:\"Групи не можуть бути видалені.\",edgeDescription:\"Клікніть на вузол і перетягніть край до іншого вузла, щоб їх з'єднати.\",edit:\"Редагувати\",editClusterError:\"Групи недоступні для редагування.\",editEdge:\"Редагувати край\",editEdgeDescription:\"Клікніть на контрольні точки і перетягніть їх у вузол, щоб підключитися до нього.\",editNode:\"Редагувати вузол\"},fr:{addDescription:\"Cliquez dans un endroit vide pour placer un nœud.\",addEdge:\"Ajouter un lien\",addNode:\"Ajouter un nœud\",back:\"Retour\",close:\"Fermer\",createEdgeError:\"Impossible de créer un lien vers un cluster.\",del:\"Effacer la sélection\",deleteClusterError:\"Les clusters ne peuvent pas être effacés.\",edgeDescription:\"Cliquez sur un nœud et glissez le lien vers un autre nœud pour les connecter.\",edit:\"Éditer\",editClusterError:\"Les clusters ne peuvent pas être édités.\",editEdge:\"Éditer le lien\",editEdgeDescription:\"Cliquez sur les points de contrôle et glissez-les pour connecter un nœud.\",editNode:\"Éditer le nœud\"},cs:{addDescription:\"Kluknutím do prázdného prostoru můžete přidat nový vrchol.\",addEdge:\"Přidat hranu\",addNode:\"Přidat vrchol\",back:\"Zpět\",close:\"Zavřít\",createEdgeError:\"Nelze připojit hranu ke shluku.\",del:\"Smazat výběr\",deleteClusterError:\"Nelze mazat shluky.\",edgeDescription:\"Přetažením z jednoho vrcholu do druhého můžete spojit tyto vrcholy novou hranou.\",edit:\"Upravit\",editClusterError:\"Nelze upravovat shluky.\",editEdge:\"Upravit hranu\",editEdgeDescription:\"Přetažením kontrolního vrcholu hrany ji můžete připojit k jinému vrcholu.\",editNode:\"Upravit vrchol\"}});var $l=function(){function t(){Nn(this,t),this.NUM_ITERATIONS=4,this.image=new Image,this.canvas=document.createElement(\"canvas\")}return Fn(t,[{key:\"init\",value:function(){if(!this.initialized()){this.src=this.image.src;var t=this.image.width,e=this.image.height;this.width=t,this.height=e;var i=Math.floor(e/2),n=Math.floor(e/4),o=Math.floor(e/8),r=Math.floor(e/16),s=Math.floor(t/2),a=Math.floor(t/4),h=Math.floor(t/8),l=Math.floor(t/16);this.canvas.width=3*a,this.canvas.height=i,this.coordinates=[[0,0,s,i],[s,0,a,n],[s,n,h,o],[5*h,n,l,r]],this._fillMipMap()}}},{key:\"initialized\",value:function(){return void 0!==this.coordinates}},{key:\"_fillMipMap\",value:function(){var t=this.canvas.getContext(\"2d\"),e=this.coordinates[0];t.drawImage(this.image,e[0],e[1],e[2],e[3]);for(var i=1;i<this.NUM_ITERATIONS;i++){var n=this.coordinates[i-1],o=this.coordinates[i];t.drawImage(this.canvas,n[0],n[1],n[2],n[3],o[0],o[1],o[2],o[3])}}},{key:\"drawImageAtPosition\",value:function(t,e,i,n,o,r){if(this.initialized())if(e>2){e*=.5;for(var s=0;e>2&&s<this.NUM_ITERATIONS;)e*=.5,s+=1;s>=this.NUM_ITERATIONS&&(s=this.NUM_ITERATIONS-1);var a=this.coordinates[s];t.drawImage(this.canvas,a[0],a[1],a[2],a[3],i,n,o,r)}else t.drawImage(this.image,i,n,o,r)}}]),t}(),Zl=function(){function t(e){Nn(this,t),this.images={},this.imageBroken={},this.callback=e}return Fn(t,[{key:\"_tryloadBrokenUrl\",value:function(t,e,i){void 0!==t&&void 0!==i&&(void 0!==e?(i.image.onerror=function(){console.error(\"Could not load brokenImage:\",e)},i.image.src=e):console.warn(\"No broken url image defined\"))}},{key:\"_redrawWithImage\",value:function(t){this.callback&&this.callback(t)}},{key:\"load\",value:function(t,e){var i=this,n=this.images[t];if(n)return n;var o=new $l;return this.images[t]=o,o.image.onload=function(){i._fixImageCoordinates(o.image),o.init(),i._redrawWithImage(o)},o.image.onerror=function(){console.error(\"Could not load image:\",t),i._tryloadBrokenUrl(t,e,o)},o.image.src=t,o}},{key:\"_fixImageCoordinates\",value:function(t){0===t.width&&(document.body.appendChild(t),t.width=t.offsetWidth,t.height=t.offsetHeight,document.body.removeChild(t))}}]),t}(),Ql=!h((function(){return Object.isExtensible(Object.preventExtensions({}))})),Jl=n((function(t){var e=ut.f,i=!1,n=H(\"meta\"),o=0,r=Object.isExtensible||function(){return!0},s=function(t){e(t,n,{value:{objectID:\"O\"+o++,weakData:{}}})},a=t.exports={enable:function(){a.enable=function(){},i=!0;var t=Ai.f,e=[].splice,o={};o[n]=1,t(o).length&&(Ai.f=function(i){for(var o=t(i),r=0,s=o.length;r<s;r++)if(o[r]===n){e.call(o,r,1);break}return o},gt({target:\"Object\",stat:!0,forced:!0},{getOwnPropertyNames:Li.f}))},fastKey:function(t,e){if(!w(t))return\"symbol\"==typeof t?t:(\"string\"==typeof t?\"S\":\"P\")+t;if(!j(t,n)){if(!r(t))return\"F\";if(!e)return\"E\";s(t)}return t[n].objectID},getWeakData:function(t,e){if(!j(t,n)){if(!r(t))return!0;if(!e)return!1;s(t)}return t[n].weakData},onFreeze:function(t){return Ql&&i&&r(t)&&!j(t,n)&&s(t),t}};St[n]=!0}));Jl.enable,Jl.fastKey,Jl.getWeakData,Jl.onFreeze;var td=function(t,e){this.stopped=t,this.result=e},ed=function(t,e,i){var n,o,r,s,a,h,l,d=i&&i.that,c=!(!i||!i.AS_ENTRIES),u=!(!i||!i.IS_ITERATOR),f=!(!i||!i.INTERRUPTED),p=lt(e,d,1+c+f),v=function(t){return n&&di(n),new td(!0,t)},g=function(t){return c?(dt(t),f?p(t[0],t[1],v):p(t[0],t[1])):f?p(t,v):p(t)};if(u)n=t;else{if(\"function\"!=typeof(o=yi(t)))throw TypeError(\"Target is not iterable\");if(pi(o)){for(r=0,s=kt(t.length);s>r;r++)if((a=g(t[r]))&&a instanceof td)return a;return new td(!1)}n=o.call(t)}for(h=n.next;!(l=h.call(n)).done;){try{a=g(l.value)}catch(t){throw di(n),t}if(\"object\"==typeof a&&a&&a instanceof td)return a}return new td(!1)},id=function(t,e,i){if(!(t instanceof e))throw TypeError(\"Incorrect \"+(i?i+\" \":\"\")+\"invocation\");return t},nd=ut.f,od=Gi.forEach,rd=we.set,sd=we.getterFor,ad=function(t,e,i){var n,o=-1!==t.indexOf(\"Map\"),r=-1!==t.indexOf(\"Weak\"),s=o?\"set\":\"add\",d=a[t],c=d&&d.prototype,u={};if(l&&\"function\"==typeof d&&(r||c.forEach&&!h((function(){(new d).entries().next()})))){n=e((function(e,i){rd(id(e,n,t),{type:t,collection:new d}),null!=i&&ed(i,e[s],{that:e,AS_ENTRIES:o})}));var f=sd(t);od([\"add\",\"clear\",\"delete\",\"forEach\",\"get\",\"has\",\"set\",\"keys\",\"values\",\"entries\"],(function(t){var e=\"add\"==t||\"set\"==t;!(t in c)||r&&\"clear\"==t||ft(n.prototype,t,(function(i,n){var o=f(this).collection;if(!e&&r&&!w(i))return\"get\"==t&&void 0;var s=o[t](0===i?0:i,n);return e?this:s}))})),r||nd(n.prototype,\"size\",{configurable:!0,get:function(){return f(this).collection.size}})}else n=i.getConstructor(e,t,o,s),Jl.enable();return Ye(n,t,!1,!0),u[t]=n,gt({global:!0,forced:!0},u),r||i.setStrong(n,t,o),n},hd=function(t,e,i){for(var n in e)i&&i.unsafe&&t[n]?t[n]=e[n]:Ze(t,n,e[n],i);return t},ld=U(\"species\"),dd=ut.f,cd=Jl.fastKey,ud=we.set,fd=we.getterFor,pd={getConstructor:function(t,e,i,n){var o=t((function(t,r){id(t,o,e),ud(t,{type:e,index:Fe(null),first:void 0,last:void 0,size:0}),l||(t.size=0),null!=r&&ed(r,t[n],{that:t,AS_ENTRIES:i})})),r=fd(e),s=function(t,e,i){var n,o,s=r(t),h=a(t,e);return h?h.value=i:(s.last=h={index:o=cd(e,!0),key:e,value:i,previous:n=s.last,next:void 0,removed:!1},s.first||(s.first=h),n&&(n.next=h),l?s.size++:t.size++,\"F\"!==o&&(s.index[o]=h)),t},a=function(t,e){var i,n=r(t),o=cd(e);if(\"F\"!==o)return n.index[o];for(i=n.first;i;i=i.next)if(i.key==e)return i};return hd(o.prototype,{clear:function(){for(var t=r(this),e=t.index,i=t.first;i;)i.removed=!0,i.previous&&(i.previous=i.previous.next=void 0),delete e[i.index],i=i.next;t.first=t.last=void 0,l?t.size=0:this.size=0},delete:function(t){var e=this,i=r(e),n=a(e,t);if(n){var o=n.next,s=n.previous;delete i.index[n.index],n.removed=!0,s&&(s.next=o),o&&(o.previous=s),i.first==n&&(i.first=o),i.last==n&&(i.last=s),l?i.size--:e.size--}return!!n},forEach:function(t){for(var e,i=r(this),n=lt(t,arguments.length>1?arguments[1]:void 0,3);e=e?e.next:i.first;)for(n(e.value,e.key,this);e&&e.removed;)e=e.previous},has:function(t){return!!a(this,t)}}),hd(o.prototype,i?{get:function(t){var e=a(this,t);return e&&e.value},set:function(t,e){return s(this,0===t?0:t,e)}}:{add:function(t){return s(this,t=0===t?0:t,t)}}),l&&dd(o.prototype,\"size\",{get:function(){return r(this).size}}),o},setStrong:function(t,e,i){var n=e+\" Iterator\",o=fd(e),r=fd(n);ri(t,e,(function(t,e){ud(this,{type:n,target:t,state:o(t),kind:e,last:void 0})}),(function(){for(var t=r(this),e=t.kind,i=t.last;i&&i.removed;)i=i.previous;return t.target&&(t.last=i=i?i.next:t.state.first)?\"keys\"==e?{value:i.key,done:!1}:\"values\"==e?{value:i.value,done:!1}:{value:[i.key,i.value],done:!1}:(t.target=void 0,{value:void 0,done:!0})}),i?\"entries\":\"values\",!i,!0),function(t){var e=x(t),i=ut.f;l&&e&&!e[ld]&&i(e,ld,{configurable:!0,get:function(){return this}})}(e)}};ad(\"Map\",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),pd);var vd=k.Map,gd=function(){function t(){Nn(this,t),this.clear(),this._defaultIndex=0,this._groupIndex=0,this._defaultGroups=[{border:\"#2B7CE9\",background:\"#97C2FC\",highlight:{border:\"#2B7CE9\",background:\"#D2E5FF\"},hover:{border:\"#2B7CE9\",background:\"#D2E5FF\"}},{border:\"#FFA500\",background:\"#FFFF00\",highlight:{border:\"#FFA500\",background:\"#FFFFA3\"},hover:{border:\"#FFA500\",background:\"#FFFFA3\"}},{border:\"#FA0A10\",background:\"#FB7E81\",highlight:{border:\"#FA0A10\",background:\"#FFAFB1\"},hover:{border:\"#FA0A10\",background:\"#FFAFB1\"}},{border:\"#41A906\",background:\"#7BE141\",highlight:{border:\"#41A906\",background:\"#A1EC76\"},hover:{border:\"#41A906\",background:\"#A1EC76\"}},{border:\"#E129F0\",background:\"#EB7DF4\",highlight:{border:\"#E129F0\",background:\"#F0B3F5\"},hover:{border:\"#E129F0\",background:\"#F0B3F5\"}},{border:\"#7C29F0\",background:\"#AD85E4\",highlight:{border:\"#7C29F0\",background:\"#D3BDF0\"},hover:{border:\"#7C29F0\",background:\"#D3BDF0\"}},{border:\"#C37F00\",background:\"#FFA807\",highlight:{border:\"#C37F00\",background:\"#FFCA66\"},hover:{border:\"#C37F00\",background:\"#FFCA66\"}},{border:\"#4220FB\",background:\"#6E6EFD\",highlight:{border:\"#4220FB\",background:\"#9B9BFD\"},hover:{border:\"#4220FB\",background:\"#9B9BFD\"}},{border:\"#FD5A77\",background:\"#FFC0CB\",highlight:{border:\"#FD5A77\",background:\"#FFD1D9\"},hover:{border:\"#FD5A77\",background:\"#FFD1D9\"}},{border:\"#4AD63A\",background:\"#C2FABC\",highlight:{border:\"#4AD63A\",background:\"#E6FFE3\"},hover:{border:\"#4AD63A\",background:\"#E6FFE3\"}},{border:\"#990000\",background:\"#EE0000\",highlight:{border:\"#BB0000\",background:\"#FF3333\"},hover:{border:\"#BB0000\",background:\"#FF3333\"}},{border:\"#FF6000\",background:\"#FF6000\",highlight:{border:\"#FF6000\",background:\"#FF6000\"},hover:{border:\"#FF6000\",background:\"#FF6000\"}},{border:\"#97C2FC\",background:\"#2B7CE9\",highlight:{border:\"#D2E5FF\",background:\"#2B7CE9\"},hover:{border:\"#D2E5FF\",background:\"#2B7CE9\"}},{border:\"#399605\",background:\"#255C03\",highlight:{border:\"#399605\",background:\"#255C03\"},hover:{border:\"#399605\",background:\"#255C03\"}},{border:\"#B70054\",background:\"#FF007E\",highlight:{border:\"#B70054\",background:\"#FF007E\"},hover:{border:\"#B70054\",background:\"#FF007E\"}},{border:\"#AD85E4\",background:\"#7C29F0\",highlight:{border:\"#D3BDF0\",background:\"#7C29F0\"},hover:{border:\"#D3BDF0\",background:\"#7C29F0\"}},{border:\"#4557FA\",background:\"#000EA1\",highlight:{border:\"#6E6EFD\",background:\"#000EA1\"},hover:{border:\"#6E6EFD\",background:\"#000EA1\"}},{border:\"#FFC0CB\",background:\"#FD5A77\",highlight:{border:\"#FFD1D9\",background:\"#FD5A77\"},hover:{border:\"#FFD1D9\",background:\"#FD5A77\"}},{border:\"#C2FABC\",background:\"#74D66A\",highlight:{border:\"#E6FFE3\",background:\"#74D66A\"},hover:{border:\"#E6FFE3\",background:\"#74D66A\"}},{border:\"#EE0000\",background:\"#990000\",highlight:{border:\"#FF3333\",background:\"#BB0000\"},hover:{border:\"#FF3333\",background:\"#BB0000\"}}],this.options={},this.defaultOptions={useDefaultGroups:!0},At(this.options,this.defaultOptions)}return Fn(t,[{key:\"setOptions\",value:function(t){var e=[\"useDefaultGroups\"];if(void 0!==t)for(var i in t)if(Object.prototype.hasOwnProperty.call(t,i)&&-1===Hr(e).call(e,i)){var n=t[i];this.add(i,n)}}},{key:\"clear\",value:function(){this._groups=new vd,this._groupNames=[]}},{key:\"get\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this._groups.get(t);if(void 0===i&&e)if(!1===this.options.useDefaultGroups&&this._groupNames.length>0){var n=this._groupIndex%this._groupNames.length;++this._groupIndex,(i={}).color=this._groups.get(this._groupNames[n]),this._groups.set(t,i)}else{var o=this._defaultIndex%this._defaultGroups.length;this._defaultIndex++,(i={}).color=this._defaultGroups[o],this._groups.set(t,i)}return i}},{key:\"add\",value:function(t,e){return this._groups.has(t)||this._groupNames.push(t),this._groups.set(t,e),e}}]),t}();gt({target:\"Number\",stat:!0},{isNaN:function(t){return t!=t}});var yd=k.Number.isNaN,md=a.isFinite,bd=Number.isFinite||function(t){return\"number\"==typeof t&&md(t)};gt({target:\"Number\",stat:!0},{isFinite:bd});var wd=k.Number.isFinite,kd=Gi.some,_d=Ao(\"some\");gt({target:\"Array\",proto:!0,forced:!_d},{some:function(t){return kd(this,t,arguments.length>1?arguments[1]:void 0)}});var xd=Ht(\"Array\").some,Ed=Array.prototype,Od=function(t){var e=t.some;return t===Ed||t instanceof Array&&e===Ed.some?xd:e},Cd=x(\"Reflect\",\"construct\"),Sd=h((function(){function t(){}return!(Cd((function(){}),[],t)instanceof t)})),Td=!h((function(){Cd((function(){}))})),Md=Sd||Td;gt({target:\"Reflect\",stat:!0,forced:Md,sham:Md},{construct:function(t,e){ht(t),dt(e);var i=arguments.length<3?t:ht(arguments[2]);if(Td&&!Sd)return Cd(t,e,i);if(t==i){switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3])}var n=[null];return n.push.apply(n,e),new(Lt.apply(t,n))}var o=i.prototype,r=Fe(w(o)?o:Object.prototype),s=Function.apply.call(t,r,e);return w(s)?s:r}});var Pd=k.Reflect.construct,Dd=n((function(t){t.exports=function(t){if(void 0===t)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return t},t.exports.default=t.exports,t.exports.__esModule=!0})),Id=i(Dd),Bd=Xr;gt({target:\"Object\",stat:!0},{setPrototypeOf:$e});var zd=k.Object.setPrototypeOf,Nd=n((function(t){function e(i,n){return t.exports=e=zd||function(t,e){return t.__proto__=e,t},t.exports.default=t.exports,t.exports.__esModule=!0,e(i,n)}t.exports=e,t.exports.default=t.exports,t.exports.__esModule=!0}));i(Nd);var Ad=i(n((function(t){t.exports=function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Super expression must either be null or a function\");t.prototype=Bd(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&Nd(t,e)},t.exports.default=t.exports,t.exports.__esModule=!0}))),Fd=i(n((function(t){var e=vo.default;t.exports=function(t,i){if(i&&(\"object\"===e(i)||\"function\"==typeof i))return i;if(void 0!==i)throw new TypeError(\"Derived constructors may only return object or undefined\");return Dd(t)},t.exports.default=t.exports,t.exports.__esModule=!0}))),jd=ur,Rd=n((function(t){function e(i){return t.exports=e=zd?jd:function(t){return t.__proto__||jd(t)},t.exports.default=t.exports,t.exports.__esModule=!0,e(i)}t.exports=e,t.exports.default=t.exports,t.exports.__esModule=!0})),Ld=i(Rd),Hd=n((function(t){var e=function(t){var e,i=Object.prototype,n=i.hasOwnProperty,o=\"function\"==typeof Symbol?Symbol:{},r=o.iterator||\"@@iterator\",s=o.asyncIterator||\"@@asyncIterator\",a=o.toStringTag||\"@@toStringTag\";function h(t,e,i){return Object.defineProperty(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{h({},\"\")}catch(t){h=function(t,e,i){return t[e]=i}}function l(t,e,i,n){var o=e&&e.prototype instanceof g?e:g,r=Object.create(o.prototype),s=new T(n||[]);return r._invoke=function(t,e,i){var n=c;return function(o,r){if(n===f)throw new Error(\"Generator is already running\");if(n===p){if(\"throw\"===o)throw r;return P()}for(i.method=o,i.arg=r;;){var s=i.delegate;if(s){var a=O(s,i);if(a){if(a===v)continue;return a}}if(\"next\"===i.method)i.sent=i._sent=i.arg;else if(\"throw\"===i.method){if(n===c)throw n=p,i.arg;i.dispatchException(i.arg)}else\"return\"===i.method&&i.abrupt(\"return\",i.arg);n=f;var h=d(t,e,i);if(\"normal\"===h.type){if(n=i.done?p:u,h.arg===v)continue;return{value:h.arg,done:i.done}}\"throw\"===h.type&&(n=p,i.method=\"throw\",i.arg=h.arg)}}}(t,i,s),r}function d(t,e,i){try{return{type:\"normal\",arg:t.call(e,i)}}catch(t){return{type:\"throw\",arg:t}}}t.wrap=l;var c=\"suspendedStart\",u=\"suspendedYield\",f=\"executing\",p=\"completed\",v={};function g(){}function y(){}function m(){}var b={};b[r]=function(){return this};var w=Object.getPrototypeOf,k=w&&w(w(M([])));k&&k!==i&&n.call(k,r)&&(b=k);var _=m.prototype=g.prototype=Object.create(b);function x(t){[\"next\",\"throw\",\"return\"].forEach((function(e){h(t,e,(function(t){return this._invoke(e,t)}))}))}function E(t,e){function i(o,r,s,a){var h=d(t[o],t,r);if(\"throw\"!==h.type){var l=h.arg,c=l.value;return c&&\"object\"==typeof c&&n.call(c,\"__await\")?e.resolve(c.__await).then((function(t){i(\"next\",t,s,a)}),(function(t){i(\"throw\",t,s,a)})):e.resolve(c).then((function(t){l.value=t,s(l)}),(function(t){return i(\"throw\",t,s,a)}))}a(h.arg)}var o;this._invoke=function(t,n){function r(){return new e((function(e,o){i(t,n,e,o)}))}return o=o?o.then(r,r):r()}}function O(t,i){var n=t.iterator[i.method];if(n===e){if(i.delegate=null,\"throw\"===i.method){if(t.iterator.return&&(i.method=\"return\",i.arg=e,O(t,i),\"throw\"===i.method))return v;i.method=\"throw\",i.arg=new TypeError(\"The iterator does not provide a 'throw' method\")}return v}var o=d(n,t.iterator,i.arg);if(\"throw\"===o.type)return i.method=\"throw\",i.arg=o.arg,i.delegate=null,v;var r=o.arg;return r?r.done?(i[t.resultName]=r.value,i.next=t.nextLoc,\"return\"!==i.method&&(i.method=\"next\",i.arg=e),i.delegate=null,v):r:(i.method=\"throw\",i.arg=new TypeError(\"iterator result is not an object\"),i.delegate=null,v)}function C(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function S(t){var e=t.completion||{};e.type=\"normal\",delete e.arg,t.completion=e}function T(t){this.tryEntries=[{tryLoc:\"root\"}],t.forEach(C,this),this.reset(!0)}function M(t){if(t){var i=t[r];if(i)return i.call(t);if(\"function\"==typeof t.next)return t;if(!isNaN(t.length)){var o=-1,s=function i(){for(;++o<t.length;)if(n.call(t,o))return i.value=t[o],i.done=!1,i;return i.value=e,i.done=!0,i};return s.next=s}}return{next:P}}function P(){return{value:e,done:!0}}return y.prototype=_.constructor=m,m.constructor=y,y.displayName=h(m,a,\"GeneratorFunction\"),t.isGeneratorFunction=function(t){var e=\"function\"==typeof t&&t.constructor;return!!e&&(e===y||\"GeneratorFunction\"===(e.displayName||e.name))},t.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,m):(t.__proto__=m,h(t,a,\"GeneratorFunction\")),t.prototype=Object.create(_),t},t.awrap=function(t){return{__await:t}},x(E.prototype),E.prototype[s]=function(){return this},t.AsyncIterator=E,t.async=function(e,i,n,o,r){void 0===r&&(r=Promise);var s=new E(l(e,i,n,o),r);return t.isGeneratorFunction(i)?s:s.next().then((function(t){return t.done?t.value:s.next()}))},x(_),h(_,a,\"Generator\"),_[r]=function(){return this},_.toString=function(){return\"[object Generator]\"},t.keys=function(t){var e=[];for(var i in t)e.push(i);return e.reverse(),function i(){for(;e.length;){var n=e.pop();if(n in t)return i.value=n,i.done=!1,i}return i.done=!0,i}},t.values=M,T.prototype={constructor:T,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method=\"next\",this.arg=e,this.tryEntries.forEach(S),!t)for(var i in this)\"t\"===i.charAt(0)&&n.call(this,i)&&!isNaN(+i.slice(1))&&(this[i]=e)},stop:function(){this.done=!0;var t=this.tryEntries[0].completion;if(\"throw\"===t.type)throw t.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var i=this;function o(n,o){return a.type=\"throw\",a.arg=t,i.next=n,o&&(i.method=\"next\",i.arg=e),!!o}for(var r=this.tryEntries.length-1;r>=0;--r){var s=this.tryEntries[r],a=s.completion;if(\"root\"===s.tryLoc)return o(\"end\");if(s.tryLoc<=this.prev){var h=n.call(s,\"catchLoc\"),l=n.call(s,\"finallyLoc\");if(h&&l){if(this.prev<s.catchLoc)return o(s.catchLoc,!0);if(this.prev<s.finallyLoc)return o(s.finallyLoc)}else if(h){if(this.prev<s.catchLoc)return o(s.catchLoc,!0)}else{if(!l)throw new Error(\"try statement without catch or finally\");if(this.prev<s.finallyLoc)return o(s.finallyLoc)}}}},abrupt:function(t,e){for(var i=this.tryEntries.length-1;i>=0;--i){var o=this.tryEntries[i];if(o.tryLoc<=this.prev&&n.call(o,\"finallyLoc\")&&this.prev<o.finallyLoc){var r=o;break}}r&&(\"break\"===t||\"continue\"===t)&&r.tryLoc<=e&&e<=r.finallyLoc&&(r=null);var s=r?r.completion:{};return s.type=t,s.arg=e,r?(this.method=\"next\",this.next=r.finallyLoc,v):this.complete(s)},complete:function(t,e){if(\"throw\"===t.type)throw t.arg;return\"break\"===t.type||\"continue\"===t.type?this.next=t.arg:\"return\"===t.type?(this.rval=this.arg=t.arg,this.method=\"return\",this.next=\"end\"):\"normal\"===t.type&&e&&(this.next=e),v},finish:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var i=this.tryEntries[e];if(i.finallyLoc===t)return this.complete(i.completion,i.afterLoc),S(i),v}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var i=this.tryEntries[e];if(i.tryLoc===t){var n=i.completion;if(\"throw\"===n.type){var o=n.arg;S(i)}return o}}throw new Error(\"illegal catch attempt\")},delegateYield:function(t,i,n){return this.delegate={iterator:M(t),resultName:i,nextLoc:n},\"next\"===this.method&&(this.arg=e),v}},t}(t.exports);try{regeneratorRuntime=e}catch(t){Function(\"r\",\"regeneratorRuntime = r\")(e)}})),Wd=function(t){return function(e,i,n,o){ht(i);var r=A(e),s=y(r),a=kt(r.length),h=t?a-1:0,l=t?-1:1;if(n<2)for(;;){if(h in s){o=s[h],h+=l;break}if(h+=l,t?h<0:a<=h)throw TypeError(\"Reduce of empty array with no initial value\")}for(;t?h>=0:a>h;h+=l)h in s&&(o=i(o,s[h],h,r));return o}},qd={left:Wd(!1),right:Wd(!0)},Vd=\"process\"==v(a.process),Ud=qd.left,Yd=Ao(\"reduce\");gt({target:\"Array\",proto:!0,forced:!Yd||!Vd&&M>79&&M<83},{reduce:function(t){return Ud(this,t,arguments.length,arguments.length>1?arguments[1]:void 0)}});var Xd=Ht(\"Array\").reduce,Gd=Array.prototype,Kd=function(t){var e=t.reduce;return t===Gd||t instanceof Array&&e===Gd.reduce?Xd:e},$d=function(t,e,i,n,o,r,s,a){for(var h,l=o,d=0,c=!!s&&lt(s,a,3);d<n;){if(d in i){if(h=c?c(i[d],d,e):i[d],r>0&&zi(h))l=$d(t,e,h,kt(h.length),l,r-1)-1;else{if(l>=9007199254740991)throw TypeError(\"Exceed the acceptable array length\");t[l]=h}l++}d++}return l},Zd=$d;gt({target:\"Array\",proto:!0},{flatMap:function(t){var e,i=A(this),n=kt(i.length);return ht(t),(e=Ui(i,0)).length=Zd(e,i,i,n,0,1,t,arguments.length>1?arguments[1]:void 0),e}});var Qd=Ht(\"Array\").flatMap,Jd=Array.prototype,tc=function(t){var e=t.flatMap;return t===Jd||t instanceof Array&&e===Jd.flatMap?Qd:e};ad(\"Set\",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),pd);var ec=k.Set,ic=fo,nc=function(t){var e=yi(t);if(\"function\"!=typeof e)throw TypeError(String(t)+\" is not iterable\");return dt(e.call(t))},oc=Math.floor,rc=function(t,e){var i=t.length,n=oc(i/2);return i<8?sc(t,e):ac(rc(t.slice(0,n),e),rc(t.slice(n),e),e)},sc=function(t,e){for(var i,n,o=t.length,r=1;r<o;){for(n=r,i=t[r];n&&e(t[n-1],i)>0;)t[n]=t[--n];n!==r++&&(t[n]=i)}return t},ac=function(t,e,i){for(var n=t.length,o=e.length,r=0,s=0,a=[];r<n||s<o;)r<n&&s<o?a.push(i(t[r],e[s])<=0?t[r++]:e[s++]):a.push(r<n?t[r++]:e[s++]);return a},hc=rc,lc=E.match(/firefox\\/(\\d+)/i),dc=!!lc&&+lc[1],cc=/MSIE|Trident/.test(E),uc=E.match(/AppleWebKit\\/(\\d+)\\./),fc=!!uc&&+uc[1],pc=[],vc=pc.sort,gc=h((function(){pc.sort(void 0)})),yc=h((function(){pc.sort(null)})),mc=Ao(\"sort\"),bc=!h((function(){if(M)return M<70;if(!(dc&&dc>3)){if(cc)return!0;if(fc)return fc<603;var t,e,i,n,o=\"\";for(t=65;t<76;t++){switch(e=String.fromCharCode(t),t){case 66:case 69:case 70:case 72:i=3;break;case 68:case 71:i=4;break;default:i=2}for(n=0;n<47;n++)pc.push({k:e+n,v:i})}for(pc.sort((function(t,e){return e.v-t.v})),n=0;n<pc.length;n++)e=pc[n].k.charAt(0),o.charAt(o.length-1)!==e&&(o+=e);return\"DGBEFHACIJK\"!==o}}));gt({target:\"Array\",proto:!0,forced:gc||!yc||!mc||!bc},{sort:function(t){void 0!==t&&ht(t);var e=A(this);if(bc)return void 0===t?vc.call(e):vc.call(e,t);var i,n,o=[],r=kt(e.length);for(n=0;n<r;n++)n in e&&o.push(e[n]);for(i=(o=hc(o,function(t){return function(e,i){return void 0===i?-1:void 0===e?1:void 0!==t?+t(e,i)||0:Qt(e)>Qt(i)?1:-1}}(t))).length,n=0;n<i;)e[n]=o[n++];for(;n<r;)delete e[n++];return e}});var wc,kc=Ht(\"Array\").sort,_c=Array.prototype,xc=function(t){var e=t.sort;return t===_c||t instanceof Array&&e===_c.sort?kc:e},Ec=Ht(\"Array\").keys,Oc=Array.prototype,Cc={DOMTokenList:!0,NodeList:!0},Sc=function(t){var e=t.keys;return t===Oc||t instanceof Array&&e===Oc.keys||Cc.hasOwnProperty(We(t))?Ec:e},Tc=Ht(\"Array\").values,Mc=Array.prototype,Pc={DOMTokenList:!0,NodeList:!0},Dc=function(t){var e=t.values;return t===Mc||t instanceof Array&&e===Mc.values||Pc.hasOwnProperty(We(t))?Tc:e},Ic=Ht(\"Array\").entries,Bc=Array.prototype,zc={DOMTokenList:!0,NodeList:!0},Nc=function(t){var e=t.entries;return t===Bc||t instanceof Array&&e===Bc.entries||zc.hasOwnProperty(We(t))?Ic:e},Ac=new Uint8Array(16);function Fc(){if(!wc&&!(wc=\"undefined\"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||\"undefined\"!=typeof msCrypto&&\"function\"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error(\"crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported\");return wc(Ac)}var jc=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function Rc(t){return\"string\"==typeof t&&jc.test(t)}for(var Lc=[],Hc=0;Hc<256;++Hc)Lc.push((Hc+256).toString(16).substr(1));function Wc(t,e,i){var n=(t=t||{}).random||(t.rng||Fc)();if(n[6]=15&n[6]|64,n[8]=63&n[8]|128,e){i=i||0;for(var o=0;o<16;++o)e[i+o]=n[o];return e}return function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=(Lc[t[e+0]]+Lc[t[e+1]]+Lc[t[e+2]]+Lc[t[e+3]]+\"-\"+Lc[t[e+4]]+Lc[t[e+5]]+\"-\"+Lc[t[e+6]]+Lc[t[e+7]]+\"-\"+Lc[t[e+8]]+Lc[t[e+9]]+\"-\"+Lc[t[e+10]]+Lc[t[e+11]]+Lc[t[e+12]]+Lc[t[e+13]]+Lc[t[e+14]]+Lc[t[e+15]]).toLowerCase();if(!Rc(i))throw TypeError(\"Stringified UUID is invalid\");return i}(n)}function qc(t,e){var i=zo(t);if(On){var n=On(t);e&&(n=mr(n).call(n,(function(e){return Mn(t,e).enumerable}))),i.push.apply(i,n)}return i}function Vc(t){for(var e=1;e<arguments.length;e++){var i,n=null!=arguments[e]?arguments[e]:{};if(e%2)Wo(i=qc(Object(n),!0)).call(i,(function(e){jn(t,e,n[e])}));else if(Dn)In(t,Dn(n));else{var o;Wo(o=qc(Object(n))).call(o,(function(e){zn(t,e,Mn(n,e))}))}}return t}function Uc(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}function Yc(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return Xc(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Xc(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function Xc(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}var Gc=function(){function t(e,i,n){var o,r,s;Nn(this,t),this._source=e,this._transformers=i,this._target=n,this._listeners={add:Vt(o=this._add).call(o,this),remove:Vt(r=this._remove).call(r,this),update:Vt(s=this._update).call(s,this)}}return Fn(t,[{key:\"all\",value:function(){return this._target.update(this._transformItems(this._source.get())),this}},{key:\"start\",value:function(){return this._source.on(\"add\",this._listeners.add),this._source.on(\"remove\",this._listeners.remove),this._source.on(\"update\",this._listeners.update),this}},{key:\"stop\",value:function(){return this._source.off(\"add\",this._listeners.add),this._source.off(\"remove\",this._listeners.remove),this._source.off(\"update\",this._listeners.update),this}},{key:\"_transformItems\",value:function(t){var e;return Kd(e=this._transformers).call(e,(function(t,e){return e(t)}),t)}},{key:\"_add\",value:function(t,e){null!=e&&this._target.add(this._transformItems(this._source.get(e.items)))}},{key:\"_update\",value:function(t,e){null!=e&&this._target.update(this._transformItems(this._source.get(e.items)))}},{key:\"_remove\",value:function(t,e){null!=e&&this._target.remove(this._transformItems(e.oldData))}}]),t}(),Kc=function(){function t(e){Nn(this,t),this._source=e,this._transformers=[]}return Fn(t,[{key:\"filter\",value:function(t){return this._transformers.push((function(e){return mr(e).call(e,t)})),this}},{key:\"map\",value:function(t){return this._transformers.push((function(e){return Io(e).call(e,t)})),this}},{key:\"flatMap\",value:function(t){return this._transformers.push((function(e){return tc(e).call(e,t)})),this}},{key:\"to\",value:function(t){return new Gc(this._source,this._transformers,t)}}]),t}();function $c(t){return\"string\"==typeof t||\"number\"==typeof t}var Zc=function(){function t(e){Nn(this,t),this._queue=[],this._timeout=null,this._extended=null,this.delay=null,this.max=1/0,this.setOptions(e)}return Fn(t,[{key:\"setOptions\",value:function(t){t&&void 0!==t.delay&&(this.delay=t.delay),t&&void 0!==t.max&&(this.max=t.max),this._flushIfNeeded()}},{key:\"destroy\",value:function(){if(this.flush(),this._extended){for(var t=this._extended.object,e=this._extended.methods,i=0;i<e.length;i++){var n=e[i];n.original?t[n.name]=n.original:delete t[n.name]}this._extended=null}}},{key:\"replace\",value:function(t,e){var i=this,n=t[e];if(!n)throw new Error(\"Method \"+e+\" undefined\");t[e]=function(){for(var t=arguments.length,e=new Array(t),o=0;o<t;o++)e[o]=arguments[o];i.queue({args:e,fn:n,context:this})}}},{key:\"queue\",value:function(t){\"function\"==typeof t?this._queue.push({fn:t}):this._queue.push(t),this._flushIfNeeded()}},{key:\"_flushIfNeeded\",value:function(){var t=this;this._queue.length>this.max&&this.flush(),null!=this._timeout&&(clearTimeout(this._timeout),this._timeout=null),this.queue.length>0&&\"number\"==typeof this.delay&&(this._timeout=rs((function(){t.flush()}),this.delay))}},{key:\"flush\",value:function(){var t,e;Wo(t=er(e=this._queue).call(e,0)).call(t,(function(t){t.fn.apply(t.context||t.fn,t.args||[])}))}}],[{key:\"extend\",value:function(e,i){var n=new t(i);if(void 0!==e.flush)throw new Error(\"Target object already has a property flush\");e.flush=function(){n.flush()};var o=[{name:\"flush\",original:void 0}];if(i&&i.replace)for(var r=0;r<i.replace.length;r++){var s=i.replace[r];o.push({name:s,original:e[s]}),n.replace(e,s)}return n._extended={object:e,methods:o},n}}]),t}(),Qc=function(){function t(){Nn(this,t),this._subscribers={\"*\":[],add:[],remove:[],update:[]},this.subscribe=t.prototype.on,this.unsubscribe=t.prototype.off}return Fn(t,[{key:\"_trigger\",value:function(t,e,i){var n,o;if(\"*\"===t)throw new Error(\"Cannot trigger event *\");Wo(n=Eo(o=[]).call(o,wo(this._subscribers[t]),wo(this._subscribers[\"*\"]))).call(n,(function(n){n(t,e,null!=i?i:null)}))}},{key:\"on\",value:function(t,e){\"function\"==typeof e&&this._subscribers[t].push(e)}},{key:\"off\",value:function(t,e){var i;this._subscribers[t]=mr(i=this._subscribers[t]).call(i,(function(t){return t!==e}))}}]),t}(),Jc=function(t){function e(t){Nn(this,e),this._pairs=t}return Fn(e,[{key:t,value:Hd.mark((function t(){var e,i,n,o,r;return Hd.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:e=Yc(this._pairs),t.prev=1,e.s();case 3:if((i=e.n()).done){t.next=9;break}return n=uo(i.value,2),o=n[0],r=n[1],t.next=7,[o,r];case 7:t.next=3;break;case 9:t.next=14;break;case 11:t.prev=11,t.t0=t.catch(1),e.e(t.t0);case 14:return t.prev=14,e.f(),t.finish(14);case 17:case\"end\":return t.stop()}}),t,this,[[1,11,14,17]])}))},{key:\"entries\",value:Hd.mark((function t(){var e,i,n,o,r;return Hd.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:e=Yc(this._pairs),t.prev=1,e.s();case 3:if((i=e.n()).done){t.next=9;break}return n=uo(i.value,2),o=n[0],r=n[1],t.next=7,[o,r];case 7:t.next=3;break;case 9:t.next=14;break;case 11:t.prev=11,t.t0=t.catch(1),e.e(t.t0);case 14:return t.prev=14,e.f(),t.finish(14);case 17:case\"end\":return t.stop()}}),t,this,[[1,11,14,17]])}))},{key:\"keys\",value:Hd.mark((function t(){var e,i,n,o;return Hd.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:e=Yc(this._pairs),t.prev=1,e.s();case 3:if((i=e.n()).done){t.next=9;break}return n=uo(i.value,1),o=n[0],t.next=7,o;case 7:t.next=3;break;case 9:t.next=14;break;case 11:t.prev=11,t.t0=t.catch(1),e.e(t.t0);case 14:return t.prev=14,e.f(),t.finish(14);case 17:case\"end\":return t.stop()}}),t,this,[[1,11,14,17]])}))},{key:\"values\",value:Hd.mark((function t(){var e,i,n,o;return Hd.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:e=Yc(this._pairs),t.prev=1,e.s();case 3:if((i=e.n()).done){t.next=9;break}return n=uo(i.value,2),o=n[1],t.next=7,o;case 7:t.next=3;break;case 9:t.next=14;break;case 11:t.prev=11,t.t0=t.catch(1),e.e(t.t0);case 14:return t.prev=14,e.f(),t.finish(14);case 17:case\"end\":return t.stop()}}),t,this,[[1,11,14,17]])}))},{key:\"toIdArray\",value:function(){var t;return Io(t=wo(this._pairs)).call(t,(function(t){return t[0]}))}},{key:\"toItemArray\",value:function(){var t;return Io(t=wo(this._pairs)).call(t,(function(t){return t[1]}))}},{key:\"toEntryArray\",value:function(){return wo(this._pairs)}},{key:\"toObjectMap\",value:function(){var t,e=Gr(null),i=Yc(this._pairs);try{for(i.s();!(t=i.n()).done;){var n=uo(t.value,2),o=n[0],r=n[1];e[o]=r}}catch(t){i.e(t)}finally{i.f()}return e}},{key:\"toMap\",value:function(){return new vd(this._pairs)}},{key:\"toIdSet\",value:function(){return new ec(this.toIdArray())}},{key:\"toItemSet\",value:function(){return new ec(this.toItemArray())}},{key:\"cache\",value:function(){return new e(wo(this._pairs))}},{key:\"distinct\",value:function(t){var e,i=new ec,n=Yc(this._pairs);try{for(n.s();!(e=n.n()).done;){var o=uo(e.value,2),r=o[0],s=o[1];i.add(t(s,r))}}catch(t){n.e(t)}finally{n.f()}return i}},{key:\"filter\",value:function(t){var i=this._pairs;return new e(jn({},ic,Hd.mark((function e(){var n,o,r,s,a;return Hd.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:n=Yc(i),e.prev=1,n.s();case 3:if((o=n.n()).done){e.next=10;break}if(r=uo(o.value,2),s=r[0],a=r[1],!t(a,s)){e.next=8;break}return e.next=8,[s,a];case 8:e.next=3;break;case 10:e.next=15;break;case 12:e.prev=12,e.t0=e.catch(1),n.e(e.t0);case 15:return e.prev=15,n.f(),e.finish(15);case 18:case\"end\":return e.stop()}}),e,null,[[1,12,15,18]])}))))}},{key:\"forEach\",value:function(t){var e,i=Yc(this._pairs);try{for(i.s();!(e=i.n()).done;){var n=uo(e.value,2),o=n[0];t(n[1],o)}}catch(t){i.e(t)}finally{i.f()}}},{key:\"map\",value:function(t){var i=this._pairs;return new e(jn({},ic,Hd.mark((function e(){var n,o,r,s,a;return Hd.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:n=Yc(i),e.prev=1,n.s();case 3:if((o=n.n()).done){e.next=9;break}return r=uo(o.value,2),s=r[0],a=r[1],e.next=7,[s,t(a,s)];case 7:e.next=3;break;case 9:e.next=14;break;case 11:e.prev=11,e.t0=e.catch(1),n.e(e.t0);case 14:return e.prev=14,n.f(),e.finish(14);case 17:case\"end\":return e.stop()}}),e,null,[[1,11,14,17]])}))))}},{key:\"max\",value:function(t){var e=nc(this._pairs),i=e.next();if(i.done)return null;for(var n=i.value[1],o=t(i.value[1],i.value[0]);!(i=e.next()).done;){var r=uo(i.value,2),s=r[0],a=r[1],h=t(a,s);h>o&&(o=h,n=a)}return n}},{key:\"min\",value:function(t){var e=nc(this._pairs),i=e.next();if(i.done)return null;for(var n=i.value[1],o=t(i.value[1],i.value[0]);!(i=e.next()).done;){var r=uo(i.value,2),s=r[0],a=r[1],h=t(a,s);h<o&&(o=h,n=a)}return n}},{key:\"reduce\",value:function(t,e){var i,n=Yc(this._pairs);try{for(n.s();!(i=n.n()).done;){var o=uo(i.value,2),r=o[0];e=t(e,o[1],r)}}catch(t){n.e(t)}finally{n.f()}return e}},{key:\"sort\",value:function(t){var i=this;return new e(jn({},ic,(function(){var e;return nc(xc(e=wo(i._pairs)).call(e,(function(e,i){var n=uo(e,2),o=n[0],r=n[1],s=uo(i,2),a=s[0],h=s[1];return t(r,h,o,a)})))})))}}]),e}(ic);var tu=function(t){Ad(i,t);var e=Uc(i);function i(t,n){var o;return Nn(this,i),(o=e.call(this))._queue=null,t&&!So(t)&&(n=t,t=[]),o._options=n||{},o._data=new vd,o.length=0,o._idProp=o._options.fieldId||\"id\",t&&t.length&&o.add(t),o.setOptions(n),o}return Fn(i,[{key:\"idProp\",get:function(){return this._idProp}},{key:\"setOptions\",value:function(t){t&&void 0!==t.queue&&(!1===t.queue?this._queue&&(this._queue.destroy(),this._queue=null):(this._queue||(this._queue=Zc.extend(this,{replace:[\"add\",\"update\",\"remove\"]})),t.queue&&\"object\"===go(t.queue)&&this._queue.setOptions(t.queue)))}},{key:\"add\",value:function(t,e){var i,n=this,o=[];if(So(t)){var r=Io(t).call(t,(function(t){return t[n._idProp]}));if(Od(r).call(r,(function(t){return n._data.has(t)})))throw new Error(\"A duplicate id was found in the parameter array.\");for(var s=0,a=t.length;s<a;s++)i=this._addItem(t[s]),o.push(i)}else{if(!t||\"object\"!==go(t))throw new Error(\"Unknown dataType\");i=this._addItem(t),o.push(i)}return o.length&&this._trigger(\"add\",{items:o},e),o}},{key:\"update\",value:function(t,e){var i=this,n=[],o=[],r=[],s=[],a=this._idProp,h=function(t){var e=t[a];if(null!=e&&i._data.has(e)){var h=t,l=At({},i._data.get(e)),d=i._updateItem(h);o.push(d),s.push(h),r.push(l)}else{var c=i._addItem(t);n.push(c)}};if(So(t))for(var l=0,d=t.length;l<d;l++)t[l]&&\"object\"===go(t[l])?h(t[l]):console.warn(\"Ignoring input item, which is not an object at index \"+l);else{if(!t||\"object\"!==go(t))throw new Error(\"Unknown dataType\");h(t)}if(n.length&&this._trigger(\"add\",{items:n},e),o.length){var c={items:o,oldData:r,data:s};this._trigger(\"update\",c,e)}return Eo(n).call(n,o)}},{key:\"updateOnly\",value:function(t,e){var i,n=this;So(t)||(t=[t]);var o=Io(i=Io(t).call(t,(function(t){var e=n._data.get(t[n._idProp]);if(null==e)throw new Error(\"Updating non-existent items is not allowed.\");return{oldData:e,update:t}}))).call(i,(function(t){var e=t.oldData,i=t.update,o=e[n._idProp],r=ih(e,i);return n._data.set(o,r),{id:o,oldData:e,updatedData:r}}));if(o.length){var r={items:Io(o).call(o,(function(t){return t.id})),oldData:Io(o).call(o,(function(t){return t.oldData})),data:Io(o).call(o,(function(t){return t.updatedData}))};return this._trigger(\"update\",r,e),r.items}return[]}},{key:\"get\",value:function(t,e){var i=void 0,n=void 0,o=void 0;$c(t)?(i=t,o=e):So(t)?(n=t,o=e):o=t;var r,s=o&&\"Object\"===o.returnType?\"Object\":\"Array\",a=o&&mr(o),h=[],l=void 0,d=void 0,c=void 0;if(null!=i)(l=this._data.get(i))&&a&&!a(l)&&(l=void 0);else if(null!=n)for(var u=0,f=n.length;u<f;u++)null==(l=this._data.get(n[u]))||a&&!a(l)||h.push(l);else for(var p,v=0,g=(d=wo(Sc(p=this._data).call(p))).length;v<g;v++)c=d[v],null==(l=this._data.get(c))||a&&!a(l)||h.push(l);if(o&&o.order&&null==i&&this._sort(h,o.order),o&&o.fields){var y=o.fields;if(null!=i&&null!=l)l=this._filterFields(l,y);else for(var m=0,b=h.length;m<b;m++)h[m]=this._filterFields(h[m],y)}if(\"Object\"==s){for(var w={},k=0,_=h.length;k<_;k++){var x=h[k];w[x[this._idProp]]=x}return w}return null!=i?null!==(r=l)&&void 0!==r?r:null:h}},{key:\"getIds\",value:function(t){var e=this._data,i=t&&mr(t),n=t&&t.order,o=wo(Sc(e).call(e)),r=[];if(i)if(n){for(var s=[],a=0,h=o.length;a<h;a++){var l=o[a],d=this._data.get(l);null!=d&&i(d)&&s.push(d)}this._sort(s,n);for(var c=0,u=s.length;c<u;c++)r.push(s[c][this._idProp])}else for(var f=0,p=o.length;f<p;f++){var v=o[f],g=this._data.get(v);null!=g&&i(g)&&r.push(g[this._idProp])}else if(n){for(var y=[],m=0,b=o.length;m<b;m++){var w=o[m];y.push(e.get(w))}this._sort(y,n);for(var k=0,_=y.length;k<_;k++)r.push(y[k][this._idProp])}else for(var x=0,E=o.length;x<E;x++){var O=o[x],C=e.get(O);null!=C&&r.push(C[this._idProp])}return r}},{key:\"getDataSet\",value:function(){return this}},{key:\"forEach\",value:function(t,e){var i=e&&mr(e),n=this._data,o=wo(Sc(n).call(n));if(e&&e.order)for(var r=this.get(e),s=0,a=r.length;s<a;s++){var h=r[s];t(h,h[this._idProp])}else for(var l=0,d=o.length;l<d;l++){var c=o[l],u=this._data.get(c);null==u||i&&!i(u)||t(u,c)}}},{key:\"map\",value:function(t,e){for(var i=e&&mr(e),n=[],o=this._data,r=wo(Sc(o).call(o)),s=0,a=r.length;s<a;s++){var h=r[s],l=this._data.get(h);null==l||i&&!i(l)||n.push(t(l,h))}return e&&e.order&&this._sort(n,e.order),n}},{key:\"_filterFields\",value:function(t,e){var i;return t?Kd(i=So(e)?e:zo(e)).call(i,(function(e,i){return e[i]=t[i],e}),{}):t}},{key:\"_sort\",value:function(t,e){if(\"string\"==typeof e){var i=e;xc(t).call(t,(function(t,e){var n=t[i],o=e[i];return n>o?1:n<o?-1:0}))}else{if(\"function\"!=typeof e)throw new TypeError(\"Order must be a function or a string\");xc(t).call(t,e)}}},{key:\"remove\",value:function(t,e){for(var i=[],n=[],o=So(t)?t:[t],r=0,s=o.length;r<s;r++){var a=this._remove(o[r]);if(a){var h=a[this._idProp];null!=h&&(i.push(h),n.push(a))}}return i.length&&this._trigger(\"remove\",{items:i,oldData:n},e),i}},{key:\"_remove\",value:function(t){var e;if($c(t)?e=t:t&&\"object\"===go(t)&&(e=t[this._idProp]),null!=e&&this._data.has(e)){var i=this._data.get(e)||null;return this._data.delete(e),--this.length,i}return null}},{key:\"clear\",value:function(t){for(var e,i=wo(Sc(e=this._data).call(e)),n=[],o=0,r=i.length;o<r;o++)n.push(this._data.get(i[o]));return this._data.clear(),this.length=0,this._trigger(\"remove\",{items:i,oldData:n},t),i}},{key:\"max\",value:function(t){var e,i,n=null,o=null,r=Yc(Dc(e=this._data).call(e));try{for(r.s();!(i=r.n()).done;){var s=i.value,a=s[t];\"number\"==typeof a&&(null==o||a>o)&&(n=s,o=a)}}catch(t){r.e(t)}finally{r.f()}return n||null}},{key:\"min\",value:function(t){var e,i,n=null,o=null,r=Yc(Dc(e=this._data).call(e));try{for(r.s();!(i=r.n()).done;){var s=i.value,a=s[t];\"number\"==typeof a&&(null==o||a<o)&&(n=s,o=a)}}catch(t){r.e(t)}finally{r.f()}return n||null}},{key:\"distinct\",value:function(t){for(var e=this._data,i=wo(Sc(e).call(e)),n=[],o=0,r=0,s=i.length;r<s;r++){for(var a=i[r],h=e.get(a)[t],l=!1,d=0;d<o;d++)if(n[d]==h){l=!0;break}l||void 0===h||(n[o]=h,o++)}return n}},{key:\"_addItem\",value:function(t){var e=function(t,e){return null==t[e]&&(t[e]=Wc()),t}(t,this._idProp),i=e[this._idProp];if(this._data.has(i))throw new Error(\"Cannot add item: item with id \"+i+\" already exists\");return this._data.set(i,e),++this.length,i}},{key:\"_updateItem\",value:function(t){var e=t[this._idProp];if(null==e)throw new Error(\"Cannot update item: item has no id (item: \"+es(t)+\")\");var i=this._data.get(e);if(!i)throw new Error(\"Cannot update item: no item with id \"+e+\" found\");return this._data.set(e,Vc(Vc({},i),t)),e}},{key:\"stream\",value:function(t){if(t){var e=this._data;return new Jc(jn({},ic,Hd.mark((function i(){var n,o,r,s;return Hd.wrap((function(i){for(;;)switch(i.prev=i.next){case 0:n=Yc(t),i.prev=1,n.s();case 3:if((o=n.n()).done){i.next=11;break}if(r=o.value,null==(s=e.get(r))){i.next=9;break}return i.next=9,[r,s];case 9:i.next=3;break;case 11:i.next=16;break;case 13:i.prev=13,i.t0=i.catch(1),n.e(i.t0);case 16:return i.prev=16,n.f(),i.finish(16);case 19:case\"end\":return i.stop()}}),i,null,[[1,13,16,19]])}))))}var i;return new Jc(jn({},ic,Vt(i=Nc(this._data)).call(i,this._data)))}}]),i}(Qc),eu=function(t){Ad(i,t);var e=Uc(i);function i(t,n){var o,r;return Nn(this,i),(r=e.call(this)).length=0,r._ids=new ec,r._options=n||{},r._listener=Vt(o=r._onEvent).call(o,Id(r)),r.setData(t),r}return Fn(i,[{key:\"idProp\",get:function(){return this.getDataSet().idProp}},{key:\"setData\",value:function(t){if(this._data){this._data.off&&this._data.off(\"*\",this._listener);var e=this._data.getIds({filter:mr(this._options)}),i=this._data.get(e);this._ids.clear(),this.length=0,this._trigger(\"remove\",{items:e,oldData:i})}if(null!=t){this._data=t;for(var n=this._data.getIds({filter:mr(this._options)}),o=0,r=n.length;o<r;o++){var s=n[o];this._ids.add(s)}this.length=n.length,this._trigger(\"add\",{items:n})}else this._data=new tu;this._data.on&&this._data.on(\"*\",this._listener)}},{key:\"refresh\",value:function(){for(var t=this._data.getIds({filter:mr(this._options)}),e=wo(this._ids),i={},n=[],o=[],r=[],s=0,a=t.length;s<a;s++){var h=t[s];i[h]=!0,this._ids.has(h)||(n.push(h),this._ids.add(h))}for(var l=0,d=e.length;l<d;l++){var c=e[l],u=this._data.get(c);null==u?console.error(\"If you see this, report it please.\"):i[c]||(o.push(c),r.push(u),this._ids.delete(c))}this.length+=n.length-o.length,n.length&&this._trigger(\"add\",{items:n}),o.length&&this._trigger(\"remove\",{items:o,oldData:r})}},{key:\"get\",value:function(t,e){if(null==this._data)return null;var i,n=null;$c(t)||So(t)?(n=t,i=e):i=t;var o=At({},this._options,i),r=mr(this._options),s=i&&mr(i);return r&&s&&(o.filter=function(t){return r(t)&&s(t)}),null==n?this._data.get(o):this._data.get(n,o)}},{key:\"getIds\",value:function(t){if(this._data.length){var e,i=mr(this._options),n=null!=t?mr(t):null;return e=n?i?function(t){return i(t)&&n(t)}:n:i,this._data.getIds({filter:e,order:t&&t.order})}return[]}},{key:\"forEach\",value:function(t,e){if(this._data){var i,n,o=mr(this._options),r=e&&mr(e);n=r?o?function(t){return o(t)&&r(t)}:r:o,Wo(i=this._data).call(i,t,{filter:n,order:e&&e.order})}}},{key:\"map\",value:function(t,e){if(this._data){var i,n,o=mr(this._options),r=e&&mr(e);return n=r?o?function(t){return o(t)&&r(t)}:r:o,Io(i=this._data).call(i,t,{filter:n,order:e&&e.order})}return[]}},{key:\"getDataSet\",value:function(){return this._data.getDataSet()}},{key:\"stream\",value:function(t){var e;return this._data.stream(t||jn({},ic,Vt(e=Sc(this._ids)).call(e,this._ids)))}},{key:\"dispose\",value:function(){var t;null!==(t=this._data)&&void 0!==t&&t.off&&this._data.off(\"*\",this._listener);var e,n=\"This data view has already been disposed of.\",o={get:function(){throw new Error(n)},set:function(){throw new Error(n)},configurable:!1},r=Yc(Co(i.prototype));try{for(r.s();!(e=r.n()).done;){var s=e.value;zn(this,s,o)}}catch(t){r.e(t)}finally{r.f()}}},{key:\"_onEvent\",value:function(t,e,i){if(e&&e.items&&this._data){var n=e.items,o=[],r=[],s=[],a=[],h=[],l=[];switch(t){case\"add\":for(var d=0,c=n.length;d<c;d++){var u=n[d];this.get(u)&&(this._ids.add(u),o.push(u))}break;case\"update\":for(var f=0,p=n.length;f<p;f++){var v=n[f];this.get(v)?this._ids.has(v)?(r.push(v),h.push(e.data[f]),a.push(e.oldData[f])):(this._ids.add(v),o.push(v)):this._ids.has(v)&&(this._ids.delete(v),s.push(v),l.push(e.oldData[f]))}break;case\"remove\":for(var g=0,y=n.length;g<y;g++){var m=n[g];this._ids.has(m)&&(this._ids.delete(m),s.push(m),l.push(e.oldData[g]))}}this.length+=o.length-s.length,o.length&&this._trigger(\"add\",{items:o},i),r.length&&this._trigger(\"update\",{items:r,oldData:a,data:h},i),s.length&&this._trigger(\"remove\",{items:s,oldData:l},i)}}}]),i}(Qc);function iu(t,e){return\"object\"===go(e)&&null!==e&&t===e.idProp&&\"function\"==typeof e.add&&\"function\"==typeof e.clear&&\"function\"==typeof e.distinct&&\"function\"==typeof Wo(e)&&\"function\"==typeof e.get&&\"function\"==typeof e.getDataSet&&\"function\"==typeof e.getIds&&\"number\"==typeof e.length&&\"function\"==typeof Io(e)&&\"function\"==typeof e.max&&\"function\"==typeof e.min&&\"function\"==typeof e.off&&\"function\"==typeof e.on&&\"function\"==typeof e.remove&&\"function\"==typeof e.setOptions&&\"function\"==typeof e.stream&&\"function\"==typeof e.update&&\"function\"==typeof e.updateOnly}function nu(t,e){return\"object\"===go(e)&&null!==e&&t===e.idProp&&\"function\"==typeof Wo(e)&&\"function\"==typeof e.get&&\"function\"==typeof e.getDataSet&&\"function\"==typeof e.getIds&&\"number\"==typeof e.length&&\"function\"==typeof Io(e)&&\"function\"==typeof e.off&&\"function\"==typeof e.on&&\"function\"==typeof e.stream&&iu(t,e.getDataSet())}var ou=Object.freeze({__proto__:null,DELETE:eh,DataSet:tu,DataStream:Jc,DataView:eu,Queue:Zc,createNewDataPipeFrom:function(t){return new Kc(t)},isDataSetLike:iu,isDataViewLike:nu}),ru=Tr.trim,su=a.parseFloat,au=1/su(xr+\"-0\")!=-1/0?function(t){var e=ru(Qt(t)),i=su(e);return 0===i&&\"-\"==e.charAt(0)?-0:i}:su;gt({global:!0,forced:parseFloat!=au},{parseFloat:au});var hu=k.parseFloat,lu=Li.f,du=h((function(){return!Object.getOwnPropertyNames(1)}));gt({target:\"Object\",stat:!0,forced:du},{getOwnPropertyNames:lu});var cu=k.Object,uu=function(t){return cu.getOwnPropertyNames(t)};function fu(t,e){var i=[\"node\",\"edge\",\"label\"],n=!0,o=Qh(e,\"chosen\");if(\"boolean\"==typeof o)n=o;else if(\"object\"===go(o)){if(-1===Hr(i).call(i,t))throw new Error(\"choosify: subOption '\"+t+\"' should be one of '\"+i.join(\"', '\")+\"'\");var r=Qh(e,[\"chosen\",t]);\"boolean\"!=typeof r&&\"function\"!=typeof r||(n=r)}return n}function pu(t,e,i){if(t.width<=0||t.height<=0)return!1;if(void 0!==i){var n={x:e.x-i.x,y:e.y-i.y};if(0!==i.angle){var o=-i.angle;e={x:Math.cos(o)*n.x-Math.sin(o)*n.y,y:Math.sin(o)*n.x+Math.cos(o)*n.y}}else e=n}var r=t.x+t.width,s=t.y+t.width;return t.left<e.x&&r>e.x&&t.top<e.y&&s>e.y}function vu(t){return\"string\"==typeof t&&\"\"!==t}function gu(t,e,i,n){var o=n.x,r=n.y;if(\"function\"==typeof n.distanceToBorder){var s=n.distanceToBorder(t,e),a=Math.sin(e)*s,h=Math.cos(e)*s;h===s?(o+=s,r=n.y):a===s?(o=n.x,r-=s):(o+=h,r-=a)}else n.shape.width>n.shape.height?(o=n.x+.5*n.shape.width,r=n.y-i):(o=n.x+i,r=n.y-.5*n.shape.height);return{x:o,y:r}}var yu=function(){function t(e){Nn(this,t),this.measureText=e,this.current=0,this.width=0,this.height=0,this.lines=[]}return Fn(t,[{key:\"_add\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:\"normal\";void 0===this.lines[t]&&(this.lines[t]={width:0,height:0,blocks:[]});var n=e;void 0!==e&&\"\"!==e||(n=\" \");var o=this.measureText(n,i),r=At({},Dc(o));r.text=e,r.width=o.width,r.mod=i,void 0!==e&&\"\"!==e||(r.width=0),this.lines[t].blocks.push(r),this.lines[t].width+=r.width}},{key:\"curWidth\",value:function(){var t=this.lines[this.current];return void 0===t?0:t.width}},{key:\"append\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"normal\";this._add(this.current,t,e)}},{key:\"newLine\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"normal\";this._add(this.current,t,e),this.current++}},{key:\"determineLineHeights\",value:function(){for(var t=0;t<this.lines.length;t++){var e=this.lines[t],i=0;if(void 0!==e.blocks)for(var n=0;n<e.blocks.length;n++){var o=e.blocks[n];i<o.height&&(i=o.height)}e.height=i}}},{key:\"determineLabelSize\",value:function(){for(var t=0,e=0,i=0;i<this.lines.length;i++){var n=this.lines[i];n.width>t&&(t=n.width),e+=n.height}this.width=t,this.height=e}},{key:\"removeEmptyBlocks\",value:function(){for(var t=[],e=0;e<this.lines.length;e++){var i=this.lines[e];if(0!==i.blocks.length&&(e!==this.lines.length-1||0!==i.width)){var n={};At(n,i),n.blocks=[];for(var o=void 0,r=[],s=0;s<i.blocks.length;s++){var a=i.blocks[s];0!==a.width?r.push(a):void 0===o&&(o=a)}0===r.length&&void 0!==o&&r.push(o),n.blocks=r,t.push(n)}}return t}},{key:\"finalize\",value:function(){this.determineLineHeights(),this.determineLabelSize();var t=this.removeEmptyBlocks();return{width:this.width,height:this.height,lines:t}}}]),t}(),mu={\"<b>\":/<b>/,\"<i>\":/<i>/,\"<code>\":/<code>/,\"</b>\":/<\\/b>/,\"</i>\":/<\\/i>/,\"</code>\":/<\\/code>/,\"*\":/\\*/,_:/_/,\"`\":/`/,afterBold:/[^*]/,afterItal:/[^_]/,afterMono:/[^`]/},bu=function(){function t(e){Nn(this,t),this.text=e,this.bold=!1,this.ital=!1,this.mono=!1,this.spacing=!1,this.position=0,this.buffer=\"\",this.modStack=[],this.blocks=[]}return Fn(t,[{key:\"mod\",value:function(){return 0===this.modStack.length?\"normal\":this.modStack[0]}},{key:\"modName\",value:function(){return 0===this.modStack.length?\"normal\":\"mono\"===this.modStack[0]?\"mono\":this.bold&&this.ital?\"boldital\":this.bold?\"bold\":this.ital?\"ital\":void 0}},{key:\"emitBlock\",value:function(){this.spacing&&(this.add(\" \"),this.spacing=!1),this.buffer.length>0&&(this.blocks.push({text:this.buffer,mod:this.modName()}),this.buffer=\"\")}},{key:\"add\",value:function(t){\" \"===t&&(this.spacing=!0),this.spacing&&(this.buffer+=\" \",this.spacing=!1),\" \"!=t&&(this.buffer+=t)}},{key:\"parseWS\",value:function(t){return!!/[ \\t]/.test(t)&&(this.mono?this.add(t):this.spacing=!0,!0)}},{key:\"setTag\",value:function(t){this.emitBlock(),this[t]=!0,this.modStack.unshift(t)}},{key:\"unsetTag\",value:function(t){this.emitBlock(),this[t]=!1,this.modStack.shift()}},{key:\"parseStartTag\",value:function(t,e){return!(this.mono||this[t]||!this.match(e))&&(this.setTag(t),!0)}},{key:\"match\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this.prepareRegExp(t),n=uo(i,2),o=n[0],r=n[1],s=o.test(this.text.substr(this.position,r));return s&&e&&(this.position+=r-1),s}},{key:\"parseEndTag\",value:function(t,e,i){var n=this.mod()===t;return!(!(n=\"mono\"===t?n&&this.mono:n&&!this.mono)||!this.match(e))&&(void 0!==i?(this.position===this.text.length-1||this.match(i,!1))&&this.unsetTag(t):this.unsetTag(t),!0)}},{key:\"replace\",value:function(t,e){return!!this.match(t)&&(this.add(e),this.position+=length-1,!0)}},{key:\"prepareRegExp\",value:function(t){var e,i;if(t instanceof RegExp)i=t,e=1;else{var n=mu[t];i=void 0!==n?n:new RegExp(t),e=t.length}return[i,e]}}]),t}(),wu=function(){function t(e,i,n,o){var r=this;Nn(this,t),this.ctx=e,this.parent=i,this.selected=n,this.hover=o;this.lines=new yu((function(t,i){if(void 0===t)return 0;var s=r.parent.getFormattingValues(e,n,o,i),a=0;\"\"!==t&&(a=r.ctx.measureText(t).width);return{width:a,values:s}}))}return Fn(t,[{key:\"process\",value:function(t){if(!vu(t))return this.lines.finalize();var e=this.parent.fontOptions;t=(t=t.replace(/\\r\\n/g,\"\\n\")).replace(/\\r/g,\"\\n\");var i=String(t).split(\"\\n\"),n=i.length;if(e.multi)for(var o=0;o<n;o++){var r=this.splitBlocks(i[o],e.multi);if(void 0!==r)if(0!==r.length){if(e.maxWdt>0)for(var s=0;s<r.length;s++){var a=r[s].mod,h=r[s].text;this.splitStringIntoLines(h,a,!0)}else for(var l=0;l<r.length;l++){var d=r[l].mod,c=r[l].text;this.lines.append(c,d)}this.lines.newLine()}else this.lines.newLine(\"\")}else if(e.maxWdt>0)for(var u=0;u<n;u++)this.splitStringIntoLines(i[u]);else for(var f=0;f<n;f++)this.lines.newLine(i[f]);return this.lines.finalize()}},{key:\"decodeMarkupSystem\",value:function(t){var e=\"none\";return\"markdown\"===t||\"md\"===t?e=\"markdown\":!0!==t&&\"html\"!==t||(e=\"html\"),e}},{key:\"splitHtmlBlocks\",value:function(t){for(var e=new bu(t),i=function(t){return!!/&/.test(t)&&(e.replace(e.text,\"&lt;\",\"<\")||e.replace(e.text,\"&amp;\",\"&\")||e.add(\"&\"),!0)};e.position<e.text.length;){var n=e.text.charAt(e.position);e.parseWS(n)||/</.test(n)&&(e.parseStartTag(\"bold\",\"<b>\")||e.parseStartTag(\"ital\",\"<i>\")||e.parseStartTag(\"mono\",\"<code>\")||e.parseEndTag(\"bold\",\"</b>\")||e.parseEndTag(\"ital\",\"</i>\")||e.parseEndTag(\"mono\",\"</code>\"))||i(n)||e.add(n),e.position++}return e.emitBlock(),e.blocks}},{key:\"splitMarkdownBlocks\",value:function(t){for(var e=this,i=new bu(t),n=!0,o=function(t){return!!/\\\\/.test(t)&&(i.position<e.text.length+1&&(i.position++,t=e.text.charAt(i.position),/ \\t/.test(t)?i.spacing=!0:(i.add(t),n=!1)),!0)};i.position<i.text.length;){var r=i.text.charAt(i.position);i.parseWS(r)||o(r)||(n||i.spacing)&&(i.parseStartTag(\"bold\",\"*\")||i.parseStartTag(\"ital\",\"_\")||i.parseStartTag(\"mono\",\"`\"))||i.parseEndTag(\"bold\",\"*\",\"afterBold\")||i.parseEndTag(\"ital\",\"_\",\"afterItal\")||i.parseEndTag(\"mono\",\"`\",\"afterMono\")||(i.add(r),n=!1),i.position++}return i.emitBlock(),i.blocks}},{key:\"splitBlocks\",value:function(t,e){var i=this.decodeMarkupSystem(e);return\"none\"===i?[{text:t,mod:\"normal\"}]:\"markdown\"===i?this.splitMarkdownBlocks(t):\"html\"===i?this.splitHtmlBlocks(t):void 0}},{key:\"overMaxWidth\",value:function(t){var e=this.ctx.measureText(t).width;return this.lines.curWidth()+e>this.parent.fontOptions.maxWdt}},{key:\"getLongestFit\",value:function(t){for(var e=\"\",i=0;i<t.length;){var n=e+(\"\"===e?\"\":\" \")+t[i];if(this.overMaxWidth(n))break;e=n,i++}return i}},{key:\"getLongestFitWord\",value:function(t){for(var e=0;e<t.length&&!this.overMaxWidth(Oo(t).call(t,0,e));)e++;return e}},{key:\"splitStringIntoLines\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"normal\",i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];this.parent.getFormattingValues(this.ctx,this.selected,this.hover,e);for(var n=(t=(t=t.replace(/^( +)/g,\"$1\\r\")).replace(/([^\\r][^ ]*)( +)/g,\"$1\\r$2\\r\")).split(\"\\r\");n.length>0;){var o=this.getLongestFit(n);if(0===o){var r=n[0],s=this.getLongestFitWord(r);this.lines.newLine(Oo(r).call(r,0,s),e),n[0]=Oo(r).call(r,s)}else{var a=o;\" \"===n[o-1]?o--:\" \"===n[a]&&a++;var h=Oo(n).call(n,0,o).join(\"\");o==n.length&&i?this.lines.append(h,e):this.lines.newLine(h,e),n=Oo(n).call(n,a)}}}}]),t}(),ku=[\"bold\",\"ital\",\"boldital\",\"mono\"],_u=function(){function t(e,i){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];Nn(this,t),this.body=e,this.pointToSelf=!1,this.baseSize=void 0,this.fontOptions={},this.setOptions(i),this.size={top:0,left:0,width:0,height:0,yLine:0},this.isEdgeLabel=n}return Fn(t,[{key:\"setOptions\",value:function(t){if(this.elementOptions=t,this.initFontOptions(t.font),vu(t.label)?this.labelDirty=!0:t.label=void 0,void 0!==t.font&&null!==t.font)if(\"string\"==typeof t.font)this.baseSize=this.fontOptions.size;else if(\"object\"===go(t.font)){var e=t.font.size;void 0!==e&&(this.baseSize=e)}}},{key:\"initFontOptions\",value:function(e){var i=this;Dh(ku,(function(t){i.fontOptions[t]={}})),t.parseFontString(this.fontOptions,e)?this.fontOptions.vadjust=0:Dh(e,(function(t,e){null!=t&&\"object\"!==go(t)&&(i.fontOptions[e]=t)}))}},{key:\"constrain\",value:function(t){var e={constrainWidth:!1,maxWdt:-1,minWdt:-1,constrainHeight:!1,minHgt:-1,valign:\"middle\"},i=Qh(t,\"widthConstraint\");if(\"number\"==typeof i)e.maxWdt=Number(i),e.minWdt=Number(i);else if(\"object\"===go(i)){var n=Qh(t,[\"widthConstraint\",\"maximum\"]);\"number\"==typeof n&&(e.maxWdt=Number(n));var o=Qh(t,[\"widthConstraint\",\"minimum\"]);\"number\"==typeof o&&(e.minWdt=Number(o))}var r=Qh(t,\"heightConstraint\");if(\"number\"==typeof r)e.minHgt=Number(r);else if(\"object\"===go(r)){var s=Qh(t,[\"heightConstraint\",\"minimum\"]);\"number\"==typeof s&&(e.minHgt=Number(s));var a=Qh(t,[\"heightConstraint\",\"valign\"]);\"string\"==typeof a&&(\"top\"!==a&&\"bottom\"!==a||(e.valign=a))}return e}},{key:\"update\",value:function(t,e){this.setOptions(t,!0),this.propagateFonts(e),Ch(this.fontOptions,this.constrain(e)),this.fontOptions.chooser=fu(\"label\",e)}},{key:\"adjustSizes\",value:function(t){var e=t?t.right+t.left:0;this.fontOptions.constrainWidth&&(this.fontOptions.maxWdt-=e,this.fontOptions.minWdt-=e);var i=t?t.top+t.bottom:0;this.fontOptions.constrainHeight&&(this.fontOptions.minHgt-=i)}},{key:\"addFontOptionsToPile\",value:function(t,e){for(var i=0;i<e.length;++i)this.addFontToPile(t,e[i])}},{key:\"addFontToPile\",value:function(t,e){if(void 0!==e&&void 0!==e.font&&null!==e.font){var i=e.font;t.push(i)}}},{key:\"getBasicOptions\",value:function(e){for(var i={},n=0;n<e.length;++n){var o=e[n],r={};t.parseFontString(r,o)&&(o=r),Dh(o,(function(t,e){void 0!==t&&(Object.prototype.hasOwnProperty.call(i,e)||(-1!==Hr(ku).call(ku,e)?i[e]={}:i[e]=t))}))}return i}},{key:\"getFontOption\",value:function(e,i,n){for(var o,r=0;r<e.length;++r){var s=e[r];if(Object.prototype.hasOwnProperty.call(s,i)){if(null==(o=s[i]))continue;var a={};if(t.parseFontString(a,o)&&(o=a),Object.prototype.hasOwnProperty.call(o,n))return o[n]}}if(Object.prototype.hasOwnProperty.call(this.fontOptions,n))return this.fontOptions[n];throw new Error(\"Did not find value for multi-font for property: '\"+n+\"'\")}},{key:\"getFontOptions\",value:function(t,e){for(var i={},n=[\"color\",\"size\",\"face\",\"mod\",\"vadjust\"],o=0;o<n.length;++o){var r=n[o];i[r]=this.getFontOption(t,e,r)}return i}},{key:\"propagateFonts\",value:function(t){var e=this,i=[];this.addFontOptionsToPile(i,t),this.fontOptions=this.getBasicOptions(i);for(var n=function(t){var n=ku[t],o=e.fontOptions[n];Dh(e.getFontOptions(i,n),(function(t,e){o[e]=t})),o.size=Number(o.size),o.vadjust=Number(o.vadjust)},o=0;o<ku.length;++o)n(o)}},{key:\"draw\",value:function(t,e,i,n,o){var r=arguments.length>5&&void 0!==arguments[5]?arguments[5]:\"middle\";if(void 0!==this.elementOptions.label){var s=this.fontOptions.size*this.body.view.scale;this.elementOptions.label&&s<this.elementOptions.scaling.label.drawThreshold-1||(s>=this.elementOptions.scaling.label.maxVisible&&(s=Number(this.elementOptions.scaling.label.maxVisible)/this.body.view.scale),this.calculateLabelSize(t,n,o,e,i,r),this._drawBackground(t),this._drawText(t,e,this.size.yLine,r,s))}}},{key:\"_drawBackground\",value:function(t){if(void 0!==this.fontOptions.background&&\"none\"!==this.fontOptions.background){t.fillStyle=this.fontOptions.background;var e=this.getSize();t.fillRect(e.left,e.top,e.width,e.height)}}},{key:\"_drawText\",value:function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:\"middle\",o=arguments.length>4?arguments[4]:void 0,r=this._setAlignment(t,e,i,n),s=uo(r,2);e=s[0],i=s[1],t.textAlign=\"left\",e-=this.size.width/2,this.fontOptions.valign&&this.size.height>this.size.labelHeight&&(\"top\"===this.fontOptions.valign&&(i-=(this.size.height-this.size.labelHeight)/2),\"bottom\"===this.fontOptions.valign&&(i+=(this.size.height-this.size.labelHeight)/2));for(var a=0;a<this.lineCount;a++){var h=this.lines[a];if(h&&h.blocks){var l=0;this.isEdgeLabel||\"center\"===this.fontOptions.align?l+=(this.size.width-h.width)/2:\"right\"===this.fontOptions.align&&(l+=this.size.width-h.width);for(var d=0;d<h.blocks.length;d++){var c=h.blocks[d];t.font=c.font;var u=this._getColor(c.color,o,c.strokeColor),f=uo(u,2),p=f[0],v=f[1];c.strokeWidth>0&&(t.lineWidth=c.strokeWidth,t.strokeStyle=v,t.lineJoin=\"round\"),t.fillStyle=p,c.strokeWidth>0&&t.strokeText(c.text,e+l,i+c.vadjust),t.fillText(c.text,e+l,i+c.vadjust),l+=c.width}i+=h.height}}}},{key:\"_setAlignment\",value:function(t,e,i,n){if(this.isEdgeLabel&&\"horizontal\"!==this.fontOptions.align&&!1===this.pointToSelf){e=0,i=0;\"top\"===this.fontOptions.align?(t.textBaseline=\"alphabetic\",i-=4):\"bottom\"===this.fontOptions.align?(t.textBaseline=\"hanging\",i+=4):t.textBaseline=\"middle\"}else t.textBaseline=n;return[e,i]}},{key:\"_getColor\",value:function(t,e,i){var n=t||\"#000000\",o=i||\"#ffffff\";if(e<=this.elementOptions.scaling.label.drawThreshold){var r=Math.max(0,Math.min(1,1-(this.elementOptions.scaling.label.drawThreshold-e)));n=Fh(n,r),o=Fh(o,r)}return[n,o]}},{key:\"getTextSize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return this._processLabel(t,e,i),{width:this.size.width,height:this.size.height,lineCount:this.lineCount}}},{key:\"getSize\",value:function(){var t=this.size.left,e=this.size.top-1;if(this.isEdgeLabel){var i=.5*-this.size.width;switch(this.fontOptions.align){case\"middle\":t=i,e=.5*-this.size.height;break;case\"top\":t=i,e=-(this.size.height+2);break;case\"bottom\":t=i,e=2}}return{left:t,top:e,width:this.size.width,height:this.size.height}}},{key:\"calculateLabelSize\",value:function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,r=arguments.length>5&&void 0!==arguments[5]?arguments[5]:\"middle\";this._processLabel(t,e,i),this.size.left=n-.5*this.size.width,this.size.top=o-.5*this.size.height,this.size.yLine=o+.5*(1-this.lineCount)*this.fontOptions.size,\"hanging\"===r&&(this.size.top+=.5*this.fontOptions.size,this.size.top+=4,this.size.yLine+=4)}},{key:\"getFormattingValues\",value:function(t,e,i,n){var o=function(t,e,i){return\"normal\"===e?\"mod\"===i?\"\":t[i]:void 0!==t[e][i]?t[e][i]:t[i]},r={color:o(this.fontOptions,n,\"color\"),size:o(this.fontOptions,n,\"size\"),face:o(this.fontOptions,n,\"face\"),mod:o(this.fontOptions,n,\"mod\"),vadjust:o(this.fontOptions,n,\"vadjust\"),strokeWidth:this.fontOptions.strokeWidth,strokeColor:this.fontOptions.strokeColor};(e||i)&&(\"normal\"===n&&!0===this.fontOptions.chooser&&this.elementOptions.labelHighlightBold?r.mod=\"bold\":\"function\"==typeof this.fontOptions.chooser&&this.fontOptions.chooser(r,this.elementOptions.id,e,i));var s=\"\";return void 0!==r.mod&&\"\"!==r.mod&&(s+=r.mod+\" \"),s+=r.size+\"px \"+r.face,t.font=s.replace(/\"/g,\"\"),r.font=t.font,r.height=r.size,r}},{key:\"differentState\",value:function(t,e){return t!==this.selectedState||e!==this.hoverState}},{key:\"_processLabelText\",value:function(t,e,i,n){return new wu(t,this,e,i).process(n)}},{key:\"_processLabel\",value:function(t,e,i){if(!1!==this.labelDirty||this.differentState(e,i)){var n=this._processLabelText(t,e,i,this.elementOptions.label);this.fontOptions.minWdt>0&&n.width<this.fontOptions.minWdt&&(n.width=this.fontOptions.minWdt),this.size.labelHeight=n.height,this.fontOptions.minHgt>0&&n.height<this.fontOptions.minHgt&&(n.height=this.fontOptions.minHgt),this.lines=n.lines,this.lineCount=n.lines.length,this.size.width=n.width,this.size.height=n.height,this.selectedState=e,this.hoverState=i,this.labelDirty=!1}}},{key:\"visible\",value:function(){return 0!==this.size.width&&0!==this.size.height&&void 0!==this.elementOptions.label&&!(this.fontOptions.size*this.body.view.scale<this.elementOptions.scaling.label.drawThreshold-1)}}],[{key:\"parseFontString\",value:function(t,e){if(!e||\"string\"!=typeof e)return!1;var i=e.split(\" \");return t.size=+i[0].replace(\"px\",\"\"),t.face=i[1],t.color=i[2],!0}}]),t}(),xu=function(){function t(e,i,n){Nn(this,t),this.body=i,this.labelModule=n,this.setOptions(e),this.top=void 0,this.left=void 0,this.height=void 0,this.width=void 0,this.radius=void 0,this.margin=void 0,this.refreshNeeded=!0,this.boundingBox={top:0,left:0,right:0,bottom:0}}return Fn(t,[{key:\"setOptions\",value:function(t){this.options=t}},{key:\"_setMargins\",value:function(t){this.margin={},this.options.margin&&(\"object\"==go(this.options.margin)?(this.margin.top=this.options.margin.top,this.margin.right=this.options.margin.right,this.margin.bottom=this.options.margin.bottom,this.margin.left=this.options.margin.left):(this.margin.top=this.options.margin,this.margin.right=this.options.margin,this.margin.bottom=this.options.margin,this.margin.left=this.options.margin)),t.adjustSizes(this.margin)}},{key:\"_distanceToBorder\",value:function(t,e){var i=this.options.borderWidth;return t&&this.resize(t),Math.min(Math.abs(this.width/2/Math.cos(e)),Math.abs(this.height/2/Math.sin(e)))+i}},{key:\"enableShadow\",value:function(t,e){e.shadow&&(t.shadowColor=e.shadowColor,t.shadowBlur=e.shadowSize,t.shadowOffsetX=e.shadowX,t.shadowOffsetY=e.shadowY)}},{key:\"disableShadow\",value:function(t,e){e.shadow&&(t.shadowColor=\"rgba(0,0,0,0)\",t.shadowBlur=0,t.shadowOffsetX=0,t.shadowOffsetY=0)}},{key:\"enableBorderDashes\",value:function(t,e){if(!1!==e.borderDashes)if(void 0!==t.setLineDash){var i=e.borderDashes;!0===i&&(i=[5,15]),t.setLineDash(i)}else console.warn(\"setLineDash is not supported in this browser. The dashed borders cannot be used.\"),this.options.shapeProperties.borderDashes=!1,e.borderDashes=!1}},{key:\"disableBorderDashes\",value:function(t,e){!1!==e.borderDashes&&(void 0!==t.setLineDash?t.setLineDash([0]):(console.warn(\"setLineDash is not supported in this browser. The dashed borders cannot be used.\"),this.options.shapeProperties.borderDashes=!1,e.borderDashes=!1))}},{key:\"needsRefresh\",value:function(t,e){return!0===this.refreshNeeded?(this.refreshNeeded=!1,!0):void 0===this.width||this.labelModule.differentState(t,e)}},{key:\"initContextForDraw\",value:function(t,e){var i=e.borderWidth/this.body.view.scale;t.lineWidth=Math.min(this.width,i),t.strokeStyle=e.borderColor,t.fillStyle=e.color}},{key:\"performStroke\",value:function(t,e){var i=e.borderWidth/this.body.view.scale;t.save(),i>0&&(this.enableBorderDashes(t,e),t.stroke(),this.disableBorderDashes(t,e)),t.restore()}},{key:\"performFill\",value:function(t,e){t.save(),t.fillStyle=e.color,this.enableShadow(t,e),hs(t).call(t),this.disableShadow(t,e),t.restore(),this.performStroke(t,e)}},{key:\"_addBoundingBoxMargin\",value:function(t){this.boundingBox.left-=t,this.boundingBox.top-=t,this.boundingBox.bottom+=t,this.boundingBox.right+=t}},{key:\"_updateBoundingBox\",value:function(t,e,i,n,o){void 0!==i&&this.resize(i,n,o),this.left=t-this.width/2,this.top=e-this.height/2,this.boundingBox.left=this.left,this.boundingBox.top=this.top,this.boundingBox.bottom=this.top+this.height,this.boundingBox.right=this.left+this.width}},{key:\"updateBoundingBox\",value:function(t,e,i,n,o){this._updateBoundingBox(t,e,i,n,o)}},{key:\"getDimensionsFromLabel\",value:function(t,e,i){this.textSize=this.labelModule.getTextSize(t,e,i);var n=this.textSize.width,o=this.textSize.height;return 0===n&&(n=14,o=14),{width:n,height:o}}}]),t}();function Eu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Ou=function(t){Ad(i,t);var e=Eu(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o))._setMargins(o),r}return Fn(i,[{key:\"resize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(this.needsRefresh(e,i)){var n=this.getDimensionsFromLabel(t,e,i);this.width=n.width+this.margin.right+this.margin.left,this.height=n.height+this.margin.top+this.margin.bottom,this.radius=this.width/2}}},{key:\"draw\",value:function(t,e,i,n,o,r){this.resize(t,n,o),this.left=e-this.width/2,this.top=i-this.height/2,this.initContextForDraw(t,r),Yt(t,this.left,this.top,this.width,this.height,r.borderRadius),this.performFill(t,r),this.updateBoundingBox(e,i,t,n,o),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,n,o)}},{key:\"updateBoundingBox\",value:function(t,e,i,n,o){this._updateBoundingBox(t,e,i,n,o);var r=this.options.shapeProperties.borderRadius;this._addBoundingBoxMargin(r)}},{key:\"distanceToBorder\",value:function(t,e){t&&this.resize(t);var i=this.options.borderWidth;return Math.min(Math.abs(this.width/2/Math.cos(e)),Math.abs(this.height/2/Math.sin(e)))+i}}]),i}(xu);function Cu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Su=function(t){Ad(i,t);var e=Cu(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o)).labelOffset=0,r.selected=!1,r}return Fn(i,[{key:\"setOptions\",value:function(t,e,i){this.options=t,void 0===e&&void 0===i||this.setImages(e,i)}},{key:\"setImages\",value:function(t,e){e&&this.selected?(this.imageObj=e,this.imageObjAlt=t):(this.imageObj=t,this.imageObjAlt=e)}},{key:\"switchImages\",value:function(t){var e=t&&!this.selected||!t&&this.selected;if(this.selected=t,void 0!==this.imageObjAlt&&e){var i=this.imageObj;this.imageObj=this.imageObjAlt,this.imageObjAlt=i}}},{key:\"_getImagePadding\",value:function(){var t={top:0,right:0,bottom:0,left:0};if(this.options.imagePadding){var e=this.options.imagePadding;\"object\"==go(e)?(t.top=e.top,t.right=e.right,t.bottom=e.bottom,t.left=e.left):(t.top=e,t.right=e,t.bottom=e,t.left=e)}return t}},{key:\"_resizeImage\",value:function(){var t,e;if(!1===this.options.shapeProperties.useImageSize){var i=1,n=1;this.imageObj.width&&this.imageObj.height&&(this.imageObj.width>this.imageObj.height?i=this.imageObj.width/this.imageObj.height:n=this.imageObj.height/this.imageObj.width),t=2*this.options.size*i,e=2*this.options.size*n}else{var o=this._getImagePadding();t=this.imageObj.width+o.left+o.right,e=this.imageObj.height+o.top+o.bottom}this.width=t,this.height=e,this.radius=.5*this.width}},{key:\"_drawRawCircle\",value:function(t,e,i,n){this.initContextForDraw(t,n),Ut(t,e,i,n.size),this.performFill(t,n)}},{key:\"_drawImageAtPosition\",value:function(t,e){if(0!=this.imageObj.width){t.globalAlpha=void 0!==e.opacity?e.opacity:1,this.enableShadow(t,e);var i=1;!0===this.options.shapeProperties.interpolation&&(i=this.imageObj.width/this.width/this.body.view.scale);var n=this._getImagePadding(),o=this.left+n.left,r=this.top+n.top,s=this.width-n.left-n.right,a=this.height-n.top-n.bottom;this.imageObj.drawImageAtPosition(t,i,o,r,s,a),this.disableShadow(t,e)}}},{key:\"_drawImageLabel\",value:function(t,e,i,n,o){var r=0;if(void 0!==this.height){r=.5*this.height;var s=this.labelModule.getTextSize(t,n,o);s.lineCount>=1&&(r+=s.height/2)}var a=i+r;this.options.label&&(this.labelOffset=r),this.labelModule.draw(t,e,a,n,o,\"hanging\")}}]),i}(xu);function Tu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Mu=function(t){Ad(i,t);var e=Tu(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o))._setMargins(o),r}return Fn(i,[{key:\"resize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(this.needsRefresh(e,i)){var n=this.getDimensionsFromLabel(t,e,i),o=Math.max(n.width+this.margin.right+this.margin.left,n.height+this.margin.top+this.margin.bottom);this.options.size=o/2,this.width=o,this.height=o,this.radius=this.width/2}}},{key:\"draw\",value:function(t,e,i,n,o,r){this.resize(t,n,o),this.left=e-this.width/2,this.top=i-this.height/2,this._drawRawCircle(t,e,i,r),this.updateBoundingBox(e,i),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,i,n,o)}},{key:\"updateBoundingBox\",value:function(t,e){this.boundingBox.top=e-this.options.size,this.boundingBox.left=t-this.options.size,this.boundingBox.right=t+this.options.size,this.boundingBox.bottom=e+this.options.size}},{key:\"distanceToBorder\",value:function(t){return t&&this.resize(t),.5*this.width}}]),i}(Su);function Pu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Du=function(t){Ad(i,t);var e=Pu(i);function i(t,n,o,r,s){var a;return Nn(this,i),(a=e.call(this,t,n,o)).setImages(r,s),a}return Fn(i,[{key:\"resize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover,n=void 0===this.imageObj.src||void 0===this.imageObj.width||void 0===this.imageObj.height;if(n){var o=2*this.options.size;return this.width=o,this.height=o,void(this.radius=.5*this.width)}this.needsRefresh(e,i)&&this._resizeImage()}},{key:\"draw\",value:function(t,e,i,n,o,r){this.switchImages(n),this.resize();var s=e,a=i;\"top-left\"===this.options.shapeProperties.coordinateOrigin?(this.left=e,this.top=i,s+=this.width/2,a+=this.height/2):(this.left=e-this.width/2,this.top=i-this.height/2),this._drawRawCircle(t,s,a,r),t.save(),t.clip(),this._drawImageAtPosition(t,r),t.restore(),this._drawImageLabel(t,s,a,n,o),this.updateBoundingBox(e,i)}},{key:\"updateBoundingBox\",value:function(t,e){\"top-left\"===this.options.shapeProperties.coordinateOrigin?(this.boundingBox.top=e,this.boundingBox.left=t,this.boundingBox.right=t+2*this.options.size,this.boundingBox.bottom=e+2*this.options.size):(this.boundingBox.top=e-this.options.size,this.boundingBox.left=t-this.options.size,this.boundingBox.right=t+this.options.size,this.boundingBox.bottom=e+this.options.size),this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelOffset)}},{key:\"distanceToBorder\",value:function(t){return t&&this.resize(t),.5*this.width}}]),i}(Su);function Iu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Bu=function(t){Ad(i,t);var e=Iu(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"resize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover,n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{size:this.options.size};if(this.needsRefresh(e,i)){var o,r;this.labelModule.getTextSize(t,e,i);var s=2*n.size;this.width=null!==(o=this.customSizeWidth)&&void 0!==o?o:s,this.height=null!==(r=this.customSizeHeight)&&void 0!==r?r:s,this.radius=.5*this.width}}},{key:\"_drawShape\",value:function(t,e,i,n,o,r,s,a){var h,l=this;return this.resize(t,r,s,a),this.left=n-this.width/2,this.top=o-this.height/2,this.initContextForDraw(t,a),(h=e,Object.prototype.hasOwnProperty.call($t,h)?$t[h]:function(t){for(var e=arguments.length,i=new Array(e>1?e-1:0),n=1;n<e;n++)i[n-1]=arguments[n];CanvasRenderingContext2D.prototype[h].call(t,i)})(t,n,o,a.size),this.performFill(t,a),void 0!==this.options.icon&&void 0!==this.options.icon.code&&(t.font=(r?\"bold \":\"\")+this.height/2+\"px \"+(this.options.icon.face||\"FontAwesome\"),t.fillStyle=this.options.icon.color||\"black\",t.textAlign=\"center\",t.textBaseline=\"middle\",t.fillText(this.options.icon.code,n,o)),{drawExternalLabel:function(){if(void 0!==l.options.label){l.labelModule.calculateLabelSize(t,r,s,n,o,\"hanging\");var e=o+.5*l.height+.5*l.labelModule.size.height;l.labelModule.draw(t,n,e,r,s,\"hanging\")}l.updateBoundingBox(n,o)}}}},{key:\"updateBoundingBox\",value:function(t,e){this.boundingBox.top=e-this.options.size,this.boundingBox.left=t-this.options.size,this.boundingBox.right=t+this.options.size,this.boundingBox.bottom=e+this.options.size,void 0!==this.options.label&&this.labelModule.size.width>0&&(this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelModule.size.height))}}]),i}(xu);function zu(t,e){var i=zo(t);if(On){var n=On(t);e&&(n=mr(n).call(n,(function(e){return Mn(t,e).enumerable}))),i.push.apply(i,n)}return i}function Nu(t){for(var e=1;e<arguments.length;e++){var i,n=null!=arguments[e]?arguments[e]:{};if(e%2)Wo(i=zu(Object(n),!0)).call(i,(function(e){jn(t,e,n[e])}));else if(Dn)In(t,Dn(n));else{var o;Wo(o=zu(Object(n))).call(o,(function(e){zn(t,e,Mn(n,e))}))}}return t}function Au(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Fu=function(t){Ad(i,t);var e=Au(i);function i(t,n,o,r){var s;return Nn(this,i),(s=e.call(this,t,n,o,r)).ctxRenderer=r,s}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){this.resize(t,n,o,r),this.left=e-this.width/2,this.top=i-this.height/2,t.save();var s=this.ctxRenderer({ctx:t,id:this.options.id,x:e,y:i,state:{selected:n,hover:o},style:Nu({},r),label:this.options.label});if(null!=s.drawNode&&s.drawNode(),t.restore(),s.drawExternalLabel){var a=s.drawExternalLabel;s.drawExternalLabel=function(){t.save(),a(),t.restore()}}return s.nodeDimensions&&(this.customSizeWidth=s.nodeDimensions.width,this.customSizeHeight=s.nodeDimensions.height),s}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Bu);function ju(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Ru=function(t){Ad(i,t);var e=ju(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o))._setMargins(o),r}return Fn(i,[{key:\"resize\",value:function(t,e,i){if(this.needsRefresh(e,i)){var n=this.getDimensionsFromLabel(t,e,i).width+this.margin.right+this.margin.left;this.width=n,this.height=n,this.radius=this.width/2}}},{key:\"draw\",value:function(t,e,i,n,o,r){this.resize(t,n,o),this.left=e-this.width/2,this.top=i-this.height/2,this.initContextForDraw(t,r),Gt(t,e-this.width/2,i-this.height/2,this.width,this.height),this.performFill(t,r),this.updateBoundingBox(e,i,t,n,o),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,n,o)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(xu);function Lu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Hu=function(t){Ad(i,t);var e=Lu(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){return this._drawShape(t,\"diamond\",4,e,i,n,o,r)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Bu);function Wu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var qu=function(t){Ad(i,t);var e=Wu(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){return this._drawShape(t,\"circle\",2,e,i,n,o,r)}},{key:\"distanceToBorder\",value:function(t){return t&&this.resize(t),this.options.size}}]),i}(Bu);function Vu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Uu=function(t){Ad(i,t);var e=Vu(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"resize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(this.needsRefresh(e,i)){var n=this.getDimensionsFromLabel(t,e,i);this.height=2*n.height,this.width=n.width+n.height,this.radius=.5*this.width}}},{key:\"draw\",value:function(t,e,i,n,o,r){this.resize(t,n,o),this.left=e-.5*this.width,this.top=i-.5*this.height,this.initContextForDraw(t,r),Xt(t,this.left,this.top,this.width,this.height),this.performFill(t,r),this.updateBoundingBox(e,i,t,n,o),this.labelModule.draw(t,e,i,n,o)}},{key:\"distanceToBorder\",value:function(t,e){t&&this.resize(t);var i=.5*this.width,n=.5*this.height,o=Math.sin(e)*i,r=Math.cos(e)*n;return i*n/Math.sqrt(o*o+r*r)}}]),i}(xu);function Yu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Xu=function(t){Ad(i,t);var e=Yu(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o))._setMargins(o),r}return Fn(i,[{key:\"resize\",value:function(t,e,i){this.needsRefresh(e,i)&&(this.iconSize={width:Number(this.options.icon.size),height:Number(this.options.icon.size)},this.width=this.iconSize.width+this.margin.right+this.margin.left,this.height=this.iconSize.height+this.margin.top+this.margin.bottom,this.radius=.5*this.width)}},{key:\"draw\",value:function(t,e,i,n,o,r){var s=this;return this.resize(t,n,o),this.options.icon.size=this.options.icon.size||50,this.left=e-this.width/2,this.top=i-this.height/2,this._icon(t,e,i,n,o,r),{drawExternalLabel:function(){if(void 0!==s.options.label){s.labelModule.draw(t,s.left+s.iconSize.width/2+s.margin.left,i+s.height/2+5,n)}s.updateBoundingBox(e,i)}}}},{key:\"updateBoundingBox\",value:function(t,e){if(this.boundingBox.top=e-.5*this.options.icon.size,this.boundingBox.left=t-.5*this.options.icon.size,this.boundingBox.right=t+.5*this.options.icon.size,this.boundingBox.bottom=e+.5*this.options.icon.size,void 0!==this.options.label&&this.labelModule.size.width>0){this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelModule.size.height+5)}}},{key:\"_icon\",value:function(t,e,i,n,o,r){var s=Number(this.options.icon.size);void 0!==this.options.icon.code?(t.font=[null!=this.options.icon.weight?this.options.icon.weight:n?\"bold\":\"\",(null!=this.options.icon.weight&&n?5:0)+s+\"px\",this.options.icon.face].join(\" \"),t.fillStyle=this.options.icon.color||\"black\",t.textAlign=\"center\",t.textBaseline=\"middle\",this.enableShadow(t,r),t.fillText(this.options.icon.code,e,i),this.disableShadow(t,r)):console.error(\"When using the icon shape, you need to define the code in the icon options object. This can be done per node or globally.\")}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(xu);function Gu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Ku=function(t){Ad(i,t);var e=Gu(i);function i(t,n,o,r,s){var a;return Nn(this,i),(a=e.call(this,t,n,o)).setImages(r,s),a}return Fn(i,[{key:\"resize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover,n=void 0===this.imageObj.src||void 0===this.imageObj.width||void 0===this.imageObj.height;if(n){var o=2*this.options.size;return this.width=o,void(this.height=o)}this.needsRefresh(e,i)&&this._resizeImage()}},{key:\"draw\",value:function(t,e,i,n,o,r){t.save(),this.switchImages(n),this.resize();var s=e,a=i;if(\"top-left\"===this.options.shapeProperties.coordinateOrigin?(this.left=e,this.top=i,s+=this.width/2,a+=this.height/2):(this.left=e-this.width/2,this.top=i-this.height/2),!0===this.options.shapeProperties.useBorderWithImage){var h=this.options.borderWidth,l=this.options.borderWidthSelected||2*this.options.borderWidth,d=(n?l:h)/this.body.view.scale;t.lineWidth=Math.min(this.width,d),t.beginPath();var c=n?this.options.color.highlight.border:o?this.options.color.hover.border:this.options.color.border,u=n?this.options.color.highlight.background:o?this.options.color.hover.background:this.options.color.background;void 0!==r.opacity&&(c=Fh(c,r.opacity),u=Fh(u,r.opacity)),t.strokeStyle=c,t.fillStyle=u,t.rect(this.left-.5*t.lineWidth,this.top-.5*t.lineWidth,this.width+t.lineWidth,this.height+t.lineWidth),hs(t).call(t),this.performStroke(t,r),t.closePath()}this._drawImageAtPosition(t,r),this._drawImageLabel(t,s,a,n,o),this.updateBoundingBox(e,i),t.restore()}},{key:\"updateBoundingBox\",value:function(t,e){this.resize(),\"top-left\"===this.options.shapeProperties.coordinateOrigin?(this.left=t,this.top=e):(this.left=t-this.width/2,this.top=e-this.height/2),this.boundingBox.left=this.left,this.boundingBox.top=this.top,this.boundingBox.bottom=this.top+this.height,this.boundingBox.right=this.left+this.width,void 0!==this.options.label&&this.labelModule.size.width>0&&(this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelOffset))}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Su);function $u(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Zu=function(t){Ad(i,t);var e=$u(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){return this._drawShape(t,\"square\",2,e,i,n,o,r)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Bu);function Qu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Ju=function(t){Ad(i,t);var e=Qu(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){return this._drawShape(t,\"hexagon\",4,e,i,n,o,r)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Bu);function tf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var ef=function(t){Ad(i,t);var e=tf(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){return this._drawShape(t,\"star\",4,e,i,n,o,r)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Bu);function nf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var of=function(t){Ad(i,t);var e=nf(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o))._setMargins(o),r}return Fn(i,[{key:\"resize\",value:function(t,e,i){this.needsRefresh(e,i)&&(this.textSize=this.labelModule.getTextSize(t,e,i),this.width=this.textSize.width+this.margin.right+this.margin.left,this.height=this.textSize.height+this.margin.top+this.margin.bottom,this.radius=.5*this.width)}},{key:\"draw\",value:function(t,e,i,n,o,r){this.resize(t,n,o),this.left=e-this.width/2,this.top=i-this.height/2,this.enableShadow(t,r),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,n,o),this.disableShadow(t,r),this.updateBoundingBox(e,i,t,n,o)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(xu);function rf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var sf=function(t){Ad(i,t);var e=rf(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){return this._drawShape(t,\"triangle\",3,e,i,n,o,r)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Bu);function af(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var hf=function(t){Ad(i,t);var e=af(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){return this._drawShape(t,\"triangleDown\",3,e,i,n,o,r)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Bu);function lf(t,e){var i=zo(t);if(On){var n=On(t);e&&(n=mr(n).call(n,(function(e){return Mn(t,e).enumerable}))),i.push.apply(i,n)}return i}function df(t){for(var e=1;e<arguments.length;e++){var i,n=null!=arguments[e]?arguments[e]:{};if(e%2)Wo(i=lf(Object(n),!0)).call(i,(function(e){jn(t,e,n[e])}));else if(Dn)In(t,Dn(n));else{var o;Wo(o=lf(Object(n))).call(o,(function(e){zn(t,e,Mn(n,e))}))}}return t}var cf=function(){function t(e,i,n,o,r,s){Nn(this,t),this.options=Kh(r),this.globalOptions=r,this.defaultOptions=s,this.body=i,this.edges=[],this.id=void 0,this.imagelist=n,this.grouplist=o,this.x=void 0,this.y=void 0,this.baseSize=this.options.size,this.baseFontSize=this.options.font.size,this.predefinedPosition=!1,this.selected=!1,this.hover=!1,this.labelModule=new _u(this.body,this.options,!1),this.setOptions(e)}return Fn(t,[{key:\"attachEdge\",value:function(t){var e;-1===Hr(e=this.edges).call(e,t)&&this.edges.push(t)}},{key:\"detachEdge\",value:function(t){var e,i,n=Hr(e=this.edges).call(e,t);-1!=n&&er(i=this.edges).call(i,n,1)}},{key:\"setOptions\",value:function(e){var i=this.options.shape;if(e){if(void 0!==e.color&&(this._localColor=e.color),void 0!==e.id&&(this.id=e.id),void 0===this.id)throw new Error(\"Node must have an id\");t.checkMass(e,this.id),void 0!==e.x&&(null===e.x?(this.x=void 0,this.predefinedPosition=!1):(this.x=Br(e.x),this.predefinedPosition=!0)),void 0!==e.y&&(null===e.y?(this.y=void 0,this.predefinedPosition=!1):(this.y=Br(e.y),this.predefinedPosition=!0)),void 0!==e.size&&(this.baseSize=e.size),void 0!==e.value&&(e.value=hu(e.value)),t.parseOptions(this.options,e,!0,this.globalOptions,this.grouplist);var n=[e,this.options,this.defaultOptions];return this.chooser=fu(\"node\",n),this._load_images(),this.updateLabelModule(e),void 0!==e.opacity&&t.checkOpacity(e.opacity)&&(this.options.opacity=e.opacity),this.updateShape(i),void 0!==e.hidden||void 0!==e.physics}}},{key:\"_load_images\",value:function(){if((\"circularImage\"===this.options.shape||\"image\"===this.options.shape)&&void 0===this.options.image)throw new Error(\"Option image must be defined for node type '\"+this.options.shape+\"'\");if(void 0!==this.options.image){if(void 0===this.imagelist)throw new Error(\"Internal Error: No images provided\");if(\"string\"==typeof this.options.image)this.imageObj=this.imagelist.load(this.options.image,this.options.brokenImage,this.id);else{if(void 0===this.options.image.unselected)throw new Error(\"No unselected image provided\");this.imageObj=this.imagelist.load(this.options.image.unselected,this.options.brokenImage,this.id),void 0!==this.options.image.selected?this.imageObjAlt=this.imagelist.load(this.options.image.selected,this.options.brokenImage,this.id):this.imageObjAlt=void 0}}}},{key:\"getFormattingValues\",value:function(){var t={color:this.options.color.background,opacity:this.options.opacity,borderWidth:this.options.borderWidth,borderColor:this.options.color.border,size:this.options.size,borderDashes:this.options.shapeProperties.borderDashes,borderRadius:this.options.shapeProperties.borderRadius,shadow:this.options.shadow.enabled,shadowColor:this.options.shadow.color,shadowSize:this.options.shadow.size,shadowX:this.options.shadow.x,shadowY:this.options.shadow.y};if(this.selected||this.hover?!0===this.chooser?this.selected?(null!=this.options.borderWidthSelected?t.borderWidth=this.options.borderWidthSelected:t.borderWidth*=2,t.color=this.options.color.highlight.background,t.borderColor=this.options.color.highlight.border,t.shadow=this.options.shadow.enabled):this.hover&&(t.color=this.options.color.hover.background,t.borderColor=this.options.color.hover.border,t.shadow=this.options.shadow.enabled):\"function\"==typeof this.chooser&&(this.chooser(t,this.options.id,this.selected,this.hover),!1===t.shadow&&(t.shadowColor===this.options.shadow.color&&t.shadowSize===this.options.shadow.size&&t.shadowX===this.options.shadow.x&&t.shadowY===this.options.shadow.y||(t.shadow=!0))):t.shadow=this.options.shadow.enabled,void 0!==this.options.opacity){var e=this.options.opacity;t.borderColor=Fh(t.borderColor,e),t.color=Fh(t.color,e),t.shadowColor=Fh(t.shadowColor,e)}return t}},{key:\"updateLabelModule\",value:function(e){void 0!==this.options.label&&null!==this.options.label||(this.options.label=\"\"),t.updateGroupOptions(this.options,df(df({},e),{},{color:e&&e.color||this._localColor||void 0}),this.grouplist);var i=this.grouplist.get(this.options.group,!1),n=[e,this.options,i,this.globalOptions,this.defaultOptions];this.labelModule.update(this.options,n),void 0!==this.labelModule.baseSize&&(this.baseFontSize=this.labelModule.baseSize)}},{key:\"updateShape\",value:function(t){if(t===this.options.shape&&this.shape)this.shape.setOptions(this.options,this.imageObj,this.imageObjAlt);else switch(this.options.shape){case\"box\":this.shape=new Ou(this.options,this.body,this.labelModule);break;case\"circle\":this.shape=new Mu(this.options,this.body,this.labelModule);break;case\"circularImage\":this.shape=new Du(this.options,this.body,this.labelModule,this.imageObj,this.imageObjAlt);break;case\"custom\":this.shape=new Fu(this.options,this.body,this.labelModule,this.options.ctxRenderer);break;case\"database\":this.shape=new Ru(this.options,this.body,this.labelModule);break;case\"diamond\":this.shape=new Hu(this.options,this.body,this.labelModule);break;case\"dot\":this.shape=new qu(this.options,this.body,this.labelModule);break;case\"ellipse\":this.shape=new Uu(this.options,this.body,this.labelModule);break;case\"icon\":this.shape=new Xu(this.options,this.body,this.labelModule);break;case\"image\":this.shape=new Ku(this.options,this.body,this.labelModule,this.imageObj,this.imageObjAlt);break;case\"square\":this.shape=new Zu(this.options,this.body,this.labelModule);break;case\"hexagon\":this.shape=new Ju(this.options,this.body,this.labelModule);break;case\"star\":this.shape=new ef(this.options,this.body,this.labelModule);break;case\"text\":this.shape=new of(this.options,this.body,this.labelModule);break;case\"triangle\":this.shape=new sf(this.options,this.body,this.labelModule);break;case\"triangleDown\":this.shape=new hf(this.options,this.body,this.labelModule);break;default:this.shape=new Uu(this.options,this.body,this.labelModule)}this.needsRefresh()}},{key:\"select\",value:function(){this.selected=!0,this.needsRefresh()}},{key:\"unselect\",value:function(){this.selected=!1,this.needsRefresh()}},{key:\"needsRefresh\",value:function(){this.shape.refreshNeeded=!0}},{key:\"getTitle\",value:function(){return this.options.title}},{key:\"distanceToBorder\",value:function(t,e){return this.shape.distanceToBorder(t,e)}},{key:\"isFixed\",value:function(){return this.options.fixed.x&&this.options.fixed.y}},{key:\"isSelected\",value:function(){return this.selected}},{key:\"getValue\",value:function(){return this.options.value}},{key:\"getLabelSize\",value:function(){return this.labelModule.size()}},{key:\"setValueRange\",value:function(t,e,i){if(void 0!==this.options.value){var n=this.options.scaling.customScalingFunction(t,e,i,this.options.value),o=this.options.scaling.max-this.options.scaling.min;if(!0===this.options.scaling.label.enabled){var r=this.options.scaling.label.max-this.options.scaling.label.min;this.options.font.size=this.options.scaling.label.min+n*r}this.options.size=this.options.scaling.min+n*o}else this.options.size=this.baseSize,this.options.font.size=this.baseFontSize;this.updateLabelModule()}},{key:\"draw\",value:function(t){var e=this.getFormattingValues();return this.shape.draw(t,this.x,this.y,this.selected,this.hover,e)||{}}},{key:\"updateBoundingBox\",value:function(t){this.shape.updateBoundingBox(this.x,this.y,t)}},{key:\"resize\",value:function(t){var e=this.getFormattingValues();this.shape.resize(t,this.selected,this.hover,e)}},{key:\"getItemsOnPoint\",value:function(t){var e=[];return this.labelModule.visible()&&pu(this.labelModule.getSize(),t)&&e.push({nodeId:this.id,labelId:0}),pu(this.shape.boundingBox,t)&&e.push({nodeId:this.id}),e}},{key:\"isOverlappingWith\",value:function(t){return this.shape.left<t.right&&this.shape.left+this.shape.width>t.left&&this.shape.top<t.bottom&&this.shape.top+this.shape.height>t.top}},{key:\"isBoundingBoxOverlappingWith\",value:function(t){return this.shape.boundingBox.left<t.right&&this.shape.boundingBox.right>t.left&&this.shape.boundingBox.top<t.bottom&&this.shape.boundingBox.bottom>t.top}}],[{key:\"checkOpacity\",value:function(t){return 0<=t&&t<=1}},{key:\"checkCoordinateOrigin\",value:function(t){return void 0===t||\"center\"===t||\"top-left\"===t}},{key:\"updateGroupOptions\",value:function(e,i,n){var o;if(void 0!==n){var r=e.group;if(void 0!==i&&void 0!==i.group&&r!==i.group)throw new Error(\"updateGroupOptions: group values in options don't match.\");if(\"number\"==typeof r||\"string\"==typeof r&&\"\"!=r){var s=n.get(r);void 0!==s.opacity&&void 0===i.opacity&&(t.checkOpacity(s.opacity)||(console.error(\"Invalid option for node opacity. Value must be between 0 and 1, found: \"+s.opacity),s.opacity=void 0));var a=mr(o=uu(i)).call(o,(function(t){return null!=i[t]}));a.push(\"font\"),Oh(a,e,s),e.color=Rh(e.color)}}}},{key:\"parseOptions\",value:function(e,i){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},r=arguments.length>4?arguments[4]:void 0,s=[\"color\",\"fixed\",\"shadow\"];if(Oh(s,e,i,n),t.checkMass(i),void 0!==e.opacity&&(t.checkOpacity(e.opacity)||(console.error(\"Invalid option for node opacity. Value must be between 0 and 1, found: \"+e.opacity),e.opacity=void 0)),void 0!==i.opacity&&(t.checkOpacity(i.opacity)||(console.error(\"Invalid option for node opacity. Value must be between 0 and 1, found: \"+i.opacity),i.opacity=void 0)),i.shapeProperties&&!t.checkCoordinateOrigin(i.shapeProperties.coordinateOrigin)&&console.error(\"Invalid option for node coordinateOrigin, found: \"+i.shapeProperties.coordinateOrigin),$h(e,i,\"shadow\",o),void 0!==i.color&&null!==i.color){var a=Rh(i.color);_h(e.color,a)}else!0===n&&null===i.color&&(e.color=Kh(o.color));void 0!==i.fixed&&null!==i.fixed&&(\"boolean\"==typeof i.fixed?(e.fixed.x=i.fixed,e.fixed.y=i.fixed):(void 0!==i.fixed.x&&\"boolean\"==typeof i.fixed.x&&(e.fixed.x=i.fixed.x),void 0!==i.fixed.y&&\"boolean\"==typeof i.fixed.y&&(e.fixed.y=i.fixed.y))),!0===n&&null===i.font&&(e.font=Kh(o.font)),t.updateGroupOptions(e,i,r),void 0!==i.scaling&&$h(e.scaling,i.scaling,\"label\",o.scaling)}},{key:\"checkMass\",value:function(t,e){if(void 0!==t.mass&&t.mass<=0){var i=\"\";void 0!==e&&(i=\" in node id: \"+e),console.error(\"%cNegative or zero mass disallowed\"+i+\", setting mass to 1.\",cl),t.mass=1}}}]),t}();function uf(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return ff(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return ff(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function ff(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}var pf=function(){function t(e,i,n,o){var r,s=this;if(Nn(this,t),this.body=e,this.images=i,this.groups=n,this.layoutEngine=o,this.body.functions.createNode=Vt(r=this.create).call(r,this),this.nodesListeners={add:function(t,e){s.add(e.items)},update:function(t,e){s.update(e.items,e.data,e.oldData)},remove:function(t,e){s.remove(e.items)}},this.defaultOptions={borderWidth:1,borderWidthSelected:void 0,brokenImage:void 0,color:{border:\"#2B7CE9\",background:\"#97C2FC\",highlight:{border:\"#2B7CE9\",background:\"#D2E5FF\"},hover:{border:\"#2B7CE9\",background:\"#D2E5FF\"}},opacity:void 0,fixed:{x:!1,y:!1},font:{color:\"#343434\",size:14,face:\"arial\",background:\"none\",strokeWidth:0,strokeColor:\"#ffffff\",align:\"center\",vadjust:0,multi:!1,bold:{mod:\"bold\"},boldital:{mod:\"bold italic\"},ital:{mod:\"italic\"},mono:{mod:\"\",size:15,face:\"monospace\",vadjust:2}},group:void 0,hidden:!1,icon:{face:\"FontAwesome\",code:void 0,size:50,color:\"#2B7CE9\"},image:void 0,imagePadding:{top:0,right:0,bottom:0,left:0},label:void 0,labelHighlightBold:!0,level:void 0,margin:{top:5,right:5,bottom:5,left:5},mass:1,physics:!0,scaling:{min:10,max:30,label:{enabled:!1,min:14,max:30,maxVisible:30,drawThreshold:5},customScalingFunction:function(t,e,i,n){if(e===t)return.5;var o=1/(e-t);return Math.max(0,(n-t)*o)}},shadow:{enabled:!1,color:\"rgba(0,0,0,0.5)\",size:10,x:5,y:5},shape:\"ellipse\",shapeProperties:{borderDashes:!1,borderRadius:6,interpolation:!0,useImageSize:!1,useBorderWithImage:!1,coordinateOrigin:\"center\"},size:25,title:void 0,value:void 0,x:void 0,y:void 0},this.defaultOptions.mass<=0)throw\"Internal error: mass in defaultOptions of NodesHandler may not be zero or negative\";this.options=Kh(this.defaultOptions),this.bindEventListeners()}return Fn(t,[{key:\"bindEventListeners\",value:function(){var t,e,i=this;this.body.emitter.on(\"refreshNodes\",Vt(t=this.refresh).call(t,this)),this.body.emitter.on(\"refresh\",Vt(e=this.refresh).call(e,this)),this.body.emitter.on(\"destroy\",(function(){Dh(i.nodesListeners,(function(t,e){i.body.data.nodes&&i.body.data.nodes.off(e,t)})),delete i.body.functions.createNode,delete i.nodesListeners.add,delete i.nodesListeners.update,delete i.nodesListeners.remove,delete i.nodesListeners}))}},{key:\"setOptions\",value:function(t){if(void 0!==t){if(cf.parseOptions(this.options,t),void 0!==t.opacity&&(yd(t.opacity)||!wd(t.opacity)||t.opacity<0||t.opacity>1?console.error(\"Invalid option for node opacity. Value must be between 0 and 1, found: \"+t.opacity):this.options.opacity=t.opacity),void 0!==t.shape)for(var e in this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,e)&&this.body.nodes[e].updateShape();if(void 0!==t.font||void 0!==t.widthConstraint||void 0!==t.heightConstraint)for(var i=0,n=zo(this.body.nodes);i<n.length;i++){var o=n[i];this.body.nodes[o].updateLabelModule(),this.body.nodes[o].needsRefresh()}if(void 0!==t.size)for(var r in this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,r)&&this.body.nodes[r].needsRefresh();void 0===t.hidden&&void 0===t.physics||this.body.emitter.emit(\"_dataChanged\")}}},{key:\"setData\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=this.body.data.nodes;if(nu(\"id\",t))this.body.data.nodes=t;else if(So(t))this.body.data.nodes=new tu,this.body.data.nodes.add(t);else{if(t)throw new TypeError(\"Array or DataSet expected\");this.body.data.nodes=new tu}if(i&&Dh(this.nodesListeners,(function(t,e){i.off(e,t)})),this.body.nodes={},this.body.data.nodes){var n=this;Dh(this.nodesListeners,(function(t,e){n.body.data.nodes.on(e,t)}));var o=this.body.data.nodes.getIds();this.add(o,!0)}!1===e&&this.body.emitter.emit(\"_dataChanged\")}},{key:\"add\",value:function(t){for(var e,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=[],o=0;o<t.length;o++){e=t[o];var r=this.body.data.nodes.get(e),s=this.create(r);n.push(s),this.body.nodes[e]=s}this.layoutEngine.positionInitially(n),!1===i&&this.body.emitter.emit(\"_dataChanged\")}},{key:\"update\",value:function(t,e,i){for(var n=this.body.nodes,o=!1,r=0;r<t.length;r++){var s=t[r],a=n[s],h=e[r];void 0!==a?a.setOptions(h)&&(o=!0):(o=!0,a=this.create(h),n[s]=a)}o||void 0===i||(o=Od(e).call(e,(function(t,e){var n=i[e];return n&&n.level!==t.level}))),!0===o?this.body.emitter.emit(\"_dataChanged\"):this.body.emitter.emit(\"_dataUpdated\")}},{key:\"remove\",value:function(t){for(var e=this.body.nodes,i=0;i<t.length;i++){delete e[t[i]]}this.body.emitter.emit(\"_dataChanged\")}},{key:\"create\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:cf;return new e(t,this.body,this.images,this.groups,this.options,this.defaultOptions)}},{key:\"refresh\",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];Dh(this.body.nodes,(function(i,n){var o=t.body.data.nodes.get(n);void 0!==o&&(!0===e&&i.setOptions({x:null,y:null}),i.setOptions({fixed:!1}),i.setOptions(o))}))}},{key:\"getPositions\",value:function(t){var e={};if(void 0!==t){if(!0===So(t)){for(var i=0;i<t.length;i++)if(void 0!==this.body.nodes[t[i]]){var n=this.body.nodes[t[i]];e[t[i]]={x:Math.round(n.x),y:Math.round(n.y)}}}else if(void 0!==this.body.nodes[t]){var o=this.body.nodes[t];e[t]={x:Math.round(o.x),y:Math.round(o.y)}}}else for(var r=0;r<this.body.nodeIndices.length;r++){var s=this.body.nodes[this.body.nodeIndices[r]];e[this.body.nodeIndices[r]]={x:Math.round(s.x),y:Math.round(s.y)}}return e}},{key:\"getPosition\",value:function(t){if(null==t)throw new TypeError(\"No id was specified for getPosition method.\");if(null==this.body.nodes[t])throw new ReferenceError(\"NodeId provided for getPosition does not exist. Provided: \".concat(t));return{x:Math.round(this.body.nodes[t].x),y:Math.round(this.body.nodes[t].y)}}},{key:\"storePositions\",value:function(){var t,e=[],i=this.body.data.nodes.getDataSet(),n=uf(i.get());try{for(n.s();!(t=n.n()).done;){var o=t.value,r=o.id,s=this.body.nodes[r],a=Math.round(s.x),h=Math.round(s.y);o.x===a&&o.y===h||e.push({id:r,x:a,y:h})}}catch(t){n.e(t)}finally{n.f()}i.update(e)}},{key:\"getBoundingBox\",value:function(t){if(void 0!==this.body.nodes[t])return this.body.nodes[t].shape.boundingBox}},{key:\"getConnectedNodes\",value:function(t,e){var i=[];if(void 0!==this.body.nodes[t])for(var n=this.body.nodes[t],o={},r=0;r<n.edges.length;r++){var s=n.edges[r];\"to\"!==e&&s.toId==n.id?void 0===o[s.fromId]&&(i.push(s.fromId),o[s.fromId]=!0):\"from\"!==e&&s.fromId==n.id&&void 0===o[s.toId]&&(i.push(s.toId),o[s.toId]=!0)}return i}},{key:\"getConnectedEdges\",value:function(t){var e=[];if(void 0!==this.body.nodes[t])for(var i=this.body.nodes[t],n=0;n<i.edges.length;n++)e.push(i.edges[n].id);else console.error(\"NodeId provided for getConnectedEdges does not exist. Provided: \",t);return e}},{key:\"moveNode\",value:function(t,e,i){var n=this;void 0!==this.body.nodes[t]?(this.body.nodes[t].x=Number(e),this.body.nodes[t].y=Number(i),rs((function(){n.body.emitter.emit(\"startSimulation\")}),0)):console.error(\"Node id supplied to moveNode does not exist. Provided: \",t)}}]),t}();gt({target:\"Reflect\",stat:!0},{get:function t(e,i){var n,o,r=arguments.length<3?e:arguments[2];return dt(e)===r?e[i]:(n=tt.f(e,i))?j(n,\"value\")?n.value:void 0===n.get?void 0:n.get.call(r):w(o=Ee(e))?t(o,i,r):void 0}});var vf=k.Reflect.get,gf=Tn,yf=n((function(t){t.exports=function(t,e){for(;!Object.prototype.hasOwnProperty.call(t,e)&&null!==(t=Rd(t)););return t},t.exports.default=t.exports,t.exports.__esModule=!0}));i(yf);var mf=i(n((function(t){function e(i,n,o){return\"undefined\"!=typeof Reflect&&vf?(t.exports=e=vf,t.exports.default=t.exports,t.exports.__esModule=!0):(t.exports=e=function(t,e,i){var n=yf(t,e);if(n){var o=gf(n,e);return o.get?o.get.call(i):o.value}},t.exports.default=t.exports,t.exports.__esModule=!0),e(i,n,o||i)}t.exports=e,t.exports.default=t.exports,t.exports.__esModule=!0}))),bf=Math.hypot,wf=Math.abs,kf=Math.sqrt,_f=!!bf&&bf(1/0,NaN)!==1/0;gt({target:\"Math\",stat:!0,forced:_f},{hypot:function(t,e){for(var i,n,o=0,r=0,s=arguments.length,a=0;r<s;)a<(i=wf(arguments[r++]))?(o=o*(n=a/i)*n+1,a=i):o+=i>0?(n=i/a)*n:i;return a===1/0?1/0:a*kf(o)}});var xf=k.Math.hypot;function Ef(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Of=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"transform\",value:function(t,e){So(t)||(t=[t]);for(var i=e.point.x,n=e.point.y,o=e.angle,r=e.length,s=0;s<t.length;++s){var a=t[s],h=a.x*Math.cos(o)-a.y*Math.sin(o),l=a.x*Math.sin(o)+a.y*Math.cos(o);a.x=i+r*h,a.y=n+r*l}}},{key:\"drawPath\",value:function(t,e){t.beginPath(),t.moveTo(e[0].x,e[0].y);for(var i=1;i<e.length;++i)t.lineTo(e[i].x,e[i].y);t.closePath()}}]),t}(),Cf=function(t){Ad(i,t);var e=Ef(i);function i(){return Nn(this,i),e.apply(this,arguments)}return Fn(i,null,[{key:\"draw\",value:function(t,e){if(e.image){t.save(),t.translate(e.point.x,e.point.y),t.rotate(Math.PI/2+e.angle);var i=null!=e.imageWidth?e.imageWidth:e.image.width,n=null!=e.imageHeight?e.imageHeight:e.image.height;e.image.drawImageAtPosition(t,1,-i/2,0,i,n),t.restore()}return!1}}]),i}(Of),Sf=function(t){Ad(i,t);var e=Ef(i);function i(){return Nn(this,i),e.apply(this,arguments)}return Fn(i,null,[{key:\"draw\",value:function(t,e){var i=[{x:0,y:0},{x:-1,y:.3},{x:-.9,y:0},{x:-1,y:-.3}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),i}(Of),Tf=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i=[{x:-1,y:0},{x:0,y:.3},{x:-.4,y:0},{x:0,y:-.3}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),t}(),Mf=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i={x:-.4,y:0};Of.transform(i,e),t.strokeStyle=t.fillStyle,t.fillStyle=\"rgba(0, 0, 0, 0)\";var n=Math.PI,o=e.angle-n/2,r=e.angle+n/2;return t.beginPath(),t.arc(i.x,i.y,.4*e.length,o,r,!1),t.stroke(),!0}}]),t}(),Pf=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i={x:-.3,y:0};Of.transform(i,e),t.strokeStyle=t.fillStyle,t.fillStyle=\"rgba(0, 0, 0, 0)\";var n=Math.PI,o=e.angle+n/2,r=e.angle+3*n/2;return t.beginPath(),t.arc(i.x,i.y,.4*e.length,o,r,!1),t.stroke(),!0}}]),t}(),Df=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i=[{x:.02,y:0},{x:-1,y:.3},{x:-1,y:-.3}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),t}(),If=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i=[{x:0,y:.3},{x:0,y:-.3},{x:-1,y:0}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),t}(),Bf=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i={x:-.4,y:0};return Of.transform(i,e),Ut(t,i.x,i.y,.4*e.length),!0}}]),t}(),zf=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i=[{x:0,y:.5},{x:0,y:-.5},{x:-.15,y:-.5},{x:-.15,y:.5}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),t}(),Nf=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i=[{x:0,y:.3},{x:0,y:-.3},{x:-.6,y:-.3},{x:-.6,y:.3}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),t}(),Af=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i=[{x:0,y:0},{x:-.5,y:-.3},{x:-1,y:0},{x:-.5,y:.3}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),t}(),Ff=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i=[{x:-1,y:.3},{x:-.5,y:0},{x:-1,y:-.3},{x:0,y:0}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),t}(),jf=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i;switch(e.type&&(i=e.type.toLowerCase()),i){case\"image\":return Cf.draw(t,e);case\"circle\":return Bf.draw(t,e);case\"box\":return Nf.draw(t,e);case\"crow\":return Tf.draw(t,e);case\"curve\":return Mf.draw(t,e);case\"diamond\":return Af.draw(t,e);case\"inv_curve\":return Pf.draw(t,e);case\"triangle\":return Df.draw(t,e);case\"inv_triangle\":return If.draw(t,e);case\"bar\":return zf.draw(t,e);case\"vee\":return Ff.draw(t,e);case\"arrow\":default:return Sf.draw(t,e)}}}]),t}();function Rf(t,e){var i=zo(t);if(On){var n=On(t);e&&(n=mr(n).call(n,(function(e){return Mn(t,e).enumerable}))),i.push.apply(i,n)}return i}function Lf(t){for(var e=1;e<arguments.length;e++){var i,n=null!=arguments[e]?arguments[e]:{};if(e%2)Wo(i=Rf(Object(n),!0)).call(i,(function(e){jn(t,e,n[e])}));else if(Dn)In(t,Dn(n));else{var o;Wo(o=Rf(Object(n))).call(o,(function(e){zn(t,e,Mn(n,e))}))}}return t}var Hf=function(){function t(e,i,n){Nn(this,t),this._body=i,this._labelModule=n,this.color={},this.colorDirty=!0,this.hoverWidth=1.5,this.selectionWidth=2,this.setOptions(e),this.fromPoint=this.from,this.toPoint=this.to}return Fn(t,[{key:\"connect\",value:function(){this.from=this._body.nodes[this.options.from],this.to=this._body.nodes[this.options.to]}},{key:\"cleanup\",value:function(){return!1}},{key:\"setOptions\",value:function(t){this.options=t,this.from=this._body.nodes[this.options.from],this.to=this._body.nodes[this.options.to],this.id=this.options.id}},{key:\"drawLine\",value:function(t,e,i,n){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:this.getViaNode();t.strokeStyle=this.getColor(t,e),t.lineWidth=e.width,!1!==e.dashes?this._drawDashedLine(t,e,o):this._drawLine(t,e,o)}},{key:\"_drawLine\",value:function(t,e,i,n,o){if(this.from!=this.to)this._line(t,e,i,n,o);else{var r=this._getCircleData(t),s=uo(r,3),a=s[0],h=s[1],l=s[2];this._circle(t,e,a,h,l)}}},{key:\"_drawDashedLine\",value:function(t,e,i,n,o){t.lineCap=\"round\";var r=So(e.dashes)?e.dashes:[5,5];if(void 0!==t.setLineDash){if(t.save(),t.setLineDash(r),t.lineDashOffset=0,this.from!=this.to)this._line(t,e,i);else{var s=this._getCircleData(t),a=uo(s,3),h=a[0],l=a[1],d=a[2];this._circle(t,e,h,l,d)}t.setLineDash([0]),t.lineDashOffset=0,t.restore()}else{if(this.from!=this.to)Kt(t,this.from.x,this.from.y,this.to.x,this.to.y,r);else{var c=this._getCircleData(t),u=uo(c,3),f=u[0],p=u[1],v=u[2];this._circle(t,e,f,p,v)}this.enableShadow(t,e),t.stroke(),this.disableShadow(t,e)}}},{key:\"findBorderPosition\",value:function(t,e,i){return this.from!=this.to?this._findBorderPosition(t,e,i):this._findBorderPositionCircle(t,e,i)}},{key:\"findBorderPositions\",value:function(t){if(this.from!=this.to)return{from:this._findBorderPosition(this.from,t),to:this._findBorderPosition(this.to,t)};var e,i=Oo(e=this._getCircleData(t)).call(e,0,2),n=uo(i,2),o=n[0],r=n[1];return{from:this._findBorderPositionCircle(this.from,t,{x:o,y:r,low:.25,high:.6,direction:-1}),to:this._findBorderPositionCircle(this.from,t,{x:o,y:r,low:.6,high:.8,direction:1})}}},{key:\"_getCircleData\",value:function(t){var e=this.options.selfReference.size;void 0!==t&&void 0===this.from.shape.width&&this.from.shape.resize(t);var i=gu(t,this.options.selfReference.angle,e,this.from);return[i.x,i.y,e]}},{key:\"_pointOnCircle\",value:function(t,e,i,n){var o=2*n*Math.PI;return{x:t+i*Math.cos(o),y:e-i*Math.sin(o)}}},{key:\"_findBorderPositionCircle\",value:function(t,e,i){var n,o=i.x,r=i.y,s=i.low,a=i.high,h=i.direction,l=this.options.selfReference.size,d=.5*(s+a),c=0;!0===this.options.arrowStrikethrough&&(-1===h?c=this.options.endPointOffset.from:1===h&&(c=this.options.endPointOffset.to));var u=0;do{d=.5*(s+a),n=this._pointOnCircle(o,r,l,d);var f=Math.atan2(t.y-n.y,t.x-n.x),p=t.distanceToBorder(e,f)+c-Math.sqrt(Math.pow(n.x-t.x,2)+Math.pow(n.y-t.y,2));if(Math.abs(p)<.05)break;p>0?h>0?s=d:a=d:h>0?a=d:s=d,++u}while(s<=a&&u<10);return Lf(Lf({},n),{},{t:d})}},{key:\"getLineWidth\",value:function(t,e){return!0===t?Math.max(this.selectionWidth,.3/this._body.view.scale):!0===e?Math.max(this.hoverWidth,.3/this._body.view.scale):Math.max(this.options.width,.3/this._body.view.scale)}},{key:\"getColor\",value:function(t,e){if(!1!==e.inheritsColor){if(\"both\"===e.inheritsColor&&this.from.id!==this.to.id){var i=t.createLinearGradient(this.from.x,this.from.y,this.to.x,this.to.y),n=this.from.options.color.highlight.border,o=this.to.options.color.highlight.border;return!1===this.from.selected&&!1===this.to.selected?(n=Fh(this.from.options.color.border,e.opacity),o=Fh(this.to.options.color.border,e.opacity)):!0===this.from.selected&&!1===this.to.selected?o=this.to.options.color.border:!1===this.from.selected&&!0===this.to.selected&&(n=this.from.options.color.border),i.addColorStop(0,n),i.addColorStop(1,o),i}return\"to\"===e.inheritsColor?Fh(this.to.options.color.border,e.opacity):Fh(this.from.options.color.border,e.opacity)}return Fh(e.color,e.opacity)}},{key:\"_circle\",value:function(t,e,i,n,o){this.enableShadow(t,e);var r=0,s=2*Math.PI;if(!this.options.selfReference.renderBehindTheNode){var a=this.options.selfReference.angle,h=this.options.selfReference.angle+Math.PI,l=this._findBorderPositionCircle(this.from,t,{x:i,y:n,low:a,high:h,direction:-1}),d=this._findBorderPositionCircle(this.from,t,{x:i,y:n,low:a,high:h,direction:1});r=Math.atan2(l.y-n,l.x-i),s=Math.atan2(d.y-n,d.x-i)}t.beginPath(),t.arc(i,n,o,r,s,!1),t.stroke(),this.disableShadow(t,e)}},{key:\"getDistanceToEdge\",value:function(t,e,i,n,o,r){if(this.from!=this.to)return this._getDistanceToEdge(t,e,i,n,o,r);var s=this._getCircleData(void 0),a=uo(s,3),h=a[0],l=a[1],d=a[2],c=h-o,u=l-r;return Math.abs(Math.sqrt(c*c+u*u)-d)}},{key:\"_getDistanceToLine\",value:function(t,e,i,n,o,r){var s=i-t,a=n-e,h=((o-t)*s+(r-e)*a)/(s*s+a*a);h>1?h=1:h<0&&(h=0);var l=t+h*s-o,d=e+h*a-r;return Math.sqrt(l*l+d*d)}},{key:\"getArrowData\",value:function(t,e,i,n,o,r){var s,a,h,l,d,c,u,f=r.width;\"from\"===e?(h=this.from,l=this.to,d=r.fromArrowScale<0,c=Math.abs(r.fromArrowScale),u=r.fromArrowType):\"to\"===e?(h=this.to,l=this.from,d=r.toArrowScale<0,c=Math.abs(r.toArrowScale),u=r.toArrowType):(h=this.to,l=this.from,d=r.middleArrowScale<0,c=Math.abs(r.middleArrowScale),u=r.middleArrowType);var p=15*c+3*f;if(h!=l){var v=p/xf(h.x-l.x,h.y-l.y);if(\"middle\"!==e)if(!0===this.options.smooth.enabled){var g=this._findBorderPosition(h,t,{via:i}),y=this.getPoint(g.t+v*(\"from\"===e?1:-1),i);s=Math.atan2(g.y-y.y,g.x-y.x),a=g}else s=Math.atan2(h.y-l.y,h.x-l.x),a=this._findBorderPosition(h,t);else{var m=(d?-v:v)/2,b=this.getPoint(.5+m,i),w=this.getPoint(.5-m,i);s=Math.atan2(b.y-w.y,b.x-w.x),a=this.getPoint(.5,i)}}else{var k=this._getCircleData(t),_=uo(k,3),x=_[0],E=_[1],O=_[2];if(\"from\"===e){var C=this.options.selfReference.angle,S=this.options.selfReference.angle+Math.PI,T=this._findBorderPositionCircle(this.from,t,{x:x,y:E,low:C,high:S,direction:-1});s=-2*T.t*Math.PI+1.5*Math.PI+.1*Math.PI,a=T}else if(\"to\"===e){var M=this.options.selfReference.angle,P=this.options.selfReference.angle+Math.PI,D=this._findBorderPositionCircle(this.from,t,{x:x,y:E,low:M,high:P,direction:1});s=-2*D.t*Math.PI+1.5*Math.PI-1.1*Math.PI,a=D}else{var I=this.options.selfReference.angle/(2*Math.PI);a=this._pointOnCircle(x,E,O,I),s=-2*I*Math.PI+1.5*Math.PI+.1*Math.PI}}return{point:a,core:{x:a.x-.9*p*Math.cos(s),y:a.y-.9*p*Math.sin(s)},angle:s,length:p,type:u}}},{key:\"drawArrowHead\",value:function(t,e,i,n,o){t.strokeStyle=this.getColor(t,e),t.fillStyle=t.strokeStyle,t.lineWidth=e.width,jf.draw(t,o)&&(this.enableShadow(t,e),hs(t).call(t),this.disableShadow(t,e))}},{key:\"enableShadow\",value:function(t,e){!0===e.shadow&&(t.shadowColor=e.shadowColor,t.shadowBlur=e.shadowSize,t.shadowOffsetX=e.shadowX,t.shadowOffsetY=e.shadowY)}},{key:\"disableShadow\",value:function(t,e){!0===e.shadow&&(t.shadowColor=\"rgba(0,0,0,0)\",t.shadowBlur=0,t.shadowOffsetX=0,t.shadowOffsetY=0)}},{key:\"drawBackground\",value:function(t,e){if(!1!==e.background){var i={strokeStyle:t.strokeStyle,lineWidth:t.lineWidth,dashes:t.dashes};t.strokeStyle=e.backgroundColor,t.lineWidth=e.backgroundSize,this.setStrokeDashed(t,e.backgroundDashes),t.stroke(),t.strokeStyle=i.strokeStyle,t.lineWidth=i.lineWidth,t.dashes=i.dashes,this.setStrokeDashed(t,e.dashes)}}},{key:\"setStrokeDashed\",value:function(t,e){if(!1!==e)if(void 0!==t.setLineDash){var i=So(e)?e:[5,5];t.setLineDash(i)}else console.warn(\"setLineDash is not supported in this browser. The dashed stroke cannot be used.\");else void 0!==t.setLineDash?t.setLineDash([]):console.warn(\"setLineDash is not supported in this browser. The dashed stroke cannot be used.\")}}]),t}();function Wf(t,e){var i=zo(t);if(On){var n=On(t);e&&(n=mr(n).call(n,(function(e){return Mn(t,e).enumerable}))),i.push.apply(i,n)}return i}function qf(t){for(var e=1;e<arguments.length;e++){var i,n=null!=arguments[e]?arguments[e]:{};if(e%2)Wo(i=Wf(Object(n),!0)).call(i,(function(e){jn(t,e,n[e])}));else if(Dn)In(t,Dn(n));else{var o;Wo(o=Wf(Object(n))).call(o,(function(e){zn(t,e,Mn(n,e))}))}}return t}function Vf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Uf=function(t){Ad(i,t);var e=Vf(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"_findBorderPositionBezier\",value:function(t,e){var i,n,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this._getViaCoordinates(),r=10,s=.2,a=!1,h=1,l=0,d=this.to,c=this.options.endPointOffset?this.options.endPointOffset.to:0;t.id===this.from.id&&(d=this.from,a=!0,c=this.options.endPointOffset?this.options.endPointOffset.from:0),!1===this.options.arrowStrikethrough&&(c=0);var u=0;do{n=.5*(l+h),i=this.getPoint(n,o);var f=Math.atan2(d.y-i.y,d.x-i.x),p=d.distanceToBorder(e,f)+c,v=Math.sqrt(Math.pow(i.x-d.x,2)+Math.pow(i.y-d.y,2)),g=p-v;if(Math.abs(g)<s)break;g<0?!1===a?l=n:h=n:!1===a?h=n:l=n,++u}while(l<=h&&u<r);return qf(qf({},i),{},{t:n})}},{key:\"_getDistanceToBezierEdge\",value:function(t,e,i,n,o,r,s){var a,h,l,d,c,u=1e9,f=t,p=e;for(h=1;h<10;h++)l=.1*h,d=Math.pow(1-l,2)*t+2*l*(1-l)*s.x+Math.pow(l,2)*i,c=Math.pow(1-l,2)*e+2*l*(1-l)*s.y+Math.pow(l,2)*n,h>0&&(u=(a=this._getDistanceToLine(f,p,d,c,o,r))<u?a:u),f=d,p=c;return u}},{key:\"_bezierCurve\",value:function(t,e,i,n){t.beginPath(),t.moveTo(this.fromPoint.x,this.fromPoint.y),null!=i&&null!=i.x?null!=n&&null!=n.x?t.bezierCurveTo(i.x,i.y,n.x,n.y,this.toPoint.x,this.toPoint.y):t.quadraticCurveTo(i.x,i.y,this.toPoint.x,this.toPoint.y):t.lineTo(this.toPoint.x,this.toPoint.y),this.drawBackground(t,e),this.enableShadow(t,e),t.stroke(),this.disableShadow(t,e)}},{key:\"getViaNode\",value:function(){return this._getViaCoordinates()}}]),i}(Hf);function Yf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Xf=function(t){Ad(i,t);var e=Yf(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o)).via=r.via,r._boundFunction=function(){r.positionBezierNode()},r._body.emitter.on(\"_repositionBezierNodes\",r._boundFunction),r}return Fn(i,[{key:\"setOptions\",value:function(t){mf(Ld(i.prototype),\"setOptions\",this).call(this,t);var e=!1;this.options.physics!==t.physics&&(e=!0),this.options=t,this.id=this.options.id,this.from=this._body.nodes[this.options.from],this.to=this._body.nodes[this.options.to],this.setupSupportNode(),this.connect(),!0===e&&(this.via.setOptions({physics:this.options.physics}),this.positionBezierNode())}},{key:\"connect\",value:function(){this.from=this._body.nodes[this.options.from],this.to=this._body.nodes[this.options.to],void 0===this.from||void 0===this.to||!1===this.options.physics||this.from.id===this.to.id?this.via.setOptions({physics:!1}):this.via.setOptions({physics:!0})}},{key:\"cleanup\",value:function(){return this._body.emitter.off(\"_repositionBezierNodes\",this._boundFunction),void 0!==this.via&&(delete this._body.nodes[this.via.id],this.via=void 0,!0)}},{key:\"setupSupportNode\",value:function(){if(void 0===this.via){var t=\"edgeId:\"+this.id,e=this._body.functions.createNode({id:t,shape:\"circle\",physics:!0,hidden:!0});this._body.nodes[t]=e,this.via=e,this.via.parentEdgeId=this.id,this.positionBezierNode()}}},{key:\"positionBezierNode\",value:function(){void 0!==this.via&&void 0!==this.from&&void 0!==this.to?(this.via.x=.5*(this.from.x+this.to.x),this.via.y=.5*(this.from.y+this.to.y)):void 0!==this.via&&(this.via.x=0,this.via.y=0)}},{key:\"_line\",value:function(t,e,i){this._bezierCurve(t,e,i)}},{key:\"_getViaCoordinates\",value:function(){return this.via}},{key:\"getViaNode\",value:function(){return this.via}},{key:\"getPoint\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.via;if(this.from===this.to){var i=this._getCircleData(),n=uo(i,3),o=n[0],r=n[1],s=n[2],a=2*Math.PI*(1-t);return{x:o+s*Math.sin(a),y:r+s-s*(1-Math.cos(a))}}return{x:Math.pow(1-t,2)*this.fromPoint.x+2*t*(1-t)*e.x+Math.pow(t,2)*this.toPoint.x,y:Math.pow(1-t,2)*this.fromPoint.y+2*t*(1-t)*e.y+Math.pow(t,2)*this.toPoint.y}}},{key:\"_findBorderPosition\",value:function(t,e){return this._findBorderPositionBezier(t,e,this.via)}},{key:\"_getDistanceToEdge\",value:function(t,e,i,n,o,r){return this._getDistanceToBezierEdge(t,e,i,n,o,r,this.via)}}]),i}(Uf);function Gf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Kf=function(t){Ad(i,t);var e=Gf(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"_line\",value:function(t,e,i){this._bezierCurve(t,e,i)}},{key:\"getViaNode\",value:function(){return this._getViaCoordinates()}},{key:\"_getViaCoordinates\",value:function(){var t,e,i=this.options.smooth.roundness,n=this.options.smooth.type,o=Math.abs(this.from.x-this.to.x),r=Math.abs(this.from.y-this.to.y);if(\"discrete\"===n||\"diagonalCross\"===n){var s,a;s=a=o<=r?i*r:i*o,this.from.x>this.to.x&&(s=-s),this.from.y>=this.to.y&&(a=-a);var h=this.from.x+s,l=this.from.y+a;return\"discrete\"===n&&(o<=r?h=o<i*r?this.from.x:h:l=r<i*o?this.from.y:l),{x:h,y:l}}if(\"straightCross\"===n){var d=(1-i)*o,c=(1-i)*r;return o<=r?(d=0,this.from.y<this.to.y&&(c=-c)):(this.from.x<this.to.x&&(d=-d),c=0),{x:this.to.x+d,y:this.to.y+c}}if(\"horizontal\"===n){var u=(1-i)*o;return this.from.x<this.to.x&&(u=-u),{x:this.to.x+u,y:this.from.y}}if(\"vertical\"===n){var f=(1-i)*r;return this.from.y<this.to.y&&(f=-f),{x:this.from.x,y:this.to.y+f}}if(\"curvedCW\"===n){o=this.to.x-this.from.x,r=this.from.y-this.to.y;var p=Math.sqrt(o*o+r*r),v=Math.PI,g=(Math.atan2(r,o)+(.5*i+.5)*v)%(2*v);return{x:this.from.x+(.5*i+.5)*p*Math.sin(g),y:this.from.y+(.5*i+.5)*p*Math.cos(g)}}if(\"curvedCCW\"===n){o=this.to.x-this.from.x,r=this.from.y-this.to.y;var y=Math.sqrt(o*o+r*r),m=Math.PI,b=(Math.atan2(r,o)+(.5*-i+.5)*m)%(2*m);return{x:this.from.x+(.5*i+.5)*y*Math.sin(b),y:this.from.y+(.5*i+.5)*y*Math.cos(b)}}t=e=o<=r?i*r:i*o,this.from.x>this.to.x&&(t=-t),this.from.y>=this.to.y&&(e=-e);var w=this.from.x+t,k=this.from.y+e;return o<=r?w=this.from.x<=this.to.x?this.to.x<w?this.to.x:w:this.to.x>w?this.to.x:w:k=this.from.y>=this.to.y?this.to.y>k?this.to.y:k:this.to.y<k?this.to.y:k,{x:w,y:k}}},{key:\"_findBorderPosition\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this._findBorderPositionBezier(t,e,i.via)}},{key:\"_getDistanceToEdge\",value:function(t,e,i,n,o,r){var s=arguments.length>6&&void 0!==arguments[6]?arguments[6]:this._getViaCoordinates();return this._getDistanceToBezierEdge(t,e,i,n,o,r,s)}},{key:\"getPoint\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this._getViaCoordinates(),i=t,n=Math.pow(1-i,2)*this.fromPoint.x+2*i*(1-i)*e.x+Math.pow(i,2)*this.toPoint.x,o=Math.pow(1-i,2)*this.fromPoint.y+2*i*(1-i)*e.y+Math.pow(i,2)*this.toPoint.y;return{x:n,y:o}}}]),i}(Uf);function $f(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}function Zf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Qf=function(t){Ad(i,t);var e=Zf(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"_line\",value:function(t,e,i){var n=i[0],o=i[1];this._bezierCurve(t,e,n,o)}},{key:\"_getViaCoordinates\",value:function(){var t,e,i,n,o=this.from.x-this.to.x,r=this.from.y-this.to.y,s=this.options.smooth.roundness;return(Math.abs(o)>Math.abs(r)||!0===this.options.smooth.forceDirection||\"horizontal\"===this.options.smooth.forceDirection)&&\"vertical\"!==this.options.smooth.forceDirection?(e=this.from.y,n=this.to.y,t=this.from.x-s*o,i=this.to.x+s*o):(e=this.from.y-s*r,n=this.to.y+s*r,t=this.from.x,i=this.to.x),[{x:t,y:e},{x:i,y:n}]}},{key:\"getViaNode\",value:function(){return this._getViaCoordinates()}},{key:\"_findBorderPosition\",value:function(t,e){return this._findBorderPositionBezier(t,e)}},{key:\"_getDistanceToEdge\",value:function(t,e,i,n,o,r){var s=arguments.length>6&&void 0!==arguments[6]?arguments[6]:this._getViaCoordinates(),a=uo(s,2),h=a[0],l=a[1];return this._getDistanceToBezierEdge2(t,e,i,n,o,r,h,l)}},{key:\"getPoint\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this._getViaCoordinates(),i=uo(e,2),n=i[0],o=i[1],r=t,s=[Math.pow(1-r,3),3*r*Math.pow(1-r,2),3*Math.pow(r,2)*(1-r),Math.pow(r,3)],a=s[0]*this.fromPoint.x+s[1]*n.x+s[2]*o.x+s[3]*this.toPoint.x,h=s[0]*this.fromPoint.y+s[1]*n.y+s[2]*o.y+s[3]*this.toPoint.y;return{x:a,y:h}}}]),i}(function(t){Ad(i,t);var e=$f(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"_getDistanceToBezierEdge2\",value:function(t,e,i,n,o,r,s,a){for(var h=1e9,l=t,d=e,c=[0,0,0,0],u=1;u<10;u++){var f=.1*u;c[0]=Math.pow(1-f,3),c[1]=3*f*Math.pow(1-f,2),c[2]=3*Math.pow(f,2)*(1-f),c[3]=Math.pow(f,3);var p=c[0]*t+c[1]*s.x+c[2]*a.x+c[3]*i,v=c[0]*e+c[1]*s.y+c[2]*a.y+c[3]*n;if(u>0){var g=this._getDistanceToLine(l,d,p,v,o,r);h=g<h?g:h}l=p,d=v}return h}}]),i}(Uf));function Jf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var tp=function(t){Ad(i,t);var e=Jf(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"_line\",value:function(t,e){t.beginPath(),t.moveTo(this.fromPoint.x,this.fromPoint.y),t.lineTo(this.toPoint.x,this.toPoint.y),this.enableShadow(t,e),t.stroke(),this.disableShadow(t,e)}},{key:\"getViaNode\",value:function(){}},{key:\"getPoint\",value:function(t){return{x:(1-t)*this.fromPoint.x+t*this.toPoint.x,y:(1-t)*this.fromPoint.y+t*this.toPoint.y}}},{key:\"_findBorderPosition\",value:function(t,e){var i=this.to,n=this.from;t.id===this.from.id&&(i=this.from,n=this.to);var o=Math.atan2(i.y-n.y,i.x-n.x),r=i.x-n.x,s=i.y-n.y,a=Math.sqrt(r*r+s*s),h=(a-t.distanceToBorder(e,o))/a;return{x:(1-h)*n.x+h*i.x,y:(1-h)*n.y+h*i.y,t:0}}},{key:\"_getDistanceToEdge\",value:function(t,e,i,n,o,r){return this._getDistanceToLine(t,e,i,n,o,r)}}]),i}(Hf),ep=function(){function t(e,i,n,o,r){if(Nn(this,t),void 0===i)throw new Error(\"No body provided\");this.options=Kh(o),this.globalOptions=o,this.defaultOptions=r,this.body=i,this.imagelist=n,this.id=void 0,this.fromId=void 0,this.toId=void 0,this.selected=!1,this.hover=!1,this.labelDirty=!0,this.baseWidth=this.options.width,this.baseFontSize=this.options.font.size,this.from=void 0,this.to=void 0,this.edgeType=void 0,this.connected=!1,this.labelModule=new _u(this.body,this.options,!0),this.setOptions(e)}return Fn(t,[{key:\"setOptions\",value:function(e){if(e){var i=void 0!==e.physics&&this.options.physics!==e.physics||void 0!==e.hidden&&(this.options.hidden||!1)!==(e.hidden||!1)||void 0!==e.from&&this.options.from!==e.from||void 0!==e.to&&this.options.to!==e.to;t.parseOptions(this.options,e,!0,this.globalOptions),void 0!==e.id&&(this.id=e.id),void 0!==e.from&&(this.fromId=e.from),void 0!==e.to&&(this.toId=e.to),void 0!==e.title&&(this.title=e.title),void 0!==e.value&&(e.value=hu(e.value));var n=[e,this.options,this.defaultOptions];return this.chooser=fu(\"edge\",n),this.updateLabelModule(e),i=this.updateEdgeType()||i,this._setInteractionWidths(),this.connect(),i}}},{key:\"getFormattingValues\",value:function(){var t=!0===this.options.arrows.to||!0===this.options.arrows.to.enabled,e=!0===this.options.arrows.from||!0===this.options.arrows.from.enabled,i=!0===this.options.arrows.middle||!0===this.options.arrows.middle.enabled,n=this.options.color.inherit,o={toArrow:t,toArrowScale:this.options.arrows.to.scaleFactor,toArrowType:this.options.arrows.to.type,toArrowSrc:this.options.arrows.to.src,toArrowImageWidth:this.options.arrows.to.imageWidth,toArrowImageHeight:this.options.arrows.to.imageHeight,middleArrow:i,middleArrowScale:this.options.arrows.middle.scaleFactor,middleArrowType:this.options.arrows.middle.type,middleArrowSrc:this.options.arrows.middle.src,middleArrowImageWidth:this.options.arrows.middle.imageWidth,middleArrowImageHeight:this.options.arrows.middle.imageHeight,fromArrow:e,fromArrowScale:this.options.arrows.from.scaleFactor,fromArrowType:this.options.arrows.from.type,fromArrowSrc:this.options.arrows.from.src,fromArrowImageWidth:this.options.arrows.from.imageWidth,fromArrowImageHeight:this.options.arrows.from.imageHeight,arrowStrikethrough:this.options.arrowStrikethrough,color:n?void 0:this.options.color.color,inheritsColor:n,opacity:this.options.color.opacity,hidden:this.options.hidden,length:this.options.length,shadow:this.options.shadow.enabled,shadowColor:this.options.shadow.color,shadowSize:this.options.shadow.size,shadowX:this.options.shadow.x,shadowY:this.options.shadow.y,dashes:this.options.dashes,width:this.options.width,background:this.options.background.enabled,backgroundColor:this.options.background.color,backgroundSize:this.options.background.size,backgroundDashes:this.options.background.dashes};if(this.selected||this.hover)if(!0===this.chooser){if(this.selected){var r=this.options.selectionWidth;\"function\"==typeof r?o.width=r(o.width):\"number\"==typeof r&&(o.width+=r),o.width=Math.max(o.width,.3/this.body.view.scale),o.color=this.options.color.highlight,o.shadow=this.options.shadow.enabled}else if(this.hover){var s=this.options.hoverWidth;\"function\"==typeof s?o.width=s(o.width):\"number\"==typeof s&&(o.width+=s),o.width=Math.max(o.width,.3/this.body.view.scale),o.color=this.options.color.hover,o.shadow=this.options.shadow.enabled}}else\"function\"==typeof this.chooser&&(this.chooser(o,this.options.id,this.selected,this.hover),void 0!==o.color&&(o.inheritsColor=!1),!1===o.shadow&&(o.shadowColor===this.options.shadow.color&&o.shadowSize===this.options.shadow.size&&o.shadowX===this.options.shadow.x&&o.shadowY===this.options.shadow.y||(o.shadow=!0)));else o.shadow=this.options.shadow.enabled,o.width=Math.max(o.width,.3/this.body.view.scale);return o}},{key:\"updateLabelModule\",value:function(t){var e=[t,this.options,this.globalOptions,this.defaultOptions];this.labelModule.update(this.options,e),void 0!==this.labelModule.baseSize&&(this.baseFontSize=this.labelModule.baseSize)}},{key:\"updateEdgeType\",value:function(){var t=this.options.smooth,e=!1,i=!0;return void 0!==this.edgeType&&((this.edgeType instanceof Xf&&!0===t.enabled&&\"dynamic\"===t.type||this.edgeType instanceof Qf&&!0===t.enabled&&\"cubicBezier\"===t.type||this.edgeType instanceof Kf&&!0===t.enabled&&\"dynamic\"!==t.type&&\"cubicBezier\"!==t.type||this.edgeType instanceof tp&&!1===t.type.enabled)&&(i=!1),!0===i&&(e=this.cleanup())),!0===i?!0===t.enabled?\"dynamic\"===t.type?(e=!0,this.edgeType=new Xf(this.options,this.body,this.labelModule)):\"cubicBezier\"===t.type?this.edgeType=new Qf(this.options,this.body,this.labelModule):this.edgeType=new Kf(this.options,this.body,this.labelModule):this.edgeType=new tp(this.options,this.body,this.labelModule):this.edgeType.setOptions(this.options),e}},{key:\"connect\",value:function(){this.disconnect(),this.from=this.body.nodes[this.fromId]||void 0,this.to=this.body.nodes[this.toId]||void 0,this.connected=void 0!==this.from&&void 0!==this.to,!0===this.connected?(this.from.attachEdge(this),this.to.attachEdge(this)):(this.from&&this.from.detachEdge(this),this.to&&this.to.detachEdge(this)),this.edgeType.connect()}},{key:\"disconnect\",value:function(){this.from&&(this.from.detachEdge(this),this.from=void 0),this.to&&(this.to.detachEdge(this),this.to=void 0),this.connected=!1}},{key:\"getTitle\",value:function(){return this.title}},{key:\"isSelected\",value:function(){return this.selected}},{key:\"getValue\",value:function(){return this.options.value}},{key:\"setValueRange\",value:function(t,e,i){if(void 0!==this.options.value){var n=this.options.scaling.customScalingFunction(t,e,i,this.options.value),o=this.options.scaling.max-this.options.scaling.min;if(!0===this.options.scaling.label.enabled){var r=this.options.scaling.label.max-this.options.scaling.label.min;this.options.font.size=this.options.scaling.label.min+n*r}this.options.width=this.options.scaling.min+n*o}else this.options.width=this.baseWidth,this.options.font.size=this.baseFontSize;this._setInteractionWidths(),this.updateLabelModule()}},{key:\"_setInteractionWidths\",value:function(){\"function\"==typeof this.options.hoverWidth?this.edgeType.hoverWidth=this.options.hoverWidth(this.options.width):this.edgeType.hoverWidth=this.options.hoverWidth+this.options.width,\"function\"==typeof this.options.selectionWidth?this.edgeType.selectionWidth=this.options.selectionWidth(this.options.width):this.edgeType.selectionWidth=this.options.selectionWidth+this.options.width}},{key:\"draw\",value:function(t){var e=this.getFormattingValues();if(!e.hidden){var i=this.edgeType.getViaNode();this.edgeType.drawLine(t,e,this.selected,this.hover,i),this.drawLabel(t,i)}}},{key:\"drawArrows\",value:function(t){var e=this.getFormattingValues();if(!e.hidden){var i=this.edgeType.getViaNode(),n={};this.edgeType.fromPoint=this.edgeType.from,this.edgeType.toPoint=this.edgeType.to,e.fromArrow&&(n.from=this.edgeType.getArrowData(t,\"from\",i,this.selected,this.hover,e),!1===e.arrowStrikethrough&&(this.edgeType.fromPoint=n.from.core),e.fromArrowSrc&&(n.from.image=this.imagelist.load(e.fromArrowSrc)),e.fromArrowImageWidth&&(n.from.imageWidth=e.fromArrowImageWidth),e.fromArrowImageHeight&&(n.from.imageHeight=e.fromArrowImageHeight)),e.toArrow&&(n.to=this.edgeType.getArrowData(t,\"to\",i,this.selected,this.hover,e),!1===e.arrowStrikethrough&&(this.edgeType.toPoint=n.to.core),e.toArrowSrc&&(n.to.image=this.imagelist.load(e.toArrowSrc)),e.toArrowImageWidth&&(n.to.imageWidth=e.toArrowImageWidth),e.toArrowImageHeight&&(n.to.imageHeight=e.toArrowImageHeight)),e.middleArrow&&(n.middle=this.edgeType.getArrowData(t,\"middle\",i,this.selected,this.hover,e),e.middleArrowSrc&&(n.middle.image=this.imagelist.load(e.middleArrowSrc)),e.middleArrowImageWidth&&(n.middle.imageWidth=e.middleArrowImageWidth),e.middleArrowImageHeight&&(n.middle.imageHeight=e.middleArrowImageHeight)),e.fromArrow&&this.edgeType.drawArrowHead(t,e,this.selected,this.hover,n.from),e.middleArrow&&this.edgeType.drawArrowHead(t,e,this.selected,this.hover,n.middle),e.toArrow&&this.edgeType.drawArrowHead(t,e,this.selected,this.hover,n.to)}}},{key:\"drawLabel\",value:function(t,e){if(void 0!==this.options.label){var i,n=this.from,o=this.to;if(this.labelModule.differentState(this.selected,this.hover)&&this.labelModule.getTextSize(t,this.selected,this.hover),n.id!=o.id){this.labelModule.pointToSelf=!1,i=this.edgeType.getPoint(.5,e),t.save();var r=this._getRotation(t);0!=r.angle&&(t.translate(r.x,r.y),t.rotate(r.angle)),this.labelModule.draw(t,i.x,i.y,this.selected,this.hover),t.restore()}else{this.labelModule.pointToSelf=!0;var s=gu(t,this.options.selfReference.angle,this.options.selfReference.size,n);i=this._pointOnCircle(s.x,s.y,this.options.selfReference.size,this.options.selfReference.angle),this.labelModule.draw(t,i.x,i.y,this.selected,this.hover)}}}},{key:\"getItemsOnPoint\",value:function(t){var e=[];if(this.labelModule.visible()){var i=this._getRotation();pu(this.labelModule.getSize(),t,i)&&e.push({edgeId:this.id,labelId:0})}var n={left:t.x,top:t.y};return this.isOverlappingWith(n)&&e.push({edgeId:this.id}),e}},{key:\"isOverlappingWith\",value:function(t){if(this.connected){var e=this.from.x,i=this.from.y,n=this.to.x,o=this.to.y,r=t.left,s=t.top;return this.edgeType.getDistanceToEdge(e,i,n,o,r,s)<10}return!1}},{key:\"_getRotation\",value:function(t){var e=this.edgeType.getViaNode(),i=this.edgeType.getPoint(.5,e);void 0!==t&&this.labelModule.calculateLabelSize(t,this.selected,this.hover,i.x,i.y);var n={x:i.x,y:this.labelModule.size.yLine,angle:0};if(!this.labelModule.visible())return n;if(\"horizontal\"===this.options.font.align)return n;var o=this.from.y-this.to.y,r=this.from.x-this.to.x,s=Math.atan2(o,r);return(s<-1&&r<0||s>0&&r<0)&&(s+=Math.PI),n.angle=s,n}},{key:\"_pointOnCircle\",value:function(t,e,i,n){return{x:t+i*Math.cos(n),y:e-i*Math.sin(n)}}},{key:\"select\",value:function(){this.selected=!0}},{key:\"unselect\",value:function(){this.selected=!1}},{key:\"cleanup\",value:function(){return this.edgeType.cleanup()}},{key:\"remove\",value:function(){this.cleanup(),this.disconnect(),delete this.body.edges[this.id]}},{key:\"endPointsValid\",value:function(){return void 0!==this.body.nodes[this.fromId]&&void 0!==this.body.nodes[this.toId]}}],[{key:\"parseOptions\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},o=arguments.length>4&&void 0!==arguments[4]&&arguments[4],r=[\"endPointOffset\",\"arrowStrikethrough\",\"id\",\"from\",\"hidden\",\"hoverWidth\",\"labelHighlightBold\",\"length\",\"line\",\"opacity\",\"physics\",\"scaling\",\"selectionWidth\",\"selfReferenceSize\",\"selfReference\",\"to\",\"title\",\"value\",\"width\",\"font\",\"chosen\",\"widthConstraint\"];if(Eh(r,t,e,i),void 0!==e.endPointOffset&&void 0!==e.endPointOffset.from&&(wd(e.endPointOffset.from)?t.endPointOffset.from=e.endPointOffset.from:(t.endPointOffset.from=void 0!==n.endPointOffset.from?n.endPointOffset.from:0,console.error(\"endPointOffset.from is not a valid number\"))),void 0!==e.endPointOffset&&void 0!==e.endPointOffset.to&&(wd(e.endPointOffset.to)?t.endPointOffset.to=e.endPointOffset.to:(t.endPointOffset.to=void 0!==n.endPointOffset.to?n.endPointOffset.to:0,console.error(\"endPointOffset.to is not a valid number\"))),vu(e.label)?t.label=e.label:vu(t.label)||(t.label=void 0),$h(t,e,\"smooth\",n),$h(t,e,\"shadow\",n),$h(t,e,\"background\",n),void 0!==e.dashes&&null!==e.dashes?t.dashes=e.dashes:!0===i&&null===e.dashes&&(t.dashes=Gr(n.dashes)),void 0!==e.scaling&&null!==e.scaling?(void 0!==e.scaling.min&&(t.scaling.min=e.scaling.min),void 0!==e.scaling.max&&(t.scaling.max=e.scaling.max),$h(t.scaling,e.scaling,\"label\",n.scaling)):!0===i&&null===e.scaling&&(t.scaling=Gr(n.scaling)),void 0!==e.arrows&&null!==e.arrows)if(\"string\"==typeof e.arrows){var s=e.arrows.toLowerCase();t.arrows.to.enabled=-1!=Hr(s).call(s,\"to\"),t.arrows.middle.enabled=-1!=Hr(s).call(s,\"middle\"),t.arrows.from.enabled=-1!=Hr(s).call(s,\"from\")}else{if(\"object\"!==go(e.arrows))throw new Error(\"The arrow newOptions can only be an object or a string. Refer to the documentation. You used:\"+es(e.arrows));$h(t.arrows,e.arrows,\"to\",n.arrows),$h(t.arrows,e.arrows,\"middle\",n.arrows),$h(t.arrows,e.arrows,\"from\",n.arrows)}else!0===i&&null===e.arrows&&(t.arrows=Gr(n.arrows));if(void 0!==e.color&&null!==e.color){var a=bh(e.color)?{color:e.color,highlight:e.color,hover:e.color,inherit:!1,opacity:1}:e.color,h=t.color;if(o)Ch(h,n.color,!1,i);else for(var l in h)Object.prototype.hasOwnProperty.call(h,l)&&delete h[l];if(bh(h))h.color=h,h.highlight=h,h.hover=h,h.inherit=!1,void 0===a.opacity&&(h.opacity=1);else{var d=!1;void 0!==a.color&&(h.color=a.color,d=!0),void 0!==a.highlight&&(h.highlight=a.highlight,d=!0),void 0!==a.hover&&(h.hover=a.hover,d=!0),void 0!==a.inherit&&(h.inherit=a.inherit),void 0!==a.opacity&&(h.opacity=Math.min(1,Math.max(0,a.opacity))),!0===d?h.inherit=!1:void 0===h.inherit&&(h.inherit=\"from\")}}else!0===i&&null===e.color&&(t.color=Kh(n.color));!0===i&&null===e.font&&(t.font=Kh(n.font)),Object.prototype.hasOwnProperty.call(e,\"selfReferenceSize\")&&(console.warn(\"The selfReferenceSize property has been deprecated. Please use selfReference property instead. The selfReference can be set like thise selfReference:{size:30, angle:Math.PI / 4}\"),t.selfReference.size=e.selfReferenceSize)}}]),t}(),ip=function(){function t(e,i,n){var o,r=this;Nn(this,t),this.body=e,this.images=i,this.groups=n,this.body.functions.createEdge=Vt(o=this.create).call(o,this),this.edgesListeners={add:function(t,e){r.add(e.items)},update:function(t,e){r.update(e.items)},remove:function(t,e){r.remove(e.items)}},this.options={},this.defaultOptions={arrows:{to:{enabled:!1,scaleFactor:1,type:\"arrow\"},middle:{enabled:!1,scaleFactor:1,type:\"arrow\"},from:{enabled:!1,scaleFactor:1,type:\"arrow\"}},endPointOffset:{from:0,to:0},arrowStrikethrough:!0,color:{color:\"#848484\",highlight:\"#848484\",hover:\"#848484\",inherit:\"from\",opacity:1},dashes:!1,font:{color:\"#343434\",size:14,face:\"arial\",background:\"none\",strokeWidth:2,strokeColor:\"#ffffff\",align:\"horizontal\",multi:!1,vadjust:0,bold:{mod:\"bold\"},boldital:{mod:\"bold italic\"},ital:{mod:\"italic\"},mono:{mod:\"\",size:15,face:\"courier new\",vadjust:2}},hidden:!1,hoverWidth:1.5,label:void 0,labelHighlightBold:!0,length:void 0,physics:!0,scaling:{min:1,max:15,label:{enabled:!0,min:14,max:30,maxVisible:30,drawThreshold:5},customScalingFunction:function(t,e,i,n){if(e===t)return.5;var o=1/(e-t);return Math.max(0,(n-t)*o)}},selectionWidth:1.5,selfReference:{size:20,angle:Math.PI/4,renderBehindTheNode:!0},shadow:{enabled:!1,color:\"rgba(0,0,0,0.5)\",size:10,x:5,y:5},background:{enabled:!1,color:\"rgba(111,111,111,1)\",size:10,dashes:!1},smooth:{enabled:!0,type:\"dynamic\",forceDirection:\"none\",roundness:.5},title:void 0,width:1,value:void 0},Ch(this.options,this.defaultOptions),this.bindEventListeners()}return Fn(t,[{key:\"bindEventListeners\",value:function(){var t,e,i=this;this.body.emitter.on(\"_forceDisableDynamicCurves\",(function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];\"dynamic\"===t&&(t=\"continuous\");var n=!1;for(var o in i.body.edges)if(Object.prototype.hasOwnProperty.call(i.body.edges,o)){var r=i.body.edges[o],s=i.body.data.edges.get(o);if(null!=s){var a=s.smooth;void 0!==a&&!0===a.enabled&&\"dynamic\"===a.type&&(void 0===t?r.setOptions({smooth:!1}):r.setOptions({smooth:{type:t}}),n=!0)}}!0===e&&!0===n&&i.body.emitter.emit(\"_dataChanged\")})),this.body.emitter.on(\"_dataUpdated\",(function(){i.reconnectEdges()})),this.body.emitter.on(\"refreshEdges\",Vt(t=this.refresh).call(t,this)),this.body.emitter.on(\"refresh\",Vt(e=this.refresh).call(e,this)),this.body.emitter.on(\"destroy\",(function(){Dh(i.edgesListeners,(function(t,e){i.body.data.edges&&i.body.data.edges.off(e,t)})),delete i.body.functions.createEdge,delete i.edgesListeners.add,delete i.edgesListeners.update,delete i.edgesListeners.remove,delete i.edgesListeners}))}},{key:\"setOptions\",value:function(t){if(void 0!==t){ep.parseOptions(this.options,t,!0,this.defaultOptions,!0);var e=!1;if(void 0!==t.smooth)for(var i in this.body.edges)Object.prototype.hasOwnProperty.call(this.body.edges,i)&&(e=this.body.edges[i].updateEdgeType()||e);if(void 0!==t.font)for(var n in this.body.edges)Object.prototype.hasOwnProperty.call(this.body.edges,n)&&this.body.edges[n].updateLabelModule();void 0===t.hidden&&void 0===t.physics&&!0!==e||this.body.emitter.emit(\"_dataChanged\")}}},{key:\"setData\",value:function(t){var e=this,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=this.body.data.edges;if(nu(\"id\",t))this.body.data.edges=t;else if(So(t))this.body.data.edges=new tu,this.body.data.edges.add(t);else{if(t)throw new TypeError(\"Array or DataSet expected\");this.body.data.edges=new tu}if(n&&Dh(this.edgesListeners,(function(t,e){n.off(e,t)})),this.body.edges={},this.body.data.edges){Dh(this.edgesListeners,(function(t,i){e.body.data.edges.on(i,t)}));var o=this.body.data.edges.getIds();this.add(o,!0)}this.body.emitter.emit(\"_adjustEdgesForHierarchicalLayout\"),!1===i&&this.body.emitter.emit(\"_dataChanged\")}},{key:\"add\",value:function(t){for(var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=this.body.edges,n=this.body.data.edges,o=0;o<t.length;o++){var r=t[o],s=i[r];s&&s.disconnect();var a=n.get(r,{showInternalIds:!0});i[r]=this.create(a)}this.body.emitter.emit(\"_adjustEdgesForHierarchicalLayout\"),!1===e&&this.body.emitter.emit(\"_dataChanged\")}},{key:\"update\",value:function(t){for(var e=this.body.edges,i=this.body.data.edges,n=!1,o=0;o<t.length;o++){var r=t[o],s=i.get(r),a=e[r];void 0!==a?(a.disconnect(),n=a.setOptions(s)||n,a.connect()):(this.body.edges[r]=this.create(s),n=!0)}!0===n?(this.body.emitter.emit(\"_adjustEdgesForHierarchicalLayout\"),this.body.emitter.emit(\"_dataChanged\")):this.body.emitter.emit(\"_dataUpdated\")}},{key:\"remove\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(0!==t.length){var i=this.body.edges;Dh(t,(function(t){var e=i[t];void 0!==e&&e.remove()})),e&&this.body.emitter.emit(\"_dataChanged\")}}},{key:\"refresh\",value:function(){var t=this;Dh(this.body.edges,(function(e,i){var n=t.body.data.edges.get(i);void 0!==n&&e.setOptions(n)}))}},{key:\"create\",value:function(t){return new ep(t,this.body,this.images,this.options,this.defaultOptions)}},{key:\"reconnectEdges\",value:function(){var t,e=this.body.nodes,i=this.body.edges;for(t in e)Object.prototype.hasOwnProperty.call(e,t)&&(e[t].edges=[]);for(t in i)if(Object.prototype.hasOwnProperty.call(i,t)){var n=i[t];n.from=null,n.to=null,n.connect()}}},{key:\"getConnectedNodes\",value:function(t){var e=[];if(void 0!==this.body.edges[t]){var i=this.body.edges[t];void 0!==i.fromId&&e.push(i.fromId),void 0!==i.toId&&e.push(i.toId)}return e}},{key:\"_updateState\",value:function(){this._addMissingEdges(),this._removeInvalidEdges()}},{key:\"_removeInvalidEdges\",value:function(){var t=this,e=[];Dh(this.body.edges,(function(i,n){var o=t.body.nodes[i.toId],r=t.body.nodes[i.fromId];void 0!==o&&!0===o.isCluster||void 0!==r&&!0===r.isCluster||void 0!==o&&void 0!==r||e.push(n)})),this.remove(e,!1)}},{key:\"_addMissingEdges\",value:function(){var t=this.body.data.edges;if(null!=t){var e=this.body.edges,i=[];Wo(t).call(t,(function(t,n){void 0===e[n]&&i.push(n)})),this.add(i,!0)}}}]),t}(),np=function(){function t(e,i,n){Nn(this,t),this.body=e,this.physicsBody=i,this.barnesHutTree,this.setOptions(n),this._rng=ah(\"BARNES HUT SOLVER\")}return Fn(t,[{key:\"setOptions\",value:function(t){this.options=t,this.thetaInversed=1/this.options.theta,this.overlapAvoidanceFactor=1-Math.max(0,Math.min(1,this.options.avoidOverlap))}},{key:\"solve\",value:function(){if(0!==this.options.gravitationalConstant&&this.physicsBody.physicsNodeIndices.length>0){var t,e=this.body.nodes,i=this.physicsBody.physicsNodeIndices,n=i.length,o=this._formBarnesHutTree(e,i);this.barnesHutTree=o;for(var r=0;r<n;r++)(t=e[i[r]]).options.mass>0&&this._getForceContributions(o.root,t)}}},{key:\"_getForceContributions\",value:function(t,e){this._getForceContribution(t.children.NW,e),this._getForceContribution(t.children.NE,e),this._getForceContribution(t.children.SW,e),this._getForceContribution(t.children.SE,e)}},{key:\"_getForceContribution\",value:function(t,e){if(t.childrenCount>0){var i=t.centerOfMass.x-e.x,n=t.centerOfMass.y-e.y,o=Math.sqrt(i*i+n*n);o*t.calcSize>this.thetaInversed?this._calculateForces(o,i,n,e,t):4===t.childrenCount?this._getForceContributions(t,e):t.children.data.id!=e.id&&this._calculateForces(o,i,n,e,t)}}},{key:\"_calculateForces\",value:function(t,e,i,n,o){0===t&&(e=t=.1),this.overlapAvoidanceFactor<1&&n.shape.radius&&(t=Math.max(.1+this.overlapAvoidanceFactor*n.shape.radius,t-n.shape.radius));var r=this.options.gravitationalConstant*o.mass*n.options.mass/Math.pow(t,3),s=e*r,a=i*r;this.physicsBody.forces[n.id].x+=s,this.physicsBody.forces[n.id].y+=a}},{key:\"_formBarnesHutTree\",value:function(t,e){for(var i,n=e.length,o=t[e[0]].x,r=t[e[0]].y,s=t[e[0]].x,a=t[e[0]].y,h=1;h<n;h++){var l=t[e[h]],d=l.x,c=l.y;l.options.mass>0&&(d<o&&(o=d),d>s&&(s=d),c<r&&(r=c),c>a&&(a=c))}var u=Math.abs(s-o)-Math.abs(a-r);u>0?(r-=.5*u,a+=.5*u):(o+=.5*u,s-=.5*u);var f=Math.max(1e-5,Math.abs(s-o)),p=.5*f,v=.5*(o+s),g=.5*(r+a),y={root:{centerOfMass:{x:0,y:0},mass:0,range:{minX:v-p,maxX:v+p,minY:g-p,maxY:g+p},size:f,calcSize:1/f,children:{data:null},maxWidth:0,level:0,childrenCount:4}};this._splitBranch(y.root);for(var m=0;m<n;m++)(i=t[e[m]]).options.mass>0&&this._placeInTree(y.root,i);return y}},{key:\"_updateBranchMass\",value:function(t,e){var i=t.centerOfMass,n=t.mass+e.options.mass,o=1/n;i.x=i.x*t.mass+e.x*e.options.mass,i.x*=o,i.y=i.y*t.mass+e.y*e.options.mass,i.y*=o,t.mass=n;var r=Math.max(Math.max(e.height,e.radius),e.width);t.maxWidth=t.maxWidth<r?r:t.maxWidth}},{key:\"_placeInTree\",value:function(t,e,i){1==i&&void 0!==i||this._updateBranchMass(t,e);var n,o=t.children.NW.range;n=o.maxX>e.x?o.maxY>e.y?\"NW\":\"SW\":o.maxY>e.y?\"NE\":\"SE\",this._placeInRegion(t,e,n)}},{key:\"_placeInRegion\",value:function(t,e,i){var n=t.children[i];switch(n.childrenCount){case 0:n.children.data=e,n.childrenCount=1,this._updateBranchMass(n,e);break;case 1:n.children.data.x===e.x&&n.children.data.y===e.y?(e.x+=this._rng(),e.y+=this._rng()):(this._splitBranch(n),this._placeInTree(n,e));break;case 4:this._placeInTree(n,e)}}},{key:\"_splitBranch\",value:function(t){var e=null;1===t.childrenCount&&(e=t.children.data,t.mass=0,t.centerOfMass.x=0,t.centerOfMass.y=0),t.childrenCount=4,t.children.data=null,this._insertRegion(t,\"NW\"),this._insertRegion(t,\"NE\"),this._insertRegion(t,\"SW\"),this._insertRegion(t,\"SE\"),null!=e&&this._placeInTree(t,e)}},{key:\"_insertRegion\",value:function(t,e){var i,n,o,r,s=.5*t.size;switch(e){case\"NW\":i=t.range.minX,n=t.range.minX+s,o=t.range.minY,r=t.range.minY+s;break;case\"NE\":i=t.range.minX+s,n=t.range.maxX,o=t.range.minY,r=t.range.minY+s;break;case\"SW\":i=t.range.minX,n=t.range.minX+s,o=t.range.minY+s,r=t.range.maxY;break;case\"SE\":i=t.range.minX+s,n=t.range.maxX,o=t.range.minY+s,r=t.range.maxY}t.children[e]={centerOfMass:{x:0,y:0},mass:0,range:{minX:i,maxX:n,minY:o,maxY:r},size:.5*t.size,calcSize:2*t.calcSize,children:{data:null},maxWidth:0,level:t.level+1,childrenCount:0}}},{key:\"_debug\",value:function(t,e){void 0!==this.barnesHutTree&&(t.lineWidth=1,this._drawBranch(this.barnesHutTree.root,t,e))}},{key:\"_drawBranch\",value:function(t,e,i){void 0===i&&(i=\"#FF0000\"),4===t.childrenCount&&(this._drawBranch(t.children.NW,e),this._drawBranch(t.children.NE,e),this._drawBranch(t.children.SE,e),this._drawBranch(t.children.SW,e)),e.strokeStyle=i,e.beginPath(),e.moveTo(t.range.minX,t.range.minY),e.lineTo(t.range.maxX,t.range.minY),e.stroke(),e.beginPath(),e.moveTo(t.range.maxX,t.range.minY),e.lineTo(t.range.maxX,t.range.maxY),e.stroke(),e.beginPath(),e.moveTo(t.range.maxX,t.range.maxY),e.lineTo(t.range.minX,t.range.maxY),e.stroke(),e.beginPath(),e.moveTo(t.range.minX,t.range.maxY),e.lineTo(t.range.minX,t.range.minY),e.stroke()}}]),t}(),op=function(){function t(e,i,n){Nn(this,t),this._rng=ah(\"REPULSION SOLVER\"),this.body=e,this.physicsBody=i,this.setOptions(n)}return Fn(t,[{key:\"setOptions\",value:function(t){this.options=t}},{key:\"solve\",value:function(){for(var t,e,i,n,o,r,s,a,h=this.body.nodes,l=this.physicsBody.physicsNodeIndices,d=this.physicsBody.forces,c=this.options.nodeDistance,u=-2/3/c,f=0;f<l.length-1;f++){s=h[l[f]];for(var p=f+1;p<l.length;p++)t=(a=h[l[p]]).x-s.x,e=a.y-s.y,0===(i=Math.sqrt(t*t+e*e))&&(t=i=.1*this._rng()),i<2*c&&(r=i<.5*c?1:u*i+1.3333333333333333,n=t*(r/=i),o=e*r,d[s.id].x-=n,d[s.id].y-=o,d[a.id].x+=n,d[a.id].y+=o)}}}]),t}(),rp=function(){function t(e,i,n){Nn(this,t),this.body=e,this.physicsBody=i,this.setOptions(n)}return Fn(t,[{key:\"setOptions\",value:function(t){this.options=t,this.overlapAvoidanceFactor=Math.max(0,Math.min(1,this.options.avoidOverlap||0))}},{key:\"solve\",value:function(){for(var t=this.body.nodes,e=this.physicsBody.physicsNodeIndices,i=this.physicsBody.forces,n=this.options.nodeDistance,o=0;o<e.length-1;o++)for(var r=t[e[o]],s=o+1;s<e.length;s++){var a=t[e[s]];if(r.level===a.level){var h=n+this.overlapAvoidanceFactor*((r.shape.radius||0)/2+(a.shape.radius||0)/2),l=a.x-r.x,d=a.y-r.y,c=Math.sqrt(l*l+d*d),u=void 0;u=c<h?-Math.pow(.05*c,2)+Math.pow(.05*h,2):0,0!==c&&(u/=c);var f=l*u,p=d*u;i[r.id].x-=f,i[r.id].y-=p,i[a.id].x+=f,i[a.id].y+=p}}}}]),t}(),sp=function(){function t(e,i,n){Nn(this,t),this.body=e,this.physicsBody=i,this.setOptions(n)}return Fn(t,[{key:\"setOptions\",value:function(t){this.options=t}},{key:\"solve\",value:function(){for(var t,e,i,n,o,r=this.physicsBody.physicsEdgeIndices,s=this.body.edges,a=0;a<r.length;a++)!0===(e=s[r[a]]).connected&&e.toId!==e.fromId&&void 0!==this.body.nodes[e.toId]&&void 0!==this.body.nodes[e.fromId]&&(void 0!==e.edgeType.via?(t=void 0===e.options.length?this.options.springLength:e.options.length,i=e.to,n=e.edgeType.via,o=e.from,this._calculateSpringForce(i,n,.5*t),this._calculateSpringForce(n,o,.5*t)):(t=void 0===e.options.length?1.5*this.options.springLength:e.options.length,this._calculateSpringForce(e.from,e.to,t)))}},{key:\"_calculateSpringForce\",value:function(t,e,i){var n=t.x-e.x,o=t.y-e.y,r=Math.max(Math.sqrt(n*n+o*o),.01),s=this.options.springConstant*(i-r)/r,a=n*s,h=o*s;void 0!==this.physicsBody.forces[t.id]&&(this.physicsBody.forces[t.id].x+=a,this.physicsBody.forces[t.id].y+=h),void 0!==this.physicsBody.forces[e.id]&&(this.physicsBody.forces[e.id].x-=a,this.physicsBody.forces[e.id].y-=h)}}]),t}(),ap=function(){function t(e,i,n){Nn(this,t),this.body=e,this.physicsBody=i,this.setOptions(n)}return Fn(t,[{key:\"setOptions\",value:function(t){this.options=t}},{key:\"solve\",value:function(){for(var t,e,i,n,o,r,s,a,h,l,d=this.body.edges,c=.5,u=this.physicsBody.physicsEdgeIndices,f=this.physicsBody.physicsNodeIndices,p=this.physicsBody.forces,v=0;v<f.length;v++){var g=f[v];p[g].springFx=0,p[g].springFy=0}for(var y=0;y<u.length;y++)!0===(e=d[u[y]]).connected&&(t=void 0===e.options.length?this.options.springLength:e.options.length,i=e.from.x-e.to.x,n=e.from.y-e.to.y,a=0===(a=Math.sqrt(i*i+n*n))?.01:a,o=i*(s=this.options.springConstant*(t-a)/a),r=n*s,e.to.level!=e.from.level?(void 0!==p[e.toId]&&(p[e.toId].springFx-=o,p[e.toId].springFy-=r),void 0!==p[e.fromId]&&(p[e.fromId].springFx+=o,p[e.fromId].springFy+=r)):(void 0!==p[e.toId]&&(p[e.toId].x-=c*o,p[e.toId].y-=c*r),void 0!==p[e.fromId]&&(p[e.fromId].x+=c*o,p[e.fromId].y+=c*r)));s=1;for(var m=0;m<f.length;m++){var b=f[m];h=Math.min(s,Math.max(-s,p[b].springFx)),l=Math.min(s,Math.max(-s,p[b].springFy)),p[b].x+=h,p[b].y+=l}for(var w=0,k=0,_=0;_<f.length;_++){var x=f[_];w+=p[x].x,k+=p[x].y}for(var E=w/f.length,O=k/f.length,C=0;C<f.length;C++){var S=f[C];p[S].x-=E,p[S].y-=O}}}]),t}(),hp=function(){function t(e,i,n){Nn(this,t),this.body=e,this.physicsBody=i,this.setOptions(n)}return Fn(t,[{key:\"setOptions\",value:function(t){this.options=t}},{key:\"solve\",value:function(){for(var t,e,i,n,o=this.body.nodes,r=this.physicsBody.physicsNodeIndices,s=this.physicsBody.forces,a=0;a<r.length;a++){t=-(n=o[r[a]]).x,e=-n.y,i=Math.sqrt(t*t+e*e),this._calculateForces(i,t,e,s,n)}}},{key:\"_calculateForces\",value:function(t,e,i,n,o){var r=0===t?0:this.options.centralGravity/t;n[o.id].x=e*r,n[o.id].y=i*r}}]),t}();function lp(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var dp=function(t){Ad(i,t);var e=lp(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o))._rng=ah(\"FORCE ATLAS 2 BASED REPULSION SOLVER\"),r}return Fn(i,[{key:\"_calculateForces\",value:function(t,e,i,n,o){0===t&&(e=t=.1*this._rng()),this.overlapAvoidanceFactor<1&&n.shape.radius&&(t=Math.max(.1+this.overlapAvoidanceFactor*n.shape.radius,t-n.shape.radius));var r=n.edges.length+1,s=this.options.gravitationalConstant*o.mass*n.options.mass*r/Math.pow(t,2),a=e*s,h=i*s;this.physicsBody.forces[n.id].x+=a,this.physicsBody.forces[n.id].y+=h}}]),i}(np);function cp(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var up=function(t){Ad(i,t);var e=cp(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"_calculateForces\",value:function(t,e,i,n,o){if(t>0){var r=o.edges.length+1,s=this.options.centralGravity*r*o.options.mass;n[o.id].x=e*s,n[o.id].y=i*s}}}]),i}(hp),fp=function(){function t(e){Nn(this,t),this.body=e,this.physicsBody={physicsNodeIndices:[],physicsEdgeIndices:[],forces:{},velocities:{}},this.physicsEnabled=!0,this.simulationInterval=1e3/60,this.requiresTimeout=!0,this.previousStates={},this.referenceState={},this.freezeCache={},this.renderTimer=void 0,this.adaptiveTimestep=!1,this.adaptiveTimestepEnabled=!1,this.adaptiveCounter=0,this.adaptiveInterval=3,this.stabilized=!1,this.startedStabilization=!1,this.stabilizationIterations=0,this.ready=!1,this.options={},this.defaultOptions={enabled:!0,barnesHut:{theta:.5,gravitationalConstant:-2e3,centralGravity:.3,springLength:95,springConstant:.04,damping:.09,avoidOverlap:0},forceAtlas2Based:{theta:.5,gravitationalConstant:-50,centralGravity:.01,springConstant:.08,springLength:100,damping:.4,avoidOverlap:0},repulsion:{centralGravity:.2,springLength:200,springConstant:.05,nodeDistance:100,damping:.09,avoidOverlap:0},hierarchicalRepulsion:{centralGravity:0,springLength:100,springConstant:.01,nodeDistance:120,damping:.09},maxVelocity:50,minVelocity:.75,solver:\"barnesHut\",stabilization:{enabled:!0,iterations:1e3,updateInterval:50,onlyDynamicEdges:!1,fit:!0},timestep:.5,adaptiveTimestep:!0,wind:{x:0,y:0}},At(this.options,this.defaultOptions),this.timestep=.5,this.layoutFailed=!1,this.bindEventListeners()}return Fn(t,[{key:\"bindEventListeners\",value:function(){var t=this;this.body.emitter.on(\"initPhysics\",(function(){t.initPhysics()})),this.body.emitter.on(\"_layoutFailed\",(function(){t.layoutFailed=!0})),this.body.emitter.on(\"resetPhysics\",(function(){t.stopSimulation(),t.ready=!1})),this.body.emitter.on(\"disablePhysics\",(function(){t.physicsEnabled=!1,t.stopSimulation()})),this.body.emitter.on(\"restorePhysics\",(function(){t.setOptions(t.options),!0===t.ready&&t.startSimulation()})),this.body.emitter.on(\"startSimulation\",(function(){!0===t.ready&&t.startSimulation()})),this.body.emitter.on(\"stopSimulation\",(function(){t.stopSimulation()})),this.body.emitter.on(\"destroy\",(function(){t.stopSimulation(!1),t.body.emitter.off()})),this.body.emitter.on(\"_dataChanged\",(function(){t.updatePhysicsData()}))}},{key:\"setOptions\",value:function(t){if(void 0!==t)if(!1===t)this.options.enabled=!1,this.physicsEnabled=!1,this.stopSimulation();else if(!0===t)this.options.enabled=!0,this.physicsEnabled=!0,this.startSimulation();else{this.physicsEnabled=!0,Oh([\"stabilization\"],this.options,t),$h(this.options,t,\"stabilization\"),void 0===t.enabled&&(this.options.enabled=!0),!1===this.options.enabled&&(this.physicsEnabled=!1,this.stopSimulation());var e=this.options.wind;e&&((\"number\"!=typeof e.x||yd(e.x))&&(e.x=0),(\"number\"!=typeof e.y||yd(e.y))&&(e.y=0)),this.timestep=this.options.timestep}this.init()}},{key:\"init\",value:function(){var t;\"forceAtlas2Based\"===this.options.solver?(t=this.options.forceAtlas2Based,this.nodesSolver=new dp(this.body,this.physicsBody,t),this.edgesSolver=new sp(this.body,this.physicsBody,t),this.gravitySolver=new up(this.body,this.physicsBody,t)):\"repulsion\"===this.options.solver?(t=this.options.repulsion,this.nodesSolver=new op(this.body,this.physicsBody,t),this.edgesSolver=new sp(this.body,this.physicsBody,t),this.gravitySolver=new hp(this.body,this.physicsBody,t)):\"hierarchicalRepulsion\"===this.options.solver?(t=this.options.hierarchicalRepulsion,this.nodesSolver=new rp(this.body,this.physicsBody,t),this.edgesSolver=new ap(this.body,this.physicsBody,t),this.gravitySolver=new hp(this.body,this.physicsBody,t)):(t=this.options.barnesHut,this.nodesSolver=new np(this.body,this.physicsBody,t),this.edgesSolver=new sp(this.body,this.physicsBody,t),this.gravitySolver=new hp(this.body,this.physicsBody,t)),this.modelOptions=t}},{key:\"initPhysics\",value:function(){!0===this.physicsEnabled&&!0===this.options.enabled?!0===this.options.stabilization.enabled?this.stabilize():(this.stabilized=!1,this.ready=!0,this.body.emitter.emit(\"fit\",{},this.layoutFailed),this.startSimulation()):(this.ready=!0,this.body.emitter.emit(\"fit\"))}},{key:\"startSimulation\",value:function(){var t;!0===this.physicsEnabled&&!0===this.options.enabled?(this.stabilized=!1,this.adaptiveTimestep=!1,this.body.emitter.emit(\"_resizeNodes\"),void 0===this.viewFunction&&(this.viewFunction=Vt(t=this.simulationStep).call(t,this),this.body.emitter.on(\"initRedraw\",this.viewFunction),this.body.emitter.emit(\"_startRendering\"))):this.body.emitter.emit(\"_redraw\")}},{key:\"stopSimulation\",value:function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.stabilized=!0,!0===t&&this._emitStabilized(),void 0!==this.viewFunction&&(this.body.emitter.off(\"initRedraw\",this.viewFunction),this.viewFunction=void 0,!0===t&&this.body.emitter.emit(\"_stopRendering\"))}},{key:\"simulationStep\",value:function(){var t=No();this.physicsTick(),(No()-t<.4*this.simulationInterval||!0===this.runDoubleSpeed)&&!1===this.stabilized&&(this.physicsTick(),this.runDoubleSpeed=!0),!0===this.stabilized&&this.stopSimulation()}},{key:\"_emitStabilized\",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.stabilizationIterations;(this.stabilizationIterations>1||!0===this.startedStabilization)&&rs((function(){t.body.emitter.emit(\"stabilized\",{iterations:e}),t.startedStabilization=!1,t.stabilizationIterations=0}),0)}},{key:\"physicsStep\",value:function(){this.gravitySolver.solve(),this.nodesSolver.solve(),this.edgesSolver.solve(),this.moveNodes()}},{key:\"adjustTimeStep\",value:function(){!0===this._evaluateStepQuality()?this.timestep=1.2*this.timestep:this.timestep/1.2<this.options.timestep?this.timestep=this.options.timestep:(this.adaptiveCounter=-1,this.timestep=Math.max(this.options.timestep,this.timestep/1.2))}},{key:\"physicsTick\",value:function(){if(this._startStabilizing(),!0!==this.stabilized){if(!0===this.adaptiveTimestep&&!0===this.adaptiveTimestepEnabled)this.adaptiveCounter%this.adaptiveInterval==0?(this.timestep=2*this.timestep,this.physicsStep(),this.revert(),this.timestep=.5*this.timestep,this.physicsStep(),this.physicsStep(),this.adjustTimeStep()):this.physicsStep(),this.adaptiveCounter+=1;else this.timestep=this.options.timestep,this.physicsStep();!0===this.stabilized&&this.revert(),this.stabilizationIterations++}}},{key:\"updatePhysicsData\",value:function(){this.physicsBody.forces={},this.physicsBody.physicsNodeIndices=[],this.physicsBody.physicsEdgeIndices=[];var t=this.body.nodes,e=this.body.edges;for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&!0===t[i].options.physics&&this.physicsBody.physicsNodeIndices.push(t[i].id);for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&!0===e[n].options.physics&&this.physicsBody.physicsEdgeIndices.push(e[n].id);for(var o=0;o<this.physicsBody.physicsNodeIndices.length;o++){var r=this.physicsBody.physicsNodeIndices[o];this.physicsBody.forces[r]={x:0,y:0},void 0===this.physicsBody.velocities[r]&&(this.physicsBody.velocities[r]={x:0,y:0})}for(var s in this.physicsBody.velocities)void 0===t[s]&&delete this.physicsBody.velocities[s]}},{key:\"revert\",value:function(){var t=zo(this.previousStates),e=this.body.nodes,i=this.physicsBody.velocities;this.referenceState={};for(var n=0;n<t.length;n++){var o=t[n];void 0!==e[o]?!0===e[o].options.physics&&(this.referenceState[o]={positions:{x:e[o].x,y:e[o].y}},i[o].x=this.previousStates[o].vx,i[o].y=this.previousStates[o].vy,e[o].x=this.previousStates[o].x,e[o].y=this.previousStates[o].y):delete this.previousStates[o]}}},{key:\"_evaluateStepQuality\",value:function(){var t,e,i=this.body.nodes,n=this.referenceState;for(var o in this.referenceState)if(Object.prototype.hasOwnProperty.call(this.referenceState,o)&&void 0!==i[o]&&(t=i[o].x-n[o].positions.x,e=i[o].y-n[o].positions.y,Math.sqrt(Math.pow(t,2)+Math.pow(e,2))>.3))return!1;return!0}},{key:\"moveNodes\",value:function(){for(var t=this.physicsBody.physicsNodeIndices,e=0,i=0,n=0;n<t.length;n++){var o=t[n],r=this._performStep(o);e=Math.max(e,r),i+=r}this.adaptiveTimestepEnabled=i/t.length<5,this.stabilized=e<this.options.minVelocity}},{key:\"calculateComponentVelocity\",value:function(t,e,i){t+=(e-this.modelOptions.damping*t)/i*this.timestep;var n=this.options.maxVelocity||1e9;return Math.abs(t)>n&&(t=t>0?n:-n),t}},{key:\"_performStep\",value:function(t){var e=this.body.nodes[t],i=this.physicsBody.forces[t];this.options.wind&&(i.x+=this.options.wind.x,i.y+=this.options.wind.y);var n=this.physicsBody.velocities[t];return this.previousStates[t]={x:e.x,y:e.y,vx:n.x,vy:n.y},!1===e.options.fixed.x?(n.x=this.calculateComponentVelocity(n.x,i.x,e.options.mass),e.x+=n.x*this.timestep):(i.x=0,n.x=0),!1===e.options.fixed.y?(n.y=this.calculateComponentVelocity(n.y,i.y,e.options.mass),e.y+=n.y*this.timestep):(i.y=0,n.y=0),Math.sqrt(Math.pow(n.x,2)+Math.pow(n.y,2))}},{key:\"_freezeNodes\",value:function(){var t=this.body.nodes;for(var e in t)if(Object.prototype.hasOwnProperty.call(t,e)&&t[e].x&&t[e].y){var i=t[e].options.fixed;this.freezeCache[e]={x:i.x,y:i.y},i.x=!0,i.y=!0}}},{key:\"_restoreFrozenNodes\",value:function(){var t=this.body.nodes;for(var e in t)Object.prototype.hasOwnProperty.call(t,e)&&void 0!==this.freezeCache[e]&&(t[e].options.fixed.x=this.freezeCache[e].x,t[e].options.fixed.y=this.freezeCache[e].y);this.freezeCache={}}},{key:\"stabilize\",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.options.stabilization.iterations;\"number\"!=typeof e&&(e=this.options.stabilization.iterations,console.error(\"The stabilize method needs a numeric amount of iterations. Switching to default: \",e)),0!==this.physicsBody.physicsNodeIndices.length?(this.adaptiveTimestep=this.options.adaptiveTimestep,this.body.emitter.emit(\"_resizeNodes\"),this.stopSimulation(),this.stabilized=!1,this.body.emitter.emit(\"_blockRedraw\"),this.targetIterations=e,!0===this.options.stabilization.onlyDynamicEdges&&this._freezeNodes(),this.stabilizationIterations=0,rs((function(){return t._stabilizationBatch()}),0)):this.ready=!0}},{key:\"_startStabilizing\",value:function(){return!0!==this.startedStabilization&&(this.body.emitter.emit(\"startStabilizing\"),this.startedStabilization=!0,!0)}},{key:\"_stabilizationBatch\",value:function(){var t=this,e=function(){return!1===t.stabilized&&t.stabilizationIterations<t.targetIterations},i=function(){t.body.emitter.emit(\"stabilizationProgress\",{iterations:t.stabilizationIterations,total:t.targetIterations})};this._startStabilizing()&&i();for(var n,o=0;e()&&o<this.options.stabilization.updateInterval;)this.physicsTick(),o++;(i(),e())?rs(Vt(n=this._stabilizationBatch).call(n,this),0):this._finalizeStabilization()}},{key:\"_finalizeStabilization\",value:function(){this.body.emitter.emit(\"_allowRedraw\"),!0===this.options.stabilization.fit&&this.body.emitter.emit(\"fit\"),!0===this.options.stabilization.onlyDynamicEdges&&this._restoreFrozenNodes(),this.body.emitter.emit(\"stabilizationIterationsDone\"),this.body.emitter.emit(\"_requestRedraw\"),!0===this.stabilized?this._emitStabilized():this.startSimulation(),this.ready=!0}},{key:\"_drawForces\",value:function(t){for(var e=0;e<this.physicsBody.physicsNodeIndices.length;e++){var i=this.physicsBody.physicsNodeIndices[e],n=this.body.nodes[i],o=this.physicsBody.forces[i],r=Math.sqrt(Math.pow(o.x,2)+Math.pow(o.x,2)),s=Math.min(Math.max(5,r),15),a=3*s,h=Vh((180-180*Math.min(1,Math.max(0,.03*r)))/360,1,1),l={x:n.x+20*o.x,y:n.y+20*o.y};t.lineWidth=s,t.strokeStyle=h,t.beginPath(),t.moveTo(n.x,n.y),t.lineTo(l.x,l.y),t.stroke();var d=Math.atan2(o.y,o.x);t.fillStyle=h,jf.draw(t,{type:\"arrow\",point:l,angle:d,length:a}),hs(t).call(t)}}}]),t}(),pp=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"getRange\",value:function(t){var e,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=1e9,o=-1e9,r=1e9,s=-1e9;if(i.length>0)for(var a=0;a<i.length;a++)r>(e=t[i[a]]).shape.boundingBox.left&&(r=e.shape.boundingBox.left),s<e.shape.boundingBox.right&&(s=e.shape.boundingBox.right),n>e.shape.boundingBox.top&&(n=e.shape.boundingBox.top),o<e.shape.boundingBox.bottom&&(o=e.shape.boundingBox.bottom);return 1e9===r&&-1e9===s&&1e9===n&&-1e9===o&&(n=0,o=0,r=0,s=0),{minX:r,maxX:s,minY:n,maxY:o}}},{key:\"getRangeCore\",value:function(t){var e,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=1e9,o=-1e9,r=1e9,s=-1e9;if(i.length>0)for(var a=0;a<i.length;a++)r>(e=t[i[a]]).x&&(r=e.x),s<e.x&&(s=e.x),n>e.y&&(n=e.y),o<e.y&&(o=e.y);return 1e9===r&&-1e9===s&&1e9===n&&-1e9===o&&(n=0,o=0,r=0,s=0),{minX:r,maxX:s,minY:n,maxY:o}}},{key:\"findCenter\",value:function(t){return{x:.5*(t.maxX+t.minX),y:.5*(t.maxY+t.minY)}}},{key:\"cloneOptions\",value:function(t,e){var i={};return void 0===e||\"node\"===e?(Ch(i,t.options,!0),i.x=t.x,i.y=t.y,i.amountOfConnections=t.edges.length):Ch(i,t.options,!0),i}}]),t}();function vp(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var gp=function(t){Ad(i,t);var e=vp(i);function i(t,n,o,r,s,a){var h;return Nn(this,i),(h=e.call(this,t,n,o,r,s,a)).isCluster=!0,h.containedNodes={},h.containedEdges={},h}return Fn(i,[{key:\"_openChildCluster\",value:function(t){var e=this,i=this.body.nodes[t];if(void 0===this.containedNodes[t])throw new Error(\"node with id: \"+t+\" not in current cluster\");if(!i.isCluster)throw new Error(\"node with id: \"+t+\" is not a cluster\");delete this.containedNodes[t],Dh(i.edges,(function(t){delete e.containedEdges[t.id]})),Dh(i.containedNodes,(function(t,i){e.containedNodes[i]=t})),i.containedNodes={},Dh(i.containedEdges,(function(t,i){e.containedEdges[i]=t})),i.containedEdges={},Dh(i.edges,(function(t){Dh(e.edges,(function(i){var n,o,r=Hr(n=i.clusteringEdgeReplacingIds).call(n,t.id);-1!==r&&(Dh(t.clusteringEdgeReplacingIds,(function(t){i.clusteringEdgeReplacingIds.push(t),e.body.edges[t].edgeReplacedById=i.id})),er(o=i.clusteringEdgeReplacingIds).call(o,r,1))}))})),i.edges=[]}}]),i}(cf),yp=function(){function t(e){var i=this;Nn(this,t),this.body=e,this.clusteredNodes={},this.clusteredEdges={},this.options={},this.defaultOptions={},At(this.options,this.defaultOptions),this.body.emitter.on(\"_resetData\",(function(){i.clusteredNodes={},i.clusteredEdges={}}))}return Fn(t,[{key:\"clusterByHubsize\",value:function(t,e){void 0===t?t=this._getHubSize():\"object\"===go(t)&&(e=this._checkOptions(t),t=this._getHubSize());for(var i=[],n=0;n<this.body.nodeIndices.length;n++){var o=this.body.nodes[this.body.nodeIndices[n]];o.edges.length>=t&&i.push(o.id)}for(var r=0;r<i.length;r++)this.clusterByConnection(i[r],e,!0);this.body.emitter.emit(\"_dataChanged\")}},{key:\"cluster\",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},i=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(void 0===e.joinCondition)throw new Error(\"Cannot call clusterByNodeData without a joinCondition function in the options.\");e=this._checkOptions(e);var n={},o={};Dh(this.body.nodes,(function(i,r){i.options&&!0===e.joinCondition(i.options)&&(n[r]=i,Dh(i.edges,(function(e){void 0===t.clusteredEdges[e.id]&&(o[e.id]=e)})))})),this._cluster(n,o,e,i)}},{key:\"clusterByEdgeCount\",value:function(t,e){var i=this,n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];e=this._checkOptions(e);for(var o,r,s,a=[],h={},l=function(n){var l={},d={},c=i.body.nodeIndices[n],u=i.body.nodes[c];if(void 0===h[c]){s=0,r=[];for(var f=0;f<u.edges.length;f++)o=u.edges[f],void 0===i.clusteredEdges[o.id]&&(o.toId!==o.fromId&&s++,r.push(o));if(s===t){for(var p=function(t){if(void 0===e.joinCondition||null===e.joinCondition)return!0;var i=pp.cloneOptions(t);return e.joinCondition(i)},v=!0,g=0;g<r.length;g++){o=r[g];var y=i._getConnectedId(o,c);if(!p(u)){v=!1;break}d[o.id]=o,l[c]=u,l[y]=i.body.nodes[y],h[c]=!0}if(zo(l).length>0&&zo(d).length>0&&!0===v){var m=function(){for(var t=0;t<a.length;++t)for(var e in l)if(void 0!==a[t].nodes[e])return a[t]}();if(void 0!==m){for(var b in l)void 0===m.nodes[b]&&(m.nodes[b]=l[b]);for(var w in d)void 0===m.edges[w]&&(m.edges[w]=d[w])}else a.push({nodes:l,edges:d})}}}},d=0;d<this.body.nodeIndices.length;d++)l(d);for(var c=0;c<a.length;c++)this._cluster(a[c].nodes,a[c].edges,e,!1);!0===n&&this.body.emitter.emit(\"_dataChanged\")}},{key:\"clusterOutliers\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this.clusterByEdgeCount(1,t,e)}},{key:\"clusterBridges\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this.clusterByEdgeCount(2,t,e)}},{key:\"clusterByConnection\",value:function(t,e){var i,n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];if(void 0===t)throw new Error(\"No nodeId supplied to clusterByConnection!\");if(void 0===this.body.nodes[t])throw new Error(\"The nodeId given to clusterByConnection does not exist!\");var o=this.body.nodes[t];void 0===(e=this._checkOptions(e,o)).clusterNodeProperties.x&&(e.clusterNodeProperties.x=o.x),void 0===e.clusterNodeProperties.y&&(e.clusterNodeProperties.y=o.y),void 0===e.clusterNodeProperties.fixed&&(e.clusterNodeProperties.fixed={},e.clusterNodeProperties.fixed.x=o.options.fixed.x,e.clusterNodeProperties.fixed.y=o.options.fixed.y);var r={},s={},a=o.id,h=pp.cloneOptions(o);r[a]=o;for(var l=0;l<o.edges.length;l++){var d=o.edges[l];if(void 0===this.clusteredEdges[d.id]){var c=this._getConnectedId(d,a);if(void 0===this.clusteredNodes[c])if(c!==a)if(void 0===e.joinCondition)s[d.id]=d,r[c]=this.body.nodes[c];else{var u=pp.cloneOptions(this.body.nodes[c]);!0===e.joinCondition(h,u)&&(s[d.id]=d,r[c]=this.body.nodes[c])}else s[d.id]=d}}var f=Io(i=zo(r)).call(i,(function(t){return r[t].id}));for(var p in r)if(Object.prototype.hasOwnProperty.call(r,p))for(var v=r[p],g=0;g<v.edges.length;g++){var y=v.edges[g];Hr(f).call(f,this._getConnectedId(y,v.id))>-1&&(s[y.id]=y)}this._cluster(r,s,e,n)}},{key:\"_createClusterEdges\",value:function(t,e,i,n){for(var o,r,s,a,h,l,d=zo(t),c=[],u=0;u<d.length;u++){s=t[r=d[u]];for(var f=0;f<s.edges.length;f++)o=s.edges[f],void 0===this.clusteredEdges[o.id]&&(o.toId==o.fromId?e[o.id]=o:o.toId==r?(a=i.id,l=h=o.fromId):(a=o.toId,h=i.id,l=a),void 0===t[l]&&c.push({edge:o,fromId:h,toId:a}))}for(var p=[],v=function(t){for(var e=0;e<p.length;e++){var i=p[e],n=t.fromId===i.fromId&&t.toId===i.toId,o=t.fromId===i.toId&&t.toId===i.fromId;if(n||o)return i}return null},g=0;g<c.length;g++){var y=c[g],m=y.edge,b=v(y);null===b?(b=this._createClusteredEdge(y.fromId,y.toId,m,n),p.push(b)):b.clusteringEdgeReplacingIds.push(m.id),this.body.edges[m.id].edgeReplacedById=b.id,this._backupEdgeOptions(m),m.setOptions({physics:!1})}}},{key:\"_checkOptions\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return void 0===t.clusterEdgeProperties&&(t.clusterEdgeProperties={}),void 0===t.clusterNodeProperties&&(t.clusterNodeProperties={}),t}},{key:\"_cluster\",value:function(t,e,i){var n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],o=[];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&void 0!==this.clusteredNodes[r]&&o.push(r);for(var s=0;s<o.length;++s)delete t[o[s]];if(0!=zo(t).length&&(1!=zo(t).length||1==i.clusterNodeProperties.allowSingleNodeCluster)){var a=Ch({},i.clusterNodeProperties);if(void 0!==i.processProperties){var h=[];for(var l in t)if(Object.prototype.hasOwnProperty.call(t,l)){var d=pp.cloneOptions(t[l]);h.push(d)}var c=[];for(var u in e)if(Object.prototype.hasOwnProperty.call(e,u)&&\"clusterEdge:\"!==u.substr(0,12)){var f=pp.cloneOptions(e[u],\"edge\");c.push(f)}if(!(a=i.processProperties(a,h,c)))throw new Error(\"The processProperties function does not return properties!\")}void 0===a.id&&(a.id=\"cluster:\"+Wc());var p=a.id;void 0===a.label&&(a.label=\"cluster\");var v=void 0;void 0===a.x&&(v=this._getClusterPosition(t),a.x=v.x),void 0===a.y&&(void 0===v&&(v=this._getClusterPosition(t)),a.y=v.y),a.id=p;var g=this.body.functions.createNode(a,gp);g.containedNodes=t,g.containedEdges=e,g.clusterEdgeProperties=i.clusterEdgeProperties,this.body.nodes[a.id]=g,this._clusterEdges(t,e,a,i.clusterEdgeProperties),a.id=void 0,!0===n&&this.body.emitter.emit(\"_dataChanged\")}}},{key:\"_backupEdgeOptions\",value:function(t){void 0===this.clusteredEdges[t.id]&&(this.clusteredEdges[t.id]={physics:t.options.physics})}},{key:\"_restoreEdge\",value:function(t){var e=this.clusteredEdges[t.id];void 0!==e&&(t.setOptions({physics:e.physics}),delete this.clusteredEdges[t.id])}},{key:\"isCluster\",value:function(t){return void 0!==this.body.nodes[t]?!0===this.body.nodes[t].isCluster:(console.error(\"Node does not exist.\"),!1)}},{key:\"_getClusterPosition\",value:function(t){for(var e,i=zo(t),n=t[i[0]].x,o=t[i[0]].x,r=t[i[0]].y,s=t[i[0]].y,a=1;a<i.length;a++)n=(e=t[i[a]]).x<n?e.x:n,o=e.x>o?e.x:o,r=e.y<r?e.y:r,s=e.y>s?e.y:s;return{x:.5*(n+o),y:.5*(r+s)}}},{key:\"openCluster\",value:function(t,e){var i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];if(void 0===t)throw new Error(\"No clusterNodeId supplied to openCluster.\");var n=this.body.nodes[t];if(void 0===n)throw new Error(\"The clusterNodeId supplied to openCluster does not exist.\");if(!0!==n.isCluster||void 0===n.containedNodes||void 0===n.containedEdges)throw new Error(\"The node:\"+t+\" is not a valid cluster.\");var o=this.findNode(t),r=Hr(o).call(o,t)-1;if(r>=0){var s=o[r],a=this.body.nodes[s];return a._openChildCluster(t),delete this.body.nodes[t],void(!0===i&&this.body.emitter.emit(\"_dataChanged\"))}var h=n.containedNodes,l=n.containedEdges;if(void 0!==e&&void 0!==e.releaseFunction&&\"function\"==typeof e.releaseFunction){var d={},c={x:n.x,y:n.y};for(var u in h)if(Object.prototype.hasOwnProperty.call(h,u)){var f=this.body.nodes[u];d[u]={x:f.x,y:f.y}}var p=e.releaseFunction(c,d);for(var v in h)if(Object.prototype.hasOwnProperty.call(h,v)){var g=this.body.nodes[v];void 0!==p[v]&&(g.x=void 0===p[v].x?n.x:p[v].x,g.y=void 0===p[v].y?n.y:p[v].y)}}else Dh(h,(function(t){!1===t.options.fixed.x&&(t.x=n.x),!1===t.options.fixed.y&&(t.y=n.y)}));for(var y in h)if(Object.prototype.hasOwnProperty.call(h,y)){var m=this.body.nodes[y];m.vx=n.vx,m.vy=n.vy,m.setOptions({physics:!0}),delete this.clusteredNodes[y]}for(var b=[],w=0;w<n.edges.length;w++)b.push(n.edges[w]);for(var k=0;k<b.length;k++){for(var _=b[k],x=this._getConnectedId(_,t),E=this.clusteredNodes[x],O=0;O<_.clusteringEdgeReplacingIds.length;O++){var C=_.clusteringEdgeReplacingIds[O],S=this.body.edges[C];if(void 0!==S)if(void 0!==E){var T=this.body.nodes[E.clusterId];T.containedEdges[S.id]=S,delete l[S.id];var M=S.fromId,P=S.toId;S.toId==x?P=E.clusterId:M=E.clusterId,this._createClusteredEdge(M,P,S,T.clusterEdgeProperties,{hidden:!1,physics:!0})}else this._restoreEdge(S)}_.remove()}for(var D in l)Object.prototype.hasOwnProperty.call(l,D)&&this._restoreEdge(l[D]);delete this.body.nodes[t],!0===i&&this.body.emitter.emit(\"_dataChanged\")}},{key:\"getNodesInCluster\",value:function(t){var e=[];if(!0===this.isCluster(t)){var i=this.body.nodes[t].containedNodes;for(var n in i)Object.prototype.hasOwnProperty.call(i,n)&&e.push(this.body.nodes[n].id)}return e}},{key:\"findNode\",value:function(t){for(var e,i=[],n=0;void 0!==this.clusteredNodes[t]&&n<100;){if(void 0===(e=this.body.nodes[t]))return[];i.push(e.id),t=this.clusteredNodes[t].clusterId,n++}return void 0===(e=this.body.nodes[t])?[]:(i.push(e.id),Xo(i).call(i),i)}},{key:\"updateClusteredNode\",value:function(t,e){if(void 0===t)throw new Error(\"No clusteredNodeId supplied to updateClusteredNode.\");if(void 0===e)throw new Error(\"No newOptions supplied to updateClusteredNode.\");if(void 0===this.body.nodes[t])throw new Error(\"The clusteredNodeId supplied to updateClusteredNode does not exist.\");this.body.nodes[t].setOptions(e),this.body.emitter.emit(\"_dataChanged\")}},{key:\"updateEdge\",value:function(t,e){if(void 0===t)throw new Error(\"No startEdgeId supplied to updateEdge.\");if(void 0===e)throw new Error(\"No newOptions supplied to updateEdge.\");if(void 0===this.body.edges[t])throw new Error(\"The startEdgeId supplied to updateEdge does not exist.\");for(var i=this.getClusteredEdges(t),n=0;n<i.length;n++){this.body.edges[i[n]].setOptions(e)}this.body.emitter.emit(\"_dataChanged\")}},{key:\"getClusteredEdges\",value:function(t){for(var e=[],i=0;void 0!==t&&void 0!==this.body.edges[t]&&i<100;)e.push(this.body.edges[t].id),t=this.body.edges[t].edgeReplacedById,i++;return Xo(e).call(e),e}},{key:\"getBaseEdge\",value:function(t){return this.getBaseEdges(t)[0]}},{key:\"getBaseEdges\",value:function(t){for(var e=[t],i=[],n=[],o=0;e.length>0&&o<100;){var r=e.pop();if(void 0!==r){var s=this.body.edges[r];if(void 0!==s){o++;var a=s.clusteringEdgeReplacingIds;if(void 0===a)n.push(r);else for(var h=0;h<a.length;++h){var l=a[h];-1===Hr(e).call(e,a)&&-1===Hr(i).call(i,a)&&e.push(l)}i.push(r)}}}return n}},{key:\"_getConnectedId\",value:function(t,e){return t.toId!=e?t.toId:(t.fromId,t.fromId)}},{key:\"_getHubSize\",value:function(){for(var t=0,e=0,i=0,n=0,o=0;o<this.body.nodeIndices.length;o++){var r=this.body.nodes[this.body.nodeIndices[o]];r.edges.length>n&&(n=r.edges.length),t+=r.edges.length,e+=Math.pow(r.edges.length,2),i+=1}t/=i;var s=(e/=i)-Math.pow(t,2),a=Math.sqrt(s),h=Math.floor(t+2*a);return h>n&&(h=n),h}},{key:\"_createClusteredEdge\",value:function(t,e,i,n,o){var r=pp.cloneOptions(i,\"edge\");Ch(r,n),r.from=t,r.to=e,r.id=\"clusterEdge:\"+Wc(),void 0!==o&&Ch(r,o);var s=this.body.functions.createEdge(r);return s.clusteringEdgeReplacingIds=[i.id],s.connect(),this.body.edges[s.id]=s,s}},{key:\"_clusterEdges\",value:function(t,e,i,n){if(e instanceof ep){var o=e,r={};r[o.id]=o,e=r}if(t instanceof cf){var s=t,a={};a[s.id]=s,t=a}if(null==i)throw new Error(\"_clusterEdges: parameter clusterNode required\");for(var h in void 0===n&&(n=i.clusterEdgeProperties),this._createClusterEdges(t,e,i,n),e)if(Object.prototype.hasOwnProperty.call(e,h)&&void 0!==this.body.edges[h]){var l=this.body.edges[h];this._backupEdgeOptions(l),l.setOptions({physics:!1})}for(var d in t)Object.prototype.hasOwnProperty.call(t,d)&&(this.clusteredNodes[d]={clusterId:i.id,node:this.body.nodes[d]},this.body.nodes[d].setOptions({physics:!1}))}},{key:\"_getClusterNodeForNode\",value:function(t){if(void 0!==t){var e=this.clusteredNodes[t];if(void 0!==e){var i=e.clusterId;if(void 0!==i)return this.body.nodes[i]}}}},{key:\"_filter\",value:function(t,e){var i=[];return Dh(t,(function(t){e(t)&&i.push(t)})),i}},{key:\"_updateState\",value:function(){var t,e=this,i=[],n={},o=function(t){Dh(e.body.nodes,(function(e){!0===e.isCluster&&t(e)}))};for(t in this.clusteredNodes){if(Object.prototype.hasOwnProperty.call(this.clusteredNodes,t))void 0===this.body.nodes[t]&&i.push(t)}o((function(t){for(var e=0;e<i.length;e++)delete t.containedNodes[i[e]]}));for(var r=0;r<i.length;r++)delete this.clusteredNodes[i[r]];Dh(this.clusteredEdges,(function(t){var i=e.body.edges[t];void 0!==i&&i.endPointsValid()||(n[t]=t)})),o((function(t){Dh(t.containedEdges,(function(t,e){t.endPointsValid()||n[e]||(n[e]=e)}))})),Dh(this.body.edges,(function(t,i){var o=!0,r=t.clusteringEdgeReplacingIds;if(void 0!==r){var s=0;Dh(r,(function(t){var i=e.body.edges[t];void 0!==i&&i.endPointsValid()&&(s+=1)})),o=s>0}t.endPointsValid()&&o||(n[i]=i)})),o((function(t){Dh(n,(function(i){delete t.containedEdges[i],Dh(t.edges,(function(o,r){o.id!==i?o.clusteringEdgeReplacingIds=e._filter(o.clusteringEdgeReplacingIds,(function(t){return!n[t]})):t.edges[r]=null})),t.edges=e._filter(t.edges,(function(t){return null!==t}))}))})),Dh(n,(function(t){delete e.clusteredEdges[t]})),Dh(n,(function(t){delete e.body.edges[t]})),Dh(zo(this.body.edges),(function(t){var i=e.body.edges[t],n=e._isClusteredNode(i.fromId)||e._isClusteredNode(i.toId);if(n!==e._isClusteredEdge(i.id))if(n){var o=e._getClusterNodeForNode(i.fromId);void 0!==o&&e._clusterEdges(e.body.nodes[i.fromId],i,o);var r=e._getClusterNodeForNode(i.toId);void 0!==r&&e._clusterEdges(e.body.nodes[i.toId],i,r)}else delete e._clusterEdges[t],e._restoreEdge(i)}));for(var s=!1,a=!0,h=function(){var t=[];o((function(e){var i=zo(e.containedNodes).length,n=!0===e.options.allowSingleNodeCluster;(n&&i<1||!n&&i<2)&&t.push(e.id)}));for(var i=0;i<t.length;++i)e.openCluster(t[i],{},!1);a=t.length>0,s=s||a};a;)h();s&&this._updateState()}},{key:\"_isClusteredNode\",value:function(t){return void 0!==this.clusteredNodes[t]}},{key:\"_isClusteredEdge\",value:function(t){return void 0!==this.clusteredEdges[t]}}]),t}();function mp(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return bp(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return bp(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function bp(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}var wp=function(){function t(e,i){var n;Nn(this,t),void 0!==window&&(n=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame),window.requestAnimationFrame=void 0===n?function(t){t()}:n,this.body=e,this.canvas=i,this.redrawRequested=!1,this.renderTimer=void 0,this.requiresTimeout=!0,this.renderingActive=!1,this.renderRequests=0,this.allowRedraw=!0,this.dragging=!1,this.zooming=!1,this.options={},this.defaultOptions={hideEdgesOnDrag:!1,hideEdgesOnZoom:!1,hideNodesOnDrag:!1},At(this.options,this.defaultOptions),this._determineBrowserMethod(),this.bindEventListeners()}return Fn(t,[{key:\"bindEventListeners\",value:function(){var t,e=this;this.body.emitter.on(\"dragStart\",(function(){e.dragging=!0})),this.body.emitter.on(\"dragEnd\",(function(){e.dragging=!1})),this.body.emitter.on(\"zoom\",(function(){e.zooming=!0,window.clearTimeout(e.zoomTimeoutId),e.zoomTimeoutId=rs((function(){var t;e.zooming=!1,Vt(t=e._requestRedraw).call(t,e)()}),250)})),this.body.emitter.on(\"_resizeNodes\",(function(){e._resizeNodes()})),this.body.emitter.on(\"_redraw\",(function(){!1===e.renderingActive&&e._redraw()})),this.body.emitter.on(\"_blockRedraw\",(function(){e.allowRedraw=!1})),this.body.emitter.on(\"_allowRedraw\",(function(){e.allowRedraw=!0,e.redrawRequested=!1})),this.body.emitter.on(\"_requestRedraw\",Vt(t=this._requestRedraw).call(t,this)),this.body.emitter.on(\"_startRendering\",(function(){e.renderRequests+=1,e.renderingActive=!0,e._startRendering()})),this.body.emitter.on(\"_stopRendering\",(function(){e.renderRequests-=1,e.renderingActive=e.renderRequests>0,e.renderTimer=void 0})),this.body.emitter.on(\"destroy\",(function(){e.renderRequests=0,e.allowRedraw=!1,e.renderingActive=!1,!0===e.requiresTimeout?clearTimeout(e.renderTimer):window.cancelAnimationFrame(e.renderTimer),e.body.emitter.off()}))}},{key:\"setOptions\",value:function(t){if(void 0!==t){Eh([\"hideEdgesOnDrag\",\"hideEdgesOnZoom\",\"hideNodesOnDrag\"],this.options,t)}}},{key:\"_requestNextFrame\",value:function(t,e){if(\"undefined\"!=typeof window){var i,n=window;return!0===this.requiresTimeout?i=rs(t,e):n.requestAnimationFrame&&(i=n.requestAnimationFrame(t)),i}}},{key:\"_startRendering\",value:function(){var t;!0===this.renderingActive&&(void 0===this.renderTimer&&(this.renderTimer=this._requestNextFrame(Vt(t=this._renderStep).call(t,this),this.simulationInterval)))}},{key:\"_renderStep\",value:function(){!0===this.renderingActive&&(this.renderTimer=void 0,!0===this.requiresTimeout&&this._startRendering(),this._redraw(),!1===this.requiresTimeout&&this._startRendering())}},{key:\"redraw\",value:function(){this.body.emitter.emit(\"setSize\"),this._redraw()}},{key:\"_requestRedraw\",value:function(){var t=this;!0!==this.redrawRequested&&!1===this.renderingActive&&!0===this.allowRedraw&&(this.redrawRequested=!0,this._requestNextFrame((function(){t._redraw(!1)}),0))}},{key:\"_redraw\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(!0===this.allowRedraw){this.body.emitter.emit(\"initRedraw\"),this.redrawRequested=!1;var e={drawExternalLabels:null};0!==this.canvas.frame.canvas.width&&0!==this.canvas.frame.canvas.height||this.canvas.setSize(),this.canvas.setTransform();var i=this.canvas.getContext(),n=this.canvas.frame.canvas.clientWidth,o=this.canvas.frame.canvas.clientHeight;if(i.clearRect(0,0,n,o),0===this.canvas.frame.clientWidth)return;if(i.save(),i.translate(this.body.view.translation.x,this.body.view.translation.y),i.scale(this.body.view.scale,this.body.view.scale),i.beginPath(),this.body.emitter.emit(\"beforeDrawing\",i),i.closePath(),!1===t&&(!1===this.dragging||!0===this.dragging&&!1===this.options.hideEdgesOnDrag)&&(!1===this.zooming||!0===this.zooming&&!1===this.options.hideEdgesOnZoom)&&this._drawEdges(i),!1===this.dragging||!0===this.dragging&&!1===this.options.hideNodesOnDrag){var r=this._drawNodes(i,t),s=r.drawExternalLabels;e.drawExternalLabels=s}!1===t&&(!1===this.dragging||!0===this.dragging&&!1===this.options.hideEdgesOnDrag)&&(!1===this.zooming||!0===this.zooming&&!1===this.options.hideEdgesOnZoom)&&this._drawArrows(i),null!=e.drawExternalLabels&&e.drawExternalLabels(),!1===t&&this._drawSelectionBox(i),i.beginPath(),this.body.emitter.emit(\"afterDrawing\",i),i.closePath(),i.restore(),!0===t&&i.clearRect(0,0,n,o)}}},{key:\"_resizeNodes\",value:function(){this.canvas.setTransform();var t=this.canvas.getContext();t.save(),t.translate(this.body.view.translation.x,this.body.view.translation.y),t.scale(this.body.view.scale,this.body.view.scale);var e,i=this.body.nodes;for(var n in i)Object.prototype.hasOwnProperty.call(i,n)&&((e=i[n]).resize(t),e.updateBoundingBox(t,e.selected));t.restore()}},{key:\"_drawNodes\",value:function(t){for(var e,i,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],o=this.body.nodes,r=this.body.nodeIndices,s=[],a=[],h=20,l=this.canvas.DOMtoCanvas({x:-h,y:-h}),d=this.canvas.DOMtoCanvas({x:this.canvas.frame.canvas.clientWidth+h,y:this.canvas.frame.canvas.clientHeight+h}),c={top:l.y,left:l.x,bottom:d.y,right:d.x},u=[],f=0;f<r.length;f++)if((e=o[r[f]]).hover)a.push(r[f]);else if(e.isSelected())s.push(r[f]);else if(!0===n){var p=e.draw(t);null!=p.drawExternalLabel&&u.push(p.drawExternalLabel)}else if(!0===e.isBoundingBoxOverlappingWith(c)){var v=e.draw(t);null!=v.drawExternalLabel&&u.push(v.drawExternalLabel)}else e.updateBoundingBox(t,e.selected);var g=s.length,y=a.length;for(i=0;i<g;i++){var m=(e=o[s[i]]).draw(t);null!=m.drawExternalLabel&&u.push(m.drawExternalLabel)}for(i=0;i<y;i++){var b=(e=o[a[i]]).draw(t);null!=b.drawExternalLabel&&u.push(b.drawExternalLabel)}return{drawExternalLabels:function(){var t,e=mp(u);try{for(e.s();!(t=e.n()).done;){(0,t.value)()}}catch(t){e.e(t)}finally{e.f()}}}}},{key:\"_drawEdges\",value:function(t){for(var e=this.body.edges,i=this.body.edgeIndices,n=0;n<i.length;n++){var o=e[i[n]];!0===o.connected&&o.draw(t)}}},{key:\"_drawArrows\",value:function(t){for(var e=this.body.edges,i=this.body.edgeIndices,n=0;n<i.length;n++){var o=e[i[n]];!0===o.connected&&o.drawArrows(t)}}},{key:\"_determineBrowserMethod\",value:function(){if(\"undefined\"!=typeof window){var t=navigator.userAgent.toLowerCase();this.requiresTimeout=!1,(-1!=Hr(t).call(t,\"msie 9.0\")||-1!=Hr(t).call(t,\"safari\")&&Hr(t).call(t,\"chrome\")<=-1)&&(this.requiresTimeout=!0)}else this.requiresTimeout=!0}},{key:\"_drawSelectionBox\",value:function(t){if(this.body.selectionBox.show){t.beginPath();var e=this.body.selectionBox.position.end.x-this.body.selectionBox.position.start.x,i=this.body.selectionBox.position.end.y-this.body.selectionBox.position.start.y;t.rect(this.body.selectionBox.position.start.x,this.body.selectionBox.position.start.y,e,i),t.fillStyle=\"rgba(151, 194, 252, 0.2)\",t.fillRect(this.body.selectionBox.position.start.x,this.body.selectionBox.position.start.y,e,i),t.strokeStyle=\"rgba(151, 194, 252, 1)\",t.stroke()}else t.closePath()}}]),t}(),kp=k.setInterval;function _p(t,e){e.inputHandler=function(t){t.isFirst&&e(t)},t.on(\"hammer.input\",e.inputHandler)}function xp(t,e){return e.inputHandler=function(t){t.isFinal&&e(t)},t.on(\"hammer.input\",e.inputHandler)}var Ep=function(){function t(e){Nn(this,t),this.body=e,this.pixelRatio=1,this.cameraState={},this.initialized=!1,this.canvasViewCenter={},this._cleanupCallbacks=[],this.options={},this.defaultOptions={autoResize:!0,height:\"100%\",width:\"100%\"},At(this.options,this.defaultOptions),this.bindEventListeners()}return Fn(t,[{key:\"bindEventListeners\",value:function(){var t,e=this;this.body.emitter.once(\"resize\",(function(t){0!==t.width&&(e.body.view.translation.x=.5*t.width),0!==t.height&&(e.body.view.translation.y=.5*t.height)})),this.body.emitter.on(\"setSize\",Vt(t=this.setSize).call(t,this)),this.body.emitter.on(\"destroy\",(function(){e.hammerFrame.destroy(),e.hammer.destroy(),e._cleanUp()}))}},{key:\"setOptions\",value:function(t){var e=this;if(void 0!==t){Eh([\"width\",\"height\",\"autoResize\"],this.options,t)}if(this._cleanUp(),!0===this.options.autoResize){var i;if(window.ResizeObserver){var n=new ResizeObserver((function(){!0===e.setSize()&&e.body.emitter.emit(\"_requestRedraw\")})),o=this.frame;n.observe(o),this._cleanupCallbacks.push((function(){n.unobserve(o)}))}else{var r=kp((function(){!0===e.setSize()&&e.body.emitter.emit(\"_requestRedraw\")}),1e3);this._cleanupCallbacks.push((function(){clearInterval(r)}))}var s=Vt(i=this._onResize).call(i,this);Bh(window,\"resize\",s),this._cleanupCallbacks.push((function(){zh(window,\"resize\",s)}))}}},{key:\"_cleanUp\",value:function(){var t,e,i;Wo(t=Xo(e=er(i=this._cleanupCallbacks).call(i,0)).call(e)).call(t,(function(t){try{t()}catch(t){console.error(t)}}))}},{key:\"_onResize\",value:function(){this.setSize(),this.body.emitter.emit(\"_redraw\")}},{key:\"_getCameraState\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.pixelRatio;!0===this.initialized&&(this.cameraState.previousWidth=this.frame.canvas.width/t,this.cameraState.previousHeight=this.frame.canvas.height/t,this.cameraState.scale=this.body.view.scale,this.cameraState.position=this.DOMtoCanvas({x:.5*this.frame.canvas.width/t,y:.5*this.frame.canvas.height/t}))}},{key:\"_setCameraState\",value:function(){if(void 0!==this.cameraState.scale&&0!==this.frame.canvas.clientWidth&&0!==this.frame.canvas.clientHeight&&0!==this.pixelRatio&&this.cameraState.previousWidth>0&&this.cameraState.previousHeight>0){var t=this.frame.canvas.width/this.pixelRatio/this.cameraState.previousWidth,e=this.frame.canvas.height/this.pixelRatio/this.cameraState.previousHeight,i=this.cameraState.scale;1!=t&&1!=e?i=.5*this.cameraState.scale*(t+e):1!=t?i=this.cameraState.scale*t:1!=e&&(i=this.cameraState.scale*e),this.body.view.scale=i;var n=this.DOMtoCanvas({x:.5*this.frame.canvas.clientWidth,y:.5*this.frame.canvas.clientHeight}),o={x:n.x-this.cameraState.position.x,y:n.y-this.cameraState.position.y};this.body.view.translation.x+=o.x*this.body.view.scale,this.body.view.translation.y+=o.y*this.body.view.scale}}},{key:\"_prepareValue\",value:function(t){if(\"number\"==typeof t)return t+\"px\";if(\"string\"==typeof t){if(-1!==Hr(t).call(t,\"%\")||-1!==Hr(t).call(t,\"px\"))return t;if(-1===Hr(t).call(t,\"%\"))return t+\"px\"}throw new Error(\"Could not use the value supplied for width or height:\"+t)}},{key:\"_create\",value:function(){for(;this.body.container.hasChildNodes();)this.body.container.removeChild(this.body.container.firstChild);if(this.frame=document.createElement(\"div\"),this.frame.className=\"vis-network\",this.frame.style.position=\"relative\",this.frame.style.overflow=\"hidden\",this.frame.tabIndex=0,this.frame.canvas=document.createElement(\"canvas\"),this.frame.canvas.style.position=\"relative\",this.frame.appendChild(this.frame.canvas),this.frame.canvas.getContext)this._setPixelRatio(),this.setTransform();else{var t=document.createElement(\"DIV\");t.style.color=\"red\",t.style.fontWeight=\"bold\",t.style.padding=\"10px\",t.innerText=\"Error: your browser does not support HTML canvas\",this.frame.canvas.appendChild(t)}this.body.container.appendChild(this.frame),this.body.view.scale=1,this.body.view.translation={x:.5*this.frame.canvas.clientWidth,y:.5*this.frame.canvas.clientHeight},this._bindHammer()}},{key:\"_bindHammer\",value:function(){var t=this;void 0!==this.hammer&&this.hammer.destroy(),this.drag={},this.pinch={},this.hammer=new ll(this.frame.canvas),this.hammer.get(\"pinch\").set({enable:!0}),this.hammer.get(\"pan\").set({threshold:5,direction:ll.DIRECTION_ALL}),_p(this.hammer,(function(e){t.body.eventListeners.onTouch(e)})),this.hammer.on(\"tap\",(function(e){t.body.eventListeners.onTap(e)})),this.hammer.on(\"doubletap\",(function(e){t.body.eventListeners.onDoubleTap(e)})),this.hammer.on(\"press\",(function(e){t.body.eventListeners.onHold(e)})),this.hammer.on(\"panstart\",(function(e){t.body.eventListeners.onDragStart(e)})),this.hammer.on(\"panmove\",(function(e){t.body.eventListeners.onDrag(e)})),this.hammer.on(\"panend\",(function(e){t.body.eventListeners.onDragEnd(e)})),this.hammer.on(\"pinch\",(function(e){t.body.eventListeners.onPinch(e)})),this.frame.canvas.addEventListener(\"wheel\",(function(e){t.body.eventListeners.onMouseWheel(e)})),this.frame.canvas.addEventListener(\"mousemove\",(function(e){t.body.eventListeners.onMouseMove(e)})),this.frame.canvas.addEventListener(\"contextmenu\",(function(e){t.body.eventListeners.onContext(e)})),this.hammerFrame=new ll(this.frame),xp(this.hammerFrame,(function(e){t.body.eventListeners.onRelease(e)}))}},{key:\"setSize\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.options.width,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.options.height;t=this._prepareValue(t),e=this._prepareValue(e);var i=!1,n=this.frame.canvas.width,o=this.frame.canvas.height,r=this.pixelRatio;if(this._setPixelRatio(),t!=this.options.width||e!=this.options.height||this.frame.style.width!=t||this.frame.style.height!=e)this._getCameraState(r),this.frame.style.width=t,this.frame.style.height=e,this.frame.canvas.style.width=\"100%\",this.frame.canvas.style.height=\"100%\",this.frame.canvas.width=Math.round(this.frame.canvas.clientWidth*this.pixelRatio),this.frame.canvas.height=Math.round(this.frame.canvas.clientHeight*this.pixelRatio),this.options.width=t,this.options.height=e,this.canvasViewCenter={x:.5*this.frame.clientWidth,y:.5*this.frame.clientHeight},i=!0;else{var s=Math.round(this.frame.canvas.clientWidth*this.pixelRatio),a=Math.round(this.frame.canvas.clientHeight*this.pixelRatio);this.frame.canvas.width===s&&this.frame.canvas.height===a||this._getCameraState(r),this.frame.canvas.width!==s&&(this.frame.canvas.width=s,i=!0),this.frame.canvas.height!==a&&(this.frame.canvas.height=a,i=!0)}return!0===i&&(this.body.emitter.emit(\"resize\",{width:Math.round(this.frame.canvas.width/this.pixelRatio),height:Math.round(this.frame.canvas.height/this.pixelRatio),oldWidth:Math.round(n/this.pixelRatio),oldHeight:Math.round(o/this.pixelRatio)}),this._setCameraState()),this.initialized=!0,i}},{key:\"getContext\",value:function(){return this.frame.canvas.getContext(\"2d\")}},{key:\"_determinePixelRatio\",value:function(){var t=this.getContext();if(void 0===t)throw new Error(\"Could not get canvax context\");var e=1;return\"undefined\"!=typeof window&&(e=window.devicePixelRatio||1),e/(t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1)}},{key:\"_setPixelRatio\",value:function(){this.pixelRatio=this._determinePixelRatio()}},{key:\"setTransform\",value:function(){var t=this.getContext();if(void 0===t)throw new Error(\"Could not get canvax context\");t.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0)}},{key:\"_XconvertDOMtoCanvas\",value:function(t){return(t-this.body.view.translation.x)/this.body.view.scale}},{key:\"_XconvertCanvasToDOM\",value:function(t){return t*this.body.view.scale+this.body.view.translation.x}},{key:\"_YconvertDOMtoCanvas\",value:function(t){return(t-this.body.view.translation.y)/this.body.view.scale}},{key:\"_YconvertCanvasToDOM\",value:function(t){return t*this.body.view.scale+this.body.view.translation.y}},{key:\"canvasToDOM\",value:function(t){return{x:this._XconvertCanvasToDOM(t.x),y:this._YconvertCanvasToDOM(t.y)}}},{key:\"DOMtoCanvas\",value:function(t){return{x:this._XconvertDOMtoCanvas(t.x),y:this._YconvertDOMtoCanvas(t.y)}}}]),t}();function Op(t,e){var i=At({nodes:e,minZoomLevel:Number.MIN_VALUE,maxZoomLevel:1},null!=t?t:{});if(!So(i.nodes))throw new TypeError(\"Nodes has to be an array of ids.\");if(0===i.nodes.length&&(i.nodes=e),!(\"number\"==typeof i.minZoomLevel&&i.minZoomLevel>0))throw new TypeError(\"Min zoom level has to be a number higher than zero.\");if(!(\"number\"==typeof i.maxZoomLevel&&i.minZoomLevel<=i.maxZoomLevel))throw new TypeError(\"Max zoom level has to be a number higher than min zoom level.\");return i}var Cp=function(){function t(e,i){var n,o,r=this;Nn(this,t),this.body=e,this.canvas=i,this.animationSpeed=1/this.renderRefreshRate,this.animationEasingFunction=\"easeInOutQuint\",this.easingTime=0,this.sourceScale=0,this.targetScale=0,this.sourceTranslation=0,this.targetTranslation=0,this.lockedOnNodeId=void 0,this.lockedOnNodeOffset=void 0,this.touchTime=0,this.viewFunction=void 0,this.body.emitter.on(\"fit\",Vt(n=this.fit).call(n,this)),this.body.emitter.on(\"animationFinished\",(function(){r.body.emitter.emit(\"_stopRendering\")})),this.body.emitter.on(\"unlockNode\",Vt(o=this.releaseNode).call(o,this))}return Fn(t,[{key:\"setOptions\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.options=t}},{key:\"fit\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];t=Op(t,this.body.nodeIndices);var i,n,o=this.canvas.frame.canvas.clientWidth,r=this.canvas.frame.canvas.clientHeight;if(0===o||0===r)n=1,i=pp.getRange(this.body.nodes,t.nodes);else if(!0===e){var s=0;for(var a in this.body.nodes)if(Object.prototype.hasOwnProperty.call(this.body.nodes,a)){var h=this.body.nodes[a];!0===h.predefinedPosition&&(s+=1)}if(s>.5*this.body.nodeIndices.length)return void this.fit(t,!1);i=pp.getRange(this.body.nodes,t.nodes);var l=this.body.nodeIndices.length;n=12.662/(l+7.4147)+.0964822;var d=Math.min(o/600,r/600);n*=d}else{this.body.emitter.emit(\"_resizeNodes\"),i=pp.getRange(this.body.nodes,t.nodes);var c=1.1*Math.abs(i.maxX-i.minX),u=1.1*Math.abs(i.maxY-i.minY),f=o/c,p=r/u;n=f<=p?f:p}n>t.maxZoomLevel?n=t.maxZoomLevel:n<t.minZoomLevel&&(n=t.minZoomLevel);var v=pp.findCenter(i),g={position:v,scale:n,animation:t.animation};this.moveTo(g)}},{key:\"focus\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(void 0!==this.body.nodes[t]){var i={x:this.body.nodes[t].x,y:this.body.nodes[t].y};e.position=i,e.lockedOnNode=t,this.moveTo(e)}else console.error(\"Node: \"+t+\" cannot be found.\")}},{key:\"moveTo\",value:function(t){if(void 0!==t){if(null!=t.offset){if(null!=t.offset.x){if(t.offset.x=+t.offset.x,!wd(t.offset.x))throw new TypeError('The option \"offset.x\" has to be a finite number.')}else t.offset.x=0;if(null!=t.offset.y){if(t.offset.y=+t.offset.y,!wd(t.offset.y))throw new TypeError('The option \"offset.y\" has to be a finite number.')}else t.offset.x=0}else t.offset={x:0,y:0};if(null!=t.position){if(null!=t.position.x){if(t.position.x=+t.position.x,!wd(t.position.x))throw new TypeError('The option \"position.x\" has to be a finite number.')}else t.position.x=0;if(null!=t.position.y){if(t.position.y=+t.position.y,!wd(t.position.y))throw new TypeError('The option \"position.y\" has to be a finite number.')}else t.position.x=0}else t.position=this.getViewPosition();if(null!=t.scale){if(t.scale=+t.scale,!(t.scale>0))throw new TypeError('The option \"scale\" has to be a number greater than zero.')}else t.scale=this.body.view.scale;void 0===t.animation&&(t.animation={duration:0}),!1===t.animation&&(t.animation={duration:0}),!0===t.animation&&(t.animation={}),void 0===t.animation.duration&&(t.animation.duration=1e3),void 0===t.animation.easingFunction&&(t.animation.easingFunction=\"easeInOutQuad\"),this.animateView(t)}else t={}}},{key:\"animateView\",value:function(t){if(void 0!==t){this.animationEasingFunction=t.animation.easingFunction,this.releaseNode(),!0===t.locked&&(this.lockedOnNodeId=t.lockedOnNode,this.lockedOnNodeOffset=t.offset),0!=this.easingTime&&this._transitionRedraw(!0),this.sourceScale=this.body.view.scale,this.sourceTranslation=this.body.view.translation,this.targetScale=t.scale,this.body.view.scale=this.targetScale;var e,i,n=this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight}),o=n.x-t.position.x,r=n.y-t.position.y;if(this.targetTranslation={x:this.sourceTranslation.x+o*this.targetScale+t.offset.x,y:this.sourceTranslation.y+r*this.targetScale+t.offset.y},0===t.animation.duration)if(null!=this.lockedOnNodeId)this.viewFunction=Vt(e=this._lockedRedraw).call(e,this),this.body.emitter.on(\"initRedraw\",this.viewFunction);else this.body.view.scale=this.targetScale,this.body.view.translation=this.targetTranslation,this.body.emitter.emit(\"_requestRedraw\");else this.animationSpeed=1/(60*t.animation.duration*.001)||1/60,this.animationEasingFunction=t.animation.easingFunction,this.viewFunction=Vt(i=this._transitionRedraw).call(i,this),this.body.emitter.on(\"initRedraw\",this.viewFunction),this.body.emitter.emit(\"_startRendering\")}}},{key:\"_lockedRedraw\",value:function(){var t=this.body.nodes[this.lockedOnNodeId].x,e=this.body.nodes[this.lockedOnNodeId].y,i=this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight}),n=i.x-t,o=i.y-e,r=this.body.view.translation,s={x:r.x+n*this.body.view.scale+this.lockedOnNodeOffset.x,y:r.y+o*this.body.view.scale+this.lockedOnNodeOffset.y};this.body.view.translation=s}},{key:\"releaseNode\",value:function(){void 0!==this.lockedOnNodeId&&void 0!==this.viewFunction&&(this.body.emitter.off(\"initRedraw\",this.viewFunction),this.lockedOnNodeId=void 0,this.lockedOnNodeOffset=void 0)}},{key:\"_transitionRedraw\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.easingTime+=this.animationSpeed,this.easingTime=!0===t?1:this.easingTime;var e=Zh[this.animationEasingFunction](this.easingTime);if(this.body.view.scale=this.sourceScale+(this.targetScale-this.sourceScale)*e,this.body.view.translation={x:this.sourceTranslation.x+(this.targetTranslation.x-this.sourceTranslation.x)*e,y:this.sourceTranslation.y+(this.targetTranslation.y-this.sourceTranslation.y)*e},this.easingTime>=1){var i;if(this.body.emitter.off(\"initRedraw\",this.viewFunction),this.easingTime=0,null!=this.lockedOnNodeId)this.viewFunction=Vt(i=this._lockedRedraw).call(i,this),this.body.emitter.on(\"initRedraw\",this.viewFunction);this.body.emitter.emit(\"animationFinished\")}}},{key:\"getScale\",value:function(){return this.body.view.scale}},{key:\"getViewPosition\",value:function(){return this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight})}}]),t}();function Sp(t){var e,i=t&&t.preventDefault||!1,n=t&&t.container||window,o={},r={keydown:{},keyup:{}},s={};for(e=97;e<=122;e++)s[String.fromCharCode(e)]={code:e-97+65,shift:!1};for(e=65;e<=90;e++)s[String.fromCharCode(e)]={code:e,shift:!0};for(e=0;e<=9;e++)s[\"\"+e]={code:48+e,shift:!1};for(e=1;e<=12;e++)s[\"F\"+e]={code:111+e,shift:!1};for(e=0;e<=9;e++)s[\"num\"+e]={code:96+e,shift:!1};s[\"num*\"]={code:106,shift:!1},s[\"num+\"]={code:107,shift:!1},s[\"num-\"]={code:109,shift:!1},s[\"num/\"]={code:111,shift:!1},s[\"num.\"]={code:110,shift:!1},s.left={code:37,shift:!1},s.up={code:38,shift:!1},s.right={code:39,shift:!1},s.down={code:40,shift:!1},s.space={code:32,shift:!1},s.enter={code:13,shift:!1},s.shift={code:16,shift:void 0},s.esc={code:27,shift:!1},s.backspace={code:8,shift:!1},s.tab={code:9,shift:!1},s.ctrl={code:17,shift:!1},s.alt={code:18,shift:!1},s.delete={code:46,shift:!1},s.pageup={code:33,shift:!1},s.pagedown={code:34,shift:!1},s[\"=\"]={code:187,shift:!1},s[\"-\"]={code:189,shift:!1},s[\"]\"]={code:221,shift:!1},s[\"[\"]={code:219,shift:!1};var a=function(t){l(t,\"keydown\")},h=function(t){l(t,\"keyup\")},l=function(t,e){if(void 0!==r[e][t.keyCode]){for(var n=r[e][t.keyCode],o=0;o<n.length;o++)(void 0===n[o].shift||1==n[o].shift&&1==t.shiftKey||0==n[o].shift&&0==t.shiftKey)&&n[o].fn(t);1==i&&t.preventDefault()}};return o.bind=function(t,e,i){if(void 0===i&&(i=\"keydown\"),void 0===s[t])throw new Error(\"unsupported key: \"+t);void 0===r[i][s[t].code]&&(r[i][s[t].code]=[]),r[i][s[t].code].push({fn:e,shift:s[t].shift})},o.bindAll=function(t,e){for(var i in void 0===e&&(e=\"keydown\"),s)s.hasOwnProperty(i)&&o.bind(i,t,e)},o.getKey=function(t){for(var e in s)if(s.hasOwnProperty(e)){if(1==t.shiftKey&&1==s[e].shift&&t.keyCode==s[e].code)return e;if(0==t.shiftKey&&0==s[e].shift&&t.keyCode==s[e].code)return e;if(t.keyCode==s[e].code&&\"shift\"==e)return e}return\"unknown key, currently not supported\"},o.unbind=function(t,e,i){if(void 0===i&&(i=\"keydown\"),void 0===s[t])throw new Error(\"unsupported key: \"+t);if(void 0!==e){var n=[],o=r[i][s[t].code];if(void 0!==o)for(var a=0;a<o.length;a++)o[a].fn==e&&o[a].shift==s[t].shift||n.push(r[i][s[t].code][a]);r[i][s[t].code]=n}else r[i][s[t].code]=[]},o.reset=function(){r={keydown:{},keyup:{}}},o.destroy=function(){r={keydown:{},keyup:{}},n.removeEventListener(\"keydown\",a,!0),n.removeEventListener(\"keyup\",h,!0)},n.addEventListener(\"keydown\",a,!0),n.addEventListener(\"keyup\",h,!0),o}var Tp=Object.freeze({__proto__:null,default:Sp}),Mp=function(){function t(e,i){var n=this;Nn(this,t),this.body=e,this.canvas=i,this.iconsCreated=!1,this.navigationHammers=[],this.boundFunctions={},this.touchTime=0,this.activated=!1,this.body.emitter.on(\"activate\",(function(){n.activated=!0,n.configureKeyboardBindings()})),this.body.emitter.on(\"deactivate\",(function(){n.activated=!1,n.configureKeyboardBindings()})),this.body.emitter.on(\"destroy\",(function(){void 0!==n.keycharm&&n.keycharm.destroy()})),this.options={}}return Fn(t,[{key:\"setOptions\",value:function(t){void 0!==t&&(this.options=t,this.create())}},{key:\"create\",value:function(){!0===this.options.navigationButtons?!1===this.iconsCreated&&this.loadNavigationElements():!0===this.iconsCreated&&this.cleanNavigation(),this.configureKeyboardBindings()}},{key:\"cleanNavigation\",value:function(){if(0!=this.navigationHammers.length){for(var t=0;t<this.navigationHammers.length;t++)this.navigationHammers[t].destroy();this.navigationHammers=[]}this.navigationDOM&&this.navigationDOM.wrapper&&this.navigationDOM.wrapper.parentNode&&this.navigationDOM.wrapper.parentNode.removeChild(this.navigationDOM.wrapper),this.iconsCreated=!1}},{key:\"loadNavigationElements\",value:function(){var t=this;this.cleanNavigation(),this.navigationDOM={};var e=[\"up\",\"down\",\"left\",\"right\",\"zoomIn\",\"zoomOut\",\"zoomExtends\"],i=[\"_moveUp\",\"_moveDown\",\"_moveLeft\",\"_moveRight\",\"_zoomIn\",\"_zoomOut\",\"_fit\"];this.navigationDOM.wrapper=document.createElement(\"div\"),this.navigationDOM.wrapper.className=\"vis-navigation\",this.canvas.frame.appendChild(this.navigationDOM.wrapper);for(var n=0;n<e.length;n++){this.navigationDOM[e[n]]=document.createElement(\"div\"),this.navigationDOM[e[n]].className=\"vis-button vis-\"+e[n],this.navigationDOM.wrapper.appendChild(this.navigationDOM[e[n]]);var o,r,s=new ll(this.navigationDOM[e[n]]);if(\"_fit\"===i[n])_p(s,Vt(o=this._fit).call(o,this));else _p(s,Vt(r=this.bindToRedraw).call(r,this,i[n]));this.navigationHammers.push(s)}var a=new ll(this.canvas.frame);xp(a,(function(){t._stopMovement()})),this.navigationHammers.push(a),this.iconsCreated=!0}},{key:\"bindToRedraw\",value:function(t){var e;void 0===this.boundFunctions[t]&&(this.boundFunctions[t]=Vt(e=this[t]).call(e,this),this.body.emitter.on(\"initRedraw\",this.boundFunctions[t]),this.body.emitter.emit(\"_startRendering\"))}},{key:\"unbindFromRedraw\",value:function(t){void 0!==this.boundFunctions[t]&&(this.body.emitter.off(\"initRedraw\",this.boundFunctions[t]),this.body.emitter.emit(\"_stopRendering\"),delete this.boundFunctions[t])}},{key:\"_fit\",value:function(){(new Date).valueOf()-this.touchTime>700&&(this.body.emitter.emit(\"fit\",{duration:700}),this.touchTime=(new Date).valueOf())}},{key:\"_stopMovement\",value:function(){for(var t in this.boundFunctions)Object.prototype.hasOwnProperty.call(this.boundFunctions,t)&&(this.body.emitter.off(\"initRedraw\",this.boundFunctions[t]),this.body.emitter.emit(\"_stopRendering\"));this.boundFunctions={}}},{key:\"_moveUp\",value:function(){this.body.view.translation.y+=this.options.keyboard.speed.y}},{key:\"_moveDown\",value:function(){this.body.view.translation.y-=this.options.keyboard.speed.y}},{key:\"_moveLeft\",value:function(){this.body.view.translation.x+=this.options.keyboard.speed.x}},{key:\"_moveRight\",value:function(){this.body.view.translation.x-=this.options.keyboard.speed.x}},{key:\"_zoomIn\",value:function(){var t=this.body.view.scale,e=this.body.view.scale*(1+this.options.keyboard.speed.zoom),i=this.body.view.translation,n=e/t,o=(1-n)*this.canvas.canvasViewCenter.x+i.x*n,r=(1-n)*this.canvas.canvasViewCenter.y+i.y*n;this.body.view.scale=e,this.body.view.translation={x:o,y:r},this.body.emitter.emit(\"zoom\",{direction:\"+\",scale:this.body.view.scale,pointer:null})}},{key:\"_zoomOut\",value:function(){var t=this.body.view.scale,e=this.body.view.scale/(1+this.options.keyboard.speed.zoom),i=this.body.view.translation,n=e/t,o=(1-n)*this.canvas.canvasViewCenter.x+i.x*n,r=(1-n)*this.canvas.canvasViewCenter.y+i.y*n;this.body.view.scale=e,this.body.view.translation={x:o,y:r},this.body.emitter.emit(\"zoom\",{direction:\"-\",scale:this.body.view.scale,pointer:null})}},{key:\"configureKeyboardBindings\",value:function(){var t,e,i,n,o,r,s,a,h,l,d,c,u,f,p,v,g,y,m,b,w,k,_,x,E=this;(void 0!==this.keycharm&&this.keycharm.destroy(),!0===this.options.keyboard.enabled)&&(!0===this.options.keyboard.bindToWindow?this.keycharm=Sp({container:window,preventDefault:!0}):this.keycharm=Sp({container:this.canvas.frame,preventDefault:!0}),this.keycharm.reset(),!0===this.activated&&(Vt(t=this.keycharm).call(t,\"up\",(function(){E.bindToRedraw(\"_moveUp\")}),\"keydown\"),Vt(e=this.keycharm).call(e,\"down\",(function(){E.bindToRedraw(\"_moveDown\")}),\"keydown\"),Vt(i=this.keycharm).call(i,\"left\",(function(){E.bindToRedraw(\"_moveLeft\")}),\"keydown\"),Vt(n=this.keycharm).call(n,\"right\",(function(){E.bindToRedraw(\"_moveRight\")}),\"keydown\"),Vt(o=this.keycharm).call(o,\"=\",(function(){E.bindToRedraw(\"_zoomIn\")}),\"keydown\"),Vt(r=this.keycharm).call(r,\"num+\",(function(){E.bindToRedraw(\"_zoomIn\")}),\"keydown\"),Vt(s=this.keycharm).call(s,\"num-\",(function(){E.bindToRedraw(\"_zoomOut\")}),\"keydown\"),Vt(a=this.keycharm).call(a,\"-\",(function(){E.bindToRedraw(\"_zoomOut\")}),\"keydown\"),Vt(h=this.keycharm).call(h,\"[\",(function(){E.bindToRedraw(\"_zoomOut\")}),\"keydown\"),Vt(l=this.keycharm).call(l,\"]\",(function(){E.bindToRedraw(\"_zoomIn\")}),\"keydown\"),Vt(d=this.keycharm).call(d,\"pageup\",(function(){E.bindToRedraw(\"_zoomIn\")}),\"keydown\"),Vt(c=this.keycharm).call(c,\"pagedown\",(function(){E.bindToRedraw(\"_zoomOut\")}),\"keydown\"),Vt(u=this.keycharm).call(u,\"up\",(function(){E.unbindFromRedraw(\"_moveUp\")}),\"keyup\"),Vt(f=this.keycharm).call(f,\"down\",(function(){E.unbindFromRedraw(\"_moveDown\")}),\"keyup\"),Vt(p=this.keycharm).call(p,\"left\",(function(){E.unbindFromRedraw(\"_moveLeft\")}),\"keyup\"),Vt(v=this.keycharm).call(v,\"right\",(function(){E.unbindFromRedraw(\"_moveRight\")}),\"keyup\"),Vt(g=this.keycharm).call(g,\"=\",(function(){E.unbindFromRedraw(\"_zoomIn\")}),\"keyup\"),Vt(y=this.keycharm).call(y,\"num+\",(function(){E.unbindFromRedraw(\"_zoomIn\")}),\"keyup\"),Vt(m=this.keycharm).call(m,\"num-\",(function(){E.unbindFromRedraw(\"_zoomOut\")}),\"keyup\"),Vt(b=this.keycharm).call(b,\"-\",(function(){E.unbindFromRedraw(\"_zoomOut\")}),\"keyup\"),Vt(w=this.keycharm).call(w,\"[\",(function(){E.unbindFromRedraw(\"_zoomOut\")}),\"keyup\"),Vt(k=this.keycharm).call(k,\"]\",(function(){E.unbindFromRedraw(\"_zoomIn\")}),\"keyup\"),Vt(_=this.keycharm).call(_,\"pageup\",(function(){E.unbindFromRedraw(\"_zoomIn\")}),\"keyup\"),Vt(x=this.keycharm).call(x,\"pagedown\",(function(){E.unbindFromRedraw(\"_zoomOut\")}),\"keyup\")))}}]),t}();function Pp(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return Dp(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Dp(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function Dp(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}var Ip=function(){function t(e,i,n){var o,r,s,a,h,l,d,c,u,f,p,v,g;Nn(this,t),this.body=e,this.canvas=i,this.selectionHandler=n,this.navigationHandler=new Mp(e,i),this.body.eventListeners.onTap=Vt(o=this.onTap).call(o,this),this.body.eventListeners.onTouch=Vt(r=this.onTouch).call(r,this),this.body.eventListeners.onDoubleTap=Vt(s=this.onDoubleTap).call(s,this),this.body.eventListeners.onHold=Vt(a=this.onHold).call(a,this),this.body.eventListeners.onDragStart=Vt(h=this.onDragStart).call(h,this),this.body.eventListeners.onDrag=Vt(l=this.onDrag).call(l,this),this.body.eventListeners.onDragEnd=Vt(d=this.onDragEnd).call(d,this),this.body.eventListeners.onMouseWheel=Vt(c=this.onMouseWheel).call(c,this),this.body.eventListeners.onPinch=Vt(u=this.onPinch).call(u,this),this.body.eventListeners.onMouseMove=Vt(f=this.onMouseMove).call(f,this),this.body.eventListeners.onRelease=Vt(p=this.onRelease).call(p,this),this.body.eventListeners.onContext=Vt(v=this.onContext).call(v,this),this.touchTime=0,this.drag={},this.pinch={},this.popup=void 0,this.popupObj=void 0,this.popupTimer=void 0,this.body.functions.getPointer=Vt(g=this.getPointer).call(g,this),this.options={},this.defaultOptions={dragNodes:!0,dragView:!0,hover:!1,keyboard:{enabled:!1,speed:{x:10,y:10,zoom:.02},bindToWindow:!0,autoFocus:!0},navigationButtons:!1,tooltipDelay:300,zoomView:!0,zoomSpeed:1},At(this.options,this.defaultOptions),this.bindEventListeners()}return Fn(t,[{key:\"bindEventListeners\",value:function(){var t=this;this.body.emitter.on(\"destroy\",(function(){clearTimeout(t.popupTimer),delete t.body.functions.getPointer}))}},{key:\"setOptions\",value:function(t){if(void 0!==t){Oh([\"hideEdgesOnDrag\",\"hideEdgesOnZoom\",\"hideNodesOnDrag\",\"keyboard\",\"multiselect\",\"selectable\",\"selectConnectedEdges\"],this.options,t),$h(this.options,t,\"keyboard\"),t.tooltip&&(At(this.options.tooltip,t.tooltip),t.tooltip.color&&(this.options.tooltip.color=Rh(t.tooltip.color)))}this.navigationHandler.setOptions(this.options)}},{key:\"getPointer\",value:function(t){return{x:t.x-Mh(this.canvas.frame.canvas),y:t.y-Ph(this.canvas.frame.canvas)}}},{key:\"onTouch\",value:function(t){(new Date).valueOf()-this.touchTime>50&&(this.drag.pointer=this.getPointer(t.center),this.drag.pinched=!1,this.pinch.scale=this.body.view.scale,this.touchTime=(new Date).valueOf())}},{key:\"onTap\",value:function(t){var e=this.getPointer(t.center),i=this.selectionHandler.options.multiselect&&(t.changedPointers[0].ctrlKey||t.changedPointers[0].metaKey);this.checkSelectionChanges(e,i),this.selectionHandler.commitAndEmit(e,t),this.selectionHandler.generateClickEvent(\"click\",t,e)}},{key:\"onDoubleTap\",value:function(t){var e=this.getPointer(t.center);this.selectionHandler.generateClickEvent(\"doubleClick\",t,e)}},{key:\"onHold\",value:function(t){var e=this.getPointer(t.center),i=this.selectionHandler.options.multiselect;this.checkSelectionChanges(e,i),this.selectionHandler.commitAndEmit(e,t),this.selectionHandler.generateClickEvent(\"click\",t,e),this.selectionHandler.generateClickEvent(\"hold\",t,e)}},{key:\"onRelease\",value:function(t){if((new Date).valueOf()-this.touchTime>10){var e=this.getPointer(t.center);this.selectionHandler.generateClickEvent(\"release\",t,e),this.touchTime=(new Date).valueOf()}}},{key:\"onContext\",value:function(t){var e=this.getPointer({x:t.clientX,y:t.clientY});this.selectionHandler.generateClickEvent(\"oncontext\",t,e)}},{key:\"checkSelectionChanges\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];!0===e?this.selectionHandler.selectAdditionalOnPoint(t):this.selectionHandler.selectOnPoint(t)}},{key:\"_determineDifference\",value:function(t,e){var i=function(t,e){for(var i=[],n=0;n<t.length;n++){var o=t[n];-1===Hr(e).call(e,o)&&i.push(o)}return i};return{nodes:i(t.nodes,e.nodes),edges:i(t.edges,e.edges)}}},{key:\"onDragStart\",value:function(t){if(!this.drag.dragging){void 0===this.drag.pointer&&this.onTouch(t);var e=this.selectionHandler.getNodeAt(this.drag.pointer);if(this.drag.dragging=!0,this.drag.selection=[],this.drag.translation=At({},this.body.view.translation),this.drag.nodeId=void 0,t.srcEvent.shiftKey){this.body.selectionBox.show=!0;var i=this.getPointer(t.center);this.body.selectionBox.position.start={x:this.canvas._XconvertDOMtoCanvas(i.x),y:this.canvas._YconvertDOMtoCanvas(i.y)},this.body.selectionBox.position.end={x:this.canvas._XconvertDOMtoCanvas(i.x),y:this.canvas._YconvertDOMtoCanvas(i.y)}}if(void 0!==e&&!0===this.options.dragNodes){this.drag.nodeId=e.id,!1===e.isSelected()&&(this.selectionHandler.unselectAll(),this.selectionHandler.selectObject(e)),this.selectionHandler.generateClickEvent(\"dragStart\",t,this.drag.pointer);var n,o=Pp(this.selectionHandler.getSelectedNodes());try{for(o.s();!(n=o.n()).done;){var r=n.value,s={id:r.id,node:r,x:r.x,y:r.y,xFixed:r.options.fixed.x,yFixed:r.options.fixed.y};r.options.fixed.x=!0,r.options.fixed.y=!0,this.drag.selection.push(s)}}catch(t){o.e(t)}finally{o.f()}}else this.selectionHandler.generateClickEvent(\"dragStart\",t,this.drag.pointer,void 0,!0)}}},{key:\"onDrag\",value:function(t){var e=this;if(!0!==this.drag.pinched){this.body.emitter.emit(\"unlockNode\");var i=this.getPointer(t.center),n=this.drag.selection;if(n&&n.length&&!0===this.options.dragNodes){this.selectionHandler.generateClickEvent(\"dragging\",t,i);var o=i.x-this.drag.pointer.x,r=i.y-this.drag.pointer.y;Wo(n).call(n,(function(t){var i=t.node;!1===t.xFixed&&(i.x=e.canvas._XconvertDOMtoCanvas(e.canvas._XconvertCanvasToDOM(t.x)+o)),!1===t.yFixed&&(i.y=e.canvas._YconvertDOMtoCanvas(e.canvas._YconvertCanvasToDOM(t.y)+r))})),this.body.emitter.emit(\"startSimulation\")}else{if(t.srcEvent.shiftKey){if(this.selectionHandler.generateClickEvent(\"dragging\",t,i,void 0,!0),void 0===this.drag.pointer)return void this.onDragStart(t);this.body.selectionBox.position.end={x:this.canvas._XconvertDOMtoCanvas(i.x),y:this.canvas._YconvertDOMtoCanvas(i.y)},this.body.emitter.emit(\"_requestRedraw\")}if(!0===this.options.dragView&&!t.srcEvent.shiftKey){if(this.selectionHandler.generateClickEvent(\"dragging\",t,i,void 0,!0),void 0===this.drag.pointer)return void this.onDragStart(t);var s=i.x-this.drag.pointer.x,a=i.y-this.drag.pointer.y;this.body.view.translation={x:this.drag.translation.x+s,y:this.drag.translation.y+a},this.body.emitter.emit(\"_requestRedraw\")}}}}},{key:\"onDragEnd\",value:function(t){var e=this;if(this.drag.dragging=!1,this.body.selectionBox.show){var i;this.body.selectionBox.show=!1;var n=this.body.selectionBox.position,o={minX:Math.min(n.start.x,n.end.x),minY:Math.min(n.start.y,n.end.y),maxX:Math.max(n.start.x,n.end.x),maxY:Math.max(n.start.y,n.end.y)},r=mr(i=this.body.nodeIndices).call(i,(function(t){var i=e.body.nodes[t];return i.x>=o.minX&&i.x<=o.maxX&&i.y>=o.minY&&i.y<=o.maxY}));Wo(r).call(r,(function(t){return e.selectionHandler.selectObject(e.body.nodes[t])}));var s=this.getPointer(t.center);this.selectionHandler.commitAndEmit(s,t),this.selectionHandler.generateClickEvent(\"dragEnd\",t,this.getPointer(t.center),void 0,!0),this.body.emitter.emit(\"_requestRedraw\")}else{var a=this.drag.selection;a&&a.length?(Wo(a).call(a,(function(t){t.node.options.fixed.x=t.xFixed,t.node.options.fixed.y=t.yFixed})),this.selectionHandler.generateClickEvent(\"dragEnd\",t,this.getPointer(t.center)),this.body.emitter.emit(\"startSimulation\")):(this.selectionHandler.generateClickEvent(\"dragEnd\",t,this.getPointer(t.center),void 0,!0),this.body.emitter.emit(\"_requestRedraw\"))}}},{key:\"onPinch\",value:function(t){var e=this.getPointer(t.center);this.drag.pinched=!0,void 0===this.pinch.scale&&(this.pinch.scale=1);var i=this.pinch.scale*t.scale;this.zoom(i,e)}},{key:\"zoom\",value:function(t,e){if(!0===this.options.zoomView){var i=this.body.view.scale;t<1e-5&&(t=1e-5),t>10&&(t=10);var n=void 0;void 0!==this.drag&&!0===this.drag.dragging&&(n=this.canvas.DOMtoCanvas(this.drag.pointer));var o=this.body.view.translation,r=t/i,s=(1-r)*e.x+o.x*r,a=(1-r)*e.y+o.y*r;if(this.body.view.scale=t,this.body.view.translation={x:s,y:a},null!=n){var h=this.canvas.canvasToDOM(n);this.drag.pointer.x=h.x,this.drag.pointer.y=h.y}this.body.emitter.emit(\"_requestRedraw\"),i<t?this.body.emitter.emit(\"zoom\",{direction:\"+\",scale:this.body.view.scale,pointer:e}):this.body.emitter.emit(\"zoom\",{direction:\"-\",scale:this.body.view.scale,pointer:e})}}},{key:\"onMouseWheel\",value:function(t){if(!0===this.options.zoomView){if(0!==t.deltaY){var e=this.body.view.scale;e*=1+(t.deltaY<0?1:-1)*(.1*this.options.zoomSpeed);var i=this.getPointer({x:t.clientX,y:t.clientY});this.zoom(e,i)}t.preventDefault()}}},{key:\"onMouseMove\",value:function(t){var e=this,i=this.getPointer({x:t.clientX,y:t.clientY}),n=!1;void 0!==this.popup&&(!1===this.popup.hidden&&this._checkHidePopup(i),!1===this.popup.hidden&&(n=!0,this.popup.setPosition(i.x+3,i.y-5),this.popup.show())),this.options.keyboard.autoFocus&&!1===this.options.keyboard.bindToWindow&&!0===this.options.keyboard.enabled&&this.canvas.frame.focus(),!1===n&&(void 0!==this.popupTimer&&(clearInterval(this.popupTimer),this.popupTimer=void 0),this.drag.dragging||(this.popupTimer=rs((function(){return e._checkShowPopup(i)}),this.options.tooltipDelay))),!0===this.options.hover&&this.selectionHandler.hoverObject(t,i)}},{key:\"_checkShowPopup\",value:function(t){var e=this.canvas._XconvertDOMtoCanvas(t.x),i=this.canvas._YconvertDOMtoCanvas(t.y),n={left:e,top:i,right:e,bottom:i},o=void 0===this.popupObj?void 0:this.popupObj.id,r=!1,s=\"node\";if(void 0===this.popupObj){for(var a,h=this.body.nodeIndices,l=this.body.nodes,d=[],c=0;c<h.length;c++)!0===(a=l[h[c]]).isOverlappingWith(n)&&(r=!0,void 0!==a.getTitle()&&d.push(h[c]));d.length>0&&(this.popupObj=l[d[d.length-1]],r=!0)}if(void 0===this.popupObj&&!1===r){for(var u,f=this.body.edgeIndices,p=this.body.edges,v=[],g=0;g<f.length;g++)!0===(u=p[f[g]]).isOverlappingWith(n)&&!0===u.connected&&void 0!==u.getTitle()&&v.push(f[g]);v.length>0&&(this.popupObj=p[v[v.length-1]],s=\"edge\")}void 0!==this.popupObj?this.popupObj.id!==o&&(void 0===this.popup&&(this.popup=new dl(this.canvas.frame)),this.popup.popupTargetType=s,this.popup.popupTargetId=this.popupObj.id,this.popup.setPosition(t.x+3,t.y-5),this.popup.setText(this.popupObj.getTitle()),this.popup.show(),this.body.emitter.emit(\"showPopup\",this.popupObj.id)):void 0!==this.popup&&(this.popup.hide(),this.body.emitter.emit(\"hidePopup\"))}},{key:\"_checkHidePopup\",value:function(t){var e=this.selectionHandler._pointerToPositionObject(t),i=!1;if(\"node\"===this.popup.popupTargetType){if(void 0!==this.body.nodes[this.popup.popupTargetId]&&!0===(i=this.body.nodes[this.popup.popupTargetId].isOverlappingWith(e))){var n=this.selectionHandler.getNodeAt(t);i=void 0!==n&&n.id===this.popup.popupTargetId}}else void 0===this.selectionHandler.getNodeAt(t)&&void 0!==this.body.edges[this.popup.popupTargetId]&&(i=this.body.edges[this.popup.popupTargetId].isOverlappingWith(e));!1===i&&(this.popupObj=void 0,this.popup.hide(),this.body.emitter.emit(\"hidePopup\"))}}]),t}(),Bp=Jl.getWeakData,zp=we.set,Np=we.getterFor,Ap=Gi.find,Fp=Gi.findIndex,jp=0,Rp=function(t){return t.frozen||(t.frozen=new Lp)},Lp=function(){this.entries=[]},Hp=function(t,e){return Ap(t.entries,(function(t){return t[0]===e}))};Lp.prototype={get:function(t){var e=Hp(this,t);if(e)return e[1]},has:function(t){return!!Hp(this,t)},set:function(t,e){var i=Hp(this,t);i?i[1]=e:this.entries.push([t,e])},delete:function(t){var e=Fp(this.entries,(function(e){return e[0]===t}));return~e&&this.entries.splice(e,1),!!~e}};var Wp={getConstructor:function(t,e,i,n){var o=t((function(t,r){id(t,o,e),zp(t,{type:e,id:jp++,frozen:void 0}),null!=r&&ed(r,t[n],{that:t,AS_ENTRIES:i})})),r=Np(e),s=function(t,e,i){var n=r(t),o=Bp(dt(e),!0);return!0===o?Rp(n).set(e,i):o[n.id]=i,t};return hd(o.prototype,{delete:function(t){var e=r(this);if(!w(t))return!1;var i=Bp(t);return!0===i?Rp(e).delete(t):i&&j(i,e.id)&&delete i[e.id]},has:function(t){var e=r(this);if(!w(t))return!1;var i=Bp(t);return!0===i?Rp(e).has(t):i&&j(i,e.id)}}),hd(o.prototype,i?{get:function(t){var e=r(this);if(w(t)){var i=Bp(t);return!0===i?Rp(e).get(t):i?i[e.id]:void 0}},set:function(t,e){return s(this,t,e)}}:{add:function(t){return s(this,t,!0)}}),o}};n((function(t){var e,i=we.enforce,n=!a.ActiveXObject&&\"ActiveXObject\"in a,o=Object.isExtensible,r=function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}},s=t.exports=ad(\"WeakMap\",r,Wp);if(ae&&n){e=Wp.getConstructor(r,\"WeakMap\",!0),Jl.enable();var h=s.prototype,l=h.delete,d=h.has,c=h.get,u=h.set;hd(h,{delete:function(t){if(w(t)&&!o(t)){var n=i(this);return n.frozen||(n.frozen=new e),l.call(this,t)||n.frozen.delete(t)}return l.call(this,t)},has:function(t){if(w(t)&&!o(t)){var n=i(this);return n.frozen||(n.frozen=new e),d.call(this,t)||n.frozen.has(t)}return d.call(this,t)},get:function(t){if(w(t)&&!o(t)){var n=i(this);return n.frozen||(n.frozen=new e),d.call(this,t)?c.call(this,t):n.frozen.get(t)}return c.call(this,t)},set:function(t,n){if(w(t)&&!o(t)){var r=i(this);r.frozen||(r.frozen=new e),d.call(this,t)?u.call(this,t,n):r.frozen.set(t,n)}else u.call(this,t,n);return this}})}}));var qp,Vp,Up,Yp,Xp,Gp=k.WeakMap;function Kp(t,e,i,n){if(\"a\"===i&&!n)throw new TypeError(\"Private accessor was defined without a getter\");if(\"function\"==typeof e?t!==e||!n:!e.has(t))throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");return\"m\"===i?n:\"a\"===i?n.call(t):n?n.value:e.get(t)}function $p(t,e,i,n,o){if(\"m\"===n)throw new TypeError(\"Private method is not writable\");if(\"a\"===n&&!o)throw new TypeError(\"Private accessor was defined without a setter\");if(\"function\"==typeof e?t!==e||!o:!e.has(t))throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");return\"a\"===n?o.call(t,i):o?o.value=i:e.set(t,i),i}function Zp(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return Qp(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Qp(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function Qp(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}function Jp(t,e){var i,n=new ec,o=Zp(e);try{for(o.s();!(i=o.n()).done;){var r=i.value;t.has(r)||n.add(r)}}catch(t){o.e(t)}finally{o.f()}return n}var tv=function(){function t(){Nn(this,t),qp.set(this,new ec),Vp.set(this,new ec)}return Fn(t,[{key:\"size\",get:function(){return Kp(this,Vp,\"f\").size}},{key:\"add\",value:function(){for(var t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];for(var n=0,o=e;n<o.length;n++){var r=o[n];Kp(this,Vp,\"f\").add(r)}}},{key:\"delete\",value:function(){for(var t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];for(var n=0,o=e;n<o.length;n++){var r=o[n];Kp(this,Vp,\"f\").delete(r)}}},{key:\"clear\",value:function(){Kp(this,Vp,\"f\").clear()}},{key:\"getSelection\",value:function(){return wo(Kp(this,Vp,\"f\"))}},{key:\"getChanges\",value:function(){return{added:wo(Jp(Kp(this,qp,\"f\"),Kp(this,Vp,\"f\"))),deleted:wo(Jp(Kp(this,Vp,\"f\"),Kp(this,qp,\"f\"))),previous:wo(new ec(Kp(this,qp,\"f\"))),current:wo(new ec(Kp(this,Vp,\"f\")))}}},{key:\"commit\",value:function(){var t=this.getChanges();$p(this,qp,Kp(this,Vp,\"f\"),\"f\"),$p(this,Vp,new ec(Kp(this,qp,\"f\")),\"f\");var e,i=Zp(t.added);try{for(i.s();!(e=i.n()).done;){e.value.select()}}catch(t){i.e(t)}finally{i.f()}var n,o=Zp(t.deleted);try{for(o.s();!(n=o.n()).done;){n.value.unselect()}}catch(t){o.e(t)}finally{o.f()}return t}}]),t}();qp=new Gp,Vp=new Gp;var ev=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:function(){};Nn(this,t),Up.set(this,new tv),Yp.set(this,new tv),Xp.set(this,void 0),$p(this,Xp,e,\"f\")}return Fn(t,[{key:\"sizeNodes\",get:function(){return Kp(this,Up,\"f\").size}},{key:\"sizeEdges\",get:function(){return Kp(this,Yp,\"f\").size}},{key:\"getNodes\",value:function(){return Kp(this,Up,\"f\").getSelection()}},{key:\"getEdges\",value:function(){return Kp(this,Yp,\"f\").getSelection()}},{key:\"addNodes\",value:function(){var t;(t=Kp(this,Up,\"f\")).add.apply(t,arguments)}},{key:\"addEdges\",value:function(){var t;(t=Kp(this,Yp,\"f\")).add.apply(t,arguments)}},{key:\"deleteNodes\",value:function(t){Kp(this,Up,\"f\").delete(t)}},{key:\"deleteEdges\",value:function(t){Kp(this,Yp,\"f\").delete(t)}},{key:\"clear\",value:function(){Kp(this,Up,\"f\").clear(),Kp(this,Yp,\"f\").clear()}},{key:\"commit\",value:function(){for(var t,e,i={nodes:Kp(this,Up,\"f\").commit(),edges:Kp(this,Yp,\"f\").commit()},n=arguments.length,o=new Array(n),r=0;r<n;r++)o[r]=arguments[r];return(t=Kp(this,Xp,\"f\")).call.apply(t,Eo(e=[this,i]).call(e,o)),i}}]),t}();function iv(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return nv(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return nv(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function nv(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}Up=new Gp,Yp=new Gp,Xp=new Gp;var ov=function(){function t(e,i){var n=this;Nn(this,t),this.body=e,this.canvas=i,this._selectionAccumulator=new ev,this.hoverObj={nodes:{},edges:{}},this.options={},this.defaultOptions={multiselect:!1,selectable:!0,selectConnectedEdges:!0,hoverConnectedEdges:!0},At(this.options,this.defaultOptions),this.body.emitter.on(\"_dataChanged\",(function(){n.updateSelection()}))}return Fn(t,[{key:\"setOptions\",value:function(t){if(void 0!==t){Eh([\"multiselect\",\"hoverConnectedEdges\",\"selectable\",\"selectConnectedEdges\"],this.options,t)}}},{key:\"selectOnPoint\",value:function(t){var e=!1;if(!0===this.options.selectable){var i=this.getNodeAt(t)||this.getEdgeAt(t);this.unselectAll(),void 0!==i&&(e=this.selectObject(i)),this.body.emitter.emit(\"_requestRedraw\")}return e}},{key:\"selectAdditionalOnPoint\",value:function(t){var e=!1;if(!0===this.options.selectable){var i=this.getNodeAt(t)||this.getEdgeAt(t);void 0!==i&&(e=!0,!0===i.isSelected()?this.deselectObject(i):this.selectObject(i),this.body.emitter.emit(\"_requestRedraw\"))}return e}},{key:\"_initBaseEvent\",value:function(t,e){var i={};return i.pointer={DOM:{x:e.x,y:e.y},canvas:this.canvas.DOMtoCanvas(e)},i.event=t,i}},{key:\"generateClickEvent\",value:function(t,e,i,n){var o=arguments.length>4&&void 0!==arguments[4]&&arguments[4],r=this._initBaseEvent(e,i);if(!0===o)r.nodes=[],r.edges=[];else{var s=this.getSelection();r.nodes=s.nodes,r.edges=s.edges}void 0!==n&&(r.previousSelection=n),\"click\"==t&&(r.items=this.getClickedItems(i)),void 0!==e.controlEdge&&(r.controlEdge=e.controlEdge),this.body.emitter.emit(t,r)}},{key:\"selectObject\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.options.selectConnectedEdges;if(void 0!==t){if(t instanceof cf){var i;if(!0===e)(i=this._selectionAccumulator).addEdges.apply(i,wo(t.edges));this._selectionAccumulator.addNodes(t)}else this._selectionAccumulator.addEdges(t);return!0}return!1}},{key:\"deselectObject\",value:function(t){!0===t.isSelected()&&(t.selected=!1,this._removeFromSelection(t))}},{key:\"_getAllNodesOverlappingWith\",value:function(t){for(var e=[],i=this.body.nodes,n=0;n<this.body.nodeIndices.length;n++){var o=this.body.nodeIndices[n];i[o].isOverlappingWith(t)&&e.push(o)}return e}},{key:\"_pointerToPositionObject\",value:function(t){var e=this.canvas.DOMtoCanvas(t);return{left:e.x-1,top:e.y+1,right:e.x+1,bottom:e.y-1}}},{key:\"getNodeAt\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this._pointerToPositionObject(t),n=this._getAllNodesOverlappingWith(i);return n.length>0?!0===e?this.body.nodes[n[n.length-1]]:n[n.length-1]:void 0}},{key:\"_getEdgesOverlappingWith\",value:function(t,e){for(var i=this.body.edges,n=0;n<this.body.edgeIndices.length;n++){var o=this.body.edgeIndices[n];i[o].isOverlappingWith(t)&&e.push(o)}}},{key:\"_getAllEdgesOverlappingWith\",value:function(t){var e=[];return this._getEdgesOverlappingWith(t,e),e}},{key:\"getEdgeAt\",value:function(t){for(var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this.canvas.DOMtoCanvas(t),n=10,o=null,r=this.body.edges,s=0;s<this.body.edgeIndices.length;s++){var a=this.body.edgeIndices[s],h=r[a];if(h.connected){var l=h.from.x,d=h.from.y,c=h.to.x,u=h.to.y,f=h.edgeType.getDistanceToEdge(l,d,c,u,i.x,i.y);f<n&&(o=a,n=f)}}return null!==o?!0===e?this.body.edges[o]:o:void 0}},{key:\"_addToHover\",value:function(t){t instanceof cf?this.hoverObj.nodes[t.id]=t:this.hoverObj.edges[t.id]=t}},{key:\"_removeFromSelection\",value:function(t){var e;t instanceof cf?(this._selectionAccumulator.deleteNodes(t),(e=this._selectionAccumulator).deleteEdges.apply(e,wo(t.edges))):this._selectionAccumulator.deleteEdges(t)}},{key:\"unselectAll\",value:function(){this._selectionAccumulator.clear()}},{key:\"getSelectedNodeCount\",value:function(){return this._selectionAccumulator.sizeNodes}},{key:\"getSelectedEdgeCount\",value:function(){return this._selectionAccumulator.sizeEdges}},{key:\"_hoverConnectedEdges\",value:function(t){for(var e=0;e<t.edges.length;e++){var i=t.edges[e];i.hover=!0,this._addToHover(i)}}},{key:\"emitBlurEvent\",value:function(t,e,i){var n=this._initBaseEvent(t,e);!0===i.hover&&(i.hover=!1,i instanceof cf?(n.node=i.id,this.body.emitter.emit(\"blurNode\",n)):(n.edge=i.id,this.body.emitter.emit(\"blurEdge\",n)))}},{key:\"emitHoverEvent\",value:function(t,e,i){var n=this._initBaseEvent(t,e),o=!1;return!1===i.hover&&(i.hover=!0,this._addToHover(i),o=!0,i instanceof cf?(n.node=i.id,this.body.emitter.emit(\"hoverNode\",n)):(n.edge=i.id,this.body.emitter.emit(\"hoverEdge\",n))),o}},{key:\"hoverObject\",value:function(t,e){var i=this.getNodeAt(e);void 0===i&&(i=this.getEdgeAt(e));var n=!1;for(var o in this.hoverObj.nodes)Object.prototype.hasOwnProperty.call(this.hoverObj.nodes,o)&&(void 0===i||i instanceof cf&&i.id!=o||i instanceof ep)&&(this.emitBlurEvent(t,e,this.hoverObj.nodes[o]),delete this.hoverObj.nodes[o],n=!0);for(var r in this.hoverObj.edges)Object.prototype.hasOwnProperty.call(this.hoverObj.edges,r)&&(!0===n?(this.hoverObj.edges[r].hover=!1,delete this.hoverObj.edges[r]):(void 0===i||i instanceof ep&&i.id!=r||i instanceof cf&&!i.hover)&&(this.emitBlurEvent(t,e,this.hoverObj.edges[r]),delete this.hoverObj.edges[r],n=!0));if(void 0!==i){var s=zo(this.hoverObj.edges).length,a=zo(this.hoverObj.nodes).length;(n||i instanceof ep&&0===s&&0===a||i instanceof cf&&0===s&&0===a)&&(n=this.emitHoverEvent(t,e,i)),i instanceof cf&&!0===this.options.hoverConnectedEdges&&this._hoverConnectedEdges(i)}!0===n&&this.body.emitter.emit(\"_requestRedraw\")}},{key:\"commitWithoutEmitting\",value:function(){this._selectionAccumulator.commit()}},{key:\"commitAndEmit\",value:function(t,e){var i=!1,n=this._selectionAccumulator.commit(),o={nodes:n.nodes.previous,edges:n.edges.previous};n.edges.deleted.length>0&&(this.generateClickEvent(\"deselectEdge\",e,t,o),i=!0),n.nodes.deleted.length>0&&(this.generateClickEvent(\"deselectNode\",e,t,o),i=!0),n.nodes.added.length>0&&(this.generateClickEvent(\"selectNode\",e,t),i=!0),n.edges.added.length>0&&(this.generateClickEvent(\"selectEdge\",e,t),i=!0),!0===i&&this.generateClickEvent(\"select\",e,t)}},{key:\"getSelection\",value:function(){return{nodes:this.getSelectedNodeIds(),edges:this.getSelectedEdgeIds()}}},{key:\"getSelectedNodes\",value:function(){return this._selectionAccumulator.getNodes()}},{key:\"getSelectedEdges\",value:function(){return this._selectionAccumulator.getEdges()}},{key:\"getSelectedNodeIds\",value:function(){var t;return Io(t=this._selectionAccumulator.getNodes()).call(t,(function(t){return t.id}))}},{key:\"getSelectedEdgeIds\",value:function(){var t;return Io(t=this._selectionAccumulator.getEdges()).call(t,(function(t){return t.id}))}},{key:\"setSelection\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!t||!t.nodes&&!t.edges)throw new TypeError(\"Selection must be an object with nodes and/or edges properties\");if((e.unselectAll||void 0===e.unselectAll)&&this.unselectAll(),t.nodes){var i,n=iv(t.nodes);try{for(n.s();!(i=n.n()).done;){var o=i.value,r=this.body.nodes[o];if(!r)throw new RangeError('Node with id \"'+o+'\" not found');this.selectObject(r,e.highlightEdges)}}catch(t){n.e(t)}finally{n.f()}}if(t.edges){var s,a=iv(t.edges);try{for(a.s();!(s=a.n()).done;){var h=s.value,l=this.body.edges[h];if(!l)throw new RangeError('Edge with id \"'+h+'\" not found');this.selectObject(l)}}catch(t){a.e(t)}finally{a.f()}}this.body.emitter.emit(\"_requestRedraw\"),this._selectionAccumulator.commit()}},{key:\"selectNodes\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(!t||void 0===t.length)throw\"Selection must be an array with ids\";this.setSelection({nodes:t},{highlightEdges:e})}},{key:\"selectEdges\",value:function(t){if(!t||void 0===t.length)throw\"Selection must be an array with ids\";this.setSelection({edges:t})}},{key:\"updateSelection\",value:function(){for(var t in this._selectionAccumulator.getNodes())Object.prototype.hasOwnProperty.call(this.body.nodes,t.id)||this._selectionAccumulator.deleteNodes(t);for(var e in this._selectionAccumulator.getEdges())Object.prototype.hasOwnProperty.call(this.body.edges,e.id)||this._selectionAccumulator.deleteEdges(e)}},{key:\"getClickedItems\",value:function(t){for(var e=this.canvas.DOMtoCanvas(t),i=[],n=this.body.nodeIndices,o=this.body.nodes,r=n.length-1;r>=0;r--){var s=o[n[r]].getItemsOnPoint(e);i.push.apply(i,s)}for(var a=this.body.edgeIndices,h=this.body.edges,l=a.length-1;l>=0;l--){var d=h[a[l]].getItemsOnPoint(e);i.push.apply(i,d)}return i}}]),t}(),rv=n((function(t,e){!function(t){function e(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}t.__esModule=!0,t.sort=v;var i=32,n=7,o=256,r=[1,10,100,1e3,1e4,1e5,1e6,1e7,1e8,1e9];function s(t){return t<1e5?t<100?t<10?0:1:t<1e4?t<1e3?2:3:4:t<1e7?t<1e6?5:6:t<1e9?t<1e8?7:8:9}function a(t,e){if(t===e)return 0;if(~~t===t&&~~e===e){if(0===t||0===e)return t<e?-1:1;if(t<0||e<0){if(e>=0)return-1;if(t>=0)return 1;t=-t,e=-e}var i=s(t),n=s(e),o=0;return i<n?(t*=r[n-i-1],e/=10,o=-1):i>n&&(e*=r[i-n-1],t/=10,o=1),t===e?o:t<e?-1:1}var a=String(t),h=String(e);return a===h?0:a<h?-1:1}function h(t){for(var e=0;t>=i;)e|=1&t,t>>=1;return t+e}function l(t,e,i,n){var o=e+1;if(o===i)return 1;if(n(t[o++],t[e])<0){for(;o<i&&n(t[o],t[o-1])<0;)o++;d(t,e,o)}else for(;o<i&&n(t[o],t[o-1])>=0;)o++;return o-e}function d(t,e,i){for(i--;e<i;){var n=t[e];t[e++]=t[i],t[i--]=n}}function c(t,e,i,n,o){for(n===e&&n++;n<i;n++){for(var r=t[n],s=e,a=n;s<a;){var h=s+a>>>1;o(r,t[h])<0?a=h:s=h+1}var l=n-s;switch(l){case 3:t[s+3]=t[s+2];case 2:t[s+2]=t[s+1];case 1:t[s+1]=t[s];break;default:for(;l>0;)t[s+l]=t[s+l-1],l--}t[s]=r}}function u(t,e,i,n,o,r){var s=0,a=0,h=1;if(r(t,e[i+o])>0){for(a=n-o;h<a&&r(t,e[i+o+h])>0;)s=h,(h=1+(h<<1))<=0&&(h=a);h>a&&(h=a),s+=o,h+=o}else{for(a=o+1;h<a&&r(t,e[i+o-h])<=0;)s=h,(h=1+(h<<1))<=0&&(h=a);h>a&&(h=a);var l=s;s=o-h,h=o-l}for(s++;s<h;){var d=s+(h-s>>>1);r(t,e[i+d])>0?s=d+1:h=d}return h}function f(t,e,i,n,o,r){var s=0,a=0,h=1;if(r(t,e[i+o])<0){for(a=o+1;h<a&&r(t,e[i+o-h])<0;)s=h,(h=1+(h<<1))<=0&&(h=a);h>a&&(h=a);var l=s;s=o-h,h=o-l}else{for(a=n-o;h<a&&r(t,e[i+o+h])>=0;)s=h,(h=1+(h<<1))<=0&&(h=a);h>a&&(h=a),s+=o,h+=o}for(s++;s<h;){var d=s+(h-s>>>1);r(t,e[i+d])<0?h=d:s=d+1}return h}var p=function(){function t(i,r){e(this,t),this.array=null,this.compare=null,this.minGallop=n,this.length=0,this.tmpStorageLength=o,this.stackLength=0,this.runStart=null,this.runLength=null,this.stackSize=0,this.array=i,this.compare=r,this.length=i.length,this.length<2*o&&(this.tmpStorageLength=this.length>>>1),this.tmp=new Array(this.tmpStorageLength),this.stackLength=this.length<120?5:this.length<1542?10:this.length<119151?19:40,this.runStart=new Array(this.stackLength),this.runLength=new Array(this.stackLength)}return t.prototype.pushRun=function(t,e){this.runStart[this.stackSize]=t,this.runLength[this.stackSize]=e,this.stackSize+=1},t.prototype.mergeRuns=function(){for(;this.stackSize>1;){var t=this.stackSize-2;if(t>=1&&this.runLength[t-1]<=this.runLength[t]+this.runLength[t+1]||t>=2&&this.runLength[t-2]<=this.runLength[t]+this.runLength[t-1])this.runLength[t-1]<this.runLength[t+1]&&t--;else if(this.runLength[t]>this.runLength[t+1])break;this.mergeAt(t)}},t.prototype.forceMergeRuns=function(){for(;this.stackSize>1;){var t=this.stackSize-2;t>0&&this.runLength[t-1]<this.runLength[t+1]&&t--,this.mergeAt(t)}},t.prototype.mergeAt=function(t){var e=this.compare,i=this.array,n=this.runStart[t],o=this.runLength[t],r=this.runStart[t+1],s=this.runLength[t+1];this.runLength[t]=o+s,t===this.stackSize-3&&(this.runStart[t+1]=this.runStart[t+2],this.runLength[t+1]=this.runLength[t+2]),this.stackSize--;var a=f(i[r],i,n,o,0,e);n+=a,0!=(o-=a)&&0!==(s=u(i[n+o-1],i,r,s,s-1,e))&&(o<=s?this.mergeLow(n,o,r,s):this.mergeHigh(n,o,r,s))},t.prototype.mergeLow=function(t,e,i,o){var r=this.compare,s=this.array,a=this.tmp,h=0;for(h=0;h<e;h++)a[h]=s[t+h];var l=0,d=i,c=t;if(s[c++]=s[d++],0!=--o)if(1!==e){for(var p=this.minGallop;;){var v=0,g=0,y=!1;do{if(r(s[d],a[l])<0){if(s[c++]=s[d++],g++,v=0,0==--o){y=!0;break}}else if(s[c++]=a[l++],v++,g=0,1==--e){y=!0;break}}while((v|g)<p);if(y)break;do{if(0!==(v=f(s[d],a,l,e,0,r))){for(h=0;h<v;h++)s[c+h]=a[l+h];if(c+=v,l+=v,(e-=v)<=1){y=!0;break}}if(s[c++]=s[d++],0==--o){y=!0;break}if(0!==(g=u(a[l],s,d,o,0,r))){for(h=0;h<g;h++)s[c+h]=s[d+h];if(c+=g,d+=g,0==(o-=g)){y=!0;break}}if(s[c++]=a[l++],1==--e){y=!0;break}p--}while(v>=n||g>=n);if(y)break;p<0&&(p=0),p+=2}if(this.minGallop=p,p<1&&(this.minGallop=1),1===e){for(h=0;h<o;h++)s[c+h]=s[d+h];s[c+o]=a[l]}else{if(0===e)throw new Error(\"mergeLow preconditions were not respected\");for(h=0;h<e;h++)s[c+h]=a[l+h]}}else{for(h=0;h<o;h++)s[c+h]=s[d+h];s[c+o]=a[l]}else for(h=0;h<e;h++)s[c+h]=a[l+h]},t.prototype.mergeHigh=function(t,e,i,o){var r=this.compare,s=this.array,a=this.tmp,h=0;for(h=0;h<o;h++)a[h]=s[i+h];var l=t+e-1,d=o-1,c=i+o-1,p=0,v=0;if(s[c--]=s[l--],0!=--e)if(1!==o){for(var g=this.minGallop;;){var y=0,m=0,b=!1;do{if(r(a[d],s[l])<0){if(s[c--]=s[l--],y++,m=0,0==--e){b=!0;break}}else if(s[c--]=a[d--],m++,y=0,1==--o){b=!0;break}}while((y|m)<g);if(b)break;do{if(0!=(y=e-f(a[d],s,t,e,e-1,r))){for(e-=y,v=1+(c-=y),p=1+(l-=y),h=y-1;h>=0;h--)s[v+h]=s[p+h];if(0===e){b=!0;break}}if(s[c--]=a[d--],1==--o){b=!0;break}if(0!=(m=o-u(s[l],a,0,o,o-1,r))){for(o-=m,v=1+(c-=m),p=1+(d-=m),h=0;h<m;h++)s[v+h]=a[p+h];if(o<=1){b=!0;break}}if(s[c--]=s[l--],0==--e){b=!0;break}g--}while(y>=n||m>=n);if(b)break;g<0&&(g=0),g+=2}if(this.minGallop=g,g<1&&(this.minGallop=1),1===o){for(v=1+(c-=e),p=1+(l-=e),h=e-1;h>=0;h--)s[v+h]=s[p+h];s[c]=a[d]}else{if(0===o)throw new Error(\"mergeHigh preconditions were not respected\");for(p=c-(o-1),h=0;h<o;h++)s[p+h]=a[h]}}else{for(v=1+(c-=e),p=1+(l-=e),h=e-1;h>=0;h--)s[v+h]=s[p+h];s[c]=a[d]}else for(p=c-(o-1),h=0;h<o;h++)s[p+h]=a[h]},t}();function v(t,e,n,o){if(!Array.isArray(t))throw new TypeError(\"Can only sort arrays\");e?\"function\"!=typeof e&&(o=n,n=e,e=a):e=a,n||(n=0),o||(o=t.length);var r=o-n;if(!(r<2)){var s=0;if(r<i)c(t,n,o,n+(s=l(t,n,o,e)),e);else{var d=new p(t,e),u=h(r);do{if((s=l(t,n,o,e))<u){var f=r;f>u&&(f=u),c(t,n,n+f,n+s,e),s=f}d.pushRun(n,s),d.mergeRuns(),r-=s,n+=s}while(0!==r);d.forceMergeRuns()}}}}(e)}));i(rv);var sv=rv,av=sv.sort;function hv(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var lv=function(){function t(){Nn(this,t)}return Fn(t,[{key:\"abstract\",value:function(){throw new Error(\"Can't instantiate abstract class!\")}},{key:\"fake_use\",value:function(){}},{key:\"curveType\",value:function(){return this.abstract()}},{key:\"getPosition\",value:function(t){return this.fake_use(t),this.abstract()}},{key:\"setPosition\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;this.fake_use(t,e,i),this.abstract()}},{key:\"getTreeSize\",value:function(t){return this.fake_use(t),this.abstract()}},{key:\"sort\",value:function(t){this.fake_use(t),this.abstract()}},{key:\"fix\",value:function(t,e){this.fake_use(t,e),this.abstract()}},{key:\"shift\",value:function(t,e){this.fake_use(t,e),this.abstract()}}]),t}(),dv=function(t){Ad(i,t);var e=hv(i);function i(t){var n;return Nn(this,i),(n=e.call(this)).layout=t,n}return Fn(i,[{key:\"curveType\",value:function(){return\"horizontal\"}},{key:\"getPosition\",value:function(t){return t.x}},{key:\"setPosition\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;void 0!==i&&this.layout.hierarchical.addToOrdering(t,i),t.x=e}},{key:\"getTreeSize\",value:function(t){var e=this.layout.hierarchical.getTreeSize(this.layout.body.nodes,t);return{min:e.min_x,max:e.max_x}}},{key:\"sort\",value:function(t){av(t,(function(t,e){return t.x-e.x}))}},{key:\"fix\",value:function(t,e){t.y=this.layout.options.hierarchical.levelSeparation*e,t.options.fixed.y=!0}},{key:\"shift\",value:function(t,e){this.layout.body.nodes[t].x+=e}}]),i}(lv),cv=function(t){Ad(i,t);var e=hv(i);function i(t){var n;return Nn(this,i),(n=e.call(this)).layout=t,n}return Fn(i,[{key:\"curveType\",value:function(){return\"vertical\"}},{key:\"getPosition\",value:function(t){return t.y}},{key:\"setPosition\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;void 0!==i&&this.layout.hierarchical.addToOrdering(t,i),t.y=e}},{key:\"getTreeSize\",value:function(t){var e=this.layout.hierarchical.getTreeSize(this.layout.body.nodes,t);return{min:e.min_y,max:e.max_y}}},{key:\"sort\",value:function(t){av(t,(function(t,e){return t.y-e.y}))}},{key:\"fix\",value:function(t,e){t.x=this.layout.options.hierarchical.levelSeparation*e,t.options.fixed.x=!0}},{key:\"shift\",value:function(t,e){this.layout.body.nodes[t].y+=e}}]),i}(lv),uv=Gi.every,fv=Ao(\"every\");gt({target:\"Array\",proto:!0,forced:!fv},{every:function(t){return uv(this,t,arguments.length>1?arguments[1]:void 0)}});var pv=Ht(\"Array\").every,vv=Array.prototype,gv=function(t){var e=t.every;return t===vv||t instanceof Array&&e===vv.every?pv:e};function yv(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return mv(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return mv(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function mv(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}function bv(t,e){var i=new ec;return Wo(t).call(t,(function(t){var e;Wo(e=t.edges).call(e,(function(t){t.connected&&i.add(t)}))})),Wo(i).call(i,(function(t){var i=t.from.id,n=t.to.id;null==e[i]&&(e[i]=0),(null==e[n]||e[i]>=e[n])&&(e[n]=e[i]+1)})),e}function wv(t,e,i,n){var o,r,s=Gr(null),a=Kd(o=wo(Dc(n).call(n))).call(o,(function(t,e){return t+1+e.edges.length}),0),h=i+\"Id\",l=\"to\"===i?1:-1,d=yv(n);try{var c=function(){var o=uo(r.value,2),d=o[0],c=o[1];if(!n.has(d)||!t(c))return\"continue\";s[d]=0;for(var u=[c],f=0,p=void 0,v=function(){var t,o;if(!n.has(d))return\"continue\";var r=s[p.id]+l;if(Wo(t=mr(o=p.edges).call(o,(function(t){return t.connected&&t.to!==t.from&&t[i]!==p&&n.has(t.toId)&&n.has(t.fromId)}))).call(t,(function(t){var n=t[h],o=s[n];(null==o||e(r,o))&&(s[n]=r,u.push(t[i]))})),f>a)return{v:{v:bv(n,s)}};++f};p=u.pop();){var g=v();if(\"continue\"!==g&&\"object\"===go(g))return g.v}};for(d.s();!(r=d.n()).done;){var u=c();if(\"continue\"!==u&&\"object\"===go(u))return u.v}}catch(t){d.e(t)}finally{d.f()}return s}var kv=function(){function t(){Nn(this,t),this.childrenReference={},this.parentReference={},this.trees={},this.distributionOrdering={},this.levels={},this.distributionIndex={},this.isTree=!1,this.treeIndex=-1}return Fn(t,[{key:\"addRelation\",value:function(t,e){void 0===this.childrenReference[t]&&(this.childrenReference[t]=[]),this.childrenReference[t].push(e),void 0===this.parentReference[e]&&(this.parentReference[e]=[]),this.parentReference[e].push(t)}},{key:\"checkIfTree\",value:function(){for(var t in this.parentReference)if(this.parentReference[t].length>1)return void(this.isTree=!1);this.isTree=!0}},{key:\"numTrees\",value:function(){return this.treeIndex+1}},{key:\"setTreeIndex\",value:function(t,e){void 0!==e&&void 0===this.trees[t.id]&&(this.trees[t.id]=e,this.treeIndex=Math.max(e,this.treeIndex))}},{key:\"ensureLevel\",value:function(t){void 0===this.levels[t]&&(this.levels[t]=0)}},{key:\"getMaxLevel\",value:function(t){var e=this,i={};return function t(n){if(void 0!==i[n])return i[n];var o=e.levels[n];if(e.childrenReference[n]){var r=e.childrenReference[n];if(r.length>0)for(var s=0;s<r.length;s++)o=Math.max(o,t(r[s]))}return i[n]=o,o}(t)}},{key:\"levelDownstream\",value:function(t,e){void 0===this.levels[e.id]&&(void 0===this.levels[t.id]&&(this.levels[t.id]=0),this.levels[e.id]=this.levels[t.id]+1)}},{key:\"setMinLevelToZero\",value:function(t){var e=1e9;for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&void 0!==this.levels[i]&&(e=Math.min(this.levels[i],e));for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&void 0!==this.levels[n]&&(this.levels[n]-=e)}},{key:\"getTreeSize\",value:function(t,e){var i=1e9,n=-1e9,o=1e9,r=-1e9;for(var s in this.trees)if(Object.prototype.hasOwnProperty.call(this.trees,s)&&this.trees[s]===e){var a=t[s];i=Math.min(a.x,i),n=Math.max(a.x,n),o=Math.min(a.y,o),r=Math.max(a.y,r)}return{min_x:i,max_x:n,min_y:o,max_y:r}}},{key:\"hasSameParent\",value:function(t,e){var i=this.parentReference[t.id],n=this.parentReference[e.id];if(void 0===i||void 0===n)return!1;for(var o=0;o<i.length;o++)for(var r=0;r<n.length;r++)if(i[o]==n[r])return!0;return!1}},{key:\"inSameSubNetwork\",value:function(t,e){return this.trees[t.id]===this.trees[e.id]}},{key:\"getLevels\",value:function(){return zo(this.distributionOrdering)}},{key:\"addToOrdering\",value:function(t,e){void 0===this.distributionOrdering[e]&&(this.distributionOrdering[e]=[]);var i=!1,n=this.distributionOrdering[e];for(var o in n)if(n[o]===t){i=!0;break}i||(this.distributionOrdering[e].push(t),this.distributionIndex[t.id]=this.distributionOrdering[e].length-1)}}]),t}(),_v=function(){function t(e){Nn(this,t),this.body=e,this._resetRNG(Math.random()+\":\"+No()),this.setPhysics=!1,this.options={},this.optionsBackup={physics:{}},this.defaultOptions={randomSeed:void 0,improvedLayout:!0,clusterThreshold:150,hierarchical:{enabled:!1,levelSeparation:150,nodeSpacing:100,treeSpacing:200,blockShifting:!0,edgeMinimization:!0,parentCentralization:!0,direction:\"UD\",sortMethod:\"hubsize\"}},At(this.options,this.defaultOptions),this.bindEventListeners()}return Fn(t,[{key:\"bindEventListeners\",value:function(){var t=this;this.body.emitter.on(\"_dataChanged\",(function(){t.setupHierarchicalLayout()})),this.body.emitter.on(\"_dataLoaded\",(function(){t.layoutNetwork()})),this.body.emitter.on(\"_resetHierarchicalLayout\",(function(){t.setupHierarchicalLayout()})),this.body.emitter.on(\"_adjustEdgesForHierarchicalLayout\",(function(){if(!0===t.options.hierarchical.enabled){var e=t.direction.curveType();t.body.emitter.emit(\"_forceDisableDynamicCurves\",e,!1)}}))}},{key:\"setOptions\",value:function(t,e){if(void 0!==t){var i=this.options.hierarchical,n=i.enabled;if(Eh([\"randomSeed\",\"improvedLayout\",\"clusterThreshold\"],this.options,t),$h(this.options,t,\"hierarchical\"),void 0!==t.randomSeed&&this._resetRNG(t.randomSeed),!0===i.enabled)return!0===n&&this.body.emitter.emit(\"refresh\",!0),\"RL\"===i.direction||\"DU\"===i.direction?i.levelSeparation>0&&(i.levelSeparation*=-1):i.levelSeparation<0&&(i.levelSeparation*=-1),this.setDirectionStrategy(),this.body.emitter.emit(\"_resetHierarchicalLayout\"),this.adaptAllOptionsForHierarchicalLayout(e);if(!0===n)return this.body.emitter.emit(\"refresh\"),Ch(e,this.optionsBackup)}return e}},{key:\"_resetRNG\",value:function(t){this.initialRandomSeed=t,this._rng=ah(this.initialRandomSeed)}},{key:\"adaptAllOptionsForHierarchicalLayout\",value:function(t){if(!0===this.options.hierarchical.enabled){var e=this.optionsBackup.physics;void 0===t.physics||!0===t.physics?(t.physics={enabled:void 0===e.enabled||e.enabled,solver:\"hierarchicalRepulsion\"},e.enabled=void 0===e.enabled||e.enabled,e.solver=e.solver||\"barnesHut\"):\"object\"===go(t.physics)?(e.enabled=void 0===t.physics.enabled||t.physics.enabled,e.solver=t.physics.solver||\"barnesHut\",t.physics.solver=\"hierarchicalRepulsion\"):!1!==t.physics&&(e.solver=\"barnesHut\",t.physics={solver:\"hierarchicalRepulsion\"});var i=this.direction.curveType();if(void 0===t.edges)this.optionsBackup.edges={smooth:{enabled:!0,type:\"dynamic\"}},t.edges={smooth:!1};else if(void 0===t.edges.smooth)this.optionsBackup.edges={smooth:{enabled:!0,type:\"dynamic\"}},t.edges.smooth=!1;else if(\"boolean\"==typeof t.edges.smooth)this.optionsBackup.edges={smooth:t.edges.smooth},t.edges.smooth={enabled:t.edges.smooth,type:i};else{var n=t.edges.smooth;void 0!==n.type&&\"dynamic\"!==n.type&&(i=n.type),this.optionsBackup.edges={smooth:{enabled:void 0===n.enabled||n.enabled,type:void 0===n.type?\"dynamic\":n.type,roundness:void 0===n.roundness?.5:n.roundness,forceDirection:void 0!==n.forceDirection&&n.forceDirection}},t.edges.smooth={enabled:void 0===n.enabled||n.enabled,type:i,roundness:void 0===n.roundness?.5:n.roundness,forceDirection:void 0!==n.forceDirection&&n.forceDirection}}this.body.emitter.emit(\"_forceDisableDynamicCurves\",i)}return t}},{key:\"positionInitially\",value:function(t){if(!0!==this.options.hierarchical.enabled){this._resetRNG(this.initialRandomSeed);for(var e=t.length+50,i=0;i<t.length;i++){var n=t[i],o=2*Math.PI*this._rng();void 0===n.x&&(n.x=e*Math.cos(o)),void 0===n.y&&(n.y=e*Math.sin(o))}}}},{key:\"layoutNetwork\",value:function(){if(!0!==this.options.hierarchical.enabled&&!0===this.options.improvedLayout){for(var t=this.body.nodeIndices,e=0,i=0;i<t.length;i++){!0===this.body.nodes[t[i]].predefinedPosition&&(e+=1)}if(e<.5*t.length){var n=0,o=this.options.clusterThreshold,r={clusterNodeProperties:{shape:\"ellipse\",label:\"\",group:\"\",font:{multi:!1}},clusterEdgeProperties:{label:\"\",font:{multi:!1},smooth:{enabled:!1}}};if(t.length>o){for(var s=t.length;t.length>o&&n<=10;){n+=1;var a=t.length;if(n%3==0?this.body.modules.clustering.clusterBridges(r):this.body.modules.clustering.clusterOutliers(r),a==t.length&&n%3!=0)return this._declusterAll(),this.body.emitter.emit(\"_layoutFailed\"),void console.info(\"This network could not be positioned by this version of the improved layout algorithm. Please disable improvedLayout for better performance.\")}this.body.modules.kamadaKawai.setOptions({springLength:Math.max(150,2*s)})}n>10&&console.info(\"The clustering didn't succeed within the amount of interations allowed, progressing with partial result.\"),this.body.modules.kamadaKawai.solve(t,this.body.edgeIndices,!0),this._shiftToCenter();for(var h=0;h<t.length;h++){var l=this.body.nodes[t[h]];!1===l.predefinedPosition&&(l.x+=70*(.5-this._rng()),l.y+=70*(.5-this._rng()))}this._declusterAll(),this.body.emitter.emit(\"_repositionBezierNodes\")}}}},{key:\"_shiftToCenter\",value:function(){for(var t=pp.getRangeCore(this.body.nodes,this.body.nodeIndices),e=pp.findCenter(t),i=0;i<this.body.nodeIndices.length;i++){var n=this.body.nodes[this.body.nodeIndices[i]];n.x-=e.x,n.y-=e.y}}},{key:\"_declusterAll\",value:function(){for(var t=!0;!0===t;){t=!1;for(var e=0;e<this.body.nodeIndices.length;e++)!0===this.body.nodes[this.body.nodeIndices[e]].isCluster&&(t=!0,this.body.modules.clustering.openCluster(this.body.nodeIndices[e],{},!1));!0===t&&this.body.emitter.emit(\"_dataChanged\")}}},{key:\"getSeed\",value:function(){return this.initialRandomSeed}},{key:\"setupHierarchicalLayout\",value:function(){if(!0===this.options.hierarchical.enabled&&this.body.nodeIndices.length>0){var t,e,i=!1,n=!1;for(e in this.lastNodeOnLevel={},this.hierarchical=new kv,this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,e)&&(void 0!==(t=this.body.nodes[e]).options.level?(i=!0,this.hierarchical.levels[e]=t.options.level):n=!0);if(!0===n&&!0===i)throw new Error(\"To use the hierarchical layout, nodes require either no predefined levels or levels have to be defined for all nodes.\");if(!0===n){var o=this.options.hierarchical.sortMethod;\"hubsize\"===o?this._determineLevelsByHubsize():\"directed\"===o?this._determineLevelsDirected():\"custom\"===o&&this._determineLevelsCustomCallback()}for(var r in this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,r)&&this.hierarchical.ensureLevel(r);var s=this._getDistribution();this._generateMap(),this._placeNodesByHierarchy(s),this._condenseHierarchy(),this._shiftToCenter()}}},{key:\"_condenseHierarchy\",value:function(){var t=this,e=!1,i={},n=function(e,i){var n=t.hierarchical.trees;for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&n[o]===e&&t.direction.shift(o,i)},o=function(){for(var e=[],i=0;i<t.hierarchical.numTrees();i++)e.push(t.direction.getTreeSize(i));return e},r=function e(i,n){if(!n[i.id]&&(n[i.id]=!0,t.hierarchical.childrenReference[i.id])){var o=t.hierarchical.childrenReference[i.id];if(o.length>0)for(var r=0;r<o.length;r++)e(t.body.nodes[o[r]],n)}},s=function(e){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1e9,n=1e9,o=1e9,r=1e9,s=-1e9;for(var a in e)if(Object.prototype.hasOwnProperty.call(e,a)){var h=t.body.nodes[a],l=t.hierarchical.levels[h.id],d=t.direction.getPosition(h),c=t._getSpaceAroundNode(h,e),u=uo(c,2),f=u[0],p=u[1];n=Math.min(f,n),o=Math.min(p,o),l<=i&&(r=Math.min(d,r),s=Math.max(d,s))}return[r,s,n,o]},a=function(e,i){var n=t.hierarchical.getMaxLevel(e.id),o=t.hierarchical.getMaxLevel(i.id);return Math.min(n,o)},h=function(e,i,n){for(var o=t.hierarchical,r=0;r<i.length;r++){var s=i[r],a=o.distributionOrdering[s];if(a.length>1)for(var h=0;h<a.length-1;h++){var l=a[h],d=a[h+1];o.hasSameParent(l,d)&&o.inSameSubNetwork(l,d)&&e(l,d,n)}}},l=function(i,n){var o=arguments.length>2&&void 0!==arguments[2]&&arguments[2],h=t.direction.getPosition(i),l=t.direction.getPosition(n),d=Math.abs(l-h),c=t.options.hierarchical.nodeSpacing;if(d>c){var u={},f={};r(i,u),r(n,f);var p=a(i,n),v=s(u,p),g=s(f,p),y=v[1],m=g[0],b=g[2],w=Math.abs(y-m);if(w>c){var k=y-m+c;k<-b+c&&(k=-b+c),k<0&&(t._shiftBlock(n.id,k),e=!0,!0===o&&t._centerParent(n))}}},d=function(n,o){for(var a=o.id,h=o.edges,l=t.hierarchical.levels[o.id],d=t.options.hierarchical.levelSeparation*t.options.hierarchical.levelSeparation,c={},u=[],f=0;f<h.length;f++){var p=h[f];if(p.toId!=p.fromId){var v=p.toId==a?p.from:p.to;c[h[f].id]=v,t.hierarchical.levels[v.id]<l&&u.push(p)}}var g=function(e,i){for(var n=0,o=0;o<i.length;o++)if(void 0!==c[i[o].id]){var r=t.direction.getPosition(c[i[o].id])-e;n+=r/Math.sqrt(r*r+d)}return n},y=function(e,i){for(var n=0,o=0;o<i.length;o++)if(void 0!==c[i[o].id]){var r=t.direction.getPosition(c[i[o].id])-e;n-=d*Math.pow(r*r+d,-1.5)}return n},m=function(e,i){for(var n=t.direction.getPosition(o),r={},s=0;s<e;s++){var a=g(n,i),h=y(n,i);if(void 0!==r[n-=Math.max(-40,Math.min(40,Math.round(a/h)))])break;r[n]=s}return n},b=m(n,u);!function(n){var a=t.direction.getPosition(o);if(void 0===i[o.id]){var h={};r(o,h),i[o.id]=h}var l=s(i[o.id]),d=l[2],c=l[3],u=n-a,f=0;u>0?f=Math.min(u,c-t.options.hierarchical.nodeSpacing):u<0&&(f=-Math.min(-u,d-t.options.hierarchical.nodeSpacing)),0!=f&&(t._shiftBlock(o.id,f),e=!0)}(b),function(i){var n=t.direction.getPosition(o),r=t._getSpaceAroundNode(o),s=uo(r,2),a=s[0],h=s[1],l=i-n,d=n;l>0?d=Math.min(n+(h-t.options.hierarchical.nodeSpacing),i):l<0&&(d=Math.max(n-(a-t.options.hierarchical.nodeSpacing),i)),d!==n&&(t.direction.setPosition(o,d),e=!0)}(b=m(n,h))};!0===this.options.hierarchical.blockShifting&&(function(i){var n=t.hierarchical.getLevels();n=Xo(n).call(n);for(var o=0;o<i&&(e=!1,h(l,n,!0),!0===e);o++);}(5),function(){for(var e in t.body.nodes)Object.prototype.hasOwnProperty.call(t.body.nodes,e)&&t._centerParent(t.body.nodes[e])}()),!0===this.options.hierarchical.edgeMinimization&&function(i){var n=t.hierarchical.getLevels();n=Xo(n).call(n);for(var o=0;o<i;o++){e=!1;for(var r=0;r<n.length;r++)for(var s=n[r],a=t.hierarchical.distributionOrdering[s],h=0;h<a.length;h++)d(1e3,a[h]);if(!0!==e)break}}(20),!0===this.options.hierarchical.parentCentralization&&function(){var e=t.hierarchical.getLevels();e=Xo(e).call(e);for(var i=0;i<e.length;i++)for(var n=e[i],o=t.hierarchical.distributionOrdering[n],r=0;r<o.length;r++)t._centerParent(o[r])}(),function(){for(var e=o(),i=0,r=0;r<e.length-1;r++){i+=e[r].max-e[r+1].min+t.options.hierarchical.treeSpacing,n(r+1,i)}}()}},{key:\"_getSpaceAroundNode\",value:function(t,e){var i=!0;void 0===e&&(i=!1);var n=this.hierarchical.levels[t.id];if(void 0!==n){var o=this.hierarchical.distributionIndex[t.id],r=this.direction.getPosition(t),s=this.hierarchical.distributionOrdering[n],a=1e9,h=1e9;if(0!==o){var l=s[o-1];if(!0===i&&void 0===e[l.id]||!1===i)a=r-this.direction.getPosition(l)}if(o!=s.length-1){var d=s[o+1];if(!0===i&&void 0===e[d.id]||!1===i){var c=this.direction.getPosition(d);h=Math.min(h,c-r)}}return[a,h]}return[0,0]}},{key:\"_centerParent\",value:function(t){if(this.hierarchical.parentReference[t.id])for(var e=this.hierarchical.parentReference[t.id],i=0;i<e.length;i++){var n=e[i],o=this.body.nodes[n],r=this.hierarchical.childrenReference[n];if(void 0!==r){var s=this._getCenterPosition(r),a=this.direction.getPosition(o),h=this._getSpaceAroundNode(o),l=uo(h,2),d=l[0],c=l[1],u=a-s;(u<0&&Math.abs(u)<c-this.options.hierarchical.nodeSpacing||u>0&&Math.abs(u)<d-this.options.hierarchical.nodeSpacing)&&this.direction.setPosition(o,s)}}}},{key:\"_placeNodesByHierarchy\",value:function(t){for(var e in this.positionedNodes={},t)if(Object.prototype.hasOwnProperty.call(t,e)){var i,n=zo(t[e]);n=this._indexArrayToNodes(n),xc(i=this.direction).call(i,n);for(var o=0,r=0;r<n.length;r++){var s=n[r];if(void 0===this.positionedNodes[s.id]){var a=this.options.hierarchical.nodeSpacing,h=a*o;o>0&&(h=this.direction.getPosition(n[r-1])+a),this.direction.setPosition(s,h,e),this._validatePositionAndContinue(s,e,h),o++}}}}},{key:\"_placeBranchNodes\",value:function(t,e){var i,n=this.hierarchical.childrenReference[t];if(void 0!==n){for(var o=[],r=0;r<n.length;r++)o.push(this.body.nodes[n[r]]);xc(i=this.direction).call(i,o);for(var s=0;s<o.length;s++){var a=o[s],h=this.hierarchical.levels[a.id];if(!(h>e&&void 0===this.positionedNodes[a.id]))return;var l=this.options.hierarchical.nodeSpacing,d=void 0;d=0===s?this.direction.getPosition(this.body.nodes[t]):this.direction.getPosition(o[s-1])+l,this.direction.setPosition(a,d,h),this._validatePositionAndContinue(a,h,d)}var c=this._getCenterPosition(o);this.direction.setPosition(this.body.nodes[t],c,e)}}},{key:\"_validatePositionAndContinue\",value:function(t,e,i){if(this.hierarchical.isTree){if(void 0!==this.lastNodeOnLevel[e]){var n=this.direction.getPosition(this.body.nodes[this.lastNodeOnLevel[e]]);if(i-n<this.options.hierarchical.nodeSpacing){var o=n+this.options.hierarchical.nodeSpacing-i,r=this._findCommonParent(this.lastNodeOnLevel[e],t.id);this._shiftBlock(r.withChild,o)}}this.lastNodeOnLevel[e]=t.id,this.positionedNodes[t.id]=!0,this._placeBranchNodes(t.id,e)}}},{key:\"_indexArrayToNodes\",value:function(t){for(var e=[],i=0;i<t.length;i++)e.push(this.body.nodes[t[i]]);return e}},{key:\"_getDistribution\",value:function(){var t,e,i={};for(t in this.body.nodes)if(Object.prototype.hasOwnProperty.call(this.body.nodes,t)){e=this.body.nodes[t];var n=void 0===this.hierarchical.levels[t]?0:this.hierarchical.levels[t];this.direction.fix(e,n),void 0===i[n]&&(i[n]={}),i[n][t]=e}return i}},{key:\"_getActiveEdges\",value:function(t){var e=this,i=[];return Dh(t.edges,(function(t){var n;-1!==Hr(n=e.body.edgeIndices).call(n,t.id)&&i.push(t)})),i}},{key:\"_getHubSizes\",value:function(){var t=this,e={};Dh(this.body.nodeIndices,(function(i){var n=t.body.nodes[i],o=t._getActiveEdges(n).length;e[o]=!0}));var i=[];return Dh(e,(function(t){i.push(Number(t))})),xc(sv).call(sv,i,(function(t,e){return e-t})),i}},{key:\"_determineLevelsByHubsize\",value:function(){for(var t=this,e=function(e,i){t.hierarchical.levelDownstream(e,i)},i=this._getHubSizes(),n=function(n){var o=i[n];if(0===o)return\"break\";Dh(t.body.nodeIndices,(function(i){var n=t.body.nodes[i];o===t._getActiveEdges(n).length&&t._crawlNetwork(e,i)}))},o=0;o<i.length;++o){if(\"break\"===n(o))break}}},{key:\"_determineLevelsCustomCallback\",value:function(){var t=this;this._crawlNetwork((function(e,i,n){var o=t.hierarchical.levels[e.id];void 0===o&&(o=t.hierarchical.levels[e.id]=1e5);var r=(pp.cloneOptions(e,\"node\"),pp.cloneOptions(i,\"node\"),void pp.cloneOptions(n,\"edge\"));t.hierarchical.levels[i.id]=o+r})),this.hierarchical.setMinLevelToZero(this.body.nodes)}},{key:\"_determineLevelsDirected\",value:function(){var t,e=this,i=Kd(t=this.body.nodeIndices).call(t,(function(t,i){return t.set(i,e.body.nodes[i]),t}),new vd);\"roots\"===this.options.hierarchical.shakeTowards?this.hierarchical.levels=function(t){return wv((function(e){var i,n;return gv(i=mr(n=e.edges).call(n,(function(e){return t.has(e.toId)}))).call(i,(function(t){return t.from===e}))}),(function(t,e){return e<t}),\"to\",t)}(i):this.hierarchical.levels=function(t){return wv((function(e){var i,n;return gv(i=mr(n=e.edges).call(n,(function(e){return t.has(e.toId)}))).call(i,(function(t){return t.to===e}))}),(function(t,e){return e>t}),\"from\",t)}(i),this.hierarchical.setMinLevelToZero(this.body.nodes)}},{key:\"_generateMap\",value:function(){var t=this;this._crawlNetwork((function(e,i){t.hierarchical.levels[i.id]>t.hierarchical.levels[e.id]&&t.hierarchical.addRelation(e.id,i.id)})),this.hierarchical.checkIfTree()}},{key:\"_crawlNetwork\",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:function(){},i=arguments.length>1?arguments[1]:void 0,n={},o=function i(o,r){if(void 0===n[o.id]){var s;t.hierarchical.setTreeIndex(o,r),n[o.id]=!0;for(var a=t._getActiveEdges(o),h=0;h<a.length;h++){var l=a[h];!0===l.connected&&(s=l.toId==o.id?l.from:l.to,o.id!=s.id&&(e(o,s,l),i(s,r)))}}};if(void 0===i)for(var r=0,s=0;s<this.body.nodeIndices.length;s++){var a=this.body.nodeIndices[s];if(void 0===n[a]){var h=this.body.nodes[a];o(h,r),r+=1}}else{var l=this.body.nodes[i];if(void 0===l)return void console.error(\"Node not found:\",i);o(l)}}},{key:\"_shiftBlock\",value:function(t,e){var i=this,n={};!function t(o){if(!n[o]){n[o]=!0,i.direction.shift(o,e);var r=i.hierarchical.childrenReference[o];if(void 0!==r)for(var s=0;s<r.length;s++)t(r[s])}}(t)}},{key:\"_findCommonParent\",value:function(t,e){var i=this,n={};return function t(e,n){var o=i.hierarchical.parentReference[n];if(void 0!==o)for(var r=0;r<o.length;r++){var s=o[r];e[s]=!0,t(e,s)}}(n,t),function t(e,n){var o=i.hierarchical.parentReference[n];if(void 0!==o)for(var r=0;r<o.length;r++){var s=o[r];if(void 0!==e[s])return{foundParent:s,withChild:n};var a=t(e,s);if(null!==a.foundParent)return a}return{foundParent:null,withChild:n}}(n,e)}},{key:\"setDirectionStrategy\",value:function(){var t=\"UD\"===this.options.hierarchical.direction||\"DU\"===this.options.hierarchical.direction;this.direction=t?new dv(this):new cv(this)}},{key:\"_getCenterPosition\",value:function(t){for(var e=1e9,i=-1e9,n=0;n<t.length;n++){var o=void 0;if(void 0!==t[n].id)o=t[n];else{var r=t[n];o=this.body.nodes[r]}var s=this.direction.getPosition(o);e=Math.min(e,s),i=Math.max(i,s)}return.5*(e+i)}}]),t}();function xv(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return Ev(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Ev(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function Ev(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}var Ov=function(){function t(e,i,n,o){var r,s,a=this;Nn(this,t),this.body=e,this.canvas=i,this.selectionHandler=n,this.interactionHandler=o,this.editMode=!1,this.manipulationDiv=void 0,this.editModeDiv=void 0,this.closeDiv=void 0,this._domEventListenerCleanupQueue=[],this.temporaryUIFunctions={},this.temporaryEventFunctions=[],this.touchTime=0,this.temporaryIds={nodes:[],edges:[]},this.guiEnabled=!1,this.inMode=!1,this.selectedControlNode=void 0,this.options={},this.defaultOptions={enabled:!1,initiallyActive:!1,addNode:!0,addEdge:!0,editNode:void 0,editEdge:!0,deleteNode:!0,deleteEdge:!0,controlNodeStyle:{shape:\"dot\",size:6,color:{background:\"#ff0000\",border:\"#3c3c3c\",highlight:{background:\"#07f968\",border:\"#3c3c3c\"}},borderWidth:2,borderWidthSelected:2}},At(this.options,this.defaultOptions),this.body.emitter.on(\"destroy\",(function(){a._clean()})),this.body.emitter.on(\"_dataChanged\",Vt(r=this._restore).call(r,this)),this.body.emitter.on(\"_resetData\",Vt(s=this._restore).call(s,this))}return Fn(t,[{key:\"_restore\",value:function(){!1!==this.inMode&&(!0===this.options.initiallyActive?this.enableEditMode():this.disableEditMode())}},{key:\"setOptions\",value:function(t,e,i){void 0!==e&&(void 0!==e.locale?this.options.locale=e.locale:this.options.locale=i.locale,void 0!==e.locales?this.options.locales=e.locales:this.options.locales=i.locales),void 0!==t&&(\"boolean\"==typeof t?this.options.enabled=t:(this.options.enabled=!0,Ch(this.options,t)),!0===this.options.initiallyActive&&(this.editMode=!0),this._setup())}},{key:\"toggleEditMode\",value:function(){!0===this.editMode?this.disableEditMode():this.enableEditMode()}},{key:\"enableEditMode\",value:function(){this.editMode=!0,this._clean(),!0===this.guiEnabled&&(this.manipulationDiv.style.display=\"block\",this.closeDiv.style.display=\"block\",this.editModeDiv.style.display=\"none\",this.showManipulatorToolbar())}},{key:\"disableEditMode\",value:function(){this.editMode=!1,this._clean(),!0===this.guiEnabled&&(this.manipulationDiv.style.display=\"none\",this.closeDiv.style.display=\"none\",this.editModeDiv.style.display=\"block\",this._createEditButton())}},{key:\"showManipulatorToolbar\",value:function(){if(this._clean(),this.manipulationDOM={},!0===this.guiEnabled){var t,e;this.editMode=!0,this.manipulationDiv.style.display=\"block\",this.closeDiv.style.display=\"block\";var i=this.selectionHandler.getSelectedNodeCount(),n=this.selectionHandler.getSelectedEdgeCount(),o=i+n,r=this.options.locales[this.options.locale],s=!1;!1!==this.options.addNode&&(this._createAddNodeButton(r),s=!0),!1!==this.options.addEdge&&(!0===s?this._createSeperator(1):s=!0,this._createAddEdgeButton(r)),1===i&&\"function\"==typeof this.options.editNode?(!0===s?this._createSeperator(2):s=!0,this._createEditNodeButton(r)):1===n&&0===i&&!1!==this.options.editEdge&&(!0===s?this._createSeperator(3):s=!0,this._createEditEdgeButton(r)),0!==o&&(i>0&&!1!==this.options.deleteNode||0===i&&!1!==this.options.deleteEdge)&&(!0===s&&this._createSeperator(4),this._createDeleteButton(r)),this._bindElementEvents(this.closeDiv,Vt(t=this.toggleEditMode).call(t,this)),this._temporaryBindEvent(\"select\",Vt(e=this.showManipulatorToolbar).call(e,this))}this.body.emitter.emit(\"_redraw\")}},{key:\"addNodeMode\",value:function(){var t;if(!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode=\"addNode\",!0===this.guiEnabled){var e,i=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(i),this._createSeperator(),this._createDescription(i.addDescription||this.options.locales.en.addDescription),this._bindElementEvents(this.closeDiv,Vt(e=this.toggleEditMode).call(e,this))}this._temporaryBindEvent(\"click\",Vt(t=this._performAddNode).call(t,this))}},{key:\"editNode\",value:function(){var t=this;!0!==this.editMode&&this.enableEditMode(),this._clean();var e=this.selectionHandler.getSelectedNodes()[0];if(void 0!==e){if(this.inMode=\"editNode\",\"function\"!=typeof this.options.editNode)throw new Error(\"No function has been configured to handle the editing of nodes.\");if(!0!==e.isCluster){var i=Ch({},e.options,!1);if(i.x=e.x,i.y=e.y,2!==this.options.editNode.length)throw new Error(\"The function for edit does not support two arguments (data, callback)\");this.options.editNode(i,(function(e){null!=e&&\"editNode\"===t.inMode&&t.body.data.nodes.getDataSet().update(e),t.showManipulatorToolbar()}))}else alert(this.options.locales[this.options.locale].editClusterError||this.options.locales.en.editClusterError)}else this.showManipulatorToolbar()}},{key:\"addEdgeMode\",value:function(){var t,e,i,n,o;if(!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode=\"addEdge\",!0===this.guiEnabled){var r,s=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(s),this._createSeperator(),this._createDescription(s.edgeDescription||this.options.locales.en.edgeDescription),this._bindElementEvents(this.closeDiv,Vt(r=this.toggleEditMode).call(r,this))}this._temporaryBindUI(\"onTouch\",Vt(t=this._handleConnect).call(t,this)),this._temporaryBindUI(\"onDragEnd\",Vt(e=this._finishConnect).call(e,this)),this._temporaryBindUI(\"onDrag\",Vt(i=this._dragControlNode).call(i,this)),this._temporaryBindUI(\"onRelease\",Vt(n=this._finishConnect).call(n,this)),this._temporaryBindUI(\"onDragStart\",Vt(o=this._dragStartEdge).call(o,this)),this._temporaryBindUI(\"onHold\",(function(){}))}},{key:\"editEdgeMode\",value:function(){if(!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode=\"editEdge\",\"object\"!==go(this.options.editEdge)||\"function\"!=typeof this.options.editEdge.editWithoutDrag||(this.edgeBeingEditedId=this.selectionHandler.getSelectedEdgeIds()[0],void 0===this.edgeBeingEditedId)){if(!0===this.guiEnabled){var t,e=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(e),this._createSeperator(),this._createDescription(e.editEdgeDescription||this.options.locales.en.editEdgeDescription),this._bindElementEvents(this.closeDiv,Vt(t=this.toggleEditMode).call(t,this))}if(this.edgeBeingEditedId=this.selectionHandler.getSelectedEdgeIds()[0],void 0!==this.edgeBeingEditedId){var i,n,o,r,s=this.body.edges[this.edgeBeingEditedId],a=this._getNewTargetNode(s.from.x,s.from.y),h=this._getNewTargetNode(s.to.x,s.to.y);this.temporaryIds.nodes.push(a.id),this.temporaryIds.nodes.push(h.id),this.body.nodes[a.id]=a,this.body.nodeIndices.push(a.id),this.body.nodes[h.id]=h,this.body.nodeIndices.push(h.id),this._temporaryBindUI(\"onTouch\",Vt(i=this._controlNodeTouch).call(i,this)),this._temporaryBindUI(\"onTap\",(function(){})),this._temporaryBindUI(\"onHold\",(function(){})),this._temporaryBindUI(\"onDragStart\",Vt(n=this._controlNodeDragStart).call(n,this)),this._temporaryBindUI(\"onDrag\",Vt(o=this._controlNodeDrag).call(o,this)),this._temporaryBindUI(\"onDragEnd\",Vt(r=this._controlNodeDragEnd).call(r,this)),this._temporaryBindUI(\"onMouseMove\",(function(){})),this._temporaryBindEvent(\"beforeDrawing\",(function(t){var e=s.edgeType.findBorderPositions(t);!1===a.selected&&(a.x=e.from.x,a.y=e.from.y),!1===h.selected&&(h.x=e.to.x,h.y=e.to.y)})),this.body.emitter.emit(\"_redraw\")}else this.showManipulatorToolbar()}else{var l=this.body.edges[this.edgeBeingEditedId];this._performEditEdge(l.from.id,l.to.id)}}},{key:\"deleteSelected\",value:function(){var t=this;!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode=\"delete\";var e=this.selectionHandler.getSelectedNodeIds(),i=this.selectionHandler.getSelectedEdgeIds(),n=void 0;if(e.length>0){for(var o=0;o<e.length;o++)if(!0===this.body.nodes[e[o]].isCluster)return void alert(this.options.locales[this.options.locale].deleteClusterError||this.options.locales.en.deleteClusterError);\"function\"==typeof this.options.deleteNode&&(n=this.options.deleteNode)}else i.length>0&&\"function\"==typeof this.options.deleteEdge&&(n=this.options.deleteEdge);if(\"function\"==typeof n){var r={nodes:e,edges:i};if(2!==n.length)throw new Error(\"The function for delete does not support two arguments (data, callback)\");n(r,(function(e){null!=e&&\"delete\"===t.inMode?(t.body.data.edges.getDataSet().remove(e.edges),t.body.data.nodes.getDataSet().remove(e.nodes),t.body.emitter.emit(\"startSimulation\"),t.showManipulatorToolbar()):(t.body.emitter.emit(\"startSimulation\"),t.showManipulatorToolbar())}))}else this.body.data.edges.getDataSet().remove(i),this.body.data.nodes.getDataSet().remove(e),this.body.emitter.emit(\"startSimulation\"),this.showManipulatorToolbar()}},{key:\"_setup\",value:function(){!0===this.options.enabled?(this.guiEnabled=!0,this._createWrappers(),!1===this.editMode?this._createEditButton():this.showManipulatorToolbar()):(this._removeManipulationDOM(),this.guiEnabled=!1)}},{key:\"_createWrappers\",value:function(){var t,e;(void 0===this.manipulationDiv&&(this.manipulationDiv=document.createElement(\"div\"),this.manipulationDiv.className=\"vis-manipulation\",!0===this.editMode?this.manipulationDiv.style.display=\"block\":this.manipulationDiv.style.display=\"none\",this.canvas.frame.appendChild(this.manipulationDiv)),void 0===this.editModeDiv&&(this.editModeDiv=document.createElement(\"div\"),this.editModeDiv.className=\"vis-edit-mode\",!0===this.editMode?this.editModeDiv.style.display=\"none\":this.editModeDiv.style.display=\"block\",this.canvas.frame.appendChild(this.editModeDiv)),void 0===this.closeDiv)&&(this.closeDiv=document.createElement(\"button\"),this.closeDiv.className=\"vis-close\",this.closeDiv.setAttribute(\"aria-label\",null!==(t=null===(e=this.options.locales[this.options.locale])||void 0===e?void 0:e.close)&&void 0!==t?t:this.options.locales.en.close),this.closeDiv.style.display=this.manipulationDiv.style.display,this.canvas.frame.appendChild(this.closeDiv))}},{key:\"_getNewTargetNode\",value:function(t,e){var i=Ch({},this.options.controlNodeStyle);i.id=\"targetNode\"+Wc(),i.hidden=!1,i.physics=!1,i.x=t,i.y=e;var n=this.body.functions.createNode(i);return n.shape.boundingBox={left:t,right:t,top:e,bottom:e},n}},{key:\"_createEditButton\",value:function(){var t;this._clean(),this.manipulationDOM={},mh(this.editModeDiv);var e=this.options.locales[this.options.locale],i=this._createButton(\"editMode\",\"vis-edit vis-edit-mode\",e.edit||this.options.locales.en.edit);this.editModeDiv.appendChild(i),this._bindElementEvents(i,Vt(t=this.toggleEditMode).call(t,this))}},{key:\"_clean\",value:function(){this.inMode=!1,!0===this.guiEnabled&&(mh(this.editModeDiv),mh(this.manipulationDiv),this._cleanupDOMEventListeners()),this._cleanupTemporaryNodesAndEdges(),this._unbindTemporaryUIs(),this._unbindTemporaryEvents(),this.body.emitter.emit(\"restorePhysics\")}},{key:\"_cleanupDOMEventListeners\",value:function(){var t,e,i=xv(er(t=this._domEventListenerCleanupQueue).call(t,0));try{for(i.s();!(e=i.n()).done;){(0,e.value)()}}catch(t){i.e(t)}finally{i.f()}}},{key:\"_removeManipulationDOM\",value:function(){this._clean(),mh(this.manipulationDiv),mh(this.editModeDiv),mh(this.closeDiv),this.manipulationDiv&&this.canvas.frame.removeChild(this.manipulationDiv),this.editModeDiv&&this.canvas.frame.removeChild(this.editModeDiv),this.closeDiv&&this.canvas.frame.removeChild(this.closeDiv),this.manipulationDiv=void 0,this.editModeDiv=void 0,this.closeDiv=void 0}},{key:\"_createSeperator\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;this.manipulationDOM[\"seperatorLineDiv\"+t]=document.createElement(\"div\"),this.manipulationDOM[\"seperatorLineDiv\"+t].className=\"vis-separator-line\",this.manipulationDiv.appendChild(this.manipulationDOM[\"seperatorLineDiv\"+t])}},{key:\"_createAddNodeButton\",value:function(t){var e,i=this._createButton(\"addNode\",\"vis-add\",t.addNode||this.options.locales.en.addNode);this.manipulationDiv.appendChild(i),this._bindElementEvents(i,Vt(e=this.addNodeMode).call(e,this))}},{key:\"_createAddEdgeButton\",value:function(t){var e,i=this._createButton(\"addEdge\",\"vis-connect\",t.addEdge||this.options.locales.en.addEdge);this.manipulationDiv.appendChild(i),this._bindElementEvents(i,Vt(e=this.addEdgeMode).call(e,this))}},{key:\"_createEditNodeButton\",value:function(t){var e,i=this._createButton(\"editNode\",\"vis-edit\",t.editNode||this.options.locales.en.editNode);this.manipulationDiv.appendChild(i),this._bindElementEvents(i,Vt(e=this.editNode).call(e,this))}},{key:\"_createEditEdgeButton\",value:function(t){var e,i=this._createButton(\"editEdge\",\"vis-edit\",t.editEdge||this.options.locales.en.editEdge);this.manipulationDiv.appendChild(i),this._bindElementEvents(i,Vt(e=this.editEdgeMode).call(e,this))}},{key:\"_createDeleteButton\",value:function(t){var e,i;i=this.options.rtl?\"vis-delete-rtl\":\"vis-delete\";var n=this._createButton(\"delete\",i,t.del||this.options.locales.en.del);this.manipulationDiv.appendChild(n),this._bindElementEvents(n,Vt(e=this.deleteSelected).call(e,this))}},{key:\"_createBackButton\",value:function(t){var e,i=this._createButton(\"back\",\"vis-back\",t.back||this.options.locales.en.back);this.manipulationDiv.appendChild(i),this._bindElementEvents(i,Vt(e=this.showManipulatorToolbar).call(e,this))}},{key:\"_createButton\",value:function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:\"vis-label\";return this.manipulationDOM[t+\"Div\"]=document.createElement(\"button\"),this.manipulationDOM[t+\"Div\"].className=\"vis-button \"+e,this.manipulationDOM[t+\"Label\"]=document.createElement(\"div\"),this.manipulationDOM[t+\"Label\"].className=n,this.manipulationDOM[t+\"Label\"].innerText=i,this.manipulationDOM[t+\"Div\"].appendChild(this.manipulationDOM[t+\"Label\"]),this.manipulationDOM[t+\"Div\"]}},{key:\"_createDescription\",value:function(t){this.manipulationDOM.descriptionLabel=document.createElement(\"div\"),this.manipulationDOM.descriptionLabel.className=\"vis-none\",this.manipulationDOM.descriptionLabel.innerText=t,this.manipulationDiv.appendChild(this.manipulationDOM.descriptionLabel)}},{key:\"_temporaryBindEvent\",value:function(t,e){this.temporaryEventFunctions.push({event:t,boundFunction:e}),this.body.emitter.on(t,e)}},{key:\"_temporaryBindUI\",value:function(t,e){if(void 0===this.body.eventListeners[t])throw new Error(\"This UI function does not exist. Typo? You tried: \"+t+\" possible are: \"+es(zo(this.body.eventListeners)));this.temporaryUIFunctions[t]=this.body.eventListeners[t],this.body.eventListeners[t]=e}},{key:\"_unbindTemporaryUIs\",value:function(){for(var t in this.temporaryUIFunctions)Object.prototype.hasOwnProperty.call(this.temporaryUIFunctions,t)&&(this.body.eventListeners[t]=this.temporaryUIFunctions[t],delete this.temporaryUIFunctions[t]);this.temporaryUIFunctions={}}},{key:\"_unbindTemporaryEvents\",value:function(){for(var t=0;t<this.temporaryEventFunctions.length;t++){var e=this.temporaryEventFunctions[t].event,i=this.temporaryEventFunctions[t].boundFunction;this.body.emitter.off(e,i)}this.temporaryEventFunctions=[]}},{key:\"_bindElementEvents\",value:function(t,e){var i=new ll(t,{});_p(i,e),this._domEventListenerCleanupQueue.push((function(){i.destroy()}));var n=function(t){var i=t.keyCode,n=t.key;\"Enter\"!==n&&\" \"!==n&&13!==i&&32!==i||e()};t.addEventListener(\"keyup\",n,!1),this._domEventListenerCleanupQueue.push((function(){t.removeEventListener(\"keyup\",n,!1)}))}},{key:\"_cleanupTemporaryNodesAndEdges\",value:function(){for(var t=0;t<this.temporaryIds.edges.length;t++){var e;this.body.edges[this.temporaryIds.edges[t]].disconnect(),delete this.body.edges[this.temporaryIds.edges[t]];var i,n=Hr(e=this.body.edgeIndices).call(e,this.temporaryIds.edges[t]);if(-1!==n)er(i=this.body.edgeIndices).call(i,n,1)}for(var o=0;o<this.temporaryIds.nodes.length;o++){var r;delete this.body.nodes[this.temporaryIds.nodes[o]];var s,a=Hr(r=this.body.nodeIndices).call(r,this.temporaryIds.nodes[o]);if(-1!==a)er(s=this.body.nodeIndices).call(s,a,1)}this.temporaryIds={nodes:[],edges:[]}}},{key:\"_controlNodeTouch\",value:function(t){this.selectionHandler.unselectAll(),this.lastTouch=this.body.functions.getPointer(t.center),this.lastTouch.translation=At({},this.body.view.translation)}},{key:\"_controlNodeDragStart\",value:function(){var t=this.lastTouch,e=this.selectionHandler._pointerToPositionObject(t),i=this.body.nodes[this.temporaryIds.nodes[0]],n=this.body.nodes[this.temporaryIds.nodes[1]],o=this.body.edges[this.edgeBeingEditedId];this.selectedControlNode=void 0;var r=i.isOverlappingWith(e),s=n.isOverlappingWith(e);!0===r?(this.selectedControlNode=i,o.edgeType.from=i):!0===s&&(this.selectedControlNode=n,o.edgeType.to=n),void 0!==this.selectedControlNode&&this.selectionHandler.selectObject(this.selectedControlNode),this.body.emitter.emit(\"_redraw\")}},{key:\"_controlNodeDrag\",value:function(t){this.body.emitter.emit(\"disablePhysics\");var e=this.body.functions.getPointer(t.center),i=this.canvas.DOMtoCanvas(e);void 0!==this.selectedControlNode?(this.selectedControlNode.x=i.x,this.selectedControlNode.y=i.y):this.interactionHandler.onDrag(t),this.body.emitter.emit(\"_redraw\")}},{key:\"_controlNodeDragEnd\",value:function(t){var e=this.body.functions.getPointer(t.center),i=this.selectionHandler._pointerToPositionObject(e),n=this.body.edges[this.edgeBeingEditedId];if(void 0!==this.selectedControlNode){this.selectionHandler.unselectAll();for(var o=this.selectionHandler._getAllNodesOverlappingWith(i),r=void 0,s=o.length-1;s>=0;s--)if(o[s]!==this.selectedControlNode.id){r=this.body.nodes[o[s]];break}if(void 0!==r&&void 0!==this.selectedControlNode)if(!0===r.isCluster)alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError);else{var a=this.body.nodes[this.temporaryIds.nodes[0]];this.selectedControlNode.id===a.id?this._performEditEdge(r.id,n.to.id):this._performEditEdge(n.from.id,r.id)}else n.updateEdgeType(),this.body.emitter.emit(\"restorePhysics\");this.body.emitter.emit(\"_redraw\")}}},{key:\"_handleConnect\",value:function(t){if((new Date).valueOf()-this.touchTime>100){this.lastTouch=this.body.functions.getPointer(t.center),this.lastTouch.translation=At({},this.body.view.translation),this.interactionHandler.drag.pointer=this.lastTouch,this.interactionHandler.drag.translation=this.lastTouch.translation;var e=this.lastTouch,i=this.selectionHandler.getNodeAt(e);if(void 0!==i)if(!0===i.isCluster)alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError);else{var n=this._getNewTargetNode(i.x,i.y);this.body.nodes[n.id]=n,this.body.nodeIndices.push(n.id);var o=this.body.functions.createEdge({id:\"connectionEdge\"+Wc(),from:i.id,to:n.id,physics:!1,smooth:{enabled:!0,type:\"continuous\",roundness:.5}});this.body.edges[o.id]=o,this.body.edgeIndices.push(o.id),this.temporaryIds.nodes.push(n.id),this.temporaryIds.edges.push(o.id)}this.touchTime=(new Date).valueOf()}}},{key:\"_dragControlNode\",value:function(t){var e=this.body.functions.getPointer(t.center),i=this.selectionHandler._pointerToPositionObject(e),n=void 0;void 0!==this.temporaryIds.edges[0]&&(n=this.body.edges[this.temporaryIds.edges[0]].fromId);for(var o=this.selectionHandler._getAllNodesOverlappingWith(i),r=void 0,s=o.length-1;s>=0;s--){var a;if(-1===Hr(a=this.temporaryIds.nodes).call(a,o[s])){r=this.body.nodes[o[s]];break}}if(t.controlEdge={from:n,to:r?r.id:void 0},this.selectionHandler.generateClickEvent(\"controlNodeDragging\",t,e),void 0!==this.temporaryIds.nodes[0]){var h=this.body.nodes[this.temporaryIds.nodes[0]];h.x=this.canvas._XconvertDOMtoCanvas(e.x),h.y=this.canvas._YconvertDOMtoCanvas(e.y),this.body.emitter.emit(\"_redraw\")}else this.interactionHandler.onDrag(t)}},{key:\"_finishConnect\",value:function(t){var e=this.body.functions.getPointer(t.center),i=this.selectionHandler._pointerToPositionObject(e),n=void 0;void 0!==this.temporaryIds.edges[0]&&(n=this.body.edges[this.temporaryIds.edges[0]].fromId);for(var o=this.selectionHandler._getAllNodesOverlappingWith(i),r=void 0,s=o.length-1;s>=0;s--){var a;if(-1===Hr(a=this.temporaryIds.nodes).call(a,o[s])){r=this.body.nodes[o[s]];break}}this._cleanupTemporaryNodesAndEdges(),void 0!==r&&(!0===r.isCluster?alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError):void 0!==this.body.nodes[n]&&void 0!==this.body.nodes[r.id]&&this._performAddEdge(n,r.id)),t.controlEdge={from:n,to:r?r.id:void 0},this.selectionHandler.generateClickEvent(\"controlNodeDragEnd\",t,e),this.body.emitter.emit(\"_redraw\")}},{key:\"_dragStartEdge\",value:function(t){var e=this.lastTouch;this.selectionHandler.generateClickEvent(\"dragStart\",t,e,void 0,!0)}},{key:\"_performAddNode\",value:function(t){var e=this,i={id:Wc(),x:t.pointer.canvas.x,y:t.pointer.canvas.y,label:\"new\"};if(\"function\"==typeof this.options.addNode){if(2!==this.options.addNode.length)throw this.showManipulatorToolbar(),new Error(\"The function for add does not support two arguments (data,callback)\");this.options.addNode(i,(function(t){null!=t&&\"addNode\"===e.inMode&&e.body.data.nodes.getDataSet().add(t),e.showManipulatorToolbar()}))}else this.body.data.nodes.getDataSet().add(i),this.showManipulatorToolbar()}},{key:\"_performAddEdge\",value:function(t,e){var i=this,n={from:t,to:e};if(\"function\"==typeof this.options.addEdge){if(2!==this.options.addEdge.length)throw new Error(\"The function for connect does not support two arguments (data,callback)\");this.options.addEdge(n,(function(t){null!=t&&\"addEdge\"===i.inMode&&(i.body.data.edges.getDataSet().add(t),i.selectionHandler.unselectAll(),i.showManipulatorToolbar())}))}else this.body.data.edges.getDataSet().add(n),this.selectionHandler.unselectAll(),this.showManipulatorToolbar()}},{key:\"_performEditEdge\",value:function(t,e){var i=this,n={id:this.edgeBeingEditedId,from:t,to:e,label:this.body.data.edges.get(this.edgeBeingEditedId).label},o=this.options.editEdge;if(\"object\"===go(o)&&(o=o.editWithoutDrag),\"function\"==typeof o){if(2!==o.length)throw new Error(\"The function for edit does not support two arguments (data, callback)\");o(n,(function(t){null==t||\"editEdge\"!==i.inMode?(i.body.edges[n.id].updateEdgeType(),i.body.emitter.emit(\"_redraw\"),i.showManipulatorToolbar()):(i.body.data.edges.getDataSet().update(t),i.selectionHandler.unselectAll(),i.showManipulatorToolbar())}))}else this.body.data.edges.getDataSet().update(n),this.selectionHandler.unselectAll(),this.showManipulatorToolbar()}}]),t}(),Cv=\"string\",Sv=\"boolean\",Tv=\"number\",Mv=\"array\",Pv=\"object\",Dv=[\"arrow\",\"bar\",\"box\",\"circle\",\"crow\",\"curve\",\"diamond\",\"image\",\"inv_curve\",\"inv_triangle\",\"triangle\",\"vee\"],Iv={borderWidth:{number:Tv},borderWidthSelected:{number:Tv,undefined:\"undefined\"},brokenImage:{string:Cv,undefined:\"undefined\"},chosen:{label:{boolean:Sv,function:\"function\"},node:{boolean:Sv,function:\"function\"},__type__:{object:Pv,boolean:Sv}},color:{border:{string:Cv},background:{string:Cv},highlight:{border:{string:Cv},background:{string:Cv},__type__:{object:Pv,string:Cv}},hover:{border:{string:Cv},background:{string:Cv},__type__:{object:Pv,string:Cv}},__type__:{object:Pv,string:Cv}},opacity:{number:Tv,undefined:\"undefined\"},fixed:{x:{boolean:Sv},y:{boolean:Sv},__type__:{object:Pv,boolean:Sv}},font:{align:{string:Cv},color:{string:Cv},size:{number:Tv},face:{string:Cv},background:{string:Cv},strokeWidth:{number:Tv},strokeColor:{string:Cv},vadjust:{number:Tv},multi:{boolean:Sv,string:Cv},bold:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},boldital:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},ital:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},mono:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},__type__:{object:Pv,string:Cv}},group:{string:Cv,number:Tv,undefined:\"undefined\"},heightConstraint:{minimum:{number:Tv},valign:{string:Cv},__type__:{object:Pv,boolean:Sv,number:Tv}},hidden:{boolean:Sv},icon:{face:{string:Cv},code:{string:Cv},size:{number:Tv},color:{string:Cv},weight:{string:Cv,number:Tv},__type__:{object:Pv}},id:{string:Cv,number:Tv},image:{selected:{string:Cv,undefined:\"undefined\"},unselected:{string:Cv,undefined:\"undefined\"},__type__:{object:Pv,string:Cv}},imagePadding:{top:{number:Tv},right:{number:Tv},bottom:{number:Tv},left:{number:Tv},__type__:{object:Pv,number:Tv}},label:{string:Cv,undefined:\"undefined\"},labelHighlightBold:{boolean:Sv},level:{number:Tv,undefined:\"undefined\"},margin:{top:{number:Tv},right:{number:Tv},bottom:{number:Tv},left:{number:Tv},__type__:{object:Pv,number:Tv}},mass:{number:Tv},physics:{boolean:Sv},scaling:{min:{number:Tv},max:{number:Tv},label:{enabled:{boolean:Sv},min:{number:Tv},max:{number:Tv},maxVisible:{number:Tv},drawThreshold:{number:Tv},__type__:{object:Pv,boolean:Sv}},customScalingFunction:{function:\"function\"},__type__:{object:Pv}},shadow:{enabled:{boolean:Sv},color:{string:Cv},size:{number:Tv},x:{number:Tv},y:{number:Tv},__type__:{object:Pv,boolean:Sv}},shape:{string:[\"custom\",\"ellipse\",\"circle\",\"database\",\"box\",\"text\",\"image\",\"circularImage\",\"diamond\",\"dot\",\"star\",\"triangle\",\"triangleDown\",\"square\",\"icon\",\"hexagon\"]},ctxRenderer:{function:\"function\"},shapeProperties:{borderDashes:{boolean:Sv,array:Mv},borderRadius:{number:Tv},interpolation:{boolean:Sv},useImageSize:{boolean:Sv},useBorderWithImage:{boolean:Sv},coordinateOrigin:{string:[\"center\",\"top-left\"]},__type__:{object:Pv}},size:{number:Tv},title:{string:Cv,dom:\"dom\",undefined:\"undefined\"},value:{number:Tv,undefined:\"undefined\"},widthConstraint:{minimum:{number:Tv},maximum:{number:Tv},__type__:{object:Pv,boolean:Sv,number:Tv}},x:{number:Tv},y:{number:Tv},__type__:{object:Pv}},Bv={configure:{enabled:{boolean:Sv},filter:{boolean:Sv,string:Cv,array:Mv,function:\"function\"},container:{dom:\"dom\"},showButton:{boolean:Sv},__type__:{object:Pv,boolean:Sv,string:Cv,array:Mv,function:\"function\"}},edges:{arrows:{to:{enabled:{boolean:Sv},scaleFactor:{number:Tv},type:{string:Dv},imageHeight:{number:Tv},imageWidth:{number:Tv},src:{string:Cv},__type__:{object:Pv,boolean:Sv}},middle:{enabled:{boolean:Sv},scaleFactor:{number:Tv},type:{string:Dv},imageWidth:{number:Tv},imageHeight:{number:Tv},src:{string:Cv},__type__:{object:Pv,boolean:Sv}},from:{enabled:{boolean:Sv},scaleFactor:{number:Tv},type:{string:Dv},imageWidth:{number:Tv},imageHeight:{number:Tv},src:{string:Cv},__type__:{object:Pv,boolean:Sv}},__type__:{string:[\"from\",\"to\",\"middle\"],object:Pv}},endPointOffset:{from:{number:Tv},to:{number:Tv},__type__:{object:Pv,number:Tv}},arrowStrikethrough:{boolean:Sv},background:{enabled:{boolean:Sv},color:{string:Cv},size:{number:Tv},dashes:{boolean:Sv,array:Mv},__type__:{object:Pv,boolean:Sv}},chosen:{label:{boolean:Sv,function:\"function\"},edge:{boolean:Sv,function:\"function\"},__type__:{object:Pv,boolean:Sv}},color:{color:{string:Cv},highlight:{string:Cv},hover:{string:Cv},inherit:{string:[\"from\",\"to\",\"both\"],boolean:Sv},opacity:{number:Tv},__type__:{object:Pv,string:Cv}},dashes:{boolean:Sv,array:Mv},font:{color:{string:Cv},size:{number:Tv},face:{string:Cv},background:{string:Cv},strokeWidth:{number:Tv},strokeColor:{string:Cv},align:{string:[\"horizontal\",\"top\",\"middle\",\"bottom\"]},vadjust:{number:Tv},multi:{boolean:Sv,string:Cv},bold:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},boldital:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},ital:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},mono:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},__type__:{object:Pv,string:Cv}},hidden:{boolean:Sv},hoverWidth:{function:\"function\",number:Tv},label:{string:Cv,undefined:\"undefined\"},labelHighlightBold:{boolean:Sv},length:{number:Tv,undefined:\"undefined\"},physics:{boolean:Sv},scaling:{min:{number:Tv},max:{number:Tv},label:{enabled:{boolean:Sv},min:{number:Tv},max:{number:Tv},maxVisible:{number:Tv},drawThreshold:{number:Tv},__type__:{object:Pv,boolean:Sv}},customScalingFunction:{function:\"function\"},__type__:{object:Pv}},selectionWidth:{function:\"function\",number:Tv},selfReferenceSize:{number:Tv},selfReference:{size:{number:Tv},angle:{number:Tv},renderBehindTheNode:{boolean:Sv},__type__:{object:Pv}},shadow:{enabled:{boolean:Sv},color:{string:Cv},size:{number:Tv},x:{number:Tv},y:{number:Tv},__type__:{object:Pv,boolean:Sv}},smooth:{enabled:{boolean:Sv},type:{string:[\"dynamic\",\"continuous\",\"discrete\",\"diagonalCross\",\"straightCross\",\"horizontal\",\"vertical\",\"curvedCW\",\"curvedCCW\",\"cubicBezier\"]},roundness:{number:Tv},forceDirection:{string:[\"horizontal\",\"vertical\",\"none\"],boolean:Sv},__type__:{object:Pv,boolean:Sv}},title:{string:Cv,undefined:\"undefined\"},width:{number:Tv},widthConstraint:{maximum:{number:Tv},__type__:{object:Pv,boolean:Sv,number:Tv}},value:{number:Tv,undefined:\"undefined\"},__type__:{object:Pv}},groups:{useDefaultGroups:{boolean:Sv},__any__:Iv,__type__:{object:Pv}},interaction:{dragNodes:{boolean:Sv},dragView:{boolean:Sv},hideEdgesOnDrag:{boolean:Sv},hideEdgesOnZoom:{boolean:Sv},hideNodesOnDrag:{boolean:Sv},hover:{boolean:Sv},keyboard:{enabled:{boolean:Sv},speed:{x:{number:Tv},y:{number:Tv},zoom:{number:Tv},__type__:{object:Pv}},bindToWindow:{boolean:Sv},autoFocus:{boolean:Sv},__type__:{object:Pv,boolean:Sv}},multiselect:{boolean:Sv},navigationButtons:{boolean:Sv},selectable:{boolean:Sv},selectConnectedEdges:{boolean:Sv},hoverConnectedEdges:{boolean:Sv},tooltipDelay:{number:Tv},zoomView:{boolean:Sv},zoomSpeed:{number:Tv},__type__:{object:Pv}},layout:{randomSeed:{undefined:\"undefined\",number:Tv,string:Cv},improvedLayout:{boolean:Sv},clusterThreshold:{number:Tv},hierarchical:{enabled:{boolean:Sv},levelSeparation:{number:Tv},nodeSpacing:{number:Tv},treeSpacing:{number:Tv},blockShifting:{boolean:Sv},edgeMinimization:{boolean:Sv},parentCentralization:{boolean:Sv},direction:{string:[\"UD\",\"DU\",\"LR\",\"RL\"]},sortMethod:{string:[\"hubsize\",\"directed\"]},shakeTowards:{string:[\"leaves\",\"roots\"]},__type__:{object:Pv,boolean:Sv}},__type__:{object:Pv}},manipulation:{enabled:{boolean:Sv},initiallyActive:{boolean:Sv},addNode:{boolean:Sv,function:\"function\"},addEdge:{boolean:Sv,function:\"function\"},editNode:{function:\"function\"},editEdge:{editWithoutDrag:{function:\"function\"},__type__:{object:Pv,boolean:Sv,function:\"function\"}},deleteNode:{boolean:Sv,function:\"function\"},deleteEdge:{boolean:Sv,function:\"function\"},controlNodeStyle:Iv,__type__:{object:Pv,boolean:Sv}},nodes:Iv,physics:{enabled:{boolean:Sv},barnesHut:{theta:{number:Tv},gravitationalConstant:{number:Tv},centralGravity:{number:Tv},springLength:{number:Tv},springConstant:{number:Tv},damping:{number:Tv},avoidOverlap:{number:Tv},__type__:{object:Pv}},forceAtlas2Based:{theta:{number:Tv},gravitationalConstant:{number:Tv},centralGravity:{number:Tv},springLength:{number:Tv},springConstant:{number:Tv},damping:{number:Tv},avoidOverlap:{number:Tv},__type__:{object:Pv}},repulsion:{centralGravity:{number:Tv},springLength:{number:Tv},springConstant:{number:Tv},nodeDistance:{number:Tv},damping:{number:Tv},__type__:{object:Pv}},hierarchicalRepulsion:{centralGravity:{number:Tv},springLength:{number:Tv},springConstant:{number:Tv},nodeDistance:{number:Tv},damping:{number:Tv},avoidOverlap:{number:Tv},__type__:{object:Pv}},maxVelocity:{number:Tv},minVelocity:{number:Tv},solver:{string:[\"barnesHut\",\"repulsion\",\"hierarchicalRepulsion\",\"forceAtlas2Based\"]},stabilization:{enabled:{boolean:Sv},iterations:{number:Tv},updateInterval:{number:Tv},onlyDynamicEdges:{boolean:Sv},fit:{boolean:Sv},__type__:{object:Pv,boolean:Sv}},timestep:{number:Tv},adaptiveTimestep:{boolean:Sv},wind:{x:{number:Tv},y:{number:Tv},__type__:{object:Pv}},__type__:{object:Pv,boolean:Sv}},autoResize:{boolean:Sv},clickToUse:{boolean:Sv},locale:{string:Cv},locales:{__any__:{any:\"any\"},__type__:{object:Pv}},height:{string:Cv},width:{string:Cv},__type__:{object:Pv}},zv={nodes:{borderWidth:[1,0,10,1],borderWidthSelected:[2,0,10,1],color:{border:[\"color\",\"#2B7CE9\"],background:[\"color\",\"#97C2FC\"],highlight:{border:[\"color\",\"#2B7CE9\"],background:[\"color\",\"#D2E5FF\"]},hover:{border:[\"color\",\"#2B7CE9\"],background:[\"color\",\"#D2E5FF\"]}},opacity:[0,0,1,.1],fixed:{x:!1,y:!1},font:{color:[\"color\",\"#343434\"],size:[14,0,100,1],face:[\"arial\",\"verdana\",\"tahoma\"],background:[\"color\",\"none\"],strokeWidth:[0,0,50,1],strokeColor:[\"color\",\"#ffffff\"]},hidden:!1,labelHighlightBold:!0,physics:!0,scaling:{min:[10,0,200,1],max:[30,0,200,1],label:{enabled:!1,min:[14,0,200,1],max:[30,0,200,1],maxVisible:[30,0,200,1],drawThreshold:[5,0,20,1]}},shadow:{enabled:!1,color:\"rgba(0,0,0,0.5)\",size:[10,0,20,1],x:[5,-30,30,1],y:[5,-30,30,1]},shape:[\"ellipse\",\"box\",\"circle\",\"database\",\"diamond\",\"dot\",\"square\",\"star\",\"text\",\"triangle\",\"triangleDown\",\"hexagon\"],shapeProperties:{borderDashes:!1,borderRadius:[6,0,20,1],interpolation:!0,useImageSize:!1},size:[25,0,200,1]},edges:{arrows:{to:{enabled:!1,scaleFactor:[1,0,3,.05],type:\"arrow\"},middle:{enabled:!1,scaleFactor:[1,0,3,.05],type:\"arrow\"},from:{enabled:!1,scaleFactor:[1,0,3,.05],type:\"arrow\"}},endPointOffset:{from:[0,-10,10,1],to:[0,-10,10,1]},arrowStrikethrough:!0,color:{color:[\"color\",\"#848484\"],highlight:[\"color\",\"#848484\"],hover:[\"color\",\"#848484\"],inherit:[\"from\",\"to\",\"both\",!0,!1],opacity:[1,0,1,.05]},dashes:!1,font:{color:[\"color\",\"#343434\"],size:[14,0,100,1],face:[\"arial\",\"verdana\",\"tahoma\"],background:[\"color\",\"none\"],strokeWidth:[2,0,50,1],strokeColor:[\"color\",\"#ffffff\"],align:[\"horizontal\",\"top\",\"middle\",\"bottom\"]},hidden:!1,hoverWidth:[1.5,0,5,.1],labelHighlightBold:!0,physics:!0,scaling:{min:[1,0,100,1],max:[15,0,100,1],label:{enabled:!0,min:[14,0,200,1],max:[30,0,200,1],maxVisible:[30,0,200,1],drawThreshold:[5,0,20,1]}},selectionWidth:[1.5,0,5,.1],selfReferenceSize:[20,0,200,1],selfReference:{size:[20,0,200,1],angle:[Math.PI/2,-6*Math.PI,6*Math.PI,Math.PI/8],renderBehindTheNode:!0},shadow:{enabled:!1,color:\"rgba(0,0,0,0.5)\",size:[10,0,20,1],x:[5,-30,30,1],y:[5,-30,30,1]},smooth:{enabled:!0,type:[\"dynamic\",\"continuous\",\"discrete\",\"diagonalCross\",\"straightCross\",\"horizontal\",\"vertical\",\"curvedCW\",\"curvedCCW\",\"cubicBezier\"],forceDirection:[\"horizontal\",\"vertical\",\"none\"],roundness:[.5,0,1,.05]},width:[1,0,30,1]},layout:{hierarchical:{enabled:!1,levelSeparation:[150,20,500,5],nodeSpacing:[100,20,500,5],treeSpacing:[200,20,500,5],blockShifting:!0,edgeMinimization:!0,parentCentralization:!0,direction:[\"UD\",\"DU\",\"LR\",\"RL\"],sortMethod:[\"hubsize\",\"directed\"],shakeTowards:[\"leaves\",\"roots\"]}},interaction:{dragNodes:!0,dragView:!0,hideEdgesOnDrag:!1,hideEdgesOnZoom:!1,hideNodesOnDrag:!1,hover:!1,keyboard:{enabled:!1,speed:{x:[10,0,40,1],y:[10,0,40,1],zoom:[.02,0,.1,.005]},bindToWindow:!0,autoFocus:!0},multiselect:!1,navigationButtons:!1,selectable:!0,selectConnectedEdges:!0,hoverConnectedEdges:!0,tooltipDelay:[300,0,1e3,25],zoomView:!0,zoomSpeed:[1,.1,2,.1]},manipulation:{enabled:!1,initiallyActive:!1},physics:{enabled:!0,barnesHut:{theta:[.5,.1,1,.05],gravitationalConstant:[-2e3,-3e4,0,50],centralGravity:[.3,0,10,.05],springLength:[95,0,500,5],springConstant:[.04,0,1.2,.005],damping:[.09,0,1,.01],avoidOverlap:[0,0,1,.01]},forceAtlas2Based:{theta:[.5,.1,1,.05],gravitationalConstant:[-50,-500,0,1],centralGravity:[.01,0,1,.005],springLength:[95,0,500,5],springConstant:[.08,0,1.2,.005],damping:[.4,0,1,.01],avoidOverlap:[0,0,1,.01]},repulsion:{centralGravity:[.2,0,10,.05],springLength:[200,0,500,5],springConstant:[.05,0,1.2,.005],nodeDistance:[100,0,500,5],damping:[.09,0,1,.01]},hierarchicalRepulsion:{centralGravity:[.2,0,10,.05],springLength:[100,0,500,5],springConstant:[.01,0,1.2,.005],nodeDistance:[120,0,500,5],damping:[.09,0,1,.01],avoidOverlap:[0,0,1,.01]},maxVelocity:[50,0,150,1],minVelocity:[.1,.01,.5,.01],solver:[\"barnesHut\",\"forceAtlas2Based\",\"repulsion\",\"hierarchicalRepulsion\"],timestep:[.5,.01,1,.01],wind:{x:[0,-10,10,.1],y:[0,-10,10,.1]}}},Nv=function(t,e,i){var n;return!(!dr(t).call(t,\"physics\")||!dr(n=zv.physics.solver).call(n,e)||i.physics.solver===e||\"wind\"===e)},Av=Object.freeze({__proto__:null,configuratorHideOption:Nv,allOptions:Bv,configureOptions:zv}),Fv=function(){function t(){Nn(this,t)}return Fn(t,[{key:\"getDistances\",value:function(t,e,i){for(var n={},o=t.edges,r=0;r<e.length;r++){var s={};n[e[r]]=s;for(var a=0;a<e.length;a++)s[e[a]]=r==a?0:1e9}for(var h=0;h<i.length;h++){var l=o[i[h]];!0===l.connected&&void 0!==n[l.fromId]&&void 0!==n[l.toId]&&(n[l.fromId][l.toId]=1,n[l.toId][l.fromId]=1)}for(var d=e.length,c=0;c<d;c++)for(var u=e[c],f=n[u],p=0;p<d-1;p++)for(var v=e[p],g=n[v],y=p+1;y<d;y++){var m=e[y],b=n[m],w=Math.min(g[m],g[u]+f[m]);g[m]=w,b[v]=w}return n}}]),t}(),jv=function(){function t(e,i,n){Nn(this,t),this.body=e,this.springLength=i,this.springConstant=n,this.distanceSolver=new Fv}return Fn(t,[{key:\"setOptions\",value:function(t){t&&(t.springLength&&(this.springLength=t.springLength),t.springConstant&&(this.springConstant=t.springConstant))}},{key:\"solve\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=this.distanceSolver.getDistances(this.body,t,e);this._createL_matrix(n),this._createK_matrix(n),this._createE_matrix();for(var o=.01,r=1,s=0,a=Math.max(1e3,Math.min(10*this.body.nodeIndices.length,6e3)),h=5,l=1e9,d=0,c=0,u=0,f=0,p=0;l>o&&s<a;){s+=1;var v=this._getHighestEnergyNode(i),g=uo(v,4);for(d=g[0],l=g[1],c=g[2],u=g[3],f=l,p=0;f>r&&p<h;){p+=1,this._moveNode(d,c,u);var y=this._getEnergy(d),m=uo(y,3);f=m[0],c=m[1],u=m[2]}}}},{key:\"_getHighestEnergyNode\",value:function(t){for(var e=this.body.nodeIndices,i=this.body.nodes,n=0,o=e[0],r=0,s=0,a=0;a<e.length;a++){var h=e[a];if(!0!==i[h].predefinedPosition||!0===i[h].isCluster&&!0===t||!0!==i[h].options.fixed.x||!0!==i[h].options.fixed.y){var l=this._getEnergy(h),d=uo(l,3),c=d[0],u=d[1],f=d[2];n<c&&(n=c,o=h,r=u,s=f)}}return[o,n,r,s]}},{key:\"_getEnergy\",value:function(t){var e=uo(this.E_sums[t],2),i=e[0],n=e[1];return[Math.sqrt(Math.pow(i,2)+Math.pow(n,2)),i,n]}},{key:\"_moveNode\",value:function(t,e,i){for(var n=this.body.nodeIndices,o=this.body.nodes,r=0,s=0,a=0,h=o[t].x,l=o[t].y,d=this.K_matrix[t],c=this.L_matrix[t],u=0;u<n.length;u++){var f=n[u];if(f!==t){var p=o[f].x,v=o[f].y,g=d[f],y=c[f],m=1/Math.pow(Math.pow(h-p,2)+Math.pow(l-v,2),1.5);r+=g*(1-y*Math.pow(l-v,2)*m),s+=g*(y*(h-p)*(l-v)*m),a+=g*(1-y*Math.pow(h-p,2)*m)}}var b=(e/r+i/s)/(s/r-a/s),w=-(s*b+e)/r;o[t].x+=w,o[t].y+=b,this._updateE_matrix(t)}},{key:\"_createL_matrix\",value:function(t){var e=this.body.nodeIndices,i=this.springLength;this.L_matrix=[];for(var n=0;n<e.length;n++){this.L_matrix[e[n]]={};for(var o=0;o<e.length;o++)this.L_matrix[e[n]][e[o]]=i*t[e[n]][e[o]]}}},{key:\"_createK_matrix\",value:function(t){var e=this.body.nodeIndices,i=this.springConstant;this.K_matrix=[];for(var n=0;n<e.length;n++){this.K_matrix[e[n]]={};for(var o=0;o<e.length;o++)this.K_matrix[e[n]][e[o]]=i*Math.pow(t[e[n]][e[o]],-2)}}},{key:\"_createE_matrix\",value:function(){var t=this.body.nodeIndices,e=this.body.nodes;this.E_matrix={},this.E_sums={};for(var i=0;i<t.length;i++)this.E_matrix[t[i]]=[];for(var n=0;n<t.length;n++){for(var o=t[n],r=e[o].x,s=e[o].y,a=0,h=0,l=n;l<t.length;l++){var d=t[l];if(d!==o){var c=e[d].x,u=e[d].y,f=1/Math.sqrt(Math.pow(r-c,2)+Math.pow(s-u,2));this.E_matrix[o][l]=[this.K_matrix[o][d]*(r-c-this.L_matrix[o][d]*(r-c)*f),this.K_matrix[o][d]*(s-u-this.L_matrix[o][d]*(s-u)*f)],this.E_matrix[d][n]=this.E_matrix[o][l],a+=this.E_matrix[o][l][0],h+=this.E_matrix[o][l][1]}}this.E_sums[o]=[a,h]}}},{key:\"_updateE_matrix\",value:function(t){for(var e=this.body.nodeIndices,i=this.body.nodes,n=this.E_matrix[t],o=this.K_matrix[t],r=this.L_matrix[t],s=i[t].x,a=i[t].y,h=0,l=0,d=0;d<e.length;d++){var c=e[d];if(c!==t){var u=n[d],f=u[0],p=u[1],v=i[c].x,g=i[c].y,y=1/Math.sqrt(Math.pow(s-v,2)+Math.pow(a-g,2)),m=o[c]*(s-v-r[c]*(s-v)*y),b=o[c]*(a-g-r[c]*(a-g)*y);n[d]=[m,b],h+=m,l+=b;var w=this.E_sums[c];w[0]+=m-f,w[1]+=b-p}}this.E_sums[t]=[h,l]}}]),t}();function Rv(t,e,i){var n,o,r,s,a=this;if(!(this instanceof Rv))throw new SyntaxError(\"Constructor must be called with the new operator\");this.options={},this.defaultOptions={locale:\"en\",locales:Kl,clickToUse:!1},At(this.options,this.defaultOptions),this.body={container:t,nodes:{},nodeIndices:[],edges:{},edgeIndices:[],emitter:{on:Vt(n=this.on).call(n,this),off:Vt(o=this.off).call(o,this),emit:Vt(r=this.emit).call(r,this),once:Vt(s=this.once).call(s,this)},eventListeners:{onTap:function(){},onTouch:function(){},onDoubleTap:function(){},onHold:function(){},onDragStart:function(){},onDrag:function(){},onDragEnd:function(){},onMouseWheel:function(){},onPinch:function(){},onMouseMove:function(){},onRelease:function(){},onContext:function(){}},data:{nodes:null,edges:null},functions:{createNode:function(){},createEdge:function(){},getPointer:function(){}},modules:{},view:{scale:1,translation:{x:0,y:0}},selectionBox:{show:!1,position:{start:{x:0,y:0},end:{x:0,y:0}}}},this.bindEventListeners(),this.images=new Zl((function(){return a.body.emitter.emit(\"_requestRedraw\")})),this.groups=new gd,this.canvas=new Ep(this.body),this.selectionHandler=new ov(this.body,this.canvas),this.interactionHandler=new Ip(this.body,this.canvas,this.selectionHandler),this.view=new Cp(this.body,this.canvas),this.renderer=new wp(this.body,this.canvas),this.physics=new fp(this.body),this.layoutEngine=new _v(this.body),this.clustering=new yp(this.body),this.manipulation=new Ov(this.body,this.canvas,this.selectionHandler,this.interactionHandler),this.nodesHandler=new pf(this.body,this.images,this.groups,this.layoutEngine),this.edgesHandler=new ip(this.body,this.images,this.groups),this.body.modules.kamadaKawai=new jv(this.body,150,.05),this.body.modules.clustering=this.clustering,this.canvas._create(),this.setOptions(i),this.setData(e)}function Lv(t){for(var e in t)Object.prototype.hasOwnProperty.call(t,e)&&(t[e].redundant=t[e].used,t[e].used=[])}function Hv(t){for(var e in t)if(Object.prototype.hasOwnProperty.call(t,e)&&t[e].redundant){for(var i=0;i<t[e].redundant.length;i++)t[e].redundant[i].parentNode.removeChild(t[e].redundant[i]);t[e].redundant=[]}}function Wv(t,e,i){var n;return Object.prototype.hasOwnProperty.call(e,t)?e[t].redundant.length>0?(n=e[t].redundant[0],e[t].redundant.shift()):(n=document.createElementNS(\"http://www.w3.org/2000/svg\",t),i.appendChild(n)):(n=document.createElementNS(\"http://www.w3.org/2000/svg\",t),e[t]={used:[],redundant:[]},i.appendChild(n)),e[t].used.push(n),n}Zt(Rv.prototype),Rv.prototype.setOptions=function(t){var e=this;if(null===t&&(t=void 0),void 0!==t){!0===ul.validate(t,Bv)&&console.error(\"%cErrors have been found in the supplied options object.\",cl);if(Eh([\"locale\",\"locales\",\"clickToUse\"],this.options,t),void 0!==t.locale&&(t.locale=function(t,e){try{var i=e.split(/[-_ /]/,2),n=uo(i,2),o=n[0],r=n[1],s=null!=o?o.toLowerCase():null,a=null!=r?r.toUpperCase():null;if(s&&a){var h,l=s+\"-\"+a;if(Object.prototype.hasOwnProperty.call(t,l))return l;console.warn(Eo(h=\"Unknown variant \".concat(a,\" of language \")).call(h,s,\".\"))}if(s){var d=s;if(Object.prototype.hasOwnProperty.call(t,d))return d;console.warn(\"Unknown language \".concat(s))}return console.warn(\"Unknown locale \".concat(e,\", falling back to English.\")),\"en\"}catch(t){return console.error(t),console.warn(\"Unexpected error while normalizing locale \".concat(e,\", falling back to English.\")),\"en\"}}(t.locales||this.options.locales,t.locale)),t=this.layoutEngine.setOptions(t.layout,t),this.canvas.setOptions(t),this.groups.setOptions(t.groups),this.nodesHandler.setOptions(t.nodes),this.edgesHandler.setOptions(t.edges),this.physics.setOptions(t.physics),this.manipulation.setOptions(t.manipulation,t,this.options),this.interactionHandler.setOptions(t.interaction),this.renderer.setOptions(t.interaction),this.selectionHandler.setOptions(t.interaction),void 0!==t.groups&&this.body.emitter.emit(\"refreshNodes\"),\"configure\"in t&&(this.configurator||(this.configurator=new hl(this,this.body.container,zv,this.canvas.pixelRatio,Nv)),this.configurator.setOptions(t.configure)),this.configurator&&!0===this.configurator.options.enabled){var i={nodes:{},edges:{},layout:{},interaction:{},manipulation:{},physics:{},global:{}};Ch(i.nodes,this.nodesHandler.options),Ch(i.edges,this.edgesHandler.options),Ch(i.layout,this.layoutEngine.options),Ch(i.interaction,this.selectionHandler.options),Ch(i.interaction,this.renderer.options),Ch(i.interaction,this.interactionHandler.options),Ch(i.manipulation,this.manipulation.options),Ch(i.physics,this.physics.options),Ch(i.global,this.canvas.options),Ch(i.global,this.options),this.configurator.setModuleOptions(i)}void 0!==t.clickToUse?!0===t.clickToUse?void 0===this.activator&&(this.activator=new sl(this.canvas.frame),this.activator.on(\"change\",(function(){e.body.emitter.emit(\"activate\")}))):(void 0!==this.activator&&(this.activator.destroy(),delete this.activator),this.body.emitter.emit(\"activate\")):this.body.emitter.emit(\"activate\"),this.canvas.setSize(),this.body.emitter.emit(\"startSimulation\")}},Rv.prototype._updateVisibleIndices=function(){var t=this.body.nodes,e=this.body.edges;for(var i in this.body.nodeIndices=[],this.body.edgeIndices=[],t)Object.prototype.hasOwnProperty.call(t,i)&&(this.clustering._isClusteredNode(i)||!1!==t[i].options.hidden||this.body.nodeIndices.push(t[i].id));for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){var o=e[n],r=t[o.fromId],s=t[o.toId],a=void 0!==r&&void 0!==s;!this.clustering._isClusteredEdge(n)&&!1===o.options.hidden&&a&&!1===r.options.hidden&&!1===s.options.hidden&&this.body.edgeIndices.push(o.id)}},Rv.prototype.bindEventListeners=function(){var t=this;this.body.emitter.on(\"_dataChanged\",(function(){t.edgesHandler._updateState(),t.body.emitter.emit(\"_dataUpdated\")})),this.body.emitter.on(\"_dataUpdated\",(function(){t.clustering._updateState(),t._updateVisibleIndices(),t._updateValueRange(t.body.nodes),t._updateValueRange(t.body.edges),t.body.emitter.emit(\"startSimulation\"),t.body.emitter.emit(\"_requestRedraw\")}))},Rv.prototype.setData=function(t){if(this.body.emitter.emit(\"resetPhysics\"),this.body.emitter.emit(\"_resetData\"),this.selectionHandler.unselectAll(),t&&t.dot&&(t.nodes||t.edges))throw new SyntaxError('Data must contain either parameter \"dot\" or  parameter pair \"nodes\" and \"edges\", but not both.');if(this.setOptions(t&&t.options),t&&t.dot){console.warn(\"The dot property has been deprecated. Please use the static convertDot method to convert DOT into vis.network format and use the normal data format with nodes and edges. This converter is used like this: var data = vis.network.convertDot(dotString);\");var e=Ul(t.dot);this.setData(e)}else if(t&&t.gephi){console.warn(\"The gephi property has been deprecated. Please use the static convertGephi method to convert gephi into vis.network format and use the normal data format with nodes and edges. This converter is used like this: var data = vis.network.convertGephi(gephiJson);\");var i=Xl(t.gephi);this.setData(i)}else this.nodesHandler.setData(t&&t.nodes,!0),this.edgesHandler.setData(t&&t.edges,!0),this.body.emitter.emit(\"_dataChanged\"),this.body.emitter.emit(\"_dataLoaded\"),this.body.emitter.emit(\"initPhysics\")},Rv.prototype.destroy=function(){for(var t in this.body.emitter.emit(\"destroy\"),this.body.emitter.off(),this.off(),delete this.groups,delete this.canvas,delete this.selectionHandler,delete this.interactionHandler,delete this.view,delete this.renderer,delete this.physics,delete this.layoutEngine,delete this.clustering,delete this.manipulation,delete this.nodesHandler,delete this.edgesHandler,delete this.configurator,delete this.images,this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,t)&&delete this.body.nodes[t];for(var e in this.body.edges)Object.prototype.hasOwnProperty.call(this.body.edges,e)&&delete this.body.edges[e];mh(this.body.container)},Rv.prototype._updateValueRange=function(t){var e,i=void 0,n=void 0,o=0;for(e in t)if(Object.prototype.hasOwnProperty.call(t,e)){var r=t[e].getValue();void 0!==r&&(i=void 0===i?r:Math.min(r,i),n=void 0===n?r:Math.max(r,n),o+=r)}if(void 0!==i&&void 0!==n)for(e in t)Object.prototype.hasOwnProperty.call(t,e)&&t[e].setValueRange(i,n,o)},Rv.prototype.isActive=function(){return!this.activator||this.activator.active},Rv.prototype.setSize=function(){return this.canvas.setSize.apply(this.canvas,arguments)},Rv.prototype.canvasToDOM=function(){return this.canvas.canvasToDOM.apply(this.canvas,arguments)},Rv.prototype.DOMtoCanvas=function(){return this.canvas.DOMtoCanvas.apply(this.canvas,arguments)},Rv.prototype.findNode=function(){return this.clustering.findNode.apply(this.clustering,arguments)},Rv.prototype.isCluster=function(){return this.clustering.isCluster.apply(this.clustering,arguments)},Rv.prototype.openCluster=function(){return this.clustering.openCluster.apply(this.clustering,arguments)},Rv.prototype.cluster=function(){return this.clustering.cluster.apply(this.clustering,arguments)},Rv.prototype.getNodesInCluster=function(){return this.clustering.getNodesInCluster.apply(this.clustering,arguments)},Rv.prototype.clusterByConnection=function(){return this.clustering.clusterByConnection.apply(this.clustering,arguments)},Rv.prototype.clusterByHubsize=function(){return this.clustering.clusterByHubsize.apply(this.clustering,arguments)},Rv.prototype.updateClusteredNode=function(){return this.clustering.updateClusteredNode.apply(this.clustering,arguments)},Rv.prototype.getClusteredEdges=function(){return this.clustering.getClusteredEdges.apply(this.clustering,arguments)},Rv.prototype.getBaseEdge=function(){return this.clustering.getBaseEdge.apply(this.clustering,arguments)},Rv.prototype.getBaseEdges=function(){return this.clustering.getBaseEdges.apply(this.clustering,arguments)},Rv.prototype.updateEdge=function(){return this.clustering.updateEdge.apply(this.clustering,arguments)},Rv.prototype.clusterOutliers=function(){return this.clustering.clusterOutliers.apply(this.clustering,arguments)},Rv.prototype.getSeed=function(){return this.layoutEngine.getSeed.apply(this.layoutEngine,arguments)},Rv.prototype.enableEditMode=function(){return this.manipulation.enableEditMode.apply(this.manipulation,arguments)},Rv.prototype.disableEditMode=function(){return this.manipulation.disableEditMode.apply(this.manipulation,arguments)},Rv.prototype.addNodeMode=function(){return this.manipulation.addNodeMode.apply(this.manipulation,arguments)},Rv.prototype.editNode=function(){return this.manipulation.editNode.apply(this.manipulation,arguments)},Rv.prototype.editNodeMode=function(){return console.warn(\"Deprecated: Please use editNode instead of editNodeMode.\"),this.manipulation.editNode.apply(this.manipulation,arguments)},Rv.prototype.addEdgeMode=function(){return this.manipulation.addEdgeMode.apply(this.manipulation,arguments)},Rv.prototype.editEdgeMode=function(){return this.manipulation.editEdgeMode.apply(this.manipulation,arguments)},Rv.prototype.deleteSelected=function(){return this.manipulation.deleteSelected.apply(this.manipulation,arguments)},Rv.prototype.getPositions=function(){return this.nodesHandler.getPositions.apply(this.nodesHandler,arguments)},Rv.prototype.getPosition=function(){return this.nodesHandler.getPosition.apply(this.nodesHandler,arguments)},Rv.prototype.storePositions=function(){return this.nodesHandler.storePositions.apply(this.nodesHandler,arguments)},Rv.prototype.moveNode=function(){return this.nodesHandler.moveNode.apply(this.nodesHandler,arguments)},Rv.prototype.getBoundingBox=function(){return this.nodesHandler.getBoundingBox.apply(this.nodesHandler,arguments)},Rv.prototype.getConnectedNodes=function(t){return void 0!==this.body.nodes[t]?this.nodesHandler.getConnectedNodes.apply(this.nodesHandler,arguments):this.edgesHandler.getConnectedNodes.apply(this.edgesHandler,arguments)},Rv.prototype.getConnectedEdges=function(){return this.nodesHandler.getConnectedEdges.apply(this.nodesHandler,arguments)},Rv.prototype.startSimulation=function(){return this.physics.startSimulation.apply(this.physics,arguments)},Rv.prototype.stopSimulation=function(){return this.physics.stopSimulation.apply(this.physics,arguments)},Rv.prototype.stabilize=function(){return this.physics.stabilize.apply(this.physics,arguments)},Rv.prototype.getSelection=function(){return this.selectionHandler.getSelection.apply(this.selectionHandler,arguments)},Rv.prototype.setSelection=function(){return this.selectionHandler.setSelection.apply(this.selectionHandler,arguments)},Rv.prototype.getSelectedNodes=function(){return this.selectionHandler.getSelectedNodeIds.apply(this.selectionHandler,arguments)},Rv.prototype.getSelectedEdges=function(){return this.selectionHandler.getSelectedEdgeIds.apply(this.selectionHandler,arguments)},Rv.prototype.getNodeAt=function(){var t=this.selectionHandler.getNodeAt.apply(this.selectionHandler,arguments);return void 0!==t&&void 0!==t.id?t.id:t},Rv.prototype.getEdgeAt=function(){var t=this.selectionHandler.getEdgeAt.apply(this.selectionHandler,arguments);return void 0!==t&&void 0!==t.id?t.id:t},Rv.prototype.selectNodes=function(){return this.selectionHandler.selectNodes.apply(this.selectionHandler,arguments)},Rv.prototype.selectEdges=function(){return this.selectionHandler.selectEdges.apply(this.selectionHandler,arguments)},Rv.prototype.unselectAll=function(){this.selectionHandler.unselectAll.apply(this.selectionHandler,arguments),this.selectionHandler.commitWithoutEmitting.apply(this.selectionHandler),this.redraw()},Rv.prototype.redraw=function(){return this.renderer.redraw.apply(this.renderer,arguments)},Rv.prototype.getScale=function(){return this.view.getScale.apply(this.view,arguments)},Rv.prototype.getViewPosition=function(){return this.view.getViewPosition.apply(this.view,arguments)},Rv.prototype.fit=function(){return this.view.fit.apply(this.view,arguments)},Rv.prototype.moveTo=function(){return this.view.moveTo.apply(this.view,arguments)},Rv.prototype.focus=function(){return this.view.focus.apply(this.view,arguments)},Rv.prototype.releaseNode=function(){return this.view.releaseNode.apply(this.view,arguments)},Rv.prototype.getOptionsFromConfigurator=function(){var t={};return this.configurator&&(t=this.configurator.getOptions.apply(this.configurator)),t};var qv=Object.freeze({__proto__:null,prepareElements:Lv,cleanupElements:Hv,resetElements:function(t){Lv(t),Hv(t),Lv(t)},getSVGElement:Wv,getDOMElement:function(t,e,i,n){var o;return Object.prototype.hasOwnProperty.call(e,t)?e[t].redundant.length>0?(o=e[t].redundant[0],e[t].redundant.shift()):(o=document.createElement(t),void 0!==n?i.insertBefore(o,n):i.appendChild(o)):(o=document.createElement(t),e[t]={used:[],redundant:[]},void 0!==n?i.insertBefore(o,n):i.appendChild(o)),e[t].used.push(o),o},drawPoint:function(t,e,i,n,o,r){var s;if(\"circle\"==i.style?((s=Wv(\"circle\",n,o)).setAttributeNS(null,\"cx\",t),s.setAttributeNS(null,\"cy\",e),s.setAttributeNS(null,\"r\",.5*i.size)):((s=Wv(\"rect\",n,o)).setAttributeNS(null,\"x\",t-.5*i.size),s.setAttributeNS(null,\"y\",e-.5*i.size),s.setAttributeNS(null,\"width\",i.size),s.setAttributeNS(null,\"height\",i.size)),void 0!==i.styles&&s.setAttributeNS(null,\"style\",i.styles),s.setAttributeNS(null,\"class\",i.className+\" vis-point\"),r){var a=Wv(\"text\",n,o);r.xOffset&&(t+=r.xOffset),r.yOffset&&(e+=r.yOffset),r.content&&(a.textContent=r.content),r.className&&a.setAttributeNS(null,\"class\",r.className+\" vis-label\"),a.setAttributeNS(null,\"x\",t),a.setAttributeNS(null,\"y\",e)}return s},drawBar:function(t,e,i,n,o,r,s,a){if(0!=n){n<0&&(e-=n*=-1);var h=Wv(\"rect\",r,s);h.setAttributeNS(null,\"x\",t-.5*i),h.setAttributeNS(null,\"y\",e),h.setAttributeNS(null,\"width\",i),h.setAttributeNS(null,\"height\",n),h.setAttributeNS(null,\"class\",o),a&&h.setAttributeNS(null,\"style\",a)}}}),Vv={Images:Zl,dotparser:Yl,gephiParser:Gl,allOptions:Av,convertDot:Ul,convertGephi:Xl},Uv=Object.freeze({__proto__:null,network:Vv,DOMutil:qv,util:fl,data:ou,Hammer:ll,keycharm:Tp,DataSet:tu,DataView:eu,Queue:Zc,Network:Rv});t.DOMutil=qv,t.DataSet=tu,t.DataView=eu,t.Hammer=ll,t.Network=Rv,t.Queue=Zc,t.data=ou,t.default=Uv,t.keycharm=Tp,t.network=Vv,t.util=fl,Object.defineProperty(t,\"__esModule\",{value:!0})}\n",
       "  // ));\n",
       "  // # sourceMappingURL=vis-network.min.js.map\n",
       "\n",
       "  );\n",
       "}\n",
       "\n",
       "\n",
       "    require([\"gravis-vis-network\"], function(vis){\n",
       "      // Strict mode: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Strict_mode\n",
       "      \"use strict\";\n",
       "\n",
       "      const state = {\n",
       "        manager:{\n",
       "          // Data generation process: 1) Fetch state.rawData, 2) derive state.parsedData, 3) derive state.shownData\n",
       "\n",
       "          // 1) Fetch state.rawData\n",
       "          fetchRawDataFromTemplating(){\n",
       "            state.rawData = [{\"directed\": true, \"metadata\": {\"node_color\": \"black\", \"node_opacity\": 1, \"node_size\": 10, \"node_shape\": \"circle\", \"node_border_color\": \"black\", \"node_border_size\": 1, \"node_label_color\": \"black\", \"node_label_size\": 10, \"edge_color\": \"#3baca3\", \"edge_opacity\": 1, \"edge_size\": 2, \"edge_shape\": \"circle\", \"edge_border_color\": \"#999\", \"edge_border_size\": 1, \"edge_label_color\": \"black\", \"edge_label_size\": 10, \"arrow_size\": 4, \"arrow_color\": \"#999\"}, \"nodes\": {\"r1MhwkDR9RGGNg07nIf5BQ\": {\"label\": \"Tom\", \"metadata\": {\"focus\": \"target\", \"label\": \"Tom\", \"color\": \"#f07f65\", \"size\": 10}}, \"AOWmwJayFKAjAmmIlk8yOQ\": {\"label\": \"Family Doe\", \"metadata\": {\"focus\": \"target\", \"label\": \"Family Doe\", \"value\": 0.24535094202500005, \"color\": \"#f07f65\", \"size\": 24.766456247563966}}, \"dQIuZHbv+9dqtJ8fO/8rnA\": {\"label\": \"ACME Bank\", \"metadata\": {\"focus\": \"target\", \"label\": \"ACME Bank\", \"value\": 1.0, \"color\": \"#f07f65\", \"size\": 50.0}}, \"JIMOIAq9XU0WsAXPLHQRBg\": {\"label\": \"MyBank\", \"metadata\": {\"label\": \"MyBank\", \"value\": 0.45954475000000006, \"color\": \"#92979c\", \"size\": 33.89486502407112}}, \"gb8VMWs5dsc6cteL2DOYCA\": {\"label\": \"ElysiumTech Solutions\", \"metadata\": {\"label\": \"ElysiumTech Solutions\", \"color\": \"#92979c\", \"size\": 10}}, \"nToxQTWUkZ4gv4iAItXSKw\": {\"label\": \"NovaCore Innovations\", \"metadata\": {\"label\": \"NovaCore Innovations\", \"value\": 0.15, \"color\": \"#92979c\", \"size\": 19.364916731037084}}, \"DuOTZpKAvOFRrhddS9d3NA\": {\"label\": \"InfinityForge Technologies\", \"metadata\": {\"label\": \"InfinityForge Technologies\", \"color\": \"#92979c\", \"size\": 10}}, \"YlVLHV5wCROpp3hW3nbNOQ\": {\"label\": \"PhoenixRise Ventures\", \"metadata\": {\"label\": \"PhoenixRise Ventures\", \"value\": 0.3015, \"color\": \"#92979c\", \"size\": 27.45450782658469}}, \"MYXtcytg7uj+rAyOjYhBQA\": {\"label\": \"People Bank\", \"metadata\": {\"label\": \"People Bank\", \"value\": 0.09829662202500003, \"color\": \"#92979c\", \"size\": 15.676146052601705}}, \"uVH0cGqXVe7/eDYLCwW6XQ\": {\"label\": \"NebulaTech Solutions\", \"metadata\": {\"label\": \"NebulaTech Solutions\", \"color\": \"#92979c\", \"size\": 10}}, \"249BMZupWCFjqM7zue27iQ\": {\"label\": \"Quantum Dynamics Innovations\", \"metadata\": {\"label\": \"Quantum Dynamics Innovations\", \"color\": \"#92979c\", \"size\": 10}}, \"77IlFbWAmT0DYKSlTSVLjg\": {\"label\": \"CyberNexus Systems\", \"metadata\": {\"label\": \"CyberNexus Systems\", \"color\": \"#92979c\", \"size\": 10}}, \"cW6S8m7PKwayYyrUFQOwnA\": {\"label\": \"Mary\", \"metadata\": {\"label\": \"Mary\", \"color\": \"#92979c\", \"size\": 10}}, \"IWkBDvnHtyJq/z5hVPdgnQ\": {\"label\": \"DreamScape Enterprises\", \"metadata\": {\"label\": \"DreamScape Enterprises\", \"color\": \"#92979c\", \"size\": 10}}, \"B2ENslGgWUXwghQigOV/ng\": {\"label\": \"StellarSphere Enterprises\", \"metadata\": {\"label\": \"StellarSphere Enterprises\", \"value\": 0.183915, \"color\": \"#92979c\", \"size\": 21.442656085475978}}, \"hZwSJYPIqnQL6SP8CAMJog\": {\"label\": \"CelestialWave Industries\", \"metadata\": {\"label\": \"CelestialWave Industries\", \"value\": 0.45, \"color\": \"#92979c\", \"size\": 33.54101966249684}}, \"sAvunE8/tDW5b4Q7IVNIwg\": {\"label\": \"Anna\", \"metadata\": {\"label\": \"Anna\", \"value\": 0.14705432000000002, \"color\": \"#92979c\", \"size\": 19.17383112473874}}, \"Lh2x5E3rMHHKwYTA4a3yyQ\": {\"label\": \"ACME Trust\", \"metadata\": {\"label\": \"ACME Trust\", \"value\": 0.10569529250000002, \"color\": \"#92979c\", \"size\": 16.255406216087007}}, \"sIMZM6956KBcjN/vk1rXzA\": {\"label\": \"Bob\", \"metadata\": {\"label\": \"Bob\", \"value\": 0.09829662202500003, \"color\": \"#92979c\", \"size\": 15.676146052601705}}}, \"edges\": [{\"source\": \"AOWmwJayFKAjAmmIlk8yOQ\", \"target\": \"r1MhwkDR9RGGNg07nIf5BQ\", \"metadata\": {\"kind\": \"in family\", \"weight\": 1.0, \"label\": \"family member\", \"size\": 5.0}}, {\"source\": \"AOWmwJayFKAjAmmIlk8yOQ\", \"target\": \"cW6S8m7PKwayYyrUFQOwnA\", \"metadata\": {\"kind\": \"in family\", \"weight\": 1.0, \"label\": \"family member\", \"size\": 5.0}}, {\"source\": \"AOWmwJayFKAjAmmIlk8yOQ\", \"target\": \"sAvunE8/tDW5b4Q7IVNIwg\", \"metadata\": {\"kind\": \"in family\", \"ownership\": \"OGb6D+Y/FRRmUtfxCMnH+A\", \"weight\": 1.0, \"label\": \"family member\", \"size\": 5.0}}, {\"source\": \"AOWmwJayFKAjAmmIlk8yOQ\", \"target\": \"sIMZM6956KBcjN/vk1rXzA\", \"metadata\": {\"kind\": \"in family\", \"ownership\": \"ndrZA2gmbEoOmZmWcUcsDQ\", \"weight\": 1.0, \"label\": \"family member\", \"size\": 5.0}}, {\"source\": \"sIMZM6956KBcjN/vk1rXzA\", \"target\": \"MYXtcytg7uj+rAyOjYhBQA\", \"metadata\": {\"kind\": \"ceo\", \"ownership\": \"wzaeqzK9MHinR9hGOnEpRA\", \"weight\": 1.0, \"label\": \"CEO at\", \"size\": 5.0}}, {\"source\": \"JIMOIAq9XU0WsAXPLHQRBg\", \"target\": \"dQIuZHbv+9dqtJ8fO/8rnA\", \"metadata\": {\"ownership\": \"AceH3E7U0WqSgn7M9di5KQ\", \"weight\": 0.45954475000000006, \"label\": \"45.95%\", \"size\": 2.2977237500000003}}, {\"source\": \"JIMOIAq9XU0WsAXPLHQRBg\", \"target\": \"B2ENslGgWUXwghQigOV/ng\", \"metadata\": {\"ownership\": \"1uGQJWupfgXb1WGsQWY+pg\", \"weight\": 0.65, \"label\": \"65.00%\", \"size\": 3.25}}, {\"source\": \"nToxQTWUkZ4gv4iAItXSKw\", \"target\": \"dQIuZHbv+9dqtJ8fO/8rnA\", \"metadata\": {\"ownership\": \"tkSYldwJio8Dk4Lv9G6qFQ\", \"weight\": 0.15, \"label\": \"15.00%\", \"size\": 0.75}}, {\"source\": \"AOWmwJayFKAjAmmIlk8yOQ\", \"target\": \"dQIuZHbv+9dqtJ8fO/8rnA\", \"metadata\": {\"ownership\": \"4Pjw9Mr7OCeDiVQ6Gx2oTA\", \"weight\": 0.24535094202500005, \"label\": \"24.54%\", \"size\": 1.2267547101250003}}, {\"source\": \"YlVLHV5wCROpp3hW3nbNOQ\", \"target\": \"nToxQTWUkZ4gv4iAItXSKw\", \"metadata\": {\"ownership\": \"STj9aMjZDxZvWq3SZvzd7Q\", \"weight\": 0.81, \"label\": \"81.00%\", \"size\": 4.050000000000001}}, {\"source\": \"YlVLHV5wCROpp3hW3nbNOQ\", \"target\": \"dQIuZHbv+9dqtJ8fO/8rnA\", \"metadata\": {\"ownership\": \"gHfJbNmcryZT4QjIPiVtCA\", \"weight\": 0.3015, \"label\": \"30.15%\", \"size\": 1.5074999999999998}}, {\"source\": \"YlVLHV5wCROpp3hW3nbNOQ\", \"target\": \"hZwSJYPIqnQL6SP8CAMJog\", \"metadata\": {\"ownership\": \"fCxQfVxE4lciCRkO9FZ3Hw\", \"weight\": 0.4, \"label\": \"40.00%\", \"size\": 2.0}}, {\"source\": \"MYXtcytg7uj+rAyOjYhBQA\", \"target\": \"dQIuZHbv+9dqtJ8fO/8rnA\", \"metadata\": {\"ownership\": \"ksk6plm9t4N+yjJyptQW1Q\", \"weight\": 0.09829662202500003, \"label\": \"9.83%\", \"size\": 0.4914831101250001}}, {\"source\": \"MYXtcytg7uj+rAyOjYhBQA\", \"target\": \"Lh2x5E3rMHHKwYTA4a3yyQ\", \"metadata\": {\"ownership\": \"GB9DQHFWAC2zi6ECkMnTjA\", \"weight\": 0.93, \"label\": \"93.00%\", \"size\": 4.65}}, {\"source\": \"B2ENslGgWUXwghQigOV/ng\", \"target\": \"YlVLHV5wCROpp3hW3nbNOQ\", \"metadata\": {\"ownership\": \"xqOaNwsLz4jQNmX9rwOeIg\", \"weight\": 0.61, \"label\": \"61.00%\", \"size\": 3.05}}, {\"source\": \"B2ENslGgWUXwghQigOV/ng\", \"target\": \"dQIuZHbv+9dqtJ8fO/8rnA\", \"metadata\": {\"ownership\": \"pRj/gpuwCc/2EpsBSwjCpw\", \"weight\": 0.183915, \"label\": \"18.39%\", \"size\": 0.919575}}, {\"source\": \"hZwSJYPIqnQL6SP8CAMJog\", \"target\": \"dQIuZHbv+9dqtJ8fO/8rnA\", \"metadata\": {\"ownership\": \"uw4VKTMKkn8CGANCc5vX9g\", \"weight\": 0.45, \"label\": \"45.00%\", \"size\": 2.25}}, {\"source\": \"sAvunE8/tDW5b4Q7IVNIwg\", \"target\": \"JIMOIAq9XU0WsAXPLHQRBg\", \"metadata\": {\"ownership\": \"XKh/7a9hu3OyczK73WDhAQ\", \"weight\": 0.32, \"label\": \"32.00%\", \"size\": 1.6}}, {\"source\": \"sAvunE8/tDW5b4Q7IVNIwg\", \"target\": \"dQIuZHbv+9dqtJ8fO/8rnA\", \"metadata\": {\"ownership\": \"R9x1F87mn/luKGDB9tOiEQ\", \"weight\": 0.14705432000000002, \"label\": \"14.71%\", \"size\": 0.7352716000000001}}, {\"source\": \"Lh2x5E3rMHHKwYTA4a3yyQ\", \"target\": \"JIMOIAq9XU0WsAXPLHQRBg\", \"metadata\": {\"ownership\": \"YB+cYVY3QUSa0H0I0HAsBQ\", \"weight\": 0.23, \"label\": \"23.00%\", \"size\": 1.1500000000000001}}, {\"source\": \"Lh2x5E3rMHHKwYTA4a3yyQ\", \"target\": \"dQIuZHbv+9dqtJ8fO/8rnA\", \"metadata\": {\"ownership\": \"MQ/N8jKg8bhaQHD/UKjqZw\", \"weight\": 0.10569529250000002, \"label\": \"10.57%\", \"size\": 0.5284764625000001}}, {\"source\": \"sIMZM6956KBcjN/vk1rXzA\", \"target\": \"dQIuZHbv+9dqtJ8fO/8rnA\", \"metadata\": {\"ownership\": \"EFTTopsfbI35TrnNFf3gig\", \"weight\": 0.09829662202500003, \"label\": \"9.83%\", \"size\": 0.4914831101250001}}]}];\n",
       "            // Data selection and normalization\n",
       "            state.nodeSizeDataSource = \"size\";\n",
       "            state.useNodeSizeNormalization = false;\n",
       "            state.nodeSizeNormalizationMin = 5.0;\n",
       "            state.nodeSizeNormalizationMax = 75.0;\n",
       "            state.nodeLabelTextDataSource = \"label\";\n",
       "            state.edgeSizeDataSource = \"size\";\n",
       "            state.useEdgeSizeNormalization = false;\n",
       "            state.edgeSizeNormalizationMin = 0.2;\n",
       "            state.edgeSizeNormalizationMax = 5.0;\n",
       "            state.edgeLabelTextDataSource = \"label\";\n",
       "            // Containers\n",
       "            state.graphContainerHeight = 450;\n",
       "            state.detailsContainerHeight = 100;\n",
       "            state.showDetails = false,\n",
       "            state.showDetailsToggleButton = true,\n",
       "            state.showMenu = false,\n",
       "            state.showMenuToggleButton = true,\n",
       "            // Nodes\n",
       "            state.showNodes = true;\n",
       "            state.nodeSizeFactor = 1.0;\n",
       "            state.nodeDragFix = false;\n",
       "            state.nodeHoverNeighborhood = false;\n",
       "            state.nodeHoverTooltip = true;\n",
       "            state.showNodeImages = true;\n",
       "            state.nodeImageSizeFactor = 1.0;\n",
       "            state.showNodeLabels = true;\n",
       "            state.showNodeLabelBorders = true;\n",
       "            state.nodeLabelSizeFactor = 1.0;\n",
       "            state.nodeLabelRotation = 0.0;\n",
       "            state.nodeLabelFont = \"Arial\";\n",
       "            // Edges\n",
       "            state.showEdges = true;\n",
       "            state.edgeSizeFactor = 1.0;\n",
       "            state.edgeCurvature = 0.4;\n",
       "            state.edgeHoverTooltip = true,\n",
       "            state.showEdgeLabels = true;\n",
       "            state.showEdgeLabelBorders = true;\n",
       "            state.edgeLabelSizeFactor = 1.0;\n",
       "            state.edgeLabelRotation = 0.0;\n",
       "            state.edgeLabelFont = \"Arial\";\n",
       "            // Layout algorithm\n",
       "            state.layoutAlgorithmActive = true;\n",
       "            state.layoutAlgorithm = \"barnesHut\";\n",
       "            state.gravitationalConstant = -2000.0;\n",
       "            state.centralGravity = 0.1;\n",
       "            state.springLength = 70.0;\n",
       "            state.springConstant = 0.1;\n",
       "            state.avoidOverlap = 0.0;\n",
       "            // Other\n",
       "            state.initZoomFactor = 0.75;\n",
       "            state.largeGraphThreshold = 500;\n",
       "          },\n",
       "\n",
       "          // 2) Derive state.parsedData from state.givenData\n",
       "          rawDataParser:{\n",
       "            getBool(obj, prop, def){\n",
       "              try{\n",
       "                const value = obj[prop];\n",
       "                if(value == \"true\" || value == \"True\"){\n",
       "                  value = true;\n",
       "                } else if(value == \"false\" || value == \"False\"){\n",
       "                  value = false;\n",
       "                }\n",
       "                if(value !== true && value !== false){\n",
       "                  throw \"Invalid value. Not a bool.\";\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return def;\n",
       "              }\n",
       "              return def\n",
       "            },\n",
       "\n",
       "            getString(obj, prop, def) {\n",
       "              try{\n",
       "                const value = String(obj[prop]);\n",
       "                if(value === \"undefined\"){\n",
       "                  throw \"Invalid value. Not a proper string.\";\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return def;\n",
       "              }\n",
       "              return def;\n",
       "            },\n",
       "\n",
       "            getArrayLengthOrZero(array){\n",
       "              try{\n",
       "                const value = parseInt(array.length);\n",
       "                if(!((value + 1) > 0)){\n",
       "                  throw \"Invalid value. Not a proper length.\";\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return 0;\n",
       "              }\n",
       "            },\n",
       "\n",
       "            getObjectLengthOrZero(obj){\n",
       "              try{\n",
       "                const value = Object.keys(obj).length;\n",
       "                if(!((value + 1) > 0)){\n",
       "                  throw \"Invalid value. Not a proper length.\";\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return 0;\n",
       "              }\n",
       "            },\n",
       "\n",
       "            createUniqueEdgeId(sourceId, targetId, knownEdgeIds){\n",
       "              let newEdgeIdBase = \"(\" + sourceId + \", \" + targetId + \")\",\n",
       "                newEdgeId = newEdgeIdBase,\n",
       "                multiEdgeCounter = 1;\n",
       "              for(let i=1; knownEdgeIds.has(newEdgeId); i++){\n",
       "                newEdgeId = newEdgeIdBase + \"_\" + String(i);\n",
       "                multiEdgeCounter += 1;\n",
       "              }\n",
       "              knownEdgeIds.add(newEdgeId);\n",
       "              return {\"id\": newEdgeId, \"count\": multiEdgeCounter}\n",
       "            },\n",
       "          },\n",
       "\n",
       "          rawMetadataParser:{\n",
       "            getString(obj, prop, def){\n",
       "              try{\n",
       "                const value = String(obj.metadata[prop]);\n",
       "                if(value === \"undefined\"){\n",
       "                  throw \"Invalid value. Not a proper string.\";\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return def;\n",
       "              }\n",
       "            },\n",
       "            getShape(obj, prop, def){\n",
       "              const givenShape = state.manager.rawMetadataParser.getString(obj, prop, def);\n",
       "              let visShape = def;\n",
       "              if(givenShape === \"circle\"){\n",
       "                visShape = \"dot\";\n",
       "              } else if(givenShape === \"rectangle\"){\n",
       "                visShape = \"square\";\n",
       "              } else if(givenShape === \"hexagon\"){\n",
       "                visShape = \"hexagon\";\n",
       "              }\n",
       "              return visShape;\n",
       "            },\n",
       "            getColor(obj, prop, def){\n",
       "              function isBodyidColor(strColor) {\n",
       "                const sty = new Option().style;\n",
       "                sty.color = strColor;\n",
       "                return sty.color !== \"\";\n",
       "              }\n",
       "              try{\n",
       "                const value = obj.metadata[prop];\n",
       "                if(!isBodyidColor(value)){\n",
       "                  throw \"Invalid value. Not a color.\"\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return def;\n",
       "              }\n",
       "            },\n",
       "            getFiniteNumber(obj, prop, def){\n",
       "              try{\n",
       "                const value = parseFloat(obj.metadata[prop]);\n",
       "                if(!isFinite(value) || value === null){\n",
       "                  throw \"Invalid value. Not a finite number.\"\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return def;\n",
       "              }\n",
       "            },\n",
       "            getFiniteNumberOrNull(obj, prop, def){\n",
       "              try{\n",
       "                const value = parseFloat(obj.metadata[prop]);\n",
       "                if(!isFinite(value)){  // Note: isFinite(null) gives true\n",
       "                  throw \"Invalid value. Not a finite number or null.\"\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return def;\n",
       "              }\n",
       "            },\n",
       "            getFinitePositiveNumber(obj, prop, def){\n",
       "              try{\n",
       "                const value = parseFloat(obj.metadata[prop]);\n",
       "                if(!isFinite(value) || value === null || value < 0.0){\n",
       "                  throw \"Invalid value. Not a finite positive number.\"\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return def;\n",
       "              }\n",
       "            },\n",
       "            collectOtherMetadata(sourceObject, targetObject, definedMetadata){\n",
       "              if(typeof(sourceObject) !== \"undefined\" && typeof(sourceObject.metadata) !== \"undefined\"){\n",
       "                const properties = Object.keys(sourceObject.metadata);\n",
       "                for(let i=0; i<properties.length; i++){\n",
       "                  const property = properties[i];\n",
       "                  if(!definedMetadata.has(property)){\n",
       "                    targetObject[property] = sourceObject.metadata[property];\n",
       "                  }\n",
       "                }\n",
       "              }\n",
       "            },\n",
       "          },\n",
       "\n",
       "          propertyClassifier:{\n",
       "            numeric: null,\n",
       "            nonNumeric: null,\n",
       "            init(){\n",
       "              this.numeric = new Set(),\n",
       "              this.nonNumeric = new Set();\n",
       "            },\n",
       "            isNumeric(d){\n",
       "              return d === null || typeof(d) === \"undefined\" || String(parseFloat(d)) === String(d);\n",
       "            },\n",
       "            inspect(object, property){\n",
       "              const value = object[property];\n",
       "              if(!this.nonNumeric.has(property)){\n",
       "                if(this.isNumeric(value)){\n",
       "                  this.numeric.add(property);\n",
       "                } else{\n",
       "                  this.nonNumeric.add(property);\n",
       "                  this.numeric.delete(property);\n",
       "                }\n",
       "              }\n",
       "            }\n",
       "          },\n",
       "\n",
       "          replaceStringVariables(givenString, givenItem, variables){\n",
       "            let newString = givenString;\n",
       "            for(let i=0; i<variables.length; i++){\n",
       "              let variable = variables[i],\n",
       "                variableText = \"$\" + variable;\n",
       "              if(variable === \"x\"){\n",
       "                variable = \"fx\";\n",
       "              } else if (variable === \"y\"){\n",
       "                variable = \"fy\";\n",
       "              }\n",
       "              let insertedText = String(givenItem[variable]);\n",
       "              if(insertedText === \"undefined\"){\n",
       "                insertedText = \"\";\n",
       "              }\n",
       "              newString = newString.replace(variableText, insertedText);\n",
       "            }\n",
       "            return newString;\n",
       "          },\n",
       "\n",
       "          parseGeneral(givenData, parsedData){\n",
       "            parsedData.general = {\n",
       "              // General\n",
       "              directed: state.manager.rawDataParser.getBool(givenData, \"directed\", true),\n",
       "              label: state.manager.rawDataParser.getString(givenData, \"label\", \"\"),\n",
       "              background_color: state.manager.rawMetadataParser.getColor(givenData, \"background_color\", \"white\"),\n",
       "              arrow_color: state.manager.rawMetadataParser.getColor(givenData, \"arrow_color\", \"black\"),\n",
       "              arrow_size: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"arrow_size\", 10.0),\n",
       "              // Nodes\n",
       "              node_color: state.manager.rawMetadataParser.getColor(givenData, \"node_color\", \"black\"),\n",
       "              node_opacity: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"node_opacity\", 1.0),\n",
       "              node_size: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"node_size\", 10.0),\n",
       "              node_shape: state.manager.rawMetadataParser.getString(givenData, \"node_shape\", \"circle\"),\n",
       "              node_border_color: state.manager.rawMetadataParser.getColor(givenData, \"node_border_color\", \"black\"),\n",
       "              node_border_size: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"node_border_size\", 0.0),\n",
       "              node_label_color: state.manager.rawMetadataParser.getColor(givenData, \"node_label_color\", \"black\"),\n",
       "              node_label_size: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"node_label_size\", 12.0),\n",
       "              node_hover: state.manager.rawMetadataParser.getString(givenData, \"node_hover\", \"\"),\n",
       "              node_click: state.manager.rawMetadataParser.getString(givenData, \"node_click\", \"\"),\n",
       "              node_image: state.manager.rawMetadataParser.getString(givenData, \"node_image\", \"\"),\n",
       "              node_x: state.manager.rawMetadataParser.getFiniteNumberOrNull(givenData, \"node_x\", null),\n",
       "              node_y: state.manager.rawMetadataParser.getFiniteNumberOrNull(givenData, \"node_y\", null),\n",
       "              contains_node_hover: false,\n",
       "              contains_node_click: false,\n",
       "              contains_node_image: false,\n",
       "              // Edges\n",
       "              edge_color: state.manager.rawMetadataParser.getColor(givenData, \"edge_color\", \"black\"),\n",
       "              edge_opacity: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"edge_opacity\", 1.0),\n",
       "              edge_size: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"edge_size\", 1.0),\n",
       "              edge_label_color: state.manager.rawMetadataParser.getColor(givenData, \"edge_label_color\", \"black\"),\n",
       "              edge_label_size: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"edge_label_size\", 8.0),\n",
       "              edge_hover: state.manager.rawMetadataParser.getString(givenData, \"edge_hover\", \"\"),\n",
       "              edge_click: state.manager.rawMetadataParser.getString(givenData, \"edge_click\", \"\"),\n",
       "              contains_edge_hover: false,\n",
       "              contains_edge_click: false,\n",
       "            };\n",
       "            if(!parsedData.general.directed){\n",
       "              parsedData.general.arrow_size = 0.0;\n",
       "            }\n",
       "          },\n",
       "\n",
       "          parseNodes(givenData, parsedData){\n",
       "            const numNodes = state.manager.rawDataParser.getObjectLengthOrZero(givenData.nodes),\n",
       "              nodeIdToObjectMap = new Map(),\n",
       "              nodeDefinedMetadata = new Set(\n",
       "                [\"color\", \"opacity\", \"size\", \"shape\", \"border_color\", \"border_size\",\n",
       "                 \"label_color\", \"label_size\", \"hover\", \"click\", \"image\", \"x\", \"y\"]),\n",
       "              nodeReplacementVariables = [\n",
       "                \"id\", \"label\",\n",
       "                \"color\", \"opacity\", \"size\", \"shape\", \"border_color\", \"border_size\",\n",
       "                \"label_color\", \"label_size\", \"image\", \"x\", \"y\"];\n",
       "            state.manager.propertyClassifier.init();\n",
       "            try {\n",
       "              Object.entries(givenData.nodes);\n",
       "            }\n",
       "            catch(e){\n",
       "               givenData.nodes = {};\n",
       "            }\n",
       "            for (const [givenNodeId, givenNode] of Object.entries(givenData.nodes)) {\n",
       "              const parsedNode = {};\n",
       "              // data: id, label\n",
       "              parsedNode.id = String(givenNodeId);\n",
       "              parsedNode.label = state.manager.rawDataParser.getString(givenNode, \"label\", \"\");\n",
       "              // defined metadata\n",
       "              parsedNode.color = state.manager.rawMetadataParser.getColor(givenNode, \"color\", parsedData.general.node_color);\n",
       "              parsedNode.opacity = state.manager.rawMetadataParser.getFinitePositiveNumber(givenNode, \"opacity\", parsedData.general.node_opacity);\n",
       "              parsedNode.size = state.manager.rawMetadataParser.getFinitePositiveNumber(givenNode, \"size\", parsedData.general.node_size);\n",
       "              parsedNode.shape = state.manager.rawMetadataParser.getShape(givenNode, \"shape\", parsedData.general.node_shape);\n",
       "              parsedNode.border_color = state.manager.rawMetadataParser.getColor(givenNode, \"border_color\", parsedData.general.node_border_color);\n",
       "              parsedNode.border_size = state.manager.rawMetadataParser.getFinitePositiveNumber(givenNode, \"border_size\", parsedData.general.node_border_size);\n",
       "              parsedNode.label_color = state.manager.rawMetadataParser.getColor(givenNode, \"label_color\", parsedData.general.node_label_color);\n",
       "              parsedNode.label_size = state.manager.rawMetadataParser.getFinitePositiveNumber(givenNode, \"label_size\", parsedData.general.node_label_size);\n",
       "              const hover = state.manager.rawMetadataParser.getString(givenNode, \"hover\", parsedData.general.node_hover);\n",
       "              const image = state.manager.rawMetadataParser.getString(givenNode, \"image\", parsedData.general.node_image);\n",
       "              if(image !== \"\"){\n",
       "                parsedNode.image = image;\n",
       "                parsedData.general.contains_node_image = true;\n",
       "              }\n",
       "              if(hover !== \"\"){\n",
       "                parsedNode.hover = hover;\n",
       "                parsedData.general.contains_node_hover = true;\n",
       "              }\n",
       "              const click = state.manager.rawMetadataParser.getString(givenNode, \"click\", parsedData.general.node_click);\n",
       "              if(click !== \"\"){\n",
       "                parsedNode.click = click;\n",
       "                parsedData.general.contains_node_click = true;\n",
       "              }\n",
       "              const x = state.manager.rawMetadataParser.getFiniteNumberOrNull(givenNode, \"x\", parsedData.general.node_x);\n",
       "              const y = state.manager.rawMetadataParser.getFiniteNumberOrNull(givenNode, \"y\", parsedData.general.node_y);\n",
       "              if(x !== null){\n",
       "                parsedNode.fx = x;\n",
       "              }\n",
       "              if(y !== null){\n",
       "                parsedNode.fy = y;\n",
       "              }\n",
       "              // other metadata\n",
       "              const otherMetadata = state.manager.rawMetadataParser.collectOtherMetadata(givenNode, parsedNode, nodeDefinedMetadata);\n",
       "              // feature classification\n",
       "              const parsedNodeProperties = Object.keys(parsedNode);\n",
       "              for(let i=0; i<parsedNodeProperties.length; i++){\n",
       "                const property = parsedNodeProperties[i],\n",
       "                  value = parsedNode[property];\n",
       "                state.manager.propertyClassifier.inspect(parsedNode, property);\n",
       "              }\n",
       "              // variable replacements\n",
       "              if(parsedNode.hover){\n",
       "                parsedNode.hover = state.manager.replaceStringVariables(parsedNode.hover, parsedNode, nodeReplacementVariables);\n",
       "              }\n",
       "              if(parsedNode.click){\n",
       "                parsedNode.click = state.manager.replaceStringVariables(parsedNode.click, parsedNode, nodeReplacementVariables.concat([\"hover\"]));\n",
       "              }\n",
       "              // store the parsed node\n",
       "              parsedData.nodes.push(parsedNode);\n",
       "              // data structure for inserting node object references into edge data\n",
       "              nodeIdToObjectMap.set(parsedNode.id, parsedNode);\n",
       "            }\n",
       "            // Ensure numeric properties (except fx and fy) are stored as numbers and remember their extrema\n",
       "            const numericProperties = Array.from(state.manager.propertyClassifier.numeric).filter(name => name !== \"fx\" && name !== \"fy\"),\n",
       "              nonNumericProperties = Array.from(state.manager.propertyClassifier.nonNumeric),\n",
       "              minima = {},\n",
       "              maxima = {};\n",
       "            for(let i=0; i<numNodes; i++){\n",
       "              const parsedNode = parsedData.nodes[i];\n",
       "              for(let p=0; p<numericProperties.length; p++){\n",
       "                const property = numericProperties[p],\n",
       "                  numericValue = parseFloat(parsedNode[property]);\n",
       "                parsedNode[property] = numericValue;\n",
       "                if(isFinite(numericValue)){\n",
       "                  if(typeof(minima[property]) === \"undefined\" || numericValue < minima[property]){\n",
       "                    minima[property] = numericValue;\n",
       "                  }\n",
       "                  if(typeof(maxima[property]) === \"undefined\" || numericValue > maxima[property]){\n",
       "                    maxima[property] = numericValue;\n",
       "                  }\n",
       "                }\n",
       "              }\n",
       "            }\n",
       "            // Store feature classification and extrema\n",
       "            parsedData.general.node_properties = {\n",
       "              \"node_size_data_sources\": numericProperties,\n",
       "              \"node_label_text_data_sources\": nonNumericProperties.concat(numericProperties),\n",
       "              \"minima\": minima,\n",
       "              \"maxima\": maxima,\n",
       "            }\n",
       "            // Report empty graph\n",
       "            if(!(numNodes > 0)){\n",
       "              console.log(\"Caution: Graph with 0 nodes. The provided data might be in the wrong format.\");\n",
       "            }\n",
       "            return nodeIdToObjectMap;\n",
       "          },\n",
       "\n",
       "          parseEdges(givenData, parsedData, nodeIdToObjectMap){\n",
       "            let numEdges = state.manager.rawDataParser.getArrayLengthOrZero(givenData.edges);\n",
       "            const knownEdgeIds = new Set(),\n",
       "              ignoredEdges = [],\n",
       "              edgeDefinedMetadata = new Set(\n",
       "                [\"color\", \"opacity\", \"size\", \"label_color\", \"label_size\", \"hover\", \"click\"]),\n",
       "              edgeReplacementVariables = [\n",
       "                \"id\", \"label\",\n",
       "                \"color\", \"opacity\", \"size\", \"label_color\", \"label_size\"];\n",
       "            state.manager.propertyClassifier.init();\n",
       "            for(let i=0; i<numEdges; i++){\n",
       "              const givenEdge = givenData.edges[i],\n",
       "                parsedEdge = {},\n",
       "                sourceId = String(givenEdge.source),\n",
       "                targetId = String(givenEdge.target);\n",
       "              // data: source, target, id, multi_edge_counter, label\n",
       "              try{\n",
       "                const sourceObj = nodeIdToObjectMap.get(sourceId);\n",
       "                const targetObj = nodeIdToObjectMap.get(targetId);\n",
       "                if(typeof(sourceObj) === \"undefined\" || typeof(targetObj) === \"undefined\"){\n",
       "                  throw \"Invalid node reference.\";\n",
       "                }\n",
       "                parsedEdge.source = sourceObj;\n",
       "                parsedEdge.target = targetObj;\n",
       "              } catch(e){\n",
       "                const ignoredEdge = {\n",
       "                  index: i,\n",
       "                  source: sourceId,\n",
       "                  target: targetId,\n",
       "                }\n",
       "                ignoredEdges.push(ignoredEdge);\n",
       "                continue;\n",
       "              }\n",
       "              const result = state.manager.rawDataParser.createUniqueEdgeId(sourceId, targetId, knownEdgeIds);\n",
       "              parsedEdge.id = result.id;\n",
       "              parsedEdge.multi_edge_counter = result.count;\n",
       "              parsedEdge.label = state.manager.rawDataParser.getString(givenEdge, \"label\", \"\");\n",
       "              // defined metadata\n",
       "              parsedEdge.color = state.manager.rawMetadataParser.getColor(givenEdge, \"color\", parsedData.general.edge_color);\n",
       "              parsedEdge.opacity = state.manager.rawMetadataParser.getFinitePositiveNumber(givenEdge, \"opacity\", parsedData.general.edge_opacity);\n",
       "              parsedEdge.size = state.manager.rawMetadataParser.getFinitePositiveNumber(givenEdge, \"size\", parsedData.general.edge_size);\n",
       "              parsedEdge.label_color = state.manager.rawMetadataParser.getColor(givenEdge, \"label_color\", parsedData.general.edge_label_color);\n",
       "              parsedEdge.label_size = state.manager.rawMetadataParser.getFinitePositiveNumber(givenEdge, \"label_size\", parsedData.general.edge_label_size);\n",
       "              const hover = state.manager.rawMetadataParser.getString(givenEdge, \"hover\", parsedData.general.edge_hover);\n",
       "              if(hover !== \"\"){\n",
       "                parsedEdge.hover = hover;\n",
       "                parsedData.general.contains_edge_hover = true;\n",
       "              }\n",
       "              const click = state.manager.rawMetadataParser.getString(givenEdge, \"click\", parsedData.general.edge_click);\n",
       "              if(click !== \"\"){\n",
       "                parsedEdge.click = click;\n",
       "                parsedData.general.contains_edge_click = true;\n",
       "              }\n",
       "              // other metadata\n",
       "              const otherMetadata = state.manager.rawMetadataParser.collectOtherMetadata(givenEdge, parsedEdge, edgeDefinedMetadata);\n",
       "              // feature classification\n",
       "              const parsedEdgeProperties = Object.keys(parsedEdge);\n",
       "              for(let i=0; i<parsedEdgeProperties.length; i++){\n",
       "                const property = parsedEdgeProperties[i],\n",
       "                  value = parsedEdge[property];\n",
       "                state.manager.propertyClassifier.inspect(parsedEdge, property);\n",
       "              }\n",
       "              // variable replacements\n",
       "              if(parsedEdge.hover){\n",
       "                parsedEdge.hover = state.manager.replaceStringVariables(parsedEdge.hover, parsedEdge, edgeReplacementVariables);\n",
       "              }\n",
       "              if(parsedEdge.click){\n",
       "                parsedEdge.click = state.manager.replaceStringVariables(parsedEdge.click, parsedEdge, edgeReplacementVariables.concat([\"hover\"]));\n",
       "              }\n",
       "              // store it\n",
       "              parsedData.edges.push(parsedEdge);\n",
       "            }\n",
       "            // Ensure numeric properties are stored as numbers and remember their extrema\n",
       "            const numericProperties = Array.from(state.manager.propertyClassifier.numeric),\n",
       "              nonNumericProperties = Array.from(state.manager.propertyClassifier.nonNumeric),\n",
       "              minima = {},\n",
       "              maxima = {};\n",
       "            numEdges = state.manager.rawDataParser.getArrayLengthOrZero(parsedData.edges);\n",
       "            for(let i=0; i<numEdges; i++){\n",
       "              const parsedEdge = parsedData.edges[i];\n",
       "              for(let p=0; p<numericProperties.length; p++){\n",
       "                const property = numericProperties[p],\n",
       "                  numericValue = parseFloat(parsedEdge[property]);\n",
       "                parsedEdge[property] = numericValue;\n",
       "                if(isFinite(numericValue)){\n",
       "                  if(typeof(minima[property]) === \"undefined\" || numericValue < minima[property]){\n",
       "                    minima[property] = numericValue;\n",
       "                  }\n",
       "                  if(typeof(maxima[property]) === \"undefined\" || numericValue > maxima[property]){\n",
       "                    maxima[property] = numericValue;\n",
       "                  }\n",
       "                }\n",
       "              }\n",
       "            }\n",
       "            // Store feature classification and extrema\n",
       "            parsedData.general.edge_properties = {\n",
       "              \"edge_size_data_sources\": numericProperties.filter(item => item !== \"multi_edge_counter\"),\n",
       "              \"edge_label_text_data_sources\": nonNumericProperties.concat(numericProperties).filter(\n",
       "                item => item !== \"source\" && item !== \"target\" && item !== \"multi_edge_counter\"),\n",
       "              \"minima\": minima,\n",
       "              \"maxima\": maxima,\n",
       "            }\n",
       "            // Report invalid edges\n",
       "            if(ignoredEdges.length > 0){\n",
       "              let message = undefined;\n",
       "              if(ignoredEdges.length == 1){\n",
       "                message = \"Caution: \" + ignoredEdges.length + \" edge was ignored because it \" +\n",
       "                  \"refers to a node that is not part of the node list:\\n\";\n",
       "              } else{\n",
       "                message = \"Caution: \" + ignoredEdges.length + \" edges were ignored because they \" +\n",
       "                  \"refer to a node that is not part of the node list:\\n\";\n",
       "              }\n",
       "              for(let i=0; i<ignoredEdges.length; i++){\n",
       "                const ignoredEdge = ignoredEdges[i];\n",
       "                message += '- Edge with index ' + ignoredEdge.index;\n",
       "                message += ', source \"' + ignoredEdge.source;\n",
       "                message += '\", target \"' + ignoredEdge.target + '\"\\n';\n",
       "                if(i==9){\n",
       "                  message += '...';\n",
       "                  break;\n",
       "                }\n",
       "              }\n",
       "              console.log(message);\n",
       "            }\n",
       "          },\n",
       "\n",
       "          parseChosenData(chosenGraphNumber){\n",
       "            let givenData = state.rawData[chosenGraphNumber],\n",
       "              parsedData = {\n",
       "                general: {},\n",
       "                nodes: [],\n",
       "                edges: [],\n",
       "                adjacency: null,\n",
       "                incidence: null,\n",
       "              };\n",
       "            if(!givenData || givenData === null){\n",
       "              givenData = [];\n",
       "            }\n",
       "            // a) General\n",
       "            state.manager.parseGeneral(givenData, parsedData);\n",
       "            // b) Nodes\n",
       "            const nodeIdToObjectMap = state.manager.parseNodes(givenData, parsedData);\n",
       "            // c) Edges\n",
       "            state.manager.parseEdges(givenData, parsedData, nodeIdToObjectMap);\n",
       "            // Update state\n",
       "            state.parsedData = parsedData;\n",
       "            state.currentGraphParts = {};\n",
       "            // Update UI: show or hide containers\n",
       "            ui.elements.graphContainer.style.display = ui.convert.boolToDisplayStyle(true);\n",
       "            ui.elements.detailsContainer.style.display = ui.convert.boolToDisplayStyle(state.showDetails);\n",
       "            ui.elements.nodeImageMetaControl.style.display = ui.convert.boolToDisplayStyle(parsedData.general.contains_node_image);\n",
       "          },\n",
       "\n",
       "          // 3) Derive state.shownData from state.parsedData\n",
       "          createNodeToAdjacentNodesMap(){\n",
       "            const dataStructure = {\n",
       "              map: new Map(),\n",
       "              add(sourceNode, targetNode){\n",
       "                let adjacentNodes = this.map.get(sourceNode);\n",
       "                if(adjacentNodes){\n",
       "                  adjacentNodes.add(targetNode);\n",
       "                } else{\n",
       "                  adjacentNodes = new Set([targetNode]);\n",
       "                  this.map.set(sourceNode, adjacentNodes);\n",
       "                }\n",
       "              },\n",
       "            }\n",
       "            return dataStructure;\n",
       "          },\n",
       "\n",
       "          createNodeToIncidentEdgesMap(){\n",
       "            const dataStructure = {\n",
       "              map: new Map(),\n",
       "              add(node, edge){\n",
       "                let incidentEdges = this.map.get(node);\n",
       "                if(incidentEdges){\n",
       "                  incidentEdges.add(edge);\n",
       "                } else{\n",
       "                  incidentEdges = new Set([edge]);\n",
       "                  this.map.set(node, incidentEdges);\n",
       "                }\n",
       "              },\n",
       "            }\n",
       "            return dataStructure;\n",
       "          },\n",
       "\n",
       "          hoverTextToHtml(text) {\n",
       "            // https://visjs.github.io/vis-network/examples/network/other/html-in-titles.html\n",
       "            const div = document.createElement(\"div\");\n",
       "            div.innerHTML = text;\n",
       "            return div;\n",
       "          },\n",
       "\n",
       "          prepareShownData(){\n",
       "            const numNodes = state.parsedData.nodes.length,\n",
       "              numEdges = state.parsedData.edges.length;\n",
       "            state.shownData = {\n",
       "              \"general\": null,\n",
       "              \"nodes\": new Array(numNodes),\n",
       "              \"edges\": new Array(numEdges),\n",
       "            }\n",
       "            const nodeIdToObjectMap = new Map(),\n",
       "              nodeSizeNormalizer = state.manager.createNodeSizeNormalizer();\n",
       "            // a) General\n",
       "            state.shownData.general = {\n",
       "              \"background_color\": state.parsedData.general.background_color,\n",
       "              \"arrow_size\": state.parsedData.general.arrow_size,\n",
       "              \"arrow_color\": state.parsedData.general.arrow_color,\n",
       "              \"directed\": state.parsedData.general.directed,\n",
       "            };\n",
       "            // b) Nodes\n",
       "            for(let i=0; i<numNodes; i++){\n",
       "              state.shownData.nodes[i] = {};\n",
       "              const parsedNode = state.parsedData.nodes[i],\n",
       "                shownNode = state.shownData.nodes[i];\n",
       "              shownNode.id = parsedNode.id;\n",
       "              shownNode.label = state.manager.calcSingleNodeLabelText(parsedNode);\n",
       "              shownNode.color = parsedNode.color;\n",
       "              shownNode.opacity = parsedNode.opacity;\n",
       "              shownNode.size = state.manager.calcSingleNodeSize(parsedNode, nodeSizeNormalizer);\n",
       "              shownNode.shape = parsedNode.shape;\n",
       "              shownNode.border_color = parsedNode.border_color;\n",
       "              shownNode.border_size = parsedNode.border_size;\n",
       "              shownNode.label_color = parsedNode.label_color;\n",
       "              shownNode.label_size = state.manager.calcSingleNodeLabelSize(parsedNode);\n",
       "              if(typeof(parsedNode.image) !== \"undefined\"){\n",
       "                shownNode.image = parsedNode.image;\n",
       "              }\n",
       "              if(typeof(parsedNode.hover) !== \"undefined\"){\n",
       "                shownNode.hover = state.manager.hoverTextToHtml(parsedNode.hover);\n",
       "              }\n",
       "              if(typeof(parsedNode.click) !== \"undefined\"){\n",
       "                shownNode.click = parsedNode.click;\n",
       "              }\n",
       "              if(typeof(parsedNode.fx) !== \"undefined\"){\n",
       "                shownNode.fx = parsedNode.fx;\n",
       "              }\n",
       "              if(typeof(parsedNode.fy) !== \"undefined\"){\n",
       "                shownNode.fy = parsedNode.fy;\n",
       "              }\n",
       "              nodeIdToObjectMap.set(shownNode.id, shownNode);\n",
       "              // Derived properties for performance improvement in updateNodePositions\n",
       "              state.manager.calcSingleNodeSizeDerivatives(shownNode);\n",
       "              state.manager.calcSingleNodeBorderSizeDerivatives(shownNode);\n",
       "            }\n",
       "            // c) Edges\n",
       "            const edgeSizeNormalizer = state.manager.createEdgeSizeNormalizer(),\n",
       "              nodeToAdjacentNodesMap = state.manager.createNodeToAdjacentNodesMap(),\n",
       "              nodeToIncidentEdgesMap = state.manager.createNodeToIncidentEdgesMap();\n",
       "            for(let i=0; i<numEdges; i++){\n",
       "              state.shownData.edges[i] = {};\n",
       "              const parsedEdge = state.parsedData.edges[i],\n",
       "                shownEdge = state.shownData.edges[i];\n",
       "              shownEdge.source = nodeIdToObjectMap.get(parsedEdge.source.id);\n",
       "              shownEdge.target = nodeIdToObjectMap.get(parsedEdge.target.id);\n",
       "              shownEdge.id = parsedEdge.id;\n",
       "              shownEdge.label = state.manager.calcSingleEdgeLabelText(parsedEdge);\n",
       "              shownEdge.color = parsedEdge.color;\n",
       "              shownEdge.opacity = parsedEdge.opacity;\n",
       "              shownEdge.size = state.manager.calcSingleEdgeSize(parsedEdge, edgeSizeNormalizer);\n",
       "              shownEdge.label_color = parsedEdge.label_color;\n",
       "              shownEdge.label_size = state.manager.calcSingleEdgeLabelSize(parsedEdge);\n",
       "              if(typeof(parsedEdge.hover) !== \"undefined\"){\n",
       "                shownEdge.hover = state.manager.hoverTextToHtml(parsedEdge.hover);\n",
       "              }\n",
       "              if(typeof(parsedEdge.click) !== \"undefined\"){\n",
       "                shownEdge.click = parsedEdge.click;\n",
       "              }\n",
       "              // Derived properties for performance improvement in updateEdgePositions\n",
       "              shownEdge.multiEdgeCurvatureFactor = state.manager.calcSingleEdgeCurvatureFactor(parsedEdge);\n",
       "              // Data structure for highlighting adjacent nodes and incident edges to this node\n",
       "              nodeToAdjacentNodesMap.add(shownEdge.source, shownEdge.target);\n",
       "              nodeToAdjacentNodesMap.add(shownEdge.target, shownEdge.source);\n",
       "              nodeToIncidentEdgesMap.add(shownEdge.source, shownEdge);\n",
       "              nodeToIncidentEdgesMap.add(shownEdge.target, shownEdge);\n",
       "            }\n",
       "            state.shownData.adjacency = nodeToAdjacentNodesMap;\n",
       "            state.shownData.incidence = nodeToIncidentEdgesMap;\n",
       "          },\n",
       "\n",
       "          calcSingleNodeSize(parsedNode, nodeSizeNormalizer){\n",
       "            const appearanceAdaptionFactor = 0.5;\n",
       "            let nodeSize = nodeSizeNormalizer(parsedNode[state.nodeSizeDataSource]);\n",
       "            if(!isFinite(nodeSize)){\n",
       "              nodeSize = state.parsedData.general.node_size;\n",
       "            }\n",
       "            return nodeSize * state.nodeSizeFactor * appearanceAdaptionFactor;\n",
       "          },\n",
       "\n",
       "          calcSingleNodeSizeDerivatives(shownNode){\n",
       "            shownNode.image_size = shownNode.size / 1.42 * state.nodeImageSizeFactor;\n",
       "          },\n",
       "\n",
       "          calcSingleNodeLabelText(parsedNode){\n",
       "            return String(parsedNode[state.nodeLabelTextDataSource]);\n",
       "          },\n",
       "\n",
       "          calcSingleNodeLabelSize(parsedNode){\n",
       "            return parsedNode.label_size * state.nodeLabelSizeFactor;\n",
       "          },\n",
       "\n",
       "          calcSingleEdgeSize(parsedEdge, edgeSizeNormalizer){\n",
       "            let edgeSize = edgeSizeNormalizer(parsedEdge[state.edgeSizeDataSource]);\n",
       "            if(!isFinite(edgeSize)){\n",
       "              edgeSize = state.parsedData.general.edge_size;\n",
       "            }\n",
       "            return edgeSize * state.edgeSizeFactor;\n",
       "          },\n",
       "\n",
       "          calcSingleEdgeCurvatureFactor(parsedEdge){\n",
       "            // Caution: Currently a single value is used for all edges instead of these here\n",
       "            const appearanceAdaptionFactor = 0.5;\n",
       "            return state.edgeCurvature * parsedEdge.multiEdgeCounter * appearanceAdaptionFactor;\n",
       "          },\n",
       "\n",
       "          calcSingleEdgeLabelText(parsedEdge){\n",
       "            return String(parsedEdge[state.edgeLabelTextDataSource]);\n",
       "          },\n",
       "\n",
       "          calcSingleEdgeLabelSize(parsedEdge){\n",
       "            return parsedEdge.label_size * state.edgeLabelSizeFactor;\n",
       "          },\n",
       "\n",
       "          calcSingleNodeBorderSizeDerivatives(shownNode){\n",
       "            shownNode.border_size_half = shownNode.border_size / 2.0;\n",
       "          },\n",
       "\n",
       "          createNodeSizeNormalizer(){\n",
       "            let normalizer;\n",
       "            if(state.useNodeSizeNormalization){\n",
       "              const dataMin = state.parsedData.general.node_properties.minima[state.nodeSizeDataSource],\n",
       "                dataMax = state.parsedData.general.node_properties.maxima[state.nodeSizeDataSource],\n",
       "                targetMin = state.nodeSizeNormalizationMin,\n",
       "                targetMax = state.nodeSizeNormalizationMax,\n",
       "                dataDiff = dataMax - dataMin,\n",
       "                targetDiff = targetMax - targetMin;\n",
       "              let factor = targetDiff / dataDiff;\n",
       "              if(!isFinite(factor) || factor === null){\n",
       "                factor = 0.0;\n",
       "              }\n",
       "              normalizer = function(val){\n",
       "                return (val - dataMin) * factor + targetMin;\n",
       "              }\n",
       "            } else{\n",
       "              normalizer = function(val){\n",
       "                return val;\n",
       "              }\n",
       "            }\n",
       "            return normalizer;\n",
       "          },\n",
       "\n",
       "          createEdgeSizeNormalizer(){\n",
       "            let normalizer;\n",
       "            if(state.useEdgeSizeNormalization){\n",
       "              const dataMin = state.parsedData.general.edge_properties.minima[state.edgeSizeDataSource],\n",
       "                dataMax = state.parsedData.general.edge_properties.maxima[state.edgeSizeDataSource],\n",
       "                targetMin = state.edgeSizeNormalizationMin,\n",
       "                targetMax = state.edgeSizeNormalizationMax,\n",
       "                dataDiff = dataMax - dataMin,\n",
       "                targetDiff = targetMax - targetMin;\n",
       "              let factor = targetDiff / dataDiff;\n",
       "              if(!isFinite(factor)){\n",
       "                factor = 0.0;\n",
       "              }\n",
       "              normalizer = function(val){\n",
       "                return (val - dataMin) * factor + targetMin;\n",
       "              }\n",
       "            } else{\n",
       "              normalizer = function(val){\n",
       "                return val;\n",
       "              }\n",
       "            }\n",
       "            return normalizer;\n",
       "          },\n",
       "\n",
       "          updateNodeSizes(){\n",
       "            // Data\n",
       "            const nodeSizeNormalizer = state.manager.createNodeSizeNormalizer();\n",
       "            for(let i=0; i<state.parsedData.nodes.length; i++){\n",
       "              const parsedNode = state.parsedData.nodes[i],\n",
       "                shownNode = state.shownData.nodes[i];\n",
       "              shownNode.size = state.manager.calcSingleNodeSize(parsedNode, nodeSizeNormalizer);\n",
       "              state.manager.calcSingleNodeSizeDerivatives(shownNode);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateNodeSizes();\n",
       "          },\n",
       "\n",
       "          updateNodeLabelTexts(){\n",
       "            // Data\n",
       "            for(let i=0; i<state.parsedData.nodes.length; i++){\n",
       "              const parsedNode = state.parsedData.nodes[i],\n",
       "                shownNode = state.shownData.nodes[i];\n",
       "              shownNode.label = state.manager.calcSingleNodeLabelText(parsedNode);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateNodeLabels();\n",
       "          },\n",
       "\n",
       "          updateNodeLabelSizes(){\n",
       "            // Data\n",
       "            for(let i=0; i<state.parsedData.nodes.length; i++){\n",
       "              const parsedNode = state.parsedData.nodes[i],\n",
       "                shownNode = state.shownData.nodes[i];\n",
       "              shownNode.label_size = state.manager.calcSingleNodeLabelSize(parsedNode);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateNodeLabels();\n",
       "          },\n",
       "\n",
       "          updateNodeImages(){\n",
       "            // Data\n",
       "            for(let i=0; i<state.parsedData.nodes.length; i++){\n",
       "              const parsedNode = state.parsedData.nodes[i],\n",
       "                shownNode = state.shownData.nodes[i];\n",
       "              state.manager.calcSingleNodeSizeDerivatives(shownNode);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateNodeImages();\n",
       "          },\n",
       "\n",
       "          updateEdgeSizes(){\n",
       "            // Data\n",
       "            const edgeSizeNormalizer = state.manager.createEdgeSizeNormalizer();\n",
       "            for(let i=0; i<state.parsedData.edges.length; i++){\n",
       "              const parsedEdge = state.parsedData.edges[i],\n",
       "                shownEdge = state.shownData.edges[i];\n",
       "              shownEdge.size = state.manager.calcSingleEdgeSize(parsedEdge, edgeSizeNormalizer);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateEdgeSizes();\n",
       "          },\n",
       "\n",
       "          updateEdgeCurvatures(){\n",
       "            // Data\n",
       "            for(let i=0; i<state.parsedData.edges.length; i++){\n",
       "              const parsedEdge = state.parsedData.edges[i],\n",
       "                shownEdge = state.shownData.edges[i];\n",
       "              shownEdge.multiEdgeCurvatureFactor = state.manager.calcSingleEdgeCurvatureFactor(parsedEdge);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateEdgeCurvatures();\n",
       "          },\n",
       "\n",
       "          updateEdgeLabelTexts(){\n",
       "            // Data\n",
       "            for(let i=0; i<state.parsedData.edges.length; i++){\n",
       "              const parsedEdge = state.parsedData.edges[i],\n",
       "                shownEdge = state.shownData.edges[i];\n",
       "              shownEdge.label = state.manager.calcSingleEdgeLabelText(parsedEdge);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateEdgeLabels();\n",
       "          },\n",
       "\n",
       "          updateEdgeLabelSizes(){\n",
       "            // Data\n",
       "            for(let i=0; i<state.parsedData.edges.length; i++){\n",
       "              const parsedEdge = state.parsedData.edges[i],\n",
       "                shownEdge = state.shownData.edges[i];\n",
       "              shownEdge.label_size = state.manager.calcSingleEdgeLabelSize(parsedEdge);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateEdgeLabels();\n",
       "          },\n",
       "        }\n",
       "      }\n",
       "\n",
       "      const ui = {\n",
       "        symbols:{\n",
       "          // Choice of symbols is influenced by their appearance in different browsers\n",
       "          // Alternatives: \"▼\", \"▽\", \"▾\" / \"▲\", \"△\", \"▴\" / \"▶\", \"▷\", \"▸\" / \"◀\", \"◁\", \"◂\"\n",
       "          // ▶ is rendered strangely on some mobile phone browsers, ▸ remains normal\n",
       "          detailsShown: \"▾\",\n",
       "          detailsHidden: \"▴\",\n",
       "          menuShown: \"▸\",\n",
       "          menuHidden: \"◂\",\n",
       "          menuItemActive: \"▸\",\n",
       "          menuItemInactive: \"▾\",\n",
       "        },\n",
       "\n",
       "        elements:{\n",
       "          // Containers\n",
       "          mainContainer: document.getElementById(\"i3GPEm2B72QnLGW7o-main-div\"),\n",
       "          tooltipContainer: document.getElementById(\"i3GPEm2B72QnLGW7o-tooltip-div\"),\n",
       "          leftContainer: document.getElementById(\"i3GPEm2B72QnLGW7o-left-div\"),\n",
       "          rightContainer: document.getElementById(\"i3GPEm2B72QnLGW7o-right-div\"),\n",
       "          graphContainer: document.getElementById(\"i3GPEm2B72QnLGW7o-graph-div\"),\n",
       "          detailsContainer: document.getElementById(\"i3GPEm2B72QnLGW7o-details-div\"),\n",
       "          detailsHead: document.getElementById(\"i3GPEm2B72QnLGW7o-details-head\"),\n",
       "          detailsBody: document.getElementById(\"i3GPEm2B72QnLGW7o-details-body\"),\n",
       "          // Data sources\n",
       "          dataHead: document.getElementById(\"i3GPEm2B72QnLGW7o-data-head\"),\n",
       "          dataBody: document.getElementById(\"i3GPEm2B72QnLGW7o-data-body\"),\n",
       "          graphSelectionContainer: document.getElementById(\"i3GPEm2B72QnLGW7o-graph-select-div\"),\n",
       "          graphSelection: document.getElementById(\"i3GPEm2B72QnLGW7o-graph-select\"),\n",
       "          nodeSizeDataSourceSelect: document.getElementById(\"i3GPEm2B72QnLGW7o-node-size-data-source-select\"),\n",
       "          nodeSizeNormalizationCheckbox: document.getElementById(\"i3GPEm2B72QnLGW7o-node-size-normalization-checkbox\"),\n",
       "          nodeSizeNormalizationContainer: document.getElementById(\"i3GPEm2B72QnLGW7o-node-size-norm-div\"),\n",
       "          nodeSizeNormalizationMinText: document.getElementById(\"i3GPEm2B72QnLGW7o-node-size-normalization-min-text\"),\n",
       "          nodeSizeNormalizationMinSlider: document.getElementById(\"i3GPEm2B72QnLGW7o-node-size-normalization-min-slider\"),\n",
       "          nodeSizeNormalizationMaxText: document.getElementById(\"i3GPEm2B72QnLGW7o-node-size-normalization-max-text\"),\n",
       "          nodeSizeNormalizationMaxSlider: document.getElementById(\"i3GPEm2B72QnLGW7o-node-size-normalization-max-slider\"),\n",
       "          edgeSizeDataSourceSelect: document.getElementById(\"i3GPEm2B72QnLGW7o-edge-size-data-source-select\"),\n",
       "          edgeSizeNormalizationCheckbox: document.getElementById(\"i3GPEm2B72QnLGW7o-edge-size-normalization-checkbox\"),\n",
       "          edgeSizeNormalizationContainer: document.getElementById(\"i3GPEm2B72QnLGW7o-edge-size-norm-div\"),\n",
       "          edgeSizeNormalizationMinText: document.getElementById(\"i3GPEm2B72QnLGW7o-edge-size-normalization-min-text\"),\n",
       "          edgeSizeNormalizationMinSlider: document.getElementById(\"i3GPEm2B72QnLGW7o-edge-size-normalization-min-slider\"),\n",
       "          edgeSizeNormalizationMaxText: document.getElementById(\"i3GPEm2B72QnLGW7o-edge-size-normalization-max-text\"),\n",
       "          edgeSizeNormalizationMaxSlider: document.getElementById(\"i3GPEm2B72QnLGW7o-edge-size-normalization-max-slider\"),\n",
       "          // General\n",
       "          generalHead: document.getElementById(\"i3GPEm2B72QnLGW7o-general-head\"),\n",
       "          generalBody: document.getElementById(\"i3GPEm2B72QnLGW7o-general-body\"),\n",
       "          resetButton: document.getElementById(\"i3GPEm2B72QnLGW7o-reset\"),\n",
       "          fullscreenButton: document.getElementById(\"i3GPEm2B72QnLGW7o-fullscreen-button\"),\n",
       "          svgExportButton: document.getElementById(\"i3GPEm2B72QnLGW7o-svg\"),\n",
       "          pngExportButton: document.getElementById(\"i3GPEm2B72QnLGW7o-png\"),\n",
       "          jpgExportButton: document.getElementById(\"i3GPEm2B72QnLGW7o-jpg\"),\n",
       "          // Nodes\n",
       "          nodeHead: document.getElementById(\"i3GPEm2B72QnLGW7o-node-head\"),\n",
       "          nodeBody: document.getElementById(\"i3GPEm2B72QnLGW7o-node-body\"),\n",
       "          nodeCheckbox: document.getElementById(\"i3GPEm2B72QnLGW7o-node-checkbox\"),\n",
       "          nodeSizeFactorText: document.getElementById(\"i3GPEm2B72QnLGW7o-node-size-factor-text\"),\n",
       "          nodeSizeFactorSlider: document.getElementById(\"i3GPEm2B72QnLGW7o-node-size-factor-slider\"),\n",
       "          nodeDragFixCheckbox: document.getElementById(\"i3GPEm2B72QnLGW7o-node-drag-fix-checkbox\"),\n",
       "          nodeHoverNeighborhoodCheckbox: document.getElementById(\"i3GPEm2B72QnLGW7o-node-hover-neighborhood-checkbox\"),\n",
       "          nodeHoverTooltipCheckbox: document.getElementById(\"i3GPEm2B72QnLGW7o-node-hover-tooltip-checkbox\"),\n",
       "          nodeReleaseButton: document.getElementById(\"i3GPEm2B72QnLGW7o-node-release-button\"),\n",
       "          // Node images\n",
       "          nodeImageHead: document.getElementById(\"i3GPEm2B72QnLGW7o-node-image-head\"),\n",
       "          nodeImageBody: document.getElementById(\"i3GPEm2B72QnLGW7o-node-image-body\"),\n",
       "          nodeImageCheckbox: document.getElementById(\"i3GPEm2B72QnLGW7o-node-image-checkbox\"),\n",
       "          nodeImageMetaControl: document.getElementById(\"i3GPEm2B72QnLGW7o-node-image-meta-control\"),\n",
       "          nodeImageSizeFactorText: document.getElementById(\"i3GPEm2B72QnLGW7o-node-image-size-factor-text\"),\n",
       "          nodeImageSizeFactorSlider: document.getElementById(\"i3GPEm2B72QnLGW7o-node-image-size-factor-slider\"),\n",
       "          // Node labels\n",
       "          nodeLabelHead: document.getElementById(\"i3GPEm2B72QnLGW7o-node-label-head\"),\n",
       "          nodeLabelBody: document.getElementById(\"i3GPEm2B72QnLGW7o-node-label-body\"),\n",
       "          nodeLabelCheckbox: document.getElementById(\"i3GPEm2B72QnLGW7o-node-label-checkbox\"),\n",
       "          nodeLabelBorderCheckbox: document.getElementById(\"i3GPEm2B72QnLGW7o-node-label-border-checkbox\"),\n",
       "          nodeLabelTextDataSourceSelect: document.getElementById(\"i3GPEm2B72QnLGW7o-node-label-data-source-select\"),\n",
       "          nodeLabelSizeFactorText: document.getElementById(\"i3GPEm2B72QnLGW7o-node-label-size-factor-text\"),\n",
       "          nodeLabelSizeFactorSlider: document.getElementById(\"i3GPEm2B72QnLGW7o-node-label-size-factor-slider\"),\n",
       "          nodeLabelRotationText: document.getElementById(\"i3GPEm2B72QnLGW7o-node-label-rotation-text\"),\n",
       "          nodeLabelRotationSlider: document.getElementById(\"i3GPEm2B72QnLGW7o-node-label-rotation-slider\"),\n",
       "          // Edges\n",
       "          edgeHead: document.getElementById(\"i3GPEm2B72QnLGW7o-edge-head\"),\n",
       "          edgeBody: document.getElementById(\"i3GPEm2B72QnLGW7o-edge-body\"),\n",
       "          edgeCheckbox: document.getElementById(\"i3GPEm2B72QnLGW7o-edge-checkbox\"),\n",
       "          edgeSizeFactorText: document.getElementById(\"i3GPEm2B72QnLGW7o-edge-size-factor-text\"),\n",
       "          edgeSizeFactorSlider: document.getElementById(\"i3GPEm2B72QnLGW7o-edge-size-factor-slider\"),\n",
       "          edgeCurvatureText: document.getElementById(\"i3GPEm2B72QnLGW7o-edge-curvature-text\"),\n",
       "          edgeCurvatureSlider: document.getElementById(\"i3GPEm2B72QnLGW7o-edge-curvature-slider\"),\n",
       "          edgeHoverTooltipCheckbox: document.getElementById(\"i3GPEm2B72QnLGW7o-edge-hover-tooltip-checkbox\"),\n",
       "          // Edge labels\n",
       "          edgeLabelHead: document.getElementById(\"i3GPEm2B72QnLGW7o-edge-label-head\"),\n",
       "          edgeLabelBody: document.getElementById(\"i3GPEm2B72QnLGW7o-edge-label-body\"),\n",
       "          edgeLabelCheckbox: document.getElementById(\"i3GPEm2B72QnLGW7o-edge-label-checkbox\"),\n",
       "          edgeLabelBorderCheckbox: document.getElementById(\"i3GPEm2B72QnLGW7o-edge-label-border-checkbox\"),\n",
       "          edgeLabelTextDataSourceSelect: document.getElementById(\"i3GPEm2B72QnLGW7o-edge-label-data-source-select\"),\n",
       "          edgeLabelSizeFactorText: document.getElementById(\"i3GPEm2B72QnLGW7o-edge-label-size-factor-text\"),\n",
       "          edgeLabelSizeFactorSlider: document.getElementById(\"i3GPEm2B72QnLGW7o-edge-label-size-factor-slider\"),\n",
       "          edgeLabelRotationText: document.getElementById(\"i3GPEm2B72QnLGW7o-edge-label-rotation-text\"),\n",
       "          edgeLabelRotationSlider: document.getElementById(\"i3GPEm2B72QnLGW7o-edge-label-rotation-slider\"),\n",
       "          // Layout algorithm\n",
       "          layoutAlgorithmHead: document.getElementById(\"i3GPEm2B72QnLGW7o-layout-algorithm-head\"),\n",
       "          layoutAlgorithmBody: document.getElementById(\"i3GPEm2B72QnLGW7o-layout-algorithm-body\"),\n",
       "          simulationCheckbox: document.getElementById(\"i3GPEm2B72QnLGW7o-simulation-active-checkbox\"),\n",
       "          layoutAlgorithmSelection: document.getElementById(\"i3GPEm2B72QnLGW7o-layout-algorithm-select\"),\n",
       "          centralGravitySlider: document.getElementById(\"i3GPEm2B72QnLGW7o-central-gravity-slider\"),\n",
       "          centralGravityText: document.getElementById(\"i3GPEm2B72QnLGW7o-central-gravity-text\"),\n",
       "          springLengthSlider: document.getElementById(\"i3GPEm2B72QnLGW7o-spring-length-slider\"),\n",
       "          springLengthText: document.getElementById(\"i3GPEm2B72QnLGW7o-spring-length-text\"),\n",
       "          springConstantSlider: document.getElementById(\"i3GPEm2B72QnLGW7o-spring-constant-slider\"),\n",
       "          springConstantText: document.getElementById(\"i3GPEm2B72QnLGW7o-spring-constant-text\"),\n",
       "          gravitationalConstantContainer: document.getElementById(\"i3GPEm2B72QnLGW7o-gravitational-constant-div\"),\n",
       "          gravitationalConstantSlider: document.getElementById(\"i3GPEm2B72QnLGW7o-gravitational-constant-slider\"),\n",
       "          gravitationalConstantText: document.getElementById(\"i3GPEm2B72QnLGW7o-gravitational-constant-text\"),\n",
       "          avoidOverlapContainer: document.getElementById(\"i3GPEm2B72QnLGW7o-avoid-overlap-div\"),\n",
       "          avoidOverlapSlider: document.getElementById(\"i3GPEm2B72QnLGW7o-avoid-overlap-slider\"),\n",
       "          avoidOverlapText: document.getElementById(\"i3GPEm2B72QnLGW7o-avoid-overlap-text\"),\n",
       "        },\n",
       "\n",
       "        composites:{\n",
       "          responsiveContainer:{\n",
       "            init(){\n",
       "              // Delete all contained items (relevant only for reset, not first creation)\n",
       "              ui.deleteChildElements(ui.elements.graphContainer);\n",
       "              ui.deleteChildElements(ui.elements.detailsBody);\n",
       "              // Menu\n",
       "              if(state.showMenu){\n",
       "                ui.composites.menu.show();\n",
       "              } else{\n",
       "                ui.composites.menu.hide();\n",
       "              }\n",
       "              // Details\n",
       "              if(state.showDetails){\n",
       "                ui.composites.details.show(true);\n",
       "              } else{\n",
       "                ui.composites.details.hide(true);\n",
       "              }\n",
       "              // Divs\n",
       "              ui.composites.responsiveContainer.setInnerHeights();\n",
       "              ui.composites.responsiveContainer.setOuterHeights();\n",
       "              ui.composites.responsiveContainer.getInnerWidths();\n",
       "            },\n",
       "\n",
       "            getInnerWidths(){\n",
       "              state.graphContainerWidth = parseInt(ui.elements.graphContainer.clientWidth);\n",
       "              state.detailsContainerWidth = parseInt(ui.elements.detailsContainer.clientWidth);\n",
       "            },\n",
       "\n",
       "            getInnerHeights(){\n",
       "              state.graphContainerHeight = parseInt(ui.elements.graphContainer.clientHeight);\n",
       "              if(state.showDetails){\n",
       "                state.detailsContainerHeight = parseInt(ui.elements.detailsContainer.clientHeight);\n",
       "              }\n",
       "            },\n",
       "\n",
       "            setInnerHeights(){\n",
       "              ui.elements.graphContainer.style.height = state.graphContainerHeight + \"px\";\n",
       "              ui.elements.detailsContainer.style.height = state.detailsContainerHeight + \"px\";\n",
       "            },\n",
       "\n",
       "            setOuterHeights(){\n",
       "              ui.elements.mainContainer.style.height = ui.elements.leftContainer.offsetHeight + \"px\";\n",
       "            },\n",
       "\n",
       "            getSizes(){\n",
       "              ui.composites.responsiveContainer.getInnerWidths();\n",
       "              ui.composites.responsiveContainer.getInnerHeights();\n",
       "            },\n",
       "\n",
       "            setSizes(){\n",
       "              ui.composites.responsiveContainer.setInnerHeights();\n",
       "              ui.composites.responsiveContainer.setOuterHeights();\n",
       "            },\n",
       "\n",
       "            adaptToResize(){\n",
       "              ui.composites.responsiveContainer.getSizes();\n",
       "              ui.composites.responsiveContainer.setSizes();\n",
       "            },\n",
       "\n",
       "            adaptToFullscreen(){\n",
       "              ui.composites.responsiveContainer.getSizes();\n",
       "              if(document.fullscreenElement){\n",
       "                // On entering fullscreen, remember the current container heights\n",
       "                state.beforeFullscreenGraphContainerHeight = state.graphContainerHeight;\n",
       "                state.beforeFullscreenDetailsContainerHeight = state.detailsContainerHeight;\n",
       "                // and then adapt them to maximum height possible in full screen mode\n",
       "                function calculateFullscreenMaxGraphHeight(){\n",
       "                  let outerHeight = null;\n",
       "                  try{\n",
       "                    const mainDivComputedStyle = window.getComputedStyle(ui.elements.mainContainer),\n",
       "                      graphDivComputedStyle = window.getComputedStyle(ui.elements.graphContainer),\n",
       "                      paddingTop = parseFloat(mainDivComputedStyle.paddingTop),\n",
       "                      borderTop = parseFloat(graphDivComputedStyle.borderTopWidth),\n",
       "                      borderBottom = parseFloat(graphDivComputedStyle.borderBottomWidth),\n",
       "                      paddingBottom = parseFloat(mainDivComputedStyle.paddingBottom);\n",
       "                    outerHeight = paddingTop + borderTop + borderBottom + paddingBottom;\n",
       "                    if(!isFinite(outerHeight) || outerHeight === null){\n",
       "                      throw \"Invalid number\";\n",
       "                    }\n",
       "                  } catch(e){\n",
       "                    // Hard coded fallback, depends on CSS of containers (1px borders, 6px padding)\n",
       "                    outerHeight = 1 + 3 + 3 + 1;\n",
       "                  }\n",
       "                  let graphHeight = screen.height - outerHeight;\n",
       "                  if(state.showDetails){\n",
       "                    graphHeight -= ui.composites.details.calculateHeightDifference();\n",
       "                  }\n",
       "                  return graphHeight;\n",
       "                }\n",
       "                state.graphContainerHeight = calculateFullscreenMaxGraphHeight();\n",
       "              } else{\n",
       "                // On leaving fullscreen, set container heights back to remembered values\n",
       "                state.graphContainerHeight = state.beforeFullscreenGraphContainerHeight;\n",
       "                state.detailsContainerHeight = state.beforeFullscreenDetailsContainerHeight;\n",
       "              }\n",
       "              ui.composites.responsiveContainer.setSizes();\n",
       "            },\n",
       "          },\n",
       "\n",
       "          menu:{\n",
       "            show(){\n",
       "              ui.elements.leftContainer.style.width = \"80%\";\n",
       "              ui.elements.rightContainer.style.width = \"20%\";\n",
       "              ui.elements.rightContainer.style.display = \"block\";\n",
       "            },\n",
       "\n",
       "            hide(){\n",
       "              ui.elements.leftContainer.style.width = \"100%\";\n",
       "              ui.elements.rightContainer.style.width = \"0%\";\n",
       "              ui.elements.rightContainer.style.display = \"none\";\n",
       "            },\n",
       "\n",
       "            toggle(){\n",
       "              // Update menu button\n",
       "              const div = ui.elements.menuToggleDiv;\n",
       "              state.showMenu = !state.showMenu;\n",
       "              if(state.showMenu){\n",
       "                div.innerText = ui.symbols.menuShown;\n",
       "                ui.composites.menu.show();\n",
       "              } else {\n",
       "                div.innerHTML = ui.symbols.menuHidden;\n",
       "                ui.composites.menu.hide();\n",
       "              }\n",
       "\n",
       "              // Update rest of UI\n",
       "              ui.composites.responsiveContainer.getInnerWidths();\n",
       "              ui.composites.responsiveContainer.getInnerHeights();\n",
       "              ui.composites.responsiveContainer.setOuterHeights();\n",
       "              ui.composites.graph.updateGraphDrawingArea();\n",
       "            },\n",
       "\n",
       "            setItem(keyElement, valElement, toActive){\n",
       "              const currentText = keyElement.innerHTML;\n",
       "              let sliceStart = 0;\n",
       "              if(currentText.startsWith(ui.symbols.menuItemActive)){\n",
       "                sliceStart = ui.symbols.menuItemActive.length;\n",
       "              } else if (currentText.startsWith(ui.symbols.menuItemInactive)){\n",
       "                sliceStart = ui.symbols.menuItemInactive.length;\n",
       "              }\n",
       "              if(toActive){\n",
       "                keyElement.innerHTML = ui.symbols.menuItemActive + currentText.slice(sliceStart);\n",
       "                keyElement.style.backgroundColor = \"#f5f5f5\";\n",
       "                keyElement.style.color = \"black\";\n",
       "                keyElement.style.borderColor = \"#999\";\n",
       "                keyElement.style.boxShadow = \"0px 0px 3px rgba(0, 0, 0, 0.35)\";\n",
       "                valElement.style.display = \"block\";\n",
       "              } else {\n",
       "                keyElement.innerHTML = ui.symbols.menuItemInactive + currentText.slice(sliceStart);\n",
       "                keyElement.style.backgroundColor = \"white\";\n",
       "                keyElement.style.color = \"#222\";\n",
       "                keyElement.style.borderColor = \"#ccc\";\n",
       "                keyElement.style.boxShadow = \"0px 0px 3px rgba(0, 0, 0, 0.2)\";\n",
       "                valElement.style.display = \"none\";\n",
       "              }\n",
       "            },\n",
       "\n",
       "            toggleItem(keyElement, valElement){\n",
       "              const toActive = !(valElement.style.display !== \"none\");\n",
       "              ui.composites.menu.setItem(keyElement, valElement, toActive);\n",
       "            },\n",
       "          },\n",
       "\n",
       "          details:{\n",
       "            calculateHeightDifference(){\n",
       "              let outerHeight = null;\n",
       "              try{\n",
       "                const graphContainerComputedStyle = window.getComputedStyle(ui.elements.graphContainer),\n",
       "                  detailsContainerComputedStyle = window.getComputedStyle(ui.elements.detailsContainer),\n",
       "                  border1 = parseFloat(graphContainerComputedStyle.borderBottomWidth),\n",
       "                  margin = parseFloat(detailsContainerComputedStyle.marginTop),\n",
       "                  border2 = parseFloat(detailsContainerComputedStyle.borderTopWidth);\n",
       "                outerHeight = border1 + margin + border2;\n",
       "                if(!isFinite(outerHeight) || outerHeight === null){\n",
       "                  throw \"Invalid number\";\n",
       "                }\n",
       "              } catch(e){\n",
       "                // Hard coded fallback, depends on CSS of containers (1px borders, 5px margin)\n",
       "                outerHeight = 7.0;\n",
       "              }\n",
       "              return state.detailsContainerHeight + outerHeight\n",
       "            },\n",
       "\n",
       "            show(init=false){\n",
       "              // Visibility\n",
       "              ui.elements.detailsContainer.style.display = \"block\";\n",
       "              if(!init){\n",
       "                // Height\n",
       "                const heightDiff = ui.composites.details.calculateHeightDifference();\n",
       "                state.graphContainerHeight -= heightDiff;\n",
       "                if(state.graphContainerHeight < 70){\n",
       "                  state.graphContainerHeight = 70;\n",
       "                }\n",
       "                // Update rest of UI\n",
       "                ui.composites.responsiveContainer.setSizes();\n",
       "                ui.composites.graph.updateGraphDrawingArea();\n",
       "              }\n",
       "            },\n",
       "\n",
       "            hide(init=false){\n",
       "              // Visibility\n",
       "              ui.elements.detailsContainer.style.display = \"none\";\n",
       "              if(!init){\n",
       "                // Height\n",
       "                const heightDiff = ui.composites.details.calculateHeightDifference();\n",
       "                state.graphContainerHeight += heightDiff;\n",
       "                // Update rest of UI\n",
       "                ui.composites.responsiveContainer.setSizes();\n",
       "                ui.composites.graph.updateGraphDrawingArea();\n",
       "              }\n",
       "            },\n",
       "\n",
       "            toggle(){\n",
       "              // Update details button\n",
       "              const toggleDiv = ui.elements.detailsToggleDiv;\n",
       "              state.showDetails = !state.showDetails;\n",
       "              if(state.showDetails){\n",
       "                toggleDiv.innerText = ui.symbols.detailsShown;\n",
       "                ui.composites.details.show();\n",
       "              } else {\n",
       "                toggleDiv.innerHTML = ui.symbols.detailsHidden;\n",
       "                ui.composites.details.hide();\n",
       "              }\n",
       "            },\n",
       "          },\n",
       "\n",
       "          download:{\n",
       "            png(filename){\n",
       "              ui.composites.download._rasterImage(filename, \"png\");\n",
       "            },\n",
       "\n",
       "            jpg(filename){\n",
       "              ui.composites.download._rasterImage(filename, \"jpeg\");\n",
       "            },\n",
       "\n",
       "            _rasterImage(filename, format){\n",
       "              const canvas = ui.elements.graphContainer.getElementsByTagName(\"canvas\")[0],\n",
       "                mimeType = \"image/\" + format;\n",
       "              function finishedBlobCallback(blob){\n",
       "                ui.composites.download._blobToFileDownload(blob, filename);\n",
       "              }\n",
       "              try{\n",
       "                // Blob to overcome size limitations for data URLs (e.g. 4MB in Chrome)\n",
       "                canvas.toBlob(finishedBlobCallback, mimeType, 1.0);\n",
       "              } catch(e){\n",
       "                if(e.name === \"SecurityError\"){\n",
       "                  alert(\"Image creation failed. Some images within the nodes of the graph can \" +\n",
       "                      \"not be fetched from within JavaScript due to security settings of the \" +\n",
       "                      \"server that provides the images.\");\n",
       "                } else{\n",
       "                  throw e;\n",
       "                }\n",
       "              }\n",
       "            },\n",
       "\n",
       "            _blobToFileDownload(blob, filename){\n",
       "              const url = URL.createObjectURL(blob),\n",
       "                a = document.createElement(\"a\");\n",
       "              function handleClick(){\n",
       "                setTimeout(function(){\n",
       "                  // Long waiting time before removal for slow devices like mobile phones\n",
       "                  URL.revokeObjectURL(url);\n",
       "                  this.removeEventListener(\"click\", handleClick);\n",
       "                }, 20000);\n",
       "              };\n",
       "              document.body.appendChild(a);\n",
       "              a.href = url;\n",
       "              a.download = filename;\n",
       "              a.addEventListener(\"click\", handleClick, false);\n",
       "              a.click();\n",
       "              document.body.removeChild(a);\n",
       "            },\n",
       "          },\n",
       "\n",
       "          selection(element, optionList, valueList=undefined) {\n",
       "            while(element.hasChildNodes()){\n",
       "              element.removeChild(element.firstChild);\n",
       "            }\n",
       "            for(let i=0; i<optionList.length; i++){\n",
       "              let text = optionList[i];\n",
       "              let value = text;\n",
       "              if(valueList){\n",
       "                value = valueList[i];\n",
       "              }\n",
       "              let opt = document.createElement(\"option\");\n",
       "              opt.appendChild(document.createTextNode(text));\n",
       "              opt.value = value;\n",
       "              element.appendChild(opt);\n",
       "            }\n",
       "          },\n",
       "\n",
       "          tooltip:{\n",
       "            show(xShift=null, yShift=null){\n",
       "              if(isFinite(xShift) && xShift !== null){\n",
       "                ui.elements.tooltipContainer.style.left =  parseInt(xShift) + \"px\";\n",
       "              }\n",
       "              if(isFinite(yShift) && yShift !== null){\n",
       "                ui.elements.tooltipContainer.style.top = parseInt(yShift) + \"px\";\n",
       "              }\n",
       "              ui.elements.tooltipContainer.style.transition = \"visibility 0s, opacity 0.1s\";\n",
       "              ui.elements.tooltipContainer.style.visibility = \"visible\";\n",
       "              ui.elements.tooltipContainer.style.opacity = 1.0;\n",
       "            },\n",
       "\n",
       "            hide(){\n",
       "              ui.elements.tooltipContainer.style.transition = \"visibility 0.3s, opacity 0.3s ease-in\";\n",
       "              ui.elements.tooltipContainer.style.visibility = \"hidden\";\n",
       "              ui.elements.tooltipContainer.style.opacity = 0.0;\n",
       "            },\n",
       "          },\n",
       "\n",
       "          progressBar:{\n",
       "            create(){\n",
       "              // Main container\n",
       "              this.mainContainer = document.createElement(\"div\");\n",
       "              this.mainContainer.id = \"i3GPEm2B72QnLGW7o-progress-container\";\n",
       "              this.mainContainer.style.backgroundColor = state.shownData.general.background_color;\n",
       "              ui.elements.graphContainer.style.backgroundColor = state.shownData.general.background_color;\n",
       "              // Text container\n",
       "              const numNodes = state.parsedData.nodes.length;\n",
       "              this.textContainer = document.createElement(\"div\");\n",
       "              this.textContainer.innerText = \"Large graph with \" + numNodes + \" nodes. Calculating an initial layout before visualizing it.\";\n",
       "              this.textContainer.style.textAlign = \"center\";\n",
       "              // Bar container\n",
       "              this.outerBarContainer = document.createElement(\"div\");\n",
       "              this.outerBarContainer.style.border = \"1px solid black\";\n",
       "              this.outerBarContainer.style.borderRadius = \"4px\";\n",
       "              this.outerBarContainer.style.marginTop = \"1ex\";\n",
       "              this.outerBarContainer.style.padding = \"1px\";\n",
       "              this.innerBarContainer = document.createElement(\"div\");\n",
       "              this.innerBarContainer.style.backgroundColor = \"black\";\n",
       "              this.innerBarContainer.style.width = \"0%\";\n",
       "              this.innerBarContainer.style.height = \"8px\";\n",
       "              this.innerBarContainer.style.borderRadius = \"3px\";\n",
       "              // Add them to DOM\n",
       "              this.outerBarContainer.appendChild(this.innerBarContainer);\n",
       "              this.mainContainer.appendChild(this.textContainer);\n",
       "              this.mainContainer.appendChild(this.outerBarContainer);\n",
       "              ui.elements.graphContainer.appendChild(this.mainContainer);\n",
       "            },\n",
       "\n",
       "            update(percentage){\n",
       "              this.innerBarContainer.style.width = percentage + \"%\";\n",
       "            },\n",
       "\n",
       "            remove(){\n",
       "              ui.elements.graphContainer.removeChild(this.mainContainer);\n",
       "            }\n",
       "          },\n",
       "\n",
       "          graph:{\n",
       "            createGraph(){\n",
       "              // Remove existing elements\n",
       "              ui.deleteChildElements(ui.elements.graphContainer);\n",
       "\n",
       "              // Create new elements\n",
       "              // I) Set graph options\n",
       "              // a) Nodes: https://visjs.github.io/vis-network/docs/network/nodes.html\n",
       "              const data = state.shownData,\n",
       "                visNodes = [];\n",
       "              let graphContainsFixedPositions = false;\n",
       "              for(let i=0; i<data.nodes.length; i++){\n",
       "                const node = data.nodes[i];\n",
       "                let visNode = {\n",
       "                  id: node.id,\n",
       "                  shape: node.shape,\n",
       "                  borderWidth: node.border_size,\n",
       "                  color: {\n",
       "                    background: node.color,\n",
       "                    border: node.border_color,\n",
       "                  },\n",
       "                }\n",
       "                // - Node labels\n",
       "                if(state.showNodeLabels){\n",
       "                  if(typeof(node.label) !== \"undefined\"){\n",
       "                    visNode.label = node.label;\n",
       "                    visNode.font = {\n",
       "                      size: node.label_size,\n",
       "                      color: node.label_color,\n",
       "                      strokeWidth: (state.showNodeLabelBorders ? 1.2 : 0.0),\n",
       "                      strokeColor: data.general.background_color,\n",
       "                    }\n",
       "                  }\n",
       "                }\n",
       "                // - Nodes hidden/shown (\"hidden\" property hides entire graph, using size=0 instead)\n",
       "                if(state.showNodes || (typeof(node.image) !== \"undefined\" && state.showNodeImages)){\n",
       "                  visNode.size = node.size;\n",
       "                } else {\n",
       "                  visNode.size = 0.0;\n",
       "                }\n",
       "                // - Node images\n",
       "                if(typeof(node.image) !== \"undefined\"){\n",
       "                  if(state.showNodeImages){\n",
       "                    visNode.shape = \"image\";\n",
       "                    visNode.image = node.image;\n",
       "                    visNode.size = node.image_size;\n",
       "                    // prevent a visual change of nodes with images upon selection (not deactivatable)\n",
       "                    visNode.color.highlight = {\n",
       "                      background: visNode.color.background,\n",
       "                      border: visNode.color.border,\n",
       "                    };\n",
       "                    visNode.borderWidthSelected = visNode.borderWidth;\n",
       "                  }\n",
       "                }\n",
       "                // - Node positions\n",
       "                const x = node.fx,\n",
       "                  y = node.fy;\n",
       "                if((typeof(x) !== \"undefined\") || (typeof(y) !== \"undefined\")){\n",
       "                  graphContainsFixedPositions = true;\n",
       "                  visNode.fixed = {}\n",
       "                  if(typeof(x) !== \"undefined\"){\n",
       "                    visNode.x = x;\n",
       "                    visNode.fixed.x = true;\n",
       "                  }\n",
       "                  if(typeof(y) !== \"undefined\"){\n",
       "                    visNode.y = y;\n",
       "                    visNode.fixed.y = true;\n",
       "                  }\n",
       "                }\n",
       "                // - Node hover behavior 1: highlight neighborhood\n",
       "                visNode.color.hover = {\n",
       "                  background: visNode.color.background,\n",
       "                  border: visNode.color.background,\n",
       "                };\n",
       "                // - Node hover behavior 2: show tooltip\n",
       "                if(state.nodeHoverTooltip){\n",
       "                  if(typeof(node.hover) !== \"undefined\"){\n",
       "                    visNode.title = node.hover;\n",
       "                  }\n",
       "                }\n",
       "                // - Node click behavior: show details\n",
       "                if(typeof(node.click) !== \"undefined\" && node.click !== \"\"){\n",
       "                  visNode.click = node.click;\n",
       "                }\n",
       "                visNodes.push(visNode);\n",
       "              }\n",
       "\n",
       "              // b) Edges: https://visjs.github.io/vis-network/docs/network/edges.html\n",
       "              const visEdges = [];\n",
       "              for(let i=0; i<data.edges.length; i++){\n",
       "                const edge = data.edges[i];\n",
       "                const visEdge = {\n",
       "                  id: edge.id,\n",
       "                  from: edge.source.id,\n",
       "                  to: edge.target.id,\n",
       "                  color: edge.color,\n",
       "                  width: edge.size,\n",
       "                };\n",
       "                // - Edge labels\n",
       "                if(state.showEdgeLabels){\n",
       "                  if(typeof(edge.label) !== \"undefined\"){\n",
       "                    visEdge.label = edge.label;\n",
       "                    visEdge.font = {\n",
       "                      size: edge.label_size,\n",
       "                      color: edge.label_color,\n",
       "                      strokeWidth: (state.showEdgeLabelBorders ? 1.2 : 0.0),\n",
       "                      strokeColor: data.general.background_color,\n",
       "                    }\n",
       "                  }\n",
       "                }\n",
       "                // - Edges hidden/shown\n",
       "                if(!state.showEdges){\n",
       "                  visEdge.hidden = true;\n",
       "                }\n",
       "                // - Edge hover behavior\n",
       "                if(state.edgeHoverTooltip){\n",
       "                  if(typeof(edge.hover) !== \"undefined\") {\n",
       "                    visEdge.title = edge.hover;\n",
       "                  }\n",
       "                }\n",
       "                // - Edge click behavior\n",
       "                if(typeof(edge.click) !== \"undefined\" && edge.click !== \"\"){\n",
       "                  visEdge.click = edge.click;\n",
       "                }\n",
       "                visEdges.push(visEdge);\n",
       "              }\n",
       "              // c) Options: https://visjs.github.io/vis-network/docs/network/\n",
       "              const options = {};\n",
       "              // - Nodes\n",
       "              options.nodes = {};\n",
       "              options.nodes.chosen = false;\n",
       "              options.nodes.imagePadding = 1.5;\n",
       "              options.nodes.labelHighlightBold = false;\n",
       "              options.nodes.shapeProperties = {};\n",
       "              options.nodes.shapeProperties.useBorderWithImage = true;\n",
       "              // - Node label font family\n",
       "              if(state.nodeLabelFont !== null){\n",
       "                options.nodes.font = {\n",
       "                  \"face\": state.nodeLabelFont,\n",
       "                }\n",
       "              }\n",
       "              // - Edges\n",
       "              options.edges = {};\n",
       "              // - Edges hidden/shown\n",
       "              if(!state.showEdges){\n",
       "                options.edges.hidden = true;\n",
       "              }\n",
       "              // - Edge curvature\n",
       "              if(state.edgeCurvature === 0.0){\n",
       "                options.edges.smooth = false;\n",
       "              } else {\n",
       "                options.edges.smooth = ui.composites.graph.calculateEdgeCurvatureOptions();\n",
       "              }\n",
       "              // - Edge arrows\n",
       "              if(data.general.directed){\n",
       "                options.edges.arrows = {};\n",
       "                options.edges.arrows.to = {};\n",
       "                options.edges.arrows.to.enabled = true;\n",
       "                if(data.general.arrow_size !== 0.0){\n",
       "                  options.edges.arrows.to.scaleFactor = data.general.arrow_size / 10.0;\n",
       "                }\n",
       "              }\n",
       "              // - Edge label font family\n",
       "              if(state.edgeLabelFont !== null){\n",
       "                options.edges.font = {\n",
       "                  \"face\": state.edgeLabelFont,\n",
       "                }\n",
       "              }\n",
       "              // - Drawing area\n",
       "              options.autoResize = false;\n",
       "              // - Interaction\n",
       "              options.interaction = {};\n",
       "              options.interaction.selectable = false;\n",
       "              options.interaction.selectConnectedEdges = false;\n",
       "              options.interaction.tooltipDelay = 0.0;\n",
       "              options.interaction.hover = state.nodeHoverNeighborhood;\n",
       "              options.interaction.hoverConnectedEdges = state.nodeHoverNeighborhood;\n",
       "              // - Layout algorithm\n",
       "              const numNodes = state.parsedData.nodes.length;\n",
       "              options.layout = {};\n",
       "              if(numNodes < 400){\n",
       "                options.layout.improvedLayout = true;\n",
       "              } else{\n",
       "                options.layout.improvedLayout = false;\n",
       "              }\n",
       "              options.physics = {};\n",
       "              options.physics.barnesHut = {\"damping\": 0.25};\n",
       "              options.physics.forceAtlas2Based = {\"damping\": 3.0};\n",
       "              options.physics.repulsion = {};\n",
       "              options.physics.hierarchicalRepulsion = {};\n",
       "              options.physics.stabilization = {};\n",
       "              options.physics.stabilization.enabled = false;\n",
       "              if(numNodes > state.largeGraphThreshold){\n",
       "                let numIterations = 800;\n",
       "                if(numNodes >= 25000){\n",
       "                  numIterations = 100;\n",
       "                } else if(numNodes >= 10000){\n",
       "                  numIterations = 300;\n",
       "                } else if(numNodes >= 5000){\n",
       "                  numIterations = 400;\n",
       "                } else if(numNodes >= 2000){\n",
       "                  numIterations = 500;\n",
       "                } else if(numNodes >= 1000){\n",
       "                  numIterations = 600;\n",
       "                }\n",
       "                options.physics.stabilization = {\n",
       "                  \"enabled\": true,\n",
       "                  \"fit\": true,\n",
       "                  \"iterations\": numIterations,\n",
       "                  \"updateInterval\": 1,\n",
       "                };\n",
       "              }\n",
       "              // II) Create graph\n",
       "              // - DataSet and Network: https://visjs.github.io/vis-network/docs/network\n",
       "              state.visOptions = options;\n",
       "              state.visData = {\n",
       "                nodes: new vis.DataSet(visNodes),\n",
       "                edges: new vis.DataSet(visEdges),\n",
       "              };\n",
       "              state.visGraph = new vis.Network(ui.elements.graphContainer, state.visData, state.visOptions);\n",
       "              // III) Set further graph options after its creation\n",
       "              // - Background: https://github.com/almende/vis/issues/2292\n",
       "              state.visGraph.on(\"beforeDrawing\", function(ctx){\n",
       "                  ctx.save();\n",
       "                  ctx.setTransform(1, 0, 0, 1, 0, 0);\n",
       "                  ctx.fillStyle = data.general.background_color;\n",
       "                  ctx.fillRect(0, 0, ctx.canvas.width, ctx.canvas.height);\n",
       "                  ctx.restore();\n",
       "              })\n",
       "              // - Node positions: node update after graph creation seems to prevent a bug\n",
       "              if(graphContainsFixedPositions){\n",
       "                state.visData.nodes.update(visNodes);\n",
       "              }\n",
       "              // - Graph behavior\n",
       "              ui.composites.graph.setBehavior();\n",
       "\n",
       "              // Menu toggle button\n",
       "              if(state.showMenuToggleButton){\n",
       "                const menuDiv = document.createElement(\"div\");\n",
       "                if(state.showMenu){\n",
       "                  menuDiv.innerText = ui.symbols.menuShown;\n",
       "                } else {\n",
       "                  menuDiv.innerText = ui.symbols.menuHidden;\n",
       "                }\n",
       "                menuDiv.id = \"i3GPEm2B72QnLGW7o-menu-toggle-button\";\n",
       "                menuDiv.onclick = ui.composites.menu.toggle;\n",
       "                ui.elements.graphContainer.appendChild(menuDiv);\n",
       "                ui.elements.menuToggleDiv = menuDiv;\n",
       "              }\n",
       "              // Details toggle button\n",
       "              if(state.showDetailsToggleButton){\n",
       "                const detailsDiv = document.createElement(\"div\");\n",
       "                if(state.showDetails){\n",
       "                  detailsDiv.innerText = ui.symbols.detailsShown;\n",
       "                } else {\n",
       "                  detailsDiv.innerText = ui.symbols.detailsHidden;\n",
       "                }\n",
       "                detailsDiv.id = \"i3GPEm2B72QnLGW7o-details-toggle-button\";\n",
       "                detailsDiv.onclick = ui.composites.details.toggle;\n",
       "                ui.elements.graphContainer.appendChild(detailsDiv);\n",
       "                ui.elements.detailsToggleDiv = detailsDiv;\n",
       "              }\n",
       "            },\n",
       "\n",
       "            setBehavior(){\n",
       "              // - Progress bar: only if large graph, stops simulation to get initial static image\n",
       "              // https://visjs.github.io/vis-network/examples/network/exampleApplications/loadingBar.html\n",
       "              const numNodes = state.parsedData.nodes.length;\n",
       "              if(numNodes > state.largeGraphThreshold){\n",
       "                // Layout start\n",
       "                ui.composites.progressBar.create();\n",
       "                // Layout update\n",
       "                state.visGraph.on(\"stabilizationProgress\", function(params){\n",
       "                  var progressPercentage = params.iterations / params.total * 100;\n",
       "                  ui.composites.progressBar.update(progressPercentage);\n",
       "                });\n",
       "                // Layout finished\n",
       "                state.visGraph.once(\"stabilizationIterationsDone\", function(){\n",
       "                  setTimeout(function(){\n",
       "                    ui.composites.progressBar.remove();\n",
       "                    ui.composites.graph.simulationManager.stop();\n",
       "                  }, 60);\n",
       "                });\n",
       "              }\n",
       "              // - Node drag behavior: move node, fix its position or release it afterwards\n",
       "              state.visGraph.on(\"dragStart\", function(params){\n",
       "                params.event = \"[original event]\";\n",
       "                const nodeId = this.getNodeAt(params.pointer.DOM);\n",
       "                if(nodeId){\n",
       "                  const visNode = state.visData.nodes.get(nodeId),\n",
       "                    position = state.visGraph.getPositions(nodeId);\n",
       "                  visNode.x = position.x;\n",
       "                  visNode.y = position.y;\n",
       "                  visNode.fixed = false;\n",
       "                  state.visData.nodes.update(visNode);\n",
       "                }\n",
       "              });\n",
       "              state.visGraph.on(\"dragEnd\", function(params){\n",
       "                params.event = \"[original event]\";\n",
       "                const nodeId = this.getNodeAt(params.pointer.DOM);\n",
       "                if(nodeId){\n",
       "                  if(state.nodeDragFix){\n",
       "                    const visNode = state.visData.nodes.get(nodeId),\n",
       "                      position = state.visGraph.getPositions(nodeId);\n",
       "                    visNode.x = position.x;\n",
       "                    visNode.y = position.y;\n",
       "                    visNode.fixed = {\"x\": true, \"y\": true}\n",
       "                    state.visData.nodes.update(visNode);\n",
       "                  }\n",
       "                }\n",
       "              });\n",
       "              // - Node and edge hover behavior: already covered\n",
       "              // - Node and edge click behavior\n",
       "              // https://visjs.github.io/vis-network/examples/network/events/interactionEvents.html\n",
       "              function createNodeText(node){\n",
       "                let htmlText = \"<div>Node: \" + String(node.id) + \"</div>\";\n",
       "                if(typeof(node.click) !== \"undefined\" && node.click !== \"\"){\n",
       "                  htmlText += '<div id=\"i3GPEm2B72QnLGW7o-details-user-provided\">' + node.click + '</div>';\n",
       "                }\n",
       "                return htmlText;\n",
       "              }\n",
       "              function createEdgeText(edge){\n",
       "                let htmlText = \"<div>Edge: \" + String(edge.id) + \"</div>\";\n",
       "                if(typeof(edge.click) !== \"undefined\" && edge.click !== \"\"){\n",
       "                  htmlText += '<div id=\"i3GPEm2B72QnLGW7o-details-user-provided\">' + edge.click + '</div>';\n",
       "                }\n",
       "                return htmlText;\n",
       "              }\n",
       "              state.visGraph.on(\"click\", function(params){\n",
       "                params.event = \"[original event]\";\n",
       "                let htmlText = \"\";\n",
       "                const nodeId = this.getNodeAt(params.pointer.DOM);\n",
       "                if(nodeId){\n",
       "                  const node = state.visData.nodes.get(nodeId);\n",
       "                  if(node){\n",
       "                    htmlText = createNodeText(node);\n",
       "                  }\n",
       "                } else {\n",
       "                  const edgeId = this.getEdgeAt(params.pointer.DOM);\n",
       "                  if(edgeId){\n",
       "                    const edge = state.visData.edges.get(edgeId);\n",
       "                    if(edge){\n",
       "                      htmlText = createEdgeText(edge);\n",
       "                    }\n",
       "                  }\n",
       "                }\n",
       "                ui.elements.detailsBody.innerHTML = htmlText;\n",
       "              });\n",
       "              // - Simulation behavior\n",
       "              state.visGraph.on(\"startStabilizing\", function(params){\n",
       "                // A manually stopped simulation restarts automatically by dragging a node or\n",
       "                // altering a dataset, immediately triggering this event. So if the simulation\n",
       "                // shall be inactive, any automatic restart can be turned off immediately here.\n",
       "                if(!state.layoutAlgorithmActive){\n",
       "                  state.visGraph.stopSimulation();\n",
       "                }\n",
       "              });\n",
       "              // Start (considers all simulation parameters)\n",
       "              ui.composites.graph.simulationManager.start();\n",
       "            },\n",
       "\n",
       "            // Graph\n",
       "            updateGraphDrawingArea(){\n",
       "              state.visGraph.setSize(state.graphContainerWidth, state.graphContainerHeight);\n",
       "              state.visGraph.redraw();\n",
       "            },\n",
       "\n",
       "            // Nodes\n",
       "            updateNodes(){\n",
       "              const data = state.shownData,\n",
       "                newVisNodes = [];\n",
       "              for(let i=0; i<data.nodes.length; i++){\n",
       "                const node = data.nodes[i],\n",
       "                  visNode = state.visData.nodes.get(node.id);\n",
       "                // Node shape\n",
       "                visNode.shape = node.shape;\n",
       "                // Node size\n",
       "                if(state.showNodes){\n",
       "                  visNode.size = node.size;\n",
       "                } else {\n",
       "                  visNode.size = 0.0;\n",
       "                }\n",
       "                // Node images\n",
       "                if(state.showNodeImages){\n",
       "                  if(typeof(node.image) !== \"undefined\"){\n",
       "                    visNode.size = node.image_size;\n",
       "                    visNode.shape = \"image\";\n",
       "                    visNode.image = node.image;\n",
       "                  }\n",
       "                }\n",
       "                // Prevent node movements: Remove stored positions of nodes once fixed and now released\n",
       "                if(visNode.fixed === false){\n",
       "                  delete visNode.x;\n",
       "                  delete visNode.y;\n",
       "                }\n",
       "                newVisNodes.push(visNode);\n",
       "              }\n",
       "              state.visData.nodes.update(newVisNodes);\n",
       "            },\n",
       "\n",
       "            preventNodeJump(visNode){\n",
       "              if(visNode.fixed === false){\n",
       "                delete visNode.x;\n",
       "                delete visNode.y;\n",
       "              }\n",
       "            },\n",
       "\n",
       "            updateNodeVisibilities(){\n",
       "              ui.composites.graph.updateNodes();\n",
       "            },\n",
       "\n",
       "            updateNodeSizes(){\n",
       "              const data = state.shownData,\n",
       "                newVisNodes = [];\n",
       "              for(let i=0; i<data.nodes.length; i++){\n",
       "                const node = data.nodes[i],\n",
       "                  visNode = state.visData.nodes.get(node.id);\n",
       "                visNode.size = node.size;\n",
       "                if(state.showNodeImages && typeof(node.image) !== \"undefined\"){\n",
       "                  visNode.size = node.image_size;\n",
       "                }\n",
       "                ui.composites.graph.preventNodeJump(visNode);\n",
       "                newVisNodes.push(visNode);\n",
       "              }\n",
       "              state.visData.nodes.update(newVisNodes);\n",
       "            },\n",
       "\n",
       "            updateNodeHoverNeighborhoodBehavior(){\n",
       "              state.visOptions.interaction.hover = state.nodeHoverNeighborhood;\n",
       "              state.visOptions.interaction.hoverConnectedEdges = state.nodeHoverNeighborhood;\n",
       "              state.visGraph.setOptions(state.visOptions);\n",
       "            },\n",
       "\n",
       "            updateNodeHoverTooltipBehavior(){\n",
       "              const data = state.shownData,\n",
       "                newVisNodes = [];\n",
       "              for(let i=0; i<data.nodes.length; i++){\n",
       "                const node = data.nodes[i],\n",
       "                  visNode = state.visData.nodes.get(node.id);\n",
       "                if(typeof(node.hover) !== \"undefined\"){\n",
       "                  visNode.title = state.nodeHoverTooltip ? node.hover : null;\n",
       "                }\n",
       "                newVisNodes.push(visNode);\n",
       "              }\n",
       "              state.visData.nodes.update(newVisNodes);\n",
       "            },\n",
       "\n",
       "            // Node images\n",
       "            updateNodeImages(){\n",
       "              const data = state.shownData,\n",
       "                newVisNodes = [];\n",
       "              for(let i=0; i<data.nodes.length; i++){\n",
       "                const node = data.nodes[i],\n",
       "                  visNode = state.visData.nodes.get(node.id);\n",
       "                visNode.shape = node.shape;\n",
       "                if(state.showNodes){\n",
       "                  visNode.size = node.size;\n",
       "                } else {\n",
       "                  visNode.size = 0.0;\n",
       "                }\n",
       "                if(state.showNodeImages){\n",
       "                  if(typeof(node.image) !== \"undefined\"){\n",
       "                    visNode.size = node.image_size;\n",
       "                    visNode.shape = \"image\";\n",
       "                    visNode.image = node.image;\n",
       "                  }\n",
       "                }\n",
       "                ui.composites.graph.preventNodeJump(visNode);\n",
       "                newVisNodes.push(visNode);\n",
       "              }\n",
       "              state.visData.nodes.update(newVisNodes);\n",
       "            },\n",
       "\n",
       "            // Node labels\n",
       "            updateNodeLabels(){\n",
       "              // Vis data sets: https://visjs.github.io/vis-data/data/dataset.html\n",
       "              const data = state.shownData,\n",
       "                newVisNodes = [];\n",
       "              for(let i=0; i<data.nodes.length; i++){\n",
       "                const node = data.nodes[i];\n",
       "                const visNode = state.visData.nodes.get(node.id);\n",
       "                if(state.showNodeLabels){\n",
       "                  visNode.label = node.label;\n",
       "                  visNode.font = {\n",
       "                    size: node.label_size,\n",
       "                    color: node.label_color,\n",
       "                    strokeWidth: (state.showNodeLabelBorders ? 1.2 : 0.0),\n",
       "                    strokeColor: data.general.background_color,\n",
       "                  }\n",
       "                } else{\n",
       "                  visNode.label = undefined;\n",
       "                }\n",
       "                ui.composites.graph.preventNodeJump(visNode);\n",
       "                newVisNodes.push(visNode);\n",
       "              }\n",
       "              state.visData.nodes.update(newVisNodes);\n",
       "            },\n",
       "\n",
       "            // Edges\n",
       "            calculateEdgeCurvatureOptions(){\n",
       "              const appearanceAdaptionFactor = 0.5,\n",
       "                options = {\n",
       "                \"type\": state.edgeCurvature > 0.0 ? \"curvedCW\" : \"curvedCCW\",\n",
       "                \"roundness\": Math.abs(state.edgeCurvature) * appearanceAdaptionFactor,\n",
       "              };\n",
       "              return options\n",
       "            },\n",
       "\n",
       "            updateEdgeVisibility(){\n",
       "              const data = state.shownData,\n",
       "                newVisEdges = [];\n",
       "              for(let i=0; i<data.edges.length; i++){\n",
       "                const edge = data.edges[i],\n",
       "                  visEdge = state.visData.edges.get(edge.id);\n",
       "                visEdge.hidden = !state.showEdges;\n",
       "                newVisEdges.push(visEdge);\n",
       "              }\n",
       "              state.visData.edges.update(newVisEdges);\n",
       "            },\n",
       "\n",
       "            updateEdgeSizes(){\n",
       "              const data = state.shownData,\n",
       "                newVisEdges = [];\n",
       "              for (let i=0; i<data.edges.length; i++){\n",
       "                const edge = data.edges[i],\n",
       "                  newVisEdge = state.visData.edges.get(edge.id);\n",
       "                newVisEdge.width = edge.size;\n",
       "                newVisEdges.push(newVisEdge);\n",
       "              }\n",
       "              state.visData.edges.update(newVisEdges);\n",
       "            },\n",
       "\n",
       "            updateEdgeCurvatures(){\n",
       "              if(state.edgeCurvature === 0.0){\n",
       "                state.visOptions.edges.smooth = false;\n",
       "              } else {\n",
       "                state.visOptions.edges.smooth = ui.composites.graph.calculateEdgeCurvatureOptions();\n",
       "              }\n",
       "              state.visGraph.setOptions(state.visOptions);\n",
       "            },\n",
       "\n",
       "            updateEdgeHoverTooltipBehavior(){\n",
       "              /* Correct code, but there is a bug that renders null values as empty div (instead of ignoring them)\n",
       "              const data = state.shownData,\n",
       "                newVisEdges = [];\n",
       "              for(let i=0; i<data.edges.length; i++){\n",
       "                const edge = data.edges[i],\n",
       "                  visEdge = state.visData.edges.get(edge.id);\n",
       "                if(typeof(edge.hover) !== \"undefined\"){\n",
       "                  visEdge.title = state.edgeHoverTooltip ? edge.hover : null;\n",
       "                }\n",
       "                newVisEdges.push(visEdge);\n",
       "              }\n",
       "              state.visData.edges.update(newVisEdges);\n",
       "              */\n",
       "              // Workaround code\n",
       "              function cloneObject(obj){\n",
       "                return Object.assign({}, obj);\n",
       "              }\n",
       "              const data = state.shownData,\n",
       "                newVisEdges = [];\n",
       "              for(let i=0; i<data.edges.length; i++){\n",
       "                const edge = data.edges[i],\n",
       "                  visEdge = state.visData.edges.get(edge.id);\n",
       "                if(typeof(edge.hover) !== \"undefined\"){\n",
       "                  if(state.edgeHoverTooltip){\n",
       "                    visEdge.title = edge.hover;\n",
       "                    newVisEdges.push(visEdge);\n",
       "                  } else{\n",
       "                    // edges.update can only add properties, not delete them, hence use of clone/remove/add\n",
       "                    clonedEdge = cloneObject(visEdge);\n",
       "                    delete clonedEdge.title;\n",
       "                    state.visData.edges.remove(edge.id);\n",
       "                    state.visData.edges.add(clonedEdge);\n",
       "                  }\n",
       "                }\n",
       "              }\n",
       "              if(state.edgeHoverTooltip){\n",
       "                state.visData.edges.update(newVisEdges);\n",
       "              }\n",
       "            },\n",
       "\n",
       "            // Edge labels\n",
       "            updateEdgeLabels(){\n",
       "              const data = state.shownData,\n",
       "                newVisEdges = [],\n",
       "                noLabel = \" \";  // undefined, null, \"\" or deleting label property does not work\n",
       "              for(let i=0; i<data.edges.length; i++){\n",
       "                const edge = data.edges[i],\n",
       "                  visEdge = state.visData.edges.get(edge.id);\n",
       "                if(state.showEdgeLabels){\n",
       "                  visEdge.label = edge.label;\n",
       "                  visEdge.font = {\n",
       "                    size: edge.label_size,\n",
       "                    color: edge.label_color,\n",
       "                    strokeWidth: (state.showEdgeLabelBorders ? 1.2 : 0.0),\n",
       "                    strokeColor: data.general.background_color,\n",
       "                  }\n",
       "                } else {\n",
       "                  visEdge.label = noLabel;\n",
       "                }\n",
       "                newVisEdges.push(visEdge);\n",
       "              }\n",
       "              state.visData.edges.update(newVisEdges);\n",
       "            },\n",
       "\n",
       "            // Layout algorithm\n",
       "            simulationManager:{\n",
       "              start(){\n",
       "                state.visGraph.startSimulation();\n",
       "                this.setAlgorithm();\n",
       "                this.setSpringLength();\n",
       "                this.setSpringConstant();\n",
       "                this.setCentralGravity();\n",
       "                this.setGravitationalConstant();\n",
       "                this.setAvoidOverlap();\n",
       "              },\n",
       "              stop(){\n",
       "                state.visGraph.stopSimulation();\n",
       "              },\n",
       "              setActivity(on){\n",
       "                if(on){\n",
       "                  this.start();\n",
       "                } else{\n",
       "                  this.stop();\n",
       "                }\n",
       "              },\n",
       "              setAlgorithm(){\n",
       "                const name = state.layoutAlgorithm;\n",
       "                state.visOptions.physics.solver = name;\n",
       "                state.visGraph.setOptions(state.visOptions);\n",
       "                if(name === \"repulsion\"){\n",
       "                  ui.elements.avoidOverlapContainer.style.opacity = ui.convert.boolToOpacity(false);\n",
       "                  ui.elements.gravitationalConstantContainer.style.opacity = ui.convert.boolToOpacity(false);\n",
       "                } else if(name === \"hierarchicalRepulsion\"){\n",
       "                  ui.elements.avoidOverlapContainer.style.opacity = ui.convert.boolToOpacity(true);\n",
       "                  ui.elements.gravitationalConstantContainer.style.opacity = ui.convert.boolToOpacity(false);\n",
       "                } else {\n",
       "                  ui.elements.avoidOverlapContainer.style.opacity = ui.convert.boolToOpacity(true);\n",
       "                  ui.elements.gravitationalConstantContainer.style.opacity = ui.convert.boolToOpacity(true);\n",
       "                }\n",
       "              },\n",
       "              releaseFixedNodes(){\n",
       "                const data = state.shownData,\n",
       "                  newVisNodes = [];\n",
       "                for(let i=0; i<data.nodes.length; i++){\n",
       "                  const node = data.nodes[i],\n",
       "                    visNode = state.visData.nodes.get(node.id);\n",
       "                  ui.composites.graph.preventNodeJump(visNode);\n",
       "                  visNode.fixed = false;\n",
       "                  // Note: Deletion of x, y and fixed may work too, but .update does not delete props\n",
       "                  newVisNodes.push(visNode);\n",
       "                }\n",
       "                state.visData.nodes.update(newVisNodes);\n",
       "              },\n",
       "              setSpringLength(){\n",
       "                state.visOptions.physics.barnesHut.springLength = state.springLength;\n",
       "                state.visOptions.physics.forceAtlas2Based.springLength = state.springLength;\n",
       "                state.visOptions.physics.repulsion.springLength = state.springLength;\n",
       "                state.visOptions.physics.hierarchicalRepulsion.springLength = state.springLength;\n",
       "                state.visGraph.setOptions(state.visOptions);\n",
       "              },\n",
       "              setSpringConstant(){\n",
       "                state.visOptions.physics.barnesHut.springConstant = state.springConstant / 10.0;\n",
       "                state.visOptions.physics.forceAtlas2Based.springConstant = state.springConstant;\n",
       "                state.visOptions.physics.repulsion.springConstant = state.springConstant;\n",
       "                state.visOptions.physics.hierarchicalRepulsion.springConstant = state.springConstant;\n",
       "                state.visGraph.setOptions(state.visOptions);\n",
       "              },\n",
       "              setCentralGravity(){\n",
       "                state.visOptions.physics.barnesHut.centralGravity = state.centralGravity;\n",
       "                state.visOptions.physics.forceAtlas2Based.centralGravity = state.centralGravity / 100.0;\n",
       "                state.visOptions.physics.repulsion.centralGravity = state.centralGravity;\n",
       "                state.visOptions.physics.hierarchicalRepulsion.centralGravity = state.centralGravity;\n",
       "                state.visGraph.setOptions(state.visOptions);\n",
       "              },\n",
       "              setGravitationalConstant(){\n",
       "                state.visOptions.physics.barnesHut.gravitationalConstant = state.gravitationalConstant;\n",
       "                state.visOptions.physics.forceAtlas2Based.gravitationalConstant = state.gravitationalConstant / 10.0;\n",
       "                // Not a parameter in repulsion and hierarchicalRepulsion\n",
       "                state.visGraph.setOptions(state.visOptions);\n",
       "              },\n",
       "              setAvoidOverlap(){\n",
       "                state.visOptions.physics.barnesHut.avoidOverlap = state.avoidOverlap;\n",
       "                state.visOptions.physics.forceAtlas2Based.avoidOverlap = state.avoidOverlap;\n",
       "                // Not a parameter in repulsion and hierarchicalRepulsion\n",
       "                state.visGraph.setOptions(state.visOptions);\n",
       "              },\n",
       "            }\n",
       "          },\n",
       "        },\n",
       "\n",
       "        init(){\n",
       "          // Containers\n",
       "          ui.composites.responsiveContainer.init();\n",
       "          // Graph selection (only visible if multiple graphs in data)\n",
       "          if(state.rawData.length > 1){\n",
       "            ui.elements.graphSelectionContainer.style.display = ui.convert.boolToDisplayStyle(true);\n",
       "            const optionList = [],\n",
       "              valueList = [];\n",
       "            let label;\n",
       "            for(let i=0; i<state.rawData.length; i++){\n",
       "              const graph = state.rawData[i];\n",
       "              try{\n",
       "                label = String(graph.label);\n",
       "                if(label === \"undefined\" || label === \"\"){\n",
       "                  throw \"Invalid label\";\n",
       "                }\n",
       "              } catch(e){\n",
       "                label = \"Unnamed graph\";\n",
       "              }\n",
       "              const name = String(i+1) + \": \" + label;\n",
       "              optionList.push(name);\n",
       "              valueList.push(String(i));\n",
       "            }\n",
       "            ui.composites.selection(ui.elements.graphSelection, optionList, valueList);\n",
       "          }\n",
       "          // General (menu item)\n",
       "          ui.composites.menu.setItem(ui.elements.generalHead, ui.elements.generalBody, true);\n",
       "          // Data selection (menu item)\n",
       "          ui.composites.menu.setItem(ui.elements.dataHead, ui.elements.dataBody, false);\n",
       "          // - Node size\n",
       "          ui.elements.nodeSizeNormalizationCheckbox.checked = state.useNodeSizeNormalization;\n",
       "          ui.elements.nodeSizeNormalizationContainer.style.display = ui.convert.boolToDisplayStyle(state.useNodeSizeNormalization);\n",
       "          ui.elements.nodeSizeNormalizationMinText.innerHTML = ui.convert.numberToText(state.nodeSizeNormalizationMin);\n",
       "          ui.elements.nodeSizeNormalizationMinSlider.value = state.nodeSizeNormalizationMin;\n",
       "          ui.elements.nodeSizeNormalizationMaxText.innerHTML = ui.convert.numberToText(state.nodeSizeNormalizationMax);\n",
       "          ui.elements.nodeSizeNormalizationMaxSlider.value = state.nodeSizeNormalizationMax;\n",
       "          // - Edge size\n",
       "          ui.elements.edgeSizeNormalizationCheckbox.checked = state.useEdgeSizeNormalization;\n",
       "          ui.elements.edgeSizeNormalizationContainer.style.display = ui.convert.boolToDisplayStyle(state.useEdgeSizeNormalization);\n",
       "          ui.elements.edgeSizeNormalizationMinText.innerHTML = ui.convert.numberToText(state.edgeSizeNormalizationMin);\n",
       "          ui.elements.edgeSizeNormalizationMinSlider.value = state.edgeSizeNormalizationMin;\n",
       "          ui.elements.edgeSizeNormalizationMaxText.innerHTML = ui.convert.numberToText(state.edgeSizeNormalizationMax);\n",
       "          ui.elements.edgeSizeNormalizationMaxSlider.value = state.edgeSizeNormalizationMax;\n",
       "          // Nodes\n",
       "          ui.composites.menu.setItem(ui.elements.nodeHead, ui.elements.nodeBody, false);\n",
       "          ui.elements.nodeCheckbox.checked = state.showNodes;\n",
       "          ui.elements.nodeSizeFactorText.innerHTML = ui.convert.numberToText(state.nodeSizeFactor);\n",
       "          ui.elements.nodeSizeFactorSlider.value = state.nodeSizeFactor;\n",
       "          ui.elements.nodeDragFixCheckbox.checked = state.nodeDragFix;\n",
       "          ui.elements.nodeHoverNeighborhoodCheckbox.checked = state.nodeHoverNeighborhood;\n",
       "          ui.elements.nodeHoverTooltipCheckbox.checked = state.nodeHoverTooltip;\n",
       "          // Node images\n",
       "          ui.composites.menu.setItem(ui.elements.nodeImageHead, ui.elements.nodeImageBody, false);\n",
       "          ui.elements.nodeImageMetaControl.style.display = false;\n",
       "          ui.elements.nodeImageCheckbox.checked = state.showNodeImages;\n",
       "          ui.elements.nodeImageSizeFactorText.innerHTML = ui.convert.numberToText(state.nodeImageSizeFactor);\n",
       "          ui.elements.nodeImageSizeFactorSlider.value = state.nodeImageSizeFactor;\n",
       "          // Node labels\n",
       "          ui.composites.menu.setItem(ui.elements.nodeLabelHead, ui.elements.nodeLabelBody, false);\n",
       "          ui.elements.nodeLabelCheckbox.checked = state.showNodeLabels;\n",
       "          ui.elements.nodeLabelBorderCheckbox.checked = state.showNodeLabelBorders;\n",
       "          ui.elements.nodeLabelSizeFactorText.innerHTML = ui.convert.numberToText(state.nodeLabelSizeFactor);\n",
       "          ui.elements.nodeLabelSizeFactorSlider.value = state.nodeLabelSizeFactor;\n",
       "          ui.elements.nodeLabelRotationText.innerHTML = ui.convert.numberToText(state.nodeLabelRotation);\n",
       "          ui.elements.nodeLabelRotationSlider.value = state.nodeLabelRotation;\n",
       "          // Edges\n",
       "          ui.composites.menu.setItem(ui.elements.edgeHead, ui.elements.edgeBody, false);\n",
       "          ui.elements.edgeCheckbox.checked = state.showEdges;\n",
       "          ui.elements.edgeSizeFactorText.innerHTML = ui.convert.numberToText(state.edgeSizeFactor);\n",
       "          ui.elements.edgeSizeFactorSlider.value = state.edgeSizeFactor;\n",
       "          ui.elements.edgeCurvatureText.innerHTML = ui.convert.numberToText(state.edgeCurvature);\n",
       "          ui.elements.edgeCurvatureSlider.value = state.edgeCurvature;\n",
       "          ui.elements.edgeHoverTooltipCheckbox.checked = state.edgeHoverTooltip;\n",
       "          // Edge labels\n",
       "          ui.composites.menu.setItem(ui.elements.edgeLabelHead, ui.elements.edgeLabelBody, false);\n",
       "          ui.elements.edgeLabelCheckbox.checked = state.showEdgeLabels;\n",
       "          ui.elements.edgeLabelBorderCheckbox.checked = state.showEdgeLabelBorders;\n",
       "          ui.elements.edgeLabelSizeFactorText.innerHTML = ui.convert.numberToText(state.edgeLabelSizeFactor);\n",
       "          ui.elements.edgeLabelSizeFactorSlider.value = state.edgeLabelSizeFactor;\n",
       "          ui.elements.edgeLabelRotationText.innerHTML = ui.convert.numberToText(state.edgeLabelRotation);\n",
       "          ui.elements.edgeLabelRotationSlider.value = state.edgeLabelRotation;\n",
       "          // Layout algorithm\n",
       "          ui.composites.menu.setItem(ui.elements.layoutAlgorithmHead, ui.elements.layoutAlgorithmBody, false);\n",
       "          ui.elements.simulationCheckbox.checked = state.layoutAlgorithmActive;\n",
       "          ui.elements.layoutAlgorithmSelection.value = state.layoutAlgorithm;\n",
       "          ui.elements.centralGravitySlider.value = state.centralGravity;\n",
       "          ui.elements.centralGravityText.innerHTML = ui.convert.numberToText(state.centralGravity);\n",
       "          ui.elements.springLengthSlider.value = state.springLength;\n",
       "          ui.elements.springLengthText.innerHTML = ui.convert.numberToText(state.springLength);\n",
       "          ui.elements.springConstantSlider.value = state.springConstant;\n",
       "          ui.elements.springConstantText.innerHTML = ui.convert.numberToText(state.springConstant);\n",
       "          ui.elements.gravitationalConstantSlider.value = state.gravitationalConstant;\n",
       "          ui.elements.gravitationalConstantText.innerHTML = ui.convert.numberToText(state.gravitationalConstant);\n",
       "          ui.elements.avoidOverlapSlider.value = state.avoidOverlap;\n",
       "          ui.elements.avoidOverlapText.innerHTML = ui.convert.numberToText(state.avoidOverlap);\n",
       "\n",
       "          ui.initSelectionValues();\n",
       "        },\n",
       "\n",
       "        initSelectionValues(){\n",
       "          function setSelectionOptionsAndValue(element, options, value, values=null){\n",
       "            if(values === null){\n",
       "              values = options;\n",
       "            }\n",
       "            if(!values.includes(value)){\n",
       "              value = values[0];\n",
       "            }\n",
       "            ui.composites.selection(element, options, values);\n",
       "            element.value = value;\n",
       "          }\n",
       "          // Node label text data source\n",
       "          setSelectionOptionsAndValue(\n",
       "            ui.elements.nodeLabelTextDataSourceSelect,\n",
       "            state.parsedData.general.node_properties.node_label_text_data_sources,\n",
       "            state.nodeLabelTextDataSource,\n",
       "          );\n",
       "          // Edge label text data source\n",
       "          setSelectionOptionsAndValue(\n",
       "            ui.elements.edgeLabelTextDataSourceSelect,\n",
       "            state.parsedData.general.edge_properties.edge_label_text_data_sources,\n",
       "            state.edgeLabelTextDataSource,\n",
       "          );\n",
       "          // Node size data source\n",
       "          setSelectionOptionsAndValue(\n",
       "            ui.elements.nodeSizeDataSourceSelect,\n",
       "            state.parsedData.general.node_properties.node_size_data_sources,\n",
       "            state.nodeSizeDataSource,\n",
       "          );\n",
       "          // Edge size data source\n",
       "          setSelectionOptionsAndValue(\n",
       "            ui.elements.edgeSizeDataSourceSelect,\n",
       "            state.parsedData.general.edge_properties.edge_size_data_sources,\n",
       "            state.edgeSizeDataSource,\n",
       "          );\n",
       "          // Layout algorithm\n",
       "          setSelectionOptionsAndValue(\n",
       "            ui.elements.layoutAlgorithmSelection,\n",
       "            [\"Barnes-Hut\", \"Force Atlas 2\", \"Repulsion\", \"Hierarchical repulsion\"],\n",
       "            state.layoutAlgorithm,\n",
       "            [\"barnesHut\", \"forceAtlas2Based\", \"repulsion\", \"hierarchicalRepulsion\"],\n",
       "          );\n",
       "        },\n",
       "\n",
       "        deleteChildElements(element){\n",
       "          while(element.firstChild){\n",
       "            // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management\n",
       "            // As of 2019, it is not possible to explicitly or programmatically trigger\n",
       "            // garbage collection in JavaScript.\n",
       "            element.removeChild(element.firstChild);\n",
       "          }\n",
       "        },\n",
       "\n",
       "        convert:{\n",
       "          numberToText(number, numDigits=2) {\n",
       "            return String(Number(number).toFixed(numDigits));\n",
       "          },\n",
       "\n",
       "          boolToDisplayStyle(isVisible){\n",
       "            if(isVisible){\n",
       "              return \"block\";\n",
       "            }\n",
       "            return \"none\";\n",
       "          },\n",
       "\n",
       "          boolToOpacity(isActive){\n",
       "            if(isActive){\n",
       "              return 1.0;\n",
       "            }\n",
       "            return 0.25;\n",
       "          },\n",
       "\n",
       "          boolToTooltipDelay(isActive){\n",
       "            if(isActive){\n",
       "              return 0;\n",
       "            }\n",
       "            return 100000000;\n",
       "          },\n",
       "        },\n",
       "\n",
       "        setBehavior(){\n",
       "          // Window resize (includes ctrl+wheel zoom, landscape/portrait orientation on phones)\n",
       "          window.onresize = function(){\n",
       "            ui.composites.responsiveContainer.adaptToResize();\n",
       "            ui.composites.graph.updateGraphDrawingArea();\n",
       "          }\n",
       "          // Container resize\n",
       "          ui.elements.graphContainer.onmouseup = function(){\n",
       "            const currentHeight = parseInt(ui.elements.graphContainer.clientHeight);\n",
       "            if(currentHeight != state.graphContainerHeight){\n",
       "              ui.composites.responsiveContainer.adaptToResize();\n",
       "              ui.composites.graph.updateGraphDrawingArea();\n",
       "            }\n",
       "          };\n",
       "          ui.elements.detailsContainer.onmouseup = function(){\n",
       "            const currentHeight = parseInt(ui.elements.detailsContainer.clientHeight);\n",
       "            if(currentHeight != state.detailsContainerHeight){\n",
       "              ui.composites.responsiveContainer.adaptToResize();\n",
       "            }\n",
       "          };\n",
       "          // Tooltip\n",
       "          ui.elements.tooltipContainer.onmouseover = function(){\n",
       "            ui.composites.tooltip.show();\n",
       "          }\n",
       "          ui.elements.tooltipContainer.onmouseout = function(){\n",
       "            ui.composites.tooltip.hide();\n",
       "          }\n",
       "          // General menu\n",
       "          ui.elements.generalHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.generalHead, ui.elements.generalBody);\n",
       "          };\n",
       "          ui.elements.resetButton.onclick = function(){\n",
       "            app.restart();\n",
       "          };\n",
       "          ui.elements.fullscreenButton.onclick = function(){\n",
       "            if(document.fullscreenElement){\n",
       "              document.exitFullscreen();\n",
       "            } else{\n",
       "              ui.elements.mainContainer.requestFullscreen()\n",
       "                .catch(function(err){\n",
       "                  alert(\"Error attempting to enable full-screen mode: \" + err.message);\n",
       "                });\n",
       "            }\n",
       "          };\n",
       "          ui.elements.mainContainer.onfullscreenchange = function(){\n",
       "            if(document.fullscreenElement){\n",
       "              ui.elements.fullscreenButton.innerText = \"Exit full screen\";\n",
       "            } else{\n",
       "              ui.elements.fullscreenButton.innerText = \"Enter full screen\";\n",
       "            }\n",
       "            // Wait for browser to switch to fullscreen and resize divs, then adapt to new sizes\n",
       "            setTimeout(function(){\n",
       "              ui.composites.responsiveContainer.adaptToFullscreen();\n",
       "              ui.composites.graph.updateGraphDrawingArea();\n",
       "            }, 250);\n",
       "          };\n",
       "          ui.elements.pngExportButton.onclick = function(){\n",
       "            ui.composites.download.png(\"graph.png\");\n",
       "          };\n",
       "          ui.elements.jpgExportButton.onclick = function(){\n",
       "            ui.composites.download.jpg(\"graph.jpg\");\n",
       "          };\n",
       "          // Data menu\n",
       "          ui.elements.dataHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.dataHead, ui.elements.dataBody);\n",
       "          };\n",
       "          // - Graph selection\n",
       "          ui.elements.graphSelection.onchange = function(){\n",
       "            const chosenGraphIndex = parseInt(this.value);\n",
       "            state.manager.parseChosenData(chosenGraphIndex);\n",
       "            state.manager.prepareShownData();\n",
       "            ui.initSelectionValues();\n",
       "            ui.composites.graph.createGraph();\n",
       "          };\n",
       "          // - Node label text\n",
       "          ui.elements.nodeLabelTextDataSourceSelect.onchange = function(){\n",
       "            state.nodeLabelTextDataSource = this.value;\n",
       "            state.manager.updateNodeLabelTexts();\n",
       "          };\n",
       "          // - Edge label text\n",
       "          ui.elements.edgeLabelTextDataSourceSelect.onchange = function(){\n",
       "            state.edgeLabelTextDataSource = this.value;\n",
       "            state.manager.updateEdgeLabelTexts();\n",
       "          };\n",
       "          // - Node size\n",
       "          ui.elements.nodeSizeDataSourceSelect.onchange = function(){\n",
       "            state.nodeSizeDataSource = this.value;\n",
       "            state.manager.updateNodeSizes();\n",
       "          };\n",
       "          ui.elements.nodeSizeNormalizationCheckbox.onchange = function(){\n",
       "            state.useNodeSizeNormalization = this.checked;\n",
       "            ui.elements.nodeSizeNormalizationContainer.style.display = ui.convert.boolToDisplayStyle(state.useNodeSizeNormalization);\n",
       "            state.manager.updateNodeSizes();\n",
       "          };\n",
       "          ui.elements.nodeSizeNormalizationMinSlider.oninput = function(){\n",
       "            ui.elements.nodeSizeNormalizationMinText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.nodeSizeNormalizationMinSlider.onchange = function(){\n",
       "            state.nodeSizeNormalizationMin = parseFloat(this.value);\n",
       "            if(state.nodeSizeNormalizationMin > state.nodeSizeNormalizationMax){\n",
       "              state.nodeSizeNormalizationMax = state.nodeSizeNormalizationMin;\n",
       "              ui.elements.nodeSizeNormalizationMaxSlider.value = state.nodeSizeNormalizationMax;\n",
       "              ui.elements.nodeSizeNormalizationMaxText.innerHTML = ui.convert.numberToText(state.nodeSizeNormalizationMax);\n",
       "            }\n",
       "            state.manager.updateNodeSizes();\n",
       "          };\n",
       "          ui.elements.nodeSizeNormalizationMaxSlider.oninput = function(){\n",
       "            ui.elements.nodeSizeNormalizationMaxText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.nodeSizeNormalizationMaxSlider.onchange = function(){\n",
       "            state.nodeSizeNormalizationMax = parseFloat(this.value);\n",
       "            if(state.nodeSizeNormalizationMax < state.nodeSizeNormalizationMin){\n",
       "              state.nodeSizeNormalizationMin = state.nodeSizeNormalizationMax;\n",
       "              ui.elements.nodeSizeNormalizationMinSlider.value = state.nodeSizeNormalizationMin;\n",
       "              ui.elements.nodeSizeNormalizationMinText.innerHTML = ui.convert.numberToText(state.nodeSizeNormalizationMin);\n",
       "            }\n",
       "            state.manager.updateNodeSizes();\n",
       "          };\n",
       "          // - Edge size\n",
       "          ui.elements.edgeSizeDataSourceSelect.onchange = function(){\n",
       "            state.edgeSizeDataSource = this.value;\n",
       "            state.manager.updateEdgeSizes();\n",
       "          };\n",
       "          ui.elements.edgeSizeNormalizationCheckbox.onchange = function(){\n",
       "            state.useEdgeSizeNormalization = this.checked;\n",
       "            ui.elements.edgeSizeNormalizationContainer.style.display = ui.convert.boolToDisplayStyle(state.useEdgeSizeNormalization);\n",
       "            state.manager.updateEdgeSizes();\n",
       "          };\n",
       "          ui.elements.edgeSizeNormalizationMinSlider.oninput = function(){\n",
       "            ui.elements.edgeSizeNormalizationMinText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.edgeSizeNormalizationMinSlider.onchange = function(){\n",
       "            state.edgeSizeNormalizationMin = parseFloat(this.value);\n",
       "            if(state.edgeSizeNormalizationMin > state.edgeSizeNormalizationMax){\n",
       "              state.edgeSizeNormalizationMax = state.edgeSizeNormalizationMin;\n",
       "              ui.elements.edgeSizeNormalizationMaxSlider.value = state.edgeSizeNormalizationMax;\n",
       "              ui.elements.edgeSizeNormalizationMaxText.innerHTML = ui.convert.numberToText(state.edgeSizeNormalizationMax);\n",
       "            }\n",
       "            state.manager.updateEdgeSizes();\n",
       "          };\n",
       "          ui.elements.edgeSizeNormalizationMaxSlider.oninput = function(){\n",
       "            ui.elements.edgeSizeNormalizationMaxText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.edgeSizeNormalizationMaxSlider.onchange = function(){\n",
       "            state.edgeSizeNormalizationMax = parseFloat(this.value);\n",
       "            if(state.edgeSizeNormalizationMax < state.edgeSizeNormalizationMin){\n",
       "              state.edgeSizeNormalizationMin = state.edgeSizeNormalizationMax;\n",
       "              ui.elements.edgeSizeNormalizationMinSlider.value = state.edgeSizeNormalizationMin;\n",
       "              ui.elements.edgeSizeNormalizationMinText.innerHTML = ui.convert.numberToText(state.edgeSizeNormalizationMin);\n",
       "            }\n",
       "            state.manager.updateEdgeSizes();\n",
       "          };\n",
       "          // Nodes menu\n",
       "          ui.elements.nodeHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.nodeHead, ui.elements.nodeBody);\n",
       "          };\n",
       "          ui.elements.nodeCheckbox.onchange = function(){\n",
       "            state.showNodes = this.checked;\n",
       "            ui.composites.graph.updateNodeVisibilities();\n",
       "          };\n",
       "          ui.elements.nodeSizeFactorSlider.oninput = function(){\n",
       "            ui.elements.nodeSizeFactorText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.nodeSizeFactorSlider.onchange = function(){\n",
       "            state.nodeSizeFactor = parseFloat(this.value);\n",
       "            state.manager.updateNodeSizes();\n",
       "          };\n",
       "          ui.elements.nodeDragFixCheckbox.onchange = function(){\n",
       "            state.nodeDragFix = this.checked;\n",
       "          };\n",
       "          ui.elements.nodeHoverNeighborhoodCheckbox.onchange = function(){\n",
       "            state.nodeHoverNeighborhood = this.checked;\n",
       "            ui.composites.graph.updateNodeHoverNeighborhoodBehavior();\n",
       "          };\n",
       "          ui.elements.nodeHoverTooltipCheckbox.onchange = function(){\n",
       "            state.nodeHoverTooltip = this.checked;\n",
       "            ui.composites.graph.updateNodeHoverTooltipBehavior();\n",
       "          };\n",
       "          ui.elements.nodeReleaseButton.onclick = function(){\n",
       "            ui.composites.graph.simulationManager.releaseFixedNodes();\n",
       "          };\n",
       "          // Node images menu\n",
       "          ui.elements.nodeImageHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.nodeImageHead, ui.elements.nodeImageBody);\n",
       "          };\n",
       "          ui.elements.nodeImageCheckbox.onchange = function(){\n",
       "            state.showNodeImages = this.checked;\n",
       "            state.manager.updateNodeImages();\n",
       "          };\n",
       "          ui.elements.nodeImageSizeFactorSlider.oninput = function(){\n",
       "            ui.elements.nodeImageSizeFactorText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.nodeImageSizeFactorSlider.onchange = function(){\n",
       "            state.nodeImageSizeFactor = parseFloat(this.value);\n",
       "            state.manager.updateNodeImages();\n",
       "          };\n",
       "          // Node labels menu\n",
       "          ui.elements.nodeLabelHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.nodeLabelHead, ui.elements.nodeLabelBody);\n",
       "          };\n",
       "          ui.elements.nodeLabelCheckbox.onchange = function(){\n",
       "            state.showNodeLabels = this.checked;\n",
       "            ui.composites.graph.updateNodeLabels();\n",
       "          };\n",
       "          ui.elements.nodeLabelBorderCheckbox.onchange = function(){\n",
       "            state.showNodeLabelBorders = this.checked;\n",
       "            ui.composites.graph.updateNodeLabels();\n",
       "          };\n",
       "          ui.elements.nodeLabelSizeFactorSlider.oninput = function(){\n",
       "            ui.elements.nodeLabelSizeFactorText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.nodeLabelSizeFactorSlider.onchange = function(){\n",
       "            state.nodeLabelSizeFactor = parseFloat(this.value);\n",
       "            state.manager.updateNodeLabelSizes();\n",
       "          };\n",
       "          // Edges menu\n",
       "          ui.elements.edgeHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.edgeHead, ui.elements.edgeBody);\n",
       "          };\n",
       "          ui.elements.edgeCheckbox.onchange = function(){\n",
       "            state.showEdges = this.checked;\n",
       "            ui.composites.graph.updateEdgeVisibility();\n",
       "          };\n",
       "          ui.elements.edgeSizeFactorSlider.oninput = function(){\n",
       "            ui.elements.edgeSizeFactorText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.edgeSizeFactorSlider.onchange = function(){\n",
       "            state.edgeSizeFactor = parseFloat(this.value);\n",
       "            state.manager.updateEdgeSizes();\n",
       "          };\n",
       "          ui.elements.edgeCurvatureSlider.oninput = function(){\n",
       "            ui.elements.edgeCurvatureText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.edgeCurvatureSlider.onchange = function(){\n",
       "            state.edgeCurvature = parseFloat(this.value);\n",
       "            state.manager.updateEdgeCurvatures();\n",
       "          };\n",
       "          ui.elements.edgeHoverTooltipCheckbox.onchange = function(){\n",
       "            state.edgeHoverTooltip = this.checked;\n",
       "            ui.composites.graph.updateEdgeHoverTooltipBehavior();\n",
       "          };\n",
       "          // Edge labels menu\n",
       "          ui.elements.edgeLabelHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.edgeLabelHead, ui.elements.edgeLabelBody);\n",
       "          };\n",
       "          ui.elements.edgeLabelCheckbox.onchange = function(){\n",
       "            state.showEdgeLabels = this.checked;\n",
       "            ui.composites.graph.updateEdgeLabels();\n",
       "          };\n",
       "          ui.elements.edgeLabelBorderCheckbox.onchange = function(){\n",
       "            state.showEdgeLabelBorders = this.checked;\n",
       "            ui.composites.graph.updateEdgeLabels();\n",
       "          };\n",
       "          ui.elements.edgeLabelSizeFactorSlider.oninput = function(){\n",
       "            ui.elements.edgeLabelSizeFactorText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.edgeLabelSizeFactorSlider.onchange = function(){\n",
       "            state.edgeLabelSizeFactor = parseFloat(this.value);\n",
       "            state.manager.updateEdgeLabelSizes();\n",
       "          };\n",
       "          // Layout algorithm menu\n",
       "          ui.elements.layoutAlgorithmHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.layoutAlgorithmHead, ui.elements.layoutAlgorithmBody);\n",
       "          };\n",
       "          ui.elements.simulationCheckbox.onchange = function(){\n",
       "            state.layoutAlgorithmActive = !state.layoutAlgorithmActive;\n",
       "            ui.composites.graph.simulationManager.setActivity(state.layoutAlgorithmActive);\n",
       "          };\n",
       "          ui.elements.layoutAlgorithmSelection.onchange = function(){\n",
       "            state.layoutAlgorithm = this.value;\n",
       "            ui.composites.graph.simulationManager.setAlgorithm();\n",
       "          };\n",
       "          ui.elements.centralGravitySlider.oninput = function(){\n",
       "            ui.elements.centralGravityText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.centralGravitySlider.onchange = function(){\n",
       "            state.centralGravity = parseFloat(this.value);\n",
       "            ui.composites.graph.simulationManager.setCentralGravity();\n",
       "          };\n",
       "          ui.elements.springLengthSlider.oninput = function(){\n",
       "            ui.elements.springLengthText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.springLengthSlider.onchange = function(){\n",
       "            state.springLength = parseFloat(this.value);\n",
       "            ui.composites.graph.simulationManager.setSpringLength();\n",
       "          };\n",
       "          ui.elements.springConstantSlider.oninput = function(){\n",
       "            ui.elements.springConstantText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.springConstantSlider.onchange = function(){\n",
       "            state.springConstant = parseFloat(this.value);\n",
       "            ui.composites.graph.simulationManager.setSpringConstant();\n",
       "          };\n",
       "          ui.elements.gravitationalConstantSlider.oninput = function(){\n",
       "            ui.elements.gravitationalConstantText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.gravitationalConstantSlider.onchange = function(){\n",
       "            state.gravitationalConstant = parseFloat(this.value);\n",
       "            ui.composites.graph.simulationManager.setGravitationalConstant();\n",
       "          };\n",
       "          ui.elements.avoidOverlapSlider.oninput = function(){\n",
       "            ui.elements.avoidOverlapText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.avoidOverlapSlider.onchange = function(){\n",
       "            state.avoidOverlap = parseFloat(this.value);\n",
       "            ui.composites.graph.simulationManager.setAvoidOverlap();\n",
       "          };\n",
       "        },\n",
       "      }\n",
       "\n",
       "      const app = {\n",
       "        start(){\n",
       "          state.manager.fetchRawDataFromTemplating();\n",
       "          state.manager.parseChosenData(0);\n",
       "          state.manager.prepareShownData();\n",
       "          ui.init();\n",
       "          // Wait a bit to finish UI rendering, then start potentially slow layout computation\n",
       "          setTimeout(function(){\n",
       "            ui.composites.graph.createGraph();\n",
       "            ui.setBehavior();\n",
       "          }, 400);\n",
       "          // Reduce risk of getting stuck with a wrong drawing area size\n",
       "          function checkIfSizeUpdateRequired(){\n",
       "            if(ui.elements.graphContainer.clientWidth != state.graphContainerWidth){\n",
       "              ui.composites.responsiveContainer.adaptToResize();\n",
       "              ui.composites.graph.updateGraphDrawingArea();\n",
       "            }\n",
       "          }\n",
       "          [1, 2, 5, 8, 12, 15, 20, 25, 30, 35, 40, 45, 50, 60, 90].forEach(function(delay){\n",
       "            setTimeout(checkIfSizeUpdateRequired, delay*1000);\n",
       "          })\n",
       "        },\n",
       "\n",
       "        restart(){\n",
       "          app.start();\n",
       "        },\n",
       "      }\n",
       "\n",
       "      // Start website dynamics\n",
       "      app.start();\n",
       "    });\n",
       "  </script>\n",
       "\n"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "ownerships_graph = Graph(model, weighted=True)\n",
    "Node, Edge = ownerships_graph.Node, ownerships_graph.Edge\n",
    "Node.extend(LegalEntity, label = LegalEntity.name)\n",
    "\n",
    "# Assign `value` to every node of the graph having some ownership of the FI of interest\n",
    "with model.rule():\n",
    "    fi = FinancialInstitution(name = bank_name)\n",
    "    to = TotalOwnership(asset = fi)\n",
    "    Node(to.owner).set(value = to.part)\n",
    "    Node(fi).set(value = 1.0, focus = 'target')\n",
    "\n",
    "with model.rule():\n",
    "    p = Person()\n",
    "    Edge.add(Node(p.family), Node(p), kind = 'in family')\n",
    "\n",
    "with model.rule():\n",
    "    p = Person()\n",
    "    Edge(Node(p), Node(p.isCeoAt)).set( kind = 'ceo')\n",
    "\n",
    "with model.rule():\n",
    "    p = Person(name = person_name)\n",
    "    Node(p).set(focus = 'target')\n",
    "    Node(p.family).set(focus = 'target')\n",
    "\n",
    "# Using TotalOwnership connect family of the person of interest with the FI of interest\n",
    "with model.rule():\n",
    "    fam = Person(name = person_name).family\n",
    "    fi = FinancialInstitution(name = bank_name)\n",
    "    Edge.add(fam, fi, ownership = TotalOwnership(owner = fam, asset = fi))\n",
    "\n",
    "# Add edges relevant to show where existing edges (ownerships) got derived from\n",
    "with model.rule():\n",
    "    e = Edge()\n",
    "    own = e.ownership\n",
    "    with own.sub_source.sub_owner:\n",
    "        sub_own = TotalOwnership(owner=own.sub_source.owner, asset=own.sub_source.sub_owner)\n",
    "        Edge.add(sub_own.owner, sub_own.asset, ownership = sub_own)\n",
    "        sub_sub_own = TotalOwnership(owner=own.sub_source.sub_owner, asset=own.sub_source.asset)\n",
    "        Edge.add(sub_sub_own.owner, sub_sub_own.asset, ownership = sub_sub_own)\n",
    "\n",
    "# Add `weight`\n",
    "with model.rule():\n",
    "    e = Edge()\n",
    "    e.set(weight = TotalOwnership(owner = e.from_, asset = e.to).part)\n",
    "\n",
    "ownerships_graph.visualize(three=False, show_edge_label = True,\n",
    "    style={\n",
    "        \"node\": {\n",
    "            \"color\": lambda n : '#f07f65' if n.get('focus') == 'target' else '#92979c',\n",
    "            \"size\": lambda n: n.get(\"value\")**(1/2) * 50 if n.get(\"value\") else 10\n",
    "        },\n",
    "        \"edge\": {\n",
    "            \"color\": \"#3baca3\",\n",
    "            \"label\": lambda e: \"family member\" if e.get(\"kind\") == \"in family\" else \"CEO at\" if e.get(\"kind\") == \"ceo\" else f'{e.get(\"weight\")*100:.2f}%',\n",
    "            \"size\": lambda e: e['weight'] * 5\n",
    "        }\n",
    "    }).display(inline=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Relevant Control Graph"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": [
     "hide-input"
    ]
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "  <style>\n",
       "    /* Main divisions */\n",
       "    #iSVAmWn6OJW87vNvL-main-div {\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "      padding: 3px;\n",
       "      background-color: white;\n",
       "    }\n",
       "    #iSVAmWn6OJW87vNvL-left-div {\n",
       "      float: left;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    #iSVAmWn6OJW87vNvL-right-div {\n",
       "      float: left;\n",
       "      height: 100%;\n",
       "      display: none;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    #iSVAmWn6OJW87vNvL-right-inner-div {\n",
       "      padding-left: 5px;\n",
       "      padding-right: 2px;\n",
       "      overflow-x: hidden;\n",
       "      overflow-y: auto;\n",
       "      height: 100%;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "\n",
       "    /* Graph and details (contained in left-inner-div) */\n",
       "    #iSVAmWn6OJW87vNvL-graph-div {\n",
       "      overflow: hidden;\n",
       "      resize: vertical;\n",
       "      position: relative;\n",
       "      border: 1px solid #ccc;\n",
       "      border-radius: 4px;\n",
       "      box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2);\n",
       "      display: none;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    #iSVAmWn6OJW87vNvL-details-div {\n",
       "      overflow: auto;\n",
       "      resize: vertical;\n",
       "      margin-top: 5px;\n",
       "      border: 1px solid #ccc;\n",
       "      border-radius: 4px;\n",
       "      box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2);\n",
       "      display: none;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    #iSVAmWn6OJW87vNvL-details-head {\n",
       "      user-select: none;\n",
       "      padding-left: 4px !important;\n",
       "      padding-top: 4px !important;\n",
       "      font-size: 8px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      color: gray;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    #iSVAmWn6OJW87vNvL-details-body {\n",
       "      padding: 10px;\n",
       "      padding-top: 6px;\n",
       "      font-size: 10px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "\n",
       "    /* Control menu (contained in right-inner-div) */\n",
       "    .iSVAmWn6OJW87vNvL-menu-item-head {\n",
       "      font-size: 11px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      color: black;\n",
       "      cursor: pointer;\n",
       "      padding-left: 5px;\n",
       "      padding-right: 0px;\n",
       "      padding-top: 5px;\n",
       "      padding-bottom: 5px;\n",
       "      margin-bottom: 5px;\n",
       "      border-radius: 4px;\n",
       "      border: 1px solid #ccc;\n",
       "      box-shadow: 0px 0px 3px rgba(0, 0, 0, 0.2);\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    .iSVAmWn6OJW87vNvL-menu-item-body {\n",
       "      margin-left: 5px;\n",
       "      margin-bottom: 10px;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    .iSVAmWn6OJW87vNvL-menu-subitem-head {\n",
       "      font-size: 9px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      font-weight: 600;\n",
       "      color: #006429;\n",
       "      cursor: default;\n",
       "      margin-bottom: 2px;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    .iSVAmWn6OJW87vNvL-menu-subitem-body {\n",
       "      font-size: 8px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      margin-left: 7px;\n",
       "      margin-bottom: 5px;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    .iSVAmWn6OJW87vNvL-labeled-input {\n",
       "      all: initial;\n",
       "      display: flex;\n",
       "      align-items: center;\n",
       "      margin-top: 1px;\n",
       "      margin-bottom: 1px;\n",
       "    }\n",
       "    .iSVAmWn6OJW87vNvL-label {\n",
       "      all: initial;\n",
       "      font-size: 8px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      font-style: italic;\n",
       "      cursor: pointer;\n",
       "    }\n",
       "    .iSVAmWn6OJW87vNvL-slider {\n",
       "      width: 100%;\n",
       "      margin-bottom: 2px;\n",
       "    }\n",
       "    .iSVAmWn6OJW87vNvL-slider::-moz-focus-outer {\n",
       "      border: 0;\n",
       "    }\n",
       "    .iSVAmWn6OJW87vNvL-slider-text-left {\n",
       "      font-size: 8px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      font-style: italic;\n",
       "      color: black;\n",
       "      float: left;\n",
       "      margin-top: 2px;\n",
       "    }\n",
       "    .iSVAmWn6OJW87vNvL-slider-text-right {\n",
       "      font-size: 8px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      color: black;\n",
       "      float: right;\n",
       "    }\n",
       "    .iSVAmWn6OJW87vNvL-checkbox {\n",
       "      margin-left: 0px !important;\n",
       "      margin-right: 4px !important;\n",
       "      margin-top: 2px !important;\n",
       "      margin-bottom: 2px !important;\n",
       "      padding: 0px !important;\n",
       "    }\n",
       "    .iSVAmWn6OJW87vNvL-select {\n",
       "      cursor: pointer;\n",
       "      outline: none;\n",
       "      font-size: 8px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      color: black;\n",
       "      background-color: #f5f5f5;\n",
       "      width: 100%;\n",
       "      padding-top: 4px !important;\n",
       "      padding-bottom: 4px !important;\n",
       "      padding-left: 5px;\n",
       "      padding-right: 10px;\n",
       "      margin-right: 5px;\n",
       "      margin-top: 2px;\n",
       "      margin-bottom: 2px;\n",
       "      border-radius: 4px;\n",
       "      border: 1.2px solid #bbb;\n",
       "      box-shadow: 0 1px 0 1px rgba(0, 0, 0, 0.04);\n",
       "\n",
       "      -moz-appearance: none;\n",
       "      -webkit-appearance: none;\n",
       "      appearance: none;\n",
       "      background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyOTIuNCIgaGVpZ2h0PSIyOTIuNCI+PHBhdGggZmlsbD0iIzAwMDAwMCIgZD0iTSAtNS4yMDY0NjJlLTYsNjQuNTcyNjU2IDI5Mi4zOTk5OSw2NC41NzI2NTQgMTQ2LjE5OTk3LDIzMy42Mjg0NyAtNS4yMDY0NjJlLTYsNjQuNTcyNjU2Ii8+PC9zdmc+Cg==');\n",
       "      background-repeat: no-repeat;\n",
       "      background-position: right 4px top 50%;\n",
       "      background-size: 6px;\n",
       "    }\n",
       "    @-moz-document url-prefix() {\n",
       "      /* Dirty hack to remove dotted border on focus */\n",
       "      .iSVAmWn6OJW87vNvL-select {\n",
       "        color: transparent !important;\n",
       "        text-shadow: 0 0 0 black !important;\n",
       "      }\n",
       "    }\n",
       "    .iSVAmWn6OJW87vNvL-select:after {\n",
       "      cursor: pointer;\n",
       "    }\n",
       "    .iSVAmWn6OJW87vNvL-button {\n",
       "      cursor: pointer;\n",
       "      outline: none;\n",
       "      font-size: 8px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      color: black;\n",
       "      background-color: #f2f2f2;\n",
       "      padding-top: 4px !important;\n",
       "      padding-bottom: 4px !important;\n",
       "      padding-left: 10px;\n",
       "      padding-right: 10px;\n",
       "      margin-top: 2px;\n",
       "      margin-bottom: 2px;\n",
       "      border-radius: 4px;\n",
       "      border: 1.2px solid #bbb;\n",
       "      box-shadow: 0 1px 0 1px rgba(0, 0, 0, 0.04);\n",
       "    }\n",
       "    .iSVAmWn6OJW87vNvL-button:hover {\n",
       "      border: 1.2px solid #999;\n",
       "      background-color: #f2f2f2;\n",
       "    }\n",
       "    .iSVAmWn6OJW87vNvL-button:active {\n",
       "      background-color: #ddd;\n",
       "    }\n",
       "    .iSVAmWn6OJW87vNvL-button::-moz-focus-inner {\n",
       "      border: 0;\n",
       "    }\n",
       "    /* Hidden menu items */\n",
       "    #iSVAmWn6OJW87vNvL-graph-select-div {\n",
       "      display: none;\n",
       "    }\n",
       "    #iSVAmWn6OJW87vNvL-node-size-norm-div {\n",
       "      display: none;\n",
       "    }\n",
       "    #iSVAmWn6OJW87vNvL-edge-size-norm-div {\n",
       "      display: none;\n",
       "    }\n",
       "\n",
       "    /* Graph */\n",
       "    #iSVAmWn6OJW87vNvL-tooltip-div {\n",
       "      font-size: 10px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      z-index: 42001;\n",
       "      opacity: 0;\n",
       "      visibility: hidden;\n",
       "      position: absolute !important;\n",
       "      max-width: 40%;\n",
       "      padding: 5px;\n",
       "      white-space: pre-wrap;\n",
       "      word-break: break-word;\n",
       "      color: black;\n",
       "      background-color: white;\n",
       "      border-radius: 4px;\n",
       "      border: 1px solid #ccc;\n",
       "      box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.2);\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    #iSVAmWn6OJW87vNvL-menu-toggle-button, #iSVAmWn6OJW87vNvL-details-toggle-button, #iSVAmWn6OJW87vNvL-progress-container {\n",
       "      font-size: 14px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      z-index: 42000;\n",
       "      cursor: pointer;\n",
       "      position: absolute;\n",
       "      background-color: white;\n",
       "      border-radius: 4px;\n",
       "      box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.2);\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    #iSVAmWn6OJW87vNvL-menu-toggle-button {\n",
       "      top: 0;\n",
       "      right: 0;\n",
       "      padding-left: 6px;\n",
       "      padding-right: 6px;\n",
       "      padding-top: 12px;\n",
       "      padding-bottom: 12px;\n",
       "      border-top: 0px;\n",
       "      border-right: 0px;\n",
       "      border-bottom: 1px solid #ccc;\n",
       "      border-left: 1px solid #ccc;\n",
       "    }\n",
       "    #iSVAmWn6OJW87vNvL-details-toggle-button {\n",
       "      bottom: 0;\n",
       "      left: 0;\n",
       "      padding-left: 19px;\n",
       "      padding-right: 19px;\n",
       "      padding-top: 0.5px;\n",
       "      padding-bottom: 2px;\n",
       "      border-top: 1px solid #ccc;\n",
       "      border-right: 1px solid #ccc;\n",
       "      border-bottom: 0px;\n",
       "      border-left: 0px;\n",
       "    }\n",
       "    #iSVAmWn6OJW87vNvL-progress-container {\n",
       "      font-size: 10px;\n",
       "      text-align: center;\n",
       "      top: 46%;\n",
       "      left: 15%;\n",
       "      width: 70%;\n",
       "      padding: 8px;\n",
       "      border: none;\n",
       "      box-shadow: none;\n",
       "    }\n",
       "\n",
       "    /* Details */\n",
       "    #iSVAmWn6OJW87vNvL-details-user-provided {\n",
       "      margin-top: 3px;\n",
       "      padding-top: 3.5px;\n",
       "      border-top: 0.5px dashed black;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "      white-space: pre-wrap;\n",
       "      word-break: break-word;\n",
       "    }\n",
       "    #iSVAmWn6OJW87vNvL-details-user-provided ul {\n",
       "      list-style-position: inside;\n",
       "      padding-left: 6px;\n",
       "    }\n",
       "\n",
       "    /* Unavailable in vis.js and therefore hidden */\n",
       "    #iSVAmWn6OJW87vNvL-svg,\n",
       "    #iSVAmWn6OJW87vNvL-node-label-rotation,\n",
       "    #iSVAmWn6OJW87vNvL-edge-label-rotation {\n",
       "      display: none;\n",
       "    }\n",
       "    /* Specific to vis.js */\n",
       "    div.vis-tooltip {\n",
       "      position: absolute;\n",
       "      visibility: hidden;\n",
       "      pointer-events: none;\n",
       "      z-index: 5;\n",
       "      max-width: 40%;\n",
       "      white-space: pre-wrap;\n",
       "      word-break: break-word;\n",
       "      font-size: 10px;\n",
       "      padding: 5px;\n",
       "      color: black;\n",
       "      background-color: white;\n",
       "      -moz-border-radius: 3px;\n",
       "      -webkit-border-radius: 3px;\n",
       "      border-radius: 3px;\n",
       "      border: 0.5px solid black;\n",
       "      box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.3);\n",
       "    }\n",
       "  </style>\n",
       "\n",
       "  <div id=\"iSVAmWn6OJW87vNvL-main-div\">\n",
       "    <div id=\"iSVAmWn6OJW87vNvL-tooltip-div\"></div>\n",
       "\n",
       "    <div id=\"iSVAmWn6OJW87vNvL-left-div\">\n",
       "      <div id=\"iSVAmWn6OJW87vNvL-left-inner-div\">\n",
       "        <div id=\"iSVAmWn6OJW87vNvL-graph-div\"></div>\n",
       "        <div id=\"iSVAmWn6OJW87vNvL-details-div\">\n",
       "          <div id=\"iSVAmWn6OJW87vNvL-details-head\">\n",
       "            Details for selected element\n",
       "          </div>\n",
       "          <div id=\"iSVAmWn6OJW87vNvL-details-body\">\n",
       "          </div>\n",
       "        </div>\n",
       "      </div>\n",
       "    </div>\n",
       "\n",
       "    <div id=\"iSVAmWn6OJW87vNvL-right-div\">\n",
       "      <div id=\"iSVAmWn6OJW87vNvL-right-inner-div\">\n",
       "        <!-- Menu: General -->\n",
       "        <div class=\"iSVAmWn6OJW87vNvL-menu-item-head\"\n",
       "             id=\"iSVAmWn6OJW87vNvL-general-head\">\n",
       "          General\n",
       "        </div>\n",
       "        <div class=\"iSVAmWn6OJW87vNvL-menu-item-body\"\n",
       "             id=\"iSVAmWn6OJW87vNvL-general-body\">\n",
       "          <!-- Sub-menu: State -->\n",
       "          <div>\n",
       "            <div class=\"iSVAmWn6OJW87vNvL-menu-subitem-head\">\n",
       "              App state\n",
       "            </div>\n",
       "            <div class=\"iSVAmWn6OJW87vNvL-menu-subitem-body\">\n",
       "              <button class=\"iSVAmWn6OJW87vNvL-button\"\n",
       "                      id=\"iSVAmWn6OJW87vNvL-reset\"\n",
       "                      type=\"button\">Reset</button>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Display mode (fullscreen or not) -->\n",
       "          <div>\n",
       "            <div class=\"iSVAmWn6OJW87vNvL-menu-subitem-head\">\n",
       "              Display mode\n",
       "            </div>\n",
       "            <div class=\"iSVAmWn6OJW87vNvL-menu-subitem-body\">\n",
       "              <button class=\"iSVAmWn6OJW87vNvL-button\"\n",
       "                      id=\"iSVAmWn6OJW87vNvL-fullscreen-button\"\n",
       "                      type=\"button\">Enter full screen</button>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Export -->\n",
       "          <div>\n",
       "            <div class=\"iSVAmWn6OJW87vNvL-menu-subitem-head\">\n",
       "              Export\n",
       "            </div>\n",
       "            <div class=\"iSVAmWn6OJW87vNvL-menu-subitem-body\">\n",
       "              <button class=\"iSVAmWn6OJW87vNvL-button\"\n",
       "                      id=\"iSVAmWn6OJW87vNvL-svg\"\n",
       "                      type=\"button\">SVG</button>\n",
       "              <button class=\"iSVAmWn6OJW87vNvL-button\"\n",
       "                      id=\"iSVAmWn6OJW87vNvL-png\"\n",
       "                      type=\"button\">PNG</button>\n",
       "              <button class=\"iSVAmWn6OJW87vNvL-button\"\n",
       "                      id=\"iSVAmWn6OJW87vNvL-jpg\"\n",
       "                      type=\"button\">JPG</button>\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "        <!-- Menu: Data -->\n",
       "        <div class=\"iSVAmWn6OJW87vNvL-menu-item-head\"\n",
       "             id=\"iSVAmWn6OJW87vNvL-data-head\">\n",
       "          Data selection\n",
       "        </div>\n",
       "        <div class=\"iSVAmWn6OJW87vNvL-menu-item-body\"\n",
       "             id=\"iSVAmWn6OJW87vNvL-data-body\">\n",
       "          <!-- Sub-menu: Graph (only shown if multiple graphs in data) -->\n",
       "          <div id=\"iSVAmWn6OJW87vNvL-graph-select-div\">\n",
       "            <div class=\"iSVAmWn6OJW87vNvL-menu-subitem-head\">\n",
       "              Graph\n",
       "            </div>\n",
       "            <div class=\"iSVAmWn6OJW87vNvL-menu-subitem-body\">\n",
       "              <select class=\"iSVAmWn6OJW87vNvL-select\"\n",
       "                      id=\"iSVAmWn6OJW87vNvL-graph-select\"></select>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Node label text -->\n",
       "          <div>\n",
       "            <div class=\"iSVAmWn6OJW87vNvL-menu-subitem-head\">\n",
       "              Node label text\n",
       "            </div>\n",
       "            <div class=\"iSVAmWn6OJW87vNvL-menu-subitem-body\">\n",
       "              <select class=\"iSVAmWn6OJW87vNvL-select\"\n",
       "                      id=\"iSVAmWn6OJW87vNvL-node-label-data-source-select\"></select>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Edge label text -->\n",
       "          <div>\n",
       "            <div class=\"iSVAmWn6OJW87vNvL-menu-subitem-head\">\n",
       "              Edge label text\n",
       "            </div>\n",
       "            <div class=\"iSVAmWn6OJW87vNvL-menu-subitem-body\">\n",
       "              <select class=\"iSVAmWn6OJW87vNvL-select\"\n",
       "                      id=\"iSVAmWn6OJW87vNvL-edge-label-data-source-select\"></select>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Node size -->\n",
       "          <div class=\"iSVAmWn6OJW87vNvL-menu-subitem-head\">\n",
       "            Node size\n",
       "          </div>\n",
       "          <div class=\"iSVAmWn6OJW87vNvL-menu-subitem-body\">\n",
       "            <div>\n",
       "              <select class=\"iSVAmWn6OJW87vNvL-select\"\n",
       "                      id=\"iSVAmWn6OJW87vNvL-node-size-data-source-select\"></select>\n",
       "            </div>\n",
       "            <div class=\"iSVAmWn6OJW87vNvL-labeled-input\">\n",
       "              <input class=\"iSVAmWn6OJW87vNvL-checkbox\"\n",
       "                     id=\"iSVAmWn6OJW87vNvL-node-size-normalization-checkbox\"\n",
       "                     type=\"checkbox\">\n",
       "              <label class=\"iSVAmWn6OJW87vNvL-label\"\n",
       "                     for=\"iSVAmWn6OJW87vNvL-node-size-normalization-checkbox\">Normalize</label>\n",
       "            </div>\n",
       "            <div id=\"iSVAmWn6OJW87vNvL-node-size-norm-div\">\n",
       "              <div>\n",
       "                <span class=\"iSVAmWn6OJW87vNvL-slider-text-left\">Minimum</span>\n",
       "                <span class=\"iSVAmWn6OJW87vNvL-slider-text-right\"\n",
       "                      id=\"iSVAmWn6OJW87vNvL-node-size-normalization-min-text\"></span>\n",
       "                <input class=\"iSVAmWn6OJW87vNvL-slider\"\n",
       "                       id=\"iSVAmWn6OJW87vNvL-node-size-normalization-min-slider\"\n",
       "                       type=\"range\" min=\"0.01\" max=\"300.0\" step=\"0.01\">\n",
       "              </div>\n",
       "              <div>\n",
       "                <span class=\"iSVAmWn6OJW87vNvL-slider-text-left\">Maximum</span>\n",
       "                <span class=\"iSVAmWn6OJW87vNvL-slider-text-right\"\n",
       "                      id=\"iSVAmWn6OJW87vNvL-node-size-normalization-max-text\"></span>\n",
       "                <input class=\"iSVAmWn6OJW87vNvL-slider\"\n",
       "                       id=\"iSVAmWn6OJW87vNvL-node-size-normalization-max-slider\"\n",
       "                       type=\"range\" min=\"0.01\" max=\"300.0\" step=\"0.01\">\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Edge size -->\n",
       "          <div class=\"iSVAmWn6OJW87vNvL-menu-subitem-head\">\n",
       "            Edge size\n",
       "          </div>\n",
       "          <div class=\"iSVAmWn6OJW87vNvL-menu-subitem-body\">\n",
       "            <div>\n",
       "              <select class=\"iSVAmWn6OJW87vNvL-select\"\n",
       "                      id=\"iSVAmWn6OJW87vNvL-edge-size-data-source-select\"></select>\n",
       "            </div>\n",
       "            <div class=\"iSVAmWn6OJW87vNvL-labeled-input\">\n",
       "              <input class=\"iSVAmWn6OJW87vNvL-checkbox\"\n",
       "                     id=\"iSVAmWn6OJW87vNvL-edge-size-normalization-checkbox\"\n",
       "                     type=\"checkbox\">\n",
       "              <label class=\"iSVAmWn6OJW87vNvL-label\"\n",
       "                     for=\"iSVAmWn6OJW87vNvL-edge-size-normalization-checkbox\">Normalize</label>\n",
       "            </div>\n",
       "            <div id=\"iSVAmWn6OJW87vNvL-edge-size-norm-div\">\n",
       "              <div>\n",
       "                <span class=\"iSVAmWn6OJW87vNvL-slider-text-left\">Minimum</span>\n",
       "                <span class=\"iSVAmWn6OJW87vNvL-slider-text-right\"\n",
       "                      id=\"iSVAmWn6OJW87vNvL-edge-size-normalization-min-text\"></span>\n",
       "                <input class=\"iSVAmWn6OJW87vNvL-slider\"\n",
       "                       id=\"iSVAmWn6OJW87vNvL-edge-size-normalization-min-slider\"\n",
       "                       type=\"range\" min=\"0.01\" max=\"50.0\" step=\"0.01\">\n",
       "              </div>\n",
       "              <div>\n",
       "                <span class=\"iSVAmWn6OJW87vNvL-slider-text-left\">Maximum</span>\n",
       "                <span class=\"iSVAmWn6OJW87vNvL-slider-text-right\"\n",
       "                      id=\"iSVAmWn6OJW87vNvL-edge-size-normalization-max-text\"></span>\n",
       "                <input class=\"iSVAmWn6OJW87vNvL-slider\"\n",
       "                       id=\"iSVAmWn6OJW87vNvL-edge-size-normalization-max-slider\"\n",
       "                       type=\"range\" min=\"0.01\" max=\"50.0\" step=\"0.01\">\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "        <!-- Menu: Nodes -->\n",
       "        <div class=\"iSVAmWn6OJW87vNvL-menu-item-head\"\n",
       "             id=\"iSVAmWn6OJW87vNvL-node-head\">\n",
       "          Nodes\n",
       "        </div>\n",
       "        <div class=\"iSVAmWn6OJW87vNvL-menu-item-body\"\n",
       "             id=\"iSVAmWn6OJW87vNvL-node-body\">\n",
       "          <!-- Sub-menu: Visibility -->\n",
       "          <div>\n",
       "            <div class=\"iSVAmWn6OJW87vNvL-menu-subitem-head\">\n",
       "              Visibility\n",
       "            </div>\n",
       "            <div class=\"iSVAmWn6OJW87vNvL-menu-subitem-body\">\n",
       "              <div class=\"iSVAmWn6OJW87vNvL-labeled-input\">\n",
       "                <input class=\"iSVAmWn6OJW87vNvL-checkbox\"\n",
       "                       id=\"iSVAmWn6OJW87vNvL-node-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"iSVAmWn6OJW87vNvL-label\"\n",
       "                       for=\"iSVAmWn6OJW87vNvL-node-checkbox\">Show nodes</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Size -->\n",
       "          <div>\n",
       "            <div class=\"iSVAmWn6OJW87vNvL-menu-subitem-head\">\n",
       "              Size\n",
       "            </div>\n",
       "            <div class=\"iSVAmWn6OJW87vNvL-menu-subitem-body\">\n",
       "              <div>\n",
       "                <span class=\"iSVAmWn6OJW87vNvL-slider-text-left\">Scaling factor</span>\n",
       "                <span class=\"iSVAmWn6OJW87vNvL-slider-text-right\"\n",
       "                      id=\"iSVAmWn6OJW87vNvL-node-size-factor-text\"></span>\n",
       "                <input class=\"iSVAmWn6OJW87vNvL-slider\"\n",
       "                       id=\"iSVAmWn6OJW87vNvL-node-size-factor-slider\"\n",
       "                       type=\"range\" min=\"0.01\" max=\"5.0\" step=\"0.01\">\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Position -->\n",
       "          <div>\n",
       "            <div class=\"iSVAmWn6OJW87vNvL-menu-subitem-head\">\n",
       "              Position\n",
       "            </div>\n",
       "            <div class=\"iSVAmWn6OJW87vNvL-menu-subitem-body\">\n",
       "              <button class=\"iSVAmWn6OJW87vNvL-button\"\n",
       "                      id=\"iSVAmWn6OJW87vNvL-node-release-button\"\n",
       "                      type=\"button\">Release fixed nodes</button>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Drag behavior -->\n",
       "          <div>\n",
       "            <div class=\"iSVAmWn6OJW87vNvL-menu-subitem-head\">\n",
       "              Drag behavior\n",
       "            </div>\n",
       "            <div class=\"iSVAmWn6OJW87vNvL-menu-subitem-body\">\n",
       "              <div class=\"iSVAmWn6OJW87vNvL-labeled-input\">\n",
       "                <input class=\"iSVAmWn6OJW87vNvL-checkbox\"\n",
       "                       id=\"iSVAmWn6OJW87vNvL-node-drag-fix-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"iSVAmWn6OJW87vNvL-label\"\n",
       "                       for=\"iSVAmWn6OJW87vNvL-node-drag-fix-checkbox\">Fix node position</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Hover behavior -->\n",
       "          <div>\n",
       "            <div class=\"iSVAmWn6OJW87vNvL-menu-subitem-head\">\n",
       "              Hover behavior\n",
       "            </div>\n",
       "            <div class=\"iSVAmWn6OJW87vNvL-menu-subitem-body\">\n",
       "              <div class=\"iSVAmWn6OJW87vNvL-labeled-input\">\n",
       "                <input class=\"iSVAmWn6OJW87vNvL-checkbox\"\n",
       "                       id=\"iSVAmWn6OJW87vNvL-node-hover-neighborhood-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"iSVAmWn6OJW87vNvL-label\"\n",
       "                       for=\"iSVAmWn6OJW87vNvL-node-hover-neighborhood-checkbox\">Show neighborhood</label>\n",
       "              </div>\n",
       "              <div class=\"iSVAmWn6OJW87vNvL-labeled-input\">\n",
       "                <input class=\"iSVAmWn6OJW87vNvL-checkbox\"\n",
       "                       id=\"iSVAmWn6OJW87vNvL-node-hover-tooltip-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"iSVAmWn6OJW87vNvL-label\"\n",
       "                       for=\"iSVAmWn6OJW87vNvL-node-hover-tooltip-checkbox\">Show tooltips (if provided)</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "        <!-- Menu: Node images -->\n",
       "        <div id=\"iSVAmWn6OJW87vNvL-node-image-meta-control\">\n",
       "          <div class=\"iSVAmWn6OJW87vNvL-menu-item-head\"\n",
       "               id=\"iSVAmWn6OJW87vNvL-node-image-head\">\n",
       "            Node images\n",
       "          </div>\n",
       "          <div class=\"iSVAmWn6OJW87vNvL-menu-item-body\"\n",
       "               id=\"iSVAmWn6OJW87vNvL-node-image-body\">\n",
       "            <!-- Sub-menu: Visibility -->\n",
       "            <div>\n",
       "              <div class=\"iSVAmWn6OJW87vNvL-menu-subitem-head\">\n",
       "                Visibility\n",
       "              </div>\n",
       "              <div class=\"iSVAmWn6OJW87vNvL-menu-subitem-body\">\n",
       "                <div class=\"iSVAmWn6OJW87vNvL-labeled-input\">\n",
       "                  <input class=\"iSVAmWn6OJW87vNvL-checkbox\"\n",
       "                         id=\"iSVAmWn6OJW87vNvL-node-image-checkbox\"\n",
       "                         type=\"checkbox\">\n",
       "                  <label class=\"iSVAmWn6OJW87vNvL-label\"\n",
       "                         for=\"iSVAmWn6OJW87vNvL-node-image-checkbox\">Show node images</label>\n",
       "                </div>\n",
       "              </div>\n",
       "            </div>\n",
       "            <!-- Sub-menu: Size -->\n",
       "            <div>\n",
       "              <div class=\"iSVAmWn6OJW87vNvL-menu-subitem-head\">\n",
       "                Size\n",
       "              </div>\n",
       "              <div class=\"iSVAmWn6OJW87vNvL-menu-subitem-body\">\n",
       "                <span class=\"iSVAmWn6OJW87vNvL-slider-text-left\">Scaling factor</span>\n",
       "                <span class=\"iSVAmWn6OJW87vNvL-slider-text-right\"\n",
       "                      id=\"iSVAmWn6OJW87vNvL-node-image-size-factor-text\"></span>\n",
       "                <input class=\"iSVAmWn6OJW87vNvL-slider\"\n",
       "                       id=\"iSVAmWn6OJW87vNvL-node-image-size-factor-slider\"\n",
       "                       type=\"range\" min=\"0.01\" max=\"5.0\" step=\"0.01\">\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "        <!-- Menu: Node labels -->\n",
       "        <div class=\"iSVAmWn6OJW87vNvL-menu-item-head\"\n",
       "             id=\"iSVAmWn6OJW87vNvL-node-label-head\">\n",
       "          Node labels\n",
       "        </div>\n",
       "        <div class=\"iSVAmWn6OJW87vNvL-menu-item-body\"\n",
       "             id=\"iSVAmWn6OJW87vNvL-node-label-body\">\n",
       "          <!-- Sub-menu: Visibility -->\n",
       "          <div>\n",
       "            <div class=\"iSVAmWn6OJW87vNvL-menu-subitem-head\">\n",
       "              Visibility\n",
       "            </div>\n",
       "            <div class=\"iSVAmWn6OJW87vNvL-menu-subitem-body\">\n",
       "              <div class=\"iSVAmWn6OJW87vNvL-labeled-input\">\n",
       "                <input class=\"iSVAmWn6OJW87vNvL-checkbox\"\n",
       "                       id=\"iSVAmWn6OJW87vNvL-node-label-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"iSVAmWn6OJW87vNvL-label\"\n",
       "                       for=\"iSVAmWn6OJW87vNvL-node-label-checkbox\">Show node labels</label>\n",
       "              </div>\n",
       "              <div class=\"iSVAmWn6OJW87vNvL-labeled-input\">\n",
       "                <input class=\"iSVAmWn6OJW87vNvL-checkbox\"\n",
       "                       id=\"iSVAmWn6OJW87vNvL-node-label-border-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"iSVAmWn6OJW87vNvL-label\"\n",
       "                       for=\"iSVAmWn6OJW87vNvL-node-label-border-checkbox\">Show borders</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Size -->\n",
       "          <div>\n",
       "            <div class=\"iSVAmWn6OJW87vNvL-menu-subitem-head\">\n",
       "              Size\n",
       "            </div>\n",
       "            <div class=\"iSVAmWn6OJW87vNvL-menu-subitem-body\">\n",
       "              <span class=\"iSVAmWn6OJW87vNvL-slider-text-left\">Scaling factor</span>\n",
       "              <span class=\"iSVAmWn6OJW87vNvL-slider-text-right\"\n",
       "                    id=\"iSVAmWn6OJW87vNvL-node-label-size-factor-text\"></span>\n",
       "              <input class=\"iSVAmWn6OJW87vNvL-slider\"\n",
       "                     id=\"iSVAmWn6OJW87vNvL-node-label-size-factor-slider\"\n",
       "                     type=\"range\" min=\"0.01\" max=\"5.0\" step=\"0.01\">\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Rotation -->\n",
       "          <div id=\"iSVAmWn6OJW87vNvL-node-label-rotation\">\n",
       "            <div class=\"iSVAmWn6OJW87vNvL-menu-subitem-head\">\n",
       "              Rotation\n",
       "            </div>\n",
       "            <div class=\"iSVAmWn6OJW87vNvL-menu-subitem-body\">\n",
       "              <span class=\"iSVAmWn6OJW87vNvL-slider-text-left\">Angle</span>\n",
       "              <span class=\"iSVAmWn6OJW87vNvL-slider-text-right\"\n",
       "                    id=\"iSVAmWn6OJW87vNvL-node-label-rotation-text\"></span>\n",
       "              <input class=\"iSVAmWn6OJW87vNvL-slider\"\n",
       "                     id=\"iSVAmWn6OJW87vNvL-node-label-rotation-slider\"\n",
       "                     type=\"range\" min=\"0.0\" max=\"359.0\" step=\"1.0\">\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "        <!-- Menu: Edges -->\n",
       "        <div class=\"iSVAmWn6OJW87vNvL-menu-item-head\"\n",
       "             id=\"iSVAmWn6OJW87vNvL-edge-head\">\n",
       "          Edges\n",
       "        </div>\n",
       "        <div class=\"iSVAmWn6OJW87vNvL-menu-item-body\"\n",
       "             id=\"iSVAmWn6OJW87vNvL-edge-body\">\n",
       "          <!-- Sub-menu: Visibility -->\n",
       "          <div>\n",
       "            <div class=\"iSVAmWn6OJW87vNvL-menu-subitem-head\">\n",
       "              Visibility\n",
       "            </div>\n",
       "            <div class=\"iSVAmWn6OJW87vNvL-menu-subitem-body\">\n",
       "              <div class=\"iSVAmWn6OJW87vNvL-labeled-input\">\n",
       "                <input class=\"iSVAmWn6OJW87vNvL-checkbox\"\n",
       "                       id=\"iSVAmWn6OJW87vNvL-edge-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"iSVAmWn6OJW87vNvL-label\"\n",
       "                       for=\"iSVAmWn6OJW87vNvL-edge-checkbox\">Show edges</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Size -->\n",
       "          <div>\n",
       "            <div class=\"iSVAmWn6OJW87vNvL-menu-subitem-head\">\n",
       "              Size\n",
       "            </div>\n",
       "            <div class=\"iSVAmWn6OJW87vNvL-menu-subitem-body\">\n",
       "              <span class=\"iSVAmWn6OJW87vNvL-slider-text-left\">Scaling factor</span>\n",
       "              <span class=\"iSVAmWn6OJW87vNvL-slider-text-right\"\n",
       "                    id=\"iSVAmWn6OJW87vNvL-edge-size-factor-text\"></span>\n",
       "              <input class=\"iSVAmWn6OJW87vNvL-slider\"\n",
       "                     id=\"iSVAmWn6OJW87vNvL-edge-size-factor-slider\"\n",
       "                     type=\"range\" min=\"0.01\" max=\"5.0\" step=\"0.01\">\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Form -->\n",
       "          <div>\n",
       "            <div class=\"iSVAmWn6OJW87vNvL-menu-subitem-head\">\n",
       "              Form\n",
       "            </div>\n",
       "            <div class=\"iSVAmWn6OJW87vNvL-menu-subitem-body\">\n",
       "              <span class=\"iSVAmWn6OJW87vNvL-slider-text-left\">Curvature</span>\n",
       "              <span class=\"iSVAmWn6OJW87vNvL-slider-text-right\"\n",
       "                    id=\"iSVAmWn6OJW87vNvL-edge-curvature-text\"></span>\n",
       "              <input class=\"iSVAmWn6OJW87vNvL-slider\"\n",
       "                     id=\"iSVAmWn6OJW87vNvL-edge-curvature-slider\"\n",
       "                     type=\"range\" min=\"-1.2\" max=\"1.2\" step=\"0.02\">\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Hover behavior -->\n",
       "          <div>\n",
       "            <div class=\"iSVAmWn6OJW87vNvL-menu-subitem-head\">\n",
       "              Hover behavior\n",
       "            </div>\n",
       "            <div class=\"iSVAmWn6OJW87vNvL-menu-subitem-body\">\n",
       "              <div class=\"iSVAmWn6OJW87vNvL-labeled-input\">\n",
       "                <input class=\"iSVAmWn6OJW87vNvL-checkbox\"\n",
       "                       id=\"iSVAmWn6OJW87vNvL-edge-hover-tooltip-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"iSVAmWn6OJW87vNvL-label\"\n",
       "                       for=\"iSVAmWn6OJW87vNvL-edge-hover-tooltip-checkbox\">Show tooltips (if provided)</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "        <!-- Menu: Edge labels -->\n",
       "        <div class=\"iSVAmWn6OJW87vNvL-menu-item-head\"\n",
       "             id=\"iSVAmWn6OJW87vNvL-edge-label-head\">\n",
       "          Edge labels\n",
       "        </div>\n",
       "        <div class=\"iSVAmWn6OJW87vNvL-menu-item-body\"\n",
       "             id=\"iSVAmWn6OJW87vNvL-edge-label-body\">\n",
       "          <!-- Sub-menu: Visibility -->\n",
       "          <div>\n",
       "            <div class=\"iSVAmWn6OJW87vNvL-menu-subitem-head\">\n",
       "              Visibility\n",
       "            </div>\n",
       "            <div class=\"iSVAmWn6OJW87vNvL-menu-subitem-body\">\n",
       "              <div class=\"iSVAmWn6OJW87vNvL-labeled-input\">\n",
       "                <input class=\"iSVAmWn6OJW87vNvL-checkbox\"\n",
       "                       id=\"iSVAmWn6OJW87vNvL-edge-label-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"iSVAmWn6OJW87vNvL-label\"\n",
       "                       for=\"iSVAmWn6OJW87vNvL-edge-label-checkbox\">Show edge labels</label>\n",
       "              </div>\n",
       "              <div class=\"iSVAmWn6OJW87vNvL-labeled-input\">\n",
       "                <input class=\"iSVAmWn6OJW87vNvL-checkbox\"\n",
       "                       id=\"iSVAmWn6OJW87vNvL-edge-label-border-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"iSVAmWn6OJW87vNvL-label\"\n",
       "                       for=\"iSVAmWn6OJW87vNvL-edge-label-border-checkbox\">Show borders</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Size -->\n",
       "          <div>\n",
       "            <div class=\"iSVAmWn6OJW87vNvL-menu-subitem-head\">\n",
       "              Size\n",
       "            </div>\n",
       "            <div class=\"iSVAmWn6OJW87vNvL-menu-subitem-body\">\n",
       "              <span class=\"iSVAmWn6OJW87vNvL-slider-text-left\">Scaling factor</span>\n",
       "              <span class=\"iSVAmWn6OJW87vNvL-slider-text-right\"\n",
       "                    id=\"iSVAmWn6OJW87vNvL-edge-label-size-factor-text\"></span>\n",
       "              <input class=\"iSVAmWn6OJW87vNvL-slider\"\n",
       "                     id=\"iSVAmWn6OJW87vNvL-edge-label-size-factor-slider\"\n",
       "                     type=\"range\" min=\"0.01\" max=\"5.0\" step=\"0.01\">\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Rotation -->\n",
       "          <div id=\"iSVAmWn6OJW87vNvL-edge-label-rotation\">\n",
       "            <div class=\"iSVAmWn6OJW87vNvL-menu-subitem-head\">\n",
       "              Rotation\n",
       "            </div>\n",
       "            <div class=\"iSVAmWn6OJW87vNvL-menu-subitem-body\">\n",
       "              <span class=\"iSVAmWn6OJW87vNvL-slider-text-left\">Angle</span>\n",
       "              <span class=\"iSVAmWn6OJW87vNvL-slider-text-right\"\n",
       "                      id=\"iSVAmWn6OJW87vNvL-edge-label-rotation-text\"></span>\n",
       "              <input class=\"iSVAmWn6OJW87vNvL-slider\"\n",
       "                     id=\"iSVAmWn6OJW87vNvL-edge-label-rotation-slider\"\n",
       "                     type=\"range\" min=\"0.0\" max=\"359.0\" step=\"1.0\">\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "        <!-- Menu: Layout algorithm -->\n",
       "        <div class=\"iSVAmWn6OJW87vNvL-menu-item-head\"\n",
       "             id=\"iSVAmWn6OJW87vNvL-layout-algorithm-head\">\n",
       "          Layout algorithm\n",
       "        </div>\n",
       "        <div class=\"iSVAmWn6OJW87vNvL-menu-item-body\"\n",
       "             id=\"iSVAmWn6OJW87vNvL-layout-algorithm-body\">\n",
       "          <!-- Sub-menu: Simulation -->\n",
       "          <div>\n",
       "            <div class=\"iSVAmWn6OJW87vNvL-menu-subitem-head\">\n",
       "              Simulation\n",
       "            </div>\n",
       "            <div class=\"iSVAmWn6OJW87vNvL-menu-subitem-body\">\n",
       "              <div class=\"iSVAmWn6OJW87vNvL-labeled-input\">\n",
       "                <input class=\"iSVAmWn6OJW87vNvL-checkbox\"\n",
       "                       id=\"iSVAmWn6OJW87vNvL-simulation-active-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"iSVAmWn6OJW87vNvL-label\"\n",
       "                       for=\"iSVAmWn6OJW87vNvL-simulation-active-checkbox\">Active</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Algorithm -->\n",
       "          <div>\n",
       "            <div class=\"iSVAmWn6OJW87vNvL-menu-subitem-head\">\n",
       "              Algorithm\n",
       "            </div>\n",
       "            <div class=\"iSVAmWn6OJW87vNvL-menu-subitem-body\">\n",
       "              <div>\n",
       "                <select class=\"iSVAmWn6OJW87vNvL-select\"\n",
       "                        id=\"iSVAmWn6OJW87vNvL-layout-algorithm-select\"></select>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Parameters -->\n",
       "          <div>\n",
       "            <div class=\"iSVAmWn6OJW87vNvL-menu-subitem-head\">\n",
       "              Parameters\n",
       "            </div>\n",
       "            <div class=\"iSVAmWn6OJW87vNvL-menu-subitem-body\">\n",
       "              <div id=\"iSVAmWn6OJW87vNvL-gravitational-constant-div\">\n",
       "                <span class=\"iSVAmWn6OJW87vNvL-slider-text-left\">Gravitational constant</span>\n",
       "                <span class=\"iSVAmWn6OJW87vNvL-slider-text-right\"\n",
       "                      id=\"iSVAmWn6OJW87vNvL-gravitational-constant-text\"></span>\n",
       "                <input class=\"iSVAmWn6OJW87vNvL-slider\"\n",
       "                       id=\"iSVAmWn6OJW87vNvL-gravitational-constant-slider\"\n",
       "                       type=\"range\" min=\"-50000\" max=\"0\" step=\"1\"\n",
       "                       style=\"direction:rtl;\">\n",
       "              </div>\n",
       "              <div id=\"iSVAmWn6OJW87vNvL-spring-length-div\">\n",
       "                <span class=\"iSVAmWn6OJW87vNvL-slider-text-left\">Spring length</span>\n",
       "                <span class=\"iSVAmWn6OJW87vNvL-slider-text-right\"\n",
       "                      id=\"iSVAmWn6OJW87vNvL-spring-length-text\"></span>\n",
       "                <input class=\"iSVAmWn6OJW87vNvL-slider\"\n",
       "                       id=\"iSVAmWn6OJW87vNvL-spring-length-slider\"\n",
       "                       type=\"range\" min=\"0.0\" max=\"500\" step=\"0.1\">\n",
       "              </div>\n",
       "              <div id=\"iSVAmWn6OJW87vNvL-spring-constant-div\">\n",
       "                <span class=\"iSVAmWn6OJW87vNvL-slider-text-left\">Spring constant</span>\n",
       "                <span class=\"iSVAmWn6OJW87vNvL-slider-text-right\"\n",
       "                      id=\"iSVAmWn6OJW87vNvL-spring-constant-text\"></span>\n",
       "                <input class=\"iSVAmWn6OJW87vNvL-slider\"\n",
       "                       id=\"iSVAmWn6OJW87vNvL-spring-constant-slider\"\n",
       "                       type=\"range\" min=\"0.0\" max=\"1.0\" step=\"0.01\">\n",
       "              </div>\n",
       "              <div id=\"iSVAmWn6OJW87vNvL-avoid-overlap-div\">\n",
       "                <span class=\"iSVAmWn6OJW87vNvL-slider-text-left\">Avoid overlap</span>\n",
       "                <span class=\"iSVAmWn6OJW87vNvL-slider-text-right\"\n",
       "                      id=\"iSVAmWn6OJW87vNvL-avoid-overlap-text\"></span>\n",
       "                <input class=\"iSVAmWn6OJW87vNvL-slider\"\n",
       "                       id=\"iSVAmWn6OJW87vNvL-avoid-overlap-slider\"\n",
       "                       type=\"range\" min=\"0.0\" max=\"1.0\" step=\"0.01\">\n",
       "              </div>\n",
       "              <div id=\"iSVAmWn6OJW87vNvL-central-gravity-div\">\n",
       "                <span class=\"iSVAmWn6OJW87vNvL-slider-text-left\">Central gravity</span>\n",
       "                <span class=\"iSVAmWn6OJW87vNvL-slider-text-right\"\n",
       "                      id=\"iSVAmWn6OJW87vNvL-central-gravity-text\"></span>\n",
       "                <input class=\"iSVAmWn6OJW87vNvL-slider\"\n",
       "                       id=\"iSVAmWn6OJW87vNvL-central-gravity-slider\"\n",
       "                       type=\"range\" min=\"0.0\" max=\"10.0\" step=\"0.001\">\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "      </div>\n",
       "    </div>\n",
       "  </div>\n",
       "\n",
       "  <script charset=\"utf-8\" type=\"text/javascript\">\n",
       "    if(typeof(require) === \"undefined\"){\n",
       "      // Project sites:    https://requirejs.org\n",
       "//                   https://github.com/requirejs/requirejs\n",
       "// Code source:      https://requirejs.org/docs/release/2.3.6/minified/require.js - accessed on 19.11.2020\n",
       "// Original license: MIT\n",
       "// Code changes:     None\n",
       "\n",
       "/** vim: et:ts=4:sw=4:sts=4\n",
       " * @license RequireJS 2.3.6 Copyright jQuery Foundation and other contributors.\n",
       " * Released under MIT license, https://github.com/requirejs/requirejs/blob/master/LICENSE\n",
       " */\n",
       "var requirejs,require,define;!function(global,setTimeout){var req,s,head,baseElement,dataMain,src,interactiveScript,currentlyAddingScript,mainScript,subPath,version=\"2.3.6\",commentRegExp=/\\/\\*[\\s\\S]*?\\*\\/|([^:\"'=]|^)\\/\\/.*$/gm,cjsRequireRegExp=/[^.]\\s*require\\s*\\(\\s*[\"']([^'\"\\s]+)[\"']\\s*\\)/g,jsSuffixRegExp=/\\.js$/,currDirRegExp=/^\\.\\//,op=Object.prototype,ostring=op.toString,hasOwn=op.hasOwnProperty,isBrowser=!(\"undefined\"==typeof window||\"undefined\"==typeof navigator||!window.document),isWebWorker=!isBrowser&&\"undefined\"!=typeof importScripts,readyRegExp=isBrowser&&\"PLAYSTATION 3\"===navigator.platform?/^complete$/:/^(complete|loaded)$/,defContextName=\"_\",isOpera=\"undefined\"!=typeof opera&&\"[object Opera]\"===opera.toString(),contexts={},cfg={},globalDefQueue=[],useInteractive=!1;function commentReplace(e,t){return t||\"\"}function isFunction(e){return\"[object Function]\"===ostring.call(e)}function isArray(e){return\"[object Array]\"===ostring.call(e)}function each(e,t){var i;if(e)for(i=0;i<e.length&&(!e[i]||!t(e[i],i,e));i+=1);}function eachReverse(e,t){var i;if(e)for(i=e.length-1;-1<i&&(!e[i]||!t(e[i],i,e));i-=1);}function hasProp(e,t){return hasOwn.call(e,t)}function getOwn(e,t){return hasProp(e,t)&&e[t]}function eachProp(e,t){var i;for(i in e)if(hasProp(e,i)&&t(e[i],i))break}function mixin(i,e,r,n){return e&&eachProp(e,function(e,t){!r&&hasProp(i,t)||(!n||\"object\"!=typeof e||!e||isArray(e)||isFunction(e)||e instanceof RegExp?i[t]=e:(i[t]||(i[t]={}),mixin(i[t],e,r,n)))}),i}function bind(e,t){return function(){return t.apply(e,arguments)}}function scripts(){return document.getElementsByTagName(\"script\")}function defaultOnError(e){throw e}function getGlobal(e){if(!e)return e;var t=global;return each(e.split(\".\"),function(e){t=t[e]}),t}function makeError(e,t,i,r){var n=new Error(t+\"\\nhttps://requirejs.org/docs/errors.html#\"+e);return n.requireType=e,n.requireModules=r,i&&(n.originalError=i),n}if(void 0===define){if(void 0!==requirejs){if(isFunction(requirejs))return;cfg=requirejs,requirejs=void 0}void 0===require||isFunction(require)||(cfg=require,require=void 0),req=requirejs=function(e,t,i,r){var n,o,a=defContextName;return isArray(e)||\"string\"==typeof e||(o=e,isArray(t)?(e=t,t=i,i=r):e=[]),o&&o.context&&(a=o.context),(n=getOwn(contexts,a))||(n=contexts[a]=req.s.newContext(a)),o&&n.configure(o),n.require(e,t,i)},req.config=function(e){return req(e)},req.nextTick=void 0!==setTimeout?function(e){setTimeout(e,4)}:function(e){e()},require||(require=req),req.version=version,req.jsExtRegExp=/^\\/|:|\\?|\\.js$/,req.isBrowser=isBrowser,s=req.s={contexts:contexts,newContext:newContext},req({}),each([\"toUrl\",\"undef\",\"defined\",\"specified\"],function(t){req[t]=function(){var e=contexts[defContextName];return e.require[t].apply(e,arguments)}}),isBrowser&&(head=s.head=document.getElementsByTagName(\"head\")[0],baseElement=document.getElementsByTagName(\"base\")[0],baseElement&&(head=s.head=baseElement.parentNode)),req.onError=defaultOnError,req.createNode=function(e,t,i){var r=e.xhtml?document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"html:script\"):document.createElement(\"script\");return r.type=e.scriptType||\"text/javascript\",r.charset=\"utf-8\",r.async=!0,r},req.load=function(t,i,r){var e,n=t&&t.config||{};if(isBrowser)return(e=req.createNode(n,i,r)).setAttribute(\"data-requirecontext\",t.contextName),e.setAttribute(\"data-requiremodule\",i),!e.attachEvent||e.attachEvent.toString&&e.attachEvent.toString().indexOf(\"[native code\")<0||isOpera?(e.addEventListener(\"load\",t.onScriptLoad,!1),e.addEventListener(\"error\",t.onScriptError,!1)):(useInteractive=!0,e.attachEvent(\"onreadystatechange\",t.onScriptLoad)),e.src=r,n.onNodeCreated&&n.onNodeCreated(e,n,i,r),currentlyAddingScript=e,baseElement?head.insertBefore(e,baseElement):head.appendChild(e),currentlyAddingScript=null,e;if(isWebWorker)try{setTimeout(function(){},0),importScripts(r),t.completeLoad(i)}catch(e){t.onError(makeError(\"importscripts\",\"importScripts failed for \"+i+\" at \"+r,e,[i]))}},isBrowser&&!cfg.skipDataMain&&eachReverse(scripts(),function(e){if(head||(head=e.parentNode),dataMain=e.getAttribute(\"data-main\"))return mainScript=dataMain,cfg.baseUrl||-1!==mainScript.indexOf(\"!\")||(mainScript=(src=mainScript.split(\"/\")).pop(),subPath=src.length?src.join(\"/\")+\"/\":\"./\",cfg.baseUrl=subPath),mainScript=mainScript.replace(jsSuffixRegExp,\"\"),req.jsExtRegExp.test(mainScript)&&(mainScript=dataMain),cfg.deps=cfg.deps?cfg.deps.concat(mainScript):[mainScript],!0}),define=function(e,i,t){var r,n;\"string\"!=typeof e&&(t=i,i=e,e=null),isArray(i)||(t=i,i=null),!i&&isFunction(t)&&(i=[],t.length&&(t.toString().replace(commentRegExp,commentReplace).replace(cjsRequireRegExp,function(e,t){i.push(t)}),i=(1===t.length?[\"require\"]:[\"require\",\"exports\",\"module\"]).concat(i))),useInteractive&&(r=currentlyAddingScript||getInteractiveScript())&&(e||(e=r.getAttribute(\"data-requiremodule\")),n=contexts[r.getAttribute(\"data-requirecontext\")]),n?(n.defQueue.push([e,i,t]),n.defQueueMap[e]=!0):globalDefQueue.push([e,i,t])},define.amd={jQuery:!0},req.exec=function(text){return eval(text)},req(cfg)}function newContext(u){var i,e,l,c,d,g={waitSeconds:7,baseUrl:\"./\",paths:{},bundles:{},pkgs:{},shim:{},config:{}},p={},f={},r={},h=[],m={},n={},v={},x=1,b=1;function q(e,t,i){var r,n,o,a,s,u,c,d,p,f,l=t&&t.split(\"/\"),h=g.map,m=h&&h[\"*\"];if(e&&(u=(e=e.split(\"/\")).length-1,g.nodeIdCompat&&jsSuffixRegExp.test(e[u])&&(e[u]=e[u].replace(jsSuffixRegExp,\"\")),\".\"===e[0].charAt(0)&&l&&(e=l.slice(0,l.length-1).concat(e)),function(e){var t,i;for(t=0;t<e.length;t++)if(\".\"===(i=e[t]))e.splice(t,1),t-=1;else if(\"..\"===i){if(0===t||1===t&&\"..\"===e[2]||\"..\"===e[t-1])continue;0<t&&(e.splice(t-1,2),t-=2)}}(e),e=e.join(\"/\")),i&&h&&(l||m)){e:for(o=(n=e.split(\"/\")).length;0<o;o-=1){if(s=n.slice(0,o).join(\"/\"),l)for(a=l.length;0<a;a-=1)if((r=getOwn(h,l.slice(0,a).join(\"/\")))&&(r=getOwn(r,s))){c=r,d=o;break e}!p&&m&&getOwn(m,s)&&(p=getOwn(m,s),f=o)}!c&&p&&(c=p,d=f),c&&(n.splice(0,d,c),e=n.join(\"/\"))}return getOwn(g.pkgs,e)||e}function E(t){isBrowser&&each(scripts(),function(e){if(e.getAttribute(\"data-requiremodule\")===t&&e.getAttribute(\"data-requirecontext\")===l.contextName)return e.parentNode.removeChild(e),!0})}function w(e){var t=getOwn(g.paths,e);if(t&&isArray(t)&&1<t.length)return t.shift(),l.require.undef(e),l.makeRequire(null,{skipMap:!0})([e]),!0}function y(e){var t,i=e?e.indexOf(\"!\"):-1;return-1<i&&(t=e.substring(0,i),e=e.substring(i+1,e.length)),[t,e]}function S(e,t,i,r){var n,o,a,s,u=null,c=t?t.name:null,d=e,p=!0,f=\"\";return e||(p=!1,e=\"_@r\"+(x+=1)),u=(s=y(e))[0],e=s[1],u&&(u=q(u,c,r),o=getOwn(m,u)),e&&(u?f=i?e:o&&o.normalize?o.normalize(e,function(e){return q(e,c,r)}):-1===e.indexOf(\"!\")?q(e,c,r):e:(u=(s=y(f=q(e,c,r)))[0],f=s[1],i=!0,n=l.nameToUrl(f))),{prefix:u,name:f,parentMap:t,unnormalized:!!(a=!u||o||i?\"\":\"_unnormalized\"+(b+=1)),url:n,originalName:d,isDefine:p,id:(u?u+\"!\"+f:f)+a}}function k(e){var t=e.id,i=getOwn(p,t);return i||(i=p[t]=new l.Module(e)),i}function M(e,t,i){var r=e.id,n=getOwn(p,r);!hasProp(m,r)||n&&!n.defineEmitComplete?(n=k(e)).error&&\"error\"===t?i(n.error):n.on(t,i):\"defined\"===t&&i(m[r])}function O(i,e){var t=i.requireModules,r=!1;e?e(i):(each(t,function(e){var t=getOwn(p,e);t&&(t.error=i,t.events.error&&(r=!0,t.emit(\"error\",i)))}),r||req.onError(i))}function j(){globalDefQueue.length&&(each(globalDefQueue,function(e){var t=e[0];\"string\"==typeof t&&(l.defQueueMap[t]=!0),h.push(e)}),globalDefQueue=[])}function P(e){delete p[e],delete f[e]}function R(){var e,r,t=1e3*g.waitSeconds,n=t&&l.startTime+t<(new Date).getTime(),o=[],a=[],s=!1,u=!0;if(!i){if(i=!0,eachProp(f,function(e){var t=e.map,i=t.id;if(e.enabled&&(t.isDefine||a.push(e),!e.error))if(!e.inited&&n)w(i)?s=r=!0:(o.push(i),E(i));else if(!e.inited&&e.fetched&&t.isDefine&&(s=!0,!t.prefix))return u=!1}),n&&o.length)return(e=makeError(\"timeout\",\"Load timeout for modules: \"+o,null,o)).contextName=l.contextName,O(e);u&&each(a,function(e){!function n(o,a,s){var e=o.map.id;o.error?o.emit(\"error\",o.error):(a[e]=!0,each(o.depMaps,function(e,t){var i=e.id,r=getOwn(p,i);!r||o.depMatched[t]||s[i]||(getOwn(a,i)?(o.defineDep(t,m[i]),o.check()):n(r,a,s))}),s[e]=!0)}(e,{},{})}),n&&!r||!s||!isBrowser&&!isWebWorker||d||(d=setTimeout(function(){d=0,R()},50)),i=!1}}function a(e){hasProp(m,e[0])||k(S(e[0],null,!0)).init(e[1],e[2])}function o(e,t,i,r){e.detachEvent&&!isOpera?r&&e.detachEvent(r,t):e.removeEventListener(i,t,!1)}function s(e){var t=e.currentTarget||e.srcElement;return o(t,l.onScriptLoad,\"load\",\"onreadystatechange\"),o(t,l.onScriptError,\"error\"),{node:t,id:t&&t.getAttribute(\"data-requiremodule\")}}function T(){var e;for(j();h.length;){if(null===(e=h.shift())[0])return O(makeError(\"mismatch\",\"Mismatched anonymous define() module: \"+e[e.length-1]));a(e)}l.defQueueMap={}}return c={require:function(e){return e.require?e.require:e.require=l.makeRequire(e.map)},exports:function(e){if(e.usingExports=!0,e.map.isDefine)return e.exports?m[e.map.id]=e.exports:e.exports=m[e.map.id]={}},module:function(e){return e.module?e.module:e.module={id:e.map.id,uri:e.map.url,config:function(){return getOwn(g.config,e.map.id)||{}},exports:e.exports||(e.exports={})}}},(e=function(e){this.events=getOwn(r,e.id)||{},this.map=e,this.shim=getOwn(g.shim,e.id),this.depExports=[],this.depMaps=[],this.depMatched=[],this.pluginMaps={},this.depCount=0}).prototype={init:function(e,t,i,r){r=r||{},this.inited||(this.factory=t,i?this.on(\"error\",i):this.events.error&&(i=bind(this,function(e){this.emit(\"error\",e)})),this.depMaps=e&&e.slice(0),this.errback=i,this.inited=!0,this.ignore=r.ignore,r.enabled||this.enabled?this.enable():this.check())},defineDep:function(e,t){this.depMatched[e]||(this.depMatched[e]=!0,this.depCount-=1,this.depExports[e]=t)},fetch:function(){if(!this.fetched){this.fetched=!0,l.startTime=(new Date).getTime();var e=this.map;if(!this.shim)return e.prefix?this.callPlugin():this.load();l.makeRequire(this.map,{enableBuildCallback:!0})(this.shim.deps||[],bind(this,function(){return e.prefix?this.callPlugin():this.load()}))}},load:function(){var e=this.map.url;n[e]||(n[e]=!0,l.load(this.map.id,e))},check:function(){if(this.enabled&&!this.enabling){var t,e,i=this.map.id,r=this.depExports,n=this.exports,o=this.factory;if(this.inited){if(this.error)this.emit(\"error\",this.error);else if(!this.defining){if(this.defining=!0,this.depCount<1&&!this.defined){if(isFunction(o)){if(this.events.error&&this.map.isDefine||req.onError!==defaultOnError)try{n=l.execCb(i,o,r,n)}catch(e){t=e}else n=l.execCb(i,o,r,n);if(this.map.isDefine&&void 0===n&&((e=this.module)?n=e.exports:this.usingExports&&(n=this.exports)),t)return t.requireMap=this.map,t.requireModules=this.map.isDefine?[this.map.id]:null,t.requireType=this.map.isDefine?\"define\":\"require\",O(this.error=t)}else n=o;if(this.exports=n,this.map.isDefine&&!this.ignore&&(m[i]=n,req.onResourceLoad)){var a=[];each(this.depMaps,function(e){a.push(e.normalizedMap||e)}),req.onResourceLoad(l,this.map,a)}P(i),this.defined=!0}this.defining=!1,this.defined&&!this.defineEmitted&&(this.defineEmitted=!0,this.emit(\"defined\",this.exports),this.defineEmitComplete=!0)}}else hasProp(l.defQueueMap,i)||this.fetch()}},callPlugin:function(){var u=this.map,c=u.id,e=S(u.prefix);this.depMaps.push(e),M(e,\"defined\",bind(this,function(e){var o,t,i,r=getOwn(v,this.map.id),n=this.map.name,a=this.map.parentMap?this.map.parentMap.name:null,s=l.makeRequire(u.parentMap,{enableBuildCallback:!0});return this.map.unnormalized?(e.normalize&&(n=e.normalize(n,function(e){return q(e,a,!0)})||\"\"),M(t=S(u.prefix+\"!\"+n,this.map.parentMap,!0),\"defined\",bind(this,function(e){this.map.normalizedMap=t,this.init([],function(){return e},null,{enabled:!0,ignore:!0})})),void((i=getOwn(p,t.id))&&(this.depMaps.push(t),this.events.error&&i.on(\"error\",bind(this,function(e){this.emit(\"error\",e)})),i.enable()))):r?(this.map.url=l.nameToUrl(r),void this.load()):((o=bind(this,function(e){this.init([],function(){return e},null,{enabled:!0})})).error=bind(this,function(e){this.inited=!0,(this.error=e).requireModules=[c],eachProp(p,function(e){0===e.map.id.indexOf(c+\"_unnormalized\")&&P(e.map.id)}),O(e)}),o.fromText=bind(this,function(e,t){var i=u.name,r=S(i),n=useInteractive;t&&(e=t),n&&(useInteractive=!1),k(r),hasProp(g.config,c)&&(g.config[i]=g.config[c]);try{req.exec(e)}catch(e){return O(makeError(\"fromtexteval\",\"fromText eval for \"+c+\" failed: \"+e,e,[c]))}n&&(useInteractive=!0),this.depMaps.push(r),l.completeLoad(i),s([i],o)}),void e.load(u.name,s,o,g))})),l.enable(e,this),this.pluginMaps[e.id]=e},enable:function(){(f[this.map.id]=this).enabled=!0,this.enabling=!0,each(this.depMaps,bind(this,function(e,t){var i,r,n;if(\"string\"==typeof e){if(e=S(e,this.map.isDefine?this.map:this.map.parentMap,!1,!this.skipMap),this.depMaps[t]=e,n=getOwn(c,e.id))return void(this.depExports[t]=n(this));this.depCount+=1,M(e,\"defined\",bind(this,function(e){this.undefed||(this.defineDep(t,e),this.check())})),this.errback?M(e,\"error\",bind(this,this.errback)):this.events.error&&M(e,\"error\",bind(this,function(e){this.emit(\"error\",e)}))}i=e.id,r=p[i],hasProp(c,i)||!r||r.enabled||l.enable(e,this)})),eachProp(this.pluginMaps,bind(this,function(e){var t=getOwn(p,e.id);t&&!t.enabled&&l.enable(e,this)})),this.enabling=!1,this.check()},on:function(e,t){var i=this.events[e];i||(i=this.events[e]=[]),i.push(t)},emit:function(e,t){each(this.events[e],function(e){e(t)}),\"error\"===e&&delete this.events[e]}},(l={config:g,contextName:u,registry:p,defined:m,urlFetched:n,defQueue:h,defQueueMap:{},Module:e,makeModuleMap:S,nextTick:req.nextTick,onError:O,configure:function(e){if(e.baseUrl&&\"/\"!==e.baseUrl.charAt(e.baseUrl.length-1)&&(e.baseUrl+=\"/\"),\"string\"==typeof e.urlArgs){var i=e.urlArgs;e.urlArgs=function(e,t){return(-1===t.indexOf(\"?\")?\"?\":\"&\")+i}}var r=g.shim,n={paths:!0,bundles:!0,config:!0,map:!0};eachProp(e,function(e,t){n[t]?(g[t]||(g[t]={}),mixin(g[t],e,!0,!0)):g[t]=e}),e.bundles&&eachProp(e.bundles,function(e,t){each(e,function(e){e!==t&&(v[e]=t)})}),e.shim&&(eachProp(e.shim,function(e,t){isArray(e)&&(e={deps:e}),!e.exports&&!e.init||e.exportsFn||(e.exportsFn=l.makeShimExports(e)),r[t]=e}),g.shim=r),e.packages&&each(e.packages,function(e){var t;t=(e=\"string\"==typeof e?{name:e}:e).name,e.location&&(g.paths[t]=e.location),g.pkgs[t]=e.name+\"/\"+(e.main||\"main\").replace(currDirRegExp,\"\").replace(jsSuffixRegExp,\"\")}),eachProp(p,function(e,t){e.inited||e.map.unnormalized||(e.map=S(t,null,!0))}),(e.deps||e.callback)&&l.require(e.deps||[],e.callback)},makeShimExports:function(t){return function(){var e;return t.init&&(e=t.init.apply(global,arguments)),e||t.exports&&getGlobal(t.exports)}},makeRequire:function(o,a){function s(e,t,i){var r,n;return a.enableBuildCallback&&t&&isFunction(t)&&(t.__requireJsBuild=!0),\"string\"==typeof e?isFunction(t)?O(makeError(\"requireargs\",\"Invalid require call\"),i):o&&hasProp(c,e)?c[e](p[o.id]):req.get?req.get(l,e,o,s):(r=S(e,o,!1,!0).id,hasProp(m,r)?m[r]:O(makeError(\"notloaded\",'Module name \"'+r+'\" has not been loaded yet for context: '+u+(o?\"\":\". Use require([])\")))):(T(),l.nextTick(function(){T(),(n=k(S(null,o))).skipMap=a.skipMap,n.init(e,t,i,{enabled:!0}),R()}),s)}return a=a||{},mixin(s,{isBrowser:isBrowser,toUrl:function(e){var t,i=e.lastIndexOf(\".\"),r=e.split(\"/\")[0];return-1!==i&&(!(\".\"===r||\"..\"===r)||1<i)&&(t=e.substring(i,e.length),e=e.substring(0,i)),l.nameToUrl(q(e,o&&o.id,!0),t,!0)},defined:function(e){return hasProp(m,S(e,o,!1,!0).id)},specified:function(e){return e=S(e,o,!1,!0).id,hasProp(m,e)||hasProp(p,e)}}),o||(s.undef=function(i){j();var e=S(i,o,!0),t=getOwn(p,i);t.undefed=!0,E(i),delete m[i],delete n[e.url],delete r[i],eachReverse(h,function(e,t){e[0]===i&&h.splice(t,1)}),delete l.defQueueMap[i],t&&(t.events.defined&&(r[i]=t.events),P(i))}),s},enable:function(e){getOwn(p,e.id)&&k(e).enable()},completeLoad:function(e){var t,i,r,n=getOwn(g.shim,e)||{},o=n.exports;for(j();h.length;){if(null===(i=h.shift())[0]){if(i[0]=e,t)break;t=!0}else i[0]===e&&(t=!0);a(i)}if(l.defQueueMap={},r=getOwn(p,e),!t&&!hasProp(m,e)&&r&&!r.inited){if(!(!g.enforceDefine||o&&getGlobal(o)))return w(e)?void 0:O(makeError(\"nodefine\",\"No define call for \"+e,null,[e]));a([e,n.deps||[],n.exportsFn])}R()},nameToUrl:function(e,t,i){var r,n,o,a,s,u,c=getOwn(g.pkgs,e);if(c&&(e=c),u=getOwn(v,e))return l.nameToUrl(u,t,i);if(req.jsExtRegExp.test(e))a=e+(t||\"\");else{for(r=g.paths,o=(n=e.split(\"/\")).length;0<o;o-=1)if(s=getOwn(r,n.slice(0,o).join(\"/\"))){isArray(s)&&(s=s[0]),n.splice(0,o,s);break}a=n.join(\"/\"),a=(\"/\"===(a+=t||(/^data\\:|^blob\\:|\\?/.test(a)||i?\"\":\".js\")).charAt(0)||a.match(/^[\\w\\+\\.\\-]+:/)?\"\":g.baseUrl)+a}return g.urlArgs&&!/^blob\\:/.test(a)?a+g.urlArgs(e,a):a},load:function(e,t){req.load(l,e,t)},execCb:function(e,t,i,r){return t.apply(r,i)},onScriptLoad:function(e){if(\"load\"===e.type||readyRegExp.test((e.currentTarget||e.srcElement).readyState)){interactiveScript=null;var t=s(e);l.completeLoad(t.id)}},onScriptError:function(e){var i=s(e);if(!w(i.id)){var r=[];return eachProp(p,function(e,t){0!==t.indexOf(\"_@r\")&&each(e.depMaps,function(e){if(e.id===i.id)return r.push(t),!0})}),O(makeError(\"scripterror\",'Script error for \"'+i.id+(r.length?'\", needed by: '+r.join(\", \"):'\"'),e,[i.id]))}}}).require=l.makeRequire(),l}function getInteractiveScript(){return interactiveScript&&\"interactive\"===interactiveScript.readyState||eachReverse(scripts(),function(e){if(\"interactive\"===e.readyState)return interactiveScript=e}),interactiveScript}}(this,\"undefined\"==typeof setTimeout?void 0:setTimeout);\n",
       "\n",
       "    }\n",
       "    // Project sites:    https://visjs.org\n",
       "//                   https://visjs.github.io/vis-network/docs/network\n",
       "//                   https://github.com/visjs/vis-network\n",
       "// Code source:      https://unpkg.com/vis-network@9.1.0/dist/vis-network.min.js - accessed on 19.11.2021\n",
       "// Original license: Apache 2.0 (and MIT because of dual licensing)\n",
       "// Code changes:     Commented out outermost functions\n",
       "//                   Wrapped all into a require define function\n",
       "\n",
       "//                   Replaced two \"NEL\" (=unescaped newline, Unicode U+0085, which can be entered\n",
       "//                   with Ctrl+Shift+U followed be the 4 digits and Enter) symbols by \"\\n\" to\n",
       "//                   prevent browser error when using sphinx docs in combination with Jupyter\n",
       "//                   notebooks and nbsphinx. This might cause unexpected behavior in other cases.\n",
       "\n",
       "if(!require.defined(\"gravis-vis-network\")){\n",
       "  define(\"gravis-vis-network\", [\"exports\"],\n",
       "\n",
       "  /**\n",
       "   * vis-network\n",
       "   * https://visjs.github.io/vis-network/\n",
       "   *\n",
       "   * A dynamic, browser-based visualization library.\n",
       "   *\n",
       "   * @version 9.1.0\n",
       "   * @date    2021-08-29T08:47:25.454Z\n",
       "   *\n",
       "   * @copyright (c) 2011-2017 Almende B.V, http://almende.com\n",
       "   * @copyright (c) 2017-2019 visjs contributors, https://github.com/visjs\n",
       "   *\n",
       "   * @license\n",
       "   * vis.js is dual licensed under both\n",
       "   *\n",
       "   *   1. The Apache 2.0 License\n",
       "   *      http://www.apache.org/licenses/LICENSE-2.0\n",
       "   *\n",
       "   *   and\n",
       "   *\n",
       "   *   2. The MIT License\n",
       "   *      http://opensource.org/licenses/MIT\n",
       "   *\n",
       "   * vis.js may be distributed under either license.\n",
       "   */\n",
       "  // !function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?e(exports):\n",
       "  // \"function\"==typeof define&&define.amd?define([\"exports\"],e):e((t=\"undefined\"!=typeof globalThis?globalThis:t||self).vis=t.vis||{})}(this,(\n",
       "  function(t){\"use strict\";var e=\"undefined\"!=typeof globalThis?globalThis:\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:{};function i(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,\"default\")?t.default:t}function n(t,e){return t(e={exports:{}},e.exports),e.exports}var o,r,s=function(t){return t&&t.Math==Math&&t},a=s(\"object\"==typeof globalThis&&globalThis)||s(\"object\"==typeof window&&window)||s(\"object\"==typeof self&&self)||s(\"object\"==typeof e&&e)||function(){return this}()||Function(\"return this\")(),h=function(t){try{return!!t()}catch(t){return!0}},l=!h((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]})),d={}.propertyIsEnumerable,c=Object.getOwnPropertyDescriptor,u={f:c&&!d.call({1:2},1)?function(t){var e=c(this,t);return!!e&&e.enumerable}:d},f=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}},p={}.toString,v=function(t){return p.call(t).slice(8,-1)},g=\"\".split,y=h((function(){return!Object(\"z\").propertyIsEnumerable(0)}))?function(t){return\"String\"==v(t)?g.call(t,\"\"):Object(t)}:Object,m=function(t){if(null==t)throw TypeError(\"Can't call method on \"+t);return t},b=function(t){return y(m(t))},w=function(t){return\"object\"==typeof t?null!==t:\"function\"==typeof t},k={},_=function(t){return\"function\"==typeof t?t:void 0},x=function(t,e){return arguments.length<2?_(k[t])||_(a[t]):k[t]&&k[t][e]||a[t]&&a[t][e]},E=x(\"navigator\",\"userAgent\")||\"\",O=a.process,C=a.Deno,S=O&&O.versions||C&&C.version,T=S&&S.v8;T?r=(o=T.split(\".\"))[0]<4?1:o[0]+o[1]:E&&(!(o=E.match(/Edge\\/(\\d+)/))||o[1]>=74)&&(o=E.match(/Chrome\\/(\\d+)/))&&(r=o[1]);var M=r&&+r,P=!!Object.getOwnPropertySymbols&&!h((function(){var t=Symbol();return!String(t)||!(Object(t)instanceof Symbol)||!Symbol.sham&&M&&M<41})),D=P&&!Symbol.sham&&\"symbol\"==typeof Symbol.iterator,I=D?function(t){return\"symbol\"==typeof t}:function(t){var e=x(\"Symbol\");return\"function\"==typeof e&&Object(t)instanceof e},B=\"__core-js_shared__\",z=a[B]||function(t,e){try{Object.defineProperty(a,t,{value:e,configurable:!0,writable:!0})}catch(i){a[t]=e}return e}(B,{}),N=n((function(t){(t.exports=function(t,e){return z[t]||(z[t]=void 0!==e?e:{})})(\"versions\",[]).push({version:\"3.16.1\",mode:\"pure\",copyright:\"© 2021 Denis Pushkarev (zloirock.ru)\"})})),A=function(t){return Object(m(t))},F={}.hasOwnProperty,j=Object.hasOwn||function(t,e){return F.call(A(t),e)},R=0,L=Math.random(),H=function(t){return\"Symbol(\"+String(void 0===t?\"\":t)+\")_\"+(++R+L).toString(36)},W=N(\"wks\"),q=a.Symbol,V=D?q:q&&q.withoutSetter||H,U=function(t){return j(W,t)&&(P||\"string\"==typeof W[t])||(P&&j(q,t)?W[t]=q[t]:W[t]=V(\"Symbol.\"+t)),W[t]},Y=U(\"toPrimitive\"),X=function(t,e){if(!w(t)||I(t))return t;var i,n=t[Y];if(void 0!==n){if(void 0===e&&(e=\"default\"),i=n.call(t,e),!w(i)||I(i))return i;throw TypeError(\"Can't convert object to primitive value\")}return void 0===e&&(e=\"number\"),function(t,e){var i,n;if(\"string\"===e&&\"function\"==typeof(i=t.toString)&&!w(n=i.call(t)))return n;if(\"function\"==typeof(i=t.valueOf)&&!w(n=i.call(t)))return n;if(\"string\"!==e&&\"function\"==typeof(i=t.toString)&&!w(n=i.call(t)))return n;throw TypeError(\"Can't convert object to primitive value\")}(t,e)},G=function(t){var e=X(t,\"string\");return I(e)?e:String(e)},K=a.document,$=w(K)&&w(K.createElement),Z=function(t){return $?K.createElement(t):{}},Q=!l&&!h((function(){return 7!=Object.defineProperty(Z(\"div\"),\"a\",{get:function(){return 7}}).a})),J=Object.getOwnPropertyDescriptor,tt={f:l?J:function(t,e){if(t=b(t),e=G(e),Q)try{return J(t,e)}catch(t){}if(j(t,e))return f(!u.f.call(t,e),t[e])}},et=/#|\\.prototype\\./,it=function(t,e){var i=ot[nt(t)];return i==st||i!=rt&&(\"function\"==typeof e?h(e):!!e)},nt=it.normalize=function(t){return String(t).replace(et,\".\").toLowerCase()},ot=it.data={},rt=it.NATIVE=\"N\",st=it.POLYFILL=\"P\",at=it,ht=function(t){if(\"function\"!=typeof t)throw TypeError(String(t)+\" is not a function\");return t},lt=function(t,e,i){if(ht(t),void 0===e)return t;switch(i){case 0:return function(){return t.call(e)};case 1:return function(i){return t.call(e,i)};case 2:return function(i,n){return t.call(e,i,n)};case 3:return function(i,n,o){return t.call(e,i,n,o)}}return function(){return t.apply(e,arguments)}},dt=function(t){if(!w(t))throw TypeError(String(t)+\" is not an object\");return t},ct=Object.defineProperty,ut={f:l?ct:function(t,e,i){if(dt(t),e=G(e),dt(i),Q)try{return ct(t,e,i)}catch(t){}if(\"get\"in i||\"set\"in i)throw TypeError(\"Accessors not supported\");return\"value\"in i&&(t[e]=i.value),t}},ft=l?function(t,e,i){return ut.f(t,e,f(1,i))}:function(t,e,i){return t[e]=i,t},pt=tt.f,vt=function(t){var e=function(e,i,n){if(this instanceof t){switch(arguments.length){case 0:return new t;case 1:return new t(e);case 2:return new t(e,i)}return new t(e,i,n)}return t.apply(this,arguments)};return e.prototype=t.prototype,e},gt=function(t,e){var i,n,o,r,s,h,l,d,c=t.target,u=t.global,f=t.stat,p=t.proto,v=u?a:f?a[c]:(a[c]||{}).prototype,g=u?k:k[c]||(k[c]={}),y=g.prototype;for(o in e)i=!at(u?o:c+(f?\".\":\"#\")+o,t.forced)&&v&&j(v,o),s=g[o],i&&(h=t.noTargetGet?(d=pt(v,o))&&d.value:v[o]),r=i&&h?h:e[o],i&&typeof s==typeof r||(l=t.bind&&i?lt(r,a):t.wrap&&i?vt(r):p&&\"function\"==typeof r?lt(Function.call,r):r,(t.sham||r&&r.sham||s&&s.sham)&&ft(l,\"sham\",!0),g[o]=l,p&&(j(k,n=c+\"Prototype\")||ft(k,n,{}),k[n][o]=r,t.real&&y&&!y[o]&&ft(y,o,r)))},yt=Math.ceil,mt=Math.floor,bt=function(t){return isNaN(t=+t)?0:(t>0?mt:yt)(t)},wt=Math.min,kt=function(t){return t>0?wt(bt(t),9007199254740991):0},_t=Math.max,xt=Math.min,Et=function(t,e){var i=bt(t);return i<0?_t(i+e,0):xt(i,e)},Ot=function(t){return function(e,i,n){var o,r=b(e),s=kt(r.length),a=Et(n,s);if(t&&i!=i){for(;s>a;)if((o=r[a++])!=o)return!0}else for(;s>a;a++)if((t||a in r)&&r[a]===i)return t||a||0;return!t&&-1}},Ct={includes:Ot(!0),indexOf:Ot(!1)},St={},Tt=Ct.indexOf,Mt=function(t,e){var i,n=b(t),o=0,r=[];for(i in n)!j(St,i)&&j(n,i)&&r.push(i);for(;e.length>o;)j(n,i=e[o++])&&(~Tt(r,i)||r.push(i));return r},Pt=[\"constructor\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"toLocaleString\",\"toString\",\"valueOf\"],Dt=Object.keys||function(t){return Mt(t,Pt)},It={f:Object.getOwnPropertySymbols},Bt=Object.assign,zt=Object.defineProperty,Nt=!Bt||h((function(){if(l&&1!==Bt({b:1},Bt(zt({},\"a\",{enumerable:!0,get:function(){zt(this,\"b\",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var t={},e={},i=Symbol(),n=\"abcdefghijklmnopqrst\";return t[i]=7,n.split(\"\").forEach((function(t){e[t]=t})),7!=Bt({},t)[i]||Dt(Bt({},e)).join(\"\")!=n}))?function(t,e){for(var i=A(t),n=arguments.length,o=1,r=It.f,s=u.f;n>o;)for(var a,h=y(arguments[o++]),d=r?Dt(h).concat(r(h)):Dt(h),c=d.length,f=0;c>f;)a=d[f++],l&&!s.call(h,a)||(i[a]=h[a]);return i}:Bt;gt({target:\"Object\",stat:!0,forced:Object.assign!==Nt},{assign:Nt});var At=k.Object.assign,Ft=[].slice,jt={},Rt=function(t,e,i){if(!(e in jt)){for(var n=[],o=0;o<e;o++)n[o]=\"a[\"+o+\"]\";jt[e]=Function(\"C,a\",\"return new C(\"+n.join(\",\")+\")\")}return jt[e](t,i)},Lt=Function.bind||function(t){var e=ht(this),i=Ft.call(arguments,1),n=function(){var o=i.concat(Ft.call(arguments));return this instanceof n?Rt(e,o.length,o):e.apply(t,o)};return w(e.prototype)&&(n.prototype=e.prototype),n};gt({target:\"Function\",proto:!0},{bind:Lt});var Ht=function(t){return k[t+\"Prototype\"]},Wt=Ht(\"Function\").bind,qt=Function.prototype,Vt=function(t){var e=t.bind;return t===qt||t instanceof Function&&e===qt.bind?Wt:e};function Ut(t,e,i,n){t.beginPath(),t.arc(e,i,n,0,2*Math.PI,!1),t.closePath()}function Yt(t,e,i,n,o,r){var s=Math.PI/180;n-2*r<0&&(r=n/2),o-2*r<0&&(r=o/2),t.beginPath(),t.moveTo(e+r,i),t.lineTo(e+n-r,i),t.arc(e+n-r,i+r,r,270*s,360*s,!1),t.lineTo(e+n,i+o-r),t.arc(e+n-r,i+o-r,r,0,90*s,!1),t.lineTo(e+r,i+o),t.arc(e+r,i+o-r,r,90*s,180*s,!1),t.lineTo(e,i+r),t.arc(e+r,i+r,r,180*s,270*s,!1),t.closePath()}function Xt(t,e,i,n,o){var r=.5522848,s=n/2*r,a=o/2*r,h=e+n,l=i+o,d=e+n/2,c=i+o/2;t.beginPath(),t.moveTo(e,c),t.bezierCurveTo(e,c-a,d-s,i,d,i),t.bezierCurveTo(d+s,i,h,c-a,h,c),t.bezierCurveTo(h,c+a,d+s,l,d,l),t.bezierCurveTo(d-s,l,e,c+a,e,c),t.closePath()}function Gt(t,e,i,n,o){var r=o*(1/3),s=.5522848,a=n/2*s,h=r/2*s,l=e+n,d=i+r,c=e+n/2,u=i+r/2,f=i+(o-r/2),p=i+o;t.beginPath(),t.moveTo(l,u),t.bezierCurveTo(l,u+h,c+a,d,c,d),t.bezierCurveTo(c-a,d,e,u+h,e,u),t.bezierCurveTo(e,u-h,c-a,i,c,i),t.bezierCurveTo(c+a,i,l,u-h,l,u),t.lineTo(l,f),t.bezierCurveTo(l,f+h,c+a,p,c,p),t.bezierCurveTo(c-a,p,e,f+h,e,f),t.lineTo(e,u)}function Kt(t,e,i,n,o,r){t.beginPath(),t.moveTo(e,i);for(var s=r.length,a=n-e,h=o-i,l=h/a,d=Math.sqrt(a*a+h*h),c=0,u=!0,f=0,p=+r[0];d>=.1;)(p=+r[c++%s])>d&&(p=d),f=Math.sqrt(p*p/(1+l*l)),e+=f=a<0?-f:f,i+=l*f,!0===u?t.lineTo(e,i):t.moveTo(e,i),d-=p,u=!u}var $t={circle:Ut,dashedLine:Kt,database:Gt,diamond:function(t,e,i,n){t.beginPath(),t.lineTo(e,i+n),t.lineTo(e+n,i),t.lineTo(e,i-n),t.lineTo(e-n,i),t.closePath()},ellipse:Xt,ellipse_vis:Xt,hexagon:function(t,e,i,n){t.beginPath();var o=2*Math.PI/6;t.moveTo(e+n,i);for(var r=1;r<6;r++)t.lineTo(e+n*Math.cos(o*r),i+n*Math.sin(o*r));t.closePath()},roundRect:Yt,square:function(t,e,i,n){t.beginPath(),t.rect(e-n,i-n,2*n,2*n),t.closePath()},star:function(t,e,i,n){t.beginPath(),i+=.1*(n*=.82);for(var o=0;o<10;o++){var r=o%2==0?1.3*n:.5*n;t.lineTo(e+r*Math.sin(2*o*Math.PI/10),i-r*Math.cos(2*o*Math.PI/10))}t.closePath()},triangle:function(t,e,i,n){t.beginPath(),i+=.275*(n*=1.15);var o=2*n,r=o/2,s=Math.sqrt(3)/6*o,a=Math.sqrt(o*o-r*r);t.moveTo(e,i-(a-s)),t.lineTo(e+r,i+s),t.lineTo(e-r,i+s),t.lineTo(e,i-(a-s)),t.closePath()},triangleDown:function(t,e,i,n){t.beginPath(),i-=.275*(n*=1.15);var o=2*n,r=o/2,s=Math.sqrt(3)/6*o,a=Math.sqrt(o*o-r*r);t.moveTo(e,i+(a-s)),t.lineTo(e+r,i-s),t.lineTo(e-r,i-s),t.lineTo(e,i+(a-s)),t.closePath()}};var Zt=n((function(t){function e(t){if(t)return function(t){for(var i in e.prototype)t[i]=e.prototype[i];return t}(t)}t.exports=e,e.prototype.on=e.prototype.addEventListener=function(t,e){return this._callbacks=this._callbacks||{},(this._callbacks[\"$\"+t]=this._callbacks[\"$\"+t]||[]).push(e),this},e.prototype.once=function(t,e){function i(){this.off(t,i),e.apply(this,arguments)}return i.fn=e,this.on(t,i),this},e.prototype.off=e.prototype.removeListener=e.prototype.removeAllListeners=e.prototype.removeEventListener=function(t,e){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var i,n=this._callbacks[\"$\"+t];if(!n)return this;if(1==arguments.length)return delete this._callbacks[\"$\"+t],this;for(var o=0;o<n.length;o++)if((i=n[o])===e||i.fn===e){n.splice(o,1);break}return 0===n.length&&delete this._callbacks[\"$\"+t],this},e.prototype.emit=function(t){this._callbacks=this._callbacks||{};for(var e=new Array(arguments.length-1),i=this._callbacks[\"$\"+t],n=1;n<arguments.length;n++)e[n-1]=arguments[n];if(i){n=0;for(var o=(i=i.slice(0)).length;n<o;++n)i[n].apply(this,e)}return this},e.prototype.listeners=function(t){return this._callbacks=this._callbacks||{},this._callbacks[\"$\"+t]||[]},e.prototype.hasListeners=function(t){return!!this.listeners(t).length}})),Qt=function(t){if(I(t))throw TypeError(\"Cannot convert a Symbol value to a string\");return String(t)},Jt=function(t){return function(e,i){var n,o,r=Qt(m(e)),s=bt(i),a=r.length;return s<0||s>=a?t?\"\":void 0:(n=r.charCodeAt(s))<55296||n>56319||s+1===a||(o=r.charCodeAt(s+1))<56320||o>57343?t?r.charAt(s):n:t?r.slice(s,s+2):o-56320+(n-55296<<10)+65536}},te={codeAt:Jt(!1),charAt:Jt(!0)},ee=Function.toString;\"function\"!=typeof z.inspectSource&&(z.inspectSource=function(t){return ee.call(t)});var ie,ne,oe,re=z.inspectSource,se=a.WeakMap,ae=\"function\"==typeof se&&/native code/.test(re(se)),he=N(\"keys\"),le=function(t){return he[t]||(he[t]=H(t))},de=\"Object already initialized\",ce=a.WeakMap;if(ae||z.state){var ue=z.state||(z.state=new ce),fe=ue.get,pe=ue.has,ve=ue.set;ie=function(t,e){if(pe.call(ue,t))throw new TypeError(de);return e.facade=t,ve.call(ue,t,e),e},ne=function(t){return fe.call(ue,t)||{}},oe=function(t){return pe.call(ue,t)}}else{var ge=le(\"state\");St[ge]=!0,ie=function(t,e){if(j(t,ge))throw new TypeError(de);return e.facade=t,ft(t,ge,e),e},ne=function(t){return j(t,ge)?t[ge]:{}},oe=function(t){return j(t,ge)}}var ye,me,be,we={set:ie,get:ne,has:oe,enforce:function(t){return oe(t)?ne(t):ie(t,{})},getterFor:function(t){return function(e){var i;if(!w(e)||(i=ne(e)).type!==t)throw TypeError(\"Incompatible receiver, \"+t+\" required\");return i}}},ke=!h((function(){function t(){}return t.prototype.constructor=null,Object.getPrototypeOf(new t)!==t.prototype})),_e=le(\"IE_PROTO\"),xe=Object.prototype,Ee=ke?Object.getPrototypeOf:function(t){return t=A(t),j(t,_e)?t[_e]:\"function\"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?xe:null},Oe=U(\"iterator\"),Ce=!1;[].keys&&(\"next\"in(be=[].keys())?(me=Ee(Ee(be)))!==Object.prototype&&(ye=me):Ce=!0);var Se=null==ye||h((function(){var t={};return ye[Oe].call(t)!==t}));Se&&(ye={}),Se&&!j(ye,Oe)&&ft(ye,Oe,(function(){return this}));var Te,Me={IteratorPrototype:ye,BUGGY_SAFARI_ITERATORS:Ce},Pe=l?Object.defineProperties:function(t,e){dt(t);for(var i,n=Dt(e),o=n.length,r=0;o>r;)ut.f(t,i=n[r++],e[i]);return t},De=x(\"document\",\"documentElement\"),Ie=le(\"IE_PROTO\"),Be=function(){},ze=function(t){return\"<script>\"+t+\"</\"+\"script>\"},Ne=function(t){t.write(ze(\"\")),t.close();var e=t.parentWindow.Object;return t=null,e},Ae=function(){try{Te=new ActiveXObject(\"htmlfile\")}catch(t){}Ae=document.domain&&Te?Ne(Te):function(){var t,e=Z(\"iframe\");if(e.style)return e.style.display=\"none\",De.appendChild(e),e.src=String(\"javascript:\"),(t=e.contentWindow.document).open(),t.write(ze(\"document.F=Object\")),t.close(),t.F}()||Ne(Te);for(var t=Pt.length;t--;)delete Ae.prototype[Pt[t]];return Ae()};St[Ie]=!0;var Fe=Object.create||function(t,e){var i;return null!==t?(Be.prototype=dt(t),i=new Be,Be.prototype=null,i[Ie]=t):i=Ae(),void 0===e?i:Pe(i,e)},je={};je[U(\"toStringTag\")]=\"z\";var Re=\"[object z]\"===String(je),Le=U(\"toStringTag\"),He=\"Arguments\"==v(function(){return arguments}()),We=Re?v:function(t){var e,i,n;return void 0===t?\"Undefined\":null===t?\"Null\":\"string\"==typeof(i=function(t,e){try{return t[e]}catch(t){}}(e=Object(t),Le))?i:He?v(e):\"Object\"==(n=v(e))&&\"function\"==typeof e.callee?\"Arguments\":n},qe=Re?{}.toString:function(){return\"[object \"+We(this)+\"]\"},Ve=ut.f,Ue=U(\"toStringTag\"),Ye=function(t,e,i,n){if(t){var o=i?t:t.prototype;j(o,Ue)||Ve(o,Ue,{configurable:!0,value:e}),n&&!Re&&ft(o,\"toString\",qe)}},Xe={},Ge=Me.IteratorPrototype,Ke=function(){return this},$e=Object.setPrototypeOf||(\"__proto__\"in{}?function(){var t,e=!1,i={};try{(t=Object.getOwnPropertyDescriptor(Object.prototype,\"__proto__\").set).call(i,[]),e=i instanceof Array}catch(t){}return function(i,n){return dt(i),function(t){if(!w(t)&&null!==t)throw TypeError(\"Can't set \"+String(t)+\" as a prototype\")}(n),e?t.call(i,n):i.__proto__=n,i}}():void 0),Ze=function(t,e,i,n){n&&n.enumerable?t[e]=i:ft(t,e,i)},Qe=Me.IteratorPrototype,Je=Me.BUGGY_SAFARI_ITERATORS,ti=U(\"iterator\"),ei=\"keys\",ii=\"values\",ni=\"entries\",oi=function(){return this},ri=function(t,e,i,n,o,r,s){!function(t,e,i){var n=e+\" Iterator\";t.prototype=Fe(Ge,{next:f(1,i)}),Ye(t,n,!1,!0),Xe[n]=Ke}(i,e,n);var a,h,l,d=function(t){if(t===o&&g)return g;if(!Je&&t in p)return p[t];switch(t){case ei:case ii:case ni:return function(){return new i(this,t)}}return function(){return new i(this)}},c=e+\" Iterator\",u=!1,p=t.prototype,v=p[ti]||p[\"@@iterator\"]||o&&p[o],g=!Je&&v||d(o),y=\"Array\"==e&&p.entries||v;if(y&&(a=Ee(y.call(new t)),Qe!==Object.prototype&&a.next&&(Ye(a,c,!0,!0),Xe[c]=oi)),o==ii&&v&&v.name!==ii&&(u=!0,g=function(){return v.call(this)}),s&&p[ti]!==g&&ft(p,ti,g),Xe[e]=g,o)if(h={values:d(ii),keys:r?g:d(ei),entries:d(ni)},s)for(l in h)(Je||u||!(l in p))&&Ze(p,l,h[l]);else gt({target:e,proto:!0,forced:Je||u},h);return h},si=te.charAt,ai=\"String Iterator\",hi=we.set,li=we.getterFor(ai);ri(String,\"String\",(function(t){hi(this,{type:ai,string:Qt(t),index:0})}),(function(){var t,e=li(this),i=e.string,n=e.index;return n>=i.length?{value:void 0,done:!0}:(t=si(i,n),e.index+=t.length,{value:t,done:!1})}));var di=function(t){var e=t.return;if(void 0!==e)return dt(e.call(t)).value},ci=function(t,e,i,n){try{return n?e(dt(i)[0],i[1]):e(i)}catch(e){throw di(t),e}},ui=U(\"iterator\"),fi=Array.prototype,pi=function(t){return void 0!==t&&(Xe.Array===t||fi[ui]===t)},vi=function(t,e,i){var n=G(e);n in t?ut.f(t,n,f(0,i)):t[n]=i},gi=U(\"iterator\"),yi=function(t){if(null!=t)return t[gi]||t[\"@@iterator\"]||Xe[We(t)]},mi=U(\"iterator\"),bi=!1;try{var wi=0,ki={next:function(){return{done:!!wi++}},return:function(){bi=!0}};ki[mi]=function(){return this},Array.from(ki,(function(){throw 2}))}catch(t){}var _i=!function(t,e){if(!e&&!bi)return!1;var i=!1;try{var n={};n[mi]=function(){return{next:function(){return{done:i=!0}}}},t(n)}catch(t){}return i}((function(t){Array.from(t)}));gt({target:\"Array\",stat:!0,forced:_i},{from:function(t){var e,i,n,o,r,s,a=A(t),h=\"function\"==typeof this?this:Array,l=arguments.length,d=l>1?arguments[1]:void 0,c=void 0!==d,u=yi(a),f=0;if(c&&(d=lt(d,l>2?arguments[2]:void 0,2)),null==u||h==Array&&pi(u))for(i=new h(e=kt(a.length));e>f;f++)s=c?d(a[f],f):a[f],vi(i,f,s);else for(r=(o=u.call(a)).next,i=new h;!(n=r.call(o)).done;f++)s=c?ci(o,d,[n.value,f],!0):n.value,vi(i,f,s);return i.length=f,i}});var xi=k.Array.from,Ei=xi,Oi=\"Array Iterator\",Ci=we.set,Si=we.getterFor(Oi);ri(Array,\"Array\",(function(t,e){Ci(this,{type:Oi,target:b(t),index:0,kind:e})}),(function(){var t=Si(this),e=t.target,i=t.kind,n=t.index++;return!e||n>=e.length?(t.target=void 0,{value:void 0,done:!0}):\"keys\"==i?{value:n,done:!1}:\"values\"==i?{value:e[n],done:!1}:{value:[n,e[n]],done:!1}}),\"values\"),Xe.Arguments=Xe.Array;var Ti=yi,Mi=U(\"toStringTag\");for(var Pi in{CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}){var Di=a[Pi],Ii=Di&&Di.prototype;Ii&&We(Ii)!==Mi&&ft(Ii,Mi,Pi),Xe[Pi]=Xe.Array}var Bi=Ti,zi=Array.isArray||function(t){return\"Array\"==v(t)},Ni=Pt.concat(\"length\",\"prototype\"),Ai={f:Object.getOwnPropertyNames||function(t){return Mt(t,Ni)}},Fi=Ai.f,ji={}.toString,Ri=\"object\"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],Li={f:function(t){return Ri&&\"[object Window]\"==ji.call(t)?function(t){try{return Fi(t)}catch(t){return Ri.slice()}}(t):Fi(b(t))}},Hi={f:U},Wi=ut.f,qi=function(t){var e=k.Symbol||(k.Symbol={});j(e,t)||Wi(e,t,{value:Hi.f(t)})},Vi=U(\"species\"),Ui=function(t,e){return new(function(t){var e;return zi(t)&&(\"function\"!=typeof(e=t.constructor)||e!==Array&&!zi(e.prototype)?w(e)&&null===(e=e[Vi])&&(e=void 0):e=void 0),void 0===e?Array:e}(t))(0===e?0:e)},Yi=[].push,Xi=function(t){var e=1==t,i=2==t,n=3==t,o=4==t,r=6==t,s=7==t,a=5==t||r;return function(h,l,d,c){for(var u,f,p=A(h),v=y(p),g=lt(l,d,3),m=kt(v.length),b=0,w=c||Ui,k=e?w(h,m):i||s?w(h,0):void 0;m>b;b++)if((a||b in v)&&(f=g(u=v[b],b,p),t))if(e)k[b]=f;else if(f)switch(t){case 3:return!0;case 5:return u;case 6:return b;case 2:Yi.call(k,u)}else switch(t){case 4:return!1;case 7:Yi.call(k,u)}return r?-1:n||o?o:k}},Gi={forEach:Xi(0),map:Xi(1),filter:Xi(2),some:Xi(3),every:Xi(4),find:Xi(5),findIndex:Xi(6),filterReject:Xi(7)},Ki=Gi.forEach,$i=le(\"hidden\"),Zi=\"Symbol\",Qi=U(\"toPrimitive\"),Ji=we.set,tn=we.getterFor(Zi),en=Object.prototype,nn=a.Symbol,on=x(\"JSON\",\"stringify\"),rn=tt.f,sn=ut.f,an=Li.f,hn=u.f,ln=N(\"symbols\"),dn=N(\"op-symbols\"),cn=N(\"string-to-symbol-registry\"),un=N(\"symbol-to-string-registry\"),fn=N(\"wks\"),pn=a.QObject,vn=!pn||!pn.prototype||!pn.prototype.findChild,gn=l&&h((function(){return 7!=Fe(sn({},\"a\",{get:function(){return sn(this,\"a\",{value:7}).a}})).a}))?function(t,e,i){var n=rn(en,e);n&&delete en[e],sn(t,e,i),n&&t!==en&&sn(en,e,n)}:sn,yn=function(t,e){var i=ln[t]=Fe(nn.prototype);return Ji(i,{type:Zi,tag:t,description:e}),l||(i.description=e),i},mn=function(t,e,i){t===en&&mn(dn,e,i),dt(t);var n=G(e);return dt(i),j(ln,n)?(i.enumerable?(j(t,$i)&&t[$i][n]&&(t[$i][n]=!1),i=Fe(i,{enumerable:f(0,!1)})):(j(t,$i)||sn(t,$i,f(1,{})),t[$i][n]=!0),gn(t,n,i)):sn(t,n,i)},bn=function(t,e){dt(t);var i=b(e),n=Dt(i).concat(xn(i));return Ki(n,(function(e){l&&!wn.call(i,e)||mn(t,e,i[e])})),t},wn=function(t){var e=G(t),i=hn.call(this,e);return!(this===en&&j(ln,e)&&!j(dn,e))&&(!(i||!j(this,e)||!j(ln,e)||j(this,$i)&&this[$i][e])||i)},kn=function(t,e){var i=b(t),n=G(e);if(i!==en||!j(ln,n)||j(dn,n)){var o=rn(i,n);return!o||!j(ln,n)||j(i,$i)&&i[$i][n]||(o.enumerable=!0),o}},_n=function(t){var e=an(b(t)),i=[];return Ki(e,(function(t){j(ln,t)||j(St,t)||i.push(t)})),i},xn=function(t){var e=t===en,i=an(e?dn:b(t)),n=[];return Ki(i,(function(t){!j(ln,t)||e&&!j(en,t)||n.push(ln[t])})),n};if(P||(Ze((nn=function(){if(this instanceof nn)throw TypeError(\"Symbol is not a constructor\");var t=arguments.length&&void 0!==arguments[0]?Qt(arguments[0]):void 0,e=H(t),i=function(t){this===en&&i.call(dn,t),j(this,$i)&&j(this[$i],e)&&(this[$i][e]=!1),gn(this,e,f(1,t))};return l&&vn&&gn(en,e,{configurable:!0,set:i}),yn(e,t)}).prototype,\"toString\",(function(){return tn(this).tag})),Ze(nn,\"withoutSetter\",(function(t){return yn(H(t),t)})),u.f=wn,ut.f=mn,tt.f=kn,Ai.f=Li.f=_n,It.f=xn,Hi.f=function(t){return yn(U(t),t)},l&&sn(nn.prototype,\"description\",{configurable:!0,get:function(){return tn(this).description}})),gt({global:!0,wrap:!0,forced:!P,sham:!P},{Symbol:nn}),Ki(Dt(fn),(function(t){qi(t)})),gt({target:Zi,stat:!0,forced:!P},{for:function(t){var e=Qt(t);if(j(cn,e))return cn[e];var i=nn(e);return cn[e]=i,un[i]=e,i},keyFor:function(t){if(!I(t))throw TypeError(t+\" is not a symbol\");if(j(un,t))return un[t]},useSetter:function(){vn=!0},useSimple:function(){vn=!1}}),gt({target:\"Object\",stat:!0,forced:!P,sham:!l},{create:function(t,e){return void 0===e?Fe(t):bn(Fe(t),e)},defineProperty:mn,defineProperties:bn,getOwnPropertyDescriptor:kn}),gt({target:\"Object\",stat:!0,forced:!P},{getOwnPropertyNames:_n,getOwnPropertySymbols:xn}),gt({target:\"Object\",stat:!0,forced:h((function(){It.f(1)}))},{getOwnPropertySymbols:function(t){return It.f(A(t))}}),on){var En=!P||h((function(){var t=nn();return\"[null]\"!=on([t])||\"{}\"!=on({a:t})||\"{}\"!=on(Object(t))}));gt({target:\"JSON\",stat:!0,forced:En},{stringify:function(t,e,i){for(var n,o=[t],r=1;arguments.length>r;)o.push(arguments[r++]);if(n=e,(w(e)||void 0!==t)&&!I(t))return zi(e)||(e=function(t,e){if(\"function\"==typeof n&&(e=n.call(this,t,e)),!I(e))return e}),o[1]=e,on.apply(null,o)}})}nn.prototype[Qi]||ft(nn.prototype,Qi,nn.prototype.valueOf),Ye(nn,Zi),St[$i]=!0;var On=k.Object.getOwnPropertySymbols,Cn=tt.f,Sn=h((function(){Cn(1)}));gt({target:\"Object\",stat:!0,forced:!l||Sn,sham:!l},{getOwnPropertyDescriptor:function(t,e){return Cn(b(t),e)}});var Tn=n((function(t){var e=k.Object,i=t.exports=function(t,i){return e.getOwnPropertyDescriptor(t,i)};e.getOwnPropertyDescriptor.sham&&(i.sham=!0)})),Mn=Tn,Pn=x(\"Reflect\",\"ownKeys\")||function(t){var e=Ai.f(dt(t)),i=It.f;return i?e.concat(i(t)):e};gt({target:\"Object\",stat:!0,sham:!l},{getOwnPropertyDescriptors:function(t){for(var e,i,n=b(t),o=tt.f,r=Pn(n),s={},a=0;r.length>a;)void 0!==(i=o(n,e=r[a++]))&&vi(s,e,i);return s}});var Dn=k.Object.getOwnPropertyDescriptors;gt({target:\"Object\",stat:!0,forced:!l,sham:!l},{defineProperties:Pe});var In=n((function(t){var e=k.Object,i=t.exports=function(t,i){return e.defineProperties(t,i)};e.defineProperties.sham&&(i.sham=!0)}));gt({target:\"Object\",stat:!0,forced:!l,sham:!l},{defineProperty:ut.f});var Bn=n((function(t){var e=k.Object,i=t.exports=function(t,i,n){return e.defineProperty(t,i,n)};e.defineProperty.sham&&(i.sham=!0)})),zn=Bn,Nn=i(n((function(t){t.exports=function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")},t.exports.default=t.exports,t.exports.__esModule=!0}))),An=Bn,Fn=i(n((function(t){function e(t,e){for(var i=0;i<e.length;i++){var n=e[i];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),An(t,n.key,n)}}t.exports=function(t,i,n){return i&&e(t.prototype,i),n&&e(t,n),t},t.exports.default=t.exports,t.exports.__esModule=!0}))),jn=i(n((function(t){t.exports=function(t,e,i){return e in t?An(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[e]=i,t},t.exports.default=t.exports,t.exports.__esModule=!0})));gt({target:\"Array\",stat:!0},{isArray:zi});var Rn=k.Array.isArray,Ln=Rn,Hn=n((function(t){t.exports=function(t){if(Ln(t))return t},t.exports.default=t.exports,t.exports.__esModule=!0}));i(Hn);var Wn=U(\"species\"),qn=function(t){return M>=51||!h((function(){var e=[];return(e.constructor={})[Wn]=function(){return{foo:1}},1!==e[t](Boolean).foo}))},Vn=U(\"isConcatSpreadable\"),Un=9007199254740991,Yn=\"Maximum allowed index exceeded\",Xn=M>=51||!h((function(){var t=[];return t[Vn]=!1,t.concat()[0]!==t})),Gn=qn(\"concat\"),Kn=function(t){if(!w(t))return!1;var e=t[Vn];return void 0!==e?!!e:zi(t)};gt({target:\"Array\",proto:!0,forced:!Xn||!Gn},{concat:function(t){var e,i,n,o,r,s=A(this),a=Ui(s,0),h=0;for(e=-1,n=arguments.length;e<n;e++)if(Kn(r=-1===e?s:arguments[e])){if(h+(o=kt(r.length))>Un)throw TypeError(Yn);for(i=0;i<o;i++,h++)i in r&&vi(a,h,r[i])}else{if(h>=Un)throw TypeError(Yn);vi(a,h++,r)}return a.length=h,a}}),qi(\"asyncIterator\"),qi(\"hasInstance\"),qi(\"isConcatSpreadable\"),qi(\"iterator\"),qi(\"match\"),qi(\"matchAll\"),qi(\"replace\"),qi(\"search\"),qi(\"species\"),qi(\"split\"),qi(\"toPrimitive\"),qi(\"toStringTag\"),qi(\"unscopables\"),Ye(a.JSON,\"JSON\",!0);var $n=k.Symbol;qi(\"asyncDispose\"),qi(\"dispose\"),qi(\"matcher\"),qi(\"metadata\"),qi(\"observable\"),qi(\"patternMatch\"),qi(\"replaceAll\");var Zn=$n,Qn=n((function(t){t.exports=function(t,e){var i=null==t?null:void 0!==Zn&&Bi(t)||t[\"@@iterator\"];if(null!=i){var n,o,r=[],s=!0,a=!1;try{for(i=i.call(t);!(s=(n=i.next()).done)&&(r.push(n.value),!e||r.length!==e);s=!0);}catch(t){a=!0,o=t}finally{try{s||null==i.return||i.return()}finally{if(a)throw o}}return r}},t.exports.default=t.exports,t.exports.__esModule=!0}));i(Qn);var Jn=qn(\"slice\"),to=U(\"species\"),eo=[].slice,io=Math.max;gt({target:\"Array\",proto:!0,forced:!Jn},{slice:function(t,e){var i,n,o,r=b(this),s=kt(r.length),a=Et(t,s),h=Et(void 0===e?s:e,s);if(zi(r)&&(\"function\"!=typeof(i=r.constructor)||i!==Array&&!zi(i.prototype)?w(i)&&null===(i=i[to])&&(i=void 0):i=void 0,i===Array||void 0===i))return eo.call(r,a,h);for(n=new(void 0===i?Array:i)(io(h-a,0)),o=0;a<h;a++,o++)a in r&&vi(n,o,r[a]);return n.length=o,n}});var no=Ht(\"Array\").slice,oo=Array.prototype,ro=function(t){var e=t.slice;return t===oo||t instanceof Array&&e===oo.slice?no:e},so=ro,ao=xi,ho=n((function(t){t.exports=function(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n},t.exports.default=t.exports,t.exports.__esModule=!0}));i(ho);var lo=n((function(t){t.exports=function(t,e){var i;if(t){if(\"string\"==typeof t)return ho(t,e);var n=so(i=Object.prototype.toString.call(t)).call(i,8,-1);return\"Object\"===n&&t.constructor&&(n=t.constructor.name),\"Map\"===n||\"Set\"===n?ao(t):\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?ho(t,e):void 0}},t.exports.default=t.exports,t.exports.__esModule=!0}));i(lo);var co=n((function(t){t.exports=function(){throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")},t.exports.default=t.exports,t.exports.__esModule=!0}));i(co);var uo=i(n((function(t){t.exports=function(t,e){return Hn(t)||Qn(t,e)||lo(t,e)||co()},t.exports.default=t.exports,t.exports.__esModule=!0}))),fo=Hi.f(\"iterator\"),po=fo,vo=n((function(t){function e(i){return\"function\"==typeof Zn&&\"symbol\"==typeof po?(t.exports=e=function(t){return typeof t},t.exports.default=t.exports,t.exports.__esModule=!0):(t.exports=e=function(t){return t&&\"function\"==typeof Zn&&t.constructor===Zn&&t!==Zn.prototype?\"symbol\":typeof t},t.exports.default=t.exports,t.exports.__esModule=!0),e(i)}t.exports=e,t.exports.default=t.exports,t.exports.__esModule=!0})),go=i(vo),yo=n((function(t){t.exports=function(t){if(Ln(t))return ho(t)},t.exports.default=t.exports,t.exports.__esModule=!0}));i(yo);var mo=n((function(t){t.exports=function(t){if(void 0!==Zn&&null!=Bi(t)||null!=t[\"@@iterator\"])return ao(t)},t.exports.default=t.exports,t.exports.__esModule=!0}));i(mo);var bo=n((function(t){t.exports=function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")},t.exports.default=t.exports,t.exports.__esModule=!0}));i(bo);var wo=i(n((function(t){t.exports=function(t){return yo(t)||mo(t)||lo(t)||bo()},t.exports.default=t.exports,t.exports.__esModule=!0}))),ko=$n,_o=Ht(\"Array\").concat,xo=Array.prototype,Eo=function(t){var e=t.concat;return t===xo||t instanceof Array&&e===xo.concat?_o:e},Oo=ro;gt({target:\"Reflect\",stat:!0},{ownKeys:Pn});var Co=k.Reflect.ownKeys,So=Rn,To=Gi.map,Mo=qn(\"map\");gt({target:\"Array\",proto:!0,forced:!Mo},{map:function(t){return To(this,t,arguments.length>1?arguments[1]:void 0)}});var Po=Ht(\"Array\").map,Do=Array.prototype,Io=function(t){var e=t.map;return t===Do||t instanceof Array&&e===Do.map?Po:e},Bo=h((function(){Dt(1)}));gt({target:\"Object\",stat:!0,forced:Bo},{keys:function(t){return Dt(A(t))}});var zo=k.Object.keys;gt({target:\"Date\",stat:!0},{now:function(){return(new Date).getTime()}});var No=k.Date.now,Ao=function(t,e){var i=[][t];return!!i&&h((function(){i.call(null,e||function(){throw 1},1)}))},Fo=Gi.forEach,jo=Ao(\"forEach\")?[].forEach:function(t){return Fo(this,t,arguments.length>1?arguments[1]:void 0)};gt({target:\"Array\",proto:!0,forced:[].forEach!=jo},{forEach:jo});var Ro=Ht(\"Array\").forEach,Lo=Array.prototype,Ho={DOMTokenList:!0,NodeList:!0},Wo=function(t){var e=t.forEach;return t===Lo||t instanceof Array&&e===Lo.forEach||Ho.hasOwnProperty(We(t))?Ro:e},qo=[].reverse,Vo=[1,2];gt({target:\"Array\",proto:!0,forced:String(Vo)===String(Vo.reverse())},{reverse:function(){return zi(this)&&(this.length=this.length),qo.call(this)}});var Uo=Ht(\"Array\").reverse,Yo=Array.prototype,Xo=function(t){var e=t.reverse;return t===Yo||t instanceof Array&&e===Yo.reverse?Uo:e},Go=qn(\"splice\"),Ko=Math.max,$o=Math.min,Zo=9007199254740991,Qo=\"Maximum allowed length exceeded\";gt({target:\"Array\",proto:!0,forced:!Go},{splice:function(t,e){var i,n,o,r,s,a,h=A(this),l=kt(h.length),d=Et(t,l),c=arguments.length;if(0===c?i=n=0:1===c?(i=0,n=l-d):(i=c-2,n=$o(Ko(bt(e),0),l-d)),l+i-n>Zo)throw TypeError(Qo);for(o=Ui(h,n),r=0;r<n;r++)(s=d+r)in h&&vi(o,r,h[s]);if(o.length=n,i<n){for(r=d;r<l-n;r++)a=r+i,(s=r+n)in h?h[a]=h[s]:delete h[a];for(r=l;r>l-n+i;r--)delete h[r-1]}else if(i>n)for(r=l-n;r>d;r--)a=r+i-1,(s=r+n-1)in h?h[a]=h[s]:delete h[a];for(r=0;r<i;r++)h[r+d]=arguments[r+2];return h.length=l-n+i,o}});var Jo=Ht(\"Array\").splice,tr=Array.prototype,er=function(t){var e=t.splice;return t===tr||t instanceof Array&&e===tr.splice?Jo:e},ir=Ct.includes;gt({target:\"Array\",proto:!0},{includes:function(t){return ir(this,t,arguments.length>1?arguments[1]:void 0)}});var nr=Ht(\"Array\").includes,or=U(\"match\"),rr=function(t){if(function(t){var e;return w(t)&&(void 0!==(e=t[or])?!!e:\"RegExp\"==v(t))}(t))throw TypeError(\"The method doesn't accept regular expressions\");return t},sr=U(\"match\");gt({target:\"String\",proto:!0,forced:!function(t){var e=/./;try{\"/./\"[t](e)}catch(i){try{return e[sr]=!1,\"/./\"[t](e)}catch(t){}}return!1}(\"includes\")},{includes:function(t){return!!~Qt(m(this)).indexOf(Qt(rr(t)),arguments.length>1?arguments[1]:void 0)}});var ar=Ht(\"String\").includes,hr=Array.prototype,lr=String.prototype,dr=function(t){var e=t.includes;return t===hr||t instanceof Array&&e===hr.includes?nr:\"string\"==typeof t||t===lr||t instanceof String&&e===lr.includes?ar:e},cr=h((function(){Ee(1)}));gt({target:\"Object\",stat:!0,forced:cr,sham:!ke},{getPrototypeOf:function(t){return Ee(A(t))}});var ur=k.Object.getPrototypeOf,fr=ur,pr=Gi.filter,vr=qn(\"filter\");gt({target:\"Array\",proto:!0,forced:!vr},{filter:function(t){return pr(this,t,arguments.length>1?arguments[1]:void 0)}});var gr=Ht(\"Array\").filter,yr=Array.prototype,mr=function(t){var e=t.filter;return t===yr||t instanceof Array&&e===yr.filter?gr:e},br=u.f,wr=function(t){return function(e){for(var i,n=b(e),o=Dt(n),r=o.length,s=0,a=[];r>s;)i=o[s++],l&&!br.call(n,i)||a.push(t?[i,n[i]]:n[i]);return a}},kr={entries:wr(!0),values:wr(!1)}.values;gt({target:\"Object\",stat:!0},{values:function(t){return kr(t)}});var _r=k.Object.values,xr=\"\\t\\n\\v\\f\\r                　\\u2028\\u2029\\ufeff\",Er=\"[\"+xr+\"]\",Or=RegExp(\"^\"+Er+Er+\"*\"),Cr=RegExp(Er+Er+\"*$\"),Sr=function(t){return function(e){var i=Qt(m(e));return 1&t&&(i=i.replace(Or,\"\")),2&t&&(i=i.replace(Cr,\"\")),i}},Tr={start:Sr(1),end:Sr(2),trim:Sr(3)},Mr=Tr.trim,Pr=a.parseInt,Dr=/^[+-]?0[Xx]/,Ir=8!==Pr(xr+\"08\")||22!==Pr(xr+\"0x16\")?function(t,e){var i=Mr(Qt(t));return Pr(i,e>>>0||(Dr.test(i)?16:10))}:Pr;gt({global:!0,forced:parseInt!=Ir},{parseInt:Ir});var Br=k.parseInt,zr=Ct.indexOf,Nr=[].indexOf,Ar=!!Nr&&1/[1].indexOf(1,-0)<0,Fr=Ao(\"indexOf\");gt({target:\"Array\",proto:!0,forced:Ar||!Fr},{indexOf:function(t){return Ar?Nr.apply(this,arguments)||0:zr(this,t,arguments.length>1?arguments[1]:void 0)}});var jr,Rr=Ht(\"Array\").indexOf,Lr=Array.prototype,Hr=function(t){var e=t.indexOf;return t===Lr||t instanceof Array&&e===Lr.indexOf?Rr:e},Wr=Tr.trim;gt({target:\"String\",proto:!0,forced:(jr=\"trim\",h((function(){return!!xr[jr]()||\"​\\n᠎\"!=\"​\\n᠎\"[jr]()||xr[jr].name!==jr})))},{trim:function(){return Wr(this)}});var qr=Ht(\"String\").trim,Vr=String.prototype,Ur=function(t){var e=t.trim;return\"string\"==typeof t||t===Vr||t instanceof String&&e===Vr.trim?qr:e};gt({target:\"Object\",stat:!0,sham:!l},{create:Fe});var Yr=k.Object,Xr=function(t,e){return Yr.create(t,e)},Gr=Xr,Kr=x(\"JSON\",\"stringify\"),$r=/[\\uD800-\\uDFFF]/g,Zr=/^[\\uD800-\\uDBFF]$/,Qr=/^[\\uDC00-\\uDFFF]$/,Jr=function(t,e,i){var n=i.charAt(e-1),o=i.charAt(e+1);return Zr.test(t)&&!Qr.test(o)||Qr.test(t)&&!Zr.test(n)?\"\\\\u\"+t.charCodeAt(0).toString(16):t},ts=h((function(){return'\"\\\\udf06\\\\ud834\"'!==Kr(\"\\udf06\\ud834\")||'\"\\\\udead\"'!==Kr(\"\\udead\")}));Kr&&gt({target:\"JSON\",stat:!0,forced:ts},{stringify:function(t,e,i){var n=Kr.apply(null,arguments);return\"string\"==typeof n?n.replace($r,Jr):n}}),k.JSON||(k.JSON={stringify:JSON.stringify});var es=function(t,e,i){return k.JSON.stringify.apply(null,arguments)},is=[].slice,ns=/MSIE .\\./.test(E),os=function(t){return function(e,i){var n=arguments.length>2,o=n?is.call(arguments,2):void 0;return t(n?function(){(\"function\"==typeof e?e:Function(e)).apply(this,o)}:e,i)}};gt({global:!0,bind:!0,forced:ns},{setTimeout:os(a.setTimeout),setInterval:os(a.setInterval)});var rs=k.setTimeout;gt({target:\"Array\",proto:!0},{fill:function(t){for(var e=A(this),i=kt(e.length),n=arguments.length,o=Et(n>1?arguments[1]:void 0,i),r=n>2?arguments[2]:void 0,s=void 0===r?i:Et(r,i);s>o;)e[o++]=t;return e}});var ss=Ht(\"Array\").fill,as=Array.prototype,hs=function(t){var e=t.fill;return t===as||t instanceof Array&&e===as.fill?ss:e};function ls(){return(ls=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var i=arguments[e];for(var n in i)Object.prototype.hasOwnProperty.call(i,n)&&(t[n]=i[n])}return t}).apply(this,arguments)}function ds(t,e){t.prototype=Object.create(e.prototype),t.prototype.constructor=t,t.__proto__=e}function cs(t){if(void 0===t)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return t}var us,fs=\"function\"!=typeof Object.assign?function(t){if(null==t)throw new TypeError(\"Cannot convert undefined or null to object\");for(var e=Object(t),i=1;i<arguments.length;i++){var n=arguments[i];if(null!=n)for(var o in n)n.hasOwnProperty(o)&&(e[o]=n[o])}return e}:Object.assign,ps=[\"\",\"webkit\",\"Moz\",\"MS\",\"ms\",\"o\"],vs=\"undefined\"==typeof document?{style:{}}:document.createElement(\"div\"),gs=Math.round,ys=Math.abs,ms=Date.now;function bs(t,e){for(var i,n,o=e[0].toUpperCase()+e.slice(1),r=0;r<ps.length;){if((n=(i=ps[r])?i+o:e)in t)return n;r++}}us=\"undefined\"==typeof window?{}:window;var ws=bs(vs.style,\"touchAction\"),ks=void 0!==ws;var _s=\"compute\",xs=\"auto\",Es=\"manipulation\",Os=\"none\",Cs=\"pan-x\",Ss=\"pan-y\",Ts=function(){if(!ks)return!1;var t={},e=us.CSS&&us.CSS.supports;return[\"auto\",\"manipulation\",\"pan-y\",\"pan-x\",\"pan-x pan-y\",\"none\"].forEach((function(i){return t[i]=!e||us.CSS.supports(\"touch-action\",i)})),t}(),Ms=\"ontouchstart\"in us,Ps=void 0!==bs(us,\"PointerEvent\"),Ds=Ms&&/mobile|tablet|ip(ad|hone|od)|android/i.test(navigator.userAgent),Is=\"touch\",Bs=\"mouse\",zs=16,Ns=24,As=[\"x\",\"y\"],Fs=[\"clientX\",\"clientY\"];function js(t,e,i){var n;if(t)if(t.forEach)t.forEach(e,i);else if(void 0!==t.length)for(n=0;n<t.length;)e.call(i,t[n],n,t),n++;else for(n in t)t.hasOwnProperty(n)&&e.call(i,t[n],n,t)}function Rs(t,e){return\"function\"==typeof t?t.apply(e&&e[0]||void 0,e):t}function Ls(t,e){return t.indexOf(e)>-1}var Hs=function(){function t(t,e){this.manager=t,this.set(e)}var e=t.prototype;return e.set=function(t){t===_s&&(t=this.compute()),ks&&this.manager.element.style&&Ts[t]&&(this.manager.element.style[ws]=t),this.actions=t.toLowerCase().trim()},e.update=function(){this.set(this.manager.options.touchAction)},e.compute=function(){var t=[];return js(this.manager.recognizers,(function(e){Rs(e.options.enable,[e])&&(t=t.concat(e.getTouchAction()))})),function(t){if(Ls(t,Os))return Os;var e=Ls(t,Cs),i=Ls(t,Ss);return e&&i?Os:e||i?e?Cs:Ss:Ls(t,Es)?Es:xs}(t.join(\" \"))},e.preventDefaults=function(t){var e=t.srcEvent,i=t.offsetDirection;if(this.manager.session.prevented)e.preventDefault();else{var n=this.actions,o=Ls(n,Os)&&!Ts.none,r=Ls(n,Ss)&&!Ts[\"pan-y\"],s=Ls(n,Cs)&&!Ts[\"pan-x\"];if(o){var a=1===t.pointers.length,h=t.distance<2,l=t.deltaTime<250;if(a&&h&&l)return}if(!s||!r)return o||r&&6&i||s&&i&Ns?this.preventSrc(e):void 0}},e.preventSrc=function(t){this.manager.session.prevented=!0,t.preventDefault()},t}();function Ws(t,e){for(;t;){if(t===e)return!0;t=t.parentNode}return!1}function qs(t){var e=t.length;if(1===e)return{x:gs(t[0].clientX),y:gs(t[0].clientY)};for(var i=0,n=0,o=0;o<e;)i+=t[o].clientX,n+=t[o].clientY,o++;return{x:gs(i/e),y:gs(n/e)}}function Vs(t){for(var e=[],i=0;i<t.pointers.length;)e[i]={clientX:gs(t.pointers[i].clientX),clientY:gs(t.pointers[i].clientY)},i++;return{timeStamp:ms(),pointers:e,center:qs(e),deltaX:t.deltaX,deltaY:t.deltaY}}function Us(t,e,i){i||(i=As);var n=e[i[0]]-t[i[0]],o=e[i[1]]-t[i[1]];return Math.sqrt(n*n+o*o)}function Ys(t,e,i){i||(i=As);var n=e[i[0]]-t[i[0]],o=e[i[1]]-t[i[1]];return 180*Math.atan2(o,n)/Math.PI}function Xs(t,e){return t===e?1:ys(t)>=ys(e)?t<0?2:4:e<0?8:zs}function Gs(t,e,i){return{x:e/t||0,y:i/t||0}}function Ks(t,e){var i=t.session,n=e.pointers,o=n.length;i.firstInput||(i.firstInput=Vs(e)),o>1&&!i.firstMultiple?i.firstMultiple=Vs(e):1===o&&(i.firstMultiple=!1);var r=i.firstInput,s=i.firstMultiple,a=s?s.center:r.center,h=e.center=qs(n);e.timeStamp=ms(),e.deltaTime=e.timeStamp-r.timeStamp,e.angle=Ys(a,h),e.distance=Us(a,h),function(t,e){var i=e.center,n=t.offsetDelta||{},o=t.prevDelta||{},r=t.prevInput||{};1!==e.eventType&&4!==r.eventType||(o=t.prevDelta={x:r.deltaX||0,y:r.deltaY||0},n=t.offsetDelta={x:i.x,y:i.y}),e.deltaX=o.x+(i.x-n.x),e.deltaY=o.y+(i.y-n.y)}(i,e),e.offsetDirection=Xs(e.deltaX,e.deltaY);var l,d,c=Gs(e.deltaTime,e.deltaX,e.deltaY);e.overallVelocityX=c.x,e.overallVelocityY=c.y,e.overallVelocity=ys(c.x)>ys(c.y)?c.x:c.y,e.scale=s?(l=s.pointers,Us((d=n)[0],d[1],Fs)/Us(l[0],l[1],Fs)):1,e.rotation=s?function(t,e){return Ys(e[1],e[0],Fs)+Ys(t[1],t[0],Fs)}(s.pointers,n):0,e.maxPointers=i.prevInput?e.pointers.length>i.prevInput.maxPointers?e.pointers.length:i.prevInput.maxPointers:e.pointers.length,function(t,e){var i,n,o,r,s=t.lastInterval||e,a=e.timeStamp-s.timeStamp;if(8!==e.eventType&&(a>25||void 0===s.velocity)){var h=e.deltaX-s.deltaX,l=e.deltaY-s.deltaY,d=Gs(a,h,l);n=d.x,o=d.y,i=ys(d.x)>ys(d.y)?d.x:d.y,r=Xs(h,l),t.lastInterval=e}else i=s.velocity,n=s.velocityX,o=s.velocityY,r=s.direction;e.velocity=i,e.velocityX=n,e.velocityY=o,e.direction=r}(i,e);var u,f=t.element,p=e.srcEvent;Ws(u=p.composedPath?p.composedPath()[0]:p.path?p.path[0]:p.target,f)&&(f=u),e.target=f}function $s(t,e,i){var n=i.pointers.length,o=i.changedPointers.length,r=1&e&&n-o==0,s=12&e&&n-o==0;i.isFirst=!!r,i.isFinal=!!s,r&&(t.session={}),i.eventType=e,Ks(t,i),t.emit(\"hammer.input\",i),t.recognize(i),t.session.prevInput=i}function Zs(t){return t.trim().split(/\\s+/g)}function Qs(t,e,i){js(Zs(e),(function(e){t.addEventListener(e,i,!1)}))}function Js(t,e,i){js(Zs(e),(function(e){t.removeEventListener(e,i,!1)}))}function ta(t){var e=t.ownerDocument||t;return e.defaultView||e.parentWindow||window}var ea=function(){function t(t,e){var i=this;this.manager=t,this.callback=e,this.element=t.element,this.target=t.options.inputTarget,this.domHandler=function(e){Rs(t.options.enable,[t])&&i.handler(e)},this.init()}var e=t.prototype;return e.handler=function(){},e.init=function(){this.evEl&&Qs(this.element,this.evEl,this.domHandler),this.evTarget&&Qs(this.target,this.evTarget,this.domHandler),this.evWin&&Qs(ta(this.element),this.evWin,this.domHandler)},e.destroy=function(){this.evEl&&Js(this.element,this.evEl,this.domHandler),this.evTarget&&Js(this.target,this.evTarget,this.domHandler),this.evWin&&Js(ta(this.element),this.evWin,this.domHandler)},t}();function ia(t,e,i){if(t.indexOf&&!i)return t.indexOf(e);for(var n=0;n<t.length;){if(i&&t[n][i]==e||!i&&t[n]===e)return n;n++}return-1}var na={pointerdown:1,pointermove:2,pointerup:4,pointercancel:8,pointerout:8},oa={2:Is,3:\"pen\",4:Bs,5:\"kinect\"},ra=\"pointerdown\",sa=\"pointermove pointerup pointercancel\";us.MSPointerEvent&&!us.PointerEvent&&(ra=\"MSPointerDown\",sa=\"MSPointerMove MSPointerUp MSPointerCancel\");var aa=function(t){function e(){var i,n=e.prototype;return n.evEl=ra,n.evWin=sa,(i=t.apply(this,arguments)||this).store=i.manager.session.pointerEvents=[],i}return ds(e,t),e.prototype.handler=function(t){var e=this.store,i=!1,n=t.type.toLowerCase().replace(\"ms\",\"\"),o=na[n],r=oa[t.pointerType]||t.pointerType,s=r===Is,a=ia(e,t.pointerId,\"pointerId\");1&o&&(0===t.button||s)?a<0&&(e.push(t),a=e.length-1):12&o&&(i=!0),a<0||(e[a]=t,this.callback(this.manager,o,{pointers:e,changedPointers:[t],pointerType:r,srcEvent:t}),i&&e.splice(a,1))},e}(ea);function ha(t){return Array.prototype.slice.call(t,0)}function la(t,e,i){for(var n=[],o=[],r=0;r<t.length;){var s=e?t[r][e]:t[r];ia(o,s)<0&&n.push(t[r]),o[r]=s,r++}return i&&(n=e?n.sort((function(t,i){return t[e]>i[e]})):n.sort()),n}var da={touchstart:1,touchmove:2,touchend:4,touchcancel:8},ca=\"touchstart touchmove touchend touchcancel\",ua=function(t){function e(){var i;return e.prototype.evTarget=ca,(i=t.apply(this,arguments)||this).targetIds={},i}return ds(e,t),e.prototype.handler=function(t){var e=da[t.type],i=fa.call(this,t,e);i&&this.callback(this.manager,e,{pointers:i[0],changedPointers:i[1],pointerType:Is,srcEvent:t})},e}(ea);function fa(t,e){var i,n,o=ha(t.touches),r=this.targetIds;if(3&e&&1===o.length)return r[o[0].identifier]=!0,[o,o];var s=ha(t.changedTouches),a=[],h=this.target;if(n=o.filter((function(t){return Ws(t.target,h)})),1===e)for(i=0;i<n.length;)r[n[i].identifier]=!0,i++;for(i=0;i<s.length;)r[s[i].identifier]&&a.push(s[i]),12&e&&delete r[s[i].identifier],i++;return a.length?[la(n.concat(a),\"identifier\",!0),a]:void 0}var pa={mousedown:1,mousemove:2,mouseup:4},va=\"mousedown\",ga=\"mousemove mouseup\",ya=function(t){function e(){var i,n=e.prototype;return n.evEl=va,n.evWin=ga,(i=t.apply(this,arguments)||this).pressed=!1,i}return ds(e,t),e.prototype.handler=function(t){var e=pa[t.type];1&e&&0===t.button&&(this.pressed=!0),2&e&&1!==t.which&&(e=4),this.pressed&&(4&e&&(this.pressed=!1),this.callback(this.manager,e,{pointers:[t],changedPointers:[t],pointerType:Bs,srcEvent:t}))},e}(ea);function ma(t){var e=t.changedPointers[0];if(e.identifier===this.primaryTouch){var i={x:e.clientX,y:e.clientY},n=this.lastTouches;this.lastTouches.push(i);setTimeout((function(){var t=n.indexOf(i);t>-1&&n.splice(t,1)}),2500)}}function ba(t,e){1&t?(this.primaryTouch=e.changedPointers[0].identifier,ma.call(this,e)):12&t&&ma.call(this,e)}function wa(t){for(var e=t.srcEvent.clientX,i=t.srcEvent.clientY,n=0;n<this.lastTouches.length;n++){var o=this.lastTouches[n],r=Math.abs(e-o.x),s=Math.abs(i-o.y);if(r<=25&&s<=25)return!0}return!1}var ka=function(){return function(t){function e(e,i){var n;return(n=t.call(this,e,i)||this).handler=function(t,e,i){var o=i.pointerType===Is,r=i.pointerType===Bs;if(!(r&&i.sourceCapabilities&&i.sourceCapabilities.firesTouchEvents)){if(o)ba.call(cs(cs(n)),e,i);else if(r&&wa.call(cs(cs(n)),i))return;n.callback(t,e,i)}},n.touch=new ua(n.manager,n.handler),n.mouse=new ya(n.manager,n.handler),n.primaryTouch=null,n.lastTouches=[],n}return ds(e,t),e.prototype.destroy=function(){this.touch.destroy(),this.mouse.destroy()},e}(ea)}();function _a(t,e,i){return!!Array.isArray(t)&&(js(t,i[e],i),!0)}var xa=32,Ea=1;function Oa(t,e){var i=e.manager;return i?i.get(t):t}function Ca(t){return 16&t?\"cancel\":8&t?\"end\":4&t?\"move\":2&t?\"start\":\"\"}var Sa=function(){function t(t){void 0===t&&(t={}),this.options=ls({enable:!0},t),this.id=Ea++,this.manager=null,this.state=1,this.simultaneous={},this.requireFail=[]}var e=t.prototype;return e.set=function(t){return fs(this.options,t),this.manager&&this.manager.touchAction.update(),this},e.recognizeWith=function(t){if(_a(t,\"recognizeWith\",this))return this;var e=this.simultaneous;return e[(t=Oa(t,this)).id]||(e[t.id]=t,t.recognizeWith(this)),this},e.dropRecognizeWith=function(t){return _a(t,\"dropRecognizeWith\",this)||(t=Oa(t,this),delete this.simultaneous[t.id]),this},e.requireFailure=function(t){if(_a(t,\"requireFailure\",this))return this;var e=this.requireFail;return-1===ia(e,t=Oa(t,this))&&(e.push(t),t.requireFailure(this)),this},e.dropRequireFailure=function(t){if(_a(t,\"dropRequireFailure\",this))return this;t=Oa(t,this);var e=ia(this.requireFail,t);return e>-1&&this.requireFail.splice(e,1),this},e.hasRequireFailures=function(){return this.requireFail.length>0},e.canRecognizeWith=function(t){return!!this.simultaneous[t.id]},e.emit=function(t){var e=this,i=this.state;function n(i){e.manager.emit(i,t)}i<8&&n(e.options.event+Ca(i)),n(e.options.event),t.additionalEvent&&n(t.additionalEvent),i>=8&&n(e.options.event+Ca(i))},e.tryEmit=function(t){if(this.canEmit())return this.emit(t);this.state=xa},e.canEmit=function(){for(var t=0;t<this.requireFail.length;){if(!(33&this.requireFail[t].state))return!1;t++}return!0},e.recognize=function(t){var e=fs({},t);if(!Rs(this.options.enable,[this,e]))return this.reset(),void(this.state=xa);56&this.state&&(this.state=1),this.state=this.process(e),30&this.state&&this.tryEmit(e)},e.process=function(t){},e.getTouchAction=function(){},e.reset=function(){},t}(),Ta=function(t){function e(e){var i;return void 0===e&&(e={}),(i=t.call(this,ls({event:\"tap\",pointers:1,taps:1,interval:300,time:250,threshold:9,posThreshold:10},e))||this).pTime=!1,i.pCenter=!1,i._timer=null,i._input=null,i.count=0,i}ds(e,t);var i=e.prototype;return i.getTouchAction=function(){return[Es]},i.process=function(t){var e=this,i=this.options,n=t.pointers.length===i.pointers,o=t.distance<i.threshold,r=t.deltaTime<i.time;if(this.reset(),1&t.eventType&&0===this.count)return this.failTimeout();if(o&&r&&n){if(4!==t.eventType)return this.failTimeout();var s=!this.pTime||t.timeStamp-this.pTime<i.interval,a=!this.pCenter||Us(this.pCenter,t.center)<i.posThreshold;if(this.pTime=t.timeStamp,this.pCenter=t.center,a&&s?this.count+=1:this.count=1,this._input=t,0===this.count%i.taps)return this.hasRequireFailures()?(this._timer=setTimeout((function(){e.state=8,e.tryEmit()}),i.interval),2):8}return xa},i.failTimeout=function(){var t=this;return this._timer=setTimeout((function(){t.state=xa}),this.options.interval),xa},i.reset=function(){clearTimeout(this._timer)},i.emit=function(){8===this.state&&(this._input.tapCount=this.count,this.manager.emit(this.options.event,this._input))},e}(Sa),Ma=function(t){function e(e){return void 0===e&&(e={}),t.call(this,ls({pointers:1},e))||this}ds(e,t);var i=e.prototype;return i.attrTest=function(t){var e=this.options.pointers;return 0===e||t.pointers.length===e},i.process=function(t){var e=this.state,i=t.eventType,n=6&e,o=this.attrTest(t);return n&&(8&i||!o)?16|e:n||o?4&i?8|e:2&e?4|e:2:xa},e}(Sa);function Pa(t){return t===zs?\"down\":8===t?\"up\":2===t?\"left\":4===t?\"right\":\"\"}var Da=function(t){function e(e){var i;return void 0===e&&(e={}),(i=t.call(this,ls({event:\"pan\",threshold:10,pointers:1,direction:30},e))||this).pX=null,i.pY=null,i}ds(e,t);var i=e.prototype;return i.getTouchAction=function(){var t=this.options.direction,e=[];return 6&t&&e.push(Ss),t&Ns&&e.push(Cs),e},i.directionTest=function(t){var e=this.options,i=!0,n=t.distance,o=t.direction,r=t.deltaX,s=t.deltaY;return o&e.direction||(6&e.direction?(o=0===r?1:r<0?2:4,i=r!==this.pX,n=Math.abs(t.deltaX)):(o=0===s?1:s<0?8:zs,i=s!==this.pY,n=Math.abs(t.deltaY))),t.direction=o,i&&n>e.threshold&&o&e.direction},i.attrTest=function(t){return Ma.prototype.attrTest.call(this,t)&&(2&this.state||!(2&this.state)&&this.directionTest(t))},i.emit=function(e){this.pX=e.deltaX,this.pY=e.deltaY;var i=Pa(e.direction);i&&(e.additionalEvent=this.options.event+i),t.prototype.emit.call(this,e)},e}(Ma),Ia=function(t){function e(e){return void 0===e&&(e={}),t.call(this,ls({event:\"swipe\",threshold:10,velocity:.3,direction:30,pointers:1},e))||this}ds(e,t);var i=e.prototype;return i.getTouchAction=function(){return Da.prototype.getTouchAction.call(this)},i.attrTest=function(e){var i,n=this.options.direction;return 30&n?i=e.overallVelocity:6&n?i=e.overallVelocityX:n&Ns&&(i=e.overallVelocityY),t.prototype.attrTest.call(this,e)&&n&e.offsetDirection&&e.distance>this.options.threshold&&e.maxPointers===this.options.pointers&&ys(i)>this.options.velocity&&4&e.eventType},i.emit=function(t){var e=Pa(t.offsetDirection);e&&this.manager.emit(this.options.event+e,t),this.manager.emit(this.options.event,t)},e}(Ma),Ba=function(t){function e(e){return void 0===e&&(e={}),t.call(this,ls({event:\"pinch\",threshold:0,pointers:2},e))||this}ds(e,t);var i=e.prototype;return i.getTouchAction=function(){return[Os]},i.attrTest=function(e){return t.prototype.attrTest.call(this,e)&&(Math.abs(e.scale-1)>this.options.threshold||2&this.state)},i.emit=function(e){if(1!==e.scale){var i=e.scale<1?\"in\":\"out\";e.additionalEvent=this.options.event+i}t.prototype.emit.call(this,e)},e}(Ma),za=function(t){function e(e){return void 0===e&&(e={}),t.call(this,ls({event:\"rotate\",threshold:0,pointers:2},e))||this}ds(e,t);var i=e.prototype;return i.getTouchAction=function(){return[Os]},i.attrTest=function(e){return t.prototype.attrTest.call(this,e)&&(Math.abs(e.rotation)>this.options.threshold||2&this.state)},e}(Ma),Na=function(t){function e(e){var i;return void 0===e&&(e={}),(i=t.call(this,ls({event:\"press\",pointers:1,time:251,threshold:9},e))||this)._timer=null,i._input=null,i}ds(e,t);var i=e.prototype;return i.getTouchAction=function(){return[xs]},i.process=function(t){var e=this,i=this.options,n=t.pointers.length===i.pointers,o=t.distance<i.threshold,r=t.deltaTime>i.time;if(this._input=t,!o||!n||12&t.eventType&&!r)this.reset();else if(1&t.eventType)this.reset(),this._timer=setTimeout((function(){e.state=8,e.tryEmit()}),i.time);else if(4&t.eventType)return 8;return xa},i.reset=function(){clearTimeout(this._timer)},i.emit=function(t){8===this.state&&(t&&4&t.eventType?this.manager.emit(this.options.event+\"up\",t):(this._input.timeStamp=ms(),this.manager.emit(this.options.event,this._input)))},e}(Sa),Aa={domEvents:!1,touchAction:_s,enable:!0,inputTarget:null,inputClass:null,cssProps:{userSelect:\"none\",touchSelect:\"none\",touchCallout:\"none\",contentZooming:\"none\",userDrag:\"none\",tapHighlightColor:\"rgba(0,0,0,0)\"}},Fa=[[za,{enable:!1}],[Ba,{enable:!1},[\"rotate\"]],[Ia,{direction:6}],[Da,{direction:6},[\"swipe\"]],[Ta],[Ta,{event:\"doubletap\",taps:2},[\"tap\"]],[Na]];function ja(t,e){var i,n=t.element;n.style&&(js(t.options.cssProps,(function(o,r){i=bs(n.style,r),e?(t.oldCssProps[i]=n.style[i],n.style[i]=o):n.style[i]=t.oldCssProps[i]||\"\"})),e||(t.oldCssProps={}))}var Ra=function(){function t(t,e){var i,n=this;this.options=fs({},Aa,e||{}),this.options.inputTarget=this.options.inputTarget||t,this.handlers={},this.session={},this.recognizers=[],this.oldCssProps={},this.element=t,this.input=new((i=this).options.inputClass||(Ps?aa:Ds?ua:Ms?ka:ya))(i,$s),this.touchAction=new Hs(this,this.options.touchAction),ja(this,!0),js(this.options.recognizers,(function(t){var e=n.add(new t[0](t[1]));t[2]&&e.recognizeWith(t[2]),t[3]&&e.requireFailure(t[3])}),this)}var e=t.prototype;return e.set=function(t){return fs(this.options,t),t.touchAction&&this.touchAction.update(),t.inputTarget&&(this.input.destroy(),this.input.target=t.inputTarget,this.input.init()),this},e.stop=function(t){this.session.stopped=t?2:1},e.recognize=function(t){var e=this.session;if(!e.stopped){var i;this.touchAction.preventDefaults(t);var n=this.recognizers,o=e.curRecognizer;(!o||o&&8&o.state)&&(e.curRecognizer=null,o=null);for(var r=0;r<n.length;)i=n[r],2===e.stopped||o&&i!==o&&!i.canRecognizeWith(o)?i.reset():i.recognize(t),!o&&14&i.state&&(e.curRecognizer=i,o=i),r++}},e.get=function(t){if(t instanceof Sa)return t;for(var e=this.recognizers,i=0;i<e.length;i++)if(e[i].options.event===t)return e[i];return null},e.add=function(t){if(_a(t,\"add\",this))return this;var e=this.get(t.options.event);return e&&this.remove(e),this.recognizers.push(t),t.manager=this,this.touchAction.update(),t},e.remove=function(t){if(_a(t,\"remove\",this))return this;var e=this.get(t);if(t){var i=this.recognizers,n=ia(i,e);-1!==n&&(i.splice(n,1),this.touchAction.update())}return this},e.on=function(t,e){if(void 0===t||void 0===e)return this;var i=this.handlers;return js(Zs(t),(function(t){i[t]=i[t]||[],i[t].push(e)})),this},e.off=function(t,e){if(void 0===t)return this;var i=this.handlers;return js(Zs(t),(function(t){e?i[t]&&i[t].splice(ia(i[t],e),1):delete i[t]})),this},e.emit=function(t,e){this.options.domEvents&&function(t,e){var i=document.createEvent(\"Event\");i.initEvent(t,!0,!0),i.gesture=e,e.target.dispatchEvent(i)}(t,e);var i=this.handlers[t]&&this.handlers[t].slice();if(i&&i.length){e.type=t,e.preventDefault=function(){e.srcEvent.preventDefault()};for(var n=0;n<i.length;)i[n](e),n++}},e.destroy=function(){this.element&&ja(this,!1),this.handlers={},this.session={},this.input.destroy(),this.element=null},t}(),La={touchstart:1,touchmove:2,touchend:4,touchcancel:8},Ha=\"touchstart\",Wa=\"touchstart touchmove touchend touchcancel\",qa=function(t){function e(){var i,n=e.prototype;return n.evTarget=Ha,n.evWin=Wa,(i=t.apply(this,arguments)||this).started=!1,i}return ds(e,t),e.prototype.handler=function(t){var e=La[t.type];if(1===e&&(this.started=!0),this.started){var i=Va.call(this,t,e);12&e&&i[0].length-i[1].length==0&&(this.started=!1),this.callback(this.manager,e,{pointers:i[0],changedPointers:i[1],pointerType:Is,srcEvent:t})}},e}(ea);function Va(t,e){var i=ha(t.touches),n=ha(t.changedTouches);return 12&e&&(i=la(i.concat(n),\"identifier\",!0)),[i,n]}function Ua(t,e,i){var n=\"DEPRECATED METHOD: \"+e+\"\\n\"+i+\" AT \\n\";return function(){var e=new Error(\"get-stack-trace\"),i=e&&e.stack?e.stack.replace(/^[^\\(]+?[\\n$]/gm,\"\").replace(/^\\s+at\\s+/gm,\"\").replace(/^Object.<anonymous>\\s*\\(/gm,\"{anonymous}()@\"):\"Unknown Stack Trace\",o=window.console&&(window.console.warn||window.console.log);return o&&o.call(window.console,n,i),t.apply(this,arguments)}}var Ya=Ua((function(t,e,i){for(var n=Object.keys(e),o=0;o<n.length;)(!i||i&&void 0===t[n[o]])&&(t[n[o]]=e[n[o]]),o++;return t}),\"extend\",\"Use `assign`.\"),Xa=Ua((function(t,e){return Ya(t,e,!0)}),\"merge\",\"Use `assign`.\");function Ga(t,e,i){var n,o=e.prototype;(n=t.prototype=Object.create(o)).constructor=t,n._super=o,i&&fs(n,i)}function Ka(t,e){return function(){return t.apply(e,arguments)}}var $a=function(){var t=function(t,e){return void 0===e&&(e={}),new Ra(t,ls({recognizers:Fa.concat()},e))};return t.VERSION=\"2.0.17-rc\",t.DIRECTION_ALL=30,t.DIRECTION_DOWN=zs,t.DIRECTION_LEFT=2,t.DIRECTION_RIGHT=4,t.DIRECTION_UP=8,t.DIRECTION_HORIZONTAL=6,t.DIRECTION_VERTICAL=Ns,t.DIRECTION_NONE=1,t.DIRECTION_DOWN=zs,t.INPUT_START=1,t.INPUT_MOVE=2,t.INPUT_END=4,t.INPUT_CANCEL=8,t.STATE_POSSIBLE=1,t.STATE_BEGAN=2,t.STATE_CHANGED=4,t.STATE_ENDED=8,t.STATE_RECOGNIZED=8,t.STATE_CANCELLED=16,t.STATE_FAILED=xa,t.Manager=Ra,t.Input=ea,t.TouchAction=Hs,t.TouchInput=ua,t.MouseInput=ya,t.PointerEventInput=aa,t.TouchMouseInput=ka,t.SingleTouchInput=qa,t.Recognizer=Sa,t.AttrRecognizer=Ma,t.Tap=Ta,t.Pan=Da,t.Swipe=Ia,t.Pinch=Ba,t.Rotate=za,t.Press=Na,t.on=Qs,t.off=Js,t.each=js,t.merge=Xa,t.extend=Ya,t.bindFn=Ka,t.assign=fs,t.inherit=Ga,t.bindFn=Ka,t.prefixed=bs,t.toArray=ha,t.inArray=ia,t.uniqueArray=la,t.splitStr=Zs,t.boolOrFn=Rs,t.hasParent=Ws,t.addEventListeners=Qs,t.removeEventListeners=Js,t.defaults=fs({},Aa,{preset:Fa}),t}();function Za(t,e){var i=zo(t);if(On){var n=On(t);e&&(n=mr(n).call(n,(function(e){return Mn(t,e).enumerable}))),i.push.apply(i,n)}return i}function Qa(t){for(var e=1;e<arguments.length;e++){var i,n=null!=arguments[e]?arguments[e]:{};if(e%2)Wo(i=Za(Object(n),!0)).call(i,(function(e){jn(t,e,n[e])}));else if(Dn)In(t,Dn(n));else{var o;Wo(o=Za(Object(n))).call(o,(function(e){zn(t,e,Mn(n,e))}))}}return t}function Ja(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return th(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return th(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function th(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}var eh=ko(\"DELETE\");function ih(t){for(var e,i=arguments.length,n=new Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];return nh.apply(void 0,Eo(e=[{},t]).call(e,n))}function nh(){var t=oh.apply(void 0,arguments);return sh(t),t}function oh(){for(var t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];if(e.length<2)return e[0];var n;if(e.length>2)return oh.apply(void 0,Eo(n=[nh(e[0],e[1])]).call(n,wo(Oo(e).call(e,2))));var o,r=e[0],s=e[1],a=Ja(Co(s));try{for(a.s();!(o=a.n()).done;){var h=o.value;Object.prototype.propertyIsEnumerable.call(s,h)&&(s[h]===eh?delete r[h]:null===r[h]||null===s[h]||\"object\"!==go(r[h])||\"object\"!==go(s[h])||So(r[h])||So(s[h])?r[h]=rh(s[h]):r[h]=oh(r[h],s[h]))}}catch(t){a.e(t)}finally{a.f()}return r}function rh(t){return So(t)?Io(t).call(t,(function(t){return rh(t)})):\"object\"===go(t)&&null!==t?oh({},t):t}function sh(t){for(var e=0,i=zo(t);e<i.length;e++){var n=i[e];t[n]===eh?delete t[n]:\"object\"===go(t[n])&&null!==t[n]&&sh(t[n])}}function ah(){for(var t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];return hh(e.length?e:[No()])}function hh(t){var e=function(){for(var t=lh(),e=t(\" \"),i=t(\" \"),n=t(\" \"),o=0;o<arguments.length;o++)(e-=t(o<0||arguments.length<=o?void 0:arguments[o]))<0&&(e+=1),(i-=t(o<0||arguments.length<=o?void 0:arguments[o]))<0&&(i+=1),(n-=t(o<0||arguments.length<=o?void 0:arguments[o]))<0&&(n+=1);return[e,i,n]}(t),i=uo(e,3),n=i[0],o=i[1],r=i[2],s=1,a=function(){var t=2091639*n+2.3283064365386963e-10*s;return n=o,o=r,r=t-(s=0|t)};return a.uint32=function(){return 4294967296*a()},a.fract53=function(){return a()+11102230246251565e-32*(2097152*a()|0)},a.algorithm=\"Alea\",a.seed=t,a.version=\"0.9\",a}function lh(){var t=4022871197;return function(e){for(var i=e.toString(),n=0;n<i.length;n++){var o=.02519603282416938*(t+=i.charCodeAt(n));o-=t=o>>>0,t=(o*=t)>>>0,t+=4294967296*(o-=t)}return 2.3283064365386963e-10*(t>>>0)}}var dh=\"undefined\"!=typeof window?window.Hammer||$a:function(){return{on:t=function(){},off:t,destroy:t,emit:t,get:function(){return{set:t}}};var t};function ch(t){var e,i=this;this._cleanupQueue=[],this.active=!1,this._dom={container:t,overlay:document.createElement(\"div\")},this._dom.overlay.classList.add(\"vis-overlay\"),this._dom.container.appendChild(this._dom.overlay),this._cleanupQueue.push((function(){i._dom.overlay.parentNode.removeChild(i._dom.overlay)}));var n=dh(this._dom.overlay);n.on(\"tap\",Vt(e=this._onTapOverlay).call(e,this)),this._cleanupQueue.push((function(){n.destroy()}));var o=[\"tap\",\"doubletap\",\"press\",\"pinch\",\"pan\",\"panstart\",\"panmove\",\"panend\"];Wo(o).call(o,(function(t){n.on(t,(function(t){t.srcEvent.stopPropagation()}))})),document&&document.body&&(this._onClick=function(e){(function(t,e){for(;t;){if(t===e)return!0;t=t.parentNode}return!1})(e.target,t)||i.deactivate()},document.body.addEventListener(\"click\",this._onClick),this._cleanupQueue.push((function(){document.body.removeEventListener(\"click\",i._onClick)}))),this._escListener=function(t){(\"key\"in t?\"Escape\"===t.key:27===t.keyCode)&&i.deactivate()}}Zt(ch.prototype),ch.current=null,ch.prototype.destroy=function(){var t,e;this.deactivate();var i,n=Ja(Xo(t=er(e=this._cleanupQueue).call(e,0)).call(t));try{for(n.s();!(i=n.n()).done;){(0,i.value)()}}catch(t){n.e(t)}finally{n.f()}},ch.prototype.activate=function(){ch.current&&ch.current.deactivate(),ch.current=this,this.active=!0,this._dom.overlay.style.display=\"none\",this._dom.container.classList.add(\"vis-active\"),this.emit(\"change\"),this.emit(\"activate\"),document.body.addEventListener(\"keydown\",this._escListener)},ch.prototype.deactivate=function(){this.active=!1,this._dom.overlay.style.display=\"block\",this._dom.container.classList.remove(\"vis-active\"),document.body.removeEventListener(\"keydown\",this._escListener),this.emit(\"change\"),this.emit(\"deactivate\")},ch.prototype._onTapOverlay=function(t){this.activate(),t.srcEvent.stopPropagation()};var uh=/^\\/?Date\\((-?\\d+)/i,fh=/^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i,ph=/^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i,vh=/^rgb\\( *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *\\)$/i,gh=/^rgba\\( *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *([01]|0?\\.\\d+) *\\)$/i;function yh(t){return t instanceof Number||\"number\"==typeof t}function mh(t){if(t)for(;!0===t.hasChildNodes();){var e=t.firstChild;e&&(mh(e),t.removeChild(e))}}function bh(t){return t instanceof String||\"string\"==typeof t}function wh(t){return\"object\"===go(t)&&null!==t}function kh(t,e,i,n){var o=!1;!0===n&&(o=null===e[i]&&void 0!==t[i]),o?delete t[i]:t[i]=e[i]}function _h(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];for(var n in t)if(void 0!==e[n])if(null===e[n]||\"object\"!==go(e[n]))kh(t,e,n,i);else{var o=t[n],r=e[n];wh(o)&&wh(r)&&_h(o,r,i)}}var xh=At;function Eh(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(So(i))throw new TypeError(\"Arrays are not supported by deepExtend\");for(var o=0;o<t.length;o++){var r=t[o];if(Object.prototype.hasOwnProperty.call(i,r))if(i[r]&&i[r].constructor===Object)void 0===e[r]&&(e[r]={}),e[r].constructor===Object?Ch(e[r],i[r],!1,n):kh(e,i,r,n);else{if(So(i[r]))throw new TypeError(\"Arrays are not supported by deepExtend\");kh(e,i,r,n)}}return e}function Oh(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(So(i))throw new TypeError(\"Arrays are not supported by deepExtend\");for(var o in i)if(Object.prototype.hasOwnProperty.call(i,o)&&!dr(t).call(t,o))if(i[o]&&i[o].constructor===Object)void 0===e[o]&&(e[o]={}),e[o].constructor===Object?Ch(e[o],i[o]):kh(e,i,o,n);else if(So(i[o])){e[o]=[];for(var r=0;r<i[o].length;r++)e[o].push(i[o][r])}else kh(e,i,o,n);return e}function Ch(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];for(var o in e)if(Object.prototype.hasOwnProperty.call(e,o)||!0===i)if(\"object\"===go(e[o])&&null!==e[o]&&fr(e[o])===Object.prototype)void 0===t[o]?t[o]=Ch({},e[o],i):\"object\"===go(t[o])&&null!==t[o]&&fr(t[o])===Object.prototype?Ch(t[o],e[o],i):kh(t,e,o,n);else if(So(e[o])){var r;t[o]=Oo(r=e[o]).call(r)}else kh(t,e,o,n);return t}function Sh(t,e){var i;return Eo(i=[]).call(i,wo(t),[e])}function Th(t){return Oo(t).call(t)}function Mh(t){return t.getBoundingClientRect().left}function Ph(t){return t.getBoundingClientRect().top}function Dh(t,e){if(So(t))for(var i=t.length,n=0;n<i;n++)e(t[n],n,t);else for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&e(t[o],o,t)}var Ih=_r;function Bh(t,e,i,n){var o;t.addEventListener?(void 0===n&&(n=!1),\"mousewheel\"===e&&dr(o=navigator.userAgent).call(o,\"Firefox\")&&(e=\"DOMMouseScroll\"),t.addEventListener(e,i,n)):t.attachEvent(\"on\"+e,i)}function zh(t,e,i,n){var o;t.removeEventListener?(void 0===n&&(n=!1),\"mousewheel\"===e&&dr(o=navigator.userAgent).call(o,\"Firefox\")&&(e=\"DOMMouseScroll\"),t.removeEventListener(e,i,n)):t.detachEvent(\"on\"+e,i)}var Nh={asBoolean:function(t,e){return\"function\"==typeof t&&(t=t()),null!=t?0!=t:e||null},asNumber:function(t,e){return\"function\"==typeof t&&(t=t()),null!=t?Number(t)||e||null:e||null},asString:function(t,e){return\"function\"==typeof t&&(t=t()),null!=t?String(t):e||null},asSize:function(t,e){return\"function\"==typeof t&&(t=t()),bh(t)?t:yh(t)?t+\"px\":e||null},asElement:function(t,e){return\"function\"==typeof t&&(t=t()),t||e||null}};function Ah(t){var e;switch(t.length){case 3:case 4:return(e=ph.exec(t))?{r:Br(e[1]+e[1],16),g:Br(e[2]+e[2],16),b:Br(e[3]+e[3],16)}:null;case 6:case 7:return(e=fh.exec(t))?{r:Br(e[1],16),g:Br(e[2],16),b:Br(e[3],16)}:null;default:return null}}function Fh(t,e){if(dr(t).call(t,\"rgba\"))return t;if(dr(t).call(t,\"rgb\")){var i=t.substr(Hr(t).call(t,\"(\")+1).replace(\")\",\"\").split(\",\");return\"rgba(\"+i[0]+\",\"+i[1]+\",\"+i[2]+\",\"+e+\")\"}var n=Ah(t);return null==n?t:\"rgba(\"+n.r+\",\"+n.g+\",\"+n.b+\",\"+e+\")\"}function jh(t,e,i){var n;return\"#\"+Oo(n=((1<<24)+(t<<16)+(e<<8)+i).toString(16)).call(n,1)}function Rh(t,e){if(bh(t)){var i=t;if(Xh(i)){var n,o=Io(n=i.substr(4).substr(0,i.length-5).split(\",\")).call(n,(function(t){return Br(t)}));i=jh(o[0],o[1],o[2])}if(!0===Yh(i)){var r=Uh(i),s={h:r.h,s:.8*r.s,v:Math.min(1,1.02*r.v)},a={h:r.h,s:Math.min(1,1.25*r.s),v:.8*r.v},h=Vh(a.h,a.s,a.v),l=Vh(s.h,s.s,s.v);return{background:i,border:h,highlight:{background:l,border:h},hover:{background:l,border:h}}}return{background:i,border:i,highlight:{background:i,border:i},hover:{background:i,border:i}}}return e?{background:t.background||e.background,border:t.border||e.border,highlight:bh(t.highlight)?{border:t.highlight,background:t.highlight}:{background:t.highlight&&t.highlight.background||e.highlight.background,border:t.highlight&&t.highlight.border||e.highlight.border},hover:bh(t.hover)?{border:t.hover,background:t.hover}:{border:t.hover&&t.hover.border||e.hover.border,background:t.hover&&t.hover.background||e.hover.background}}:{background:t.background||void 0,border:t.border||void 0,highlight:bh(t.highlight)?{border:t.highlight,background:t.highlight}:{background:t.highlight&&t.highlight.background||void 0,border:t.highlight&&t.highlight.border||void 0},hover:bh(t.hover)?{border:t.hover,background:t.hover}:{border:t.hover&&t.hover.border||void 0,background:t.hover&&t.hover.background||void 0}}}function Lh(t,e,i){t/=255,e/=255,i/=255;var n=Math.min(t,Math.min(e,i)),o=Math.max(t,Math.max(e,i));return n===o?{h:0,s:0,v:n}:{h:60*((t===n?3:i===n?1:5)-(t===n?e-i:i===n?t-e:i-t)/(o-n))/360,s:(o-n)/o,v:o}}var Hh=function(t){var e,i={};return Wo(e=t.split(\";\")).call(e,(function(t){if(\"\"!=Ur(t).call(t)){var e,n,o=t.split(\":\"),r=Ur(e=o[0]).call(e),s=Ur(n=o[1]).call(n);i[r]=s}})),i},Wh=function(t){var e;return Io(e=zo(t)).call(e,(function(e){return e+\": \"+t[e]})).join(\"; \")};function qh(t,e,i){var n,o,r,s=Math.floor(6*t),a=6*t-s,h=i*(1-e),l=i*(1-a*e),d=i*(1-(1-a)*e);switch(s%6){case 0:n=i,o=d,r=h;break;case 1:n=l,o=i,r=h;break;case 2:n=h,o=i,r=d;break;case 3:n=h,o=l,r=i;break;case 4:n=d,o=h,r=i;break;case 5:n=i,o=h,r=l}return{r:Math.floor(255*n),g:Math.floor(255*o),b:Math.floor(255*r)}}function Vh(t,e,i){var n=qh(t,e,i);return jh(n.r,n.g,n.b)}function Uh(t){var e=Ah(t);if(!e)throw new TypeError(\"'\".concat(t,\"' is not a valid color.\"));return Lh(e.r,e.g,e.b)}function Yh(t){return/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(t)}function Xh(t){return vh.test(t)}function Gh(t){return gh.test(t)}function Kh(t){if(null===t||\"object\"!==go(t))return null;if(t instanceof Element)return t;var e=Gr(t);for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&\"object\"==go(t[i])&&(e[i]=Kh(t[i]));return e}function $h(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},o=function(t){return null!=t},r=function(t){return null!==t&&\"object\"===go(t)},s=function(t){for(var e in t)if(Object.prototype.hasOwnProperty.call(t,e))return!1;return!0};if(!r(t))throw new Error(\"Parameter mergeTarget must be an object\");if(!r(e))throw new Error(\"Parameter options must be an object\");if(!o(i))throw new Error(\"Parameter option must have a value\");if(!r(n))throw new Error(\"Parameter globalOptions must be an object\");var a=function(t,e,i){r(t[i])||(t[i]={});var n=e[i],o=t[i];for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(o[s]=n[s])},h=e[i],l=r(n)&&!s(n),d=l?n[i]:void 0,c=d?d.enabled:void 0;if(void 0!==h){if(\"boolean\"==typeof h)return r(t[i])||(t[i]={}),void(t[i].enabled=h);if(null===h&&!r(t[i])){if(!o(d))return;t[i]=Gr(d)}if(r(h)){var u=!0;void 0!==h.enabled?u=h.enabled:void 0!==c&&(u=d.enabled),a(t,e,i),t[i].enabled=u}}}var Zh={linear:function(t){return t},easeInQuad:function(t){return t*t},easeOutQuad:function(t){return t*(2-t)},easeInOutQuad:function(t){return t<.5?2*t*t:(4-2*t)*t-1},easeInCubic:function(t){return t*t*t},easeOutCubic:function(t){return--t*t*t+1},easeInOutCubic:function(t){return t<.5?4*t*t*t:(t-1)*(2*t-2)*(2*t-2)+1},easeInQuart:function(t){return t*t*t*t},easeOutQuart:function(t){return 1- --t*t*t*t},easeInOutQuart:function(t){return t<.5?8*t*t*t*t:1-8*--t*t*t*t},easeInQuint:function(t){return t*t*t*t*t},easeOutQuint:function(t){return 1+--t*t*t*t*t},easeInOutQuint:function(t){return t<.5?16*t*t*t*t*t:1+16*--t*t*t*t*t}};function Qh(t,e){var i;So(e)||(e=[e]);var n,o=Ja(t);try{for(o.s();!(n=o.n()).done;){var r=n.value;if(r){i=r[e[0]];for(var s=1;s<e.length;s++)i&&(i=i[e[s]]);if(void 0!==i)break}}}catch(t){o.e(t)}finally{o.f()}return i}var Jh={black:\"#000000\",navy:\"#000080\",darkblue:\"#00008B\",mediumblue:\"#0000CD\",blue:\"#0000FF\",darkgreen:\"#006400\",green:\"#008000\",teal:\"#008080\",darkcyan:\"#008B8B\",deepskyblue:\"#00BFFF\",darkturquoise:\"#00CED1\",mediumspringgreen:\"#00FA9A\",lime:\"#00FF00\",springgreen:\"#00FF7F\",aqua:\"#00FFFF\",cyan:\"#00FFFF\",midnightblue:\"#191970\",dodgerblue:\"#1E90FF\",lightseagreen:\"#20B2AA\",forestgreen:\"#228B22\",seagreen:\"#2E8B57\",darkslategray:\"#2F4F4F\",limegreen:\"#32CD32\",mediumseagreen:\"#3CB371\",turquoise:\"#40E0D0\",royalblue:\"#4169E1\",steelblue:\"#4682B4\",darkslateblue:\"#483D8B\",mediumturquoise:\"#48D1CC\",indigo:\"#4B0082\",darkolivegreen:\"#556B2F\",cadetblue:\"#5F9EA0\",cornflowerblue:\"#6495ED\",mediumaquamarine:\"#66CDAA\",dimgray:\"#696969\",slateblue:\"#6A5ACD\",olivedrab:\"#6B8E23\",slategray:\"#708090\",lightslategray:\"#778899\",mediumslateblue:\"#7B68EE\",lawngreen:\"#7CFC00\",chartreuse:\"#7FFF00\",aquamarine:\"#7FFFD4\",maroon:\"#800000\",purple:\"#800080\",olive:\"#808000\",gray:\"#808080\",skyblue:\"#87CEEB\",lightskyblue:\"#87CEFA\",blueviolet:\"#8A2BE2\",darkred:\"#8B0000\",darkmagenta:\"#8B008B\",saddlebrown:\"#8B4513\",darkseagreen:\"#8FBC8F\",lightgreen:\"#90EE90\",mediumpurple:\"#9370D8\",darkviolet:\"#9400D3\",palegreen:\"#98FB98\",darkorchid:\"#9932CC\",yellowgreen:\"#9ACD32\",sienna:\"#A0522D\",brown:\"#A52A2A\",darkgray:\"#A9A9A9\",lightblue:\"#ADD8E6\",greenyellow:\"#ADFF2F\",paleturquoise:\"#AFEEEE\",lightsteelblue:\"#B0C4DE\",powderblue:\"#B0E0E6\",firebrick:\"#B22222\",darkgoldenrod:\"#B8860B\",mediumorchid:\"#BA55D3\",rosybrown:\"#BC8F8F\",darkkhaki:\"#BDB76B\",silver:\"#C0C0C0\",mediumvioletred:\"#C71585\",indianred:\"#CD5C5C\",peru:\"#CD853F\",chocolate:\"#D2691E\",tan:\"#D2B48C\",lightgrey:\"#D3D3D3\",palevioletred:\"#D87093\",thistle:\"#D8BFD8\",orchid:\"#DA70D6\",goldenrod:\"#DAA520\",crimson:\"#DC143C\",gainsboro:\"#DCDCDC\",plum:\"#DDA0DD\",burlywood:\"#DEB887\",lightcyan:\"#E0FFFF\",lavender:\"#E6E6FA\",darksalmon:\"#E9967A\",violet:\"#EE82EE\",palegoldenrod:\"#EEE8AA\",lightcoral:\"#F08080\",khaki:\"#F0E68C\",aliceblue:\"#F0F8FF\",honeydew:\"#F0FFF0\",azure:\"#F0FFFF\",sandybrown:\"#F4A460\",wheat:\"#F5DEB3\",beige:\"#F5F5DC\",whitesmoke:\"#F5F5F5\",mintcream:\"#F5FFFA\",ghostwhite:\"#F8F8FF\",salmon:\"#FA8072\",antiquewhite:\"#FAEBD7\",linen:\"#FAF0E6\",lightgoldenrodyellow:\"#FAFAD2\",oldlace:\"#FDF5E6\",red:\"#FF0000\",fuchsia:\"#FF00FF\",magenta:\"#FF00FF\",deeppink:\"#FF1493\",orangered:\"#FF4500\",tomato:\"#FF6347\",hotpink:\"#FF69B4\",coral:\"#FF7F50\",darkorange:\"#FF8C00\",lightsalmon:\"#FFA07A\",orange:\"#FFA500\",lightpink:\"#FFB6C1\",pink:\"#FFC0CB\",gold:\"#FFD700\",peachpuff:\"#FFDAB9\",navajowhite:\"#FFDEAD\",moccasin:\"#FFE4B5\",bisque:\"#FFE4C4\",mistyrose:\"#FFE4E1\",blanchedalmond:\"#FFEBCD\",papayawhip:\"#FFEFD5\",lavenderblush:\"#FFF0F5\",seashell:\"#FFF5EE\",cornsilk:\"#FFF8DC\",lemonchiffon:\"#FFFACD\",floralwhite:\"#FFFAF0\",snow:\"#FFFAFA\",yellow:\"#FFFF00\",lightyellow:\"#FFFFE0\",ivory:\"#FFFFF0\",white:\"#FFFFFF\"},tl=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;Nn(this,t),this.pixelRatio=e,this.generated=!1,this.centerCoordinates={x:144.5,y:144.5},this.r=289*.49,this.color={r:255,g:255,b:255,a:1},this.hueCircle=void 0,this.initialColor={r:255,g:255,b:255,a:1},this.previousColor=void 0,this.applied=!1,this.updateCallback=function(){},this.closeCallback=function(){},this._create()}return Fn(t,[{key:\"insertTo\",value:function(t){void 0!==this.hammer&&(this.hammer.destroy(),this.hammer=void 0),this.container=t,this.container.appendChild(this.frame),this._bindHammer(),this._setSize()}},{key:\"setUpdateCallback\",value:function(t){if(\"function\"!=typeof t)throw new Error(\"Function attempted to set as colorPicker update callback is not a function.\");this.updateCallback=t}},{key:\"setCloseCallback\",value:function(t){if(\"function\"!=typeof t)throw new Error(\"Function attempted to set as colorPicker closing callback is not a function.\");this.closeCallback=t}},{key:\"_isColorString\",value:function(t){if(\"string\"==typeof t)return Jh[t]}},{key:\"setColor\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(\"none\"!==t){var i,n=this._isColorString(t);if(void 0!==n&&(t=n),!0===bh(t)){if(!0===Xh(t)){var o=t.substr(4).substr(0,t.length-5).split(\",\");i={r:o[0],g:o[1],b:o[2],a:1}}else if(!0===Gh(t)){var r=t.substr(5).substr(0,t.length-6).split(\",\");i={r:r[0],g:r[1],b:r[2],a:r[3]}}else if(!0===Yh(t)){var s=Ah(t);i={r:s.r,g:s.g,b:s.b,a:1}}}else if(t instanceof Object&&void 0!==t.r&&void 0!==t.g&&void 0!==t.b){var a=void 0!==t.a?t.a:\"1.0\";i={r:t.r,g:t.g,b:t.b,a:a}}if(void 0===i)throw new Error(\"Unknown color passed to the colorPicker. Supported are strings: rgb, hex, rgba. Object: rgb ({r:r,g:g,b:b,[a:a]}). Supplied: \"+es(t));this._setColor(i,e)}}},{key:\"show\",value:function(){void 0!==this.closeCallback&&(this.closeCallback(),this.closeCallback=void 0),this.applied=!1,this.frame.style.display=\"block\",this._generateHueCircle()}},{key:\"_hide\",value:function(){var t=this,e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];!0===e&&(this.previousColor=At({},this.color)),!0===this.applied&&this.updateCallback(this.initialColor),this.frame.style.display=\"none\",rs((function(){void 0!==t.closeCallback&&(t.closeCallback(),t.closeCallback=void 0)}),0)}},{key:\"_save\",value:function(){this.updateCallback(this.color),this.applied=!1,this._hide()}},{key:\"_apply\",value:function(){this.applied=!0,this.updateCallback(this.color),this._updatePicker(this.color)}},{key:\"_loadLast\",value:function(){void 0!==this.previousColor?this.setColor(this.previousColor,!1):alert(\"There is no last color to load...\")}},{key:\"_setColor\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];!0===e&&(this.initialColor=At({},t)),this.color=t;var i=Lh(t.r,t.g,t.b),n=2*Math.PI,o=this.r*i.s,r=this.centerCoordinates.x+o*Math.sin(n*i.h),s=this.centerCoordinates.y+o*Math.cos(n*i.h);this.colorPickerSelector.style.left=r-.5*this.colorPickerSelector.clientWidth+\"px\",this.colorPickerSelector.style.top=s-.5*this.colorPickerSelector.clientHeight+\"px\",this._updatePicker(t)}},{key:\"_setOpacity\",value:function(t){this.color.a=t/100,this._updatePicker(this.color)}},{key:\"_setBrightness\",value:function(t){var e=Lh(this.color.r,this.color.g,this.color.b);e.v=t/100;var i=qh(e.h,e.s,e.v);i.a=this.color.a,this.color=i,this._updatePicker()}},{key:\"_updatePicker\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.color,e=Lh(t.r,t.g,t.b),i=this.colorPickerCanvas.getContext(\"2d\");void 0===this.pixelRation&&(this.pixelRatio=(window.devicePixelRatio||1)/(i.webkitBackingStorePixelRatio||i.mozBackingStorePixelRatio||i.msBackingStorePixelRatio||i.oBackingStorePixelRatio||i.backingStorePixelRatio||1)),i.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0);var n=this.colorPickerCanvas.clientWidth,o=this.colorPickerCanvas.clientHeight;i.clearRect(0,0,n,o),i.putImageData(this.hueCircle,0,0),i.fillStyle=\"rgba(0,0,0,\"+(1-e.v)+\")\",i.circle(this.centerCoordinates.x,this.centerCoordinates.y,this.r),hs(i).call(i),this.brightnessRange.value=100*e.v,this.opacityRange.value=100*t.a,this.initialColorDiv.style.backgroundColor=\"rgba(\"+this.initialColor.r+\",\"+this.initialColor.g+\",\"+this.initialColor.b+\",\"+this.initialColor.a+\")\",this.newColorDiv.style.backgroundColor=\"rgba(\"+this.color.r+\",\"+this.color.g+\",\"+this.color.b+\",\"+this.color.a+\")\"}},{key:\"_setSize\",value:function(){this.colorPickerCanvas.style.width=\"100%\",this.colorPickerCanvas.style.height=\"100%\",this.colorPickerCanvas.width=289*this.pixelRatio,this.colorPickerCanvas.height=289*this.pixelRatio}},{key:\"_create\",value:function(){var t,e,i,n;if(this.frame=document.createElement(\"div\"),this.frame.className=\"vis-color-picker\",this.colorPickerDiv=document.createElement(\"div\"),this.colorPickerSelector=document.createElement(\"div\"),this.colorPickerSelector.className=\"vis-selector\",this.colorPickerDiv.appendChild(this.colorPickerSelector),this.colorPickerCanvas=document.createElement(\"canvas\"),this.colorPickerDiv.appendChild(this.colorPickerCanvas),this.colorPickerCanvas.getContext){var o=this.colorPickerCanvas.getContext(\"2d\");this.pixelRatio=(window.devicePixelRatio||1)/(o.webkitBackingStorePixelRatio||o.mozBackingStorePixelRatio||o.msBackingStorePixelRatio||o.oBackingStorePixelRatio||o.backingStorePixelRatio||1),this.colorPickerCanvas.getContext(\"2d\").setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0)}else{var r=document.createElement(\"DIV\");r.style.color=\"red\",r.style.fontWeight=\"bold\",r.style.padding=\"10px\",r.innerText=\"Error: your browser does not support HTML canvas\",this.colorPickerCanvas.appendChild(r)}this.colorPickerDiv.className=\"vis-color\",this.opacityDiv=document.createElement(\"div\"),this.opacityDiv.className=\"vis-opacity\",this.brightnessDiv=document.createElement(\"div\"),this.brightnessDiv.className=\"vis-brightness\",this.arrowDiv=document.createElement(\"div\"),this.arrowDiv.className=\"vis-arrow\",this.opacityRange=document.createElement(\"input\");try{this.opacityRange.type=\"range\",this.opacityRange.min=\"0\",this.opacityRange.max=\"100\"}catch(t){}this.opacityRange.value=\"100\",this.opacityRange.className=\"vis-range\",this.brightnessRange=document.createElement(\"input\");try{this.brightnessRange.type=\"range\",this.brightnessRange.min=\"0\",this.brightnessRange.max=\"100\"}catch(t){}this.brightnessRange.value=\"100\",this.brightnessRange.className=\"vis-range\",this.opacityDiv.appendChild(this.opacityRange),this.brightnessDiv.appendChild(this.brightnessRange);var s=this;this.opacityRange.onchange=function(){s._setOpacity(this.value)},this.opacityRange.oninput=function(){s._setOpacity(this.value)},this.brightnessRange.onchange=function(){s._setBrightness(this.value)},this.brightnessRange.oninput=function(){s._setBrightness(this.value)},this.brightnessLabel=document.createElement(\"div\"),this.brightnessLabel.className=\"vis-label vis-brightness\",this.brightnessLabel.innerText=\"brightness:\",this.opacityLabel=document.createElement(\"div\"),this.opacityLabel.className=\"vis-label vis-opacity\",this.opacityLabel.innerText=\"opacity:\",this.newColorDiv=document.createElement(\"div\"),this.newColorDiv.className=\"vis-new-color\",this.newColorDiv.innerText=\"new\",this.initialColorDiv=document.createElement(\"div\"),this.initialColorDiv.className=\"vis-initial-color\",this.initialColorDiv.innerText=\"initial\",this.cancelButton=document.createElement(\"div\"),this.cancelButton.className=\"vis-button vis-cancel\",this.cancelButton.innerText=\"cancel\",this.cancelButton.onclick=Vt(t=this._hide).call(t,this,!1),this.applyButton=document.createElement(\"div\"),this.applyButton.className=\"vis-button vis-apply\",this.applyButton.innerText=\"apply\",this.applyButton.onclick=Vt(e=this._apply).call(e,this),this.saveButton=document.createElement(\"div\"),this.saveButton.className=\"vis-button vis-save\",this.saveButton.innerText=\"save\",this.saveButton.onclick=Vt(i=this._save).call(i,this),this.loadButton=document.createElement(\"div\"),this.loadButton.className=\"vis-button vis-load\",this.loadButton.innerText=\"load last\",this.loadButton.onclick=Vt(n=this._loadLast).call(n,this),this.frame.appendChild(this.colorPickerDiv),this.frame.appendChild(this.arrowDiv),this.frame.appendChild(this.brightnessLabel),this.frame.appendChild(this.brightnessDiv),this.frame.appendChild(this.opacityLabel),this.frame.appendChild(this.opacityDiv),this.frame.appendChild(this.newColorDiv),this.frame.appendChild(this.initialColorDiv),this.frame.appendChild(this.cancelButton),this.frame.appendChild(this.applyButton),this.frame.appendChild(this.saveButton),this.frame.appendChild(this.loadButton)}},{key:\"_bindHammer\",value:function(){var t=this;this.drag={},this.pinch={},this.hammer=new dh(this.colorPickerCanvas),this.hammer.get(\"pinch\").set({enable:!0}),this.hammer.on(\"hammer.input\",(function(e){e.isFirst&&t._moveSelector(e)})),this.hammer.on(\"tap\",(function(e){t._moveSelector(e)})),this.hammer.on(\"panstart\",(function(e){t._moveSelector(e)})),this.hammer.on(\"panmove\",(function(e){t._moveSelector(e)})),this.hammer.on(\"panend\",(function(e){t._moveSelector(e)}))}},{key:\"_generateHueCircle\",value:function(){if(!1===this.generated){var t=this.colorPickerCanvas.getContext(\"2d\");void 0===this.pixelRation&&(this.pixelRatio=(window.devicePixelRatio||1)/(t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1)),t.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0);var e,i,n,o,r=this.colorPickerCanvas.clientWidth,s=this.colorPickerCanvas.clientHeight;t.clearRect(0,0,r,s),this.centerCoordinates={x:.5*r,y:.5*s},this.r=.49*r;var a,h=2*Math.PI/360,l=1/this.r;for(n=0;n<360;n++)for(o=0;o<this.r;o++)e=this.centerCoordinates.x+o*Math.sin(h*n),i=this.centerCoordinates.y+o*Math.cos(h*n),a=qh(.002777777777777778*n,o*l,1),t.fillStyle=\"rgb(\"+a.r+\",\"+a.g+\",\"+a.b+\")\",t.fillRect(e-.5,i-.5,2,2);t.strokeStyle=\"rgba(0,0,0,1)\",t.circle(this.centerCoordinates.x,this.centerCoordinates.y,this.r),t.stroke(),this.hueCircle=t.getImageData(0,0,r,s)}this.generated=!0}},{key:\"_moveSelector\",value:function(t){var e=this.colorPickerDiv.getBoundingClientRect(),i=t.center.x-e.left,n=t.center.y-e.top,o=.5*this.colorPickerDiv.clientHeight,r=.5*this.colorPickerDiv.clientWidth,s=i-r,a=n-o,h=Math.atan2(s,a),l=.98*Math.min(Math.sqrt(s*s+a*a),r),d=Math.cos(h)*l+o,c=Math.sin(h)*l+r;this.colorPickerSelector.style.top=d-.5*this.colorPickerSelector.clientHeight+\"px\",this.colorPickerSelector.style.left=c-.5*this.colorPickerSelector.clientWidth+\"px\";var u=h/(2*Math.PI);u=u<0?u+1:u;var f=l/this.r,p=Lh(this.color.r,this.color.g,this.color.b);p.h=u,p.s=f;var v=qh(p.h,p.s,p.v);v.a=this.color.a,this.color=v,this.initialColorDiv.style.backgroundColor=\"rgba(\"+this.initialColor.r+\",\"+this.initialColor.g+\",\"+this.initialColor.b+\",\"+this.initialColor.a+\")\",this.newColorDiv.style.backgroundColor=\"rgba(\"+this.color.r+\",\"+this.color.g+\",\"+this.color.b+\",\"+this.color.a+\")\"}}]),t}();function el(){for(var t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];if(e.length<1)throw new TypeError(\"Invalid arguments.\");if(1===e.length)return document.createTextNode(e[0]);var n=document.createElement(e[0]);return n.appendChild(el.apply(void 0,wo(Oo(e).call(e,1)))),n}var il,nl=function(){function t(e,i,n){var o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1,r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:function(){return!1};Nn(this,t),this.parent=e,this.changedOptions=[],this.container=i,this.allowCreation=!1,this.hideOption=r,this.options={},this.initialized=!1,this.popupCounter=0,this.defaultOptions={enabled:!1,filter:!0,container:void 0,showButton:!0},At(this.options,this.defaultOptions),this.configureOptions=n,this.moduleOptions={},this.domElements=[],this.popupDiv={},this.popupLimit=5,this.popupHistory={},this.colorPicker=new tl(o),this.wrapper=void 0}return Fn(t,[{key:\"setOptions\",value:function(t){if(void 0!==t){this.popupHistory={},this._removePopup();var e=!0;if(\"string\"==typeof t)this.options.filter=t;else if(So(t))this.options.filter=t.join();else if(\"object\"===go(t)){if(null==t)throw new TypeError(\"options cannot be null\");void 0!==t.container&&(this.options.container=t.container),void 0!==mr(t)&&(this.options.filter=mr(t)),void 0!==t.showButton&&(this.options.showButton=t.showButton),void 0!==t.enabled&&(e=t.enabled)}else\"boolean\"==typeof t?(this.options.filter=!0,e=t):\"function\"==typeof t&&(this.options.filter=t,e=!0);!1===mr(this.options)&&(e=!1),this.options.enabled=e}this._clean()}},{key:\"setModuleOptions\",value:function(t){this.moduleOptions=t,!0===this.options.enabled&&(this._clean(),void 0!==this.options.container&&(this.container=this.options.container),this._create())}},{key:\"_create\",value:function(){this._clean(),this.changedOptions=[];var t=mr(this.options),e=0,i=!1;for(var n in this.configureOptions)Object.prototype.hasOwnProperty.call(this.configureOptions,n)&&(this.allowCreation=!1,i=!1,\"function\"==typeof t?i=(i=t(n,[]))||this._handleObject(this.configureOptions[n],[n],!0):!0!==t&&-1===Hr(t).call(t,n)||(i=!0),!1!==i&&(this.allowCreation=!0,e>0&&this._makeItem([]),this._makeHeader(n),this._handleObject(this.configureOptions[n],[n])),e++);this._makeButton(),this._push()}},{key:\"_push\",value:function(){this.wrapper=document.createElement(\"div\"),this.wrapper.className=\"vis-configuration-wrapper\",this.container.appendChild(this.wrapper);for(var t=0;t<this.domElements.length;t++)this.wrapper.appendChild(this.domElements[t]);this._showPopupIfNeeded()}},{key:\"_clean\",value:function(){for(var t=0;t<this.domElements.length;t++)this.wrapper.removeChild(this.domElements[t]);void 0!==this.wrapper&&(this.container.removeChild(this.wrapper),this.wrapper=void 0),this.domElements=[],this._removePopup()}},{key:\"_getValue\",value:function(t){for(var e=this.moduleOptions,i=0;i<t.length;i++){if(void 0===e[t[i]]){e=void 0;break}e=e[t[i]]}return e}},{key:\"_makeItem\",value:function(t){if(!0===this.allowCreation){var e=document.createElement(\"div\");e.className=\"vis-configuration vis-config-item vis-config-s\"+t.length;for(var i=arguments.length,n=new Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];return Wo(n).call(n,(function(t){e.appendChild(t)})),this.domElements.push(e),this.domElements.length}return 0}},{key:\"_makeHeader\",value:function(t){var e=document.createElement(\"div\");e.className=\"vis-configuration vis-config-header\",e.innerText=t,this._makeItem([],e)}},{key:\"_makeLabel\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=document.createElement(\"div\");if(n.className=\"vis-configuration vis-config-label vis-config-s\"+e.length,!0===i){for(;n.firstChild;)n.removeChild(n.firstChild);n.appendChild(el(\"i\",\"b\",t))}else n.innerText=t+\":\";return n}},{key:\"_makeDropdown\",value:function(t,e,i){var n=document.createElement(\"select\");n.className=\"vis-configuration vis-config-select\";var o=0;void 0!==e&&-1!==Hr(t).call(t,e)&&(o=Hr(t).call(t,e));for(var r=0;r<t.length;r++){var s=document.createElement(\"option\");s.value=t[r],r===o&&(s.selected=\"selected\"),s.innerText=t[r],n.appendChild(s)}var a=this;n.onchange=function(){a._update(this.value,i)};var h=this._makeLabel(i[i.length-1],i);this._makeItem(i,h,n)}},{key:\"_makeRange\",value:function(t,e,i){var n=t[0],o=t[1],r=t[2],s=t[3],a=document.createElement(\"input\");a.className=\"vis-configuration vis-config-range\";try{a.type=\"range\",a.min=o,a.max=r}catch(t){}a.step=s;var h=\"\",l=0;if(void 0!==e){var d=1.2;e<0&&e*d<o?(a.min=Math.ceil(e*d),l=a.min,h=\"range increased\"):e/d<o&&(a.min=Math.ceil(e/d),l=a.min,h=\"range increased\"),e*d>r&&1!==r&&(a.max=Math.ceil(e*d),l=a.max,h=\"range increased\"),a.value=e}else a.value=n;var c=document.createElement(\"input\");c.className=\"vis-configuration vis-config-rangeinput\",c.value=a.value;var u=this;a.onchange=function(){c.value=this.value,u._update(Number(this.value),i)},a.oninput=function(){c.value=this.value};var f=this._makeLabel(i[i.length-1],i),p=this._makeItem(i,f,a,c);\"\"!==h&&this.popupHistory[p]!==l&&(this.popupHistory[p]=l,this._setupPopup(h,p))}},{key:\"_makeButton\",value:function(){var t=this;if(!0===this.options.showButton){var e=document.createElement(\"div\");e.className=\"vis-configuration vis-config-button\",e.innerText=\"generate options\",e.onclick=function(){t._printOptions()},e.onmouseover=function(){e.className=\"vis-configuration vis-config-button hover\"},e.onmouseout=function(){e.className=\"vis-configuration vis-config-button\"},this.optionsContainer=document.createElement(\"div\"),this.optionsContainer.className=\"vis-configuration vis-config-option-container\",this.domElements.push(this.optionsContainer),this.domElements.push(e)}}},{key:\"_setupPopup\",value:function(t,e){var i=this;if(!0===this.initialized&&!0===this.allowCreation&&this.popupCounter<this.popupLimit){var n=document.createElement(\"div\");n.id=\"vis-configuration-popup\",n.className=\"vis-configuration-popup\",n.innerText=t,n.onclick=function(){i._removePopup()},this.popupCounter+=1,this.popupDiv={html:n,index:e}}}},{key:\"_removePopup\",value:function(){void 0!==this.popupDiv.html&&(this.popupDiv.html.parentNode.removeChild(this.popupDiv.html),clearTimeout(this.popupDiv.hideTimeout),clearTimeout(this.popupDiv.deleteTimeout),this.popupDiv={})}},{key:\"_showPopupIfNeeded\",value:function(){var t=this;if(void 0!==this.popupDiv.html){var e=this.domElements[this.popupDiv.index].getBoundingClientRect();this.popupDiv.html.style.left=e.left+\"px\",this.popupDiv.html.style.top=e.top-30+\"px\",document.body.appendChild(this.popupDiv.html),this.popupDiv.hideTimeout=rs((function(){t.popupDiv.html.style.opacity=0}),1500),this.popupDiv.deleteTimeout=rs((function(){t._removePopup()}),1800)}}},{key:\"_makeCheckbox\",value:function(t,e,i){var n=document.createElement(\"input\");n.type=\"checkbox\",n.className=\"vis-configuration vis-config-checkbox\",n.checked=t,void 0!==e&&(n.checked=e,e!==t&&(\"object\"===go(t)?e!==t.enabled&&this.changedOptions.push({path:i,value:e}):this.changedOptions.push({path:i,value:e})));var o=this;n.onchange=function(){o._update(this.checked,i)};var r=this._makeLabel(i[i.length-1],i);this._makeItem(i,r,n)}},{key:\"_makeTextInput\",value:function(t,e,i){var n=document.createElement(\"input\");n.type=\"text\",n.className=\"vis-configuration vis-config-text\",n.value=e,e!==t&&this.changedOptions.push({path:i,value:e});var o=this;n.onchange=function(){o._update(this.value,i)};var r=this._makeLabel(i[i.length-1],i);this._makeItem(i,r,n)}},{key:\"_makeColorField\",value:function(t,e,i){var n=this,o=t[1],r=document.createElement(\"div\");\"none\"!==(e=void 0===e?o:e)?(r.className=\"vis-configuration vis-config-colorBlock\",r.style.backgroundColor=e):r.className=\"vis-configuration vis-config-colorBlock none\",e=void 0===e?o:e,r.onclick=function(){n._showColorPicker(e,r,i)};var s=this._makeLabel(i[i.length-1],i);this._makeItem(i,s,r)}},{key:\"_showColorPicker\",value:function(t,e,i){var n=this;e.onclick=function(){},this.colorPicker.insertTo(e),this.colorPicker.show(),this.colorPicker.setColor(t),this.colorPicker.setUpdateCallback((function(t){var o=\"rgba(\"+t.r+\",\"+t.g+\",\"+t.b+\",\"+t.a+\")\";e.style.backgroundColor=o,n._update(o,i)})),this.colorPicker.setCloseCallback((function(){e.onclick=function(){n._showColorPicker(t,e,i)}}))}},{key:\"_handleObject\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=!1,o=mr(this.options),r=!1;for(var s in t)if(Object.prototype.hasOwnProperty.call(t,s)){n=!0;var a=t[s],h=Sh(e,s);if(\"function\"==typeof o&&!1===(n=o(s,e))&&!So(a)&&\"string\"!=typeof a&&\"boolean\"!=typeof a&&a instanceof Object&&(this.allowCreation=!1,n=this._handleObject(a,h,!0),this.allowCreation=!1===i),!1!==n){r=!0;var l=this._getValue(h);if(So(a))this._handleArray(a,l,h);else if(\"string\"==typeof a)this._makeTextInput(a,l,h);else if(\"boolean\"==typeof a)this._makeCheckbox(a,l,h);else if(a instanceof Object){if(!this.hideOption(e,s,this.moduleOptions))if(void 0!==a.enabled){var d=Sh(h,\"enabled\"),c=this._getValue(d);if(!0===c){var u=this._makeLabel(s,h,!0);this._makeItem(h,u),r=this._handleObject(a,h)||r}else this._makeCheckbox(a,c,h)}else{var f=this._makeLabel(s,h,!0);this._makeItem(h,f),r=this._handleObject(a,h)||r}}else console.error(\"dont know how to handle\",a,s,h)}}return r}},{key:\"_handleArray\",value:function(t,e,i){\"string\"==typeof t[0]&&\"color\"===t[0]?(this._makeColorField(t,e,i),t[1]!==e&&this.changedOptions.push({path:i,value:e})):\"string\"==typeof t[0]?(this._makeDropdown(t,e,i),t[0]!==e&&this.changedOptions.push({path:i,value:e})):\"number\"==typeof t[0]&&(this._makeRange(t,e,i),t[0]!==e&&this.changedOptions.push({path:i,value:Number(e)}))}},{key:\"_update\",value:function(t,e){var i=this._constructOptions(t,e);this.parent.body&&this.parent.body.emitter&&this.parent.body.emitter.emit&&this.parent.body.emitter.emit(\"configChange\",i),this.initialized=!0,this.parent.setOptions(i)}},{key:\"_constructOptions\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=i;t=\"false\"!==(t=\"true\"===t||t)&&t;for(var o=0;o<e.length;o++)\"global\"!==e[o]&&(void 0===n[e[o]]&&(n[e[o]]={}),o!==e.length-1?n=n[e[o]]:n[e[o]]=t);return i}},{key:\"_printOptions\",value:function(){for(var t=this.getOptions();this.optionsContainer.firstChild;)this.optionsContainer.removeChild(this.optionsContainer.firstChild);this.optionsContainer.appendChild(el(\"pre\",\"const options = \"+es(t,null,2)))}},{key:\"getOptions\",value:function(){for(var t={},e=0;e<this.changedOptions.length;e++)this._constructOptions(this.changedOptions[e].value,this.changedOptions[e].path,t);return t}}]),t}(),ol=!1,rl=\"background: #FFeeee; color: #dd0000\",sl=ch,al=tl,hl=nl,ll=dh,dl=function(){function t(e,i){Nn(this,t),this.container=e,this.overflowMethod=i||\"cap\",this.x=0,this.y=0,this.padding=5,this.hidden=!1,this.frame=document.createElement(\"div\"),this.frame.className=\"vis-tooltip\",this.container.appendChild(this.frame)}return Fn(t,[{key:\"setPosition\",value:function(t,e){this.x=Br(t),this.y=Br(e)}},{key:\"setText\",value:function(t){if(t instanceof Element){for(;this.frame.firstChild;)this.frame.removeChild(this.frame.firstChild);this.frame.appendChild(t)}else this.frame.innerText=t}},{key:\"show\",value:function(t){if(void 0===t&&(t=!0),!0===t){var e=this.frame.clientHeight,i=this.frame.clientWidth,n=this.frame.parentNode.clientHeight,o=this.frame.parentNode.clientWidth,r=0,s=0;if(\"flip\"==this.overflowMethod){var a=!1,h=!0;this.y-e<this.padding&&(h=!1),this.x+i>o-this.padding&&(a=!0),r=a?this.x-i:this.x,s=h?this.y-e:this.y}else(s=this.y-e)+e+this.padding>n&&(s=n-e-this.padding),s<this.padding&&(s=this.padding),(r=this.x)+i+this.padding>o&&(r=o-i-this.padding),r<this.padding&&(r=this.padding);this.frame.style.left=r+\"px\",this.frame.style.top=s+\"px\",this.frame.style.visibility=\"visible\",this.hidden=!1}else this.hide()}},{key:\"hide\",value:function(){this.hidden=!0,this.frame.style.left=\"0\",this.frame.style.top=\"0\",this.frame.style.visibility=\"hidden\"}},{key:\"destroy\",value:function(){this.frame.parentNode.removeChild(this.frame)}}]),t}(),cl=rl,ul=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"validate\",value:function(e,i,n){ol=!1,il=i;var o=i;return void 0!==n&&(o=i[n]),t.parse(e,o,[]),ol}},{key:\"parse\",value:function(e,i,n){for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&t.check(o,e,i,n)}},{key:\"check\",value:function(e,i,n,o){if(void 0!==n[e]||void 0!==n.__any__){var r=e,s=!0;void 0===n[e]&&void 0!==n.__any__&&(r=\"__any__\",s=\"object\"===t.getType(i[e]));var a=n[r];s&&void 0!==a.__type__&&(a=a.__type__),t.checkFields(e,i,n,r,a,o)}else t.getSuggestion(e,n,o)}},{key:\"checkFields\",value:function(e,i,n,o,r,s){var a=function(i){console.error(\"%c\"+i+t.printLocation(s,e),rl)},h=t.getType(i[e]),l=r[h];void 0!==l?\"array\"===t.getType(l)&&-1===Hr(l).call(l,i[e])?(a('Invalid option detected in \"'+e+'\". Allowed values are:'+t.print(l)+' not \"'+i[e]+'\". '),ol=!0):\"object\"===h&&\"__any__\"!==o&&(s=Sh(s,e),t.parse(i[e],n[o],s)):void 0===r.any&&(a('Invalid type received for \"'+e+'\". Expected: '+t.print(zo(r))+\". Received [\"+h+'] \"'+i[e]+'\"'),ol=!0)}},{key:\"getType\",value:function(t){var e=go(t);return\"object\"===e?null===t?\"null\":t instanceof Boolean?\"boolean\":t instanceof Number?\"number\":t instanceof String?\"string\":So(t)?\"array\":t instanceof Date?\"date\":void 0!==t.nodeType?\"dom\":!0===t._isAMomentObject?\"moment\":\"object\":\"number\"===e?\"number\":\"boolean\"===e?\"boolean\":\"string\"===e?\"string\":void 0===e?\"undefined\":e}},{key:\"getSuggestion\",value:function(e,i,n){var o,r=t.findInOptions(e,i,n,!1),s=t.findInOptions(e,il,[],!0);o=void 0!==r.indexMatch?\" in \"+t.printLocation(r.path,e,\"\")+'Perhaps it was incomplete? Did you mean: \"'+r.indexMatch+'\"?\\n\\n':s.distance<=4&&r.distance>s.distance?\" in \"+t.printLocation(r.path,e,\"\")+\"Perhaps it was misplaced? Matching option found at: \"+t.printLocation(s.path,s.closestMatch,\"\"):r.distance<=8?'. Did you mean \"'+r.closestMatch+'\"?'+t.printLocation(r.path,e):\". Did you mean one of these: \"+t.print(zo(i))+t.printLocation(n,e),console.error('%cUnknown option detected: \"'+e+'\"'+o,rl),ol=!0}},{key:\"findInOptions\",value:function(e,i,n){var o=arguments.length>3&&void 0!==arguments[3]&&arguments[3],r=1e9,s=\"\",a=[],h=e.toLowerCase(),l=void 0;for(var d in i){var c=void 0;if(void 0!==i[d].__type__&&!0===o){var u=t.findInOptions(e,i[d],Sh(n,d));r>u.distance&&(s=u.closestMatch,a=u.path,r=u.distance,l=u.indexMatch)}else{var f;-1!==Hr(f=d.toLowerCase()).call(f,h)&&(l=d),r>(c=t.levenshteinDistance(e,d))&&(s=d,a=Th(n),r=c)}}return{closestMatch:s,path:a,distance:r,indexMatch:l}}},{key:\"printLocation\",value:function(t,e){for(var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:\"Problem value found at: \\n\",n=\"\\n\\n\"+i+\"options = {\\n\",o=0;o<t.length;o++){for(var r=0;r<o+1;r++)n+=\"  \";n+=t[o]+\": {\\n\"}for(var s=0;s<t.length+1;s++)n+=\"  \";n+=e+\"\\n\";for(var a=0;a<t.length+1;a++){for(var h=0;h<t.length-a;h++)n+=\"  \";n+=\"}\\n\"}return n+\"\\n\\n\"}},{key:\"print\",value:function(t){return es(t).replace(/(\")|(\\[)|(\\])|(,\"__type__\")/g,\"\").replace(/(,)/g,\", \")}},{key:\"levenshteinDistance\",value:function(t,e){if(0===t.length)return e.length;if(0===e.length)return t.length;var i,n,o=[];for(i=0;i<=e.length;i++)o[i]=[i];for(n=0;n<=t.length;n++)o[0][n]=n;for(i=1;i<=e.length;i++)for(n=1;n<=t.length;n++)e.charAt(i-1)==t.charAt(n-1)?o[i][n]=o[i-1][n-1]:o[i][n]=Math.min(o[i-1][n-1]+1,Math.min(o[i][n-1]+1,o[i-1][n]+1));return o[e.length][t.length]}}]),t}(),fl=Object.freeze({__proto__:null,Activator:sl,Alea:ah,ColorPicker:al,Configurator:hl,DELETE:eh,HSVToHex:Vh,HSVToRGB:qh,Hammer:ll,Popup:dl,RGBToHSV:Lh,RGBToHex:jh,VALIDATOR_PRINT_STYLE:cl,Validator:ul,addClassName:function(t,e){var i=t.className.split(\" \"),n=e.split(\" \");i=Eo(i).call(i,mr(n).call(n,(function(t){return!dr(i).call(i,t)}))),t.className=i.join(\" \")},addCssText:function(t,e){var i=Hh(t.style.cssText),n=Hh(e),o=Qa(Qa({},i),n);t.style.cssText=Wh(o)},addEventListener:Bh,binarySearchCustom:function(t,e,i,n){for(var o=0,r=0,s=t.length-1;r<=s&&o<1e4;){var a=Math.floor((r+s)/2),h=t[a],l=e(void 0===n?h[i]:h[i][n]);if(0==l)return a;-1==l?r=a+1:s=a-1,o++}return-1},binarySearchValue:function(t,e,i,n,o){var r,s,a,h,l=0,d=0,c=t.length-1;for(o=null!=o?o:function(t,e){return t==e?0:t<e?-1:1};d<=c&&l<1e4;){if(h=Math.floor(.5*(c+d)),r=t[Math.max(0,h-1)][i],s=t[h][i],a=t[Math.min(t.length-1,h+1)][i],0==o(s,e))return h;if(o(r,e)<0&&o(s,e)>0)return\"before\"==n?Math.max(0,h-1):h;if(o(s,e)<0&&o(a,e)>0)return\"before\"==n?h:Math.min(t.length-1,h+1);o(s,e)<0?d=h+1:c=h-1,l++}return-1},bridgeObject:Kh,copyAndExtendArray:Sh,copyArray:Th,deepExtend:Ch,deepObjectAssign:nh,easingFunctions:Zh,equalArray:function(t,e){if(t.length!==e.length)return!1;for(var i=0,n=t.length;i<n;i++)if(t[i]!=e[i])return!1;return!0},extend:xh,fillIfDefined:_h,forEach:Dh,getAbsoluteLeft:Mh,getAbsoluteRight:function(t){return t.getBoundingClientRect().right},getAbsoluteTop:Ph,getScrollBarWidth:function(){var t=document.createElement(\"p\");t.style.width=\"100%\",t.style.height=\"200px\";var e=document.createElement(\"div\");e.style.position=\"absolute\",e.style.top=\"0px\",e.style.left=\"0px\",e.style.visibility=\"hidden\",e.style.width=\"200px\",e.style.height=\"150px\",e.style.overflow=\"hidden\",e.appendChild(t),document.body.appendChild(e);var i=t.offsetWidth;e.style.overflow=\"scroll\";var n=t.offsetWidth;return i==n&&(n=e.clientWidth),document.body.removeChild(e),i-n},getTarget:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window.event,e=null;return t&&(t.target?e=t.target:t.srcElement&&(e=t.srcElement)),e instanceof Element&&(null==e.nodeType||3!=e.nodeType||(e=e.parentNode)instanceof Element)?e:null},getType:function(t){var e=go(t);return\"object\"===e?null===t?\"null\":t instanceof Boolean?\"Boolean\":t instanceof Number?\"Number\":t instanceof String?\"String\":So(t)?\"Array\":t instanceof Date?\"Date\":\"Object\":\"number\"===e?\"Number\":\"boolean\"===e?\"Boolean\":\"string\"===e?\"String\":void 0===e?\"undefined\":e},hasParent:function(t,e){for(var i=t;i;){if(i===e)return!0;if(!i.parentNode)return!1;i=i.parentNode}return!1},hexToHSV:Uh,hexToRGB:Ah,insertSort:function(t,e){for(var i=0;i<t.length;i++){var n=t[i],o=void 0;for(o=i;o>0&&e(n,t[o-1])<0;o--)t[o]=t[o-1];t[o]=n}return t},isDate:function(t){if(t instanceof Date)return!0;if(bh(t)){if(uh.exec(t))return!0;if(!isNaN(Date.parse(t)))return!0}return!1},isNumber:yh,isObject:wh,isString:bh,isValidHex:Yh,isValidRGB:Xh,isValidRGBA:Gh,mergeOptions:$h,option:Nh,overrideOpacity:Fh,parseColor:Rh,preventDefault:function(t){t||(t=window.event),t&&(t.preventDefault?t.preventDefault():t.returnValue=!1)},pureDeepObjectAssign:ih,recursiveDOMDelete:mh,removeClassName:function(t,e){var i=t.className.split(\" \"),n=e.split(\" \");i=mr(i).call(i,(function(t){return!dr(n).call(n,t)})),t.className=i.join(\" \")},removeCssText:function(t,e){var i=Hh(t.style.cssText),n=Hh(e);for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&delete i[o];t.style.cssText=Wh(i)},removeEventListener:zh,selectiveBridgeObject:function(t,e){if(null!==e&&\"object\"===go(e)){for(var i=Gr(e),n=0;n<t.length;n++)Object.prototype.hasOwnProperty.call(e,t[n])&&\"object\"==go(e[t[n]])&&(i[t[n]]=Kh(e[t[n]]));return i}return null},selectiveDeepExtend:Eh,selectiveExtend:function(t,e){if(!So(t))throw new Error(\"Array with property names expected as first argument\");for(var i=arguments.length,n=new Array(i>2?i-2:0),o=2;o<i;o++)n[o-2]=arguments[o];for(var r=0,s=n;r<s.length;r++)for(var a=s[r],h=0;h<t.length;h++){var l=t[h];a&&Object.prototype.hasOwnProperty.call(a,l)&&(e[l]=a[l])}return e},selectiveNotDeepExtend:Oh,throttle:function(t){var e=!1;return function(){e||(e=!0,requestAnimationFrame((function(){e=!1,t()})))}},toArray:Ih,topMost:Qh,updateProperty:function(t,e,i){return t[e]!==i&&(t[e]=i,!0)}});function pl(t){return _l=t,function(){var t={};xl=0,void(El=_l.charAt(0)),Nl(),\"strict\"===Ol&&(t.strict=!0,Nl());\"graph\"!==Ol&&\"digraph\"!==Ol||(t.type=Ol,Nl());Cl===bl&&(t.id=Ol,Nl());if(\"{\"!=Ol)throw Hl(\"Angle bracket { expected\");if(Nl(),Al(t),\"}\"!=Ol)throw Hl(\"Angle bracket } expected\");if(Nl(),\"\"!==Ol)throw Hl(\"End of file expected\");return Nl(),delete t.node,delete t.edge,delete t.graph,t}()}var vl={fontsize:\"font.size\",fontcolor:\"font.color\",labelfontcolor:\"font.color\",fontname:\"font.face\",color:[\"color.border\",\"color.background\"],fillcolor:\"color.background\",tooltip:\"title\",labeltooltip:\"title\"},gl=Gr(vl);gl.color=\"color.color\",gl.style=\"dashes\";var yl=0,ml=1,bl=2,wl=3,kl={\"{\":!0,\"}\":!0,\"[\":!0,\"]\":!0,\";\":!0,\"=\":!0,\",\":!0,\"->\":!0,\"--\":!0},_l=\"\",xl=0,El=\"\",Ol=\"\",Cl=yl;function Sl(){xl++,El=_l.charAt(xl)}function Tl(){return _l.charAt(xl+1)}function Ml(t){var e=t.charCodeAt(0);return e<47?35===e||46===e:e<59?e>47:e<91?e>64:e<96?95===e:e<123&&e>96}function Pl(t,e){if(t||(t={}),e)for(var i in e)e.hasOwnProperty(i)&&(t[i]=e[i]);return t}function Dl(t,e,i){for(var n=e.split(\".\"),o=t;n.length;){var r=n.shift();n.length?(o[r]||(o[r]={}),o=o[r]):o[r]=i}}function Il(t,e){for(var i,n,o=null,r=[t],s=t;s.parent;)r.push(s.parent),s=s.parent;if(s.nodes)for(i=0,n=s.nodes.length;i<n;i++)if(e.id===s.nodes[i].id){o=s.nodes[i];break}for(o||(o={id:e.id},t.node&&(o.attr=Pl(o.attr,t.node))),i=r.length-1;i>=0;i--){var a,h=r[i];h.nodes||(h.nodes=[]),-1===Hr(a=h.nodes).call(a,o)&&h.nodes.push(o)}e.attr&&(o.attr=Pl(o.attr,e.attr))}function Bl(t,e){if(t.edges||(t.edges=[]),t.edges.push(e),t.edge){var i=Pl({},t.edge);e.attr=Pl(i,e.attr)}}function zl(t,e,i,n,o){var r={from:e,to:i,type:n};return t.edge&&(r.attr=Pl({},t.edge)),r.attr=Pl(r.attr||{},o),null!=o&&o.hasOwnProperty(\"arrows\")&&null!=o.arrows&&(r.arrows={to:{enabled:!0,type:o.arrows.type}},o.arrows=null),r}function Nl(){for(Cl=yl,Ol=\"\";\" \"===El||\"\\t\"===El||\"\\n\"===El||\"\\r\"===El;)Sl();do{var t=!1;if(\"#\"===El){for(var e=xl-1;\" \"===_l.charAt(e)||\"\\t\"===_l.charAt(e);)e--;if(\"\\n\"===_l.charAt(e)||\"\"===_l.charAt(e)){for(;\"\"!=El&&\"\\n\"!=El;)Sl();t=!0}}if(\"/\"===El&&\"/\"===Tl()){for(;\"\"!=El&&\"\\n\"!=El;)Sl();t=!0}if(\"/\"===El&&\"*\"===Tl()){for(;\"\"!=El;){if(\"*\"===El&&\"/\"===Tl()){Sl(),Sl();break}Sl()}t=!0}for(;\" \"===El||\"\\t\"===El||\"\\n\"===El||\"\\r\"===El;)Sl()}while(t);if(\"\"!==El){var i=El+Tl();if(kl[i])return Cl=ml,Ol=i,Sl(),void Sl();if(kl[El])return Cl=ml,Ol=El,void Sl();if(Ml(El)||\"-\"===El){for(Ol+=El,Sl();Ml(El);)Ol+=El,Sl();return\"false\"===Ol?Ol=!1:\"true\"===Ol?Ol=!0:isNaN(Number(Ol))||(Ol=Number(Ol)),void(Cl=bl)}if('\"'===El){for(Sl();\"\"!=El&&('\"'!=El||'\"'===El&&'\"'===Tl());)'\"'===El?(Ol+=El,Sl()):\"\\\\\"===El&&\"n\"===Tl()?(Ol+=\"\\n\",Sl()):Ol+=El,Sl();if('\"'!=El)throw Hl('End of string \" expected');return Sl(),void(Cl=bl)}for(Cl=wl;\"\"!=El;)Ol+=El,Sl();throw new SyntaxError('Syntax error in part \"'+Wl(Ol,30)+'\"')}Cl=ml}function Al(t){for(;\"\"!==Ol&&\"}\"!=Ol;)Fl(t),\";\"===Ol&&Nl()}function Fl(t){var e=jl(t);if(e)Rl(t,e);else if(!function(t){if(\"node\"===Ol)return Nl(),t.node=Ll(),\"node\";if(\"edge\"===Ol)return Nl(),t.edge=Ll(),\"edge\";if(\"graph\"===Ol)return Nl(),t.graph=Ll(),\"graph\";return null}(t)){if(Cl!=bl)throw Hl(\"Identifier expected\");var i=Ol;if(Nl(),\"=\"===Ol){if(Nl(),Cl!=bl)throw Hl(\"Identifier expected\");t[i]=Ol,Nl()}else!function(t,e){var i={id:e},n=Ll();n&&(i.attr=n);Il(t,i),Rl(t,e)}(t,i)}}function jl(t){var e=null;if(\"subgraph\"===Ol&&((e={}).type=\"subgraph\",Nl(),Cl===bl&&(e.id=Ol,Nl())),\"{\"===Ol){if(Nl(),e||(e={}),e.parent=t,e.node=t.node,e.edge=t.edge,e.graph=t.graph,Al(e),\"}\"!=Ol)throw Hl(\"Angle bracket } expected\");Nl(),delete e.node,delete e.edge,delete e.graph,delete e.parent,t.subgraphs||(t.subgraphs=[]),t.subgraphs.push(e)}return e}function Rl(t,e){for(;\"->\"===Ol||\"--\"===Ol;){var i,n=Ol;Nl();var o=jl(t);if(o)i=o;else{if(Cl!=bl)throw Hl(\"Identifier or subgraph expected\");Il(t,{id:i=Ol}),Nl()}Bl(t,zl(t,e,i,n,Ll())),e=i}}function Ll(){for(var t,e,i=null,n={dashed:!0,solid:!1,dotted:[1,5]},o={dot:\"circle\",box:\"box\",crow:\"crow\",curve:\"curve\",icurve:\"inv_curve\",normal:\"triangle\",inv:\"inv_triangle\",diamond:\"diamond\",tee:\"bar\",vee:\"vee\"},r=new Array,s=new Array;\"[\"===Ol;){for(Nl(),i={};\"\"!==Ol&&\"]\"!=Ol;){if(Cl!=bl)throw Hl(\"Attribute name expected\");var a=Ol;if(Nl(),\"=\"!=Ol)throw Hl(\"Equal sign = expected\");if(Nl(),Cl!=bl)throw Hl(\"Attribute value expected\");var h=Ol;\"style\"===a&&(h=n[h]),\"arrowhead\"===a&&(a=\"arrows\",h={to:{enabled:!0,type:o[h]}}),\"arrowtail\"===a&&(a=\"arrows\",h={from:{enabled:!0,type:o[h]}}),r.push({attr:i,name:a,value:h}),s.push(a),Nl(),\",\"==Ol&&Nl()}if(\"]\"!=Ol)throw Hl(\"Bracket ] expected\");Nl()}if(dr(s).call(s,\"dir\")){var l={arrows:{}};for(t=0;t<r.length;t++)if(\"arrows\"===r[t].name)if(null!=r[t].value.to)l.arrows.to=t;else{if(null==r[t].value.from)throw Hl(\"Invalid value of arrows\");l.arrows.from=t}else\"dir\"===r[t].name&&(l.dir=t);var d,c,u=r[l.dir].value;if(!dr(s).call(s,\"arrows\"))if(\"both\"===u)r.push({attr:r[l.dir].attr,name:\"arrows\",value:{to:{enabled:!0}}}),l.arrows.to=r.length-1,r.push({attr:r[l.dir].attr,name:\"arrows\",value:{from:{enabled:!0}}}),l.arrows.from=r.length-1;else if(\"forward\"===u)r.push({attr:r[l.dir].attr,name:\"arrows\",value:{to:{enabled:!0}}}),l.arrows.to=r.length-1;else if(\"back\"===u)r.push({attr:r[l.dir].attr,name:\"arrows\",value:{from:{enabled:!0}}}),l.arrows.from=r.length-1;else{if(\"none\"!==u)throw Hl('Invalid dir type \"'+u+'\"');r.push({attr:r[l.dir].attr,name:\"arrows\",value:\"\"}),l.arrows.to=r.length-1}if(\"both\"===u)l.arrows.to&&l.arrows.from?(c=r[l.arrows.to].value.to.type,d=r[l.arrows.from].value.from.type,r[l.arrows.to]={attr:r[l.arrows.to].attr,name:r[l.arrows.to].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}},er(r).call(r,l.arrows.from,1)):l.arrows.to?(c=r[l.arrows.to].value.to.type,d=\"arrow\",r[l.arrows.to]={attr:r[l.arrows.to].attr,name:r[l.arrows.to].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}}):l.arrows.from&&(c=\"arrow\",d=r[l.arrows.from].value.from.type,r[l.arrows.from]={attr:r[l.arrows.from].attr,name:r[l.arrows.from].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}});else if(\"back\"===u)l.arrows.to&&l.arrows.from?(c=\"\",d=r[l.arrows.from].value.from.type,r[l.arrows.from]={attr:r[l.arrows.from].attr,name:r[l.arrows.from].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}}):l.arrows.to?(c=\"\",d=\"arrow\",l.arrows.from=l.arrows.to,r[l.arrows.from]={attr:r[l.arrows.from].attr,name:r[l.arrows.from].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}}):l.arrows.from&&(c=\"\",d=r[l.arrows.from].value.from.type,r[l.arrows.to]={attr:r[l.arrows.from].attr,name:r[l.arrows.from].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}}),r[l.arrows.from]={attr:r[l.arrows.from].attr,name:r[l.arrows.from].name,value:{from:{enabled:!0,type:r[l.arrows.from].value.from.type}}};else if(\"none\"===u){var f;r[f=l.arrows.to?l.arrows.to:l.arrows.from]={attr:r[f].attr,name:r[f].name,value:\"\"}}else{if(\"forward\"!==u)throw Hl('Invalid dir type \"'+u+'\"');l.arrows.to&&l.arrows.from||l.arrows.to?(c=r[l.arrows.to].value.to.type,d=\"\",r[l.arrows.to]={attr:r[l.arrows.to].attr,name:r[l.arrows.to].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}}):l.arrows.from&&(c=\"arrow\",d=\"\",l.arrows.to=l.arrows.from,r[l.arrows.to]={attr:r[l.arrows.to].attr,name:r[l.arrows.to].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}}),r[l.arrows.to]={attr:r[l.arrows.to].attr,name:r[l.arrows.to].name,value:{to:{enabled:!0,type:r[l.arrows.to].value.to.type}}}}er(r).call(r,l.dir,1)}if(dr(s).call(s,\"penwidth\")){var p=[];for(e=r.length,t=0;t<e;t++)\"width\"!==r[t].name&&(\"penwidth\"===r[t].name&&(r[t].name=\"width\"),p.push(r[t]));r=p}for(e=r.length,t=0;t<e;t++)Dl(r[t].attr,r[t].name,r[t].value);return i}function Hl(t){return new SyntaxError(t+', got \"'+Wl(Ol,30)+'\" (char '+xl+\")\")}function Wl(t,e){return t.length<=e?t:t.substr(0,27)+\"...\"}function ql(t,e,i){for(var n=e.split(\".\"),o=n.pop(),r=t,s=0;s<n.length;s++){var a=n[s];a in r||(r[a]={}),r=r[a]}return r[o]=i,t}function Vl(t,e){var i={};for(var n in t)if(t.hasOwnProperty(n)){var o=e[n];So(o)?Wo(o).call(o,(function(e){ql(i,e,t[n])})):ql(i,\"string\"==typeof o?o:n,t[n])}return i}function Ul(t){var e,i=pl(t),n={nodes:[],edges:[],options:{}};i.nodes&&Wo(e=i.nodes).call(e,(function(t){var e={id:t.id,label:String(t.label||t.id)};Pl(e,Vl(t.attr,vl)),e.image&&(e.shape=\"image\"),n.nodes.push(e)}));if(i.edges){var o,r=function(t){var e={from:t.from,to:t.to};return Pl(e,Vl(t.attr,gl)),null==e.arrows&&\"->\"===t.type&&(e.arrows=\"to\"),e};Wo(o=i.edges).call(o,(function(t){var e,i,o,s,a,h,l;(e=t.from instanceof Object?t.from.nodes:{id:t.from},i=t.to instanceof Object?t.to.nodes:{id:t.to},t.from instanceof Object&&t.from.edges)&&Wo(o=t.from.edges).call(o,(function(t){var e=r(t);n.edges.push(e)}));(a=i,h=function(e,i){var o=zl(n,e.id,i.id,t.type,t.attr),s=r(o);n.edges.push(s)},So(s=e)?Wo(s).call(s,(function(t){So(a)?Wo(a).call(a,(function(e){h(t,e)})):h(t,a)})):So(a)?Wo(a).call(a,(function(t){h(s,t)})):h(s,a),t.to instanceof Object&&t.to.edges)&&Wo(l=t.to.edges).call(l,(function(t){var e=r(t);n.edges.push(e)}))}))}return i.attr&&(n.options=i.attr),n}var Yl=Object.freeze({__proto__:null,parseDOT:pl,DOTToGraph:Ul});function Xl(t,e){var i,n={edges:{inheritColor:!1},nodes:{fixed:!1,parseColor:!1}};null!=e&&(null!=e.fixed&&(n.nodes.fixed=e.fixed),null!=e.parseColor&&(n.nodes.parseColor=e.parseColor),null!=e.inheritColor&&(n.edges.inheritColor=e.inheritColor));var o=t.edges,r=Io(o).call(o,(function(t){var e={from:t.source,id:t.id,to:t.target};return null!=t.attributes&&(e.attributes=t.attributes),null!=t.label&&(e.label=t.label),null!=t.attributes&&null!=t.attributes.title&&(e.title=t.attributes.title),\"Directed\"===t.type&&(e.arrows=\"to\"),t.color&&!1===n.edges.inheritColor&&(e.color=t.color),e}));return{nodes:Io(i=t.nodes).call(i,(function(t){var e={id:t.id,fixed:n.nodes.fixed&&null!=t.x&&null!=t.y};return null!=t.attributes&&(e.attributes=t.attributes),null!=t.label&&(e.label=t.label),null!=t.size&&(e.size=t.size),null!=t.attributes&&null!=t.attributes.title&&(e.title=t.attributes.title),null!=t.title&&(e.title=t.title),null!=t.x&&(e.x=t.x),null!=t.y&&(e.y=t.y),null!=t.color&&(!0===n.nodes.parseColor?e.color=t.color:e.color={background:t.color,border:t.color,highlight:{background:t.color,border:t.color},hover:{background:t.color,border:t.color}}),e})),edges:r}}var Gl=Object.freeze({__proto__:null,parseGephi:Xl}),Kl=Object.freeze({__proto__:null,en:{addDescription:\"Click in an empty space to place a new node.\",addEdge:\"Add Edge\",addNode:\"Add Node\",back:\"Back\",close:\"Close\",createEdgeError:\"Cannot link edges to a cluster.\",del:\"Delete selected\",deleteClusterError:\"Clusters cannot be deleted.\",edgeDescription:\"Click on a node and drag the edge to another node to connect them.\",edit:\"Edit\",editClusterError:\"Clusters cannot be edited.\",editEdge:\"Edit Edge\",editEdgeDescription:\"Click on the control points and drag them to a node to connect to it.\",editNode:\"Edit Node\"},de:{addDescription:\"Klicke auf eine freie Stelle, um einen neuen Knoten zu plazieren.\",addEdge:\"Kante hinzufügen\",addNode:\"Knoten hinzufügen\",back:\"Zurück\",close:\"Schließen\",createEdgeError:\"Es ist nicht möglich, Kanten mit Clustern zu verbinden.\",del:\"Lösche Auswahl\",deleteClusterError:\"Cluster können nicht gelöscht werden.\",edgeDescription:\"Klicke auf einen Knoten und ziehe die Kante zu einem anderen Knoten, um diese zu verbinden.\",edit:\"Editieren\",editClusterError:\"Cluster können nicht editiert werden.\",editEdge:\"Kante editieren\",editEdgeDescription:\"Klicke auf die Verbindungspunkte und ziehe diese auf einen Knoten, um sie zu verbinden.\",editNode:\"Knoten editieren\"},es:{addDescription:\"Haga clic en un lugar vacío para colocar un nuevo nodo.\",addEdge:\"Añadir arista\",addNode:\"Añadir nodo\",back:\"Atrás\",close:\"Cerrar\",createEdgeError:\"No se puede conectar una arista a un grupo.\",del:\"Eliminar selección\",deleteClusterError:\"No es posible eliminar grupos.\",edgeDescription:\"Haga clic en un nodo y arrastre la arista hacia otro nodo para conectarlos.\",edit:\"Editar\",editClusterError:\"No es posible editar grupos.\",editEdge:\"Editar arista\",editEdgeDescription:\"Haga clic en un punto de control y arrastrelo a un nodo para conectarlo.\",editNode:\"Editar nodo\"},it:{addDescription:\"Clicca per aggiungere un nuovo nodo\",addEdge:\"Aggiungi un vertice\",addNode:\"Aggiungi un nodo\",back:\"Indietro\",close:\"Chiudere\",createEdgeError:\"Non si possono collegare vertici ad un cluster\",del:\"Cancella la selezione\",deleteClusterError:\"I cluster non possono essere cancellati\",edgeDescription:\"Clicca su un nodo e trascinalo ad un altro nodo per connetterli.\",edit:\"Modifica\",editClusterError:\"I clusters non possono essere modificati.\",editEdge:\"Modifica il vertice\",editEdgeDescription:\"Clicca sui Punti di controllo e trascinali ad un nodo per connetterli.\",editNode:\"Modifica il nodo\"},nl:{addDescription:\"Klik op een leeg gebied om een nieuwe node te maken.\",addEdge:\"Link toevoegen\",addNode:\"Node toevoegen\",back:\"Terug\",close:\"Sluiten\",createEdgeError:\"Kan geen link maken naar een cluster.\",del:\"Selectie verwijderen\",deleteClusterError:\"Clusters kunnen niet worden verwijderd.\",edgeDescription:\"Klik op een node en sleep de link naar een andere node om ze te verbinden.\",edit:\"Wijzigen\",editClusterError:\"Clusters kunnen niet worden aangepast.\",editEdge:\"Link wijzigen\",editEdgeDescription:\"Klik op de verbindingspunten en sleep ze naar een node om daarmee te verbinden.\",editNode:\"Node wijzigen\"},pt:{addDescription:\"Clique em um espaço em branco para adicionar um novo nó\",addEdge:\"Adicionar aresta\",addNode:\"Adicionar nó\",back:\"Voltar\",close:\"Fechar\",createEdgeError:\"Não foi possível linkar arestas a um cluster.\",del:\"Remover selecionado\",deleteClusterError:\"Clusters não puderam ser removidos.\",edgeDescription:\"Clique em um nó e arraste a aresta até outro nó para conectá-los\",edit:\"Editar\",editClusterError:\"Clusters não puderam ser editados.\",editEdge:\"Editar aresta\",editEdgeDescription:\"Clique nos pontos de controle e os arraste para um nó para conectá-los\",editNode:\"Editar nó\"},ru:{addDescription:\"Кликните в свободное место, чтобы добавить новый узел.\",addEdge:\"Добавить ребро\",addNode:\"Добавить узел\",back:\"Назад\",close:\"Закрывать\",createEdgeError:\"Невозможно соединить ребра в кластер.\",del:\"Удалить выбранное\",deleteClusterError:\"Кластеры не могут быть удалены\",edgeDescription:\"Кликните на узел и протяните ребро к другому узлу, чтобы соединить их.\",edit:\"Редактировать\",editClusterError:\"Кластеры недоступны для редактирования.\",editEdge:\"Редактировать ребро\",editEdgeDescription:\"Кликните на контрольные точки и перетащите их в узел, чтобы подключиться к нему.\",editNode:\"Редактировать узел\"},cn:{addDescription:\"单击空白处放置新节点。\",addEdge:\"添加连接线\",addNode:\"添加节点\",back:\"返回\",close:\"關閉\",createEdgeError:\"无法将连接线连接到群集。\",del:\"删除选定\",deleteClusterError:\"无法删除群集。\",edgeDescription:\"单击某个节点并将该连接线拖动到另一个节点以连接它们。\",edit:\"编辑\",editClusterError:\"无法编辑群集。\",editEdge:\"编辑连接线\",editEdgeDescription:\"单击控制节点并将它们拖到节点上连接。\",editNode:\"编辑节点\"},uk:{addDescription:\"Kлікніть на вільне місце, щоб додати новий вузол.\",addEdge:\"Додати край\",addNode:\"Додати вузол\",back:\"Назад\",close:\"Закрити\",createEdgeError:\"Не можливо об'єднати краї в групу.\",del:\"Видалити обране\",deleteClusterError:\"Групи не можуть бути видалені.\",edgeDescription:\"Клікніть на вузол і перетягніть край до іншого вузла, щоб їх з'єднати.\",edit:\"Редагувати\",editClusterError:\"Групи недоступні для редагування.\",editEdge:\"Редагувати край\",editEdgeDescription:\"Клікніть на контрольні точки і перетягніть їх у вузол, щоб підключитися до нього.\",editNode:\"Редагувати вузол\"},fr:{addDescription:\"Cliquez dans un endroit vide pour placer un nœud.\",addEdge:\"Ajouter un lien\",addNode:\"Ajouter un nœud\",back:\"Retour\",close:\"Fermer\",createEdgeError:\"Impossible de créer un lien vers un cluster.\",del:\"Effacer la sélection\",deleteClusterError:\"Les clusters ne peuvent pas être effacés.\",edgeDescription:\"Cliquez sur un nœud et glissez le lien vers un autre nœud pour les connecter.\",edit:\"Éditer\",editClusterError:\"Les clusters ne peuvent pas être édités.\",editEdge:\"Éditer le lien\",editEdgeDescription:\"Cliquez sur les points de contrôle et glissez-les pour connecter un nœud.\",editNode:\"Éditer le nœud\"},cs:{addDescription:\"Kluknutím do prázdného prostoru můžete přidat nový vrchol.\",addEdge:\"Přidat hranu\",addNode:\"Přidat vrchol\",back:\"Zpět\",close:\"Zavřít\",createEdgeError:\"Nelze připojit hranu ke shluku.\",del:\"Smazat výběr\",deleteClusterError:\"Nelze mazat shluky.\",edgeDescription:\"Přetažením z jednoho vrcholu do druhého můžete spojit tyto vrcholy novou hranou.\",edit:\"Upravit\",editClusterError:\"Nelze upravovat shluky.\",editEdge:\"Upravit hranu\",editEdgeDescription:\"Přetažením kontrolního vrcholu hrany ji můžete připojit k jinému vrcholu.\",editNode:\"Upravit vrchol\"}});var $l=function(){function t(){Nn(this,t),this.NUM_ITERATIONS=4,this.image=new Image,this.canvas=document.createElement(\"canvas\")}return Fn(t,[{key:\"init\",value:function(){if(!this.initialized()){this.src=this.image.src;var t=this.image.width,e=this.image.height;this.width=t,this.height=e;var i=Math.floor(e/2),n=Math.floor(e/4),o=Math.floor(e/8),r=Math.floor(e/16),s=Math.floor(t/2),a=Math.floor(t/4),h=Math.floor(t/8),l=Math.floor(t/16);this.canvas.width=3*a,this.canvas.height=i,this.coordinates=[[0,0,s,i],[s,0,a,n],[s,n,h,o],[5*h,n,l,r]],this._fillMipMap()}}},{key:\"initialized\",value:function(){return void 0!==this.coordinates}},{key:\"_fillMipMap\",value:function(){var t=this.canvas.getContext(\"2d\"),e=this.coordinates[0];t.drawImage(this.image,e[0],e[1],e[2],e[3]);for(var i=1;i<this.NUM_ITERATIONS;i++){var n=this.coordinates[i-1],o=this.coordinates[i];t.drawImage(this.canvas,n[0],n[1],n[2],n[3],o[0],o[1],o[2],o[3])}}},{key:\"drawImageAtPosition\",value:function(t,e,i,n,o,r){if(this.initialized())if(e>2){e*=.5;for(var s=0;e>2&&s<this.NUM_ITERATIONS;)e*=.5,s+=1;s>=this.NUM_ITERATIONS&&(s=this.NUM_ITERATIONS-1);var a=this.coordinates[s];t.drawImage(this.canvas,a[0],a[1],a[2],a[3],i,n,o,r)}else t.drawImage(this.image,i,n,o,r)}}]),t}(),Zl=function(){function t(e){Nn(this,t),this.images={},this.imageBroken={},this.callback=e}return Fn(t,[{key:\"_tryloadBrokenUrl\",value:function(t,e,i){void 0!==t&&void 0!==i&&(void 0!==e?(i.image.onerror=function(){console.error(\"Could not load brokenImage:\",e)},i.image.src=e):console.warn(\"No broken url image defined\"))}},{key:\"_redrawWithImage\",value:function(t){this.callback&&this.callback(t)}},{key:\"load\",value:function(t,e){var i=this,n=this.images[t];if(n)return n;var o=new $l;return this.images[t]=o,o.image.onload=function(){i._fixImageCoordinates(o.image),o.init(),i._redrawWithImage(o)},o.image.onerror=function(){console.error(\"Could not load image:\",t),i._tryloadBrokenUrl(t,e,o)},o.image.src=t,o}},{key:\"_fixImageCoordinates\",value:function(t){0===t.width&&(document.body.appendChild(t),t.width=t.offsetWidth,t.height=t.offsetHeight,document.body.removeChild(t))}}]),t}(),Ql=!h((function(){return Object.isExtensible(Object.preventExtensions({}))})),Jl=n((function(t){var e=ut.f,i=!1,n=H(\"meta\"),o=0,r=Object.isExtensible||function(){return!0},s=function(t){e(t,n,{value:{objectID:\"O\"+o++,weakData:{}}})},a=t.exports={enable:function(){a.enable=function(){},i=!0;var t=Ai.f,e=[].splice,o={};o[n]=1,t(o).length&&(Ai.f=function(i){for(var o=t(i),r=0,s=o.length;r<s;r++)if(o[r]===n){e.call(o,r,1);break}return o},gt({target:\"Object\",stat:!0,forced:!0},{getOwnPropertyNames:Li.f}))},fastKey:function(t,e){if(!w(t))return\"symbol\"==typeof t?t:(\"string\"==typeof t?\"S\":\"P\")+t;if(!j(t,n)){if(!r(t))return\"F\";if(!e)return\"E\";s(t)}return t[n].objectID},getWeakData:function(t,e){if(!j(t,n)){if(!r(t))return!0;if(!e)return!1;s(t)}return t[n].weakData},onFreeze:function(t){return Ql&&i&&r(t)&&!j(t,n)&&s(t),t}};St[n]=!0}));Jl.enable,Jl.fastKey,Jl.getWeakData,Jl.onFreeze;var td=function(t,e){this.stopped=t,this.result=e},ed=function(t,e,i){var n,o,r,s,a,h,l,d=i&&i.that,c=!(!i||!i.AS_ENTRIES),u=!(!i||!i.IS_ITERATOR),f=!(!i||!i.INTERRUPTED),p=lt(e,d,1+c+f),v=function(t){return n&&di(n),new td(!0,t)},g=function(t){return c?(dt(t),f?p(t[0],t[1],v):p(t[0],t[1])):f?p(t,v):p(t)};if(u)n=t;else{if(\"function\"!=typeof(o=yi(t)))throw TypeError(\"Target is not iterable\");if(pi(o)){for(r=0,s=kt(t.length);s>r;r++)if((a=g(t[r]))&&a instanceof td)return a;return new td(!1)}n=o.call(t)}for(h=n.next;!(l=h.call(n)).done;){try{a=g(l.value)}catch(t){throw di(n),t}if(\"object\"==typeof a&&a&&a instanceof td)return a}return new td(!1)},id=function(t,e,i){if(!(t instanceof e))throw TypeError(\"Incorrect \"+(i?i+\" \":\"\")+\"invocation\");return t},nd=ut.f,od=Gi.forEach,rd=we.set,sd=we.getterFor,ad=function(t,e,i){var n,o=-1!==t.indexOf(\"Map\"),r=-1!==t.indexOf(\"Weak\"),s=o?\"set\":\"add\",d=a[t],c=d&&d.prototype,u={};if(l&&\"function\"==typeof d&&(r||c.forEach&&!h((function(){(new d).entries().next()})))){n=e((function(e,i){rd(id(e,n,t),{type:t,collection:new d}),null!=i&&ed(i,e[s],{that:e,AS_ENTRIES:o})}));var f=sd(t);od([\"add\",\"clear\",\"delete\",\"forEach\",\"get\",\"has\",\"set\",\"keys\",\"values\",\"entries\"],(function(t){var e=\"add\"==t||\"set\"==t;!(t in c)||r&&\"clear\"==t||ft(n.prototype,t,(function(i,n){var o=f(this).collection;if(!e&&r&&!w(i))return\"get\"==t&&void 0;var s=o[t](0===i?0:i,n);return e?this:s}))})),r||nd(n.prototype,\"size\",{configurable:!0,get:function(){return f(this).collection.size}})}else n=i.getConstructor(e,t,o,s),Jl.enable();return Ye(n,t,!1,!0),u[t]=n,gt({global:!0,forced:!0},u),r||i.setStrong(n,t,o),n},hd=function(t,e,i){for(var n in e)i&&i.unsafe&&t[n]?t[n]=e[n]:Ze(t,n,e[n],i);return t},ld=U(\"species\"),dd=ut.f,cd=Jl.fastKey,ud=we.set,fd=we.getterFor,pd={getConstructor:function(t,e,i,n){var o=t((function(t,r){id(t,o,e),ud(t,{type:e,index:Fe(null),first:void 0,last:void 0,size:0}),l||(t.size=0),null!=r&&ed(r,t[n],{that:t,AS_ENTRIES:i})})),r=fd(e),s=function(t,e,i){var n,o,s=r(t),h=a(t,e);return h?h.value=i:(s.last=h={index:o=cd(e,!0),key:e,value:i,previous:n=s.last,next:void 0,removed:!1},s.first||(s.first=h),n&&(n.next=h),l?s.size++:t.size++,\"F\"!==o&&(s.index[o]=h)),t},a=function(t,e){var i,n=r(t),o=cd(e);if(\"F\"!==o)return n.index[o];for(i=n.first;i;i=i.next)if(i.key==e)return i};return hd(o.prototype,{clear:function(){for(var t=r(this),e=t.index,i=t.first;i;)i.removed=!0,i.previous&&(i.previous=i.previous.next=void 0),delete e[i.index],i=i.next;t.first=t.last=void 0,l?t.size=0:this.size=0},delete:function(t){var e=this,i=r(e),n=a(e,t);if(n){var o=n.next,s=n.previous;delete i.index[n.index],n.removed=!0,s&&(s.next=o),o&&(o.previous=s),i.first==n&&(i.first=o),i.last==n&&(i.last=s),l?i.size--:e.size--}return!!n},forEach:function(t){for(var e,i=r(this),n=lt(t,arguments.length>1?arguments[1]:void 0,3);e=e?e.next:i.first;)for(n(e.value,e.key,this);e&&e.removed;)e=e.previous},has:function(t){return!!a(this,t)}}),hd(o.prototype,i?{get:function(t){var e=a(this,t);return e&&e.value},set:function(t,e){return s(this,0===t?0:t,e)}}:{add:function(t){return s(this,t=0===t?0:t,t)}}),l&&dd(o.prototype,\"size\",{get:function(){return r(this).size}}),o},setStrong:function(t,e,i){var n=e+\" Iterator\",o=fd(e),r=fd(n);ri(t,e,(function(t,e){ud(this,{type:n,target:t,state:o(t),kind:e,last:void 0})}),(function(){for(var t=r(this),e=t.kind,i=t.last;i&&i.removed;)i=i.previous;return t.target&&(t.last=i=i?i.next:t.state.first)?\"keys\"==e?{value:i.key,done:!1}:\"values\"==e?{value:i.value,done:!1}:{value:[i.key,i.value],done:!1}:(t.target=void 0,{value:void 0,done:!0})}),i?\"entries\":\"values\",!i,!0),function(t){var e=x(t),i=ut.f;l&&e&&!e[ld]&&i(e,ld,{configurable:!0,get:function(){return this}})}(e)}};ad(\"Map\",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),pd);var vd=k.Map,gd=function(){function t(){Nn(this,t),this.clear(),this._defaultIndex=0,this._groupIndex=0,this._defaultGroups=[{border:\"#2B7CE9\",background:\"#97C2FC\",highlight:{border:\"#2B7CE9\",background:\"#D2E5FF\"},hover:{border:\"#2B7CE9\",background:\"#D2E5FF\"}},{border:\"#FFA500\",background:\"#FFFF00\",highlight:{border:\"#FFA500\",background:\"#FFFFA3\"},hover:{border:\"#FFA500\",background:\"#FFFFA3\"}},{border:\"#FA0A10\",background:\"#FB7E81\",highlight:{border:\"#FA0A10\",background:\"#FFAFB1\"},hover:{border:\"#FA0A10\",background:\"#FFAFB1\"}},{border:\"#41A906\",background:\"#7BE141\",highlight:{border:\"#41A906\",background:\"#A1EC76\"},hover:{border:\"#41A906\",background:\"#A1EC76\"}},{border:\"#E129F0\",background:\"#EB7DF4\",highlight:{border:\"#E129F0\",background:\"#F0B3F5\"},hover:{border:\"#E129F0\",background:\"#F0B3F5\"}},{border:\"#7C29F0\",background:\"#AD85E4\",highlight:{border:\"#7C29F0\",background:\"#D3BDF0\"},hover:{border:\"#7C29F0\",background:\"#D3BDF0\"}},{border:\"#C37F00\",background:\"#FFA807\",highlight:{border:\"#C37F00\",background:\"#FFCA66\"},hover:{border:\"#C37F00\",background:\"#FFCA66\"}},{border:\"#4220FB\",background:\"#6E6EFD\",highlight:{border:\"#4220FB\",background:\"#9B9BFD\"},hover:{border:\"#4220FB\",background:\"#9B9BFD\"}},{border:\"#FD5A77\",background:\"#FFC0CB\",highlight:{border:\"#FD5A77\",background:\"#FFD1D9\"},hover:{border:\"#FD5A77\",background:\"#FFD1D9\"}},{border:\"#4AD63A\",background:\"#C2FABC\",highlight:{border:\"#4AD63A\",background:\"#E6FFE3\"},hover:{border:\"#4AD63A\",background:\"#E6FFE3\"}},{border:\"#990000\",background:\"#EE0000\",highlight:{border:\"#BB0000\",background:\"#FF3333\"},hover:{border:\"#BB0000\",background:\"#FF3333\"}},{border:\"#FF6000\",background:\"#FF6000\",highlight:{border:\"#FF6000\",background:\"#FF6000\"},hover:{border:\"#FF6000\",background:\"#FF6000\"}},{border:\"#97C2FC\",background:\"#2B7CE9\",highlight:{border:\"#D2E5FF\",background:\"#2B7CE9\"},hover:{border:\"#D2E5FF\",background:\"#2B7CE9\"}},{border:\"#399605\",background:\"#255C03\",highlight:{border:\"#399605\",background:\"#255C03\"},hover:{border:\"#399605\",background:\"#255C03\"}},{border:\"#B70054\",background:\"#FF007E\",highlight:{border:\"#B70054\",background:\"#FF007E\"},hover:{border:\"#B70054\",background:\"#FF007E\"}},{border:\"#AD85E4\",background:\"#7C29F0\",highlight:{border:\"#D3BDF0\",background:\"#7C29F0\"},hover:{border:\"#D3BDF0\",background:\"#7C29F0\"}},{border:\"#4557FA\",background:\"#000EA1\",highlight:{border:\"#6E6EFD\",background:\"#000EA1\"},hover:{border:\"#6E6EFD\",background:\"#000EA1\"}},{border:\"#FFC0CB\",background:\"#FD5A77\",highlight:{border:\"#FFD1D9\",background:\"#FD5A77\"},hover:{border:\"#FFD1D9\",background:\"#FD5A77\"}},{border:\"#C2FABC\",background:\"#74D66A\",highlight:{border:\"#E6FFE3\",background:\"#74D66A\"},hover:{border:\"#E6FFE3\",background:\"#74D66A\"}},{border:\"#EE0000\",background:\"#990000\",highlight:{border:\"#FF3333\",background:\"#BB0000\"},hover:{border:\"#FF3333\",background:\"#BB0000\"}}],this.options={},this.defaultOptions={useDefaultGroups:!0},At(this.options,this.defaultOptions)}return Fn(t,[{key:\"setOptions\",value:function(t){var e=[\"useDefaultGroups\"];if(void 0!==t)for(var i in t)if(Object.prototype.hasOwnProperty.call(t,i)&&-1===Hr(e).call(e,i)){var n=t[i];this.add(i,n)}}},{key:\"clear\",value:function(){this._groups=new vd,this._groupNames=[]}},{key:\"get\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this._groups.get(t);if(void 0===i&&e)if(!1===this.options.useDefaultGroups&&this._groupNames.length>0){var n=this._groupIndex%this._groupNames.length;++this._groupIndex,(i={}).color=this._groups.get(this._groupNames[n]),this._groups.set(t,i)}else{var o=this._defaultIndex%this._defaultGroups.length;this._defaultIndex++,(i={}).color=this._defaultGroups[o],this._groups.set(t,i)}return i}},{key:\"add\",value:function(t,e){return this._groups.has(t)||this._groupNames.push(t),this._groups.set(t,e),e}}]),t}();gt({target:\"Number\",stat:!0},{isNaN:function(t){return t!=t}});var yd=k.Number.isNaN,md=a.isFinite,bd=Number.isFinite||function(t){return\"number\"==typeof t&&md(t)};gt({target:\"Number\",stat:!0},{isFinite:bd});var wd=k.Number.isFinite,kd=Gi.some,_d=Ao(\"some\");gt({target:\"Array\",proto:!0,forced:!_d},{some:function(t){return kd(this,t,arguments.length>1?arguments[1]:void 0)}});var xd=Ht(\"Array\").some,Ed=Array.prototype,Od=function(t){var e=t.some;return t===Ed||t instanceof Array&&e===Ed.some?xd:e},Cd=x(\"Reflect\",\"construct\"),Sd=h((function(){function t(){}return!(Cd((function(){}),[],t)instanceof t)})),Td=!h((function(){Cd((function(){}))})),Md=Sd||Td;gt({target:\"Reflect\",stat:!0,forced:Md,sham:Md},{construct:function(t,e){ht(t),dt(e);var i=arguments.length<3?t:ht(arguments[2]);if(Td&&!Sd)return Cd(t,e,i);if(t==i){switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3])}var n=[null];return n.push.apply(n,e),new(Lt.apply(t,n))}var o=i.prototype,r=Fe(w(o)?o:Object.prototype),s=Function.apply.call(t,r,e);return w(s)?s:r}});var Pd=k.Reflect.construct,Dd=n((function(t){t.exports=function(t){if(void 0===t)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return t},t.exports.default=t.exports,t.exports.__esModule=!0})),Id=i(Dd),Bd=Xr;gt({target:\"Object\",stat:!0},{setPrototypeOf:$e});var zd=k.Object.setPrototypeOf,Nd=n((function(t){function e(i,n){return t.exports=e=zd||function(t,e){return t.__proto__=e,t},t.exports.default=t.exports,t.exports.__esModule=!0,e(i,n)}t.exports=e,t.exports.default=t.exports,t.exports.__esModule=!0}));i(Nd);var Ad=i(n((function(t){t.exports=function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Super expression must either be null or a function\");t.prototype=Bd(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&Nd(t,e)},t.exports.default=t.exports,t.exports.__esModule=!0}))),Fd=i(n((function(t){var e=vo.default;t.exports=function(t,i){if(i&&(\"object\"===e(i)||\"function\"==typeof i))return i;if(void 0!==i)throw new TypeError(\"Derived constructors may only return object or undefined\");return Dd(t)},t.exports.default=t.exports,t.exports.__esModule=!0}))),jd=ur,Rd=n((function(t){function e(i){return t.exports=e=zd?jd:function(t){return t.__proto__||jd(t)},t.exports.default=t.exports,t.exports.__esModule=!0,e(i)}t.exports=e,t.exports.default=t.exports,t.exports.__esModule=!0})),Ld=i(Rd),Hd=n((function(t){var e=function(t){var e,i=Object.prototype,n=i.hasOwnProperty,o=\"function\"==typeof Symbol?Symbol:{},r=o.iterator||\"@@iterator\",s=o.asyncIterator||\"@@asyncIterator\",a=o.toStringTag||\"@@toStringTag\";function h(t,e,i){return Object.defineProperty(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{h({},\"\")}catch(t){h=function(t,e,i){return t[e]=i}}function l(t,e,i,n){var o=e&&e.prototype instanceof g?e:g,r=Object.create(o.prototype),s=new T(n||[]);return r._invoke=function(t,e,i){var n=c;return function(o,r){if(n===f)throw new Error(\"Generator is already running\");if(n===p){if(\"throw\"===o)throw r;return P()}for(i.method=o,i.arg=r;;){var s=i.delegate;if(s){var a=O(s,i);if(a){if(a===v)continue;return a}}if(\"next\"===i.method)i.sent=i._sent=i.arg;else if(\"throw\"===i.method){if(n===c)throw n=p,i.arg;i.dispatchException(i.arg)}else\"return\"===i.method&&i.abrupt(\"return\",i.arg);n=f;var h=d(t,e,i);if(\"normal\"===h.type){if(n=i.done?p:u,h.arg===v)continue;return{value:h.arg,done:i.done}}\"throw\"===h.type&&(n=p,i.method=\"throw\",i.arg=h.arg)}}}(t,i,s),r}function d(t,e,i){try{return{type:\"normal\",arg:t.call(e,i)}}catch(t){return{type:\"throw\",arg:t}}}t.wrap=l;var c=\"suspendedStart\",u=\"suspendedYield\",f=\"executing\",p=\"completed\",v={};function g(){}function y(){}function m(){}var b={};b[r]=function(){return this};var w=Object.getPrototypeOf,k=w&&w(w(M([])));k&&k!==i&&n.call(k,r)&&(b=k);var _=m.prototype=g.prototype=Object.create(b);function x(t){[\"next\",\"throw\",\"return\"].forEach((function(e){h(t,e,(function(t){return this._invoke(e,t)}))}))}function E(t,e){function i(o,r,s,a){var h=d(t[o],t,r);if(\"throw\"!==h.type){var l=h.arg,c=l.value;return c&&\"object\"==typeof c&&n.call(c,\"__await\")?e.resolve(c.__await).then((function(t){i(\"next\",t,s,a)}),(function(t){i(\"throw\",t,s,a)})):e.resolve(c).then((function(t){l.value=t,s(l)}),(function(t){return i(\"throw\",t,s,a)}))}a(h.arg)}var o;this._invoke=function(t,n){function r(){return new e((function(e,o){i(t,n,e,o)}))}return o=o?o.then(r,r):r()}}function O(t,i){var n=t.iterator[i.method];if(n===e){if(i.delegate=null,\"throw\"===i.method){if(t.iterator.return&&(i.method=\"return\",i.arg=e,O(t,i),\"throw\"===i.method))return v;i.method=\"throw\",i.arg=new TypeError(\"The iterator does not provide a 'throw' method\")}return v}var o=d(n,t.iterator,i.arg);if(\"throw\"===o.type)return i.method=\"throw\",i.arg=o.arg,i.delegate=null,v;var r=o.arg;return r?r.done?(i[t.resultName]=r.value,i.next=t.nextLoc,\"return\"!==i.method&&(i.method=\"next\",i.arg=e),i.delegate=null,v):r:(i.method=\"throw\",i.arg=new TypeError(\"iterator result is not an object\"),i.delegate=null,v)}function C(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function S(t){var e=t.completion||{};e.type=\"normal\",delete e.arg,t.completion=e}function T(t){this.tryEntries=[{tryLoc:\"root\"}],t.forEach(C,this),this.reset(!0)}function M(t){if(t){var i=t[r];if(i)return i.call(t);if(\"function\"==typeof t.next)return t;if(!isNaN(t.length)){var o=-1,s=function i(){for(;++o<t.length;)if(n.call(t,o))return i.value=t[o],i.done=!1,i;return i.value=e,i.done=!0,i};return s.next=s}}return{next:P}}function P(){return{value:e,done:!0}}return y.prototype=_.constructor=m,m.constructor=y,y.displayName=h(m,a,\"GeneratorFunction\"),t.isGeneratorFunction=function(t){var e=\"function\"==typeof t&&t.constructor;return!!e&&(e===y||\"GeneratorFunction\"===(e.displayName||e.name))},t.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,m):(t.__proto__=m,h(t,a,\"GeneratorFunction\")),t.prototype=Object.create(_),t},t.awrap=function(t){return{__await:t}},x(E.prototype),E.prototype[s]=function(){return this},t.AsyncIterator=E,t.async=function(e,i,n,o,r){void 0===r&&(r=Promise);var s=new E(l(e,i,n,o),r);return t.isGeneratorFunction(i)?s:s.next().then((function(t){return t.done?t.value:s.next()}))},x(_),h(_,a,\"Generator\"),_[r]=function(){return this},_.toString=function(){return\"[object Generator]\"},t.keys=function(t){var e=[];for(var i in t)e.push(i);return e.reverse(),function i(){for(;e.length;){var n=e.pop();if(n in t)return i.value=n,i.done=!1,i}return i.done=!0,i}},t.values=M,T.prototype={constructor:T,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method=\"next\",this.arg=e,this.tryEntries.forEach(S),!t)for(var i in this)\"t\"===i.charAt(0)&&n.call(this,i)&&!isNaN(+i.slice(1))&&(this[i]=e)},stop:function(){this.done=!0;var t=this.tryEntries[0].completion;if(\"throw\"===t.type)throw t.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var i=this;function o(n,o){return a.type=\"throw\",a.arg=t,i.next=n,o&&(i.method=\"next\",i.arg=e),!!o}for(var r=this.tryEntries.length-1;r>=0;--r){var s=this.tryEntries[r],a=s.completion;if(\"root\"===s.tryLoc)return o(\"end\");if(s.tryLoc<=this.prev){var h=n.call(s,\"catchLoc\"),l=n.call(s,\"finallyLoc\");if(h&&l){if(this.prev<s.catchLoc)return o(s.catchLoc,!0);if(this.prev<s.finallyLoc)return o(s.finallyLoc)}else if(h){if(this.prev<s.catchLoc)return o(s.catchLoc,!0)}else{if(!l)throw new Error(\"try statement without catch or finally\");if(this.prev<s.finallyLoc)return o(s.finallyLoc)}}}},abrupt:function(t,e){for(var i=this.tryEntries.length-1;i>=0;--i){var o=this.tryEntries[i];if(o.tryLoc<=this.prev&&n.call(o,\"finallyLoc\")&&this.prev<o.finallyLoc){var r=o;break}}r&&(\"break\"===t||\"continue\"===t)&&r.tryLoc<=e&&e<=r.finallyLoc&&(r=null);var s=r?r.completion:{};return s.type=t,s.arg=e,r?(this.method=\"next\",this.next=r.finallyLoc,v):this.complete(s)},complete:function(t,e){if(\"throw\"===t.type)throw t.arg;return\"break\"===t.type||\"continue\"===t.type?this.next=t.arg:\"return\"===t.type?(this.rval=this.arg=t.arg,this.method=\"return\",this.next=\"end\"):\"normal\"===t.type&&e&&(this.next=e),v},finish:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var i=this.tryEntries[e];if(i.finallyLoc===t)return this.complete(i.completion,i.afterLoc),S(i),v}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var i=this.tryEntries[e];if(i.tryLoc===t){var n=i.completion;if(\"throw\"===n.type){var o=n.arg;S(i)}return o}}throw new Error(\"illegal catch attempt\")},delegateYield:function(t,i,n){return this.delegate={iterator:M(t),resultName:i,nextLoc:n},\"next\"===this.method&&(this.arg=e),v}},t}(t.exports);try{regeneratorRuntime=e}catch(t){Function(\"r\",\"regeneratorRuntime = r\")(e)}})),Wd=function(t){return function(e,i,n,o){ht(i);var r=A(e),s=y(r),a=kt(r.length),h=t?a-1:0,l=t?-1:1;if(n<2)for(;;){if(h in s){o=s[h],h+=l;break}if(h+=l,t?h<0:a<=h)throw TypeError(\"Reduce of empty array with no initial value\")}for(;t?h>=0:a>h;h+=l)h in s&&(o=i(o,s[h],h,r));return o}},qd={left:Wd(!1),right:Wd(!0)},Vd=\"process\"==v(a.process),Ud=qd.left,Yd=Ao(\"reduce\");gt({target:\"Array\",proto:!0,forced:!Yd||!Vd&&M>79&&M<83},{reduce:function(t){return Ud(this,t,arguments.length,arguments.length>1?arguments[1]:void 0)}});var Xd=Ht(\"Array\").reduce,Gd=Array.prototype,Kd=function(t){var e=t.reduce;return t===Gd||t instanceof Array&&e===Gd.reduce?Xd:e},$d=function(t,e,i,n,o,r,s,a){for(var h,l=o,d=0,c=!!s&&lt(s,a,3);d<n;){if(d in i){if(h=c?c(i[d],d,e):i[d],r>0&&zi(h))l=$d(t,e,h,kt(h.length),l,r-1)-1;else{if(l>=9007199254740991)throw TypeError(\"Exceed the acceptable array length\");t[l]=h}l++}d++}return l},Zd=$d;gt({target:\"Array\",proto:!0},{flatMap:function(t){var e,i=A(this),n=kt(i.length);return ht(t),(e=Ui(i,0)).length=Zd(e,i,i,n,0,1,t,arguments.length>1?arguments[1]:void 0),e}});var Qd=Ht(\"Array\").flatMap,Jd=Array.prototype,tc=function(t){var e=t.flatMap;return t===Jd||t instanceof Array&&e===Jd.flatMap?Qd:e};ad(\"Set\",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),pd);var ec=k.Set,ic=fo,nc=function(t){var e=yi(t);if(\"function\"!=typeof e)throw TypeError(String(t)+\" is not iterable\");return dt(e.call(t))},oc=Math.floor,rc=function(t,e){var i=t.length,n=oc(i/2);return i<8?sc(t,e):ac(rc(t.slice(0,n),e),rc(t.slice(n),e),e)},sc=function(t,e){for(var i,n,o=t.length,r=1;r<o;){for(n=r,i=t[r];n&&e(t[n-1],i)>0;)t[n]=t[--n];n!==r++&&(t[n]=i)}return t},ac=function(t,e,i){for(var n=t.length,o=e.length,r=0,s=0,a=[];r<n||s<o;)r<n&&s<o?a.push(i(t[r],e[s])<=0?t[r++]:e[s++]):a.push(r<n?t[r++]:e[s++]);return a},hc=rc,lc=E.match(/firefox\\/(\\d+)/i),dc=!!lc&&+lc[1],cc=/MSIE|Trident/.test(E),uc=E.match(/AppleWebKit\\/(\\d+)\\./),fc=!!uc&&+uc[1],pc=[],vc=pc.sort,gc=h((function(){pc.sort(void 0)})),yc=h((function(){pc.sort(null)})),mc=Ao(\"sort\"),bc=!h((function(){if(M)return M<70;if(!(dc&&dc>3)){if(cc)return!0;if(fc)return fc<603;var t,e,i,n,o=\"\";for(t=65;t<76;t++){switch(e=String.fromCharCode(t),t){case 66:case 69:case 70:case 72:i=3;break;case 68:case 71:i=4;break;default:i=2}for(n=0;n<47;n++)pc.push({k:e+n,v:i})}for(pc.sort((function(t,e){return e.v-t.v})),n=0;n<pc.length;n++)e=pc[n].k.charAt(0),o.charAt(o.length-1)!==e&&(o+=e);return\"DGBEFHACIJK\"!==o}}));gt({target:\"Array\",proto:!0,forced:gc||!yc||!mc||!bc},{sort:function(t){void 0!==t&&ht(t);var e=A(this);if(bc)return void 0===t?vc.call(e):vc.call(e,t);var i,n,o=[],r=kt(e.length);for(n=0;n<r;n++)n in e&&o.push(e[n]);for(i=(o=hc(o,function(t){return function(e,i){return void 0===i?-1:void 0===e?1:void 0!==t?+t(e,i)||0:Qt(e)>Qt(i)?1:-1}}(t))).length,n=0;n<i;)e[n]=o[n++];for(;n<r;)delete e[n++];return e}});var wc,kc=Ht(\"Array\").sort,_c=Array.prototype,xc=function(t){var e=t.sort;return t===_c||t instanceof Array&&e===_c.sort?kc:e},Ec=Ht(\"Array\").keys,Oc=Array.prototype,Cc={DOMTokenList:!0,NodeList:!0},Sc=function(t){var e=t.keys;return t===Oc||t instanceof Array&&e===Oc.keys||Cc.hasOwnProperty(We(t))?Ec:e},Tc=Ht(\"Array\").values,Mc=Array.prototype,Pc={DOMTokenList:!0,NodeList:!0},Dc=function(t){var e=t.values;return t===Mc||t instanceof Array&&e===Mc.values||Pc.hasOwnProperty(We(t))?Tc:e},Ic=Ht(\"Array\").entries,Bc=Array.prototype,zc={DOMTokenList:!0,NodeList:!0},Nc=function(t){var e=t.entries;return t===Bc||t instanceof Array&&e===Bc.entries||zc.hasOwnProperty(We(t))?Ic:e},Ac=new Uint8Array(16);function Fc(){if(!wc&&!(wc=\"undefined\"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||\"undefined\"!=typeof msCrypto&&\"function\"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error(\"crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported\");return wc(Ac)}var jc=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function Rc(t){return\"string\"==typeof t&&jc.test(t)}for(var Lc=[],Hc=0;Hc<256;++Hc)Lc.push((Hc+256).toString(16).substr(1));function Wc(t,e,i){var n=(t=t||{}).random||(t.rng||Fc)();if(n[6]=15&n[6]|64,n[8]=63&n[8]|128,e){i=i||0;for(var o=0;o<16;++o)e[i+o]=n[o];return e}return function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=(Lc[t[e+0]]+Lc[t[e+1]]+Lc[t[e+2]]+Lc[t[e+3]]+\"-\"+Lc[t[e+4]]+Lc[t[e+5]]+\"-\"+Lc[t[e+6]]+Lc[t[e+7]]+\"-\"+Lc[t[e+8]]+Lc[t[e+9]]+\"-\"+Lc[t[e+10]]+Lc[t[e+11]]+Lc[t[e+12]]+Lc[t[e+13]]+Lc[t[e+14]]+Lc[t[e+15]]).toLowerCase();if(!Rc(i))throw TypeError(\"Stringified UUID is invalid\");return i}(n)}function qc(t,e){var i=zo(t);if(On){var n=On(t);e&&(n=mr(n).call(n,(function(e){return Mn(t,e).enumerable}))),i.push.apply(i,n)}return i}function Vc(t){for(var e=1;e<arguments.length;e++){var i,n=null!=arguments[e]?arguments[e]:{};if(e%2)Wo(i=qc(Object(n),!0)).call(i,(function(e){jn(t,e,n[e])}));else if(Dn)In(t,Dn(n));else{var o;Wo(o=qc(Object(n))).call(o,(function(e){zn(t,e,Mn(n,e))}))}}return t}function Uc(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}function Yc(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return Xc(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Xc(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function Xc(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}var Gc=function(){function t(e,i,n){var o,r,s;Nn(this,t),this._source=e,this._transformers=i,this._target=n,this._listeners={add:Vt(o=this._add).call(o,this),remove:Vt(r=this._remove).call(r,this),update:Vt(s=this._update).call(s,this)}}return Fn(t,[{key:\"all\",value:function(){return this._target.update(this._transformItems(this._source.get())),this}},{key:\"start\",value:function(){return this._source.on(\"add\",this._listeners.add),this._source.on(\"remove\",this._listeners.remove),this._source.on(\"update\",this._listeners.update),this}},{key:\"stop\",value:function(){return this._source.off(\"add\",this._listeners.add),this._source.off(\"remove\",this._listeners.remove),this._source.off(\"update\",this._listeners.update),this}},{key:\"_transformItems\",value:function(t){var e;return Kd(e=this._transformers).call(e,(function(t,e){return e(t)}),t)}},{key:\"_add\",value:function(t,e){null!=e&&this._target.add(this._transformItems(this._source.get(e.items)))}},{key:\"_update\",value:function(t,e){null!=e&&this._target.update(this._transformItems(this._source.get(e.items)))}},{key:\"_remove\",value:function(t,e){null!=e&&this._target.remove(this._transformItems(e.oldData))}}]),t}(),Kc=function(){function t(e){Nn(this,t),this._source=e,this._transformers=[]}return Fn(t,[{key:\"filter\",value:function(t){return this._transformers.push((function(e){return mr(e).call(e,t)})),this}},{key:\"map\",value:function(t){return this._transformers.push((function(e){return Io(e).call(e,t)})),this}},{key:\"flatMap\",value:function(t){return this._transformers.push((function(e){return tc(e).call(e,t)})),this}},{key:\"to\",value:function(t){return new Gc(this._source,this._transformers,t)}}]),t}();function $c(t){return\"string\"==typeof t||\"number\"==typeof t}var Zc=function(){function t(e){Nn(this,t),this._queue=[],this._timeout=null,this._extended=null,this.delay=null,this.max=1/0,this.setOptions(e)}return Fn(t,[{key:\"setOptions\",value:function(t){t&&void 0!==t.delay&&(this.delay=t.delay),t&&void 0!==t.max&&(this.max=t.max),this._flushIfNeeded()}},{key:\"destroy\",value:function(){if(this.flush(),this._extended){for(var t=this._extended.object,e=this._extended.methods,i=0;i<e.length;i++){var n=e[i];n.original?t[n.name]=n.original:delete t[n.name]}this._extended=null}}},{key:\"replace\",value:function(t,e){var i=this,n=t[e];if(!n)throw new Error(\"Method \"+e+\" undefined\");t[e]=function(){for(var t=arguments.length,e=new Array(t),o=0;o<t;o++)e[o]=arguments[o];i.queue({args:e,fn:n,context:this})}}},{key:\"queue\",value:function(t){\"function\"==typeof t?this._queue.push({fn:t}):this._queue.push(t),this._flushIfNeeded()}},{key:\"_flushIfNeeded\",value:function(){var t=this;this._queue.length>this.max&&this.flush(),null!=this._timeout&&(clearTimeout(this._timeout),this._timeout=null),this.queue.length>0&&\"number\"==typeof this.delay&&(this._timeout=rs((function(){t.flush()}),this.delay))}},{key:\"flush\",value:function(){var t,e;Wo(t=er(e=this._queue).call(e,0)).call(t,(function(t){t.fn.apply(t.context||t.fn,t.args||[])}))}}],[{key:\"extend\",value:function(e,i){var n=new t(i);if(void 0!==e.flush)throw new Error(\"Target object already has a property flush\");e.flush=function(){n.flush()};var o=[{name:\"flush\",original:void 0}];if(i&&i.replace)for(var r=0;r<i.replace.length;r++){var s=i.replace[r];o.push({name:s,original:e[s]}),n.replace(e,s)}return n._extended={object:e,methods:o},n}}]),t}(),Qc=function(){function t(){Nn(this,t),this._subscribers={\"*\":[],add:[],remove:[],update:[]},this.subscribe=t.prototype.on,this.unsubscribe=t.prototype.off}return Fn(t,[{key:\"_trigger\",value:function(t,e,i){var n,o;if(\"*\"===t)throw new Error(\"Cannot trigger event *\");Wo(n=Eo(o=[]).call(o,wo(this._subscribers[t]),wo(this._subscribers[\"*\"]))).call(n,(function(n){n(t,e,null!=i?i:null)}))}},{key:\"on\",value:function(t,e){\"function\"==typeof e&&this._subscribers[t].push(e)}},{key:\"off\",value:function(t,e){var i;this._subscribers[t]=mr(i=this._subscribers[t]).call(i,(function(t){return t!==e}))}}]),t}(),Jc=function(t){function e(t){Nn(this,e),this._pairs=t}return Fn(e,[{key:t,value:Hd.mark((function t(){var e,i,n,o,r;return Hd.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:e=Yc(this._pairs),t.prev=1,e.s();case 3:if((i=e.n()).done){t.next=9;break}return n=uo(i.value,2),o=n[0],r=n[1],t.next=7,[o,r];case 7:t.next=3;break;case 9:t.next=14;break;case 11:t.prev=11,t.t0=t.catch(1),e.e(t.t0);case 14:return t.prev=14,e.f(),t.finish(14);case 17:case\"end\":return t.stop()}}),t,this,[[1,11,14,17]])}))},{key:\"entries\",value:Hd.mark((function t(){var e,i,n,o,r;return Hd.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:e=Yc(this._pairs),t.prev=1,e.s();case 3:if((i=e.n()).done){t.next=9;break}return n=uo(i.value,2),o=n[0],r=n[1],t.next=7,[o,r];case 7:t.next=3;break;case 9:t.next=14;break;case 11:t.prev=11,t.t0=t.catch(1),e.e(t.t0);case 14:return t.prev=14,e.f(),t.finish(14);case 17:case\"end\":return t.stop()}}),t,this,[[1,11,14,17]])}))},{key:\"keys\",value:Hd.mark((function t(){var e,i,n,o;return Hd.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:e=Yc(this._pairs),t.prev=1,e.s();case 3:if((i=e.n()).done){t.next=9;break}return n=uo(i.value,1),o=n[0],t.next=7,o;case 7:t.next=3;break;case 9:t.next=14;break;case 11:t.prev=11,t.t0=t.catch(1),e.e(t.t0);case 14:return t.prev=14,e.f(),t.finish(14);case 17:case\"end\":return t.stop()}}),t,this,[[1,11,14,17]])}))},{key:\"values\",value:Hd.mark((function t(){var e,i,n,o;return Hd.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:e=Yc(this._pairs),t.prev=1,e.s();case 3:if((i=e.n()).done){t.next=9;break}return n=uo(i.value,2),o=n[1],t.next=7,o;case 7:t.next=3;break;case 9:t.next=14;break;case 11:t.prev=11,t.t0=t.catch(1),e.e(t.t0);case 14:return t.prev=14,e.f(),t.finish(14);case 17:case\"end\":return t.stop()}}),t,this,[[1,11,14,17]])}))},{key:\"toIdArray\",value:function(){var t;return Io(t=wo(this._pairs)).call(t,(function(t){return t[0]}))}},{key:\"toItemArray\",value:function(){var t;return Io(t=wo(this._pairs)).call(t,(function(t){return t[1]}))}},{key:\"toEntryArray\",value:function(){return wo(this._pairs)}},{key:\"toObjectMap\",value:function(){var t,e=Gr(null),i=Yc(this._pairs);try{for(i.s();!(t=i.n()).done;){var n=uo(t.value,2),o=n[0],r=n[1];e[o]=r}}catch(t){i.e(t)}finally{i.f()}return e}},{key:\"toMap\",value:function(){return new vd(this._pairs)}},{key:\"toIdSet\",value:function(){return new ec(this.toIdArray())}},{key:\"toItemSet\",value:function(){return new ec(this.toItemArray())}},{key:\"cache\",value:function(){return new e(wo(this._pairs))}},{key:\"distinct\",value:function(t){var e,i=new ec,n=Yc(this._pairs);try{for(n.s();!(e=n.n()).done;){var o=uo(e.value,2),r=o[0],s=o[1];i.add(t(s,r))}}catch(t){n.e(t)}finally{n.f()}return i}},{key:\"filter\",value:function(t){var i=this._pairs;return new e(jn({},ic,Hd.mark((function e(){var n,o,r,s,a;return Hd.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:n=Yc(i),e.prev=1,n.s();case 3:if((o=n.n()).done){e.next=10;break}if(r=uo(o.value,2),s=r[0],a=r[1],!t(a,s)){e.next=8;break}return e.next=8,[s,a];case 8:e.next=3;break;case 10:e.next=15;break;case 12:e.prev=12,e.t0=e.catch(1),n.e(e.t0);case 15:return e.prev=15,n.f(),e.finish(15);case 18:case\"end\":return e.stop()}}),e,null,[[1,12,15,18]])}))))}},{key:\"forEach\",value:function(t){var e,i=Yc(this._pairs);try{for(i.s();!(e=i.n()).done;){var n=uo(e.value,2),o=n[0];t(n[1],o)}}catch(t){i.e(t)}finally{i.f()}}},{key:\"map\",value:function(t){var i=this._pairs;return new e(jn({},ic,Hd.mark((function e(){var n,o,r,s,a;return Hd.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:n=Yc(i),e.prev=1,n.s();case 3:if((o=n.n()).done){e.next=9;break}return r=uo(o.value,2),s=r[0],a=r[1],e.next=7,[s,t(a,s)];case 7:e.next=3;break;case 9:e.next=14;break;case 11:e.prev=11,e.t0=e.catch(1),n.e(e.t0);case 14:return e.prev=14,n.f(),e.finish(14);case 17:case\"end\":return e.stop()}}),e,null,[[1,11,14,17]])}))))}},{key:\"max\",value:function(t){var e=nc(this._pairs),i=e.next();if(i.done)return null;for(var n=i.value[1],o=t(i.value[1],i.value[0]);!(i=e.next()).done;){var r=uo(i.value,2),s=r[0],a=r[1],h=t(a,s);h>o&&(o=h,n=a)}return n}},{key:\"min\",value:function(t){var e=nc(this._pairs),i=e.next();if(i.done)return null;for(var n=i.value[1],o=t(i.value[1],i.value[0]);!(i=e.next()).done;){var r=uo(i.value,2),s=r[0],a=r[1],h=t(a,s);h<o&&(o=h,n=a)}return n}},{key:\"reduce\",value:function(t,e){var i,n=Yc(this._pairs);try{for(n.s();!(i=n.n()).done;){var o=uo(i.value,2),r=o[0];e=t(e,o[1],r)}}catch(t){n.e(t)}finally{n.f()}return e}},{key:\"sort\",value:function(t){var i=this;return new e(jn({},ic,(function(){var e;return nc(xc(e=wo(i._pairs)).call(e,(function(e,i){var n=uo(e,2),o=n[0],r=n[1],s=uo(i,2),a=s[0],h=s[1];return t(r,h,o,a)})))})))}}]),e}(ic);var tu=function(t){Ad(i,t);var e=Uc(i);function i(t,n){var o;return Nn(this,i),(o=e.call(this))._queue=null,t&&!So(t)&&(n=t,t=[]),o._options=n||{},o._data=new vd,o.length=0,o._idProp=o._options.fieldId||\"id\",t&&t.length&&o.add(t),o.setOptions(n),o}return Fn(i,[{key:\"idProp\",get:function(){return this._idProp}},{key:\"setOptions\",value:function(t){t&&void 0!==t.queue&&(!1===t.queue?this._queue&&(this._queue.destroy(),this._queue=null):(this._queue||(this._queue=Zc.extend(this,{replace:[\"add\",\"update\",\"remove\"]})),t.queue&&\"object\"===go(t.queue)&&this._queue.setOptions(t.queue)))}},{key:\"add\",value:function(t,e){var i,n=this,o=[];if(So(t)){var r=Io(t).call(t,(function(t){return t[n._idProp]}));if(Od(r).call(r,(function(t){return n._data.has(t)})))throw new Error(\"A duplicate id was found in the parameter array.\");for(var s=0,a=t.length;s<a;s++)i=this._addItem(t[s]),o.push(i)}else{if(!t||\"object\"!==go(t))throw new Error(\"Unknown dataType\");i=this._addItem(t),o.push(i)}return o.length&&this._trigger(\"add\",{items:o},e),o}},{key:\"update\",value:function(t,e){var i=this,n=[],o=[],r=[],s=[],a=this._idProp,h=function(t){var e=t[a];if(null!=e&&i._data.has(e)){var h=t,l=At({},i._data.get(e)),d=i._updateItem(h);o.push(d),s.push(h),r.push(l)}else{var c=i._addItem(t);n.push(c)}};if(So(t))for(var l=0,d=t.length;l<d;l++)t[l]&&\"object\"===go(t[l])?h(t[l]):console.warn(\"Ignoring input item, which is not an object at index \"+l);else{if(!t||\"object\"!==go(t))throw new Error(\"Unknown dataType\");h(t)}if(n.length&&this._trigger(\"add\",{items:n},e),o.length){var c={items:o,oldData:r,data:s};this._trigger(\"update\",c,e)}return Eo(n).call(n,o)}},{key:\"updateOnly\",value:function(t,e){var i,n=this;So(t)||(t=[t]);var o=Io(i=Io(t).call(t,(function(t){var e=n._data.get(t[n._idProp]);if(null==e)throw new Error(\"Updating non-existent items is not allowed.\");return{oldData:e,update:t}}))).call(i,(function(t){var e=t.oldData,i=t.update,o=e[n._idProp],r=ih(e,i);return n._data.set(o,r),{id:o,oldData:e,updatedData:r}}));if(o.length){var r={items:Io(o).call(o,(function(t){return t.id})),oldData:Io(o).call(o,(function(t){return t.oldData})),data:Io(o).call(o,(function(t){return t.updatedData}))};return this._trigger(\"update\",r,e),r.items}return[]}},{key:\"get\",value:function(t,e){var i=void 0,n=void 0,o=void 0;$c(t)?(i=t,o=e):So(t)?(n=t,o=e):o=t;var r,s=o&&\"Object\"===o.returnType?\"Object\":\"Array\",a=o&&mr(o),h=[],l=void 0,d=void 0,c=void 0;if(null!=i)(l=this._data.get(i))&&a&&!a(l)&&(l=void 0);else if(null!=n)for(var u=0,f=n.length;u<f;u++)null==(l=this._data.get(n[u]))||a&&!a(l)||h.push(l);else for(var p,v=0,g=(d=wo(Sc(p=this._data).call(p))).length;v<g;v++)c=d[v],null==(l=this._data.get(c))||a&&!a(l)||h.push(l);if(o&&o.order&&null==i&&this._sort(h,o.order),o&&o.fields){var y=o.fields;if(null!=i&&null!=l)l=this._filterFields(l,y);else for(var m=0,b=h.length;m<b;m++)h[m]=this._filterFields(h[m],y)}if(\"Object\"==s){for(var w={},k=0,_=h.length;k<_;k++){var x=h[k];w[x[this._idProp]]=x}return w}return null!=i?null!==(r=l)&&void 0!==r?r:null:h}},{key:\"getIds\",value:function(t){var e=this._data,i=t&&mr(t),n=t&&t.order,o=wo(Sc(e).call(e)),r=[];if(i)if(n){for(var s=[],a=0,h=o.length;a<h;a++){var l=o[a],d=this._data.get(l);null!=d&&i(d)&&s.push(d)}this._sort(s,n);for(var c=0,u=s.length;c<u;c++)r.push(s[c][this._idProp])}else for(var f=0,p=o.length;f<p;f++){var v=o[f],g=this._data.get(v);null!=g&&i(g)&&r.push(g[this._idProp])}else if(n){for(var y=[],m=0,b=o.length;m<b;m++){var w=o[m];y.push(e.get(w))}this._sort(y,n);for(var k=0,_=y.length;k<_;k++)r.push(y[k][this._idProp])}else for(var x=0,E=o.length;x<E;x++){var O=o[x],C=e.get(O);null!=C&&r.push(C[this._idProp])}return r}},{key:\"getDataSet\",value:function(){return this}},{key:\"forEach\",value:function(t,e){var i=e&&mr(e),n=this._data,o=wo(Sc(n).call(n));if(e&&e.order)for(var r=this.get(e),s=0,a=r.length;s<a;s++){var h=r[s];t(h,h[this._idProp])}else for(var l=0,d=o.length;l<d;l++){var c=o[l],u=this._data.get(c);null==u||i&&!i(u)||t(u,c)}}},{key:\"map\",value:function(t,e){for(var i=e&&mr(e),n=[],o=this._data,r=wo(Sc(o).call(o)),s=0,a=r.length;s<a;s++){var h=r[s],l=this._data.get(h);null==l||i&&!i(l)||n.push(t(l,h))}return e&&e.order&&this._sort(n,e.order),n}},{key:\"_filterFields\",value:function(t,e){var i;return t?Kd(i=So(e)?e:zo(e)).call(i,(function(e,i){return e[i]=t[i],e}),{}):t}},{key:\"_sort\",value:function(t,e){if(\"string\"==typeof e){var i=e;xc(t).call(t,(function(t,e){var n=t[i],o=e[i];return n>o?1:n<o?-1:0}))}else{if(\"function\"!=typeof e)throw new TypeError(\"Order must be a function or a string\");xc(t).call(t,e)}}},{key:\"remove\",value:function(t,e){for(var i=[],n=[],o=So(t)?t:[t],r=0,s=o.length;r<s;r++){var a=this._remove(o[r]);if(a){var h=a[this._idProp];null!=h&&(i.push(h),n.push(a))}}return i.length&&this._trigger(\"remove\",{items:i,oldData:n},e),i}},{key:\"_remove\",value:function(t){var e;if($c(t)?e=t:t&&\"object\"===go(t)&&(e=t[this._idProp]),null!=e&&this._data.has(e)){var i=this._data.get(e)||null;return this._data.delete(e),--this.length,i}return null}},{key:\"clear\",value:function(t){for(var e,i=wo(Sc(e=this._data).call(e)),n=[],o=0,r=i.length;o<r;o++)n.push(this._data.get(i[o]));return this._data.clear(),this.length=0,this._trigger(\"remove\",{items:i,oldData:n},t),i}},{key:\"max\",value:function(t){var e,i,n=null,o=null,r=Yc(Dc(e=this._data).call(e));try{for(r.s();!(i=r.n()).done;){var s=i.value,a=s[t];\"number\"==typeof a&&(null==o||a>o)&&(n=s,o=a)}}catch(t){r.e(t)}finally{r.f()}return n||null}},{key:\"min\",value:function(t){var e,i,n=null,o=null,r=Yc(Dc(e=this._data).call(e));try{for(r.s();!(i=r.n()).done;){var s=i.value,a=s[t];\"number\"==typeof a&&(null==o||a<o)&&(n=s,o=a)}}catch(t){r.e(t)}finally{r.f()}return n||null}},{key:\"distinct\",value:function(t){for(var e=this._data,i=wo(Sc(e).call(e)),n=[],o=0,r=0,s=i.length;r<s;r++){for(var a=i[r],h=e.get(a)[t],l=!1,d=0;d<o;d++)if(n[d]==h){l=!0;break}l||void 0===h||(n[o]=h,o++)}return n}},{key:\"_addItem\",value:function(t){var e=function(t,e){return null==t[e]&&(t[e]=Wc()),t}(t,this._idProp),i=e[this._idProp];if(this._data.has(i))throw new Error(\"Cannot add item: item with id \"+i+\" already exists\");return this._data.set(i,e),++this.length,i}},{key:\"_updateItem\",value:function(t){var e=t[this._idProp];if(null==e)throw new Error(\"Cannot update item: item has no id (item: \"+es(t)+\")\");var i=this._data.get(e);if(!i)throw new Error(\"Cannot update item: no item with id \"+e+\" found\");return this._data.set(e,Vc(Vc({},i),t)),e}},{key:\"stream\",value:function(t){if(t){var e=this._data;return new Jc(jn({},ic,Hd.mark((function i(){var n,o,r,s;return Hd.wrap((function(i){for(;;)switch(i.prev=i.next){case 0:n=Yc(t),i.prev=1,n.s();case 3:if((o=n.n()).done){i.next=11;break}if(r=o.value,null==(s=e.get(r))){i.next=9;break}return i.next=9,[r,s];case 9:i.next=3;break;case 11:i.next=16;break;case 13:i.prev=13,i.t0=i.catch(1),n.e(i.t0);case 16:return i.prev=16,n.f(),i.finish(16);case 19:case\"end\":return i.stop()}}),i,null,[[1,13,16,19]])}))))}var i;return new Jc(jn({},ic,Vt(i=Nc(this._data)).call(i,this._data)))}}]),i}(Qc),eu=function(t){Ad(i,t);var e=Uc(i);function i(t,n){var o,r;return Nn(this,i),(r=e.call(this)).length=0,r._ids=new ec,r._options=n||{},r._listener=Vt(o=r._onEvent).call(o,Id(r)),r.setData(t),r}return Fn(i,[{key:\"idProp\",get:function(){return this.getDataSet().idProp}},{key:\"setData\",value:function(t){if(this._data){this._data.off&&this._data.off(\"*\",this._listener);var e=this._data.getIds({filter:mr(this._options)}),i=this._data.get(e);this._ids.clear(),this.length=0,this._trigger(\"remove\",{items:e,oldData:i})}if(null!=t){this._data=t;for(var n=this._data.getIds({filter:mr(this._options)}),o=0,r=n.length;o<r;o++){var s=n[o];this._ids.add(s)}this.length=n.length,this._trigger(\"add\",{items:n})}else this._data=new tu;this._data.on&&this._data.on(\"*\",this._listener)}},{key:\"refresh\",value:function(){for(var t=this._data.getIds({filter:mr(this._options)}),e=wo(this._ids),i={},n=[],o=[],r=[],s=0,a=t.length;s<a;s++){var h=t[s];i[h]=!0,this._ids.has(h)||(n.push(h),this._ids.add(h))}for(var l=0,d=e.length;l<d;l++){var c=e[l],u=this._data.get(c);null==u?console.error(\"If you see this, report it please.\"):i[c]||(o.push(c),r.push(u),this._ids.delete(c))}this.length+=n.length-o.length,n.length&&this._trigger(\"add\",{items:n}),o.length&&this._trigger(\"remove\",{items:o,oldData:r})}},{key:\"get\",value:function(t,e){if(null==this._data)return null;var i,n=null;$c(t)||So(t)?(n=t,i=e):i=t;var o=At({},this._options,i),r=mr(this._options),s=i&&mr(i);return r&&s&&(o.filter=function(t){return r(t)&&s(t)}),null==n?this._data.get(o):this._data.get(n,o)}},{key:\"getIds\",value:function(t){if(this._data.length){var e,i=mr(this._options),n=null!=t?mr(t):null;return e=n?i?function(t){return i(t)&&n(t)}:n:i,this._data.getIds({filter:e,order:t&&t.order})}return[]}},{key:\"forEach\",value:function(t,e){if(this._data){var i,n,o=mr(this._options),r=e&&mr(e);n=r?o?function(t){return o(t)&&r(t)}:r:o,Wo(i=this._data).call(i,t,{filter:n,order:e&&e.order})}}},{key:\"map\",value:function(t,e){if(this._data){var i,n,o=mr(this._options),r=e&&mr(e);return n=r?o?function(t){return o(t)&&r(t)}:r:o,Io(i=this._data).call(i,t,{filter:n,order:e&&e.order})}return[]}},{key:\"getDataSet\",value:function(){return this._data.getDataSet()}},{key:\"stream\",value:function(t){var e;return this._data.stream(t||jn({},ic,Vt(e=Sc(this._ids)).call(e,this._ids)))}},{key:\"dispose\",value:function(){var t;null!==(t=this._data)&&void 0!==t&&t.off&&this._data.off(\"*\",this._listener);var e,n=\"This data view has already been disposed of.\",o={get:function(){throw new Error(n)},set:function(){throw new Error(n)},configurable:!1},r=Yc(Co(i.prototype));try{for(r.s();!(e=r.n()).done;){var s=e.value;zn(this,s,o)}}catch(t){r.e(t)}finally{r.f()}}},{key:\"_onEvent\",value:function(t,e,i){if(e&&e.items&&this._data){var n=e.items,o=[],r=[],s=[],a=[],h=[],l=[];switch(t){case\"add\":for(var d=0,c=n.length;d<c;d++){var u=n[d];this.get(u)&&(this._ids.add(u),o.push(u))}break;case\"update\":for(var f=0,p=n.length;f<p;f++){var v=n[f];this.get(v)?this._ids.has(v)?(r.push(v),h.push(e.data[f]),a.push(e.oldData[f])):(this._ids.add(v),o.push(v)):this._ids.has(v)&&(this._ids.delete(v),s.push(v),l.push(e.oldData[f]))}break;case\"remove\":for(var g=0,y=n.length;g<y;g++){var m=n[g];this._ids.has(m)&&(this._ids.delete(m),s.push(m),l.push(e.oldData[g]))}}this.length+=o.length-s.length,o.length&&this._trigger(\"add\",{items:o},i),r.length&&this._trigger(\"update\",{items:r,oldData:a,data:h},i),s.length&&this._trigger(\"remove\",{items:s,oldData:l},i)}}}]),i}(Qc);function iu(t,e){return\"object\"===go(e)&&null!==e&&t===e.idProp&&\"function\"==typeof e.add&&\"function\"==typeof e.clear&&\"function\"==typeof e.distinct&&\"function\"==typeof Wo(e)&&\"function\"==typeof e.get&&\"function\"==typeof e.getDataSet&&\"function\"==typeof e.getIds&&\"number\"==typeof e.length&&\"function\"==typeof Io(e)&&\"function\"==typeof e.max&&\"function\"==typeof e.min&&\"function\"==typeof e.off&&\"function\"==typeof e.on&&\"function\"==typeof e.remove&&\"function\"==typeof e.setOptions&&\"function\"==typeof e.stream&&\"function\"==typeof e.update&&\"function\"==typeof e.updateOnly}function nu(t,e){return\"object\"===go(e)&&null!==e&&t===e.idProp&&\"function\"==typeof Wo(e)&&\"function\"==typeof e.get&&\"function\"==typeof e.getDataSet&&\"function\"==typeof e.getIds&&\"number\"==typeof e.length&&\"function\"==typeof Io(e)&&\"function\"==typeof e.off&&\"function\"==typeof e.on&&\"function\"==typeof e.stream&&iu(t,e.getDataSet())}var ou=Object.freeze({__proto__:null,DELETE:eh,DataSet:tu,DataStream:Jc,DataView:eu,Queue:Zc,createNewDataPipeFrom:function(t){return new Kc(t)},isDataSetLike:iu,isDataViewLike:nu}),ru=Tr.trim,su=a.parseFloat,au=1/su(xr+\"-0\")!=-1/0?function(t){var e=ru(Qt(t)),i=su(e);return 0===i&&\"-\"==e.charAt(0)?-0:i}:su;gt({global:!0,forced:parseFloat!=au},{parseFloat:au});var hu=k.parseFloat,lu=Li.f,du=h((function(){return!Object.getOwnPropertyNames(1)}));gt({target:\"Object\",stat:!0,forced:du},{getOwnPropertyNames:lu});var cu=k.Object,uu=function(t){return cu.getOwnPropertyNames(t)};function fu(t,e){var i=[\"node\",\"edge\",\"label\"],n=!0,o=Qh(e,\"chosen\");if(\"boolean\"==typeof o)n=o;else if(\"object\"===go(o)){if(-1===Hr(i).call(i,t))throw new Error(\"choosify: subOption '\"+t+\"' should be one of '\"+i.join(\"', '\")+\"'\");var r=Qh(e,[\"chosen\",t]);\"boolean\"!=typeof r&&\"function\"!=typeof r||(n=r)}return n}function pu(t,e,i){if(t.width<=0||t.height<=0)return!1;if(void 0!==i){var n={x:e.x-i.x,y:e.y-i.y};if(0!==i.angle){var o=-i.angle;e={x:Math.cos(o)*n.x-Math.sin(o)*n.y,y:Math.sin(o)*n.x+Math.cos(o)*n.y}}else e=n}var r=t.x+t.width,s=t.y+t.width;return t.left<e.x&&r>e.x&&t.top<e.y&&s>e.y}function vu(t){return\"string\"==typeof t&&\"\"!==t}function gu(t,e,i,n){var o=n.x,r=n.y;if(\"function\"==typeof n.distanceToBorder){var s=n.distanceToBorder(t,e),a=Math.sin(e)*s,h=Math.cos(e)*s;h===s?(o+=s,r=n.y):a===s?(o=n.x,r-=s):(o+=h,r-=a)}else n.shape.width>n.shape.height?(o=n.x+.5*n.shape.width,r=n.y-i):(o=n.x+i,r=n.y-.5*n.shape.height);return{x:o,y:r}}var yu=function(){function t(e){Nn(this,t),this.measureText=e,this.current=0,this.width=0,this.height=0,this.lines=[]}return Fn(t,[{key:\"_add\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:\"normal\";void 0===this.lines[t]&&(this.lines[t]={width:0,height:0,blocks:[]});var n=e;void 0!==e&&\"\"!==e||(n=\" \");var o=this.measureText(n,i),r=At({},Dc(o));r.text=e,r.width=o.width,r.mod=i,void 0!==e&&\"\"!==e||(r.width=0),this.lines[t].blocks.push(r),this.lines[t].width+=r.width}},{key:\"curWidth\",value:function(){var t=this.lines[this.current];return void 0===t?0:t.width}},{key:\"append\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"normal\";this._add(this.current,t,e)}},{key:\"newLine\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"normal\";this._add(this.current,t,e),this.current++}},{key:\"determineLineHeights\",value:function(){for(var t=0;t<this.lines.length;t++){var e=this.lines[t],i=0;if(void 0!==e.blocks)for(var n=0;n<e.blocks.length;n++){var o=e.blocks[n];i<o.height&&(i=o.height)}e.height=i}}},{key:\"determineLabelSize\",value:function(){for(var t=0,e=0,i=0;i<this.lines.length;i++){var n=this.lines[i];n.width>t&&(t=n.width),e+=n.height}this.width=t,this.height=e}},{key:\"removeEmptyBlocks\",value:function(){for(var t=[],e=0;e<this.lines.length;e++){var i=this.lines[e];if(0!==i.blocks.length&&(e!==this.lines.length-1||0!==i.width)){var n={};At(n,i),n.blocks=[];for(var o=void 0,r=[],s=0;s<i.blocks.length;s++){var a=i.blocks[s];0!==a.width?r.push(a):void 0===o&&(o=a)}0===r.length&&void 0!==o&&r.push(o),n.blocks=r,t.push(n)}}return t}},{key:\"finalize\",value:function(){this.determineLineHeights(),this.determineLabelSize();var t=this.removeEmptyBlocks();return{width:this.width,height:this.height,lines:t}}}]),t}(),mu={\"<b>\":/<b>/,\"<i>\":/<i>/,\"<code>\":/<code>/,\"</b>\":/<\\/b>/,\"</i>\":/<\\/i>/,\"</code>\":/<\\/code>/,\"*\":/\\*/,_:/_/,\"`\":/`/,afterBold:/[^*]/,afterItal:/[^_]/,afterMono:/[^`]/},bu=function(){function t(e){Nn(this,t),this.text=e,this.bold=!1,this.ital=!1,this.mono=!1,this.spacing=!1,this.position=0,this.buffer=\"\",this.modStack=[],this.blocks=[]}return Fn(t,[{key:\"mod\",value:function(){return 0===this.modStack.length?\"normal\":this.modStack[0]}},{key:\"modName\",value:function(){return 0===this.modStack.length?\"normal\":\"mono\"===this.modStack[0]?\"mono\":this.bold&&this.ital?\"boldital\":this.bold?\"bold\":this.ital?\"ital\":void 0}},{key:\"emitBlock\",value:function(){this.spacing&&(this.add(\" \"),this.spacing=!1),this.buffer.length>0&&(this.blocks.push({text:this.buffer,mod:this.modName()}),this.buffer=\"\")}},{key:\"add\",value:function(t){\" \"===t&&(this.spacing=!0),this.spacing&&(this.buffer+=\" \",this.spacing=!1),\" \"!=t&&(this.buffer+=t)}},{key:\"parseWS\",value:function(t){return!!/[ \\t]/.test(t)&&(this.mono?this.add(t):this.spacing=!0,!0)}},{key:\"setTag\",value:function(t){this.emitBlock(),this[t]=!0,this.modStack.unshift(t)}},{key:\"unsetTag\",value:function(t){this.emitBlock(),this[t]=!1,this.modStack.shift()}},{key:\"parseStartTag\",value:function(t,e){return!(this.mono||this[t]||!this.match(e))&&(this.setTag(t),!0)}},{key:\"match\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this.prepareRegExp(t),n=uo(i,2),o=n[0],r=n[1],s=o.test(this.text.substr(this.position,r));return s&&e&&(this.position+=r-1),s}},{key:\"parseEndTag\",value:function(t,e,i){var n=this.mod()===t;return!(!(n=\"mono\"===t?n&&this.mono:n&&!this.mono)||!this.match(e))&&(void 0!==i?(this.position===this.text.length-1||this.match(i,!1))&&this.unsetTag(t):this.unsetTag(t),!0)}},{key:\"replace\",value:function(t,e){return!!this.match(t)&&(this.add(e),this.position+=length-1,!0)}},{key:\"prepareRegExp\",value:function(t){var e,i;if(t instanceof RegExp)i=t,e=1;else{var n=mu[t];i=void 0!==n?n:new RegExp(t),e=t.length}return[i,e]}}]),t}(),wu=function(){function t(e,i,n,o){var r=this;Nn(this,t),this.ctx=e,this.parent=i,this.selected=n,this.hover=o;this.lines=new yu((function(t,i){if(void 0===t)return 0;var s=r.parent.getFormattingValues(e,n,o,i),a=0;\"\"!==t&&(a=r.ctx.measureText(t).width);return{width:a,values:s}}))}return Fn(t,[{key:\"process\",value:function(t){if(!vu(t))return this.lines.finalize();var e=this.parent.fontOptions;t=(t=t.replace(/\\r\\n/g,\"\\n\")).replace(/\\r/g,\"\\n\");var i=String(t).split(\"\\n\"),n=i.length;if(e.multi)for(var o=0;o<n;o++){var r=this.splitBlocks(i[o],e.multi);if(void 0!==r)if(0!==r.length){if(e.maxWdt>0)for(var s=0;s<r.length;s++){var a=r[s].mod,h=r[s].text;this.splitStringIntoLines(h,a,!0)}else for(var l=0;l<r.length;l++){var d=r[l].mod,c=r[l].text;this.lines.append(c,d)}this.lines.newLine()}else this.lines.newLine(\"\")}else if(e.maxWdt>0)for(var u=0;u<n;u++)this.splitStringIntoLines(i[u]);else for(var f=0;f<n;f++)this.lines.newLine(i[f]);return this.lines.finalize()}},{key:\"decodeMarkupSystem\",value:function(t){var e=\"none\";return\"markdown\"===t||\"md\"===t?e=\"markdown\":!0!==t&&\"html\"!==t||(e=\"html\"),e}},{key:\"splitHtmlBlocks\",value:function(t){for(var e=new bu(t),i=function(t){return!!/&/.test(t)&&(e.replace(e.text,\"&lt;\",\"<\")||e.replace(e.text,\"&amp;\",\"&\")||e.add(\"&\"),!0)};e.position<e.text.length;){var n=e.text.charAt(e.position);e.parseWS(n)||/</.test(n)&&(e.parseStartTag(\"bold\",\"<b>\")||e.parseStartTag(\"ital\",\"<i>\")||e.parseStartTag(\"mono\",\"<code>\")||e.parseEndTag(\"bold\",\"</b>\")||e.parseEndTag(\"ital\",\"</i>\")||e.parseEndTag(\"mono\",\"</code>\"))||i(n)||e.add(n),e.position++}return e.emitBlock(),e.blocks}},{key:\"splitMarkdownBlocks\",value:function(t){for(var e=this,i=new bu(t),n=!0,o=function(t){return!!/\\\\/.test(t)&&(i.position<e.text.length+1&&(i.position++,t=e.text.charAt(i.position),/ \\t/.test(t)?i.spacing=!0:(i.add(t),n=!1)),!0)};i.position<i.text.length;){var r=i.text.charAt(i.position);i.parseWS(r)||o(r)||(n||i.spacing)&&(i.parseStartTag(\"bold\",\"*\")||i.parseStartTag(\"ital\",\"_\")||i.parseStartTag(\"mono\",\"`\"))||i.parseEndTag(\"bold\",\"*\",\"afterBold\")||i.parseEndTag(\"ital\",\"_\",\"afterItal\")||i.parseEndTag(\"mono\",\"`\",\"afterMono\")||(i.add(r),n=!1),i.position++}return i.emitBlock(),i.blocks}},{key:\"splitBlocks\",value:function(t,e){var i=this.decodeMarkupSystem(e);return\"none\"===i?[{text:t,mod:\"normal\"}]:\"markdown\"===i?this.splitMarkdownBlocks(t):\"html\"===i?this.splitHtmlBlocks(t):void 0}},{key:\"overMaxWidth\",value:function(t){var e=this.ctx.measureText(t).width;return this.lines.curWidth()+e>this.parent.fontOptions.maxWdt}},{key:\"getLongestFit\",value:function(t){for(var e=\"\",i=0;i<t.length;){var n=e+(\"\"===e?\"\":\" \")+t[i];if(this.overMaxWidth(n))break;e=n,i++}return i}},{key:\"getLongestFitWord\",value:function(t){for(var e=0;e<t.length&&!this.overMaxWidth(Oo(t).call(t,0,e));)e++;return e}},{key:\"splitStringIntoLines\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"normal\",i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];this.parent.getFormattingValues(this.ctx,this.selected,this.hover,e);for(var n=(t=(t=t.replace(/^( +)/g,\"$1\\r\")).replace(/([^\\r][^ ]*)( +)/g,\"$1\\r$2\\r\")).split(\"\\r\");n.length>0;){var o=this.getLongestFit(n);if(0===o){var r=n[0],s=this.getLongestFitWord(r);this.lines.newLine(Oo(r).call(r,0,s),e),n[0]=Oo(r).call(r,s)}else{var a=o;\" \"===n[o-1]?o--:\" \"===n[a]&&a++;var h=Oo(n).call(n,0,o).join(\"\");o==n.length&&i?this.lines.append(h,e):this.lines.newLine(h,e),n=Oo(n).call(n,a)}}}}]),t}(),ku=[\"bold\",\"ital\",\"boldital\",\"mono\"],_u=function(){function t(e,i){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];Nn(this,t),this.body=e,this.pointToSelf=!1,this.baseSize=void 0,this.fontOptions={},this.setOptions(i),this.size={top:0,left:0,width:0,height:0,yLine:0},this.isEdgeLabel=n}return Fn(t,[{key:\"setOptions\",value:function(t){if(this.elementOptions=t,this.initFontOptions(t.font),vu(t.label)?this.labelDirty=!0:t.label=void 0,void 0!==t.font&&null!==t.font)if(\"string\"==typeof t.font)this.baseSize=this.fontOptions.size;else if(\"object\"===go(t.font)){var e=t.font.size;void 0!==e&&(this.baseSize=e)}}},{key:\"initFontOptions\",value:function(e){var i=this;Dh(ku,(function(t){i.fontOptions[t]={}})),t.parseFontString(this.fontOptions,e)?this.fontOptions.vadjust=0:Dh(e,(function(t,e){null!=t&&\"object\"!==go(t)&&(i.fontOptions[e]=t)}))}},{key:\"constrain\",value:function(t){var e={constrainWidth:!1,maxWdt:-1,minWdt:-1,constrainHeight:!1,minHgt:-1,valign:\"middle\"},i=Qh(t,\"widthConstraint\");if(\"number\"==typeof i)e.maxWdt=Number(i),e.minWdt=Number(i);else if(\"object\"===go(i)){var n=Qh(t,[\"widthConstraint\",\"maximum\"]);\"number\"==typeof n&&(e.maxWdt=Number(n));var o=Qh(t,[\"widthConstraint\",\"minimum\"]);\"number\"==typeof o&&(e.minWdt=Number(o))}var r=Qh(t,\"heightConstraint\");if(\"number\"==typeof r)e.minHgt=Number(r);else if(\"object\"===go(r)){var s=Qh(t,[\"heightConstraint\",\"minimum\"]);\"number\"==typeof s&&(e.minHgt=Number(s));var a=Qh(t,[\"heightConstraint\",\"valign\"]);\"string\"==typeof a&&(\"top\"!==a&&\"bottom\"!==a||(e.valign=a))}return e}},{key:\"update\",value:function(t,e){this.setOptions(t,!0),this.propagateFonts(e),Ch(this.fontOptions,this.constrain(e)),this.fontOptions.chooser=fu(\"label\",e)}},{key:\"adjustSizes\",value:function(t){var e=t?t.right+t.left:0;this.fontOptions.constrainWidth&&(this.fontOptions.maxWdt-=e,this.fontOptions.minWdt-=e);var i=t?t.top+t.bottom:0;this.fontOptions.constrainHeight&&(this.fontOptions.minHgt-=i)}},{key:\"addFontOptionsToPile\",value:function(t,e){for(var i=0;i<e.length;++i)this.addFontToPile(t,e[i])}},{key:\"addFontToPile\",value:function(t,e){if(void 0!==e&&void 0!==e.font&&null!==e.font){var i=e.font;t.push(i)}}},{key:\"getBasicOptions\",value:function(e){for(var i={},n=0;n<e.length;++n){var o=e[n],r={};t.parseFontString(r,o)&&(o=r),Dh(o,(function(t,e){void 0!==t&&(Object.prototype.hasOwnProperty.call(i,e)||(-1!==Hr(ku).call(ku,e)?i[e]={}:i[e]=t))}))}return i}},{key:\"getFontOption\",value:function(e,i,n){for(var o,r=0;r<e.length;++r){var s=e[r];if(Object.prototype.hasOwnProperty.call(s,i)){if(null==(o=s[i]))continue;var a={};if(t.parseFontString(a,o)&&(o=a),Object.prototype.hasOwnProperty.call(o,n))return o[n]}}if(Object.prototype.hasOwnProperty.call(this.fontOptions,n))return this.fontOptions[n];throw new Error(\"Did not find value for multi-font for property: '\"+n+\"'\")}},{key:\"getFontOptions\",value:function(t,e){for(var i={},n=[\"color\",\"size\",\"face\",\"mod\",\"vadjust\"],o=0;o<n.length;++o){var r=n[o];i[r]=this.getFontOption(t,e,r)}return i}},{key:\"propagateFonts\",value:function(t){var e=this,i=[];this.addFontOptionsToPile(i,t),this.fontOptions=this.getBasicOptions(i);for(var n=function(t){var n=ku[t],o=e.fontOptions[n];Dh(e.getFontOptions(i,n),(function(t,e){o[e]=t})),o.size=Number(o.size),o.vadjust=Number(o.vadjust)},o=0;o<ku.length;++o)n(o)}},{key:\"draw\",value:function(t,e,i,n,o){var r=arguments.length>5&&void 0!==arguments[5]?arguments[5]:\"middle\";if(void 0!==this.elementOptions.label){var s=this.fontOptions.size*this.body.view.scale;this.elementOptions.label&&s<this.elementOptions.scaling.label.drawThreshold-1||(s>=this.elementOptions.scaling.label.maxVisible&&(s=Number(this.elementOptions.scaling.label.maxVisible)/this.body.view.scale),this.calculateLabelSize(t,n,o,e,i,r),this._drawBackground(t),this._drawText(t,e,this.size.yLine,r,s))}}},{key:\"_drawBackground\",value:function(t){if(void 0!==this.fontOptions.background&&\"none\"!==this.fontOptions.background){t.fillStyle=this.fontOptions.background;var e=this.getSize();t.fillRect(e.left,e.top,e.width,e.height)}}},{key:\"_drawText\",value:function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:\"middle\",o=arguments.length>4?arguments[4]:void 0,r=this._setAlignment(t,e,i,n),s=uo(r,2);e=s[0],i=s[1],t.textAlign=\"left\",e-=this.size.width/2,this.fontOptions.valign&&this.size.height>this.size.labelHeight&&(\"top\"===this.fontOptions.valign&&(i-=(this.size.height-this.size.labelHeight)/2),\"bottom\"===this.fontOptions.valign&&(i+=(this.size.height-this.size.labelHeight)/2));for(var a=0;a<this.lineCount;a++){var h=this.lines[a];if(h&&h.blocks){var l=0;this.isEdgeLabel||\"center\"===this.fontOptions.align?l+=(this.size.width-h.width)/2:\"right\"===this.fontOptions.align&&(l+=this.size.width-h.width);for(var d=0;d<h.blocks.length;d++){var c=h.blocks[d];t.font=c.font;var u=this._getColor(c.color,o,c.strokeColor),f=uo(u,2),p=f[0],v=f[1];c.strokeWidth>0&&(t.lineWidth=c.strokeWidth,t.strokeStyle=v,t.lineJoin=\"round\"),t.fillStyle=p,c.strokeWidth>0&&t.strokeText(c.text,e+l,i+c.vadjust),t.fillText(c.text,e+l,i+c.vadjust),l+=c.width}i+=h.height}}}},{key:\"_setAlignment\",value:function(t,e,i,n){if(this.isEdgeLabel&&\"horizontal\"!==this.fontOptions.align&&!1===this.pointToSelf){e=0,i=0;\"top\"===this.fontOptions.align?(t.textBaseline=\"alphabetic\",i-=4):\"bottom\"===this.fontOptions.align?(t.textBaseline=\"hanging\",i+=4):t.textBaseline=\"middle\"}else t.textBaseline=n;return[e,i]}},{key:\"_getColor\",value:function(t,e,i){var n=t||\"#000000\",o=i||\"#ffffff\";if(e<=this.elementOptions.scaling.label.drawThreshold){var r=Math.max(0,Math.min(1,1-(this.elementOptions.scaling.label.drawThreshold-e)));n=Fh(n,r),o=Fh(o,r)}return[n,o]}},{key:\"getTextSize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return this._processLabel(t,e,i),{width:this.size.width,height:this.size.height,lineCount:this.lineCount}}},{key:\"getSize\",value:function(){var t=this.size.left,e=this.size.top-1;if(this.isEdgeLabel){var i=.5*-this.size.width;switch(this.fontOptions.align){case\"middle\":t=i,e=.5*-this.size.height;break;case\"top\":t=i,e=-(this.size.height+2);break;case\"bottom\":t=i,e=2}}return{left:t,top:e,width:this.size.width,height:this.size.height}}},{key:\"calculateLabelSize\",value:function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,r=arguments.length>5&&void 0!==arguments[5]?arguments[5]:\"middle\";this._processLabel(t,e,i),this.size.left=n-.5*this.size.width,this.size.top=o-.5*this.size.height,this.size.yLine=o+.5*(1-this.lineCount)*this.fontOptions.size,\"hanging\"===r&&(this.size.top+=.5*this.fontOptions.size,this.size.top+=4,this.size.yLine+=4)}},{key:\"getFormattingValues\",value:function(t,e,i,n){var o=function(t,e,i){return\"normal\"===e?\"mod\"===i?\"\":t[i]:void 0!==t[e][i]?t[e][i]:t[i]},r={color:o(this.fontOptions,n,\"color\"),size:o(this.fontOptions,n,\"size\"),face:o(this.fontOptions,n,\"face\"),mod:o(this.fontOptions,n,\"mod\"),vadjust:o(this.fontOptions,n,\"vadjust\"),strokeWidth:this.fontOptions.strokeWidth,strokeColor:this.fontOptions.strokeColor};(e||i)&&(\"normal\"===n&&!0===this.fontOptions.chooser&&this.elementOptions.labelHighlightBold?r.mod=\"bold\":\"function\"==typeof this.fontOptions.chooser&&this.fontOptions.chooser(r,this.elementOptions.id,e,i));var s=\"\";return void 0!==r.mod&&\"\"!==r.mod&&(s+=r.mod+\" \"),s+=r.size+\"px \"+r.face,t.font=s.replace(/\"/g,\"\"),r.font=t.font,r.height=r.size,r}},{key:\"differentState\",value:function(t,e){return t!==this.selectedState||e!==this.hoverState}},{key:\"_processLabelText\",value:function(t,e,i,n){return new wu(t,this,e,i).process(n)}},{key:\"_processLabel\",value:function(t,e,i){if(!1!==this.labelDirty||this.differentState(e,i)){var n=this._processLabelText(t,e,i,this.elementOptions.label);this.fontOptions.minWdt>0&&n.width<this.fontOptions.minWdt&&(n.width=this.fontOptions.minWdt),this.size.labelHeight=n.height,this.fontOptions.minHgt>0&&n.height<this.fontOptions.minHgt&&(n.height=this.fontOptions.minHgt),this.lines=n.lines,this.lineCount=n.lines.length,this.size.width=n.width,this.size.height=n.height,this.selectedState=e,this.hoverState=i,this.labelDirty=!1}}},{key:\"visible\",value:function(){return 0!==this.size.width&&0!==this.size.height&&void 0!==this.elementOptions.label&&!(this.fontOptions.size*this.body.view.scale<this.elementOptions.scaling.label.drawThreshold-1)}}],[{key:\"parseFontString\",value:function(t,e){if(!e||\"string\"!=typeof e)return!1;var i=e.split(\" \");return t.size=+i[0].replace(\"px\",\"\"),t.face=i[1],t.color=i[2],!0}}]),t}(),xu=function(){function t(e,i,n){Nn(this,t),this.body=i,this.labelModule=n,this.setOptions(e),this.top=void 0,this.left=void 0,this.height=void 0,this.width=void 0,this.radius=void 0,this.margin=void 0,this.refreshNeeded=!0,this.boundingBox={top:0,left:0,right:0,bottom:0}}return Fn(t,[{key:\"setOptions\",value:function(t){this.options=t}},{key:\"_setMargins\",value:function(t){this.margin={},this.options.margin&&(\"object\"==go(this.options.margin)?(this.margin.top=this.options.margin.top,this.margin.right=this.options.margin.right,this.margin.bottom=this.options.margin.bottom,this.margin.left=this.options.margin.left):(this.margin.top=this.options.margin,this.margin.right=this.options.margin,this.margin.bottom=this.options.margin,this.margin.left=this.options.margin)),t.adjustSizes(this.margin)}},{key:\"_distanceToBorder\",value:function(t,e){var i=this.options.borderWidth;return t&&this.resize(t),Math.min(Math.abs(this.width/2/Math.cos(e)),Math.abs(this.height/2/Math.sin(e)))+i}},{key:\"enableShadow\",value:function(t,e){e.shadow&&(t.shadowColor=e.shadowColor,t.shadowBlur=e.shadowSize,t.shadowOffsetX=e.shadowX,t.shadowOffsetY=e.shadowY)}},{key:\"disableShadow\",value:function(t,e){e.shadow&&(t.shadowColor=\"rgba(0,0,0,0)\",t.shadowBlur=0,t.shadowOffsetX=0,t.shadowOffsetY=0)}},{key:\"enableBorderDashes\",value:function(t,e){if(!1!==e.borderDashes)if(void 0!==t.setLineDash){var i=e.borderDashes;!0===i&&(i=[5,15]),t.setLineDash(i)}else console.warn(\"setLineDash is not supported in this browser. The dashed borders cannot be used.\"),this.options.shapeProperties.borderDashes=!1,e.borderDashes=!1}},{key:\"disableBorderDashes\",value:function(t,e){!1!==e.borderDashes&&(void 0!==t.setLineDash?t.setLineDash([0]):(console.warn(\"setLineDash is not supported in this browser. The dashed borders cannot be used.\"),this.options.shapeProperties.borderDashes=!1,e.borderDashes=!1))}},{key:\"needsRefresh\",value:function(t,e){return!0===this.refreshNeeded?(this.refreshNeeded=!1,!0):void 0===this.width||this.labelModule.differentState(t,e)}},{key:\"initContextForDraw\",value:function(t,e){var i=e.borderWidth/this.body.view.scale;t.lineWidth=Math.min(this.width,i),t.strokeStyle=e.borderColor,t.fillStyle=e.color}},{key:\"performStroke\",value:function(t,e){var i=e.borderWidth/this.body.view.scale;t.save(),i>0&&(this.enableBorderDashes(t,e),t.stroke(),this.disableBorderDashes(t,e)),t.restore()}},{key:\"performFill\",value:function(t,e){t.save(),t.fillStyle=e.color,this.enableShadow(t,e),hs(t).call(t),this.disableShadow(t,e),t.restore(),this.performStroke(t,e)}},{key:\"_addBoundingBoxMargin\",value:function(t){this.boundingBox.left-=t,this.boundingBox.top-=t,this.boundingBox.bottom+=t,this.boundingBox.right+=t}},{key:\"_updateBoundingBox\",value:function(t,e,i,n,o){void 0!==i&&this.resize(i,n,o),this.left=t-this.width/2,this.top=e-this.height/2,this.boundingBox.left=this.left,this.boundingBox.top=this.top,this.boundingBox.bottom=this.top+this.height,this.boundingBox.right=this.left+this.width}},{key:\"updateBoundingBox\",value:function(t,e,i,n,o){this._updateBoundingBox(t,e,i,n,o)}},{key:\"getDimensionsFromLabel\",value:function(t,e,i){this.textSize=this.labelModule.getTextSize(t,e,i);var n=this.textSize.width,o=this.textSize.height;return 0===n&&(n=14,o=14),{width:n,height:o}}}]),t}();function Eu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Ou=function(t){Ad(i,t);var e=Eu(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o))._setMargins(o),r}return Fn(i,[{key:\"resize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(this.needsRefresh(e,i)){var n=this.getDimensionsFromLabel(t,e,i);this.width=n.width+this.margin.right+this.margin.left,this.height=n.height+this.margin.top+this.margin.bottom,this.radius=this.width/2}}},{key:\"draw\",value:function(t,e,i,n,o,r){this.resize(t,n,o),this.left=e-this.width/2,this.top=i-this.height/2,this.initContextForDraw(t,r),Yt(t,this.left,this.top,this.width,this.height,r.borderRadius),this.performFill(t,r),this.updateBoundingBox(e,i,t,n,o),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,n,o)}},{key:\"updateBoundingBox\",value:function(t,e,i,n,o){this._updateBoundingBox(t,e,i,n,o);var r=this.options.shapeProperties.borderRadius;this._addBoundingBoxMargin(r)}},{key:\"distanceToBorder\",value:function(t,e){t&&this.resize(t);var i=this.options.borderWidth;return Math.min(Math.abs(this.width/2/Math.cos(e)),Math.abs(this.height/2/Math.sin(e)))+i}}]),i}(xu);function Cu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Su=function(t){Ad(i,t);var e=Cu(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o)).labelOffset=0,r.selected=!1,r}return Fn(i,[{key:\"setOptions\",value:function(t,e,i){this.options=t,void 0===e&&void 0===i||this.setImages(e,i)}},{key:\"setImages\",value:function(t,e){e&&this.selected?(this.imageObj=e,this.imageObjAlt=t):(this.imageObj=t,this.imageObjAlt=e)}},{key:\"switchImages\",value:function(t){var e=t&&!this.selected||!t&&this.selected;if(this.selected=t,void 0!==this.imageObjAlt&&e){var i=this.imageObj;this.imageObj=this.imageObjAlt,this.imageObjAlt=i}}},{key:\"_getImagePadding\",value:function(){var t={top:0,right:0,bottom:0,left:0};if(this.options.imagePadding){var e=this.options.imagePadding;\"object\"==go(e)?(t.top=e.top,t.right=e.right,t.bottom=e.bottom,t.left=e.left):(t.top=e,t.right=e,t.bottom=e,t.left=e)}return t}},{key:\"_resizeImage\",value:function(){var t,e;if(!1===this.options.shapeProperties.useImageSize){var i=1,n=1;this.imageObj.width&&this.imageObj.height&&(this.imageObj.width>this.imageObj.height?i=this.imageObj.width/this.imageObj.height:n=this.imageObj.height/this.imageObj.width),t=2*this.options.size*i,e=2*this.options.size*n}else{var o=this._getImagePadding();t=this.imageObj.width+o.left+o.right,e=this.imageObj.height+o.top+o.bottom}this.width=t,this.height=e,this.radius=.5*this.width}},{key:\"_drawRawCircle\",value:function(t,e,i,n){this.initContextForDraw(t,n),Ut(t,e,i,n.size),this.performFill(t,n)}},{key:\"_drawImageAtPosition\",value:function(t,e){if(0!=this.imageObj.width){t.globalAlpha=void 0!==e.opacity?e.opacity:1,this.enableShadow(t,e);var i=1;!0===this.options.shapeProperties.interpolation&&(i=this.imageObj.width/this.width/this.body.view.scale);var n=this._getImagePadding(),o=this.left+n.left,r=this.top+n.top,s=this.width-n.left-n.right,a=this.height-n.top-n.bottom;this.imageObj.drawImageAtPosition(t,i,o,r,s,a),this.disableShadow(t,e)}}},{key:\"_drawImageLabel\",value:function(t,e,i,n,o){var r=0;if(void 0!==this.height){r=.5*this.height;var s=this.labelModule.getTextSize(t,n,o);s.lineCount>=1&&(r+=s.height/2)}var a=i+r;this.options.label&&(this.labelOffset=r),this.labelModule.draw(t,e,a,n,o,\"hanging\")}}]),i}(xu);function Tu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Mu=function(t){Ad(i,t);var e=Tu(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o))._setMargins(o),r}return Fn(i,[{key:\"resize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(this.needsRefresh(e,i)){var n=this.getDimensionsFromLabel(t,e,i),o=Math.max(n.width+this.margin.right+this.margin.left,n.height+this.margin.top+this.margin.bottom);this.options.size=o/2,this.width=o,this.height=o,this.radius=this.width/2}}},{key:\"draw\",value:function(t,e,i,n,o,r){this.resize(t,n,o),this.left=e-this.width/2,this.top=i-this.height/2,this._drawRawCircle(t,e,i,r),this.updateBoundingBox(e,i),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,i,n,o)}},{key:\"updateBoundingBox\",value:function(t,e){this.boundingBox.top=e-this.options.size,this.boundingBox.left=t-this.options.size,this.boundingBox.right=t+this.options.size,this.boundingBox.bottom=e+this.options.size}},{key:\"distanceToBorder\",value:function(t){return t&&this.resize(t),.5*this.width}}]),i}(Su);function Pu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Du=function(t){Ad(i,t);var e=Pu(i);function i(t,n,o,r,s){var a;return Nn(this,i),(a=e.call(this,t,n,o)).setImages(r,s),a}return Fn(i,[{key:\"resize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover,n=void 0===this.imageObj.src||void 0===this.imageObj.width||void 0===this.imageObj.height;if(n){var o=2*this.options.size;return this.width=o,this.height=o,void(this.radius=.5*this.width)}this.needsRefresh(e,i)&&this._resizeImage()}},{key:\"draw\",value:function(t,e,i,n,o,r){this.switchImages(n),this.resize();var s=e,a=i;\"top-left\"===this.options.shapeProperties.coordinateOrigin?(this.left=e,this.top=i,s+=this.width/2,a+=this.height/2):(this.left=e-this.width/2,this.top=i-this.height/2),this._drawRawCircle(t,s,a,r),t.save(),t.clip(),this._drawImageAtPosition(t,r),t.restore(),this._drawImageLabel(t,s,a,n,o),this.updateBoundingBox(e,i)}},{key:\"updateBoundingBox\",value:function(t,e){\"top-left\"===this.options.shapeProperties.coordinateOrigin?(this.boundingBox.top=e,this.boundingBox.left=t,this.boundingBox.right=t+2*this.options.size,this.boundingBox.bottom=e+2*this.options.size):(this.boundingBox.top=e-this.options.size,this.boundingBox.left=t-this.options.size,this.boundingBox.right=t+this.options.size,this.boundingBox.bottom=e+this.options.size),this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelOffset)}},{key:\"distanceToBorder\",value:function(t){return t&&this.resize(t),.5*this.width}}]),i}(Su);function Iu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Bu=function(t){Ad(i,t);var e=Iu(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"resize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover,n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{size:this.options.size};if(this.needsRefresh(e,i)){var o,r;this.labelModule.getTextSize(t,e,i);var s=2*n.size;this.width=null!==(o=this.customSizeWidth)&&void 0!==o?o:s,this.height=null!==(r=this.customSizeHeight)&&void 0!==r?r:s,this.radius=.5*this.width}}},{key:\"_drawShape\",value:function(t,e,i,n,o,r,s,a){var h,l=this;return this.resize(t,r,s,a),this.left=n-this.width/2,this.top=o-this.height/2,this.initContextForDraw(t,a),(h=e,Object.prototype.hasOwnProperty.call($t,h)?$t[h]:function(t){for(var e=arguments.length,i=new Array(e>1?e-1:0),n=1;n<e;n++)i[n-1]=arguments[n];CanvasRenderingContext2D.prototype[h].call(t,i)})(t,n,o,a.size),this.performFill(t,a),void 0!==this.options.icon&&void 0!==this.options.icon.code&&(t.font=(r?\"bold \":\"\")+this.height/2+\"px \"+(this.options.icon.face||\"FontAwesome\"),t.fillStyle=this.options.icon.color||\"black\",t.textAlign=\"center\",t.textBaseline=\"middle\",t.fillText(this.options.icon.code,n,o)),{drawExternalLabel:function(){if(void 0!==l.options.label){l.labelModule.calculateLabelSize(t,r,s,n,o,\"hanging\");var e=o+.5*l.height+.5*l.labelModule.size.height;l.labelModule.draw(t,n,e,r,s,\"hanging\")}l.updateBoundingBox(n,o)}}}},{key:\"updateBoundingBox\",value:function(t,e){this.boundingBox.top=e-this.options.size,this.boundingBox.left=t-this.options.size,this.boundingBox.right=t+this.options.size,this.boundingBox.bottom=e+this.options.size,void 0!==this.options.label&&this.labelModule.size.width>0&&(this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelModule.size.height))}}]),i}(xu);function zu(t,e){var i=zo(t);if(On){var n=On(t);e&&(n=mr(n).call(n,(function(e){return Mn(t,e).enumerable}))),i.push.apply(i,n)}return i}function Nu(t){for(var e=1;e<arguments.length;e++){var i,n=null!=arguments[e]?arguments[e]:{};if(e%2)Wo(i=zu(Object(n),!0)).call(i,(function(e){jn(t,e,n[e])}));else if(Dn)In(t,Dn(n));else{var o;Wo(o=zu(Object(n))).call(o,(function(e){zn(t,e,Mn(n,e))}))}}return t}function Au(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Fu=function(t){Ad(i,t);var e=Au(i);function i(t,n,o,r){var s;return Nn(this,i),(s=e.call(this,t,n,o,r)).ctxRenderer=r,s}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){this.resize(t,n,o,r),this.left=e-this.width/2,this.top=i-this.height/2,t.save();var s=this.ctxRenderer({ctx:t,id:this.options.id,x:e,y:i,state:{selected:n,hover:o},style:Nu({},r),label:this.options.label});if(null!=s.drawNode&&s.drawNode(),t.restore(),s.drawExternalLabel){var a=s.drawExternalLabel;s.drawExternalLabel=function(){t.save(),a(),t.restore()}}return s.nodeDimensions&&(this.customSizeWidth=s.nodeDimensions.width,this.customSizeHeight=s.nodeDimensions.height),s}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Bu);function ju(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Ru=function(t){Ad(i,t);var e=ju(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o))._setMargins(o),r}return Fn(i,[{key:\"resize\",value:function(t,e,i){if(this.needsRefresh(e,i)){var n=this.getDimensionsFromLabel(t,e,i).width+this.margin.right+this.margin.left;this.width=n,this.height=n,this.radius=this.width/2}}},{key:\"draw\",value:function(t,e,i,n,o,r){this.resize(t,n,o),this.left=e-this.width/2,this.top=i-this.height/2,this.initContextForDraw(t,r),Gt(t,e-this.width/2,i-this.height/2,this.width,this.height),this.performFill(t,r),this.updateBoundingBox(e,i,t,n,o),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,n,o)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(xu);function Lu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Hu=function(t){Ad(i,t);var e=Lu(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){return this._drawShape(t,\"diamond\",4,e,i,n,o,r)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Bu);function Wu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var qu=function(t){Ad(i,t);var e=Wu(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){return this._drawShape(t,\"circle\",2,e,i,n,o,r)}},{key:\"distanceToBorder\",value:function(t){return t&&this.resize(t),this.options.size}}]),i}(Bu);function Vu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Uu=function(t){Ad(i,t);var e=Vu(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"resize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(this.needsRefresh(e,i)){var n=this.getDimensionsFromLabel(t,e,i);this.height=2*n.height,this.width=n.width+n.height,this.radius=.5*this.width}}},{key:\"draw\",value:function(t,e,i,n,o,r){this.resize(t,n,o),this.left=e-.5*this.width,this.top=i-.5*this.height,this.initContextForDraw(t,r),Xt(t,this.left,this.top,this.width,this.height),this.performFill(t,r),this.updateBoundingBox(e,i,t,n,o),this.labelModule.draw(t,e,i,n,o)}},{key:\"distanceToBorder\",value:function(t,e){t&&this.resize(t);var i=.5*this.width,n=.5*this.height,o=Math.sin(e)*i,r=Math.cos(e)*n;return i*n/Math.sqrt(o*o+r*r)}}]),i}(xu);function Yu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Xu=function(t){Ad(i,t);var e=Yu(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o))._setMargins(o),r}return Fn(i,[{key:\"resize\",value:function(t,e,i){this.needsRefresh(e,i)&&(this.iconSize={width:Number(this.options.icon.size),height:Number(this.options.icon.size)},this.width=this.iconSize.width+this.margin.right+this.margin.left,this.height=this.iconSize.height+this.margin.top+this.margin.bottom,this.radius=.5*this.width)}},{key:\"draw\",value:function(t,e,i,n,o,r){var s=this;return this.resize(t,n,o),this.options.icon.size=this.options.icon.size||50,this.left=e-this.width/2,this.top=i-this.height/2,this._icon(t,e,i,n,o,r),{drawExternalLabel:function(){if(void 0!==s.options.label){s.labelModule.draw(t,s.left+s.iconSize.width/2+s.margin.left,i+s.height/2+5,n)}s.updateBoundingBox(e,i)}}}},{key:\"updateBoundingBox\",value:function(t,e){if(this.boundingBox.top=e-.5*this.options.icon.size,this.boundingBox.left=t-.5*this.options.icon.size,this.boundingBox.right=t+.5*this.options.icon.size,this.boundingBox.bottom=e+.5*this.options.icon.size,void 0!==this.options.label&&this.labelModule.size.width>0){this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelModule.size.height+5)}}},{key:\"_icon\",value:function(t,e,i,n,o,r){var s=Number(this.options.icon.size);void 0!==this.options.icon.code?(t.font=[null!=this.options.icon.weight?this.options.icon.weight:n?\"bold\":\"\",(null!=this.options.icon.weight&&n?5:0)+s+\"px\",this.options.icon.face].join(\" \"),t.fillStyle=this.options.icon.color||\"black\",t.textAlign=\"center\",t.textBaseline=\"middle\",this.enableShadow(t,r),t.fillText(this.options.icon.code,e,i),this.disableShadow(t,r)):console.error(\"When using the icon shape, you need to define the code in the icon options object. This can be done per node or globally.\")}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(xu);function Gu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Ku=function(t){Ad(i,t);var e=Gu(i);function i(t,n,o,r,s){var a;return Nn(this,i),(a=e.call(this,t,n,o)).setImages(r,s),a}return Fn(i,[{key:\"resize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover,n=void 0===this.imageObj.src||void 0===this.imageObj.width||void 0===this.imageObj.height;if(n){var o=2*this.options.size;return this.width=o,void(this.height=o)}this.needsRefresh(e,i)&&this._resizeImage()}},{key:\"draw\",value:function(t,e,i,n,o,r){t.save(),this.switchImages(n),this.resize();var s=e,a=i;if(\"top-left\"===this.options.shapeProperties.coordinateOrigin?(this.left=e,this.top=i,s+=this.width/2,a+=this.height/2):(this.left=e-this.width/2,this.top=i-this.height/2),!0===this.options.shapeProperties.useBorderWithImage){var h=this.options.borderWidth,l=this.options.borderWidthSelected||2*this.options.borderWidth,d=(n?l:h)/this.body.view.scale;t.lineWidth=Math.min(this.width,d),t.beginPath();var c=n?this.options.color.highlight.border:o?this.options.color.hover.border:this.options.color.border,u=n?this.options.color.highlight.background:o?this.options.color.hover.background:this.options.color.background;void 0!==r.opacity&&(c=Fh(c,r.opacity),u=Fh(u,r.opacity)),t.strokeStyle=c,t.fillStyle=u,t.rect(this.left-.5*t.lineWidth,this.top-.5*t.lineWidth,this.width+t.lineWidth,this.height+t.lineWidth),hs(t).call(t),this.performStroke(t,r),t.closePath()}this._drawImageAtPosition(t,r),this._drawImageLabel(t,s,a,n,o),this.updateBoundingBox(e,i),t.restore()}},{key:\"updateBoundingBox\",value:function(t,e){this.resize(),\"top-left\"===this.options.shapeProperties.coordinateOrigin?(this.left=t,this.top=e):(this.left=t-this.width/2,this.top=e-this.height/2),this.boundingBox.left=this.left,this.boundingBox.top=this.top,this.boundingBox.bottom=this.top+this.height,this.boundingBox.right=this.left+this.width,void 0!==this.options.label&&this.labelModule.size.width>0&&(this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelOffset))}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Su);function $u(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Zu=function(t){Ad(i,t);var e=$u(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){return this._drawShape(t,\"square\",2,e,i,n,o,r)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Bu);function Qu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Ju=function(t){Ad(i,t);var e=Qu(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){return this._drawShape(t,\"hexagon\",4,e,i,n,o,r)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Bu);function tf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var ef=function(t){Ad(i,t);var e=tf(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){return this._drawShape(t,\"star\",4,e,i,n,o,r)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Bu);function nf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var of=function(t){Ad(i,t);var e=nf(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o))._setMargins(o),r}return Fn(i,[{key:\"resize\",value:function(t,e,i){this.needsRefresh(e,i)&&(this.textSize=this.labelModule.getTextSize(t,e,i),this.width=this.textSize.width+this.margin.right+this.margin.left,this.height=this.textSize.height+this.margin.top+this.margin.bottom,this.radius=.5*this.width)}},{key:\"draw\",value:function(t,e,i,n,o,r){this.resize(t,n,o),this.left=e-this.width/2,this.top=i-this.height/2,this.enableShadow(t,r),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,n,o),this.disableShadow(t,r),this.updateBoundingBox(e,i,t,n,o)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(xu);function rf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var sf=function(t){Ad(i,t);var e=rf(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){return this._drawShape(t,\"triangle\",3,e,i,n,o,r)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Bu);function af(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var hf=function(t){Ad(i,t);var e=af(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){return this._drawShape(t,\"triangleDown\",3,e,i,n,o,r)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Bu);function lf(t,e){var i=zo(t);if(On){var n=On(t);e&&(n=mr(n).call(n,(function(e){return Mn(t,e).enumerable}))),i.push.apply(i,n)}return i}function df(t){for(var e=1;e<arguments.length;e++){var i,n=null!=arguments[e]?arguments[e]:{};if(e%2)Wo(i=lf(Object(n),!0)).call(i,(function(e){jn(t,e,n[e])}));else if(Dn)In(t,Dn(n));else{var o;Wo(o=lf(Object(n))).call(o,(function(e){zn(t,e,Mn(n,e))}))}}return t}var cf=function(){function t(e,i,n,o,r,s){Nn(this,t),this.options=Kh(r),this.globalOptions=r,this.defaultOptions=s,this.body=i,this.edges=[],this.id=void 0,this.imagelist=n,this.grouplist=o,this.x=void 0,this.y=void 0,this.baseSize=this.options.size,this.baseFontSize=this.options.font.size,this.predefinedPosition=!1,this.selected=!1,this.hover=!1,this.labelModule=new _u(this.body,this.options,!1),this.setOptions(e)}return Fn(t,[{key:\"attachEdge\",value:function(t){var e;-1===Hr(e=this.edges).call(e,t)&&this.edges.push(t)}},{key:\"detachEdge\",value:function(t){var e,i,n=Hr(e=this.edges).call(e,t);-1!=n&&er(i=this.edges).call(i,n,1)}},{key:\"setOptions\",value:function(e){var i=this.options.shape;if(e){if(void 0!==e.color&&(this._localColor=e.color),void 0!==e.id&&(this.id=e.id),void 0===this.id)throw new Error(\"Node must have an id\");t.checkMass(e,this.id),void 0!==e.x&&(null===e.x?(this.x=void 0,this.predefinedPosition=!1):(this.x=Br(e.x),this.predefinedPosition=!0)),void 0!==e.y&&(null===e.y?(this.y=void 0,this.predefinedPosition=!1):(this.y=Br(e.y),this.predefinedPosition=!0)),void 0!==e.size&&(this.baseSize=e.size),void 0!==e.value&&(e.value=hu(e.value)),t.parseOptions(this.options,e,!0,this.globalOptions,this.grouplist);var n=[e,this.options,this.defaultOptions];return this.chooser=fu(\"node\",n),this._load_images(),this.updateLabelModule(e),void 0!==e.opacity&&t.checkOpacity(e.opacity)&&(this.options.opacity=e.opacity),this.updateShape(i),void 0!==e.hidden||void 0!==e.physics}}},{key:\"_load_images\",value:function(){if((\"circularImage\"===this.options.shape||\"image\"===this.options.shape)&&void 0===this.options.image)throw new Error(\"Option image must be defined for node type '\"+this.options.shape+\"'\");if(void 0!==this.options.image){if(void 0===this.imagelist)throw new Error(\"Internal Error: No images provided\");if(\"string\"==typeof this.options.image)this.imageObj=this.imagelist.load(this.options.image,this.options.brokenImage,this.id);else{if(void 0===this.options.image.unselected)throw new Error(\"No unselected image provided\");this.imageObj=this.imagelist.load(this.options.image.unselected,this.options.brokenImage,this.id),void 0!==this.options.image.selected?this.imageObjAlt=this.imagelist.load(this.options.image.selected,this.options.brokenImage,this.id):this.imageObjAlt=void 0}}}},{key:\"getFormattingValues\",value:function(){var t={color:this.options.color.background,opacity:this.options.opacity,borderWidth:this.options.borderWidth,borderColor:this.options.color.border,size:this.options.size,borderDashes:this.options.shapeProperties.borderDashes,borderRadius:this.options.shapeProperties.borderRadius,shadow:this.options.shadow.enabled,shadowColor:this.options.shadow.color,shadowSize:this.options.shadow.size,shadowX:this.options.shadow.x,shadowY:this.options.shadow.y};if(this.selected||this.hover?!0===this.chooser?this.selected?(null!=this.options.borderWidthSelected?t.borderWidth=this.options.borderWidthSelected:t.borderWidth*=2,t.color=this.options.color.highlight.background,t.borderColor=this.options.color.highlight.border,t.shadow=this.options.shadow.enabled):this.hover&&(t.color=this.options.color.hover.background,t.borderColor=this.options.color.hover.border,t.shadow=this.options.shadow.enabled):\"function\"==typeof this.chooser&&(this.chooser(t,this.options.id,this.selected,this.hover),!1===t.shadow&&(t.shadowColor===this.options.shadow.color&&t.shadowSize===this.options.shadow.size&&t.shadowX===this.options.shadow.x&&t.shadowY===this.options.shadow.y||(t.shadow=!0))):t.shadow=this.options.shadow.enabled,void 0!==this.options.opacity){var e=this.options.opacity;t.borderColor=Fh(t.borderColor,e),t.color=Fh(t.color,e),t.shadowColor=Fh(t.shadowColor,e)}return t}},{key:\"updateLabelModule\",value:function(e){void 0!==this.options.label&&null!==this.options.label||(this.options.label=\"\"),t.updateGroupOptions(this.options,df(df({},e),{},{color:e&&e.color||this._localColor||void 0}),this.grouplist);var i=this.grouplist.get(this.options.group,!1),n=[e,this.options,i,this.globalOptions,this.defaultOptions];this.labelModule.update(this.options,n),void 0!==this.labelModule.baseSize&&(this.baseFontSize=this.labelModule.baseSize)}},{key:\"updateShape\",value:function(t){if(t===this.options.shape&&this.shape)this.shape.setOptions(this.options,this.imageObj,this.imageObjAlt);else switch(this.options.shape){case\"box\":this.shape=new Ou(this.options,this.body,this.labelModule);break;case\"circle\":this.shape=new Mu(this.options,this.body,this.labelModule);break;case\"circularImage\":this.shape=new Du(this.options,this.body,this.labelModule,this.imageObj,this.imageObjAlt);break;case\"custom\":this.shape=new Fu(this.options,this.body,this.labelModule,this.options.ctxRenderer);break;case\"database\":this.shape=new Ru(this.options,this.body,this.labelModule);break;case\"diamond\":this.shape=new Hu(this.options,this.body,this.labelModule);break;case\"dot\":this.shape=new qu(this.options,this.body,this.labelModule);break;case\"ellipse\":this.shape=new Uu(this.options,this.body,this.labelModule);break;case\"icon\":this.shape=new Xu(this.options,this.body,this.labelModule);break;case\"image\":this.shape=new Ku(this.options,this.body,this.labelModule,this.imageObj,this.imageObjAlt);break;case\"square\":this.shape=new Zu(this.options,this.body,this.labelModule);break;case\"hexagon\":this.shape=new Ju(this.options,this.body,this.labelModule);break;case\"star\":this.shape=new ef(this.options,this.body,this.labelModule);break;case\"text\":this.shape=new of(this.options,this.body,this.labelModule);break;case\"triangle\":this.shape=new sf(this.options,this.body,this.labelModule);break;case\"triangleDown\":this.shape=new hf(this.options,this.body,this.labelModule);break;default:this.shape=new Uu(this.options,this.body,this.labelModule)}this.needsRefresh()}},{key:\"select\",value:function(){this.selected=!0,this.needsRefresh()}},{key:\"unselect\",value:function(){this.selected=!1,this.needsRefresh()}},{key:\"needsRefresh\",value:function(){this.shape.refreshNeeded=!0}},{key:\"getTitle\",value:function(){return this.options.title}},{key:\"distanceToBorder\",value:function(t,e){return this.shape.distanceToBorder(t,e)}},{key:\"isFixed\",value:function(){return this.options.fixed.x&&this.options.fixed.y}},{key:\"isSelected\",value:function(){return this.selected}},{key:\"getValue\",value:function(){return this.options.value}},{key:\"getLabelSize\",value:function(){return this.labelModule.size()}},{key:\"setValueRange\",value:function(t,e,i){if(void 0!==this.options.value){var n=this.options.scaling.customScalingFunction(t,e,i,this.options.value),o=this.options.scaling.max-this.options.scaling.min;if(!0===this.options.scaling.label.enabled){var r=this.options.scaling.label.max-this.options.scaling.label.min;this.options.font.size=this.options.scaling.label.min+n*r}this.options.size=this.options.scaling.min+n*o}else this.options.size=this.baseSize,this.options.font.size=this.baseFontSize;this.updateLabelModule()}},{key:\"draw\",value:function(t){var e=this.getFormattingValues();return this.shape.draw(t,this.x,this.y,this.selected,this.hover,e)||{}}},{key:\"updateBoundingBox\",value:function(t){this.shape.updateBoundingBox(this.x,this.y,t)}},{key:\"resize\",value:function(t){var e=this.getFormattingValues();this.shape.resize(t,this.selected,this.hover,e)}},{key:\"getItemsOnPoint\",value:function(t){var e=[];return this.labelModule.visible()&&pu(this.labelModule.getSize(),t)&&e.push({nodeId:this.id,labelId:0}),pu(this.shape.boundingBox,t)&&e.push({nodeId:this.id}),e}},{key:\"isOverlappingWith\",value:function(t){return this.shape.left<t.right&&this.shape.left+this.shape.width>t.left&&this.shape.top<t.bottom&&this.shape.top+this.shape.height>t.top}},{key:\"isBoundingBoxOverlappingWith\",value:function(t){return this.shape.boundingBox.left<t.right&&this.shape.boundingBox.right>t.left&&this.shape.boundingBox.top<t.bottom&&this.shape.boundingBox.bottom>t.top}}],[{key:\"checkOpacity\",value:function(t){return 0<=t&&t<=1}},{key:\"checkCoordinateOrigin\",value:function(t){return void 0===t||\"center\"===t||\"top-left\"===t}},{key:\"updateGroupOptions\",value:function(e,i,n){var o;if(void 0!==n){var r=e.group;if(void 0!==i&&void 0!==i.group&&r!==i.group)throw new Error(\"updateGroupOptions: group values in options don't match.\");if(\"number\"==typeof r||\"string\"==typeof r&&\"\"!=r){var s=n.get(r);void 0!==s.opacity&&void 0===i.opacity&&(t.checkOpacity(s.opacity)||(console.error(\"Invalid option for node opacity. Value must be between 0 and 1, found: \"+s.opacity),s.opacity=void 0));var a=mr(o=uu(i)).call(o,(function(t){return null!=i[t]}));a.push(\"font\"),Oh(a,e,s),e.color=Rh(e.color)}}}},{key:\"parseOptions\",value:function(e,i){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},r=arguments.length>4?arguments[4]:void 0,s=[\"color\",\"fixed\",\"shadow\"];if(Oh(s,e,i,n),t.checkMass(i),void 0!==e.opacity&&(t.checkOpacity(e.opacity)||(console.error(\"Invalid option for node opacity. Value must be between 0 and 1, found: \"+e.opacity),e.opacity=void 0)),void 0!==i.opacity&&(t.checkOpacity(i.opacity)||(console.error(\"Invalid option for node opacity. Value must be between 0 and 1, found: \"+i.opacity),i.opacity=void 0)),i.shapeProperties&&!t.checkCoordinateOrigin(i.shapeProperties.coordinateOrigin)&&console.error(\"Invalid option for node coordinateOrigin, found: \"+i.shapeProperties.coordinateOrigin),$h(e,i,\"shadow\",o),void 0!==i.color&&null!==i.color){var a=Rh(i.color);_h(e.color,a)}else!0===n&&null===i.color&&(e.color=Kh(o.color));void 0!==i.fixed&&null!==i.fixed&&(\"boolean\"==typeof i.fixed?(e.fixed.x=i.fixed,e.fixed.y=i.fixed):(void 0!==i.fixed.x&&\"boolean\"==typeof i.fixed.x&&(e.fixed.x=i.fixed.x),void 0!==i.fixed.y&&\"boolean\"==typeof i.fixed.y&&(e.fixed.y=i.fixed.y))),!0===n&&null===i.font&&(e.font=Kh(o.font)),t.updateGroupOptions(e,i,r),void 0!==i.scaling&&$h(e.scaling,i.scaling,\"label\",o.scaling)}},{key:\"checkMass\",value:function(t,e){if(void 0!==t.mass&&t.mass<=0){var i=\"\";void 0!==e&&(i=\" in node id: \"+e),console.error(\"%cNegative or zero mass disallowed\"+i+\", setting mass to 1.\",cl),t.mass=1}}}]),t}();function uf(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return ff(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return ff(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function ff(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}var pf=function(){function t(e,i,n,o){var r,s=this;if(Nn(this,t),this.body=e,this.images=i,this.groups=n,this.layoutEngine=o,this.body.functions.createNode=Vt(r=this.create).call(r,this),this.nodesListeners={add:function(t,e){s.add(e.items)},update:function(t,e){s.update(e.items,e.data,e.oldData)},remove:function(t,e){s.remove(e.items)}},this.defaultOptions={borderWidth:1,borderWidthSelected:void 0,brokenImage:void 0,color:{border:\"#2B7CE9\",background:\"#97C2FC\",highlight:{border:\"#2B7CE9\",background:\"#D2E5FF\"},hover:{border:\"#2B7CE9\",background:\"#D2E5FF\"}},opacity:void 0,fixed:{x:!1,y:!1},font:{color:\"#343434\",size:14,face:\"arial\",background:\"none\",strokeWidth:0,strokeColor:\"#ffffff\",align:\"center\",vadjust:0,multi:!1,bold:{mod:\"bold\"},boldital:{mod:\"bold italic\"},ital:{mod:\"italic\"},mono:{mod:\"\",size:15,face:\"monospace\",vadjust:2}},group:void 0,hidden:!1,icon:{face:\"FontAwesome\",code:void 0,size:50,color:\"#2B7CE9\"},image:void 0,imagePadding:{top:0,right:0,bottom:0,left:0},label:void 0,labelHighlightBold:!0,level:void 0,margin:{top:5,right:5,bottom:5,left:5},mass:1,physics:!0,scaling:{min:10,max:30,label:{enabled:!1,min:14,max:30,maxVisible:30,drawThreshold:5},customScalingFunction:function(t,e,i,n){if(e===t)return.5;var o=1/(e-t);return Math.max(0,(n-t)*o)}},shadow:{enabled:!1,color:\"rgba(0,0,0,0.5)\",size:10,x:5,y:5},shape:\"ellipse\",shapeProperties:{borderDashes:!1,borderRadius:6,interpolation:!0,useImageSize:!1,useBorderWithImage:!1,coordinateOrigin:\"center\"},size:25,title:void 0,value:void 0,x:void 0,y:void 0},this.defaultOptions.mass<=0)throw\"Internal error: mass in defaultOptions of NodesHandler may not be zero or negative\";this.options=Kh(this.defaultOptions),this.bindEventListeners()}return Fn(t,[{key:\"bindEventListeners\",value:function(){var t,e,i=this;this.body.emitter.on(\"refreshNodes\",Vt(t=this.refresh).call(t,this)),this.body.emitter.on(\"refresh\",Vt(e=this.refresh).call(e,this)),this.body.emitter.on(\"destroy\",(function(){Dh(i.nodesListeners,(function(t,e){i.body.data.nodes&&i.body.data.nodes.off(e,t)})),delete i.body.functions.createNode,delete i.nodesListeners.add,delete i.nodesListeners.update,delete i.nodesListeners.remove,delete i.nodesListeners}))}},{key:\"setOptions\",value:function(t){if(void 0!==t){if(cf.parseOptions(this.options,t),void 0!==t.opacity&&(yd(t.opacity)||!wd(t.opacity)||t.opacity<0||t.opacity>1?console.error(\"Invalid option for node opacity. Value must be between 0 and 1, found: \"+t.opacity):this.options.opacity=t.opacity),void 0!==t.shape)for(var e in this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,e)&&this.body.nodes[e].updateShape();if(void 0!==t.font||void 0!==t.widthConstraint||void 0!==t.heightConstraint)for(var i=0,n=zo(this.body.nodes);i<n.length;i++){var o=n[i];this.body.nodes[o].updateLabelModule(),this.body.nodes[o].needsRefresh()}if(void 0!==t.size)for(var r in this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,r)&&this.body.nodes[r].needsRefresh();void 0===t.hidden&&void 0===t.physics||this.body.emitter.emit(\"_dataChanged\")}}},{key:\"setData\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=this.body.data.nodes;if(nu(\"id\",t))this.body.data.nodes=t;else if(So(t))this.body.data.nodes=new tu,this.body.data.nodes.add(t);else{if(t)throw new TypeError(\"Array or DataSet expected\");this.body.data.nodes=new tu}if(i&&Dh(this.nodesListeners,(function(t,e){i.off(e,t)})),this.body.nodes={},this.body.data.nodes){var n=this;Dh(this.nodesListeners,(function(t,e){n.body.data.nodes.on(e,t)}));var o=this.body.data.nodes.getIds();this.add(o,!0)}!1===e&&this.body.emitter.emit(\"_dataChanged\")}},{key:\"add\",value:function(t){for(var e,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=[],o=0;o<t.length;o++){e=t[o];var r=this.body.data.nodes.get(e),s=this.create(r);n.push(s),this.body.nodes[e]=s}this.layoutEngine.positionInitially(n),!1===i&&this.body.emitter.emit(\"_dataChanged\")}},{key:\"update\",value:function(t,e,i){for(var n=this.body.nodes,o=!1,r=0;r<t.length;r++){var s=t[r],a=n[s],h=e[r];void 0!==a?a.setOptions(h)&&(o=!0):(o=!0,a=this.create(h),n[s]=a)}o||void 0===i||(o=Od(e).call(e,(function(t,e){var n=i[e];return n&&n.level!==t.level}))),!0===o?this.body.emitter.emit(\"_dataChanged\"):this.body.emitter.emit(\"_dataUpdated\")}},{key:\"remove\",value:function(t){for(var e=this.body.nodes,i=0;i<t.length;i++){delete e[t[i]]}this.body.emitter.emit(\"_dataChanged\")}},{key:\"create\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:cf;return new e(t,this.body,this.images,this.groups,this.options,this.defaultOptions)}},{key:\"refresh\",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];Dh(this.body.nodes,(function(i,n){var o=t.body.data.nodes.get(n);void 0!==o&&(!0===e&&i.setOptions({x:null,y:null}),i.setOptions({fixed:!1}),i.setOptions(o))}))}},{key:\"getPositions\",value:function(t){var e={};if(void 0!==t){if(!0===So(t)){for(var i=0;i<t.length;i++)if(void 0!==this.body.nodes[t[i]]){var n=this.body.nodes[t[i]];e[t[i]]={x:Math.round(n.x),y:Math.round(n.y)}}}else if(void 0!==this.body.nodes[t]){var o=this.body.nodes[t];e[t]={x:Math.round(o.x),y:Math.round(o.y)}}}else for(var r=0;r<this.body.nodeIndices.length;r++){var s=this.body.nodes[this.body.nodeIndices[r]];e[this.body.nodeIndices[r]]={x:Math.round(s.x),y:Math.round(s.y)}}return e}},{key:\"getPosition\",value:function(t){if(null==t)throw new TypeError(\"No id was specified for getPosition method.\");if(null==this.body.nodes[t])throw new ReferenceError(\"NodeId provided for getPosition does not exist. Provided: \".concat(t));return{x:Math.round(this.body.nodes[t].x),y:Math.round(this.body.nodes[t].y)}}},{key:\"storePositions\",value:function(){var t,e=[],i=this.body.data.nodes.getDataSet(),n=uf(i.get());try{for(n.s();!(t=n.n()).done;){var o=t.value,r=o.id,s=this.body.nodes[r],a=Math.round(s.x),h=Math.round(s.y);o.x===a&&o.y===h||e.push({id:r,x:a,y:h})}}catch(t){n.e(t)}finally{n.f()}i.update(e)}},{key:\"getBoundingBox\",value:function(t){if(void 0!==this.body.nodes[t])return this.body.nodes[t].shape.boundingBox}},{key:\"getConnectedNodes\",value:function(t,e){var i=[];if(void 0!==this.body.nodes[t])for(var n=this.body.nodes[t],o={},r=0;r<n.edges.length;r++){var s=n.edges[r];\"to\"!==e&&s.toId==n.id?void 0===o[s.fromId]&&(i.push(s.fromId),o[s.fromId]=!0):\"from\"!==e&&s.fromId==n.id&&void 0===o[s.toId]&&(i.push(s.toId),o[s.toId]=!0)}return i}},{key:\"getConnectedEdges\",value:function(t){var e=[];if(void 0!==this.body.nodes[t])for(var i=this.body.nodes[t],n=0;n<i.edges.length;n++)e.push(i.edges[n].id);else console.error(\"NodeId provided for getConnectedEdges does not exist. Provided: \",t);return e}},{key:\"moveNode\",value:function(t,e,i){var n=this;void 0!==this.body.nodes[t]?(this.body.nodes[t].x=Number(e),this.body.nodes[t].y=Number(i),rs((function(){n.body.emitter.emit(\"startSimulation\")}),0)):console.error(\"Node id supplied to moveNode does not exist. Provided: \",t)}}]),t}();gt({target:\"Reflect\",stat:!0},{get:function t(e,i){var n,o,r=arguments.length<3?e:arguments[2];return dt(e)===r?e[i]:(n=tt.f(e,i))?j(n,\"value\")?n.value:void 0===n.get?void 0:n.get.call(r):w(o=Ee(e))?t(o,i,r):void 0}});var vf=k.Reflect.get,gf=Tn,yf=n((function(t){t.exports=function(t,e){for(;!Object.prototype.hasOwnProperty.call(t,e)&&null!==(t=Rd(t)););return t},t.exports.default=t.exports,t.exports.__esModule=!0}));i(yf);var mf=i(n((function(t){function e(i,n,o){return\"undefined\"!=typeof Reflect&&vf?(t.exports=e=vf,t.exports.default=t.exports,t.exports.__esModule=!0):(t.exports=e=function(t,e,i){var n=yf(t,e);if(n){var o=gf(n,e);return o.get?o.get.call(i):o.value}},t.exports.default=t.exports,t.exports.__esModule=!0),e(i,n,o||i)}t.exports=e,t.exports.default=t.exports,t.exports.__esModule=!0}))),bf=Math.hypot,wf=Math.abs,kf=Math.sqrt,_f=!!bf&&bf(1/0,NaN)!==1/0;gt({target:\"Math\",stat:!0,forced:_f},{hypot:function(t,e){for(var i,n,o=0,r=0,s=arguments.length,a=0;r<s;)a<(i=wf(arguments[r++]))?(o=o*(n=a/i)*n+1,a=i):o+=i>0?(n=i/a)*n:i;return a===1/0?1/0:a*kf(o)}});var xf=k.Math.hypot;function Ef(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Of=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"transform\",value:function(t,e){So(t)||(t=[t]);for(var i=e.point.x,n=e.point.y,o=e.angle,r=e.length,s=0;s<t.length;++s){var a=t[s],h=a.x*Math.cos(o)-a.y*Math.sin(o),l=a.x*Math.sin(o)+a.y*Math.cos(o);a.x=i+r*h,a.y=n+r*l}}},{key:\"drawPath\",value:function(t,e){t.beginPath(),t.moveTo(e[0].x,e[0].y);for(var i=1;i<e.length;++i)t.lineTo(e[i].x,e[i].y);t.closePath()}}]),t}(),Cf=function(t){Ad(i,t);var e=Ef(i);function i(){return Nn(this,i),e.apply(this,arguments)}return Fn(i,null,[{key:\"draw\",value:function(t,e){if(e.image){t.save(),t.translate(e.point.x,e.point.y),t.rotate(Math.PI/2+e.angle);var i=null!=e.imageWidth?e.imageWidth:e.image.width,n=null!=e.imageHeight?e.imageHeight:e.image.height;e.image.drawImageAtPosition(t,1,-i/2,0,i,n),t.restore()}return!1}}]),i}(Of),Sf=function(t){Ad(i,t);var e=Ef(i);function i(){return Nn(this,i),e.apply(this,arguments)}return Fn(i,null,[{key:\"draw\",value:function(t,e){var i=[{x:0,y:0},{x:-1,y:.3},{x:-.9,y:0},{x:-1,y:-.3}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),i}(Of),Tf=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i=[{x:-1,y:0},{x:0,y:.3},{x:-.4,y:0},{x:0,y:-.3}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),t}(),Mf=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i={x:-.4,y:0};Of.transform(i,e),t.strokeStyle=t.fillStyle,t.fillStyle=\"rgba(0, 0, 0, 0)\";var n=Math.PI,o=e.angle-n/2,r=e.angle+n/2;return t.beginPath(),t.arc(i.x,i.y,.4*e.length,o,r,!1),t.stroke(),!0}}]),t}(),Pf=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i={x:-.3,y:0};Of.transform(i,e),t.strokeStyle=t.fillStyle,t.fillStyle=\"rgba(0, 0, 0, 0)\";var n=Math.PI,o=e.angle+n/2,r=e.angle+3*n/2;return t.beginPath(),t.arc(i.x,i.y,.4*e.length,o,r,!1),t.stroke(),!0}}]),t}(),Df=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i=[{x:.02,y:0},{x:-1,y:.3},{x:-1,y:-.3}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),t}(),If=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i=[{x:0,y:.3},{x:0,y:-.3},{x:-1,y:0}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),t}(),Bf=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i={x:-.4,y:0};return Of.transform(i,e),Ut(t,i.x,i.y,.4*e.length),!0}}]),t}(),zf=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i=[{x:0,y:.5},{x:0,y:-.5},{x:-.15,y:-.5},{x:-.15,y:.5}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),t}(),Nf=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i=[{x:0,y:.3},{x:0,y:-.3},{x:-.6,y:-.3},{x:-.6,y:.3}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),t}(),Af=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i=[{x:0,y:0},{x:-.5,y:-.3},{x:-1,y:0},{x:-.5,y:.3}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),t}(),Ff=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i=[{x:-1,y:.3},{x:-.5,y:0},{x:-1,y:-.3},{x:0,y:0}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),t}(),jf=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i;switch(e.type&&(i=e.type.toLowerCase()),i){case\"image\":return Cf.draw(t,e);case\"circle\":return Bf.draw(t,e);case\"box\":return Nf.draw(t,e);case\"crow\":return Tf.draw(t,e);case\"curve\":return Mf.draw(t,e);case\"diamond\":return Af.draw(t,e);case\"inv_curve\":return Pf.draw(t,e);case\"triangle\":return Df.draw(t,e);case\"inv_triangle\":return If.draw(t,e);case\"bar\":return zf.draw(t,e);case\"vee\":return Ff.draw(t,e);case\"arrow\":default:return Sf.draw(t,e)}}}]),t}();function Rf(t,e){var i=zo(t);if(On){var n=On(t);e&&(n=mr(n).call(n,(function(e){return Mn(t,e).enumerable}))),i.push.apply(i,n)}return i}function Lf(t){for(var e=1;e<arguments.length;e++){var i,n=null!=arguments[e]?arguments[e]:{};if(e%2)Wo(i=Rf(Object(n),!0)).call(i,(function(e){jn(t,e,n[e])}));else if(Dn)In(t,Dn(n));else{var o;Wo(o=Rf(Object(n))).call(o,(function(e){zn(t,e,Mn(n,e))}))}}return t}var Hf=function(){function t(e,i,n){Nn(this,t),this._body=i,this._labelModule=n,this.color={},this.colorDirty=!0,this.hoverWidth=1.5,this.selectionWidth=2,this.setOptions(e),this.fromPoint=this.from,this.toPoint=this.to}return Fn(t,[{key:\"connect\",value:function(){this.from=this._body.nodes[this.options.from],this.to=this._body.nodes[this.options.to]}},{key:\"cleanup\",value:function(){return!1}},{key:\"setOptions\",value:function(t){this.options=t,this.from=this._body.nodes[this.options.from],this.to=this._body.nodes[this.options.to],this.id=this.options.id}},{key:\"drawLine\",value:function(t,e,i,n){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:this.getViaNode();t.strokeStyle=this.getColor(t,e),t.lineWidth=e.width,!1!==e.dashes?this._drawDashedLine(t,e,o):this._drawLine(t,e,o)}},{key:\"_drawLine\",value:function(t,e,i,n,o){if(this.from!=this.to)this._line(t,e,i,n,o);else{var r=this._getCircleData(t),s=uo(r,3),a=s[0],h=s[1],l=s[2];this._circle(t,e,a,h,l)}}},{key:\"_drawDashedLine\",value:function(t,e,i,n,o){t.lineCap=\"round\";var r=So(e.dashes)?e.dashes:[5,5];if(void 0!==t.setLineDash){if(t.save(),t.setLineDash(r),t.lineDashOffset=0,this.from!=this.to)this._line(t,e,i);else{var s=this._getCircleData(t),a=uo(s,3),h=a[0],l=a[1],d=a[2];this._circle(t,e,h,l,d)}t.setLineDash([0]),t.lineDashOffset=0,t.restore()}else{if(this.from!=this.to)Kt(t,this.from.x,this.from.y,this.to.x,this.to.y,r);else{var c=this._getCircleData(t),u=uo(c,3),f=u[0],p=u[1],v=u[2];this._circle(t,e,f,p,v)}this.enableShadow(t,e),t.stroke(),this.disableShadow(t,e)}}},{key:\"findBorderPosition\",value:function(t,e,i){return this.from!=this.to?this._findBorderPosition(t,e,i):this._findBorderPositionCircle(t,e,i)}},{key:\"findBorderPositions\",value:function(t){if(this.from!=this.to)return{from:this._findBorderPosition(this.from,t),to:this._findBorderPosition(this.to,t)};var e,i=Oo(e=this._getCircleData(t)).call(e,0,2),n=uo(i,2),o=n[0],r=n[1];return{from:this._findBorderPositionCircle(this.from,t,{x:o,y:r,low:.25,high:.6,direction:-1}),to:this._findBorderPositionCircle(this.from,t,{x:o,y:r,low:.6,high:.8,direction:1})}}},{key:\"_getCircleData\",value:function(t){var e=this.options.selfReference.size;void 0!==t&&void 0===this.from.shape.width&&this.from.shape.resize(t);var i=gu(t,this.options.selfReference.angle,e,this.from);return[i.x,i.y,e]}},{key:\"_pointOnCircle\",value:function(t,e,i,n){var o=2*n*Math.PI;return{x:t+i*Math.cos(o),y:e-i*Math.sin(o)}}},{key:\"_findBorderPositionCircle\",value:function(t,e,i){var n,o=i.x,r=i.y,s=i.low,a=i.high,h=i.direction,l=this.options.selfReference.size,d=.5*(s+a),c=0;!0===this.options.arrowStrikethrough&&(-1===h?c=this.options.endPointOffset.from:1===h&&(c=this.options.endPointOffset.to));var u=0;do{d=.5*(s+a),n=this._pointOnCircle(o,r,l,d);var f=Math.atan2(t.y-n.y,t.x-n.x),p=t.distanceToBorder(e,f)+c-Math.sqrt(Math.pow(n.x-t.x,2)+Math.pow(n.y-t.y,2));if(Math.abs(p)<.05)break;p>0?h>0?s=d:a=d:h>0?a=d:s=d,++u}while(s<=a&&u<10);return Lf(Lf({},n),{},{t:d})}},{key:\"getLineWidth\",value:function(t,e){return!0===t?Math.max(this.selectionWidth,.3/this._body.view.scale):!0===e?Math.max(this.hoverWidth,.3/this._body.view.scale):Math.max(this.options.width,.3/this._body.view.scale)}},{key:\"getColor\",value:function(t,e){if(!1!==e.inheritsColor){if(\"both\"===e.inheritsColor&&this.from.id!==this.to.id){var i=t.createLinearGradient(this.from.x,this.from.y,this.to.x,this.to.y),n=this.from.options.color.highlight.border,o=this.to.options.color.highlight.border;return!1===this.from.selected&&!1===this.to.selected?(n=Fh(this.from.options.color.border,e.opacity),o=Fh(this.to.options.color.border,e.opacity)):!0===this.from.selected&&!1===this.to.selected?o=this.to.options.color.border:!1===this.from.selected&&!0===this.to.selected&&(n=this.from.options.color.border),i.addColorStop(0,n),i.addColorStop(1,o),i}return\"to\"===e.inheritsColor?Fh(this.to.options.color.border,e.opacity):Fh(this.from.options.color.border,e.opacity)}return Fh(e.color,e.opacity)}},{key:\"_circle\",value:function(t,e,i,n,o){this.enableShadow(t,e);var r=0,s=2*Math.PI;if(!this.options.selfReference.renderBehindTheNode){var a=this.options.selfReference.angle,h=this.options.selfReference.angle+Math.PI,l=this._findBorderPositionCircle(this.from,t,{x:i,y:n,low:a,high:h,direction:-1}),d=this._findBorderPositionCircle(this.from,t,{x:i,y:n,low:a,high:h,direction:1});r=Math.atan2(l.y-n,l.x-i),s=Math.atan2(d.y-n,d.x-i)}t.beginPath(),t.arc(i,n,o,r,s,!1),t.stroke(),this.disableShadow(t,e)}},{key:\"getDistanceToEdge\",value:function(t,e,i,n,o,r){if(this.from!=this.to)return this._getDistanceToEdge(t,e,i,n,o,r);var s=this._getCircleData(void 0),a=uo(s,3),h=a[0],l=a[1],d=a[2],c=h-o,u=l-r;return Math.abs(Math.sqrt(c*c+u*u)-d)}},{key:\"_getDistanceToLine\",value:function(t,e,i,n,o,r){var s=i-t,a=n-e,h=((o-t)*s+(r-e)*a)/(s*s+a*a);h>1?h=1:h<0&&(h=0);var l=t+h*s-o,d=e+h*a-r;return Math.sqrt(l*l+d*d)}},{key:\"getArrowData\",value:function(t,e,i,n,o,r){var s,a,h,l,d,c,u,f=r.width;\"from\"===e?(h=this.from,l=this.to,d=r.fromArrowScale<0,c=Math.abs(r.fromArrowScale),u=r.fromArrowType):\"to\"===e?(h=this.to,l=this.from,d=r.toArrowScale<0,c=Math.abs(r.toArrowScale),u=r.toArrowType):(h=this.to,l=this.from,d=r.middleArrowScale<0,c=Math.abs(r.middleArrowScale),u=r.middleArrowType);var p=15*c+3*f;if(h!=l){var v=p/xf(h.x-l.x,h.y-l.y);if(\"middle\"!==e)if(!0===this.options.smooth.enabled){var g=this._findBorderPosition(h,t,{via:i}),y=this.getPoint(g.t+v*(\"from\"===e?1:-1),i);s=Math.atan2(g.y-y.y,g.x-y.x),a=g}else s=Math.atan2(h.y-l.y,h.x-l.x),a=this._findBorderPosition(h,t);else{var m=(d?-v:v)/2,b=this.getPoint(.5+m,i),w=this.getPoint(.5-m,i);s=Math.atan2(b.y-w.y,b.x-w.x),a=this.getPoint(.5,i)}}else{var k=this._getCircleData(t),_=uo(k,3),x=_[0],E=_[1],O=_[2];if(\"from\"===e){var C=this.options.selfReference.angle,S=this.options.selfReference.angle+Math.PI,T=this._findBorderPositionCircle(this.from,t,{x:x,y:E,low:C,high:S,direction:-1});s=-2*T.t*Math.PI+1.5*Math.PI+.1*Math.PI,a=T}else if(\"to\"===e){var M=this.options.selfReference.angle,P=this.options.selfReference.angle+Math.PI,D=this._findBorderPositionCircle(this.from,t,{x:x,y:E,low:M,high:P,direction:1});s=-2*D.t*Math.PI+1.5*Math.PI-1.1*Math.PI,a=D}else{var I=this.options.selfReference.angle/(2*Math.PI);a=this._pointOnCircle(x,E,O,I),s=-2*I*Math.PI+1.5*Math.PI+.1*Math.PI}}return{point:a,core:{x:a.x-.9*p*Math.cos(s),y:a.y-.9*p*Math.sin(s)},angle:s,length:p,type:u}}},{key:\"drawArrowHead\",value:function(t,e,i,n,o){t.strokeStyle=this.getColor(t,e),t.fillStyle=t.strokeStyle,t.lineWidth=e.width,jf.draw(t,o)&&(this.enableShadow(t,e),hs(t).call(t),this.disableShadow(t,e))}},{key:\"enableShadow\",value:function(t,e){!0===e.shadow&&(t.shadowColor=e.shadowColor,t.shadowBlur=e.shadowSize,t.shadowOffsetX=e.shadowX,t.shadowOffsetY=e.shadowY)}},{key:\"disableShadow\",value:function(t,e){!0===e.shadow&&(t.shadowColor=\"rgba(0,0,0,0)\",t.shadowBlur=0,t.shadowOffsetX=0,t.shadowOffsetY=0)}},{key:\"drawBackground\",value:function(t,e){if(!1!==e.background){var i={strokeStyle:t.strokeStyle,lineWidth:t.lineWidth,dashes:t.dashes};t.strokeStyle=e.backgroundColor,t.lineWidth=e.backgroundSize,this.setStrokeDashed(t,e.backgroundDashes),t.stroke(),t.strokeStyle=i.strokeStyle,t.lineWidth=i.lineWidth,t.dashes=i.dashes,this.setStrokeDashed(t,e.dashes)}}},{key:\"setStrokeDashed\",value:function(t,e){if(!1!==e)if(void 0!==t.setLineDash){var i=So(e)?e:[5,5];t.setLineDash(i)}else console.warn(\"setLineDash is not supported in this browser. The dashed stroke cannot be used.\");else void 0!==t.setLineDash?t.setLineDash([]):console.warn(\"setLineDash is not supported in this browser. The dashed stroke cannot be used.\")}}]),t}();function Wf(t,e){var i=zo(t);if(On){var n=On(t);e&&(n=mr(n).call(n,(function(e){return Mn(t,e).enumerable}))),i.push.apply(i,n)}return i}function qf(t){for(var e=1;e<arguments.length;e++){var i,n=null!=arguments[e]?arguments[e]:{};if(e%2)Wo(i=Wf(Object(n),!0)).call(i,(function(e){jn(t,e,n[e])}));else if(Dn)In(t,Dn(n));else{var o;Wo(o=Wf(Object(n))).call(o,(function(e){zn(t,e,Mn(n,e))}))}}return t}function Vf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Uf=function(t){Ad(i,t);var e=Vf(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"_findBorderPositionBezier\",value:function(t,e){var i,n,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this._getViaCoordinates(),r=10,s=.2,a=!1,h=1,l=0,d=this.to,c=this.options.endPointOffset?this.options.endPointOffset.to:0;t.id===this.from.id&&(d=this.from,a=!0,c=this.options.endPointOffset?this.options.endPointOffset.from:0),!1===this.options.arrowStrikethrough&&(c=0);var u=0;do{n=.5*(l+h),i=this.getPoint(n,o);var f=Math.atan2(d.y-i.y,d.x-i.x),p=d.distanceToBorder(e,f)+c,v=Math.sqrt(Math.pow(i.x-d.x,2)+Math.pow(i.y-d.y,2)),g=p-v;if(Math.abs(g)<s)break;g<0?!1===a?l=n:h=n:!1===a?h=n:l=n,++u}while(l<=h&&u<r);return qf(qf({},i),{},{t:n})}},{key:\"_getDistanceToBezierEdge\",value:function(t,e,i,n,o,r,s){var a,h,l,d,c,u=1e9,f=t,p=e;for(h=1;h<10;h++)l=.1*h,d=Math.pow(1-l,2)*t+2*l*(1-l)*s.x+Math.pow(l,2)*i,c=Math.pow(1-l,2)*e+2*l*(1-l)*s.y+Math.pow(l,2)*n,h>0&&(u=(a=this._getDistanceToLine(f,p,d,c,o,r))<u?a:u),f=d,p=c;return u}},{key:\"_bezierCurve\",value:function(t,e,i,n){t.beginPath(),t.moveTo(this.fromPoint.x,this.fromPoint.y),null!=i&&null!=i.x?null!=n&&null!=n.x?t.bezierCurveTo(i.x,i.y,n.x,n.y,this.toPoint.x,this.toPoint.y):t.quadraticCurveTo(i.x,i.y,this.toPoint.x,this.toPoint.y):t.lineTo(this.toPoint.x,this.toPoint.y),this.drawBackground(t,e),this.enableShadow(t,e),t.stroke(),this.disableShadow(t,e)}},{key:\"getViaNode\",value:function(){return this._getViaCoordinates()}}]),i}(Hf);function Yf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Xf=function(t){Ad(i,t);var e=Yf(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o)).via=r.via,r._boundFunction=function(){r.positionBezierNode()},r._body.emitter.on(\"_repositionBezierNodes\",r._boundFunction),r}return Fn(i,[{key:\"setOptions\",value:function(t){mf(Ld(i.prototype),\"setOptions\",this).call(this,t);var e=!1;this.options.physics!==t.physics&&(e=!0),this.options=t,this.id=this.options.id,this.from=this._body.nodes[this.options.from],this.to=this._body.nodes[this.options.to],this.setupSupportNode(),this.connect(),!0===e&&(this.via.setOptions({physics:this.options.physics}),this.positionBezierNode())}},{key:\"connect\",value:function(){this.from=this._body.nodes[this.options.from],this.to=this._body.nodes[this.options.to],void 0===this.from||void 0===this.to||!1===this.options.physics||this.from.id===this.to.id?this.via.setOptions({physics:!1}):this.via.setOptions({physics:!0})}},{key:\"cleanup\",value:function(){return this._body.emitter.off(\"_repositionBezierNodes\",this._boundFunction),void 0!==this.via&&(delete this._body.nodes[this.via.id],this.via=void 0,!0)}},{key:\"setupSupportNode\",value:function(){if(void 0===this.via){var t=\"edgeId:\"+this.id,e=this._body.functions.createNode({id:t,shape:\"circle\",physics:!0,hidden:!0});this._body.nodes[t]=e,this.via=e,this.via.parentEdgeId=this.id,this.positionBezierNode()}}},{key:\"positionBezierNode\",value:function(){void 0!==this.via&&void 0!==this.from&&void 0!==this.to?(this.via.x=.5*(this.from.x+this.to.x),this.via.y=.5*(this.from.y+this.to.y)):void 0!==this.via&&(this.via.x=0,this.via.y=0)}},{key:\"_line\",value:function(t,e,i){this._bezierCurve(t,e,i)}},{key:\"_getViaCoordinates\",value:function(){return this.via}},{key:\"getViaNode\",value:function(){return this.via}},{key:\"getPoint\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.via;if(this.from===this.to){var i=this._getCircleData(),n=uo(i,3),o=n[0],r=n[1],s=n[2],a=2*Math.PI*(1-t);return{x:o+s*Math.sin(a),y:r+s-s*(1-Math.cos(a))}}return{x:Math.pow(1-t,2)*this.fromPoint.x+2*t*(1-t)*e.x+Math.pow(t,2)*this.toPoint.x,y:Math.pow(1-t,2)*this.fromPoint.y+2*t*(1-t)*e.y+Math.pow(t,2)*this.toPoint.y}}},{key:\"_findBorderPosition\",value:function(t,e){return this._findBorderPositionBezier(t,e,this.via)}},{key:\"_getDistanceToEdge\",value:function(t,e,i,n,o,r){return this._getDistanceToBezierEdge(t,e,i,n,o,r,this.via)}}]),i}(Uf);function Gf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Kf=function(t){Ad(i,t);var e=Gf(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"_line\",value:function(t,e,i){this._bezierCurve(t,e,i)}},{key:\"getViaNode\",value:function(){return this._getViaCoordinates()}},{key:\"_getViaCoordinates\",value:function(){var t,e,i=this.options.smooth.roundness,n=this.options.smooth.type,o=Math.abs(this.from.x-this.to.x),r=Math.abs(this.from.y-this.to.y);if(\"discrete\"===n||\"diagonalCross\"===n){var s,a;s=a=o<=r?i*r:i*o,this.from.x>this.to.x&&(s=-s),this.from.y>=this.to.y&&(a=-a);var h=this.from.x+s,l=this.from.y+a;return\"discrete\"===n&&(o<=r?h=o<i*r?this.from.x:h:l=r<i*o?this.from.y:l),{x:h,y:l}}if(\"straightCross\"===n){var d=(1-i)*o,c=(1-i)*r;return o<=r?(d=0,this.from.y<this.to.y&&(c=-c)):(this.from.x<this.to.x&&(d=-d),c=0),{x:this.to.x+d,y:this.to.y+c}}if(\"horizontal\"===n){var u=(1-i)*o;return this.from.x<this.to.x&&(u=-u),{x:this.to.x+u,y:this.from.y}}if(\"vertical\"===n){var f=(1-i)*r;return this.from.y<this.to.y&&(f=-f),{x:this.from.x,y:this.to.y+f}}if(\"curvedCW\"===n){o=this.to.x-this.from.x,r=this.from.y-this.to.y;var p=Math.sqrt(o*o+r*r),v=Math.PI,g=(Math.atan2(r,o)+(.5*i+.5)*v)%(2*v);return{x:this.from.x+(.5*i+.5)*p*Math.sin(g),y:this.from.y+(.5*i+.5)*p*Math.cos(g)}}if(\"curvedCCW\"===n){o=this.to.x-this.from.x,r=this.from.y-this.to.y;var y=Math.sqrt(o*o+r*r),m=Math.PI,b=(Math.atan2(r,o)+(.5*-i+.5)*m)%(2*m);return{x:this.from.x+(.5*i+.5)*y*Math.sin(b),y:this.from.y+(.5*i+.5)*y*Math.cos(b)}}t=e=o<=r?i*r:i*o,this.from.x>this.to.x&&(t=-t),this.from.y>=this.to.y&&(e=-e);var w=this.from.x+t,k=this.from.y+e;return o<=r?w=this.from.x<=this.to.x?this.to.x<w?this.to.x:w:this.to.x>w?this.to.x:w:k=this.from.y>=this.to.y?this.to.y>k?this.to.y:k:this.to.y<k?this.to.y:k,{x:w,y:k}}},{key:\"_findBorderPosition\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this._findBorderPositionBezier(t,e,i.via)}},{key:\"_getDistanceToEdge\",value:function(t,e,i,n,o,r){var s=arguments.length>6&&void 0!==arguments[6]?arguments[6]:this._getViaCoordinates();return this._getDistanceToBezierEdge(t,e,i,n,o,r,s)}},{key:\"getPoint\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this._getViaCoordinates(),i=t,n=Math.pow(1-i,2)*this.fromPoint.x+2*i*(1-i)*e.x+Math.pow(i,2)*this.toPoint.x,o=Math.pow(1-i,2)*this.fromPoint.y+2*i*(1-i)*e.y+Math.pow(i,2)*this.toPoint.y;return{x:n,y:o}}}]),i}(Uf);function $f(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}function Zf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Qf=function(t){Ad(i,t);var e=Zf(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"_line\",value:function(t,e,i){var n=i[0],o=i[1];this._bezierCurve(t,e,n,o)}},{key:\"_getViaCoordinates\",value:function(){var t,e,i,n,o=this.from.x-this.to.x,r=this.from.y-this.to.y,s=this.options.smooth.roundness;return(Math.abs(o)>Math.abs(r)||!0===this.options.smooth.forceDirection||\"horizontal\"===this.options.smooth.forceDirection)&&\"vertical\"!==this.options.smooth.forceDirection?(e=this.from.y,n=this.to.y,t=this.from.x-s*o,i=this.to.x+s*o):(e=this.from.y-s*r,n=this.to.y+s*r,t=this.from.x,i=this.to.x),[{x:t,y:e},{x:i,y:n}]}},{key:\"getViaNode\",value:function(){return this._getViaCoordinates()}},{key:\"_findBorderPosition\",value:function(t,e){return this._findBorderPositionBezier(t,e)}},{key:\"_getDistanceToEdge\",value:function(t,e,i,n,o,r){var s=arguments.length>6&&void 0!==arguments[6]?arguments[6]:this._getViaCoordinates(),a=uo(s,2),h=a[0],l=a[1];return this._getDistanceToBezierEdge2(t,e,i,n,o,r,h,l)}},{key:\"getPoint\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this._getViaCoordinates(),i=uo(e,2),n=i[0],o=i[1],r=t,s=[Math.pow(1-r,3),3*r*Math.pow(1-r,2),3*Math.pow(r,2)*(1-r),Math.pow(r,3)],a=s[0]*this.fromPoint.x+s[1]*n.x+s[2]*o.x+s[3]*this.toPoint.x,h=s[0]*this.fromPoint.y+s[1]*n.y+s[2]*o.y+s[3]*this.toPoint.y;return{x:a,y:h}}}]),i}(function(t){Ad(i,t);var e=$f(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"_getDistanceToBezierEdge2\",value:function(t,e,i,n,o,r,s,a){for(var h=1e9,l=t,d=e,c=[0,0,0,0],u=1;u<10;u++){var f=.1*u;c[0]=Math.pow(1-f,3),c[1]=3*f*Math.pow(1-f,2),c[2]=3*Math.pow(f,2)*(1-f),c[3]=Math.pow(f,3);var p=c[0]*t+c[1]*s.x+c[2]*a.x+c[3]*i,v=c[0]*e+c[1]*s.y+c[2]*a.y+c[3]*n;if(u>0){var g=this._getDistanceToLine(l,d,p,v,o,r);h=g<h?g:h}l=p,d=v}return h}}]),i}(Uf));function Jf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var tp=function(t){Ad(i,t);var e=Jf(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"_line\",value:function(t,e){t.beginPath(),t.moveTo(this.fromPoint.x,this.fromPoint.y),t.lineTo(this.toPoint.x,this.toPoint.y),this.enableShadow(t,e),t.stroke(),this.disableShadow(t,e)}},{key:\"getViaNode\",value:function(){}},{key:\"getPoint\",value:function(t){return{x:(1-t)*this.fromPoint.x+t*this.toPoint.x,y:(1-t)*this.fromPoint.y+t*this.toPoint.y}}},{key:\"_findBorderPosition\",value:function(t,e){var i=this.to,n=this.from;t.id===this.from.id&&(i=this.from,n=this.to);var o=Math.atan2(i.y-n.y,i.x-n.x),r=i.x-n.x,s=i.y-n.y,a=Math.sqrt(r*r+s*s),h=(a-t.distanceToBorder(e,o))/a;return{x:(1-h)*n.x+h*i.x,y:(1-h)*n.y+h*i.y,t:0}}},{key:\"_getDistanceToEdge\",value:function(t,e,i,n,o,r){return this._getDistanceToLine(t,e,i,n,o,r)}}]),i}(Hf),ep=function(){function t(e,i,n,o,r){if(Nn(this,t),void 0===i)throw new Error(\"No body provided\");this.options=Kh(o),this.globalOptions=o,this.defaultOptions=r,this.body=i,this.imagelist=n,this.id=void 0,this.fromId=void 0,this.toId=void 0,this.selected=!1,this.hover=!1,this.labelDirty=!0,this.baseWidth=this.options.width,this.baseFontSize=this.options.font.size,this.from=void 0,this.to=void 0,this.edgeType=void 0,this.connected=!1,this.labelModule=new _u(this.body,this.options,!0),this.setOptions(e)}return Fn(t,[{key:\"setOptions\",value:function(e){if(e){var i=void 0!==e.physics&&this.options.physics!==e.physics||void 0!==e.hidden&&(this.options.hidden||!1)!==(e.hidden||!1)||void 0!==e.from&&this.options.from!==e.from||void 0!==e.to&&this.options.to!==e.to;t.parseOptions(this.options,e,!0,this.globalOptions),void 0!==e.id&&(this.id=e.id),void 0!==e.from&&(this.fromId=e.from),void 0!==e.to&&(this.toId=e.to),void 0!==e.title&&(this.title=e.title),void 0!==e.value&&(e.value=hu(e.value));var n=[e,this.options,this.defaultOptions];return this.chooser=fu(\"edge\",n),this.updateLabelModule(e),i=this.updateEdgeType()||i,this._setInteractionWidths(),this.connect(),i}}},{key:\"getFormattingValues\",value:function(){var t=!0===this.options.arrows.to||!0===this.options.arrows.to.enabled,e=!0===this.options.arrows.from||!0===this.options.arrows.from.enabled,i=!0===this.options.arrows.middle||!0===this.options.arrows.middle.enabled,n=this.options.color.inherit,o={toArrow:t,toArrowScale:this.options.arrows.to.scaleFactor,toArrowType:this.options.arrows.to.type,toArrowSrc:this.options.arrows.to.src,toArrowImageWidth:this.options.arrows.to.imageWidth,toArrowImageHeight:this.options.arrows.to.imageHeight,middleArrow:i,middleArrowScale:this.options.arrows.middle.scaleFactor,middleArrowType:this.options.arrows.middle.type,middleArrowSrc:this.options.arrows.middle.src,middleArrowImageWidth:this.options.arrows.middle.imageWidth,middleArrowImageHeight:this.options.arrows.middle.imageHeight,fromArrow:e,fromArrowScale:this.options.arrows.from.scaleFactor,fromArrowType:this.options.arrows.from.type,fromArrowSrc:this.options.arrows.from.src,fromArrowImageWidth:this.options.arrows.from.imageWidth,fromArrowImageHeight:this.options.arrows.from.imageHeight,arrowStrikethrough:this.options.arrowStrikethrough,color:n?void 0:this.options.color.color,inheritsColor:n,opacity:this.options.color.opacity,hidden:this.options.hidden,length:this.options.length,shadow:this.options.shadow.enabled,shadowColor:this.options.shadow.color,shadowSize:this.options.shadow.size,shadowX:this.options.shadow.x,shadowY:this.options.shadow.y,dashes:this.options.dashes,width:this.options.width,background:this.options.background.enabled,backgroundColor:this.options.background.color,backgroundSize:this.options.background.size,backgroundDashes:this.options.background.dashes};if(this.selected||this.hover)if(!0===this.chooser){if(this.selected){var r=this.options.selectionWidth;\"function\"==typeof r?o.width=r(o.width):\"number\"==typeof r&&(o.width+=r),o.width=Math.max(o.width,.3/this.body.view.scale),o.color=this.options.color.highlight,o.shadow=this.options.shadow.enabled}else if(this.hover){var s=this.options.hoverWidth;\"function\"==typeof s?o.width=s(o.width):\"number\"==typeof s&&(o.width+=s),o.width=Math.max(o.width,.3/this.body.view.scale),o.color=this.options.color.hover,o.shadow=this.options.shadow.enabled}}else\"function\"==typeof this.chooser&&(this.chooser(o,this.options.id,this.selected,this.hover),void 0!==o.color&&(o.inheritsColor=!1),!1===o.shadow&&(o.shadowColor===this.options.shadow.color&&o.shadowSize===this.options.shadow.size&&o.shadowX===this.options.shadow.x&&o.shadowY===this.options.shadow.y||(o.shadow=!0)));else o.shadow=this.options.shadow.enabled,o.width=Math.max(o.width,.3/this.body.view.scale);return o}},{key:\"updateLabelModule\",value:function(t){var e=[t,this.options,this.globalOptions,this.defaultOptions];this.labelModule.update(this.options,e),void 0!==this.labelModule.baseSize&&(this.baseFontSize=this.labelModule.baseSize)}},{key:\"updateEdgeType\",value:function(){var t=this.options.smooth,e=!1,i=!0;return void 0!==this.edgeType&&((this.edgeType instanceof Xf&&!0===t.enabled&&\"dynamic\"===t.type||this.edgeType instanceof Qf&&!0===t.enabled&&\"cubicBezier\"===t.type||this.edgeType instanceof Kf&&!0===t.enabled&&\"dynamic\"!==t.type&&\"cubicBezier\"!==t.type||this.edgeType instanceof tp&&!1===t.type.enabled)&&(i=!1),!0===i&&(e=this.cleanup())),!0===i?!0===t.enabled?\"dynamic\"===t.type?(e=!0,this.edgeType=new Xf(this.options,this.body,this.labelModule)):\"cubicBezier\"===t.type?this.edgeType=new Qf(this.options,this.body,this.labelModule):this.edgeType=new Kf(this.options,this.body,this.labelModule):this.edgeType=new tp(this.options,this.body,this.labelModule):this.edgeType.setOptions(this.options),e}},{key:\"connect\",value:function(){this.disconnect(),this.from=this.body.nodes[this.fromId]||void 0,this.to=this.body.nodes[this.toId]||void 0,this.connected=void 0!==this.from&&void 0!==this.to,!0===this.connected?(this.from.attachEdge(this),this.to.attachEdge(this)):(this.from&&this.from.detachEdge(this),this.to&&this.to.detachEdge(this)),this.edgeType.connect()}},{key:\"disconnect\",value:function(){this.from&&(this.from.detachEdge(this),this.from=void 0),this.to&&(this.to.detachEdge(this),this.to=void 0),this.connected=!1}},{key:\"getTitle\",value:function(){return this.title}},{key:\"isSelected\",value:function(){return this.selected}},{key:\"getValue\",value:function(){return this.options.value}},{key:\"setValueRange\",value:function(t,e,i){if(void 0!==this.options.value){var n=this.options.scaling.customScalingFunction(t,e,i,this.options.value),o=this.options.scaling.max-this.options.scaling.min;if(!0===this.options.scaling.label.enabled){var r=this.options.scaling.label.max-this.options.scaling.label.min;this.options.font.size=this.options.scaling.label.min+n*r}this.options.width=this.options.scaling.min+n*o}else this.options.width=this.baseWidth,this.options.font.size=this.baseFontSize;this._setInteractionWidths(),this.updateLabelModule()}},{key:\"_setInteractionWidths\",value:function(){\"function\"==typeof this.options.hoverWidth?this.edgeType.hoverWidth=this.options.hoverWidth(this.options.width):this.edgeType.hoverWidth=this.options.hoverWidth+this.options.width,\"function\"==typeof this.options.selectionWidth?this.edgeType.selectionWidth=this.options.selectionWidth(this.options.width):this.edgeType.selectionWidth=this.options.selectionWidth+this.options.width}},{key:\"draw\",value:function(t){var e=this.getFormattingValues();if(!e.hidden){var i=this.edgeType.getViaNode();this.edgeType.drawLine(t,e,this.selected,this.hover,i),this.drawLabel(t,i)}}},{key:\"drawArrows\",value:function(t){var e=this.getFormattingValues();if(!e.hidden){var i=this.edgeType.getViaNode(),n={};this.edgeType.fromPoint=this.edgeType.from,this.edgeType.toPoint=this.edgeType.to,e.fromArrow&&(n.from=this.edgeType.getArrowData(t,\"from\",i,this.selected,this.hover,e),!1===e.arrowStrikethrough&&(this.edgeType.fromPoint=n.from.core),e.fromArrowSrc&&(n.from.image=this.imagelist.load(e.fromArrowSrc)),e.fromArrowImageWidth&&(n.from.imageWidth=e.fromArrowImageWidth),e.fromArrowImageHeight&&(n.from.imageHeight=e.fromArrowImageHeight)),e.toArrow&&(n.to=this.edgeType.getArrowData(t,\"to\",i,this.selected,this.hover,e),!1===e.arrowStrikethrough&&(this.edgeType.toPoint=n.to.core),e.toArrowSrc&&(n.to.image=this.imagelist.load(e.toArrowSrc)),e.toArrowImageWidth&&(n.to.imageWidth=e.toArrowImageWidth),e.toArrowImageHeight&&(n.to.imageHeight=e.toArrowImageHeight)),e.middleArrow&&(n.middle=this.edgeType.getArrowData(t,\"middle\",i,this.selected,this.hover,e),e.middleArrowSrc&&(n.middle.image=this.imagelist.load(e.middleArrowSrc)),e.middleArrowImageWidth&&(n.middle.imageWidth=e.middleArrowImageWidth),e.middleArrowImageHeight&&(n.middle.imageHeight=e.middleArrowImageHeight)),e.fromArrow&&this.edgeType.drawArrowHead(t,e,this.selected,this.hover,n.from),e.middleArrow&&this.edgeType.drawArrowHead(t,e,this.selected,this.hover,n.middle),e.toArrow&&this.edgeType.drawArrowHead(t,e,this.selected,this.hover,n.to)}}},{key:\"drawLabel\",value:function(t,e){if(void 0!==this.options.label){var i,n=this.from,o=this.to;if(this.labelModule.differentState(this.selected,this.hover)&&this.labelModule.getTextSize(t,this.selected,this.hover),n.id!=o.id){this.labelModule.pointToSelf=!1,i=this.edgeType.getPoint(.5,e),t.save();var r=this._getRotation(t);0!=r.angle&&(t.translate(r.x,r.y),t.rotate(r.angle)),this.labelModule.draw(t,i.x,i.y,this.selected,this.hover),t.restore()}else{this.labelModule.pointToSelf=!0;var s=gu(t,this.options.selfReference.angle,this.options.selfReference.size,n);i=this._pointOnCircle(s.x,s.y,this.options.selfReference.size,this.options.selfReference.angle),this.labelModule.draw(t,i.x,i.y,this.selected,this.hover)}}}},{key:\"getItemsOnPoint\",value:function(t){var e=[];if(this.labelModule.visible()){var i=this._getRotation();pu(this.labelModule.getSize(),t,i)&&e.push({edgeId:this.id,labelId:0})}var n={left:t.x,top:t.y};return this.isOverlappingWith(n)&&e.push({edgeId:this.id}),e}},{key:\"isOverlappingWith\",value:function(t){if(this.connected){var e=this.from.x,i=this.from.y,n=this.to.x,o=this.to.y,r=t.left,s=t.top;return this.edgeType.getDistanceToEdge(e,i,n,o,r,s)<10}return!1}},{key:\"_getRotation\",value:function(t){var e=this.edgeType.getViaNode(),i=this.edgeType.getPoint(.5,e);void 0!==t&&this.labelModule.calculateLabelSize(t,this.selected,this.hover,i.x,i.y);var n={x:i.x,y:this.labelModule.size.yLine,angle:0};if(!this.labelModule.visible())return n;if(\"horizontal\"===this.options.font.align)return n;var o=this.from.y-this.to.y,r=this.from.x-this.to.x,s=Math.atan2(o,r);return(s<-1&&r<0||s>0&&r<0)&&(s+=Math.PI),n.angle=s,n}},{key:\"_pointOnCircle\",value:function(t,e,i,n){return{x:t+i*Math.cos(n),y:e-i*Math.sin(n)}}},{key:\"select\",value:function(){this.selected=!0}},{key:\"unselect\",value:function(){this.selected=!1}},{key:\"cleanup\",value:function(){return this.edgeType.cleanup()}},{key:\"remove\",value:function(){this.cleanup(),this.disconnect(),delete this.body.edges[this.id]}},{key:\"endPointsValid\",value:function(){return void 0!==this.body.nodes[this.fromId]&&void 0!==this.body.nodes[this.toId]}}],[{key:\"parseOptions\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},o=arguments.length>4&&void 0!==arguments[4]&&arguments[4],r=[\"endPointOffset\",\"arrowStrikethrough\",\"id\",\"from\",\"hidden\",\"hoverWidth\",\"labelHighlightBold\",\"length\",\"line\",\"opacity\",\"physics\",\"scaling\",\"selectionWidth\",\"selfReferenceSize\",\"selfReference\",\"to\",\"title\",\"value\",\"width\",\"font\",\"chosen\",\"widthConstraint\"];if(Eh(r,t,e,i),void 0!==e.endPointOffset&&void 0!==e.endPointOffset.from&&(wd(e.endPointOffset.from)?t.endPointOffset.from=e.endPointOffset.from:(t.endPointOffset.from=void 0!==n.endPointOffset.from?n.endPointOffset.from:0,console.error(\"endPointOffset.from is not a valid number\"))),void 0!==e.endPointOffset&&void 0!==e.endPointOffset.to&&(wd(e.endPointOffset.to)?t.endPointOffset.to=e.endPointOffset.to:(t.endPointOffset.to=void 0!==n.endPointOffset.to?n.endPointOffset.to:0,console.error(\"endPointOffset.to is not a valid number\"))),vu(e.label)?t.label=e.label:vu(t.label)||(t.label=void 0),$h(t,e,\"smooth\",n),$h(t,e,\"shadow\",n),$h(t,e,\"background\",n),void 0!==e.dashes&&null!==e.dashes?t.dashes=e.dashes:!0===i&&null===e.dashes&&(t.dashes=Gr(n.dashes)),void 0!==e.scaling&&null!==e.scaling?(void 0!==e.scaling.min&&(t.scaling.min=e.scaling.min),void 0!==e.scaling.max&&(t.scaling.max=e.scaling.max),$h(t.scaling,e.scaling,\"label\",n.scaling)):!0===i&&null===e.scaling&&(t.scaling=Gr(n.scaling)),void 0!==e.arrows&&null!==e.arrows)if(\"string\"==typeof e.arrows){var s=e.arrows.toLowerCase();t.arrows.to.enabled=-1!=Hr(s).call(s,\"to\"),t.arrows.middle.enabled=-1!=Hr(s).call(s,\"middle\"),t.arrows.from.enabled=-1!=Hr(s).call(s,\"from\")}else{if(\"object\"!==go(e.arrows))throw new Error(\"The arrow newOptions can only be an object or a string. Refer to the documentation. You used:\"+es(e.arrows));$h(t.arrows,e.arrows,\"to\",n.arrows),$h(t.arrows,e.arrows,\"middle\",n.arrows),$h(t.arrows,e.arrows,\"from\",n.arrows)}else!0===i&&null===e.arrows&&(t.arrows=Gr(n.arrows));if(void 0!==e.color&&null!==e.color){var a=bh(e.color)?{color:e.color,highlight:e.color,hover:e.color,inherit:!1,opacity:1}:e.color,h=t.color;if(o)Ch(h,n.color,!1,i);else for(var l in h)Object.prototype.hasOwnProperty.call(h,l)&&delete h[l];if(bh(h))h.color=h,h.highlight=h,h.hover=h,h.inherit=!1,void 0===a.opacity&&(h.opacity=1);else{var d=!1;void 0!==a.color&&(h.color=a.color,d=!0),void 0!==a.highlight&&(h.highlight=a.highlight,d=!0),void 0!==a.hover&&(h.hover=a.hover,d=!0),void 0!==a.inherit&&(h.inherit=a.inherit),void 0!==a.opacity&&(h.opacity=Math.min(1,Math.max(0,a.opacity))),!0===d?h.inherit=!1:void 0===h.inherit&&(h.inherit=\"from\")}}else!0===i&&null===e.color&&(t.color=Kh(n.color));!0===i&&null===e.font&&(t.font=Kh(n.font)),Object.prototype.hasOwnProperty.call(e,\"selfReferenceSize\")&&(console.warn(\"The selfReferenceSize property has been deprecated. Please use selfReference property instead. The selfReference can be set like thise selfReference:{size:30, angle:Math.PI / 4}\"),t.selfReference.size=e.selfReferenceSize)}}]),t}(),ip=function(){function t(e,i,n){var o,r=this;Nn(this,t),this.body=e,this.images=i,this.groups=n,this.body.functions.createEdge=Vt(o=this.create).call(o,this),this.edgesListeners={add:function(t,e){r.add(e.items)},update:function(t,e){r.update(e.items)},remove:function(t,e){r.remove(e.items)}},this.options={},this.defaultOptions={arrows:{to:{enabled:!1,scaleFactor:1,type:\"arrow\"},middle:{enabled:!1,scaleFactor:1,type:\"arrow\"},from:{enabled:!1,scaleFactor:1,type:\"arrow\"}},endPointOffset:{from:0,to:0},arrowStrikethrough:!0,color:{color:\"#848484\",highlight:\"#848484\",hover:\"#848484\",inherit:\"from\",opacity:1},dashes:!1,font:{color:\"#343434\",size:14,face:\"arial\",background:\"none\",strokeWidth:2,strokeColor:\"#ffffff\",align:\"horizontal\",multi:!1,vadjust:0,bold:{mod:\"bold\"},boldital:{mod:\"bold italic\"},ital:{mod:\"italic\"},mono:{mod:\"\",size:15,face:\"courier new\",vadjust:2}},hidden:!1,hoverWidth:1.5,label:void 0,labelHighlightBold:!0,length:void 0,physics:!0,scaling:{min:1,max:15,label:{enabled:!0,min:14,max:30,maxVisible:30,drawThreshold:5},customScalingFunction:function(t,e,i,n){if(e===t)return.5;var o=1/(e-t);return Math.max(0,(n-t)*o)}},selectionWidth:1.5,selfReference:{size:20,angle:Math.PI/4,renderBehindTheNode:!0},shadow:{enabled:!1,color:\"rgba(0,0,0,0.5)\",size:10,x:5,y:5},background:{enabled:!1,color:\"rgba(111,111,111,1)\",size:10,dashes:!1},smooth:{enabled:!0,type:\"dynamic\",forceDirection:\"none\",roundness:.5},title:void 0,width:1,value:void 0},Ch(this.options,this.defaultOptions),this.bindEventListeners()}return Fn(t,[{key:\"bindEventListeners\",value:function(){var t,e,i=this;this.body.emitter.on(\"_forceDisableDynamicCurves\",(function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];\"dynamic\"===t&&(t=\"continuous\");var n=!1;for(var o in i.body.edges)if(Object.prototype.hasOwnProperty.call(i.body.edges,o)){var r=i.body.edges[o],s=i.body.data.edges.get(o);if(null!=s){var a=s.smooth;void 0!==a&&!0===a.enabled&&\"dynamic\"===a.type&&(void 0===t?r.setOptions({smooth:!1}):r.setOptions({smooth:{type:t}}),n=!0)}}!0===e&&!0===n&&i.body.emitter.emit(\"_dataChanged\")})),this.body.emitter.on(\"_dataUpdated\",(function(){i.reconnectEdges()})),this.body.emitter.on(\"refreshEdges\",Vt(t=this.refresh).call(t,this)),this.body.emitter.on(\"refresh\",Vt(e=this.refresh).call(e,this)),this.body.emitter.on(\"destroy\",(function(){Dh(i.edgesListeners,(function(t,e){i.body.data.edges&&i.body.data.edges.off(e,t)})),delete i.body.functions.createEdge,delete i.edgesListeners.add,delete i.edgesListeners.update,delete i.edgesListeners.remove,delete i.edgesListeners}))}},{key:\"setOptions\",value:function(t){if(void 0!==t){ep.parseOptions(this.options,t,!0,this.defaultOptions,!0);var e=!1;if(void 0!==t.smooth)for(var i in this.body.edges)Object.prototype.hasOwnProperty.call(this.body.edges,i)&&(e=this.body.edges[i].updateEdgeType()||e);if(void 0!==t.font)for(var n in this.body.edges)Object.prototype.hasOwnProperty.call(this.body.edges,n)&&this.body.edges[n].updateLabelModule();void 0===t.hidden&&void 0===t.physics&&!0!==e||this.body.emitter.emit(\"_dataChanged\")}}},{key:\"setData\",value:function(t){var e=this,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=this.body.data.edges;if(nu(\"id\",t))this.body.data.edges=t;else if(So(t))this.body.data.edges=new tu,this.body.data.edges.add(t);else{if(t)throw new TypeError(\"Array or DataSet expected\");this.body.data.edges=new tu}if(n&&Dh(this.edgesListeners,(function(t,e){n.off(e,t)})),this.body.edges={},this.body.data.edges){Dh(this.edgesListeners,(function(t,i){e.body.data.edges.on(i,t)}));var o=this.body.data.edges.getIds();this.add(o,!0)}this.body.emitter.emit(\"_adjustEdgesForHierarchicalLayout\"),!1===i&&this.body.emitter.emit(\"_dataChanged\")}},{key:\"add\",value:function(t){for(var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=this.body.edges,n=this.body.data.edges,o=0;o<t.length;o++){var r=t[o],s=i[r];s&&s.disconnect();var a=n.get(r,{showInternalIds:!0});i[r]=this.create(a)}this.body.emitter.emit(\"_adjustEdgesForHierarchicalLayout\"),!1===e&&this.body.emitter.emit(\"_dataChanged\")}},{key:\"update\",value:function(t){for(var e=this.body.edges,i=this.body.data.edges,n=!1,o=0;o<t.length;o++){var r=t[o],s=i.get(r),a=e[r];void 0!==a?(a.disconnect(),n=a.setOptions(s)||n,a.connect()):(this.body.edges[r]=this.create(s),n=!0)}!0===n?(this.body.emitter.emit(\"_adjustEdgesForHierarchicalLayout\"),this.body.emitter.emit(\"_dataChanged\")):this.body.emitter.emit(\"_dataUpdated\")}},{key:\"remove\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(0!==t.length){var i=this.body.edges;Dh(t,(function(t){var e=i[t];void 0!==e&&e.remove()})),e&&this.body.emitter.emit(\"_dataChanged\")}}},{key:\"refresh\",value:function(){var t=this;Dh(this.body.edges,(function(e,i){var n=t.body.data.edges.get(i);void 0!==n&&e.setOptions(n)}))}},{key:\"create\",value:function(t){return new ep(t,this.body,this.images,this.options,this.defaultOptions)}},{key:\"reconnectEdges\",value:function(){var t,e=this.body.nodes,i=this.body.edges;for(t in e)Object.prototype.hasOwnProperty.call(e,t)&&(e[t].edges=[]);for(t in i)if(Object.prototype.hasOwnProperty.call(i,t)){var n=i[t];n.from=null,n.to=null,n.connect()}}},{key:\"getConnectedNodes\",value:function(t){var e=[];if(void 0!==this.body.edges[t]){var i=this.body.edges[t];void 0!==i.fromId&&e.push(i.fromId),void 0!==i.toId&&e.push(i.toId)}return e}},{key:\"_updateState\",value:function(){this._addMissingEdges(),this._removeInvalidEdges()}},{key:\"_removeInvalidEdges\",value:function(){var t=this,e=[];Dh(this.body.edges,(function(i,n){var o=t.body.nodes[i.toId],r=t.body.nodes[i.fromId];void 0!==o&&!0===o.isCluster||void 0!==r&&!0===r.isCluster||void 0!==o&&void 0!==r||e.push(n)})),this.remove(e,!1)}},{key:\"_addMissingEdges\",value:function(){var t=this.body.data.edges;if(null!=t){var e=this.body.edges,i=[];Wo(t).call(t,(function(t,n){void 0===e[n]&&i.push(n)})),this.add(i,!0)}}}]),t}(),np=function(){function t(e,i,n){Nn(this,t),this.body=e,this.physicsBody=i,this.barnesHutTree,this.setOptions(n),this._rng=ah(\"BARNES HUT SOLVER\")}return Fn(t,[{key:\"setOptions\",value:function(t){this.options=t,this.thetaInversed=1/this.options.theta,this.overlapAvoidanceFactor=1-Math.max(0,Math.min(1,this.options.avoidOverlap))}},{key:\"solve\",value:function(){if(0!==this.options.gravitationalConstant&&this.physicsBody.physicsNodeIndices.length>0){var t,e=this.body.nodes,i=this.physicsBody.physicsNodeIndices,n=i.length,o=this._formBarnesHutTree(e,i);this.barnesHutTree=o;for(var r=0;r<n;r++)(t=e[i[r]]).options.mass>0&&this._getForceContributions(o.root,t)}}},{key:\"_getForceContributions\",value:function(t,e){this._getForceContribution(t.children.NW,e),this._getForceContribution(t.children.NE,e),this._getForceContribution(t.children.SW,e),this._getForceContribution(t.children.SE,e)}},{key:\"_getForceContribution\",value:function(t,e){if(t.childrenCount>0){var i=t.centerOfMass.x-e.x,n=t.centerOfMass.y-e.y,o=Math.sqrt(i*i+n*n);o*t.calcSize>this.thetaInversed?this._calculateForces(o,i,n,e,t):4===t.childrenCount?this._getForceContributions(t,e):t.children.data.id!=e.id&&this._calculateForces(o,i,n,e,t)}}},{key:\"_calculateForces\",value:function(t,e,i,n,o){0===t&&(e=t=.1),this.overlapAvoidanceFactor<1&&n.shape.radius&&(t=Math.max(.1+this.overlapAvoidanceFactor*n.shape.radius,t-n.shape.radius));var r=this.options.gravitationalConstant*o.mass*n.options.mass/Math.pow(t,3),s=e*r,a=i*r;this.physicsBody.forces[n.id].x+=s,this.physicsBody.forces[n.id].y+=a}},{key:\"_formBarnesHutTree\",value:function(t,e){for(var i,n=e.length,o=t[e[0]].x,r=t[e[0]].y,s=t[e[0]].x,a=t[e[0]].y,h=1;h<n;h++){var l=t[e[h]],d=l.x,c=l.y;l.options.mass>0&&(d<o&&(o=d),d>s&&(s=d),c<r&&(r=c),c>a&&(a=c))}var u=Math.abs(s-o)-Math.abs(a-r);u>0?(r-=.5*u,a+=.5*u):(o+=.5*u,s-=.5*u);var f=Math.max(1e-5,Math.abs(s-o)),p=.5*f,v=.5*(o+s),g=.5*(r+a),y={root:{centerOfMass:{x:0,y:0},mass:0,range:{minX:v-p,maxX:v+p,minY:g-p,maxY:g+p},size:f,calcSize:1/f,children:{data:null},maxWidth:0,level:0,childrenCount:4}};this._splitBranch(y.root);for(var m=0;m<n;m++)(i=t[e[m]]).options.mass>0&&this._placeInTree(y.root,i);return y}},{key:\"_updateBranchMass\",value:function(t,e){var i=t.centerOfMass,n=t.mass+e.options.mass,o=1/n;i.x=i.x*t.mass+e.x*e.options.mass,i.x*=o,i.y=i.y*t.mass+e.y*e.options.mass,i.y*=o,t.mass=n;var r=Math.max(Math.max(e.height,e.radius),e.width);t.maxWidth=t.maxWidth<r?r:t.maxWidth}},{key:\"_placeInTree\",value:function(t,e,i){1==i&&void 0!==i||this._updateBranchMass(t,e);var n,o=t.children.NW.range;n=o.maxX>e.x?o.maxY>e.y?\"NW\":\"SW\":o.maxY>e.y?\"NE\":\"SE\",this._placeInRegion(t,e,n)}},{key:\"_placeInRegion\",value:function(t,e,i){var n=t.children[i];switch(n.childrenCount){case 0:n.children.data=e,n.childrenCount=1,this._updateBranchMass(n,e);break;case 1:n.children.data.x===e.x&&n.children.data.y===e.y?(e.x+=this._rng(),e.y+=this._rng()):(this._splitBranch(n),this._placeInTree(n,e));break;case 4:this._placeInTree(n,e)}}},{key:\"_splitBranch\",value:function(t){var e=null;1===t.childrenCount&&(e=t.children.data,t.mass=0,t.centerOfMass.x=0,t.centerOfMass.y=0),t.childrenCount=4,t.children.data=null,this._insertRegion(t,\"NW\"),this._insertRegion(t,\"NE\"),this._insertRegion(t,\"SW\"),this._insertRegion(t,\"SE\"),null!=e&&this._placeInTree(t,e)}},{key:\"_insertRegion\",value:function(t,e){var i,n,o,r,s=.5*t.size;switch(e){case\"NW\":i=t.range.minX,n=t.range.minX+s,o=t.range.minY,r=t.range.minY+s;break;case\"NE\":i=t.range.minX+s,n=t.range.maxX,o=t.range.minY,r=t.range.minY+s;break;case\"SW\":i=t.range.minX,n=t.range.minX+s,o=t.range.minY+s,r=t.range.maxY;break;case\"SE\":i=t.range.minX+s,n=t.range.maxX,o=t.range.minY+s,r=t.range.maxY}t.children[e]={centerOfMass:{x:0,y:0},mass:0,range:{minX:i,maxX:n,minY:o,maxY:r},size:.5*t.size,calcSize:2*t.calcSize,children:{data:null},maxWidth:0,level:t.level+1,childrenCount:0}}},{key:\"_debug\",value:function(t,e){void 0!==this.barnesHutTree&&(t.lineWidth=1,this._drawBranch(this.barnesHutTree.root,t,e))}},{key:\"_drawBranch\",value:function(t,e,i){void 0===i&&(i=\"#FF0000\"),4===t.childrenCount&&(this._drawBranch(t.children.NW,e),this._drawBranch(t.children.NE,e),this._drawBranch(t.children.SE,e),this._drawBranch(t.children.SW,e)),e.strokeStyle=i,e.beginPath(),e.moveTo(t.range.minX,t.range.minY),e.lineTo(t.range.maxX,t.range.minY),e.stroke(),e.beginPath(),e.moveTo(t.range.maxX,t.range.minY),e.lineTo(t.range.maxX,t.range.maxY),e.stroke(),e.beginPath(),e.moveTo(t.range.maxX,t.range.maxY),e.lineTo(t.range.minX,t.range.maxY),e.stroke(),e.beginPath(),e.moveTo(t.range.minX,t.range.maxY),e.lineTo(t.range.minX,t.range.minY),e.stroke()}}]),t}(),op=function(){function t(e,i,n){Nn(this,t),this._rng=ah(\"REPULSION SOLVER\"),this.body=e,this.physicsBody=i,this.setOptions(n)}return Fn(t,[{key:\"setOptions\",value:function(t){this.options=t}},{key:\"solve\",value:function(){for(var t,e,i,n,o,r,s,a,h=this.body.nodes,l=this.physicsBody.physicsNodeIndices,d=this.physicsBody.forces,c=this.options.nodeDistance,u=-2/3/c,f=0;f<l.length-1;f++){s=h[l[f]];for(var p=f+1;p<l.length;p++)t=(a=h[l[p]]).x-s.x,e=a.y-s.y,0===(i=Math.sqrt(t*t+e*e))&&(t=i=.1*this._rng()),i<2*c&&(r=i<.5*c?1:u*i+1.3333333333333333,n=t*(r/=i),o=e*r,d[s.id].x-=n,d[s.id].y-=o,d[a.id].x+=n,d[a.id].y+=o)}}}]),t}(),rp=function(){function t(e,i,n){Nn(this,t),this.body=e,this.physicsBody=i,this.setOptions(n)}return Fn(t,[{key:\"setOptions\",value:function(t){this.options=t,this.overlapAvoidanceFactor=Math.max(0,Math.min(1,this.options.avoidOverlap||0))}},{key:\"solve\",value:function(){for(var t=this.body.nodes,e=this.physicsBody.physicsNodeIndices,i=this.physicsBody.forces,n=this.options.nodeDistance,o=0;o<e.length-1;o++)for(var r=t[e[o]],s=o+1;s<e.length;s++){var a=t[e[s]];if(r.level===a.level){var h=n+this.overlapAvoidanceFactor*((r.shape.radius||0)/2+(a.shape.radius||0)/2),l=a.x-r.x,d=a.y-r.y,c=Math.sqrt(l*l+d*d),u=void 0;u=c<h?-Math.pow(.05*c,2)+Math.pow(.05*h,2):0,0!==c&&(u/=c);var f=l*u,p=d*u;i[r.id].x-=f,i[r.id].y-=p,i[a.id].x+=f,i[a.id].y+=p}}}}]),t}(),sp=function(){function t(e,i,n){Nn(this,t),this.body=e,this.physicsBody=i,this.setOptions(n)}return Fn(t,[{key:\"setOptions\",value:function(t){this.options=t}},{key:\"solve\",value:function(){for(var t,e,i,n,o,r=this.physicsBody.physicsEdgeIndices,s=this.body.edges,a=0;a<r.length;a++)!0===(e=s[r[a]]).connected&&e.toId!==e.fromId&&void 0!==this.body.nodes[e.toId]&&void 0!==this.body.nodes[e.fromId]&&(void 0!==e.edgeType.via?(t=void 0===e.options.length?this.options.springLength:e.options.length,i=e.to,n=e.edgeType.via,o=e.from,this._calculateSpringForce(i,n,.5*t),this._calculateSpringForce(n,o,.5*t)):(t=void 0===e.options.length?1.5*this.options.springLength:e.options.length,this._calculateSpringForce(e.from,e.to,t)))}},{key:\"_calculateSpringForce\",value:function(t,e,i){var n=t.x-e.x,o=t.y-e.y,r=Math.max(Math.sqrt(n*n+o*o),.01),s=this.options.springConstant*(i-r)/r,a=n*s,h=o*s;void 0!==this.physicsBody.forces[t.id]&&(this.physicsBody.forces[t.id].x+=a,this.physicsBody.forces[t.id].y+=h),void 0!==this.physicsBody.forces[e.id]&&(this.physicsBody.forces[e.id].x-=a,this.physicsBody.forces[e.id].y-=h)}}]),t}(),ap=function(){function t(e,i,n){Nn(this,t),this.body=e,this.physicsBody=i,this.setOptions(n)}return Fn(t,[{key:\"setOptions\",value:function(t){this.options=t}},{key:\"solve\",value:function(){for(var t,e,i,n,o,r,s,a,h,l,d=this.body.edges,c=.5,u=this.physicsBody.physicsEdgeIndices,f=this.physicsBody.physicsNodeIndices,p=this.physicsBody.forces,v=0;v<f.length;v++){var g=f[v];p[g].springFx=0,p[g].springFy=0}for(var y=0;y<u.length;y++)!0===(e=d[u[y]]).connected&&(t=void 0===e.options.length?this.options.springLength:e.options.length,i=e.from.x-e.to.x,n=e.from.y-e.to.y,a=0===(a=Math.sqrt(i*i+n*n))?.01:a,o=i*(s=this.options.springConstant*(t-a)/a),r=n*s,e.to.level!=e.from.level?(void 0!==p[e.toId]&&(p[e.toId].springFx-=o,p[e.toId].springFy-=r),void 0!==p[e.fromId]&&(p[e.fromId].springFx+=o,p[e.fromId].springFy+=r)):(void 0!==p[e.toId]&&(p[e.toId].x-=c*o,p[e.toId].y-=c*r),void 0!==p[e.fromId]&&(p[e.fromId].x+=c*o,p[e.fromId].y+=c*r)));s=1;for(var m=0;m<f.length;m++){var b=f[m];h=Math.min(s,Math.max(-s,p[b].springFx)),l=Math.min(s,Math.max(-s,p[b].springFy)),p[b].x+=h,p[b].y+=l}for(var w=0,k=0,_=0;_<f.length;_++){var x=f[_];w+=p[x].x,k+=p[x].y}for(var E=w/f.length,O=k/f.length,C=0;C<f.length;C++){var S=f[C];p[S].x-=E,p[S].y-=O}}}]),t}(),hp=function(){function t(e,i,n){Nn(this,t),this.body=e,this.physicsBody=i,this.setOptions(n)}return Fn(t,[{key:\"setOptions\",value:function(t){this.options=t}},{key:\"solve\",value:function(){for(var t,e,i,n,o=this.body.nodes,r=this.physicsBody.physicsNodeIndices,s=this.physicsBody.forces,a=0;a<r.length;a++){t=-(n=o[r[a]]).x,e=-n.y,i=Math.sqrt(t*t+e*e),this._calculateForces(i,t,e,s,n)}}},{key:\"_calculateForces\",value:function(t,e,i,n,o){var r=0===t?0:this.options.centralGravity/t;n[o.id].x=e*r,n[o.id].y=i*r}}]),t}();function lp(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var dp=function(t){Ad(i,t);var e=lp(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o))._rng=ah(\"FORCE ATLAS 2 BASED REPULSION SOLVER\"),r}return Fn(i,[{key:\"_calculateForces\",value:function(t,e,i,n,o){0===t&&(e=t=.1*this._rng()),this.overlapAvoidanceFactor<1&&n.shape.radius&&(t=Math.max(.1+this.overlapAvoidanceFactor*n.shape.radius,t-n.shape.radius));var r=n.edges.length+1,s=this.options.gravitationalConstant*o.mass*n.options.mass*r/Math.pow(t,2),a=e*s,h=i*s;this.physicsBody.forces[n.id].x+=a,this.physicsBody.forces[n.id].y+=h}}]),i}(np);function cp(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var up=function(t){Ad(i,t);var e=cp(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"_calculateForces\",value:function(t,e,i,n,o){if(t>0){var r=o.edges.length+1,s=this.options.centralGravity*r*o.options.mass;n[o.id].x=e*s,n[o.id].y=i*s}}}]),i}(hp),fp=function(){function t(e){Nn(this,t),this.body=e,this.physicsBody={physicsNodeIndices:[],physicsEdgeIndices:[],forces:{},velocities:{}},this.physicsEnabled=!0,this.simulationInterval=1e3/60,this.requiresTimeout=!0,this.previousStates={},this.referenceState={},this.freezeCache={},this.renderTimer=void 0,this.adaptiveTimestep=!1,this.adaptiveTimestepEnabled=!1,this.adaptiveCounter=0,this.adaptiveInterval=3,this.stabilized=!1,this.startedStabilization=!1,this.stabilizationIterations=0,this.ready=!1,this.options={},this.defaultOptions={enabled:!0,barnesHut:{theta:.5,gravitationalConstant:-2e3,centralGravity:.3,springLength:95,springConstant:.04,damping:.09,avoidOverlap:0},forceAtlas2Based:{theta:.5,gravitationalConstant:-50,centralGravity:.01,springConstant:.08,springLength:100,damping:.4,avoidOverlap:0},repulsion:{centralGravity:.2,springLength:200,springConstant:.05,nodeDistance:100,damping:.09,avoidOverlap:0},hierarchicalRepulsion:{centralGravity:0,springLength:100,springConstant:.01,nodeDistance:120,damping:.09},maxVelocity:50,minVelocity:.75,solver:\"barnesHut\",stabilization:{enabled:!0,iterations:1e3,updateInterval:50,onlyDynamicEdges:!1,fit:!0},timestep:.5,adaptiveTimestep:!0,wind:{x:0,y:0}},At(this.options,this.defaultOptions),this.timestep=.5,this.layoutFailed=!1,this.bindEventListeners()}return Fn(t,[{key:\"bindEventListeners\",value:function(){var t=this;this.body.emitter.on(\"initPhysics\",(function(){t.initPhysics()})),this.body.emitter.on(\"_layoutFailed\",(function(){t.layoutFailed=!0})),this.body.emitter.on(\"resetPhysics\",(function(){t.stopSimulation(),t.ready=!1})),this.body.emitter.on(\"disablePhysics\",(function(){t.physicsEnabled=!1,t.stopSimulation()})),this.body.emitter.on(\"restorePhysics\",(function(){t.setOptions(t.options),!0===t.ready&&t.startSimulation()})),this.body.emitter.on(\"startSimulation\",(function(){!0===t.ready&&t.startSimulation()})),this.body.emitter.on(\"stopSimulation\",(function(){t.stopSimulation()})),this.body.emitter.on(\"destroy\",(function(){t.stopSimulation(!1),t.body.emitter.off()})),this.body.emitter.on(\"_dataChanged\",(function(){t.updatePhysicsData()}))}},{key:\"setOptions\",value:function(t){if(void 0!==t)if(!1===t)this.options.enabled=!1,this.physicsEnabled=!1,this.stopSimulation();else if(!0===t)this.options.enabled=!0,this.physicsEnabled=!0,this.startSimulation();else{this.physicsEnabled=!0,Oh([\"stabilization\"],this.options,t),$h(this.options,t,\"stabilization\"),void 0===t.enabled&&(this.options.enabled=!0),!1===this.options.enabled&&(this.physicsEnabled=!1,this.stopSimulation());var e=this.options.wind;e&&((\"number\"!=typeof e.x||yd(e.x))&&(e.x=0),(\"number\"!=typeof e.y||yd(e.y))&&(e.y=0)),this.timestep=this.options.timestep}this.init()}},{key:\"init\",value:function(){var t;\"forceAtlas2Based\"===this.options.solver?(t=this.options.forceAtlas2Based,this.nodesSolver=new dp(this.body,this.physicsBody,t),this.edgesSolver=new sp(this.body,this.physicsBody,t),this.gravitySolver=new up(this.body,this.physicsBody,t)):\"repulsion\"===this.options.solver?(t=this.options.repulsion,this.nodesSolver=new op(this.body,this.physicsBody,t),this.edgesSolver=new sp(this.body,this.physicsBody,t),this.gravitySolver=new hp(this.body,this.physicsBody,t)):\"hierarchicalRepulsion\"===this.options.solver?(t=this.options.hierarchicalRepulsion,this.nodesSolver=new rp(this.body,this.physicsBody,t),this.edgesSolver=new ap(this.body,this.physicsBody,t),this.gravitySolver=new hp(this.body,this.physicsBody,t)):(t=this.options.barnesHut,this.nodesSolver=new np(this.body,this.physicsBody,t),this.edgesSolver=new sp(this.body,this.physicsBody,t),this.gravitySolver=new hp(this.body,this.physicsBody,t)),this.modelOptions=t}},{key:\"initPhysics\",value:function(){!0===this.physicsEnabled&&!0===this.options.enabled?!0===this.options.stabilization.enabled?this.stabilize():(this.stabilized=!1,this.ready=!0,this.body.emitter.emit(\"fit\",{},this.layoutFailed),this.startSimulation()):(this.ready=!0,this.body.emitter.emit(\"fit\"))}},{key:\"startSimulation\",value:function(){var t;!0===this.physicsEnabled&&!0===this.options.enabled?(this.stabilized=!1,this.adaptiveTimestep=!1,this.body.emitter.emit(\"_resizeNodes\"),void 0===this.viewFunction&&(this.viewFunction=Vt(t=this.simulationStep).call(t,this),this.body.emitter.on(\"initRedraw\",this.viewFunction),this.body.emitter.emit(\"_startRendering\"))):this.body.emitter.emit(\"_redraw\")}},{key:\"stopSimulation\",value:function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.stabilized=!0,!0===t&&this._emitStabilized(),void 0!==this.viewFunction&&(this.body.emitter.off(\"initRedraw\",this.viewFunction),this.viewFunction=void 0,!0===t&&this.body.emitter.emit(\"_stopRendering\"))}},{key:\"simulationStep\",value:function(){var t=No();this.physicsTick(),(No()-t<.4*this.simulationInterval||!0===this.runDoubleSpeed)&&!1===this.stabilized&&(this.physicsTick(),this.runDoubleSpeed=!0),!0===this.stabilized&&this.stopSimulation()}},{key:\"_emitStabilized\",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.stabilizationIterations;(this.stabilizationIterations>1||!0===this.startedStabilization)&&rs((function(){t.body.emitter.emit(\"stabilized\",{iterations:e}),t.startedStabilization=!1,t.stabilizationIterations=0}),0)}},{key:\"physicsStep\",value:function(){this.gravitySolver.solve(),this.nodesSolver.solve(),this.edgesSolver.solve(),this.moveNodes()}},{key:\"adjustTimeStep\",value:function(){!0===this._evaluateStepQuality()?this.timestep=1.2*this.timestep:this.timestep/1.2<this.options.timestep?this.timestep=this.options.timestep:(this.adaptiveCounter=-1,this.timestep=Math.max(this.options.timestep,this.timestep/1.2))}},{key:\"physicsTick\",value:function(){if(this._startStabilizing(),!0!==this.stabilized){if(!0===this.adaptiveTimestep&&!0===this.adaptiveTimestepEnabled)this.adaptiveCounter%this.adaptiveInterval==0?(this.timestep=2*this.timestep,this.physicsStep(),this.revert(),this.timestep=.5*this.timestep,this.physicsStep(),this.physicsStep(),this.adjustTimeStep()):this.physicsStep(),this.adaptiveCounter+=1;else this.timestep=this.options.timestep,this.physicsStep();!0===this.stabilized&&this.revert(),this.stabilizationIterations++}}},{key:\"updatePhysicsData\",value:function(){this.physicsBody.forces={},this.physicsBody.physicsNodeIndices=[],this.physicsBody.physicsEdgeIndices=[];var t=this.body.nodes,e=this.body.edges;for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&!0===t[i].options.physics&&this.physicsBody.physicsNodeIndices.push(t[i].id);for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&!0===e[n].options.physics&&this.physicsBody.physicsEdgeIndices.push(e[n].id);for(var o=0;o<this.physicsBody.physicsNodeIndices.length;o++){var r=this.physicsBody.physicsNodeIndices[o];this.physicsBody.forces[r]={x:0,y:0},void 0===this.physicsBody.velocities[r]&&(this.physicsBody.velocities[r]={x:0,y:0})}for(var s in this.physicsBody.velocities)void 0===t[s]&&delete this.physicsBody.velocities[s]}},{key:\"revert\",value:function(){var t=zo(this.previousStates),e=this.body.nodes,i=this.physicsBody.velocities;this.referenceState={};for(var n=0;n<t.length;n++){var o=t[n];void 0!==e[o]?!0===e[o].options.physics&&(this.referenceState[o]={positions:{x:e[o].x,y:e[o].y}},i[o].x=this.previousStates[o].vx,i[o].y=this.previousStates[o].vy,e[o].x=this.previousStates[o].x,e[o].y=this.previousStates[o].y):delete this.previousStates[o]}}},{key:\"_evaluateStepQuality\",value:function(){var t,e,i=this.body.nodes,n=this.referenceState;for(var o in this.referenceState)if(Object.prototype.hasOwnProperty.call(this.referenceState,o)&&void 0!==i[o]&&(t=i[o].x-n[o].positions.x,e=i[o].y-n[o].positions.y,Math.sqrt(Math.pow(t,2)+Math.pow(e,2))>.3))return!1;return!0}},{key:\"moveNodes\",value:function(){for(var t=this.physicsBody.physicsNodeIndices,e=0,i=0,n=0;n<t.length;n++){var o=t[n],r=this._performStep(o);e=Math.max(e,r),i+=r}this.adaptiveTimestepEnabled=i/t.length<5,this.stabilized=e<this.options.minVelocity}},{key:\"calculateComponentVelocity\",value:function(t,e,i){t+=(e-this.modelOptions.damping*t)/i*this.timestep;var n=this.options.maxVelocity||1e9;return Math.abs(t)>n&&(t=t>0?n:-n),t}},{key:\"_performStep\",value:function(t){var e=this.body.nodes[t],i=this.physicsBody.forces[t];this.options.wind&&(i.x+=this.options.wind.x,i.y+=this.options.wind.y);var n=this.physicsBody.velocities[t];return this.previousStates[t]={x:e.x,y:e.y,vx:n.x,vy:n.y},!1===e.options.fixed.x?(n.x=this.calculateComponentVelocity(n.x,i.x,e.options.mass),e.x+=n.x*this.timestep):(i.x=0,n.x=0),!1===e.options.fixed.y?(n.y=this.calculateComponentVelocity(n.y,i.y,e.options.mass),e.y+=n.y*this.timestep):(i.y=0,n.y=0),Math.sqrt(Math.pow(n.x,2)+Math.pow(n.y,2))}},{key:\"_freezeNodes\",value:function(){var t=this.body.nodes;for(var e in t)if(Object.prototype.hasOwnProperty.call(t,e)&&t[e].x&&t[e].y){var i=t[e].options.fixed;this.freezeCache[e]={x:i.x,y:i.y},i.x=!0,i.y=!0}}},{key:\"_restoreFrozenNodes\",value:function(){var t=this.body.nodes;for(var e in t)Object.prototype.hasOwnProperty.call(t,e)&&void 0!==this.freezeCache[e]&&(t[e].options.fixed.x=this.freezeCache[e].x,t[e].options.fixed.y=this.freezeCache[e].y);this.freezeCache={}}},{key:\"stabilize\",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.options.stabilization.iterations;\"number\"!=typeof e&&(e=this.options.stabilization.iterations,console.error(\"The stabilize method needs a numeric amount of iterations. Switching to default: \",e)),0!==this.physicsBody.physicsNodeIndices.length?(this.adaptiveTimestep=this.options.adaptiveTimestep,this.body.emitter.emit(\"_resizeNodes\"),this.stopSimulation(),this.stabilized=!1,this.body.emitter.emit(\"_blockRedraw\"),this.targetIterations=e,!0===this.options.stabilization.onlyDynamicEdges&&this._freezeNodes(),this.stabilizationIterations=0,rs((function(){return t._stabilizationBatch()}),0)):this.ready=!0}},{key:\"_startStabilizing\",value:function(){return!0!==this.startedStabilization&&(this.body.emitter.emit(\"startStabilizing\"),this.startedStabilization=!0,!0)}},{key:\"_stabilizationBatch\",value:function(){var t=this,e=function(){return!1===t.stabilized&&t.stabilizationIterations<t.targetIterations},i=function(){t.body.emitter.emit(\"stabilizationProgress\",{iterations:t.stabilizationIterations,total:t.targetIterations})};this._startStabilizing()&&i();for(var n,o=0;e()&&o<this.options.stabilization.updateInterval;)this.physicsTick(),o++;(i(),e())?rs(Vt(n=this._stabilizationBatch).call(n,this),0):this._finalizeStabilization()}},{key:\"_finalizeStabilization\",value:function(){this.body.emitter.emit(\"_allowRedraw\"),!0===this.options.stabilization.fit&&this.body.emitter.emit(\"fit\"),!0===this.options.stabilization.onlyDynamicEdges&&this._restoreFrozenNodes(),this.body.emitter.emit(\"stabilizationIterationsDone\"),this.body.emitter.emit(\"_requestRedraw\"),!0===this.stabilized?this._emitStabilized():this.startSimulation(),this.ready=!0}},{key:\"_drawForces\",value:function(t){for(var e=0;e<this.physicsBody.physicsNodeIndices.length;e++){var i=this.physicsBody.physicsNodeIndices[e],n=this.body.nodes[i],o=this.physicsBody.forces[i],r=Math.sqrt(Math.pow(o.x,2)+Math.pow(o.x,2)),s=Math.min(Math.max(5,r),15),a=3*s,h=Vh((180-180*Math.min(1,Math.max(0,.03*r)))/360,1,1),l={x:n.x+20*o.x,y:n.y+20*o.y};t.lineWidth=s,t.strokeStyle=h,t.beginPath(),t.moveTo(n.x,n.y),t.lineTo(l.x,l.y),t.stroke();var d=Math.atan2(o.y,o.x);t.fillStyle=h,jf.draw(t,{type:\"arrow\",point:l,angle:d,length:a}),hs(t).call(t)}}}]),t}(),pp=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"getRange\",value:function(t){var e,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=1e9,o=-1e9,r=1e9,s=-1e9;if(i.length>0)for(var a=0;a<i.length;a++)r>(e=t[i[a]]).shape.boundingBox.left&&(r=e.shape.boundingBox.left),s<e.shape.boundingBox.right&&(s=e.shape.boundingBox.right),n>e.shape.boundingBox.top&&(n=e.shape.boundingBox.top),o<e.shape.boundingBox.bottom&&(o=e.shape.boundingBox.bottom);return 1e9===r&&-1e9===s&&1e9===n&&-1e9===o&&(n=0,o=0,r=0,s=0),{minX:r,maxX:s,minY:n,maxY:o}}},{key:\"getRangeCore\",value:function(t){var e,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=1e9,o=-1e9,r=1e9,s=-1e9;if(i.length>0)for(var a=0;a<i.length;a++)r>(e=t[i[a]]).x&&(r=e.x),s<e.x&&(s=e.x),n>e.y&&(n=e.y),o<e.y&&(o=e.y);return 1e9===r&&-1e9===s&&1e9===n&&-1e9===o&&(n=0,o=0,r=0,s=0),{minX:r,maxX:s,minY:n,maxY:o}}},{key:\"findCenter\",value:function(t){return{x:.5*(t.maxX+t.minX),y:.5*(t.maxY+t.minY)}}},{key:\"cloneOptions\",value:function(t,e){var i={};return void 0===e||\"node\"===e?(Ch(i,t.options,!0),i.x=t.x,i.y=t.y,i.amountOfConnections=t.edges.length):Ch(i,t.options,!0),i}}]),t}();function vp(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var gp=function(t){Ad(i,t);var e=vp(i);function i(t,n,o,r,s,a){var h;return Nn(this,i),(h=e.call(this,t,n,o,r,s,a)).isCluster=!0,h.containedNodes={},h.containedEdges={},h}return Fn(i,[{key:\"_openChildCluster\",value:function(t){var e=this,i=this.body.nodes[t];if(void 0===this.containedNodes[t])throw new Error(\"node with id: \"+t+\" not in current cluster\");if(!i.isCluster)throw new Error(\"node with id: \"+t+\" is not a cluster\");delete this.containedNodes[t],Dh(i.edges,(function(t){delete e.containedEdges[t.id]})),Dh(i.containedNodes,(function(t,i){e.containedNodes[i]=t})),i.containedNodes={},Dh(i.containedEdges,(function(t,i){e.containedEdges[i]=t})),i.containedEdges={},Dh(i.edges,(function(t){Dh(e.edges,(function(i){var n,o,r=Hr(n=i.clusteringEdgeReplacingIds).call(n,t.id);-1!==r&&(Dh(t.clusteringEdgeReplacingIds,(function(t){i.clusteringEdgeReplacingIds.push(t),e.body.edges[t].edgeReplacedById=i.id})),er(o=i.clusteringEdgeReplacingIds).call(o,r,1))}))})),i.edges=[]}}]),i}(cf),yp=function(){function t(e){var i=this;Nn(this,t),this.body=e,this.clusteredNodes={},this.clusteredEdges={},this.options={},this.defaultOptions={},At(this.options,this.defaultOptions),this.body.emitter.on(\"_resetData\",(function(){i.clusteredNodes={},i.clusteredEdges={}}))}return Fn(t,[{key:\"clusterByHubsize\",value:function(t,e){void 0===t?t=this._getHubSize():\"object\"===go(t)&&(e=this._checkOptions(t),t=this._getHubSize());for(var i=[],n=0;n<this.body.nodeIndices.length;n++){var o=this.body.nodes[this.body.nodeIndices[n]];o.edges.length>=t&&i.push(o.id)}for(var r=0;r<i.length;r++)this.clusterByConnection(i[r],e,!0);this.body.emitter.emit(\"_dataChanged\")}},{key:\"cluster\",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},i=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(void 0===e.joinCondition)throw new Error(\"Cannot call clusterByNodeData without a joinCondition function in the options.\");e=this._checkOptions(e);var n={},o={};Dh(this.body.nodes,(function(i,r){i.options&&!0===e.joinCondition(i.options)&&(n[r]=i,Dh(i.edges,(function(e){void 0===t.clusteredEdges[e.id]&&(o[e.id]=e)})))})),this._cluster(n,o,e,i)}},{key:\"clusterByEdgeCount\",value:function(t,e){var i=this,n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];e=this._checkOptions(e);for(var o,r,s,a=[],h={},l=function(n){var l={},d={},c=i.body.nodeIndices[n],u=i.body.nodes[c];if(void 0===h[c]){s=0,r=[];for(var f=0;f<u.edges.length;f++)o=u.edges[f],void 0===i.clusteredEdges[o.id]&&(o.toId!==o.fromId&&s++,r.push(o));if(s===t){for(var p=function(t){if(void 0===e.joinCondition||null===e.joinCondition)return!0;var i=pp.cloneOptions(t);return e.joinCondition(i)},v=!0,g=0;g<r.length;g++){o=r[g];var y=i._getConnectedId(o,c);if(!p(u)){v=!1;break}d[o.id]=o,l[c]=u,l[y]=i.body.nodes[y],h[c]=!0}if(zo(l).length>0&&zo(d).length>0&&!0===v){var m=function(){for(var t=0;t<a.length;++t)for(var e in l)if(void 0!==a[t].nodes[e])return a[t]}();if(void 0!==m){for(var b in l)void 0===m.nodes[b]&&(m.nodes[b]=l[b]);for(var w in d)void 0===m.edges[w]&&(m.edges[w]=d[w])}else a.push({nodes:l,edges:d})}}}},d=0;d<this.body.nodeIndices.length;d++)l(d);for(var c=0;c<a.length;c++)this._cluster(a[c].nodes,a[c].edges,e,!1);!0===n&&this.body.emitter.emit(\"_dataChanged\")}},{key:\"clusterOutliers\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this.clusterByEdgeCount(1,t,e)}},{key:\"clusterBridges\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this.clusterByEdgeCount(2,t,e)}},{key:\"clusterByConnection\",value:function(t,e){var i,n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];if(void 0===t)throw new Error(\"No nodeId supplied to clusterByConnection!\");if(void 0===this.body.nodes[t])throw new Error(\"The nodeId given to clusterByConnection does not exist!\");var o=this.body.nodes[t];void 0===(e=this._checkOptions(e,o)).clusterNodeProperties.x&&(e.clusterNodeProperties.x=o.x),void 0===e.clusterNodeProperties.y&&(e.clusterNodeProperties.y=o.y),void 0===e.clusterNodeProperties.fixed&&(e.clusterNodeProperties.fixed={},e.clusterNodeProperties.fixed.x=o.options.fixed.x,e.clusterNodeProperties.fixed.y=o.options.fixed.y);var r={},s={},a=o.id,h=pp.cloneOptions(o);r[a]=o;for(var l=0;l<o.edges.length;l++){var d=o.edges[l];if(void 0===this.clusteredEdges[d.id]){var c=this._getConnectedId(d,a);if(void 0===this.clusteredNodes[c])if(c!==a)if(void 0===e.joinCondition)s[d.id]=d,r[c]=this.body.nodes[c];else{var u=pp.cloneOptions(this.body.nodes[c]);!0===e.joinCondition(h,u)&&(s[d.id]=d,r[c]=this.body.nodes[c])}else s[d.id]=d}}var f=Io(i=zo(r)).call(i,(function(t){return r[t].id}));for(var p in r)if(Object.prototype.hasOwnProperty.call(r,p))for(var v=r[p],g=0;g<v.edges.length;g++){var y=v.edges[g];Hr(f).call(f,this._getConnectedId(y,v.id))>-1&&(s[y.id]=y)}this._cluster(r,s,e,n)}},{key:\"_createClusterEdges\",value:function(t,e,i,n){for(var o,r,s,a,h,l,d=zo(t),c=[],u=0;u<d.length;u++){s=t[r=d[u]];for(var f=0;f<s.edges.length;f++)o=s.edges[f],void 0===this.clusteredEdges[o.id]&&(o.toId==o.fromId?e[o.id]=o:o.toId==r?(a=i.id,l=h=o.fromId):(a=o.toId,h=i.id,l=a),void 0===t[l]&&c.push({edge:o,fromId:h,toId:a}))}for(var p=[],v=function(t){for(var e=0;e<p.length;e++){var i=p[e],n=t.fromId===i.fromId&&t.toId===i.toId,o=t.fromId===i.toId&&t.toId===i.fromId;if(n||o)return i}return null},g=0;g<c.length;g++){var y=c[g],m=y.edge,b=v(y);null===b?(b=this._createClusteredEdge(y.fromId,y.toId,m,n),p.push(b)):b.clusteringEdgeReplacingIds.push(m.id),this.body.edges[m.id].edgeReplacedById=b.id,this._backupEdgeOptions(m),m.setOptions({physics:!1})}}},{key:\"_checkOptions\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return void 0===t.clusterEdgeProperties&&(t.clusterEdgeProperties={}),void 0===t.clusterNodeProperties&&(t.clusterNodeProperties={}),t}},{key:\"_cluster\",value:function(t,e,i){var n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],o=[];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&void 0!==this.clusteredNodes[r]&&o.push(r);for(var s=0;s<o.length;++s)delete t[o[s]];if(0!=zo(t).length&&(1!=zo(t).length||1==i.clusterNodeProperties.allowSingleNodeCluster)){var a=Ch({},i.clusterNodeProperties);if(void 0!==i.processProperties){var h=[];for(var l in t)if(Object.prototype.hasOwnProperty.call(t,l)){var d=pp.cloneOptions(t[l]);h.push(d)}var c=[];for(var u in e)if(Object.prototype.hasOwnProperty.call(e,u)&&\"clusterEdge:\"!==u.substr(0,12)){var f=pp.cloneOptions(e[u],\"edge\");c.push(f)}if(!(a=i.processProperties(a,h,c)))throw new Error(\"The processProperties function does not return properties!\")}void 0===a.id&&(a.id=\"cluster:\"+Wc());var p=a.id;void 0===a.label&&(a.label=\"cluster\");var v=void 0;void 0===a.x&&(v=this._getClusterPosition(t),a.x=v.x),void 0===a.y&&(void 0===v&&(v=this._getClusterPosition(t)),a.y=v.y),a.id=p;var g=this.body.functions.createNode(a,gp);g.containedNodes=t,g.containedEdges=e,g.clusterEdgeProperties=i.clusterEdgeProperties,this.body.nodes[a.id]=g,this._clusterEdges(t,e,a,i.clusterEdgeProperties),a.id=void 0,!0===n&&this.body.emitter.emit(\"_dataChanged\")}}},{key:\"_backupEdgeOptions\",value:function(t){void 0===this.clusteredEdges[t.id]&&(this.clusteredEdges[t.id]={physics:t.options.physics})}},{key:\"_restoreEdge\",value:function(t){var e=this.clusteredEdges[t.id];void 0!==e&&(t.setOptions({physics:e.physics}),delete this.clusteredEdges[t.id])}},{key:\"isCluster\",value:function(t){return void 0!==this.body.nodes[t]?!0===this.body.nodes[t].isCluster:(console.error(\"Node does not exist.\"),!1)}},{key:\"_getClusterPosition\",value:function(t){for(var e,i=zo(t),n=t[i[0]].x,o=t[i[0]].x,r=t[i[0]].y,s=t[i[0]].y,a=1;a<i.length;a++)n=(e=t[i[a]]).x<n?e.x:n,o=e.x>o?e.x:o,r=e.y<r?e.y:r,s=e.y>s?e.y:s;return{x:.5*(n+o),y:.5*(r+s)}}},{key:\"openCluster\",value:function(t,e){var i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];if(void 0===t)throw new Error(\"No clusterNodeId supplied to openCluster.\");var n=this.body.nodes[t];if(void 0===n)throw new Error(\"The clusterNodeId supplied to openCluster does not exist.\");if(!0!==n.isCluster||void 0===n.containedNodes||void 0===n.containedEdges)throw new Error(\"The node:\"+t+\" is not a valid cluster.\");var o=this.findNode(t),r=Hr(o).call(o,t)-1;if(r>=0){var s=o[r],a=this.body.nodes[s];return a._openChildCluster(t),delete this.body.nodes[t],void(!0===i&&this.body.emitter.emit(\"_dataChanged\"))}var h=n.containedNodes,l=n.containedEdges;if(void 0!==e&&void 0!==e.releaseFunction&&\"function\"==typeof e.releaseFunction){var d={},c={x:n.x,y:n.y};for(var u in h)if(Object.prototype.hasOwnProperty.call(h,u)){var f=this.body.nodes[u];d[u]={x:f.x,y:f.y}}var p=e.releaseFunction(c,d);for(var v in h)if(Object.prototype.hasOwnProperty.call(h,v)){var g=this.body.nodes[v];void 0!==p[v]&&(g.x=void 0===p[v].x?n.x:p[v].x,g.y=void 0===p[v].y?n.y:p[v].y)}}else Dh(h,(function(t){!1===t.options.fixed.x&&(t.x=n.x),!1===t.options.fixed.y&&(t.y=n.y)}));for(var y in h)if(Object.prototype.hasOwnProperty.call(h,y)){var m=this.body.nodes[y];m.vx=n.vx,m.vy=n.vy,m.setOptions({physics:!0}),delete this.clusteredNodes[y]}for(var b=[],w=0;w<n.edges.length;w++)b.push(n.edges[w]);for(var k=0;k<b.length;k++){for(var _=b[k],x=this._getConnectedId(_,t),E=this.clusteredNodes[x],O=0;O<_.clusteringEdgeReplacingIds.length;O++){var C=_.clusteringEdgeReplacingIds[O],S=this.body.edges[C];if(void 0!==S)if(void 0!==E){var T=this.body.nodes[E.clusterId];T.containedEdges[S.id]=S,delete l[S.id];var M=S.fromId,P=S.toId;S.toId==x?P=E.clusterId:M=E.clusterId,this._createClusteredEdge(M,P,S,T.clusterEdgeProperties,{hidden:!1,physics:!0})}else this._restoreEdge(S)}_.remove()}for(var D in l)Object.prototype.hasOwnProperty.call(l,D)&&this._restoreEdge(l[D]);delete this.body.nodes[t],!0===i&&this.body.emitter.emit(\"_dataChanged\")}},{key:\"getNodesInCluster\",value:function(t){var e=[];if(!0===this.isCluster(t)){var i=this.body.nodes[t].containedNodes;for(var n in i)Object.prototype.hasOwnProperty.call(i,n)&&e.push(this.body.nodes[n].id)}return e}},{key:\"findNode\",value:function(t){for(var e,i=[],n=0;void 0!==this.clusteredNodes[t]&&n<100;){if(void 0===(e=this.body.nodes[t]))return[];i.push(e.id),t=this.clusteredNodes[t].clusterId,n++}return void 0===(e=this.body.nodes[t])?[]:(i.push(e.id),Xo(i).call(i),i)}},{key:\"updateClusteredNode\",value:function(t,e){if(void 0===t)throw new Error(\"No clusteredNodeId supplied to updateClusteredNode.\");if(void 0===e)throw new Error(\"No newOptions supplied to updateClusteredNode.\");if(void 0===this.body.nodes[t])throw new Error(\"The clusteredNodeId supplied to updateClusteredNode does not exist.\");this.body.nodes[t].setOptions(e),this.body.emitter.emit(\"_dataChanged\")}},{key:\"updateEdge\",value:function(t,e){if(void 0===t)throw new Error(\"No startEdgeId supplied to updateEdge.\");if(void 0===e)throw new Error(\"No newOptions supplied to updateEdge.\");if(void 0===this.body.edges[t])throw new Error(\"The startEdgeId supplied to updateEdge does not exist.\");for(var i=this.getClusteredEdges(t),n=0;n<i.length;n++){this.body.edges[i[n]].setOptions(e)}this.body.emitter.emit(\"_dataChanged\")}},{key:\"getClusteredEdges\",value:function(t){for(var e=[],i=0;void 0!==t&&void 0!==this.body.edges[t]&&i<100;)e.push(this.body.edges[t].id),t=this.body.edges[t].edgeReplacedById,i++;return Xo(e).call(e),e}},{key:\"getBaseEdge\",value:function(t){return this.getBaseEdges(t)[0]}},{key:\"getBaseEdges\",value:function(t){for(var e=[t],i=[],n=[],o=0;e.length>0&&o<100;){var r=e.pop();if(void 0!==r){var s=this.body.edges[r];if(void 0!==s){o++;var a=s.clusteringEdgeReplacingIds;if(void 0===a)n.push(r);else for(var h=0;h<a.length;++h){var l=a[h];-1===Hr(e).call(e,a)&&-1===Hr(i).call(i,a)&&e.push(l)}i.push(r)}}}return n}},{key:\"_getConnectedId\",value:function(t,e){return t.toId!=e?t.toId:(t.fromId,t.fromId)}},{key:\"_getHubSize\",value:function(){for(var t=0,e=0,i=0,n=0,o=0;o<this.body.nodeIndices.length;o++){var r=this.body.nodes[this.body.nodeIndices[o]];r.edges.length>n&&(n=r.edges.length),t+=r.edges.length,e+=Math.pow(r.edges.length,2),i+=1}t/=i;var s=(e/=i)-Math.pow(t,2),a=Math.sqrt(s),h=Math.floor(t+2*a);return h>n&&(h=n),h}},{key:\"_createClusteredEdge\",value:function(t,e,i,n,o){var r=pp.cloneOptions(i,\"edge\");Ch(r,n),r.from=t,r.to=e,r.id=\"clusterEdge:\"+Wc(),void 0!==o&&Ch(r,o);var s=this.body.functions.createEdge(r);return s.clusteringEdgeReplacingIds=[i.id],s.connect(),this.body.edges[s.id]=s,s}},{key:\"_clusterEdges\",value:function(t,e,i,n){if(e instanceof ep){var o=e,r={};r[o.id]=o,e=r}if(t instanceof cf){var s=t,a={};a[s.id]=s,t=a}if(null==i)throw new Error(\"_clusterEdges: parameter clusterNode required\");for(var h in void 0===n&&(n=i.clusterEdgeProperties),this._createClusterEdges(t,e,i,n),e)if(Object.prototype.hasOwnProperty.call(e,h)&&void 0!==this.body.edges[h]){var l=this.body.edges[h];this._backupEdgeOptions(l),l.setOptions({physics:!1})}for(var d in t)Object.prototype.hasOwnProperty.call(t,d)&&(this.clusteredNodes[d]={clusterId:i.id,node:this.body.nodes[d]},this.body.nodes[d].setOptions({physics:!1}))}},{key:\"_getClusterNodeForNode\",value:function(t){if(void 0!==t){var e=this.clusteredNodes[t];if(void 0!==e){var i=e.clusterId;if(void 0!==i)return this.body.nodes[i]}}}},{key:\"_filter\",value:function(t,e){var i=[];return Dh(t,(function(t){e(t)&&i.push(t)})),i}},{key:\"_updateState\",value:function(){var t,e=this,i=[],n={},o=function(t){Dh(e.body.nodes,(function(e){!0===e.isCluster&&t(e)}))};for(t in this.clusteredNodes){if(Object.prototype.hasOwnProperty.call(this.clusteredNodes,t))void 0===this.body.nodes[t]&&i.push(t)}o((function(t){for(var e=0;e<i.length;e++)delete t.containedNodes[i[e]]}));for(var r=0;r<i.length;r++)delete this.clusteredNodes[i[r]];Dh(this.clusteredEdges,(function(t){var i=e.body.edges[t];void 0!==i&&i.endPointsValid()||(n[t]=t)})),o((function(t){Dh(t.containedEdges,(function(t,e){t.endPointsValid()||n[e]||(n[e]=e)}))})),Dh(this.body.edges,(function(t,i){var o=!0,r=t.clusteringEdgeReplacingIds;if(void 0!==r){var s=0;Dh(r,(function(t){var i=e.body.edges[t];void 0!==i&&i.endPointsValid()&&(s+=1)})),o=s>0}t.endPointsValid()&&o||(n[i]=i)})),o((function(t){Dh(n,(function(i){delete t.containedEdges[i],Dh(t.edges,(function(o,r){o.id!==i?o.clusteringEdgeReplacingIds=e._filter(o.clusteringEdgeReplacingIds,(function(t){return!n[t]})):t.edges[r]=null})),t.edges=e._filter(t.edges,(function(t){return null!==t}))}))})),Dh(n,(function(t){delete e.clusteredEdges[t]})),Dh(n,(function(t){delete e.body.edges[t]})),Dh(zo(this.body.edges),(function(t){var i=e.body.edges[t],n=e._isClusteredNode(i.fromId)||e._isClusteredNode(i.toId);if(n!==e._isClusteredEdge(i.id))if(n){var o=e._getClusterNodeForNode(i.fromId);void 0!==o&&e._clusterEdges(e.body.nodes[i.fromId],i,o);var r=e._getClusterNodeForNode(i.toId);void 0!==r&&e._clusterEdges(e.body.nodes[i.toId],i,r)}else delete e._clusterEdges[t],e._restoreEdge(i)}));for(var s=!1,a=!0,h=function(){var t=[];o((function(e){var i=zo(e.containedNodes).length,n=!0===e.options.allowSingleNodeCluster;(n&&i<1||!n&&i<2)&&t.push(e.id)}));for(var i=0;i<t.length;++i)e.openCluster(t[i],{},!1);a=t.length>0,s=s||a};a;)h();s&&this._updateState()}},{key:\"_isClusteredNode\",value:function(t){return void 0!==this.clusteredNodes[t]}},{key:\"_isClusteredEdge\",value:function(t){return void 0!==this.clusteredEdges[t]}}]),t}();function mp(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return bp(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return bp(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function bp(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}var wp=function(){function t(e,i){var n;Nn(this,t),void 0!==window&&(n=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame),window.requestAnimationFrame=void 0===n?function(t){t()}:n,this.body=e,this.canvas=i,this.redrawRequested=!1,this.renderTimer=void 0,this.requiresTimeout=!0,this.renderingActive=!1,this.renderRequests=0,this.allowRedraw=!0,this.dragging=!1,this.zooming=!1,this.options={},this.defaultOptions={hideEdgesOnDrag:!1,hideEdgesOnZoom:!1,hideNodesOnDrag:!1},At(this.options,this.defaultOptions),this._determineBrowserMethod(),this.bindEventListeners()}return Fn(t,[{key:\"bindEventListeners\",value:function(){var t,e=this;this.body.emitter.on(\"dragStart\",(function(){e.dragging=!0})),this.body.emitter.on(\"dragEnd\",(function(){e.dragging=!1})),this.body.emitter.on(\"zoom\",(function(){e.zooming=!0,window.clearTimeout(e.zoomTimeoutId),e.zoomTimeoutId=rs((function(){var t;e.zooming=!1,Vt(t=e._requestRedraw).call(t,e)()}),250)})),this.body.emitter.on(\"_resizeNodes\",(function(){e._resizeNodes()})),this.body.emitter.on(\"_redraw\",(function(){!1===e.renderingActive&&e._redraw()})),this.body.emitter.on(\"_blockRedraw\",(function(){e.allowRedraw=!1})),this.body.emitter.on(\"_allowRedraw\",(function(){e.allowRedraw=!0,e.redrawRequested=!1})),this.body.emitter.on(\"_requestRedraw\",Vt(t=this._requestRedraw).call(t,this)),this.body.emitter.on(\"_startRendering\",(function(){e.renderRequests+=1,e.renderingActive=!0,e._startRendering()})),this.body.emitter.on(\"_stopRendering\",(function(){e.renderRequests-=1,e.renderingActive=e.renderRequests>0,e.renderTimer=void 0})),this.body.emitter.on(\"destroy\",(function(){e.renderRequests=0,e.allowRedraw=!1,e.renderingActive=!1,!0===e.requiresTimeout?clearTimeout(e.renderTimer):window.cancelAnimationFrame(e.renderTimer),e.body.emitter.off()}))}},{key:\"setOptions\",value:function(t){if(void 0!==t){Eh([\"hideEdgesOnDrag\",\"hideEdgesOnZoom\",\"hideNodesOnDrag\"],this.options,t)}}},{key:\"_requestNextFrame\",value:function(t,e){if(\"undefined\"!=typeof window){var i,n=window;return!0===this.requiresTimeout?i=rs(t,e):n.requestAnimationFrame&&(i=n.requestAnimationFrame(t)),i}}},{key:\"_startRendering\",value:function(){var t;!0===this.renderingActive&&(void 0===this.renderTimer&&(this.renderTimer=this._requestNextFrame(Vt(t=this._renderStep).call(t,this),this.simulationInterval)))}},{key:\"_renderStep\",value:function(){!0===this.renderingActive&&(this.renderTimer=void 0,!0===this.requiresTimeout&&this._startRendering(),this._redraw(),!1===this.requiresTimeout&&this._startRendering())}},{key:\"redraw\",value:function(){this.body.emitter.emit(\"setSize\"),this._redraw()}},{key:\"_requestRedraw\",value:function(){var t=this;!0!==this.redrawRequested&&!1===this.renderingActive&&!0===this.allowRedraw&&(this.redrawRequested=!0,this._requestNextFrame((function(){t._redraw(!1)}),0))}},{key:\"_redraw\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(!0===this.allowRedraw){this.body.emitter.emit(\"initRedraw\"),this.redrawRequested=!1;var e={drawExternalLabels:null};0!==this.canvas.frame.canvas.width&&0!==this.canvas.frame.canvas.height||this.canvas.setSize(),this.canvas.setTransform();var i=this.canvas.getContext(),n=this.canvas.frame.canvas.clientWidth,o=this.canvas.frame.canvas.clientHeight;if(i.clearRect(0,0,n,o),0===this.canvas.frame.clientWidth)return;if(i.save(),i.translate(this.body.view.translation.x,this.body.view.translation.y),i.scale(this.body.view.scale,this.body.view.scale),i.beginPath(),this.body.emitter.emit(\"beforeDrawing\",i),i.closePath(),!1===t&&(!1===this.dragging||!0===this.dragging&&!1===this.options.hideEdgesOnDrag)&&(!1===this.zooming||!0===this.zooming&&!1===this.options.hideEdgesOnZoom)&&this._drawEdges(i),!1===this.dragging||!0===this.dragging&&!1===this.options.hideNodesOnDrag){var r=this._drawNodes(i,t),s=r.drawExternalLabels;e.drawExternalLabels=s}!1===t&&(!1===this.dragging||!0===this.dragging&&!1===this.options.hideEdgesOnDrag)&&(!1===this.zooming||!0===this.zooming&&!1===this.options.hideEdgesOnZoom)&&this._drawArrows(i),null!=e.drawExternalLabels&&e.drawExternalLabels(),!1===t&&this._drawSelectionBox(i),i.beginPath(),this.body.emitter.emit(\"afterDrawing\",i),i.closePath(),i.restore(),!0===t&&i.clearRect(0,0,n,o)}}},{key:\"_resizeNodes\",value:function(){this.canvas.setTransform();var t=this.canvas.getContext();t.save(),t.translate(this.body.view.translation.x,this.body.view.translation.y),t.scale(this.body.view.scale,this.body.view.scale);var e,i=this.body.nodes;for(var n in i)Object.prototype.hasOwnProperty.call(i,n)&&((e=i[n]).resize(t),e.updateBoundingBox(t,e.selected));t.restore()}},{key:\"_drawNodes\",value:function(t){for(var e,i,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],o=this.body.nodes,r=this.body.nodeIndices,s=[],a=[],h=20,l=this.canvas.DOMtoCanvas({x:-h,y:-h}),d=this.canvas.DOMtoCanvas({x:this.canvas.frame.canvas.clientWidth+h,y:this.canvas.frame.canvas.clientHeight+h}),c={top:l.y,left:l.x,bottom:d.y,right:d.x},u=[],f=0;f<r.length;f++)if((e=o[r[f]]).hover)a.push(r[f]);else if(e.isSelected())s.push(r[f]);else if(!0===n){var p=e.draw(t);null!=p.drawExternalLabel&&u.push(p.drawExternalLabel)}else if(!0===e.isBoundingBoxOverlappingWith(c)){var v=e.draw(t);null!=v.drawExternalLabel&&u.push(v.drawExternalLabel)}else e.updateBoundingBox(t,e.selected);var g=s.length,y=a.length;for(i=0;i<g;i++){var m=(e=o[s[i]]).draw(t);null!=m.drawExternalLabel&&u.push(m.drawExternalLabel)}for(i=0;i<y;i++){var b=(e=o[a[i]]).draw(t);null!=b.drawExternalLabel&&u.push(b.drawExternalLabel)}return{drawExternalLabels:function(){var t,e=mp(u);try{for(e.s();!(t=e.n()).done;){(0,t.value)()}}catch(t){e.e(t)}finally{e.f()}}}}},{key:\"_drawEdges\",value:function(t){for(var e=this.body.edges,i=this.body.edgeIndices,n=0;n<i.length;n++){var o=e[i[n]];!0===o.connected&&o.draw(t)}}},{key:\"_drawArrows\",value:function(t){for(var e=this.body.edges,i=this.body.edgeIndices,n=0;n<i.length;n++){var o=e[i[n]];!0===o.connected&&o.drawArrows(t)}}},{key:\"_determineBrowserMethod\",value:function(){if(\"undefined\"!=typeof window){var t=navigator.userAgent.toLowerCase();this.requiresTimeout=!1,(-1!=Hr(t).call(t,\"msie 9.0\")||-1!=Hr(t).call(t,\"safari\")&&Hr(t).call(t,\"chrome\")<=-1)&&(this.requiresTimeout=!0)}else this.requiresTimeout=!0}},{key:\"_drawSelectionBox\",value:function(t){if(this.body.selectionBox.show){t.beginPath();var e=this.body.selectionBox.position.end.x-this.body.selectionBox.position.start.x,i=this.body.selectionBox.position.end.y-this.body.selectionBox.position.start.y;t.rect(this.body.selectionBox.position.start.x,this.body.selectionBox.position.start.y,e,i),t.fillStyle=\"rgba(151, 194, 252, 0.2)\",t.fillRect(this.body.selectionBox.position.start.x,this.body.selectionBox.position.start.y,e,i),t.strokeStyle=\"rgba(151, 194, 252, 1)\",t.stroke()}else t.closePath()}}]),t}(),kp=k.setInterval;function _p(t,e){e.inputHandler=function(t){t.isFirst&&e(t)},t.on(\"hammer.input\",e.inputHandler)}function xp(t,e){return e.inputHandler=function(t){t.isFinal&&e(t)},t.on(\"hammer.input\",e.inputHandler)}var Ep=function(){function t(e){Nn(this,t),this.body=e,this.pixelRatio=1,this.cameraState={},this.initialized=!1,this.canvasViewCenter={},this._cleanupCallbacks=[],this.options={},this.defaultOptions={autoResize:!0,height:\"100%\",width:\"100%\"},At(this.options,this.defaultOptions),this.bindEventListeners()}return Fn(t,[{key:\"bindEventListeners\",value:function(){var t,e=this;this.body.emitter.once(\"resize\",(function(t){0!==t.width&&(e.body.view.translation.x=.5*t.width),0!==t.height&&(e.body.view.translation.y=.5*t.height)})),this.body.emitter.on(\"setSize\",Vt(t=this.setSize).call(t,this)),this.body.emitter.on(\"destroy\",(function(){e.hammerFrame.destroy(),e.hammer.destroy(),e._cleanUp()}))}},{key:\"setOptions\",value:function(t){var e=this;if(void 0!==t){Eh([\"width\",\"height\",\"autoResize\"],this.options,t)}if(this._cleanUp(),!0===this.options.autoResize){var i;if(window.ResizeObserver){var n=new ResizeObserver((function(){!0===e.setSize()&&e.body.emitter.emit(\"_requestRedraw\")})),o=this.frame;n.observe(o),this._cleanupCallbacks.push((function(){n.unobserve(o)}))}else{var r=kp((function(){!0===e.setSize()&&e.body.emitter.emit(\"_requestRedraw\")}),1e3);this._cleanupCallbacks.push((function(){clearInterval(r)}))}var s=Vt(i=this._onResize).call(i,this);Bh(window,\"resize\",s),this._cleanupCallbacks.push((function(){zh(window,\"resize\",s)}))}}},{key:\"_cleanUp\",value:function(){var t,e,i;Wo(t=Xo(e=er(i=this._cleanupCallbacks).call(i,0)).call(e)).call(t,(function(t){try{t()}catch(t){console.error(t)}}))}},{key:\"_onResize\",value:function(){this.setSize(),this.body.emitter.emit(\"_redraw\")}},{key:\"_getCameraState\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.pixelRatio;!0===this.initialized&&(this.cameraState.previousWidth=this.frame.canvas.width/t,this.cameraState.previousHeight=this.frame.canvas.height/t,this.cameraState.scale=this.body.view.scale,this.cameraState.position=this.DOMtoCanvas({x:.5*this.frame.canvas.width/t,y:.5*this.frame.canvas.height/t}))}},{key:\"_setCameraState\",value:function(){if(void 0!==this.cameraState.scale&&0!==this.frame.canvas.clientWidth&&0!==this.frame.canvas.clientHeight&&0!==this.pixelRatio&&this.cameraState.previousWidth>0&&this.cameraState.previousHeight>0){var t=this.frame.canvas.width/this.pixelRatio/this.cameraState.previousWidth,e=this.frame.canvas.height/this.pixelRatio/this.cameraState.previousHeight,i=this.cameraState.scale;1!=t&&1!=e?i=.5*this.cameraState.scale*(t+e):1!=t?i=this.cameraState.scale*t:1!=e&&(i=this.cameraState.scale*e),this.body.view.scale=i;var n=this.DOMtoCanvas({x:.5*this.frame.canvas.clientWidth,y:.5*this.frame.canvas.clientHeight}),o={x:n.x-this.cameraState.position.x,y:n.y-this.cameraState.position.y};this.body.view.translation.x+=o.x*this.body.view.scale,this.body.view.translation.y+=o.y*this.body.view.scale}}},{key:\"_prepareValue\",value:function(t){if(\"number\"==typeof t)return t+\"px\";if(\"string\"==typeof t){if(-1!==Hr(t).call(t,\"%\")||-1!==Hr(t).call(t,\"px\"))return t;if(-1===Hr(t).call(t,\"%\"))return t+\"px\"}throw new Error(\"Could not use the value supplied for width or height:\"+t)}},{key:\"_create\",value:function(){for(;this.body.container.hasChildNodes();)this.body.container.removeChild(this.body.container.firstChild);if(this.frame=document.createElement(\"div\"),this.frame.className=\"vis-network\",this.frame.style.position=\"relative\",this.frame.style.overflow=\"hidden\",this.frame.tabIndex=0,this.frame.canvas=document.createElement(\"canvas\"),this.frame.canvas.style.position=\"relative\",this.frame.appendChild(this.frame.canvas),this.frame.canvas.getContext)this._setPixelRatio(),this.setTransform();else{var t=document.createElement(\"DIV\");t.style.color=\"red\",t.style.fontWeight=\"bold\",t.style.padding=\"10px\",t.innerText=\"Error: your browser does not support HTML canvas\",this.frame.canvas.appendChild(t)}this.body.container.appendChild(this.frame),this.body.view.scale=1,this.body.view.translation={x:.5*this.frame.canvas.clientWidth,y:.5*this.frame.canvas.clientHeight},this._bindHammer()}},{key:\"_bindHammer\",value:function(){var t=this;void 0!==this.hammer&&this.hammer.destroy(),this.drag={},this.pinch={},this.hammer=new ll(this.frame.canvas),this.hammer.get(\"pinch\").set({enable:!0}),this.hammer.get(\"pan\").set({threshold:5,direction:ll.DIRECTION_ALL}),_p(this.hammer,(function(e){t.body.eventListeners.onTouch(e)})),this.hammer.on(\"tap\",(function(e){t.body.eventListeners.onTap(e)})),this.hammer.on(\"doubletap\",(function(e){t.body.eventListeners.onDoubleTap(e)})),this.hammer.on(\"press\",(function(e){t.body.eventListeners.onHold(e)})),this.hammer.on(\"panstart\",(function(e){t.body.eventListeners.onDragStart(e)})),this.hammer.on(\"panmove\",(function(e){t.body.eventListeners.onDrag(e)})),this.hammer.on(\"panend\",(function(e){t.body.eventListeners.onDragEnd(e)})),this.hammer.on(\"pinch\",(function(e){t.body.eventListeners.onPinch(e)})),this.frame.canvas.addEventListener(\"wheel\",(function(e){t.body.eventListeners.onMouseWheel(e)})),this.frame.canvas.addEventListener(\"mousemove\",(function(e){t.body.eventListeners.onMouseMove(e)})),this.frame.canvas.addEventListener(\"contextmenu\",(function(e){t.body.eventListeners.onContext(e)})),this.hammerFrame=new ll(this.frame),xp(this.hammerFrame,(function(e){t.body.eventListeners.onRelease(e)}))}},{key:\"setSize\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.options.width,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.options.height;t=this._prepareValue(t),e=this._prepareValue(e);var i=!1,n=this.frame.canvas.width,o=this.frame.canvas.height,r=this.pixelRatio;if(this._setPixelRatio(),t!=this.options.width||e!=this.options.height||this.frame.style.width!=t||this.frame.style.height!=e)this._getCameraState(r),this.frame.style.width=t,this.frame.style.height=e,this.frame.canvas.style.width=\"100%\",this.frame.canvas.style.height=\"100%\",this.frame.canvas.width=Math.round(this.frame.canvas.clientWidth*this.pixelRatio),this.frame.canvas.height=Math.round(this.frame.canvas.clientHeight*this.pixelRatio),this.options.width=t,this.options.height=e,this.canvasViewCenter={x:.5*this.frame.clientWidth,y:.5*this.frame.clientHeight},i=!0;else{var s=Math.round(this.frame.canvas.clientWidth*this.pixelRatio),a=Math.round(this.frame.canvas.clientHeight*this.pixelRatio);this.frame.canvas.width===s&&this.frame.canvas.height===a||this._getCameraState(r),this.frame.canvas.width!==s&&(this.frame.canvas.width=s,i=!0),this.frame.canvas.height!==a&&(this.frame.canvas.height=a,i=!0)}return!0===i&&(this.body.emitter.emit(\"resize\",{width:Math.round(this.frame.canvas.width/this.pixelRatio),height:Math.round(this.frame.canvas.height/this.pixelRatio),oldWidth:Math.round(n/this.pixelRatio),oldHeight:Math.round(o/this.pixelRatio)}),this._setCameraState()),this.initialized=!0,i}},{key:\"getContext\",value:function(){return this.frame.canvas.getContext(\"2d\")}},{key:\"_determinePixelRatio\",value:function(){var t=this.getContext();if(void 0===t)throw new Error(\"Could not get canvax context\");var e=1;return\"undefined\"!=typeof window&&(e=window.devicePixelRatio||1),e/(t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1)}},{key:\"_setPixelRatio\",value:function(){this.pixelRatio=this._determinePixelRatio()}},{key:\"setTransform\",value:function(){var t=this.getContext();if(void 0===t)throw new Error(\"Could not get canvax context\");t.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0)}},{key:\"_XconvertDOMtoCanvas\",value:function(t){return(t-this.body.view.translation.x)/this.body.view.scale}},{key:\"_XconvertCanvasToDOM\",value:function(t){return t*this.body.view.scale+this.body.view.translation.x}},{key:\"_YconvertDOMtoCanvas\",value:function(t){return(t-this.body.view.translation.y)/this.body.view.scale}},{key:\"_YconvertCanvasToDOM\",value:function(t){return t*this.body.view.scale+this.body.view.translation.y}},{key:\"canvasToDOM\",value:function(t){return{x:this._XconvertCanvasToDOM(t.x),y:this._YconvertCanvasToDOM(t.y)}}},{key:\"DOMtoCanvas\",value:function(t){return{x:this._XconvertDOMtoCanvas(t.x),y:this._YconvertDOMtoCanvas(t.y)}}}]),t}();function Op(t,e){var i=At({nodes:e,minZoomLevel:Number.MIN_VALUE,maxZoomLevel:1},null!=t?t:{});if(!So(i.nodes))throw new TypeError(\"Nodes has to be an array of ids.\");if(0===i.nodes.length&&(i.nodes=e),!(\"number\"==typeof i.minZoomLevel&&i.minZoomLevel>0))throw new TypeError(\"Min zoom level has to be a number higher than zero.\");if(!(\"number\"==typeof i.maxZoomLevel&&i.minZoomLevel<=i.maxZoomLevel))throw new TypeError(\"Max zoom level has to be a number higher than min zoom level.\");return i}var Cp=function(){function t(e,i){var n,o,r=this;Nn(this,t),this.body=e,this.canvas=i,this.animationSpeed=1/this.renderRefreshRate,this.animationEasingFunction=\"easeInOutQuint\",this.easingTime=0,this.sourceScale=0,this.targetScale=0,this.sourceTranslation=0,this.targetTranslation=0,this.lockedOnNodeId=void 0,this.lockedOnNodeOffset=void 0,this.touchTime=0,this.viewFunction=void 0,this.body.emitter.on(\"fit\",Vt(n=this.fit).call(n,this)),this.body.emitter.on(\"animationFinished\",(function(){r.body.emitter.emit(\"_stopRendering\")})),this.body.emitter.on(\"unlockNode\",Vt(o=this.releaseNode).call(o,this))}return Fn(t,[{key:\"setOptions\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.options=t}},{key:\"fit\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];t=Op(t,this.body.nodeIndices);var i,n,o=this.canvas.frame.canvas.clientWidth,r=this.canvas.frame.canvas.clientHeight;if(0===o||0===r)n=1,i=pp.getRange(this.body.nodes,t.nodes);else if(!0===e){var s=0;for(var a in this.body.nodes)if(Object.prototype.hasOwnProperty.call(this.body.nodes,a)){var h=this.body.nodes[a];!0===h.predefinedPosition&&(s+=1)}if(s>.5*this.body.nodeIndices.length)return void this.fit(t,!1);i=pp.getRange(this.body.nodes,t.nodes);var l=this.body.nodeIndices.length;n=12.662/(l+7.4147)+.0964822;var d=Math.min(o/600,r/600);n*=d}else{this.body.emitter.emit(\"_resizeNodes\"),i=pp.getRange(this.body.nodes,t.nodes);var c=1.1*Math.abs(i.maxX-i.minX),u=1.1*Math.abs(i.maxY-i.minY),f=o/c,p=r/u;n=f<=p?f:p}n>t.maxZoomLevel?n=t.maxZoomLevel:n<t.minZoomLevel&&(n=t.minZoomLevel);var v=pp.findCenter(i),g={position:v,scale:n,animation:t.animation};this.moveTo(g)}},{key:\"focus\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(void 0!==this.body.nodes[t]){var i={x:this.body.nodes[t].x,y:this.body.nodes[t].y};e.position=i,e.lockedOnNode=t,this.moveTo(e)}else console.error(\"Node: \"+t+\" cannot be found.\")}},{key:\"moveTo\",value:function(t){if(void 0!==t){if(null!=t.offset){if(null!=t.offset.x){if(t.offset.x=+t.offset.x,!wd(t.offset.x))throw new TypeError('The option \"offset.x\" has to be a finite number.')}else t.offset.x=0;if(null!=t.offset.y){if(t.offset.y=+t.offset.y,!wd(t.offset.y))throw new TypeError('The option \"offset.y\" has to be a finite number.')}else t.offset.x=0}else t.offset={x:0,y:0};if(null!=t.position){if(null!=t.position.x){if(t.position.x=+t.position.x,!wd(t.position.x))throw new TypeError('The option \"position.x\" has to be a finite number.')}else t.position.x=0;if(null!=t.position.y){if(t.position.y=+t.position.y,!wd(t.position.y))throw new TypeError('The option \"position.y\" has to be a finite number.')}else t.position.x=0}else t.position=this.getViewPosition();if(null!=t.scale){if(t.scale=+t.scale,!(t.scale>0))throw new TypeError('The option \"scale\" has to be a number greater than zero.')}else t.scale=this.body.view.scale;void 0===t.animation&&(t.animation={duration:0}),!1===t.animation&&(t.animation={duration:0}),!0===t.animation&&(t.animation={}),void 0===t.animation.duration&&(t.animation.duration=1e3),void 0===t.animation.easingFunction&&(t.animation.easingFunction=\"easeInOutQuad\"),this.animateView(t)}else t={}}},{key:\"animateView\",value:function(t){if(void 0!==t){this.animationEasingFunction=t.animation.easingFunction,this.releaseNode(),!0===t.locked&&(this.lockedOnNodeId=t.lockedOnNode,this.lockedOnNodeOffset=t.offset),0!=this.easingTime&&this._transitionRedraw(!0),this.sourceScale=this.body.view.scale,this.sourceTranslation=this.body.view.translation,this.targetScale=t.scale,this.body.view.scale=this.targetScale;var e,i,n=this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight}),o=n.x-t.position.x,r=n.y-t.position.y;if(this.targetTranslation={x:this.sourceTranslation.x+o*this.targetScale+t.offset.x,y:this.sourceTranslation.y+r*this.targetScale+t.offset.y},0===t.animation.duration)if(null!=this.lockedOnNodeId)this.viewFunction=Vt(e=this._lockedRedraw).call(e,this),this.body.emitter.on(\"initRedraw\",this.viewFunction);else this.body.view.scale=this.targetScale,this.body.view.translation=this.targetTranslation,this.body.emitter.emit(\"_requestRedraw\");else this.animationSpeed=1/(60*t.animation.duration*.001)||1/60,this.animationEasingFunction=t.animation.easingFunction,this.viewFunction=Vt(i=this._transitionRedraw).call(i,this),this.body.emitter.on(\"initRedraw\",this.viewFunction),this.body.emitter.emit(\"_startRendering\")}}},{key:\"_lockedRedraw\",value:function(){var t=this.body.nodes[this.lockedOnNodeId].x,e=this.body.nodes[this.lockedOnNodeId].y,i=this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight}),n=i.x-t,o=i.y-e,r=this.body.view.translation,s={x:r.x+n*this.body.view.scale+this.lockedOnNodeOffset.x,y:r.y+o*this.body.view.scale+this.lockedOnNodeOffset.y};this.body.view.translation=s}},{key:\"releaseNode\",value:function(){void 0!==this.lockedOnNodeId&&void 0!==this.viewFunction&&(this.body.emitter.off(\"initRedraw\",this.viewFunction),this.lockedOnNodeId=void 0,this.lockedOnNodeOffset=void 0)}},{key:\"_transitionRedraw\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.easingTime+=this.animationSpeed,this.easingTime=!0===t?1:this.easingTime;var e=Zh[this.animationEasingFunction](this.easingTime);if(this.body.view.scale=this.sourceScale+(this.targetScale-this.sourceScale)*e,this.body.view.translation={x:this.sourceTranslation.x+(this.targetTranslation.x-this.sourceTranslation.x)*e,y:this.sourceTranslation.y+(this.targetTranslation.y-this.sourceTranslation.y)*e},this.easingTime>=1){var i;if(this.body.emitter.off(\"initRedraw\",this.viewFunction),this.easingTime=0,null!=this.lockedOnNodeId)this.viewFunction=Vt(i=this._lockedRedraw).call(i,this),this.body.emitter.on(\"initRedraw\",this.viewFunction);this.body.emitter.emit(\"animationFinished\")}}},{key:\"getScale\",value:function(){return this.body.view.scale}},{key:\"getViewPosition\",value:function(){return this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight})}}]),t}();function Sp(t){var e,i=t&&t.preventDefault||!1,n=t&&t.container||window,o={},r={keydown:{},keyup:{}},s={};for(e=97;e<=122;e++)s[String.fromCharCode(e)]={code:e-97+65,shift:!1};for(e=65;e<=90;e++)s[String.fromCharCode(e)]={code:e,shift:!0};for(e=0;e<=9;e++)s[\"\"+e]={code:48+e,shift:!1};for(e=1;e<=12;e++)s[\"F\"+e]={code:111+e,shift:!1};for(e=0;e<=9;e++)s[\"num\"+e]={code:96+e,shift:!1};s[\"num*\"]={code:106,shift:!1},s[\"num+\"]={code:107,shift:!1},s[\"num-\"]={code:109,shift:!1},s[\"num/\"]={code:111,shift:!1},s[\"num.\"]={code:110,shift:!1},s.left={code:37,shift:!1},s.up={code:38,shift:!1},s.right={code:39,shift:!1},s.down={code:40,shift:!1},s.space={code:32,shift:!1},s.enter={code:13,shift:!1},s.shift={code:16,shift:void 0},s.esc={code:27,shift:!1},s.backspace={code:8,shift:!1},s.tab={code:9,shift:!1},s.ctrl={code:17,shift:!1},s.alt={code:18,shift:!1},s.delete={code:46,shift:!1},s.pageup={code:33,shift:!1},s.pagedown={code:34,shift:!1},s[\"=\"]={code:187,shift:!1},s[\"-\"]={code:189,shift:!1},s[\"]\"]={code:221,shift:!1},s[\"[\"]={code:219,shift:!1};var a=function(t){l(t,\"keydown\")},h=function(t){l(t,\"keyup\")},l=function(t,e){if(void 0!==r[e][t.keyCode]){for(var n=r[e][t.keyCode],o=0;o<n.length;o++)(void 0===n[o].shift||1==n[o].shift&&1==t.shiftKey||0==n[o].shift&&0==t.shiftKey)&&n[o].fn(t);1==i&&t.preventDefault()}};return o.bind=function(t,e,i){if(void 0===i&&(i=\"keydown\"),void 0===s[t])throw new Error(\"unsupported key: \"+t);void 0===r[i][s[t].code]&&(r[i][s[t].code]=[]),r[i][s[t].code].push({fn:e,shift:s[t].shift})},o.bindAll=function(t,e){for(var i in void 0===e&&(e=\"keydown\"),s)s.hasOwnProperty(i)&&o.bind(i,t,e)},o.getKey=function(t){for(var e in s)if(s.hasOwnProperty(e)){if(1==t.shiftKey&&1==s[e].shift&&t.keyCode==s[e].code)return e;if(0==t.shiftKey&&0==s[e].shift&&t.keyCode==s[e].code)return e;if(t.keyCode==s[e].code&&\"shift\"==e)return e}return\"unknown key, currently not supported\"},o.unbind=function(t,e,i){if(void 0===i&&(i=\"keydown\"),void 0===s[t])throw new Error(\"unsupported key: \"+t);if(void 0!==e){var n=[],o=r[i][s[t].code];if(void 0!==o)for(var a=0;a<o.length;a++)o[a].fn==e&&o[a].shift==s[t].shift||n.push(r[i][s[t].code][a]);r[i][s[t].code]=n}else r[i][s[t].code]=[]},o.reset=function(){r={keydown:{},keyup:{}}},o.destroy=function(){r={keydown:{},keyup:{}},n.removeEventListener(\"keydown\",a,!0),n.removeEventListener(\"keyup\",h,!0)},n.addEventListener(\"keydown\",a,!0),n.addEventListener(\"keyup\",h,!0),o}var Tp=Object.freeze({__proto__:null,default:Sp}),Mp=function(){function t(e,i){var n=this;Nn(this,t),this.body=e,this.canvas=i,this.iconsCreated=!1,this.navigationHammers=[],this.boundFunctions={},this.touchTime=0,this.activated=!1,this.body.emitter.on(\"activate\",(function(){n.activated=!0,n.configureKeyboardBindings()})),this.body.emitter.on(\"deactivate\",(function(){n.activated=!1,n.configureKeyboardBindings()})),this.body.emitter.on(\"destroy\",(function(){void 0!==n.keycharm&&n.keycharm.destroy()})),this.options={}}return Fn(t,[{key:\"setOptions\",value:function(t){void 0!==t&&(this.options=t,this.create())}},{key:\"create\",value:function(){!0===this.options.navigationButtons?!1===this.iconsCreated&&this.loadNavigationElements():!0===this.iconsCreated&&this.cleanNavigation(),this.configureKeyboardBindings()}},{key:\"cleanNavigation\",value:function(){if(0!=this.navigationHammers.length){for(var t=0;t<this.navigationHammers.length;t++)this.navigationHammers[t].destroy();this.navigationHammers=[]}this.navigationDOM&&this.navigationDOM.wrapper&&this.navigationDOM.wrapper.parentNode&&this.navigationDOM.wrapper.parentNode.removeChild(this.navigationDOM.wrapper),this.iconsCreated=!1}},{key:\"loadNavigationElements\",value:function(){var t=this;this.cleanNavigation(),this.navigationDOM={};var e=[\"up\",\"down\",\"left\",\"right\",\"zoomIn\",\"zoomOut\",\"zoomExtends\"],i=[\"_moveUp\",\"_moveDown\",\"_moveLeft\",\"_moveRight\",\"_zoomIn\",\"_zoomOut\",\"_fit\"];this.navigationDOM.wrapper=document.createElement(\"div\"),this.navigationDOM.wrapper.className=\"vis-navigation\",this.canvas.frame.appendChild(this.navigationDOM.wrapper);for(var n=0;n<e.length;n++){this.navigationDOM[e[n]]=document.createElement(\"div\"),this.navigationDOM[e[n]].className=\"vis-button vis-\"+e[n],this.navigationDOM.wrapper.appendChild(this.navigationDOM[e[n]]);var o,r,s=new ll(this.navigationDOM[e[n]]);if(\"_fit\"===i[n])_p(s,Vt(o=this._fit).call(o,this));else _p(s,Vt(r=this.bindToRedraw).call(r,this,i[n]));this.navigationHammers.push(s)}var a=new ll(this.canvas.frame);xp(a,(function(){t._stopMovement()})),this.navigationHammers.push(a),this.iconsCreated=!0}},{key:\"bindToRedraw\",value:function(t){var e;void 0===this.boundFunctions[t]&&(this.boundFunctions[t]=Vt(e=this[t]).call(e,this),this.body.emitter.on(\"initRedraw\",this.boundFunctions[t]),this.body.emitter.emit(\"_startRendering\"))}},{key:\"unbindFromRedraw\",value:function(t){void 0!==this.boundFunctions[t]&&(this.body.emitter.off(\"initRedraw\",this.boundFunctions[t]),this.body.emitter.emit(\"_stopRendering\"),delete this.boundFunctions[t])}},{key:\"_fit\",value:function(){(new Date).valueOf()-this.touchTime>700&&(this.body.emitter.emit(\"fit\",{duration:700}),this.touchTime=(new Date).valueOf())}},{key:\"_stopMovement\",value:function(){for(var t in this.boundFunctions)Object.prototype.hasOwnProperty.call(this.boundFunctions,t)&&(this.body.emitter.off(\"initRedraw\",this.boundFunctions[t]),this.body.emitter.emit(\"_stopRendering\"));this.boundFunctions={}}},{key:\"_moveUp\",value:function(){this.body.view.translation.y+=this.options.keyboard.speed.y}},{key:\"_moveDown\",value:function(){this.body.view.translation.y-=this.options.keyboard.speed.y}},{key:\"_moveLeft\",value:function(){this.body.view.translation.x+=this.options.keyboard.speed.x}},{key:\"_moveRight\",value:function(){this.body.view.translation.x-=this.options.keyboard.speed.x}},{key:\"_zoomIn\",value:function(){var t=this.body.view.scale,e=this.body.view.scale*(1+this.options.keyboard.speed.zoom),i=this.body.view.translation,n=e/t,o=(1-n)*this.canvas.canvasViewCenter.x+i.x*n,r=(1-n)*this.canvas.canvasViewCenter.y+i.y*n;this.body.view.scale=e,this.body.view.translation={x:o,y:r},this.body.emitter.emit(\"zoom\",{direction:\"+\",scale:this.body.view.scale,pointer:null})}},{key:\"_zoomOut\",value:function(){var t=this.body.view.scale,e=this.body.view.scale/(1+this.options.keyboard.speed.zoom),i=this.body.view.translation,n=e/t,o=(1-n)*this.canvas.canvasViewCenter.x+i.x*n,r=(1-n)*this.canvas.canvasViewCenter.y+i.y*n;this.body.view.scale=e,this.body.view.translation={x:o,y:r},this.body.emitter.emit(\"zoom\",{direction:\"-\",scale:this.body.view.scale,pointer:null})}},{key:\"configureKeyboardBindings\",value:function(){var t,e,i,n,o,r,s,a,h,l,d,c,u,f,p,v,g,y,m,b,w,k,_,x,E=this;(void 0!==this.keycharm&&this.keycharm.destroy(),!0===this.options.keyboard.enabled)&&(!0===this.options.keyboard.bindToWindow?this.keycharm=Sp({container:window,preventDefault:!0}):this.keycharm=Sp({container:this.canvas.frame,preventDefault:!0}),this.keycharm.reset(),!0===this.activated&&(Vt(t=this.keycharm).call(t,\"up\",(function(){E.bindToRedraw(\"_moveUp\")}),\"keydown\"),Vt(e=this.keycharm).call(e,\"down\",(function(){E.bindToRedraw(\"_moveDown\")}),\"keydown\"),Vt(i=this.keycharm).call(i,\"left\",(function(){E.bindToRedraw(\"_moveLeft\")}),\"keydown\"),Vt(n=this.keycharm).call(n,\"right\",(function(){E.bindToRedraw(\"_moveRight\")}),\"keydown\"),Vt(o=this.keycharm).call(o,\"=\",(function(){E.bindToRedraw(\"_zoomIn\")}),\"keydown\"),Vt(r=this.keycharm).call(r,\"num+\",(function(){E.bindToRedraw(\"_zoomIn\")}),\"keydown\"),Vt(s=this.keycharm).call(s,\"num-\",(function(){E.bindToRedraw(\"_zoomOut\")}),\"keydown\"),Vt(a=this.keycharm).call(a,\"-\",(function(){E.bindToRedraw(\"_zoomOut\")}),\"keydown\"),Vt(h=this.keycharm).call(h,\"[\",(function(){E.bindToRedraw(\"_zoomOut\")}),\"keydown\"),Vt(l=this.keycharm).call(l,\"]\",(function(){E.bindToRedraw(\"_zoomIn\")}),\"keydown\"),Vt(d=this.keycharm).call(d,\"pageup\",(function(){E.bindToRedraw(\"_zoomIn\")}),\"keydown\"),Vt(c=this.keycharm).call(c,\"pagedown\",(function(){E.bindToRedraw(\"_zoomOut\")}),\"keydown\"),Vt(u=this.keycharm).call(u,\"up\",(function(){E.unbindFromRedraw(\"_moveUp\")}),\"keyup\"),Vt(f=this.keycharm).call(f,\"down\",(function(){E.unbindFromRedraw(\"_moveDown\")}),\"keyup\"),Vt(p=this.keycharm).call(p,\"left\",(function(){E.unbindFromRedraw(\"_moveLeft\")}),\"keyup\"),Vt(v=this.keycharm).call(v,\"right\",(function(){E.unbindFromRedraw(\"_moveRight\")}),\"keyup\"),Vt(g=this.keycharm).call(g,\"=\",(function(){E.unbindFromRedraw(\"_zoomIn\")}),\"keyup\"),Vt(y=this.keycharm).call(y,\"num+\",(function(){E.unbindFromRedraw(\"_zoomIn\")}),\"keyup\"),Vt(m=this.keycharm).call(m,\"num-\",(function(){E.unbindFromRedraw(\"_zoomOut\")}),\"keyup\"),Vt(b=this.keycharm).call(b,\"-\",(function(){E.unbindFromRedraw(\"_zoomOut\")}),\"keyup\"),Vt(w=this.keycharm).call(w,\"[\",(function(){E.unbindFromRedraw(\"_zoomOut\")}),\"keyup\"),Vt(k=this.keycharm).call(k,\"]\",(function(){E.unbindFromRedraw(\"_zoomIn\")}),\"keyup\"),Vt(_=this.keycharm).call(_,\"pageup\",(function(){E.unbindFromRedraw(\"_zoomIn\")}),\"keyup\"),Vt(x=this.keycharm).call(x,\"pagedown\",(function(){E.unbindFromRedraw(\"_zoomOut\")}),\"keyup\")))}}]),t}();function Pp(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return Dp(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Dp(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function Dp(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}var Ip=function(){function t(e,i,n){var o,r,s,a,h,l,d,c,u,f,p,v,g;Nn(this,t),this.body=e,this.canvas=i,this.selectionHandler=n,this.navigationHandler=new Mp(e,i),this.body.eventListeners.onTap=Vt(o=this.onTap).call(o,this),this.body.eventListeners.onTouch=Vt(r=this.onTouch).call(r,this),this.body.eventListeners.onDoubleTap=Vt(s=this.onDoubleTap).call(s,this),this.body.eventListeners.onHold=Vt(a=this.onHold).call(a,this),this.body.eventListeners.onDragStart=Vt(h=this.onDragStart).call(h,this),this.body.eventListeners.onDrag=Vt(l=this.onDrag).call(l,this),this.body.eventListeners.onDragEnd=Vt(d=this.onDragEnd).call(d,this),this.body.eventListeners.onMouseWheel=Vt(c=this.onMouseWheel).call(c,this),this.body.eventListeners.onPinch=Vt(u=this.onPinch).call(u,this),this.body.eventListeners.onMouseMove=Vt(f=this.onMouseMove).call(f,this),this.body.eventListeners.onRelease=Vt(p=this.onRelease).call(p,this),this.body.eventListeners.onContext=Vt(v=this.onContext).call(v,this),this.touchTime=0,this.drag={},this.pinch={},this.popup=void 0,this.popupObj=void 0,this.popupTimer=void 0,this.body.functions.getPointer=Vt(g=this.getPointer).call(g,this),this.options={},this.defaultOptions={dragNodes:!0,dragView:!0,hover:!1,keyboard:{enabled:!1,speed:{x:10,y:10,zoom:.02},bindToWindow:!0,autoFocus:!0},navigationButtons:!1,tooltipDelay:300,zoomView:!0,zoomSpeed:1},At(this.options,this.defaultOptions),this.bindEventListeners()}return Fn(t,[{key:\"bindEventListeners\",value:function(){var t=this;this.body.emitter.on(\"destroy\",(function(){clearTimeout(t.popupTimer),delete t.body.functions.getPointer}))}},{key:\"setOptions\",value:function(t){if(void 0!==t){Oh([\"hideEdgesOnDrag\",\"hideEdgesOnZoom\",\"hideNodesOnDrag\",\"keyboard\",\"multiselect\",\"selectable\",\"selectConnectedEdges\"],this.options,t),$h(this.options,t,\"keyboard\"),t.tooltip&&(At(this.options.tooltip,t.tooltip),t.tooltip.color&&(this.options.tooltip.color=Rh(t.tooltip.color)))}this.navigationHandler.setOptions(this.options)}},{key:\"getPointer\",value:function(t){return{x:t.x-Mh(this.canvas.frame.canvas),y:t.y-Ph(this.canvas.frame.canvas)}}},{key:\"onTouch\",value:function(t){(new Date).valueOf()-this.touchTime>50&&(this.drag.pointer=this.getPointer(t.center),this.drag.pinched=!1,this.pinch.scale=this.body.view.scale,this.touchTime=(new Date).valueOf())}},{key:\"onTap\",value:function(t){var e=this.getPointer(t.center),i=this.selectionHandler.options.multiselect&&(t.changedPointers[0].ctrlKey||t.changedPointers[0].metaKey);this.checkSelectionChanges(e,i),this.selectionHandler.commitAndEmit(e,t),this.selectionHandler.generateClickEvent(\"click\",t,e)}},{key:\"onDoubleTap\",value:function(t){var e=this.getPointer(t.center);this.selectionHandler.generateClickEvent(\"doubleClick\",t,e)}},{key:\"onHold\",value:function(t){var e=this.getPointer(t.center),i=this.selectionHandler.options.multiselect;this.checkSelectionChanges(e,i),this.selectionHandler.commitAndEmit(e,t),this.selectionHandler.generateClickEvent(\"click\",t,e),this.selectionHandler.generateClickEvent(\"hold\",t,e)}},{key:\"onRelease\",value:function(t){if((new Date).valueOf()-this.touchTime>10){var e=this.getPointer(t.center);this.selectionHandler.generateClickEvent(\"release\",t,e),this.touchTime=(new Date).valueOf()}}},{key:\"onContext\",value:function(t){var e=this.getPointer({x:t.clientX,y:t.clientY});this.selectionHandler.generateClickEvent(\"oncontext\",t,e)}},{key:\"checkSelectionChanges\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];!0===e?this.selectionHandler.selectAdditionalOnPoint(t):this.selectionHandler.selectOnPoint(t)}},{key:\"_determineDifference\",value:function(t,e){var i=function(t,e){for(var i=[],n=0;n<t.length;n++){var o=t[n];-1===Hr(e).call(e,o)&&i.push(o)}return i};return{nodes:i(t.nodes,e.nodes),edges:i(t.edges,e.edges)}}},{key:\"onDragStart\",value:function(t){if(!this.drag.dragging){void 0===this.drag.pointer&&this.onTouch(t);var e=this.selectionHandler.getNodeAt(this.drag.pointer);if(this.drag.dragging=!0,this.drag.selection=[],this.drag.translation=At({},this.body.view.translation),this.drag.nodeId=void 0,t.srcEvent.shiftKey){this.body.selectionBox.show=!0;var i=this.getPointer(t.center);this.body.selectionBox.position.start={x:this.canvas._XconvertDOMtoCanvas(i.x),y:this.canvas._YconvertDOMtoCanvas(i.y)},this.body.selectionBox.position.end={x:this.canvas._XconvertDOMtoCanvas(i.x),y:this.canvas._YconvertDOMtoCanvas(i.y)}}if(void 0!==e&&!0===this.options.dragNodes){this.drag.nodeId=e.id,!1===e.isSelected()&&(this.selectionHandler.unselectAll(),this.selectionHandler.selectObject(e)),this.selectionHandler.generateClickEvent(\"dragStart\",t,this.drag.pointer);var n,o=Pp(this.selectionHandler.getSelectedNodes());try{for(o.s();!(n=o.n()).done;){var r=n.value,s={id:r.id,node:r,x:r.x,y:r.y,xFixed:r.options.fixed.x,yFixed:r.options.fixed.y};r.options.fixed.x=!0,r.options.fixed.y=!0,this.drag.selection.push(s)}}catch(t){o.e(t)}finally{o.f()}}else this.selectionHandler.generateClickEvent(\"dragStart\",t,this.drag.pointer,void 0,!0)}}},{key:\"onDrag\",value:function(t){var e=this;if(!0!==this.drag.pinched){this.body.emitter.emit(\"unlockNode\");var i=this.getPointer(t.center),n=this.drag.selection;if(n&&n.length&&!0===this.options.dragNodes){this.selectionHandler.generateClickEvent(\"dragging\",t,i);var o=i.x-this.drag.pointer.x,r=i.y-this.drag.pointer.y;Wo(n).call(n,(function(t){var i=t.node;!1===t.xFixed&&(i.x=e.canvas._XconvertDOMtoCanvas(e.canvas._XconvertCanvasToDOM(t.x)+o)),!1===t.yFixed&&(i.y=e.canvas._YconvertDOMtoCanvas(e.canvas._YconvertCanvasToDOM(t.y)+r))})),this.body.emitter.emit(\"startSimulation\")}else{if(t.srcEvent.shiftKey){if(this.selectionHandler.generateClickEvent(\"dragging\",t,i,void 0,!0),void 0===this.drag.pointer)return void this.onDragStart(t);this.body.selectionBox.position.end={x:this.canvas._XconvertDOMtoCanvas(i.x),y:this.canvas._YconvertDOMtoCanvas(i.y)},this.body.emitter.emit(\"_requestRedraw\")}if(!0===this.options.dragView&&!t.srcEvent.shiftKey){if(this.selectionHandler.generateClickEvent(\"dragging\",t,i,void 0,!0),void 0===this.drag.pointer)return void this.onDragStart(t);var s=i.x-this.drag.pointer.x,a=i.y-this.drag.pointer.y;this.body.view.translation={x:this.drag.translation.x+s,y:this.drag.translation.y+a},this.body.emitter.emit(\"_requestRedraw\")}}}}},{key:\"onDragEnd\",value:function(t){var e=this;if(this.drag.dragging=!1,this.body.selectionBox.show){var i;this.body.selectionBox.show=!1;var n=this.body.selectionBox.position,o={minX:Math.min(n.start.x,n.end.x),minY:Math.min(n.start.y,n.end.y),maxX:Math.max(n.start.x,n.end.x),maxY:Math.max(n.start.y,n.end.y)},r=mr(i=this.body.nodeIndices).call(i,(function(t){var i=e.body.nodes[t];return i.x>=o.minX&&i.x<=o.maxX&&i.y>=o.minY&&i.y<=o.maxY}));Wo(r).call(r,(function(t){return e.selectionHandler.selectObject(e.body.nodes[t])}));var s=this.getPointer(t.center);this.selectionHandler.commitAndEmit(s,t),this.selectionHandler.generateClickEvent(\"dragEnd\",t,this.getPointer(t.center),void 0,!0),this.body.emitter.emit(\"_requestRedraw\")}else{var a=this.drag.selection;a&&a.length?(Wo(a).call(a,(function(t){t.node.options.fixed.x=t.xFixed,t.node.options.fixed.y=t.yFixed})),this.selectionHandler.generateClickEvent(\"dragEnd\",t,this.getPointer(t.center)),this.body.emitter.emit(\"startSimulation\")):(this.selectionHandler.generateClickEvent(\"dragEnd\",t,this.getPointer(t.center),void 0,!0),this.body.emitter.emit(\"_requestRedraw\"))}}},{key:\"onPinch\",value:function(t){var e=this.getPointer(t.center);this.drag.pinched=!0,void 0===this.pinch.scale&&(this.pinch.scale=1);var i=this.pinch.scale*t.scale;this.zoom(i,e)}},{key:\"zoom\",value:function(t,e){if(!0===this.options.zoomView){var i=this.body.view.scale;t<1e-5&&(t=1e-5),t>10&&(t=10);var n=void 0;void 0!==this.drag&&!0===this.drag.dragging&&(n=this.canvas.DOMtoCanvas(this.drag.pointer));var o=this.body.view.translation,r=t/i,s=(1-r)*e.x+o.x*r,a=(1-r)*e.y+o.y*r;if(this.body.view.scale=t,this.body.view.translation={x:s,y:a},null!=n){var h=this.canvas.canvasToDOM(n);this.drag.pointer.x=h.x,this.drag.pointer.y=h.y}this.body.emitter.emit(\"_requestRedraw\"),i<t?this.body.emitter.emit(\"zoom\",{direction:\"+\",scale:this.body.view.scale,pointer:e}):this.body.emitter.emit(\"zoom\",{direction:\"-\",scale:this.body.view.scale,pointer:e})}}},{key:\"onMouseWheel\",value:function(t){if(!0===this.options.zoomView){if(0!==t.deltaY){var e=this.body.view.scale;e*=1+(t.deltaY<0?1:-1)*(.1*this.options.zoomSpeed);var i=this.getPointer({x:t.clientX,y:t.clientY});this.zoom(e,i)}t.preventDefault()}}},{key:\"onMouseMove\",value:function(t){var e=this,i=this.getPointer({x:t.clientX,y:t.clientY}),n=!1;void 0!==this.popup&&(!1===this.popup.hidden&&this._checkHidePopup(i),!1===this.popup.hidden&&(n=!0,this.popup.setPosition(i.x+3,i.y-5),this.popup.show())),this.options.keyboard.autoFocus&&!1===this.options.keyboard.bindToWindow&&!0===this.options.keyboard.enabled&&this.canvas.frame.focus(),!1===n&&(void 0!==this.popupTimer&&(clearInterval(this.popupTimer),this.popupTimer=void 0),this.drag.dragging||(this.popupTimer=rs((function(){return e._checkShowPopup(i)}),this.options.tooltipDelay))),!0===this.options.hover&&this.selectionHandler.hoverObject(t,i)}},{key:\"_checkShowPopup\",value:function(t){var e=this.canvas._XconvertDOMtoCanvas(t.x),i=this.canvas._YconvertDOMtoCanvas(t.y),n={left:e,top:i,right:e,bottom:i},o=void 0===this.popupObj?void 0:this.popupObj.id,r=!1,s=\"node\";if(void 0===this.popupObj){for(var a,h=this.body.nodeIndices,l=this.body.nodes,d=[],c=0;c<h.length;c++)!0===(a=l[h[c]]).isOverlappingWith(n)&&(r=!0,void 0!==a.getTitle()&&d.push(h[c]));d.length>0&&(this.popupObj=l[d[d.length-1]],r=!0)}if(void 0===this.popupObj&&!1===r){for(var u,f=this.body.edgeIndices,p=this.body.edges,v=[],g=0;g<f.length;g++)!0===(u=p[f[g]]).isOverlappingWith(n)&&!0===u.connected&&void 0!==u.getTitle()&&v.push(f[g]);v.length>0&&(this.popupObj=p[v[v.length-1]],s=\"edge\")}void 0!==this.popupObj?this.popupObj.id!==o&&(void 0===this.popup&&(this.popup=new dl(this.canvas.frame)),this.popup.popupTargetType=s,this.popup.popupTargetId=this.popupObj.id,this.popup.setPosition(t.x+3,t.y-5),this.popup.setText(this.popupObj.getTitle()),this.popup.show(),this.body.emitter.emit(\"showPopup\",this.popupObj.id)):void 0!==this.popup&&(this.popup.hide(),this.body.emitter.emit(\"hidePopup\"))}},{key:\"_checkHidePopup\",value:function(t){var e=this.selectionHandler._pointerToPositionObject(t),i=!1;if(\"node\"===this.popup.popupTargetType){if(void 0!==this.body.nodes[this.popup.popupTargetId]&&!0===(i=this.body.nodes[this.popup.popupTargetId].isOverlappingWith(e))){var n=this.selectionHandler.getNodeAt(t);i=void 0!==n&&n.id===this.popup.popupTargetId}}else void 0===this.selectionHandler.getNodeAt(t)&&void 0!==this.body.edges[this.popup.popupTargetId]&&(i=this.body.edges[this.popup.popupTargetId].isOverlappingWith(e));!1===i&&(this.popupObj=void 0,this.popup.hide(),this.body.emitter.emit(\"hidePopup\"))}}]),t}(),Bp=Jl.getWeakData,zp=we.set,Np=we.getterFor,Ap=Gi.find,Fp=Gi.findIndex,jp=0,Rp=function(t){return t.frozen||(t.frozen=new Lp)},Lp=function(){this.entries=[]},Hp=function(t,e){return Ap(t.entries,(function(t){return t[0]===e}))};Lp.prototype={get:function(t){var e=Hp(this,t);if(e)return e[1]},has:function(t){return!!Hp(this,t)},set:function(t,e){var i=Hp(this,t);i?i[1]=e:this.entries.push([t,e])},delete:function(t){var e=Fp(this.entries,(function(e){return e[0]===t}));return~e&&this.entries.splice(e,1),!!~e}};var Wp={getConstructor:function(t,e,i,n){var o=t((function(t,r){id(t,o,e),zp(t,{type:e,id:jp++,frozen:void 0}),null!=r&&ed(r,t[n],{that:t,AS_ENTRIES:i})})),r=Np(e),s=function(t,e,i){var n=r(t),o=Bp(dt(e),!0);return!0===o?Rp(n).set(e,i):o[n.id]=i,t};return hd(o.prototype,{delete:function(t){var e=r(this);if(!w(t))return!1;var i=Bp(t);return!0===i?Rp(e).delete(t):i&&j(i,e.id)&&delete i[e.id]},has:function(t){var e=r(this);if(!w(t))return!1;var i=Bp(t);return!0===i?Rp(e).has(t):i&&j(i,e.id)}}),hd(o.prototype,i?{get:function(t){var e=r(this);if(w(t)){var i=Bp(t);return!0===i?Rp(e).get(t):i?i[e.id]:void 0}},set:function(t,e){return s(this,t,e)}}:{add:function(t){return s(this,t,!0)}}),o}};n((function(t){var e,i=we.enforce,n=!a.ActiveXObject&&\"ActiveXObject\"in a,o=Object.isExtensible,r=function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}},s=t.exports=ad(\"WeakMap\",r,Wp);if(ae&&n){e=Wp.getConstructor(r,\"WeakMap\",!0),Jl.enable();var h=s.prototype,l=h.delete,d=h.has,c=h.get,u=h.set;hd(h,{delete:function(t){if(w(t)&&!o(t)){var n=i(this);return n.frozen||(n.frozen=new e),l.call(this,t)||n.frozen.delete(t)}return l.call(this,t)},has:function(t){if(w(t)&&!o(t)){var n=i(this);return n.frozen||(n.frozen=new e),d.call(this,t)||n.frozen.has(t)}return d.call(this,t)},get:function(t){if(w(t)&&!o(t)){var n=i(this);return n.frozen||(n.frozen=new e),d.call(this,t)?c.call(this,t):n.frozen.get(t)}return c.call(this,t)},set:function(t,n){if(w(t)&&!o(t)){var r=i(this);r.frozen||(r.frozen=new e),d.call(this,t)?u.call(this,t,n):r.frozen.set(t,n)}else u.call(this,t,n);return this}})}}));var qp,Vp,Up,Yp,Xp,Gp=k.WeakMap;function Kp(t,e,i,n){if(\"a\"===i&&!n)throw new TypeError(\"Private accessor was defined without a getter\");if(\"function\"==typeof e?t!==e||!n:!e.has(t))throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");return\"m\"===i?n:\"a\"===i?n.call(t):n?n.value:e.get(t)}function $p(t,e,i,n,o){if(\"m\"===n)throw new TypeError(\"Private method is not writable\");if(\"a\"===n&&!o)throw new TypeError(\"Private accessor was defined without a setter\");if(\"function\"==typeof e?t!==e||!o:!e.has(t))throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");return\"a\"===n?o.call(t,i):o?o.value=i:e.set(t,i),i}function Zp(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return Qp(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Qp(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function Qp(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}function Jp(t,e){var i,n=new ec,o=Zp(e);try{for(o.s();!(i=o.n()).done;){var r=i.value;t.has(r)||n.add(r)}}catch(t){o.e(t)}finally{o.f()}return n}var tv=function(){function t(){Nn(this,t),qp.set(this,new ec),Vp.set(this,new ec)}return Fn(t,[{key:\"size\",get:function(){return Kp(this,Vp,\"f\").size}},{key:\"add\",value:function(){for(var t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];for(var n=0,o=e;n<o.length;n++){var r=o[n];Kp(this,Vp,\"f\").add(r)}}},{key:\"delete\",value:function(){for(var t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];for(var n=0,o=e;n<o.length;n++){var r=o[n];Kp(this,Vp,\"f\").delete(r)}}},{key:\"clear\",value:function(){Kp(this,Vp,\"f\").clear()}},{key:\"getSelection\",value:function(){return wo(Kp(this,Vp,\"f\"))}},{key:\"getChanges\",value:function(){return{added:wo(Jp(Kp(this,qp,\"f\"),Kp(this,Vp,\"f\"))),deleted:wo(Jp(Kp(this,Vp,\"f\"),Kp(this,qp,\"f\"))),previous:wo(new ec(Kp(this,qp,\"f\"))),current:wo(new ec(Kp(this,Vp,\"f\")))}}},{key:\"commit\",value:function(){var t=this.getChanges();$p(this,qp,Kp(this,Vp,\"f\"),\"f\"),$p(this,Vp,new ec(Kp(this,qp,\"f\")),\"f\");var e,i=Zp(t.added);try{for(i.s();!(e=i.n()).done;){e.value.select()}}catch(t){i.e(t)}finally{i.f()}var n,o=Zp(t.deleted);try{for(o.s();!(n=o.n()).done;){n.value.unselect()}}catch(t){o.e(t)}finally{o.f()}return t}}]),t}();qp=new Gp,Vp=new Gp;var ev=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:function(){};Nn(this,t),Up.set(this,new tv),Yp.set(this,new tv),Xp.set(this,void 0),$p(this,Xp,e,\"f\")}return Fn(t,[{key:\"sizeNodes\",get:function(){return Kp(this,Up,\"f\").size}},{key:\"sizeEdges\",get:function(){return Kp(this,Yp,\"f\").size}},{key:\"getNodes\",value:function(){return Kp(this,Up,\"f\").getSelection()}},{key:\"getEdges\",value:function(){return Kp(this,Yp,\"f\").getSelection()}},{key:\"addNodes\",value:function(){var t;(t=Kp(this,Up,\"f\")).add.apply(t,arguments)}},{key:\"addEdges\",value:function(){var t;(t=Kp(this,Yp,\"f\")).add.apply(t,arguments)}},{key:\"deleteNodes\",value:function(t){Kp(this,Up,\"f\").delete(t)}},{key:\"deleteEdges\",value:function(t){Kp(this,Yp,\"f\").delete(t)}},{key:\"clear\",value:function(){Kp(this,Up,\"f\").clear(),Kp(this,Yp,\"f\").clear()}},{key:\"commit\",value:function(){for(var t,e,i={nodes:Kp(this,Up,\"f\").commit(),edges:Kp(this,Yp,\"f\").commit()},n=arguments.length,o=new Array(n),r=0;r<n;r++)o[r]=arguments[r];return(t=Kp(this,Xp,\"f\")).call.apply(t,Eo(e=[this,i]).call(e,o)),i}}]),t}();function iv(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return nv(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return nv(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function nv(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}Up=new Gp,Yp=new Gp,Xp=new Gp;var ov=function(){function t(e,i){var n=this;Nn(this,t),this.body=e,this.canvas=i,this._selectionAccumulator=new ev,this.hoverObj={nodes:{},edges:{}},this.options={},this.defaultOptions={multiselect:!1,selectable:!0,selectConnectedEdges:!0,hoverConnectedEdges:!0},At(this.options,this.defaultOptions),this.body.emitter.on(\"_dataChanged\",(function(){n.updateSelection()}))}return Fn(t,[{key:\"setOptions\",value:function(t){if(void 0!==t){Eh([\"multiselect\",\"hoverConnectedEdges\",\"selectable\",\"selectConnectedEdges\"],this.options,t)}}},{key:\"selectOnPoint\",value:function(t){var e=!1;if(!0===this.options.selectable){var i=this.getNodeAt(t)||this.getEdgeAt(t);this.unselectAll(),void 0!==i&&(e=this.selectObject(i)),this.body.emitter.emit(\"_requestRedraw\")}return e}},{key:\"selectAdditionalOnPoint\",value:function(t){var e=!1;if(!0===this.options.selectable){var i=this.getNodeAt(t)||this.getEdgeAt(t);void 0!==i&&(e=!0,!0===i.isSelected()?this.deselectObject(i):this.selectObject(i),this.body.emitter.emit(\"_requestRedraw\"))}return e}},{key:\"_initBaseEvent\",value:function(t,e){var i={};return i.pointer={DOM:{x:e.x,y:e.y},canvas:this.canvas.DOMtoCanvas(e)},i.event=t,i}},{key:\"generateClickEvent\",value:function(t,e,i,n){var o=arguments.length>4&&void 0!==arguments[4]&&arguments[4],r=this._initBaseEvent(e,i);if(!0===o)r.nodes=[],r.edges=[];else{var s=this.getSelection();r.nodes=s.nodes,r.edges=s.edges}void 0!==n&&(r.previousSelection=n),\"click\"==t&&(r.items=this.getClickedItems(i)),void 0!==e.controlEdge&&(r.controlEdge=e.controlEdge),this.body.emitter.emit(t,r)}},{key:\"selectObject\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.options.selectConnectedEdges;if(void 0!==t){if(t instanceof cf){var i;if(!0===e)(i=this._selectionAccumulator).addEdges.apply(i,wo(t.edges));this._selectionAccumulator.addNodes(t)}else this._selectionAccumulator.addEdges(t);return!0}return!1}},{key:\"deselectObject\",value:function(t){!0===t.isSelected()&&(t.selected=!1,this._removeFromSelection(t))}},{key:\"_getAllNodesOverlappingWith\",value:function(t){for(var e=[],i=this.body.nodes,n=0;n<this.body.nodeIndices.length;n++){var o=this.body.nodeIndices[n];i[o].isOverlappingWith(t)&&e.push(o)}return e}},{key:\"_pointerToPositionObject\",value:function(t){var e=this.canvas.DOMtoCanvas(t);return{left:e.x-1,top:e.y+1,right:e.x+1,bottom:e.y-1}}},{key:\"getNodeAt\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this._pointerToPositionObject(t),n=this._getAllNodesOverlappingWith(i);return n.length>0?!0===e?this.body.nodes[n[n.length-1]]:n[n.length-1]:void 0}},{key:\"_getEdgesOverlappingWith\",value:function(t,e){for(var i=this.body.edges,n=0;n<this.body.edgeIndices.length;n++){var o=this.body.edgeIndices[n];i[o].isOverlappingWith(t)&&e.push(o)}}},{key:\"_getAllEdgesOverlappingWith\",value:function(t){var e=[];return this._getEdgesOverlappingWith(t,e),e}},{key:\"getEdgeAt\",value:function(t){for(var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this.canvas.DOMtoCanvas(t),n=10,o=null,r=this.body.edges,s=0;s<this.body.edgeIndices.length;s++){var a=this.body.edgeIndices[s],h=r[a];if(h.connected){var l=h.from.x,d=h.from.y,c=h.to.x,u=h.to.y,f=h.edgeType.getDistanceToEdge(l,d,c,u,i.x,i.y);f<n&&(o=a,n=f)}}return null!==o?!0===e?this.body.edges[o]:o:void 0}},{key:\"_addToHover\",value:function(t){t instanceof cf?this.hoverObj.nodes[t.id]=t:this.hoverObj.edges[t.id]=t}},{key:\"_removeFromSelection\",value:function(t){var e;t instanceof cf?(this._selectionAccumulator.deleteNodes(t),(e=this._selectionAccumulator).deleteEdges.apply(e,wo(t.edges))):this._selectionAccumulator.deleteEdges(t)}},{key:\"unselectAll\",value:function(){this._selectionAccumulator.clear()}},{key:\"getSelectedNodeCount\",value:function(){return this._selectionAccumulator.sizeNodes}},{key:\"getSelectedEdgeCount\",value:function(){return this._selectionAccumulator.sizeEdges}},{key:\"_hoverConnectedEdges\",value:function(t){for(var e=0;e<t.edges.length;e++){var i=t.edges[e];i.hover=!0,this._addToHover(i)}}},{key:\"emitBlurEvent\",value:function(t,e,i){var n=this._initBaseEvent(t,e);!0===i.hover&&(i.hover=!1,i instanceof cf?(n.node=i.id,this.body.emitter.emit(\"blurNode\",n)):(n.edge=i.id,this.body.emitter.emit(\"blurEdge\",n)))}},{key:\"emitHoverEvent\",value:function(t,e,i){var n=this._initBaseEvent(t,e),o=!1;return!1===i.hover&&(i.hover=!0,this._addToHover(i),o=!0,i instanceof cf?(n.node=i.id,this.body.emitter.emit(\"hoverNode\",n)):(n.edge=i.id,this.body.emitter.emit(\"hoverEdge\",n))),o}},{key:\"hoverObject\",value:function(t,e){var i=this.getNodeAt(e);void 0===i&&(i=this.getEdgeAt(e));var n=!1;for(var o in this.hoverObj.nodes)Object.prototype.hasOwnProperty.call(this.hoverObj.nodes,o)&&(void 0===i||i instanceof cf&&i.id!=o||i instanceof ep)&&(this.emitBlurEvent(t,e,this.hoverObj.nodes[o]),delete this.hoverObj.nodes[o],n=!0);for(var r in this.hoverObj.edges)Object.prototype.hasOwnProperty.call(this.hoverObj.edges,r)&&(!0===n?(this.hoverObj.edges[r].hover=!1,delete this.hoverObj.edges[r]):(void 0===i||i instanceof ep&&i.id!=r||i instanceof cf&&!i.hover)&&(this.emitBlurEvent(t,e,this.hoverObj.edges[r]),delete this.hoverObj.edges[r],n=!0));if(void 0!==i){var s=zo(this.hoverObj.edges).length,a=zo(this.hoverObj.nodes).length;(n||i instanceof ep&&0===s&&0===a||i instanceof cf&&0===s&&0===a)&&(n=this.emitHoverEvent(t,e,i)),i instanceof cf&&!0===this.options.hoverConnectedEdges&&this._hoverConnectedEdges(i)}!0===n&&this.body.emitter.emit(\"_requestRedraw\")}},{key:\"commitWithoutEmitting\",value:function(){this._selectionAccumulator.commit()}},{key:\"commitAndEmit\",value:function(t,e){var i=!1,n=this._selectionAccumulator.commit(),o={nodes:n.nodes.previous,edges:n.edges.previous};n.edges.deleted.length>0&&(this.generateClickEvent(\"deselectEdge\",e,t,o),i=!0),n.nodes.deleted.length>0&&(this.generateClickEvent(\"deselectNode\",e,t,o),i=!0),n.nodes.added.length>0&&(this.generateClickEvent(\"selectNode\",e,t),i=!0),n.edges.added.length>0&&(this.generateClickEvent(\"selectEdge\",e,t),i=!0),!0===i&&this.generateClickEvent(\"select\",e,t)}},{key:\"getSelection\",value:function(){return{nodes:this.getSelectedNodeIds(),edges:this.getSelectedEdgeIds()}}},{key:\"getSelectedNodes\",value:function(){return this._selectionAccumulator.getNodes()}},{key:\"getSelectedEdges\",value:function(){return this._selectionAccumulator.getEdges()}},{key:\"getSelectedNodeIds\",value:function(){var t;return Io(t=this._selectionAccumulator.getNodes()).call(t,(function(t){return t.id}))}},{key:\"getSelectedEdgeIds\",value:function(){var t;return Io(t=this._selectionAccumulator.getEdges()).call(t,(function(t){return t.id}))}},{key:\"setSelection\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!t||!t.nodes&&!t.edges)throw new TypeError(\"Selection must be an object with nodes and/or edges properties\");if((e.unselectAll||void 0===e.unselectAll)&&this.unselectAll(),t.nodes){var i,n=iv(t.nodes);try{for(n.s();!(i=n.n()).done;){var o=i.value,r=this.body.nodes[o];if(!r)throw new RangeError('Node with id \"'+o+'\" not found');this.selectObject(r,e.highlightEdges)}}catch(t){n.e(t)}finally{n.f()}}if(t.edges){var s,a=iv(t.edges);try{for(a.s();!(s=a.n()).done;){var h=s.value,l=this.body.edges[h];if(!l)throw new RangeError('Edge with id \"'+h+'\" not found');this.selectObject(l)}}catch(t){a.e(t)}finally{a.f()}}this.body.emitter.emit(\"_requestRedraw\"),this._selectionAccumulator.commit()}},{key:\"selectNodes\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(!t||void 0===t.length)throw\"Selection must be an array with ids\";this.setSelection({nodes:t},{highlightEdges:e})}},{key:\"selectEdges\",value:function(t){if(!t||void 0===t.length)throw\"Selection must be an array with ids\";this.setSelection({edges:t})}},{key:\"updateSelection\",value:function(){for(var t in this._selectionAccumulator.getNodes())Object.prototype.hasOwnProperty.call(this.body.nodes,t.id)||this._selectionAccumulator.deleteNodes(t);for(var e in this._selectionAccumulator.getEdges())Object.prototype.hasOwnProperty.call(this.body.edges,e.id)||this._selectionAccumulator.deleteEdges(e)}},{key:\"getClickedItems\",value:function(t){for(var e=this.canvas.DOMtoCanvas(t),i=[],n=this.body.nodeIndices,o=this.body.nodes,r=n.length-1;r>=0;r--){var s=o[n[r]].getItemsOnPoint(e);i.push.apply(i,s)}for(var a=this.body.edgeIndices,h=this.body.edges,l=a.length-1;l>=0;l--){var d=h[a[l]].getItemsOnPoint(e);i.push.apply(i,d)}return i}}]),t}(),rv=n((function(t,e){!function(t){function e(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}t.__esModule=!0,t.sort=v;var i=32,n=7,o=256,r=[1,10,100,1e3,1e4,1e5,1e6,1e7,1e8,1e9];function s(t){return t<1e5?t<100?t<10?0:1:t<1e4?t<1e3?2:3:4:t<1e7?t<1e6?5:6:t<1e9?t<1e8?7:8:9}function a(t,e){if(t===e)return 0;if(~~t===t&&~~e===e){if(0===t||0===e)return t<e?-1:1;if(t<0||e<0){if(e>=0)return-1;if(t>=0)return 1;t=-t,e=-e}var i=s(t),n=s(e),o=0;return i<n?(t*=r[n-i-1],e/=10,o=-1):i>n&&(e*=r[i-n-1],t/=10,o=1),t===e?o:t<e?-1:1}var a=String(t),h=String(e);return a===h?0:a<h?-1:1}function h(t){for(var e=0;t>=i;)e|=1&t,t>>=1;return t+e}function l(t,e,i,n){var o=e+1;if(o===i)return 1;if(n(t[o++],t[e])<0){for(;o<i&&n(t[o],t[o-1])<0;)o++;d(t,e,o)}else for(;o<i&&n(t[o],t[o-1])>=0;)o++;return o-e}function d(t,e,i){for(i--;e<i;){var n=t[e];t[e++]=t[i],t[i--]=n}}function c(t,e,i,n,o){for(n===e&&n++;n<i;n++){for(var r=t[n],s=e,a=n;s<a;){var h=s+a>>>1;o(r,t[h])<0?a=h:s=h+1}var l=n-s;switch(l){case 3:t[s+3]=t[s+2];case 2:t[s+2]=t[s+1];case 1:t[s+1]=t[s];break;default:for(;l>0;)t[s+l]=t[s+l-1],l--}t[s]=r}}function u(t,e,i,n,o,r){var s=0,a=0,h=1;if(r(t,e[i+o])>0){for(a=n-o;h<a&&r(t,e[i+o+h])>0;)s=h,(h=1+(h<<1))<=0&&(h=a);h>a&&(h=a),s+=o,h+=o}else{for(a=o+1;h<a&&r(t,e[i+o-h])<=0;)s=h,(h=1+(h<<1))<=0&&(h=a);h>a&&(h=a);var l=s;s=o-h,h=o-l}for(s++;s<h;){var d=s+(h-s>>>1);r(t,e[i+d])>0?s=d+1:h=d}return h}function f(t,e,i,n,o,r){var s=0,a=0,h=1;if(r(t,e[i+o])<0){for(a=o+1;h<a&&r(t,e[i+o-h])<0;)s=h,(h=1+(h<<1))<=0&&(h=a);h>a&&(h=a);var l=s;s=o-h,h=o-l}else{for(a=n-o;h<a&&r(t,e[i+o+h])>=0;)s=h,(h=1+(h<<1))<=0&&(h=a);h>a&&(h=a),s+=o,h+=o}for(s++;s<h;){var d=s+(h-s>>>1);r(t,e[i+d])<0?h=d:s=d+1}return h}var p=function(){function t(i,r){e(this,t),this.array=null,this.compare=null,this.minGallop=n,this.length=0,this.tmpStorageLength=o,this.stackLength=0,this.runStart=null,this.runLength=null,this.stackSize=0,this.array=i,this.compare=r,this.length=i.length,this.length<2*o&&(this.tmpStorageLength=this.length>>>1),this.tmp=new Array(this.tmpStorageLength),this.stackLength=this.length<120?5:this.length<1542?10:this.length<119151?19:40,this.runStart=new Array(this.stackLength),this.runLength=new Array(this.stackLength)}return t.prototype.pushRun=function(t,e){this.runStart[this.stackSize]=t,this.runLength[this.stackSize]=e,this.stackSize+=1},t.prototype.mergeRuns=function(){for(;this.stackSize>1;){var t=this.stackSize-2;if(t>=1&&this.runLength[t-1]<=this.runLength[t]+this.runLength[t+1]||t>=2&&this.runLength[t-2]<=this.runLength[t]+this.runLength[t-1])this.runLength[t-1]<this.runLength[t+1]&&t--;else if(this.runLength[t]>this.runLength[t+1])break;this.mergeAt(t)}},t.prototype.forceMergeRuns=function(){for(;this.stackSize>1;){var t=this.stackSize-2;t>0&&this.runLength[t-1]<this.runLength[t+1]&&t--,this.mergeAt(t)}},t.prototype.mergeAt=function(t){var e=this.compare,i=this.array,n=this.runStart[t],o=this.runLength[t],r=this.runStart[t+1],s=this.runLength[t+1];this.runLength[t]=o+s,t===this.stackSize-3&&(this.runStart[t+1]=this.runStart[t+2],this.runLength[t+1]=this.runLength[t+2]),this.stackSize--;var a=f(i[r],i,n,o,0,e);n+=a,0!=(o-=a)&&0!==(s=u(i[n+o-1],i,r,s,s-1,e))&&(o<=s?this.mergeLow(n,o,r,s):this.mergeHigh(n,o,r,s))},t.prototype.mergeLow=function(t,e,i,o){var r=this.compare,s=this.array,a=this.tmp,h=0;for(h=0;h<e;h++)a[h]=s[t+h];var l=0,d=i,c=t;if(s[c++]=s[d++],0!=--o)if(1!==e){for(var p=this.minGallop;;){var v=0,g=0,y=!1;do{if(r(s[d],a[l])<0){if(s[c++]=s[d++],g++,v=0,0==--o){y=!0;break}}else if(s[c++]=a[l++],v++,g=0,1==--e){y=!0;break}}while((v|g)<p);if(y)break;do{if(0!==(v=f(s[d],a,l,e,0,r))){for(h=0;h<v;h++)s[c+h]=a[l+h];if(c+=v,l+=v,(e-=v)<=1){y=!0;break}}if(s[c++]=s[d++],0==--o){y=!0;break}if(0!==(g=u(a[l],s,d,o,0,r))){for(h=0;h<g;h++)s[c+h]=s[d+h];if(c+=g,d+=g,0==(o-=g)){y=!0;break}}if(s[c++]=a[l++],1==--e){y=!0;break}p--}while(v>=n||g>=n);if(y)break;p<0&&(p=0),p+=2}if(this.minGallop=p,p<1&&(this.minGallop=1),1===e){for(h=0;h<o;h++)s[c+h]=s[d+h];s[c+o]=a[l]}else{if(0===e)throw new Error(\"mergeLow preconditions were not respected\");for(h=0;h<e;h++)s[c+h]=a[l+h]}}else{for(h=0;h<o;h++)s[c+h]=s[d+h];s[c+o]=a[l]}else for(h=0;h<e;h++)s[c+h]=a[l+h]},t.prototype.mergeHigh=function(t,e,i,o){var r=this.compare,s=this.array,a=this.tmp,h=0;for(h=0;h<o;h++)a[h]=s[i+h];var l=t+e-1,d=o-1,c=i+o-1,p=0,v=0;if(s[c--]=s[l--],0!=--e)if(1!==o){for(var g=this.minGallop;;){var y=0,m=0,b=!1;do{if(r(a[d],s[l])<0){if(s[c--]=s[l--],y++,m=0,0==--e){b=!0;break}}else if(s[c--]=a[d--],m++,y=0,1==--o){b=!0;break}}while((y|m)<g);if(b)break;do{if(0!=(y=e-f(a[d],s,t,e,e-1,r))){for(e-=y,v=1+(c-=y),p=1+(l-=y),h=y-1;h>=0;h--)s[v+h]=s[p+h];if(0===e){b=!0;break}}if(s[c--]=a[d--],1==--o){b=!0;break}if(0!=(m=o-u(s[l],a,0,o,o-1,r))){for(o-=m,v=1+(c-=m),p=1+(d-=m),h=0;h<m;h++)s[v+h]=a[p+h];if(o<=1){b=!0;break}}if(s[c--]=s[l--],0==--e){b=!0;break}g--}while(y>=n||m>=n);if(b)break;g<0&&(g=0),g+=2}if(this.minGallop=g,g<1&&(this.minGallop=1),1===o){for(v=1+(c-=e),p=1+(l-=e),h=e-1;h>=0;h--)s[v+h]=s[p+h];s[c]=a[d]}else{if(0===o)throw new Error(\"mergeHigh preconditions were not respected\");for(p=c-(o-1),h=0;h<o;h++)s[p+h]=a[h]}}else{for(v=1+(c-=e),p=1+(l-=e),h=e-1;h>=0;h--)s[v+h]=s[p+h];s[c]=a[d]}else for(p=c-(o-1),h=0;h<o;h++)s[p+h]=a[h]},t}();function v(t,e,n,o){if(!Array.isArray(t))throw new TypeError(\"Can only sort arrays\");e?\"function\"!=typeof e&&(o=n,n=e,e=a):e=a,n||(n=0),o||(o=t.length);var r=o-n;if(!(r<2)){var s=0;if(r<i)c(t,n,o,n+(s=l(t,n,o,e)),e);else{var d=new p(t,e),u=h(r);do{if((s=l(t,n,o,e))<u){var f=r;f>u&&(f=u),c(t,n,n+f,n+s,e),s=f}d.pushRun(n,s),d.mergeRuns(),r-=s,n+=s}while(0!==r);d.forceMergeRuns()}}}}(e)}));i(rv);var sv=rv,av=sv.sort;function hv(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var lv=function(){function t(){Nn(this,t)}return Fn(t,[{key:\"abstract\",value:function(){throw new Error(\"Can't instantiate abstract class!\")}},{key:\"fake_use\",value:function(){}},{key:\"curveType\",value:function(){return this.abstract()}},{key:\"getPosition\",value:function(t){return this.fake_use(t),this.abstract()}},{key:\"setPosition\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;this.fake_use(t,e,i),this.abstract()}},{key:\"getTreeSize\",value:function(t){return this.fake_use(t),this.abstract()}},{key:\"sort\",value:function(t){this.fake_use(t),this.abstract()}},{key:\"fix\",value:function(t,e){this.fake_use(t,e),this.abstract()}},{key:\"shift\",value:function(t,e){this.fake_use(t,e),this.abstract()}}]),t}(),dv=function(t){Ad(i,t);var e=hv(i);function i(t){var n;return Nn(this,i),(n=e.call(this)).layout=t,n}return Fn(i,[{key:\"curveType\",value:function(){return\"horizontal\"}},{key:\"getPosition\",value:function(t){return t.x}},{key:\"setPosition\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;void 0!==i&&this.layout.hierarchical.addToOrdering(t,i),t.x=e}},{key:\"getTreeSize\",value:function(t){var e=this.layout.hierarchical.getTreeSize(this.layout.body.nodes,t);return{min:e.min_x,max:e.max_x}}},{key:\"sort\",value:function(t){av(t,(function(t,e){return t.x-e.x}))}},{key:\"fix\",value:function(t,e){t.y=this.layout.options.hierarchical.levelSeparation*e,t.options.fixed.y=!0}},{key:\"shift\",value:function(t,e){this.layout.body.nodes[t].x+=e}}]),i}(lv),cv=function(t){Ad(i,t);var e=hv(i);function i(t){var n;return Nn(this,i),(n=e.call(this)).layout=t,n}return Fn(i,[{key:\"curveType\",value:function(){return\"vertical\"}},{key:\"getPosition\",value:function(t){return t.y}},{key:\"setPosition\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;void 0!==i&&this.layout.hierarchical.addToOrdering(t,i),t.y=e}},{key:\"getTreeSize\",value:function(t){var e=this.layout.hierarchical.getTreeSize(this.layout.body.nodes,t);return{min:e.min_y,max:e.max_y}}},{key:\"sort\",value:function(t){av(t,(function(t,e){return t.y-e.y}))}},{key:\"fix\",value:function(t,e){t.x=this.layout.options.hierarchical.levelSeparation*e,t.options.fixed.x=!0}},{key:\"shift\",value:function(t,e){this.layout.body.nodes[t].y+=e}}]),i}(lv),uv=Gi.every,fv=Ao(\"every\");gt({target:\"Array\",proto:!0,forced:!fv},{every:function(t){return uv(this,t,arguments.length>1?arguments[1]:void 0)}});var pv=Ht(\"Array\").every,vv=Array.prototype,gv=function(t){var e=t.every;return t===vv||t instanceof Array&&e===vv.every?pv:e};function yv(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return mv(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return mv(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function mv(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}function bv(t,e){var i=new ec;return Wo(t).call(t,(function(t){var e;Wo(e=t.edges).call(e,(function(t){t.connected&&i.add(t)}))})),Wo(i).call(i,(function(t){var i=t.from.id,n=t.to.id;null==e[i]&&(e[i]=0),(null==e[n]||e[i]>=e[n])&&(e[n]=e[i]+1)})),e}function wv(t,e,i,n){var o,r,s=Gr(null),a=Kd(o=wo(Dc(n).call(n))).call(o,(function(t,e){return t+1+e.edges.length}),0),h=i+\"Id\",l=\"to\"===i?1:-1,d=yv(n);try{var c=function(){var o=uo(r.value,2),d=o[0],c=o[1];if(!n.has(d)||!t(c))return\"continue\";s[d]=0;for(var u=[c],f=0,p=void 0,v=function(){var t,o;if(!n.has(d))return\"continue\";var r=s[p.id]+l;if(Wo(t=mr(o=p.edges).call(o,(function(t){return t.connected&&t.to!==t.from&&t[i]!==p&&n.has(t.toId)&&n.has(t.fromId)}))).call(t,(function(t){var n=t[h],o=s[n];(null==o||e(r,o))&&(s[n]=r,u.push(t[i]))})),f>a)return{v:{v:bv(n,s)}};++f};p=u.pop();){var g=v();if(\"continue\"!==g&&\"object\"===go(g))return g.v}};for(d.s();!(r=d.n()).done;){var u=c();if(\"continue\"!==u&&\"object\"===go(u))return u.v}}catch(t){d.e(t)}finally{d.f()}return s}var kv=function(){function t(){Nn(this,t),this.childrenReference={},this.parentReference={},this.trees={},this.distributionOrdering={},this.levels={},this.distributionIndex={},this.isTree=!1,this.treeIndex=-1}return Fn(t,[{key:\"addRelation\",value:function(t,e){void 0===this.childrenReference[t]&&(this.childrenReference[t]=[]),this.childrenReference[t].push(e),void 0===this.parentReference[e]&&(this.parentReference[e]=[]),this.parentReference[e].push(t)}},{key:\"checkIfTree\",value:function(){for(var t in this.parentReference)if(this.parentReference[t].length>1)return void(this.isTree=!1);this.isTree=!0}},{key:\"numTrees\",value:function(){return this.treeIndex+1}},{key:\"setTreeIndex\",value:function(t,e){void 0!==e&&void 0===this.trees[t.id]&&(this.trees[t.id]=e,this.treeIndex=Math.max(e,this.treeIndex))}},{key:\"ensureLevel\",value:function(t){void 0===this.levels[t]&&(this.levels[t]=0)}},{key:\"getMaxLevel\",value:function(t){var e=this,i={};return function t(n){if(void 0!==i[n])return i[n];var o=e.levels[n];if(e.childrenReference[n]){var r=e.childrenReference[n];if(r.length>0)for(var s=0;s<r.length;s++)o=Math.max(o,t(r[s]))}return i[n]=o,o}(t)}},{key:\"levelDownstream\",value:function(t,e){void 0===this.levels[e.id]&&(void 0===this.levels[t.id]&&(this.levels[t.id]=0),this.levels[e.id]=this.levels[t.id]+1)}},{key:\"setMinLevelToZero\",value:function(t){var e=1e9;for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&void 0!==this.levels[i]&&(e=Math.min(this.levels[i],e));for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&void 0!==this.levels[n]&&(this.levels[n]-=e)}},{key:\"getTreeSize\",value:function(t,e){var i=1e9,n=-1e9,o=1e9,r=-1e9;for(var s in this.trees)if(Object.prototype.hasOwnProperty.call(this.trees,s)&&this.trees[s]===e){var a=t[s];i=Math.min(a.x,i),n=Math.max(a.x,n),o=Math.min(a.y,o),r=Math.max(a.y,r)}return{min_x:i,max_x:n,min_y:o,max_y:r}}},{key:\"hasSameParent\",value:function(t,e){var i=this.parentReference[t.id],n=this.parentReference[e.id];if(void 0===i||void 0===n)return!1;for(var o=0;o<i.length;o++)for(var r=0;r<n.length;r++)if(i[o]==n[r])return!0;return!1}},{key:\"inSameSubNetwork\",value:function(t,e){return this.trees[t.id]===this.trees[e.id]}},{key:\"getLevels\",value:function(){return zo(this.distributionOrdering)}},{key:\"addToOrdering\",value:function(t,e){void 0===this.distributionOrdering[e]&&(this.distributionOrdering[e]=[]);var i=!1,n=this.distributionOrdering[e];for(var o in n)if(n[o]===t){i=!0;break}i||(this.distributionOrdering[e].push(t),this.distributionIndex[t.id]=this.distributionOrdering[e].length-1)}}]),t}(),_v=function(){function t(e){Nn(this,t),this.body=e,this._resetRNG(Math.random()+\":\"+No()),this.setPhysics=!1,this.options={},this.optionsBackup={physics:{}},this.defaultOptions={randomSeed:void 0,improvedLayout:!0,clusterThreshold:150,hierarchical:{enabled:!1,levelSeparation:150,nodeSpacing:100,treeSpacing:200,blockShifting:!0,edgeMinimization:!0,parentCentralization:!0,direction:\"UD\",sortMethod:\"hubsize\"}},At(this.options,this.defaultOptions),this.bindEventListeners()}return Fn(t,[{key:\"bindEventListeners\",value:function(){var t=this;this.body.emitter.on(\"_dataChanged\",(function(){t.setupHierarchicalLayout()})),this.body.emitter.on(\"_dataLoaded\",(function(){t.layoutNetwork()})),this.body.emitter.on(\"_resetHierarchicalLayout\",(function(){t.setupHierarchicalLayout()})),this.body.emitter.on(\"_adjustEdgesForHierarchicalLayout\",(function(){if(!0===t.options.hierarchical.enabled){var e=t.direction.curveType();t.body.emitter.emit(\"_forceDisableDynamicCurves\",e,!1)}}))}},{key:\"setOptions\",value:function(t,e){if(void 0!==t){var i=this.options.hierarchical,n=i.enabled;if(Eh([\"randomSeed\",\"improvedLayout\",\"clusterThreshold\"],this.options,t),$h(this.options,t,\"hierarchical\"),void 0!==t.randomSeed&&this._resetRNG(t.randomSeed),!0===i.enabled)return!0===n&&this.body.emitter.emit(\"refresh\",!0),\"RL\"===i.direction||\"DU\"===i.direction?i.levelSeparation>0&&(i.levelSeparation*=-1):i.levelSeparation<0&&(i.levelSeparation*=-1),this.setDirectionStrategy(),this.body.emitter.emit(\"_resetHierarchicalLayout\"),this.adaptAllOptionsForHierarchicalLayout(e);if(!0===n)return this.body.emitter.emit(\"refresh\"),Ch(e,this.optionsBackup)}return e}},{key:\"_resetRNG\",value:function(t){this.initialRandomSeed=t,this._rng=ah(this.initialRandomSeed)}},{key:\"adaptAllOptionsForHierarchicalLayout\",value:function(t){if(!0===this.options.hierarchical.enabled){var e=this.optionsBackup.physics;void 0===t.physics||!0===t.physics?(t.physics={enabled:void 0===e.enabled||e.enabled,solver:\"hierarchicalRepulsion\"},e.enabled=void 0===e.enabled||e.enabled,e.solver=e.solver||\"barnesHut\"):\"object\"===go(t.physics)?(e.enabled=void 0===t.physics.enabled||t.physics.enabled,e.solver=t.physics.solver||\"barnesHut\",t.physics.solver=\"hierarchicalRepulsion\"):!1!==t.physics&&(e.solver=\"barnesHut\",t.physics={solver:\"hierarchicalRepulsion\"});var i=this.direction.curveType();if(void 0===t.edges)this.optionsBackup.edges={smooth:{enabled:!0,type:\"dynamic\"}},t.edges={smooth:!1};else if(void 0===t.edges.smooth)this.optionsBackup.edges={smooth:{enabled:!0,type:\"dynamic\"}},t.edges.smooth=!1;else if(\"boolean\"==typeof t.edges.smooth)this.optionsBackup.edges={smooth:t.edges.smooth},t.edges.smooth={enabled:t.edges.smooth,type:i};else{var n=t.edges.smooth;void 0!==n.type&&\"dynamic\"!==n.type&&(i=n.type),this.optionsBackup.edges={smooth:{enabled:void 0===n.enabled||n.enabled,type:void 0===n.type?\"dynamic\":n.type,roundness:void 0===n.roundness?.5:n.roundness,forceDirection:void 0!==n.forceDirection&&n.forceDirection}},t.edges.smooth={enabled:void 0===n.enabled||n.enabled,type:i,roundness:void 0===n.roundness?.5:n.roundness,forceDirection:void 0!==n.forceDirection&&n.forceDirection}}this.body.emitter.emit(\"_forceDisableDynamicCurves\",i)}return t}},{key:\"positionInitially\",value:function(t){if(!0!==this.options.hierarchical.enabled){this._resetRNG(this.initialRandomSeed);for(var e=t.length+50,i=0;i<t.length;i++){var n=t[i],o=2*Math.PI*this._rng();void 0===n.x&&(n.x=e*Math.cos(o)),void 0===n.y&&(n.y=e*Math.sin(o))}}}},{key:\"layoutNetwork\",value:function(){if(!0!==this.options.hierarchical.enabled&&!0===this.options.improvedLayout){for(var t=this.body.nodeIndices,e=0,i=0;i<t.length;i++){!0===this.body.nodes[t[i]].predefinedPosition&&(e+=1)}if(e<.5*t.length){var n=0,o=this.options.clusterThreshold,r={clusterNodeProperties:{shape:\"ellipse\",label:\"\",group:\"\",font:{multi:!1}},clusterEdgeProperties:{label:\"\",font:{multi:!1},smooth:{enabled:!1}}};if(t.length>o){for(var s=t.length;t.length>o&&n<=10;){n+=1;var a=t.length;if(n%3==0?this.body.modules.clustering.clusterBridges(r):this.body.modules.clustering.clusterOutliers(r),a==t.length&&n%3!=0)return this._declusterAll(),this.body.emitter.emit(\"_layoutFailed\"),void console.info(\"This network could not be positioned by this version of the improved layout algorithm. Please disable improvedLayout for better performance.\")}this.body.modules.kamadaKawai.setOptions({springLength:Math.max(150,2*s)})}n>10&&console.info(\"The clustering didn't succeed within the amount of interations allowed, progressing with partial result.\"),this.body.modules.kamadaKawai.solve(t,this.body.edgeIndices,!0),this._shiftToCenter();for(var h=0;h<t.length;h++){var l=this.body.nodes[t[h]];!1===l.predefinedPosition&&(l.x+=70*(.5-this._rng()),l.y+=70*(.5-this._rng()))}this._declusterAll(),this.body.emitter.emit(\"_repositionBezierNodes\")}}}},{key:\"_shiftToCenter\",value:function(){for(var t=pp.getRangeCore(this.body.nodes,this.body.nodeIndices),e=pp.findCenter(t),i=0;i<this.body.nodeIndices.length;i++){var n=this.body.nodes[this.body.nodeIndices[i]];n.x-=e.x,n.y-=e.y}}},{key:\"_declusterAll\",value:function(){for(var t=!0;!0===t;){t=!1;for(var e=0;e<this.body.nodeIndices.length;e++)!0===this.body.nodes[this.body.nodeIndices[e]].isCluster&&(t=!0,this.body.modules.clustering.openCluster(this.body.nodeIndices[e],{},!1));!0===t&&this.body.emitter.emit(\"_dataChanged\")}}},{key:\"getSeed\",value:function(){return this.initialRandomSeed}},{key:\"setupHierarchicalLayout\",value:function(){if(!0===this.options.hierarchical.enabled&&this.body.nodeIndices.length>0){var t,e,i=!1,n=!1;for(e in this.lastNodeOnLevel={},this.hierarchical=new kv,this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,e)&&(void 0!==(t=this.body.nodes[e]).options.level?(i=!0,this.hierarchical.levels[e]=t.options.level):n=!0);if(!0===n&&!0===i)throw new Error(\"To use the hierarchical layout, nodes require either no predefined levels or levels have to be defined for all nodes.\");if(!0===n){var o=this.options.hierarchical.sortMethod;\"hubsize\"===o?this._determineLevelsByHubsize():\"directed\"===o?this._determineLevelsDirected():\"custom\"===o&&this._determineLevelsCustomCallback()}for(var r in this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,r)&&this.hierarchical.ensureLevel(r);var s=this._getDistribution();this._generateMap(),this._placeNodesByHierarchy(s),this._condenseHierarchy(),this._shiftToCenter()}}},{key:\"_condenseHierarchy\",value:function(){var t=this,e=!1,i={},n=function(e,i){var n=t.hierarchical.trees;for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&n[o]===e&&t.direction.shift(o,i)},o=function(){for(var e=[],i=0;i<t.hierarchical.numTrees();i++)e.push(t.direction.getTreeSize(i));return e},r=function e(i,n){if(!n[i.id]&&(n[i.id]=!0,t.hierarchical.childrenReference[i.id])){var o=t.hierarchical.childrenReference[i.id];if(o.length>0)for(var r=0;r<o.length;r++)e(t.body.nodes[o[r]],n)}},s=function(e){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1e9,n=1e9,o=1e9,r=1e9,s=-1e9;for(var a in e)if(Object.prototype.hasOwnProperty.call(e,a)){var h=t.body.nodes[a],l=t.hierarchical.levels[h.id],d=t.direction.getPosition(h),c=t._getSpaceAroundNode(h,e),u=uo(c,2),f=u[0],p=u[1];n=Math.min(f,n),o=Math.min(p,o),l<=i&&(r=Math.min(d,r),s=Math.max(d,s))}return[r,s,n,o]},a=function(e,i){var n=t.hierarchical.getMaxLevel(e.id),o=t.hierarchical.getMaxLevel(i.id);return Math.min(n,o)},h=function(e,i,n){for(var o=t.hierarchical,r=0;r<i.length;r++){var s=i[r],a=o.distributionOrdering[s];if(a.length>1)for(var h=0;h<a.length-1;h++){var l=a[h],d=a[h+1];o.hasSameParent(l,d)&&o.inSameSubNetwork(l,d)&&e(l,d,n)}}},l=function(i,n){var o=arguments.length>2&&void 0!==arguments[2]&&arguments[2],h=t.direction.getPosition(i),l=t.direction.getPosition(n),d=Math.abs(l-h),c=t.options.hierarchical.nodeSpacing;if(d>c){var u={},f={};r(i,u),r(n,f);var p=a(i,n),v=s(u,p),g=s(f,p),y=v[1],m=g[0],b=g[2],w=Math.abs(y-m);if(w>c){var k=y-m+c;k<-b+c&&(k=-b+c),k<0&&(t._shiftBlock(n.id,k),e=!0,!0===o&&t._centerParent(n))}}},d=function(n,o){for(var a=o.id,h=o.edges,l=t.hierarchical.levels[o.id],d=t.options.hierarchical.levelSeparation*t.options.hierarchical.levelSeparation,c={},u=[],f=0;f<h.length;f++){var p=h[f];if(p.toId!=p.fromId){var v=p.toId==a?p.from:p.to;c[h[f].id]=v,t.hierarchical.levels[v.id]<l&&u.push(p)}}var g=function(e,i){for(var n=0,o=0;o<i.length;o++)if(void 0!==c[i[o].id]){var r=t.direction.getPosition(c[i[o].id])-e;n+=r/Math.sqrt(r*r+d)}return n},y=function(e,i){for(var n=0,o=0;o<i.length;o++)if(void 0!==c[i[o].id]){var r=t.direction.getPosition(c[i[o].id])-e;n-=d*Math.pow(r*r+d,-1.5)}return n},m=function(e,i){for(var n=t.direction.getPosition(o),r={},s=0;s<e;s++){var a=g(n,i),h=y(n,i);if(void 0!==r[n-=Math.max(-40,Math.min(40,Math.round(a/h)))])break;r[n]=s}return n},b=m(n,u);!function(n){var a=t.direction.getPosition(o);if(void 0===i[o.id]){var h={};r(o,h),i[o.id]=h}var l=s(i[o.id]),d=l[2],c=l[3],u=n-a,f=0;u>0?f=Math.min(u,c-t.options.hierarchical.nodeSpacing):u<0&&(f=-Math.min(-u,d-t.options.hierarchical.nodeSpacing)),0!=f&&(t._shiftBlock(o.id,f),e=!0)}(b),function(i){var n=t.direction.getPosition(o),r=t._getSpaceAroundNode(o),s=uo(r,2),a=s[0],h=s[1],l=i-n,d=n;l>0?d=Math.min(n+(h-t.options.hierarchical.nodeSpacing),i):l<0&&(d=Math.max(n-(a-t.options.hierarchical.nodeSpacing),i)),d!==n&&(t.direction.setPosition(o,d),e=!0)}(b=m(n,h))};!0===this.options.hierarchical.blockShifting&&(function(i){var n=t.hierarchical.getLevels();n=Xo(n).call(n);for(var o=0;o<i&&(e=!1,h(l,n,!0),!0===e);o++);}(5),function(){for(var e in t.body.nodes)Object.prototype.hasOwnProperty.call(t.body.nodes,e)&&t._centerParent(t.body.nodes[e])}()),!0===this.options.hierarchical.edgeMinimization&&function(i){var n=t.hierarchical.getLevels();n=Xo(n).call(n);for(var o=0;o<i;o++){e=!1;for(var r=0;r<n.length;r++)for(var s=n[r],a=t.hierarchical.distributionOrdering[s],h=0;h<a.length;h++)d(1e3,a[h]);if(!0!==e)break}}(20),!0===this.options.hierarchical.parentCentralization&&function(){var e=t.hierarchical.getLevels();e=Xo(e).call(e);for(var i=0;i<e.length;i++)for(var n=e[i],o=t.hierarchical.distributionOrdering[n],r=0;r<o.length;r++)t._centerParent(o[r])}(),function(){for(var e=o(),i=0,r=0;r<e.length-1;r++){i+=e[r].max-e[r+1].min+t.options.hierarchical.treeSpacing,n(r+1,i)}}()}},{key:\"_getSpaceAroundNode\",value:function(t,e){var i=!0;void 0===e&&(i=!1);var n=this.hierarchical.levels[t.id];if(void 0!==n){var o=this.hierarchical.distributionIndex[t.id],r=this.direction.getPosition(t),s=this.hierarchical.distributionOrdering[n],a=1e9,h=1e9;if(0!==o){var l=s[o-1];if(!0===i&&void 0===e[l.id]||!1===i)a=r-this.direction.getPosition(l)}if(o!=s.length-1){var d=s[o+1];if(!0===i&&void 0===e[d.id]||!1===i){var c=this.direction.getPosition(d);h=Math.min(h,c-r)}}return[a,h]}return[0,0]}},{key:\"_centerParent\",value:function(t){if(this.hierarchical.parentReference[t.id])for(var e=this.hierarchical.parentReference[t.id],i=0;i<e.length;i++){var n=e[i],o=this.body.nodes[n],r=this.hierarchical.childrenReference[n];if(void 0!==r){var s=this._getCenterPosition(r),a=this.direction.getPosition(o),h=this._getSpaceAroundNode(o),l=uo(h,2),d=l[0],c=l[1],u=a-s;(u<0&&Math.abs(u)<c-this.options.hierarchical.nodeSpacing||u>0&&Math.abs(u)<d-this.options.hierarchical.nodeSpacing)&&this.direction.setPosition(o,s)}}}},{key:\"_placeNodesByHierarchy\",value:function(t){for(var e in this.positionedNodes={},t)if(Object.prototype.hasOwnProperty.call(t,e)){var i,n=zo(t[e]);n=this._indexArrayToNodes(n),xc(i=this.direction).call(i,n);for(var o=0,r=0;r<n.length;r++){var s=n[r];if(void 0===this.positionedNodes[s.id]){var a=this.options.hierarchical.nodeSpacing,h=a*o;o>0&&(h=this.direction.getPosition(n[r-1])+a),this.direction.setPosition(s,h,e),this._validatePositionAndContinue(s,e,h),o++}}}}},{key:\"_placeBranchNodes\",value:function(t,e){var i,n=this.hierarchical.childrenReference[t];if(void 0!==n){for(var o=[],r=0;r<n.length;r++)o.push(this.body.nodes[n[r]]);xc(i=this.direction).call(i,o);for(var s=0;s<o.length;s++){var a=o[s],h=this.hierarchical.levels[a.id];if(!(h>e&&void 0===this.positionedNodes[a.id]))return;var l=this.options.hierarchical.nodeSpacing,d=void 0;d=0===s?this.direction.getPosition(this.body.nodes[t]):this.direction.getPosition(o[s-1])+l,this.direction.setPosition(a,d,h),this._validatePositionAndContinue(a,h,d)}var c=this._getCenterPosition(o);this.direction.setPosition(this.body.nodes[t],c,e)}}},{key:\"_validatePositionAndContinue\",value:function(t,e,i){if(this.hierarchical.isTree){if(void 0!==this.lastNodeOnLevel[e]){var n=this.direction.getPosition(this.body.nodes[this.lastNodeOnLevel[e]]);if(i-n<this.options.hierarchical.nodeSpacing){var o=n+this.options.hierarchical.nodeSpacing-i,r=this._findCommonParent(this.lastNodeOnLevel[e],t.id);this._shiftBlock(r.withChild,o)}}this.lastNodeOnLevel[e]=t.id,this.positionedNodes[t.id]=!0,this._placeBranchNodes(t.id,e)}}},{key:\"_indexArrayToNodes\",value:function(t){for(var e=[],i=0;i<t.length;i++)e.push(this.body.nodes[t[i]]);return e}},{key:\"_getDistribution\",value:function(){var t,e,i={};for(t in this.body.nodes)if(Object.prototype.hasOwnProperty.call(this.body.nodes,t)){e=this.body.nodes[t];var n=void 0===this.hierarchical.levels[t]?0:this.hierarchical.levels[t];this.direction.fix(e,n),void 0===i[n]&&(i[n]={}),i[n][t]=e}return i}},{key:\"_getActiveEdges\",value:function(t){var e=this,i=[];return Dh(t.edges,(function(t){var n;-1!==Hr(n=e.body.edgeIndices).call(n,t.id)&&i.push(t)})),i}},{key:\"_getHubSizes\",value:function(){var t=this,e={};Dh(this.body.nodeIndices,(function(i){var n=t.body.nodes[i],o=t._getActiveEdges(n).length;e[o]=!0}));var i=[];return Dh(e,(function(t){i.push(Number(t))})),xc(sv).call(sv,i,(function(t,e){return e-t})),i}},{key:\"_determineLevelsByHubsize\",value:function(){for(var t=this,e=function(e,i){t.hierarchical.levelDownstream(e,i)},i=this._getHubSizes(),n=function(n){var o=i[n];if(0===o)return\"break\";Dh(t.body.nodeIndices,(function(i){var n=t.body.nodes[i];o===t._getActiveEdges(n).length&&t._crawlNetwork(e,i)}))},o=0;o<i.length;++o){if(\"break\"===n(o))break}}},{key:\"_determineLevelsCustomCallback\",value:function(){var t=this;this._crawlNetwork((function(e,i,n){var o=t.hierarchical.levels[e.id];void 0===o&&(o=t.hierarchical.levels[e.id]=1e5);var r=(pp.cloneOptions(e,\"node\"),pp.cloneOptions(i,\"node\"),void pp.cloneOptions(n,\"edge\"));t.hierarchical.levels[i.id]=o+r})),this.hierarchical.setMinLevelToZero(this.body.nodes)}},{key:\"_determineLevelsDirected\",value:function(){var t,e=this,i=Kd(t=this.body.nodeIndices).call(t,(function(t,i){return t.set(i,e.body.nodes[i]),t}),new vd);\"roots\"===this.options.hierarchical.shakeTowards?this.hierarchical.levels=function(t){return wv((function(e){var i,n;return gv(i=mr(n=e.edges).call(n,(function(e){return t.has(e.toId)}))).call(i,(function(t){return t.from===e}))}),(function(t,e){return e<t}),\"to\",t)}(i):this.hierarchical.levels=function(t){return wv((function(e){var i,n;return gv(i=mr(n=e.edges).call(n,(function(e){return t.has(e.toId)}))).call(i,(function(t){return t.to===e}))}),(function(t,e){return e>t}),\"from\",t)}(i),this.hierarchical.setMinLevelToZero(this.body.nodes)}},{key:\"_generateMap\",value:function(){var t=this;this._crawlNetwork((function(e,i){t.hierarchical.levels[i.id]>t.hierarchical.levels[e.id]&&t.hierarchical.addRelation(e.id,i.id)})),this.hierarchical.checkIfTree()}},{key:\"_crawlNetwork\",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:function(){},i=arguments.length>1?arguments[1]:void 0,n={},o=function i(o,r){if(void 0===n[o.id]){var s;t.hierarchical.setTreeIndex(o,r),n[o.id]=!0;for(var a=t._getActiveEdges(o),h=0;h<a.length;h++){var l=a[h];!0===l.connected&&(s=l.toId==o.id?l.from:l.to,o.id!=s.id&&(e(o,s,l),i(s,r)))}}};if(void 0===i)for(var r=0,s=0;s<this.body.nodeIndices.length;s++){var a=this.body.nodeIndices[s];if(void 0===n[a]){var h=this.body.nodes[a];o(h,r),r+=1}}else{var l=this.body.nodes[i];if(void 0===l)return void console.error(\"Node not found:\",i);o(l)}}},{key:\"_shiftBlock\",value:function(t,e){var i=this,n={};!function t(o){if(!n[o]){n[o]=!0,i.direction.shift(o,e);var r=i.hierarchical.childrenReference[o];if(void 0!==r)for(var s=0;s<r.length;s++)t(r[s])}}(t)}},{key:\"_findCommonParent\",value:function(t,e){var i=this,n={};return function t(e,n){var o=i.hierarchical.parentReference[n];if(void 0!==o)for(var r=0;r<o.length;r++){var s=o[r];e[s]=!0,t(e,s)}}(n,t),function t(e,n){var o=i.hierarchical.parentReference[n];if(void 0!==o)for(var r=0;r<o.length;r++){var s=o[r];if(void 0!==e[s])return{foundParent:s,withChild:n};var a=t(e,s);if(null!==a.foundParent)return a}return{foundParent:null,withChild:n}}(n,e)}},{key:\"setDirectionStrategy\",value:function(){var t=\"UD\"===this.options.hierarchical.direction||\"DU\"===this.options.hierarchical.direction;this.direction=t?new dv(this):new cv(this)}},{key:\"_getCenterPosition\",value:function(t){for(var e=1e9,i=-1e9,n=0;n<t.length;n++){var o=void 0;if(void 0!==t[n].id)o=t[n];else{var r=t[n];o=this.body.nodes[r]}var s=this.direction.getPosition(o);e=Math.min(e,s),i=Math.max(i,s)}return.5*(e+i)}}]),t}();function xv(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return Ev(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Ev(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function Ev(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}var Ov=function(){function t(e,i,n,o){var r,s,a=this;Nn(this,t),this.body=e,this.canvas=i,this.selectionHandler=n,this.interactionHandler=o,this.editMode=!1,this.manipulationDiv=void 0,this.editModeDiv=void 0,this.closeDiv=void 0,this._domEventListenerCleanupQueue=[],this.temporaryUIFunctions={},this.temporaryEventFunctions=[],this.touchTime=0,this.temporaryIds={nodes:[],edges:[]},this.guiEnabled=!1,this.inMode=!1,this.selectedControlNode=void 0,this.options={},this.defaultOptions={enabled:!1,initiallyActive:!1,addNode:!0,addEdge:!0,editNode:void 0,editEdge:!0,deleteNode:!0,deleteEdge:!0,controlNodeStyle:{shape:\"dot\",size:6,color:{background:\"#ff0000\",border:\"#3c3c3c\",highlight:{background:\"#07f968\",border:\"#3c3c3c\"}},borderWidth:2,borderWidthSelected:2}},At(this.options,this.defaultOptions),this.body.emitter.on(\"destroy\",(function(){a._clean()})),this.body.emitter.on(\"_dataChanged\",Vt(r=this._restore).call(r,this)),this.body.emitter.on(\"_resetData\",Vt(s=this._restore).call(s,this))}return Fn(t,[{key:\"_restore\",value:function(){!1!==this.inMode&&(!0===this.options.initiallyActive?this.enableEditMode():this.disableEditMode())}},{key:\"setOptions\",value:function(t,e,i){void 0!==e&&(void 0!==e.locale?this.options.locale=e.locale:this.options.locale=i.locale,void 0!==e.locales?this.options.locales=e.locales:this.options.locales=i.locales),void 0!==t&&(\"boolean\"==typeof t?this.options.enabled=t:(this.options.enabled=!0,Ch(this.options,t)),!0===this.options.initiallyActive&&(this.editMode=!0),this._setup())}},{key:\"toggleEditMode\",value:function(){!0===this.editMode?this.disableEditMode():this.enableEditMode()}},{key:\"enableEditMode\",value:function(){this.editMode=!0,this._clean(),!0===this.guiEnabled&&(this.manipulationDiv.style.display=\"block\",this.closeDiv.style.display=\"block\",this.editModeDiv.style.display=\"none\",this.showManipulatorToolbar())}},{key:\"disableEditMode\",value:function(){this.editMode=!1,this._clean(),!0===this.guiEnabled&&(this.manipulationDiv.style.display=\"none\",this.closeDiv.style.display=\"none\",this.editModeDiv.style.display=\"block\",this._createEditButton())}},{key:\"showManipulatorToolbar\",value:function(){if(this._clean(),this.manipulationDOM={},!0===this.guiEnabled){var t,e;this.editMode=!0,this.manipulationDiv.style.display=\"block\",this.closeDiv.style.display=\"block\";var i=this.selectionHandler.getSelectedNodeCount(),n=this.selectionHandler.getSelectedEdgeCount(),o=i+n,r=this.options.locales[this.options.locale],s=!1;!1!==this.options.addNode&&(this._createAddNodeButton(r),s=!0),!1!==this.options.addEdge&&(!0===s?this._createSeperator(1):s=!0,this._createAddEdgeButton(r)),1===i&&\"function\"==typeof this.options.editNode?(!0===s?this._createSeperator(2):s=!0,this._createEditNodeButton(r)):1===n&&0===i&&!1!==this.options.editEdge&&(!0===s?this._createSeperator(3):s=!0,this._createEditEdgeButton(r)),0!==o&&(i>0&&!1!==this.options.deleteNode||0===i&&!1!==this.options.deleteEdge)&&(!0===s&&this._createSeperator(4),this._createDeleteButton(r)),this._bindElementEvents(this.closeDiv,Vt(t=this.toggleEditMode).call(t,this)),this._temporaryBindEvent(\"select\",Vt(e=this.showManipulatorToolbar).call(e,this))}this.body.emitter.emit(\"_redraw\")}},{key:\"addNodeMode\",value:function(){var t;if(!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode=\"addNode\",!0===this.guiEnabled){var e,i=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(i),this._createSeperator(),this._createDescription(i.addDescription||this.options.locales.en.addDescription),this._bindElementEvents(this.closeDiv,Vt(e=this.toggleEditMode).call(e,this))}this._temporaryBindEvent(\"click\",Vt(t=this._performAddNode).call(t,this))}},{key:\"editNode\",value:function(){var t=this;!0!==this.editMode&&this.enableEditMode(),this._clean();var e=this.selectionHandler.getSelectedNodes()[0];if(void 0!==e){if(this.inMode=\"editNode\",\"function\"!=typeof this.options.editNode)throw new Error(\"No function has been configured to handle the editing of nodes.\");if(!0!==e.isCluster){var i=Ch({},e.options,!1);if(i.x=e.x,i.y=e.y,2!==this.options.editNode.length)throw new Error(\"The function for edit does not support two arguments (data, callback)\");this.options.editNode(i,(function(e){null!=e&&\"editNode\"===t.inMode&&t.body.data.nodes.getDataSet().update(e),t.showManipulatorToolbar()}))}else alert(this.options.locales[this.options.locale].editClusterError||this.options.locales.en.editClusterError)}else this.showManipulatorToolbar()}},{key:\"addEdgeMode\",value:function(){var t,e,i,n,o;if(!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode=\"addEdge\",!0===this.guiEnabled){var r,s=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(s),this._createSeperator(),this._createDescription(s.edgeDescription||this.options.locales.en.edgeDescription),this._bindElementEvents(this.closeDiv,Vt(r=this.toggleEditMode).call(r,this))}this._temporaryBindUI(\"onTouch\",Vt(t=this._handleConnect).call(t,this)),this._temporaryBindUI(\"onDragEnd\",Vt(e=this._finishConnect).call(e,this)),this._temporaryBindUI(\"onDrag\",Vt(i=this._dragControlNode).call(i,this)),this._temporaryBindUI(\"onRelease\",Vt(n=this._finishConnect).call(n,this)),this._temporaryBindUI(\"onDragStart\",Vt(o=this._dragStartEdge).call(o,this)),this._temporaryBindUI(\"onHold\",(function(){}))}},{key:\"editEdgeMode\",value:function(){if(!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode=\"editEdge\",\"object\"!==go(this.options.editEdge)||\"function\"!=typeof this.options.editEdge.editWithoutDrag||(this.edgeBeingEditedId=this.selectionHandler.getSelectedEdgeIds()[0],void 0===this.edgeBeingEditedId)){if(!0===this.guiEnabled){var t,e=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(e),this._createSeperator(),this._createDescription(e.editEdgeDescription||this.options.locales.en.editEdgeDescription),this._bindElementEvents(this.closeDiv,Vt(t=this.toggleEditMode).call(t,this))}if(this.edgeBeingEditedId=this.selectionHandler.getSelectedEdgeIds()[0],void 0!==this.edgeBeingEditedId){var i,n,o,r,s=this.body.edges[this.edgeBeingEditedId],a=this._getNewTargetNode(s.from.x,s.from.y),h=this._getNewTargetNode(s.to.x,s.to.y);this.temporaryIds.nodes.push(a.id),this.temporaryIds.nodes.push(h.id),this.body.nodes[a.id]=a,this.body.nodeIndices.push(a.id),this.body.nodes[h.id]=h,this.body.nodeIndices.push(h.id),this._temporaryBindUI(\"onTouch\",Vt(i=this._controlNodeTouch).call(i,this)),this._temporaryBindUI(\"onTap\",(function(){})),this._temporaryBindUI(\"onHold\",(function(){})),this._temporaryBindUI(\"onDragStart\",Vt(n=this._controlNodeDragStart).call(n,this)),this._temporaryBindUI(\"onDrag\",Vt(o=this._controlNodeDrag).call(o,this)),this._temporaryBindUI(\"onDragEnd\",Vt(r=this._controlNodeDragEnd).call(r,this)),this._temporaryBindUI(\"onMouseMove\",(function(){})),this._temporaryBindEvent(\"beforeDrawing\",(function(t){var e=s.edgeType.findBorderPositions(t);!1===a.selected&&(a.x=e.from.x,a.y=e.from.y),!1===h.selected&&(h.x=e.to.x,h.y=e.to.y)})),this.body.emitter.emit(\"_redraw\")}else this.showManipulatorToolbar()}else{var l=this.body.edges[this.edgeBeingEditedId];this._performEditEdge(l.from.id,l.to.id)}}},{key:\"deleteSelected\",value:function(){var t=this;!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode=\"delete\";var e=this.selectionHandler.getSelectedNodeIds(),i=this.selectionHandler.getSelectedEdgeIds(),n=void 0;if(e.length>0){for(var o=0;o<e.length;o++)if(!0===this.body.nodes[e[o]].isCluster)return void alert(this.options.locales[this.options.locale].deleteClusterError||this.options.locales.en.deleteClusterError);\"function\"==typeof this.options.deleteNode&&(n=this.options.deleteNode)}else i.length>0&&\"function\"==typeof this.options.deleteEdge&&(n=this.options.deleteEdge);if(\"function\"==typeof n){var r={nodes:e,edges:i};if(2!==n.length)throw new Error(\"The function for delete does not support two arguments (data, callback)\");n(r,(function(e){null!=e&&\"delete\"===t.inMode?(t.body.data.edges.getDataSet().remove(e.edges),t.body.data.nodes.getDataSet().remove(e.nodes),t.body.emitter.emit(\"startSimulation\"),t.showManipulatorToolbar()):(t.body.emitter.emit(\"startSimulation\"),t.showManipulatorToolbar())}))}else this.body.data.edges.getDataSet().remove(i),this.body.data.nodes.getDataSet().remove(e),this.body.emitter.emit(\"startSimulation\"),this.showManipulatorToolbar()}},{key:\"_setup\",value:function(){!0===this.options.enabled?(this.guiEnabled=!0,this._createWrappers(),!1===this.editMode?this._createEditButton():this.showManipulatorToolbar()):(this._removeManipulationDOM(),this.guiEnabled=!1)}},{key:\"_createWrappers\",value:function(){var t,e;(void 0===this.manipulationDiv&&(this.manipulationDiv=document.createElement(\"div\"),this.manipulationDiv.className=\"vis-manipulation\",!0===this.editMode?this.manipulationDiv.style.display=\"block\":this.manipulationDiv.style.display=\"none\",this.canvas.frame.appendChild(this.manipulationDiv)),void 0===this.editModeDiv&&(this.editModeDiv=document.createElement(\"div\"),this.editModeDiv.className=\"vis-edit-mode\",!0===this.editMode?this.editModeDiv.style.display=\"none\":this.editModeDiv.style.display=\"block\",this.canvas.frame.appendChild(this.editModeDiv)),void 0===this.closeDiv)&&(this.closeDiv=document.createElement(\"button\"),this.closeDiv.className=\"vis-close\",this.closeDiv.setAttribute(\"aria-label\",null!==(t=null===(e=this.options.locales[this.options.locale])||void 0===e?void 0:e.close)&&void 0!==t?t:this.options.locales.en.close),this.closeDiv.style.display=this.manipulationDiv.style.display,this.canvas.frame.appendChild(this.closeDiv))}},{key:\"_getNewTargetNode\",value:function(t,e){var i=Ch({},this.options.controlNodeStyle);i.id=\"targetNode\"+Wc(),i.hidden=!1,i.physics=!1,i.x=t,i.y=e;var n=this.body.functions.createNode(i);return n.shape.boundingBox={left:t,right:t,top:e,bottom:e},n}},{key:\"_createEditButton\",value:function(){var t;this._clean(),this.manipulationDOM={},mh(this.editModeDiv);var e=this.options.locales[this.options.locale],i=this._createButton(\"editMode\",\"vis-edit vis-edit-mode\",e.edit||this.options.locales.en.edit);this.editModeDiv.appendChild(i),this._bindElementEvents(i,Vt(t=this.toggleEditMode).call(t,this))}},{key:\"_clean\",value:function(){this.inMode=!1,!0===this.guiEnabled&&(mh(this.editModeDiv),mh(this.manipulationDiv),this._cleanupDOMEventListeners()),this._cleanupTemporaryNodesAndEdges(),this._unbindTemporaryUIs(),this._unbindTemporaryEvents(),this.body.emitter.emit(\"restorePhysics\")}},{key:\"_cleanupDOMEventListeners\",value:function(){var t,e,i=xv(er(t=this._domEventListenerCleanupQueue).call(t,0));try{for(i.s();!(e=i.n()).done;){(0,e.value)()}}catch(t){i.e(t)}finally{i.f()}}},{key:\"_removeManipulationDOM\",value:function(){this._clean(),mh(this.manipulationDiv),mh(this.editModeDiv),mh(this.closeDiv),this.manipulationDiv&&this.canvas.frame.removeChild(this.manipulationDiv),this.editModeDiv&&this.canvas.frame.removeChild(this.editModeDiv),this.closeDiv&&this.canvas.frame.removeChild(this.closeDiv),this.manipulationDiv=void 0,this.editModeDiv=void 0,this.closeDiv=void 0}},{key:\"_createSeperator\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;this.manipulationDOM[\"seperatorLineDiv\"+t]=document.createElement(\"div\"),this.manipulationDOM[\"seperatorLineDiv\"+t].className=\"vis-separator-line\",this.manipulationDiv.appendChild(this.manipulationDOM[\"seperatorLineDiv\"+t])}},{key:\"_createAddNodeButton\",value:function(t){var e,i=this._createButton(\"addNode\",\"vis-add\",t.addNode||this.options.locales.en.addNode);this.manipulationDiv.appendChild(i),this._bindElementEvents(i,Vt(e=this.addNodeMode).call(e,this))}},{key:\"_createAddEdgeButton\",value:function(t){var e,i=this._createButton(\"addEdge\",\"vis-connect\",t.addEdge||this.options.locales.en.addEdge);this.manipulationDiv.appendChild(i),this._bindElementEvents(i,Vt(e=this.addEdgeMode).call(e,this))}},{key:\"_createEditNodeButton\",value:function(t){var e,i=this._createButton(\"editNode\",\"vis-edit\",t.editNode||this.options.locales.en.editNode);this.manipulationDiv.appendChild(i),this._bindElementEvents(i,Vt(e=this.editNode).call(e,this))}},{key:\"_createEditEdgeButton\",value:function(t){var e,i=this._createButton(\"editEdge\",\"vis-edit\",t.editEdge||this.options.locales.en.editEdge);this.manipulationDiv.appendChild(i),this._bindElementEvents(i,Vt(e=this.editEdgeMode).call(e,this))}},{key:\"_createDeleteButton\",value:function(t){var e,i;i=this.options.rtl?\"vis-delete-rtl\":\"vis-delete\";var n=this._createButton(\"delete\",i,t.del||this.options.locales.en.del);this.manipulationDiv.appendChild(n),this._bindElementEvents(n,Vt(e=this.deleteSelected).call(e,this))}},{key:\"_createBackButton\",value:function(t){var e,i=this._createButton(\"back\",\"vis-back\",t.back||this.options.locales.en.back);this.manipulationDiv.appendChild(i),this._bindElementEvents(i,Vt(e=this.showManipulatorToolbar).call(e,this))}},{key:\"_createButton\",value:function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:\"vis-label\";return this.manipulationDOM[t+\"Div\"]=document.createElement(\"button\"),this.manipulationDOM[t+\"Div\"].className=\"vis-button \"+e,this.manipulationDOM[t+\"Label\"]=document.createElement(\"div\"),this.manipulationDOM[t+\"Label\"].className=n,this.manipulationDOM[t+\"Label\"].innerText=i,this.manipulationDOM[t+\"Div\"].appendChild(this.manipulationDOM[t+\"Label\"]),this.manipulationDOM[t+\"Div\"]}},{key:\"_createDescription\",value:function(t){this.manipulationDOM.descriptionLabel=document.createElement(\"div\"),this.manipulationDOM.descriptionLabel.className=\"vis-none\",this.manipulationDOM.descriptionLabel.innerText=t,this.manipulationDiv.appendChild(this.manipulationDOM.descriptionLabel)}},{key:\"_temporaryBindEvent\",value:function(t,e){this.temporaryEventFunctions.push({event:t,boundFunction:e}),this.body.emitter.on(t,e)}},{key:\"_temporaryBindUI\",value:function(t,e){if(void 0===this.body.eventListeners[t])throw new Error(\"This UI function does not exist. Typo? You tried: \"+t+\" possible are: \"+es(zo(this.body.eventListeners)));this.temporaryUIFunctions[t]=this.body.eventListeners[t],this.body.eventListeners[t]=e}},{key:\"_unbindTemporaryUIs\",value:function(){for(var t in this.temporaryUIFunctions)Object.prototype.hasOwnProperty.call(this.temporaryUIFunctions,t)&&(this.body.eventListeners[t]=this.temporaryUIFunctions[t],delete this.temporaryUIFunctions[t]);this.temporaryUIFunctions={}}},{key:\"_unbindTemporaryEvents\",value:function(){for(var t=0;t<this.temporaryEventFunctions.length;t++){var e=this.temporaryEventFunctions[t].event,i=this.temporaryEventFunctions[t].boundFunction;this.body.emitter.off(e,i)}this.temporaryEventFunctions=[]}},{key:\"_bindElementEvents\",value:function(t,e){var i=new ll(t,{});_p(i,e),this._domEventListenerCleanupQueue.push((function(){i.destroy()}));var n=function(t){var i=t.keyCode,n=t.key;\"Enter\"!==n&&\" \"!==n&&13!==i&&32!==i||e()};t.addEventListener(\"keyup\",n,!1),this._domEventListenerCleanupQueue.push((function(){t.removeEventListener(\"keyup\",n,!1)}))}},{key:\"_cleanupTemporaryNodesAndEdges\",value:function(){for(var t=0;t<this.temporaryIds.edges.length;t++){var e;this.body.edges[this.temporaryIds.edges[t]].disconnect(),delete this.body.edges[this.temporaryIds.edges[t]];var i,n=Hr(e=this.body.edgeIndices).call(e,this.temporaryIds.edges[t]);if(-1!==n)er(i=this.body.edgeIndices).call(i,n,1)}for(var o=0;o<this.temporaryIds.nodes.length;o++){var r;delete this.body.nodes[this.temporaryIds.nodes[o]];var s,a=Hr(r=this.body.nodeIndices).call(r,this.temporaryIds.nodes[o]);if(-1!==a)er(s=this.body.nodeIndices).call(s,a,1)}this.temporaryIds={nodes:[],edges:[]}}},{key:\"_controlNodeTouch\",value:function(t){this.selectionHandler.unselectAll(),this.lastTouch=this.body.functions.getPointer(t.center),this.lastTouch.translation=At({},this.body.view.translation)}},{key:\"_controlNodeDragStart\",value:function(){var t=this.lastTouch,e=this.selectionHandler._pointerToPositionObject(t),i=this.body.nodes[this.temporaryIds.nodes[0]],n=this.body.nodes[this.temporaryIds.nodes[1]],o=this.body.edges[this.edgeBeingEditedId];this.selectedControlNode=void 0;var r=i.isOverlappingWith(e),s=n.isOverlappingWith(e);!0===r?(this.selectedControlNode=i,o.edgeType.from=i):!0===s&&(this.selectedControlNode=n,o.edgeType.to=n),void 0!==this.selectedControlNode&&this.selectionHandler.selectObject(this.selectedControlNode),this.body.emitter.emit(\"_redraw\")}},{key:\"_controlNodeDrag\",value:function(t){this.body.emitter.emit(\"disablePhysics\");var e=this.body.functions.getPointer(t.center),i=this.canvas.DOMtoCanvas(e);void 0!==this.selectedControlNode?(this.selectedControlNode.x=i.x,this.selectedControlNode.y=i.y):this.interactionHandler.onDrag(t),this.body.emitter.emit(\"_redraw\")}},{key:\"_controlNodeDragEnd\",value:function(t){var e=this.body.functions.getPointer(t.center),i=this.selectionHandler._pointerToPositionObject(e),n=this.body.edges[this.edgeBeingEditedId];if(void 0!==this.selectedControlNode){this.selectionHandler.unselectAll();for(var o=this.selectionHandler._getAllNodesOverlappingWith(i),r=void 0,s=o.length-1;s>=0;s--)if(o[s]!==this.selectedControlNode.id){r=this.body.nodes[o[s]];break}if(void 0!==r&&void 0!==this.selectedControlNode)if(!0===r.isCluster)alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError);else{var a=this.body.nodes[this.temporaryIds.nodes[0]];this.selectedControlNode.id===a.id?this._performEditEdge(r.id,n.to.id):this._performEditEdge(n.from.id,r.id)}else n.updateEdgeType(),this.body.emitter.emit(\"restorePhysics\");this.body.emitter.emit(\"_redraw\")}}},{key:\"_handleConnect\",value:function(t){if((new Date).valueOf()-this.touchTime>100){this.lastTouch=this.body.functions.getPointer(t.center),this.lastTouch.translation=At({},this.body.view.translation),this.interactionHandler.drag.pointer=this.lastTouch,this.interactionHandler.drag.translation=this.lastTouch.translation;var e=this.lastTouch,i=this.selectionHandler.getNodeAt(e);if(void 0!==i)if(!0===i.isCluster)alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError);else{var n=this._getNewTargetNode(i.x,i.y);this.body.nodes[n.id]=n,this.body.nodeIndices.push(n.id);var o=this.body.functions.createEdge({id:\"connectionEdge\"+Wc(),from:i.id,to:n.id,physics:!1,smooth:{enabled:!0,type:\"continuous\",roundness:.5}});this.body.edges[o.id]=o,this.body.edgeIndices.push(o.id),this.temporaryIds.nodes.push(n.id),this.temporaryIds.edges.push(o.id)}this.touchTime=(new Date).valueOf()}}},{key:\"_dragControlNode\",value:function(t){var e=this.body.functions.getPointer(t.center),i=this.selectionHandler._pointerToPositionObject(e),n=void 0;void 0!==this.temporaryIds.edges[0]&&(n=this.body.edges[this.temporaryIds.edges[0]].fromId);for(var o=this.selectionHandler._getAllNodesOverlappingWith(i),r=void 0,s=o.length-1;s>=0;s--){var a;if(-1===Hr(a=this.temporaryIds.nodes).call(a,o[s])){r=this.body.nodes[o[s]];break}}if(t.controlEdge={from:n,to:r?r.id:void 0},this.selectionHandler.generateClickEvent(\"controlNodeDragging\",t,e),void 0!==this.temporaryIds.nodes[0]){var h=this.body.nodes[this.temporaryIds.nodes[0]];h.x=this.canvas._XconvertDOMtoCanvas(e.x),h.y=this.canvas._YconvertDOMtoCanvas(e.y),this.body.emitter.emit(\"_redraw\")}else this.interactionHandler.onDrag(t)}},{key:\"_finishConnect\",value:function(t){var e=this.body.functions.getPointer(t.center),i=this.selectionHandler._pointerToPositionObject(e),n=void 0;void 0!==this.temporaryIds.edges[0]&&(n=this.body.edges[this.temporaryIds.edges[0]].fromId);for(var o=this.selectionHandler._getAllNodesOverlappingWith(i),r=void 0,s=o.length-1;s>=0;s--){var a;if(-1===Hr(a=this.temporaryIds.nodes).call(a,o[s])){r=this.body.nodes[o[s]];break}}this._cleanupTemporaryNodesAndEdges(),void 0!==r&&(!0===r.isCluster?alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError):void 0!==this.body.nodes[n]&&void 0!==this.body.nodes[r.id]&&this._performAddEdge(n,r.id)),t.controlEdge={from:n,to:r?r.id:void 0},this.selectionHandler.generateClickEvent(\"controlNodeDragEnd\",t,e),this.body.emitter.emit(\"_redraw\")}},{key:\"_dragStartEdge\",value:function(t){var e=this.lastTouch;this.selectionHandler.generateClickEvent(\"dragStart\",t,e,void 0,!0)}},{key:\"_performAddNode\",value:function(t){var e=this,i={id:Wc(),x:t.pointer.canvas.x,y:t.pointer.canvas.y,label:\"new\"};if(\"function\"==typeof this.options.addNode){if(2!==this.options.addNode.length)throw this.showManipulatorToolbar(),new Error(\"The function for add does not support two arguments (data,callback)\");this.options.addNode(i,(function(t){null!=t&&\"addNode\"===e.inMode&&e.body.data.nodes.getDataSet().add(t),e.showManipulatorToolbar()}))}else this.body.data.nodes.getDataSet().add(i),this.showManipulatorToolbar()}},{key:\"_performAddEdge\",value:function(t,e){var i=this,n={from:t,to:e};if(\"function\"==typeof this.options.addEdge){if(2!==this.options.addEdge.length)throw new Error(\"The function for connect does not support two arguments (data,callback)\");this.options.addEdge(n,(function(t){null!=t&&\"addEdge\"===i.inMode&&(i.body.data.edges.getDataSet().add(t),i.selectionHandler.unselectAll(),i.showManipulatorToolbar())}))}else this.body.data.edges.getDataSet().add(n),this.selectionHandler.unselectAll(),this.showManipulatorToolbar()}},{key:\"_performEditEdge\",value:function(t,e){var i=this,n={id:this.edgeBeingEditedId,from:t,to:e,label:this.body.data.edges.get(this.edgeBeingEditedId).label},o=this.options.editEdge;if(\"object\"===go(o)&&(o=o.editWithoutDrag),\"function\"==typeof o){if(2!==o.length)throw new Error(\"The function for edit does not support two arguments (data, callback)\");o(n,(function(t){null==t||\"editEdge\"!==i.inMode?(i.body.edges[n.id].updateEdgeType(),i.body.emitter.emit(\"_redraw\"),i.showManipulatorToolbar()):(i.body.data.edges.getDataSet().update(t),i.selectionHandler.unselectAll(),i.showManipulatorToolbar())}))}else this.body.data.edges.getDataSet().update(n),this.selectionHandler.unselectAll(),this.showManipulatorToolbar()}}]),t}(),Cv=\"string\",Sv=\"boolean\",Tv=\"number\",Mv=\"array\",Pv=\"object\",Dv=[\"arrow\",\"bar\",\"box\",\"circle\",\"crow\",\"curve\",\"diamond\",\"image\",\"inv_curve\",\"inv_triangle\",\"triangle\",\"vee\"],Iv={borderWidth:{number:Tv},borderWidthSelected:{number:Tv,undefined:\"undefined\"},brokenImage:{string:Cv,undefined:\"undefined\"},chosen:{label:{boolean:Sv,function:\"function\"},node:{boolean:Sv,function:\"function\"},__type__:{object:Pv,boolean:Sv}},color:{border:{string:Cv},background:{string:Cv},highlight:{border:{string:Cv},background:{string:Cv},__type__:{object:Pv,string:Cv}},hover:{border:{string:Cv},background:{string:Cv},__type__:{object:Pv,string:Cv}},__type__:{object:Pv,string:Cv}},opacity:{number:Tv,undefined:\"undefined\"},fixed:{x:{boolean:Sv},y:{boolean:Sv},__type__:{object:Pv,boolean:Sv}},font:{align:{string:Cv},color:{string:Cv},size:{number:Tv},face:{string:Cv},background:{string:Cv},strokeWidth:{number:Tv},strokeColor:{string:Cv},vadjust:{number:Tv},multi:{boolean:Sv,string:Cv},bold:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},boldital:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},ital:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},mono:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},__type__:{object:Pv,string:Cv}},group:{string:Cv,number:Tv,undefined:\"undefined\"},heightConstraint:{minimum:{number:Tv},valign:{string:Cv},__type__:{object:Pv,boolean:Sv,number:Tv}},hidden:{boolean:Sv},icon:{face:{string:Cv},code:{string:Cv},size:{number:Tv},color:{string:Cv},weight:{string:Cv,number:Tv},__type__:{object:Pv}},id:{string:Cv,number:Tv},image:{selected:{string:Cv,undefined:\"undefined\"},unselected:{string:Cv,undefined:\"undefined\"},__type__:{object:Pv,string:Cv}},imagePadding:{top:{number:Tv},right:{number:Tv},bottom:{number:Tv},left:{number:Tv},__type__:{object:Pv,number:Tv}},label:{string:Cv,undefined:\"undefined\"},labelHighlightBold:{boolean:Sv},level:{number:Tv,undefined:\"undefined\"},margin:{top:{number:Tv},right:{number:Tv},bottom:{number:Tv},left:{number:Tv},__type__:{object:Pv,number:Tv}},mass:{number:Tv},physics:{boolean:Sv},scaling:{min:{number:Tv},max:{number:Tv},label:{enabled:{boolean:Sv},min:{number:Tv},max:{number:Tv},maxVisible:{number:Tv},drawThreshold:{number:Tv},__type__:{object:Pv,boolean:Sv}},customScalingFunction:{function:\"function\"},__type__:{object:Pv}},shadow:{enabled:{boolean:Sv},color:{string:Cv},size:{number:Tv},x:{number:Tv},y:{number:Tv},__type__:{object:Pv,boolean:Sv}},shape:{string:[\"custom\",\"ellipse\",\"circle\",\"database\",\"box\",\"text\",\"image\",\"circularImage\",\"diamond\",\"dot\",\"star\",\"triangle\",\"triangleDown\",\"square\",\"icon\",\"hexagon\"]},ctxRenderer:{function:\"function\"},shapeProperties:{borderDashes:{boolean:Sv,array:Mv},borderRadius:{number:Tv},interpolation:{boolean:Sv},useImageSize:{boolean:Sv},useBorderWithImage:{boolean:Sv},coordinateOrigin:{string:[\"center\",\"top-left\"]},__type__:{object:Pv}},size:{number:Tv},title:{string:Cv,dom:\"dom\",undefined:\"undefined\"},value:{number:Tv,undefined:\"undefined\"},widthConstraint:{minimum:{number:Tv},maximum:{number:Tv},__type__:{object:Pv,boolean:Sv,number:Tv}},x:{number:Tv},y:{number:Tv},__type__:{object:Pv}},Bv={configure:{enabled:{boolean:Sv},filter:{boolean:Sv,string:Cv,array:Mv,function:\"function\"},container:{dom:\"dom\"},showButton:{boolean:Sv},__type__:{object:Pv,boolean:Sv,string:Cv,array:Mv,function:\"function\"}},edges:{arrows:{to:{enabled:{boolean:Sv},scaleFactor:{number:Tv},type:{string:Dv},imageHeight:{number:Tv},imageWidth:{number:Tv},src:{string:Cv},__type__:{object:Pv,boolean:Sv}},middle:{enabled:{boolean:Sv},scaleFactor:{number:Tv},type:{string:Dv},imageWidth:{number:Tv},imageHeight:{number:Tv},src:{string:Cv},__type__:{object:Pv,boolean:Sv}},from:{enabled:{boolean:Sv},scaleFactor:{number:Tv},type:{string:Dv},imageWidth:{number:Tv},imageHeight:{number:Tv},src:{string:Cv},__type__:{object:Pv,boolean:Sv}},__type__:{string:[\"from\",\"to\",\"middle\"],object:Pv}},endPointOffset:{from:{number:Tv},to:{number:Tv},__type__:{object:Pv,number:Tv}},arrowStrikethrough:{boolean:Sv},background:{enabled:{boolean:Sv},color:{string:Cv},size:{number:Tv},dashes:{boolean:Sv,array:Mv},__type__:{object:Pv,boolean:Sv}},chosen:{label:{boolean:Sv,function:\"function\"},edge:{boolean:Sv,function:\"function\"},__type__:{object:Pv,boolean:Sv}},color:{color:{string:Cv},highlight:{string:Cv},hover:{string:Cv},inherit:{string:[\"from\",\"to\",\"both\"],boolean:Sv},opacity:{number:Tv},__type__:{object:Pv,string:Cv}},dashes:{boolean:Sv,array:Mv},font:{color:{string:Cv},size:{number:Tv},face:{string:Cv},background:{string:Cv},strokeWidth:{number:Tv},strokeColor:{string:Cv},align:{string:[\"horizontal\",\"top\",\"middle\",\"bottom\"]},vadjust:{number:Tv},multi:{boolean:Sv,string:Cv},bold:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},boldital:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},ital:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},mono:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},__type__:{object:Pv,string:Cv}},hidden:{boolean:Sv},hoverWidth:{function:\"function\",number:Tv},label:{string:Cv,undefined:\"undefined\"},labelHighlightBold:{boolean:Sv},length:{number:Tv,undefined:\"undefined\"},physics:{boolean:Sv},scaling:{min:{number:Tv},max:{number:Tv},label:{enabled:{boolean:Sv},min:{number:Tv},max:{number:Tv},maxVisible:{number:Tv},drawThreshold:{number:Tv},__type__:{object:Pv,boolean:Sv}},customScalingFunction:{function:\"function\"},__type__:{object:Pv}},selectionWidth:{function:\"function\",number:Tv},selfReferenceSize:{number:Tv},selfReference:{size:{number:Tv},angle:{number:Tv},renderBehindTheNode:{boolean:Sv},__type__:{object:Pv}},shadow:{enabled:{boolean:Sv},color:{string:Cv},size:{number:Tv},x:{number:Tv},y:{number:Tv},__type__:{object:Pv,boolean:Sv}},smooth:{enabled:{boolean:Sv},type:{string:[\"dynamic\",\"continuous\",\"discrete\",\"diagonalCross\",\"straightCross\",\"horizontal\",\"vertical\",\"curvedCW\",\"curvedCCW\",\"cubicBezier\"]},roundness:{number:Tv},forceDirection:{string:[\"horizontal\",\"vertical\",\"none\"],boolean:Sv},__type__:{object:Pv,boolean:Sv}},title:{string:Cv,undefined:\"undefined\"},width:{number:Tv},widthConstraint:{maximum:{number:Tv},__type__:{object:Pv,boolean:Sv,number:Tv}},value:{number:Tv,undefined:\"undefined\"},__type__:{object:Pv}},groups:{useDefaultGroups:{boolean:Sv},__any__:Iv,__type__:{object:Pv}},interaction:{dragNodes:{boolean:Sv},dragView:{boolean:Sv},hideEdgesOnDrag:{boolean:Sv},hideEdgesOnZoom:{boolean:Sv},hideNodesOnDrag:{boolean:Sv},hover:{boolean:Sv},keyboard:{enabled:{boolean:Sv},speed:{x:{number:Tv},y:{number:Tv},zoom:{number:Tv},__type__:{object:Pv}},bindToWindow:{boolean:Sv},autoFocus:{boolean:Sv},__type__:{object:Pv,boolean:Sv}},multiselect:{boolean:Sv},navigationButtons:{boolean:Sv},selectable:{boolean:Sv},selectConnectedEdges:{boolean:Sv},hoverConnectedEdges:{boolean:Sv},tooltipDelay:{number:Tv},zoomView:{boolean:Sv},zoomSpeed:{number:Tv},__type__:{object:Pv}},layout:{randomSeed:{undefined:\"undefined\",number:Tv,string:Cv},improvedLayout:{boolean:Sv},clusterThreshold:{number:Tv},hierarchical:{enabled:{boolean:Sv},levelSeparation:{number:Tv},nodeSpacing:{number:Tv},treeSpacing:{number:Tv},blockShifting:{boolean:Sv},edgeMinimization:{boolean:Sv},parentCentralization:{boolean:Sv},direction:{string:[\"UD\",\"DU\",\"LR\",\"RL\"]},sortMethod:{string:[\"hubsize\",\"directed\"]},shakeTowards:{string:[\"leaves\",\"roots\"]},__type__:{object:Pv,boolean:Sv}},__type__:{object:Pv}},manipulation:{enabled:{boolean:Sv},initiallyActive:{boolean:Sv},addNode:{boolean:Sv,function:\"function\"},addEdge:{boolean:Sv,function:\"function\"},editNode:{function:\"function\"},editEdge:{editWithoutDrag:{function:\"function\"},__type__:{object:Pv,boolean:Sv,function:\"function\"}},deleteNode:{boolean:Sv,function:\"function\"},deleteEdge:{boolean:Sv,function:\"function\"},controlNodeStyle:Iv,__type__:{object:Pv,boolean:Sv}},nodes:Iv,physics:{enabled:{boolean:Sv},barnesHut:{theta:{number:Tv},gravitationalConstant:{number:Tv},centralGravity:{number:Tv},springLength:{number:Tv},springConstant:{number:Tv},damping:{number:Tv},avoidOverlap:{number:Tv},__type__:{object:Pv}},forceAtlas2Based:{theta:{number:Tv},gravitationalConstant:{number:Tv},centralGravity:{number:Tv},springLength:{number:Tv},springConstant:{number:Tv},damping:{number:Tv},avoidOverlap:{number:Tv},__type__:{object:Pv}},repulsion:{centralGravity:{number:Tv},springLength:{number:Tv},springConstant:{number:Tv},nodeDistance:{number:Tv},damping:{number:Tv},__type__:{object:Pv}},hierarchicalRepulsion:{centralGravity:{number:Tv},springLength:{number:Tv},springConstant:{number:Tv},nodeDistance:{number:Tv},damping:{number:Tv},avoidOverlap:{number:Tv},__type__:{object:Pv}},maxVelocity:{number:Tv},minVelocity:{number:Tv},solver:{string:[\"barnesHut\",\"repulsion\",\"hierarchicalRepulsion\",\"forceAtlas2Based\"]},stabilization:{enabled:{boolean:Sv},iterations:{number:Tv},updateInterval:{number:Tv},onlyDynamicEdges:{boolean:Sv},fit:{boolean:Sv},__type__:{object:Pv,boolean:Sv}},timestep:{number:Tv},adaptiveTimestep:{boolean:Sv},wind:{x:{number:Tv},y:{number:Tv},__type__:{object:Pv}},__type__:{object:Pv,boolean:Sv}},autoResize:{boolean:Sv},clickToUse:{boolean:Sv},locale:{string:Cv},locales:{__any__:{any:\"any\"},__type__:{object:Pv}},height:{string:Cv},width:{string:Cv},__type__:{object:Pv}},zv={nodes:{borderWidth:[1,0,10,1],borderWidthSelected:[2,0,10,1],color:{border:[\"color\",\"#2B7CE9\"],background:[\"color\",\"#97C2FC\"],highlight:{border:[\"color\",\"#2B7CE9\"],background:[\"color\",\"#D2E5FF\"]},hover:{border:[\"color\",\"#2B7CE9\"],background:[\"color\",\"#D2E5FF\"]}},opacity:[0,0,1,.1],fixed:{x:!1,y:!1},font:{color:[\"color\",\"#343434\"],size:[14,0,100,1],face:[\"arial\",\"verdana\",\"tahoma\"],background:[\"color\",\"none\"],strokeWidth:[0,0,50,1],strokeColor:[\"color\",\"#ffffff\"]},hidden:!1,labelHighlightBold:!0,physics:!0,scaling:{min:[10,0,200,1],max:[30,0,200,1],label:{enabled:!1,min:[14,0,200,1],max:[30,0,200,1],maxVisible:[30,0,200,1],drawThreshold:[5,0,20,1]}},shadow:{enabled:!1,color:\"rgba(0,0,0,0.5)\",size:[10,0,20,1],x:[5,-30,30,1],y:[5,-30,30,1]},shape:[\"ellipse\",\"box\",\"circle\",\"database\",\"diamond\",\"dot\",\"square\",\"star\",\"text\",\"triangle\",\"triangleDown\",\"hexagon\"],shapeProperties:{borderDashes:!1,borderRadius:[6,0,20,1],interpolation:!0,useImageSize:!1},size:[25,0,200,1]},edges:{arrows:{to:{enabled:!1,scaleFactor:[1,0,3,.05],type:\"arrow\"},middle:{enabled:!1,scaleFactor:[1,0,3,.05],type:\"arrow\"},from:{enabled:!1,scaleFactor:[1,0,3,.05],type:\"arrow\"}},endPointOffset:{from:[0,-10,10,1],to:[0,-10,10,1]},arrowStrikethrough:!0,color:{color:[\"color\",\"#848484\"],highlight:[\"color\",\"#848484\"],hover:[\"color\",\"#848484\"],inherit:[\"from\",\"to\",\"both\",!0,!1],opacity:[1,0,1,.05]},dashes:!1,font:{color:[\"color\",\"#343434\"],size:[14,0,100,1],face:[\"arial\",\"verdana\",\"tahoma\"],background:[\"color\",\"none\"],strokeWidth:[2,0,50,1],strokeColor:[\"color\",\"#ffffff\"],align:[\"horizontal\",\"top\",\"middle\",\"bottom\"]},hidden:!1,hoverWidth:[1.5,0,5,.1],labelHighlightBold:!0,physics:!0,scaling:{min:[1,0,100,1],max:[15,0,100,1],label:{enabled:!0,min:[14,0,200,1],max:[30,0,200,1],maxVisible:[30,0,200,1],drawThreshold:[5,0,20,1]}},selectionWidth:[1.5,0,5,.1],selfReferenceSize:[20,0,200,1],selfReference:{size:[20,0,200,1],angle:[Math.PI/2,-6*Math.PI,6*Math.PI,Math.PI/8],renderBehindTheNode:!0},shadow:{enabled:!1,color:\"rgba(0,0,0,0.5)\",size:[10,0,20,1],x:[5,-30,30,1],y:[5,-30,30,1]},smooth:{enabled:!0,type:[\"dynamic\",\"continuous\",\"discrete\",\"diagonalCross\",\"straightCross\",\"horizontal\",\"vertical\",\"curvedCW\",\"curvedCCW\",\"cubicBezier\"],forceDirection:[\"horizontal\",\"vertical\",\"none\"],roundness:[.5,0,1,.05]},width:[1,0,30,1]},layout:{hierarchical:{enabled:!1,levelSeparation:[150,20,500,5],nodeSpacing:[100,20,500,5],treeSpacing:[200,20,500,5],blockShifting:!0,edgeMinimization:!0,parentCentralization:!0,direction:[\"UD\",\"DU\",\"LR\",\"RL\"],sortMethod:[\"hubsize\",\"directed\"],shakeTowards:[\"leaves\",\"roots\"]}},interaction:{dragNodes:!0,dragView:!0,hideEdgesOnDrag:!1,hideEdgesOnZoom:!1,hideNodesOnDrag:!1,hover:!1,keyboard:{enabled:!1,speed:{x:[10,0,40,1],y:[10,0,40,1],zoom:[.02,0,.1,.005]},bindToWindow:!0,autoFocus:!0},multiselect:!1,navigationButtons:!1,selectable:!0,selectConnectedEdges:!0,hoverConnectedEdges:!0,tooltipDelay:[300,0,1e3,25],zoomView:!0,zoomSpeed:[1,.1,2,.1]},manipulation:{enabled:!1,initiallyActive:!1},physics:{enabled:!0,barnesHut:{theta:[.5,.1,1,.05],gravitationalConstant:[-2e3,-3e4,0,50],centralGravity:[.3,0,10,.05],springLength:[95,0,500,5],springConstant:[.04,0,1.2,.005],damping:[.09,0,1,.01],avoidOverlap:[0,0,1,.01]},forceAtlas2Based:{theta:[.5,.1,1,.05],gravitationalConstant:[-50,-500,0,1],centralGravity:[.01,0,1,.005],springLength:[95,0,500,5],springConstant:[.08,0,1.2,.005],damping:[.4,0,1,.01],avoidOverlap:[0,0,1,.01]},repulsion:{centralGravity:[.2,0,10,.05],springLength:[200,0,500,5],springConstant:[.05,0,1.2,.005],nodeDistance:[100,0,500,5],damping:[.09,0,1,.01]},hierarchicalRepulsion:{centralGravity:[.2,0,10,.05],springLength:[100,0,500,5],springConstant:[.01,0,1.2,.005],nodeDistance:[120,0,500,5],damping:[.09,0,1,.01],avoidOverlap:[0,0,1,.01]},maxVelocity:[50,0,150,1],minVelocity:[.1,.01,.5,.01],solver:[\"barnesHut\",\"forceAtlas2Based\",\"repulsion\",\"hierarchicalRepulsion\"],timestep:[.5,.01,1,.01],wind:{x:[0,-10,10,.1],y:[0,-10,10,.1]}}},Nv=function(t,e,i){var n;return!(!dr(t).call(t,\"physics\")||!dr(n=zv.physics.solver).call(n,e)||i.physics.solver===e||\"wind\"===e)},Av=Object.freeze({__proto__:null,configuratorHideOption:Nv,allOptions:Bv,configureOptions:zv}),Fv=function(){function t(){Nn(this,t)}return Fn(t,[{key:\"getDistances\",value:function(t,e,i){for(var n={},o=t.edges,r=0;r<e.length;r++){var s={};n[e[r]]=s;for(var a=0;a<e.length;a++)s[e[a]]=r==a?0:1e9}for(var h=0;h<i.length;h++){var l=o[i[h]];!0===l.connected&&void 0!==n[l.fromId]&&void 0!==n[l.toId]&&(n[l.fromId][l.toId]=1,n[l.toId][l.fromId]=1)}for(var d=e.length,c=0;c<d;c++)for(var u=e[c],f=n[u],p=0;p<d-1;p++)for(var v=e[p],g=n[v],y=p+1;y<d;y++){var m=e[y],b=n[m],w=Math.min(g[m],g[u]+f[m]);g[m]=w,b[v]=w}return n}}]),t}(),jv=function(){function t(e,i,n){Nn(this,t),this.body=e,this.springLength=i,this.springConstant=n,this.distanceSolver=new Fv}return Fn(t,[{key:\"setOptions\",value:function(t){t&&(t.springLength&&(this.springLength=t.springLength),t.springConstant&&(this.springConstant=t.springConstant))}},{key:\"solve\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=this.distanceSolver.getDistances(this.body,t,e);this._createL_matrix(n),this._createK_matrix(n),this._createE_matrix();for(var o=.01,r=1,s=0,a=Math.max(1e3,Math.min(10*this.body.nodeIndices.length,6e3)),h=5,l=1e9,d=0,c=0,u=0,f=0,p=0;l>o&&s<a;){s+=1;var v=this._getHighestEnergyNode(i),g=uo(v,4);for(d=g[0],l=g[1],c=g[2],u=g[3],f=l,p=0;f>r&&p<h;){p+=1,this._moveNode(d,c,u);var y=this._getEnergy(d),m=uo(y,3);f=m[0],c=m[1],u=m[2]}}}},{key:\"_getHighestEnergyNode\",value:function(t){for(var e=this.body.nodeIndices,i=this.body.nodes,n=0,o=e[0],r=0,s=0,a=0;a<e.length;a++){var h=e[a];if(!0!==i[h].predefinedPosition||!0===i[h].isCluster&&!0===t||!0!==i[h].options.fixed.x||!0!==i[h].options.fixed.y){var l=this._getEnergy(h),d=uo(l,3),c=d[0],u=d[1],f=d[2];n<c&&(n=c,o=h,r=u,s=f)}}return[o,n,r,s]}},{key:\"_getEnergy\",value:function(t){var e=uo(this.E_sums[t],2),i=e[0],n=e[1];return[Math.sqrt(Math.pow(i,2)+Math.pow(n,2)),i,n]}},{key:\"_moveNode\",value:function(t,e,i){for(var n=this.body.nodeIndices,o=this.body.nodes,r=0,s=0,a=0,h=o[t].x,l=o[t].y,d=this.K_matrix[t],c=this.L_matrix[t],u=0;u<n.length;u++){var f=n[u];if(f!==t){var p=o[f].x,v=o[f].y,g=d[f],y=c[f],m=1/Math.pow(Math.pow(h-p,2)+Math.pow(l-v,2),1.5);r+=g*(1-y*Math.pow(l-v,2)*m),s+=g*(y*(h-p)*(l-v)*m),a+=g*(1-y*Math.pow(h-p,2)*m)}}var b=(e/r+i/s)/(s/r-a/s),w=-(s*b+e)/r;o[t].x+=w,o[t].y+=b,this._updateE_matrix(t)}},{key:\"_createL_matrix\",value:function(t){var e=this.body.nodeIndices,i=this.springLength;this.L_matrix=[];for(var n=0;n<e.length;n++){this.L_matrix[e[n]]={};for(var o=0;o<e.length;o++)this.L_matrix[e[n]][e[o]]=i*t[e[n]][e[o]]}}},{key:\"_createK_matrix\",value:function(t){var e=this.body.nodeIndices,i=this.springConstant;this.K_matrix=[];for(var n=0;n<e.length;n++){this.K_matrix[e[n]]={};for(var o=0;o<e.length;o++)this.K_matrix[e[n]][e[o]]=i*Math.pow(t[e[n]][e[o]],-2)}}},{key:\"_createE_matrix\",value:function(){var t=this.body.nodeIndices,e=this.body.nodes;this.E_matrix={},this.E_sums={};for(var i=0;i<t.length;i++)this.E_matrix[t[i]]=[];for(var n=0;n<t.length;n++){for(var o=t[n],r=e[o].x,s=e[o].y,a=0,h=0,l=n;l<t.length;l++){var d=t[l];if(d!==o){var c=e[d].x,u=e[d].y,f=1/Math.sqrt(Math.pow(r-c,2)+Math.pow(s-u,2));this.E_matrix[o][l]=[this.K_matrix[o][d]*(r-c-this.L_matrix[o][d]*(r-c)*f),this.K_matrix[o][d]*(s-u-this.L_matrix[o][d]*(s-u)*f)],this.E_matrix[d][n]=this.E_matrix[o][l],a+=this.E_matrix[o][l][0],h+=this.E_matrix[o][l][1]}}this.E_sums[o]=[a,h]}}},{key:\"_updateE_matrix\",value:function(t){for(var e=this.body.nodeIndices,i=this.body.nodes,n=this.E_matrix[t],o=this.K_matrix[t],r=this.L_matrix[t],s=i[t].x,a=i[t].y,h=0,l=0,d=0;d<e.length;d++){var c=e[d];if(c!==t){var u=n[d],f=u[0],p=u[1],v=i[c].x,g=i[c].y,y=1/Math.sqrt(Math.pow(s-v,2)+Math.pow(a-g,2)),m=o[c]*(s-v-r[c]*(s-v)*y),b=o[c]*(a-g-r[c]*(a-g)*y);n[d]=[m,b],h+=m,l+=b;var w=this.E_sums[c];w[0]+=m-f,w[1]+=b-p}}this.E_sums[t]=[h,l]}}]),t}();function Rv(t,e,i){var n,o,r,s,a=this;if(!(this instanceof Rv))throw new SyntaxError(\"Constructor must be called with the new operator\");this.options={},this.defaultOptions={locale:\"en\",locales:Kl,clickToUse:!1},At(this.options,this.defaultOptions),this.body={container:t,nodes:{},nodeIndices:[],edges:{},edgeIndices:[],emitter:{on:Vt(n=this.on).call(n,this),off:Vt(o=this.off).call(o,this),emit:Vt(r=this.emit).call(r,this),once:Vt(s=this.once).call(s,this)},eventListeners:{onTap:function(){},onTouch:function(){},onDoubleTap:function(){},onHold:function(){},onDragStart:function(){},onDrag:function(){},onDragEnd:function(){},onMouseWheel:function(){},onPinch:function(){},onMouseMove:function(){},onRelease:function(){},onContext:function(){}},data:{nodes:null,edges:null},functions:{createNode:function(){},createEdge:function(){},getPointer:function(){}},modules:{},view:{scale:1,translation:{x:0,y:0}},selectionBox:{show:!1,position:{start:{x:0,y:0},end:{x:0,y:0}}}},this.bindEventListeners(),this.images=new Zl((function(){return a.body.emitter.emit(\"_requestRedraw\")})),this.groups=new gd,this.canvas=new Ep(this.body),this.selectionHandler=new ov(this.body,this.canvas),this.interactionHandler=new Ip(this.body,this.canvas,this.selectionHandler),this.view=new Cp(this.body,this.canvas),this.renderer=new wp(this.body,this.canvas),this.physics=new fp(this.body),this.layoutEngine=new _v(this.body),this.clustering=new yp(this.body),this.manipulation=new Ov(this.body,this.canvas,this.selectionHandler,this.interactionHandler),this.nodesHandler=new pf(this.body,this.images,this.groups,this.layoutEngine),this.edgesHandler=new ip(this.body,this.images,this.groups),this.body.modules.kamadaKawai=new jv(this.body,150,.05),this.body.modules.clustering=this.clustering,this.canvas._create(),this.setOptions(i),this.setData(e)}function Lv(t){for(var e in t)Object.prototype.hasOwnProperty.call(t,e)&&(t[e].redundant=t[e].used,t[e].used=[])}function Hv(t){for(var e in t)if(Object.prototype.hasOwnProperty.call(t,e)&&t[e].redundant){for(var i=0;i<t[e].redundant.length;i++)t[e].redundant[i].parentNode.removeChild(t[e].redundant[i]);t[e].redundant=[]}}function Wv(t,e,i){var n;return Object.prototype.hasOwnProperty.call(e,t)?e[t].redundant.length>0?(n=e[t].redundant[0],e[t].redundant.shift()):(n=document.createElementNS(\"http://www.w3.org/2000/svg\",t),i.appendChild(n)):(n=document.createElementNS(\"http://www.w3.org/2000/svg\",t),e[t]={used:[],redundant:[]},i.appendChild(n)),e[t].used.push(n),n}Zt(Rv.prototype),Rv.prototype.setOptions=function(t){var e=this;if(null===t&&(t=void 0),void 0!==t){!0===ul.validate(t,Bv)&&console.error(\"%cErrors have been found in the supplied options object.\",cl);if(Eh([\"locale\",\"locales\",\"clickToUse\"],this.options,t),void 0!==t.locale&&(t.locale=function(t,e){try{var i=e.split(/[-_ /]/,2),n=uo(i,2),o=n[0],r=n[1],s=null!=o?o.toLowerCase():null,a=null!=r?r.toUpperCase():null;if(s&&a){var h,l=s+\"-\"+a;if(Object.prototype.hasOwnProperty.call(t,l))return l;console.warn(Eo(h=\"Unknown variant \".concat(a,\" of language \")).call(h,s,\".\"))}if(s){var d=s;if(Object.prototype.hasOwnProperty.call(t,d))return d;console.warn(\"Unknown language \".concat(s))}return console.warn(\"Unknown locale \".concat(e,\", falling back to English.\")),\"en\"}catch(t){return console.error(t),console.warn(\"Unexpected error while normalizing locale \".concat(e,\", falling back to English.\")),\"en\"}}(t.locales||this.options.locales,t.locale)),t=this.layoutEngine.setOptions(t.layout,t),this.canvas.setOptions(t),this.groups.setOptions(t.groups),this.nodesHandler.setOptions(t.nodes),this.edgesHandler.setOptions(t.edges),this.physics.setOptions(t.physics),this.manipulation.setOptions(t.manipulation,t,this.options),this.interactionHandler.setOptions(t.interaction),this.renderer.setOptions(t.interaction),this.selectionHandler.setOptions(t.interaction),void 0!==t.groups&&this.body.emitter.emit(\"refreshNodes\"),\"configure\"in t&&(this.configurator||(this.configurator=new hl(this,this.body.container,zv,this.canvas.pixelRatio,Nv)),this.configurator.setOptions(t.configure)),this.configurator&&!0===this.configurator.options.enabled){var i={nodes:{},edges:{},layout:{},interaction:{},manipulation:{},physics:{},global:{}};Ch(i.nodes,this.nodesHandler.options),Ch(i.edges,this.edgesHandler.options),Ch(i.layout,this.layoutEngine.options),Ch(i.interaction,this.selectionHandler.options),Ch(i.interaction,this.renderer.options),Ch(i.interaction,this.interactionHandler.options),Ch(i.manipulation,this.manipulation.options),Ch(i.physics,this.physics.options),Ch(i.global,this.canvas.options),Ch(i.global,this.options),this.configurator.setModuleOptions(i)}void 0!==t.clickToUse?!0===t.clickToUse?void 0===this.activator&&(this.activator=new sl(this.canvas.frame),this.activator.on(\"change\",(function(){e.body.emitter.emit(\"activate\")}))):(void 0!==this.activator&&(this.activator.destroy(),delete this.activator),this.body.emitter.emit(\"activate\")):this.body.emitter.emit(\"activate\"),this.canvas.setSize(),this.body.emitter.emit(\"startSimulation\")}},Rv.prototype._updateVisibleIndices=function(){var t=this.body.nodes,e=this.body.edges;for(var i in this.body.nodeIndices=[],this.body.edgeIndices=[],t)Object.prototype.hasOwnProperty.call(t,i)&&(this.clustering._isClusteredNode(i)||!1!==t[i].options.hidden||this.body.nodeIndices.push(t[i].id));for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){var o=e[n],r=t[o.fromId],s=t[o.toId],a=void 0!==r&&void 0!==s;!this.clustering._isClusteredEdge(n)&&!1===o.options.hidden&&a&&!1===r.options.hidden&&!1===s.options.hidden&&this.body.edgeIndices.push(o.id)}},Rv.prototype.bindEventListeners=function(){var t=this;this.body.emitter.on(\"_dataChanged\",(function(){t.edgesHandler._updateState(),t.body.emitter.emit(\"_dataUpdated\")})),this.body.emitter.on(\"_dataUpdated\",(function(){t.clustering._updateState(),t._updateVisibleIndices(),t._updateValueRange(t.body.nodes),t._updateValueRange(t.body.edges),t.body.emitter.emit(\"startSimulation\"),t.body.emitter.emit(\"_requestRedraw\")}))},Rv.prototype.setData=function(t){if(this.body.emitter.emit(\"resetPhysics\"),this.body.emitter.emit(\"_resetData\"),this.selectionHandler.unselectAll(),t&&t.dot&&(t.nodes||t.edges))throw new SyntaxError('Data must contain either parameter \"dot\" or  parameter pair \"nodes\" and \"edges\", but not both.');if(this.setOptions(t&&t.options),t&&t.dot){console.warn(\"The dot property has been deprecated. Please use the static convertDot method to convert DOT into vis.network format and use the normal data format with nodes and edges. This converter is used like this: var data = vis.network.convertDot(dotString);\");var e=Ul(t.dot);this.setData(e)}else if(t&&t.gephi){console.warn(\"The gephi property has been deprecated. Please use the static convertGephi method to convert gephi into vis.network format and use the normal data format with nodes and edges. This converter is used like this: var data = vis.network.convertGephi(gephiJson);\");var i=Xl(t.gephi);this.setData(i)}else this.nodesHandler.setData(t&&t.nodes,!0),this.edgesHandler.setData(t&&t.edges,!0),this.body.emitter.emit(\"_dataChanged\"),this.body.emitter.emit(\"_dataLoaded\"),this.body.emitter.emit(\"initPhysics\")},Rv.prototype.destroy=function(){for(var t in this.body.emitter.emit(\"destroy\"),this.body.emitter.off(),this.off(),delete this.groups,delete this.canvas,delete this.selectionHandler,delete this.interactionHandler,delete this.view,delete this.renderer,delete this.physics,delete this.layoutEngine,delete this.clustering,delete this.manipulation,delete this.nodesHandler,delete this.edgesHandler,delete this.configurator,delete this.images,this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,t)&&delete this.body.nodes[t];for(var e in this.body.edges)Object.prototype.hasOwnProperty.call(this.body.edges,e)&&delete this.body.edges[e];mh(this.body.container)},Rv.prototype._updateValueRange=function(t){var e,i=void 0,n=void 0,o=0;for(e in t)if(Object.prototype.hasOwnProperty.call(t,e)){var r=t[e].getValue();void 0!==r&&(i=void 0===i?r:Math.min(r,i),n=void 0===n?r:Math.max(r,n),o+=r)}if(void 0!==i&&void 0!==n)for(e in t)Object.prototype.hasOwnProperty.call(t,e)&&t[e].setValueRange(i,n,o)},Rv.prototype.isActive=function(){return!this.activator||this.activator.active},Rv.prototype.setSize=function(){return this.canvas.setSize.apply(this.canvas,arguments)},Rv.prototype.canvasToDOM=function(){return this.canvas.canvasToDOM.apply(this.canvas,arguments)},Rv.prototype.DOMtoCanvas=function(){return this.canvas.DOMtoCanvas.apply(this.canvas,arguments)},Rv.prototype.findNode=function(){return this.clustering.findNode.apply(this.clustering,arguments)},Rv.prototype.isCluster=function(){return this.clustering.isCluster.apply(this.clustering,arguments)},Rv.prototype.openCluster=function(){return this.clustering.openCluster.apply(this.clustering,arguments)},Rv.prototype.cluster=function(){return this.clustering.cluster.apply(this.clustering,arguments)},Rv.prototype.getNodesInCluster=function(){return this.clustering.getNodesInCluster.apply(this.clustering,arguments)},Rv.prototype.clusterByConnection=function(){return this.clustering.clusterByConnection.apply(this.clustering,arguments)},Rv.prototype.clusterByHubsize=function(){return this.clustering.clusterByHubsize.apply(this.clustering,arguments)},Rv.prototype.updateClusteredNode=function(){return this.clustering.updateClusteredNode.apply(this.clustering,arguments)},Rv.prototype.getClusteredEdges=function(){return this.clustering.getClusteredEdges.apply(this.clustering,arguments)},Rv.prototype.getBaseEdge=function(){return this.clustering.getBaseEdge.apply(this.clustering,arguments)},Rv.prototype.getBaseEdges=function(){return this.clustering.getBaseEdges.apply(this.clustering,arguments)},Rv.prototype.updateEdge=function(){return this.clustering.updateEdge.apply(this.clustering,arguments)},Rv.prototype.clusterOutliers=function(){return this.clustering.clusterOutliers.apply(this.clustering,arguments)},Rv.prototype.getSeed=function(){return this.layoutEngine.getSeed.apply(this.layoutEngine,arguments)},Rv.prototype.enableEditMode=function(){return this.manipulation.enableEditMode.apply(this.manipulation,arguments)},Rv.prototype.disableEditMode=function(){return this.manipulation.disableEditMode.apply(this.manipulation,arguments)},Rv.prototype.addNodeMode=function(){return this.manipulation.addNodeMode.apply(this.manipulation,arguments)},Rv.prototype.editNode=function(){return this.manipulation.editNode.apply(this.manipulation,arguments)},Rv.prototype.editNodeMode=function(){return console.warn(\"Deprecated: Please use editNode instead of editNodeMode.\"),this.manipulation.editNode.apply(this.manipulation,arguments)},Rv.prototype.addEdgeMode=function(){return this.manipulation.addEdgeMode.apply(this.manipulation,arguments)},Rv.prototype.editEdgeMode=function(){return this.manipulation.editEdgeMode.apply(this.manipulation,arguments)},Rv.prototype.deleteSelected=function(){return this.manipulation.deleteSelected.apply(this.manipulation,arguments)},Rv.prototype.getPositions=function(){return this.nodesHandler.getPositions.apply(this.nodesHandler,arguments)},Rv.prototype.getPosition=function(){return this.nodesHandler.getPosition.apply(this.nodesHandler,arguments)},Rv.prototype.storePositions=function(){return this.nodesHandler.storePositions.apply(this.nodesHandler,arguments)},Rv.prototype.moveNode=function(){return this.nodesHandler.moveNode.apply(this.nodesHandler,arguments)},Rv.prototype.getBoundingBox=function(){return this.nodesHandler.getBoundingBox.apply(this.nodesHandler,arguments)},Rv.prototype.getConnectedNodes=function(t){return void 0!==this.body.nodes[t]?this.nodesHandler.getConnectedNodes.apply(this.nodesHandler,arguments):this.edgesHandler.getConnectedNodes.apply(this.edgesHandler,arguments)},Rv.prototype.getConnectedEdges=function(){return this.nodesHandler.getConnectedEdges.apply(this.nodesHandler,arguments)},Rv.prototype.startSimulation=function(){return this.physics.startSimulation.apply(this.physics,arguments)},Rv.prototype.stopSimulation=function(){return this.physics.stopSimulation.apply(this.physics,arguments)},Rv.prototype.stabilize=function(){return this.physics.stabilize.apply(this.physics,arguments)},Rv.prototype.getSelection=function(){return this.selectionHandler.getSelection.apply(this.selectionHandler,arguments)},Rv.prototype.setSelection=function(){return this.selectionHandler.setSelection.apply(this.selectionHandler,arguments)},Rv.prototype.getSelectedNodes=function(){return this.selectionHandler.getSelectedNodeIds.apply(this.selectionHandler,arguments)},Rv.prototype.getSelectedEdges=function(){return this.selectionHandler.getSelectedEdgeIds.apply(this.selectionHandler,arguments)},Rv.prototype.getNodeAt=function(){var t=this.selectionHandler.getNodeAt.apply(this.selectionHandler,arguments);return void 0!==t&&void 0!==t.id?t.id:t},Rv.prototype.getEdgeAt=function(){var t=this.selectionHandler.getEdgeAt.apply(this.selectionHandler,arguments);return void 0!==t&&void 0!==t.id?t.id:t},Rv.prototype.selectNodes=function(){return this.selectionHandler.selectNodes.apply(this.selectionHandler,arguments)},Rv.prototype.selectEdges=function(){return this.selectionHandler.selectEdges.apply(this.selectionHandler,arguments)},Rv.prototype.unselectAll=function(){this.selectionHandler.unselectAll.apply(this.selectionHandler,arguments),this.selectionHandler.commitWithoutEmitting.apply(this.selectionHandler),this.redraw()},Rv.prototype.redraw=function(){return this.renderer.redraw.apply(this.renderer,arguments)},Rv.prototype.getScale=function(){return this.view.getScale.apply(this.view,arguments)},Rv.prototype.getViewPosition=function(){return this.view.getViewPosition.apply(this.view,arguments)},Rv.prototype.fit=function(){return this.view.fit.apply(this.view,arguments)},Rv.prototype.moveTo=function(){return this.view.moveTo.apply(this.view,arguments)},Rv.prototype.focus=function(){return this.view.focus.apply(this.view,arguments)},Rv.prototype.releaseNode=function(){return this.view.releaseNode.apply(this.view,arguments)},Rv.prototype.getOptionsFromConfigurator=function(){var t={};return this.configurator&&(t=this.configurator.getOptions.apply(this.configurator)),t};var qv=Object.freeze({__proto__:null,prepareElements:Lv,cleanupElements:Hv,resetElements:function(t){Lv(t),Hv(t),Lv(t)},getSVGElement:Wv,getDOMElement:function(t,e,i,n){var o;return Object.prototype.hasOwnProperty.call(e,t)?e[t].redundant.length>0?(o=e[t].redundant[0],e[t].redundant.shift()):(o=document.createElement(t),void 0!==n?i.insertBefore(o,n):i.appendChild(o)):(o=document.createElement(t),e[t]={used:[],redundant:[]},void 0!==n?i.insertBefore(o,n):i.appendChild(o)),e[t].used.push(o),o},drawPoint:function(t,e,i,n,o,r){var s;if(\"circle\"==i.style?((s=Wv(\"circle\",n,o)).setAttributeNS(null,\"cx\",t),s.setAttributeNS(null,\"cy\",e),s.setAttributeNS(null,\"r\",.5*i.size)):((s=Wv(\"rect\",n,o)).setAttributeNS(null,\"x\",t-.5*i.size),s.setAttributeNS(null,\"y\",e-.5*i.size),s.setAttributeNS(null,\"width\",i.size),s.setAttributeNS(null,\"height\",i.size)),void 0!==i.styles&&s.setAttributeNS(null,\"style\",i.styles),s.setAttributeNS(null,\"class\",i.className+\" vis-point\"),r){var a=Wv(\"text\",n,o);r.xOffset&&(t+=r.xOffset),r.yOffset&&(e+=r.yOffset),r.content&&(a.textContent=r.content),r.className&&a.setAttributeNS(null,\"class\",r.className+\" vis-label\"),a.setAttributeNS(null,\"x\",t),a.setAttributeNS(null,\"y\",e)}return s},drawBar:function(t,e,i,n,o,r,s,a){if(0!=n){n<0&&(e-=n*=-1);var h=Wv(\"rect\",r,s);h.setAttributeNS(null,\"x\",t-.5*i),h.setAttributeNS(null,\"y\",e),h.setAttributeNS(null,\"width\",i),h.setAttributeNS(null,\"height\",n),h.setAttributeNS(null,\"class\",o),a&&h.setAttributeNS(null,\"style\",a)}}}),Vv={Images:Zl,dotparser:Yl,gephiParser:Gl,allOptions:Av,convertDot:Ul,convertGephi:Xl},Uv=Object.freeze({__proto__:null,network:Vv,DOMutil:qv,util:fl,data:ou,Hammer:ll,keycharm:Tp,DataSet:tu,DataView:eu,Queue:Zc,Network:Rv});t.DOMutil=qv,t.DataSet=tu,t.DataView=eu,t.Hammer=ll,t.Network=Rv,t.Queue=Zc,t.data=ou,t.default=Uv,t.keycharm=Tp,t.network=Vv,t.util=fl,Object.defineProperty(t,\"__esModule\",{value:!0})}\n",
       "  // ));\n",
       "  // # sourceMappingURL=vis-network.min.js.map\n",
       "\n",
       "  );\n",
       "}\n",
       "\n",
       "\n",
       "    require([\"gravis-vis-network\"], function(vis){\n",
       "      // Strict mode: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Strict_mode\n",
       "      \"use strict\";\n",
       "\n",
       "      const state = {\n",
       "        manager:{\n",
       "          // Data generation process: 1) Fetch state.rawData, 2) derive state.parsedData, 3) derive state.shownData\n",
       "\n",
       "          // 1) Fetch state.rawData\n",
       "          fetchRawDataFromTemplating(){\n",
       "            state.rawData = [{\"directed\": true, \"metadata\": {\"node_color\": \"black\", \"node_opacity\": 1, \"node_size\": 10, \"node_shape\": \"circle\", \"node_border_color\": \"black\", \"node_border_size\": 1, \"node_label_color\": \"black\", \"node_label_size\": 10, \"edge_color\": \"#999\", \"edge_opacity\": 1, \"edge_size\": 2, \"edge_shape\": \"circle\", \"edge_border_color\": \"#999\", \"edge_border_size\": 1, \"edge_label_color\": \"black\", \"edge_label_size\": 10, \"arrow_size\": 4, \"arrow_color\": \"#999\"}, \"nodes\": {\"r1MhwkDR9RGGNg07nIf5BQ\": {\"label\": \"Tom\", \"metadata\": {\"focus\": \"target\", \"label\": \"Tom\", \"color\": \"#f07f65\", \"size\": 10}}, \"JIMOIAq9XU0WsAXPLHQRBg\": {\"label\": \"MyBank\", \"metadata\": {\"focus\": \"controlled\", \"label\": \"MyBank\", \"value\": 0.45954475000000006, \"color\": \"#edb551\", \"size\": 33.89486502407112}}, \"nToxQTWUkZ4gv4iAItXSKw\": {\"label\": \"NovaCore Innovations\", \"metadata\": {\"focus\": \"controlled\", \"label\": \"NovaCore Innovations\", \"value\": 0.15, \"color\": \"#edb551\", \"size\": 19.364916731037084}}, \"DuOTZpKAvOFRrhddS9d3NA\": {\"label\": \"InfinityForge Technologies\", \"metadata\": {\"focus\": \"controlled\", \"label\": \"InfinityForge Technologies\", \"color\": \"#edb551\", \"size\": 10}}, \"AOWmwJayFKAjAmmIlk8yOQ\": {\"label\": \"Family Doe\", \"metadata\": {\"focus\": \"target\", \"label\": \"Family Doe\", \"value\": 0.24535094202500005, \"color\": \"#f07f65\", \"size\": 24.766456247563966}}, \"YlVLHV5wCROpp3hW3nbNOQ\": {\"label\": \"PhoenixRise Ventures\", \"metadata\": {\"focus\": \"controlled\", \"label\": \"PhoenixRise Ventures\", \"value\": 0.3015, \"color\": \"#edb551\", \"size\": 27.45450782658469}}, \"MYXtcytg7uj+rAyOjYhBQA\": {\"label\": \"People Bank\", \"metadata\": {\"focus\": \"controlled\", \"label\": \"People Bank\", \"value\": 0.09829662202500003, \"color\": \"#edb551\", \"size\": 15.676146052601705}}, \"uVH0cGqXVe7/eDYLCwW6XQ\": {\"label\": \"NebulaTech Solutions\", \"metadata\": {\"focus\": \"controlled\", \"label\": \"NebulaTech Solutions\", \"color\": \"#edb551\", \"size\": 10}}, \"77IlFbWAmT0DYKSlTSVLjg\": {\"label\": \"CyberNexus Systems\", \"metadata\": {\"focus\": \"controlled\", \"label\": \"CyberNexus Systems\", \"color\": \"#edb551\", \"size\": 10}}, \"dQIuZHbv+9dqtJ8fO/8rnA\": {\"label\": \"ACME Bank\", \"metadata\": {\"focus\": \"controlled\", \"label\": \"ACME Bank\", \"value\": 1.0, \"color\": \"#edb551\", \"size\": 50.0}}, \"cW6S8m7PKwayYyrUFQOwnA\": {\"label\": \"Mary\", \"metadata\": {\"focus\": \"controlled\", \"label\": \"Mary\", \"color\": \"#edb551\", \"size\": 10}}, \"B2ENslGgWUXwghQigOV/ng\": {\"label\": \"StellarSphere Enterprises\", \"metadata\": {\"focus\": \"controlled\", \"label\": \"StellarSphere Enterprises\", \"value\": 0.183915, \"color\": \"#edb551\", \"size\": 21.442656085475978}}, \"hZwSJYPIqnQL6SP8CAMJog\": {\"label\": \"CelestialWave Industries\", \"metadata\": {\"focus\": \"controlled\", \"label\": \"CelestialWave Industries\", \"value\": 0.45, \"color\": \"#edb551\", \"size\": 33.54101966249684}}, \"sAvunE8/tDW5b4Q7IVNIwg\": {\"label\": \"Anna\", \"metadata\": {\"focus\": \"controlled\", \"label\": \"Anna\", \"value\": 0.14705432000000002, \"color\": \"#edb551\", \"size\": 19.17383112473874}}, \"Lh2x5E3rMHHKwYTA4a3yyQ\": {\"label\": \"ACME Trust\", \"metadata\": {\"focus\": \"controlled\", \"label\": \"ACME Trust\", \"value\": 0.10569529250000002, \"color\": \"#edb551\", \"size\": 16.255406216087007}}, \"sIMZM6956KBcjN/vk1rXzA\": {\"label\": \"Bob\", \"metadata\": {\"focus\": \"controlled\", \"label\": \"Bob\", \"value\": 0.09829662202500003, \"color\": \"#edb551\", \"size\": 15.676146052601705}}, \"gb8VMWs5dsc6cteL2DOYCA\": {\"label\": \"ElysiumTech Solutions\", \"metadata\": {\"label\": \"ElysiumTech Solutions\", \"color\": \"#92979c\", \"size\": 10}}, \"249BMZupWCFjqM7zue27iQ\": {\"label\": \"Quantum Dynamics Innovations\", \"metadata\": {\"label\": \"Quantum Dynamics Innovations\", \"color\": \"#92979c\", \"size\": 10}}, \"IWkBDvnHtyJq/z5hVPdgnQ\": {\"label\": \"DreamScape Enterprises\", \"metadata\": {\"label\": \"DreamScape Enterprises\", \"color\": \"#92979c\", \"size\": 10}}}, \"edges\": [{\"source\": \"JIMOIAq9XU0WsAXPLHQRBg\", \"target\": \"B2ENslGgWUXwghQigOV/ng\", \"metadata\": {\"kind\": \"direct control\", \"color\": \"#f07f65\", \"label\": \"\"}}, {\"source\": \"AOWmwJayFKAjAmmIlk8yOQ\", \"target\": \"r1MhwkDR9RGGNg07nIf5BQ\", \"metadata\": {\"kind\": \"in family\", \"color\": \"#edb551\", \"label\": \"family member\"}}, {\"source\": \"AOWmwJayFKAjAmmIlk8yOQ\", \"target\": \"JIMOIAq9XU0WsAXPLHQRBg\", \"metadata\": {\"kind\": \"direct control\", \"color\": \"#f07f65\", \"label\": \"\"}}, {\"source\": \"AOWmwJayFKAjAmmIlk8yOQ\", \"target\": \"MYXtcytg7uj+rAyOjYhBQA\", \"metadata\": {\"kind\": \"direct control\", \"color\": \"#f07f65\", \"label\": \"\"}}, {\"source\": \"AOWmwJayFKAjAmmIlk8yOQ\", \"target\": \"cW6S8m7PKwayYyrUFQOwnA\", \"metadata\": {\"kind\": \"in family\", \"color\": \"#edb551\", \"label\": \"family member\"}}, {\"source\": \"AOWmwJayFKAjAmmIlk8yOQ\", \"target\": \"sAvunE8/tDW5b4Q7IVNIwg\", \"metadata\": {\"kind\": \"in family\", \"color\": \"#edb551\", \"label\": \"family member\"}}, {\"source\": \"AOWmwJayFKAjAmmIlk8yOQ\", \"target\": \"Lh2x5E3rMHHKwYTA4a3yyQ\", \"metadata\": {\"kind\": \"direct control\", \"color\": \"#f07f65\", \"label\": \"\"}}, {\"source\": \"AOWmwJayFKAjAmmIlk8yOQ\", \"target\": \"sIMZM6956KBcjN/vk1rXzA\", \"metadata\": {\"kind\": \"in family\", \"color\": \"#edb551\", \"label\": \"family member\"}}, {\"source\": \"YlVLHV5wCROpp3hW3nbNOQ\", \"target\": \"nToxQTWUkZ4gv4iAItXSKw\", \"metadata\": {\"kind\": \"direct control\", \"color\": \"#f07f65\", \"label\": \"\"}}, {\"source\": \"MYXtcytg7uj+rAyOjYhBQA\", \"target\": \"Lh2x5E3rMHHKwYTA4a3yyQ\", \"metadata\": {\"kind\": \"direct control\", \"color\": \"#f07f65\", \"label\": \"\"}}, {\"source\": \"B2ENslGgWUXwghQigOV/ng\", \"target\": \"YlVLHV5wCROpp3hW3nbNOQ\", \"metadata\": {\"kind\": \"direct control\", \"color\": \"#f07f65\", \"label\": \"\"}}, {\"source\": \"JIMOIAq9XU0WsAXPLHQRBg\", \"target\": \"nToxQTWUkZ4gv4iAItXSKw\", \"metadata\": {\"color\": \"#edb551\", \"label\": \"\"}}, {\"source\": \"JIMOIAq9XU0WsAXPLHQRBg\", \"target\": \"YlVLHV5wCROpp3hW3nbNOQ\", \"metadata\": {\"color\": \"#edb551\", \"label\": \"\"}}, {\"source\": \"JIMOIAq9XU0WsAXPLHQRBg\", \"target\": \"dQIuZHbv+9dqtJ8fO/8rnA\", \"metadata\": {\"color\": \"#edb551\", \"label\": \"\"}}, {\"source\": \"JIMOIAq9XU0WsAXPLHQRBg\", \"target\": \"hZwSJYPIqnQL6SP8CAMJog\", \"metadata\": {\"color\": \"#edb551\", \"label\": \"\"}}, {\"source\": \"AOWmwJayFKAjAmmIlk8yOQ\", \"target\": \"nToxQTWUkZ4gv4iAItXSKw\", \"metadata\": {\"color\": \"#edb551\", \"label\": \"\"}}, {\"source\": \"AOWmwJayFKAjAmmIlk8yOQ\", \"target\": \"YlVLHV5wCROpp3hW3nbNOQ\", \"metadata\": {\"color\": \"#edb551\", \"label\": \"\"}}, {\"source\": \"AOWmwJayFKAjAmmIlk8yOQ\", \"target\": \"B2ENslGgWUXwghQigOV/ng\", \"metadata\": {\"color\": \"#edb551\", \"label\": \"\"}}, {\"source\": \"AOWmwJayFKAjAmmIlk8yOQ\", \"target\": \"hZwSJYPIqnQL6SP8CAMJog\", \"metadata\": {\"color\": \"#edb551\", \"label\": \"\"}}, {\"source\": \"B2ENslGgWUXwghQigOV/ng\", \"target\": \"nToxQTWUkZ4gv4iAItXSKw\", \"metadata\": {\"color\": \"#edb551\", \"label\": \"\"}}, {\"source\": \"B2ENslGgWUXwghQigOV/ng\", \"target\": \"dQIuZHbv+9dqtJ8fO/8rnA\", \"metadata\": {\"color\": \"#edb551\", \"label\": \"\"}}, {\"source\": \"B2ENslGgWUXwghQigOV/ng\", \"target\": \"hZwSJYPIqnQL6SP8CAMJog\", \"metadata\": {\"color\": \"#edb551\", \"label\": \"\"}}]}];\n",
       "            // Data selection and normalization\n",
       "            state.nodeSizeDataSource = \"size\";\n",
       "            state.useNodeSizeNormalization = false;\n",
       "            state.nodeSizeNormalizationMin = 5.0;\n",
       "            state.nodeSizeNormalizationMax = 75.0;\n",
       "            state.nodeLabelTextDataSource = \"label\";\n",
       "            state.edgeSizeDataSource = \"size\";\n",
       "            state.useEdgeSizeNormalization = false;\n",
       "            state.edgeSizeNormalizationMin = 0.2;\n",
       "            state.edgeSizeNormalizationMax = 5.0;\n",
       "            state.edgeLabelTextDataSource = \"label\";\n",
       "            // Containers\n",
       "            state.graphContainerHeight = 450;\n",
       "            state.detailsContainerHeight = 100;\n",
       "            state.showDetails = false,\n",
       "            state.showDetailsToggleButton = true,\n",
       "            state.showMenu = false,\n",
       "            state.showMenuToggleButton = true,\n",
       "            // Nodes\n",
       "            state.showNodes = true;\n",
       "            state.nodeSizeFactor = 1.0;\n",
       "            state.nodeDragFix = false;\n",
       "            state.nodeHoverNeighborhood = false;\n",
       "            state.nodeHoverTooltip = true;\n",
       "            state.showNodeImages = true;\n",
       "            state.nodeImageSizeFactor = 1.0;\n",
       "            state.showNodeLabels = true;\n",
       "            state.showNodeLabelBorders = true;\n",
       "            state.nodeLabelSizeFactor = 1.0;\n",
       "            state.nodeLabelRotation = 0.0;\n",
       "            state.nodeLabelFont = \"Arial\";\n",
       "            // Edges\n",
       "            state.showEdges = true;\n",
       "            state.edgeSizeFactor = 1.0;\n",
       "            state.edgeCurvature = 0.4;\n",
       "            state.edgeHoverTooltip = true,\n",
       "            state.showEdgeLabels = true;\n",
       "            state.showEdgeLabelBorders = true;\n",
       "            state.edgeLabelSizeFactor = 1.0;\n",
       "            state.edgeLabelRotation = 0.0;\n",
       "            state.edgeLabelFont = \"Arial\";\n",
       "            // Layout algorithm\n",
       "            state.layoutAlgorithmActive = true;\n",
       "            state.layoutAlgorithm = \"barnesHut\";\n",
       "            state.gravitationalConstant = -2000.0;\n",
       "            state.centralGravity = 0.1;\n",
       "            state.springLength = 70.0;\n",
       "            state.springConstant = 0.1;\n",
       "            state.avoidOverlap = 0.0;\n",
       "            // Other\n",
       "            state.initZoomFactor = 0.75;\n",
       "            state.largeGraphThreshold = 500;\n",
       "          },\n",
       "\n",
       "          // 2) Derive state.parsedData from state.givenData\n",
       "          rawDataParser:{\n",
       "            getBool(obj, prop, def){\n",
       "              try{\n",
       "                const value = obj[prop];\n",
       "                if(value == \"true\" || value == \"True\"){\n",
       "                  value = true;\n",
       "                } else if(value == \"false\" || value == \"False\"){\n",
       "                  value = false;\n",
       "                }\n",
       "                if(value !== true && value !== false){\n",
       "                  throw \"Invalid value. Not a bool.\";\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return def;\n",
       "              }\n",
       "              return def\n",
       "            },\n",
       "\n",
       "            getString(obj, prop, def) {\n",
       "              try{\n",
       "                const value = String(obj[prop]);\n",
       "                if(value === \"undefined\"){\n",
       "                  throw \"Invalid value. Not a proper string.\";\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return def;\n",
       "              }\n",
       "              return def;\n",
       "            },\n",
       "\n",
       "            getArrayLengthOrZero(array){\n",
       "              try{\n",
       "                const value = parseInt(array.length);\n",
       "                if(!((value + 1) > 0)){\n",
       "                  throw \"Invalid value. Not a proper length.\";\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return 0;\n",
       "              }\n",
       "            },\n",
       "\n",
       "            getObjectLengthOrZero(obj){\n",
       "              try{\n",
       "                const value = Object.keys(obj).length;\n",
       "                if(!((value + 1) > 0)){\n",
       "                  throw \"Invalid value. Not a proper length.\";\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return 0;\n",
       "              }\n",
       "            },\n",
       "\n",
       "            createUniqueEdgeId(sourceId, targetId, knownEdgeIds){\n",
       "              let newEdgeIdBase = \"(\" + sourceId + \", \" + targetId + \")\",\n",
       "                newEdgeId = newEdgeIdBase,\n",
       "                multiEdgeCounter = 1;\n",
       "              for(let i=1; knownEdgeIds.has(newEdgeId); i++){\n",
       "                newEdgeId = newEdgeIdBase + \"_\" + String(i);\n",
       "                multiEdgeCounter += 1;\n",
       "              }\n",
       "              knownEdgeIds.add(newEdgeId);\n",
       "              return {\"id\": newEdgeId, \"count\": multiEdgeCounter}\n",
       "            },\n",
       "          },\n",
       "\n",
       "          rawMetadataParser:{\n",
       "            getString(obj, prop, def){\n",
       "              try{\n",
       "                const value = String(obj.metadata[prop]);\n",
       "                if(value === \"undefined\"){\n",
       "                  throw \"Invalid value. Not a proper string.\";\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return def;\n",
       "              }\n",
       "            },\n",
       "            getShape(obj, prop, def){\n",
       "              const givenShape = state.manager.rawMetadataParser.getString(obj, prop, def);\n",
       "              let visShape = def;\n",
       "              if(givenShape === \"circle\"){\n",
       "                visShape = \"dot\";\n",
       "              } else if(givenShape === \"rectangle\"){\n",
       "                visShape = \"square\";\n",
       "              } else if(givenShape === \"hexagon\"){\n",
       "                visShape = \"hexagon\";\n",
       "              }\n",
       "              return visShape;\n",
       "            },\n",
       "            getColor(obj, prop, def){\n",
       "              function isBodyidColor(strColor) {\n",
       "                const sty = new Option().style;\n",
       "                sty.color = strColor;\n",
       "                return sty.color !== \"\";\n",
       "              }\n",
       "              try{\n",
       "                const value = obj.metadata[prop];\n",
       "                if(!isBodyidColor(value)){\n",
       "                  throw \"Invalid value. Not a color.\"\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return def;\n",
       "              }\n",
       "            },\n",
       "            getFiniteNumber(obj, prop, def){\n",
       "              try{\n",
       "                const value = parseFloat(obj.metadata[prop]);\n",
       "                if(!isFinite(value) || value === null){\n",
       "                  throw \"Invalid value. Not a finite number.\"\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return def;\n",
       "              }\n",
       "            },\n",
       "            getFiniteNumberOrNull(obj, prop, def){\n",
       "              try{\n",
       "                const value = parseFloat(obj.metadata[prop]);\n",
       "                if(!isFinite(value)){  // Note: isFinite(null) gives true\n",
       "                  throw \"Invalid value. Not a finite number or null.\"\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return def;\n",
       "              }\n",
       "            },\n",
       "            getFinitePositiveNumber(obj, prop, def){\n",
       "              try{\n",
       "                const value = parseFloat(obj.metadata[prop]);\n",
       "                if(!isFinite(value) || value === null || value < 0.0){\n",
       "                  throw \"Invalid value. Not a finite positive number.\"\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return def;\n",
       "              }\n",
       "            },\n",
       "            collectOtherMetadata(sourceObject, targetObject, definedMetadata){\n",
       "              if(typeof(sourceObject) !== \"undefined\" && typeof(sourceObject.metadata) !== \"undefined\"){\n",
       "                const properties = Object.keys(sourceObject.metadata);\n",
       "                for(let i=0; i<properties.length; i++){\n",
       "                  const property = properties[i];\n",
       "                  if(!definedMetadata.has(property)){\n",
       "                    targetObject[property] = sourceObject.metadata[property];\n",
       "                  }\n",
       "                }\n",
       "              }\n",
       "            },\n",
       "          },\n",
       "\n",
       "          propertyClassifier:{\n",
       "            numeric: null,\n",
       "            nonNumeric: null,\n",
       "            init(){\n",
       "              this.numeric = new Set(),\n",
       "              this.nonNumeric = new Set();\n",
       "            },\n",
       "            isNumeric(d){\n",
       "              return d === null || typeof(d) === \"undefined\" || String(parseFloat(d)) === String(d);\n",
       "            },\n",
       "            inspect(object, property){\n",
       "              const value = object[property];\n",
       "              if(!this.nonNumeric.has(property)){\n",
       "                if(this.isNumeric(value)){\n",
       "                  this.numeric.add(property);\n",
       "                } else{\n",
       "                  this.nonNumeric.add(property);\n",
       "                  this.numeric.delete(property);\n",
       "                }\n",
       "              }\n",
       "            }\n",
       "          },\n",
       "\n",
       "          replaceStringVariables(givenString, givenItem, variables){\n",
       "            let newString = givenString;\n",
       "            for(let i=0; i<variables.length; i++){\n",
       "              let variable = variables[i],\n",
       "                variableText = \"$\" + variable;\n",
       "              if(variable === \"x\"){\n",
       "                variable = \"fx\";\n",
       "              } else if (variable === \"y\"){\n",
       "                variable = \"fy\";\n",
       "              }\n",
       "              let insertedText = String(givenItem[variable]);\n",
       "              if(insertedText === \"undefined\"){\n",
       "                insertedText = \"\";\n",
       "              }\n",
       "              newString = newString.replace(variableText, insertedText);\n",
       "            }\n",
       "            return newString;\n",
       "          },\n",
       "\n",
       "          parseGeneral(givenData, parsedData){\n",
       "            parsedData.general = {\n",
       "              // General\n",
       "              directed: state.manager.rawDataParser.getBool(givenData, \"directed\", true),\n",
       "              label: state.manager.rawDataParser.getString(givenData, \"label\", \"\"),\n",
       "              background_color: state.manager.rawMetadataParser.getColor(givenData, \"background_color\", \"white\"),\n",
       "              arrow_color: state.manager.rawMetadataParser.getColor(givenData, \"arrow_color\", \"black\"),\n",
       "              arrow_size: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"arrow_size\", 10.0),\n",
       "              // Nodes\n",
       "              node_color: state.manager.rawMetadataParser.getColor(givenData, \"node_color\", \"black\"),\n",
       "              node_opacity: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"node_opacity\", 1.0),\n",
       "              node_size: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"node_size\", 10.0),\n",
       "              node_shape: state.manager.rawMetadataParser.getString(givenData, \"node_shape\", \"circle\"),\n",
       "              node_border_color: state.manager.rawMetadataParser.getColor(givenData, \"node_border_color\", \"black\"),\n",
       "              node_border_size: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"node_border_size\", 0.0),\n",
       "              node_label_color: state.manager.rawMetadataParser.getColor(givenData, \"node_label_color\", \"black\"),\n",
       "              node_label_size: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"node_label_size\", 12.0),\n",
       "              node_hover: state.manager.rawMetadataParser.getString(givenData, \"node_hover\", \"\"),\n",
       "              node_click: state.manager.rawMetadataParser.getString(givenData, \"node_click\", \"\"),\n",
       "              node_image: state.manager.rawMetadataParser.getString(givenData, \"node_image\", \"\"),\n",
       "              node_x: state.manager.rawMetadataParser.getFiniteNumberOrNull(givenData, \"node_x\", null),\n",
       "              node_y: state.manager.rawMetadataParser.getFiniteNumberOrNull(givenData, \"node_y\", null),\n",
       "              contains_node_hover: false,\n",
       "              contains_node_click: false,\n",
       "              contains_node_image: false,\n",
       "              // Edges\n",
       "              edge_color: state.manager.rawMetadataParser.getColor(givenData, \"edge_color\", \"black\"),\n",
       "              edge_opacity: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"edge_opacity\", 1.0),\n",
       "              edge_size: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"edge_size\", 1.0),\n",
       "              edge_label_color: state.manager.rawMetadataParser.getColor(givenData, \"edge_label_color\", \"black\"),\n",
       "              edge_label_size: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"edge_label_size\", 8.0),\n",
       "              edge_hover: state.manager.rawMetadataParser.getString(givenData, \"edge_hover\", \"\"),\n",
       "              edge_click: state.manager.rawMetadataParser.getString(givenData, \"edge_click\", \"\"),\n",
       "              contains_edge_hover: false,\n",
       "              contains_edge_click: false,\n",
       "            };\n",
       "            if(!parsedData.general.directed){\n",
       "              parsedData.general.arrow_size = 0.0;\n",
       "            }\n",
       "          },\n",
       "\n",
       "          parseNodes(givenData, parsedData){\n",
       "            const numNodes = state.manager.rawDataParser.getObjectLengthOrZero(givenData.nodes),\n",
       "              nodeIdToObjectMap = new Map(),\n",
       "              nodeDefinedMetadata = new Set(\n",
       "                [\"color\", \"opacity\", \"size\", \"shape\", \"border_color\", \"border_size\",\n",
       "                 \"label_color\", \"label_size\", \"hover\", \"click\", \"image\", \"x\", \"y\"]),\n",
       "              nodeReplacementVariables = [\n",
       "                \"id\", \"label\",\n",
       "                \"color\", \"opacity\", \"size\", \"shape\", \"border_color\", \"border_size\",\n",
       "                \"label_color\", \"label_size\", \"image\", \"x\", \"y\"];\n",
       "            state.manager.propertyClassifier.init();\n",
       "            try {\n",
       "              Object.entries(givenData.nodes);\n",
       "            }\n",
       "            catch(e){\n",
       "               givenData.nodes = {};\n",
       "            }\n",
       "            for (const [givenNodeId, givenNode] of Object.entries(givenData.nodes)) {\n",
       "              const parsedNode = {};\n",
       "              // data: id, label\n",
       "              parsedNode.id = String(givenNodeId);\n",
       "              parsedNode.label = state.manager.rawDataParser.getString(givenNode, \"label\", \"\");\n",
       "              // defined metadata\n",
       "              parsedNode.color = state.manager.rawMetadataParser.getColor(givenNode, \"color\", parsedData.general.node_color);\n",
       "              parsedNode.opacity = state.manager.rawMetadataParser.getFinitePositiveNumber(givenNode, \"opacity\", parsedData.general.node_opacity);\n",
       "              parsedNode.size = state.manager.rawMetadataParser.getFinitePositiveNumber(givenNode, \"size\", parsedData.general.node_size);\n",
       "              parsedNode.shape = state.manager.rawMetadataParser.getShape(givenNode, \"shape\", parsedData.general.node_shape);\n",
       "              parsedNode.border_color = state.manager.rawMetadataParser.getColor(givenNode, \"border_color\", parsedData.general.node_border_color);\n",
       "              parsedNode.border_size = state.manager.rawMetadataParser.getFinitePositiveNumber(givenNode, \"border_size\", parsedData.general.node_border_size);\n",
       "              parsedNode.label_color = state.manager.rawMetadataParser.getColor(givenNode, \"label_color\", parsedData.general.node_label_color);\n",
       "              parsedNode.label_size = state.manager.rawMetadataParser.getFinitePositiveNumber(givenNode, \"label_size\", parsedData.general.node_label_size);\n",
       "              const hover = state.manager.rawMetadataParser.getString(givenNode, \"hover\", parsedData.general.node_hover);\n",
       "              const image = state.manager.rawMetadataParser.getString(givenNode, \"image\", parsedData.general.node_image);\n",
       "              if(image !== \"\"){\n",
       "                parsedNode.image = image;\n",
       "                parsedData.general.contains_node_image = true;\n",
       "              }\n",
       "              if(hover !== \"\"){\n",
       "                parsedNode.hover = hover;\n",
       "                parsedData.general.contains_node_hover = true;\n",
       "              }\n",
       "              const click = state.manager.rawMetadataParser.getString(givenNode, \"click\", parsedData.general.node_click);\n",
       "              if(click !== \"\"){\n",
       "                parsedNode.click = click;\n",
       "                parsedData.general.contains_node_click = true;\n",
       "              }\n",
       "              const x = state.manager.rawMetadataParser.getFiniteNumberOrNull(givenNode, \"x\", parsedData.general.node_x);\n",
       "              const y = state.manager.rawMetadataParser.getFiniteNumberOrNull(givenNode, \"y\", parsedData.general.node_y);\n",
       "              if(x !== null){\n",
       "                parsedNode.fx = x;\n",
       "              }\n",
       "              if(y !== null){\n",
       "                parsedNode.fy = y;\n",
       "              }\n",
       "              // other metadata\n",
       "              const otherMetadata = state.manager.rawMetadataParser.collectOtherMetadata(givenNode, parsedNode, nodeDefinedMetadata);\n",
       "              // feature classification\n",
       "              const parsedNodeProperties = Object.keys(parsedNode);\n",
       "              for(let i=0; i<parsedNodeProperties.length; i++){\n",
       "                const property = parsedNodeProperties[i],\n",
       "                  value = parsedNode[property];\n",
       "                state.manager.propertyClassifier.inspect(parsedNode, property);\n",
       "              }\n",
       "              // variable replacements\n",
       "              if(parsedNode.hover){\n",
       "                parsedNode.hover = state.manager.replaceStringVariables(parsedNode.hover, parsedNode, nodeReplacementVariables);\n",
       "              }\n",
       "              if(parsedNode.click){\n",
       "                parsedNode.click = state.manager.replaceStringVariables(parsedNode.click, parsedNode, nodeReplacementVariables.concat([\"hover\"]));\n",
       "              }\n",
       "              // store the parsed node\n",
       "              parsedData.nodes.push(parsedNode);\n",
       "              // data structure for inserting node object references into edge data\n",
       "              nodeIdToObjectMap.set(parsedNode.id, parsedNode);\n",
       "            }\n",
       "            // Ensure numeric properties (except fx and fy) are stored as numbers and remember their extrema\n",
       "            const numericProperties = Array.from(state.manager.propertyClassifier.numeric).filter(name => name !== \"fx\" && name !== \"fy\"),\n",
       "              nonNumericProperties = Array.from(state.manager.propertyClassifier.nonNumeric),\n",
       "              minima = {},\n",
       "              maxima = {};\n",
       "            for(let i=0; i<numNodes; i++){\n",
       "              const parsedNode = parsedData.nodes[i];\n",
       "              for(let p=0; p<numericProperties.length; p++){\n",
       "                const property = numericProperties[p],\n",
       "                  numericValue = parseFloat(parsedNode[property]);\n",
       "                parsedNode[property] = numericValue;\n",
       "                if(isFinite(numericValue)){\n",
       "                  if(typeof(minima[property]) === \"undefined\" || numericValue < minima[property]){\n",
       "                    minima[property] = numericValue;\n",
       "                  }\n",
       "                  if(typeof(maxima[property]) === \"undefined\" || numericValue > maxima[property]){\n",
       "                    maxima[property] = numericValue;\n",
       "                  }\n",
       "                }\n",
       "              }\n",
       "            }\n",
       "            // Store feature classification and extrema\n",
       "            parsedData.general.node_properties = {\n",
       "              \"node_size_data_sources\": numericProperties,\n",
       "              \"node_label_text_data_sources\": nonNumericProperties.concat(numericProperties),\n",
       "              \"minima\": minima,\n",
       "              \"maxima\": maxima,\n",
       "            }\n",
       "            // Report empty graph\n",
       "            if(!(numNodes > 0)){\n",
       "              console.log(\"Caution: Graph with 0 nodes. The provided data might be in the wrong format.\");\n",
       "            }\n",
       "            return nodeIdToObjectMap;\n",
       "          },\n",
       "\n",
       "          parseEdges(givenData, parsedData, nodeIdToObjectMap){\n",
       "            let numEdges = state.manager.rawDataParser.getArrayLengthOrZero(givenData.edges);\n",
       "            const knownEdgeIds = new Set(),\n",
       "              ignoredEdges = [],\n",
       "              edgeDefinedMetadata = new Set(\n",
       "                [\"color\", \"opacity\", \"size\", \"label_color\", \"label_size\", \"hover\", \"click\"]),\n",
       "              edgeReplacementVariables = [\n",
       "                \"id\", \"label\",\n",
       "                \"color\", \"opacity\", \"size\", \"label_color\", \"label_size\"];\n",
       "            state.manager.propertyClassifier.init();\n",
       "            for(let i=0; i<numEdges; i++){\n",
       "              const givenEdge = givenData.edges[i],\n",
       "                parsedEdge = {},\n",
       "                sourceId = String(givenEdge.source),\n",
       "                targetId = String(givenEdge.target);\n",
       "              // data: source, target, id, multi_edge_counter, label\n",
       "              try{\n",
       "                const sourceObj = nodeIdToObjectMap.get(sourceId);\n",
       "                const targetObj = nodeIdToObjectMap.get(targetId);\n",
       "                if(typeof(sourceObj) === \"undefined\" || typeof(targetObj) === \"undefined\"){\n",
       "                  throw \"Invalid node reference.\";\n",
       "                }\n",
       "                parsedEdge.source = sourceObj;\n",
       "                parsedEdge.target = targetObj;\n",
       "              } catch(e){\n",
       "                const ignoredEdge = {\n",
       "                  index: i,\n",
       "                  source: sourceId,\n",
       "                  target: targetId,\n",
       "                }\n",
       "                ignoredEdges.push(ignoredEdge);\n",
       "                continue;\n",
       "              }\n",
       "              const result = state.manager.rawDataParser.createUniqueEdgeId(sourceId, targetId, knownEdgeIds);\n",
       "              parsedEdge.id = result.id;\n",
       "              parsedEdge.multi_edge_counter = result.count;\n",
       "              parsedEdge.label = state.manager.rawDataParser.getString(givenEdge, \"label\", \"\");\n",
       "              // defined metadata\n",
       "              parsedEdge.color = state.manager.rawMetadataParser.getColor(givenEdge, \"color\", parsedData.general.edge_color);\n",
       "              parsedEdge.opacity = state.manager.rawMetadataParser.getFinitePositiveNumber(givenEdge, \"opacity\", parsedData.general.edge_opacity);\n",
       "              parsedEdge.size = state.manager.rawMetadataParser.getFinitePositiveNumber(givenEdge, \"size\", parsedData.general.edge_size);\n",
       "              parsedEdge.label_color = state.manager.rawMetadataParser.getColor(givenEdge, \"label_color\", parsedData.general.edge_label_color);\n",
       "              parsedEdge.label_size = state.manager.rawMetadataParser.getFinitePositiveNumber(givenEdge, \"label_size\", parsedData.general.edge_label_size);\n",
       "              const hover = state.manager.rawMetadataParser.getString(givenEdge, \"hover\", parsedData.general.edge_hover);\n",
       "              if(hover !== \"\"){\n",
       "                parsedEdge.hover = hover;\n",
       "                parsedData.general.contains_edge_hover = true;\n",
       "              }\n",
       "              const click = state.manager.rawMetadataParser.getString(givenEdge, \"click\", parsedData.general.edge_click);\n",
       "              if(click !== \"\"){\n",
       "                parsedEdge.click = click;\n",
       "                parsedData.general.contains_edge_click = true;\n",
       "              }\n",
       "              // other metadata\n",
       "              const otherMetadata = state.manager.rawMetadataParser.collectOtherMetadata(givenEdge, parsedEdge, edgeDefinedMetadata);\n",
       "              // feature classification\n",
       "              const parsedEdgeProperties = Object.keys(parsedEdge);\n",
       "              for(let i=0; i<parsedEdgeProperties.length; i++){\n",
       "                const property = parsedEdgeProperties[i],\n",
       "                  value = parsedEdge[property];\n",
       "                state.manager.propertyClassifier.inspect(parsedEdge, property);\n",
       "              }\n",
       "              // variable replacements\n",
       "              if(parsedEdge.hover){\n",
       "                parsedEdge.hover = state.manager.replaceStringVariables(parsedEdge.hover, parsedEdge, edgeReplacementVariables);\n",
       "              }\n",
       "              if(parsedEdge.click){\n",
       "                parsedEdge.click = state.manager.replaceStringVariables(parsedEdge.click, parsedEdge, edgeReplacementVariables.concat([\"hover\"]));\n",
       "              }\n",
       "              // store it\n",
       "              parsedData.edges.push(parsedEdge);\n",
       "            }\n",
       "            // Ensure numeric properties are stored as numbers and remember their extrema\n",
       "            const numericProperties = Array.from(state.manager.propertyClassifier.numeric),\n",
       "              nonNumericProperties = Array.from(state.manager.propertyClassifier.nonNumeric),\n",
       "              minima = {},\n",
       "              maxima = {};\n",
       "            numEdges = state.manager.rawDataParser.getArrayLengthOrZero(parsedData.edges);\n",
       "            for(let i=0; i<numEdges; i++){\n",
       "              const parsedEdge = parsedData.edges[i];\n",
       "              for(let p=0; p<numericProperties.length; p++){\n",
       "                const property = numericProperties[p],\n",
       "                  numericValue = parseFloat(parsedEdge[property]);\n",
       "                parsedEdge[property] = numericValue;\n",
       "                if(isFinite(numericValue)){\n",
       "                  if(typeof(minima[property]) === \"undefined\" || numericValue < minima[property]){\n",
       "                    minima[property] = numericValue;\n",
       "                  }\n",
       "                  if(typeof(maxima[property]) === \"undefined\" || numericValue > maxima[property]){\n",
       "                    maxima[property] = numericValue;\n",
       "                  }\n",
       "                }\n",
       "              }\n",
       "            }\n",
       "            // Store feature classification and extrema\n",
       "            parsedData.general.edge_properties = {\n",
       "              \"edge_size_data_sources\": numericProperties.filter(item => item !== \"multi_edge_counter\"),\n",
       "              \"edge_label_text_data_sources\": nonNumericProperties.concat(numericProperties).filter(\n",
       "                item => item !== \"source\" && item !== \"target\" && item !== \"multi_edge_counter\"),\n",
       "              \"minima\": minima,\n",
       "              \"maxima\": maxima,\n",
       "            }\n",
       "            // Report invalid edges\n",
       "            if(ignoredEdges.length > 0){\n",
       "              let message = undefined;\n",
       "              if(ignoredEdges.length == 1){\n",
       "                message = \"Caution: \" + ignoredEdges.length + \" edge was ignored because it \" +\n",
       "                  \"refers to a node that is not part of the node list:\\n\";\n",
       "              } else{\n",
       "                message = \"Caution: \" + ignoredEdges.length + \" edges were ignored because they \" +\n",
       "                  \"refer to a node that is not part of the node list:\\n\";\n",
       "              }\n",
       "              for(let i=0; i<ignoredEdges.length; i++){\n",
       "                const ignoredEdge = ignoredEdges[i];\n",
       "                message += '- Edge with index ' + ignoredEdge.index;\n",
       "                message += ', source \"' + ignoredEdge.source;\n",
       "                message += '\", target \"' + ignoredEdge.target + '\"\\n';\n",
       "                if(i==9){\n",
       "                  message += '...';\n",
       "                  break;\n",
       "                }\n",
       "              }\n",
       "              console.log(message);\n",
       "            }\n",
       "          },\n",
       "\n",
       "          parseChosenData(chosenGraphNumber){\n",
       "            let givenData = state.rawData[chosenGraphNumber],\n",
       "              parsedData = {\n",
       "                general: {},\n",
       "                nodes: [],\n",
       "                edges: [],\n",
       "                adjacency: null,\n",
       "                incidence: null,\n",
       "              };\n",
       "            if(!givenData || givenData === null){\n",
       "              givenData = [];\n",
       "            }\n",
       "            // a) General\n",
       "            state.manager.parseGeneral(givenData, parsedData);\n",
       "            // b) Nodes\n",
       "            const nodeIdToObjectMap = state.manager.parseNodes(givenData, parsedData);\n",
       "            // c) Edges\n",
       "            state.manager.parseEdges(givenData, parsedData, nodeIdToObjectMap);\n",
       "            // Update state\n",
       "            state.parsedData = parsedData;\n",
       "            state.currentGraphParts = {};\n",
       "            // Update UI: show or hide containers\n",
       "            ui.elements.graphContainer.style.display = ui.convert.boolToDisplayStyle(true);\n",
       "            ui.elements.detailsContainer.style.display = ui.convert.boolToDisplayStyle(state.showDetails);\n",
       "            ui.elements.nodeImageMetaControl.style.display = ui.convert.boolToDisplayStyle(parsedData.general.contains_node_image);\n",
       "          },\n",
       "\n",
       "          // 3) Derive state.shownData from state.parsedData\n",
       "          createNodeToAdjacentNodesMap(){\n",
       "            const dataStructure = {\n",
       "              map: new Map(),\n",
       "              add(sourceNode, targetNode){\n",
       "                let adjacentNodes = this.map.get(sourceNode);\n",
       "                if(adjacentNodes){\n",
       "                  adjacentNodes.add(targetNode);\n",
       "                } else{\n",
       "                  adjacentNodes = new Set([targetNode]);\n",
       "                  this.map.set(sourceNode, adjacentNodes);\n",
       "                }\n",
       "              },\n",
       "            }\n",
       "            return dataStructure;\n",
       "          },\n",
       "\n",
       "          createNodeToIncidentEdgesMap(){\n",
       "            const dataStructure = {\n",
       "              map: new Map(),\n",
       "              add(node, edge){\n",
       "                let incidentEdges = this.map.get(node);\n",
       "                if(incidentEdges){\n",
       "                  incidentEdges.add(edge);\n",
       "                } else{\n",
       "                  incidentEdges = new Set([edge]);\n",
       "                  this.map.set(node, incidentEdges);\n",
       "                }\n",
       "              },\n",
       "            }\n",
       "            return dataStructure;\n",
       "          },\n",
       "\n",
       "          hoverTextToHtml(text) {\n",
       "            // https://visjs.github.io/vis-network/examples/network/other/html-in-titles.html\n",
       "            const div = document.createElement(\"div\");\n",
       "            div.innerHTML = text;\n",
       "            return div;\n",
       "          },\n",
       "\n",
       "          prepareShownData(){\n",
       "            const numNodes = state.parsedData.nodes.length,\n",
       "              numEdges = state.parsedData.edges.length;\n",
       "            state.shownData = {\n",
       "              \"general\": null,\n",
       "              \"nodes\": new Array(numNodes),\n",
       "              \"edges\": new Array(numEdges),\n",
       "            }\n",
       "            const nodeIdToObjectMap = new Map(),\n",
       "              nodeSizeNormalizer = state.manager.createNodeSizeNormalizer();\n",
       "            // a) General\n",
       "            state.shownData.general = {\n",
       "              \"background_color\": state.parsedData.general.background_color,\n",
       "              \"arrow_size\": state.parsedData.general.arrow_size,\n",
       "              \"arrow_color\": state.parsedData.general.arrow_color,\n",
       "              \"directed\": state.parsedData.general.directed,\n",
       "            };\n",
       "            // b) Nodes\n",
       "            for(let i=0; i<numNodes; i++){\n",
       "              state.shownData.nodes[i] = {};\n",
       "              const parsedNode = state.parsedData.nodes[i],\n",
       "                shownNode = state.shownData.nodes[i];\n",
       "              shownNode.id = parsedNode.id;\n",
       "              shownNode.label = state.manager.calcSingleNodeLabelText(parsedNode);\n",
       "              shownNode.color = parsedNode.color;\n",
       "              shownNode.opacity = parsedNode.opacity;\n",
       "              shownNode.size = state.manager.calcSingleNodeSize(parsedNode, nodeSizeNormalizer);\n",
       "              shownNode.shape = parsedNode.shape;\n",
       "              shownNode.border_color = parsedNode.border_color;\n",
       "              shownNode.border_size = parsedNode.border_size;\n",
       "              shownNode.label_color = parsedNode.label_color;\n",
       "              shownNode.label_size = state.manager.calcSingleNodeLabelSize(parsedNode);\n",
       "              if(typeof(parsedNode.image) !== \"undefined\"){\n",
       "                shownNode.image = parsedNode.image;\n",
       "              }\n",
       "              if(typeof(parsedNode.hover) !== \"undefined\"){\n",
       "                shownNode.hover = state.manager.hoverTextToHtml(parsedNode.hover);\n",
       "              }\n",
       "              if(typeof(parsedNode.click) !== \"undefined\"){\n",
       "                shownNode.click = parsedNode.click;\n",
       "              }\n",
       "              if(typeof(parsedNode.fx) !== \"undefined\"){\n",
       "                shownNode.fx = parsedNode.fx;\n",
       "              }\n",
       "              if(typeof(parsedNode.fy) !== \"undefined\"){\n",
       "                shownNode.fy = parsedNode.fy;\n",
       "              }\n",
       "              nodeIdToObjectMap.set(shownNode.id, shownNode);\n",
       "              // Derived properties for performance improvement in updateNodePositions\n",
       "              state.manager.calcSingleNodeSizeDerivatives(shownNode);\n",
       "              state.manager.calcSingleNodeBorderSizeDerivatives(shownNode);\n",
       "            }\n",
       "            // c) Edges\n",
       "            const edgeSizeNormalizer = state.manager.createEdgeSizeNormalizer(),\n",
       "              nodeToAdjacentNodesMap = state.manager.createNodeToAdjacentNodesMap(),\n",
       "              nodeToIncidentEdgesMap = state.manager.createNodeToIncidentEdgesMap();\n",
       "            for(let i=0; i<numEdges; i++){\n",
       "              state.shownData.edges[i] = {};\n",
       "              const parsedEdge = state.parsedData.edges[i],\n",
       "                shownEdge = state.shownData.edges[i];\n",
       "              shownEdge.source = nodeIdToObjectMap.get(parsedEdge.source.id);\n",
       "              shownEdge.target = nodeIdToObjectMap.get(parsedEdge.target.id);\n",
       "              shownEdge.id = parsedEdge.id;\n",
       "              shownEdge.label = state.manager.calcSingleEdgeLabelText(parsedEdge);\n",
       "              shownEdge.color = parsedEdge.color;\n",
       "              shownEdge.opacity = parsedEdge.opacity;\n",
       "              shownEdge.size = state.manager.calcSingleEdgeSize(parsedEdge, edgeSizeNormalizer);\n",
       "              shownEdge.label_color = parsedEdge.label_color;\n",
       "              shownEdge.label_size = state.manager.calcSingleEdgeLabelSize(parsedEdge);\n",
       "              if(typeof(parsedEdge.hover) !== \"undefined\"){\n",
       "                shownEdge.hover = state.manager.hoverTextToHtml(parsedEdge.hover);\n",
       "              }\n",
       "              if(typeof(parsedEdge.click) !== \"undefined\"){\n",
       "                shownEdge.click = parsedEdge.click;\n",
       "              }\n",
       "              // Derived properties for performance improvement in updateEdgePositions\n",
       "              shownEdge.multiEdgeCurvatureFactor = state.manager.calcSingleEdgeCurvatureFactor(parsedEdge);\n",
       "              // Data structure for highlighting adjacent nodes and incident edges to this node\n",
       "              nodeToAdjacentNodesMap.add(shownEdge.source, shownEdge.target);\n",
       "              nodeToAdjacentNodesMap.add(shownEdge.target, shownEdge.source);\n",
       "              nodeToIncidentEdgesMap.add(shownEdge.source, shownEdge);\n",
       "              nodeToIncidentEdgesMap.add(shownEdge.target, shownEdge);\n",
       "            }\n",
       "            state.shownData.adjacency = nodeToAdjacentNodesMap;\n",
       "            state.shownData.incidence = nodeToIncidentEdgesMap;\n",
       "          },\n",
       "\n",
       "          calcSingleNodeSize(parsedNode, nodeSizeNormalizer){\n",
       "            const appearanceAdaptionFactor = 0.5;\n",
       "            let nodeSize = nodeSizeNormalizer(parsedNode[state.nodeSizeDataSource]);\n",
       "            if(!isFinite(nodeSize)){\n",
       "              nodeSize = state.parsedData.general.node_size;\n",
       "            }\n",
       "            return nodeSize * state.nodeSizeFactor * appearanceAdaptionFactor;\n",
       "          },\n",
       "\n",
       "          calcSingleNodeSizeDerivatives(shownNode){\n",
       "            shownNode.image_size = shownNode.size / 1.42 * state.nodeImageSizeFactor;\n",
       "          },\n",
       "\n",
       "          calcSingleNodeLabelText(parsedNode){\n",
       "            return String(parsedNode[state.nodeLabelTextDataSource]);\n",
       "          },\n",
       "\n",
       "          calcSingleNodeLabelSize(parsedNode){\n",
       "            return parsedNode.label_size * state.nodeLabelSizeFactor;\n",
       "          },\n",
       "\n",
       "          calcSingleEdgeSize(parsedEdge, edgeSizeNormalizer){\n",
       "            let edgeSize = edgeSizeNormalizer(parsedEdge[state.edgeSizeDataSource]);\n",
       "            if(!isFinite(edgeSize)){\n",
       "              edgeSize = state.parsedData.general.edge_size;\n",
       "            }\n",
       "            return edgeSize * state.edgeSizeFactor;\n",
       "          },\n",
       "\n",
       "          calcSingleEdgeCurvatureFactor(parsedEdge){\n",
       "            // Caution: Currently a single value is used for all edges instead of these here\n",
       "            const appearanceAdaptionFactor = 0.5;\n",
       "            return state.edgeCurvature * parsedEdge.multiEdgeCounter * appearanceAdaptionFactor;\n",
       "          },\n",
       "\n",
       "          calcSingleEdgeLabelText(parsedEdge){\n",
       "            return String(parsedEdge[state.edgeLabelTextDataSource]);\n",
       "          },\n",
       "\n",
       "          calcSingleEdgeLabelSize(parsedEdge){\n",
       "            return parsedEdge.label_size * state.edgeLabelSizeFactor;\n",
       "          },\n",
       "\n",
       "          calcSingleNodeBorderSizeDerivatives(shownNode){\n",
       "            shownNode.border_size_half = shownNode.border_size / 2.0;\n",
       "          },\n",
       "\n",
       "          createNodeSizeNormalizer(){\n",
       "            let normalizer;\n",
       "            if(state.useNodeSizeNormalization){\n",
       "              const dataMin = state.parsedData.general.node_properties.minima[state.nodeSizeDataSource],\n",
       "                dataMax = state.parsedData.general.node_properties.maxima[state.nodeSizeDataSource],\n",
       "                targetMin = state.nodeSizeNormalizationMin,\n",
       "                targetMax = state.nodeSizeNormalizationMax,\n",
       "                dataDiff = dataMax - dataMin,\n",
       "                targetDiff = targetMax - targetMin;\n",
       "              let factor = targetDiff / dataDiff;\n",
       "              if(!isFinite(factor) || factor === null){\n",
       "                factor = 0.0;\n",
       "              }\n",
       "              normalizer = function(val){\n",
       "                return (val - dataMin) * factor + targetMin;\n",
       "              }\n",
       "            } else{\n",
       "              normalizer = function(val){\n",
       "                return val;\n",
       "              }\n",
       "            }\n",
       "            return normalizer;\n",
       "          },\n",
       "\n",
       "          createEdgeSizeNormalizer(){\n",
       "            let normalizer;\n",
       "            if(state.useEdgeSizeNormalization){\n",
       "              const dataMin = state.parsedData.general.edge_properties.minima[state.edgeSizeDataSource],\n",
       "                dataMax = state.parsedData.general.edge_properties.maxima[state.edgeSizeDataSource],\n",
       "                targetMin = state.edgeSizeNormalizationMin,\n",
       "                targetMax = state.edgeSizeNormalizationMax,\n",
       "                dataDiff = dataMax - dataMin,\n",
       "                targetDiff = targetMax - targetMin;\n",
       "              let factor = targetDiff / dataDiff;\n",
       "              if(!isFinite(factor)){\n",
       "                factor = 0.0;\n",
       "              }\n",
       "              normalizer = function(val){\n",
       "                return (val - dataMin) * factor + targetMin;\n",
       "              }\n",
       "            } else{\n",
       "              normalizer = function(val){\n",
       "                return val;\n",
       "              }\n",
       "            }\n",
       "            return normalizer;\n",
       "          },\n",
       "\n",
       "          updateNodeSizes(){\n",
       "            // Data\n",
       "            const nodeSizeNormalizer = state.manager.createNodeSizeNormalizer();\n",
       "            for(let i=0; i<state.parsedData.nodes.length; i++){\n",
       "              const parsedNode = state.parsedData.nodes[i],\n",
       "                shownNode = state.shownData.nodes[i];\n",
       "              shownNode.size = state.manager.calcSingleNodeSize(parsedNode, nodeSizeNormalizer);\n",
       "              state.manager.calcSingleNodeSizeDerivatives(shownNode);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateNodeSizes();\n",
       "          },\n",
       "\n",
       "          updateNodeLabelTexts(){\n",
       "            // Data\n",
       "            for(let i=0; i<state.parsedData.nodes.length; i++){\n",
       "              const parsedNode = state.parsedData.nodes[i],\n",
       "                shownNode = state.shownData.nodes[i];\n",
       "              shownNode.label = state.manager.calcSingleNodeLabelText(parsedNode);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateNodeLabels();\n",
       "          },\n",
       "\n",
       "          updateNodeLabelSizes(){\n",
       "            // Data\n",
       "            for(let i=0; i<state.parsedData.nodes.length; i++){\n",
       "              const parsedNode = state.parsedData.nodes[i],\n",
       "                shownNode = state.shownData.nodes[i];\n",
       "              shownNode.label_size = state.manager.calcSingleNodeLabelSize(parsedNode);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateNodeLabels();\n",
       "          },\n",
       "\n",
       "          updateNodeImages(){\n",
       "            // Data\n",
       "            for(let i=0; i<state.parsedData.nodes.length; i++){\n",
       "              const parsedNode = state.parsedData.nodes[i],\n",
       "                shownNode = state.shownData.nodes[i];\n",
       "              state.manager.calcSingleNodeSizeDerivatives(shownNode);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateNodeImages();\n",
       "          },\n",
       "\n",
       "          updateEdgeSizes(){\n",
       "            // Data\n",
       "            const edgeSizeNormalizer = state.manager.createEdgeSizeNormalizer();\n",
       "            for(let i=0; i<state.parsedData.edges.length; i++){\n",
       "              const parsedEdge = state.parsedData.edges[i],\n",
       "                shownEdge = state.shownData.edges[i];\n",
       "              shownEdge.size = state.manager.calcSingleEdgeSize(parsedEdge, edgeSizeNormalizer);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateEdgeSizes();\n",
       "          },\n",
       "\n",
       "          updateEdgeCurvatures(){\n",
       "            // Data\n",
       "            for(let i=0; i<state.parsedData.edges.length; i++){\n",
       "              const parsedEdge = state.parsedData.edges[i],\n",
       "                shownEdge = state.shownData.edges[i];\n",
       "              shownEdge.multiEdgeCurvatureFactor = state.manager.calcSingleEdgeCurvatureFactor(parsedEdge);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateEdgeCurvatures();\n",
       "          },\n",
       "\n",
       "          updateEdgeLabelTexts(){\n",
       "            // Data\n",
       "            for(let i=0; i<state.parsedData.edges.length; i++){\n",
       "              const parsedEdge = state.parsedData.edges[i],\n",
       "                shownEdge = state.shownData.edges[i];\n",
       "              shownEdge.label = state.manager.calcSingleEdgeLabelText(parsedEdge);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateEdgeLabels();\n",
       "          },\n",
       "\n",
       "          updateEdgeLabelSizes(){\n",
       "            // Data\n",
       "            for(let i=0; i<state.parsedData.edges.length; i++){\n",
       "              const parsedEdge = state.parsedData.edges[i],\n",
       "                shownEdge = state.shownData.edges[i];\n",
       "              shownEdge.label_size = state.manager.calcSingleEdgeLabelSize(parsedEdge);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateEdgeLabels();\n",
       "          },\n",
       "        }\n",
       "      }\n",
       "\n",
       "      const ui = {\n",
       "        symbols:{\n",
       "          // Choice of symbols is influenced by their appearance in different browsers\n",
       "          // Alternatives: \"▼\", \"▽\", \"▾\" / \"▲\", \"△\", \"▴\" / \"▶\", \"▷\", \"▸\" / \"◀\", \"◁\", \"◂\"\n",
       "          // ▶ is rendered strangely on some mobile phone browsers, ▸ remains normal\n",
       "          detailsShown: \"▾\",\n",
       "          detailsHidden: \"▴\",\n",
       "          menuShown: \"▸\",\n",
       "          menuHidden: \"◂\",\n",
       "          menuItemActive: \"▸\",\n",
       "          menuItemInactive: \"▾\",\n",
       "        },\n",
       "\n",
       "        elements:{\n",
       "          // Containers\n",
       "          mainContainer: document.getElementById(\"iSVAmWn6OJW87vNvL-main-div\"),\n",
       "          tooltipContainer: document.getElementById(\"iSVAmWn6OJW87vNvL-tooltip-div\"),\n",
       "          leftContainer: document.getElementById(\"iSVAmWn6OJW87vNvL-left-div\"),\n",
       "          rightContainer: document.getElementById(\"iSVAmWn6OJW87vNvL-right-div\"),\n",
       "          graphContainer: document.getElementById(\"iSVAmWn6OJW87vNvL-graph-div\"),\n",
       "          detailsContainer: document.getElementById(\"iSVAmWn6OJW87vNvL-details-div\"),\n",
       "          detailsHead: document.getElementById(\"iSVAmWn6OJW87vNvL-details-head\"),\n",
       "          detailsBody: document.getElementById(\"iSVAmWn6OJW87vNvL-details-body\"),\n",
       "          // Data sources\n",
       "          dataHead: document.getElementById(\"iSVAmWn6OJW87vNvL-data-head\"),\n",
       "          dataBody: document.getElementById(\"iSVAmWn6OJW87vNvL-data-body\"),\n",
       "          graphSelectionContainer: document.getElementById(\"iSVAmWn6OJW87vNvL-graph-select-div\"),\n",
       "          graphSelection: document.getElementById(\"iSVAmWn6OJW87vNvL-graph-select\"),\n",
       "          nodeSizeDataSourceSelect: document.getElementById(\"iSVAmWn6OJW87vNvL-node-size-data-source-select\"),\n",
       "          nodeSizeNormalizationCheckbox: document.getElementById(\"iSVAmWn6OJW87vNvL-node-size-normalization-checkbox\"),\n",
       "          nodeSizeNormalizationContainer: document.getElementById(\"iSVAmWn6OJW87vNvL-node-size-norm-div\"),\n",
       "          nodeSizeNormalizationMinText: document.getElementById(\"iSVAmWn6OJW87vNvL-node-size-normalization-min-text\"),\n",
       "          nodeSizeNormalizationMinSlider: document.getElementById(\"iSVAmWn6OJW87vNvL-node-size-normalization-min-slider\"),\n",
       "          nodeSizeNormalizationMaxText: document.getElementById(\"iSVAmWn6OJW87vNvL-node-size-normalization-max-text\"),\n",
       "          nodeSizeNormalizationMaxSlider: document.getElementById(\"iSVAmWn6OJW87vNvL-node-size-normalization-max-slider\"),\n",
       "          edgeSizeDataSourceSelect: document.getElementById(\"iSVAmWn6OJW87vNvL-edge-size-data-source-select\"),\n",
       "          edgeSizeNormalizationCheckbox: document.getElementById(\"iSVAmWn6OJW87vNvL-edge-size-normalization-checkbox\"),\n",
       "          edgeSizeNormalizationContainer: document.getElementById(\"iSVAmWn6OJW87vNvL-edge-size-norm-div\"),\n",
       "          edgeSizeNormalizationMinText: document.getElementById(\"iSVAmWn6OJW87vNvL-edge-size-normalization-min-text\"),\n",
       "          edgeSizeNormalizationMinSlider: document.getElementById(\"iSVAmWn6OJW87vNvL-edge-size-normalization-min-slider\"),\n",
       "          edgeSizeNormalizationMaxText: document.getElementById(\"iSVAmWn6OJW87vNvL-edge-size-normalization-max-text\"),\n",
       "          edgeSizeNormalizationMaxSlider: document.getElementById(\"iSVAmWn6OJW87vNvL-edge-size-normalization-max-slider\"),\n",
       "          // General\n",
       "          generalHead: document.getElementById(\"iSVAmWn6OJW87vNvL-general-head\"),\n",
       "          generalBody: document.getElementById(\"iSVAmWn6OJW87vNvL-general-body\"),\n",
       "          resetButton: document.getElementById(\"iSVAmWn6OJW87vNvL-reset\"),\n",
       "          fullscreenButton: document.getElementById(\"iSVAmWn6OJW87vNvL-fullscreen-button\"),\n",
       "          svgExportButton: document.getElementById(\"iSVAmWn6OJW87vNvL-svg\"),\n",
       "          pngExportButton: document.getElementById(\"iSVAmWn6OJW87vNvL-png\"),\n",
       "          jpgExportButton: document.getElementById(\"iSVAmWn6OJW87vNvL-jpg\"),\n",
       "          // Nodes\n",
       "          nodeHead: document.getElementById(\"iSVAmWn6OJW87vNvL-node-head\"),\n",
       "          nodeBody: document.getElementById(\"iSVAmWn6OJW87vNvL-node-body\"),\n",
       "          nodeCheckbox: document.getElementById(\"iSVAmWn6OJW87vNvL-node-checkbox\"),\n",
       "          nodeSizeFactorText: document.getElementById(\"iSVAmWn6OJW87vNvL-node-size-factor-text\"),\n",
       "          nodeSizeFactorSlider: document.getElementById(\"iSVAmWn6OJW87vNvL-node-size-factor-slider\"),\n",
       "          nodeDragFixCheckbox: document.getElementById(\"iSVAmWn6OJW87vNvL-node-drag-fix-checkbox\"),\n",
       "          nodeHoverNeighborhoodCheckbox: document.getElementById(\"iSVAmWn6OJW87vNvL-node-hover-neighborhood-checkbox\"),\n",
       "          nodeHoverTooltipCheckbox: document.getElementById(\"iSVAmWn6OJW87vNvL-node-hover-tooltip-checkbox\"),\n",
       "          nodeReleaseButton: document.getElementById(\"iSVAmWn6OJW87vNvL-node-release-button\"),\n",
       "          // Node images\n",
       "          nodeImageHead: document.getElementById(\"iSVAmWn6OJW87vNvL-node-image-head\"),\n",
       "          nodeImageBody: document.getElementById(\"iSVAmWn6OJW87vNvL-node-image-body\"),\n",
       "          nodeImageCheckbox: document.getElementById(\"iSVAmWn6OJW87vNvL-node-image-checkbox\"),\n",
       "          nodeImageMetaControl: document.getElementById(\"iSVAmWn6OJW87vNvL-node-image-meta-control\"),\n",
       "          nodeImageSizeFactorText: document.getElementById(\"iSVAmWn6OJW87vNvL-node-image-size-factor-text\"),\n",
       "          nodeImageSizeFactorSlider: document.getElementById(\"iSVAmWn6OJW87vNvL-node-image-size-factor-slider\"),\n",
       "          // Node labels\n",
       "          nodeLabelHead: document.getElementById(\"iSVAmWn6OJW87vNvL-node-label-head\"),\n",
       "          nodeLabelBody: document.getElementById(\"iSVAmWn6OJW87vNvL-node-label-body\"),\n",
       "          nodeLabelCheckbox: document.getElementById(\"iSVAmWn6OJW87vNvL-node-label-checkbox\"),\n",
       "          nodeLabelBorderCheckbox: document.getElementById(\"iSVAmWn6OJW87vNvL-node-label-border-checkbox\"),\n",
       "          nodeLabelTextDataSourceSelect: document.getElementById(\"iSVAmWn6OJW87vNvL-node-label-data-source-select\"),\n",
       "          nodeLabelSizeFactorText: document.getElementById(\"iSVAmWn6OJW87vNvL-node-label-size-factor-text\"),\n",
       "          nodeLabelSizeFactorSlider: document.getElementById(\"iSVAmWn6OJW87vNvL-node-label-size-factor-slider\"),\n",
       "          nodeLabelRotationText: document.getElementById(\"iSVAmWn6OJW87vNvL-node-label-rotation-text\"),\n",
       "          nodeLabelRotationSlider: document.getElementById(\"iSVAmWn6OJW87vNvL-node-label-rotation-slider\"),\n",
       "          // Edges\n",
       "          edgeHead: document.getElementById(\"iSVAmWn6OJW87vNvL-edge-head\"),\n",
       "          edgeBody: document.getElementById(\"iSVAmWn6OJW87vNvL-edge-body\"),\n",
       "          edgeCheckbox: document.getElementById(\"iSVAmWn6OJW87vNvL-edge-checkbox\"),\n",
       "          edgeSizeFactorText: document.getElementById(\"iSVAmWn6OJW87vNvL-edge-size-factor-text\"),\n",
       "          edgeSizeFactorSlider: document.getElementById(\"iSVAmWn6OJW87vNvL-edge-size-factor-slider\"),\n",
       "          edgeCurvatureText: document.getElementById(\"iSVAmWn6OJW87vNvL-edge-curvature-text\"),\n",
       "          edgeCurvatureSlider: document.getElementById(\"iSVAmWn6OJW87vNvL-edge-curvature-slider\"),\n",
       "          edgeHoverTooltipCheckbox: document.getElementById(\"iSVAmWn6OJW87vNvL-edge-hover-tooltip-checkbox\"),\n",
       "          // Edge labels\n",
       "          edgeLabelHead: document.getElementById(\"iSVAmWn6OJW87vNvL-edge-label-head\"),\n",
       "          edgeLabelBody: document.getElementById(\"iSVAmWn6OJW87vNvL-edge-label-body\"),\n",
       "          edgeLabelCheckbox: document.getElementById(\"iSVAmWn6OJW87vNvL-edge-label-checkbox\"),\n",
       "          edgeLabelBorderCheckbox: document.getElementById(\"iSVAmWn6OJW87vNvL-edge-label-border-checkbox\"),\n",
       "          edgeLabelTextDataSourceSelect: document.getElementById(\"iSVAmWn6OJW87vNvL-edge-label-data-source-select\"),\n",
       "          edgeLabelSizeFactorText: document.getElementById(\"iSVAmWn6OJW87vNvL-edge-label-size-factor-text\"),\n",
       "          edgeLabelSizeFactorSlider: document.getElementById(\"iSVAmWn6OJW87vNvL-edge-label-size-factor-slider\"),\n",
       "          edgeLabelRotationText: document.getElementById(\"iSVAmWn6OJW87vNvL-edge-label-rotation-text\"),\n",
       "          edgeLabelRotationSlider: document.getElementById(\"iSVAmWn6OJW87vNvL-edge-label-rotation-slider\"),\n",
       "          // Layout algorithm\n",
       "          layoutAlgorithmHead: document.getElementById(\"iSVAmWn6OJW87vNvL-layout-algorithm-head\"),\n",
       "          layoutAlgorithmBody: document.getElementById(\"iSVAmWn6OJW87vNvL-layout-algorithm-body\"),\n",
       "          simulationCheckbox: document.getElementById(\"iSVAmWn6OJW87vNvL-simulation-active-checkbox\"),\n",
       "          layoutAlgorithmSelection: document.getElementById(\"iSVAmWn6OJW87vNvL-layout-algorithm-select\"),\n",
       "          centralGravitySlider: document.getElementById(\"iSVAmWn6OJW87vNvL-central-gravity-slider\"),\n",
       "          centralGravityText: document.getElementById(\"iSVAmWn6OJW87vNvL-central-gravity-text\"),\n",
       "          springLengthSlider: document.getElementById(\"iSVAmWn6OJW87vNvL-spring-length-slider\"),\n",
       "          springLengthText: document.getElementById(\"iSVAmWn6OJW87vNvL-spring-length-text\"),\n",
       "          springConstantSlider: document.getElementById(\"iSVAmWn6OJW87vNvL-spring-constant-slider\"),\n",
       "          springConstantText: document.getElementById(\"iSVAmWn6OJW87vNvL-spring-constant-text\"),\n",
       "          gravitationalConstantContainer: document.getElementById(\"iSVAmWn6OJW87vNvL-gravitational-constant-div\"),\n",
       "          gravitationalConstantSlider: document.getElementById(\"iSVAmWn6OJW87vNvL-gravitational-constant-slider\"),\n",
       "          gravitationalConstantText: document.getElementById(\"iSVAmWn6OJW87vNvL-gravitational-constant-text\"),\n",
       "          avoidOverlapContainer: document.getElementById(\"iSVAmWn6OJW87vNvL-avoid-overlap-div\"),\n",
       "          avoidOverlapSlider: document.getElementById(\"iSVAmWn6OJW87vNvL-avoid-overlap-slider\"),\n",
       "          avoidOverlapText: document.getElementById(\"iSVAmWn6OJW87vNvL-avoid-overlap-text\"),\n",
       "        },\n",
       "\n",
       "        composites:{\n",
       "          responsiveContainer:{\n",
       "            init(){\n",
       "              // Delete all contained items (relevant only for reset, not first creation)\n",
       "              ui.deleteChildElements(ui.elements.graphContainer);\n",
       "              ui.deleteChildElements(ui.elements.detailsBody);\n",
       "              // Menu\n",
       "              if(state.showMenu){\n",
       "                ui.composites.menu.show();\n",
       "              } else{\n",
       "                ui.composites.menu.hide();\n",
       "              }\n",
       "              // Details\n",
       "              if(state.showDetails){\n",
       "                ui.composites.details.show(true);\n",
       "              } else{\n",
       "                ui.composites.details.hide(true);\n",
       "              }\n",
       "              // Divs\n",
       "              ui.composites.responsiveContainer.setInnerHeights();\n",
       "              ui.composites.responsiveContainer.setOuterHeights();\n",
       "              ui.composites.responsiveContainer.getInnerWidths();\n",
       "            },\n",
       "\n",
       "            getInnerWidths(){\n",
       "              state.graphContainerWidth = parseInt(ui.elements.graphContainer.clientWidth);\n",
       "              state.detailsContainerWidth = parseInt(ui.elements.detailsContainer.clientWidth);\n",
       "            },\n",
       "\n",
       "            getInnerHeights(){\n",
       "              state.graphContainerHeight = parseInt(ui.elements.graphContainer.clientHeight);\n",
       "              if(state.showDetails){\n",
       "                state.detailsContainerHeight = parseInt(ui.elements.detailsContainer.clientHeight);\n",
       "              }\n",
       "            },\n",
       "\n",
       "            setInnerHeights(){\n",
       "              ui.elements.graphContainer.style.height = state.graphContainerHeight + \"px\";\n",
       "              ui.elements.detailsContainer.style.height = state.detailsContainerHeight + \"px\";\n",
       "            },\n",
       "\n",
       "            setOuterHeights(){\n",
       "              ui.elements.mainContainer.style.height = ui.elements.leftContainer.offsetHeight + \"px\";\n",
       "            },\n",
       "\n",
       "            getSizes(){\n",
       "              ui.composites.responsiveContainer.getInnerWidths();\n",
       "              ui.composites.responsiveContainer.getInnerHeights();\n",
       "            },\n",
       "\n",
       "            setSizes(){\n",
       "              ui.composites.responsiveContainer.setInnerHeights();\n",
       "              ui.composites.responsiveContainer.setOuterHeights();\n",
       "            },\n",
       "\n",
       "            adaptToResize(){\n",
       "              ui.composites.responsiveContainer.getSizes();\n",
       "              ui.composites.responsiveContainer.setSizes();\n",
       "            },\n",
       "\n",
       "            adaptToFullscreen(){\n",
       "              ui.composites.responsiveContainer.getSizes();\n",
       "              if(document.fullscreenElement){\n",
       "                // On entering fullscreen, remember the current container heights\n",
       "                state.beforeFullscreenGraphContainerHeight = state.graphContainerHeight;\n",
       "                state.beforeFullscreenDetailsContainerHeight = state.detailsContainerHeight;\n",
       "                // and then adapt them to maximum height possible in full screen mode\n",
       "                function calculateFullscreenMaxGraphHeight(){\n",
       "                  let outerHeight = null;\n",
       "                  try{\n",
       "                    const mainDivComputedStyle = window.getComputedStyle(ui.elements.mainContainer),\n",
       "                      graphDivComputedStyle = window.getComputedStyle(ui.elements.graphContainer),\n",
       "                      paddingTop = parseFloat(mainDivComputedStyle.paddingTop),\n",
       "                      borderTop = parseFloat(graphDivComputedStyle.borderTopWidth),\n",
       "                      borderBottom = parseFloat(graphDivComputedStyle.borderBottomWidth),\n",
       "                      paddingBottom = parseFloat(mainDivComputedStyle.paddingBottom);\n",
       "                    outerHeight = paddingTop + borderTop + borderBottom + paddingBottom;\n",
       "                    if(!isFinite(outerHeight) || outerHeight === null){\n",
       "                      throw \"Invalid number\";\n",
       "                    }\n",
       "                  } catch(e){\n",
       "                    // Hard coded fallback, depends on CSS of containers (1px borders, 6px padding)\n",
       "                    outerHeight = 1 + 3 + 3 + 1;\n",
       "                  }\n",
       "                  let graphHeight = screen.height - outerHeight;\n",
       "                  if(state.showDetails){\n",
       "                    graphHeight -= ui.composites.details.calculateHeightDifference();\n",
       "                  }\n",
       "                  return graphHeight;\n",
       "                }\n",
       "                state.graphContainerHeight = calculateFullscreenMaxGraphHeight();\n",
       "              } else{\n",
       "                // On leaving fullscreen, set container heights back to remembered values\n",
       "                state.graphContainerHeight = state.beforeFullscreenGraphContainerHeight;\n",
       "                state.detailsContainerHeight = state.beforeFullscreenDetailsContainerHeight;\n",
       "              }\n",
       "              ui.composites.responsiveContainer.setSizes();\n",
       "            },\n",
       "          },\n",
       "\n",
       "          menu:{\n",
       "            show(){\n",
       "              ui.elements.leftContainer.style.width = \"80%\";\n",
       "              ui.elements.rightContainer.style.width = \"20%\";\n",
       "              ui.elements.rightContainer.style.display = \"block\";\n",
       "            },\n",
       "\n",
       "            hide(){\n",
       "              ui.elements.leftContainer.style.width = \"100%\";\n",
       "              ui.elements.rightContainer.style.width = \"0%\";\n",
       "              ui.elements.rightContainer.style.display = \"none\";\n",
       "            },\n",
       "\n",
       "            toggle(){\n",
       "              // Update menu button\n",
       "              const div = ui.elements.menuToggleDiv;\n",
       "              state.showMenu = !state.showMenu;\n",
       "              if(state.showMenu){\n",
       "                div.innerText = ui.symbols.menuShown;\n",
       "                ui.composites.menu.show();\n",
       "              } else {\n",
       "                div.innerHTML = ui.symbols.menuHidden;\n",
       "                ui.composites.menu.hide();\n",
       "              }\n",
       "\n",
       "              // Update rest of UI\n",
       "              ui.composites.responsiveContainer.getInnerWidths();\n",
       "              ui.composites.responsiveContainer.getInnerHeights();\n",
       "              ui.composites.responsiveContainer.setOuterHeights();\n",
       "              ui.composites.graph.updateGraphDrawingArea();\n",
       "            },\n",
       "\n",
       "            setItem(keyElement, valElement, toActive){\n",
       "              const currentText = keyElement.innerHTML;\n",
       "              let sliceStart = 0;\n",
       "              if(currentText.startsWith(ui.symbols.menuItemActive)){\n",
       "                sliceStart = ui.symbols.menuItemActive.length;\n",
       "              } else if (currentText.startsWith(ui.symbols.menuItemInactive)){\n",
       "                sliceStart = ui.symbols.menuItemInactive.length;\n",
       "              }\n",
       "              if(toActive){\n",
       "                keyElement.innerHTML = ui.symbols.menuItemActive + currentText.slice(sliceStart);\n",
       "                keyElement.style.backgroundColor = \"#f5f5f5\";\n",
       "                keyElement.style.color = \"black\";\n",
       "                keyElement.style.borderColor = \"#999\";\n",
       "                keyElement.style.boxShadow = \"0px 0px 3px rgba(0, 0, 0, 0.35)\";\n",
       "                valElement.style.display = \"block\";\n",
       "              } else {\n",
       "                keyElement.innerHTML = ui.symbols.menuItemInactive + currentText.slice(sliceStart);\n",
       "                keyElement.style.backgroundColor = \"white\";\n",
       "                keyElement.style.color = \"#222\";\n",
       "                keyElement.style.borderColor = \"#ccc\";\n",
       "                keyElement.style.boxShadow = \"0px 0px 3px rgba(0, 0, 0, 0.2)\";\n",
       "                valElement.style.display = \"none\";\n",
       "              }\n",
       "            },\n",
       "\n",
       "            toggleItem(keyElement, valElement){\n",
       "              const toActive = !(valElement.style.display !== \"none\");\n",
       "              ui.composites.menu.setItem(keyElement, valElement, toActive);\n",
       "            },\n",
       "          },\n",
       "\n",
       "          details:{\n",
       "            calculateHeightDifference(){\n",
       "              let outerHeight = null;\n",
       "              try{\n",
       "                const graphContainerComputedStyle = window.getComputedStyle(ui.elements.graphContainer),\n",
       "                  detailsContainerComputedStyle = window.getComputedStyle(ui.elements.detailsContainer),\n",
       "                  border1 = parseFloat(graphContainerComputedStyle.borderBottomWidth),\n",
       "                  margin = parseFloat(detailsContainerComputedStyle.marginTop),\n",
       "                  border2 = parseFloat(detailsContainerComputedStyle.borderTopWidth);\n",
       "                outerHeight = border1 + margin + border2;\n",
       "                if(!isFinite(outerHeight) || outerHeight === null){\n",
       "                  throw \"Invalid number\";\n",
       "                }\n",
       "              } catch(e){\n",
       "                // Hard coded fallback, depends on CSS of containers (1px borders, 5px margin)\n",
       "                outerHeight = 7.0;\n",
       "              }\n",
       "              return state.detailsContainerHeight + outerHeight\n",
       "            },\n",
       "\n",
       "            show(init=false){\n",
       "              // Visibility\n",
       "              ui.elements.detailsContainer.style.display = \"block\";\n",
       "              if(!init){\n",
       "                // Height\n",
       "                const heightDiff = ui.composites.details.calculateHeightDifference();\n",
       "                state.graphContainerHeight -= heightDiff;\n",
       "                if(state.graphContainerHeight < 70){\n",
       "                  state.graphContainerHeight = 70;\n",
       "                }\n",
       "                // Update rest of UI\n",
       "                ui.composites.responsiveContainer.setSizes();\n",
       "                ui.composites.graph.updateGraphDrawingArea();\n",
       "              }\n",
       "            },\n",
       "\n",
       "            hide(init=false){\n",
       "              // Visibility\n",
       "              ui.elements.detailsContainer.style.display = \"none\";\n",
       "              if(!init){\n",
       "                // Height\n",
       "                const heightDiff = ui.composites.details.calculateHeightDifference();\n",
       "                state.graphContainerHeight += heightDiff;\n",
       "                // Update rest of UI\n",
       "                ui.composites.responsiveContainer.setSizes();\n",
       "                ui.composites.graph.updateGraphDrawingArea();\n",
       "              }\n",
       "            },\n",
       "\n",
       "            toggle(){\n",
       "              // Update details button\n",
       "              const toggleDiv = ui.elements.detailsToggleDiv;\n",
       "              state.showDetails = !state.showDetails;\n",
       "              if(state.showDetails){\n",
       "                toggleDiv.innerText = ui.symbols.detailsShown;\n",
       "                ui.composites.details.show();\n",
       "              } else {\n",
       "                toggleDiv.innerHTML = ui.symbols.detailsHidden;\n",
       "                ui.composites.details.hide();\n",
       "              }\n",
       "            },\n",
       "          },\n",
       "\n",
       "          download:{\n",
       "            png(filename){\n",
       "              ui.composites.download._rasterImage(filename, \"png\");\n",
       "            },\n",
       "\n",
       "            jpg(filename){\n",
       "              ui.composites.download._rasterImage(filename, \"jpeg\");\n",
       "            },\n",
       "\n",
       "            _rasterImage(filename, format){\n",
       "              const canvas = ui.elements.graphContainer.getElementsByTagName(\"canvas\")[0],\n",
       "                mimeType = \"image/\" + format;\n",
       "              function finishedBlobCallback(blob){\n",
       "                ui.composites.download._blobToFileDownload(blob, filename);\n",
       "              }\n",
       "              try{\n",
       "                // Blob to overcome size limitations for data URLs (e.g. 4MB in Chrome)\n",
       "                canvas.toBlob(finishedBlobCallback, mimeType, 1.0);\n",
       "              } catch(e){\n",
       "                if(e.name === \"SecurityError\"){\n",
       "                  alert(\"Image creation failed. Some images within the nodes of the graph can \" +\n",
       "                      \"not be fetched from within JavaScript due to security settings of the \" +\n",
       "                      \"server that provides the images.\");\n",
       "                } else{\n",
       "                  throw e;\n",
       "                }\n",
       "              }\n",
       "            },\n",
       "\n",
       "            _blobToFileDownload(blob, filename){\n",
       "              const url = URL.createObjectURL(blob),\n",
       "                a = document.createElement(\"a\");\n",
       "              function handleClick(){\n",
       "                setTimeout(function(){\n",
       "                  // Long waiting time before removal for slow devices like mobile phones\n",
       "                  URL.revokeObjectURL(url);\n",
       "                  this.removeEventListener(\"click\", handleClick);\n",
       "                }, 20000);\n",
       "              };\n",
       "              document.body.appendChild(a);\n",
       "              a.href = url;\n",
       "              a.download = filename;\n",
       "              a.addEventListener(\"click\", handleClick, false);\n",
       "              a.click();\n",
       "              document.body.removeChild(a);\n",
       "            },\n",
       "          },\n",
       "\n",
       "          selection(element, optionList, valueList=undefined) {\n",
       "            while(element.hasChildNodes()){\n",
       "              element.removeChild(element.firstChild);\n",
       "            }\n",
       "            for(let i=0; i<optionList.length; i++){\n",
       "              let text = optionList[i];\n",
       "              let value = text;\n",
       "              if(valueList){\n",
       "                value = valueList[i];\n",
       "              }\n",
       "              let opt = document.createElement(\"option\");\n",
       "              opt.appendChild(document.createTextNode(text));\n",
       "              opt.value = value;\n",
       "              element.appendChild(opt);\n",
       "            }\n",
       "          },\n",
       "\n",
       "          tooltip:{\n",
       "            show(xShift=null, yShift=null){\n",
       "              if(isFinite(xShift) && xShift !== null){\n",
       "                ui.elements.tooltipContainer.style.left =  parseInt(xShift) + \"px\";\n",
       "              }\n",
       "              if(isFinite(yShift) && yShift !== null){\n",
       "                ui.elements.tooltipContainer.style.top = parseInt(yShift) + \"px\";\n",
       "              }\n",
       "              ui.elements.tooltipContainer.style.transition = \"visibility 0s, opacity 0.1s\";\n",
       "              ui.elements.tooltipContainer.style.visibility = \"visible\";\n",
       "              ui.elements.tooltipContainer.style.opacity = 1.0;\n",
       "            },\n",
       "\n",
       "            hide(){\n",
       "              ui.elements.tooltipContainer.style.transition = \"visibility 0.3s, opacity 0.3s ease-in\";\n",
       "              ui.elements.tooltipContainer.style.visibility = \"hidden\";\n",
       "              ui.elements.tooltipContainer.style.opacity = 0.0;\n",
       "            },\n",
       "          },\n",
       "\n",
       "          progressBar:{\n",
       "            create(){\n",
       "              // Main container\n",
       "              this.mainContainer = document.createElement(\"div\");\n",
       "              this.mainContainer.id = \"iSVAmWn6OJW87vNvL-progress-container\";\n",
       "              this.mainContainer.style.backgroundColor = state.shownData.general.background_color;\n",
       "              ui.elements.graphContainer.style.backgroundColor = state.shownData.general.background_color;\n",
       "              // Text container\n",
       "              const numNodes = state.parsedData.nodes.length;\n",
       "              this.textContainer = document.createElement(\"div\");\n",
       "              this.textContainer.innerText = \"Large graph with \" + numNodes + \" nodes. Calculating an initial layout before visualizing it.\";\n",
       "              this.textContainer.style.textAlign = \"center\";\n",
       "              // Bar container\n",
       "              this.outerBarContainer = document.createElement(\"div\");\n",
       "              this.outerBarContainer.style.border = \"1px solid black\";\n",
       "              this.outerBarContainer.style.borderRadius = \"4px\";\n",
       "              this.outerBarContainer.style.marginTop = \"1ex\";\n",
       "              this.outerBarContainer.style.padding = \"1px\";\n",
       "              this.innerBarContainer = document.createElement(\"div\");\n",
       "              this.innerBarContainer.style.backgroundColor = \"black\";\n",
       "              this.innerBarContainer.style.width = \"0%\";\n",
       "              this.innerBarContainer.style.height = \"8px\";\n",
       "              this.innerBarContainer.style.borderRadius = \"3px\";\n",
       "              // Add them to DOM\n",
       "              this.outerBarContainer.appendChild(this.innerBarContainer);\n",
       "              this.mainContainer.appendChild(this.textContainer);\n",
       "              this.mainContainer.appendChild(this.outerBarContainer);\n",
       "              ui.elements.graphContainer.appendChild(this.mainContainer);\n",
       "            },\n",
       "\n",
       "            update(percentage){\n",
       "              this.innerBarContainer.style.width = percentage + \"%\";\n",
       "            },\n",
       "\n",
       "            remove(){\n",
       "              ui.elements.graphContainer.removeChild(this.mainContainer);\n",
       "            }\n",
       "          },\n",
       "\n",
       "          graph:{\n",
       "            createGraph(){\n",
       "              // Remove existing elements\n",
       "              ui.deleteChildElements(ui.elements.graphContainer);\n",
       "\n",
       "              // Create new elements\n",
       "              // I) Set graph options\n",
       "              // a) Nodes: https://visjs.github.io/vis-network/docs/network/nodes.html\n",
       "              const data = state.shownData,\n",
       "                visNodes = [];\n",
       "              let graphContainsFixedPositions = false;\n",
       "              for(let i=0; i<data.nodes.length; i++){\n",
       "                const node = data.nodes[i];\n",
       "                let visNode = {\n",
       "                  id: node.id,\n",
       "                  shape: node.shape,\n",
       "                  borderWidth: node.border_size,\n",
       "                  color: {\n",
       "                    background: node.color,\n",
       "                    border: node.border_color,\n",
       "                  },\n",
       "                }\n",
       "                // - Node labels\n",
       "                if(state.showNodeLabels){\n",
       "                  if(typeof(node.label) !== \"undefined\"){\n",
       "                    visNode.label = node.label;\n",
       "                    visNode.font = {\n",
       "                      size: node.label_size,\n",
       "                      color: node.label_color,\n",
       "                      strokeWidth: (state.showNodeLabelBorders ? 1.2 : 0.0),\n",
       "                      strokeColor: data.general.background_color,\n",
       "                    }\n",
       "                  }\n",
       "                }\n",
       "                // - Nodes hidden/shown (\"hidden\" property hides entire graph, using size=0 instead)\n",
       "                if(state.showNodes || (typeof(node.image) !== \"undefined\" && state.showNodeImages)){\n",
       "                  visNode.size = node.size;\n",
       "                } else {\n",
       "                  visNode.size = 0.0;\n",
       "                }\n",
       "                // - Node images\n",
       "                if(typeof(node.image) !== \"undefined\"){\n",
       "                  if(state.showNodeImages){\n",
       "                    visNode.shape = \"image\";\n",
       "                    visNode.image = node.image;\n",
       "                    visNode.size = node.image_size;\n",
       "                    // prevent a visual change of nodes with images upon selection (not deactivatable)\n",
       "                    visNode.color.highlight = {\n",
       "                      background: visNode.color.background,\n",
       "                      border: visNode.color.border,\n",
       "                    };\n",
       "                    visNode.borderWidthSelected = visNode.borderWidth;\n",
       "                  }\n",
       "                }\n",
       "                // - Node positions\n",
       "                const x = node.fx,\n",
       "                  y = node.fy;\n",
       "                if((typeof(x) !== \"undefined\") || (typeof(y) !== \"undefined\")){\n",
       "                  graphContainsFixedPositions = true;\n",
       "                  visNode.fixed = {}\n",
       "                  if(typeof(x) !== \"undefined\"){\n",
       "                    visNode.x = x;\n",
       "                    visNode.fixed.x = true;\n",
       "                  }\n",
       "                  if(typeof(y) !== \"undefined\"){\n",
       "                    visNode.y = y;\n",
       "                    visNode.fixed.y = true;\n",
       "                  }\n",
       "                }\n",
       "                // - Node hover behavior 1: highlight neighborhood\n",
       "                visNode.color.hover = {\n",
       "                  background: visNode.color.background,\n",
       "                  border: visNode.color.background,\n",
       "                };\n",
       "                // - Node hover behavior 2: show tooltip\n",
       "                if(state.nodeHoverTooltip){\n",
       "                  if(typeof(node.hover) !== \"undefined\"){\n",
       "                    visNode.title = node.hover;\n",
       "                  }\n",
       "                }\n",
       "                // - Node click behavior: show details\n",
       "                if(typeof(node.click) !== \"undefined\" && node.click !== \"\"){\n",
       "                  visNode.click = node.click;\n",
       "                }\n",
       "                visNodes.push(visNode);\n",
       "              }\n",
       "\n",
       "              // b) Edges: https://visjs.github.io/vis-network/docs/network/edges.html\n",
       "              const visEdges = [];\n",
       "              for(let i=0; i<data.edges.length; i++){\n",
       "                const edge = data.edges[i];\n",
       "                const visEdge = {\n",
       "                  id: edge.id,\n",
       "                  from: edge.source.id,\n",
       "                  to: edge.target.id,\n",
       "                  color: edge.color,\n",
       "                  width: edge.size,\n",
       "                };\n",
       "                // - Edge labels\n",
       "                if(state.showEdgeLabels){\n",
       "                  if(typeof(edge.label) !== \"undefined\"){\n",
       "                    visEdge.label = edge.label;\n",
       "                    visEdge.font = {\n",
       "                      size: edge.label_size,\n",
       "                      color: edge.label_color,\n",
       "                      strokeWidth: (state.showEdgeLabelBorders ? 1.2 : 0.0),\n",
       "                      strokeColor: data.general.background_color,\n",
       "                    }\n",
       "                  }\n",
       "                }\n",
       "                // - Edges hidden/shown\n",
       "                if(!state.showEdges){\n",
       "                  visEdge.hidden = true;\n",
       "                }\n",
       "                // - Edge hover behavior\n",
       "                if(state.edgeHoverTooltip){\n",
       "                  if(typeof(edge.hover) !== \"undefined\") {\n",
       "                    visEdge.title = edge.hover;\n",
       "                  }\n",
       "                }\n",
       "                // - Edge click behavior\n",
       "                if(typeof(edge.click) !== \"undefined\" && edge.click !== \"\"){\n",
       "                  visEdge.click = edge.click;\n",
       "                }\n",
       "                visEdges.push(visEdge);\n",
       "              }\n",
       "              // c) Options: https://visjs.github.io/vis-network/docs/network/\n",
       "              const options = {};\n",
       "              // - Nodes\n",
       "              options.nodes = {};\n",
       "              options.nodes.chosen = false;\n",
       "              options.nodes.imagePadding = 1.5;\n",
       "              options.nodes.labelHighlightBold = false;\n",
       "              options.nodes.shapeProperties = {};\n",
       "              options.nodes.shapeProperties.useBorderWithImage = true;\n",
       "              // - Node label font family\n",
       "              if(state.nodeLabelFont !== null){\n",
       "                options.nodes.font = {\n",
       "                  \"face\": state.nodeLabelFont,\n",
       "                }\n",
       "              }\n",
       "              // - Edges\n",
       "              options.edges = {};\n",
       "              // - Edges hidden/shown\n",
       "              if(!state.showEdges){\n",
       "                options.edges.hidden = true;\n",
       "              }\n",
       "              // - Edge curvature\n",
       "              if(state.edgeCurvature === 0.0){\n",
       "                options.edges.smooth = false;\n",
       "              } else {\n",
       "                options.edges.smooth = ui.composites.graph.calculateEdgeCurvatureOptions();\n",
       "              }\n",
       "              // - Edge arrows\n",
       "              if(data.general.directed){\n",
       "                options.edges.arrows = {};\n",
       "                options.edges.arrows.to = {};\n",
       "                options.edges.arrows.to.enabled = true;\n",
       "                if(data.general.arrow_size !== 0.0){\n",
       "                  options.edges.arrows.to.scaleFactor = data.general.arrow_size / 10.0;\n",
       "                }\n",
       "              }\n",
       "              // - Edge label font family\n",
       "              if(state.edgeLabelFont !== null){\n",
       "                options.edges.font = {\n",
       "                  \"face\": state.edgeLabelFont,\n",
       "                }\n",
       "              }\n",
       "              // - Drawing area\n",
       "              options.autoResize = false;\n",
       "              // - Interaction\n",
       "              options.interaction = {};\n",
       "              options.interaction.selectable = false;\n",
       "              options.interaction.selectConnectedEdges = false;\n",
       "              options.interaction.tooltipDelay = 0.0;\n",
       "              options.interaction.hover = state.nodeHoverNeighborhood;\n",
       "              options.interaction.hoverConnectedEdges = state.nodeHoverNeighborhood;\n",
       "              // - Layout algorithm\n",
       "              const numNodes = state.parsedData.nodes.length;\n",
       "              options.layout = {};\n",
       "              if(numNodes < 400){\n",
       "                options.layout.improvedLayout = true;\n",
       "              } else{\n",
       "                options.layout.improvedLayout = false;\n",
       "              }\n",
       "              options.physics = {};\n",
       "              options.physics.barnesHut = {\"damping\": 0.25};\n",
       "              options.physics.forceAtlas2Based = {\"damping\": 3.0};\n",
       "              options.physics.repulsion = {};\n",
       "              options.physics.hierarchicalRepulsion = {};\n",
       "              options.physics.stabilization = {};\n",
       "              options.physics.stabilization.enabled = false;\n",
       "              if(numNodes > state.largeGraphThreshold){\n",
       "                let numIterations = 800;\n",
       "                if(numNodes >= 25000){\n",
       "                  numIterations = 100;\n",
       "                } else if(numNodes >= 10000){\n",
       "                  numIterations = 300;\n",
       "                } else if(numNodes >= 5000){\n",
       "                  numIterations = 400;\n",
       "                } else if(numNodes >= 2000){\n",
       "                  numIterations = 500;\n",
       "                } else if(numNodes >= 1000){\n",
       "                  numIterations = 600;\n",
       "                }\n",
       "                options.physics.stabilization = {\n",
       "                  \"enabled\": true,\n",
       "                  \"fit\": true,\n",
       "                  \"iterations\": numIterations,\n",
       "                  \"updateInterval\": 1,\n",
       "                };\n",
       "              }\n",
       "              // II) Create graph\n",
       "              // - DataSet and Network: https://visjs.github.io/vis-network/docs/network\n",
       "              state.visOptions = options;\n",
       "              state.visData = {\n",
       "                nodes: new vis.DataSet(visNodes),\n",
       "                edges: new vis.DataSet(visEdges),\n",
       "              };\n",
       "              state.visGraph = new vis.Network(ui.elements.graphContainer, state.visData, state.visOptions);\n",
       "              // III) Set further graph options after its creation\n",
       "              // - Background: https://github.com/almende/vis/issues/2292\n",
       "              state.visGraph.on(\"beforeDrawing\", function(ctx){\n",
       "                  ctx.save();\n",
       "                  ctx.setTransform(1, 0, 0, 1, 0, 0);\n",
       "                  ctx.fillStyle = data.general.background_color;\n",
       "                  ctx.fillRect(0, 0, ctx.canvas.width, ctx.canvas.height);\n",
       "                  ctx.restore();\n",
       "              })\n",
       "              // - Node positions: node update after graph creation seems to prevent a bug\n",
       "              if(graphContainsFixedPositions){\n",
       "                state.visData.nodes.update(visNodes);\n",
       "              }\n",
       "              // - Graph behavior\n",
       "              ui.composites.graph.setBehavior();\n",
       "\n",
       "              // Menu toggle button\n",
       "              if(state.showMenuToggleButton){\n",
       "                const menuDiv = document.createElement(\"div\");\n",
       "                if(state.showMenu){\n",
       "                  menuDiv.innerText = ui.symbols.menuShown;\n",
       "                } else {\n",
       "                  menuDiv.innerText = ui.symbols.menuHidden;\n",
       "                }\n",
       "                menuDiv.id = \"iSVAmWn6OJW87vNvL-menu-toggle-button\";\n",
       "                menuDiv.onclick = ui.composites.menu.toggle;\n",
       "                ui.elements.graphContainer.appendChild(menuDiv);\n",
       "                ui.elements.menuToggleDiv = menuDiv;\n",
       "              }\n",
       "              // Details toggle button\n",
       "              if(state.showDetailsToggleButton){\n",
       "                const detailsDiv = document.createElement(\"div\");\n",
       "                if(state.showDetails){\n",
       "                  detailsDiv.innerText = ui.symbols.detailsShown;\n",
       "                } else {\n",
       "                  detailsDiv.innerText = ui.symbols.detailsHidden;\n",
       "                }\n",
       "                detailsDiv.id = \"iSVAmWn6OJW87vNvL-details-toggle-button\";\n",
       "                detailsDiv.onclick = ui.composites.details.toggle;\n",
       "                ui.elements.graphContainer.appendChild(detailsDiv);\n",
       "                ui.elements.detailsToggleDiv = detailsDiv;\n",
       "              }\n",
       "            },\n",
       "\n",
       "            setBehavior(){\n",
       "              // - Progress bar: only if large graph, stops simulation to get initial static image\n",
       "              // https://visjs.github.io/vis-network/examples/network/exampleApplications/loadingBar.html\n",
       "              const numNodes = state.parsedData.nodes.length;\n",
       "              if(numNodes > state.largeGraphThreshold){\n",
       "                // Layout start\n",
       "                ui.composites.progressBar.create();\n",
       "                // Layout update\n",
       "                state.visGraph.on(\"stabilizationProgress\", function(params){\n",
       "                  var progressPercentage = params.iterations / params.total * 100;\n",
       "                  ui.composites.progressBar.update(progressPercentage);\n",
       "                });\n",
       "                // Layout finished\n",
       "                state.visGraph.once(\"stabilizationIterationsDone\", function(){\n",
       "                  setTimeout(function(){\n",
       "                    ui.composites.progressBar.remove();\n",
       "                    ui.composites.graph.simulationManager.stop();\n",
       "                  }, 60);\n",
       "                });\n",
       "              }\n",
       "              // - Node drag behavior: move node, fix its position or release it afterwards\n",
       "              state.visGraph.on(\"dragStart\", function(params){\n",
       "                params.event = \"[original event]\";\n",
       "                const nodeId = this.getNodeAt(params.pointer.DOM);\n",
       "                if(nodeId){\n",
       "                  const visNode = state.visData.nodes.get(nodeId),\n",
       "                    position = state.visGraph.getPositions(nodeId);\n",
       "                  visNode.x = position.x;\n",
       "                  visNode.y = position.y;\n",
       "                  visNode.fixed = false;\n",
       "                  state.visData.nodes.update(visNode);\n",
       "                }\n",
       "              });\n",
       "              state.visGraph.on(\"dragEnd\", function(params){\n",
       "                params.event = \"[original event]\";\n",
       "                const nodeId = this.getNodeAt(params.pointer.DOM);\n",
       "                if(nodeId){\n",
       "                  if(state.nodeDragFix){\n",
       "                    const visNode = state.visData.nodes.get(nodeId),\n",
       "                      position = state.visGraph.getPositions(nodeId);\n",
       "                    visNode.x = position.x;\n",
       "                    visNode.y = position.y;\n",
       "                    visNode.fixed = {\"x\": true, \"y\": true}\n",
       "                    state.visData.nodes.update(visNode);\n",
       "                  }\n",
       "                }\n",
       "              });\n",
       "              // - Node and edge hover behavior: already covered\n",
       "              // - Node and edge click behavior\n",
       "              // https://visjs.github.io/vis-network/examples/network/events/interactionEvents.html\n",
       "              function createNodeText(node){\n",
       "                let htmlText = \"<div>Node: \" + String(node.id) + \"</div>\";\n",
       "                if(typeof(node.click) !== \"undefined\" && node.click !== \"\"){\n",
       "                  htmlText += '<div id=\"iSVAmWn6OJW87vNvL-details-user-provided\">' + node.click + '</div>';\n",
       "                }\n",
       "                return htmlText;\n",
       "              }\n",
       "              function createEdgeText(edge){\n",
       "                let htmlText = \"<div>Edge: \" + String(edge.id) + \"</div>\";\n",
       "                if(typeof(edge.click) !== \"undefined\" && edge.click !== \"\"){\n",
       "                  htmlText += '<div id=\"iSVAmWn6OJW87vNvL-details-user-provided\">' + edge.click + '</div>';\n",
       "                }\n",
       "                return htmlText;\n",
       "              }\n",
       "              state.visGraph.on(\"click\", function(params){\n",
       "                params.event = \"[original event]\";\n",
       "                let htmlText = \"\";\n",
       "                const nodeId = this.getNodeAt(params.pointer.DOM);\n",
       "                if(nodeId){\n",
       "                  const node = state.visData.nodes.get(nodeId);\n",
       "                  if(node){\n",
       "                    htmlText = createNodeText(node);\n",
       "                  }\n",
       "                } else {\n",
       "                  const edgeId = this.getEdgeAt(params.pointer.DOM);\n",
       "                  if(edgeId){\n",
       "                    const edge = state.visData.edges.get(edgeId);\n",
       "                    if(edge){\n",
       "                      htmlText = createEdgeText(edge);\n",
       "                    }\n",
       "                  }\n",
       "                }\n",
       "                ui.elements.detailsBody.innerHTML = htmlText;\n",
       "              });\n",
       "              // - Simulation behavior\n",
       "              state.visGraph.on(\"startStabilizing\", function(params){\n",
       "                // A manually stopped simulation restarts automatically by dragging a node or\n",
       "                // altering a dataset, immediately triggering this event. So if the simulation\n",
       "                // shall be inactive, any automatic restart can be turned off immediately here.\n",
       "                if(!state.layoutAlgorithmActive){\n",
       "                  state.visGraph.stopSimulation();\n",
       "                }\n",
       "              });\n",
       "              // Start (considers all simulation parameters)\n",
       "              ui.composites.graph.simulationManager.start();\n",
       "            },\n",
       "\n",
       "            // Graph\n",
       "            updateGraphDrawingArea(){\n",
       "              state.visGraph.setSize(state.graphContainerWidth, state.graphContainerHeight);\n",
       "              state.visGraph.redraw();\n",
       "            },\n",
       "\n",
       "            // Nodes\n",
       "            updateNodes(){\n",
       "              const data = state.shownData,\n",
       "                newVisNodes = [];\n",
       "              for(let i=0; i<data.nodes.length; i++){\n",
       "                const node = data.nodes[i],\n",
       "                  visNode = state.visData.nodes.get(node.id);\n",
       "                // Node shape\n",
       "                visNode.shape = node.shape;\n",
       "                // Node size\n",
       "                if(state.showNodes){\n",
       "                  visNode.size = node.size;\n",
       "                } else {\n",
       "                  visNode.size = 0.0;\n",
       "                }\n",
       "                // Node images\n",
       "                if(state.showNodeImages){\n",
       "                  if(typeof(node.image) !== \"undefined\"){\n",
       "                    visNode.size = node.image_size;\n",
       "                    visNode.shape = \"image\";\n",
       "                    visNode.image = node.image;\n",
       "                  }\n",
       "                }\n",
       "                // Prevent node movements: Remove stored positions of nodes once fixed and now released\n",
       "                if(visNode.fixed === false){\n",
       "                  delete visNode.x;\n",
       "                  delete visNode.y;\n",
       "                }\n",
       "                newVisNodes.push(visNode);\n",
       "              }\n",
       "              state.visData.nodes.update(newVisNodes);\n",
       "            },\n",
       "\n",
       "            preventNodeJump(visNode){\n",
       "              if(visNode.fixed === false){\n",
       "                delete visNode.x;\n",
       "                delete visNode.y;\n",
       "              }\n",
       "            },\n",
       "\n",
       "            updateNodeVisibilities(){\n",
       "              ui.composites.graph.updateNodes();\n",
       "            },\n",
       "\n",
       "            updateNodeSizes(){\n",
       "              const data = state.shownData,\n",
       "                newVisNodes = [];\n",
       "              for(let i=0; i<data.nodes.length; i++){\n",
       "                const node = data.nodes[i],\n",
       "                  visNode = state.visData.nodes.get(node.id);\n",
       "                visNode.size = node.size;\n",
       "                if(state.showNodeImages && typeof(node.image) !== \"undefined\"){\n",
       "                  visNode.size = node.image_size;\n",
       "                }\n",
       "                ui.composites.graph.preventNodeJump(visNode);\n",
       "                newVisNodes.push(visNode);\n",
       "              }\n",
       "              state.visData.nodes.update(newVisNodes);\n",
       "            },\n",
       "\n",
       "            updateNodeHoverNeighborhoodBehavior(){\n",
       "              state.visOptions.interaction.hover = state.nodeHoverNeighborhood;\n",
       "              state.visOptions.interaction.hoverConnectedEdges = state.nodeHoverNeighborhood;\n",
       "              state.visGraph.setOptions(state.visOptions);\n",
       "            },\n",
       "\n",
       "            updateNodeHoverTooltipBehavior(){\n",
       "              const data = state.shownData,\n",
       "                newVisNodes = [];\n",
       "              for(let i=0; i<data.nodes.length; i++){\n",
       "                const node = data.nodes[i],\n",
       "                  visNode = state.visData.nodes.get(node.id);\n",
       "                if(typeof(node.hover) !== \"undefined\"){\n",
       "                  visNode.title = state.nodeHoverTooltip ? node.hover : null;\n",
       "                }\n",
       "                newVisNodes.push(visNode);\n",
       "              }\n",
       "              state.visData.nodes.update(newVisNodes);\n",
       "            },\n",
       "\n",
       "            // Node images\n",
       "            updateNodeImages(){\n",
       "              const data = state.shownData,\n",
       "                newVisNodes = [];\n",
       "              for(let i=0; i<data.nodes.length; i++){\n",
       "                const node = data.nodes[i],\n",
       "                  visNode = state.visData.nodes.get(node.id);\n",
       "                visNode.shape = node.shape;\n",
       "                if(state.showNodes){\n",
       "                  visNode.size = node.size;\n",
       "                } else {\n",
       "                  visNode.size = 0.0;\n",
       "                }\n",
       "                if(state.showNodeImages){\n",
       "                  if(typeof(node.image) !== \"undefined\"){\n",
       "                    visNode.size = node.image_size;\n",
       "                    visNode.shape = \"image\";\n",
       "                    visNode.image = node.image;\n",
       "                  }\n",
       "                }\n",
       "                ui.composites.graph.preventNodeJump(visNode);\n",
       "                newVisNodes.push(visNode);\n",
       "              }\n",
       "              state.visData.nodes.update(newVisNodes);\n",
       "            },\n",
       "\n",
       "            // Node labels\n",
       "            updateNodeLabels(){\n",
       "              // Vis data sets: https://visjs.github.io/vis-data/data/dataset.html\n",
       "              const data = state.shownData,\n",
       "                newVisNodes = [];\n",
       "              for(let i=0; i<data.nodes.length; i++){\n",
       "                const node = data.nodes[i];\n",
       "                const visNode = state.visData.nodes.get(node.id);\n",
       "                if(state.showNodeLabels){\n",
       "                  visNode.label = node.label;\n",
       "                  visNode.font = {\n",
       "                    size: node.label_size,\n",
       "                    color: node.label_color,\n",
       "                    strokeWidth: (state.showNodeLabelBorders ? 1.2 : 0.0),\n",
       "                    strokeColor: data.general.background_color,\n",
       "                  }\n",
       "                } else{\n",
       "                  visNode.label = undefined;\n",
       "                }\n",
       "                ui.composites.graph.preventNodeJump(visNode);\n",
       "                newVisNodes.push(visNode);\n",
       "              }\n",
       "              state.visData.nodes.update(newVisNodes);\n",
       "            },\n",
       "\n",
       "            // Edges\n",
       "            calculateEdgeCurvatureOptions(){\n",
       "              const appearanceAdaptionFactor = 0.5,\n",
       "                options = {\n",
       "                \"type\": state.edgeCurvature > 0.0 ? \"curvedCW\" : \"curvedCCW\",\n",
       "                \"roundness\": Math.abs(state.edgeCurvature) * appearanceAdaptionFactor,\n",
       "              };\n",
       "              return options\n",
       "            },\n",
       "\n",
       "            updateEdgeVisibility(){\n",
       "              const data = state.shownData,\n",
       "                newVisEdges = [];\n",
       "              for(let i=0; i<data.edges.length; i++){\n",
       "                const edge = data.edges[i],\n",
       "                  visEdge = state.visData.edges.get(edge.id);\n",
       "                visEdge.hidden = !state.showEdges;\n",
       "                newVisEdges.push(visEdge);\n",
       "              }\n",
       "              state.visData.edges.update(newVisEdges);\n",
       "            },\n",
       "\n",
       "            updateEdgeSizes(){\n",
       "              const data = state.shownData,\n",
       "                newVisEdges = [];\n",
       "              for (let i=0; i<data.edges.length; i++){\n",
       "                const edge = data.edges[i],\n",
       "                  newVisEdge = state.visData.edges.get(edge.id);\n",
       "                newVisEdge.width = edge.size;\n",
       "                newVisEdges.push(newVisEdge);\n",
       "              }\n",
       "              state.visData.edges.update(newVisEdges);\n",
       "            },\n",
       "\n",
       "            updateEdgeCurvatures(){\n",
       "              if(state.edgeCurvature === 0.0){\n",
       "                state.visOptions.edges.smooth = false;\n",
       "              } else {\n",
       "                state.visOptions.edges.smooth = ui.composites.graph.calculateEdgeCurvatureOptions();\n",
       "              }\n",
       "              state.visGraph.setOptions(state.visOptions);\n",
       "            },\n",
       "\n",
       "            updateEdgeHoverTooltipBehavior(){\n",
       "              /* Correct code, but there is a bug that renders null values as empty div (instead of ignoring them)\n",
       "              const data = state.shownData,\n",
       "                newVisEdges = [];\n",
       "              for(let i=0; i<data.edges.length; i++){\n",
       "                const edge = data.edges[i],\n",
       "                  visEdge = state.visData.edges.get(edge.id);\n",
       "                if(typeof(edge.hover) !== \"undefined\"){\n",
       "                  visEdge.title = state.edgeHoverTooltip ? edge.hover : null;\n",
       "                }\n",
       "                newVisEdges.push(visEdge);\n",
       "              }\n",
       "              state.visData.edges.update(newVisEdges);\n",
       "              */\n",
       "              // Workaround code\n",
       "              function cloneObject(obj){\n",
       "                return Object.assign({}, obj);\n",
       "              }\n",
       "              const data = state.shownData,\n",
       "                newVisEdges = [];\n",
       "              for(let i=0; i<data.edges.length; i++){\n",
       "                const edge = data.edges[i],\n",
       "                  visEdge = state.visData.edges.get(edge.id);\n",
       "                if(typeof(edge.hover) !== \"undefined\"){\n",
       "                  if(state.edgeHoverTooltip){\n",
       "                    visEdge.title = edge.hover;\n",
       "                    newVisEdges.push(visEdge);\n",
       "                  } else{\n",
       "                    // edges.update can only add properties, not delete them, hence use of clone/remove/add\n",
       "                    clonedEdge = cloneObject(visEdge);\n",
       "                    delete clonedEdge.title;\n",
       "                    state.visData.edges.remove(edge.id);\n",
       "                    state.visData.edges.add(clonedEdge);\n",
       "                  }\n",
       "                }\n",
       "              }\n",
       "              if(state.edgeHoverTooltip){\n",
       "                state.visData.edges.update(newVisEdges);\n",
       "              }\n",
       "            },\n",
       "\n",
       "            // Edge labels\n",
       "            updateEdgeLabels(){\n",
       "              const data = state.shownData,\n",
       "                newVisEdges = [],\n",
       "                noLabel = \" \";  // undefined, null, \"\" or deleting label property does not work\n",
       "              for(let i=0; i<data.edges.length; i++){\n",
       "                const edge = data.edges[i],\n",
       "                  visEdge = state.visData.edges.get(edge.id);\n",
       "                if(state.showEdgeLabels){\n",
       "                  visEdge.label = edge.label;\n",
       "                  visEdge.font = {\n",
       "                    size: edge.label_size,\n",
       "                    color: edge.label_color,\n",
       "                    strokeWidth: (state.showEdgeLabelBorders ? 1.2 : 0.0),\n",
       "                    strokeColor: data.general.background_color,\n",
       "                  }\n",
       "                } else {\n",
       "                  visEdge.label = noLabel;\n",
       "                }\n",
       "                newVisEdges.push(visEdge);\n",
       "              }\n",
       "              state.visData.edges.update(newVisEdges);\n",
       "            },\n",
       "\n",
       "            // Layout algorithm\n",
       "            simulationManager:{\n",
       "              start(){\n",
       "                state.visGraph.startSimulation();\n",
       "                this.setAlgorithm();\n",
       "                this.setSpringLength();\n",
       "                this.setSpringConstant();\n",
       "                this.setCentralGravity();\n",
       "                this.setGravitationalConstant();\n",
       "                this.setAvoidOverlap();\n",
       "              },\n",
       "              stop(){\n",
       "                state.visGraph.stopSimulation();\n",
       "              },\n",
       "              setActivity(on){\n",
       "                if(on){\n",
       "                  this.start();\n",
       "                } else{\n",
       "                  this.stop();\n",
       "                }\n",
       "              },\n",
       "              setAlgorithm(){\n",
       "                const name = state.layoutAlgorithm;\n",
       "                state.visOptions.physics.solver = name;\n",
       "                state.visGraph.setOptions(state.visOptions);\n",
       "                if(name === \"repulsion\"){\n",
       "                  ui.elements.avoidOverlapContainer.style.opacity = ui.convert.boolToOpacity(false);\n",
       "                  ui.elements.gravitationalConstantContainer.style.opacity = ui.convert.boolToOpacity(false);\n",
       "                } else if(name === \"hierarchicalRepulsion\"){\n",
       "                  ui.elements.avoidOverlapContainer.style.opacity = ui.convert.boolToOpacity(true);\n",
       "                  ui.elements.gravitationalConstantContainer.style.opacity = ui.convert.boolToOpacity(false);\n",
       "                } else {\n",
       "                  ui.elements.avoidOverlapContainer.style.opacity = ui.convert.boolToOpacity(true);\n",
       "                  ui.elements.gravitationalConstantContainer.style.opacity = ui.convert.boolToOpacity(true);\n",
       "                }\n",
       "              },\n",
       "              releaseFixedNodes(){\n",
       "                const data = state.shownData,\n",
       "                  newVisNodes = [];\n",
       "                for(let i=0; i<data.nodes.length; i++){\n",
       "                  const node = data.nodes[i],\n",
       "                    visNode = state.visData.nodes.get(node.id);\n",
       "                  ui.composites.graph.preventNodeJump(visNode);\n",
       "                  visNode.fixed = false;\n",
       "                  // Note: Deletion of x, y and fixed may work too, but .update does not delete props\n",
       "                  newVisNodes.push(visNode);\n",
       "                }\n",
       "                state.visData.nodes.update(newVisNodes);\n",
       "              },\n",
       "              setSpringLength(){\n",
       "                state.visOptions.physics.barnesHut.springLength = state.springLength;\n",
       "                state.visOptions.physics.forceAtlas2Based.springLength = state.springLength;\n",
       "                state.visOptions.physics.repulsion.springLength = state.springLength;\n",
       "                state.visOptions.physics.hierarchicalRepulsion.springLength = state.springLength;\n",
       "                state.visGraph.setOptions(state.visOptions);\n",
       "              },\n",
       "              setSpringConstant(){\n",
       "                state.visOptions.physics.barnesHut.springConstant = state.springConstant / 10.0;\n",
       "                state.visOptions.physics.forceAtlas2Based.springConstant = state.springConstant;\n",
       "                state.visOptions.physics.repulsion.springConstant = state.springConstant;\n",
       "                state.visOptions.physics.hierarchicalRepulsion.springConstant = state.springConstant;\n",
       "                state.visGraph.setOptions(state.visOptions);\n",
       "              },\n",
       "              setCentralGravity(){\n",
       "                state.visOptions.physics.barnesHut.centralGravity = state.centralGravity;\n",
       "                state.visOptions.physics.forceAtlas2Based.centralGravity = state.centralGravity / 100.0;\n",
       "                state.visOptions.physics.repulsion.centralGravity = state.centralGravity;\n",
       "                state.visOptions.physics.hierarchicalRepulsion.centralGravity = state.centralGravity;\n",
       "                state.visGraph.setOptions(state.visOptions);\n",
       "              },\n",
       "              setGravitationalConstant(){\n",
       "                state.visOptions.physics.barnesHut.gravitationalConstant = state.gravitationalConstant;\n",
       "                state.visOptions.physics.forceAtlas2Based.gravitationalConstant = state.gravitationalConstant / 10.0;\n",
       "                // Not a parameter in repulsion and hierarchicalRepulsion\n",
       "                state.visGraph.setOptions(state.visOptions);\n",
       "              },\n",
       "              setAvoidOverlap(){\n",
       "                state.visOptions.physics.barnesHut.avoidOverlap = state.avoidOverlap;\n",
       "                state.visOptions.physics.forceAtlas2Based.avoidOverlap = state.avoidOverlap;\n",
       "                // Not a parameter in repulsion and hierarchicalRepulsion\n",
       "                state.visGraph.setOptions(state.visOptions);\n",
       "              },\n",
       "            }\n",
       "          },\n",
       "        },\n",
       "\n",
       "        init(){\n",
       "          // Containers\n",
       "          ui.composites.responsiveContainer.init();\n",
       "          // Graph selection (only visible if multiple graphs in data)\n",
       "          if(state.rawData.length > 1){\n",
       "            ui.elements.graphSelectionContainer.style.display = ui.convert.boolToDisplayStyle(true);\n",
       "            const optionList = [],\n",
       "              valueList = [];\n",
       "            let label;\n",
       "            for(let i=0; i<state.rawData.length; i++){\n",
       "              const graph = state.rawData[i];\n",
       "              try{\n",
       "                label = String(graph.label);\n",
       "                if(label === \"undefined\" || label === \"\"){\n",
       "                  throw \"Invalid label\";\n",
       "                }\n",
       "              } catch(e){\n",
       "                label = \"Unnamed graph\";\n",
       "              }\n",
       "              const name = String(i+1) + \": \" + label;\n",
       "              optionList.push(name);\n",
       "              valueList.push(String(i));\n",
       "            }\n",
       "            ui.composites.selection(ui.elements.graphSelection, optionList, valueList);\n",
       "          }\n",
       "          // General (menu item)\n",
       "          ui.composites.menu.setItem(ui.elements.generalHead, ui.elements.generalBody, true);\n",
       "          // Data selection (menu item)\n",
       "          ui.composites.menu.setItem(ui.elements.dataHead, ui.elements.dataBody, false);\n",
       "          // - Node size\n",
       "          ui.elements.nodeSizeNormalizationCheckbox.checked = state.useNodeSizeNormalization;\n",
       "          ui.elements.nodeSizeNormalizationContainer.style.display = ui.convert.boolToDisplayStyle(state.useNodeSizeNormalization);\n",
       "          ui.elements.nodeSizeNormalizationMinText.innerHTML = ui.convert.numberToText(state.nodeSizeNormalizationMin);\n",
       "          ui.elements.nodeSizeNormalizationMinSlider.value = state.nodeSizeNormalizationMin;\n",
       "          ui.elements.nodeSizeNormalizationMaxText.innerHTML = ui.convert.numberToText(state.nodeSizeNormalizationMax);\n",
       "          ui.elements.nodeSizeNormalizationMaxSlider.value = state.nodeSizeNormalizationMax;\n",
       "          // - Edge size\n",
       "          ui.elements.edgeSizeNormalizationCheckbox.checked = state.useEdgeSizeNormalization;\n",
       "          ui.elements.edgeSizeNormalizationContainer.style.display = ui.convert.boolToDisplayStyle(state.useEdgeSizeNormalization);\n",
       "          ui.elements.edgeSizeNormalizationMinText.innerHTML = ui.convert.numberToText(state.edgeSizeNormalizationMin);\n",
       "          ui.elements.edgeSizeNormalizationMinSlider.value = state.edgeSizeNormalizationMin;\n",
       "          ui.elements.edgeSizeNormalizationMaxText.innerHTML = ui.convert.numberToText(state.edgeSizeNormalizationMax);\n",
       "          ui.elements.edgeSizeNormalizationMaxSlider.value = state.edgeSizeNormalizationMax;\n",
       "          // Nodes\n",
       "          ui.composites.menu.setItem(ui.elements.nodeHead, ui.elements.nodeBody, false);\n",
       "          ui.elements.nodeCheckbox.checked = state.showNodes;\n",
       "          ui.elements.nodeSizeFactorText.innerHTML = ui.convert.numberToText(state.nodeSizeFactor);\n",
       "          ui.elements.nodeSizeFactorSlider.value = state.nodeSizeFactor;\n",
       "          ui.elements.nodeDragFixCheckbox.checked = state.nodeDragFix;\n",
       "          ui.elements.nodeHoverNeighborhoodCheckbox.checked = state.nodeHoverNeighborhood;\n",
       "          ui.elements.nodeHoverTooltipCheckbox.checked = state.nodeHoverTooltip;\n",
       "          // Node images\n",
       "          ui.composites.menu.setItem(ui.elements.nodeImageHead, ui.elements.nodeImageBody, false);\n",
       "          ui.elements.nodeImageMetaControl.style.display = false;\n",
       "          ui.elements.nodeImageCheckbox.checked = state.showNodeImages;\n",
       "          ui.elements.nodeImageSizeFactorText.innerHTML = ui.convert.numberToText(state.nodeImageSizeFactor);\n",
       "          ui.elements.nodeImageSizeFactorSlider.value = state.nodeImageSizeFactor;\n",
       "          // Node labels\n",
       "          ui.composites.menu.setItem(ui.elements.nodeLabelHead, ui.elements.nodeLabelBody, false);\n",
       "          ui.elements.nodeLabelCheckbox.checked = state.showNodeLabels;\n",
       "          ui.elements.nodeLabelBorderCheckbox.checked = state.showNodeLabelBorders;\n",
       "          ui.elements.nodeLabelSizeFactorText.innerHTML = ui.convert.numberToText(state.nodeLabelSizeFactor);\n",
       "          ui.elements.nodeLabelSizeFactorSlider.value = state.nodeLabelSizeFactor;\n",
       "          ui.elements.nodeLabelRotationText.innerHTML = ui.convert.numberToText(state.nodeLabelRotation);\n",
       "          ui.elements.nodeLabelRotationSlider.value = state.nodeLabelRotation;\n",
       "          // Edges\n",
       "          ui.composites.menu.setItem(ui.elements.edgeHead, ui.elements.edgeBody, false);\n",
       "          ui.elements.edgeCheckbox.checked = state.showEdges;\n",
       "          ui.elements.edgeSizeFactorText.innerHTML = ui.convert.numberToText(state.edgeSizeFactor);\n",
       "          ui.elements.edgeSizeFactorSlider.value = state.edgeSizeFactor;\n",
       "          ui.elements.edgeCurvatureText.innerHTML = ui.convert.numberToText(state.edgeCurvature);\n",
       "          ui.elements.edgeCurvatureSlider.value = state.edgeCurvature;\n",
       "          ui.elements.edgeHoverTooltipCheckbox.checked = state.edgeHoverTooltip;\n",
       "          // Edge labels\n",
       "          ui.composites.menu.setItem(ui.elements.edgeLabelHead, ui.elements.edgeLabelBody, false);\n",
       "          ui.elements.edgeLabelCheckbox.checked = state.showEdgeLabels;\n",
       "          ui.elements.edgeLabelBorderCheckbox.checked = state.showEdgeLabelBorders;\n",
       "          ui.elements.edgeLabelSizeFactorText.innerHTML = ui.convert.numberToText(state.edgeLabelSizeFactor);\n",
       "          ui.elements.edgeLabelSizeFactorSlider.value = state.edgeLabelSizeFactor;\n",
       "          ui.elements.edgeLabelRotationText.innerHTML = ui.convert.numberToText(state.edgeLabelRotation);\n",
       "          ui.elements.edgeLabelRotationSlider.value = state.edgeLabelRotation;\n",
       "          // Layout algorithm\n",
       "          ui.composites.menu.setItem(ui.elements.layoutAlgorithmHead, ui.elements.layoutAlgorithmBody, false);\n",
       "          ui.elements.simulationCheckbox.checked = state.layoutAlgorithmActive;\n",
       "          ui.elements.layoutAlgorithmSelection.value = state.layoutAlgorithm;\n",
       "          ui.elements.centralGravitySlider.value = state.centralGravity;\n",
       "          ui.elements.centralGravityText.innerHTML = ui.convert.numberToText(state.centralGravity);\n",
       "          ui.elements.springLengthSlider.value = state.springLength;\n",
       "          ui.elements.springLengthText.innerHTML = ui.convert.numberToText(state.springLength);\n",
       "          ui.elements.springConstantSlider.value = state.springConstant;\n",
       "          ui.elements.springConstantText.innerHTML = ui.convert.numberToText(state.springConstant);\n",
       "          ui.elements.gravitationalConstantSlider.value = state.gravitationalConstant;\n",
       "          ui.elements.gravitationalConstantText.innerHTML = ui.convert.numberToText(state.gravitationalConstant);\n",
       "          ui.elements.avoidOverlapSlider.value = state.avoidOverlap;\n",
       "          ui.elements.avoidOverlapText.innerHTML = ui.convert.numberToText(state.avoidOverlap);\n",
       "\n",
       "          ui.initSelectionValues();\n",
       "        },\n",
       "\n",
       "        initSelectionValues(){\n",
       "          function setSelectionOptionsAndValue(element, options, value, values=null){\n",
       "            if(values === null){\n",
       "              values = options;\n",
       "            }\n",
       "            if(!values.includes(value)){\n",
       "              value = values[0];\n",
       "            }\n",
       "            ui.composites.selection(element, options, values);\n",
       "            element.value = value;\n",
       "          }\n",
       "          // Node label text data source\n",
       "          setSelectionOptionsAndValue(\n",
       "            ui.elements.nodeLabelTextDataSourceSelect,\n",
       "            state.parsedData.general.node_properties.node_label_text_data_sources,\n",
       "            state.nodeLabelTextDataSource,\n",
       "          );\n",
       "          // Edge label text data source\n",
       "          setSelectionOptionsAndValue(\n",
       "            ui.elements.edgeLabelTextDataSourceSelect,\n",
       "            state.parsedData.general.edge_properties.edge_label_text_data_sources,\n",
       "            state.edgeLabelTextDataSource,\n",
       "          );\n",
       "          // Node size data source\n",
       "          setSelectionOptionsAndValue(\n",
       "            ui.elements.nodeSizeDataSourceSelect,\n",
       "            state.parsedData.general.node_properties.node_size_data_sources,\n",
       "            state.nodeSizeDataSource,\n",
       "          );\n",
       "          // Edge size data source\n",
       "          setSelectionOptionsAndValue(\n",
       "            ui.elements.edgeSizeDataSourceSelect,\n",
       "            state.parsedData.general.edge_properties.edge_size_data_sources,\n",
       "            state.edgeSizeDataSource,\n",
       "          );\n",
       "          // Layout algorithm\n",
       "          setSelectionOptionsAndValue(\n",
       "            ui.elements.layoutAlgorithmSelection,\n",
       "            [\"Barnes-Hut\", \"Force Atlas 2\", \"Repulsion\", \"Hierarchical repulsion\"],\n",
       "            state.layoutAlgorithm,\n",
       "            [\"barnesHut\", \"forceAtlas2Based\", \"repulsion\", \"hierarchicalRepulsion\"],\n",
       "          );\n",
       "        },\n",
       "\n",
       "        deleteChildElements(element){\n",
       "          while(element.firstChild){\n",
       "            // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management\n",
       "            // As of 2019, it is not possible to explicitly or programmatically trigger\n",
       "            // garbage collection in JavaScript.\n",
       "            element.removeChild(element.firstChild);\n",
       "          }\n",
       "        },\n",
       "\n",
       "        convert:{\n",
       "          numberToText(number, numDigits=2) {\n",
       "            return String(Number(number).toFixed(numDigits));\n",
       "          },\n",
       "\n",
       "          boolToDisplayStyle(isVisible){\n",
       "            if(isVisible){\n",
       "              return \"block\";\n",
       "            }\n",
       "            return \"none\";\n",
       "          },\n",
       "\n",
       "          boolToOpacity(isActive){\n",
       "            if(isActive){\n",
       "              return 1.0;\n",
       "            }\n",
       "            return 0.25;\n",
       "          },\n",
       "\n",
       "          boolToTooltipDelay(isActive){\n",
       "            if(isActive){\n",
       "              return 0;\n",
       "            }\n",
       "            return 100000000;\n",
       "          },\n",
       "        },\n",
       "\n",
       "        setBehavior(){\n",
       "          // Window resize (includes ctrl+wheel zoom, landscape/portrait orientation on phones)\n",
       "          window.onresize = function(){\n",
       "            ui.composites.responsiveContainer.adaptToResize();\n",
       "            ui.composites.graph.updateGraphDrawingArea();\n",
       "          }\n",
       "          // Container resize\n",
       "          ui.elements.graphContainer.onmouseup = function(){\n",
       "            const currentHeight = parseInt(ui.elements.graphContainer.clientHeight);\n",
       "            if(currentHeight != state.graphContainerHeight){\n",
       "              ui.composites.responsiveContainer.adaptToResize();\n",
       "              ui.composites.graph.updateGraphDrawingArea();\n",
       "            }\n",
       "          };\n",
       "          ui.elements.detailsContainer.onmouseup = function(){\n",
       "            const currentHeight = parseInt(ui.elements.detailsContainer.clientHeight);\n",
       "            if(currentHeight != state.detailsContainerHeight){\n",
       "              ui.composites.responsiveContainer.adaptToResize();\n",
       "            }\n",
       "          };\n",
       "          // Tooltip\n",
       "          ui.elements.tooltipContainer.onmouseover = function(){\n",
       "            ui.composites.tooltip.show();\n",
       "          }\n",
       "          ui.elements.tooltipContainer.onmouseout = function(){\n",
       "            ui.composites.tooltip.hide();\n",
       "          }\n",
       "          // General menu\n",
       "          ui.elements.generalHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.generalHead, ui.elements.generalBody);\n",
       "          };\n",
       "          ui.elements.resetButton.onclick = function(){\n",
       "            app.restart();\n",
       "          };\n",
       "          ui.elements.fullscreenButton.onclick = function(){\n",
       "            if(document.fullscreenElement){\n",
       "              document.exitFullscreen();\n",
       "            } else{\n",
       "              ui.elements.mainContainer.requestFullscreen()\n",
       "                .catch(function(err){\n",
       "                  alert(\"Error attempting to enable full-screen mode: \" + err.message);\n",
       "                });\n",
       "            }\n",
       "          };\n",
       "          ui.elements.mainContainer.onfullscreenchange = function(){\n",
       "            if(document.fullscreenElement){\n",
       "              ui.elements.fullscreenButton.innerText = \"Exit full screen\";\n",
       "            } else{\n",
       "              ui.elements.fullscreenButton.innerText = \"Enter full screen\";\n",
       "            }\n",
       "            // Wait for browser to switch to fullscreen and resize divs, then adapt to new sizes\n",
       "            setTimeout(function(){\n",
       "              ui.composites.responsiveContainer.adaptToFullscreen();\n",
       "              ui.composites.graph.updateGraphDrawingArea();\n",
       "            }, 250);\n",
       "          };\n",
       "          ui.elements.pngExportButton.onclick = function(){\n",
       "            ui.composites.download.png(\"graph.png\");\n",
       "          };\n",
       "          ui.elements.jpgExportButton.onclick = function(){\n",
       "            ui.composites.download.jpg(\"graph.jpg\");\n",
       "          };\n",
       "          // Data menu\n",
       "          ui.elements.dataHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.dataHead, ui.elements.dataBody);\n",
       "          };\n",
       "          // - Graph selection\n",
       "          ui.elements.graphSelection.onchange = function(){\n",
       "            const chosenGraphIndex = parseInt(this.value);\n",
       "            state.manager.parseChosenData(chosenGraphIndex);\n",
       "            state.manager.prepareShownData();\n",
       "            ui.initSelectionValues();\n",
       "            ui.composites.graph.createGraph();\n",
       "          };\n",
       "          // - Node label text\n",
       "          ui.elements.nodeLabelTextDataSourceSelect.onchange = function(){\n",
       "            state.nodeLabelTextDataSource = this.value;\n",
       "            state.manager.updateNodeLabelTexts();\n",
       "          };\n",
       "          // - Edge label text\n",
       "          ui.elements.edgeLabelTextDataSourceSelect.onchange = function(){\n",
       "            state.edgeLabelTextDataSource = this.value;\n",
       "            state.manager.updateEdgeLabelTexts();\n",
       "          };\n",
       "          // - Node size\n",
       "          ui.elements.nodeSizeDataSourceSelect.onchange = function(){\n",
       "            state.nodeSizeDataSource = this.value;\n",
       "            state.manager.updateNodeSizes();\n",
       "          };\n",
       "          ui.elements.nodeSizeNormalizationCheckbox.onchange = function(){\n",
       "            state.useNodeSizeNormalization = this.checked;\n",
       "            ui.elements.nodeSizeNormalizationContainer.style.display = ui.convert.boolToDisplayStyle(state.useNodeSizeNormalization);\n",
       "            state.manager.updateNodeSizes();\n",
       "          };\n",
       "          ui.elements.nodeSizeNormalizationMinSlider.oninput = function(){\n",
       "            ui.elements.nodeSizeNormalizationMinText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.nodeSizeNormalizationMinSlider.onchange = function(){\n",
       "            state.nodeSizeNormalizationMin = parseFloat(this.value);\n",
       "            if(state.nodeSizeNormalizationMin > state.nodeSizeNormalizationMax){\n",
       "              state.nodeSizeNormalizationMax = state.nodeSizeNormalizationMin;\n",
       "              ui.elements.nodeSizeNormalizationMaxSlider.value = state.nodeSizeNormalizationMax;\n",
       "              ui.elements.nodeSizeNormalizationMaxText.innerHTML = ui.convert.numberToText(state.nodeSizeNormalizationMax);\n",
       "            }\n",
       "            state.manager.updateNodeSizes();\n",
       "          };\n",
       "          ui.elements.nodeSizeNormalizationMaxSlider.oninput = function(){\n",
       "            ui.elements.nodeSizeNormalizationMaxText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.nodeSizeNormalizationMaxSlider.onchange = function(){\n",
       "            state.nodeSizeNormalizationMax = parseFloat(this.value);\n",
       "            if(state.nodeSizeNormalizationMax < state.nodeSizeNormalizationMin){\n",
       "              state.nodeSizeNormalizationMin = state.nodeSizeNormalizationMax;\n",
       "              ui.elements.nodeSizeNormalizationMinSlider.value = state.nodeSizeNormalizationMin;\n",
       "              ui.elements.nodeSizeNormalizationMinText.innerHTML = ui.convert.numberToText(state.nodeSizeNormalizationMin);\n",
       "            }\n",
       "            state.manager.updateNodeSizes();\n",
       "          };\n",
       "          // - Edge size\n",
       "          ui.elements.edgeSizeDataSourceSelect.onchange = function(){\n",
       "            state.edgeSizeDataSource = this.value;\n",
       "            state.manager.updateEdgeSizes();\n",
       "          };\n",
       "          ui.elements.edgeSizeNormalizationCheckbox.onchange = function(){\n",
       "            state.useEdgeSizeNormalization = this.checked;\n",
       "            ui.elements.edgeSizeNormalizationContainer.style.display = ui.convert.boolToDisplayStyle(state.useEdgeSizeNormalization);\n",
       "            state.manager.updateEdgeSizes();\n",
       "          };\n",
       "          ui.elements.edgeSizeNormalizationMinSlider.oninput = function(){\n",
       "            ui.elements.edgeSizeNormalizationMinText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.edgeSizeNormalizationMinSlider.onchange = function(){\n",
       "            state.edgeSizeNormalizationMin = parseFloat(this.value);\n",
       "            if(state.edgeSizeNormalizationMin > state.edgeSizeNormalizationMax){\n",
       "              state.edgeSizeNormalizationMax = state.edgeSizeNormalizationMin;\n",
       "              ui.elements.edgeSizeNormalizationMaxSlider.value = state.edgeSizeNormalizationMax;\n",
       "              ui.elements.edgeSizeNormalizationMaxText.innerHTML = ui.convert.numberToText(state.edgeSizeNormalizationMax);\n",
       "            }\n",
       "            state.manager.updateEdgeSizes();\n",
       "          };\n",
       "          ui.elements.edgeSizeNormalizationMaxSlider.oninput = function(){\n",
       "            ui.elements.edgeSizeNormalizationMaxText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.edgeSizeNormalizationMaxSlider.onchange = function(){\n",
       "            state.edgeSizeNormalizationMax = parseFloat(this.value);\n",
       "            if(state.edgeSizeNormalizationMax < state.edgeSizeNormalizationMin){\n",
       "              state.edgeSizeNormalizationMin = state.edgeSizeNormalizationMax;\n",
       "              ui.elements.edgeSizeNormalizationMinSlider.value = state.edgeSizeNormalizationMin;\n",
       "              ui.elements.edgeSizeNormalizationMinText.innerHTML = ui.convert.numberToText(state.edgeSizeNormalizationMin);\n",
       "            }\n",
       "            state.manager.updateEdgeSizes();\n",
       "          };\n",
       "          // Nodes menu\n",
       "          ui.elements.nodeHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.nodeHead, ui.elements.nodeBody);\n",
       "          };\n",
       "          ui.elements.nodeCheckbox.onchange = function(){\n",
       "            state.showNodes = this.checked;\n",
       "            ui.composites.graph.updateNodeVisibilities();\n",
       "          };\n",
       "          ui.elements.nodeSizeFactorSlider.oninput = function(){\n",
       "            ui.elements.nodeSizeFactorText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.nodeSizeFactorSlider.onchange = function(){\n",
       "            state.nodeSizeFactor = parseFloat(this.value);\n",
       "            state.manager.updateNodeSizes();\n",
       "          };\n",
       "          ui.elements.nodeDragFixCheckbox.onchange = function(){\n",
       "            state.nodeDragFix = this.checked;\n",
       "          };\n",
       "          ui.elements.nodeHoverNeighborhoodCheckbox.onchange = function(){\n",
       "            state.nodeHoverNeighborhood = this.checked;\n",
       "            ui.composites.graph.updateNodeHoverNeighborhoodBehavior();\n",
       "          };\n",
       "          ui.elements.nodeHoverTooltipCheckbox.onchange = function(){\n",
       "            state.nodeHoverTooltip = this.checked;\n",
       "            ui.composites.graph.updateNodeHoverTooltipBehavior();\n",
       "          };\n",
       "          ui.elements.nodeReleaseButton.onclick = function(){\n",
       "            ui.composites.graph.simulationManager.releaseFixedNodes();\n",
       "          };\n",
       "          // Node images menu\n",
       "          ui.elements.nodeImageHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.nodeImageHead, ui.elements.nodeImageBody);\n",
       "          };\n",
       "          ui.elements.nodeImageCheckbox.onchange = function(){\n",
       "            state.showNodeImages = this.checked;\n",
       "            state.manager.updateNodeImages();\n",
       "          };\n",
       "          ui.elements.nodeImageSizeFactorSlider.oninput = function(){\n",
       "            ui.elements.nodeImageSizeFactorText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.nodeImageSizeFactorSlider.onchange = function(){\n",
       "            state.nodeImageSizeFactor = parseFloat(this.value);\n",
       "            state.manager.updateNodeImages();\n",
       "          };\n",
       "          // Node labels menu\n",
       "          ui.elements.nodeLabelHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.nodeLabelHead, ui.elements.nodeLabelBody);\n",
       "          };\n",
       "          ui.elements.nodeLabelCheckbox.onchange = function(){\n",
       "            state.showNodeLabels = this.checked;\n",
       "            ui.composites.graph.updateNodeLabels();\n",
       "          };\n",
       "          ui.elements.nodeLabelBorderCheckbox.onchange = function(){\n",
       "            state.showNodeLabelBorders = this.checked;\n",
       "            ui.composites.graph.updateNodeLabels();\n",
       "          };\n",
       "          ui.elements.nodeLabelSizeFactorSlider.oninput = function(){\n",
       "            ui.elements.nodeLabelSizeFactorText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.nodeLabelSizeFactorSlider.onchange = function(){\n",
       "            state.nodeLabelSizeFactor = parseFloat(this.value);\n",
       "            state.manager.updateNodeLabelSizes();\n",
       "          };\n",
       "          // Edges menu\n",
       "          ui.elements.edgeHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.edgeHead, ui.elements.edgeBody);\n",
       "          };\n",
       "          ui.elements.edgeCheckbox.onchange = function(){\n",
       "            state.showEdges = this.checked;\n",
       "            ui.composites.graph.updateEdgeVisibility();\n",
       "          };\n",
       "          ui.elements.edgeSizeFactorSlider.oninput = function(){\n",
       "            ui.elements.edgeSizeFactorText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.edgeSizeFactorSlider.onchange = function(){\n",
       "            state.edgeSizeFactor = parseFloat(this.value);\n",
       "            state.manager.updateEdgeSizes();\n",
       "          };\n",
       "          ui.elements.edgeCurvatureSlider.oninput = function(){\n",
       "            ui.elements.edgeCurvatureText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.edgeCurvatureSlider.onchange = function(){\n",
       "            state.edgeCurvature = parseFloat(this.value);\n",
       "            state.manager.updateEdgeCurvatures();\n",
       "          };\n",
       "          ui.elements.edgeHoverTooltipCheckbox.onchange = function(){\n",
       "            state.edgeHoverTooltip = this.checked;\n",
       "            ui.composites.graph.updateEdgeHoverTooltipBehavior();\n",
       "          };\n",
       "          // Edge labels menu\n",
       "          ui.elements.edgeLabelHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.edgeLabelHead, ui.elements.edgeLabelBody);\n",
       "          };\n",
       "          ui.elements.edgeLabelCheckbox.onchange = function(){\n",
       "            state.showEdgeLabels = this.checked;\n",
       "            ui.composites.graph.updateEdgeLabels();\n",
       "          };\n",
       "          ui.elements.edgeLabelBorderCheckbox.onchange = function(){\n",
       "            state.showEdgeLabelBorders = this.checked;\n",
       "            ui.composites.graph.updateEdgeLabels();\n",
       "          };\n",
       "          ui.elements.edgeLabelSizeFactorSlider.oninput = function(){\n",
       "            ui.elements.edgeLabelSizeFactorText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.edgeLabelSizeFactorSlider.onchange = function(){\n",
       "            state.edgeLabelSizeFactor = parseFloat(this.value);\n",
       "            state.manager.updateEdgeLabelSizes();\n",
       "          };\n",
       "          // Layout algorithm menu\n",
       "          ui.elements.layoutAlgorithmHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.layoutAlgorithmHead, ui.elements.layoutAlgorithmBody);\n",
       "          };\n",
       "          ui.elements.simulationCheckbox.onchange = function(){\n",
       "            state.layoutAlgorithmActive = !state.layoutAlgorithmActive;\n",
       "            ui.composites.graph.simulationManager.setActivity(state.layoutAlgorithmActive);\n",
       "          };\n",
       "          ui.elements.layoutAlgorithmSelection.onchange = function(){\n",
       "            state.layoutAlgorithm = this.value;\n",
       "            ui.composites.graph.simulationManager.setAlgorithm();\n",
       "          };\n",
       "          ui.elements.centralGravitySlider.oninput = function(){\n",
       "            ui.elements.centralGravityText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.centralGravitySlider.onchange = function(){\n",
       "            state.centralGravity = parseFloat(this.value);\n",
       "            ui.composites.graph.simulationManager.setCentralGravity();\n",
       "          };\n",
       "          ui.elements.springLengthSlider.oninput = function(){\n",
       "            ui.elements.springLengthText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.springLengthSlider.onchange = function(){\n",
       "            state.springLength = parseFloat(this.value);\n",
       "            ui.composites.graph.simulationManager.setSpringLength();\n",
       "          };\n",
       "          ui.elements.springConstantSlider.oninput = function(){\n",
       "            ui.elements.springConstantText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.springConstantSlider.onchange = function(){\n",
       "            state.springConstant = parseFloat(this.value);\n",
       "            ui.composites.graph.simulationManager.setSpringConstant();\n",
       "          };\n",
       "          ui.elements.gravitationalConstantSlider.oninput = function(){\n",
       "            ui.elements.gravitationalConstantText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.gravitationalConstantSlider.onchange = function(){\n",
       "            state.gravitationalConstant = parseFloat(this.value);\n",
       "            ui.composites.graph.simulationManager.setGravitationalConstant();\n",
       "          };\n",
       "          ui.elements.avoidOverlapSlider.oninput = function(){\n",
       "            ui.elements.avoidOverlapText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.avoidOverlapSlider.onchange = function(){\n",
       "            state.avoidOverlap = parseFloat(this.value);\n",
       "            ui.composites.graph.simulationManager.setAvoidOverlap();\n",
       "          };\n",
       "        },\n",
       "      }\n",
       "\n",
       "      const app = {\n",
       "        start(){\n",
       "          state.manager.fetchRawDataFromTemplating();\n",
       "          state.manager.parseChosenData(0);\n",
       "          state.manager.prepareShownData();\n",
       "          ui.init();\n",
       "          // Wait a bit to finish UI rendering, then start potentially slow layout computation\n",
       "          setTimeout(function(){\n",
       "            ui.composites.graph.createGraph();\n",
       "            ui.setBehavior();\n",
       "          }, 400);\n",
       "          // Reduce risk of getting stuck with a wrong drawing area size\n",
       "          function checkIfSizeUpdateRequired(){\n",
       "            if(ui.elements.graphContainer.clientWidth != state.graphContainerWidth){\n",
       "              ui.composites.responsiveContainer.adaptToResize();\n",
       "              ui.composites.graph.updateGraphDrawingArea();\n",
       "            }\n",
       "          }\n",
       "          [1, 2, 5, 8, 12, 15, 20, 25, 30, 35, 40, 45, 50, 60, 90].forEach(function(delay){\n",
       "            setTimeout(checkIfSizeUpdateRequired, delay*1000);\n",
       "          })\n",
       "        },\n",
       "\n",
       "        restart(){\n",
       "          app.start();\n",
       "        },\n",
       "      }\n",
       "\n",
       "      // Start website dynamics\n",
       "      app.start();\n",
       "    });\n",
       "  </script>\n",
       "\n"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "control_graph = Graph(model)\n",
    "Node, Edge = control_graph.Node, control_graph.Edge\n",
    "Node.extend(LegalEntity, label = LegalEntity.name)\n",
    "\n",
    "# Assign `value` to every node of the graph having some ownership of the FI of interest\n",
    "with model.rule():\n",
    "    fi = FinancialInstitution(name = bank_name)\n",
    "    to = TotalOwnership(asset = fi)\n",
    "    Node(to.owner).set(value = to.part)\n",
    "    Node(fi).set(value = 1.0, focus = 'target')\n",
    "\n",
    "with model.rule():\n",
    "    p = Person()\n",
    "    Edge.add(Node(p.family), Node(p), kind = 'in family')\n",
    "\n",
    "with model.rule():\n",
    "    p = Person()\n",
    "    Edge(Node(p), Node(p.isCeoAt)).set( kind = 'ceo')\n",
    "\n",
    "with model.rule():\n",
    "    p = Person(name = person_name)\n",
    "    Node(p).set(focus = 'target')\n",
    "    Node(p.family).set(focus = 'target')\n",
    "\n",
    "with model.rule():\n",
    "    p = Person(name = person_name)\n",
    "    c = Control(controller = p.family)\n",
    "    c.controlled != p\n",
    "    Node(c.controlled).set(focus=\"controlled\")\n",
    "    with TotalOwnership(owner = c.controlled, asset=FinancialInstitution(name=bank_name)):\n",
    "        Edge.add(c.controller, c.controlled)\n",
    "\n",
    "with model.rule():\n",
    "    n = Node(focus = \"controlled\")\n",
    "    n == LegalEntity(Company|FinancialInstitution)\n",
    "    fi = FinancialInstitution(name = bank_name)\n",
    "    TotalOwnership(owner = n, asset = fi)\n",
    "    c = Control(controller = n)\n",
    "    TotalOwnership(owner = c.controlled, asset = fi)\n",
    "    Edge.add(n, c.controlled)\n",
    "\n",
    "with model.rule():\n",
    "    n = Node(focus = \"controlled\")\n",
    "    n == LegalEntity(Company|FinancialInstitution)\n",
    "    fi = FinancialInstitution(name = bank_name)\n",
    "    Control(controller = n, controlled = fi)\n",
    "    Edge.add(n, fi)\n",
    "\n",
    "with model.rule():\n",
    "    e = Edge()\n",
    "    Control(controller = e.from_, controlled = e.to).reason == 1\n",
    "    e.set(kind = \"direct control\")\n",
    "\n",
    "control_graph.visualize(three=False, show_edge_label=True,\n",
    "    style={\n",
    "        \"node\": {\n",
    "            \"color\": lambda n : '#f07f65' if n.get('focus') == 'target' else '#edb551' if n.get('focus')=='controlled' else '#92979c',\n",
    "            \"size\": lambda n: n.get(\"value\")**(1/2) * 50 if n.get(\"value\") else 10\n",
    "        },\n",
    "        \"edge\": {\n",
    "            \"color\": lambda e: \"#f07f65\" if e.get('kind') == 'direct control' else '#edb551',\n",
    "            \"label\": lambda e: \"family member\" if e.get(\"kind\") == \"in family\" else \"CEO at\" if e.get(\"kind\") == \"ceo\" else '',\n",
    "            \"size\": 2\n",
    "        }\n",
    "    }).display(inline=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "source": [
    "## Writing results back to Snowflake\n",
    "\n",
    "As a final step, we want to provide a way to get the result of our analysis from Snowflake, where we are getting the data from. In order to do that, we create a stored procedure, which returns all of the `Control` relationships identified."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": [
     "hide-input"
    ]
   },
   "outputs": [],
   "source": [
    "@model.export(\"rai_demo.aml\")\n",
    "def detect_control() -> Tuple[str, str]:\n",
    "    ctrl = Control()\n",
    "    return ctrl.controller.name, ctrl.controlled.name"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "source": [
    "> **Note**. Using `@model.export()` we create a stored procedure called `detect_control` in the `rai_demo` database, `aml` schema. We can now execute it right here using `model.resources._exec()`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {
    "editable": true,
    "scrolled": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>controller</th>\n",
       "      <th>controlled</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>MyBank</td>\n",
       "      <td>NovaCore Innovations</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>MyBank</td>\n",
       "      <td>InfinityForge Technologies</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>MyBank</td>\n",
       "      <td>PhoenixRise Ventures</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>MyBank</td>\n",
       "      <td>NebulaTech Solutions</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>MyBank</td>\n",
       "      <td>CyberNexus Systems</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>MyBank</td>\n",
       "      <td>ACME Bank</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>MyBank</td>\n",
       "      <td>StellarSphere Enterprises</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>MyBank</td>\n",
       "      <td>CelestialWave Industries</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>Family Doe</td>\n",
       "      <td>Tom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>Family Doe</td>\n",
       "      <td>MyBank</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>Family Doe</td>\n",
       "      <td>NovaCore Innovations</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>Family Doe</td>\n",
       "      <td>InfinityForge Technologies</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>Family Doe</td>\n",
       "      <td>PhoenixRise Ventures</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>Family Doe</td>\n",
       "      <td>People Bank</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>Family Doe</td>\n",
       "      <td>NebulaTech Solutions</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>Family Doe</td>\n",
       "      <td>CyberNexus Systems</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>Family Doe</td>\n",
       "      <td>ACME Bank</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>Family Doe</td>\n",
       "      <td>Mary</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>Family Doe</td>\n",
       "      <td>StellarSphere Enterprises</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>Family Doe</td>\n",
       "      <td>CelestialWave Industries</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>Family Doe</td>\n",
       "      <td>Anna</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>Family Doe</td>\n",
       "      <td>ACME Trust</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>Family Doe</td>\n",
       "      <td>Bob</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>PhoenixRise Ventures</td>\n",
       "      <td>NovaCore Innovations</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24</th>\n",
       "      <td>People Bank</td>\n",
       "      <td>ACME Trust</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25</th>\n",
       "      <td>StellarSphere Enterprises</td>\n",
       "      <td>NovaCore Innovations</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26</th>\n",
       "      <td>StellarSphere Enterprises</td>\n",
       "      <td>PhoenixRise Ventures</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>27</th>\n",
       "      <td>StellarSphere Enterprises</td>\n",
       "      <td>CyberNexus Systems</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>28</th>\n",
       "      <td>StellarSphere Enterprises</td>\n",
       "      <td>ACME Bank</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>29</th>\n",
       "      <td>StellarSphere Enterprises</td>\n",
       "      <td>CelestialWave Industries</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>30</th>\n",
       "      <td>Bob</td>\n",
       "      <td>MyBank</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>31</th>\n",
       "      <td>Bob</td>\n",
       "      <td>NovaCore Innovations</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>32</th>\n",
       "      <td>Bob</td>\n",
       "      <td>InfinityForge Technologies</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>33</th>\n",
       "      <td>Bob</td>\n",
       "      <td>PhoenixRise Ventures</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>34</th>\n",
       "      <td>Bob</td>\n",
       "      <td>People Bank</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>35</th>\n",
       "      <td>Bob</td>\n",
       "      <td>NebulaTech Solutions</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>36</th>\n",
       "      <td>Bob</td>\n",
       "      <td>CyberNexus Systems</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>37</th>\n",
       "      <td>Bob</td>\n",
       "      <td>ACME Bank</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>38</th>\n",
       "      <td>Bob</td>\n",
       "      <td>StellarSphere Enterprises</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>39</th>\n",
       "      <td>Bob</td>\n",
       "      <td>CelestialWave Industries</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>40</th>\n",
       "      <td>Bob</td>\n",
       "      <td>ACME Trust</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   controller                  controlled\n",
       "0                      MyBank        NovaCore Innovations\n",
       "1                      MyBank  InfinityForge Technologies\n",
       "2                      MyBank        PhoenixRise Ventures\n",
       "3                      MyBank        NebulaTech Solutions\n",
       "4                      MyBank          CyberNexus Systems\n",
       "5                      MyBank                   ACME Bank\n",
       "6                      MyBank   StellarSphere Enterprises\n",
       "7                      MyBank    CelestialWave Industries\n",
       "8                  Family Doe                         Tom\n",
       "9                  Family Doe                      MyBank\n",
       "10                 Family Doe        NovaCore Innovations\n",
       "11                 Family Doe  InfinityForge Technologies\n",
       "12                 Family Doe        PhoenixRise Ventures\n",
       "13                 Family Doe                 People Bank\n",
       "14                 Family Doe        NebulaTech Solutions\n",
       "15                 Family Doe          CyberNexus Systems\n",
       "16                 Family Doe                   ACME Bank\n",
       "17                 Family Doe                        Mary\n",
       "18                 Family Doe   StellarSphere Enterprises\n",
       "19                 Family Doe    CelestialWave Industries\n",
       "20                 Family Doe                        Anna\n",
       "21                 Family Doe                  ACME Trust\n",
       "22                 Family Doe                         Bob\n",
       "23       PhoenixRise Ventures        NovaCore Innovations\n",
       "24                People Bank                  ACME Trust\n",
       "25  StellarSphere Enterprises        NovaCore Innovations\n",
       "26  StellarSphere Enterprises        PhoenixRise Ventures\n",
       "27  StellarSphere Enterprises          CyberNexus Systems\n",
       "28  StellarSphere Enterprises                   ACME Bank\n",
       "29  StellarSphere Enterprises    CelestialWave Industries\n",
       "30                        Bob                      MyBank\n",
       "31                        Bob        NovaCore Innovations\n",
       "32                        Bob  InfinityForge Technologies\n",
       "33                        Bob        PhoenixRise Ventures\n",
       "34                        Bob                 People Bank\n",
       "35                        Bob        NebulaTech Solutions\n",
       "36                        Bob          CyberNexus Systems\n",
       "37                        Bob                   ACME Bank\n",
       "38                        Bob   StellarSphere Enterprises\n",
       "39                        Bob    CelestialWave Industries\n",
       "40                        Bob                  ACME Trust"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "controls = model.resources._exec(\"call rai_demo.aml.detect_control();\")\n",
    "pd.DataFrame(controls, columns=['controller', 'controlled'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Appendix\n",
    "\n",
    "## Inserting Data\n",
    "\n",
    "To insert the data for this demo into Snowflake, change the value of `DO_SETUP` below to `True` and run the cell."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [],
   "source": [
    "import relationalai\n",
    "\n",
    "DO_SETUP = False\n",
    "\n",
    "create_schema_commands = \"\"\"\n",
    "create database if not exists RAI_DEMO;\n",
    "create schema if not exists RAI_DEMO.AML;\n",
    "\"\"\"\n",
    "\n",
    "create_table_commands = \"\"\"\n",
    "create or replace table RAI_DEMO.AML.BANK (\n",
    "\tID NUMBER(18,0),\n",
    "\tNAME TEXT\n",
    ");\n",
    "\n",
    "create or replace table RAI_DEMO.AML.COMPANY (\n",
    "\tID NUMBER(18,0),\n",
    "\tNAME TEXT\n",
    ");\n",
    "\n",
    "create or replace table RAI_DEMO.AML.PERSON (\n",
    "\tID NUMBER(18,0),\n",
    "\tNAME TEXT,\n",
    "\tFAMILY_NAME TEXT\n",
    ");\n",
    "\n",
    "create or replace table RAI_DEMO.AML.EMPLOYMENT (\n",
    "\tEMPLOYEE_ID NUMBER(18,0),\n",
    "\tEMPLOYER_ID NUMBER(18,0),\n",
    "\tROLE TEXT\n",
    ");\n",
    "\n",
    "create or replace table RAI_DEMO.AML.OWNERSHIP (\n",
    "\tOWNER_ID NUMBER(18,0),\n",
    "\tASSET_ID NUMBER(18,0),\n",
    "\tPERCENT NUMBER(18,0)\n",
    ");\n",
    "\"\"\"\n",
    "\n",
    "insert_data_commands = \"\"\"\n",
    "insert into RAI_DEMO.AML.BANK (ID, NAME)\n",
    "values\n",
    "(11, 'MyBank'),\n",
    "(12, 'ACME Trust'),\n",
    "(13, 'People Bank'),\n",
    "(14, 'ACME Bank');\n",
    "\n",
    "insert into RAI_DEMO.AML.COMPANY (ID, NAME)\n",
    "values\n",
    "(1, 'NebulaTech Solutions'),\n",
    "(2, 'Quantum Dynamics Innovations'),\n",
    "(3, 'StellarSphere Enterprises'),\n",
    "(4, 'CyberNexus Systems'),\n",
    "(5, 'InfinityForge Technologies'),\n",
    "(6, 'PhoenixRise Ventures'),\n",
    "(7, 'CelestialWave Industries'),\n",
    "(8, 'NovaCore Innovations'),\n",
    "(9, 'DreamScape Enterprises'),\n",
    "(10, 'ElysiumTech Solutions');\n",
    "\n",
    "insert into RAI_DEMO.AML.OWNERSHIP (OWNER_ID, ASSET_ID, PERCENT)\n",
    "values\n",
    "(13, 12, 93),\n",
    "(12, 11, 23),\n",
    "(11, 14, 34),\n",
    "(11, 1, 70),\n",
    "(11, 2, 12),\n",
    "(11, 3, 65),\n",
    "(3, 4, 100),\n",
    "(3, 5, 40),\n",
    "(3, 6, 61),\n",
    "(6, 7, 40),\n",
    "(6, 8, 81),\n",
    "(6, 9, 3),\n",
    "(7, 14, 45),\n",
    "(8, 14, 15),\n",
    "(8, 10, 11),\n",
    "(23, 11, 32);\n",
    "\n",
    "insert into RAI_DEMO.AML.PERSON (ID, NAME, FAMILY_NAME)\n",
    "values\n",
    "(21, 'Tom', 'Family Doe'),\n",
    "(22, 'Bob', 'Family Doe'),\n",
    "(23, 'Anna', 'Family Doe'),\n",
    "(24, 'Mary', 'Family Doe');\n",
    "\n",
    "insert into RAI_DEMO.AML.EMPLOYMENT (EMPLOYEE_ID, EMPLOYER_ID, ROLE)\n",
    "values\n",
    "(22, 13, 'CEO');\n",
    "\"\"\"\n",
    "\n",
    "def exec_commands(resources, commands):\n",
    "    for cmd in commands.split(\";\"):\n",
    "    \tif cmd.strip():\n",
    "            resources._exec(cmd)\n",
    "\n",
    "\n",
    "def setup():\n",
    "    resources = rai.Resources()\n",
    "    for commands in [\n",
    "        create_schema_commands,\n",
    "\t\tcreate_table_commands,\n",
    "\t\tinsert_data_commands\n",
    "\t]:\n",
    "        exec_commands(resources, commands)\n",
    "\n",
    "if DO_SETUP:\n",
    "    setup()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "if DO_SETUP:\n",
    "    import subprocess\n",
    "\n",
    "    command = [\n",
    "        \"rai\", \"imports:stream\",\n",
    "        \"--source\", \"RAI_DEMO.AML.COMPANY\",\n",
    "        \"--source\", \"RAI_DEMO.AML.BANK\",\n",
    "        \"--source\", \"RAI_DEMO.AML.PERSON\",\n",
    "        \"--source\", \"RAI_DEMO.AML.EMPLOYMENT\",\n",
    "        \"--source\", \"RAI_DEMO.AML.OWNERSHIP\",\n",
    "        \"--model\", \"AMLDemoSF\"\n",
    "    ]\n",
    "\n",
    "    subprocess.run(command)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
