From c7376f3897320fd5d99cc25f1cc99810d8370786 Mon Sep 17 00:00:00 2001 From: Morten Punnerud-Engelstad Date: Mon, 10 Aug 2026 12:13:35 +0200 Subject: [PATCH 1/6] Fix the blank page, and add the tests that would have caught it Both open issues report the same symptom from two different causes. Issue #1: query() embedded the user's text before opening the stream, and get_embedding raised on any non-200. A missing model therefore produced an HTTP 500 instead of an event stream, and the front end only had console.error in EventSource.onerror -- so the page stayed blank and silent. Reproduced against the original code: HTTP 500, zero SSE events. Issue #2: two retry branches used `continue` without incrementing step_count, so a model that kept answering over 700 characters, or kept trying to finish before the minimum step count, held the loop forever without yielding anything. Reproduced against the original code: still running after 15 seconds having emitted zero events, printing the exact "content exceeded 700 characters. Retrying..." line quoted in the issue. Both are now bounded, and every path out of the reasoning loop ends in a final or an error event that the page renders visibly. Also fixed along the way: - find_similar hardcoded 4096 dimensions while build_annoy_index took it as a parameter, so changing embedding model broke search silently. The dimension is now discovered from the backend and stored per row. - Annoy's angular distance was reported as though it were cosine similarity, which could go negative. Replaced with an exact numpy scan; an approximate index only pays off around a hundred thousand vectors and a query here produces about ten. - The strongest-path search accumulated negated weights, which invalidates Dijkstra's greedy choice, so it returned the first path it reached rather than the strongest. It now minimises -log(similarity), which is non-negative and therefore exactly optimal, and reports the geometric mean. - Edge `length` was computed and then dropped during serialisation, so the similarity-proportional spring length never reached vis.js. - max_tokens and temperature were sent as top-level keys, where Ollama ignores them. They belong under options as num_predict and temperature. - The response stream stripped every apostrophe from the model's text. - The final answer was drawn as a second node holding the same text as the last step, producing a spurious 1.00 edge between them. - Model-generated markdown went into innerHTML unsanitised. - debug=True on 0.0.0.0 exposed the Werkzeug console to the network. - Enter did not submit, the button gave no busy state, and a second submit left the first EventSource running. New: /health explains what is missing and names the ollama pull command. Backends are injectable, so 56 tests run with no model and no network, including twelve that drive a real browser and read the graph back out of vis.js. vis-network and marked are vendored so those tests do not depend on a CDN. scripts/check_numbers.py verifies the README's measured claims against data/claims/ and runs in the same gate as lint and tests. Download PNG now exports the canvas the user is actually looking at rather than re-plotting the graph server-side with a different layout engine. Co-authored-by: blueprintparadise --- .github/workflows/ci.yml | 41 +++ .gitignore | 15 + Makefile | 36 ++ README.md | 137 +++++-- app.py | 601 ++++++------------------------- backends.py | 411 +++++++++++++++++++++ data/claims/edge_spread.json | 105 ++++++ example.png | Bin 461427 -> 401835 bytes graph.py | 184 ++++++++++ pyproject.toml | 17 + reasoning.py | 235 ++++++++++++ requirements-dev.txt | 4 + requirements.txt | 10 +- scripts/check_numbers.py | 180 +++++++++ scripts/measure.py | 131 +++++++ scripts/screenshot.py | 74 ++++ static/vendor/marked.umd.js | 80 ++++ static/vendor/purify.min.js | 3 + static/vendor/vis-network.min.js | 34 ++ store.py | 120 ++++++ templates/index.html | 379 ++++++++++--------- tests/conftest.py | 54 +++ tests/test_graph_math.py | 160 ++++++++ tests/test_ollama.py | 139 +++++++ tests/test_render.py | 199 ++++++++++ tests/test_stream.py | 218 +++++++++++ 26 files changed, 2860 insertions(+), 707 deletions(-) create mode 100644 .github/workflows/ci.yml create mode 100644 .gitignore create mode 100644 Makefile create mode 100644 backends.py create mode 100644 data/claims/edge_spread.json create mode 100644 graph.py create mode 100644 pyproject.toml create mode 100644 reasoning.py create mode 100644 requirements-dev.txt create mode 100644 scripts/check_numbers.py create mode 100644 scripts/measure.py create mode 100644 scripts/screenshot.py create mode 100644 static/vendor/marked.umd.js create mode 100644 static/vendor/purify.min.js create mode 100644 static/vendor/vis-network.min.js create mode 100644 store.py create mode 100644 tests/conftest.py create mode 100644 tests/test_graph_math.py create mode 100644 tests/test_ollama.py create mode 100644 tests/test_render.py create mode 100644 tests/test_stream.py diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..db71cb3 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,41 @@ +name: CI + +on: + push: + branches: [main] + pull_request: + +jobs: + test: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + python-version: ["3.10", "3.12", "3.13"] + + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + + - name: Install + run: | + python -m pip install --upgrade pip + pip install -r requirements-dev.txt + + - name: Install browser for the render tests + run: python -m playwright install chromium --only-shell --with-deps + + # One gate: lint, tests and the documented numbers pass together. Keeping + # check_numbers as a separate optional target is how a README drifts away + # from what the code actually does. + - name: Lint + run: python -m ruff check . + + - name: Test + run: python -m pytest tests/ -q -m "not ollama" + + - name: Check documented numbers + run: python scripts/check_numbers.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ae53cc3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,15 @@ +__pycache__/ +*.py[cod] +.venv/ +venv/ +.pytest_cache/ +.ruff_cache/ + +# Runtime artefacts written into the working directory +embeddings.db +embeddings.ann + +# data/claims/*.json is deliberately NOT ignored: those files are the record of +# what was measured, and scripts/check_numbers.py verifies the README against them. + +.DS_Store diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..90f601f --- /dev/null +++ b/Makefile @@ -0,0 +1,36 @@ +PY := .venv/bin/python + +.PHONY: all venv lint test test-ollama measure check-numbers run clean + +# One gate. Lint, tests and the documented numbers pass together or the build is +# not green -- keeping the numbers in a separate optional target is how a README +# drifts away from what the code actually does. +all: lint test check-numbers + +venv: + uv venv --python 3.12 .venv + uv pip install --python $(PY) -r requirements-dev.txt + $(PY) -m playwright install chromium --only-shell + +lint: + $(PY) -m ruff check . + +test: + $(PY) -m pytest tests/ -q -m "not ollama" + +# Requires a running Ollama with the models named in the README. +test-ollama: + $(PY) -m pytest tests/ -q -m ollama + +# Regenerates data/claims/*.json from a live Ollama. +measure: + $(PY) scripts/measure.py + +check-numbers: + $(PY) scripts/check_numbers.py + +run: + $(PY) app.py + +clean: + rm -rf .pytest_cache .ruff_cache __pycache__ tests/__pycache__ embeddings.db embeddings.ann diff --git a/README.md b/README.md index 1818862..e4e2a94 100644 --- a/README.md +++ b/README.md @@ -2,54 +2,113 @@ ![Example](example.png) -This application uses a local Llama model to answer queries, build embeddings, and create a knowledge graph for exploring related questions and answers. +Ask a local Llama model a question, watch it reason step by step, and see the steps drawn as a +knowledge graph where the edges are the semantic similarity between them. -## Description +## Requirements -The Local Knowledge Graph is a Flask-based web application that leverages a local Llama language model to process user queries, generate step-by-step reasoning, and visualize the thought process as an interactive knowledge graph. It also finds and displays related questions and answers based on semantic similarity. +- Python 3.10 or newer +- [Ollama](https://ollama.com) running locally +- One chat model and, ideally, one embedding model -## Features +```bash +ollama pull llama3.2:3b # or llama3.1:8b, or any chat model you already have +ollama pull nomic-embed-text # optional but recommended, see "Which embedding model" below +``` -- Interactive web interface for submitting queries -- Step-by-step reasoning process displayed in real-time -- Dynamic knowledge graph visualization of the reasoning steps -- Calculation and display of the strongest reasoning path -- Related questions and answers based on semantic similarity -- Local processing using a Llama language model +## Installation -## Usage +```bash +git clone https://github.com/punnerud/Local_Knowledge_Graph +cd Local_Knowledge_Graph +python3 -m venv .venv && .venv/bin/pip install -r requirements.txt +.venv/bin/python app.py +``` -1. Ensure you have all the required dependencies installed. -2. Start the Flask application by running `app.py`. -3. Open a web browser and navigate to `http://localhost:5100` (or the appropriate port if modified). -4. Enter your query in the input field and click "Submit". -5. Watch as the application generates a step-by-step reasoning process, updating the knowledge graph in real-time. -6. Review the final answer and the strongest reasoning path. -7. Explore related questions and answers displayed below the main response. +Then open . -## Requirements +If the app cannot find what it needs it says so on startup and at +, naming the exact `ollama pull` command that fixes it. -- Python 3.7+ -- Flask -- NumPy -- scikit-learn -- Annoy -- NetworkX -- A local Llama language model (e.g., llama3.1:8b) running on `http://localhost:11434` +## Configuration -## Installation +Everything is an environment variable, and the defaults work unchanged. + +| Variable | Default | Meaning | +|---|---|---| +| `OLLAMA_URL` | `http://localhost:11434` | Where Ollama is listening | +| `LKG_CHAT_MODEL` | `llama3.1:8b` | The model that does the reasoning | +| `LKG_EMBED_MODEL` | *(auto)* | Embedding model. Empty means: use an installed embedding model if there is one, otherwise fall back to the chat model | +| `LKG_HOST` / `LKG_PORT` | `127.0.0.1` / `5100` | Where the app listens | +| `LKG_DEBUG` | off | Set to `1` for the Flask debugger. Do not do this on a shared network | + +## Which embedding model, and why it matters + +The edges in the graph are cosine similarities, so how much they vary decides whether the +picture tells you anything. Measured over four unrelated six-step reasoning chains +(`make measure`, recorded in `data/claims/edge_spread.json`): + +| Model | Dimensions | Mean edge weight | Coefficient of variation | +|---|---|---|---| +| `all-minilm` | 384 | 0.48 ± 0.07 | **0.28 ± 0.11** | +| `nomic-embed-text` | 768 | 0.67 ± 0.05 | **0.13 ± 0.03** | + +The uncertainties are the spread across the four topics. The larger model produces the +*less* discriminative graph here: under `nomic-embed-text` almost every pair of reasoning +steps scores around 0.67, so the edge labels stop distinguishing anything. This is ordinary +distance concentration, and it is a good reason to look at the spread rather than trusting +that a better retrieval model draws a better graph. `all-minilm` is the better default for +the *drawing* even though it is the weaker retriever. + +Both work. Any embedding size works — nothing in the code assumes a dimension. + +## Development + +```bash +make venv # uv-based environment, including a headless browser for the render tests +make all # ruff + pytest + the documented numbers, in one gate +make test # unit, stream and browser tests; no model needed +make test-ollama # the tests that need a live Ollama +make measure # re-measure the table above into data/claims/ +``` + +`make all` runs `scripts/check_numbers.py`, which resolves every measurable claim in this +README to a value in `data/claims/`. If a number here stops being true, the build fails +instead of the README quietly becoming wrong. Some of its checks are ground truths computed +from arithmetic rather than from a previous run, because a consistency gate cannot detect a +consistent error. + +## Troubleshooting + +**The page stays blank when I submit.** +Open . It reports whether Ollama answered, which models are +installed, and what to pull. Errors are now shown in the page itself rather than only in the +browser console. + +**It says a model is not found.** +The default chat model is `llama3.1:8b`. If you have a different one, either pull that, or +set `LKG_CHAT_MODEL` to a model you already have. + +**Ollama runs in Docker or on another machine.** +Set `OLLAMA_URL`, and make sure Ollama binds beyond localhost (`OLLAMA_HOST=0.0.0.0`). + +**It seemed to hang and never printed anything.** +That was a real bug: two retry paths could loop forever without ever sending anything to the +browser. Both are bounded now, and the stream sends a heartbeat while the model is thinking. + +## How it works -1. Clone this repository. -2. Install the required Python packages using the requirements.txt file: - ``` - pip install -r requirements.txt - ``` -3. Ensure you have a local Llama model running and accessible. -4. Run the Flask application: - ``` - python app.py - ``` +| File | Responsibility | +|---|---| +| `app.py` | Flask routes and server-sent-event framing | +| `backends.py` | Chat and embedding backends, model discovery, health checks | +| `reasoning.py` | The step-by-step loop | +| `graph.py` | Similarity, graph construction, strongest path | +| `store.py` | SQLite storage and exact nearest-neighbour search | -## Note +The strongest path maximises the product of the similarities along it, which is the same as +minimising a sum of `-log(similarity)`. Those costs are non-negative, so Dijkstra gives the +exactly optimal path, and the number reported is the geometric mean of the edges on it. -This application requires a local Llama language model to be running and accessible. Make sure you have the appropriate model set up and running before using this application. \ No newline at end of file +Similarity search is a full scan in numpy. An approximate index only starts paying for itself +somewhere around a hundred thousand vectors, and a single query here produces about ten. diff --git a/app.py b/app.py index 172aa74..5baaf44 100644 --- a/app.py +++ b/app.py @@ -1,506 +1,143 @@ -from flask import Flask, render_template, request, jsonify, Response, stream_with_context -import requests -import json -import time -import re -import sqlite3 -import numpy as np -from sklearn.metrics.pairwise import cosine_similarity -from annoy import AnnoyIndex -import os -import networkx as nx -import heapq - -app = Flask(__name__) - -# Function to get embeddings from the API -def get_embedding(text): - headers = {'Content-Type': 'application/json'} - data = json.dumps({"model": "llama3.1:8b", "input": text}) - response = requests.post('http://localhost:11434/api/embed', headers=headers, data=data) - - if response.status_code != 200: - raise Exception(f"API request failed with status code {response.status_code}: {response.text}") - - response_data = response.json() - - if 'embedding' in response_data: - return np.array(response_data['embedding'], dtype=np.float32) - elif 'embeddings' in response_data and response_data['embeddings']: - return np.array(response_data['embeddings'][0], dtype=np.float32) - else: - raise KeyError(f"No embedding found in API response. Response: {response_data}") - -# Database functions -def create_database(): - conn = sqlite3.connect('embeddings.db') - c = conn.cursor() - c.execute('''CREATE TABLE IF NOT EXISTS embeddings - (id INTEGER PRIMARY KEY, text TEXT, embedding BLOB, is_question INTEGER)''') - conn.commit() - return conn - -def insert_data(conn, text, embedding, is_question): - c = conn.cursor() - c.execute("INSERT INTO embeddings (text, embedding, is_question) VALUES (?, ?, ?)", - (text, sqlite3.Binary(np.array(embedding).tobytes()), is_question)) - conn.commit() - -# Annoy index functions -def build_annoy_index(conn, vector_size=4096, n_trees=10): - c = conn.cursor() - c.execute("SELECT COUNT(*) FROM embeddings") - total_vectors = c.fetchone()[0] - - annoy_index = AnnoyIndex(vector_size, 'angular') - c.execute("SELECT id, embedding FROM embeddings") - - for i, (id, embedding_blob) in enumerate(c.fetchall()): - embedding = np.frombuffer(embedding_blob, dtype=np.float32) - if len(embedding) != vector_size: - print(f"Warning: Embedding size mismatch. Expected {vector_size}, got {len(embedding)}. Skipping this vector.") - continue - annoy_index.add_item(id - 1, embedding) - - print("Building index...") - annoy_index.build(n_trees) - annoy_index.save('embeddings.ann') - print("Index built and saved") - -def find_similar(conn, query_embedding, top_k=5): - annoy_index = AnnoyIndex(4096, 'angular') - annoy_index.load('embeddings.ann') - - similar_ids, distances = annoy_index.get_nns_by_vector(query_embedding, top_k, include_distances=True) - - c = conn.cursor() - results = [] - for id, distance in zip(similar_ids, distances): - c.execute("SELECT text, is_question FROM embeddings WHERE id = ?", (id + 1,)) - text, is_question = c.fetchone() - similarity = 1 - distance - results.append((id + 1, text, similarity, bool(is_question))) - - return results - -# Llama model interaction functions -def stream_api_call(messages, max_tokens): - prompt = json.dumps(messages) - data = { - "model": "llama3.1:8b", - "prompt": prompt, - "max_tokens": max_tokens, - "temperature": 0.2, - "stream": True - } - try: - response = requests.post('http://localhost:11434/api/generate', - headers={'Content-Type': 'application/json'}, - data=json.dumps(data), - stream=True) - response.raise_for_status() - full_response = "" - for line in response.iter_lines(): - if line: - chunk = json.loads(line.decode('utf-8')) - if 'response' in chunk: - full_response += chunk['response'].replace("'",'') - yield chunk['response'].replace("'",'') - if full_response: - return json.loads(full_response.replace("'",'')) - else: - raise ValueError("Empty response from API") - except Exception as e: - error_message = f"Failed to generate response. Error: {str(e)}" - return {"title": "Error", "content": error_message, "next_action": "final_answer"} - -def extract_json(text): - text = re.sub(r'```(?:json)?\s*', '', text) - text = text.strip() - json_objects = re.findall(r'\{[^{}]*\}', text) - - if json_objects: - try: - return json.loads(json_objects[-1]) - except json.JSONDecodeError: - pass - - return { - "title": "Parsing Error", - "content": text, - "next_action": "continue" - } - -def calculate_similarity(embedding1, embedding2): - return cosine_similarity([embedding1], [embedding2])[0][0] - -def get_short_title(content): - messages = [ - {"role": "system", "content": "You are a concise summarizer. Provide a very short title (under 20 characters) for the given content."}, - {"role": "user", "content": f"Summarize this in under 20 characters: {content[:100]}..."} - ] - - title_data = "" - for chunk in stream_api_call(messages, 50): - title_data += chunk - - short_title = title_data.strip()[:20] - return short_title - -def calculate_strongest_path(graph_data, current_step): - G = nx.Graph() - for node in graph_data['nodes']: - G.add_node(node['id']) - for edge in graph_data['edges']: - G.add_edge(edge['from'], edge['to'], weight=edge['value']) - - start_node = 'Step1' - end_node = f'Step{current_step}' - - def dijkstra(graph, start, end): - queue = [(0, start, [])] - visited = set() - - while queue: - (cost, node, path) = heapq.heappop(queue) - if node not in visited: - visited.add(node) - path = path + [node] - - if node == end: - path_length = len(path) - 1 - if path_length == 0: # Handle the case when there's only one node - return 1.0, path # Return perfect similarity for single node - return -cost / path_length, path # Return average similarity - - for neighbor in graph.neighbors(node): - if neighbor not in visited: - edge_weight = graph[node][neighbor]['weight'] - new_cost = cost - edge_weight # Accumulate total similarity - heapq.heappush(queue, (new_cost, neighbor, path)) - - return None, None - - try: - avg_similarity, path = dijkstra(G, start_node, end_node) - if path: - if len(path) == 1: # Handle the case when there's only one node - return path, [], 1.0 - path_edges = list(zip(path[:-1], path[1:])) - path_weights = [G[u][v]['weight'] for u, v in path_edges] - return path, path_weights, avg_similarity - else: - return None, None, None - except nx.NetworkXNoPath: - return None, None, None - -def generate_response(prompt, conn): - messages = [ - {"role": "system", "content": """You are an expert AI assistant that explains your reasoning step by step. For each step, provide a title that describes what you're doing in that step, along with the content. Decide if you need another step or if you're ready to give the final answer. Respond in JSON format with 'title', 'content', and 'next_action' (either 'continue' or 'final_answer') keys. USE AS MANY REASONING STEPS AS POSSIBLE. AT LEAST 3. BE AWARE OF YOUR LIMITATIONS AS AN LLM AND WHAT YOU CAN AND CANNOT DO. IN YOUR REASONING, INCLUDE EXPLORATION OF ALTERNATIVE ANSWERS. CONSIDER YOU MAY BE WRONG, AND IF YOU ARE WRONG IN YOUR REASONING, WHERE IT WOULD BE. FULLY TEST ALL OTHER POSSIBILITIES. YOU CAN BE WRONG. WHEN YOU SAY YOU ARE RE-EXAMINING, ACTUALLY RE-EXAMINE, AND USE ANOTHER APPROACH TO DO SO. DO NOT JUST SAY YOU ARE RE-EXAMINING. USE AT LEAST 3 METHODS TO DERIVE THE ANSWER. USE BEST PRACTICES."""}, - {"role": "user", "content": prompt}, - {"role": "assistant", "content": "Thank you! I will now think step by step following my instructions, starting at the beginning after decomposing the problem."} - ] - - steps = [] - step_count = 1 - total_thinking_time = 0 - - graph_data = { - 'nodes': [], - 'edges': [] - } - embeddings = [] - edge_dict = {} # New dictionary to keep track of edges +"""Local Knowledge Graph -- Flask entry point. - def serialize_graph_data(graph_data): - serialized = { - 'nodes': graph_data['nodes'], - 'edges': [ - { - 'from': edge['from'], - 'to': edge['to'], - 'value': float(edge['value']), # Convert float32 to regular float - 'label': f"{float(edge['value']):.2f}", # Add similarity value as label - 'font': {'size': 10} # Adjust font size for readability - } - for edge in graph_data['edges'] - ] - } - #print("serialized",serialized) - return serialized +Thin by design: routing, server-sent-event framing, and process configuration. The +model backends live in ``backends.py``, the graph maths in ``graph.py``, the storage +in ``store.py``, and the reasoning loop in ``reasoning.py``. +""" - def calculate_top_similarities(embeddings, current_step, top_k=2): - similarities = [] - for i in range(min(current_step, len(embeddings))): - if i < len(embeddings) and current_step < len(embeddings): - similarity = float(calculate_similarity(embeddings[current_step], embeddings[i])) - similarities.append((i, similarity)) - similarities.sort(key=lambda x: x[1], reverse=True) - return similarities[:top_k] +from __future__ import annotations - max_steps = 20 # Set a maximum number of steps to prevent infinite loops - final_answer = None # Initialize final_answer +import json +import os +import queue +import threading - while step_count < max_steps: - start_time = time.time() - step_data = "" - for chunk in stream_api_call(messages, 300): - step_data += chunk - end_time = time.time() - thinking_time = end_time - start_time - - step_json = extract_json(step_data) - title = step_json.get('title', '') - content = step_json.get('content', 'No content') - next_action = step_json.get('next_action', 'continue') - - # Check if content exceeds 700 characters - if len(content) > 700: - print(f"Step {step_count} content exceeded 700 characters. Retrying...") - messages.append({"role": "user", "content": "Your last response was too long. Please provide a more concise version of your last step."}) - continue # Skip the rest of the loop and try again - - # If we reach here, the step is valid and under 700 characters - total_thinking_time += thinking_time - - # Calculate embedding for the current step - embedding = get_embedding(content) - embeddings.append(embedding) - insert_data(conn, content, embedding, False) - - # Generate a short title only if the original title is empty or too long - if not title or len(title) > 20: - short_title = get_short_title(content) - else: - short_title = title[:20] # Truncate the original title if it's longer than 20 characters - - # Generate a unique node ID - node_id = f"Step{step_count}" - while node_id in [node['id'] for node in graph_data['nodes']]: - step_count += 1 - node_id = f"Step{step_count}" - - # Add node for this step - graph_data['nodes'].append({ - 'id': node_id, - 'label': f"Step {step_count}: {short_title}" - }) - - if step_count > 1 and len(embeddings) > 1: - top_similarities = calculate_top_similarities(embeddings, len(embeddings) - 1, top_k=2) - - # Clear previous edges for the current step - edge_dict = {k: v for k, v in edge_dict.items() if v['to'] != node_id} - - for prev_step, similarity in top_similarities: - prev_node_id = f"Step{prev_step + 1}" - if prev_node_id in [node['id'] for node in graph_data['nodes']]: # Only create edges to existing nodes - edge_key = f"{prev_node_id}-{node_id}" - edge_dict[edge_key] = { - 'from': prev_node_id, - 'to': node_id, - 'value': similarity, - 'length': 300 * (1 - similarity) - } +from flask import Flask, Response, jsonify, render_template, request - # Update graph_data['edges'] with the current edge_dict - graph_data['edges'] = list(edge_dict.values()) - # Scale node sizes based on average similarity - connected_similarities = [edge['value'] for edge in edge_dict.values() if edge['from'] == node_id or edge['to'] == node_id] - if connected_similarities: - avg_similarity = sum(connected_similarities) / len(connected_similarities) - graph_data['nodes'][-1]['value'] = avg_similarity * 30 + 10 # Scale to 10-40 range - else: - graph_data['nodes'][-1]['value'] = 20 # Set a default size if no connections +import backends +from reasoning import reason +from store import EmbeddingStore - serialized_graph_data = serialize_graph_data(graph_data) - strongest_path, path_weights, avg_similarity = calculate_strongest_path(serialized_graph_data, step_count) - - path_data = { - 'strongest_path': strongest_path, - 'path_weights': path_weights, - 'avg_similarity': avg_similarity - } if strongest_path is not None else None +app = Flask(__name__) - yield f"data: {json.dumps({'type': 'step', 'step': step_count, 'title': title, 'content': content, 'graph': serialized_graph_data, 'path_data': path_data})}\n\n" - - steps.append((f"Step {step_count}: {title}", content, thinking_time)) - messages.append({"role": "assistant", "content": json.dumps(step_json)}) - - if next_action == 'final_answer' and step_count <= 5: - print("Final answer requested but not enough steps provided. Continuing...") - messages.append({ - "role": "user", - "content": f"You've only provided {step_count - 1} steps of 5. Can you look for possible error or alternatives to your answer. Continue your reasoning." - }) - continue - elif next_action == 'final_answer' or 'boxed' in content.lower(): - if not final_answer: - final_answer = content # Set final_answer if not already set +DB_PATH = os.environ.get("LKG_DB", "embeddings.db") +# How long to wait for the next event before telling the browser we are still alive. +HEARTBEAT_SECONDS = float(os.environ.get("LKG_HEARTBEAT", "5")) - # Add last evaluation step - messages.append({ - "role": "user", - "content": f"Let's do a final evaluation. The original question was: '{prompt}'. Based on your reasoning, is your final answer correct and complete? If not, what might be missing or incorrect?" - }) - - start_time = time.time() - evaluation_data = "" - for chunk in stream_api_call(messages, 300): - evaluation_data += chunk - end_time = time.time() - thinking_time = end_time - start_time - total_thinking_time += thinking_time - - evaluation_json = extract_json(evaluation_data) - evaluation_content = evaluation_json.get('content', 'No evaluation content') - - # Check if the evaluation suggests a different answer - if check_consistency(final_answer, evaluation_content): - break # Exit the loop if consistent - else: - print("Inconsistency detected. Restarting the reasoning process.") - yield f"data: {json.dumps({'type': 'inconsistency', 'message': 'Inconsistency detected. Restarting the reasoning process.'})}\n\n" - messages = messages[:2] # Reset messages to initial state - step_count += 1 # Increment step count instead of resetting - final_answer = None # Reset final_answer - graph_data = {'nodes': [], 'edges': []} # Reset graph data - embeddings = [] - edge_dict = {} - continue - step_count += 1 # Increment step count only for valid steps +def _sse(event: dict) -> str: + return f"data: {json.dumps(event)}\n\n" - # Generate final answer if not already provided - if not final_answer: - messages.append({"role": "user", "content": "Please provide the final answer based on your reasoning above."}) - - start_time = time.time() - final_data = "" - for chunk in stream_api_call(messages, 200): - final_data += chunk - end_time = time.time() - thinking_time = end_time - start_time - total_thinking_time += thinking_time - - final_json = extract_json(final_data) - final_answer = final_json.get('content', final_data) - # Calculate embedding for the final answer - final_embedding = get_embedding(final_answer) - insert_data(conn, final_answer, final_embedding, False) - - # Add final answer node to the graph - final_node_id = f"Step{step_count}" - while final_node_id in [node['id'] for node in graph_data['nodes']]: - step_count += 1 - final_node_id = f"Step{step_count}" - - graph_data['nodes'].append({ - 'id': final_node_id, - 'label': f"Final Answer: {get_short_title(final_answer)}" - }) - - # Calculate similarities with previous steps for the final answer - top_similarities = calculate_top_similarities(embeddings + [final_embedding], step_count - 1, top_k=2) - - for prev_step, similarity in top_similarities: - prev_node_id = f"Step{prev_step + 1}" - if prev_node_id in [node['id'] for node in graph_data['nodes']]: # Only create edges to existing nodes - edge_key = f"{final_node_id}-{prev_node_id}" - edge_dict[edge_key] = { - 'from': final_node_id, - 'to': prev_node_id, - 'value': similarity, - 'length': 300 * (1 - similarity) - } - - graph_data['edges'] = list(edge_dict.values()) +def make_backends() -> tuple: + """Build the default backends. Tests replace this.""" + return ( + backends.OllamaChat(backends.DEFAULT_CHAT_MODEL), + backends.OllamaEmbedding(backends.DEFAULT_EMBED_MODEL), + ) - serialized_graph_data = serialize_graph_data(graph_data) - strongest_path, path_weights, avg_similarity = calculate_strongest_path(serialized_graph_data, step_count) - - path_data = { - 'strongest_path': strongest_path, - 'path_weights': path_weights, - 'avg_similarity': avg_similarity - } if strongest_path is not None else None - yield f"data: {json.dumps({'type': 'final', 'content': final_answer, 'graph': serialized_graph_data, 'path_data': path_data})}\n\n" - - steps.append(("Final Answer", final_answer, thinking_time)) +@app.route("/") +def index(): + return render_template("index.html") - yield f"data: {json.dumps({'type': 'done', 'total_time': total_thinking_time})}\n\n" - # Stop processing here - return +@app.route("/health") +def health(): + """Why nothing is happening, in terms a user can act on.""" + return jsonify(backends.health(backends.DEFAULT_BASE_URL)) -def clear_database(conn): - c = conn.cursor() - c.execute("DELETE FROM embeddings") - conn.commit() -@app.route('/') -def index(): - return render_template('index.html') - -@app.route('/query', methods=['GET', 'POST']) +@app.route("/query", methods=["GET", "POST"]) def query(): - if request.method == 'POST': - user_query = request.json['query'] - else: # GET - user_query = request.args.get('query') - + if request.method == "POST": + user_query = (request.json or {}).get("query", "") + else: + user_query = request.args.get("query", "") + user_query = user_query.strip() + if not user_query: return jsonify({"error": "No query provided"}), 400 - conn = create_database() - - # Clear the database before processing the new query - clear_database(conn) - - # Add user query to database - query_embedding = get_embedding(user_query) - insert_data(conn, user_query, query_embedding, True) + chat, embedder = app.config.get("BACKENDS_FACTORY", make_backends)() def generate(): - yield from generate_response(user_query, conn) - - # Rebuild Annoy index after adding new data - build_annoy_index(conn) - - # Find similar questions/answers - similar_items = find_similar(conn, query_embedding, top_k=5) - yield f"data: {json.dumps({'type': 'similar', 'items': similar_items})}\n\n" - - conn.close() + """Stream events, and keep talking even while the model is thinking. + + The reasoning loop runs on a worker thread and hands events over a queue, so + this generator can emit a heartbeat during the long silence before a slow + model produces its first token. Without it a browser sees an open connection + and no data, which is indistinguishable from the app being broken. + """ + store = EmbeddingStore(app.config.get("DB_PATH", DB_PATH)) + events: queue.Queue = queue.Queue() + sentinel = object() + + def worker(): + try: + store.clear() + query_vector = embedder.embed([user_query])[0] + query_id = store.add( + user_query, + query_vector, + is_question=True, + model=embedder.describe().get("model", ""), + ) + for event in reason(user_query, chat=chat, embedder=embedder, store=store): + events.put(event) + if event["type"] == "error": + return + similar = store.find_similar( + query_vector, + top_k=5, + model=embedder.describe().get("model", ""), + exclude_ids={query_id}, + ) + events.put({"type": "similar", "items": similar}) + except backends.BackendError as exc: + events.put({"type": "error", "message": str(exc), "hint": exc.hint}) + except Exception as exc: # noqa: BLE001 + events.put({"type": "error", "message": f"{type(exc).__name__}: {exc}", "hint": ""}) + finally: + events.put(sentinel) + + thread = threading.Thread(target=worker, daemon=True) + thread.start() - return Response(generate(), mimetype='text/event-stream') - -def check_consistency(final_answer, evaluation): - #messages = [ - # {"role": "system", "content": "You are a consistency checker. Compare the final answer and the evaluation, and determine if they are consistent or if the evaluation suggests a significantly different answer."}, - # {"role": "user", "content": f"Final answer: {final_answer}\n\nEvaluation: {evaluation}\n\nAre these consistent? Respond with ONLY 'consistent' or 'inconsistent'."} - #] - # - #for attempt in range(5): # Try up to 5 times - # response = "" - # for chunk in stream_api_call(messages, 50): - # response += chunk - # - # response = response.strip().lower() - # print(f"check_consistency response (attempt {attempt + 1}):", response) - # - # if response.startswith("consistent") or response.startswith("inconsistent"): - # return response.startswith("consistent") - # - # # If we reach here, the response was invalid, so we'll try again - # messages.append({"role": "user", "content": "Please respond with 'consistent' or 'inconsistent' at the beginning."}) - # - ## If we've tried 5 times and still haven't got a valid response, default to inconsistent - #print("Failed to get a valid consistency check after 5 attempts. Defaulting to inconsistent.") - #return False - return True - -if __name__ == '__main__': - app.run(host='0.0.0.0', port=5100, debug=True) \ No newline at end of file + try: + while True: + try: + event = events.get(timeout=HEARTBEAT_SECONDS) + except queue.Empty: + yield ": heartbeat\n\n" + continue + if event is sentinel: + break + yield _sse(event) + yield _sse({"type": "done_stream"}) + finally: + thread.join(timeout=1.0) + store.close() + + return Response( + generate(), + mimetype="text/event-stream", + headers={"Cache-Control": "no-cache", "X-Accel-Buffering": "no"}, + ) + + +if __name__ == "__main__": + status = backends.health(backends.DEFAULT_BASE_URL) + if not status["ok"]: + print(f"\n {status['problem']}\n {status['hint']}\n") + else: + print(f"\n Ollama at {status['base_url']} — models: {', '.join(status['models'])}\n") + + # Bound to localhost with the debugger off by default. The previous default of + # debug=True on 0.0.0.0 exposed the Werkzeug console to the whole network. + app.run( + host=os.environ.get("LKG_HOST", "127.0.0.1"), + port=int(os.environ.get("LKG_PORT", "5100")), + debug=os.environ.get("LKG_DEBUG", "") == "1", + threaded=True, + ) diff --git a/backends.py b/backends.py new file mode 100644 index 0000000..854ebee --- /dev/null +++ b/backends.py @@ -0,0 +1,411 @@ +"""Pluggable model backends. + +The rest of the application never talks to Ollama directly. It asks for an +``EmbeddingBackend`` and a ``ChatBackend`` and uses those, which is what makes the +reasoning loop and the graph testable without a model running anywhere. + +Two rules are load-bearing here and are easy to lose in a refactor: + +* An embedding backend reports its own dimension. Nothing downstream may assume a + size. The original code hardcoded 4096 in one place and passed it as a parameter + in another, so swapping the embedding model broke similarity search silently. +* A backend never swallows an error. A failure is raised as ``BackendError`` with a + message meant for a human, because the symptom users reported was a blank page + with nothing in the terminal. +""" + +from __future__ import annotations + +import hashlib +import json +import os +import time +from collections.abc import Iterable, Iterator +from typing import Protocol + +import numpy as np +import requests + +DEFAULT_BASE_URL = os.environ.get("OLLAMA_URL", "http://localhost:11434") +DEFAULT_CHAT_MODEL = os.environ.get("LKG_CHAT_MODEL", "llama3.1:8b") +# Empty means "look at what Ollama actually has and pick something sensible". +DEFAULT_EMBED_MODEL = os.environ.get("LKG_EMBED_MODEL", "") +REQUEST_TIMEOUT = float(os.environ.get("LKG_TIMEOUT", "120")) + +# The reasoning loop asks for exactly these three keys. Handing Ollama the schema +# means the model cannot answer with prose that fails to parse, which is where the +# "Step 5: Parsing Error" nodes in the project's own screenshot came from. +STEP_SCHEMA = { + "type": "object", + "properties": { + "title": {"type": "string"}, + "content": {"type": "string"}, + "next_action": {"type": "string", "enum": ["continue", "final_answer"]}, + }, + "required": ["title", "content", "next_action"], +} + + +class BackendError(RuntimeError): + """A model backend could not answer, with a message worth showing a user.""" + + def __init__(self, message: str, *, hint: str = "") -> None: + super().__init__(message) + self.hint = hint + + def user_message(self) -> str: + return f"{self}\n{self.hint}".strip() + + +class EmbeddingBackend(Protocol): + def embed(self, texts: Iterable[str]) -> np.ndarray: + """Return an ``(n, dim)`` float32 array of L2-normalised row vectors.""" + + @property + def dim(self) -> int: ... + + def describe(self) -> dict: ... + + +class ChatBackend(Protocol): + def stream(self, messages: list[dict], max_tokens: int, *, schema: dict | None = None) -> Iterator[str]: + """Yield response text as it arrives.""" + + def describe(self) -> dict: ... + + +def _l2_normalise(matrix: np.ndarray) -> np.ndarray: + norms = np.linalg.norm(matrix, axis=1, keepdims=True) + # A zero vector stays zero rather than becoming NaN; cosine against it is 0. + np.divide(matrix, norms, out=matrix, where=norms > 0) + return matrix + + +def _clean_for_embedding(text: str) -> str: + """Collapse whitespace so one record can never become two. + + Every text-in/vector-out endpoint that is line-oriented treats a newline as a + record separator. A single embedded newline shifts every subsequent vector onto + the wrong document, and the result looks like a plausible graph rather than an + error. Collapsing here costs nothing and removes the whole class of bug. + """ + return " ".join(text.split()) or " " + + +class OllamaEmbedding: + """Embeddings from Ollama, with the model chosen automatically if not given.""" + + def __init__( + self, + model: str = "", + *, + base_url: str = DEFAULT_BASE_URL, + fallback_model: str = DEFAULT_CHAT_MODEL, + session: requests.Session | None = None, + ) -> None: + self.base_url = base_url.rstrip("/") + self._session = session or requests.Session() + self._dim: int | None = None + self._endpoint = "/api/embed" + self.model = model or self._pick_model(fallback_model) + self.auto_selected = not model + + def _pick_model(self, fallback: str) -> str: + """Prefer a real embedding model over a chat model, if one is installed.""" + available = list_models(self.base_url, session=self._session) + embedders = [m["name"] for m in available if m.get("is_embedding")] + if embedders: + return embedders[0] + names = {m["name"] for m in available} + if fallback in names: + return fallback + # Ollama tags are "name:tag"; accept a bare name the user typed. + for name in names: + if name.split(":")[0] == fallback.split(":")[0]: + return name + return fallback + + @property + def dim(self) -> int: + if self._dim is None: + self._dim = int(self.embed(["dimension probe"]).shape[1]) + return self._dim + + def describe(self) -> dict: + return { + "kind": "ollama", + "model": self.model, + "dim": self.dim, + "base_url": self.base_url, + "auto_selected": self.auto_selected, + "endpoint": self._endpoint, + } + + def embed(self, texts: Iterable[str]) -> np.ndarray: + items = [_clean_for_embedding(t) for t in texts] + if not items: + return np.zeros((0, self._dim or 0), dtype=np.float32) + + vectors = self._embed_batch(items) + if len(vectors) != len(items): + # A silent success that returns the wrong number of rows is worse than a + # crash: every vector after the gap belongs to the wrong text. + raise BackendError( + f"Embedding model '{self.model}' returned {len(vectors)} vectors " + f"for {len(items)} inputs.", + hint="This misaligns every embedding after the gap. Retry, or pick " + "another model with LKG_EMBED_MODEL.", + ) + matrix = np.asarray(vectors, dtype=np.float32) + if matrix.ndim != 2: + raise BackendError(f"Embedding model '{self.model}' returned a malformed response.") + self._dim = int(matrix.shape[1]) + return _l2_normalise(matrix) + + def _embed_batch(self, items: list[str]) -> list[list[float]]: + try: + response = self._session.post( + f"{self.base_url}/api/embed", + json={"model": self.model, "input": items}, + timeout=REQUEST_TIMEOUT, + ) + except requests.RequestException as exc: + raise BackendError( + f"Could not reach Ollama at {self.base_url}.", + hint="Start it with 'ollama serve', or set OLLAMA_URL if it runs elsewhere.", + ) from exc + + if response.status_code == 404: + body = response.text + if "not found" in body and self.model in body: + raise BackendError( + f"Ollama does not have the embedding model '{self.model}'.", + hint=f"Install it with: ollama pull {self.model}", + ) + # Ollama before v0.3.4 has no /api/embed, only the singular endpoint. + self._endpoint = "/api/embeddings" + return [self._embed_one_legacy(text) for text in items] + + if response.status_code != 200: + raise BackendError( + f"Ollama returned HTTP {response.status_code} for an embedding request.", + hint=response.text[:400], + ) + + payload = response.json() + if payload.get("embeddings"): + return payload["embeddings"] + if payload.get("embedding"): + return [payload["embedding"]] + raise BackendError( + f"Ollama returned no embedding for model '{self.model}'.", + hint=str(payload)[:400], + ) + + def _embed_one_legacy(self, text: str) -> list[float]: + response = self._session.post( + f"{self.base_url}/api/embeddings", + json={"model": self.model, "prompt": text}, + timeout=REQUEST_TIMEOUT, + ) + if response.status_code != 200: + raise BackendError( + f"Ollama returned HTTP {response.status_code} from /api/embeddings.", + hint=response.text[:400], + ) + payload = response.json() + if not payload.get("embedding"): + raise BackendError(f"Ollama returned no embedding for model '{self.model}'.") + return payload["embedding"] + + +class OllamaChat: + """Streaming chat completions from Ollama.""" + + def __init__( + self, + model: str = DEFAULT_CHAT_MODEL, + *, + base_url: str = DEFAULT_BASE_URL, + temperature: float = 0.2, + session: requests.Session | None = None, + ) -> None: + self.model = model + self.base_url = base_url.rstrip("/") + self.temperature = temperature + self._session = session or requests.Session() + + def describe(self) -> dict: + return {"kind": "ollama", "model": self.model, "base_url": self.base_url} + + def stream(self, messages: list[dict], max_tokens: int, *, schema: dict | None = None) -> Iterator[str]: + payload = { + "model": self.model, + "messages": messages, + "stream": True, + # These belong under "options". The original code sent them at the top + # level, where Ollama ignores them -- so neither the token limit nor the + # temperature had any effect at all. + "options": {"num_predict": max_tokens, "temperature": self.temperature}, + } + if schema is not None: + payload["format"] = schema + + try: + response = self._session.post( + f"{self.base_url}/api/chat", + json=payload, + stream=True, + timeout=REQUEST_TIMEOUT, + ) + except requests.RequestException as exc: + raise BackendError( + f"Could not reach Ollama at {self.base_url}.", + hint="Start it with 'ollama serve', or set OLLAMA_URL if it runs elsewhere.", + ) from exc + + if response.status_code == 404 and self.model in response.text: + raise BackendError( + f"Ollama does not have the model '{self.model}'.", + hint=f"Install it with: ollama pull {self.model}", + ) + if response.status_code != 200: + raise BackendError( + f"Ollama returned HTTP {response.status_code} for a chat request.", + hint=response.text[:400], + ) + + produced = False + for line in response.iter_lines(): + if not line: + continue + try: + chunk = json.loads(line.decode("utf-8")) + except json.JSONDecodeError: + continue + if chunk.get("error"): + raise BackendError(f"Ollama reported an error: {chunk['error']}") + piece = chunk.get("message", {}).get("content", "") + if piece: + produced = True + yield piece + if not produced: + raise BackendError( + f"Ollama returned an empty response from model '{self.model}'.", + hint="The model may have been evicted mid-request; try again.", + ) + + +class ScriptedChat: + """A chat backend that replays canned responses. For tests.""" + + def __init__( + self, + responses: list[str], + *, + chunk_size: int = 24, + repeat_last: bool = False, + delay: float = 0.0, + ) -> None: + self._responses = list(responses) + self._chunk_size = chunk_size + self._repeat_last = repeat_last + # Lets a test observe the in-flight state of the UI, which a backend that + # answers instantly makes unobservable. + self._delay = delay + self.calls: list[list[dict]] = [] + + def describe(self) -> dict: + return {"kind": "scripted", "model": "scripted", "remaining": len(self._responses)} + + def stream(self, messages: list[dict], max_tokens: int, *, schema: dict | None = None) -> Iterator[str]: + self.calls.append(list(messages)) + if self._responses: + text = self._responses[0] if (self._repeat_last and len(self._responses) == 1) else self._responses.pop(0) + elif self._repeat_last: + text = "" + else: + raise BackendError("ScriptedChat ran out of scripted responses.") + if self._delay: + time.sleep(self._delay) + for start in range(0, len(text), self._chunk_size): + yield text[start : start + self._chunk_size] + + +class DeterministicEmbedding: + """Reproducible pseudo-embeddings derived from the text. For tests. + + Identical text yields an identical vector and similar text does not yield a + similar vector, which is exactly what a test wants: total control, no network. + """ + + def __init__(self, dim: int = 64) -> None: + self._dim = dim + + @property + def dim(self) -> int: + return self._dim + + def describe(self) -> dict: + return {"kind": "deterministic", "model": f"hash-{self._dim}", "dim": self._dim} + + def embed(self, texts: Iterable[str]) -> np.ndarray: + rows = [] + for text in texts: + seed = int.from_bytes(hashlib.sha256(_clean_for_embedding(text).encode()).digest()[:8], "big") + rows.append(np.random.default_rng(seed).standard_normal(self._dim)) + if not rows: + return np.zeros((0, self._dim), dtype=np.float32) + return _l2_normalise(np.asarray(rows, dtype=np.float32)) + + +def list_models(base_url: str = DEFAULT_BASE_URL, *, session: requests.Session | None = None) -> list[dict]: + """Return the installed Ollama models, or an empty list if it is unreachable.""" + session = session or requests + try: + response = session.get(f"{base_url.rstrip('/')}/api/tags", timeout=5) + response.raise_for_status() + payload = response.json() + except (requests.RequestException, ValueError): + return [] + + models = [] + for entry in payload.get("models", []): + name = entry.get("name", "") + caps = entry.get("capabilities") or [] + # Older Ollama builds do not report capabilities, so fall back to the naming + # convention every published embedding model follows. + is_embedding = "embedding" in caps or "embed" in name.lower() or "minilm" in name.lower() + models.append({"name": name, "is_embedding": is_embedding, "capabilities": caps}) + return models + + +def health(base_url: str = DEFAULT_BASE_URL) -> dict: + """Everything the UI needs to explain why nothing is happening.""" + models = list_models(base_url) + if not models: + return { + "ok": False, + "base_url": base_url, + "models": [], + "problem": f"No answer from Ollama at {base_url}.", + "hint": "Start it with 'ollama serve'. If it runs on another host or port, " + "set OLLAMA_URL before starting this app.", + } + + names = {m["name"] for m in models} + chat_ok = DEFAULT_CHAT_MODEL in names or any( + n.split(":")[0] == DEFAULT_CHAT_MODEL.split(":")[0] for n in names + ) + if not chat_ok: + return { + "ok": False, + "base_url": base_url, + "models": sorted(names), + "problem": f"Ollama is running but does not have the chat model '{DEFAULT_CHAT_MODEL}'.", + "hint": f"Install it with: ollama pull {DEFAULT_CHAT_MODEL}\n" + f"Or point the app at a model you already have by setting " + f"LKG_CHAT_MODEL to one of: {', '.join(sorted(names))}", + } + + return {"ok": True, "base_url": base_url, "models": sorted(names), "problem": "", "hint": ""} diff --git a/data/claims/edge_spread.json b/data/claims/edge_spread.json new file mode 100644 index 0000000..afed938 --- /dev/null +++ b/data/claims/edge_spread.json @@ -0,0 +1,105 @@ +{ + "provenance": "measured", + "measured_at": "2026-08-10T10:03:51+00:00", + "topics": [ + "arithmetic", + "biology", + "cities", + "logic" + ], + "steps_per_topic": 6, + "nomic-embed-text": { + "model": "nomic-embed-text:latest", + "dim": 768, + "topics": [ + { + "n": 9, + "mean": 0.6292892297108968, + "std": 0.09464406383583951, + "cv": 0.1503983532013096, + "min": 0.5430697798728943, + "max": 0.8689034581184387, + "topic": "cities" + }, + { + "n": 9, + "mean": 0.6608760290675693, + "std": 0.09704783583442879, + "cv": 0.14684726267247686, + "min": 0.5217607617378235, + "max": 0.8333709836006165, + "topic": "arithmetic" + }, + { + "n": 9, + "mean": 0.642390059100257, + "std": 0.08941101911429446, + "cv": 0.1391849357686592, + "min": 0.5394383668899536, + "max": 0.7876884937286377, + "topic": "biology" + }, + { + "n": 9, + "mean": 0.731500334209866, + "std": 0.07002527629005542, + "cv": 0.09572829022107501, + "min": 0.6637407541275024, + "max": 0.8580729961395264, + "topic": "logic" + } + ], + "n": 36, + "cv": 0.13303971046588017, + "cv_stdev": 0.02531058309785679, + "mean": 0.6660139130221473, + "mean_stdev": 0.04553993869832083 + }, + "all-minilm": { + "model": "all-minilm:latest", + "dim": 384, + "topics": [ + { + "n": 9, + "mean": 0.403360805577702, + "std": 0.12544568684941299, + "cv": 0.3110011808652231, + "min": 0.2296208292245865, + "max": 0.7063212990760803, + "topic": "cities" + }, + { + "n": 9, + "mean": 0.4838050603866577, + "std": 0.12142483143977993, + "cv": 0.2509788371017389, + "min": 0.2908048927783966, + "max": 0.72198885679245, + "topic": "arithmetic" + }, + { + "n": 9, + "mean": 0.4607340412007438, + "std": 0.1862419171012844, + "cv": 0.4042286882382498, + "min": 0.2195516973733902, + "max": 0.7271787524223328, + "topic": "biology" + }, + { + "n": 9, + "mean": 0.5674395660559336, + "std": 0.07905256042341419, + "cv": 0.13931450175897997, + "min": 0.4771464467048645, + "max": 0.6971835494041443, + "topic": "logic" + } + ], + "n": 36, + "cv": 0.276380801991048, + "cv_stdev": 0.1110196426025803, + "mean": 0.4788348683052593, + "mean_stdev": 0.06806729356375978 + } +} diff --git a/example.png b/example.png index 28cb19b8347246d7d0ae8e34720821546974eab2..c78e8f4ae8669314c24f7a1285d2997b70532a84 100644 GIT binary patch literal 401835 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

-pu#pOJ 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

?Yj~PGi>qhF}yc@+7?YZsTKcCE`zq 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 z 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 K%{*t~`+oqgX?Dl} literal 461427 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ʷ^JIo7h_dVq0~a=@9B6%gPa{jWCWuR@k&(KT6rl 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 float: + """Cosine similarity between two vectors, safe on zero vectors.""" + denom = float(np.linalg.norm(a) * np.linalg.norm(b)) + if denom == 0.0: + return 0.0 + return float(np.dot(a, b) / denom) + + +def similarity_matrix(vectors: np.ndarray) -> np.ndarray: + """Full pairwise cosine similarity for a stack of row vectors.""" + if len(vectors) == 0: + return np.zeros((0, 0), dtype=np.float32) + matrix = np.asarray(vectors, dtype=np.float32) + norms = np.linalg.norm(matrix, axis=1, keepdims=True) + normalised = np.divide(matrix, norms, out=np.zeros_like(matrix), where=norms > 0) + return normalised @ normalised.T + + +def top_similarities(vectors, current_index: int, top_k: int = 2) -> list[tuple[int, float]]: + """The ``top_k`` earlier vectors most similar to ``vectors[current_index]``. + + Returns ``(index, similarity)`` pairs, strongest first. Only indices strictly + before ``current_index`` are considered, because an edge always points forward + in the reasoning chain. + """ + stack = np.asarray(vectors, dtype=np.float32) + if current_index <= 0 or current_index >= len(stack): + return [] + current = stack[current_index] + scored = [(i, cosine_similarity(current, stack[i])) for i in range(current_index)] + scored.sort(key=lambda pair: pair[1], reverse=True) + return scored[:top_k] + + +def build_graph(node_ids: list[str], labels: list[str], vectors, top_k: int = 2) -> dict: + """Build the whole graph from scratch out of the current steps. + + Rebuilding rather than patching is what keeps node ids and embedding indices in + lockstep: ``node_ids[i]`` owns ``vectors[i]``, by construction, for every i. + The original code derived a node id from a separate running counter that could + skip, so an edge could point at the wrong step -- and the guard for that case + silently dropped the edge instead of reporting the mismatch. + """ + if len(node_ids) != len(labels): + raise ValueError(f"{len(node_ids)} node ids but {len(labels)} labels") + stack = np.asarray(vectors, dtype=np.float32) if len(vectors) else np.zeros((0, 0), dtype=np.float32) + if len(stack) != len(node_ids): + raise ValueError(f"{len(node_ids)} node ids but {len(stack)} vectors") + + edges: list[dict] = [] + for index in range(1, len(node_ids)): + for previous, similarity in top_similarities(stack, index, top_k=top_k): + edges.append( + { + "from": node_ids[previous], + "to": node_ids[index], + "value": float(similarity), + "length": float(300 * (1 - similarity)), + } + ) + + nodes = [] + for index, node_id in enumerate(node_ids): + connected = [e["value"] for e in edges if e["from"] == node_id or e["to"] == node_id] + value = (sum(connected) / len(connected)) * 30 + 10 if connected else 20.0 + nodes.append({"id": node_id, "label": labels[index], "value": float(value)}) + + return {"nodes": nodes, "edges": edges} + + +def serialize_graph_data(graph_data: dict) -> dict: + """Convert internal graph state into what vis.js consumes. + + ``length`` is carried through deliberately. The original serializer dropped it, + so the similarity-proportional spring length was computed on every edge and then + thrown away before it could reach the browser. + """ + return { + "nodes": [dict(node) for node in graph_data.get("nodes", [])], + "edges": [ + { + "from": edge["from"], + "to": edge["to"], + "value": float(edge["value"]), + "length": float(edge.get("length", 300 * (1 - float(edge["value"])))), + "label": f"{float(edge['value']):.2f}", + "font": {"size": 10}, + } + for edge in graph_data.get("edges", []) + ], + } + + +def strongest_path(graph_data: dict, start_node: str = "", end_node: str = "") -> tuple: + """Find the path whose similarities multiply to the largest value. + + Maximising a product of similarities is the same as minimising a sum of + ``-log(similarity)``, and those costs are non-negative, so Dijkstra applies and + the answer is exactly optimal. + + The original implementation accumulated ``cost - weight``, which makes every + effective weight negative. Dijkstra's greedy choice is invalid on negative + weights, so it returned the first path it happened to reach rather than the + strongest one, and reported that as a "weighted average". + + Returns ``(path, weights, mean_similarity)``, or ``(None, None, None)`` when no + path exists. ``mean_similarity`` is the geometric mean of the edges on the path, + which is the quantity actually being maximised. + """ + nodes = [node["id"] for node in graph_data.get("nodes", [])] + if not nodes: + return None, None, None + + start = start_node or nodes[0] + end = end_node or nodes[-1] + if start not in nodes or end not in nodes: + return None, None, None + if start == end: + return [start], [], 1.0 + + graph = nx.Graph() + graph.add_nodes_from(nodes) + for edge in graph_data.get("edges", []): + similarity = float(edge["value"]) + if similarity <= MIN_USABLE_SIMILARITY: + continue + cost = -math.log(min(similarity, 1.0)) + # Keep the strongest edge when a pair appears twice. + existing = graph.get_edge_data(edge["from"], edge["to"]) + if existing is None or cost < existing["cost"]: + graph.add_edge(edge["from"], edge["to"], cost=cost, similarity=similarity) + + try: + path = nx.dijkstra_path(graph, start, end, weight="cost") + except (nx.NetworkXNoPath, nx.NodeNotFound): + return None, None, None + + weights = [graph[u][v]["similarity"] for u, v in zip(path[:-1], path[1:], strict=True)] + if not weights: + return path, [], 1.0 + mean = float(math.exp(sum(math.log(w) for w in weights) / len(weights))) + return path, weights, mean + + +def edge_weight_spread(graph_data: dict) -> dict: + """Descriptive statistics for the edge weights actually drawn. + + Cosine similarities in a high-dimensional space concentrate: they cluster in a + narrow band, so every edge looks equally strong and the picture stops carrying + information. This reports the spread so the claim can be checked rather than + assumed. + """ + values = [float(edge["value"]) for edge in graph_data.get("edges", [])] + if not values: + return {"n": 0, "mean": 0.0, "std": 0.0, "cv": 0.0, "min": 0.0, "max": 0.0} + array = np.asarray(values, dtype=np.float64) + mean = float(array.mean()) + std = float(array.std()) + return { + "n": len(values), + "mean": mean, + "std": std, + "cv": float(std / mean) if mean else 0.0, + "min": float(array.min()), + "max": float(array.max()), + } diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..fd10dcd --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,17 @@ +[tool.pytest.ini_options] +testpaths = ["tests"] +markers = [ + "ollama: needs a running Ollama with the models named in the README", +] +filterwarnings = ["error::DeprecationWarning"] + +[tool.ruff] +line-length = 110 +target-version = "py310" + +[tool.ruff.lint] +select = ["E", "F", "W", "I", "UP", "B", "C4", "SIM"] +ignore = ["E501"] + +[tool.ruff.lint.per-file-ignores] +"tests/*" = ["E402"] diff --git a/reasoning.py b/reasoning.py new file mode 100644 index 0000000..c57acb3 --- /dev/null +++ b/reasoning.py @@ -0,0 +1,235 @@ +"""The step-by-step reasoning loop. + +Yields plain dicts. The Flask layer turns them into server-sent events, and tests +consume them directly. Every path out of this generator ends in either a ``final`` +or an ``error`` event, which is the property that fixes the reported symptom of a +page where nothing ever appears. +""" + +from __future__ import annotations + +import json +import re +import time +from collections.abc import Iterator + +from backends import STEP_SCHEMA, BackendError, ChatBackend, EmbeddingBackend +from graph import build_graph, edge_weight_spread, serialize_graph_data, strongest_path + +MAX_STEPS = 20 +MIN_STEPS = 5 +MAX_STEP_CHARS = 700 +# How many times a single step may be re-asked before we take what we were given. +# The original code retried without bound and without incrementing the step +# counter, so a model that kept answering too long, or kept trying to finish early, +# held the loop forever while the browser sat waiting on a stream that never spoke. +MAX_RETRIES_PER_STEP = 3 + +SYSTEM_PROMPT = ( + "You are an expert AI assistant that explains your reasoning step by step. For each step, " + "provide a title that describes what you're doing in that step, along with the content. " + "Decide if you need another step or if you're ready to give the final answer. Respond in " + "JSON format with 'title', 'content', and 'next_action' (either 'continue' or " + "'final_answer') keys. USE AS MANY REASONING STEPS AS POSSIBLE. AT LEAST 3. BE AWARE OF " + "YOUR LIMITATIONS AS AN LLM AND WHAT YOU CAN AND CANNOT DO. IN YOUR REASONING, INCLUDE " + "EXPLORATION OF ALTERNATIVE ANSWERS. CONSIDER YOU MAY BE WRONG, AND IF YOU ARE WRONG IN " + "YOUR REASONING, WHERE IT WOULD BE. FULLY TEST ALL OTHER POSSIBILITIES. YOU CAN BE WRONG. " + "WHEN YOU SAY YOU ARE RE-EXAMINING, ACTUALLY RE-EXAMINE, AND USE ANOTHER APPROACH TO DO " + "SO. DO NOT JUST SAY YOU ARE RE-EXAMINING. USE AT LEAST 3 METHODS TO DERIVE THE ANSWER. " + "USE BEST PRACTICES. Keep the content of each step under " + f"{MAX_STEP_CHARS} characters." +) + + +def extract_json(text: str) -> dict: + """Best-effort parse of a step, for backends that ignore the response schema.""" + cleaned = re.sub(r"```(?:json)?\s*", "", text).strip() + try: + parsed = json.loads(cleaned) + if isinstance(parsed, dict): + return parsed + except json.JSONDecodeError: + pass + # Fall back to the last brace-delimited object in the text. + for candidate in reversed(re.findall(r"\{[^{}]*\}", cleaned)): + try: + parsed = json.loads(candidate) + if isinstance(parsed, dict): + return parsed + except json.JSONDecodeError: + continue + return {"title": "", "content": cleaned, "next_action": "continue"} + + +def _collect(chat: ChatBackend, messages: list[dict], max_tokens: int) -> str: + return "".join(chat.stream(messages, max_tokens, schema=STEP_SCHEMA)) + + +def _short_title(title: str, content: str, fallback: str) -> str: + """A label short enough to read on a node, without spending an extra LLM call. + + The original made a second model call per step purely to shorten a title. That + doubled the request count for something a slice does just as well. + """ + text = (title or content or fallback).strip() + text = " ".join(text.split()) + if len(text) <= 20: + return text + cut = text[:20] + # Prefer a word boundary if one is close to the end. + if " " in cut[10:]: + cut = cut[: cut.rindex(" ")] + return cut + + +def reason( + prompt: str, + *, + chat: ChatBackend, + embedder: EmbeddingBackend, + store=None, + max_steps: int = MAX_STEPS, + min_steps: int = MIN_STEPS, + top_k: int = 2, +) -> Iterator[dict]: + """Run the reasoning loop, yielding one event dict at a time.""" + messages = [ + {"role": "system", "content": SYSTEM_PROMPT}, + {"role": "user", "content": prompt}, + ] + + node_ids: list[str] = [] + labels: list[str] = [] + vectors: list = [] + total_thinking_time = 0.0 + final_answer: str | None = None + step_events = 0 + + def graph_payload() -> tuple[dict, dict | None]: + graph = build_graph(node_ids, labels, vectors, top_k=top_k) + serialized = serialize_graph_data(graph) + path, weights, mean = strongest_path(serialized) + path_data = ( + {"strongest_path": path, "path_weights": weights, "avg_similarity": mean} + if path is not None + else None + ) + return serialized, path_data + + try: + while len(node_ids) < max_steps: + step_number = len(node_ids) + 1 + step_json = None + truncated = False + + for attempt in range(MAX_RETRIES_PER_STEP): + started = time.time() + raw = _collect(chat, messages, 300) + total_thinking_time += time.time() - started + step_json = extract_json(raw) + content = str(step_json.get("content", "")).strip() + + if len(content) <= MAX_STEP_CHARS: + break + if attempt == MAX_RETRIES_PER_STEP - 1: + # Take what we have rather than asking again forever. + step_json["content"] = content[:MAX_STEP_CHARS].rstrip() + "..." + truncated = True + break + messages.append( + { + "role": "user", + "content": "Your last response was too long. Give the same step again, " + f"under {MAX_STEP_CHARS} characters.", + } + ) + + assert step_json is not None + content = str(step_json.get("content", "")).strip() + if not content: + content = "The model returned an empty step." + title = str(step_json.get("title", "")).strip() + next_action = str(step_json.get("next_action", "continue")).strip() + + node_id = f"Step{step_number}" + node_ids.append(node_id) + labels.append(f"Step {step_number}: {_short_title(title, content, node_id)}") + vectors.append(embedder.embed([content])[0]) + if store is not None: + store.add(content, vectors[-1], model=embedder.describe().get("model", "")) + + messages.append({"role": "assistant", "content": json.dumps(step_json)}) + wants_to_finish = next_action == "final_answer" or "boxed" in content.lower() + + if wants_to_finish and len(node_ids) >= min_steps: + # This step *is* the answer. Announcing it as a step and then again as + # the final answer would print the same text twice on the page and + # draw two nodes over identical content. + final_answer = content + break + + serialized, path_data = graph_payload() + step_events += 1 + yield { + "type": "step", + "step": step_number, + "title": title or f"Step {step_number}", + "content": content, + "truncated": truncated, + "graph": serialized, + "path_data": path_data, + } + + if wants_to_finish: + # Nudge once per remaining step, but never without having made + # progress -- the step counter has already advanced by now. + messages.append( + { + "role": "user", + "content": f"You have given {len(node_ids)} of {min_steps} steps. Look for " + "errors or alternatives in your answer, then continue your reasoning.", + } + ) + + if final_answer is not None and node_ids: + # The final answer *is* the last step. Relabel that node instead of adding + # a second one holding the same text: two nodes over identical content + # produce a similarity of exactly 1.00 between them, which is the + # duplicate pair visible in this project's own example screenshot. + labels[-1] = f"Final Answer: {_short_title('', final_answer, 'final')}" + else: + if final_answer is None: + messages.append( + {"role": "user", "content": "Please provide the final answer based on your reasoning above."} + ) + started = time.time() + raw = _collect(chat, messages, 300) + total_thinking_time += time.time() - started + final_answer = str(extract_json(raw).get("content", raw)).strip() or "No final answer." + + node_ids.append(f"Step{len(node_ids) + 1}") + labels.append(f"Final Answer: {_short_title('', final_answer, 'final')}") + vectors.append(embedder.embed([final_answer])[0]) + if store is not None: + store.add(final_answer, vectors[-1], model=embedder.describe().get("model", "")) + + serialized, path_data = graph_payload() + yield { + "type": "final", + "content": final_answer, + "graph": serialized, + "path_data": path_data, + } + yield { + "type": "done", + "total_time": total_thinking_time, + "steps": step_events, + "edge_spread": edge_weight_spread(serialized), + "embedding": embedder.describe(), + "chat": chat.describe(), + } + + except BackendError as exc: + yield {"type": "error", "message": str(exc), "hint": exc.hint} + except Exception as exc: # noqa: BLE001 - the stream must always say what happened + yield {"type": "error", "message": f"{type(exc).__name__}: {exc}", "hint": ""} diff --git a/requirements-dev.txt b/requirements-dev.txt new file mode 100644 index 0000000..c6f6aec --- /dev/null +++ b/requirements-dev.txt @@ -0,0 +1,4 @@ +-r requirements.txt +pytest>=8.0 +playwright>=1.48 +ruff>=0.6 diff --git a/requirements.txt b/requirements.txt index 1404439..113f1be 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,6 +1,4 @@ -Flask -numpy -scikit-learn -annoy -networkx -requests \ No newline at end of file +Flask>=3.0 +numpy>=1.24 +networkx>=3.0 +requests>=2.28 diff --git a/scripts/check_numbers.py b/scripts/check_numbers.py new file mode 100644 index 0000000..611f618 --- /dev/null +++ b/scripts/check_numbers.py @@ -0,0 +1,180 @@ +#!/usr/bin/env python3 +"""Fail loudly when a documented number stops being true. + +Prose drifts away from data silently. This turns every measurable claim in the +README into a lookup against the JSON that produced it, so a claim that stops +holding breaks the build instead of quietly becoming a lie. + +Four rules the checks below follow: + +1. The claim's English wording is the check's label, so a failure reads as a + sentence rather than as a key path. +2. Tolerances come from observed spread, not from taste. +3. Some checks must measure against something other than this pipeline's own + history -- a synthetic input whose answer is known by arithmetic. A consistency + gate cannot detect a consistent error. +4. Generated files carry a provenance field which defaults to the untrusted value, + so an old file is never mistaken for a fresh measurement. +""" + +from __future__ import annotations + +import json +import math +import pathlib +import sys + +ROOT = pathlib.Path(__file__).resolve().parent.parent +sys.path.insert(0, str(ROOT)) + +import numpy as np # noqa: E402 + +from graph import cosine_similarity, strongest_path, top_similarities # noqa: E402 + +CLAIMS = "data/claims/edge_spread.json" + +# (file, extractor, expected, tolerance, label) +# +# Tolerances are three times the spread observed across the four independent topics +# in scripts/measure.py, so these fail on a regression rather than on the ordinary +# variation between one topic and the next. The per-topic standard deviations are +# recorded in the same file as cv_stdev / mean_stdev. +FILE_CHECKS = [ + ( + CLAIMS, + lambda d: 1.0 if d.get("provenance") == "measured" else 0.0, + 1.0, + 0.001, + "edge spread is measured, not inherited", + ), + ( + CLAIMS, + lambda d: float(d["all-minilm"]["dim"]), + 384.0, + 0.0, + "all-minilm reports 384 dimensions", + ), + ( + CLAIMS, + lambda d: float(d["nomic-embed-text"]["dim"]), + 768.0, + 0.0, + "nomic-embed-text reports 768 dimensions", + ), + ( + CLAIMS, + lambda d: float(d["all-minilm"]["n"]), + 36.0, + 0.0, + "four six-step topics at top_k=2 give 36 edges", + ), + ( + CLAIMS, + lambda d: float(d["nomic-embed-text"]["mean"]), + 0.6660, + 0.14, + "reasoning steps average 0.67 cosine under nomic-embed-text", + ), + ( + CLAIMS, + lambda d: float(d["nomic-embed-text"]["cv"]), + 0.1330, + 0.076, + "nomic-embed-text edge weights vary by only 13 percent of their mean", + ), + ( + CLAIMS, + lambda d: float(d["all-minilm"]["mean"]), + 0.4788, + 0.20, + "reasoning steps average 0.48 cosine under all-minilm", + ), + ( + CLAIMS, + lambda d: float(d["all-minilm"]["cv"]), + 0.2764, + 0.33, + "all-minilm edge weights vary by 28 percent of their mean", + ), + ( + CLAIMS, + # The comparison, not either number alone: the larger, better-regarded model + # produces the *less* discriminative graph on this task. If that ever + # reverses, the advice in the README is wrong and should change. + lambda d: 1.0 if d["nomic-embed-text"]["cv"] < d["all-minilm"]["cv"] else 0.0, + 1.0, + 0.001, + "nomic-embed-text separates steps less than all-minilm does", + ), +] + + +def ground_truth_checks() -> list[tuple[bool, str, str]]: + """Checks whose expected value comes from arithmetic, not from a previous run.""" + results = [] + + # Two unit vectors 60 degrees apart have cosine exactly 0.5. + a = np.array([1.0, 0.0], dtype=np.float32) + b = np.array([0.5, math.sqrt(3) / 2], dtype=np.float32) + got = cosine_similarity(a, b) + results.append((abs(got - 0.5) < 1e-6, f"{got:.6f} vs 0.5", "cosine of a 60-degree pair is exactly 0.5")) + + # Orthogonal vectors are exactly 0. + got = cosine_similarity(np.array([1.0, 0.0]), np.array([0.0, 1.0])) + results.append((abs(got) < 1e-6, f"{got:.6f} vs 0.0", "cosine of an orthogonal pair is exactly 0")) + + # top_similarities must rank by the analytic ordering, looking only backwards. + vectors = np.array([[1, 0], [0, 1], [math.cos(0.1), math.sin(0.1)]], dtype=np.float32) + order = [index for index, _ in top_similarities(vectors, 2, top_k=2)] + results.append((order == [0, 1], f"{order} vs [0, 1]", "nearest earlier step is ranked first")) + + # The strongest path is the one whose similarities multiply highest: a chain of + # three 0.9 edges (0.729) beats a single 0.10 shortcut. A greedy search over + # negated weights returns the shortcut instead. + graph = { + "nodes": [{"id": n} for n in ("A", "B", "C", "D")], + "edges": [ + {"from": "A", "to": "D", "value": 0.10}, + {"from": "A", "to": "B", "value": 0.90}, + {"from": "B", "to": "C", "value": 0.90}, + {"from": "C", "to": "D", "value": 0.90}, + ], + } + path, _, mean = strongest_path(graph, "A", "D") + results.append( + (path == ["A", "B", "C", "D"], f"{path}", "strongest path maximises the product of similarities") + ) + results.append((abs(mean - 0.9) < 1e-6, f"{mean:.6f} vs 0.9", "path similarity is the geometric mean")) + + return results + + +def main() -> int: + failures = skipped = 0 + + for passed, detail, label in ground_truth_checks(): + print(f"{'ok ' if passed else 'FAIL'} {label:<52} {detail}") + failures += not passed + + for path, extract, expected, tolerance, label in FILE_CHECKS: + target = ROOT / path + if not target.exists(): + print(f"SKIP {label:<52} ({path} missing -- run 'make measure')") + skipped += 1 + continue + try: + got = float(extract(json.loads(target.read_text()))) + except (KeyError, TypeError, ValueError) as exc: + print(f"FAIL {label:<52} could not read: {exc}") + failures += 1 + continue + bad = abs(got - expected) > tolerance + print(f"{'FAIL' if bad else 'ok '} {label:<52} {got:>10.4f} expected {expected} +/- {tolerance}") + failures += bad + + print(f"\n{failures} failed, {skipped} skipped") + return 1 if failures else 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/scripts/measure.py b/scripts/measure.py new file mode 100644 index 0000000..60eb8ac --- /dev/null +++ b/scripts/measure.py @@ -0,0 +1,131 @@ +#!/usr/bin/env python3 +"""Measure how much the drawn edge weights actually vary, per embedding model. + +The graph draws an edge for every pair of reasoning steps it thinks are related, +and labels it with a cosine similarity. If those similarities all land in a narrow +band the picture looks informative while carrying almost nothing, so this measures +the spread rather than assuming it. + +Deliberately not driven by a live language model: the same fixed step texts go +through every embedding model, so the number describes the embedder and not the +sampling noise of whatever wrote the steps. Several independent topics are measured +so the observed spread across them can set the tolerance in check_numbers.py -- +a single run would give a number with no error bar. + +Writes data/claims/edge_spread.json. Run with: make measure +""" + +from __future__ import annotations + +import json +import pathlib +import statistics +import sys +from datetime import datetime, timezone + +ROOT = pathlib.Path(__file__).resolve().parent.parent +sys.path.insert(0, str(ROOT)) + +import backends # noqa: E402 +from graph import build_graph, edge_weight_spread # noqa: E402 + +# Four unrelated topics, each a plausible chain of reasoning steps. +TOPICS = { + "cities": [ + "First I need to decide whether the question means city proper or metropolitan area.", + "Using city proper populations, the largest are Tokyo, Delhi, Shanghai, Dhaka and Sao Paulo.", + "Metropolitan definitions change the ranking, because they absorb surrounding municipalities.", + "I should check whether the figures are recent, since urban populations move quickly.", + "Sources disagree by several million for Delhi depending on the boundary used.", + "Taking city proper and recent UN figures, Tokyo remains the largest.", + ], + "arithmetic": [ + "The problem asks for the product of two three-digit numbers.", + "I will decompose 347 times 216 into partial products to reduce mistakes.", + "347 times 200 is 69400, and 347 times 16 is 5552.", + "Adding the partial products gives 74952.", + "Checking by estimation, 350 times 216 is about 75600, which is close.", + "The product is 74952.", + ], + "biology": [ + "Photosynthesis converts light energy into chemical energy stored in glucose.", + "The light dependent reactions happen in the thylakoid membrane and produce ATP and NADPH.", + "The Calvin cycle then fixes carbon dioxide using that ATP and NADPH.", + "An alternative framing would separate the oxygen evolving complex as its own stage.", + "Temperature and light intensity both limit the overall rate.", + "So photosynthesis is a two stage process linked by ATP and NADPH.", + ], + "logic": [ + "The statement is a conditional, so its truth depends only on the case where the premise holds.", + "I should test whether the converse is being assumed anywhere in the argument.", + "Affirming the consequent would be a fallacy here, and the argument appears to do that.", + "Trying a counterexample: the premise can be false while the conclusion is true.", + "That counterexample shows the inference is not valid.", + "The argument is invalid because it affirms the consequent.", + ], +} + + +def measure(backend) -> dict: + per_topic = [] + for name, steps in TOPICS.items(): + vectors = backend.embed(steps) + ids = [f"Step{i + 1}" for i in range(len(steps))] + graph = build_graph(ids, ids, vectors, top_k=2) + spread = edge_weight_spread(graph) + spread["topic"] = name + per_topic.append(spread) + + cvs = [t["cv"] for t in per_topic] + means = [t["mean"] for t in per_topic] + return { + "model": backend.model, + "dim": backend.dim, + "topics": per_topic, + "n": sum(t["n"] for t in per_topic), + # Averaged over four independent topics, with the observed spread reported + # so a tolerance can be set from it rather than guessed. + "cv": statistics.fmean(cvs), + "cv_stdev": statistics.stdev(cvs), + "mean": statistics.fmean(means), + "mean_stdev": statistics.stdev(means), + } + + +def main() -> int: + models = [m for m in backends.list_models() if m["is_embedding"]] + if not models: + print("No embedding model installed. Try: ollama pull nomic-embed-text") + return 1 + + results = { + "provenance": "measured", + "measured_at": datetime.now(timezone.utc).isoformat(timespec="seconds"), + "topics": sorted(TOPICS), + "steps_per_topic": len(next(iter(TOPICS.values()))), + } + + for entry in models: + name = entry["name"] + print(f"measuring {name} ...", flush=True) + try: + result = measure(backends.OllamaEmbedding(name)) + except backends.BackendError as exc: + print(f" skipped: {exc}") + continue + key = name.split(":")[0] + results[key] = result + print( + f" dim={result['dim']} mean={result['mean']:.4f}+/-{result['mean_stdev']:.4f} " + f"cv={result['cv']:.4f}+/-{result['cv_stdev']:.4f} edges={result['n']}" + ) + + out = ROOT / "data" / "claims" / "edge_spread.json" + out.parent.mkdir(parents=True, exist_ok=True) + out.write_text(json.dumps(results, indent=2) + "\n") + print(f"\nwrote {out.relative_to(ROOT)}") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/scripts/screenshot.py b/scripts/screenshot.py new file mode 100644 index 0000000..3e1b82e --- /dev/null +++ b/scripts/screenshot.py @@ -0,0 +1,74 @@ +#!/usr/bin/env python3 +"""Drive the real app in a real browser and save a screenshot. + +Used to regenerate example.png, and as a manual end-to-end check against a live +model rather than the fakes the test suite uses. + + .venv/bin/python scripts/screenshot.py "What is the capital of France?" out.png +""" + +from __future__ import annotations + +import pathlib +import socket +import sys +import threading + +ROOT = pathlib.Path(__file__).resolve().parent.parent +sys.path.insert(0, str(ROOT)) + +from playwright.sync_api import sync_playwright # noqa: E402 +from werkzeug.serving import make_server # noqa: E402 + +import app as app_module # noqa: E402 + + +def free_port() -> int: + with socket.socket() as sock: + sock.bind(("127.0.0.1", 0)) + return int(sock.getsockname()[1]) + + +def main() -> int: + question = sys.argv[1] if len(sys.argv) > 1 else "Can you give the 5 biggest cities in population size in order?" + out = pathlib.Path(sys.argv[2] if len(sys.argv) > 2 else "example.png") + + app_module.app.config["DB_PATH"] = str(ROOT / "embeddings.db") + port = free_port() + server = make_server("127.0.0.1", port, app_module.app, threaded=True) + thread = threading.Thread(target=server.serve_forever, daemon=True) + thread.start() + + try: + with sync_playwright() as playwright: + browser = playwright.chromium.launch() + page = browser.new_context(viewport={"width": 1600, "height": 1000}).new_page() + page.goto(f"http://127.0.0.1:{port}") + page.fill("#query", question) + page.click("#submit") + print("waiting for the model ...", flush=True) + page.wait_for_function( + "() => document.querySelector('#submit').disabled === false", timeout=600_000 + ) + page.wait_for_timeout(2500) # let the graph physics settle + + errors = page.locator(".error-box") + if errors.count(): + print(f"error shown in page: {errors.first.inner_text()}") + print(f"status: {page.locator('#status').inner_text()}") + print(f"steps: {page.locator('.step').count()}, final: {page.locator('.final-answer').count()}") + print(f"nodes: {page.evaluate('() => nodes.get().length')}, " + f"edges: {page.evaluate('() => edges.get().length')}") + + page.screenshot(path=str(out), full_page=True) + browser.close() + finally: + server.shutdown() + thread.join(timeout=5) + + print(f"wrote {out} ({out.stat().st_size // 1024} KB)") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/static/vendor/marked.umd.js b/static/vendor/marked.umd.js new file mode 100644 index 0000000..97dfe60 --- /dev/null +++ b/static/vendor/marked.umd.js @@ -0,0 +1,80 @@ +/** + * marked v18.0.9 - a markdown parser + * Copyright (c) 2018-2026, MarkedJS. (MIT License) + * Copyright (c) 2011-2018, Christopher Jeffrey. (MIT License) + * https://github.com/markedjs/marked + */ + +/** + * DO NOT EDIT THIS FILE + * The code in this file is generated from files in ./src/ + */ +(function(g,f){if(typeof exports=="object"&&typeof module<"u"){module.exports=f()}else if("function"==typeof define && define.amd){define("marked",f)}else {g["marked"]=f()}}(typeof globalThis < "u" ? globalThis : typeof self < "u" ? self : this,function(){var exports={};var __exports=exports;var module={exports}; +"use strict";var j=Object.defineProperty;var we=Object.getOwnPropertyDescriptor;var ye=Object.getOwnPropertyNames;var Pe=Object.prototype.hasOwnProperty;var Se=(l,e)=>{for(var t in e)j(l,t,{get:e[t],enumerable:!0})},_e=(l,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of ye(e))!Pe.call(l,s)&&s!==t&&j(l,s,{get:()=>e[s],enumerable:!(n=we(e,s))||n.enumerable});return l};var $e=l=>_e(j({},"__esModule",{value:!0}),l);var Lt={};Se(Lt,{Hooks:()=>P,Lexer:()=>x,Marked:()=>D,Parser:()=>b,Renderer:()=>y,TextRenderer:()=>_,Tokenizer:()=>w,defaults:()=>R,getDefaults:()=>z,lexer:()=>$t,marked:()=>g,options:()=>Ot,parse:()=>St,parseInline:()=>Pt,parser:()=>_t,setOptions:()=>wt,use:()=>Re,walkTokens:()=>yt});module.exports=$e(Lt);function z(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var R=z();function F(l){R=l}var E={exec:()=>null};function A(l){let e=[];return t=>{let n=Math.max(0,Math.min(3,t-1)),s=e[n];return s||(s=l(n),e[n]=s),s}}function k(l,e=""){let t=typeof l=="string"?l:l.source,n={replace:(s,r)=>{let i=typeof r=="string"?r:r.source;return i=i.replace(m.caret,"$1"),t=t.replace(s,i),n},getRegex:()=>new RegExp(t,e)};return n}var Le=((l="")=>{try{return!!new RegExp("(?<=1)(?/,blockquoteSetextReplace:/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \t]?/gm,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] +\S/,listReplaceTask:/^\[[ xX]\] +/,listTaskCheckbox:/\[[ xX]\]/,anyLine:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^/i,startPreScriptTag:/^<(pre|code|kbd|script)(\s|>)/i,endPreScriptTag:/^<\/(pre|code|kbd|script)(\s|>)/i,startAngleBracket:/^$/,pedanticHrefTitle:/^([^'"]*[^\s])\s+(['"])(.*)\2/,unicodeAlphaNumeric:/[\p{L}\p{N}]/u,escapeTest:/[&<>"']/,escapeReplace:/[&<>"']/g,escapeTestNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,escapeReplaceNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:l=>new RegExp(`^( {0,3}${l})((?:[ ][^\\n]*)?(?:\\n|$))`),nextBulletRegex:A(l=>new RegExp(`^ {0,${l}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`)),hrRegex:A(l=>new RegExp(`^ {0,${l}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`)),fencesBeginRegex:A(l=>new RegExp(`^ {0,${l}}(?:\`\`\`|~~~)`)),headingBeginRegex:A(l=>new RegExp(`^ {0,${l}}#`)),htmlBeginRegex:A(l=>new RegExp(`^ {0,${l}}<(?:[a-z].*>|!--)`,"i")),blockquoteBeginRegex:A(l=>new RegExp(`^ {0,${l}}>`))},Me=/^(?:[ \t]*(?:\n|$))+/,ze=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,Ee=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,v=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,Ce=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,K=/ {0,3}(?:[*+-]|\d{1,9}[.)])/,ae=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,le=k(ae).replace(/bull/g,K).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}(?:\s|$)/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/\|table/g,"").getRegex(),Ae=k(ae).replace(/bull/g,K).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}(?:\s|$)/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/table/g,/ {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(),W=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table|[ \t]+\n)[^\n]+)*)/,Ie=/^[^\n]+/,X=/(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/,Be=k(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label",X).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),De=k(/^(bull)([ \t][^\n]*?)?(?:\n|$)/).replace(/bull/g,K).getRegex(),Q="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",J=/|$))/,qe=k("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:[^\\n]*\\n*|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>[^\\n]*\\n*|$)|[^\\n]*\\n*|$)|[^\\n]*\\n*|$)|)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))","i").replace("comment",J).replace("tag",Q).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),pe=l=>k(W).replace("hr",v).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~~~)[^\\n]*\\n").replace("list",l).replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",Q).getRegex(),ve=pe(/ {0,3}(?:[*+-]|1[.)])[ \t]+[^ \t\n]/),He=pe(/ {0,3}(?:[*+-]|\d{1,9}[.)])(?:[ \t]|\n|$)/),Ze=k(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",He).getRegex(),V={blockquote:Ze,code:ze,def:Be,fences:Ee,heading:Ce,hr:v,html:qe,lheading:le,list:De,newline:Me,paragraph:ve,table:E,text:Ie},ie=k("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",v).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code","(?: {4}| {0,3} )[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~~~)[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",Q).getRegex(),Ge={...V,lheading:Ae,table:ie,paragraph:k(W).replace("hr",v).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",ie).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~~~)[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]+[^ \\t\\n]").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",Q).getRegex()},Qe={...V,html:k(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment",J).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:E,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:k(W).replace("hr",v).replace("heading",` *#{1,6} *[^ +]`).replace("lheading",le).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},Ne=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,je=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,ue=/^( {2,}|\\)\n(?!\s*$)/,Fe=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\`+)[^`]+\k(?!`))*?\]\((?:\\[\s\S]|[^\\\(\)]|\((?:\\[\s\S]|[^\\\(\)])*\))*\)/).replace("precode-",Le?"(?`+)[^`]+\k(?!`)/).replace("html",/<(?! )[^<>]*?>/).getRegex(),he=/^(?:\*+(?:((?!\*)punct)|([^\s*]))?)|^_+(?:((?!_)punct)|([^\s_]))?/,Ve=k(he,"u").replace(/punct/g,$).getRegex(),Ye=k(he,"u").replace(/punct/g,ce).getRegex(),et=/^(?:\*+(?:((?!\*)(?!openQuote)punct)|([^\s*]))?)|^_+(?:((?!_)(?!openQuote)punct)|([^\s_]))?/,tt=k(et,"u").replace(/openQuote/g,Ke).replace(/punct/g,$).getRegex(),de="^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)",nt=k(de,"gu").replace(/notPunctSpace/g,H).replace(/punctSpace/g,I).replace(/punct/g,$).getRegex(),rt=k(de,"gu").replace(/notPunctSpace/g,Xe).replace(/punctSpace/g,We).replace(/punct/g,ce).getRegex(),st="^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)[\\s](\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|(?:(?!\\*)punct|notPunctSpace)(\\*+)(?!\\*)(?=notPunctSpace)",it=k(st,"gu").replace(/notPunctSpace/g,H).replace(/punctSpace/g,I).replace(/punct/g,$).getRegex(),ot=k("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)","gu").replace(/notPunctSpace/g,H).replace(/punctSpace/g,I).replace(/punct/g,$).getRegex(),at="^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)[\\s](_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)|(?:(?!_)punct|notPunctSpace)(_+)(?!_)(?=notPunctSpace)",lt=k(at,"gu").replace(/notPunctSpace/g,H).replace(/punctSpace/g,I).replace(/punct/g,$).getRegex(),pt=k(/^~~?(?:((?!~)punct)|[^\s~])/,"u").replace(/punct/g,$).getRegex(),ut="^[^~]+(?=[^~])|(?!~)punct(~~?)(?=[\\s]|$)|notPunctSpace(~~?)(?!~)(?=punctSpace|$)|(?!~)punctSpace(~~?)(?=notPunctSpace)|[\\s](~~?)(?!~)(?=punct)|(?!~)punct(~~?)(?!~)(?=punct)|notPunctSpace(~~?)(?=notPunctSpace)",ct=k(ut,"gu").replace(/notPunctSpace/g,H).replace(/punctSpace/g,I).replace(/punct/g,$).getRegex(),ht=k(/\\(punct)/,"gu").replace(/punct/g,$).getRegex(),dt=k(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),kt=k(J).replace("(?:-->|$)","-->").getRegex(),gt=k("^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^").replace("comment",kt).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),G=/(?:\[(?:\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+(?!`)[^`]*?`+(?!`)|``+(?=\])|[^\[\]\\`])*?/,ft=k(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]+(?:\n[ \t]*)?|\n[ \t]*)(title))?\s*\)/).replace("label",G).replace("href",/<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]+|(?=\))/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),ke=k(/^!?\[(label)\]\[(ref)\]/).replace("label",G).replace("ref",X).getRegex(),ge=k(/^!?\[(ref)\](?:\[\])?/).replace("ref",X).getRegex(),mt=k("reflink|nolink(?!\\()","g").replace("reflink",ke).replace("nolink",ge).getRegex(),oe=/[hH][tT][tT][pP][sS]?|[fF][tT][pP]/,Y={_backpedal:E,anyPunctuation:ht,autolink:dt,blockSkip:Je,br:ue,code:je,del:E,delLDelim:E,delRDelim:E,emStrongLDelim:Ve,emStrongRDelimAst:nt,emStrongRDelimUnd:ot,escape:Ne,link:ft,nolink:ge,punctuation:Ue,reflink:ke,reflinkSearch:mt,tag:gt,text:Fe,url:E},xt={...Y,emStrongLDelim:tt,emStrongRDelimAst:it,emStrongRDelimUnd:lt,link:k(/^!?\[(label)\]\((.*?)\)/).replace("label",G).getRegex(),reflink:k(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",G).getRegex()},U={...Y,emStrongRDelimAst:rt,emStrongLDelim:Ye,delLDelim:pt,delRDelim:ct,url:k(/^((?:protocol):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/).replace("protocol",oe).replace("email",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])((?:\\[\s\S]|[^\\])*?(?:\\[\s\S]|[^\s~\\]))\1(?=[^~]|$)/,text:k(/^(`+|~+|[^`~])(?:(?=[`~])|(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\":">",'"':""","'":"'"},fe=l=>Rt[l];function O(l,e){if(e){if(m.escapeTest.test(l))return l.replace(m.escapeReplace,fe)}else if(m.escapeTestNoEncode.test(l))return l.replace(m.escapeReplaceNoEncode,fe);return l}function ee(l){try{l=encodeURI(l).replace(m.percentDecode,"%")}catch{return null}return l}function te(l,e){let t=l.replace(m.findPipe,(r,i,o)=>{let p=!1,a=i;for(;--a>=0&&o[a]==="\\";)p=!p;return p?"|":" |"}),n=t.split(m.splitPipe),s=0;if(n[0].trim()||n.shift(),n.length>0&&!n.at(-1)?.trim()&&n.pop(),e)if(n.length>e)n.splice(e);else for(;n.length=0&&m.blankLine.test(e[t]);)t--;return e.length-t<=2?l:e.slice(0,t+1).join(` +`)}function me(l,e){if(l.indexOf(e[1])===-1)return-1;let t=0;for(let n=0;n0?-2:-1}function xe(l,e=0){let t=e,n="";for(let s of l)if(s===" "){let r=4-t%4;n+=" ".repeat(r),t+=r}else n+=s,t++;return n}function be(l,e,t,n,s){let r=e.href,i=e.title||null,o=l[1].replace(s.other.outputLinkReplace,"$1");n.state.inLink=!0;let p={type:l[0].charAt(0)==="!"?"image":"link",raw:t,href:r,title:i,text:o,tokens:n.inlineTokens(o)};return n.state.inLink=!1,p}function Tt(l,e,t){let n=l.match(t.other.indentCodeCompensation);if(n===null)return e;let s=n[1];return e.split(` +`).map(r=>{let i=r.match(t.other.beginningSpace);if(i===null)return r;let[o]=i;return o.length>=s.length?r.slice(s.length):r}).join(` +`)}var w=class{options;rules;lexer;constructor(e){this.options=e||R}space(e){let t=this.rules.block.newline.exec(e);if(t&&t[0].length>0)return{type:"space",raw:t[0]}}code(e){let t=this.rules.block.code.exec(e);if(t){let n=this.options.pedantic?t[0]:ne(t[0]),s=n.replace(this.rules.other.codeRemoveIndent,"");return{type:"code",raw:n,codeBlockStyle:"indented",text:s}}}fences(e){let t=this.rules.block.fences.exec(e);if(t){let n=t[0],s=Tt(n,t[3]||"",this.rules);return{type:"code",raw:n,lang:t[2]?t[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):t[2],text:s}}}heading(e){let t=this.rules.block.heading.exec(e);if(t){let n=t[2].trim();if(this.rules.other.endingHash.test(n)){let s=L(n,"#");(this.options.pedantic||!s||this.rules.other.endingSpaceChar.test(s))&&(n=s.trim())}return{type:"heading",raw:L(t[0],` +`),depth:t[1].length,text:n,tokens:this.lexer.inline(n)}}}hr(e){let t=this.rules.block.hr.exec(e);if(t)return{type:"hr",raw:L(t[0],` +`)}}blockquote(e){let t=this.rules.block.blockquote.exec(e);if(t){let n=L(t[0],` +`).split(` +`),s="",r="",i=[];for(;n.length>0;){let o=!1,p=[],a;for(a=0;a1,r={type:"list",raw:"",ordered:s,start:s?+n.slice(0,-1):"",loose:!1,items:[]};n=s?`\\d{1,9}\\${n.slice(-1)}`:`\\${n}`,this.options.pedantic&&(n=s?n:"[*+-]");let i=this.rules.other.listItemRegex(n),o=!1;for(;e;){let a=!1,u="",c="";if(!(t=i.exec(e))||this.rules.block.hr.test(e))break;u=t[0],e=e.substring(u.length);let h=xe(t[2].split(` +`,1)[0],t[1].length),d=e.split(` +`,1)[0],T=!h.trim(),f=0;if(this.options.pedantic?(f=2,c=h.trimStart()):T?f=t[1].length+1:(f=h.search(this.rules.other.nonSpaceChar),f=f>4?1:f,c=h.slice(f),f+=t[1].length),T&&this.rules.other.blankLine.test(d)&&(u+=d+` +`,e=e.substring(d.length+1),a=!0),!a){let S=this.rules.other.nextBulletRegex(f),M=this.rules.other.hrRegex(f),re=this.rules.other.fencesBeginRegex(f),se=this.rules.other.headingBeginRegex(f),Te=this.rules.other.htmlBeginRegex(f),Oe=this.rules.other.blockquoteBeginRegex(f);for(;e;){let N=e.split(` +`,1)[0],q;if(d=N,this.options.pedantic?(d=d.replace(this.rules.other.listReplaceNesting," "),q=d):q=d.replace(this.rules.other.tabCharGlobal," "),re.test(d)||se.test(d)||Te.test(d)||Oe.test(d)||S.test(d)||M.test(d))break;if(q.search(this.rules.other.nonSpaceChar)>=f||!d.trim())c+=` +`+q.slice(f);else{if(T||h.replace(this.rules.other.tabCharGlobal," ").search(this.rules.other.nonSpaceChar)>=4||re.test(h)||se.test(h)||M.test(h))break;c+=` +`+d}T=!d.trim(),u+=N+` +`,e=e.substring(N.length+1),h=q.slice(f)}}r.loose||(o?r.loose=!0:this.rules.other.doubleBlankLine.test(u)&&(o=!0)),r.items.push({type:"list_item",raw:u,task:!!this.options.gfm&&this.rules.other.listIsTask.test(c),loose:!1,text:c,tokens:[]}),r.raw+=u}let p=r.items.at(-1);if(p)p.raw=p.raw.trimEnd(),p.text=p.text.trimEnd();else return;r.raw=r.raw.trimEnd();for(let a of r.items){this.lexer.state.top=!1,a.tokens=this.lexer.blockTokens(a.text,[]);let u=a.tokens[0];if(a.task&&(u?.type==="text"||u?.type==="paragraph")){a.text=a.text.replace(this.rules.other.listReplaceTask,""),u.raw=u.raw.replace(this.rules.other.listReplaceTask,""),u.text=u.text.replace(this.rules.other.listReplaceTask,"");for(let h=this.lexer.inlineQueue.length-1;h>=0;h--)if(this.rules.other.listIsTask.test(this.lexer.inlineQueue[h].src)){this.lexer.inlineQueue[h].src=this.lexer.inlineQueue[h].src.replace(this.rules.other.listReplaceTask,"");break}let c=this.rules.other.listTaskCheckbox.exec(a.raw);if(c){let h={type:"checkbox",raw:c[0]+" ",checked:c[0]!=="[ ]"};a.checked=h.checked,r.loose?a.tokens[0]&&["paragraph","text"].includes(a.tokens[0].type)&&"tokens"in a.tokens[0]&&a.tokens[0].tokens?(a.tokens[0].raw=h.raw+a.tokens[0].raw,a.tokens[0].text=h.raw+a.tokens[0].text,a.tokens[0].tokens.unshift(h)):a.tokens.unshift({type:"paragraph",raw:h.raw,text:h.raw,tokens:[h]}):a.tokens.unshift(h)}}else a.task&&(a.task=!1);if(!r.loose){let c=a.tokens.filter(d=>d.type==="space"),h=c.length>0&&c.some(d=>this.rules.other.anyLine.test(d.raw));r.loose=h}}if(r.loose)for(let a of r.items){a.loose=!0;for(let u of a.tokens)u.type==="text"&&(u.type="paragraph")}return r}}html(e){let t=this.rules.block.html.exec(e);if(t){let n=ne(t[0]);return{type:"html",block:!0,raw:n,pre:t[1]==="pre"||t[1]==="script"||t[1]==="style",text:n}}}def(e){let t=this.rules.block.def.exec(e);if(t){let n=t[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal," "),s=t[2]?t[2].replace(this.rules.other.hrefBrackets,"$1").replace(this.rules.inline.anyPunctuation,"$1"):"",r=t[3]?t[3].substring(1,t[3].length-1).replace(this.rules.inline.anyPunctuation,"$1"):t[3];return{type:"def",tag:n,raw:L(t[0],` +`),href:s,title:r}}}table(e){let t=this.rules.block.table.exec(e);if(!t||!this.rules.other.tableDelimiter.test(t[2]))return;let n=te(t[1]),s=t[2].replace(this.rules.other.tableAlignChars,"").split("|"),r=t[3]?.trim()?t[3].replace(this.rules.other.tableRowBlankLine,"").split(` +`):[],i={type:"table",raw:L(t[0],` +`),header:[],align:[],rows:[]};if(n.length===s.length){for(let o of s)this.rules.other.tableAlignRight.test(o)?i.align.push("right"):this.rules.other.tableAlignCenter.test(o)?i.align.push("center"):this.rules.other.tableAlignLeft.test(o)?i.align.push("left"):i.align.push(null);for(let o=0;o({text:p,tokens:this.lexer.inline(p),header:!1,align:i.align[a]})));return i}}lheading(e){let t=this.rules.block.lheading.exec(e);if(t){let n=t[1].trim();return{type:"heading",raw:L(t[0],` +`),depth:t[2].charAt(0)==="="?1:2,text:n,tokens:this.lexer.inline(n)}}}paragraph(e){let t=this.rules.block.paragraph.exec(e);if(t){let n=t[1].charAt(t[1].length-1)===` +`?t[1].slice(0,-1):t[1];return{type:"paragraph",raw:t[0],text:n,tokens:this.lexer.inline(n)}}}text(e){let t=this.rules.block.text.exec(e);if(t)return{type:"text",raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}}escape(e){let t=this.rules.inline.escape.exec(e);if(t)return{type:"escape",raw:t[0],text:t[1]}}tag(e){let t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&this.rules.other.startATag.test(t[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:t[0]}}link(e){let t=this.rules.inline.link.exec(e);if(t){let n=t[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(n)){if(!this.rules.other.endAngleBracket.test(n))return;let i=L(n.slice(0,-1),"\\");if((n.length-i.length)%2===0)return}else{let i=me(t[2],"()");if(i===-2)return;if(i>-1){let p=(t[0].indexOf("!")===0?5:4)+t[1].length+i;t[2]=t[2].substring(0,i),t[0]=t[0].substring(0,p).trim(),t[3]=""}}let s=t[2],r="";if(this.options.pedantic){let i=this.rules.other.pedanticHrefTitle.exec(s);i&&(s=i[1],r=i[3])}else r=t[3]?t[3].slice(1,-1):"";return s=s.trim(),this.rules.other.startAngleBracket.test(s)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(n)?s=s.slice(1):s=s.slice(1,-1)),be(t,{href:s&&s.replace(this.rules.inline.anyPunctuation,"$1"),title:r&&r.replace(this.rules.inline.anyPunctuation,"$1")},t[0],this.lexer,this.rules)}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){let s=(n[2]||n[1]).replace(this.rules.other.multipleSpaceGlobal," "),r=t[s.toLowerCase()];if(!r){let i=n[0].charAt(0);return{type:"text",raw:i,text:i}}return be(n,r,n[0],this.lexer,this.rules)}}emStrong(e,t,n=""){let s=this.rules.inline.emStrongLDelim.exec(e);if(!s||!s[1]&&!s[2]&&!s[3]&&!s[4]||s[4]&&n.match(this.rules.other.unicodeAlphaNumeric))return;if(!(s[1]||s[3]||"")||!n||this.rules.inline.punctuation.exec(n)){let i=[...s[0]].length-1,o,p,a=i,u=0,c=s[0][0],h=n===c,d=c==="*"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(d.lastIndex=0,t=t.slice(-1*e.length+i);(s=d.exec(t))!==null;){if(o=s[1]||s[2]||s[3]||s[4]||s[5]||s[6],!o)continue;if(p=[...o].length,s[3]||s[4]){a+=p;continue}else if(s[5]||s[6]){if(i%3&&!((i+p)%3)){u+=p;continue}if(h)break}if(a-=p,a>0)continue;p=Math.min(p,p+a+u);let T=[...s[0]][0].length,f=e.slice(0,i+s.index+T+p);if(Math.min(i,p)%2){let M=f.slice(1,-1);return{type:"em",raw:f,text:M,tokens:this.lexer.inlineTokens(M)}}let S=f.slice(2,-2);return{type:"strong",raw:f,text:S,tokens:this.lexer.inlineTokens(S)}}}}codespan(e){let t=this.rules.inline.code.exec(e);if(t){let n=t[2].replace(this.rules.other.newLineCharGlobal," "),s=this.rules.other.nonSpaceChar.test(n),r=this.rules.other.startingSpaceChar.test(n)&&this.rules.other.endingSpaceChar.test(n);return s&&r&&(n=n.substring(1,n.length-1)),{type:"codespan",raw:t[0],text:n}}}br(e){let t=this.rules.inline.br.exec(e);if(t)return{type:"br",raw:t[0]}}del(e,t,n=""){let s=this.rules.inline.delLDelim.exec(e);if(!s)return;if(!(s[1]||"")||!n||this.rules.inline.punctuation.exec(n)){let i=[...s[0]].length-1,o,p,a=i,u=this.rules.inline.delRDelim;for(u.lastIndex=0,t=t.slice(-1*e.length+i);(s=u.exec(t))!==null;){if(o=s[1]||s[2]||s[3]||s[4]||s[5]||s[6],!o||(p=[...o].length,p!==i))continue;if(s[3]||s[4]){a+=p;continue}if(a-=p,a>0)continue;p=Math.min(p,p+a);let c=[...s[0]][0].length,h=e.slice(0,i+s.index+c+p),d=h.slice(i,-i);return{type:"del",raw:h,text:d,tokens:this.lexer.inlineTokens(d)}}}}autolink(e){let t=this.rules.inline.autolink.exec(e);if(t){let n,s;return t[2]==="@"?(n=t[1],s="mailto:"+n):(n=t[1],s=n),{type:"link",raw:t[0],text:n,href:s,tokens:[{type:"text",raw:n,text:n}]}}}url(e){let t;if(t=this.rules.inline.url.exec(e)){let n,s;if(t[2]==="@")n=t[0],s="mailto:"+n;else{let r;do r=t[0],t[0]=this.rules.inline._backpedal.exec(t[0])?.[0]??"";while(r!==t[0]);n=t[0],t[1]==="www."?s="http://"+t[0]:s=t[0]}return{type:"link",raw:t[0],text:n,href:s,tokens:[{type:"text",raw:n,text:n}]}}}inlineText(e){let t=this.rules.inline.text.exec(e);if(t){let n=this.lexer.state.inRawBlock;return{type:"text",raw:t[0],text:t[0],escaped:n}}}};var x=class l{tokens;options;state;inlineQueue;tokenizer;constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||R,this.options.tokenizer=this.options.tokenizer||new w,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};let t={other:m,block:Z.normal,inline:B.normal};this.options.pedantic?(t.block=Z.pedantic,t.inline=B.pedantic):this.options.gfm&&(t.block=Z.gfm,this.options.breaks?t.inline=B.breaks:t.inline=B.gfm),this.tokenizer.rules=t}static get rules(){return{block:Z,inline:B}}static lex(e,t){return new l(t).lex(e)}static lexInline(e,t){return new l(t).inlineTokens(e)}lex(e){e=e.replace(m.carriageReturn,` +`),this.blockTokens(e,this.tokens);for(let t=0;t(r=o.call({lexer:this},e,t))?(e=e.substring(r.raw.length),t.push(r),!0):!1))continue;if(r=this.tokenizer.space(e)){e=e.substring(r.raw.length);let o=t.at(-1);r.raw.length===1&&o!==void 0?o.raw+=` +`:t.push(r);continue}if(r=this.tokenizer.code(e)){e=e.substring(r.raw.length);let o=t.at(-1);o?.type==="paragraph"||o?.type==="text"?(o.raw+=(o.raw.endsWith(` +`)?"":` +`)+r.raw,o.text+=` +`+r.text,this.inlineQueue.at(-1).src=o.text):t.push(r);continue}if(r=this.tokenizer.fences(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.heading(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.hr(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.blockquote(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.list(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.html(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.def(e)){e=e.substring(r.raw.length);let o=t.at(-1);o?.type==="paragraph"||o?.type==="text"?(o.raw+=(o.raw.endsWith(` +`)?"":` +`)+r.raw,o.text+=` +`+r.raw,this.inlineQueue.at(-1).src=o.text):this.tokens.links[r.tag]||(this.tokens.links[r.tag]={href:r.href,title:r.title},t.push(r));continue}if(r=this.tokenizer.table(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.lheading(e)){e=e.substring(r.raw.length),t.push(r);continue}let i=e;if(this.options.extensions?.startBlock){let o=1/0,p=e.slice(1),a;this.options.extensions.startBlock.forEach(u=>{a=u.call({lexer:this},p),typeof a=="number"&&a>=0&&(o=Math.min(o,a))}),o<1/0&&o>=0&&(i=e.substring(0,o+1))}if(this.state.top&&(r=this.tokenizer.paragraph(i))){let o=t.at(-1);n&&o?.type==="paragraph"?(o.raw+=(o.raw.endsWith(` +`)?"":` +`)+r.raw,o.text+=` +`+r.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=o.text):t.push(r),n=i.length!==e.length,e=e.substring(r.raw.length);continue}if(r=this.tokenizer.text(e)){e=e.substring(r.raw.length);let o=t.at(-1);o?.type==="text"?(o.raw+=(o.raw.endsWith(` +`)?"":` +`)+r.raw,o.text+=` +`+r.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=o.text):t.push(r);continue}if(e){this.infiniteLoopError(e.charCodeAt(0));break}}return this.state.top=!0,t}inline(e,t=[]){return this.inlineQueue.push({src:e,tokens:t}),t}inlineTokens(e,t=[]){this.tokenizer.lexer=this;let n=e;if(this.tokens.links){let o=Object.keys(this.tokens.links);o.length>0&&(n=n.replace(this.tokenizer.rules.inline.reflinkSearch,p=>o.includes(p.slice(p.lastIndexOf("[")+1,-1))?"["+"a".repeat(p.length-2)+"]":p))}n=n.replace(this.tokenizer.rules.inline.anyPunctuation,"++"),n=n.replace(this.tokenizer.rules.inline.blockSkip,(o,p,a)=>{let u=a?a.length:0;return o.slice(0,u)+"["+"a".repeat(o.length-u-2)+"]"}),n=this.options.hooks?.emStrongMask?.call({lexer:this},n)??n;let s=!1,r="",i=1/0;for(;e;){if(e.length(o=a.call({lexer:this},e,t))?(e=e.substring(o.raw.length),t.push(o),!0):!1))continue;if(o=this.tokenizer.escape(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.tag(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.link(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(o.raw.length);let a=t.at(-1);o.type==="text"&&a?.type==="text"?(a.raw+=o.raw,a.text+=o.text):t.push(o);continue}if(o=this.tokenizer.emStrong(e,n,r)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.codespan(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.br(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.del(e,n,r)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.autolink(e)){e=e.substring(o.raw.length),t.push(o);continue}if(!this.state.inLink&&(o=this.tokenizer.url(e))){e=e.substring(o.raw.length),t.push(o);continue}let p=e;if(this.options.extensions?.startInline){let a=1/0,u=e.slice(1),c;this.options.extensions.startInline.forEach(h=>{c=h.call({lexer:this},u),typeof c=="number"&&c>=0&&(a=Math.min(a,c))}),a<1/0&&a>=0&&(p=e.substring(0,a+1))}if(o=this.tokenizer.inlineText(p)){e=e.substring(o.raw.length),o.raw.slice(-1)!=="_"&&(r=o.raw.slice(-1)),s=!0;let a=t.at(-1);a?.type==="text"?(a.raw+=o.raw,a.text+=o.text):t.push(o);continue}if(e){this.infiniteLoopError(e.charCodeAt(0));break}}return t}infiniteLoopError(e){let t="Infinite loop on byte: "+e;if(this.options.silent)console.error(t);else throw new Error(t)}};var y=class{options;parser;constructor(e){this.options=e||R}space(e){return""}code({text:e,lang:t,escaped:n}){let s=(t||"").match(m.notSpaceStart)?.[0],r=e.replace(m.endingNewline,"")+` +`;return s?'
'+(n?r:O(r,!0))+`
+`:"
"+(n?r:O(r,!0))+`
+`}blockquote({tokens:e}){return`
+${this.parser.parse(e)}
+`}html({text:e}){return e}def(e){return""}heading({tokens:e,depth:t}){return`${this.parser.parseInline(e)} +`}hr(e){return`
+`}list(e){let t=e.ordered,n=e.start,s="";for(let o=0;o +`+s+" +`}listitem(e){return`
  • ${this.parser.parse(e.tokens)}
  • +`}checkbox({checked:e}){return" '}paragraph({tokens:e}){return`

    ${this.parser.parseInline(e)}

    +`}table(e){let t="",n="";for(let r=0;r${s}`),` + +`+t+` +`+s+`
    +`}tablerow({text:e}){return` +${e} +`}tablecell(e){let t=this.parser.parseInline(e.tokens),n=e.header?"th":"td";return(e.align?`<${n} align="${e.align}">`:`<${n}>`)+t+` +`}strong({tokens:e}){return`${this.parser.parseInline(e)}`}em({tokens:e}){return`${this.parser.parseInline(e)}`}codespan({text:e}){return`${O(e,!0)}`}br(e){return"
    "}del({tokens:e}){return`${this.parser.parseInline(e)}`}link({href:e,title:t,tokens:n}){let s=this.parser.parseInline(n),r=ee(e);if(r===null)return s;e=r;let i='
    ",i}image({href:e,title:t,text:n,tokens:s}){s&&(n=this.parser.parseInline(s,this.parser.textRenderer));let r=ee(e);if(r===null)return O(n);e=r;let i=`${O(n)}{let o=r[i].flat(1/0);n=n.concat(this.walkTokens(o,t))}):r.tokens&&(n=n.concat(this.walkTokens(r.tokens,t)))}}return n}use(...e){let t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(n=>{let s={...n};if(s.async=this.defaults.async||s.async||!1,n.extensions&&(n.extensions.forEach(r=>{if(!r.name)throw new Error("extension name required");if("renderer"in r){let i=t.renderers[r.name];i?t.renderers[r.name]=function(...o){let p=r.renderer.apply(this,o);return p===!1&&(p=i.apply(this,o)),p}:t.renderers[r.name]=r.renderer}if("tokenizer"in r){if(!r.level||r.level!=="block"&&r.level!=="inline")throw new Error("extension level must be 'block' or 'inline'");let i=t[r.level];i?i.unshift(r.tokenizer):t[r.level]=[r.tokenizer],r.start&&(r.level==="block"?t.startBlock?t.startBlock.push(r.start):t.startBlock=[r.start]:r.level==="inline"&&(t.startInline?t.startInline.push(r.start):t.startInline=[r.start]))}"childTokens"in r&&r.childTokens&&(t.childTokens[r.name]=r.childTokens)}),s.extensions=t),n.renderer){let r=this.defaults.renderer||new y(this.defaults);for(let i in n.renderer){if(!(i in r))throw new Error(`renderer '${i}' does not exist`);if(["options","parser"].includes(i))continue;let o=i,p=n.renderer[o],a=r[o];r[o]=(...u)=>{let c=p.apply(r,u);return c===!1&&(c=a.apply(r,u)),c||""}}s.renderer=r}if(n.tokenizer){let r=this.defaults.tokenizer||new w(this.defaults);for(let i in n.tokenizer){if(!(i in r))throw new Error(`tokenizer '${i}' does not exist`);if(["options","rules","lexer"].includes(i))continue;let o=i,p=n.tokenizer[o],a=r[o];r[o]=(...u)=>{let c=p.apply(r,u);return c===!1&&(c=a.apply(r,u)),c}}s.tokenizer=r}if(n.hooks){let r=this.defaults.hooks||new P;for(let i in n.hooks){if(!(i in r))throw new Error(`hook '${i}' does not exist`);if(["options","block"].includes(i))continue;let o=i,p=n.hooks[o],a=r[o];P.passThroughHooks.has(i)?r[o]=u=>{if(this.defaults.async&&P.passThroughHooksRespectAsync.has(i))return(async()=>{let h=await p.call(r,u);return a.call(r,h)})();let c=p.call(r,u);return a.call(r,c)}:r[o]=(...u)=>{if(this.defaults.async)return(async()=>{let h=await p.apply(r,u);return h===!1&&(h=await a.apply(r,u)),h})();let c=p.apply(r,u);return c===!1&&(c=a.apply(r,u)),c}}s.hooks=r}if(n.walkTokens){let r=this.defaults.walkTokens,i=n.walkTokens;s.walkTokens=function(o){let p=[];return p.push(i.call(this,o)),r&&(p=p.concat(r.call(this,o))),p}}this.defaults={...this.defaults,...s}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,t){return x.lex(e,t??this.defaults)}parser(e,t){return b.parse(e,t??this.defaults)}parseMarkdown(e){return(n,s)=>{let r={...s},i={...this.defaults,...r},o=this.onError(!!i.silent,!!i.async);if(this.defaults.async===!0&&r.async===!1)return o(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));if(typeof n>"u"||n===null)return o(new Error("marked(): input parameter is undefined or null"));if(typeof n!="string")return o(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(n)+", string expected"));if(i.hooks&&(i.hooks.options=i,i.hooks.block=e),i.async)return(async()=>{let p=i.hooks?await i.hooks.preprocess(n):n,u=await(i.hooks?await i.hooks.provideLexer(e):e?x.lex:x.lexInline)(p,i),c=i.hooks?await i.hooks.processAllTokens(u):u;i.walkTokens&&await Promise.all(this.walkTokens(c,i.walkTokens));let d=await(i.hooks?await i.hooks.provideParser(e):e?b.parse:b.parseInline)(c,i);return i.hooks?await i.hooks.postprocess(d):d})().catch(o);try{i.hooks&&(n=i.hooks.preprocess(n));let a=(i.hooks?i.hooks.provideLexer(e):e?x.lex:x.lexInline)(n,i);i.hooks&&(a=i.hooks.processAllTokens(a)),i.walkTokens&&this.walkTokens(a,i.walkTokens);let c=(i.hooks?i.hooks.provideParser(e):e?b.parse:b.parseInline)(a,i);return i.hooks&&(c=i.hooks.postprocess(c)),c}catch(p){return o(p)}}}onError(e,t){return n=>{if(n.message+=` +Please report this to https://github.com/markedjs/marked.`,e){let s="

    An error occurred:

    "+O(n.message+"",!0)+"
    ";return t?Promise.resolve(s):s}if(t)return Promise.reject(n);throw n}}};var C=new D;function g(l,e){return C.parse(l,e)}g.options=g.setOptions=function(l){return C.setOptions(l),g.defaults=C.defaults,F(g.defaults),g};g.getDefaults=z;g.defaults=R;function Re(...l){return C.use(...l),g.defaults=C.defaults,F(g.defaults),g}g.use=Re;g.walkTokens=function(l,e){return C.walkTokens(l,e)};g.parseInline=C.parseInline;g.Parser=b;g.parser=b.parse;g.Renderer=y;g.TextRenderer=_;g.Lexer=x;g.lexer=x.lex;g.Tokenizer=w;g.Hooks=P;g.parse=g;var Ot=g.options,wt=g.setOptions,yt=g.walkTokens,Pt=g.parseInline,St=g,_t=b.parse,$t=x.lex; + +if(__exports != exports)module.exports = exports;return module.exports})); +//# sourceMappingURL=marked.umd.js.map diff --git a/static/vendor/purify.min.js b/static/vendor/purify.min.js new file mode 100644 index 0000000..86efd85 --- /dev/null +++ b/static/vendor/purify.min.js @@ -0,0 +1,3 @@ +/*! @license DOMPurify 3.4.13 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.4.13/LICENSE */ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).DOMPurify=t()}(this,function(){"use strict";function e(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=Array(t);n2?n-2:0),r=2;r1?t-1:0),o=1;o1?n-1:0),r=1;r2&&void 0!==arguments[2]?arguments[2]:T;if(o&&o(e,null),!b(t))return e;let i=t.length;for(;i--;){let o=t[i];if("string"==typeof o){const e=n(o);e!==o&&(r(t)||(t[i]=e),o=e)}e[o]=!0}return e}function z(e){for(let t=0;t/g),J=c(/\${[\w\W]*/g),Q=c(/^data-[\-\w.\u00B7-\uFFFF]+$/),ee=c(/^aria-[\-\w]+$/),te=c(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),ne=c(/^(?:\w+script|data):/i),oe=c(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),re=c(/^html$/i),ie=c(/^[a-z][.\w]*(-[.\w]+)+$/i),ae=c(/<[/\w!]/g),le=c(/<[/\w]/g),ce=c(/<\/no(script|embed|frames)/i),se=c(/\/>/i),ue=1,fe=3,pe=7,me=8,de=9,he=11,ge=function(){return"undefined"==typeof window?null:window},ye=function(e,t,n,o){return R(e,t)&&b(e[t])?M(o.base?P(o.base):{},e[t],o.transform):n};var be=function e(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:ge();const o=t=>e(t);if(o.version="3.4.13",o.removed=[],!t||!t.document||t.document.nodeType!==de||!t.Element)return o.isSupported=!1,o;let r=t.document;const i=r,a=i.currentScript;t.DocumentFragment;const u=t.HTMLTemplateElement,f=t.Node,p=t.Element,k=t.NodeFilter,L=t.NamedNodeMap;void 0===L&&(t.NamedNodeMap||t.MozNamedAttrMap),t.HTMLFormElement;const z=t.DOMParser,be=t.trustedTypes,Te=p.prototype,Se=U(Te,"cloneNode"),Ee=U(Te,"remove"),Ae=U(Te,"nextSibling"),Ne=U(Te,"childNodes"),_e=U(Te,"parentNode"),we=U(Te,"shadowRoot"),Oe=U(Te,"attributes"),ve=f&&f.prototype?U(f.prototype,"nodeType"):null,De=f&&f.prototype?U(f.prototype,"nodeName"):null,Re=f&&f.prototype?U(f.prototype,"ownerDocument"):null;if("function"==typeof u){const e=r.createElement("template");e.content&&e.content.ownerDocument&&(r=e.content.ownerDocument)}let Ce,Ie,xe="",ke=!1,Le=0;const Me=function(){if(Le>0)throw x('A configured TRUSTED_TYPES_POLICY callback (createHTML or createScriptURL) must not call DOMPurify.sanitize, as that causes infinite recursion. Do not pass a policy whose callbacks wrap DOMPurify as TRUSTED_TYPES_POLICY; see the "DOMPurify and Trusted Types" section of the README.')},ze=function(e){Me(),Le++;try{return Ce.createHTML(e)}finally{Le--}},Pe=function(){return ke||(Ie=function(e,t){if("object"!=typeof e||"function"!=typeof e.createPolicy)return null;let n=null;const o="data-tt-policy-suffix";t&&t.hasAttribute(o)&&(n=t.getAttribute(o));const r="dompurify"+(n?"#"+n:"");try{return e.createPolicy(r,{createHTML:e=>e,createScriptURL:e=>e})}catch(e){return console.warn("TrustedTypes policy "+r+" could not be created."),null}}(be,a),ke=!0),Ie},Ue=r,Fe=Ue.implementation,He=Ue.createNodeIterator,je=Ue.createDocumentFragment,Be=Ue.getElementsByTagName,Ge=i.importNode;let We={afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]};o.isSupported="function"==typeof n&&"function"==typeof _e&&Fe&&void 0!==Fe.createHTMLDocument;const Ye=V,qe=Z,Xe=J,$e=Q,Ke=ee,Ve=ne,Ze=oe,Je=ie;let Qe=te,et=null;const tt=M({},[...F,...H,...j,...G,...Y]);let nt=null;const ot=M({},[...q,...X,...$,...K]);let rt=Object.seal(s(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),it=null,at=null;const lt=Object.seal(s(null,{tagCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeCheck:{writable:!0,configurable:!1,enumerable:!0,value:null}}));let ct=!0,st=!0,ut=!1,ft=!0,pt=!1,mt=!0,dt=!1,ht=!1,gt=null,yt=null,bt=!1,Tt=!1,St=!1,Et=!1,At=!0,Nt=!1;const _t="user-content-";let wt=!0,Ot=!1,vt={},Dt=null;const Rt=M({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","selectedcontent","style","svg","template","thead","title","video","xmp"]);let Ct=null;const It=M({},["audio","video","img","source","image","track"]);let xt=null;const kt=M({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),Lt="http://www.w3.org/1998/Math/MathML",Mt="http://www.w3.org/2000/svg",zt="http://www.w3.org/1999/xhtml";let Pt=zt,Ut=!1,Ft=null;const Ht=M({},[Lt,Mt,zt],S),jt=l(["mi","mo","mn","ms","mtext"]);let Bt=M({},jt);const Gt=l(["annotation-xml"]);let Wt=M({},Gt);const Yt=M({},["title","style","font","a","script"]);let qt=null;const Xt=["application/xhtml+xml","text/html"];let $t=null,Kt=null;const Vt=r.createElement("form"),Zt=function(e){return e instanceof RegExp||e instanceof Function},Jt=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(Kt&&Kt===e)return;e&&"object"==typeof e||(e={}),e=P(e),qt=-1===Xt.indexOf(e.PARSER_MEDIA_TYPE)?"text/html":e.PARSER_MEDIA_TYPE,$t="application/xhtml+xml"===qt?S:T,et=ye(e,"ALLOWED_TAGS",tt,{transform:$t}),nt=ye(e,"ALLOWED_ATTR",ot,{transform:$t}),Ft=ye(e,"ALLOWED_NAMESPACES",Ht,{transform:S}),xt=ye(e,"ADD_URI_SAFE_ATTR",kt,{transform:$t,base:kt}),Ct=ye(e,"ADD_DATA_URI_TAGS",It,{transform:$t,base:It}),Dt=ye(e,"FORBID_CONTENTS",Rt,{transform:$t}),it=ye(e,"FORBID_TAGS",P({}),{transform:$t}),at=ye(e,"FORBID_ATTR",P({}),{transform:$t}),vt=!!R(e,"USE_PROFILES")&&(e.USE_PROFILES&&"object"==typeof e.USE_PROFILES?P(e.USE_PROFILES):e.USE_PROFILES),ct=!1!==e.ALLOW_ARIA_ATTR,st=!1!==e.ALLOW_DATA_ATTR,ut=e.ALLOW_UNKNOWN_PROTOCOLS||!1,ft=!1!==e.ALLOW_SELF_CLOSE_IN_ATTR,pt=e.SAFE_FOR_TEMPLATES||!1,mt=!1!==e.SAFE_FOR_XML,dt=e.WHOLE_DOCUMENT||!1,Tt=e.RETURN_DOM||!1,St=e.RETURN_DOM_FRAGMENT||!1,Et=e.RETURN_TRUSTED_TYPE||!1,bt=e.FORCE_BODY||!1,At=!1!==e.SANITIZE_DOM,Nt=e.SANITIZE_NAMED_PROPS||!1,wt=!1!==e.KEEP_CONTENT,Ot=e.IN_PLACE||!1,Qe=function(e){try{return I(e,""),!0}catch(e){return!1}}(e.ALLOWED_URI_REGEXP)?e.ALLOWED_URI_REGEXP:te,Pt="string"==typeof e.NAMESPACE?e.NAMESPACE:zt,Bt=R(e,"MATHML_TEXT_INTEGRATION_POINTS")&&e.MATHML_TEXT_INTEGRATION_POINTS&&"object"==typeof e.MATHML_TEXT_INTEGRATION_POINTS?P(e.MATHML_TEXT_INTEGRATION_POINTS):M({},jt),Wt=R(e,"HTML_INTEGRATION_POINTS")&&e.HTML_INTEGRATION_POINTS&&"object"==typeof e.HTML_INTEGRATION_POINTS?P(e.HTML_INTEGRATION_POINTS):M({},Gt);const t=R(e,"CUSTOM_ELEMENT_HANDLING")&&e.CUSTOM_ELEMENT_HANDLING&&"object"==typeof e.CUSTOM_ELEMENT_HANDLING?P(e.CUSTOM_ELEMENT_HANDLING):s(null);if(rt=s(null),R(t,"tagNameCheck")&&Zt(t.tagNameCheck)&&(rt.tagNameCheck=t.tagNameCheck),R(t,"attributeNameCheck")&&Zt(t.attributeNameCheck)&&(rt.attributeNameCheck=t.attributeNameCheck),R(t,"allowCustomizedBuiltInElements")&&"boolean"==typeof t.allowCustomizedBuiltInElements&&(rt.allowCustomizedBuiltInElements=t.allowCustomizedBuiltInElements),c(rt),pt&&(st=!1),St&&(Tt=!0),vt&&(et=M({},Y),nt=s(null),!0===vt.html&&(M(et,F),M(nt,q)),!0===vt.svg&&(M(et,H),M(nt,X),M(nt,K)),!0===vt.svgFilters&&(M(et,j),M(nt,X),M(nt,K)),!0===vt.mathMl&&(M(et,G),M(nt,$),M(nt,K))),lt.tagCheck=null,lt.attributeCheck=null,R(e,"ADD_TAGS")&&("function"==typeof e.ADD_TAGS?lt.tagCheck=e.ADD_TAGS:b(e.ADD_TAGS)&&(et===tt&&(et=P(et)),M(et,e.ADD_TAGS,$t))),R(e,"ADD_ATTR")&&("function"==typeof e.ADD_ATTR?lt.attributeCheck=e.ADD_ATTR:b(e.ADD_ATTR)&&(nt===ot&&(nt=P(nt)),M(nt,e.ADD_ATTR,$t))),R(e,"ADD_URI_SAFE_ATTR")&&b(e.ADD_URI_SAFE_ATTR)&&M(xt,e.ADD_URI_SAFE_ATTR,$t),R(e,"FORBID_CONTENTS")&&b(e.FORBID_CONTENTS)&&(Dt===Rt&&(Dt=P(Dt)),M(Dt,e.FORBID_CONTENTS,$t)),R(e,"ADD_FORBID_CONTENTS")&&b(e.ADD_FORBID_CONTENTS)&&(Dt===Rt&&(Dt=P(Dt)),M(Dt,e.ADD_FORBID_CONTENTS,$t)),wt&&(et["#text"]=!0),dt&&M(et,["html","head","body"]),et.table&&(M(et,["tbody"]),delete it.tbody),e.TRUSTED_TYPES_POLICY){if("function"!=typeof e.TRUSTED_TYPES_POLICY.createHTML)throw x('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if("function"!=typeof e.TRUSTED_TYPES_POLICY.createScriptURL)throw x('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');const t=Ce;Ce=e.TRUSTED_TYPES_POLICY;try{xe=ze("")}catch(e){throw Ce=t,e}}else null===e.TRUSTED_TYPES_POLICY?(Ce=void 0,xe=""):(void 0===Ce&&(Ce=Pe()),Ce&&"string"==typeof xe&&(xe=ze("")));l&&l(e),Kt=e},Qt=M({},[...H,...j,...B]),en=M({},[...G,...W]),tn=function(e){let t=_e(e);t&&t.tagName||(t={namespaceURI:Pt,tagName:"template"});const n=T(e.tagName),o=T(t.tagName);return!!Ft[e.namespaceURI]&&(e.namespaceURI===Mt?function(e,t,n){return t.namespaceURI===zt?"svg"===e:t.namespaceURI===Lt?"svg"===e&&("annotation-xml"===n||Bt[n]):Boolean(Qt[e])}(n,t,o):e.namespaceURI===Lt?function(e,t,n){return t.namespaceURI===zt?"math"===e:t.namespaceURI===Mt?"math"===e&&Wt[n]:Boolean(en[e])}(n,t,o):e.namespaceURI===zt?function(e,t,n){return!(t.namespaceURI===Mt&&!Wt[n])&&!(t.namespaceURI===Lt&&!Bt[n])&&!en[e]&&(Yt[e]||!Qt[e])}(n,t,o):!("application/xhtml+xml"!==qt||!Ft[e.namespaceURI]))},nn=function(e){g(o.removed,{element:e});try{_e(e).removeChild(e)}catch(t){if(Ee(e),!_e(e))throw x("a node selected for removal could not be detached from its tree and cannot be safely returned; refusing to sanitize in place")}},on=function(e){ln(e);const t=Ne(e);if(t){const e=[];m(t,t=>{g(e,t)}),m(e,e=>{try{Ee(e)}catch(e){}})}const n=Oe(e);if(n)for(let t=n.length-1;t>=0;--t){const o=n[t],r=o&&o.name;if("string"==typeof r)try{e.removeAttribute(r)}catch(e){}}},rn=function(e,t){try{g(o.removed,{attribute:t.getAttributeNode(e),from:t})}catch(e){g(o.removed,{attribute:null,from:t})}if(t.removeAttribute(e),"is"===e)if(Tt||St)try{nn(t)}catch(e){}else try{t.setAttribute(e,"")}catch(e){}},an=function(e){const t=Oe(e);if(t)for(let n=t.length-1;n>=0;--n){const o=t[n],r=o&&o.name;if("string"==typeof r&&!nt[$t(r)])try{e.removeAttribute(r)}catch(e){}}},ln=function(e){const t=[e];for(;t.length>0;){const e=t.pop();(ve?ve(e):e.nodeType)===ue&&an(e);const n=Ne(e);if(n)for(let e=n.length-1;e>=0;--e)t.push(n[e])}},cn=function(e){let t=null,n=null;if(bt)e=""+e;else{const t=E(e,/^[\r\n\t ]+/);n=t&&t[0]}"application/xhtml+xml"===qt&&Pt===zt&&(e=''+e+"");const o=Ce?ze(e):e;if(Pt===zt)try{t=(new z).parseFromString(o,qt)}catch(e){}if(!t||!t.documentElement){t=Fe.createDocument(Pt,"template",null);try{t.documentElement.innerHTML=Ut?xe:o}catch(e){}}const i=t.body||t.documentElement;return e&&n&&i.insertBefore(r.createTextNode(n),i.childNodes[0]||null),Pt===zt?Be.call(t,dt?"html":"body")[0]:dt?t.documentElement:i},sn=function(e){const t=Re?Re(e):e.ownerDocument;return He.call(t||e,e,k.SHOW_ELEMENT|k.SHOW_COMMENT|k.SHOW_TEXT|k.SHOW_PROCESSING_INSTRUCTION|k.SHOW_CDATA_SECTION,null)},un=function(e){return e=A(e,Ye," "),e=A(e,qe," "),e=A(e,Xe," ")},fn=function(e){var t;e.normalize();const n=Re?Re(e):e.ownerDocument,o=He.call(n||e,e,k.SHOW_TEXT|k.SHOW_COMMENT|k.SHOW_CDATA_SECTION|k.SHOW_PROCESSING_INSTRUCTION,null);let r=o.nextNode();for(;r;)r.data=un(r.data),r=o.nextNode();const i=null===(t=e.querySelectorAll)||void 0===t?void 0:t.call(e,"template");i&&m(i,e=>{mn(e.content)&&fn(e.content)})},pn=function(e){const t=De?De(e):null;return"string"==typeof t&&("form"===$t(t)&&("string"!=typeof e.nodeName||"string"!=typeof e.textContent||"function"!=typeof e.removeChild||e.attributes!==Oe(e)||"function"!=typeof e.removeAttribute||"function"!=typeof e.setAttribute||"string"!=typeof e.namespaceURI||"function"!=typeof e.insertBefore||"function"!=typeof e.hasChildNodes||e.nodeType!==ve(e)||e.childNodes!==Ne(e)))},mn=function(e){if(!ve||"object"!=typeof e||null===e)return!1;try{return ve(e)===he}catch(e){return!1}},dn=function(e){if(!ve||"object"!=typeof e||null===e)return!1;try{return"number"==typeof ve(e)}catch(e){return!1}};function hn(e,t,n){0!==e.length&&m(e,e=>{e.call(o,t,n,Kt)})}const gn=function(e,t,n,o){return 0===e.length?t:t===n||t===o?P(t):t},yn=function(e,t){if(hn(We.beforeSanitizeElements,e,null),e!==t&&null===_e(e))return Ot&&ln(e),!0;if(pn(e))return nn(e),!0;const n=$t(De?De(e):e.nodeName);if(et=gn(We.uponSanitizeElement,et,tt,gt),hn(We.uponSanitizeElement,e,{tagName:n,allowedTags:et}),e!==t&&null===_e(e))return Ot&&ln(e),!0;if(function(e,t){return!!(mt&&e.hasChildNodes()&&!dn(e.firstElementChild)&&I(ae,e.textContent)&&I(ae,e.innerHTML))||!(!mt||e.namespaceURI!==zt||"style"!==t||!dn(e.firstElementChild))||e.nodeType===pe||!(!mt||e.nodeType!==me||!I(le,e.data))}(e,n))return nn(e),!0;if(it[n]||!(lt.tagCheck instanceof Function&<.tagCheck(n))&&!et[n]){const o=function(e,t,n){if(!it[t]&&Sn(t)){if(rt.tagNameCheck instanceof RegExp&&I(rt.tagNameCheck,t))return!1;if(rt.tagNameCheck instanceof Function&&rt.tagNameCheck(t))return!1}if(wt&&!Dt[t]){const t=_e(e),o=Ne(e);if(o&&t)for(let r=o.length-1;r>=0;--r){const i=e===n?Se(o[r],!0):o[r];t.insertBefore(i,Ae(e))}}return nn(e),!0}(e,n,t);return!1===o&&hn(We.afterSanitizeElements,e,null),o}if((ve?ve(e):e.nodeType)===ue&&!tn(e))return nn(e),!0;if(("noscript"===n||"noembed"===n||"noframes"===n)&&I(ce,e.innerHTML))return nn(e),!0;if(pt&&e.nodeType===fe){const t=un(e.textContent);e.textContent!==t&&(g(o.removed,{element:e.cloneNode()}),e.textContent=t)}return hn(We.afterSanitizeElements,e,null),!1},bn=function(e,t,n){if(at[t])return!1;if(mt&&"patchsrc"===t)return!1;if(mt&&"for"===t&&"label"!==e&&"output"!==e)return!1;if(At&&("id"===t||"name"===t)&&(n in r||n in Vt))return!1;const o=nt[t]||lt.attributeCheck instanceof Function&<.attributeCheck(t,e);if(st&&I($e,t));else if(ct&&I(Ke,t));else if(o)if(xt[t]);else if(I(Qe,A(n,Ze,"")));else if("src"!==t&&"xlink:href"!==t&&"href"!==t||"script"===e||0!==N(n,"data:")||!Ct[e]){if(ut&&!I(Ve,A(n,Ze,"")));else if(n)return!1}else;else if(!(Sn(e)&&(rt.tagNameCheck instanceof RegExp&&I(rt.tagNameCheck,e)||rt.tagNameCheck instanceof Function&&rt.tagNameCheck(e))&&(rt.attributeNameCheck instanceof RegExp&&I(rt.attributeNameCheck,t)||rt.attributeNameCheck instanceof Function&&rt.attributeNameCheck(t,e))||"is"===t&&rt.allowCustomizedBuiltInElements&&(rt.tagNameCheck instanceof RegExp&&I(rt.tagNameCheck,n)||rt.tagNameCheck instanceof Function&&rt.tagNameCheck(n))))return!1;return!0},Tn=M({},["annotation-xml","color-profile","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","missing-glyph"]),Sn=function(e){return!Tn[T(e)]&&I(Je,e)},En=function(e,t,n,o){if(Ce&&"object"==typeof be&&"function"==typeof be.getAttributeType&&!n)switch(be.getAttributeType(e,t)){case"TrustedHTML":return ze(o);case"TrustedScriptURL":return function(e){Me(),Le++;try{return Ce.createScriptURL(e)}finally{Le--}}(o)}return o},An=function(e,t,n,r){try{n?e.setAttributeNS(n,t,r):e.setAttribute(t,r),pn(e)?nn(e):h(o.removed)}catch(n){rn(t,e)}},Nn=function(e){hn(We.beforeSanitizeAttributes,e,null);const t=e.attributes;if(!t||pn(e))return;nt=gn(We.uponSanitizeAttribute,nt,ot,yt);const n={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:nt,forceKeepAttr:void 0};let o=t.length;const r=$t(e.nodeName);for(;o--;){const i=t[o],a=i.name,l=i.namespaceURI,c=i.value,s=$t(a),u=c;let f="value"===a?u:_(u);n.attrName=s,n.attrValue=f,n.keepAttr=!0,n.forceKeepAttr=void 0,hn(We.uponSanitizeAttribute,e,n),f=n.attrValue,!Nt||"id"!==s&&"name"!==s||0===N(f,_t)||(rn(a,e),f=_t+f),mt&&I(/((--!?|])>)|<\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i,f)?rn(a,e):"attributename"===s&&E(f,"href")?rn(a,e):n.forceKeepAttr||(n.keepAttr&&(ft||!I(se,f))?(pt&&(f=un(f)),bn(r,s,f)?(f=En(r,s,l,f),f!==u&&An(e,a,l,f)):rn(a,e)):rn(a,e))}hn(We.afterSanitizeAttributes,e,null)},_n=function(e){let t=null;const n=sn(e);for(hn(We.beforeSanitizeShadowDOM,e,null);t=n.nextNode();){hn(We.uponSanitizeShadowNode,t,null),yn(t,e),Nn(t),mn(t.content)&&_n(t.content);if((ve?ve(t):t.nodeType)===ue){const e=we(t);mn(e)&&(wn(e),_n(e))}}hn(We.afterSanitizeShadowDOM,e,null)},wn=function(e){const t=[{node:e,shadow:null}];for(;t.length>0;){const e=t.pop();if(e.shadow){_n(e.shadow);continue}const n=e.node,o=(ve?ve(n):n.nodeType)===ue,r=Ne(n);if(r)for(let e=r.length-1;e>=0;--e)t.push({node:r[e],shadow:null});if(o){const e=De?De(n):null;if("string"==typeof e&&"template"===$t(e)){const e=n.content;mn(e)&&t.push({node:e,shadow:null})}}if(o){const e=we(n);mn(e)&&t.push({node:null,shadow:e},{node:e,shadow:null})}}};return o.sanitize=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=null,r=null,a=null,l=null;if(Ut=!e,Ut&&(e="\x3c!--\x3e"),"string"!=typeof e&&!dn(e)&&"string"!=typeof(e=function(e){switch(typeof e){case"string":return e;case"number":return w(e);case"boolean":return O(e);case"bigint":return v?v(e):"0";case"symbol":return D?D(e):"Symbol()";case"undefined":default:return C(e);case"function":case"object":{if(null===e)return C(e);const t=e,n=U(t,"toString");if("function"==typeof n){const e=n(t);return"string"==typeof e?e:C(e)}return C(e)}}}(e)))throw x("dirty is not a string, aborting");if(!o.isSupported)return e;ht?(et=gt,nt=yt):Jt(t),(We.uponSanitizeElement.length>0||We.uponSanitizeAttribute.length>0)&&(et=P(et)),We.uponSanitizeAttribute.length>0&&(nt=P(nt)),o.removed=[];const c=Ot&&"string"!=typeof e&&dn(e);if(c){!function(e){if(!mt)return;const t=[e];for(;t.length>0;){const e=t.pop(),n=ve?ve(e):e.nodeType;if(n===pe||n===me&&I(le,e.data)){try{Ee(e)}catch(e){}continue}if(n===ue){const t=e,n=$t(De?De(e):e.nodeName);try{t.hasAttribute&&t.hasAttribute("patchsrc")&&t.removeAttribute("patchsrc"),t.hasAttribute&&t.hasAttribute("for")&&"label"!==n&&"output"!==n&&t.removeAttribute("for")}catch(e){}}const o=Ne(e);if(o)for(let e=o.length-1;e>=0;--e)t.push(o[e])}}(e);const t=De?De(e):e.nodeName;if("string"==typeof t){const n=$t(t);if(!et[n]||it[n])throw on(e),x("root node is forbidden and cannot be sanitized in-place")}if(pn(e))throw on(e),x("root node is clobbered and cannot be sanitized in-place");try{wn(e)}catch(t){throw on(e),t}}else if(dn(e))n=cn("\x3c!----\x3e"),r=n.ownerDocument.importNode(e,!0),r.nodeType===ue&&"BODY"===r.nodeName||"HTML"===r.nodeName?n=r:n.appendChild(r),wn(r);else{if(!Tt&&!pt&&!dt&&-1===e.indexOf("<"))return Ce&&Et?ze(e):e;if(n=cn(e),!n)return Tt?null:Et?xe:""}n&&bt&&nn(n.firstChild);const s=c?e:n;try{const e=sn(s);for(;a=e.nextNode();)yn(a,s),Nn(a),mn(a.content)&&_n(a.content)}catch(t){throw c&&(on(e),m(o.removed,e=>{e.element&&ln(e.element)})),t}if(c)return m(o.removed,e=>{e.element&&ln(e.element)}),pt&&fn(e),e;if(Tt){if(pt&&fn(n),St)for(l=je.call(n.ownerDocument);n.firstChild;)l.appendChild(n.firstChild);else l=n;return(nt.shadowroot||nt.shadowrootmode)&&(l=Ge.call(i,l,!0)),l}let u=dt?n.outerHTML:n.innerHTML;return dt&&et["!doctype"]&&n.ownerDocument&&n.ownerDocument.doctype&&n.ownerDocument.doctype.name&&I(re,n.ownerDocument.doctype.name)&&(u="\n"+u),pt&&(u=un(u)),Ce&&Et?ze(u):u},o.setConfig=function(){Jt(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}),ht=!0,gt=et,yt=nt},o.clearConfig=function(){Kt=null,ht=!1,gt=null,yt=null,Ce=Ie,xe=""},o.isValidAttribute=function(e,t,n){Kt||Jt({});const o=$t(e),r=$t(t);return bn(o,r,n)},o.addHook=function(e,t){"function"==typeof t&&R(We,e)&&g(We[e],t)},o.removeHook=function(e,t){if(R(We,e)){if(void 0!==t){const n=d(We[e],t);return-1===n?void 0:y(We[e],n,1)[0]}return h(We[e])}},o.removeHooks=function(e){R(We,e)&&(We[e]=[])},o.removeAllHooks=function(){We={afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}},o}();return be}); +//# sourceMappingURL=purify.min.js.map diff --git a/static/vendor/vis-network.min.js b/static/vendor/vis-network.min.js new file mode 100644 index 0000000..f63c37d --- /dev/null +++ b/static/vendor/vis-network.min.js @@ -0,0 +1,34 @@ +/** + * vis-network + * https://visjs.github.io/vis-network/ + * + * A dynamic, browser-based visualization library. + * + * @version 10.1.1 + * @date 2026-08-07T17:51:09.571Z + * + * @copyright (c) 2011-2017 Almende B.V, http://almende.com + * @copyright (c) 2017-2019 visjs contributors, https://github.com/visjs + * + * @license + * vis.js is dual licensed under both + * + * 1. The Apache 2.0 License + * http://www.apache.org/licenses/LICENSE-2.0 + * + * and + * + * 2. The MIT License + * http://opensource.org/licenses/MIT + * + * vis.js may be distributed under either license. + */ +!function(g,A){"object"==typeof exports&&"undefined"!=typeof module?A(exports):"function"==typeof define&&define.amd?define(["exports"],A):A((g="undefined"!=typeof globalThis?globalThis:g||self).vis=g.vis||{})}(this,function(g){function A(g,A){void 0===A&&(A={});var t=A.insertAt;if(g&&"undefined"!=typeof document){var C=document.head||document.getElementsByTagName("head")[0],I=document.createElement("style");I.type="text/css","top"===t&&C.firstChild?C.insertBefore(I,C.firstChild):C.appendChild(I),I.styleSheet?I.styleSheet.cssText=g:I.appendChild(document.createTextNode(g))}}A(".vis-overlay{bottom:0;left:0;position:absolute;right:0;top:0;z-index:10}.vis-active{box-shadow:0 0 10px #86d5f8}");A(".vis [class*=span]{min-height:0;width:auto}");A('div.vis-color-picker{background-color:#fff;border-radius:15px;box-shadow:0 0 10px 0 rgba(0,0,0,.5);display:none;height:444px;left:30px;margin-left:30px;margin-top:-140px;padding:10px;position:absolute;top:0;width:310px;z-index:1}div.vis-color-picker div.vis-arrow{left:5px;position:absolute;top:147px}div.vis-color-picker div.vis-arrow:after,div.vis-color-picker div.vis-arrow:before{border:solid transparent;content:" ";height:0;pointer-events:none;position:absolute;right:100%;top:50%;width:0}div.vis-color-picker div.vis-arrow:after{border-color:hsla(0,0%,100%,0) #fff hsla(0,0%,100%,0) hsla(0,0%,100%,0);border-width:30px;margin-top:-30px}div.vis-color-picker div.vis-color{cursor:pointer;height:289px;position:absolute;width:289px}div.vis-color-picker div.vis-brightness{position:absolute;top:313px}div.vis-color-picker div.vis-opacity{position:absolute;top:350px}div.vis-color-picker div.vis-selector{background:#4c4c4c;background:-moz-linear-gradient(top,#4c4c4c 0,#595959 12%,#666 25%,#474747 39%,#2c2c2c 50%,#000 51%,#111 60%,#2b2b2b 76%,#1c1c1c 91%,#131313 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#4c4c4c),color-stop(12%,#595959),color-stop(25%,#666),color-stop(39%,#474747),color-stop(50%,#2c2c2c),color-stop(51%,#000),color-stop(60%,#111),color-stop(76%,#2b2b2b),color-stop(91%,#1c1c1c),color-stop(100%,#131313));background:-webkit-linear-gradient(top,#4c4c4c,#595959 12%,#666 25%,#474747 39%,#2c2c2c 50%,#000 51%,#111 60%,#2b2b2b 76%,#1c1c1c 91%,#131313);background:-o-linear-gradient(top,#4c4c4c 0,#595959 12%,#666 25%,#474747 39%,#2c2c2c 50%,#000 51%,#111 60%,#2b2b2b 76%,#1c1c1c 91%,#131313 100%);background:-ms-linear-gradient(top,#4c4c4c 0,#595959 12%,#666 25%,#474747 39%,#2c2c2c 50%,#000 51%,#111 60%,#2b2b2b 76%,#1c1c1c 91%,#131313 100%);background:linear-gradient(180deg,#4c4c4c 0,#595959 12%,#666 25%,#474747 39%,#2c2c2c 50%,#000 51%,#111 60%,#2b2b2b 76%,#1c1c1c 91%,#131313);border:1px solid #fff;border-radius:15px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#4c4c4c",endColorstr="#131313",GradientType=0);height:15px;left:137px;position:absolute;top:137px;width:15px}div.vis-color-picker div.vis-new-color{left:159px;padding-right:2px;text-align:right}div.vis-color-picker div.vis-initial-color,div.vis-color-picker div.vis-new-color{border:1px solid rgba(0,0,0,.1);border-radius:5px;color:rgba(0,0,0,.4);font-size:10px;height:20px;line-height:20px;position:absolute;top:380px;vertical-align:middle;width:140px}div.vis-color-picker div.vis-initial-color{left:10px;padding-left:2px;text-align:left}div.vis-color-picker div.vis-label{left:10px;position:absolute;width:300px}div.vis-color-picker div.vis-label.vis-brightness{top:300px}div.vis-color-picker div.vis-label.vis-opacity{top:338px}div.vis-color-picker div.vis-button{background-color:#f7f7f7;border:2px solid #d9d9d9;border-radius:10px;cursor:pointer;height:25px;line-height:25px;position:absolute;text-align:center;top:410px;vertical-align:middle;width:68px}div.vis-color-picker div.vis-button.vis-cancel{left:5px}div.vis-color-picker div.vis-button.vis-load{left:82px}div.vis-color-picker div.vis-button.vis-apply{left:159px}div.vis-color-picker div.vis-button.vis-save{left:236px}div.vis-color-picker input.vis-range{height:20px;width:290px}');A('div.vis-configuration{display:block;float:left;font-size:12px;position:relative}div.vis-configuration-wrapper{display:block;width:700px}div.vis-configuration-wrapper:after{clear:both;content:"";display:block}div.vis-configuration.vis-config-option-container{background-color:#fff;border:2px solid #f7f8fa;border-radius:4px;display:block;left:10px;margin-top:20px;padding-left:5px;width:495px}div.vis-configuration.vis-config-button{background-color:#f7f8fa;border:2px solid #ceced0;border-radius:4px;cursor:pointer;display:block;height:25px;left:10px;line-height:25px;margin-bottom:30px;margin-top:20px;padding-left:5px;vertical-align:middle;width:495px}div.vis-configuration.vis-config-button.hover{background-color:#4588e6;border:2px solid #214373;color:#fff}div.vis-configuration.vis-config-item{display:block;float:left;height:25px;line-height:25px;vertical-align:middle;width:495px}div.vis-configuration.vis-config-item.vis-config-s2{background-color:#f7f8fa;border-radius:3px;left:10px;padding-left:5px}div.vis-configuration.vis-config-item.vis-config-s3{background-color:#e4e9f0;border-radius:3px;left:20px;padding-left:5px}div.vis-configuration.vis-config-item.vis-config-s4{background-color:#cfd8e6;border-radius:3px;left:30px;padding-left:5px}div.vis-configuration.vis-config-header{font-size:18px;font-weight:700}div.vis-configuration.vis-config-label{height:25px;line-height:25px;width:120px}div.vis-configuration.vis-config-label.vis-config-s3{width:110px}div.vis-configuration.vis-config-label.vis-config-s4{width:100px}div.vis-configuration.vis-config-colorBlock{border:1px solid #444;border-radius:2px;cursor:pointer;height:19px;margin:0;padding:0;top:1px;width:30px}input.vis-configuration.vis-config-checkbox{left:-5px}input.vis-configuration.vis-config-rangeinput{margin:0;padding:1px;pointer-events:none;position:relative;top:-5px;width:60px}input.vis-configuration.vis-config-range{-webkit-appearance:none;background-color:transparent;border:0 solid #fff;height:20px;width:300px}input.vis-configuration.vis-config-range::-webkit-slider-runnable-track{background:#dedede;background:-moz-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#dedede),color-stop(99%,#c8c8c8));background:-webkit-linear-gradient(top,#dedede,#c8c8c8 99%);background:-o-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-ms-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:linear-gradient(180deg,#dedede 0,#c8c8c8 99%);border:1px solid #999;border-radius:3px;box-shadow:0 0 3px 0 #aaa;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#dedede",endColorstr="#c8c8c8",GradientType=0);height:5px;width:300px}input.vis-configuration.vis-config-range::-webkit-slider-thumb{-webkit-appearance:none;background:#3876c2;background:-moz-linear-gradient(top,#3876c2 0,#385380 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#3876c2),color-stop(100%,#385380));background:-webkit-linear-gradient(top,#3876c2,#385380);background:-o-linear-gradient(top,#3876c2 0,#385380 100%);background:-ms-linear-gradient(top,#3876c2 0,#385380 100%);background:linear-gradient(180deg,#3876c2 0,#385380);border:1px solid #14334b;border-radius:50%;box-shadow:0 0 1px 0 #111927;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#3876c2",endColorstr="#385380",GradientType=0);height:17px;margin-top:-7px;width:17px}input.vis-configuration.vis-config-range:focus{outline:none}input.vis-configuration.vis-config-range:focus::-webkit-slider-runnable-track{background:#9d9d9d;background:-moz-linear-gradient(top,#9d9d9d 0,#c8c8c8 99%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#9d9d9d),color-stop(99%,#c8c8c8));background:-webkit-linear-gradient(top,#9d9d9d,#c8c8c8 99%);background:-o-linear-gradient(top,#9d9d9d 0,#c8c8c8 99%);background:-ms-linear-gradient(top,#9d9d9d 0,#c8c8c8 99%);background:linear-gradient(180deg,#9d9d9d 0,#c8c8c8 99%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#9d9d9d",endColorstr="#c8c8c8",GradientType=0)}input.vis-configuration.vis-config-range::-moz-range-track{background:#dedede;background:-moz-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#dedede),color-stop(99%,#c8c8c8));background:-webkit-linear-gradient(top,#dedede,#c8c8c8 99%);background:-o-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-ms-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:linear-gradient(180deg,#dedede 0,#c8c8c8 99%);border:1px solid #999;border-radius:3px;box-shadow:0 0 3px 0 #aaa;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#dedede",endColorstr="#c8c8c8",GradientType=0);height:10px;width:300px}input.vis-configuration.vis-config-range::-moz-range-thumb{background:#385380;border:none;border-radius:50%;height:16px;width:16px}input.vis-configuration.vis-config-range:-moz-focusring{outline:1px solid #fff;outline-offset:-1px}input.vis-configuration.vis-config-range::-ms-track{background:transparent;border-color:transparent;border-width:6px 0;color:transparent;height:5px;width:300px}input.vis-configuration.vis-config-range::-ms-fill-lower{background:#777;border-radius:10px}input.vis-configuration.vis-config-range::-ms-fill-upper{background:#ddd;border-radius:10px}input.vis-configuration.vis-config-range::-ms-thumb{background:#385380;border:none;border-radius:50%;height:16px;width:16px}input.vis-configuration.vis-config-range:focus::-ms-fill-lower{background:#888}input.vis-configuration.vis-config-range:focus::-ms-fill-upper{background:#ccc}.vis-configuration-popup{background:rgba(57,76,89,.85);border:2px solid #f2faff;border-radius:4px;color:#fff;font-size:14px;height:30px;line-height:30px;position:absolute;text-align:center;-webkit-transition:opacity .3s ease-in-out;-moz-transition:opacity .3s ease-in-out;transition:opacity .3s ease-in-out;width:150px}.vis-configuration-popup:after,.vis-configuration-popup:before{border:solid transparent;content:" ";height:0;left:100%;pointer-events:none;position:absolute;top:50%;width:0}.vis-configuration-popup:after{border-color:rgba(136,183,213,0) rgba(136,183,213,0) rgba(136,183,213,0) rgba(57,76,89,.85);border-width:8px;margin-top:-8px}.vis-configuration-popup:before{border-color:rgba(194,225,245,0) rgba(194,225,245,0) rgba(194,225,245,0) #f2faff;border-width:12px;margin-top:-12px}');A("div.vis-tooltip{background-color:#f5f4ed;border:1px solid #808074;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;box-shadow:3px 3px 10px rgba(0,0,0,.2);color:#000;font-family:verdana;font-size:14px;padding:5px;pointer-events:none;position:absolute;visibility:hidden;white-space:nowrap;z-index:5}");A('div.vis-network div.vis-navigation div.vis-button{-webkit-touch-callout:none;background-position:2px 2px;background-repeat:no-repeat;-moz-border-radius:17px;border-radius:17px;cursor:pointer;display:inline-block;height:34px;position:absolute;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:34px}div.vis-network div.vis-navigation div.vis-button:hover{box-shadow:0 0 3px 3px rgba(56,207,21,.3)}div.vis-network div.vis-navigation div.vis-button:active{box-shadow:0 0 1px 3px rgba(56,207,21,.95)}div.vis-network div.vis-navigation div.vis-button.vis-up{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdvkl/FRgAABphJREFUeNqcV2twU9cR/nbPlVTHxpKRbNnBLyEbPyJisLEcPwgwUMKQtjNJAzNJZkgNNJOmJaZAaDKlxaXDTIBAcJtOOzSYKSkdiimhAdIMjyT4bYgBYxA2BgcUQPLrCiGDR4qt2x+yXTASFt1/957d7zt3z3d39xDCMQWUfgAz/RI/T4pSTAJpAGL8rECAXX7QFQGq9wOHOxYO1oCgjAdJj1wtB095Giv9TFuZAIWHAziATMPhTAwiHgUkYPXFJu92lMP/2MTpB1AKUCVEgNAcleUo1M+2F8TO6crSTncb1QleAOj2OTSX3Ge1p+Va42m5JrnzbnsCE8Ov+EHgpa0LPLvCJjZ/whuIlN8wAcXG+e1LUn9hm238QU84p1Ld83nsXvuO7Lq+LzKYGAT6/dn58m/HJTYf4O3EShkT8Irpzab1Uz9sGevT5+tWn+j6NB4A5hp/5NSr43xjfd5rW5tT9e3OAhCBiCua5/WsDEls/hdvYklZSwDefmrT8eXmtzuDkb5YZ33p9ndylICAVjWxf39xw/5g5Luv/9H84ZWNcwNEypZT87rXjqyJB85UYDMJYN3U7UdLJ6/6JlgqV517teRqf9uTlug8e1zEk27HgD22o98WsTBh8fWxvjm6ApdONbGvse8LM5NUPOm1Cfabuz3nACAgxX0QEFTJAnjNvLJ+Sepb14KRHnN+Ev+1XJOhZs3Qu1mbG97J2NQgsXroa1dtxrGuf8cHi1mUtPTay0lv1DMJSCRVLtoX+FgGgDQNysBAcez89l9nbbsQSji7rlXkEhjPxb/QatHOcFu0M9zz419oFSRhj/3PuaHiyqasv1Con9NGxHAYUsoCxAqImbYSgCWmFbZQwdsur7N0eC4m6tT6/jUZ750Zeb82c+OZGLWh/2p/W+Kfrmy0hIp/aVKpTSIJEqu2QgFx2iE8CwDp0RbH7Ljng/4yXr+XT3QdyhYsodS0slGr0g2OrEUK7eCrKW82SqzCVz3/yfb6vRwM4xn9rN7JkRkOQRLmfJn2LBPxQjDBqp9lD7XbX7X8pKTP160zR2bdeiX5jYeU/nLSTztNkem3XL5eXbltRUkonBxdgZ2IIUmahUxERQSCVT+rK5hzQ89xQ6P8VaaK1f5VmRvqQ4G+lba+nlnlb5brMhvlk7FBiaPzuwQEmEQhg5BOxMjWTncHc2501cQLkjDTsMCWpyuRQxFP0xXIJfp5FyVW4Zy7KajC06ItbiIGg6ZITBxDxIgbrr1jTSM0fibGIHz8O9sKK0GAibEua9spANh4aY2VmcEg+DEkiBgR/L2hYFgGtcErkQQAMVJgBxyy9hboZzv32v+Kpr7qbEECTAIMAoaJa3qPTmNiiAAgJAjk6J5xhu6HDAIgQYGLmI29PocmMcI8MNYvT1ckfzD9H/ub5br4e4Me9WfOKqtyX6Ud2cwC449PRamifDm6Auc0rTXokci+Xo1EAgBckiDuYGLjpTvntcGIA+SFcp6uUAaAI879VhWrRteYAqn/edq758brXJ1327QMhgJcZjA3EBjNrgZjOG1PkAjyTGENMjZPq5ECQ0MDE9ERBqFZrk0OJ3i4x/7vyIjBxGERt3takgVJEAp9xq3f769WiPDNvSsJdT3HDOEASPelmoBRYT3Kzt5uMtwauJEgSOCpwrk1DIJCoNUMwj9v7MweP9XSQ8/hJPp496fZTAICvLqcyv2B7nRbrgCA03JN5h8ub7A8VqpB437xHvsOy3l3cyaB4L2uqxhti1WLMcSgZQCw7+bOooO3Pk4JBZIYYXISMV5sKH59UePM10GESRGpIf/bE92HU452HywSJIGIllctrhp6YAK5+fHds0lLtJFMXNwkV6fFqA29mROefqiMJj1h6um4a5vY/92dKGaBxIhU5zJTWW2cJmEgGOmeb3c8FxAfb9mdf2RzyGGv5MvU7QwuEySwKHFp/c/M71zA/2F7b1RajnYdLAqMukMVu2YcfmDYE2MD7H+7/Xlq6cRIJqm4zXM+qd3TGjVBir43KSLlXjiELe5TsX+3/yW/ST45PaAHbKmccWh12AP93JNZywj0kSABIobpiXRHjtZ6faout2tyZMadGLXBCxBcvl6NfaAz+tKdFmObpzWl2+tIIBACYy0t/yj34M7HvsKUK+CGassvicX7alYDwwq+vykIEqPVa+Q9gdYk5+V+UE7lj3+FGbuBM/X5JUT8QwIVSSSZiTgmoFR2MfiqYFFPfjpkyrfWPopwxP47AP1pK1g9/dqeAAAAAElFTkSuQmCC");bottom:50px;left:55px}div.vis-network div.vis-navigation div.vis-button.vis-down{background-image:url("data:image/png;base64,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");bottom:10px;left:55px}div.vis-network div.vis-navigation div.vis-button.vis-left{background-image:url("data:image/png;base64,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");bottom:10px;left:15px}div.vis-network div.vis-navigation div.vis-button.vis-right{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdvkl/FRgAABs1JREFUeNqsl3tQlOcVxp9z3m+XygK7C4sLxkW5o4CAkYssFSkRjabjJEOSJm1IbZx2krapiZdeprW0NVVJ0pqMM0kYJQlqkoZImGioE1ItiCAgIsFwE4Es99vCslwChf36xy5EW1A0Pn9+73fO772e93kJC5EMCszFd20SbyFZNpJAAACtjWUI8KAN1CRAJTbg9LXNU+dBkG+Xkm7Zmg4OWoUdNqZXmQCZHQFsz0yOcCYGEc8mJGDnl2UTh5AO2x2DA3OxDaAsCDvQ32VF11qP9aZYz6SeFeooi17pPQEAvZNdTnWWKnWFuVhfYT7v0zza4M3EsMk2EPgnNZusby8Y7P8x/5lI/gMTYNSnNKQt/0Xtev1DfQtZlaK+M54fmDJXXhg4G8zEINBfqlLMe28L9s/lQ8Tyr5iAJ32fK/tj+OFq3IUO1O+JyGk7GgsiEPFrlQ/07bixXdwEPckHWZJ3MgG7Qw9+/mLIS/W4SyXoNvQskpyHLg1e8CNQ3NI0laoje7Tg/8CBudgGgQwSwO/DD322ze/FFnxLRWhiBzUK94GLA2f9mSTjfU+7mjqyrVe+AX8I4aGgShbA0/47Sn4ZuLcR90ih6qih0anRiVprtUEQb43bYtlXmwNZAEDAj/ACMW1M8ExpeDXyWMVCEl4yF7vntR/zLeov8JJlWfZR+Y3N92+cx/reOmu1quNrk27EWW0xvWspJcigoNNkA4C3Yk59vH7xltvu3ktDxe7PX34ilQCQfeci1j2xfn94ZrGCneY8uxcHCnW/vbr9EQD4d2ITc8AprAOAQLewroVAAaB8oMiLiRHvmVy7znNTjWCFrXKoJOSHFQ+kvnF9f+jco07s91MFdwmSkHQuYB0T8WYwIcYj0bTQdRufGlFKJMFVaCb/GvZW6aGI4yeXOwd2mr/u05zsyDY+W5X64Nm+fO85NpuJiCFJTpslIoonADEeiT2zIzIXuh+o25PQNtbsNVMOBUn2g08MiSTHN3uZjNTEDr4dnX/6H+1H/XPasmKvW+sMGfW/MXzende4K3h/ibvSYxIAItyie/K7cgCitQxCIBFjpTrKMgM+WPfrhLbxFi9iMQtlYjAJSCSBSYBAIPBNI3p86TPXj8bk56R4PVylFE626uFLQc9efiTVPDmgBIAAtzALEYNBQRITa4kYix21FwBax655CVagPLk7806Pj1qo/7MraF/FQ14/aMhszYhvGqn3KTef89rklWrSKXUTkn3mtJK9Bzf3XJA0e/PcrdgxIwSCDPmbZMQgABJkDBKzvn+yy2npIv9xAPB1Ceo2jTZ7Gc8afipIgEhAkACDwcSQQZBIIGnx5it7gg+U3wgcnbZKR1r+FnW+v2DVtDwtXCXNSKz797oAwDzZ7ySRAIBBFsTXmBh1w1+oZ4J3h+wv9lUFdbMDOrO+5IAqWIGZthuV13nC77nKRx8r7PssyibLIkoT1/h65HsfzWyu5tF6NYNB4EYJzKUETqgcLNVv0D/cDQBrNAnm9+LOfTLfNB5u2hf5z+6TMexYji+tVdrM5leMbWOtSwQx/F1C2rcuebIqwSO568a4WmuN3mEYSiUi+pRl2l1pLvYBsKArUKVwnZRYgdHpMWVG4+/WXhwoDBXE7OmkHzJ6JNemLfv51bniGqzVPoIkyLbpfK7ZMFIkE6FlrMn7Ql+BbiHg+zXGbgLjylDpyosD58KZmKM0cfWHI9//aD5o1VCZrnO83VuQQOja5PMCfwK8n3K2ChIbLVOD9KB36le3A+u/s2Q81C2yRavQmQNdVnamLnmq4nHD9jpB0rwm77jpjTW9E906Bu18fWlWCQHAox9CtGoXTwmS8IThZyXPB+29inuoE6bMsDM9ufEAMNHqJuU8ljMtAKA2B7IhzaWNiLfWjVQb3J10/SGuEZZ7Af1X7+lluZ3HkpgEQPL291M+qbzJgXQcG60ypKlVTGwsMxcFaJW6/hDXVZZvCz3RlrmRiQHwy9nRn2bM6bnas4cLfH6s1RIorsJcFDA2PToR7Z7QezfQD9qzwvI6TyTZC47ttXeiT+2c1+wBgOndoTPLt7mrmCRjvfULQ4O1xsVVchu7b9GysYUAqy3lnsdNb0aXmQuj7PYWL2etuRl6S0OfXLjiGQIdEY6K5esc2BWhjvkqXLO6x08VPKxV6iYAwuBkv5NpvNmtbrhaX2+tWdY70eVNINhtLW0/sjrv6B0/YdJlcGlR2AvE4hUlKwHQ7BU5cz8LRx0HaPY7gXb53L/67+mUfudPmP/twOWS6AQi/j6B4iWS/IlYK+yGYJDB1wWLErLRKd/omOJbAWf03wEAyO9m+/TtS3AAAAAASUVORK5CYII=");bottom:10px;left:95px}div.vis-network div.vis-navigation div.vis-button.vis-zoomIn{background-image:url("data:image/png;base64,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");bottom:10px;right:15px}div.vis-network div.vis-navigation div.vis-button.vis-zoomOut{background-image:url("data:image/png;base64,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");bottom:10px;right:55px}div.vis-network div.vis-navigation div.vis-button.vis-zoomExtends{background-image:url("data:image/png;base64,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");bottom:50px;right:15px}');A('div.vis-network div.vis-manipulation{background:#fff;background:-moz-linear-gradient(top,#fff 0,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#fff),color-stop(48%,#fcfcfc),color-stop(50%,#fafafa),color-stop(100%,#fcfcfc));background:-webkit-linear-gradient(top,#fff,#fcfcfc 48%,#fafafa 50%,#fcfcfc);background:-o-linear-gradient(top,#fff 0,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%);background:-ms-linear-gradient(top,#fff 0,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%);background:linear-gradient(180deg,#fff 0,#fcfcfc 48%,#fafafa 50%,#fcfcfc);border:0 solid #d6d9d8;border-bottom:1px;box-sizing:content-box;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ffffff",endColorstr="#fcfcfc",GradientType=0);height:28px;left:0;padding-top:4px;position:absolute;top:0;width:100%}div.vis-network button.vis-edit-mode,div.vis-network div.vis-edit-mode{height:30px;left:0;position:absolute;top:5px}div.vis-network button.vis-close{-webkit-touch-callout:none;background-color:transparent;background-image:url("data:image/png;base64,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/GMzLdsAADvGaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjUtYzAyMSA3OS4xNTQ5MTEsIDIwMTMvMTAvMjktMTE6NDc6MTYgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgICAgICAgICAgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iCiAgICAgICAgICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAgICAgICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgICAgICAgICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iPgogICAgICAgICA8eG1wOkNyZWF0b3JUb29sPkFkb2JlIFBob3Rvc2hvcCBDQyAoV2luZG93cyk8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgICAgPHhtcDpDcmVhdGVEYXRlPjIwMTQtMDItMTRUMTE6NTU6MzUrMDE6MDA8L3htcDpDcmVhdGVEYXRlPgogICAgICAgICA8eG1wOk1ldGFkYXRhRGF0ZT4yMDE0LTAyLTE0VDEyOjA1OjE3KzAxOjAwPC94bXA6TWV0YWRhdGFEYXRlPgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxNC0wMi0xNFQxMjowNToxNyswMTowMDwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXBNTTpJbnN0YW5jZUlEPnhtcC5paWQ6NjU0YmM5YmQtMWI2Yi1jYjRhLTllOWQtNWY2MzgxNDVjZjk0PC94bXBNTTpJbnN0YW5jZUlEPgogICAgICAgICA8eG1wTU06RG9jdW1lbnRJRD54bXAuZGlkOjk4MmM2MGIwLWUzZjMtMDk0MC04MjU0LTFiZTliNWE0ZTE4MzwveG1wTU06RG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOjk4MmM2MGIwLWUzZjMtMDk0MC04MjU0LTFiZTliNWE0ZTE4MzwveG1wTU06T3JpZ2luYWxEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SGlzdG9yeT4KICAgICAgICAgICAgPHJkZjpTZXE+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPmNyZWF0ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ+eG1wLmlpZDo5ODJjNjBiMC1lM2YzLTA5NDAtODI1NC0xYmU5YjVhNGUxODM8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTQtMDItMTRUMTE6NTU6MzUrMDE6MDA8L3N0RXZ0OndoZW4+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDQyAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjIxODYxNmM2LTM1MWMtNDI0OS04YWFkLWJkZDQ2ZTczNWE0NDwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxNC0wMi0xNFQxMTo1NTozNSswMTowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmNoYW5nZWQ+Lzwvc3RFdnQ6Y2hhbmdlZD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPnNhdmVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6NjU0YmM5YmQtMWI2Yi1jYjRhLTllOWQtNWY2MzgxNDVjZjk0PC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDE0LTAyLTE0VDEyOjA1OjE3KzAxOjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICAgICA8c3RFdnQ6Y2hhbmdlZD4vPC9zdEV2dDpjaGFuZ2VkPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L3htcE1NOkhpc3Rvcnk+CiAgICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2UvcG5nPC9kYzpmb3JtYXQ+CiAgICAgICAgIDxwaG90b3Nob3A6Q29sb3JNb2RlPjM8L3Bob3Rvc2hvcDpDb2xvck1vZGU+CiAgICAgICAgIDxwaG90b3Nob3A6SUNDUHJvZmlsZT5zUkdCIElFQzYxOTY2LTIuMTwvcGhvdG9zaG9wOklDQ1Byb2ZpbGU+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjcyMDAwMC8xMDAwMDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+NzIwMDAwLzEwMDAwPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjc8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFlEaW1lbnNpb24+NzwvZXhpZjpQaXhlbFlEaW1lbnNpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8+cZUZMwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAA2ElEQVR42gDLADT/AS0tLUQFBQUVFxcXtPHx8fPl5eUNCAgITCkpKesEHx8fGgYGBjH+/v4a+Pj4qgQEBFU6OjodMTExzwQUFBSvEBAQEfX19SD19fVqNDQ0CElJSd/9/f2vAwEBAfrn5+fkBwcHLRYWFgsXFxfz29vbo9LS0uwDDQ0NDfPz81orKysXIyMj+ODg4Avh4eEa/f391gMkJCRYPz8/KUhISOMCAgKh8fHxHRsbGx4UFBQQBDk5OeY7Ozv7CAgItPb29vMEBASaJSUlTQ0NDesDAEwpT0Ko8Ri2AAAAAElFTkSuQmCC");background-position:20px 3px;background-repeat:no-repeat;border:none;cursor:pointer;height:30px;position:absolute;right:0;top:0;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:30px}div.vis-network button.vis-close:hover{opacity:.6}div.vis-network div.vis-edit-mode button.vis-button,div.vis-network div.vis-manipulation button.vis-button{-webkit-touch-callout:none;background-color:transparent;background-position:0 0;background-repeat:no-repeat;border:none;-moz-border-radius:15px;border-radius:15px;box-sizing:content-box;cursor:pointer;float:left;font-family:verdana;font-size:12px;height:24px;margin-left:10px;padding:0 8px;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}div.vis-network div.vis-manipulation button.vis-button:hover{box-shadow:1px 1px 8px rgba(0,0,0,.2)}div.vis-network div.vis-manipulation button.vis-button:active{box-shadow:1px 1px 8px rgba(0,0,0,.5)}div.vis-network div.vis-manipulation button.vis-button.vis-back{background-image:url("data:image/png;base64,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/GMzLdsAAEEOaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjUtYzAyMSA3OS4xNTQ5MTEsIDIwMTMvMTAvMjktMTE6NDc6MTYgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiCiAgICAgICAgICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpPC94bXA6Q3JlYXRvclRvb2w+CiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDE0LTAxLTIyVDE5OjI0OjUxKzAxOjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpNZXRhZGF0YURhdGU+MjAxNC0wMi0wNFQxNTowMTowOSswMTowMDwveG1wOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPHhtcDpNb2RpZnlEYXRlPjIwMTQtMDItMDRUMTU6MDE6MDkrMDE6MDA8L3htcDpNb2RpZnlEYXRlPgogICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3BuZzwvZGM6Zm9ybWF0PgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD54bXAuaWlkOmI2YjQwMjVkLTAxNjQtMzU0OC1hOTdlLTQ4ZmYxMWM3NTYzMzwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPHhtcE1NOkRvY3VtZW50SUQ+eG1wLmRpZDpFQTc2MkY5Njc0ODNFMzExOTQ4QkQxM0UyQkU3OTlBMTwveG1wTU06RG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOjczQjYyQUFEOTE4M0UzMTE5NDhCRDEzRTJCRTc5OUExPC94bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpIaXN0b3J5PgogICAgICAgICAgICA8cmRmOlNlcT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+Y3JlYXRlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjczQjYyQUFEOTE4M0UzMTE5NDhCRDEzRTJCRTc5OUExPC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDE0LTAxLTIyVDE5OjI0OjUxKzAxOjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPnNhdmVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6RUE2MEEyNEUxOTg0RTMxMUFEQUZFRkU2RUMzMzNFMDM8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTQtMDEtMjNUMTk6MTg6MDcrMDE6MDA8L3N0RXZ0OndoZW4+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICAgICA8c3RFdnQ6Y2hhbmdlZD4vPC9zdEV2dDpjaGFuZ2VkPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+c2F2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ+eG1wLmlpZDpmOWQ3OGY4ZC1lNzY0LTc1NDgtODZiNy1iNmQ1OGMzZDg2OTc8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTQtMDItMDRUMTU6MDE6MDkrMDE6MDA8L3N0RXZ0OndoZW4+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDQyAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5jb252ZXJ0ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnBhcmFtZXRlcnM+ZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZzwvc3RFdnQ6cGFyYW1ldGVycz4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPmRlcml2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnBhcmFtZXRlcnM+Y29udmVydGVkIGZyb20gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCB0byBpbWFnZS9wbmc8L3N0RXZ0OnBhcmFtZXRlcnM+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOmI2YjQwMjVkLTAxNjQtMzU0OC1hOTdlLTQ4ZmYxMWM3NTYzMzwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxNC0wMi0wNFQxNTowMTowOSswMTowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmNoYW5nZWQ+Lzwvc3RFdnQ6Y2hhbmdlZD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgIDwvcmRmOlNlcT4KICAgICAgICAgPC94bXBNTTpIaXN0b3J5PgogICAgICAgICA8eG1wTU06RGVyaXZlZEZyb20gcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICA8c3RSZWY6aW5zdGFuY2VJRD54bXAuaWlkOmY5ZDc4ZjhkLWU3NjQtNzU0OC04NmI3LWI2ZDU4YzNkODY5Nzwvc3RSZWY6aW5zdGFuY2VJRD4KICAgICAgICAgICAgPHN0UmVmOmRvY3VtZW50SUQ+eG1wLmRpZDpFQTc2MkY5Njc0ODNFMzExOTQ4QkQxM0UyQkU3OTlBMTwvc3RSZWY6ZG9jdW1lbnRJRD4KICAgICAgICAgICAgPHN0UmVmOm9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOjczQjYyQUFEOTE4M0UzMTE5NDhCRDEzRTJCRTc5OUExPC9zdFJlZjpvcmlnaW5hbERvY3VtZW50SUQ+CiAgICAgICAgIDwveG1wTU06RGVyaXZlZEZyb20+CiAgICAgICAgIDxwaG90b3Nob3A6Q29sb3JNb2RlPjM8L3Bob3Rvc2hvcDpDb2xvck1vZGU+CiAgICAgICAgIDxwaG90b3Nob3A6SUNDUHJvZmlsZT5zUkdCIElFQzYxOTY2LTIuMTwvcGhvdG9zaG9wOklDQ1Byb2ZpbGU+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjcyMDA5MC8xMDAwMDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+NzIwMDkwLzEwMDAwPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjI0PC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjI0PC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz4jq1U/AAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAVTSURBVHjanFVfTFNnFP+d77ve8qeVFbBrpcVgRrCRFikFByLxwSAaE32oRCHD6JMxxhhn8G2RxxH3MsOTbyYsmCAxPMmMMYtkIUYmK60OO0qAK23BFlNob0uh3x7WS5jLZPpLbm6+k/P9zrm5v9855PF4UFhYCABgjIExBgAgIqRSqRIi6gDQRkQ1RGTB3wgR0e8AHgH4Sa/XR/EBiAiJRAJ04cIF5Ofng4g2n0gkUkxENwF0c843LzHGQEQQQkCLExEA9ALotVgsUQAQQmgNQhJCbF5kjCEUCl0moj4t5na7fTU1NUpVVVXUYrEkASAcDhe8efOmxOfzWScmJqoBdBNR99LS0hWz2dynNSSEAF28eBGFhYVgjCEcDn9HRD1EhIMHD3o9Hs9kWVlZAh9BKBQqGB4edr58+dKZ+6JbJpOpBwBWV1fB6+rqIMsyIpHIFcZYL2MMra2tY5cuXRrfuXNnBtvAYDBk3G63oqpqZm5uzgrgSDKZjBoMhueZTAbc5XIhFouVEtFTxhiOHTs2dv78eS8+Efv374+oqpqZnZ21cs5PJJPJPlmWkyynnBuMMTQ0NHi7uro+mVyDx+Pxulwu71ZOlkqlSonoJhGhvb39s8k1nDx50ss5hyRJN9PpdKlERB2aWjSVaEilUvzBgwcORVEs5eXloXPnzk1sV8BkMiUdDofP7/dXZ7PZDilnIhw4cGBeS1pbW2P37t1zBwKBikQiUUREWFhYsHHO0d7evm0Ru90+/+rVq2rO+XGJiJxEhMrKyhgAjI6OWoeHh5tWVla+4JzDZrO9bW5unhwcHGzz+/32np4e+xaDbfoHAMxmc6ijo2O0oqIiJkkSNjY2HBIRmRljMJvNyWfPnln7+/tPMMZQXl6+0NbW9qK2tjYcj8floaEhqKpq+HCkbD3PzMwYBgYG0NXV9UuusFna2kEgELAQEQ4dOvSis7PzN41Ar9dnrl27NqCNkv/C3bt3zy4tLVmICJxzEBFJRBQmorLFxcWCqqqq0Pj4eO3Y2JhbUZTdra2tL2pra8OJRGLHnTt3zkqS9K+huHU4EhHMZnMoGo0W5OIh7nK5jjLGKq1W69vDhw8rRqMxMjc3t2t5eXnX5ORklc/nM+fl5SWnpqa+0uv1K/n5+Ws6nW5NluXNd15e3ppOp1uz2WyzZ86cGQ0Gg6ZAIFCZzWZ/lYjokRDiuN/vt7W0tMw3NTUpbrd78P79++5gMFgRiUTKHj58WMYYQ3V19etTp05tq6Lp6Wkb5xxCiEfc7XZPM8a6FxcXTfX19a/1en2Gcy5qamreNjY2/qGq6joRZe12+9Tp06e3JY/FYgWPHz8+mhvr3/CWlpbk+vp6PmOseWVlBS6XS9GSJUkSdrs93NDQ8Oe+ffvC/8fJIyMjddFo9Esi6pVleVjT2m0A8Hq9zqGhIefnjoknT544A4GAM/eDbxMReFNTE0pKSpKqqsaI6Pj8/LxVVdWM3W6PfCr5xMTE1zllXS0uLn6aSqXAGxsbodPpoNfrn6uqCs75EUVRrJFIZMfevXsXdTrdxseIE4mEPDIyUu/3++tynd8yGo29RIR0Og26fv06ioqKwBgD5xzv3r27zBjrIyJIkgSHwzFZWVmp7NmzJ1ZaWpoAgGg0WqgoSvHMzIw1GAw6tvjhitFo7NPW5fv370Hd3d0oKCgA53zTQMvLy+VCiKuSJH0rSdLmztZytIWv5RPRD0T0Y3Fx8dzWfby6ugopHo//w4mcc8iyPMc5v5FOp7/PZrOdQohWInIC2C2EgBBigYi8Qoifs9lsv06nWyIiaFxagXg8jr8GAGxuIe7LBeWhAAAAAElFTkSuQmCC")}div.vis-network div.vis-manipulation div.vis-none:hover{box-shadow:1px 1px 8px transparent;cursor:default}div.vis-network div.vis-manipulation div.vis-none:active{box-shadow:1px 1px 8px transparent}div.vis-network div.vis-manipulation div.vis-none{line-height:23px;padding:0}div.vis-network div.vis-manipulation div.notification{font-weight:700;margin:2px}div.vis-network div.vis-manipulation button.vis-button.vis-add{background-image:url("data:image/png;base64,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/GMzLdsAAEEOaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjUtYzAyMSA3OS4xNTQ5MTEsIDIwMTMvMTAvMjktMTE6NDc6MTYgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiCiAgICAgICAgICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpPC94bXA6Q3JlYXRvclRvb2w+CiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDE0LTAxLTIyVDE5OjI0OjUxKzAxOjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpNZXRhZGF0YURhdGU+MjAxNC0wMi0wNFQxNDo0MDoyOSswMTowMDwveG1wOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPHhtcDpNb2RpZnlEYXRlPjIwMTQtMDItMDRUMTQ6NDA6MjkrMDE6MDA8L3htcDpNb2RpZnlEYXRlPgogICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3BuZzwvZGM6Zm9ybWF0PgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD54bXAuaWlkOjVkNWIwNmQwLTVmMjAtOGE0NC1hMzIwLWZmMTEzMzQwNDc0YjwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPHhtcE1NOkRvY3VtZW50SUQ+eG1wLmRpZDpFQTc2MkY5Njc0ODNFMzExOTQ4QkQxM0UyQkU3OTlBMTwveG1wTU06RG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOjczQjYyQUFEOTE4M0UzMTE5NDhCRDEzRTJCRTc5OUExPC94bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpIaXN0b3J5PgogICAgICAgICAgICA8cmRmOlNlcT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+Y3JlYXRlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjczQjYyQUFEOTE4M0UzMTE5NDhCRDEzRTJCRTc5OUExPC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDE0LTAxLTIyVDE5OjI0OjUxKzAxOjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPnNhdmVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6RUE2MEEyNEUxOTg0RTMxMUFEQUZFRkU2RUMzMzNFMDM8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTQtMDEtMjNUMTk6MTg6MDcrMDE6MDA8L3N0RXZ0OndoZW4+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICAgICA8c3RFdnQ6Y2hhbmdlZD4vPC9zdEV2dDpjaGFuZ2VkPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+c2F2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ+eG1wLmlpZDo2OWVmYWE1NS01ZTI5LTIzNGUtYTUzMy0xNDkxYjM1NDNmYmE8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTQtMDItMDRUMTQ6NDA6MjkrMDE6MDA8L3N0RXZ0OndoZW4+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDQyAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5jb252ZXJ0ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnBhcmFtZXRlcnM+ZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZzwvc3RFdnQ6cGFyYW1ldGVycz4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPmRlcml2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnBhcmFtZXRlcnM+Y29udmVydGVkIGZyb20gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCB0byBpbWFnZS9wbmc8L3N0RXZ0OnBhcmFtZXRlcnM+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjVkNWIwNmQwLTVmMjAtOGE0NC1hMzIwLWZmMTEzMzQwNDc0Yjwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxNC0wMi0wNFQxNDo0MDoyOSswMTowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmNoYW5nZWQ+Lzwvc3RFdnQ6Y2hhbmdlZD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgIDwvcmRmOlNlcT4KICAgICAgICAgPC94bXBNTTpIaXN0b3J5PgogICAgICAgICA8eG1wTU06RGVyaXZlZEZyb20gcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICA8c3RSZWY6aW5zdGFuY2VJRD54bXAuaWlkOjY5ZWZhYTU1LTVlMjktMjM0ZS1hNTMzLTE0OTFiMzU0M2ZiYTwvc3RSZWY6aW5zdGFuY2VJRD4KICAgICAgICAgICAgPHN0UmVmOmRvY3VtZW50SUQ+eG1wLmRpZDpFQTc2MkY5Njc0ODNFMzExOTQ4QkQxM0UyQkU3OTlBMTwvc3RSZWY6ZG9jdW1lbnRJRD4KICAgICAgICAgICAgPHN0UmVmOm9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOjczQjYyQUFEOTE4M0UzMTE5NDhCRDEzRTJCRTc5OUExPC9zdFJlZjpvcmlnaW5hbERvY3VtZW50SUQ+CiAgICAgICAgIDwveG1wTU06RGVyaXZlZEZyb20+CiAgICAgICAgIDxwaG90b3Nob3A6Q29sb3JNb2RlPjM8L3Bob3Rvc2hvcDpDb2xvck1vZGU+CiAgICAgICAgIDxwaG90b3Nob3A6SUNDUHJvZmlsZT5zUkdCIElFQzYxOTY2LTIuMTwvcGhvdG9zaG9wOklDQ1Byb2ZpbGU+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjcyMDA5MC8xMDAwMDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+NzIwMDkwLzEwMDAwPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjI0PC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjI0PC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz5WKqp9AAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAYXSURBVHjafFZtUFTXGX7e9z27sveuMCwYV8ElrA7YSFYHtJUPkaaI0aRqG8wP00zUzljDINNSA/2ROtpO24SxnahlxjYd7SSjmUkymcxYlDhQPzHGisEVp8HwYWCVVVgEsrsuLnL74+5uqTF9Z+7cO/d8PO95zvO851BlZSV0XQcAMDOYGQBARDhX3JRmMDYZwLPMWAzGHACYIgwS46oBNBNwtOL8CwE8EkSEUCgE2rJlC2w2G4go8Zwo/bMDgnoG6gxLfAAAYvPDMCCszKTAMIAGAhrWnf15AAAMwwARIRKJgDZv3gy73Q4iAjPjxIr9VVOMRhbAYKB8zvrO0llrfEsdKwLZek6YAPSFvtSu3GtLawu0ZJ6625SHGBQB1T88t6MxvopgMAjaunUrdF0HM+P4yv27DMYeJmB1RqW3Jnf3tQX2p0L4P9EXuqEd7PmDp+XuMU9sRbvXnnt1TxxACgoKYLVacbzsQDUJGkSATe6qi28uPtzusM6Kxie6NHLGUX3lxVUNX9StPHnn4wy3njuUYcu6n2pNi66avcEXnByP/nv8aiaIyrqz2gO5A9+9FI1GIfn5+WhZdTAdjFMkwMvZOy7uWnTAOz3L4Yk71m3t69fdfTDoUGTBeHTUfiHQ6lo7Z2OXJvpDAChKe+aOCdKRKWxZ2+1qb3yyd3GYmRkQ7GQBVs99wfv6on3eR2k4PdTkDEbH7IuS8/svld/561PJS/pDk1/bzwx94pze7xc5v/H+YPY6r5BAkdrJzODTK46lE6PeYEJt7u+8j+OZwCBiEAgAoNgKJoEQf6PvNvdrXgtZoNhSf7q0KZ3B2AQmVMze0Jmt54S/DcDCVig2NcvEUGxJAE4Pl+YOr0iv6BRSIPAmBeBZAmHlE2sH4p1uhrq1s0MnnEQMBsf8wRASAICQQCCITN1X7/sOuc0kgOVp3/fPs2WHv+coG7gQOJUnLGsUCTxEjPzUohEA+NfIWUdtx0+efzA1kSSkIGyBAQNCKgHAEBAJ3u79U7kiAcWoem/gb5Fd33nrH3kp+SMWtuAB+GllMJxMjCx9QRgA3uiqL5kwHiTlpxb3smlfMDGYGPP1hcMAkJvs8ScpfdJspdj+MK6Pf+5+u29vyb4lR4+BGEziVESAkEpw6Av1OhUpHCz4qOXbzFWz4Ncdj/v/o08Lt92ODDgZDCEFJYoUGH4mzugP92puPTf0pD3H7wvfdFZdqSxnMtWjoGAAmG9fOLxjwesdjT2/XzIQ7ks3sycYMSEwGHNtWf5bkX5NkYCJBxUBXiGV0XHvosOt54Zey33j/K+8P33++vjnbiGJbbLE+J9SANAb6nJ2B79wcUwETAwQQ7fMjPzMvfP8ja87HUIKMOiaAqMZhrGmLdAy78eZrwwsTS0eObTs+IdtgVanxBUExqGbb5VzrIISGIoUXsmqbgEhJldCQWqRf27SvPAn/o8XmgLhZsUkR4ll37mhk3n94Z4OlzY/7NLcYZfm7o1z2zT4vsvUNSXqprBCkmiTFbPX90/fh8GIT2sf+zTPdDMf4dVnNg4z+E0ixsGeBs9jd5ViSgLHjCb/peaR+MD3d4/ZJg2llyuG2Vwy7QWAs8PNnn1f7vkGSGxAzE6mk+kxkx/p/4unffSCR0hAoL1EBCYiPNdWNcwkNQTCR7feWX6g+7f/A7I8rcw/U6UEe0Ndrhc/W7mtL9ztmqlSgstSS/zTJ28dalpOpkRryrwbhwBACgsLMWPGDOT4ll3qyeqAkJTdCF7P/CrUY/GkLL1rE+2hTbSH8+0Lb/WEuhzhyaA905blf9Vd/895WnZwLHrPevir/cvOB1oLYpTtLrm6oYGIMDExAaqtrUVKSgqYGSKCk0WHq5ikkWEWtNL0imv5qUW+RclLRjJsrhBAuH1/QL8R7HR4xy5nescuP23E6hOA6mLv+sb4uTw6Ogqqq6uDpmkQkcStorX4XRcM1FjZ+kvFFjCJKU1WpkNJJUqIMtX1RyLeX3JtQ0JRhmGYZ/L27duRnJycuFGISOJ9pqh5lrB6iYgqGOxRrOaa54DcZmKvkJxk8JHC9rKh+KVhOsD4+Dj+MwADIf8n5m4xGwAAAABJRU5ErkJggg==")}div.vis-network div.vis-edit-mode button.vis-button.vis-edit,div.vis-network div.vis-manipulation button.vis-button.vis-edit{background-image:url("data:image/png;base64,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/GMzLdsAAEEOaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjUtYzAyMSA3OS4xNTQ5MTEsIDIwMTMvMTAvMjktMTE6NDc6MTYgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiCiAgICAgICAgICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpPC94bXA6Q3JlYXRvclRvb2w+CiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDE0LTAxLTIyVDE5OjI0OjUxKzAxOjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpNZXRhZGF0YURhdGU+MjAxNC0wMi0wNVQxNDoxMjoyNSswMTowMDwveG1wOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPHhtcDpNb2RpZnlEYXRlPjIwMTQtMDItMDVUMTQ6MTI6MjUrMDE6MDA8L3htcDpNb2RpZnlEYXRlPgogICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3BuZzwvZGM6Zm9ybWF0PgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD54bXAuaWlkOjY5OTM3ZGZjLTJjNzQtYTU0YS05OTIzLTQyMmZhNDNkMjljNDwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPHhtcE1NOkRvY3VtZW50SUQ+eG1wLmRpZDpFQTc2MkY5Njc0ODNFMzExOTQ4QkQxM0UyQkU3OTlBMTwveG1wTU06RG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOjczQjYyQUFEOTE4M0UzMTE5NDhCRDEzRTJCRTc5OUExPC94bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpIaXN0b3J5PgogICAgICAgICAgICA8cmRmOlNlcT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+Y3JlYXRlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjczQjYyQUFEOTE4M0UzMTE5NDhCRDEzRTJCRTc5OUExPC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDE0LTAxLTIyVDE5OjI0OjUxKzAxOjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPnNhdmVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6RUE2MEEyNEUxOTg0RTMxMUFEQUZFRkU2RUMzMzNFMDM8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTQtMDEtMjNUMTk6MTg6MDcrMDE6MDA8L3N0RXZ0OndoZW4+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICAgICA8c3RFdnQ6Y2hhbmdlZD4vPC9zdEV2dDpjaGFuZ2VkPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+c2F2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ+eG1wLmlpZDozOWNhNzE5ZC03YzNlLTUyNGEtYmY1NS03NGVmMmM1MzE0YTc8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTQtMDItMDVUMTQ6MTI6MjUrMDE6MDA8L3N0RXZ0OndoZW4+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDQyAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5jb252ZXJ0ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnBhcmFtZXRlcnM+ZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZzwvc3RFdnQ6cGFyYW1ldGVycz4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPmRlcml2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnBhcmFtZXRlcnM+Y29udmVydGVkIGZyb20gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCB0byBpbWFnZS9wbmc8L3N0RXZ0OnBhcmFtZXRlcnM+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjY5OTM3ZGZjLTJjNzQtYTU0YS05OTIzLTQyMmZhNDNkMjljNDwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxNC0wMi0wNVQxNDoxMjoyNSswMTowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmNoYW5nZWQ+Lzwvc3RFdnQ6Y2hhbmdlZD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgIDwvcmRmOlNlcT4KICAgICAgICAgPC94bXBNTTpIaXN0b3J5PgogICAgICAgICA8eG1wTU06RGVyaXZlZEZyb20gcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICA8c3RSZWY6aW5zdGFuY2VJRD54bXAuaWlkOjM5Y2E3MTlkLTdjM2UtNTI0YS1iZjU1LTc0ZWYyYzUzMTRhNzwvc3RSZWY6aW5zdGFuY2VJRD4KICAgICAgICAgICAgPHN0UmVmOmRvY3VtZW50SUQ+eG1wLmRpZDpFQTc2MkY5Njc0ODNFMzExOTQ4QkQxM0UyQkU3OTlBMTwvc3RSZWY6ZG9jdW1lbnRJRD4KICAgICAgICAgICAgPHN0UmVmOm9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOjczQjYyQUFEOTE4M0UzMTE5NDhCRDEzRTJCRTc5OUExPC9zdFJlZjpvcmlnaW5hbERvY3VtZW50SUQ+CiAgICAgICAgIDwveG1wTU06RGVyaXZlZEZyb20+CiAgICAgICAgIDxwaG90b3Nob3A6Q29sb3JNb2RlPjM8L3Bob3Rvc2hvcDpDb2xvck1vZGU+CiAgICAgICAgIDxwaG90b3Nob3A6SUNDUHJvZmlsZT5zUkdCIElFQzYxOTY2LTIuMTwvcGhvdG9zaG9wOklDQ1Byb2ZpbGU+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjcyMDA5MC8xMDAwMDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+NzIwMDkwLzEwMDAwPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjI0PC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjI0PC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz4ykninAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAYpSURBVHjafFZtTFvnFX7Oea+NudiY2Hwam4CBlgQwXdKREDKUoYg0jbRJ29RJ2VZ1mjRFUxSpA3VTfkzJfkQbS7spU6rtx5Z2UtppScjaHxvLuiatWi2jLEoMIUDCh23g2gbj7+tPuPvhOurawPl1dc99n+c55z33fV46ceIEZFkGADAziAgAQERoe/9ZK4GPM/AcgbsIXAcABCgMvkfAqAa89eDoJyF8LogIqqqChoaGYDAYHr8kItS8uc8iIH6iAa9IkAo5EAQX8pqmgUVBCBggYFgDhv0/GAsBgKZpICJkMhnQ4OAgZFkGEYGZUXmp+0cS+CKBwWA0DVRPOg5Zl2q6zaHyJlnVAMQXVTkwHrUqH0Xsvn+tdQAAMQDgpPLS2MViFY8rkGUZzIzaS/t/xqCzGggtz9e697zsnKhoLUtim4jOq/LE6x7X0nsh16dEZ5a/O3a2SCAOHjwInU6Hujd6ThJ4mCDQ+b2G232v7v6vwarPbQn8MGlMr+X0kpE3Wr5Zt5hL5HPhqYSdQIfKJ+yhxDPKWC6Xg+jt7UXD5b5KBt1kCHS85Ljd8/On3NupfnhFaZj4rWff1B98B1R/hnUmKd36bdtCNl4g0en4edNE/cXwLq8qMTMIPAQwmo/WuHvObA8+9c58k/dKtD0TyZWXN5YGA7ej7epKxspM//7SoNOdWc/Jyq2wiwhDzPxT8cP0jys3VMM7OmL0/77zn4Ydui3b8uiK0jD7RrA77c9Wd57cefPpF+2T6bWsFPWkaiPTCWvTsZpHFU+XrS+8G3AR08F6X+1FJvBxQQzHQOWk2SmrW4FPX/U2LVwPuDZj+fJKl2khPpeyAqA9rzR/YqwuiWXX8taN/CabGkrVuq9YJlkQQDjOAJ5jAhz9Vt9W4N5/rNp8I+vtMV/aZm4zLnUNNt0urdYnF68HWoJj4Wo1mLGUNRr8LEgDgNqeCh8xQIKOsgC7iAjVe83rT9zQa8uNM28u70kspessu8q8zq/V3NcZpVzb9+0zmVhOvvvrhaMVzrJg0zeq7xMVCCwdpnWSGBqjUyJwLTFgbvxie3w31uoWR1Y74r60rdxZqrR8q85t2W2MGCp12bm/KC3hyaSTiMhxuGrKcahqpbjOaDOoEhOEoFqJQCCJvqA85I6bfTdDjQlf2lbxVNlS6wt19yy7jRHZZlDnrinNj/6sHMhnNw2Ogco7O79e5fm/xQywRBBCEAuwn4gQ96bkYj4Vyuq9N1Z3Bj4Od5bs0MXt/dZZ21ctiqFan174q985P+Lfp+U1g7XDON/1ctP458WlVjLyJhOISZE0wM0S1QfuRC3lTjkJAKKEtNC9eIOhSh9xHLZOJRZTFuXDsEoStLkR/768ummsaJG9Pb9oe+9J+xaeSVokiQDSJphAo5uaBuWjiKP4QTqS1cUWU7ayesN66wu22frD1vmVW6GW6T8u9eVjGyZzs+w78Nqu0a2mbvVu1KEJQAgeZRL0liQYyx+GOmKeQpu0rMYsAJPNEFGD2dLodLIy6c9Ys7G8yeSUl3tf2/X3rcBVJSOv34l3sCBogi7z1LH/rBHjl4IJ93/ncQFAnjeImJD0Z8zuCwu9q3djDXqTlAKID5xv+9t2R8n8VcUFBljQ8Gyfe40BYBM4DwDLt8Kue79ZcFkbzfEdbUbv+oN4c9KTtsfm1MbYQqqh+2zrVZYKs/7Ef+byimt1POYiJhDhPBFBIiIEXhxfs7/dfYoIF+auBfYTE/pebx/V8hqBP2ODvD34yvuh/WCAmU75Bx6sIgaI/v5+6PV6JLqUsYr7dpDAoehs0h73pHTWrvKgThYbRSt9UmSjef3MpaUvBz4O72UmADgTOPJguGiZor+/HyUlJWBmJFz+D8xTtlUiOpbwpmrmrweeSXrT+g11k4SBN3RGKUcAVCVdFhyP1nreDbY//NPyEXUlU/Pp4XYycGT6V0Ux2WwWdO7cOZSWlkII8diX7SPPNgDaKdbxoNAxwATBAEkEEgSWCEQAqPAMwqvMdCEwMO0tVqZpWsGTT58+DaPR+PhGIYQAAAgh0P7B3ioW/B0iGiCGiwXbCuOHFSJys6AbYFye2T+xWhT3WYJEIoH/DQBMw3kes8OJPgAAAABJRU5ErkJggg==")}div.vis-network div.vis-edit-mode button.vis-button.vis-edit.vis-edit-mode{background-color:#fcfcfc;border:1px solid #ccc}div.vis-network div.vis-manipulation button.vis-button.vis-connect{background-image:url("data:image/png;base64,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/GMzLdsAAEEOaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjUtYzAyMSA3OS4xNTQ5MTEsIDIwMTMvMTAvMjktMTE6NDc6MTYgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiCiAgICAgICAgICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpPC94bXA6Q3JlYXRvclRvb2w+CiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDE0LTAxLTIyVDE5OjI0OjUxKzAxOjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpNZXRhZGF0YURhdGU+MjAxNC0wMi0wNFQxNDozODo1NyswMTowMDwveG1wOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPHhtcDpNb2RpZnlEYXRlPjIwMTQtMDItMDRUMTQ6Mzg6NTcrMDE6MDA8L3htcDpNb2RpZnlEYXRlPgogICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3BuZzwvZGM6Zm9ybWF0PgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD54bXAuaWlkOjlmYjUwMDU0LWE3ODEtMWQ0OC05ZTllLTU2ZWQ5YzhlYjdjNjwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPHhtcE1NOkRvY3VtZW50SUQ+eG1wLmRpZDpFQTc2MkY5Njc0ODNFMzExOTQ4QkQxM0UyQkU3OTlBMTwveG1wTU06RG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOjczQjYyQUFEOTE4M0UzMTE5NDhCRDEzRTJCRTc5OUExPC94bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpIaXN0b3J5PgogICAgICAgICAgICA8cmRmOlNlcT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+Y3JlYXRlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjczQjYyQUFEOTE4M0UzMTE5NDhCRDEzRTJCRTc5OUExPC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDE0LTAxLTIyVDE5OjI0OjUxKzAxOjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPnNhdmVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6RUE2MEEyNEUxOTg0RTMxMUFEQUZFRkU2RUMzMzNFMDM8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTQtMDEtMjNUMTk6MTg6MDcrMDE6MDA8L3N0RXZ0OndoZW4+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICAgICA8c3RFdnQ6Y2hhbmdlZD4vPC9zdEV2dDpjaGFuZ2VkPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+c2F2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ+eG1wLmlpZDo3ZWRhMjI0MC0yYTQxLTNlNDQtYWM2My1iNzNiYTE5OWI3Y2E8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTQtMDItMDRUMTQ6Mzg6NTcrMDE6MDA8L3N0RXZ0OndoZW4+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDQyAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5jb252ZXJ0ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnBhcmFtZXRlcnM+ZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZzwvc3RFdnQ6cGFyYW1ldGVycz4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPmRlcml2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnBhcmFtZXRlcnM+Y29udmVydGVkIGZyb20gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCB0byBpbWFnZS9wbmc8L3N0RXZ0OnBhcmFtZXRlcnM+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjlmYjUwMDU0LWE3ODEtMWQ0OC05ZTllLTU2ZWQ5YzhlYjdjNjwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxNC0wMi0wNFQxNDozODo1NyswMTowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmNoYW5nZWQ+Lzwvc3RFdnQ6Y2hhbmdlZD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgIDwvcmRmOlNlcT4KICAgICAgICAgPC94bXBNTTpIaXN0b3J5PgogICAgICAgICA8eG1wTU06RGVyaXZlZEZyb20gcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICA8c3RSZWY6aW5zdGFuY2VJRD54bXAuaWlkOjdlZGEyMjQwLTJhNDEtM2U0NC1hYzYzLWI3M2JhMTk5YjdjYTwvc3RSZWY6aW5zdGFuY2VJRD4KICAgICAgICAgICAgPHN0UmVmOmRvY3VtZW50SUQ+eG1wLmRpZDpFQTc2MkY5Njc0ODNFMzExOTQ4QkQxM0UyQkU3OTlBMTwvc3RSZWY6ZG9jdW1lbnRJRD4KICAgICAgICAgICAgPHN0UmVmOm9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOjczQjYyQUFEOTE4M0UzMTE5NDhCRDEzRTJCRTc5OUExPC9zdFJlZjpvcmlnaW5hbERvY3VtZW50SUQ+CiAgICAgICAgIDwveG1wTU06RGVyaXZlZEZyb20+CiAgICAgICAgIDxwaG90b3Nob3A6Q29sb3JNb2RlPjM8L3Bob3Rvc2hvcDpDb2xvck1vZGU+CiAgICAgICAgIDxwaG90b3Nob3A6SUNDUHJvZmlsZT5zUkdCIElFQzYxOTY2LTIuMTwvcGhvdG9zaG9wOklDQ1Byb2ZpbGU+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjcyMDA5MC8xMDAwMDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+NzIwMDkwLzEwMDAwPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjI0PC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjI0PC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz4ubxs+AAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAUtSURBVHjajJZ/bNT1Gcdfz/P53PV6B4W7VltLqdAaplIOiMOoyxxJCSs/Gv/yB4gzJroAosmmDklwkYWR0bQsdmkykoojTpcsWYLxD/lRZdMQkTHRtkLZRqG0tIVe7662vTu43n32x/VKZ/jh89cn38/zvN7P5/l88zwf2blzJz6fDwARQUSm1n8s31CM0/VAnbNmsUPuAsDpgEO+Bg4C7//iyv5hvmMiQiqVQpqamvB6vVNwEeG1JZtCBrYi/MrkAwDNgjhwAlbzICBLA0rDb0+/839C6XQaaWxspLCw8Dp86cbNmqVFJQddE6KzdjZ9D89g+B6fSyCOcyn1nxil+O9xKg5HqWFSHGXLjrP7W/ICqVQK2bNnDz6fDxFh65KNvxbHDhF4rJj2bXPo+IGfcW5h5xL4f99P+FCEMIAob75x9t0dAMlkElNXV4e1lteXbNqiQoMaeOFOjrdU868SD2luYyEP6dUh+sYmSHeOU6GO5Z8VLx5+NNZxIpPJ5AS2L3upROCoCvz8Lo7vnkf77cAHhpiz/zIL9vWz8L8p/NvupmM0Q7pjnAoLqz8tDrc8MnQqYVUVhVdF4LEg7b+rvDn8wDDlH0WoPpukLJImSBaMwjcJqmwWts2jPZLG/8kwYVFeVdXXZcFf4yVDc2cNKfBFmD9X+0ncCP58F48eG+Feo2CAUkvs4dl0V/uJvdXLiiV+ut++n7YLSfxPfMMG54ChzB3WIesVWB2i82bw1AR6fJR7C4VsfYiv6u/k3A9nEgP4zXke8DiYHyAOMK+QxPIgnZ9GqSHr1itQJ8DK2fTerDQ+S/bHRXQJaHSCwNIZ2Xh+7+S3VAmwNMBA/tuPZtErgKquUmdMWIFlRURvdamRNEXGwIWrlP47pTMzLiunxghGMwTLvcTWlHAp77s4QNSrYMQtss6ZMgWqCm5cHoDHO1nbk6K8zEN8+3zatv2Hn1b59EqJZdxmYUERg9P9KwpIiAOTdWUWBXuLzB/vZG3P1Un4PNp2d1MbmyD45TWCxuCsQm0x56bHGHFYEZwxok7toAA9Sfw3hCcoL/NOwi9QO5wmWO1j4JEgZxTkodmcWRGkf3pcX0r8xoAaBixKu4U5/xwndM+0tpAvS6mP+PZK2nb1UBvPEKwKMLDvPj4ESGc55lGy303sdJKQdZB2rkMdctAB/4gzN+/Q2ENNd4LyUi/xN+bTtquX2thk5nk4wI3gAF+OMNcA1nFQDfK+BY5GqbkwWabTY5QZhXWlnNx1ntrY1Rz87fuvw29m/Sn8J+PUGAFj5T19baA1IspuBZp7cx1x4SwG1cEf+lgRSROs8jGwb+Ht4QB/GSSsAhYano39LWIBxNEIbP14hPDuiyS2VtJuHXQlKKvxM/jiXDq/D/xPlwifGMkJZB2NIoKpr69nxeiZxLHicFSFVWfGqBidIP3LSjrWltD94CyufF/4kQgPuVz2Lz93+dDRa9eu5QQ8Hg8/iXee+Dy4CKMs7xqn4nwKz9IirhQqmVuB42m8ey+x7LMoD6iAON782eChhqmRuXfvXgKBAKqKqtI0/8nNKrQI4BVYXkzHgzPpC88gWuHL/caXrhLoGiN0apSKr0ZZRBZM7q2w5ZnLR1oAnHOMjY0hra2tFBQUYIyZmstvVT1Z6eDlAuEVq7merxmwueNPDXy9PvybjKP5mctHLk4/XTKZRJqbm/H7/VNw1VyEMYbW4FN3WNWnnchKoy5sHeVGBRX6VWi3ymFx7r11Ix8MTX/y5C2RSPC/AQB61erowbpqSwAAAABJRU5ErkJggg==")}div.vis-network div.vis-manipulation button.vis-button.vis-delete{background-image:url("data:image/png;base64,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/GMzLdsAAEEOaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjUtYzAyMSA3OS4xNTQ5MTEsIDIwMTMvMTAvMjktMTE6NDc6MTYgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiCiAgICAgICAgICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpPC94bXA6Q3JlYXRvclRvb2w+CiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDE0LTAxLTIyVDE5OjI0OjUxKzAxOjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpNZXRhZGF0YURhdGU+MjAxNC0wMi0wNFQxNDo0MTowNCswMTowMDwveG1wOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPHhtcDpNb2RpZnlEYXRlPjIwMTQtMDItMDRUMTQ6NDE6MDQrMDE6MDA8L3htcDpNb2RpZnlEYXRlPgogICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3BuZzwvZGM6Zm9ybWF0PgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD54bXAuaWlkOjc3NDkzYmUxLTEyZGItOTg0NC1iNDYyLTg2NGVmNGIzMzM3MTwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPHhtcE1NOkRvY3VtZW50SUQ+eG1wLmRpZDpFQTc2MkY5Njc0ODNFMzExOTQ4QkQxM0UyQkU3OTlBMTwveG1wTU06RG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOjczQjYyQUFEOTE4M0UzMTE5NDhCRDEzRTJCRTc5OUExPC94bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpIaXN0b3J5PgogICAgICAgICAgICA8cmRmOlNlcT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+Y3JlYXRlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjczQjYyQUFEOTE4M0UzMTE5NDhCRDEzRTJCRTc5OUExPC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDE0LTAxLTIyVDE5OjI0OjUxKzAxOjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPnNhdmVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6RUE2MEEyNEUxOTg0RTMxMUFEQUZFRkU2RUMzMzNFMDM8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTQtMDEtMjNUMTk6MTg6MDcrMDE6MDA8L3N0RXZ0OndoZW4+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICAgICA8c3RFdnQ6Y2hhbmdlZD4vPC9zdEV2dDpjaGFuZ2VkPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+c2F2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ+eG1wLmlpZDowNmE3NWYwMy04MDdhLWUzNGYtYjk1Zi1jZGU2MjM0Mzg4OGY8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTQtMDItMDRUMTQ6NDE6MDQrMDE6MDA8L3N0RXZ0OndoZW4+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDQyAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5jb252ZXJ0ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnBhcmFtZXRlcnM+ZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZzwvc3RFdnQ6cGFyYW1ldGVycz4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPmRlcml2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnBhcmFtZXRlcnM+Y29udmVydGVkIGZyb20gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCB0byBpbWFnZS9wbmc8L3N0RXZ0OnBhcmFtZXRlcnM+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjc3NDkzYmUxLTEyZGItOTg0NC1iNDYyLTg2NGVmNGIzMzM3MTwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxNC0wMi0wNFQxNDo0MTowNCswMTowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmNoYW5nZWQ+Lzwvc3RFdnQ6Y2hhbmdlZD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgIDwvcmRmOlNlcT4KICAgICAgICAgPC94bXBNTTpIaXN0b3J5PgogICAgICAgICA8eG1wTU06RGVyaXZlZEZyb20gcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICA8c3RSZWY6aW5zdGFuY2VJRD54bXAuaWlkOjA2YTc1ZjAzLTgwN2EtZTM0Zi1iOTVmLWNkZTYyMzQzODg4Zjwvc3RSZWY6aW5zdGFuY2VJRD4KICAgICAgICAgICAgPHN0UmVmOmRvY3VtZW50SUQ+eG1wLmRpZDpFQTc2MkY5Njc0ODNFMzExOTQ4QkQxM0UyQkU3OTlBMTwvc3RSZWY6ZG9jdW1lbnRJRD4KICAgICAgICAgICAgPHN0UmVmOm9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOjczQjYyQUFEOTE4M0UzMTE5NDhCRDEzRTJCRTc5OUExPC9zdFJlZjpvcmlnaW5hbERvY3VtZW50SUQ+CiAgICAgICAgIDwveG1wTU06RGVyaXZlZEZyb20+CiAgICAgICAgIDxwaG90b3Nob3A6Q29sb3JNb2RlPjM8L3Bob3Rvc2hvcDpDb2xvck1vZGU+CiAgICAgICAgIDxwaG90b3Nob3A6SUNDUHJvZmlsZT5zUkdCIElFQzYxOTY2LTIuMTwvcGhvdG9zaG9wOklDQ1Byb2ZpbGU+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjcyMDA5MC8xMDAwMDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+NzIwMDkwLzEwMDAwPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjI0PC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjI0PC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz4aYJzYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAYGSURBVHjalJZ7UJTnFcZ/73m/72PdJY1RbhoQp6lkXRAvmIYxdCUadLVOozPNtGObap1JsKipjiShbdoRbeKEiQHpQK3xj0xa03aamTbaTGyAYV1QGeqFi+JyiZFLAlmESBkWRmS3fyzslGkmnZ5/v/M873Oe75zzvqqoqAibzQaAiKCUAkApRdHIK/NFsx2NR91nOSILADDoJyzNaM4xxbtvPHh0iC+JiYkJ1OHDh4mJiUEpFSXPv/ziPC28TIiXDCOSrAClQDSEpsCwJPIhrEBRQpiSytXlQwDhcBilFPfu3UMVFxdjt9ujFTzfcLBADCoEEAFr1ZbrrNjch2vtEImPBgHob7fTcWE+bVXJNJ/NiFQlEGLvieXHKmYqGB8fRx05cgSbzYaIsPvywV8pKFaA7fGtLTzz61YWpo/xVTHQbufsq5lcez9zWuWhk5mvFwMEg0H0+vXrMU2Tn1wp3CtCiQ5DjGd3A/m/v8IDCZP8r4iNmyRrWx/j/5qktykZpXKzAjVDVxPzGqemptDr1q1jX3NRnIJarcDKK2hgR2ULXRfncv7UYv7xpovhnhiW5Mz+kefeSKO6LJ1A1xzEuk/Ojm4mRibpuZaMZW3OCtRUND60NmiICCIUShisx7a2sLMiQn4s77uEQgIabnqdfHIlgT1/qQeg8vs5dHhdCNB1wYn3RIiC995j26stjAbsNH+YiZJCESnS1Y/XxIXu8r4YIPv/VkVs3CTnTy2ms34xro1+sp9po6sxlTu34ultmsPVvy6is86FCHgO+DDs49zpjufBpCG+seYOC9OHaTidieicb9ouVAhKtouAseI710ma7pLuqwmgYfHqAFt+6WdLoQ/LBl11Lm7VudAa8vb72PCin9TlAWIsGGhLACD+kSAZnusYBii1XQAPYWDllt6ov2lrBkDBR2+6Ofuak2//3M+G/T4wAAPW7fPhKfRTVeqk9qQbFKRmDUTxS3N7QYGYmwzCkqklBGlPDEcTNv+sg9tNCbTXuvBWujE0bHrZj9JE1B/wU1Pm5PwJN6YBS9a2kVvQEcWnrh5GTFD3lxkYkqRMgYQlwVldUvDnen73LHTUuqitdKM0eAr9AFQfd1J/yo2aJn+2sn4Wdn5qEFODJskgBIjx5T0uCrQA08pnIjS9PERDjPnfOKXAMEBECUoGEIHBj+2zkt76UQ6dXheGAev3+cg74Kf6uJPqcicbfuond7cPy4SOiy7+tD9nFvZurx00KOk3CNEC+mE+vjSPBc7IWqgqTaPT60IMcO/xsXGa3HfKjRgRdbl7/KDg0jtubje6aHj7c7J3dgLQ2zoPwwQ91SooOQdAW1VKVMHty0kA5Bb48BycJn/LjWFGbLv4thvvb53kFvjJ+XEdWkPfjQVR/CcNKYgGMc8JWt5Fa2j+MIPPuyI2pa4IoHSkt6vLIuRaQ9q32khzt4GCxtNu6k46GeiIR2lIfDQQsafPzq1LGRGL9Gk9d+vrwewvfHPQOoexQVjxdB/auk/zmaUMdsfz6bVUtIalT7bxveP1ZHh6GPDPYeSzeD69kcpIfxymFWLNrka+ljhBTWkWwz2JiJT84YHnz2iPx0P20PkmRF5i6HYiwZFJsn/YzdezbzE3cQibY5xV266z6RfXohakb+xB9CjanCD9qTbW7Grk4WV38VZm0l6dhQiEw9taHSuDqrS0FIfDwXM3X9mHMsvRAk/sauDpQy38P+GtzOTGB9mEpkD0C2dS8n8zOjqK9ng8WJZFU+JTjasGvaCNXPpvJBPoMlm0OoDNMfWVxONfWNSUPUZ7TUQ56tCZlPwSgMnJSVRpaSmxsbFE1raw82ZxAZZRQUiBYUKGp5UlOX2krBzmoUVjiIKhHge9rfPo+Wcy3ZeXIYASgL1/X5RfMXMvj46OosrLy7HZbGitUUohIuzoem0RofALaOsghgWGjky0MiJTL8b0lOvI8hN1DKXKP0jd3TNTWDgcJhgMoo4ePYrD4Yi+KmaeLlprnrtXFo9h/AAlG1AqE8yFmBrC+jO0bgH9EVpO/1F2Dc5g//OAsbEx/j0Af+USsQynL1UAAAAASUVORK5CYII=")}div.vis-network div.vis-edit-mode div.vis-label,div.vis-network div.vis-manipulation div.vis-label{line-height:25px;margin:0 0 0 23px}div.vis-network div.vis-manipulation div.vis-separator-line{background-color:#bdbdbd;display:inline-block;float:left;height:21px;margin:0 7px 0 15px;width:1px}');var t="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function C(g){return g&&g.__esModule&&Object.prototype.hasOwnProperty.call(g,"default")?g.default:g}var I,e,i,o,n,s,r,a,d,h,l,c,u,p,f,v,b={};function m(){if(e)return I;e=1;var g=function(g){return g&&g.Math===Math&&g};return I=g("object"==typeof globalThis&&globalThis)||g("object"==typeof window&&window)||g("object"==typeof self&&self)||g("object"==typeof t&&t)||g("object"==typeof I&&I)||function(){return this}()||Function("return this")()}function y(){return o?i:(o=1,i=function(g){try{return!!g()}catch(g){return!0}})}function w(){return s?n:(s=1,n=!y()(function(){var g=function(){}.bind();return"function"!=typeof g||g.hasOwnProperty("prototype")}))}function x(){if(a)return r;a=1;var g=w(),A=Function.prototype,t=A.apply,C=A.call;return r="object"==typeof Reflect&&Reflect.apply||(g?C.bind(t):function(){return C.apply(t,arguments)}),r}function E(){if(h)return d;h=1;var g=w(),A=Function.prototype,t=A.call,C=g&&A.bind.bind(t,t);return d=g?C:function(g){return function(){return t.apply(g,arguments)}},d}function O(){if(c)return l;c=1;var g=E(),A=g({}.toString),t=g("".slice);return l=function(g){return t(A(g),8,-1)},l}function T(){if(p)return u;p=1;var g=O(),A=E();return u=function(t){if("Function"===g(t))return A(t)}}function D(){if(v)return f;v=1;var g="object"==typeof document&&document.all;return f=void 0===g&&void 0!==g?function(A){return"function"==typeof A||A===g}:function(g){return"function"==typeof g}}var N,k,R,P,M={};function z(){return k?N:(k=1,N=!y()(function(){return 7!==Object.defineProperty({},1,{get:function(){return 7}})[1]}))}function B(){if(P)return R;P=1;var g=w(),A=Function.prototype.call;return R=g?A.bind(A):function(){return A.apply(A,arguments)},R}var Z,S,F,G,j,L,V,Y,W,Q,U,K,H,X,_,J,q,$,gg,Ag,tg,Cg,Ig,eg,ig,og,ng,sg,rg,ag,dg,hg,lg,cg,ug,pg,fg,vg={};function bg(){if(Z)return vg;Z=1;var g={}.propertyIsEnumerable,A=Object.getOwnPropertyDescriptor,t=A&&!g.call({1:2},1);return vg.f=t?function(g){var t=A(this,g);return!!t&&t.enumerable}:g,vg}function mg(){return F?S:(F=1,S=function(g,A){return{enumerable:!(1&g),configurable:!(2&g),writable:!(4&g),value:A}})}function yg(){if(j)return G;j=1;var g=E(),A=y(),t=O(),C=Object,I=g("".split);return G=A(function(){return!C("z").propertyIsEnumerable(0)})?function(g){return"String"===t(g)?I(g,""):C(g)}:C,G}function wg(){return V||(V=1,L=function(g){return null==g}),L}function xg(){if(W)return Y;W=1;var g=wg(),A=TypeError;return Y=function(t){if(g(t))throw new A("Can't call method on "+t);return t},Y}function Eg(){if(U)return Q;U=1;var g=yg(),A=xg();return Q=function(t){return g(A(t))},Q}function Og(){if(H)return K;H=1;var g=D();return K=function(A){return"object"==typeof A?null!==A:g(A)},K}function Tg(){return _?X:(_=1,X={})}function Dg(){if(q)return J;q=1;var g=Tg(),A=m(),t=D(),C=function(g){return t(g)?g:void 0};return J=function(t,I){return arguments.length<2?C(g[t])||C(A[t]):g[t]&&g[t][I]||A[t]&&A[t][I]},J}function Ng(){return gg?$:(gg=1,$=E()({}.isPrototypeOf))}function kg(){if(tg)return Ag;tg=1;var g=m().navigator,A=g&&g.userAgent;return Ag=A?String(A):""}function Rg(){if(Ig)return Cg;Ig=1;var g,A,t=m(),C=kg(),I=t.process,e=t.Deno,i=I&&I.versions||e&&e.version,o=i&&i.v8;return o&&(A=(g=o.split("."))[0]>0&&g[0]<4?1:+(g[0]+g[1])),!A&&C&&(!(g=C.match(/Edge\/(\d+)/))||g[1]>=74)&&(g=C.match(/Chrome\/(\d+)/))&&(A=+g[1]),Cg=A}function Pg(){if(ig)return eg;ig=1;var g=Rg(),A=y(),t=m().String;return eg=!!Object.getOwnPropertySymbols&&!A(function(){var A=Symbol("symbol detection");return!t(A)||!(Object(A)instanceof Symbol)||!Symbol.sham&&g&&g<41}),eg}function Mg(){return ng?og:(ng=1,og=Pg()&&!Symbol.sham&&"symbol"==typeof Symbol.iterator)}function zg(){if(rg)return sg;rg=1;var g=Dg(),A=D(),t=Ng(),C=Object;return sg=Mg()?function(g){return"symbol"==typeof g}:function(I){var e=g("Symbol");return A(e)&&t(e.prototype,C(I))},sg}function Bg(){if(dg)return ag;dg=1;var g=String;return ag=function(A){try{return g(A)}catch(g){return"Object"}}}function Zg(){if(lg)return hg;lg=1;var g=D(),A=Bg(),t=TypeError;return hg=function(C){if(g(C))return C;throw new t(A(C)+" is not a function")}}function Sg(){if(ug)return cg;ug=1;var g=Zg(),A=wg();return cg=function(t,C){var I=t[C];return A(I)?void 0:g(I)}}function Fg(){if(fg)return pg;fg=1;var g=B(),A=D(),t=Og(),C=TypeError;return pg=function(I,e){var i,o;if("string"===e&&A(i=I.toString)&&!t(o=g(i,I)))return o;if(A(i=I.valueOf)&&!t(o=g(i,I)))return o;if("string"!==e&&A(i=I.toString)&&!t(o=g(i,I)))return o;throw new C("Can't convert object to primitive value")}}var Gg,jg,Lg,Vg,Yg,Wg,Qg,Ug,Kg,Hg,Xg,_g,Jg,qg,$g,gA,AA,tA,CA,IA,eA,iA,oA,nA,sA,rA,aA,dA,hA={exports:{}};function lA(){return jg?Gg:(jg=1,Gg=!0)}function cA(){if(Vg)return Lg;Vg=1;var g=m(),A=Object.defineProperty;return Lg=function(t,C){try{A(g,t,{value:C,configurable:!0,writable:!0})}catch(A){g[t]=C}return C}}function uA(){if(Yg)return hA.exports;Yg=1;var g=lA(),A=m(),t=cA(),C="__core-js_shared__",I=hA.exports=A[C]||t(C,{});return(I.versions||(I.versions=[])).push({version:"3.49.0",mode:g?"pure":"global",copyright:"© 2013–2025 Denis Pushkarev (zloirock.ru), 2025–2026 CoreJS Company (core-js.io). All rights reserved.",license:"https://github.com/zloirock/core-js/blob/v3.49.0/LICENSE",source:"https://github.com/zloirock/core-js"}),hA.exports}function pA(){if(Qg)return Wg;Qg=1;var g=uA();return Wg=function(A,t){return g[A]||(g[A]=t||{})}}function fA(){if(Kg)return Ug;Kg=1;var g=xg(),A=Object;return Ug=function(t){return A(g(t))}}function vA(){if(Xg)return Hg;Xg=1;var g=E(),A=fA(),t=g({}.hasOwnProperty);return Hg=Object.hasOwn||function(g,C){return t(A(g),C)},Hg}function bA(){if(Jg)return _g;Jg=1;var g=E(),A=0,t=Math.random(),C=g(1.1.toString);return _g=function(g){return"Symbol("+(void 0===g?"":g)+")_"+C(++A+t,36)}}function mA(){if($g)return qg;$g=1;var g=m(),A=pA(),t=vA(),C=bA(),I=Pg(),e=Mg(),i=g.Symbol,o=A("wks"),n=e?i.for||i:i&&i.withoutSetter||C;return qg=function(g){return t(o,g)||(o[g]=I&&t(i,g)?i[g]:n("Symbol."+g)),o[g]}}function yA(){if(AA)return gA;AA=1;var g=B(),A=Og(),t=zg(),C=Sg(),I=Fg(),e=TypeError,i=mA()("toPrimitive");return gA=function(o,n){if(!A(o)||t(o))return o;var s,r=C(o,i);if(r){if(void 0===n&&(n="default"),s=g(r,o,n),!A(s)||t(s))return s;throw new e("Can't convert object to primitive value")}return void 0===n&&(n="number"),I(o,n)}}function wA(){if(CA)return tA;CA=1;var g=yA(),A=zg();return tA=function(t){var C=g(t,"string");return A(C)?C:C+""}}function xA(){if(eA)return IA;eA=1;var g=m(),A=Og(),t=g.document,C=A(t)&&A(t.createElement);return IA=function(g){return C?t.createElement(g):{}},IA}function EA(){if(oA)return iA;oA=1;var g=z(),A=y(),t=xA();return iA=!g&&!A(function(){return 7!==Object.defineProperty(t("div"),"a",{get:function(){return 7}}).a})}function OA(){if(nA)return M;nA=1;var g=z(),A=B(),t=bg(),C=mg(),I=Eg(),e=wA(),i=vA(),o=EA(),n=Object.getOwnPropertyDescriptor;return M.f=g?n:function(g,s){if(g=I(g),s=e(s),o)try{return n(g,s)}catch(g){}if(i(g,s))return C(!A(t.f,g,s),g[s])},M}function TA(){if(rA)return sA;rA=1;var g=y(),A=D(),t=/#|\.prototype\./,C=function(t,C){var n=e[I(t)];return n===o||n!==i&&(A(C)?g(C):!!C)},I=C.normalize=function(g){return String(g).replace(t,".").toLowerCase()},e=C.data={},i=C.NATIVE="N",o=C.POLYFILL="P";return sA=C}function DA(){if(dA)return aA;dA=1;var g=T(),A=Zg(),t=w(),C=g(g.bind);return aA=function(g,I){return A(g),void 0===I?g:t?C(g,I):function(){return g.apply(I,arguments)}},aA}var NA,kA,RA,PA,MA,zA,BA,ZA,SA,FA,GA,jA,LA,VA,YA,WA,QA,UA,KA,HA,XA,_A,JA,qA,$A,gt,At,tt,Ct,It={};function et(){return kA?NA:(kA=1,NA=z()&&y()(function(){return 42!==Object.defineProperty(function(){},"prototype",{value:42,writable:!1}).prototype}))}function it(){if(PA)return RA;PA=1;var g=Og(),A=String,t=TypeError;return RA=function(C){if(g(C))return C;throw new t(A(C)+" is not an object")}}function ot(){if(MA)return It;MA=1;var g=z(),A=EA(),t=et(),C=it(),I=wA(),e=TypeError,i=Object.defineProperty,o=Object.getOwnPropertyDescriptor,n="enumerable",s="configurable",r="writable";return It.f=g?t?function(g,A,t){if(C(g),A=I(A),C(t),"function"==typeof g&&"prototype"===A&&"value"in t&&r in t&&!t[r]){var e=o(g,A);e&&e[r]&&(g[A]=t.value,t={configurable:s in t?t[s]:e[s],enumerable:n in t?t[n]:e[n],writable:!1})}return i(g,A,t)}:i:function(g,t,o){if(C(g),t=I(t),C(o),A)try{return i(g,t,o)}catch(g){}if("get"in o||"set"in o)throw new e("Accessors not supported");return"value"in o&&(g[t]=o.value),g},It}function nt(){if(BA)return zA;BA=1;var g=z(),A=ot(),t=mg();return zA=g?function(g,C,I){return A.f(g,C,t(1,I))}:function(g,A,t){return g[A]=t,g},zA}function st(){if(SA)return ZA;SA=1;var g=m(),A=x(),t=T(),C=D(),I=OA().f,e=TA(),i=Tg(),o=DA(),n=nt(),s=vA(),r=function(g){var t=function(C,I,e){if(this instanceof t){switch(arguments.length){case 0:return new g;case 1:return new g(C);case 2:return new g(C,I)}return new g(C,I,e)}return A(g,this,arguments)};return t.prototype=g.prototype,t};return ZA=function(A,a){var d,h,l,c,u,p,f,v,b,m=A.target,y=A.global,w=A.stat,x=A.proto,E=y?g:w?g[m]:g[m]&&g[m].prototype,O=y?i:i[m]||n(i,m,{})[m],T=O.prototype;for(c in a)h=!(d=e(y?c:m+(w?".":"#")+c,A.forced))&&E&&s(E,c),p=O[c],h&&(f=A.dontCallGetSet?(b=I(E,c))&&b.value:E[c]),u=h&&f?f:a[c],(d||x||typeof p!=typeof u)&&(v=A.bind&&h?o(u,g):A.wrap&&h?r(u):x&&C(u)?t(u):u,(A.sham||u&&u.sham||p&&p.sham)&&n(v,"sham",!0),n(O,c,v),x&&(s(i,l=m+"Prototype")||n(i,l,{}),n(i[l],c,u),A.real&&T&&(d||!T[c])&&n(T,c,u)))},ZA}function rt(){if(GA)return FA;GA=1;var g=Math.ceil,A=Math.floor;return FA=Math.trunc||function(t){var C=+t;return(C>0?A:g)(C)}}function at(){if(LA)return jA;LA=1;var g=rt();return jA=function(A){var t=+A;return t!=t||0===t?0:g(t)},jA}function dt(){if(YA)return VA;YA=1;var g=at(),A=Math.max,t=Math.min;return VA=function(C,I){var e=g(C);return e<0?A(e+I,0):t(e,I)},VA}function ht(){if(QA)return WA;QA=1;var g=at(),A=Math.min;return WA=function(t){var C=g(t);return C>0?A(C,9007199254740991):0}}function lt(){if(KA)return UA;KA=1;var g=ht();return UA=function(A){return g(A.length)}}function ct(){if(XA)return HA;XA=1;var g=Eg(),A=dt(),t=lt(),C=function(C){return function(I,e,i){var o=g(I),n=t(o);if(0===n)return!C&&-1;var s,r=A(i,n);if(C&&e!=e){for(;n>r;)if((s=o[r++])!=s)return!0}else for(;n>r;r++)if((C||r in o)&&o[r]===e)return C||r||0;return!C&&-1}};return HA={includes:C(!0),indexOf:C(!1)}}function ut(){return JA?_A:(JA=1,_A={})}function pt(){if($A)return qA;$A=1;var g=E(),A=vA(),t=Eg(),C=ct().indexOf,I=ut(),e=g([].push);return qA=function(g,i){var o,n=t(g),s=0,r=[];for(o in n)!A(I,o)&&A(n,o)&&e(r,o);for(;i.length>s;)A(n,o=i[s++])&&(~C(r,o)||e(r,o));return r},qA}function ft(){return At?gt:(At=1,gt=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"])}function vt(){if(Ct)return tt;Ct=1;var g=pt(),A=ft();return tt=Object.keys||function(t){return g(t,A)}}var bt,mt,yt,wt,xt,Et,Ot,Tt,Dt,Nt,kt={};function Rt(){return bt||(bt=1,kt.f=Object.getOwnPropertySymbols),kt}function Pt(){if(yt)return mt;yt=1;var g=z(),A=E(),t=B(),C=y(),I=vt(),e=Rt(),i=bg(),o=fA(),n=yg(),s=Object.assign,r=Object.defineProperty,a=A([].concat);return mt=!s||C(function(){if(g&&1!==s({b:1},s(r({},"a",{enumerable:!0,get:function(){r(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var A={},t={},C=Symbol("assign detection"),e="abcdefghijklmnopqrst";return A[C]=7,e.split("").forEach(function(g){t[g]=g}),7!==s({},A)[C]||I(s({},t)).join("")!==e})?function(A,C){for(var s=o(A),r=arguments.length,d=1,h=e.f,l=i.f;r>d;)for(var c,u=n(arguments[d++]),p=h?a(I(u),h(u)):I(u),f=p.length,v=0;f>v;)c=p[v++],g&&!t(l,u,c)||(s[c]=u[c]);return s}:s,mt}function Mt(){return Et?xt:(Et=1,function(){if(wt)return b;wt=1;var g=st(),A=Pt();g({target:"Object",stat:!0,arity:2,forced:Object.assign!==A},{assign:A})}(),xt=Tg().Object.assign)}function zt(){return Tt?Ot:(Tt=1,Ot=Mt())}var Bt,Zt,St,Ft,Gt,jt,Lt,Vt,Yt,Wt,Qt,Ut,Kt,Ht,Xt,_t=C(Nt?Dt:(Nt=1,Dt=zt())),Jt={};function qt(){return Zt?Bt:(Zt=1,Bt=E()([].slice))}function $t(){if(Ft)return St;Ft=1;var g=E(),A=Zg(),t=Og(),C=vA(),I=qt(),e=w(),i=Function,o=g([].concat),n=g([].join),s={};return St=e?i.bind:function(g){var e=A(this),r=e.prototype,a=I(arguments,1),d=function(){var A=o(a,I(arguments));return this instanceof d?function(g,A,t){if(!C(s,A)){for(var I=[],e=0;e=.1;)l=+e[a++%i],l>r&&(l=r),h=Math.sqrt(l*l/(1+s*s)),h=o<0?-h:h,A+=h,t+=s*h,!0===d?g.lineTo(A,t):g.moveTo(A,t),r-=l,d=!d}const rC={circle:eC,dashedLine:sC,database:nC,diamond:function(g,A,t,C){g.beginPath(),g.lineTo(A,t+C),g.lineTo(A+C,t),g.lineTo(A,t-C),g.lineTo(A-C,t),g.closePath()},ellipse:oC,ellipse_vis:oC,hexagon:function(g,A,t,C){g.beginPath();const I=2*Math.PI/6;g.moveTo(A+C,t);for(let e=1;e<6;e++)g.lineTo(A+C*Math.cos(I*e),t+C*Math.sin(I*e));g.closePath()},roundRect:iC,square:function(g,A,t,C){g.beginPath(),g.rect(A-C,t-C,2*C,2*C),g.closePath()},star:function(g,A,t,C){g.beginPath(),t+=.1*(C*=.82);for(let I=0;I<10;I++){const e=I%2==0?1.3*C:.5*C;g.lineTo(A+e*Math.sin(2*I*Math.PI/10),t-e*Math.cos(2*I*Math.PI/10))}g.closePath()},triangle:function(g,A,t,C){g.beginPath(),t+=.275*(C*=1.15);const I=2*C,e=I/2,i=Math.sqrt(3)/6*I,o=Math.sqrt(I*I-e*e);g.moveTo(A,t-(o-i)),g.lineTo(A+e,t+i),g.lineTo(A-e,t+i),g.lineTo(A,t-(o-i)),g.closePath()},triangleDown:function(g,A,t,C){g.beginPath(),t-=.275*(C*=1.15);const I=2*C,e=I/2,i=Math.sqrt(3)/6*I,o=Math.sqrt(I*I-e*e);g.moveTo(A,t+(o-i)),g.lineTo(A+e,t-i),g.lineTo(A-e,t-i),g.lineTo(A,t+(o-i)),g.closePath()}};var aC,dC={exports:{}};var hC,lC,cC,uC,pC,fC,vC,bC,mC,yC,wC,xC,EC,OC=(aC||(aC=1,function(g){function A(g){if(g)return function(g){for(var t in A.prototype)g[t]=A.prototype[t];return g}(g)}g.exports=A,A.prototype.on=A.prototype.addEventListener=function(g,A){return this._callbacks=this._callbacks||{},(this._callbacks["$"+g]=this._callbacks["$"+g]||[]).push(A),this},A.prototype.once=function(g,A){function t(){this.off(g,t),A.apply(this,arguments)}return t.fn=A,this.on(g,t),this},A.prototype.off=A.prototype.removeListener=A.prototype.removeAllListeners=A.prototype.removeEventListener=function(g,A){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var t,C=this._callbacks["$"+g];if(!C)return this;if(1==arguments.length)return delete this._callbacks["$"+g],this;for(var I=0;I9007199254740991)throw new g("Maximum allowed index exceeded");return A},BC}function II(){if(FC)return SC;FC=1;var g=z(),A=ot(),t=mg();return SC=function(C,I,e){g?A.f(C,I,t(0,e)):C[I]=e},SC}function eI(){if(jC)return GC;jC=1;var g=z(),A=DC(),t=TypeError,C=Object.getOwnPropertyDescriptor,I=g&&!function(){if(void 0!==this)return!0;try{Object.defineProperty([],"length",{writable:!1}).length=1}catch(g){return g instanceof TypeError}}();return GC=I?function(g,I){if(A(g)&&!C(g,"length").writable)throw new t("Cannot set read only .length");return g.length=I}:function(g,A){return g.length=A}}function iI(){if(VC)return LC;VC=1;var g={};return g[mA()("toStringTag")]="z",LC="[object z]"===String(g)}function oI(){if(WC)return YC;WC=1;var g=iI(),A=D(),t=O(),C=mA()("toStringTag"),I=Object,e="Arguments"===t(function(){return arguments}());return YC=g?t:function(g){var i,o,n;return void 0===g?"Undefined":null===g?"Null":"string"==typeof(o=function(g,A){try{return g[A]}catch(g){}}(i=I(g),C))?o:e?t(i):"Object"===(n=t(i))&&A(i.callee)?"Arguments":n},YC}function nI(){if(UC)return QC;UC=1;var g=E(),A=D(),t=uA(),C=g(Function.toString);return A(t.inspectSource)||(t.inspectSource=function(g){return C(g)}),QC=t.inspectSource}function sI(){if(HC)return KC;HC=1;var g=E(),A=y(),t=D(),C=oI(),I=Dg(),e=nI(),i=function(){},o=I("Reflect","construct"),n=/^\s*(?:class|function)\b/,s=g(n.exec),r=!n.test(i),a=function(g){if(!t(g))return!1;try{return o(i,[],g),!0}catch(g){return!1}},d=function(g){if(!t(g))return!1;switch(C(g)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return r||!!s(n,e(g))}catch(g){return!0}};return d.sham=!0,KC=!o||A(function(){var g;return a(a.call)||!a(Object)||!a(function(){g=!0})||g})?d:a}function rI(){if(_C)return XC;_C=1;var g=DC(),A=sI(),t=Og(),C=mA()("species"),I=Array;return XC=function(e){var i;return g(e)&&(i=e.constructor,(A(i)&&(i===I||g(i.prototype))||t(i)&&null===(i=i[C]))&&(i=void 0)),void 0===i?I:i}}function aI(){if(qC)return JC;qC=1;var g=rI();return JC=function(A,t){return new(g(A))(0===t?0:t)}}function dI(){if(gI)return $C;gI=1;var g=y(),A=mA(),t=Rg(),C=A("species");return $C=function(A){return t>=51||!g(function(){var g=[];return(g.constructor={})[C]=function(){return{foo:1}},1!==g[A](Boolean).foo})},$C}function hI(){if(AI)return tI;AI=1;var g=st(),A=y(),t=DC(),C=Og(),I=fA(),e=lt(),i=CI(),o=II(),n=eI(),s=aI(),r=dI(),a=mA(),d=Rg(),h=a("isConcatSpreadable"),l=d>=51||!A(function(){var g=[];return g[h]=!1,g.concat()[0]!==g}),c=function(g){if(!C(g))return!1;var A=g[h];return void 0!==A?!!A:t(g)};return g({target:"Array",proto:!0,arity:1,forced:!l||!r("concat")},{concat:function(g){var A,t,C,r,a,d=I(this),h=s(d,0),l=0;for(A=-1,C=arguments.length;Ar;)t.f(g,i=n[r++],o[i]);return g},OI}function DI(){return mI?bI:(mI=1,bI=Dg()("document","documentElement"))}function NI(){if(wI)return yI;wI=1;var g=pA(),A=bA(),t=g("keys");return yI=function(g){return t[g]||(t[g]=A(g))}}function kI(){if(EI)return xI;EI=1;var g,A=it(),t=TI(),C=ft(),I=ut(),e=DI(),i=xA(),o="prototype",n="script",s=NI()("IE_PROTO"),r=function(){},a=function(g){return"<"+n+">"+g+""},d=function(g){g.write(a("")),g.close();var A=g.parentWindow.Object;return g=null,A},h=function(){try{g=new ActiveXObject("htmlfile")}catch(g){}var A,t,I;h="undefined"!=typeof document?document.domain&&g?d(g):(t=i("iframe"),I="java"+n+":",t.style.display="none",e.appendChild(t),t.src=String(I),(A=t.contentWindow.document).open(),A.write(a("document.F=Object")),A.close(),A.F):d(g);for(var s=C.length;s--;)delete h[o][C[s]];return h()};return I[s]=!0,xI=Object.create||function(g,C){var I;return null!==g?(r[o]=A(g),I=new r,r[o]=null,I[s]=g):I=h(),void 0===C?I:t.f(I,C)}}var RI,PI={};function MI(){if(RI)return PI;RI=1;var g=pt(),A=ft().concat("length","prototype");return PI.f=Object.getOwnPropertyNames||function(t){return g(t,A)},PI}var zI,BI,ZI,SI,FI,GI={};function jI(){if(zI)return GI;zI=1;var g=O(),A=Eg(),t=MI().f,C=qt(),I="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];return GI.f=function(e){return I&&"Window"===g(e)?function(g){try{return t(g)}catch(g){return C(I)}}(e):t(A(e))},GI}function LI(){if(ZI)return BI;ZI=1;var g=nt();return BI=function(A,t,C,I){return I&&I.enumerable?A[t]=C:g(A,t,C),A},BI}function VI(){if(FI)return SI;FI=1;var g=ot();return SI=function(A,t,C){return g.f(A,t,C)}}var YI,WI,QI,UI,KI,HI,XI,_I,JI,qI,$I,ge,Ae,te,Ce,Ie,ee={};function ie(){if(YI)return ee;YI=1;var g=mA();return ee.f=g,ee}function oe(){if(QI)return WI;QI=1;var g=Tg(),A=vA(),t=ie(),C=ot().f;return WI=function(I){var e=g.Symbol||(g.Symbol={});A(e,I)||C(e,I,{value:t.f(I)})}}function ne(){if(KI)return UI;KI=1;var g=B(),A=Dg(),t=mA(),C=LI();return UI=function(){var I=A("Symbol"),e=I&&I.prototype,i=e&&e.valueOf,o=t("toPrimitive");e&&!e[o]&&C(e,o,function(A){return g(i,this)},{arity:1})}}function se(){if(XI)return HI;XI=1;var g=iI(),A=oI();return HI=g?{}.toString:function(){return"[object "+A(this)+"]"}}function re(){if(JI)return _I;JI=1;var g=iI(),A=ot().f,t=nt(),C=vA(),I=se(),e=mA()("toStringTag");return _I=function(i,o,n,s){var r=n?i:i&&i.prototype;r&&(C(r,e)||A(r,e,{configurable:!0,value:o}),s&&!g&&t(r,"toString",I))},_I}function ae(){if($I)return qI;$I=1;var g=m(),A=D(),t=g.WeakMap;return qI=A(t)&&/native code/.test(String(t))}function de(){if(Ae)return ge;Ae=1;var g,A,t,C=ae(),I=m(),e=Og(),i=nt(),o=vA(),n=uA(),s=NI(),r=ut(),a="Object already initialized",d=I.TypeError,h=I.WeakMap;if(C||n.state){var l=n.state||(n.state=new h);l.get=l.get,l.has=l.has,l.set=l.set,g=function(g,A){if(l.has(g))throw new d(a);return A.facade=g,l.set(g,A),A},A=function(g){return l.get(g)||{}},t=function(g){return l.has(g)}}else{var c=s("state");r[c]=!0,g=function(g,A){if(o(g,c))throw new d(a);return A.facade=g,i(g,c,A),A},A=function(g){return o(g,c)?g[c]:{}},t=function(g){return o(g,c)}}return ge={set:g,get:A,has:t,enforce:function(C){return t(C)?A(C):g(C,{})},getterFor:function(g){return function(t){var C;if(!e(t)||(C=A(t)).type!==g)throw new d("Incompatible receiver, "+g+" required");return C}}},ge}function he(){if(Ce)return te;Ce=1;var g=DA(),A=yg(),t=fA(),C=lt(),I=aI(),e=II(),i=function(i){var o=1===i,n=2===i,s=3===i,r=4===i,a=6===i,d=7===i,h=5===i||a;return function(l,c,u){for(var p,f,v=t(l),b=A(v),m=C(b),y=g(c,u),w=0,x=0,E=o?I(l,m):n||d?I(l,0):void 0;m>w;w++)if((h||w in b)&&(f=y(p=b[w],w,v),i))if(o)e(E,w,f);else if(f)switch(i){case 3:return!0;case 5:return p;case 6:return w;case 2:e(E,x++,p)}else switch(i){case 4:return!1;case 7:e(E,x++,p)}return a?-1:s||r?r:E}};return te={forEach:i(0),map:i(1),filter:i(2),some:i(3),every:i(4),find:i(5),findIndex:i(6),filterReject:i(7)}}var le,ce,ue,pe={};function fe(){return ce?le:(ce=1,le=Pg()&&!!Symbol.for&&!!Symbol.keyFor)}var ve,be={};var me,ye,we,xe,Ee,Oe,Te,De={};function Ne(){if(ye)return me;ye=1;var g=Og(),A=de().get;return me=function(t){if(!g(t))return!1;var C=A(t);return!!C&&"RawJSON"===C.type}}function ke(){if(xe)return we;xe=1;var g=E(),A=vA(),t=SyntaxError,C=parseInt,I=String.fromCharCode,e=g("".charAt),i=g("".slice),o=g(/./.exec),n={'\\"':'"',"\\\\":"\\","\\/":"/","\\b":"\b","\\f":"\f","\\n":"\n","\\r":"\r","\\t":"\t"},s=/^[\da-f]{4}$/i,r=/^[\u0000-\u001F]$/;return we=function(g,a){for(var d=!0,h="";a=A.length)return g.target=null,i(void 0,!0);switch(g.kind){case"keys":return i(t,!1);case"values":return i(A[t],!1)}return i([t,A[t]],!1)},"values");var d=t.Arguments=t.Array;if(A("keys"),A("values"),A("entries"),!o&&n&&"values"!==d.name)try{I(d,"name",{value:"values"})}catch(g){}return Fi}function io(){return Li?ji:(Li=1,ji={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})}function oo(){if(Vi)return Qi;Vi=1,eo();var g=io(),A=m(),t=re(),C=Ki();for(var I in g)t(A[I],I),C[I]=C.Array;return Qi}function no(){if(Wi)return Yi;Wi=1;var g=ai();return oo(),Yi=g}var so,ro={};var ao;var ho;var lo,co,uo;function po(){if(uo)return co;uo=1;var g=no();return function(){if(so)return ro;so=1;var g=mA(),A=ot().f,t=g("metadata"),C=Function.prototype;void 0===C[t]&&A(C,t,{value:null})}(),ao||(ao=1,Ge()),ho||(ho=1,Ye()),lo||(lo=1,oe()("metadata")),co=g}var fo,vo,bo;function mo(){if(vo)return fo;vo=1;var g=Dg(),A=E(),t=g("Symbol"),C=t.keyFor,I=A(t.prototype.valueOf);return fo=t.isRegisteredSymbol||function(g){try{return void 0!==C(I(g))}catch(g){return!1}}}var yo,wo,xo;function Eo(){if(wo)return yo;wo=1;for(var g=pA(),A=Dg(),t=E(),C=zg(),I=mA(),e=A("Symbol"),i=e.isWellKnownSymbol,o=A("Object","getOwnPropertyNames"),n=t(e.prototype.valueOf),s=g("wks"),r=0,a=o(e),d=a.length;r=h?g?"":void 0:(s=e(a,d))<55296||s>56319||d+1===h||(r=e(a,d+1))<56320||r>57343?g?I(a,d):s:g?i(a,d,d+2):r-56320+(s-55296<<10)+65536}};return jo={codeAt:o(!1),charAt:o(!0)}}function In(){if(Vo)return tn;Vo=1;var g=Cn().charAt,A=fI(),t=de(),C=Co(),I=Io(),e="String Iterator",i=t.set,o=t.getterFor(e);return C(String,"String",function(g){i(this,{type:e,string:A(g),index:0})},function(){var A,t=o(this),C=t.string,e=t.index;return e>=C.length?I(void 0,!0):(A=g(C,e),t.index+=A.length,I(A,!1))}),tn}function en(){if(Wo)return Yo;Wo=1;var g=oI(),A=Sg(),t=wg(),C=Ki(),I=mA()("iterator");return Yo=function(e){if(!t(e))return A(e,I)||A(e,"@@iterator")||C[g(e)]},Yo}function on(){return Uo?Qo:(Uo=1,eo(),In(),Qo=en())}function nn(){if(Ho)return Ko;Ho=1;var g=on();return oo(),Ko=g}function sn(){return _o?Xo:(_o=1,Xo=nn())}function rn(){return qo?Jo:(qo=1,Jo=sn())}function an(){return gn?$o:(gn=1,$o=rn())}var dn,hn,ln,cn,un,pn,fn,vn,bn,mn,yn,wn,xn,En=C(an()),On={};function Tn(){return ln?hn:(ln=1,function(){if(dn)return On;dn=1;var g=st(),A=fA(),t=lt(),C=eI(),I=CI();g({target:"Array",proto:!0,arity:1,forced:y()(function(){return 4294967297!==[].push.call({length:4294967296},1)})||!function(){try{Object.defineProperty([],"length",{writable:!1}).push()}catch(g){return g instanceof TypeError}}()},{push:function(g){var e=A(this),i=t(e),o=arguments.length;I(i+o);for(var n=0;n1?arguments[1]:void 0,p=void 0!==u;p&&(u=g(u,c>2?arguments[2]:void 0));var f,v,b,m,y,w,x=t(h),E=r(x),O=0;if(!E||this===d&&I(E))for(f=i(x),v=l?new this(f):d(f);f>O;O++)w=p?u(x[O],O):x[O],o(v,O,w);else for(v=l?new this:[],y=(m=s(x,E)).next;!(b=A(y,m)).done;O++){w=p?C(m,u,[b.value,O],!0):b.value;try{o(v,O,w)}catch(g){a(m,"throw",g)}}return n(v,O),v},ns}function ks(){if(as)return rs;as=1;var g=mA()("iterator"),A=!1;try{var t=0,C={next:function(){return{done:!!t++}},return:function(){A=!0}};C[g]=function(){return this},Array.from(C,function(){throw 2})}catch(g){}return rs=function(t,C){try{if(!C&&!A)return!1}catch(g){return!1}var I=!1;try{var e={};e[g]=function(){return{next:function(){return{done:I=!0}}}},t(e)}catch(g){}return I},rs}function Rs(){return ls?hs:(ls=1,In(),function(){if(ds)return xs;ds=1;var g=st(),A=Ns();g({target:"Array",stat:!0,forced:!ks()(function(g){Array.from(g)})},{from:A})}(),hs=Tg().Array.from)}function Ps(){return us?cs:(us=1,cs=Rs())}function Ms(){return fs?ps:(fs=1,ps=Ps())}function zs(){return bs?vs:(bs=1,vs=Ms())}function Bs(){return ys?ms:(ys=1,ms=zs())}var Zs,Ss,Fs=C(Bs());function Gs(g,A){(null==A||A>g.length)&&(A=g.length);for(var t=0,C=Array(A);t1?arguments[1]:void 0)}})}(),or=gC()("Array","map"))}function fr(){if(rr)return sr;rr=1;var g=Ng(),A=pr(),t=Array.prototype;return sr=function(C){var I=C.map;return C===t||g(t,C)&&I===t.map?A:I},sr}function vr(){return dr?ar:(dr=1,ar=fr())}var br,mr,yr,wr,xr,Er,Or,Tr=C(lr?hr:(lr=1,hr=vr())),Dr={};function Nr(){return yr?mr:(yr=1,function(){if(br)return Dr;br=1;var g=st(),A=fA(),t=vt();g({target:"Object",stat:!0,forced:y()(function(){t(1)})},{keys:function(g){return t(A(g))}})}(),mr=Tg().Object.keys)}function kr(){return xr?wr:(xr=1,wr=Nr())}var Rr,Pr,Mr,zr,Br,Zr,Sr,Fr=C(Or?Er:(Or=1,Er=kr())),Gr={};function jr(){return Mr?Pr:(Mr=1,function(){if(Rr)return Gr;Rr=1;var g=st(),A=Date,t=E()(A.prototype.getTime);g({target:"Date",stat:!0},{now:function(){return t(new A)}})}(),Pr=Tg().Date.now)}function Lr(){return Br?zr:(Br=1,zr=jr())}var Vr,Yr,Wr,Qr,Ur,Kr,Hr,Xr,_r,Jr,qr,$r,ga,Aa=C(Sr?Zr:(Sr=1,Zr=Lr())),ta={};function Ca(){if(Yr)return Vr;Yr=1;var g=y();return Vr=function(A,t){var C=[][A];return!!C&&g(function(){C.call(null,t||function(){return 1},1)})}}function Ia(){if(Qr)return Wr;Qr=1;var g=he().forEach,A=Ca()("forEach");return Wr=A?[].forEach:function(A){return g(this,A,arguments.length>1?arguments[1]:void 0)},Wr}function ea(){return Hr?Kr:(Hr=1,function(){if(Ur)return ta;Ur=1;var g=st(),A=Ia();g({target:"Array",proto:!0,forced:[].forEach!==A},{forEach:A})}(),Kr=gC()("Array","forEach"))}function ia(){return _r?Xr:(_r=1,Xr=ea())}function oa(){if(qr)return Jr;qr=1;var g=oI(),A=vA(),t=Ng(),C=ia(),I=Array.prototype,e={DOMTokenList:!0,NodeList:!0};return Jr=function(i){var o=i.forEach;return i===I||t(I,i)&&o===I.forEach||A(e,g(i))?C:o},Jr}var na,sa,ra,aa,da,ha,la,ca,ua,pa=C(ga?$r:(ga=1,$r=oa())),fa={};function va(){return ra?sa:(ra=1,function(){if(na)return fa;na=1;var g=st(),A=E(),t=DC(),C=A([].reverse),I=[1,2];g({target:"Array",proto:!0,forced:String(I)===String(I.reverse())},{reverse:function(){return t(this)&&(this.length=this.length),C(this)}})}(),sa=gC()("Array","reverse"))}function ba(){if(da)return aa;da=1;var g=Ng(),A=va(),t=Array.prototype;return aa=function(C){var I=C.reverse;return C===t||g(t,C)&&I===t.reverse?A:I},aa}function ma(){return la?ha:(la=1,ha=ba())}var ya,wa,xa,Ea,Oa,Ta,Da,Na,ka,Ra,Pa,Ma=C(ua?ca:(ua=1,ca=ma())),za={};function Ba(){if(wa)return ya;wa=1;var g=Bg(),A=TypeError;return ya=function(t,C){if(!delete t[C])throw new A("Cannot delete property "+g(C)+" of "+g(t))}}function Za(){return Oa?Ea:(Oa=1,function(){if(xa)return za;xa=1;var g=st(),A=fA(),t=dt(),C=at(),I=lt(),e=eI(),i=CI(),o=aI(),n=II(),s=Ba(),r=dI()("splice"),a=Math.max,d=Math.min;g({target:"Array",proto:!0,forced:!r},{splice:function(g,r){var h,l,c,u,p,f,v=A(this),b=I(v),m=t(g,b),y=arguments.length;for(0===y?h=l=0:1===y?(h=0,l=b-m):(h=y-2,l=d(a(C(r),0),b-m)),i(b+h-l),c=o(v,l),u=0;ub-l+h;u--)s(v,u-1)}else if(h>l)for(u=b-l;u>m;u--)f=u+h-1,(p=u+l-1)in v?v[f]=v[p]:s(v,f);for(u=0;u1?arguments[1]:void 0)}}),C("includes")}(),ja=gC()("Array","includes"))}var Qa,Ua,Ka,Ha,Xa,_a,Ja,qa,$a,gd,Ad,td,Cd,Id,ed,id={};function od(){if(Ua)return Qa;Ua=1;var g=Og(),A=O(),t=mA()("match");return Qa=function(C){var I;return g(C)&&(void 0!==(I=C[t])?!!I:"RegExp"===A(C))},Qa}function nd(){if(Ha)return Ka;Ha=1;var g=od(),A=TypeError;return Ka=function(t){if(g(t))throw new A("The method doesn't accept regular expressions");return t},Ka}function sd(){if(_a)return Xa;_a=1;var g=mA()("match");return Xa=function(A){var t=/./;try{"/./"[A](t)}catch(C){try{return t[g]=!1,"/./"[A](t)}catch(g){}}return!1}}function rd(){return $a?qa:($a=1,function(){if(Ja)return id;Ja=1;var g=st(),A=E(),t=nd(),C=xg(),I=fI(),e=sd(),i=A("".indexOf);g({target:"String",proto:!0,forced:!e("includes")},{includes:function(g){return!!~i(I(C(this)),I(t(g)),arguments.length>1?arguments[1]:void 0)}})}(),qa=gC()("String","includes"))}function ad(){if(Ad)return gd;Ad=1;var g=Ng(),A=Wa(),t=rd(),C=Array.prototype,I=String.prototype;return gd=function(e){var i=e.includes;return e===C||g(C,e)&&i===C.includes?A:"string"==typeof e||e===I||g(I,e)&&i===I.includes?t:i},gd}function dd(){return Cd?td:(Cd=1,td=ad())}var hd,ld,cd,ud,pd,fd,vd,bd=C(ed?Id:(ed=1,Id=dd())),md={};function yd(){return cd?ld:(cd=1,function(){if(hd)return md;hd=1;var g=st(),A=y(),t=fA(),C=_i(),I=Xi();g({target:"Object",stat:!0,forced:A(function(){C(1)}),sham:!I},{getPrototypeOf:function(g){return C(t(g))}})}(),ld=Tg().Object.getPrototypeOf)}function wd(){return pd?ud:(pd=1,ud=yd())}var xd,Ed,Od,Td,Dd,Nd,kd,Rd,Pd=C(vd?fd:(vd=1,fd=wd()));function Md(){return Ed?xd:(Ed=1,hI(),xd=gC()("Array","concat"))}function zd(){if(Td)return Od;Td=1;var g=Ng(),A=Md(),t=Array.prototype;return Od=function(C){var I=C.concat;return C===t||g(t,C)&&I===t.concat?A:I},Od}function Bd(){return Nd?Dd:(Nd=1,Dd=zd())}var Zd,Sd,Fd,Gd,jd,Ld,Vd,Yd,Wd,Qd=C(Rd?kd:(Rd=1,kd=Bd())),Ud={};function Kd(){return Fd?Sd:(Fd=1,function(){if(Zd)return Ud;Zd=1;var g=st(),A=he().filter;g({target:"Array",proto:!0,forced:!dI()("filter")},{filter:function(g){return A(this,g,arguments.length>1?arguments[1]:void 0)}})}(),Sd=gC()("Array","filter"))}function Hd(){if(jd)return Gd;jd=1;var g=Ng(),A=Kd(),t=Array.prototype;return Gd=function(C){var I=C.filter;return C===t||g(t,C)&&I===t.filter?A:I},Gd}function Xd(){return Vd?Ld:(Vd=1,Ld=Hd())}var _d,Jd,qd,$d,gh,Ah,th,Ch,Ih,eh=C(Wd?Yd:(Wd=1,Yd=Xd())),ih={};function oh(){if(Jd)return _d;Jd=1;var g=z(),A=y(),t=E(),C=_i(),I=vt(),e=Eg(),i=t(bg().f),o=t([].push),n=g&&A(function(){var g=Object.create(null);return g[2]=2,!i(g,2)}),s=function(A){return function(t){for(var s,r=e(t),a=I(r),d=n&&null===C(r),h=a.length,l=0,c=[];h>l;)s=a[l++],g&&!(d?s in r:i(r,s))||o(c,A?[s,r[s]]:r[s]);return c}};return _d={entries:s(!0),values:s(!1)}}function nh(){return gh?$d:(gh=1,function(){if(qd)return ih;qd=1;var g=st(),A=oh().values;g({target:"Object",stat:!0},{values:function(g){return A(g)}})}(),$d=Tg().Object.values)}function sh(){return th?Ah:(th=1,Ah=nh())}var rh,ah,dh,hh,lh,ch,uh,ph,fh,vh,bh,mh,yh,wh=C(Ih?Ch:(Ih=1,Ch=sh())),xh={};function Eh(){return ah?rh:(ah=1,rh="\t\n\v\f\r                 \u2028\u2029\ufeff")}function Oh(){if(hh)return dh;hh=1;var g=E(),A=xg(),t=fI(),C=Eh(),I=g("".replace),e=RegExp("^["+C+"]+"),i=RegExp("(^|[^"+C+"])["+C+"]+$"),o=function(g){return function(C){var o=t(A(C));return 1&g&&(o=I(o,e,"")),2&g&&(o=I(o,i,"$1")),o}};return dh={start:o(1),end:o(2),trim:o(3)}}function Th(){if(ch)return lh;ch=1;var g=m(),A=y(),t=E(),C=fI(),I=Oh().trim,e=Eh(),i=g.parseInt,o=g.Symbol,n=o&&o.iterator,s=/^[+-]?0x/i,r=t(s.exec),a=8!==i(e+"08")||22!==i(e+"0x16")||n&&!A(function(){i(Object(n))});return lh=a?function(g,A){var t=I(C(g));return i(t,A>>>0||(r(s,t)?16:10))}:i,lh}function Dh(){return fh?ph:(fh=1,function(){if(uh)return xh;uh=1;var g=st(),A=Th();g({global:!0,forced:parseInt!==A},{parseInt:A})}(),ph=Tg().parseInt)}function Nh(){return bh?vh:(bh=1,vh=Dh())}var kh,Rh,Ph,Mh,zh,Bh,Zh,Sh,Fh,Gh=C(yh?mh:(yh=1,mh=Nh())),jh={};function Lh(){return Ph?Rh:(Ph=1,function(){if(kh)return jh;kh=1;var g=st(),A=T(),t=ct().indexOf,C=Ca(),I=A([].indexOf),e=!!I&&1/I([1],1,-0)<0;g({target:"Array",proto:!0,forced:e||!C("indexOf")},{indexOf:function(g){var A=arguments.length>1?arguments[1]:void 0;return e?I(this,g,A)||0:t(this,g,A)}})}(),Rh=gC()("Array","indexOf"))}function Vh(){if(zh)return Mh;zh=1;var g=Ng(),A=Lh(),t=Array.prototype;return Mh=function(C){var I=C.indexOf;return C===t||g(t,C)&&I===t.indexOf?A:I},Mh}function Yh(){return Zh?Bh:(Zh=1,Bh=Vh())}var Wh,Qh,Uh,Kh,Hh,Xh,_h,Jh=C(Fh?Sh:(Fh=1,Sh=Yh()));function qh(){if(Uh)return Qh;Uh=1,Wh||(Wh=1,st()({target:"Object",stat:!0,sham:!z()},{create:kI()}));var g=Tg().Object;return Qh=function(A,t){return g.create(A,t)}}function $h(){return Hh?Kh:(Hh=1,Kh=qh())}var gl,Al,tl,Cl,Il,el,il,ol,nl,sl,rl,al,dl,hl=C(_h?Xh:(_h=1,Xh=$h())),ll={};function cl(){if(Al)return gl;Al=1;var g=at(),A=fI(),t=xg(),C=RangeError,I=Math.floor;return gl=function(e){var i=A(t(this)),o="",n=g(e);if(n<0||n===1/0)throw new C("Wrong number of repetitions");for(;n>0;(n=I(n/2))&&(i+=i))n%2&&(o+=i);return o}}function ul(){if(Cl)return tl;Cl=1;var g=E(),A=ht(),t=fI(),C=cl(),I=xg(),e=g(C),i=g("".slice),o=Math.ceil,n=function(g){return function(C,n,s){var r=t(I(C)),a=A(n),d=r.length;if(a<=d)return r;var h,l,c=void 0===s?" ":t(s);return""===c?r:((l=e(c,o((h=a-d)/c.length))).length>h&&(l=i(l,0,h)),g?r+l:l+r)}};return tl={start:n(!1),end:n(!0)}}function pl(){if(el)return Il;el=1;var g=E(),A=y(),t=ul().start,C=RangeError,I=isFinite,e=Math.abs,i=Date.prototype,o=i.toISOString,n=g(i.getTime),s=g(i.getUTCDate),r=g(i.getUTCFullYear),a=g(i.getUTCHours),d=g(i.getUTCMilliseconds),h=g(i.getUTCMinutes),l=g(i.getUTCMonth),c=g(i.getUTCSeconds);return Il=A(function(){return"0385-07-25T07:06:39.999Z"!==o.call(new Date(-50000000000001))})||!A(function(){o.call(new Date(NaN))})?function(){if(!I(n(this)))throw new C("Invalid time value");var g=this,A=r(g),i=d(g),o=A<0?"-":A>9999?"+":"";return o+t(e(A),o?6:4,0)+"-"+t(l(g)+1,2,0)+"-"+t(s(g),2,0)+"T"+t(a(g),2,0)+":"+t(h(g),2,0)+":"+t(c(g),2,0)+"."+t(i,3,0)+"Z"}:o}function fl(){if(nl)return ol;nl=1,function(){if(il)return ll;il=1;var g=st(),A=B(),t=fA(),C=yA(),I=pl(),e=O();g({target:"Date",proto:!0,forced:y()(function(){return null!==new Date(NaN).toJSON()||1!==A(Date.prototype.toJSON,{toISOString:function(){return 1}})})},{toJSON:function(g){var i=t(this),o=C(i,"number");return"number"!=typeof o||isFinite(o)?"toISOString"in i||"Date"!==e(i)?i.toISOString():A(I,i):null}})}(),Pe();var g=Tg(),A=x();return g.JSON||(g.JSON={stringify:JSON.stringify}),ol=function(t,C,I){return A(g.JSON.stringify,null,arguments)},ol}function vl(){return rl?sl:(rl=1,sl=fl())}var bl,ml,yl,wl,xl,El,Ol,Tl=C(dl?al:(dl=1,al=vl())),Dl={},Nl={};function kl(){if(ml)return bl;ml=1;var g=m(),A=kg(),t=O(),C=function(g){return A.slice(0,g.length)===g};return bl=C("Bun/")?"BUN":C("Cloudflare-Workers")?"CLOUDFLARE":C("Deno/")?"DENO":C("Node.js/")?"NODE":g.Bun&&"string"==typeof Bun.version?"BUN":g.Deno&&"object"==typeof Deno.version?"DENO":"process"===t(g.process)?"NODE":g.window&&g.document?"BROWSER":"REST"}function Rl(){if(wl)return yl;wl=1;var g=TypeError;return yl=function(A,t){if(AI,a=C(e)?e:n(e),d=r?i(arguments,I):[],h=r?function(){t(a,this,d)}:a;return A?g(h,s):g(h)}:g},xl}var Ml,zl,Bl,Zl,Sl,Fl,Gl={};function jl(){return zl||(zl=1,function(){if(Ol)return Nl;Ol=1;var g=st(),A=m(),t=Pl()(A.setInterval,!0);g({global:!0,bind:!0,forced:A.setInterval!==t},{setInterval:t})}(),function(){if(Ml)return Gl;Ml=1;var g=st(),A=m(),t=Pl()(A.setTimeout,!0);g({global:!0,bind:!0,forced:A.setTimeout!==t},{setTimeout:t})}()),Dl}function Ll(){return Zl?Bl:(Zl=1,jl(),Bl=Tg().setTimeout)}var Vl,Yl,Wl,Ql,Ul,Kl,Hl,Xl,_l,Jl,ql,$l=C(Fl?Sl:(Fl=1,Sl=Ll())),gc={};function Ac(){if(Yl)return Vl;Yl=1;var g=fA(),A=dt(),t=lt();return Vl=function(C){for(var I=g(this),e=t(I),i=arguments.length,o=A(i>1?arguments[1]:void 0,e),n=i>2?arguments[2]:void 0,s=void 0===n?e:A(n,e);s>o;)I[o++]=C;return I},Vl}function tc(){return Ul?Ql:(Ul=1,function(){if(Wl)return gc;Wl=1;var g=st(),A=Ac(),t=Ui();g({target:"Array",proto:!0},{fill:A}),t("fill")}(),Ql=gC()("Array","fill"))}function Cc(){if(Hl)return Kl;Hl=1;var g=Ng(),A=tc(),t=Array.prototype;return Kl=function(C){var I=C.fill;return C===t||g(t,C)&&I===t.fill?A:I},Kl}function Ic(){return _l?Xl:(_l=1,Xl=Cc())}var ec,ic=C(ql?Jl:(ql=1,Jl=Ic())); +/*! Hammer.JS - v2.0.17-rc - 2019-12-16 + * http://naver.github.io/egjs + * + * Forked By Naver egjs + * Copyright (c) hammerjs + * Licensed under the MIT license */ +function oc(){return oc=Object.assign||function(g){for(var A=1;A-1}var Gc=function(){function g(g,A){this.manager=g,this.set(A)}var A=g.prototype;return A.set=function(g){g===bc&&(g=this.compute()),vc&&this.manager.element.style&&Oc[g]&&(this.manager.element.style[fc]=g),this.actions=g.toLowerCase().trim()},A.update=function(){this.set(this.manager.options.touchAction)},A.compute=function(){var g=[];return Zc(this.manager.recognizers,function(A){Sc(A.options.enable,[A])&&(g=g.concat(A.getTouchAction()))}),function(g){if(Fc(g,wc))return wc;var A=Fc(g,xc),t=Fc(g,Ec);return A&&t?wc:A||t?A?xc:Ec:Fc(g,yc)?yc:mc}(g.join(" "))},A.preventDefaults=function(g){var A=g.srcEvent,t=g.offsetDirection;if(this.manager.session.prevented)A.preventDefault();else{var C=this.actions,I=Fc(C,wc)&&!Oc[wc],e=Fc(C,Ec)&&!Oc[Ec],i=Fc(C,xc)&&!Oc[xc];if(I){var o=1===g.pointers.length,n=g.distance<2,s=g.deltaTime<250;if(o&&n&&s)return}if(!i||!e)return I||e&&6&t||i&&t&Mc?this.preventSrc(A):void 0}},A.preventSrc=function(g){this.manager.session.prevented=!0,g.preventDefault()},g}();function jc(g,A){for(;g;){if(g===A)return!0;g=g.parentNode}return!1}function Lc(g){var A=g.length;if(1===A)return{x:lc(g[0].clientX),y:lc(g[0].clientY)};for(var t=0,C=0,I=0;I=cc(A)?g<0?2:4:A<0?8:Pc}function Uc(g,A,t){return{x:A/g||0,y:t/g||0}}function Kc(g,A){var t=g.session,C=A.pointers,I=C.length;t.firstInput||(t.firstInput=Vc(A)),I>1&&!t.firstMultiple?t.firstMultiple=Vc(A):1===I&&(t.firstMultiple=!1);var e=t.firstInput,i=t.firstMultiple,o=i?i.center:e.center,n=A.center=Lc(C);A.timeStamp=uc(),A.deltaTime=A.timeStamp-e.timeStamp,A.angle=Wc(o,n),A.distance=Yc(o,n),function(g,A){var t=A.center,C=g.offsetDelta||{},I=g.prevDelta||{},e=g.prevInput||{};1!==A.eventType&&4!==e.eventType||(I=g.prevDelta={x:e.deltaX||0,y:e.deltaY||0},C=g.offsetDelta={x:t.x,y:t.y}),A.deltaX=I.x+(t.x-C.x),A.deltaY=I.y+(t.y-C.y)}(t,A),A.offsetDirection=Qc(A.deltaX,A.deltaY);var s,r,a=Uc(A.deltaTime,A.deltaX,A.deltaY);A.overallVelocityX=a.x,A.overallVelocityY=a.y,A.overallVelocity=cc(a.x)>cc(a.y)?a.x:a.y,A.scale=i?(s=i.pointers,Yc((r=C)[0],r[1],Bc)/Yc(s[0],s[1],Bc)):1,A.rotation=i?function(g,A){return Wc(A[1],A[0],Bc)+Wc(g[1],g[0],Bc)}(i.pointers,C):0,A.maxPointers=t.prevInput?A.pointers.length>t.prevInput.maxPointers?A.pointers.length:t.prevInput.maxPointers:A.pointers.length,function(g,A){var t,C,I,e,i=g.lastInterval||A,o=A.timeStamp-i.timeStamp;if(8!==A.eventType&&(o>25||void 0===i.velocity)){var n=A.deltaX-i.deltaX,s=A.deltaY-i.deltaY,r=Uc(o,n,s);C=r.x,I=r.y,t=cc(r.x)>cc(r.y)?r.x:r.y,e=Qc(n,s),g.lastInterval=A}else t=i.velocity,C=i.velocityX,I=i.velocityY,e=i.direction;A.velocity=t,A.velocityX=C,A.velocityY=I,A.direction=e}(t,A);var d,h=g.element,l=A.srcEvent;jc(d=l.composedPath?l.composedPath()[0]:l.path?l.path[0]:l.target,h)&&(h=d),A.target=h}function Hc(g,A,t){var C=t.pointers.length,I=t.changedPointers.length,e=1&A&&C-I===0,i=12&A&&C-I===0;t.isFirst=!!e,t.isFinal=!!i,e&&(g.session={}),t.eventType=A,Kc(g,t),g.emit("hammer.input",t),g.recognize(t),g.session.prevInput=t}function Xc(g){return g.trim().split(/\s+/g)}function _c(g,A,t){Zc(Xc(A),function(A){g.addEventListener(A,t,!1)})}function Jc(g,A,t){Zc(Xc(A),function(A){g.removeEventListener(A,t,!1)})}function qc(g){var A=g.ownerDocument||g;return A.defaultView||A.parentWindow||window}var $c=function(){function g(g,A){var t=this;this.manager=g,this.callback=A,this.element=g.element,this.target=g.options.inputTarget,this.domHandler=function(A){Sc(g.options.enable,[g])&&t.handler(A)},this.init()}var A=g.prototype;return A.handler=function(){},A.init=function(){this.evEl&&_c(this.element,this.evEl,this.domHandler),this.evTarget&&_c(this.target,this.evTarget,this.domHandler),this.evWin&&_c(qc(this.element),this.evWin,this.domHandler)},A.destroy=function(){this.evEl&&Jc(this.element,this.evEl,this.domHandler),this.evTarget&&Jc(this.target,this.evTarget,this.domHandler),this.evWin&&Jc(qc(this.element),this.evWin,this.domHandler)},g}();function gu(g,A,t){if(g.indexOf&&!t)return g.indexOf(A);for(var C=0;Ct[A]}):C.sort()),C}var nu={touchstart:1,touchmove:2,touchend:4,touchcancel:8},su=function(g){function A(){var t;return A.prototype.evTarget="touchstart touchmove touchend touchcancel",(t=g.apply(this,arguments)||this).targetIds={},t}return nc(A,g),A.prototype.handler=function(g){var A=nu[g.type],t=ru.call(this,g,A);t&&this.callback(this.manager,A,{pointers:t[0],changedPointers:t[1],pointerType:kc,srcEvent:g})},A}($c);function ru(g,A){var t,C,I=iu(g.touches),e=this.targetIds;if(3&A&&1===I.length)return e[I[0].identifier]=!0,[I,I];var i=iu(g.changedTouches),o=[],n=this.target;if(C=I.filter(function(g){return jc(g.target,n)}),1===A)for(t=0;t-1&&C.splice(g,1)},2500)}}function lu(g,A){1&g?(this.primaryTouch=A.changedPointers[0].identifier,hu.call(this,A)):12&g&&hu.call(this,A)}function cu(g){for(var A=g.srcEvent.clientX,t=g.srcEvent.clientY,C=0;C-1&&this.requireFail.splice(A,1),this},A.hasRequireFailures=function(){return this.requireFail.length>0},A.canRecognizeWith=function(g){return!!this.simultaneous[g.id]},A.emit=function(g){var A=this,t=this.state;function C(t){A.manager.emit(t,g)}t<8&&C(A.options.event+mu(t)),C(A.options.event),g.additionalEvent&&C(g.additionalEvent),t>=8&&C(A.options.event+mu(t))},A.tryEmit=function(g){if(this.canEmit())return this.emit(g);this.state=fu},A.canEmit=function(){for(var g=0;gA.threshold&&I&A.direction},t.attrTest=function(g){return xu.prototype.attrTest.call(this,g)&&(2&this.state||!(2&this.state)&&this.directionTest(g))},t.emit=function(A){this.pX=A.deltaX,this.pY=A.deltaY;var t=Eu(A.direction);t&&(A.additionalEvent=this.options.event+t),g.prototype.emit.call(this,A)},A}(xu),Tu=function(g){function A(A){return void 0===A&&(A={}),g.call(this,oc({event:"swipe",threshold:10,velocity:.3,direction:30,pointers:1},A))||this}nc(A,g);var t=A.prototype;return t.getTouchAction=function(){return Ou.prototype.getTouchAction.call(this)},t.attrTest=function(A){var t,C=this.options.direction;return 30&C?t=A.overallVelocity:6&C?t=A.overallVelocityX:C&Mc&&(t=A.overallVelocityY),g.prototype.attrTest.call(this,A)&&C&A.offsetDirection&&A.distance>this.options.threshold&&A.maxPointers===this.options.pointers&&cc(t)>this.options.velocity&&4&A.eventType},t.emit=function(g){var A=Eu(g.offsetDirection);A&&this.manager.emit(this.options.event+A,g),this.manager.emit(this.options.event,g)},A}(xu),Du=function(g){function A(A){return void 0===A&&(A={}),g.call(this,oc({event:"pinch",threshold:0,pointers:2},A))||this}nc(A,g);var t=A.prototype;return t.getTouchAction=function(){return[wc]},t.attrTest=function(A){return g.prototype.attrTest.call(this,A)&&(Math.abs(A.scale-1)>this.options.threshold||2&this.state)},t.emit=function(A){if(1!==A.scale){var t=A.scale<1?"in":"out";A.additionalEvent=this.options.event+t}g.prototype.emit.call(this,A)},A}(xu),Nu=function(g){function A(A){return void 0===A&&(A={}),g.call(this,oc({event:"rotate",threshold:0,pointers:2},A))||this}nc(A,g);var t=A.prototype;return t.getTouchAction=function(){return[wc]},t.attrTest=function(A){return g.prototype.attrTest.call(this,A)&&(Math.abs(A.rotation)>this.options.threshold||2&this.state)},A}(xu),ku=function(g){function A(A){var t;return void 0===A&&(A={}),(t=g.call(this,oc({event:"press",pointers:1,time:251,threshold:9},A))||this)._timer=null,t._input=null,t}nc(A,g);var t=A.prototype;return t.getTouchAction=function(){return[mc]},t.process=function(g){var A=this,t=this.options,C=g.pointers.length===t.pointers,I=g.distancet.time;if(this._input=g,!I||!C||12&g.eventType&&!e)this.reset();else if(1&g.eventType)this.reset(),this._timer=setTimeout(function(){A.state=8,A.tryEmit()},t.time);else if(4&g.eventType)return 8;return fu},t.reset=function(){clearTimeout(this._timer)},t.emit=function(g){8===this.state&&(g&&4&g.eventType?this.manager.emit(this.options.event+"up",g):(this._input.timeStamp=uc(),this.manager.emit(this.options.event,this._input)))},A}(yu),Ru={domEvents:!1,touchAction:bc,enable:!0,inputTarget:null,inputClass:null,cssProps:{userSelect:"none",touchSelect:"none",touchCallout:"none",contentZooming:"none",userDrag:"none",tapHighlightColor:"rgba(0,0,0,0)"}},Pu=[[Nu,{enable:!1}],[Du,{enable:!1},["rotate"]],[Tu,{direction:6}],[Ou,{direction:6},["swipe"]],[wu],[wu,{event:"doubletap",taps:2},["tap"]],[ku]];function Mu(g,A){var t,C=g.element;C.style&&(Zc(g.options.cssProps,function(I,e){t=pc(C.style,e),A?(g.oldCssProps[t]=C.style[t],C.style[t]=I):C.style[t]=g.oldCssProps[t]||""}),A||(g.oldCssProps={}))}var zu=function(){function g(g,A){var t,C=this;this.options=ac({},Ru,A||{}),this.options.inputTarget=this.options.inputTarget||g,this.handlers={},this.session={},this.recognizers=[],this.oldCssProps={},this.element=g,this.input=new((t=this).options.inputClass||(Dc?eu:Nc?su:Tc?uu:du))(t,Hc),this.touchAction=new Gc(this,this.options.touchAction),Mu(this,!0),Zc(this.options.recognizers,function(g){var A=C.add(new g[0](g[1]));g[2]&&A.recognizeWith(g[2]),g[3]&&A.requireFailure(g[3])},this)}var A=g.prototype;return A.set=function(g){return ac(this.options,g),g.touchAction&&this.touchAction.update(),g.inputTarget&&(this.input.destroy(),this.input.target=g.inputTarget,this.input.init()),this},A.stop=function(g){this.session.stopped=g?2:1},A.recognize=function(g){var A=this.session;if(!A.stopped){var t;this.touchAction.preventDefaults(g);var C=this.recognizers,I=A.curRecognizer;(!I||I&&8&I.state)&&(A.curRecognizer=null,I=null);for(var e=0;e\s*\(/gm,"{anonymous}()@"):"Unknown Stack Trace",I=window.console&&(window.console.warn||window.console.log);return I&&I.call(window.console,C,t),g.apply(this,arguments)}}var Gu=Fu(function(g,A,t){for(var C=Object.keys(A),I=0;I2)return Uu(Qu(A[0],A[1]),...$s(A).call(A,2));const C=A[0],I=A[1];if(C instanceof Date&&I instanceof Date)return C.setTime(I.getTime()),C;for(const g of er(I))Object.prototype.propertyIsEnumerable.call(I,g)&&(I[g]===Wu?delete C[g]:null===C[g]||null===I[g]||"object"!=typeof C[g]||"object"!=typeof I[g]||cr(C[g])||cr(I[g])?C[g]=Ku(I[g]):C[g]=Uu(C[g],I[g]));return C}function Ku(g){return cr(g)?Tr(g).call(g,g=>Ku(g)):"object"==typeof g&&null!==g?g instanceof Date?new Date(g.getTime()):Uu({},g):g}function Hu(g){for(const A of Fr(g))g[A]===Wu?delete g[A]:"object"==typeof g[A]&&null!==g[A]&&Hu(g[A])}function Xu(){for(var g=arguments.length,A=new Array(g),t=0;t>>0,C-=g,C*=g,g=C>>>0,C-=g,g+=4294967296*C}return 2.3283064365386963e-10*(g>>>0)}}();let A=g(" "),t=g(" "),C=g(" ");for(let I=0;I{const g=2091639*C+2.3283064365386963e-10*i;return C=I,I=e,e=g-(i=0|g)};return o.uint32=()=>4294967296*o(),o.fract53=()=>o()+11102230246251565e-32*(2097152*o()|0),o.algorithm="Alea",o.seed=g,o.version="0.9",o}(A.length?A:[Aa()])}const _u="undefined"!=typeof window?window.Hammer||Yu:function(){return function(){const g=()=>{};return{on:g,off:g,destroy:g,emit:g,get:()=>({set:g})}}()};function Ju(g){var A;this._cleanupQueue=[],this.active=!1,this._dom={container:g,overlay:document.createElement("div")},this._dom.overlay.classList.add("vis-overlay"),this._dom.container.appendChild(this._dom.overlay),this._cleanupQueue.push(()=>{this._dom.overlay.parentNode.removeChild(this._dom.overlay)});const t=_u(this._dom.overlay);t.on("tap",IC(A=this._onTapOverlay).call(A,this)),this._cleanupQueue.push(()=>{t.destroy()});const C=["tap","doubletap","press","pinch","pan","panstart","panmove","panend"];pa(C).call(C,g=>{t.on(g,g=>{g.srcEvent.stopPropagation()})}),document&&document.body&&(this._onClick=A=>{(function(g,A){for(;g;){if(g===A)return!0;g=g.parentNode}return!1})(A.target,g)||this.deactivate()},document.body.addEventListener("click",this._onClick),this._cleanupQueue.push(()=>{document.body.removeEventListener("click",this._onClick)})),this._escListener=g=>{("key"in g?"Escape"===g.key:27===g.keyCode)&&this.deactivate()}}TC(Ju.prototype),Ju.current=null,Ju.prototype.destroy=function(){this.deactivate();for(const t of Ma(g=Va(A=this._cleanupQueue).call(A,0)).call(g)){var g,A;t()}},Ju.prototype.activate=function(){Ju.current&&Ju.current.deactivate(),Ju.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)},Ju.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")},Ju.prototype._onTapOverlay=function(g){this.activate(),g.srcEvent.stopPropagation()};const qu=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i,$u=/^#?([a-f\d])([a-f\d])([a-f\d])$/i,gp=/^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,Ap=/^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 tp(g){if(g)for(;!0===g.hasChildNodes();){const A=g.firstChild;A&&(tp(A),g.removeChild(A))}}function Cp(g){return g instanceof String||"string"==typeof g}function Ip(g){return"object"==typeof g&&null!==g}function ep(g,A,t,C){let I=!1;!0===C&&(I=null===A[t]&&void 0!==g[t]),I?delete g[t]:g[t]=A[t]}function ip(g,A){let t=arguments.length>2&&void 0!==arguments[2]&&arguments[2];for(const C in g)if(void 0!==A[C])if(null===A[C]||"object"!=typeof A[C])ep(g,A,C,t);else{const I=g[C],e=A[C];Ip(I)&&Ip(e)&&ip(I,e,t)}}function op(g,A,t){let C=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(cr(t))throw new TypeError("Arrays are not supported by deepExtend");for(let I=0;I3&&void 0!==arguments[3]&&arguments[3];if(cr(t))throw new TypeError("Arrays are not supported by deepExtend");for(const I in t)if(Object.prototype.hasOwnProperty.call(t,I)&&!bd(g).call(g,I))if(t[I]&&t[I].constructor===Object)void 0===A[I]&&(A[I]={}),A[I].constructor===Object?sp(A[I],t[I]):ep(A,t,I,C);else if(cr(t[I])){A[I]=[];for(let g=0;g2&&void 0!==arguments[2]&&arguments[2],C=arguments.length>3&&void 0!==arguments[3]&&arguments[3];for(const e in A)if(Object.prototype.hasOwnProperty.call(A,e)||!0===t)if("object"==typeof A[e]&&null!==A[e]&&Pd(A[e])===Object.prototype)void 0===g[e]?g[e]=sp({},A[e],t):"object"==typeof g[e]&&null!==g[e]&&Pd(g[e])===Object.prototype?sp(g[e],A[e],t):ep(g,A,e,C);else if(cr(A[e])){var I;g[e]=$s(I=A[e]).call(I)}else ep(g,A,e,C);return g}function rp(g,A){return[...g,A]}function ap(g){return $s(g).call(g)}function dp(g){return g.getBoundingClientRect().top}function hp(g,A){if(cr(g)){const t=g.length;for(let C=0;C3&&void 0!==arguments[3]?arguments[3]:{};const I=function(g){return null!=g},e=function(g){return null!==g&&"object"==typeof g};if(!e(g))throw new Error("Parameter mergeTarget must be an object");if(!e(A))throw new Error("Parameter options must be an object");if(!I(t))throw new Error("Parameter option must have a value");if(!e(C))throw new Error("Parameter globalOptions must be an object");const i=A[t],o=e(C)&&!function(g){for(const A in g)if(Object.prototype.hasOwnProperty.call(g,A))return!1;return!0}(C)?C[t]:void 0,n=o?o.enabled:void 0;if(void 0===i)return;if("boolean"==typeof i)return e(g[t])||(g[t]={}),void(g[t].enabled=i);if(null===i&&!e(g[t])){if(!I(o))return;g[t]=hl(o)}if(!e(i))return;let s=!0;void 0!==i.enabled?s=i.enabled:void 0!==n&&(s=o.enabled),function(g,A,t){e(g[t])||(g[t]={});const C=A[t],I=g[t];for(const g in C)Object.prototype.hasOwnProperty.call(C,g)&&(I[g]=C[g])}(g,A,t),g[t].enabled=s}const Ep={linear:g=>g,easeInQuad:g=>g*g,easeOutQuad:g=>g*(2-g),easeInOutQuad:g=>g<.5?2*g*g:(4-2*g)*g-1,easeInCubic:g=>g*g*g,easeOutCubic:g=>--g*g*g+1,easeInOutCubic:g=>g<.5?4*g*g*g:(g-1)*(2*g-2)*(2*g-2)+1,easeInQuart:g=>g*g*g*g,easeOutQuart:g=>1- --g*g*g*g,easeInOutQuart:g=>g<.5?8*g*g*g*g:1-8*--g*g*g*g,easeInQuint:g=>g*g*g*g*g,easeOutQuint:g=>1+--g*g*g*g*g,easeInOutQuint:g=>g<.5?16*g*g*g*g*g:1+16*--g*g*g*g*g};function Op(g,A){let t;cr(A)||(A=[A]);for(const C of g)if(C){t=C[A[0]];for(let g=1;g0&&void 0!==arguments[0]?arguments[0]:1;this.pixelRatio=g,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=()=>{},this.closeCallback=()=>{},this._create()}insertTo(g){void 0!==this.hammer&&(this.hammer.destroy(),this.hammer=void 0),this.container=g,this.container.appendChild(this.frame),this._bindHammer(),this._setSize()}setUpdateCallback(g){if("function"!=typeof g)throw new Error("Function attempted to set as colorPicker update callback is not a function.");this.updateCallback=g}setCloseCallback(g){if("function"!=typeof g)throw new Error("Function attempted to set as colorPicker closing callback is not a function.");this.closeCallback=g}_isColorString(g){if("string"==typeof g)return Tp[g]}setColor(g){let A,t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if("none"===g)return;const C=this._isColorString(g);if(void 0!==C&&(g=C),!0===Cp(g)){if(!0===yp(g)){const t=g.substr(4).substr(0,g.length-5).split(",");A={r:t[0],g:t[1],b:t[2],a:1}}else if(!0===function(g){return Ap.test(g)}(g)){const t=g.substr(5).substr(0,g.length-6).split(",");A={r:t[0],g:t[1],b:t[2],a:t[3]}}else if(!0===mp(g)){const t=lp(g);A={r:t.r,g:t.g,b:t.b,a:1}}}else if(g instanceof Object&&void 0!==g.r&&void 0!==g.g&&void 0!==g.b){const t=void 0!==g.a?g.a:"1.0";A={r:g.r,g:g.g,b:g.b,a:t}}if(void 0===A)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: "+Tl(g));this._setColor(A,t)}show(){void 0!==this.closeCallback&&(this.closeCallback(),this.closeCallback=void 0),this.applied=!1,this.frame.style.display="block",this._generateHueCircle()}_hide(){!0===(!(arguments.length>0&&void 0!==arguments[0])||arguments[0])&&(this.previousColor=_t({},this.color)),!0===this.applied&&this.updateCallback(this.initialColor),this.frame.style.display="none",$l(()=>{void 0!==this.closeCallback&&(this.closeCallback(),this.closeCallback=void 0)},0)}_save(){this.updateCallback(this.color),this.applied=!1,this._hide()}_apply(){this.applied=!0,this.updateCallback(this.color),this._updatePicker(this.color)}_loadLast(){void 0!==this.previousColor?this.setColor(this.previousColor,!1):alert("There is no last color to load...")}_setColor(g){!0===(!(arguments.length>1&&void 0!==arguments[1])||arguments[1])&&(this.initialColor=_t({},g)),this.color=g;const A=fp(g.r,g.g,g.b),t=2*Math.PI,C=this.r*A.s,I=this.centerCoordinates.x+C*Math.sin(t*A.h),e=this.centerCoordinates.y+C*Math.cos(t*A.h);this.colorPickerSelector.style.left=I-.5*this.colorPickerSelector.clientWidth+"px",this.colorPickerSelector.style.top=e-.5*this.colorPickerSelector.clientHeight+"px",this._updatePicker(g)}_setOpacity(g){this.color.a=g/100,this._updatePicker(this.color)}_setBrightness(g){const A=fp(this.color.r,this.color.g,this.color.b);A.v=g/100;const t=vp(A.h,A.s,A.v);t.a=this.color.a,this.color=t,this._updatePicker()}_updatePicker(){let g=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.color;const A=fp(g.r,g.g,g.b),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);const C=this.colorPickerCanvas.clientWidth,I=this.colorPickerCanvas.clientHeight;t.clearRect(0,0,C,I),t.putImageData(this.hueCircle,0,0),t.fillStyle="rgba(0,0,0,"+(1-A.v)+")",t.circle(this.centerCoordinates.x,this.centerCoordinates.y,this.r),ic(t).call(t),this.brightnessRange.value=100*A.v,this.opacityRange.value=100*g.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+")"}_setSize(){this.colorPickerCanvas.style.width="100%",this.colorPickerCanvas.style.height="100%",this.colorPickerCanvas.width=289*this.pixelRatio,this.colorPickerCanvas.height=289*this.pixelRatio}_create(){var g,A,t,C;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){const g=this.colorPickerCanvas.getContext("2d");this.pixelRatio=(window.devicePixelRatio||1)/(g.webkitBackingStorePixelRatio||g.mozBackingStorePixelRatio||g.msBackingStorePixelRatio||g.oBackingStorePixelRatio||g.backingStorePixelRatio||1),this.colorPickerCanvas.getContext("2d").setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0)}else{const g=document.createElement("DIV");g.style.color="red",g.style.fontWeight="bold",g.style.padding="10px",g.innerText="Error: your browser does not support HTML canvas",this.colorPickerCanvas.appendChild(g)}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(g){}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(g){}this.brightnessRange.value="100",this.brightnessRange.className="vis-range",this.opacityDiv.appendChild(this.opacityRange),this.brightnessDiv.appendChild(this.brightnessRange);const I=this;this.opacityRange.onchange=function(){I._setOpacity(this.value)},this.opacityRange.oninput=function(){I._setOpacity(this.value)},this.brightnessRange.onchange=function(){I._setBrightness(this.value)},this.brightnessRange.oninput=function(){I._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=IC(g=this._hide).call(g,this,!1),this.applyButton=document.createElement("div"),this.applyButton.className="vis-button vis-apply",this.applyButton.innerText="apply",this.applyButton.onclick=IC(A=this._apply).call(A,this),this.saveButton=document.createElement("div"),this.saveButton.className="vis-button vis-save",this.saveButton.innerText="save",this.saveButton.onclick=IC(t=this._save).call(t,this),this.loadButton=document.createElement("div"),this.loadButton.className="vis-button vis-load",this.loadButton.innerText="load last",this.loadButton.onclick=IC(C=this._loadLast).call(C,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)}_bindHammer(){this.drag={},this.pinch={},this.hammer=new _u(this.colorPickerCanvas),this.hammer.get("pinch").set({enable:!0}),this.hammer.on("hammer.input",g=>{g.isFirst&&this._moveSelector(g)}),this.hammer.on("tap",g=>{this._moveSelector(g)}),this.hammer.on("panstart",g=>{this._moveSelector(g)}),this.hammer.on("panmove",g=>{this._moveSelector(g)}),this.hammer.on("panend",g=>{this._moveSelector(g)})}_generateHueCircle(){if(!1===this.generated){const g=this.colorPickerCanvas.getContext("2d");void 0===this.pixelRation&&(this.pixelRatio=(window.devicePixelRatio||1)/(g.webkitBackingStorePixelRatio||g.mozBackingStorePixelRatio||g.msBackingStorePixelRatio||g.oBackingStorePixelRatio||g.backingStorePixelRatio||1)),g.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0);const A=this.colorPickerCanvas.clientWidth,t=this.colorPickerCanvas.clientHeight;let C,I,e,i;g.clearRect(0,0,A,t),this.centerCoordinates={x:.5*A,y:.5*t},this.r=.49*A;const o=2*Math.PI/360,n=1/360,s=1/this.r;let r;for(e=0;e<360;e++)for(i=0;i3&&void 0!==arguments[3]?arguments[3]:1,I=arguments.length>4&&void 0!==arguments[4]?arguments[4]:()=>!1;this.parent=g,this.changedOptions=[],this.container=A,this.allowCreation=!1,this.hideOption=I,this.options={},this.initialized=!1,this.popupCounter=0,this.defaultOptions={enabled:!1,filter:!0,container:void 0,showButton:!0},_t(this.options,this.defaultOptions),this.configureOptions=t,this.moduleOptions={},this.domElements=[],this.popupDiv={},this.popupLimit=5,this.popupHistory={},this.colorPicker=new Dp(C),this.wrapper=void 0}setOptions(g){if(void 0!==g){this.popupHistory={},this._removePopup();let A=!0;if("string"==typeof g)this.options.filter=g;else if(cr(g))this.options.filter=g.join();else if("object"==typeof g){if(null==g)throw new TypeError("options cannot be null");void 0!==g.container&&(this.options.container=g.container),void 0!==eh(g)&&(this.options.filter=eh(g)),void 0!==g.showButton&&(this.options.showButton=g.showButton),void 0!==g.enabled&&(A=g.enabled)}else"boolean"==typeof g?(this.options.filter=!0,A=g):"function"==typeof g&&(this.options.filter=g,A=!0);!1===eh(this.options)&&(A=!1),this.options.enabled=A}this._clean()}setModuleOptions(g){this.moduleOptions=g,!0===this.options.enabled&&(this._clean(),void 0!==this.options.container&&(this.container=this.options.container),this._create())}_create(){this._clean(),this.changedOptions=[];const g=eh(this.options);let A=0,t=!1;for(const C in this.configureOptions)Object.prototype.hasOwnProperty.call(this.configureOptions,C)&&(this.allowCreation=!1,t=!1,"function"==typeof g?(t=g(C,[]),t=t||this._handleObject(this.configureOptions[C],[C],!0)):!0!==g&&-1===Jh(g).call(g,C)||(t=!0),!1!==t&&(this.allowCreation=!0,A>0&&this._makeItem([]),this._makeHeader(C),this._handleObject(this.configureOptions[C],[C])),A++);this._makeButton(),this._push()}_push(){this.wrapper=document.createElement("div"),this.wrapper.className="vis-configuration-wrapper",this.container.appendChild(this.wrapper);for(let g=0;g1?A-1:0),C=1;C{I.appendChild(g)}),this.domElements.push(I),this.domElements.length}return 0}_makeHeader(g){const A=document.createElement("div");A.className="vis-configuration vis-config-header",A.innerText=g,this._makeItem([],A)}_makeLabel(g,A){let t=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const C=document.createElement("div");if(C.className="vis-configuration vis-config-label vis-config-s"+A.length,!0===t){for(;C.firstChild;)C.removeChild(C.firstChild);C.appendChild(Np("i","b",g))}else C.innerText=g+":";return C}_makeDropdown(g,A,t){const C=document.createElement("select");C.className="vis-configuration vis-config-select";let I=0;void 0!==A&&-1!==Jh(g).call(g,A)&&(I=Jh(g).call(g,A));for(let A=0;Ae&&1!==e&&(o.max=Math.ceil(A*g),s=o.max,n="range increased"),o.value=A}else o.value=C;const r=document.createElement("input");r.className="vis-configuration vis-config-rangeinput",r.value=o.value;const a=this;o.onchange=function(){r.value=this.value,a._update(Number(this.value),t)},o.oninput=function(){r.value=this.value};const d=this._makeLabel(t[t.length-1],t),h=this._makeItem(t,d,o,r);""!==n&&this.popupHistory[h]!==s&&(this.popupHistory[h]=s,this._setupPopup(n,h))}_makeButton(){if(!0===this.options.showButton){const g=document.createElement("div");g.className="vis-configuration vis-config-button",g.innerText="generate options",g.onclick=()=>{this._printOptions()},g.onmouseover=()=>{g.className="vis-configuration vis-config-button hover"},g.onmouseout=()=>{g.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(g)}}_setupPopup(g,A){if(!0===this.initialized&&!0===this.allowCreation&&this.popupCounter{this._removePopup()},this.popupCounter+=1,this.popupDiv={html:t,index:A}}}_removePopup(){void 0!==this.popupDiv.html&&(this.popupDiv.html.parentNode.removeChild(this.popupDiv.html),clearTimeout(this.popupDiv.hideTimeout),clearTimeout(this.popupDiv.deleteTimeout),this.popupDiv={})}_showPopupIfNeeded(){if(void 0!==this.popupDiv.html){const g=this.domElements[this.popupDiv.index].getBoundingClientRect();this.popupDiv.html.style.left=g.left+"px",this.popupDiv.html.style.top=g.top-30+"px",document.body.appendChild(this.popupDiv.html),this.popupDiv.hideTimeout=$l(()=>{this.popupDiv.html.style.opacity=0},1500),this.popupDiv.deleteTimeout=$l(()=>{this._removePopup()},1800)}}_makeCheckbox(g,A,t){const C=document.createElement("input");C.type="checkbox",C.className="vis-configuration vis-config-checkbox",C.checked=g,void 0!==A&&(C.checked=A,A!==g&&("object"==typeof g?A!==g.enabled&&this.changedOptions.push({path:t,value:A}):this.changedOptions.push({path:t,value:A})));const I=this;C.onchange=function(){I._update(this.checked,t)};const e=this._makeLabel(t[t.length-1],t);this._makeItem(t,e,C)}_makeTextInput(g,A,t){const C=document.createElement("input");C.type="text",C.className="vis-configuration vis-config-text",C.value=A,A!==g&&this.changedOptions.push({path:t,value:A});const I=this;C.onchange=function(){I._update(this.value,t)};const e=this._makeLabel(t[t.length-1],t);this._makeItem(t,e,C)}_makeColorField(g,A,t){const C=g[1],I=document.createElement("div");"none"!==(A=void 0===A?C:A)?(I.className="vis-configuration vis-config-colorBlock",I.style.backgroundColor=A):I.className="vis-configuration vis-config-colorBlock none",A=void 0===A?C:A,I.onclick=()=>{this._showColorPicker(A,I,t)};const e=this._makeLabel(t[t.length-1],t);this._makeItem(t,e,I)}_showColorPicker(g,A,t){A.onclick=function(){},this.colorPicker.insertTo(A),this.colorPicker.show(),this.colorPicker.setColor(g),this.colorPicker.setUpdateCallback(g=>{const C="rgba("+g.r+","+g.g+","+g.b+","+g.a+")";A.style.backgroundColor=C,this._update(C,t)}),this.colorPicker.setCloseCallback(()=>{A.onclick=()=>{this._showColorPicker(g,A,t)}})}_handleObject(g){let A=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],t=arguments.length>2&&void 0!==arguments[2]&&arguments[2],C=!1;const I=eh(this.options);let e=!1;for(const i in g)if(Object.prototype.hasOwnProperty.call(g,i)){C=!0;const o=g[i],n=rp(A,i);if("function"==typeof I&&(C=I(i,A),!1===C&&!cr(o)&&"string"!=typeof o&&"boolean"!=typeof o&&o instanceof Object&&(this.allowCreation=!1,C=this._handleObject(o,n,!0),this.allowCreation=!1===t)),!1!==C){e=!0;const g=this._getValue(n);if(cr(o))this._handleArray(o,g,n);else if("string"==typeof o)this._makeTextInput(o,g,n);else if("boolean"==typeof o)this._makeCheckbox(o,g,n);else if(o instanceof Object){if(!this.hideOption(A,i,this.moduleOptions))if(void 0!==o.enabled){const g=rp(n,"enabled"),A=this._getValue(g);if(!0===A){const g=this._makeLabel(i,n,!0);this._makeItem(n,g),e=this._handleObject(o,n)||e}else this._makeCheckbox(o,A,n)}else{const g=this._makeLabel(i,n,!0);this._makeItem(n,g),e=this._handleObject(o,n)||e}}else console.error("dont know how to handle",o,i,n)}}return e}_handleArray(g,A,t){"string"==typeof g[0]&&"color"===g[0]?(this._makeColorField(g,A,t),g[1]!==A&&this.changedOptions.push({path:t,value:A})):"string"==typeof g[0]?(this._makeDropdown(g,A,t),g[0]!==A&&this.changedOptions.push({path:t,value:A})):"number"==typeof g[0]&&(this._makeRange(g,A,t),g[0]!==A&&this.changedOptions.push({path:t,value:Number(A)}))}_update(g,A){const t=this._constructOptions(g,A);this.parent.body&&this.parent.body.emitter&&this.parent.body.emitter.emit&&this.parent.body.emitter.emit("configChange",t),this.initialized=!0,this.parent.setOptions(t)}_constructOptions(g,A){let t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},C=t;g="false"!==(g="true"===g||g)&&g;for(let t=0;tC-this.padding&&(t=!0),I=t?this.x-A:this.x,e=i?this.y-g:this.y}else e=this.y-g,e+g+this.padding>t&&(e=t-g-this.padding),eC&&(I=C-A-this.padding),Ie.distance?" in "+g.printLocation(I.path,A,"")+"Perhaps it was misplaced? Matching option found at: "+g.printLocation(e.path,e.closestMatch,""):I.distance<=8?'. Did you mean "'+I.closestMatch+'"?'+g.printLocation(I.path,A):". Did you mean one of these: "+g.print(Fr(t))+g.printLocation(C,A),console.error('%cUnknown option detected: "'+A+'"'+i,Pp),Rp=!0}static findInOptions(A,t,C){let I=arguments.length>3&&void 0!==arguments[3]&&arguments[3],e=1e9,i="",o=[];const n=A.toLowerCase();let s;for(const a in t){let d;if(void 0!==t[a].__type__&&!0===I){const I=g.findInOptions(A,t[a],rp(C,a));e>I.distance&&(i=I.closestMatch,o=I.path,e=I.distance,s=I.indexMatch)}else{var r;-1!==Jh(r=a.toLowerCase()).call(r,n)&&(s=a),d=g.levenshteinDistance(A,a),e>d&&(i=a,o=ap(C),e=d)}}return{closestMatch:i,path:o,distance:e,indexMatch:s}}static printLocation(g,A){let t="\n\n"+(arguments.length>2&&void 0!==arguments[2]?arguments[2]:"Problem value found at: \n")+"options = {\n";for(let A=0;A":!0,"--":!0};let Up="",Kp=0,Hp="",Xp="",_p=Lp;function Jp(){Kp++,Hp=Up.charAt(Kp)}function qp(){return Up.charAt(Kp+1)}function $p(g){const A=g.charCodeAt(0);return A<47?35===A||46===A:A<59?A>47:A<91?A>64:A<96?95===A:A<123&&A>96}function gf(g,A){if(g||(g={}),A)for(const t in A)A.hasOwnProperty(t)&&(g[t]=A[t]);return g}function Af(g,A,t){const C=A.split(".");let I=g;for(;C.length;){const g=C.shift();C.length?(I[g]||(I[g]={}),I=I[g]):I[g]=t}}function tf(g,A){let t,C,I=null;const e=[g];let i=g;for(;i.parent;)e.push(i.parent),i=i.parent;if(i.nodes)for(t=0,C=i.nodes.length;t=0;t--){var o;const g=e[t];g.nodes||(g.nodes=[]),-1===Jh(o=g.nodes).call(o,I)&&g.nodes.push(I)}A.attr&&(I.attr=gf(I.attr,A.attr))}function Cf(g,A){if(g.edges||(g.edges=[]),g.edges.push(A),g.edge){const t=gf({},g.edge);A.attr=gf(t,A.attr)}}function If(g,A,t,C,I){const e={from:A,to:t,type:C};return g.edge&&(e.attr=gf({},g.edge)),e.attr=gf(e.attr||{},I),null!=I&&I.hasOwnProperty("arrows")&&null!=I.arrows&&(e.arrows={to:{enabled:!0,type:I.arrows.type}},I.arrows=null),e}function ef(){for(_p=Lp,Xp="";" "===Hp||"\t"===Hp||"\n"===Hp||"\r"===Hp;)Jp();let g;do{if(g=!1,"#"===Hp){let A=Kp-1;for(;" "===Up.charAt(A)||"\t"===Up.charAt(A);)A--;if("\n"===Up.charAt(A)||""===Up.charAt(A)){for(;""!=Hp&&"\n"!=Hp;)Jp();g=!0}}if("/"===Hp&&"/"===qp()){for(;""!=Hp&&"\n"!=Hp;)Jp();g=!0}if("/"===Hp&&"*"===qp()){for(;""!=Hp;){if("*"===Hp&&"/"===qp()){Jp(),Jp();break}Jp()}g=!0}for(;" "===Hp||"\t"===Hp||"\n"===Hp||"\r"===Hp;)Jp()}while(g);if(""===Hp)return void(_p=Vp);const A=Hp+qp();if(Qp[A])return _p=Vp,Xp=A,Jp(),void Jp();if(Qp[Hp])return _p=Vp,Xp=Hp,void Jp();if($p(Hp)||"-"===Hp){for(Xp+=Hp,Jp();$p(Hp);)Xp+=Hp,Jp();return"false"===Xp?Xp=!1:"true"===Xp?Xp=!0:isNaN(Number(Xp))||(Xp=Number(Xp)),void(_p=Yp)}if('"'===Hp){for(Jp();""!=Hp&&('"'!=Hp||'"'===Hp&&'"'===qp());)'"'===Hp?(Xp+=Hp,Jp()):"\\"===Hp&&"n"===qp()?(Xp+="\n",Jp()):Xp+=Hp,Jp();if('"'!=Hp)throw hf('End of string " expected');return Jp(),void(_p=Yp)}for(_p=Wp;""!=Hp;)Xp+=Hp,Jp();throw new SyntaxError('Syntax error in part "'+lf(Xp,30)+'"')}function of(){const g={};if(Kp=0,Hp=Up.charAt(0),ef(),"strict"===Xp&&(g.strict=!0,ef()),"graph"!==Xp&&"digraph"!==Xp||(g.type=Xp,ef()),_p===Yp&&(g.id=Xp,ef()),"{"!=Xp)throw hf("Angle bracket { expected");if(ef(),nf(g),"}"!=Xp)throw hf("Angle bracket } expected");if(ef(),""!==Xp)throw hf("End of file expected");return ef(),delete g.node,delete g.edge,delete g.graph,g}function nf(g){for(;""!==Xp&&"}"!=Xp;)sf(g),";"===Xp&&ef()}function sf(g){const A=rf(g);if(A)return void af(g,A);const t=function(g){if("node"===Xp)return ef(),g.node=df(),"node";if("edge"===Xp)return ef(),g.edge=df(),"edge";if("graph"===Xp)return ef(),g.graph=df(),"graph";return null}(g);if(t)return;if(_p!=Yp)throw hf("Identifier expected");const C=Xp;if(ef(),"="===Xp){if(ef(),_p!=Yp)throw hf("Identifier expected");g[C]=Xp,ef()}else!function(g,A){const t={id:A},C=df();C&&(t.attr=C);tf(g,t),af(g,A)}(g,C)}function rf(g){let A=null;if("subgraph"===Xp&&(A={},A.type="subgraph",ef(),_p===Yp&&(A.id=Xp,ef())),"{"===Xp){if(ef(),A||(A={}),A.parent=g,A.node=g.node,A.edge=g.edge,A.graph=g.graph,nf(A),"}"!=Xp)throw hf("Angle bracket } expected");ef(),delete A.node,delete A.edge,delete A.graph,delete A.parent,g.subgraphs||(g.subgraphs=[]),g.subgraphs.push(A)}return A}function af(g,A){for(;"->"===Xp||"--"===Xp;){let t;const C=Xp;ef();const I=rf(g);if(I)t=I;else{if(_p!=Yp)throw hf("Identifier or subgraph expected");t=Xp,tf(g,{id:t}),ef()}Cf(g,If(g,A,t,C,df())),A=t}}function df(){let g,A=null;const t={dashed:!0,solid:!1,dotted:[1,5]},C={dot:"circle",box:"box",crow:"crow",curve:"curve",icurve:"inv_curve",normal:"triangle",inv:"inv_triangle",diamond:"diamond",tee:"bar",vee:"vee"};let I=[];const e=[];for(;"["===Xp;){for(ef(),A={};""!==Xp&&"]"!=Xp;){if(_p!=Yp)throw hf("Attribute name expected");let g=Xp;if(ef(),"="!=Xp)throw hf("Equal sign = expected");if(ef(),_p!=Yp)throw hf("Attribute value expected");let i,o=Xp;"style"===g&&(o=t[o]),"arrowhead"===g&&(i=C[o],g="arrows",o={to:{enabled:!0,type:i}}),"arrowtail"===g&&(i=C[o],g="arrows",o={from:{enabled:!0,type:i}}),I.push({attr:A,name:g,value:o}),e.push(g),ef(),","==Xp&&ef()}if("]"!=Xp)throw hf("Bracket ] expected");ef()}if(bd(e).call(e,"dir")){const g={arrows:{}};for(let A=0;A"===g.type&&(A.arrows="to"),A};pa(I=A.edges).call(I,function(A){let C,I;var e,i,o,n,s;(C=A.from instanceof Object?A.from.nodes:{id:A.from},I=A.to instanceof Object?A.to.nodes:{id:A.to},A.from instanceof Object&&A.from.edges)&&pa(e=A.from.edges).call(e,function(A){const C=g(A);t.edges.push(C)});(o=I,n=function(C,I){const e=If(t,C.id,I.id,A.type,A.attr),i=g(e);t.edges.push(i)},cr(i=C)?pa(i).call(i,function(g){cr(o)?pa(o).call(o,function(A){n(g,A)}):n(g,o)}):cr(o)?pa(o).call(o,function(g){n(i,g)}):n(i,o),A.to instanceof Object&&A.to.edges)&&pa(s=A.to.edges).call(s,function(A){const C=g(A);t.edges.push(C)})})}return A.attr&&(t.options=A.attr),t}function ff(g){return Up=g,of()}var vf=Object.freeze({__proto__:null,DOTToGraph:pf,parseDOT:ff});function bf(g){var A;let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},C=t.fixed,I=void 0!==C&&C,e=t.inheritColor,i=void 0!==e&&e,o=t.parseColor,n=void 0!==o&&o;const s=g.edges,r=Tr(s).call(s,g=>{const A={from:g.source,id:g.id,to:g.target};return null!=g.attributes&&(A.attributes=g.attributes),null!=g.label&&(A.label=g.label),null!=g.attributes&&null!=g.attributes.title&&(A.title=g.attributes.title),"Directed"===g.type&&(A.arrows="to"),g.color&&!1===i&&(A.color=g.color),A});return{nodes:Tr(A=g.nodes).call(A,g=>{const A={id:g.id,fixed:I&&null!=g.x&&null!=g.y};return null!=g.attributes&&(A.attributes=g.attributes),null!=g.label&&(A.label=g.label),null!=g.size&&(A.size=g.size),null!=g.attributes&&null!=g.attributes.title&&(A.title=g.attributes.title),null!=g.title&&(A.title=g.title),null!=g.x&&(A.x=g.x),null!=g.y&&(A.y=g.y),null!=g.color&&(A.color=!0===n?g.color:{background:g.color,border:g.color,highlight:{background:g.color,border:g.color},hover:{background:g.color,border:g.color}}),A}),edges:r}}var mf=Object.freeze({__proto__:null,parseGephi:bf});class yf{constructor(){this.NUM_ITERATIONS=4,this.image=new Image,this.canvas=document.createElement("canvas")}init(){if(this.initialized())return;this.src=this.image.src;const g=this.image.width,A=this.image.height;this.width=g,this.height=A;const t=Math.floor(A/2),C=Math.floor(A/4),I=Math.floor(A/8),e=Math.floor(A/16),i=Math.floor(g/2),o=Math.floor(g/4),n=Math.floor(g/8),s=Math.floor(g/16);this.canvas.width=3*o,this.canvas.height=t,this.coordinates=[[0,0,i,t],[i,0,o,C],[i,C,n,I],[5*n,C,s,e]],this._fillMipMap()}initialized(){return void 0!==this.coordinates}_fillMipMap(){const g=this.canvas.getContext("2d"),A=this.coordinates[0];g.drawImage(this.image,A[0],A[1],A[2],A[3]);for(let A=1;A2){A*=.5;let i=0;for(;A>2&&i=this.NUM_ITERATIONS&&(i=this.NUM_ITERATIONS-1);const o=this.coordinates[i];g.drawImage(this.canvas,o[0],o[1],o[2],o[3],t,C,I,e)}else g.drawImage(this.image,t,C,I,e)}}class wf{constructor(g){this.images={},this.imageBroken={},this.callback=g}_tryloadBrokenUrl(g,A,t){void 0!==g&&void 0!==t&&(void 0!==A?(t.image.addEventListener("error",()=>{console.error("Could not load brokenImage:",A)}),t.image.src=A):console.warn("No broken url image defined"))}_redrawWithImage(g){this.callback&&this.callback(g)}load(g,A){const t=this.images[g];if(t)return t;const C=new yf;return this.images[g]=C,C.image.addEventListener("load",()=>{this._fixImageCoordinates(C.image),C.init(),this._redrawWithImage(C)}),C.image.addEventListener("error",()=>{console.error("Could not load image:",g),this._tryloadBrokenUrl(g,A,C)}),C.image.src=g,C}_fixImageCoordinates(g){0===g.width&&(document.body.appendChild(g),g.width=g.offsetWidth,g.height=g.offsetHeight,document.body.removeChild(g))}}var xf,Ef,Of,Tf,Df=Object.freeze({__proto__:null,cn:{addDescription:"单击空白处放置新节点。",addEdge:"添加连接线",addNode:"添加节点",back:"返回",close:"關閉",createEdgeError:"无法将连接线连接到群集。",del:"删除选定",deleteClusterError:"无法删除群集。",edgeDescription:"单击某个节点并将该连接线拖动到另一个节点以连接它们。",edit:"编辑",editClusterError:"无法编辑群集。",editEdge:"编辑连接线",editEdgeDescription:"单击控制节点并将它们拖到节点上连接。",editNode:"编辑节点"},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"},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"},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"},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"},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"},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:"Редактировать узел"},uk:{addDescription:"Kлікніть на вільне місце, щоб додати новий вузол.",addEdge:"Додати край",addNode:"Додати вузол",back:"Назад",close:"Закрити",createEdgeError:"Не можливо об'єднати краї в групу.",del:"Видалити обране",deleteClusterError:"Групи не можуть бути видалені.",edgeDescription:"Клікніть на вузол і перетягніть край до іншого вузла, щоб їх з'єднати.",edit:"Редагувати",editClusterError:"Групи недоступні для редагування.",editEdge:"Редагувати край",editEdgeDescription:"Клікніть на контрольні точки і перетягніть їх у вузол, щоб підключитися до нього.",editNode:"Редагувати вузол"}});function Nf(){return Ef?xf:(Ef=1,jl(),xf=Tg().setInterval)}var kf=C(Tf?Of:(Tf=1,Of=Nf()));function Rf(g,A){A.inputHandler=function(g){g.isFirst&&A(g)},g.on("hammer.input",A.inputHandler)}function Pf(g,A){return A.inputHandler=function(g){g.isFinal&&A(g)},g.on("hammer.input",A.inputHandler)}class Mf{constructor(g){this.body=g,this.pixelRatio=1,this.cameraState={},this.initialized=!1,this.canvasViewCenter={},this._cleanupCallbacks=[],this.options={},this.defaultOptions={autoResize:!0,height:"100%",width:"100%"},_t(this.options,this.defaultOptions),this.bindEventListeners()}bindEventListeners(){var g;this.body.emitter.once("resize",g=>{0!==g.width&&(this.body.view.translation.x=.5*g.width),0!==g.height&&(this.body.view.translation.y=.5*g.height)}),this.body.emitter.on("setSize",IC(g=this.setSize).call(g,this)),this.body.emitter.on("destroy",()=>{this.hammerFrame.destroy(),this.hammer.destroy(),this._cleanUp()})}setOptions(g){if(void 0!==g){op(["width","height","autoResize"],this.options,g)}if(this._cleanUp(),!0===this.options.autoResize){var A;if(window.ResizeObserver){const g=new ResizeObserver(()=>{!0===this.setSize()&&this.body.emitter.emit("_requestRedraw")}),A=this.frame;g.observe(A),this._cleanupCallbacks.push(()=>{g.unobserve(A)})}else{const g=kf(()=>{!0===this.setSize()&&this.body.emitter.emit("_requestRedraw")},1e3);this._cleanupCallbacks.push(()=>{clearInterval(g)})}const g=IC(A=this._onResize).call(A,this);window.addEventListener("resize",g),this._cleanupCallbacks.push(()=>{window.removeEventListener("resize",g)})}}_cleanUp(){var g,A;pa(g=Va(A=this._cleanupCallbacks).call(A,0).toReversed()).call(g,g=>{try{g()}catch(g){console.error(g)}})}_onResize(){this.setSize(),this.body.emitter.emit("_redraw")}_getCameraState(){let g=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.pixelRatio;!0===this.initialized&&(this.cameraState.previousWidth=this.frame.canvas.width/g,this.cameraState.previousHeight=this.frame.canvas.height/g,this.cameraState.scale=this.body.view.scale,this.cameraState.position=this.DOMtoCanvas({x:.5*this.frame.canvas.width/g,y:.5*this.frame.canvas.height/g}))}_setCameraState(){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){const g=this.frame.canvas.width/this.pixelRatio/this.cameraState.previousWidth,A=this.frame.canvas.height/this.pixelRatio/this.cameraState.previousHeight;let t=this.cameraState.scale;1!=g&&1!=A?t=.5*this.cameraState.scale*(g+A):1!=g?t=this.cameraState.scale*g:1!=A&&(t=this.cameraState.scale*A),this.body.view.scale=t;const C=this.DOMtoCanvas({x:.5*this.frame.canvas.clientWidth,y:.5*this.frame.canvas.clientHeight}),I={x:C.x-this.cameraState.position.x,y:C.y-this.cameraState.position.y};this.body.view.translation.x+=I.x*this.body.view.scale,this.body.view.translation.y+=I.y*this.body.view.scale}}_prepareValue(g){if("number"==typeof g)return g+"px";if("string"==typeof g){if(-1!==Jh(g).call(g,"%")||-1!==Jh(g).call(g,"px"))return g;if(-1===Jh(g).call(g,"%"))return g+"px"}throw new Error("Could not use the value supplied for width or height:"+g)}_create(){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{const g=document.createElement("DIV");g.style.color="red",g.style.fontWeight="bold",g.style.padding="10px",g.innerText="Error: your browser does not support HTML canvas",this.frame.canvas.appendChild(g)}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()}_bindHammer(){void 0!==this.hammer&&this.hammer.destroy(),this.drag={},this.pinch={},this.hammer=new Bp(this.frame.canvas),this.hammer.get("pinch").set({enable:!0}),this.hammer.get("pan").set({threshold:5,direction:Bp.DIRECTION_ALL}),Rf(this.hammer,g=>{this.body.eventListeners.onTouch(g)}),this.hammer.on("tap",g=>{this.body.eventListeners.onTap(g)}),this.hammer.on("doubletap",g=>{this.body.eventListeners.onDoubleTap(g)}),this.hammer.on("press",g=>{this.body.eventListeners.onHold(g)}),this.hammer.on("panstart",g=>{this.body.eventListeners.onDragStart(g)}),this.hammer.on("panmove",g=>{this.body.eventListeners.onDrag(g)}),this.hammer.on("panend",g=>{this.body.eventListeners.onDragEnd(g)}),this.hammer.on("pinch",g=>{this.body.eventListeners.onPinch(g)}),this.frame.canvas.addEventListener("wheel",g=>{this.body.eventListeners.onMouseWheel(g)}),this.frame.canvas.addEventListener("mousemove",g=>{this.body.eventListeners.onMouseMove(g)}),this.frame.canvas.addEventListener("contextmenu",g=>{this.body.eventListeners.onContext(g)}),this.hammerFrame=new Bp(this.frame),Pf(this.hammerFrame,g=>{this.body.eventListeners.onRelease(g)})}setSize(){let g=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.options.width,A=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.options.height;g=this._prepareValue(g),A=this._prepareValue(A);let t=!1;const C=this.frame.canvas.width,I=this.frame.canvas.height,e=this.pixelRatio;if(this._setPixelRatio(),g!=this.options.width||A!=this.options.height||this.frame.style.width!=g||this.frame.style.height!=A)this._getCameraState(e),this.frame.style.width=g,this.frame.style.height=A,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=g,this.options.height=A,this.canvasViewCenter={x:.5*this.frame.clientWidth,y:.5*this.frame.clientHeight},t=!0;else{const g=Math.round(this.frame.canvas.clientWidth*this.pixelRatio),A=Math.round(this.frame.canvas.clientHeight*this.pixelRatio);this.frame.canvas.width===g&&this.frame.canvas.height===A||this._getCameraState(e),this.frame.canvas.width!==g&&(this.frame.canvas.width=g,t=!0),this.frame.canvas.height!==A&&(this.frame.canvas.height=A,t=!0)}return!0===t&&(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(C/this.pixelRatio),oldHeight:Math.round(I/this.pixelRatio)}),this._setCameraState()),this.initialized=!0,t}getContext(){return this.frame.canvas.getContext("2d")}_determinePixelRatio(){const g=this.getContext();if(void 0===g)throw new Error("Could not get canvax context");let A=1;"undefined"!=typeof window&&(A=window.devicePixelRatio||1);return A/(g.webkitBackingStorePixelRatio||g.mozBackingStorePixelRatio||g.msBackingStorePixelRatio||g.oBackingStorePixelRatio||g.backingStorePixelRatio||1)}_setPixelRatio(){this.pixelRatio=this._determinePixelRatio()}setTransform(){const g=this.getContext();if(void 0===g)throw new Error("Could not get canvax context");g.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0)}_XconvertDOMtoCanvas(g){return(g-this.body.view.translation.x)/this.body.view.scale}_XconvertCanvasToDOM(g){return g*this.body.view.scale+this.body.view.translation.x}_YconvertDOMtoCanvas(g){return(g-this.body.view.translation.y)/this.body.view.scale}_YconvertCanvasToDOM(g){return g*this.body.view.scale+this.body.view.translation.y}canvasToDOM(g){return{x:this._XconvertCanvasToDOM(g.x),y:this._YconvertCanvasToDOM(g.y)}}DOMtoCanvas(g){return{x:this._XconvertDOMtoCanvas(g.x),y:this._YconvertDOMtoCanvas(g.y)}}}class zf{constructor(g,A){this.body=g,this.canvas=A,this.redrawRequested=!1,this.requestAnimationFrameRequestId=void 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},_t(this.options,this.defaultOptions),this.bindEventListeners()}bindEventListeners(){var g;this.body.emitter.on("dragStart",()=>{this.dragging=!0}),this.body.emitter.on("dragEnd",()=>{this.dragging=!1}),this.body.emitter.on("zoom",()=>{this.zooming=!0,window.clearTimeout(this.zoomTimeoutId),this.zoomTimeoutId=$l(()=>{var g;this.zooming=!1,IC(g=this._requestRedraw).call(g,this)()},250)}),this.body.emitter.on("_resizeNodes",()=>{this._resizeNodes()}),this.body.emitter.on("_redraw",()=>{!1===this.renderingActive&&this._redraw()}),this.body.emitter.on("_blockRedraw",()=>{this.allowRedraw=!1}),this.body.emitter.on("_allowRedraw",()=>{this.allowRedraw=!0,this.redrawRequested=!1}),this.body.emitter.on("_requestRedraw",IC(g=this._requestRedraw).call(g,this)),this.body.emitter.on("_startRendering",()=>{this.renderRequests+=1,this.renderingActive=!0,this._startRendering()}),this.body.emitter.on("_stopRendering",()=>{this.renderRequests-=1,this.renderingActive=this.renderRequests>0,this.requestAnimationFrameRequestId=void 0}),this.body.emitter.on("destroy",()=>{this.renderRequests=0,this.allowRedraw=!1,this.renderingActive=!1,window.cancelAnimationFrame(this.requestAnimationFrameRequestId),this.body.emitter.off()})}setOptions(g){if(void 0!==g){op(["hideEdgesOnDrag","hideEdgesOnZoom","hideNodesOnDrag"],this.options,g)}}_startRendering(){var g;!0===this.renderingActive&&(void 0===this.requestAnimationFrameRequestId&&(this.requestAnimationFrameRequestId=window.requestAnimationFrame(IC(g=this._renderStep).call(g,this),this.simulationInterval)))}_renderStep(){!0===this.renderingActive&&(this.requestAnimationFrameRequestId=void 0,this._startRendering(),this._redraw())}redraw(){this.body.emitter.emit("setSize"),this._redraw()}_requestRedraw(){!0!==this.redrawRequested&&!1===this.renderingActive&&!0===this.allowRedraw&&(this.redrawRequested=!0,window.requestAnimationFrame(()=>{this._redraw(!1)}))}_redraw(){let g=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(!0===this.allowRedraw){this.body.emitter.emit("initRedraw"),this.redrawRequested=!1;const A={drawExternalLabels:null};0!==this.canvas.frame.canvas.width&&0!==this.canvas.frame.canvas.height||this.canvas.setSize(),this.canvas.setTransform();const t=this.canvas.getContext(),C=this.canvas.frame.canvas.clientWidth,I=this.canvas.frame.canvas.clientHeight;if(t.clearRect(0,0,C,I),0===this.canvas.frame.clientWidth)return;if(t.save(),t.translate(this.body.view.translation.x,this.body.view.translation.y),t.scale(this.body.view.scale,this.body.view.scale),t.beginPath(),this.body.emitter.emit("beforeDrawing",t),t.closePath(),!1===g&&(!1===this.dragging||!0===this.dragging&&!1===this.options.hideEdgesOnDrag)&&(!1===this.zooming||!0===this.zooming&&!1===this.options.hideEdgesOnZoom)&&this._drawEdges(t),!1===this.dragging||!0===this.dragging&&!1===this.options.hideNodesOnDrag){const C=this._drawNodes(t,g).drawExternalLabels;A.drawExternalLabels=C}!1===g&&(!1===this.dragging||!0===this.dragging&&!1===this.options.hideEdgesOnDrag)&&(!1===this.zooming||!0===this.zooming&&!1===this.options.hideEdgesOnZoom)&&this._drawArrows(t),null!=A.drawExternalLabels&&A.drawExternalLabels(),!1===g&&this._drawSelectionBox(t),t.beginPath(),this.body.emitter.emit("afterDrawing",t),t.closePath(),t.restore(),!0===g&&t.clearRect(0,0,C,I)}}_resizeNodes(){this.canvas.setTransform();const g=this.canvas.getContext();g.save(),g.translate(this.body.view.translation.x,this.body.view.translation.y),g.scale(this.body.view.scale,this.body.view.scale);const A=this.body.nodes;let t;for(const C in A)Object.prototype.hasOwnProperty.call(A,C)&&(t=A[C],t.resize(g),t.updateBoundingBox(g,t.selected));g.restore()}_drawNodes(g){let A=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const t=this.body.nodes,C=this.body.nodeIndices;let I;const e=[],i=[],o=this.canvas.DOMtoCanvas({x:-20,y:-20}),n=this.canvas.DOMtoCanvas({x:this.canvas.frame.canvas.clientWidth+20,y:this.canvas.frame.canvas.clientHeight+20}),s={top:o.y,left:o.x,bottom:n.y,right:n.x},r=[];for(let o=0;o{for(const g of r)g()}}}_drawEdges(g){const A=this.body.edges,t=this.body.edgeIndices;for(let C=0;C= 16");return A[6]=15&A[6]|64,A[8]=63&A[8]|128,function(g,A=0){return(Bf[g[A+0]]+Bf[g[A+1]]+Bf[g[A+2]]+Bf[g[A+3]]+"-"+Bf[g[A+4]]+Bf[g[A+5]]+"-"+Bf[g[A+6]]+Bf[g[A+7]]+"-"+Bf[g[A+8]]+Bf[g[A+9]]+"-"+Bf[g[A+10]]+Bf[g[A+11]]+Bf[g[A+12]]+Bf[g[A+13]]+Bf[g[A+14]]+Bf[g[A+15]]).toLowerCase()}(A)}(g)}class Ff{static getRange(g){let A,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],C=1e9,I=-1e9,e=1e9,i=-1e9;if(t.length>0)for(let o=0;oA.shape.boundingBox.left&&(e=A.shape.boundingBox.left),iA.shape.boundingBox.top&&(C=A.shape.boundingBox.top),I1&&void 0!==arguments[1]?arguments[1]:[],C=1e9,I=-1e9,e=1e9,i=-1e9;if(t.length>0)for(let o=0;oA.x&&(e=A.x),iA.y&&(C=A.y),Ia;)void 0!==(i=n(o,A=s[a++]))&&e(r,A,i);return r}})}(),Pb=Tg().Object.getOwnPropertyDescriptors)}function Lb(){return Bb?zb:(Bb=1,zb=jb())}var Vb,Yb,Wb,Qb,Ub,Kb,Hb=C(Sb?Zb:(Sb=1,Zb=Lb())),Xb={exports:{}},_b={};function Jb(){if(Vb)return _b;Vb=1;var g=st(),A=z(),t=TI().f;return g({target:"Object",stat:!0,forced:Object.defineProperties!==t,sham:!A},{defineProperties:t}),_b}function qb(){if(Yb)return Xb.exports;Yb=1,Jb();var g=Tg().Object,A=Xb.exports=function(A,t){return g.defineProperties(A,t)};return g.defineProperties.sham&&(A.sham=!0),Xb.exports}function $b(){return Qb?Wb:(Qb=1,Wb=qb())}var gm,Am,tm=C(Kb?Ub:(Kb=1,Ub=$b()));var Cm,Im,em,im,om,nm,sm,rm=C(Am?gm:(Am=1,gm=Ov())),am={};function dm(){return em?Im:(em=1,function(){if(Cm)return am;Cm=1;var g=st(),A=Math.hypot,t=Math.abs,C=Math.sqrt;g({target:"Math",stat:!0,arity:2,forced:!!A&&A(1/0,NaN)!==1/0},{hypot:function(g,A){for(var I,e,i=0,o=0,n=arguments.length,s=0;o0?(e=I/s)*e:I;return s===1/0?1/0:s*C(i)}})}(),Im=Tg().Math.hypot)}function hm(){return om?im:(om=1,im=dm())}var lm=C(sm?nm:(sm=1,nm=hm()));function cm(g,A){const t=["node","edge","label"];let C=!0;const I=Op(A,"chosen");if("boolean"==typeof I)C=I;else if("object"==typeof I){if(-1===Jh(t).call(t,g))throw new Error("choosify: subOption '"+g+"' should be one of '"+t.join("', '")+"'");const I=Op(A,["chosen",g]);"boolean"!=typeof I&&"function"!=typeof I||(C=I)}return C}function um(g,A,t){if(g.width<=0||g.height<=0)return!1;if(void 0!==t){const g={x:A.x-t.x,y:A.y-t.y};if(0!==t.angle){const C=-t.angle;A={x:Math.cos(C)*g.x-Math.sin(C)*g.y,y:Math.sin(C)*g.x+Math.cos(C)*g.y}}else A=g}const C=g.x+g.width,I=g.y+g.width;return g.leftA.x&&g.topA.y}function pm(g){return"string"==typeof g&&""!==g}function fm(g,A,t,C){let I=C.x,e=C.y;if("function"==typeof C.distanceToBorder){const t=C.distanceToBorder(g,A),i=Math.sin(A)*t,o=Math.cos(A)*t;o===t?(I+=t,e=C.y):i===t?(I=C.x,e-=t):(I+=o,e-=i)}else C.shape.width>C.shape.height?(I=C.x+.5*C.shape.width,e=C.y-t):(I=C.x+t,e=C.y-.5*C.shape.height);return{x:I,y:e}}class vm{static transform(g,A){cr(g)||(g=[g]);const t=A.point.x,C=A.point.y,I=A.angle,e=A.length;for(let A=0;A4&&void 0!==arguments[4]?arguments[4]:this.getViaNode();g.strokeStyle=this.getColor(g,A),g.lineWidth=A.width,!1!==A.dashes?this._drawDashedLine(g,A,I):this._drawLine(g,A,I)}_drawLine(g,A,t,C,I){if(this.from!=this.to)this._line(g,A,t,C,I);else{const t=js(this._getCircleData(g),3),C=t[0],I=t[1],e=t[2];this._circle(g,A,C,I,e)}}_drawDashedLine(g,A,t,C,I){g.lineCap="round";const e=cr(A.dashes)?A.dashes:[5,5];if(void 0!==g.setLineDash){if(g.save(),g.setLineDash(e),g.lineDashOffset=0,this.from!=this.to)this._line(g,A,t);else{const t=js(this._getCircleData(g),3),C=t[0],I=t[1],e=t[2];this._circle(g,A,C,I,e)}g.setLineDash([0]),g.lineDashOffset=0,g.restore()}else{if(this.from!=this.to)sC(g,this.from.x,this.from.y,this.to.x,this.to.y,e);else{const t=js(this._getCircleData(g),3),C=t[0],I=t[1],e=t[2];this._circle(g,A,C,I,e)}this.enableShadow(g,A),g.stroke(),this.disableShadow(g,A)}}findBorderPosition(g,A,t){return this.from!=this.to?this._findBorderPosition(g,A,t):this._findBorderPositionCircle(g,A,t)}findBorderPositions(g){if(this.from!=this.to)return{from:this._findBorderPosition(this.from,g),to:this._findBorderPosition(this.to,g)};{var A;const t=js($s(A=this._getCircleData(g)).call(A,0,2),2),C=t[0],I=t[1];return{from:this._findBorderPositionCircle(this.from,g,{x:C,y:I,low:.25,high:.6,direction:-1}),to:this._findBorderPositionCircle(this.from,g,{x:C,y:I,low:.6,high:.8,direction:1})}}}_getCircleData(g){const A=this.options.selfReference.size;void 0!==g&&void 0===this.from.shape.width&&this.from.shape.resize(g);const t=fm(g,this.options.selfReference.angle,A,this.from);return[t.x,t.y,A]}_pointOnCircle(g,A,t,C){const I=2*C*Math.PI;return{x:g+t*Math.cos(I),y:A-t*Math.sin(I)}}_findBorderPositionCircle(g,A,t){const C=t.x,I=t.y;let e=t.low,i=t.high;const o=t.direction,n=this.options.selfReference.size;let s,r=.5*(e+i),a=0;!0===this.options.arrowStrikethrough&&(-1===o?a=this.options.endPointOffset.from:1===o&&(a=this.options.endPointOffset.to));let d=0;do{r=.5*(e+i),s=this._pointOnCircle(C,I,n,r);const t=Math.atan2(g.y-s.y,g.x-s.x),h=g.distanceToBorder(A,t)+a-Math.sqrt(Math.pow(s.x-g.x,2)+Math.pow(s.y-g.y,2));if(Math.abs(h)<.05)break;h>0?o>0?e=r:i=r:o>0?i=r:e=r,++d}while(e<=i&&d<10);return zm(zm({},s),{},{t:r})}getLineWidth(g,A){return!0===g?Math.max(this.selectionWidth,.3/this._body.view.scale):!0===A?Math.max(this.hoverWidth,.3/this._body.view.scale):Math.max(this.options.width,.3/this._body.view.scale)}getColor(g,A){if(!1!==A.inheritsColor){if("both"===A.inheritsColor&&this.from.id!==this.to.id){const t=g.createLinearGradient(this.from.x,this.from.y,this.to.x,this.to.y);let C=this.from.options.color.highlight.border,I=this.to.options.color.highlight.border;return!1===this.from.selected&&!1===this.to.selected?(C=cp(this.from.options.color.border,A.opacity),I=cp(this.to.options.color.border,A.opacity)):!0===this.from.selected&&!1===this.to.selected?I=this.to.options.color.border:!1===this.from.selected&&!0===this.to.selected&&(C=this.from.options.color.border),t.addColorStop(0,C),t.addColorStop(1,I),t}return"to"===A.inheritsColor?cp(this.to.options.color.border,A.opacity):cp(this.from.options.color.border,A.opacity)}return cp(A.color,A.opacity)}_circle(g,A,t,C,I){this.enableShadow(g,A);let e=0,i=2*Math.PI;if(!this.options.selfReference.renderBehindTheNode){const A=this.options.selfReference.angle,I=this.options.selfReference.angle+Math.PI,o=this._findBorderPositionCircle(this.from,g,{x:t,y:C,low:A,high:I,direction:-1}),n=this._findBorderPositionCircle(this.from,g,{x:t,y:C,low:A,high:I,direction:1});e=Math.atan2(o.y-C,o.x-t),i=Math.atan2(n.y-C,n.x-t)}g.beginPath(),g.arc(t,C,I,e,i,!1),g.stroke(),this.disableShadow(g,A)}getDistanceToEdge(g,A,t,C,I,e){if(this.from!=this.to)return this._getDistanceToEdge(g,A,t,C,I,e);{const g=js(this._getCircleData(void 0),3),A=g[0],t=g[1],C=g[2],i=A-I,o=t-e;return Math.abs(Math.sqrt(i*i+o*o)-C)}}_getDistanceToLine(g,A,t,C,I,e){const i=t-g,o=C-A;let n=((I-g)*i+(e-A)*o)/(i*i+o*o);n>1?n=1:n<0&&(n=0);const s=g+n*i-I,r=A+n*o-e;return Math.sqrt(s*s+r*r)}getArrowData(g,A,t,C,I,e){let i,o,n,s,r,a,d;const h=e.width;"from"===A?(n=this.from,s=this.to,r=e.fromArrowScale<0,a=Math.abs(e.fromArrowScale),d=e.fromArrowType):"to"===A?(n=this.to,s=this.from,r=e.toArrowScale<0,a=Math.abs(e.toArrowScale),d=e.toArrowType):(n=this.to,s=this.from,r=e.middleArrowScale<0,a=Math.abs(e.middleArrowScale),d=e.middleArrowType);const l=15*a+3*h;if(n!=s){const C=l/lm(n.x-s.x,n.y-s.y);if("middle"!==A)if(!0===this.options.smooth.enabled){const I=this._findBorderPosition(n,g,{via:t}),e=this.getPoint(I.t+C*("from"===A?1:-1),t);i=Math.atan2(I.y-e.y,I.x-e.x),o=I}else i=Math.atan2(n.y-s.y,n.x-s.x),o=this._findBorderPosition(n,g);else{const g=(r?-C:C)/2,A=this.getPoint(.5+g,t),I=this.getPoint(.5-g,t);i=Math.atan2(A.y-I.y,A.x-I.x),o=this.getPoint(.5,t)}}else{const t=js(this._getCircleData(g),3),C=t[0],I=t[1],e=t[2];if("from"===A){const A=this.options.selfReference.angle,t=this.options.selfReference.angle+Math.PI,e=this._findBorderPositionCircle(this.from,g,{x:C,y:I,low:A,high:t,direction:-1});i=-2*e.t*Math.PI+1.5*Math.PI+.1*Math.PI,o=e}else if("to"===A){const A=this.options.selfReference.angle,t=this.options.selfReference.angle+Math.PI,e=this._findBorderPositionCircle(this.from,g,{x:C,y:I,low:A,high:t,direction:1});i=-2*e.t*Math.PI+1.5*Math.PI-1.1*Math.PI,o=e}else{const g=this.options.selfReference.angle/(2*Math.PI);o=this._pointOnCircle(C,I,e,g),i=-2*g*Math.PI+1.5*Math.PI+.1*Math.PI}}return{point:o,core:{x:o.x-.9*l*Math.cos(i),y:o.y-.9*l*Math.sin(i)},angle:i,length:l,type:d}}drawArrowHead(g,A,t,C,I){g.strokeStyle=this.getColor(g,A),g.fillStyle=g.strokeStyle,g.lineWidth=A.width;Pm.draw(g,I)&&(this.enableShadow(g,A),ic(g).call(g),this.disableShadow(g,A))}enableShadow(g,A){!0===A.shadow&&(g.shadowColor=A.shadowColor,g.shadowBlur=A.shadowSize,g.shadowOffsetX=A.shadowX,g.shadowOffsetY=A.shadowY)}disableShadow(g,A){!0===A.shadow&&(g.shadowColor="rgba(0,0,0,0)",g.shadowBlur=0,g.shadowOffsetX=0,g.shadowOffsetY=0)}drawBackground(g,A){if(!1!==A.background){const t={strokeStyle:g.strokeStyle,lineWidth:g.lineWidth,dashes:g.dashes};g.strokeStyle=A.backgroundColor,g.lineWidth=A.backgroundSize,this.setStrokeDashed(g,A.backgroundDashes),g.stroke(),g.strokeStyle=t.strokeStyle,g.lineWidth=t.lineWidth,g.dashes=t.dashes,this.setStrokeDashed(g,A.dashes)}}setStrokeDashed(g,A){if(!1!==A)if(void 0!==g.setLineDash){const t=cr(A)?A:[5,5];g.setLineDash(t)}else console.warn("setLineDash is not supported in this browser. The dashed stroke cannot be used.");else void 0!==g.setLineDash?g.setLineDash([]):console.warn("setLineDash is not supported in this browser. The dashed stroke cannot be used.")}}function Zm(g,A){var t=Fr(g);if(Ob){var C=Ob(g);A&&(C=eh(C).call(C,function(A){return Fb(g,A).enumerable})),t.push.apply(t,C)}return t}function Sm(g){for(var A=1;A2&&void 0!==arguments[2]?arguments[2]:this._getViaCoordinates();let C,I,e=!1,i=1,o=0,n=this.to,s=this.options.endPointOffset?this.options.endPointOffset.to:0;g.id===this.from.id&&(n=this.from,e=!0,s=this.options.endPointOffset?this.options.endPointOffset.from:0),!1===this.options.arrowStrikethrough&&(s=0);let r=0;do{I=.5*(o+i),C=this.getPoint(I,t);const g=Math.atan2(n.y-C.y,n.x-C.x),a=n.distanceToBorder(A,g)+s-Math.sqrt(Math.pow(C.x-n.x,2)+Math.pow(C.y-n.y,2));if(Math.abs(a)<.2)break;a<0?!1===e?o=I:i=I:!1===e?i=I:o=I,++r}while(o<=i&&r<10);return Sm(Sm({},C),{},{t:I})}_getDistanceToBezierEdge(g,A,t,C,I,e,i){let o,n,s,r,a,d=1e9,h=g,l=A;for(n=1;n<10;n++)s=.1*n,r=Math.pow(1-s,2)*g+2*s*(1-s)*i.x+Math.pow(s,2)*t,a=Math.pow(1-s,2)*A+2*s*(1-s)*i.y+Math.pow(s,2)*C,n>0&&(o=this._getDistanceToLine(h,l,r,a,I,e),d=o{this.positionBezierNode()},this._body.emitter.on("_repositionBezierNodes",this._boundFunction)}setOptions(g){super.setOptions(g);let A=!1;this.options.physics!==g.physics&&(A=!0),this.options=g,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===A&&(this.via.setOptions({physics:this.options.physics}),this.positionBezierNode())}connect(){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})}cleanup(){return this._body.emitter.off("_repositionBezierNodes",this._boundFunction),void 0!==this.via&&(delete this._body.nodes[this.via.id],this.via=void 0,!0)}setupSupportNode(){if(void 0===this.via){const g="edgeId:"+this.id,A=this._body.functions.createNode({id:g,shape:"circle",physics:!0,hidden:!0});this._body.nodes[g]=A,this.via=A,this.via.parentEdgeId=this.id,this.positionBezierNode()}}positionBezierNode(){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)}_line(g,A,t){this._bezierCurve(g,A,t)}_getViaCoordinates(){return this.via}getViaNode(){return this.via}getPoint(g){let A=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.via;if(this.from===this.to){const A=js(this._getCircleData(),3),t=A[0],C=A[1],I=A[2],e=2*Math.PI*(1-g);return{x:t+I*Math.sin(e),y:C+I-I*(1-Math.cos(e))}}return{x:Math.pow(1-g,2)*this.fromPoint.x+2*g*(1-g)*A.x+Math.pow(g,2)*this.toPoint.x,y:Math.pow(1-g,2)*this.fromPoint.y+2*g*(1-g)*A.y+Math.pow(g,2)*this.toPoint.y}}_findBorderPosition(g,A){return this._findBorderPositionBezier(g,A,this.via)}_getDistanceToEdge(g,A,t,C,I,e){return this._getDistanceToBezierEdge(g,A,t,C,I,e,this.via)}}class jm extends Fm{_line(g,A,t){this._bezierCurve(g,A,t)}getViaNode(){return this._getViaCoordinates()}_getViaCoordinates(){const g=this.options.smooth.roundness,A=this.options.smooth.type;let t=Math.abs(this.from.x-this.to.x),C=Math.abs(this.from.y-this.to.y);if("discrete"===A||"diagonalCross"===A){let I,e;I=e=t<=C?g*C:g*t,this.from.x>this.to.x&&(I=-I),this.from.y>=this.to.y&&(e=-e);let i=this.from.x+I,o=this.from.y+e;return"discrete"===A&&(t<=C?i=tthis.to.x&&(A=-A),this.from.y>=this.to.y&&(I=-I);let e=this.from.x+A,i=this.from.y+I;return t<=C?e=this.from.x<=this.to.x?this.to.xe?this.to.x:e:i=this.from.y>=this.to.y?this.to.y>i?this.to.y:i:this.to.y2&&void 0!==arguments[2]?arguments[2]:{};return this._findBorderPositionBezier(g,A,t.via)}_getDistanceToEdge(g,A,t,C,I,e){let i=arguments.length>6&&void 0!==arguments[6]?arguments[6]:this._getViaCoordinates();return this._getDistanceToBezierEdge(g,A,t,C,I,e,i)}getPoint(g){let A=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this._getViaCoordinates();const t=g;return{x:Math.pow(1-t,2)*this.fromPoint.x+2*t*(1-t)*A.x+Math.pow(t,2)*this.toPoint.x,y:Math.pow(1-t,2)*this.fromPoint.y+2*t*(1-t)*A.y+Math.pow(t,2)*this.toPoint.y}}}class Lm extends Fm{_getDistanceToBezierEdge2(g,A,t,C,I,e,i,o){let n=1e9,s=g,r=A;const a=[0,0,0,0];for(let d=1;d<10;d++){const h=.1*d;a[0]=Math.pow(1-h,3),a[1]=3*h*Math.pow(1-h,2),a[2]=3*Math.pow(h,2)*(1-h),a[3]=Math.pow(h,3);const l=a[0]*g+a[1]*i.x+a[2]*o.x+a[3]*t,c=a[0]*A+a[1]*i.y+a[2]*o.y+a[3]*C;if(d>0){const g=this._getDistanceToLine(s,r,l,c,I,e);n=gMath.abs(A)||!0===this.options.smooth.forceDirection||"horizontal"===this.options.smooth.forceDirection)&&"vertical"!==this.options.smooth.forceDirection?(C=this.from.y,e=this.to.y,t=this.from.x-i*g,I=this.to.x+i*g):(C=this.from.y-i*A,e=this.to.y+i*A,t=this.from.x,I=this.to.x),[{x:t,y:C},{x:I,y:e}]}getViaNode(){return this._getViaCoordinates()}_findBorderPosition(g,A){return this._findBorderPositionBezier(g,A)}_getDistanceToEdge(g,A,t,C,I,e){let i=js(arguments.length>6&&void 0!==arguments[6]?arguments[6]:this._getViaCoordinates(),2),o=i[0],n=i[1];return this._getDistanceToBezierEdge2(g,A,t,C,I,e,o,n)}getPoint(g){let A=js(arguments.length>1&&void 0!==arguments[1]?arguments[1]:this._getViaCoordinates(),2),t=A[0],C=A[1];const I=g,e=[Math.pow(1-I,3),3*I*Math.pow(1-I,2),3*Math.pow(I,2)*(1-I),Math.pow(I,3)];return{x:e[0]*this.fromPoint.x+e[1]*t.x+e[2]*C.x+e[3]*this.toPoint.x,y:e[0]*this.fromPoint.y+e[1]*t.y+e[2]*C.y+e[3]*this.toPoint.y}}}class Ym extends Bm{_line(g,A){g.beginPath(),g.moveTo(this.fromPoint.x,this.fromPoint.y),g.lineTo(this.toPoint.x,this.toPoint.y),this.enableShadow(g,A),g.stroke(),this.disableShadow(g,A)}getViaNode(){}getPoint(g){return{x:(1-g)*this.fromPoint.x+g*this.toPoint.x,y:(1-g)*this.fromPoint.y+g*this.toPoint.y}}_findBorderPosition(g,A){let t=this.to,C=this.from;g.id===this.from.id&&(t=this.from,C=this.to);const I=Math.atan2(t.y-C.y,t.x-C.x),e=t.x-C.x,i=t.y-C.y,o=Math.sqrt(e*e+i*i),n=(o-g.distanceToBorder(A,I))/o;return{x:(1-n)*C.x+n*t.x,y:(1-n)*C.y+n*t.y,t:0}}_getDistanceToEdge(g,A,t,C,I,e){return this._getDistanceToLine(g,A,t,C,I,e)}}var Wm,Qm,Um,Km,Hm,Xm,_m,Jm;function qm(){return Qm?Wm:(Qm=1,eo(),Wm=gC()("Array","values"))}function $m(){return Km?Um:(Km=1,Um=qm())}function gy(){if(Xm)return Hm;Xm=1,oo();var g=oI(),A=vA(),t=Ng(),C=$m(),I=Array.prototype,e={DOMTokenList:!0,NodeList:!0};return Hm=function(i){var o=i.values;return i===I||t(I,i)&&o===I.values||A(e,g(i))?C:o},Hm}var Ay=C(Jm?_m:(Jm=1,_m=gy()));class ty{constructor(g){this.measureText=g,this.current=0,this.width=0,this.height=0,this.lines=[]}_add(g,A){let t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"normal";void 0===this.lines[g]&&(this.lines[g]={width:0,height:0,blocks:[]});let C=A;void 0!==A&&""!==A||(C=" ");const I=this.measureText(C,t),e=_t({},Ay(I));e.text=A,e.width=I.width,e.mod=t,void 0!==A&&""!==A||(e.width=0),this.lines[g].blocks.push(e),this.lines[g].width+=e.width}curWidth(){const g=this.lines[this.current];return void 0===g?0:g.width}append(g){let A=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"normal";this._add(this.current,g,A)}newLine(g){let A=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"normal";this._add(this.current,g,A),this.current++}determineLineHeights(){for(let g=0;gg&&(g=C.width),A+=C.height}this.width=g,this.height=A}removeEmptyBlocks(){const g=[];for(let A=0;A"://,""://,""://,"":/<\/b>/,"":/<\/i>/,"":/<\/code>/,"*":/\*/,_:/_/,"`":/`/,afterBold:/[^*]/,afterItal:/[^_]/,afterMono:/[^`]/};class Iy{constructor(g){this.text=g,this.bold=!1,this.ital=!1,this.mono=!1,this.spacing=!1,this.position=0,this.buffer="",this.modStack=[],this.blocks=[]}mod(){return 0===this.modStack.length?"normal":this.modStack[0]}modName(){return 0===this.modStack.length?"normal":"mono"===this.modStack[0]?"mono":this.bold&&this.ital?"boldital":this.bold?"bold":this.ital?"ital":void 0}emitBlock(){this.spacing&&(this.add(" "),this.spacing=!1),this.buffer.length>0&&(this.blocks.push({text:this.buffer,mod:this.modName()}),this.buffer="")}add(g){" "===g&&(this.spacing=!0),this.spacing&&(this.buffer+=" ",this.spacing=!1)," "!=g&&(this.buffer+=g)}parseWS(g){return!!/[ \t]/.test(g)&&(this.mono?this.add(g):this.spacing=!0,!0)}setTag(g){this.emitBlock(),this[g]=!0,this.modStack.unshift(g)}unsetTag(g){this.emitBlock(),this[g]=!1,this.modStack.shift()}parseStartTag(g,A){return!(this.mono||this[g]||!this.match(A))&&(this.setTag(g),!0)}match(g){let A=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];const t=js(this.prepareRegExp(g),2),C=t[0],I=t[1],e=C.test(this.text.substr(this.position,I));return e&&A&&(this.position+=I-1),e}parseEndTag(g,A,t){let C=this.mod()===g;return C="mono"===g?C&&this.mono:C&&!this.mono,!(!C||!this.match(A))&&(void 0!==t?(this.position===this.text.length-1||this.match(t,!1))&&this.unsetTag(g):this.unsetTag(g),!0)}replace(g,A){return!!this.match(g)&&(this.add(A),this.position+=length-1,!0)}prepareRegExp(g){let A,t;if(g instanceof RegExp)t=g,A=1;else{const C=Cy[g];t=void 0!==C?C:new RegExp(g),A=g.length}return[t,A]}}class ey{constructor(g,A,t,C){this.ctx=g,this.parent=A,this.selected=t,this.hover=C;this.lines=new ty((A,I)=>{if(void 0===A)return 0;const e=this.parent.getFormattingValues(g,t,C,I);let i=0;if(""!==A){i=this.ctx.measureText(A).width}return{width:i,values:e}})}process(g){if(!pm(g))return this.lines.finalize();const A=this.parent.fontOptions;g=(g=g.replace(/\r\n/g,"\n")).replace(/\r/g,"\n");const t=String(g).split("\n"),C=t.length;if(A.multi)for(let g=0;g0)for(let g=0;g0)for(let g=0;g{if(/&/.test(g)){return A.replace(A.text,"<","<")||A.replace(A.text,"&","&")||A.add("&"),!0}return!1};for(;A.position")||A.parseStartTag("ital","")||A.parseStartTag("mono","")||A.parseEndTag("bold","
    ")||A.parseEndTag("ital","")||A.parseEndTag("mono",""))||t(g)||A.add(g),A.position++}return A.emitBlock(),A.blocks}splitMarkdownBlocks(g){const A=new Iy(g);let t=!0;const C=g=>!!/\\/.test(g)&&(A.positionthis.parent.fontOptions.maxWdt}getLongestFit(g){let A="",t=0;for(;t1&&void 0!==arguments[1]?arguments[1]:"normal",t=arguments.length>2&&void 0!==arguments[2]&&arguments[2];this.parent.getFormattingValues(this.ctx,this.selected,this.hover,A);let C=(g=(g=g.replace(/^( +)/g,"$1\r")).replace(/([^\r][^ ]*)( +)/g,"$1\r$2\r")).split("\r");for(;C.length>0;){let g=this.getLongestFit(C);if(0===g){const g=C[0],t=this.getLongestFitWord(g);this.lines.newLine($s(g).call(g,0,t),A),C[0]=$s(g).call(g,t)}else{let I=g;" "===C[g-1]?g--:" "===C[I]&&I++;const e=$s(C).call(C,0,g).join("");g==C.length&&t?this.lines.append(e,A):this.lines.newLine(e,A),C=$s(C).call(C,I)}}}}const iy=["bold","ital","boldital","mono"];class oy{constructor(g,A){let t=arguments.length>2&&void 0!==arguments[2]&&arguments[2];this.body=g,this.pointToSelf=!1,this.baseSize=void 0,this.fontOptions={},this.setOptions(A),this.size={top:0,left:0,width:0,height:0,yLine:0},this.isEdgeLabel=t}setOptions(g){if(this.elementOptions=g,this.initFontOptions(g.font),pm(g.label)?this.labelDirty=!0:g.label=void 0,void 0!==g.font&&null!==g.font)if("string"==typeof g.font)this.baseSize=this.fontOptions.size;else if("object"==typeof g.font){const A=g.font.size;void 0!==A&&(this.baseSize=A)}}initFontOptions(g){hp(iy,g=>{this.fontOptions[g]={}}),oy.parseFontString(this.fontOptions,g)?this.fontOptions.vadjust=0:hp(g,(g,A)=>{null!=g&&"object"!=typeof g&&(this.fontOptions[A]=g)})}static parseFontString(g,A){if(!A||"string"!=typeof A)return!1;const t=A.split(" ");return g.size=+t[0].replace("px",""),g.face=t[1],g.color=t[2],!0}constrain(g){const A={constrainWidth:!1,maxWdt:-1,minWdt:-1,constrainHeight:!1,minHgt:-1,valign:"middle"},t=Op(g,"widthConstraint");if("number"==typeof t)A.maxWdt=Number(t),A.minWdt=Number(t);else if("object"==typeof t){const t=Op(g,["widthConstraint","maximum"]);"number"==typeof t&&(A.maxWdt=Number(t));const C=Op(g,["widthConstraint","minimum"]);"number"==typeof C&&(A.minWdt=Number(C))}const C=Op(g,"heightConstraint");if("number"==typeof C)A.minHgt=Number(C);else if("object"==typeof C){const t=Op(g,["heightConstraint","minimum"]);"number"==typeof t&&(A.minHgt=Number(t));const C=Op(g,["heightConstraint","valign"]);"string"==typeof C&&("top"!==C&&"bottom"!==C||(A.valign=C))}return A}update(g,A){this.setOptions(g,!0),this.propagateFonts(A),sp(this.fontOptions,this.constrain(A)),this.fontOptions.chooser=cm("label",A)}adjustSizes(g){const A=g?g.right+g.left:0;this.fontOptions.constrainWidth&&(this.fontOptions.maxWdt-=A,this.fontOptions.minWdt-=A);const t=g?g.top+g.bottom:0;this.fontOptions.constrainHeight&&(this.fontOptions.minHgt-=t)}addFontOptionsToPile(g,A){for(let t=0;t{void 0!==g&&(Object.prototype.hasOwnProperty.call(A,t)||(-1!==Jh(iy).call(iy,t)?A[t]={}:A[t]=g))})}return A}getFontOption(g,A,t){let C;for(let I=0;I{C[A]=g}),C.size=Number(C.size),C.vadjust=Number(C.vadjust)}}draw(g,A,t,C,I){let e=arguments.length>5&&void 0!==arguments[5]?arguments[5]:"middle";if(void 0===this.elementOptions.label)return;let i=this.fontOptions.size*this.body.view.scale;this.elementOptions.label&&i=this.elementOptions.scaling.label.maxVisible&&(i=Number(this.elementOptions.scaling.label.maxVisible)/this.body.view.scale),this.calculateLabelSize(g,C,I,A,t,e),this._drawBackground(g),this._drawText(g,A,this.size.yLine,e,i))}_drawBackground(g){if(void 0!==this.fontOptions.background&&"none"!==this.fontOptions.background){g.fillStyle=this.fontOptions.background;const A=this.getSize();g.fillRect(A.left,A.top,A.width,A.height)}}_drawText(g,A,t){let C=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"middle",I=arguments.length>4?arguments[4]:void 0;var e=js(this._setAlignment(g,A,t,C),2);A=e[0],t=e[1],g.textAlign="left",A-=this.size.width/2,this.fontOptions.valign&&this.size.height>this.size.labelHeight&&("top"===this.fontOptions.valign&&(t-=(this.size.height-this.size.labelHeight)/2),"bottom"===this.fontOptions.valign&&(t+=(this.size.height-this.size.labelHeight)/2));for(let C=0;C0&&(g.lineWidth=o.strokeWidth,g.strokeStyle=r,g.lineJoin="round"),g.fillStyle=s,o.strokeWidth>0&&g.strokeText(o.text,A+C,t+o.vadjust),g.fillText(o.text,A+C,t+o.vadjust),C+=o.width}t+=e.height}}}_setAlignment(g,A,t,C){if(this.isEdgeLabel&&"horizontal"!==this.fontOptions.align&&!1===this.pointToSelf){A=0,t=0;const C=2;"top"===this.fontOptions.align?(g.textBaseline="alphabetic",t-=2*C):"bottom"===this.fontOptions.align?(g.textBaseline="hanging",t+=2*C):g.textBaseline="middle"}else g.textBaseline=C;return[A,t]}_getColor(g,A,t){let C=g||"#000000",I=t||"#ffffff";if(A<=this.elementOptions.scaling.label.drawThreshold){const g=Math.max(0,Math.min(1,1-(this.elementOptions.scaling.label.drawThreshold-A)));C=cp(C,g),I=cp(I,g)}return[C,I]}getTextSize(g){let A=arguments.length>1&&void 0!==arguments[1]&&arguments[1],t=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return this._processLabel(g,A,t),{width:this.size.width,height:this.size.height,lineCount:this.lineCount}}getSize(){let g=this.size.left,A=this.size.top-1;if(this.isEdgeLabel){const t=.5*-this.size.width;switch(this.fontOptions.align){case"middle":g=t,A=.5*-this.size.height;break;case"top":g=t,A=-(this.size.height+2);break;case"bottom":g=t,A=2}}return{left:g,top:A,width:this.size.width,height:this.size.height}}calculateLabelSize(g,A,t){let C=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,I=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,e=arguments.length>5&&void 0!==arguments[5]?arguments[5]:"middle";this._processLabel(g,A,t),this.size.left=C-.5*this.size.width,this.size.top=I-.5*this.size.height,this.size.yLine=I+.5*(1-this.lineCount)*this.fontOptions.size,"hanging"===e&&(this.size.top+=.5*this.fontOptions.size,this.size.top+=4,this.size.yLine+=4)}getFormattingValues(g,A,t,C){const I=function(g,A,t){return"normal"===A?"mod"===t?"":g[t]:void 0!==g[A][t]?g[A][t]:g[t]},e={color:I(this.fontOptions,C,"color"),size:I(this.fontOptions,C,"size"),face:I(this.fontOptions,C,"face"),mod:I(this.fontOptions,C,"mod"),vadjust:I(this.fontOptions,C,"vadjust"),strokeWidth:this.fontOptions.strokeWidth,strokeColor:this.fontOptions.strokeColor};(A||t)&&("normal"===C&&!0===this.fontOptions.chooser&&this.elementOptions.labelHighlightBold?e.mod="bold":"function"==typeof this.fontOptions.chooser&&this.fontOptions.chooser(e,this.elementOptions.id,A,t));let i="";return void 0!==e.mod&&""!==e.mod&&(i+=e.mod+" "),i+=e.size+"px "+e.face,g.font=i.replace(/"/g,""),e.font=g.font,e.height=e.size,e}differentState(g,A){return g!==this.selectedState||A!==this.hoverState}_processLabelText(g,A,t,C){return new ey(g,this,A,t).process(C)}_processLabel(g,A,t){if(!1===this.labelDirty&&!this.differentState(A,t))return;const C=this._processLabelText(g,A,t,this.elementOptions.label);this.fontOptions.minWdt>0&&C.width0&&C.height2&&void 0!==arguments[2]&&arguments[2],C=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},I=arguments.length>4&&void 0!==arguments[4]&&arguments[4];if(op(["endPointOffset","arrowStrikethrough","id","from","hidden","hoverWidth","labelHighlightBold","length","line","opacity","physics","scaling","selectionWidth","selfReferenceSize","selfReference","to","title","value","width","font","chosen","widthConstraint"],g,A,t),void 0!==A.endPointOffset&&void 0!==A.endPointOffset.from&&(mv(A.endPointOffset.from)?g.endPointOffset.from=A.endPointOffset.from:(g.endPointOffset.from=void 0!==C.endPointOffset.from?C.endPointOffset.from:0,console.error("endPointOffset.from is not a valid number"))),void 0!==A.endPointOffset&&void 0!==A.endPointOffset.to&&(mv(A.endPointOffset.to)?g.endPointOffset.to=A.endPointOffset.to:(g.endPointOffset.to=void 0!==C.endPointOffset.to?C.endPointOffset.to:0,console.error("endPointOffset.to is not a valid number"))),pm(A.label)?g.label=A.label:pm(g.label)||(g.label=void 0),xp(g,A,"smooth",C),xp(g,A,"shadow",C),xp(g,A,"background",C),void 0!==A.dashes&&null!==A.dashes?g.dashes=A.dashes:!0===t&&null===A.dashes&&(g.dashes=hl(C.dashes)),void 0!==A.scaling&&null!==A.scaling?(void 0!==A.scaling.min&&(g.scaling.min=A.scaling.min),void 0!==A.scaling.max&&(g.scaling.max=A.scaling.max),xp(g.scaling,A.scaling,"label",C.scaling)):!0===t&&null===A.scaling&&(g.scaling=hl(C.scaling)),void 0!==A.arrows&&null!==A.arrows)if("string"==typeof A.arrows){const t=A.arrows.toLowerCase();g.arrows.to.enabled=-1!=Jh(t).call(t,"to"),g.arrows.middle.enabled=-1!=Jh(t).call(t,"middle"),g.arrows.from.enabled=-1!=Jh(t).call(t,"from")}else{if("object"!=typeof A.arrows)throw new Error("The arrow newOptions can only be an object or a string. Refer to the documentation. You used:"+Tl(A.arrows));xp(g.arrows,A.arrows,"to",C.arrows),xp(g.arrows,A.arrows,"middle",C.arrows),xp(g.arrows,A.arrows,"from",C.arrows)}else!0===t&&null===A.arrows&&(g.arrows=hl(C.arrows));if(void 0!==A.color&&null!==A.color){const e=Cp(A.color)?{color:A.color,highlight:A.color,hover:A.color,inherit:!1,opacity:1}:A.color,i=g.color;if(I)sp(i,C.color,!1,t);else for(const g in i)Object.prototype.hasOwnProperty.call(i,g)&&delete i[g];if(Cp(i))i.color=i,i.highlight=i,i.hover=i,i.inherit=!1,void 0===e.opacity&&(i.opacity=1);else{let g=!1;void 0!==e.color&&(i.color=e.color,g=!0),void 0!==e.highlight&&(i.highlight=e.highlight,g=!0),void 0!==e.hover&&(i.hover=e.hover,g=!0),void 0!==e.inherit&&(i.inherit=e.inherit),void 0!==e.opacity&&(i.opacity=Math.min(1,Math.max(0,e.opacity))),!0===g?i.inherit=!1:void 0===i.inherit&&(i.inherit="from")}}else!0===t&&null===A.color&&(g.color=wp(C.color));!0===t&&null===A.font&&(g.font=wp(C.font)),Object.prototype.hasOwnProperty.call(A,"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}"),g.selfReference.size=A.selfReferenceSize)}getFormattingValues(){const g=!0===this.options.arrows.to||!0===this.options.arrows.to.enabled,A=!0===this.options.arrows.from||!0===this.options.arrows.from.enabled,t=!0===this.options.arrows.middle||!0===this.options.arrows.middle.enabled,C=this.options.color.inherit,I={toArrow:g,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:t,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:A,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:C?void 0:this.options.color.color,inheritsColor:C,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){const g=this.options.selectionWidth;"function"==typeof g?I.width=g(I.width):"number"==typeof g&&(I.width+=g),I.width=Math.max(I.width,.3/this.body.view.scale),I.color=this.options.color.highlight,I.shadow=this.options.shadow.enabled}else if(this.hover){const g=this.options.hoverWidth;"function"==typeof g?I.width=g(I.width):"number"==typeof g&&(I.width+=g),I.width=Math.max(I.width,.3/this.body.view.scale),I.color=this.options.color.hover,I.shadow=this.options.shadow.enabled}}else"function"==typeof this.chooser&&(this.chooser(I,this.options.id,this.selected,this.hover),void 0!==I.color&&(I.inheritsColor=!1),!1===I.shadow&&(I.shadowColor===this.options.shadow.color&&I.shadowSize===this.options.shadow.size&&I.shadowX===this.options.shadow.x&&I.shadowY===this.options.shadow.y||(I.shadow=!0)));else I.shadow=this.options.shadow.enabled,I.width=Math.max(I.width,.3/this.body.view.scale);return I}updateLabelModule(g){const A=[g,this.options,this.globalOptions,this.defaultOptions];this.labelModule.update(this.options,A),void 0!==this.labelModule.baseSize&&(this.baseFontSize=this.labelModule.baseSize)}updateEdgeType(){const g=this.options.smooth;let A=!1,t=!0;return void 0!==this.edgeType&&((this.edgeType instanceof Gm&&!0===g.enabled&&"dynamic"===g.type||this.edgeType instanceof Vm&&!0===g.enabled&&"cubicBezier"===g.type||this.edgeType instanceof jm&&!0===g.enabled&&"dynamic"!==g.type&&"cubicBezier"!==g.type||this.edgeType instanceof Ym&&!1===g.type.enabled)&&(t=!1),!0===t&&(A=this.cleanup())),!0===t?!0===g.enabled?"dynamic"===g.type?(A=!0,this.edgeType=new Gm(this.options,this.body,this.labelModule)):"cubicBezier"===g.type?this.edgeType=new Vm(this.options,this.body,this.labelModule):this.edgeType=new jm(this.options,this.body,this.labelModule):this.edgeType=new Ym(this.options,this.body,this.labelModule):this.edgeType.setOptions(this.options),A}connect(){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()}disconnect(){this.from&&(this.from.detachEdge(this),this.from=void 0),this.to&&(this.to.detachEdge(this),this.to=void 0),this.connected=!1}getTitle(){return this.title}isSelected(){return this.selected}getValue(){return this.options.value}setValueRange(g,A,t){if(void 0!==this.options.value){const C=this.options.scaling.customScalingFunction(g,A,t,this.options.value),I=this.options.scaling.max-this.options.scaling.min;if(!0===this.options.scaling.label.enabled){const g=this.options.scaling.label.max-this.options.scaling.label.min;this.options.font.size=this.options.scaling.label.min+C*g}this.options.width=this.options.scaling.min+C*I}else this.options.width=this.baseWidth,this.options.font.size=this.baseFontSize;this._setInteractionWidths(),this.updateLabelModule()}_setInteractionWidths(){"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}draw(g){const A=this.getFormattingValues();if(A.hidden)return;const t=this.edgeType.getViaNode();this.edgeType.drawLine(g,A,this.selected,this.hover,t),this.drawLabel(g,t)}drawArrows(g){const A=this.getFormattingValues();if(A.hidden)return;const t=this.edgeType.getViaNode(),C={};this.edgeType.fromPoint=this.edgeType.from,this.edgeType.toPoint=this.edgeType.to,A.fromArrow&&(C.from=this.edgeType.getArrowData(g,"from",t,this.selected,this.hover,A),!1===A.arrowStrikethrough&&(this.edgeType.fromPoint=C.from.core),A.fromArrowSrc&&(C.from.image=this.imagelist.load(A.fromArrowSrc)),A.fromArrowImageWidth&&(C.from.imageWidth=A.fromArrowImageWidth),A.fromArrowImageHeight&&(C.from.imageHeight=A.fromArrowImageHeight)),A.toArrow&&(C.to=this.edgeType.getArrowData(g,"to",t,this.selected,this.hover,A),!1===A.arrowStrikethrough&&(this.edgeType.toPoint=C.to.core),A.toArrowSrc&&(C.to.image=this.imagelist.load(A.toArrowSrc)),A.toArrowImageWidth&&(C.to.imageWidth=A.toArrowImageWidth),A.toArrowImageHeight&&(C.to.imageHeight=A.toArrowImageHeight)),A.middleArrow&&(C.middle=this.edgeType.getArrowData(g,"middle",t,this.selected,this.hover,A),A.middleArrowSrc&&(C.middle.image=this.imagelist.load(A.middleArrowSrc)),A.middleArrowImageWidth&&(C.middle.imageWidth=A.middleArrowImageWidth),A.middleArrowImageHeight&&(C.middle.imageHeight=A.middleArrowImageHeight)),A.fromArrow&&this.edgeType.drawArrowHead(g,A,this.selected,this.hover,C.from),A.middleArrow&&this.edgeType.drawArrowHead(g,A,this.selected,this.hover,C.middle),A.toArrow&&this.edgeType.drawArrowHead(g,A,this.selected,this.hover,C.to)}drawLabel(g,A){if(void 0!==this.options.label){const t=this.from,C=this.to;let I;if(this.labelModule.differentState(this.selected,this.hover)&&this.labelModule.getTextSize(g,this.selected,this.hover),t.id!=C.id){this.labelModule.pointToSelf=!1,I=this.edgeType.getPoint(.5,A),g.save();const t=this._getRotation(g);0!=t.angle&&(g.translate(t.x,t.y),g.rotate(t.angle)),this.labelModule.draw(g,I.x,I.y,this.selected,this.hover),g.restore()}else{this.labelModule.pointToSelf=!0;const A=fm(g,this.options.selfReference.angle,this.options.selfReference.size,t);I=this._pointOnCircle(A.x,A.y,this.options.selfReference.size,this.options.selfReference.angle),this.labelModule.draw(g,I.x,I.y,this.selected,this.hover)}}}getItemsOnPoint(g){const A=[];if(this.labelModule.visible()){const t=this._getRotation();um(this.labelModule.getSize(),g,t)&&A.push({edgeId:this.id,labelId:0})}const t={left:g.x,top:g.y};return this.isOverlappingWith(t)&&A.push({edgeId:this.id}),A}isOverlappingWith(g){if(this.connected){const A=10,t=this.from.x,C=this.from.y,I=this.to.x,e=this.to.y,i=g.left,o=g.top;return this.edgeType.getDistanceToEdge(t,C,I,e,i,o)0&&e<0)&&(i+=Math.PI),C.angle=i,C}_pointOnCircle(g,A,t,C){return{x:g+t*Math.cos(C),y:A-t*Math.sin(C)}}select(){this.selected=!0}unselect(){this.selected=!1}cleanup(){return this.edgeType.cleanup()}remove(){this.cleanup(),this.disconnect(),delete this.body.edges[this.id]}endPointsValid(){return void 0!==this.body.nodes[this.fromId]&&void 0!==this.body.nodes[this.toId]}}var sy,ry,ay,dy,hy,ly,cy,uy={};function py(){if(sy)return uy;sy=1;var g=st(),A=y(),t=jI().f;return g({target:"Object",stat:!0,forced:A(function(){return!Object.getOwnPropertyNames(1)})},{getOwnPropertyNames:t}),uy}function fy(){if(ay)return ry;ay=1,py();var g=Tg().Object;return ry=function(A){return g.getOwnPropertyNames(A)},ry}function vy(){return hy?dy:(hy=1,dy=fy())}var by=C(cy?ly:(cy=1,ly=vy()));class my{constructor(g,A,t){this.body=A,this.labelModule=t,this.setOptions(g),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}}setOptions(g){this.options=g}_setMargins(g){this.margin={},this.options.margin&&("object"==typeof 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)),g.adjustSizes(this.margin)}_distanceToBorder(g,A){const t=this.options.borderWidth;return g&&this.resize(g),Math.min(Math.abs(this.width/2/Math.cos(A)),Math.abs(this.height/2/Math.sin(A)))+t}enableShadow(g,A){A.shadow&&(g.shadowColor=A.shadowColor,g.shadowBlur=A.shadowSize,g.shadowOffsetX=A.shadowX,g.shadowOffsetY=A.shadowY)}disableShadow(g,A){A.shadow&&(g.shadowColor="rgba(0,0,0,0)",g.shadowBlur=0,g.shadowOffsetX=0,g.shadowOffsetY=0)}enableBorderDashes(g,A){if(!1!==A.borderDashes)if(void 0!==g.setLineDash){let t=A.borderDashes;!0===t&&(t=[5,15]),g.setLineDash(t)}else console.warn("setLineDash is not supported in this browser. The dashed borders cannot be used."),this.options.shapeProperties.borderDashes=!1,A.borderDashes=!1}disableBorderDashes(g,A){!1!==A.borderDashes&&(void 0!==g.setLineDash?g.setLineDash([0]):(console.warn("setLineDash is not supported in this browser. The dashed borders cannot be used."),this.options.shapeProperties.borderDashes=!1,A.borderDashes=!1))}needsRefresh(g,A){return!0===this.refreshNeeded?(this.refreshNeeded=!1,!0):void 0===this.width||this.labelModule.differentState(g,A)}initContextForDraw(g,A){const t=A.borderWidth/this.body.view.scale;g.lineWidth=Math.min(this.width,t),g.strokeStyle=A.borderColor,g.fillStyle=A.color}performStroke(g,A){const t=A.borderWidth/this.body.view.scale;g.save(),t>0&&(this.enableBorderDashes(g,A),g.stroke(),this.disableBorderDashes(g,A)),g.restore()}performFill(g,A){g.save(),g.fillStyle=A.color,this.enableShadow(g,A),ic(g).call(g),this.disableShadow(g,A),g.restore(),this.performStroke(g,A)}_addBoundingBoxMargin(g){this.boundingBox.left-=g,this.boundingBox.top-=g,this.boundingBox.bottom+=g,this.boundingBox.right+=g}_updateBoundingBox(g,A,t,C,I){void 0!==t&&this.resize(t,C,I),this.left=g-this.width/2,this.top=A-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}updateBoundingBox(g,A,t,C,I){this._updateBoundingBox(g,A,t,C,I)}getDimensionsFromLabel(g,A,t){this.textSize=this.labelModule.getTextSize(g,A,t);let C=this.textSize.width,I=this.textSize.height;return 0===C&&(C=14,I=14),{width:C,height:I}}}class yy extends my{constructor(g,A,t){super(g,A,t),this._setMargins(t)}resize(g){let A=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(this.needsRefresh(A,t)){const C=this.getDimensionsFromLabel(g,A,t);this.width=C.width+this.margin.right+this.margin.left,this.height=C.height+this.margin.top+this.margin.bottom,this.radius=this.width/2}}draw(g,A,t,C,I,e){this.resize(g,C,I),this.left=A-this.width/2,this.top=t-this.height/2,this.initContextForDraw(g,e),iC(g,this.left,this.top,this.width,this.height,e.borderRadius),this.performFill(g,e),this.updateBoundingBox(A,t,g,C,I),this.labelModule.draw(g,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,C,I)}updateBoundingBox(g,A,t,C,I){this._updateBoundingBox(g,A,t,C,I);const e=this.options.shapeProperties.borderRadius;this._addBoundingBoxMargin(e)}distanceToBorder(g,A){g&&this.resize(g);const t=this.options.borderWidth;return Math.min(Math.abs(this.width/2/Math.cos(A)),Math.abs(this.height/2/Math.sin(A)))+t}}class wy extends my{constructor(g,A,t){super(g,A,t),this.labelOffset=0,this.selected=!1}setOptions(g,A,t){this.options=g,void 0===A&&void 0===t||this.setImages(A,t)}setImages(g,A){A&&this.selected?(this.imageObj=A,this.imageObjAlt=g):(this.imageObj=g,this.imageObjAlt=A)}switchImages(g){const A=g&&!this.selected||!g&&this.selected;if(this.selected=g,void 0!==this.imageObjAlt&&A){const g=this.imageObj;this.imageObj=this.imageObjAlt,this.imageObjAlt=g}}_getImagePadding(){const g={top:0,right:0,bottom:0,left:0};if(this.options.imagePadding){const A=this.options.imagePadding;"object"==typeof A?(g.top=A.top,g.right=A.right,g.bottom=A.bottom,g.left=A.left):(g.top=A,g.right=A,g.bottom=A,g.left=A)}return g}_resizeImage(){let g,A;if(!1===this.options.shapeProperties.useImageSize){let t=1,C=1;this.imageObj.width&&this.imageObj.height&&(this.imageObj.width>this.imageObj.height?t=this.imageObj.width/this.imageObj.height:C=this.imageObj.height/this.imageObj.width),g=2*this.options.size*t,A=2*this.options.size*C}else{const t=this._getImagePadding();g=this.imageObj.width+t.left+t.right,A=this.imageObj.height+t.top+t.bottom}this.width=g,this.height=A,this.radius=.5*this.width}_drawRawCircle(g,A,t,C){this.initContextForDraw(g,C),eC(g,A,t,C.size),this.performFill(g,C)}_drawImageAtPosition(g,A){if(0!=this.imageObj.width){g.globalAlpha=void 0!==A.opacity?A.opacity:1,this.enableShadow(g,A);let t=1;!0===this.options.shapeProperties.interpolation&&(t=this.imageObj.width/this.width/this.body.view.scale);const C=this._getImagePadding(),I=this.left+C.left,e=this.top+C.top,i=this.width-C.left-C.right,o=this.height-C.top-C.bottom;this.imageObj.drawImageAtPosition(g,t,I,e,i,o),this.disableShadow(g,A)}}_drawImageLabel(g,A,t,C,I){let e=0;if(void 0!==this.height){e=.5*this.height;const A=this.labelModule.getTextSize(g,C,I);A.lineCount>=1&&(e+=A.height/2)}const i=t+e;this.options.label&&(this.labelOffset=e),this.labelModule.draw(g,A,i,C,I,"hanging")}}class xy extends wy{constructor(g,A,t){super(g,A,t),this._setMargins(t)}resize(g){let A=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(this.needsRefresh(A,t)){const C=this.getDimensionsFromLabel(g,A,t),I=Math.max(C.width+this.margin.right+this.margin.left,C.height+this.margin.top+this.margin.bottom);this.options.size=I/2,this.width=I,this.height=I,this.radius=this.width/2}}draw(g,A,t,C,I,e){this.resize(g,C,I),this.left=A-this.width/2,this.top=t-this.height/2,this._drawRawCircle(g,A,t,e),this.updateBoundingBox(A,t),this.labelModule.draw(g,this.left+this.textSize.width/2+this.margin.left,t,C,I)}updateBoundingBox(g,A){this.boundingBox.top=A-this.options.size,this.boundingBox.left=g-this.options.size,this.boundingBox.right=g+this.options.size,this.boundingBox.bottom=A+this.options.size}distanceToBorder(g){return g&&this.resize(g),.5*this.width}}class Ey extends wy{constructor(g,A,t,C,I){super(g,A,t),this.setImages(C,I)}resize(g){let A=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(void 0===this.imageObj.src||void 0===this.imageObj.width||void 0===this.imageObj.height){const g=2*this.options.size;return this.width=g,this.height=g,void(this.radius=.5*this.width)}this.needsRefresh(A,t)&&this._resizeImage()}draw(g,A,t,C,I,e){this.switchImages(C),this.resize();let i=A,o=t;"top-left"===this.options.shapeProperties.coordinateOrigin?(this.left=A,this.top=t,i+=this.width/2,o+=this.height/2):(this.left=A-this.width/2,this.top=t-this.height/2),this._drawRawCircle(g,i,o,e),g.save(),g.clip(),this._drawImageAtPosition(g,e),g.restore(),this._drawImageLabel(g,i,o,C,I),this.updateBoundingBox(A,t)}updateBoundingBox(g,A){"top-left"===this.options.shapeProperties.coordinateOrigin?(this.boundingBox.top=A,this.boundingBox.left=g,this.boundingBox.right=g+2*this.options.size,this.boundingBox.bottom=A+2*this.options.size):(this.boundingBox.top=A-this.options.size,this.boundingBox.left=g-this.options.size,this.boundingBox.right=g+this.options.size,this.boundingBox.bottom=A+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)}distanceToBorder(g){return g&&this.resize(g),.5*this.width}}class Oy extends my{resize(g){let A=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover,C=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{size:this.options.size};if(this.needsRefresh(A,t)){var I,e;this.labelModule.getTextSize(g,A,t);const i=2*C.size;this.width=null!==(I=this.customSizeWidth)&&void 0!==I?I:i,this.height=null!==(e=this.customSizeHeight)&&void 0!==e?e:i,this.radius=.5*this.width}}_drawShape(g,A,t,C,I,e,i,o){var n;return this.resize(g,e,i,o),this.left=C-this.width/2,this.top=I-this.height/2,this.initContextForDraw(g,o),(n=A,Object.prototype.hasOwnProperty.call(rC,n)?rC[n]:function(g){for(var A=arguments.length,t=new Array(A>1?A-1:0),C=1;C{if(void 0!==this.options.label){this.labelModule.calculateLabelSize(g,e,i,C,I,"hanging");const A=I+.5*this.height+.5*this.labelModule.size.height;this.labelModule.draw(g,C,A,e,i,"hanging")}this.updateBoundingBox(C,I)}}}updateBoundingBox(g,A){this.boundingBox.top=A-this.options.size,this.boundingBox.left=g-this.options.size,this.boundingBox.right=g+this.options.size,this.boundingBox.bottom=A+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))}}function Ty(g,A){var t=Fr(g);if(Ob){var C=Ob(g);A&&(C=eh(C).call(C,function(A){return Fb(g,A).enumerable})),t.push.apply(t,C)}return t}function Dy(g){for(var A=1;A{g.save(),A(),g.restore()}}return i.nodeDimensions&&(this.customSizeWidth=i.nodeDimensions.width,this.customSizeHeight=i.nodeDimensions.height),i}distanceToBorder(g,A){return this._distanceToBorder(g,A)}}class ky extends my{constructor(g,A,t){super(g,A,t),this._setMargins(t)}resize(g,A,t){if(this.needsRefresh(A,t)){const C=this.getDimensionsFromLabel(g,A,t).width+this.margin.right+this.margin.left;this.width=C,this.height=C,this.radius=this.width/2}}draw(g,A,t,C,I,e){this.resize(g,C,I),this.left=A-this.width/2,this.top=t-this.height/2,this.initContextForDraw(g,e),nC(g,A-this.width/2,t-this.height/2,this.width,this.height),this.performFill(g,e),this.updateBoundingBox(A,t,g,C,I),this.labelModule.draw(g,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,C,I)}distanceToBorder(g,A){return this._distanceToBorder(g,A)}}class Ry extends Oy{draw(g,A,t,C,I,e){return this._drawShape(g,"diamond",4,A,t,C,I,e)}distanceToBorder(g,A){return this._distanceToBorder(g,A)}}class Py extends Oy{draw(g,A,t,C,I,e){return this._drawShape(g,"circle",2,A,t,C,I,e)}distanceToBorder(g){return g&&this.resize(g),this.options.size}}class My extends my{resize(g){let A=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(this.needsRefresh(A,t)){const C=this.getDimensionsFromLabel(g,A,t);this.height=2*C.height,this.width=C.width+C.height,this.radius=.5*this.width}}draw(g,A,t,C,I,e){this.resize(g,C,I),this.left=A-.5*this.width,this.top=t-.5*this.height,this.initContextForDraw(g,e),oC(g,this.left,this.top,this.width,this.height),this.performFill(g,e),this.updateBoundingBox(A,t,g,C,I),this.labelModule.draw(g,A,t,C,I)}distanceToBorder(g,A){g&&this.resize(g);const t=.5*this.width,C=.5*this.height,I=Math.sin(A)*t,e=Math.cos(A)*C;return t*C/Math.sqrt(I*I+e*e)}}class zy extends Oy{draw(g,A,t,C,I,e){return this._drawShape(g,"hexagon",4,A,t,C,I,e)}distanceToBorder(g,A){return this._distanceToBorder(g,A)}}class By extends my{constructor(g,A,t){super(g,A,t),this._setMargins(t)}resize(g,A,t){this.needsRefresh(A,t)&&(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)}draw(g,A,t,C,I,e){return this.resize(g,C,I),this.options.icon.size=this.options.icon.size||50,this.left=A-this.width/2,this.top=t-this.height/2,this._icon(g,A,t,C,I,e),{drawExternalLabel:()=>{if(void 0!==this.options.label){const A=5;this.labelModule.draw(g,this.left+this.iconSize.width/2+this.margin.left,t+this.height/2+A,C)}this.updateBoundingBox(A,t)}}}updateBoundingBox(g,A){if(this.boundingBox.top=A-.5*this.options.icon.size,this.boundingBox.left=g-.5*this.options.icon.size,this.boundingBox.right=g+.5*this.options.icon.size,this.boundingBox.bottom=A+.5*this.options.icon.size,void 0!==this.options.label&&this.labelModule.size.width>0){const g=5;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+g)}}_icon(g,A,t,C,I,e){const i=Number(this.options.icon.size);void 0!==this.options.icon.code?(g.font=[null!=this.options.icon.weight?this.options.icon.weight:C?"bold":"",(null!=this.options.icon.weight&&C?5:0)+i+"px",this.options.icon.face].join(" "),g.fillStyle=this.options.icon.color||"black",g.textAlign="center",g.textBaseline="middle",this.enableShadow(g,e),g.fillText(this.options.icon.code,A,t),this.disableShadow(g,e)):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.")}distanceToBorder(g,A){return this._distanceToBorder(g,A)}}let Zy=class extends wy{constructor(g,A,t,C,I){super(g,A,t),this.setImages(C,I)}resize(g){let A=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(void 0===this.imageObj.src||void 0===this.imageObj.width||void 0===this.imageObj.height){const g=2*this.options.size;return this.width=g,void(this.height=g)}this.needsRefresh(A,t)&&this._resizeImage()}draw(g,A,t,C,I,e){g.save(),this.switchImages(C),this.resize();let i=A,o=t;if("top-left"===this.options.shapeProperties.coordinateOrigin?(this.left=A,this.top=t,i+=this.width/2,o+=this.height/2):(this.left=A-this.width/2,this.top=t-this.height/2),!0===this.options.shapeProperties.useBorderWithImage){const A=this.options.borderWidth,t=this.options.borderWidthSelected||2*this.options.borderWidth,i=(C?t:A)/this.body.view.scale;g.lineWidth=Math.min(this.width,i),g.beginPath();let o=C?this.options.color.highlight.border:I?this.options.color.hover.border:this.options.color.border,n=C?this.options.color.highlight.background:I?this.options.color.hover.background:this.options.color.background;void 0!==e.opacity&&(o=cp(o,e.opacity),n=cp(n,e.opacity)),g.strokeStyle=o,g.fillStyle=n,g.rect(this.left-.5*g.lineWidth,this.top-.5*g.lineWidth,this.width+g.lineWidth,this.height+g.lineWidth),ic(g).call(g),this.performStroke(g,e),g.closePath()}this._drawImageAtPosition(g,e),this._drawImageLabel(g,i,o,C,I),this.updateBoundingBox(A,t),g.restore()}updateBoundingBox(g,A){this.resize(),"top-left"===this.options.shapeProperties.coordinateOrigin?(this.left=g,this.top=A):(this.left=g-this.width/2,this.top=A-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))}distanceToBorder(g,A){return this._distanceToBorder(g,A)}};class Sy extends Oy{draw(g,A,t,C,I,e){return this._drawShape(g,"square",2,A,t,C,I,e)}distanceToBorder(g,A){return this._distanceToBorder(g,A)}}class Fy extends Oy{draw(g,A,t,C,I,e){return this._drawShape(g,"star",4,A,t,C,I,e)}distanceToBorder(g,A){return this._distanceToBorder(g,A)}}class Gy extends my{constructor(g,A,t){super(g,A,t),this._setMargins(t)}resize(g,A,t){this.needsRefresh(A,t)&&(this.textSize=this.labelModule.getTextSize(g,A,t),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)}draw(g,A,t,C,I,e){this.resize(g,C,I),this.left=A-this.width/2,this.top=t-this.height/2,this.enableShadow(g,e),this.labelModule.draw(g,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,C,I),this.disableShadow(g,e),this.updateBoundingBox(A,t,g,C,I)}distanceToBorder(g,A){return this._distanceToBorder(g,A)}}class jy extends Oy{draw(g,A,t,C,I,e){return this._drawShape(g,"triangle",3,A,t,C,I,e)}distanceToBorder(g,A){return this._distanceToBorder(g,A)}}class Ly extends Oy{draw(g,A,t,C,I,e){return this._drawShape(g,"triangleDown",3,A,t,C,I,e)}distanceToBorder(g,A){return this._distanceToBorder(g,A)}}function Vy(g,A){var t=Fr(g);if(Ob){var C=Ob(g);A&&(C=eh(C).call(C,function(A){return Fb(g,A).enumerable})),t.push.apply(t,C)}return t}function Yy(g){for(var A=1;Anull!=A[g]);i.push("font"),np(i,g,e),g.color=pp(g.color)}static parseOptions(g,A){let t=arguments.length>2&&void 0!==arguments[2]&&arguments[2],C=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},I=arguments.length>4?arguments[4]:void 0;if(np(["color","fixed","shadow"],g,A,t),Wy.checkMass(A),void 0!==g.opacity&&(Wy.checkOpacity(g.opacity)||(console.error("Invalid option for node opacity. Value must be between 0 and 1, found: "+g.opacity),g.opacity=void 0)),void 0!==A.opacity&&(Wy.checkOpacity(A.opacity)||(console.error("Invalid option for node opacity. Value must be between 0 and 1, found: "+A.opacity),A.opacity=void 0)),A.shapeProperties&&!Wy.checkCoordinateOrigin(A.shapeProperties.coordinateOrigin)&&console.error("Invalid option for node coordinateOrigin, found: "+A.shapeProperties.coordinateOrigin),xp(g,A,"shadow",C),void 0!==A.color&&null!==A.color){const t=pp(A.color);ip(g.color,t)}else!0===t&&null===A.color&&(g.color=wp(C.color));void 0!==A.fixed&&null!==A.fixed&&("boolean"==typeof A.fixed?(g.fixed.x=A.fixed,g.fixed.y=A.fixed):(void 0!==A.fixed.x&&"boolean"==typeof A.fixed.x&&(g.fixed.x=A.fixed.x),void 0!==A.fixed.y&&"boolean"==typeof A.fixed.y&&(g.fixed.y=A.fixed.y))),!0===t&&null===A.font&&(g.font=wp(C.font)),Wy.updateGroupOptions(g,A,I),void 0!==A.scaling&&xp(g.scaling,A.scaling,"label",C.scaling)}getFormattingValues(){const g={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?g.borderWidth=this.options.borderWidthSelected:g.borderWidth*=2,g.color=this.options.color.highlight.background,g.borderColor=this.options.color.highlight.border,g.shadow=this.options.shadow.enabled):this.hover&&(g.color=this.options.color.hover.background,g.borderColor=this.options.color.hover.border,g.shadow=this.options.shadow.enabled):"function"==typeof this.chooser&&(this.chooser(g,this.options.id,this.selected,this.hover),!1===g.shadow&&(g.shadowColor===this.options.shadow.color&&g.shadowSize===this.options.shadow.size&&g.shadowX===this.options.shadow.x&&g.shadowY===this.options.shadow.y||(g.shadow=!0))):g.shadow=this.options.shadow.enabled,void 0!==this.options.opacity){const A=this.options.opacity;g.borderColor=cp(g.borderColor,A),g.color=cp(g.color,A),g.shadowColor=cp(g.shadowColor,A)}return g}updateLabelModule(g){void 0!==this.options.label&&null!==this.options.label||(this.options.label=""),Wy.updateGroupOptions(this.options,Yy(Yy({},g),{},{color:g&&g.color||this._localColor||void 0}),this.grouplist);const A=this.grouplist.get(this.options.group,!1),t=[g,this.options,A,this.globalOptions,this.defaultOptions];this.labelModule.update(this.options,t),void 0!==this.labelModule.baseSize&&(this.baseFontSize=this.labelModule.baseSize)}updateShape(g){if(g===this.options.shape&&this.shape)this.shape.setOptions(this.options,this.imageObj,this.imageObjAlt);else switch(this.options.shape){case"box":this.shape=new yy(this.options,this.body,this.labelModule);break;case"circle":this.shape=new xy(this.options,this.body,this.labelModule);break;case"circularImage":this.shape=new Ey(this.options,this.body,this.labelModule,this.imageObj,this.imageObjAlt);break;case"custom":this.shape=new Ny(this.options,this.body,this.labelModule,this.options.ctxRenderer);break;case"database":this.shape=new ky(this.options,this.body,this.labelModule);break;case"diamond":this.shape=new Ry(this.options,this.body,this.labelModule);break;case"dot":this.shape=new Py(this.options,this.body,this.labelModule);break;case"ellipse":default:this.shape=new My(this.options,this.body,this.labelModule);break;case"icon":this.shape=new By(this.options,this.body,this.labelModule);break;case"image":this.shape=new Zy(this.options,this.body,this.labelModule,this.imageObj,this.imageObjAlt);break;case"square":this.shape=new Sy(this.options,this.body,this.labelModule);break;case"hexagon":this.shape=new zy(this.options,this.body,this.labelModule);break;case"star":this.shape=new Fy(this.options,this.body,this.labelModule);break;case"text":this.shape=new Gy(this.options,this.body,this.labelModule);break;case"triangle":this.shape=new jy(this.options,this.body,this.labelModule);break;case"triangleDown":this.shape=new Ly(this.options,this.body,this.labelModule)}this.needsRefresh()}select(){this.selected=!0,this.needsRefresh()}unselect(){this.selected=!1,this.needsRefresh()}needsRefresh(){this.shape.refreshNeeded=!0}getTitle(){return this.options.title}distanceToBorder(g,A){return this.shape.distanceToBorder(g,A)}isFixed(){return this.options.fixed.x&&this.options.fixed.y}isSelected(){return this.selected}getValue(){return this.options.value}getLabelSize(){return this.labelModule.size()}setValueRange(g,A,t){if(void 0!==this.options.value){const C=this.options.scaling.customScalingFunction(g,A,t,this.options.value),I=this.options.scaling.max-this.options.scaling.min;if(!0===this.options.scaling.label.enabled){const g=this.options.scaling.label.max-this.options.scaling.label.min;this.options.font.size=this.options.scaling.label.min+C*g}this.options.size=this.options.scaling.min+C*I}else this.options.size=this.baseSize,this.options.font.size=this.baseFontSize;this.updateLabelModule()}draw(g){const A=this.getFormattingValues();return this.shape.draw(g,this.x,this.y,this.selected,this.hover,A)||{}}updateBoundingBox(g){this.shape.updateBoundingBox(this.x,this.y,g)}resize(g){const A=this.getFormattingValues();this.shape.resize(g,this.selected,this.hover,A)}getItemsOnPoint(g){const A=[];return this.labelModule.visible()&&um(this.labelModule.getSize(),g)&&A.push({nodeId:this.id,labelId:0}),um(this.shape.boundingBox,g)&&A.push({nodeId:this.id}),A}isOverlappingWith(g){return this.shape.leftg.left&&this.shape.topg.top}isBoundingBoxOverlappingWith(g){return this.shape.boundingBox.leftg.left&&this.shape.boundingBox.topg.top}static checkMass(g,A){if(void 0!==g.mass&&g.mass<=0){let t="";void 0!==A&&(t=" in node id: "+A),console.error("%cNegative or zero mass disallowed"+t+", setting mass to 1.",Sp),g.mass=1}}}class Qy extends Wy{constructor(g,A,t,C,I,e){super(g,A,t,C,I,e),this.isCluster=!0,this.containedNodes={},this.containedEdges={}}_openChildCluster(g){const A=this.body.nodes[g];if(void 0===this.containedNodes[g])throw new Error("node with id: "+g+" not in current cluster");if(!A.isCluster)throw new Error("node with id: "+g+" is not a cluster");delete this.containedNodes[g],hp(A.edges,g=>{delete this.containedEdges[g.id]}),hp(A.containedNodes,(g,A)=>{this.containedNodes[A]=g}),A.containedNodes={},hp(A.containedEdges,(g,A)=>{this.containedEdges[A]=g}),A.containedEdges={},hp(A.edges,g=>{hp(this.edges,A=>{var t,C;const I=Jh(t=A.clusteringEdgeReplacingIds).call(t,g.id);-1!==I&&(hp(g.clusteringEdgeReplacingIds,g=>{A.clusteringEdgeReplacingIds.push(g),this.body.edges[g].edgeReplacedById=A.id}),Va(C=A.clusteringEdgeReplacingIds).call(C,I,1))})}),A.edges=[]}}class Uy{constructor(g){this.body=g,this.clusteredNodes={},this.clusteredEdges={},this.options={},this.defaultOptions={},_t(this.options,this.defaultOptions),this.body.emitter.on("_resetData",()=>{this.clusteredNodes={},this.clusteredEdges={}})}clusterByHubsize(g,A){void 0===g?g=this._getHubSize():"object"==typeof g&&(A=this._checkOptions(g),g=this._getHubSize());const t=[];for(let A=0;A=g&&t.push(C.id)}for(let g=0;g0&&void 0!==arguments[0]?arguments[0]:{},A=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(void 0===g.joinCondition)throw new Error("Cannot call clusterByNodeData without a joinCondition function in the options.");g=this._checkOptions(g);const t={},C={};hp(this.body.nodes,(A,I)=>{A.options&&!0===g.joinCondition(A.options)&&(t[I]=A,hp(A.edges,g=>{void 0===this.clusteredEdges[g.id]&&(C[g.id]=g)}))}),this._cluster(t,C,g,A)}clusterByEdgeCount(g,A){let t=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];A=this._checkOptions(A);const C=[],I={};let e,i,o;for(let t=0;t0&&Fr(s).length>0&&!0===t){const g=function(){for(let g=0;g1&&void 0!==arguments[1])||arguments[1];this.clusterByEdgeCount(1,g,A)}clusterBridges(g){let A=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this.clusterByEdgeCount(2,g,A)}clusterByConnection(g,A){var t;let C=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];if(void 0===g)throw new Error("No nodeId supplied to clusterByConnection!");if(void 0===this.body.nodes[g])throw new Error("The nodeId given to clusterByConnection does not exist!");const I=this.body.nodes[g];void 0===(A=this._checkOptions(A,I)).clusterNodeProperties.x&&(A.clusterNodeProperties.x=I.x),void 0===A.clusterNodeProperties.y&&(A.clusterNodeProperties.y=I.y),void 0===A.clusterNodeProperties.fixed&&(A.clusterNodeProperties.fixed={},A.clusterNodeProperties.fixed.x=I.options.fixed.x,A.clusterNodeProperties.fixed.y=I.options.fixed.y);const e={},i={},o=I.id,n=Ff.cloneOptions(I);e[o]=I;for(let g=0;g-1&&(i[t.id]=t)}}this._cluster(e,i,A,C)}_createClusterEdges(g,A,t,C){let I,e,i,o,n,s;const r=Fr(g),a=[];for(let C=0;C0&&void 0!==arguments[0]?arguments[0]:{};return void 0===g.clusterEdgeProperties&&(g.clusterEdgeProperties={}),void 0===g.clusterNodeProperties&&(g.clusterNodeProperties={}),g}_cluster(g,A,t){let C=!(arguments.length>3&&void 0!==arguments[3])||arguments[3];const I=[];for(const A in g)Object.prototype.hasOwnProperty.call(g,A)&&void 0!==this.clusteredNodes[A]&&I.push(A);for(let A=0;AI?t.x:I,e=t.yi?t.y:i;return{x:.5*(C+I),y:.5*(e+i)}}openCluster(g,A){let t=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];if(void 0===g)throw new Error("No clusterNodeId supplied to openCluster.");const C=this.body.nodes[g];if(void 0===C)throw new Error("The clusterNodeId supplied to openCluster does not exist.");if(!0!==C.isCluster||void 0===C.containedNodes||void 0===C.containedEdges)throw new Error("The node:"+g+" is not a valid cluster.");const I=this.findNode(g),e=Jh(I).call(I,g)-1;if(e>=0){const A=I[e];return this.body.nodes[A]._openChildCluster(g),delete this.body.nodes[g],void(!0===t&&this.body.emitter.emit("_dataChanged"))}const i=C.containedNodes,o=C.containedEdges;if(void 0!==A&&void 0!==A.releaseFunction&&"function"==typeof A.releaseFunction){const g={},t={x:C.x,y:C.y};for(const A in i)if(Object.prototype.hasOwnProperty.call(i,A)){const t=this.body.nodes[A];g[A]={x:t.x,y:t.y}}const I=A.releaseFunction(t,g);for(const g in i)if(Object.prototype.hasOwnProperty.call(i,g)){const A=this.body.nodes[g];void 0!==I[g]&&(A.x=void 0===I[g].x?C.x:I[g].x,A.y=void 0===I[g].y?C.y:I[g].y)}}else hp(i,function(g){!1===g.options.fixed.x&&(g.x=C.x),!1===g.options.fixed.y&&(g.y=C.y)});for(const g in i)if(Object.prototype.hasOwnProperty.call(i,g)){const A=this.body.nodes[g];A.vx=C.vx,A.vy=C.vy,A.setOptions({physics:!0}),delete this.clusteredNodes[g]}const n=[];for(let g=0;g0&&I<100;){const g=A.pop();if(void 0===g)continue;const e=this.body.edges[g];if(void 0===e)continue;I++;const i=e.clusteringEdgeReplacingIds;if(void 0===i)C.push(g);else for(let g=0;gC&&(C=e.edges.length),g+=e.edges.length,A+=Math.pow(e.edges.length,2),t+=1}g/=t,A/=t;const I=A-Math.pow(g,2),e=Math.sqrt(I);let i=Math.floor(g+2*e);return i>C&&(i=C),i}_createClusteredEdge(g,A,t,C,I){const e=Ff.cloneOptions(t,"edge");sp(e,C),e.from=g,e.to=A,e.id="clusterEdge:"+Sf(),void 0!==I&&sp(e,I);const i=this.body.functions.createEdge(e);return i.clusteringEdgeReplacingIds=[t.id],i.connect(),this.body.edges[i.id]=i,i}_clusterEdges(g,A,t,C){if(A instanceof ny){const g=A,t={};t[g.id]=g,A=t}if(g instanceof Wy){const A=g,t={};t[A.id]=A,g=t}if(null==t)throw new Error("_clusterEdges: parameter clusterNode required");void 0===C&&(C=t.clusterEdgeProperties),this._createClusterEdges(g,A,t,C);for(const g in A)if(Object.prototype.hasOwnProperty.call(A,g)&&void 0!==this.body.edges[g]){const A=this.body.edges[g];this._backupEdgeOptions(A),A.setOptions({physics:!1})}for(const A in g)Object.prototype.hasOwnProperty.call(g,A)&&(this.clusteredNodes[A]={clusterId:t.id,node:this.body.nodes[A]},this.body.nodes[A].setOptions({physics:!1}))}_getClusterNodeForNode(g){if(void 0===g)return;const A=this.clusteredNodes[g];if(void 0===A)return;const t=A.clusterId;return void 0!==t?this.body.nodes[t]:void 0}_filter(g,A){const t=[];return hp(g,g=>{A(g)&&t.push(g)}),t}_updateState(){let g;const A=[],t={},C=g=>{hp(this.body.nodes,A=>{!0===A.isCluster&&g(A)})};for(g in this.clusteredNodes){if(!Object.prototype.hasOwnProperty.call(this.clusteredNodes,g))continue;void 0===this.body.nodes[g]&&A.push(g)}C(function(g){for(let t=0;t{const A=this.body.edges[g];void 0!==A&&A.endPointsValid()||(t[g]=g)}),C(function(g){hp(g.containedEdges,(g,A)=>{g.endPointsValid()||t[A]||(t[A]=A)})}),hp(this.body.edges,(g,A)=>{let C=!0;const I=g.clusteringEdgeReplacingIds;if(void 0!==I){let g=0;hp(I,A=>{const t=this.body.edges[A];void 0!==t&&t.endPointsValid()&&(g+=1)}),C=g>0}g.endPointsValid()&&C||(t[A]=A)}),C(g=>{hp(t,A=>{delete g.containedEdges[A],hp(g.edges,(C,I)=>{C.id!==A?C.clusteringEdgeReplacingIds=this._filter(C.clusteringEdgeReplacingIds,function(g){return!t[g]}):g.edges[I]=null}),g.edges=this._filter(g.edges,function(g){return null!==g})})}),hp(t,g=>{delete this.clusteredEdges[g]}),hp(t,g=>{delete this.body.edges[g]});hp(Fr(this.body.edges),g=>{const A=this.body.edges[g],t=this._isClusteredNode(A.fromId)||this._isClusteredNode(A.toId);if(t!==this._isClusteredEdge(A.id))if(t){const g=this._getClusterNodeForNode(A.fromId);void 0!==g&&this._clusterEdges(this.body.nodes[A.fromId],A,g);const t=this._getClusterNodeForNode(A.toId);void 0!==t&&this._clusterEdges(this.body.nodes[A.toId],A,t)}else delete this._clusterEdges[g],this._restoreEdge(A)});let I=!1,e=!0;for(;e;){const g=[];C(function(A){const t=Fr(A.containedNodes).length,C=!0===A.options.allowSingleNodeCluster;(C&&t<1||!C&&t<2)&&g.push(A.id)});for(let A=0;A0,I=I||e}I&&this._updateState()}_isClusteredNode(g){return void 0!==this.clusteredNodes[g]}_isClusteredEdge(g){return void 0!==this.clusteredEdges[g]}}var Ky,Hy,Xy,_y,Jy,qy,$y,gw,Aw,tw,Cw,Iw,ew,iw={};function ow(){if(Hy)return Ky;Hy=1;var g=Zg(),A=fA(),t=yg(),C=lt(),I=TypeError,e="Reduce of empty array with no initial value",i=function(i){return function(o,n,s,r){var a=A(o),d=t(a),h=C(a);if(g(n),0===h&&s<2)throw new I(e);var l=i?h-1:0,c=i?-1:1;if(s<2)for(;;){if(l in d){r=d[l],l+=c;break}if(l+=c,i?l<0:h<=l)throw new I(e)}for(;i?l>=0:h>l;l+=c)l in d&&(r=n(r,d[l],l,a));return r}};return Ky={left:i(!1),right:i(!0)}}function nw(){return _y?Xy:(_y=1,Xy="NODE"===kl())}function sw(){return $y?qy:($y=1,function(){if(Jy)return iw;Jy=1;var g=st(),A=ow().left,t=Ca(),C=Rg();g({target:"Array",proto:!0,forced:!nw()&&C>79&&C<83||!t("reduce")},{reduce:function(g){var t=arguments.length;return A(this,g,t,t>1?arguments[1]:void 0)}})}(),qy=gC()("Array","reduce"))}function rw(){if(Aw)return gw;Aw=1;var g=Ng(),A=sw(),t=Array.prototype;return gw=function(C){var I=C.reduce;return C===t||g(t,C)&&I===t.reduce?A:I},gw}function aw(){return Cw?tw:(Cw=1,tw=rw())}var dw,hw,lw,cw=C(ew?Iw:(ew=1,Iw=aw())),uw={};function pw(){if(hw)return dw;hw=1;var g=DC(),A=lt(),t=CI(),C=DA(),I=II(),e=function(i,o,n,s,r,a,d,h){for(var l,c,u=r,p=0,f=!!d&&C(d,h);p0&&g(l)?(c=A(l),u=e(i,o,l,c,u,a-1)-1):(t(u+1),I(i,u,l)),u++),p++;return u};return dw=e}var fw,vw,bw,mw,yw,ww,xw,Ew,Ow;function Tw(){return bw?vw:(bw=1,function(){if(lw)return uw;lw=1;var g=st(),A=pw(),t=Zg(),C=fA(),I=lt(),e=aI();g({target:"Array",proto:!0},{flatMap:function(g){var i,o=C(this),n=I(o);return t(g),i=e(o,0),A(i,o,o,n,0,1,g,arguments.length>1?arguments[1]:void 0),i}})}(),fw||(fw=1,Ui()("flatMap")),vw=gC()("Array","flatMap"))}function Dw(){if(yw)return mw;yw=1;var g=Ng(),A=Tw(),t=Array.prototype;return mw=function(C){var I=C.flatMap;return C===t||g(t,C)&&I===t.flatMap?A:I},mw}function Nw(){return xw?ww:(xw=1,ww=Dw())}var kw,Rw,Pw=C(Ow?Ew:(Ow=1,Ew=Nw()));var Mw,zw,Bw,Zw,Sw,Fw,Gw,jw,Lw,Vw,Yw,Ww,Qw,Uw,Kw,Hw,Xw,_w,Jw,qw,$w,gx=C(Rw?kw:(Rw=1,kw=Vv())),Ax={},tx={exports:{}};function Cx(){return zw?Mw:(zw=1,Mw=y()(function(){if("function"==typeof ArrayBuffer){var g=new ArrayBuffer(8);Object.isExtensible(g)&&Object.defineProperty(g,"a",{value:8})}}))}function Ix(){if(Zw)return Bw;Zw=1;var g=y(),A=Og(),t=O(),C=Cx(),I=Object.isExtensible,e=g(function(){});return Bw=e||C?function(g){return!!A(g)&&((!C||"ArrayBuffer"!==t(g))&&(!I||I(g)))}:I,Bw}function ex(){return Fw?Sw:(Fw=1,Sw=!y()(function(){return Object.isExtensible(Object.preventExtensions({}))}))}function ix(){if(Gw)return tx.exports;Gw=1;var g=st(),A=E(),t=ut(),C=Og(),I=vA(),e=ot().f,i=MI(),o=jI(),n=Ix(),s=bA(),r=ex(),a=!1,d=s("meta"),h=0,l=function(g){e(g,d,{value:{objectID:"O"+h++,weakData:{}}})},c=tx.exports={enable:function(){c.enable=function(){},a=!0;var t=i.f,C=A([].splice),I={};I[d]=1,t(I).length&&(i.f=function(g){for(var A=t(g),I=0,e=A.length;If;f++)if((b=k(h[f]))&&i(d,b))return b;return new a(!1)}u=o(h,p)}for(m=E?h.next:u.next;!(y=A(m,u)).done;){var R=y.value;try{b=k(R)}catch(g){if(!u)throw g;s(u,"throw",g)}if("object"==typeof b&&b&&i(d,b))return b}return new a(!1)},jw}function nx(){if(Yw)return Vw;Yw=1;var g=Ng(),A=TypeError;return Vw=function(t,C){if(g(C,t))return t;throw new A("Incorrect invocation")},Vw}function sx(){if(Qw)return Ww;Qw=1;var g=st(),A=m(),t=ix(),C=B(),I=y(),e=nt(),i=ox(),o=nx(),n=D(),s=Og(),r=wg(),a=re(),d=ot().f,h=he().forEach,l=z(),c=de(),u=c.set,p=c.getterFor;return Ww=function(c,f,v){var b,m=-1!==c.indexOf("Map"),y=-1!==c.indexOf("Weak"),w=m?"set":"add",x=A[c],E=x&&x.prototype,O={};if(l&&n(x)&&(y||E.forEach&&!I(function(){(new x).entries().next()}))){var T=(b=f(function(g,A){u(o(g,T),{type:c,collection:new x}),r(A)||i(A,g[w],{that:g,AS_ENTRIES:m})})).prototype,D=p(c);h(["add","clear","delete","forEach","get","has","set","keys","values","entries"],function(g){var A="add"===g||"set"===g;!(g in E)||y&&"clear"===g||e(T,g,function(t,I){var e=this,i=D(e).collection;if(!A&&y&&!s(t))return"get"===g&&void 0;var o=i[g]("forEach"===g?function(g,A){C(t,I,g,A,e)}:0===t?0:t,I);return A?e:o})}),y||d(T,"size",{configurable:!0,get:function(){return D(this).collection.size}})}else b=v.getConstructor(f,c,m,w),t.enable();return a(b,c,!1,!0),O[c]=b,g({global:!0,forced:!0},O),y||v.setStrong(b,c,m),b}}function rx(){if(Kw)return Uw;Kw=1;var g=LI();return Uw=function(A,t,C){for(var I in t)C&&C.unsafe&&A[I]?A[I]=t[I]:g(A,I,t[I],C);return A},Uw}function ax(){if(Xw)return Hw;Xw=1;var g=Dg(),A=VI(),t=mA(),C=z(),I=t("species");return Hw=function(t){var e=g(t);C&&e&&!e[I]&&A(e,I,{configurable:!0,get:function(){return this}})}}function dx(){if(Jw)return _w;Jw=1;var g=kI(),A=VI(),t=rx(),C=DA(),I=nx(),e=wg(),i=ox(),o=Co(),n=Io(),s=ax(),r=z(),a=ix().fastKey,d=de(),h=d.set,l=d.getterFor;return _w={getConstructor:function(o,n,s,d){var c=o(function(A,t){I(A,u),h(A,{type:n,index:g(null),first:null,last:null,size:0}),r||(A.size=0),e(t)||i(t,A[d],{that:A,AS_ENTRIES:s})}),u=c.prototype,p=l(n),f=function(g,A,t){var C,I,e=p(g),i=v(g,A);return i?i.value=t:(e.last=i={index:I=a(A,!0),key:A,value:t,previous:C=e.last,next:null,removed:!1},e.first||(e.first=i),C&&(C.next=i),r?e.size++:g.size++,"F"!==I&&(e.index[I]=i)),g},v=function(g,A){var t,C=p(g),I=a(A);if("F"!==I)return C.index[I];for(t=C.first;t;t=t.next)if(t.key===A)return t};return t(u,{clear:function(){for(var A=p(this),t=A.first;t;)t.removed=!0,t.previous&&(t.previous=t.previous.next=null),t=t.next;A.first=A.last=null,A.index=g(null),r?A.size=0:this.size=0},delete:function(g){var A=this,t=p(A),C=v(A,g);if(C){var I=C.next,e=C.previous;delete t.index[C.index],C.removed=!0,e&&(e.next=I),I&&(I.previous=e),t.first===C&&(t.first=I),t.last===C&&(t.last=e),r?t.size--:A.size--}return!!C},forEach:function(g){for(var A,t=p(this),I=C(g,arguments.length>1?arguments[1]:void 0);A=A?A.next:t.first;)for(I(A.value,A.key,this);A&&A.removed;)A=A.previous},has:function(g){return!!v(this,g)}}),t(u,s?{get:function(g){var A=v(this,g);return A&&A.value},set:function(g,A){return f(this,0===g?0:g,A)}}:{add:function(g){return f(this,g=0===g?0:g,g)}}),r&&A(u,"size",{configurable:!0,get:function(){return p(this).size}}),c},setStrong:function(g,A,t){var C=A+" Iterator",I=l(A),e=l(C);o(g,A,function(g,A){h(this,{type:C,target:g,state:I(g),kind:A,last:null})},function(){for(var g=e(this),A=g.kind,t=g.last;t&&t.removed;)t=t.previous;return g.target&&(g.last=t=t?t.next:g.state.first)?n("keys"===A?t.key:"values"===A?t.value:[t.key,t.value],!1):(g.target=null,n(void 0,!0))},t?"entries":"values",!t,!0),s(A)}},_w}function hx(){return $w||($w=1,qw||(qw=1,sx()("Map",function(g){return function(){return g(this,arguments.length?arguments[0]:void 0)}},dx()))),Ax}var lx,cx,ux,px,fx,vx={};function bx(){return cx||(cx=1,lx=function(g,A){return 1===A?function(A,t){return A[g](t)}:function(A,t,C){return A[g](t,C)}}),lx}function mx(){if(px)return ux;px=1;var g=Dg(),A=bx(),t=g("Map");return ux={Map:t,set:A("set",2),get:A("get",1),has:A("has",1),remove:A("delete",1),proto:t.prototype}}var yx,wx={};var xx,Ex,Ox,Tx,Dx,Nx,kx,Rx={};function Px(){return Ox?Ex:(Ox=1,eo(),hx(),function(){if(fx)return vx;fx=1;var g=st(),A=E(),t=Zg(),C=xg(),I=ox(),e=mx(),i=lA(),o=y(),n=e.Map,s=e.has,r=e.get,a=e.set,d=A([].push),h=i||o(function(){return 1!==n.groupBy("ab",function(g){return g}).get("a").length});g({target:"Map",stat:!0,forced:i||h},{groupBy:function(g,A){C(g),t(A);var e=new n,i=0;return I(g,function(g){var t=A(g,i++);s(e,t)?d(r(e,t),g):a(e,t,[g])}),e}})}(),function(){if(yx)return wx;yx=1;var g=st(),A=mx(),t=lA(),C=A.get,I=A.has,e=A.set;g({target:"Map",proto:!0,real:!0,forced:t},{getOrInsert:function(g,A){return I(this,g)?C(this,g):(e(this,g,A),A)}})}(),function(){if(xx)return Rx;xx=1;var g=st(),A=Zg(),t=mx(),C=lA(),I=t.get,e=t.has,i=t.set;g({target:"Map",proto:!0,real:!0,forced:C},{getOrInsertComputed:function(g,t){var C=e(this,g);if(A(t),C)return I(this,g);0===g&&1/g==-1/0&&(g=0);var o=t(g);return i(this,g,o),o}})}(),In(),Ex=Tg().Map)}function Mx(){if(Dx)return Tx;Dx=1;var g=Px();return oo(),Tx=g}var zx,Bx,Zx=C(kx?Nx:(kx=1,Nx=Mx())),Sx={};function Fx(){return Bx||(Bx=1,zx||(zx=1,sx()("Set",function(g){return function(){return g(this,arguments.length?arguments[0]:void 0)}},dx()))),Sx}var Gx,jx,Lx,Vx,Yx,Wx,Qx,Ux,Kx,Hx,Xx,_x,Jx,qx,$x,gE,AE,tE,CE,IE,eE,iE={};function oE(){if(jx)return Gx;jx=1;var g=Bg(),A=TypeError;return Gx=function(t){if("object"==typeof t&&"size"in t&&"has"in t&&"add"in t&&"delete"in t&&"keys"in t)return t;throw new A(g(t)+" is not a set")},Gx}function nE(){if(Vx)return Lx;Vx=1;var g=Dg(),A=bx(),t=g("Set"),C=t.prototype;return Lx={Set:t,add:A("add",1),has:A("has",1),remove:A("delete",1),proto:C}}function sE(){if(Wx)return Yx;Wx=1;var g=B();return Yx=function(A,t,C){for(var I,e,i=C?A:A.iterator,o=A.next;!(I=g(o,i)).done;)if(void 0!==(e=t(I.value)))return e},Yx}function rE(){if(Ux)return Qx;Ux=1;var g=sE();return Qx=function(A,t,C){return C?g(A.keys(),t,!0):A.forEach(t)},Qx}function aE(){if(Hx)return Kx;Hx=1;var g=nE(),A=rE(),t=g.Set,C=g.add;return Kx=function(g){var I=new t;return A(g,function(g){C(I,g)}),I},Kx}function dE(){return _x||(_x=1,Xx=function(g){return g.size}),Xx}function hE(){return qx?Jx:(qx=1,Jx=function(g){return{iterator:g,next:g.next,done:!1}})}function lE(){if(gE)return $x;gE=1;var g=Zg(),A=it(),t=B(),C=at(),I=hE(),e="Invalid size",i=RangeError,o=TypeError,n=Math.max,s=function(A,t){this.set=A,this.size=n(t,0),this.has=g(A.has),this.keys=g(A.keys)};return s.prototype={getIterator:function(){return I(A(t(this.keys,this.set)))},includes:function(g){return t(this.has,this.set,g)}},$x=function(g){A(g);var t=+g.size;if(t!=t)throw new o(e);var I=C(t);if(I<0)throw new i(e);return new s(g,I)}}function cE(){if(tE)return AE;tE=1;var g=oE(),A=nE(),t=aE(),C=dE(),I=lE(),e=rE(),i=sE(),o=A.has,n=A.remove;return AE=function(A){var s=g(this),r=I(A),a=t(s);return C(a)<=r.size?e(a,function(g){r.includes(g)&&n(a,g)}):i(r.getIterator(),function(g){o(a,g)&&n(a,g)}),a}}function uE(){return IE?CE:(IE=1,CE=function(){return!1})}var pE,fE,vE,bE={};function mE(){if(fE)return pE;fE=1;var g=oE(),A=nE(),t=dE(),C=lE(),I=rE(),e=sE(),i=A.Set,o=A.add,n=A.has;return pE=function(A){var s=g(this),r=C(A),a=new i;return t(s)>r.size?e(r.getIterator(),function(g){n(s,g)&&o(a,g)}):I(s,function(g){r.includes(g)&&o(a,g)}),a}}var yE,wE,xE,EE={};function OE(){if(wE)return yE;wE=1;var g=oE(),A=nE().has,t=dE(),C=lE(),I=rE(),e=sE(),i=Es();return yE=function(o){var n=g(this),s=C(o);if(t(n)<=s.size)return!1!==I(n,function(g){if(s.includes(g))return!1},!0);var r=s.getIterator();return!1!==e(r,function(g){if(A(n,g))return i(r.iterator,"normal",!1)})},yE}var TE,DE,NE,kE={};function RE(){if(DE)return TE;DE=1;var g=oE(),A=dE(),t=rE(),C=lE();return TE=function(I){var e=g(this),i=C(I);return!(A(e)>i.size)&&!1!==t(e,function(g){if(!i.includes(g))return!1},!0)}}var PE,ME,zE,BE={};function ZE(){if(ME)return PE;ME=1;var g=oE(),A=nE().has,t=dE(),C=lE(),I=sE(),e=Es();return PE=function(i){var o=g(this),n=C(i);if(t(o)1;return A.has(1)&&A.clear(),{done:t,value:2}}}}},A=new Set([1,2,3,4]);return 3!==A.difference(g).size});g({target:"Set",proto:!0,real:!0,forced:C},{difference:A})}(),function(){if(vE)return bE;vE=1;var g=st(),A=y(),t=mE();g({target:"Set",proto:!0,real:!0,forced:!uE()("intersection",function(g){return 2===g.size&&g.has(1)&&g.has(2)})||A(function(){return"3,2"!==String(Array.from(new Set([1,2,3]).intersection(new Set([3,2]))))})},{intersection:t})}(),function(){if(xE)return EE;xE=1;var g=st(),A=OE();g({target:"Set",proto:!0,real:!0,forced:!uE()("isDisjointFrom",function(g){return!g})},{isDisjointFrom:A})}(),function(){if(NE)return kE;NE=1;var g=st(),A=RE();g({target:"Set",proto:!0,real:!0,forced:!uE()("isSubsetOf",function(g){return g})},{isSubsetOf:A})}(),function(){if(zE)return BE;zE=1;var g=st(),A=ZE();g({target:"Set",proto:!0,real:!0,forced:!uE()("isSupersetOf",function(g){return!g})},{isSupersetOf:A})}(),function(){if(LE)return VE;LE=1;var g=st(),A=YE(),t=WE();g({target:"Set",proto:!0,real:!0,forced:!uE()("symmetricDifference")||!t("symmetricDifference")},{symmetricDifference:A})}(),function(){if(KE)return gO;KE=1;var g=st(),A=AO(),t=WE();g({target:"Set",proto:!0,real:!0,forced:!uE()("union")||!t("union")},{union:A})}(),In(),HE=Tg().Set)}function CO(){if(JE)return _E;JE=1;var g=tO();return oo(),_E=g}var IO,eO,iO,oO,nO,sO,rO,aO,dO,hO,lO,cO,uO=C($E?qE:($E=1,qE=CO()));function pO(){return eO?IO:(eO=1,eo(),In(),IO=Ds())}function fO(){if(oO)return iO;oO=1;var g=pO();return oo(),iO=g}function vO(){return sO?nO:(sO=1,nO=fO())}function bO(){return aO?rO:(aO=1,rO=vO())}function mO(){return hO?dO:(hO=1,dO=bO())}var yO,wO,xO,EO,OO,TO,DO,NO,kO,RO,PO,MO,zO,BO,ZO,SO,FO,GO=C(cO?lO:(cO=1,lO=mO())),jO={};function LO(){if(wO)return yO;wO=1;var g=qt(),A=Math.floor,t=function(C,I){var e=C.length;if(e<8)for(var i,o,n=1;n0;)C[o]=C[--o];o!==n++&&(C[o]=i)}else for(var s=A(e/2),r=t(g(C,0,s),I),a=t(g(C,s),I),d=r.length,h=a.length,l=0,c=0;l3)){if(a)return!0;if(h)return h<603;var g,A,t,C,I="";for(g=65;g<76;g++){switch(A=String.fromCharCode(g),g){case 66:case 69:case 70:case 72:t=3;break;case 68:case 71:t=4;break;default:t=2}for(C=0;C<47;C++)l.push({k:A+C,v:t})}for(l.sort(function(g,A){return A.v-g.v}),C=0;CI?1:-1}}(g)),o=I(r),s=0;s1?arguments[1]:void 0)}})}(),_O=gC()("Array","some"))}function oT(){if($O)return qO;$O=1;var g=Ng(),A=iT(),t=Array.prototype;return qO=function(C){var I=C.some;return C===t||g(t,C)&&I===t.some?A:I},qO}function nT(){return AT?gT:(AT=1,gT=oT())}var sT,rT,aT,dT,hT,lT,cT,uT,pT=C(CT?tT:(CT=1,tT=nT()));function fT(){return rT?sT:(rT=1,eo(),sT=gC()("Array","keys"))}function vT(){return dT?aT:(dT=1,aT=fT())}function bT(){if(lT)return hT;lT=1,oo();var g=oI(),A=vA(),t=Ng(),C=vT(),I=Array.prototype,e={DOMTokenList:!0,NodeList:!0};return hT=function(i){var o=i.keys;return i===I||t(I,i)&&o===I.keys||A(e,g(i))?C:o},hT}var mT,yT,wT,xT,ET,OT,TT,DT,NT=C(uT?cT:(uT=1,cT=bT()));function kT(){return yT?mT:(yT=1,eo(),mT=gC()("Array","entries"))}function RT(){return xT?wT:(xT=1,wT=kT())}function PT(){if(OT)return ET;OT=1,oo();var g=oI(),A=vA(),t=Ng(),C=RT(),I=Array.prototype,e={DOMTokenList:!0,NodeList:!0};return ET=function(i){var o=i.entries;return i===I||t(I,i)&&o===I.entries||A(e,g(i))?C:o},ET}var MT=C(DT?TT:(DT=1,TT=PT()));function zT(g,A){var t=Fr(g);if(Ob){var C=Ob(g);A&&(C=eh(C).call(C,function(A){return Fb(g,A).enumerable})),t.push.apply(t,C)}return t}function BT(g){for(var A=1;AA(g),g)}_add(g,A){null!=A&&this._target.add(this._transformItems(this._source.get(A.items)))}_update(g,A){null!=A&&this._target.update(this._transformItems(this._source.get(A.items)))}_remove(g,A){null!=A&&this._target.remove(this._transformItems(A.oldData))}}class ST{constructor(g){pb(this,"_source",void 0),pb(this,"_transformers",[]),this._source=g}filter(g){return this._transformers.push(A=>eh(A).call(A,g)),this}map(g){return this._transformers.push(A=>Tr(A).call(A,g)),this}flatMap(g){return this._transformers.push(A=>Pw(A).call(A,g)),this}to(g){return new ZT(this._source,this._transformers,g)}}function FT(g){return"string"==typeof g||"number"==typeof g}class GT{constructor(g){pb(this,"delay",void 0),pb(this,"max",void 0),pb(this,"_queue",[]),pb(this,"_timeout",null),pb(this,"_extended",null),this.delay=null,this.max=1/0,this.setOptions(g)}setOptions(g){g&&void 0!==g.delay&&(this.delay=g.delay),g&&void 0!==g.max&&(this.max=g.max),this._flushIfNeeded()}static extend(g,A){const t=new GT(A);if(void 0!==g.flush)throw new Error("Target object already has a property flush");g.flush=()=>{t.flush()};const C=[{name:"flush",original:void 0}];if(A&&A.replace)for(let I=0;Ithis.max&&this.flush(),null!=this._timeout&&(clearTimeout(this._timeout),this._timeout=null),this.queue.length>0&&"number"==typeof this.delay&&(this._timeout=$l(()=>{this.flush()},this.delay))}flush(){var g,A;pa(g=Va(A=this._queue).call(A,0)).call(g,g=>{g.fn.apply(g.context||g.fn,g.args||[])})}}class jT{constructor(){pb(this,"_subscribers",{"*":[],add:[],remove:[],update:[]}),pb(this,"subscribe",jT.prototype.on),pb(this,"unsubscribe",jT.prototype.off)}_trigger(g,A,t){var C;if("*"===g)throw new Error("Cannot trigger event *");pa(C=[...this._subscribers[g],...this._subscribers["*"]]).call(C,C=>{C(g,A,null!=t?t:null)})}on(g,A){"function"==typeof A&&this._subscribers[g].push(A)}off(g,A){var t;this._subscribers[g]=eh(t=this._subscribers[g]).call(t,g=>g!==A)}}class LT{constructor(g){pb(this,"_pairs",void 0),this._pairs=g}*[gx](){for(const A of this._pairs){var g=js(A,2);const t=g[0],C=g[1];yield[t,C]}}*entries(){for(const A of this._pairs){var g=js(A,2);const t=g[0],C=g[1];yield[t,C]}}*keys(){for(const g of this._pairs){const A=js(g,1)[0];yield A}}*values(){for(const g of this._pairs){const A=js(g,2)[1];yield A}}toIdArray(){var g;return Tr(g=[...this._pairs]).call(g,g=>g[0])}toItemArray(){var g;return Tr(g=[...this._pairs]).call(g,g=>g[1])}toEntryArray(){return[...this._pairs]}toObjectMap(){const g=hl(null);for(const t of this._pairs){var A=js(t,2);const C=A[0],I=A[1];g[C]=I}return g}toMap(){return new Zx(this._pairs)}toIdSet(){return new uO(this.toIdArray())}toItemSet(){return new uO(this.toItemArray())}cache(){return new LT([...this._pairs])}distinct(g){const A=new uO;for(const C of this._pairs){var t=js(C,2);const I=t[0],e=t[1];A.add(g(e,I))}return A}filter(g){const A=this._pairs;return new LT({*[gx](){for(const C of A){var t=js(C,2);const A=t[0],I=t[1];g(I,A)&&(yield[A,I])}}})}forEach(g){for(const t of this._pairs){var A=js(t,2);const C=A[0];g(A[1],C)}}map(g){const A=this._pairs;return new LT({*[gx](){for(const C of A){var t=js(C,2);const A=t[0],I=t[1];yield[A,g(I,A)]}}})}max(g){const A=GO(this._pairs);let t=A.next();if(t.done)return null;let C=t.value[1],I=g(t.value[1],t.value[0]);for(;!(t=A.next()).done;){const A=js(t.value,2),e=A[0],i=A[1],o=g(i,e);o>I&&(I=o,C=i)}return C}min(g){const A=GO(this._pairs);let t=A.next();if(t.done)return null;let C=t.value[1],I=g(t.value[1],t.value[0]);for(;!(t=A.next()).done;){const A=js(t.value,2),e=A[0],i=A[1],o=g(i,e);o{var A;return GO(IT(A=[...this._pairs]).call(A,(A,t)=>{let C=js(A,2),I=C[0],e=C[1],i=js(t,2),o=i[0],n=i[1];return g(e,n,I,o)}))}})}}class VT extends jT{get idProp(){return this._idProp}constructor(g,A){super(),pb(this,"flush",void 0),pb(this,"length",void 0),pb(this,"_options",void 0),pb(this,"_data",void 0),pb(this,"_idProp",void 0),pb(this,"_queue",null),g&&!cr(g)&&(A=g,g=[]),this._options=A||{},this._data=new Zx,this.length=0,this._idProp=this._options.fieldId||"id",g&&g.length&&this.add(g),this.setOptions(A)}setOptions(g){g&&void 0!==g.queue&&(!1===g.queue?this._queue&&(this._queue.destroy(),this._queue=null):(this._queue||(this._queue=GT.extend(this,{replace:["add","update","remove"]})),g.queue&&"object"==typeof g.queue&&this._queue.setOptions(g.queue)))}add(g,A){const t=[];let C;if(cr(g)){const A=Tr(g).call(g,g=>g[this._idProp]);if(pT(A).call(A,g=>this._data.has(g)))throw new Error("A duplicate id was found in the parameter array.");for(let A=0,I=g.length;A{const A=g[i];if(null!=A&&this._data.has(A)){const t=g,i=_t({},this._data.get(A)),o=this._updateItem(t);C.push(o),e.push(t),I.push(i)}else{const A=this._addItem(g);t.push(A)}};if(cr(g))for(let A=0,t=g.length;A{const A=this._data.get(g[this._idProp]);if(null==A)throw new Error("Updating non-existent items is not allowed.");return{oldData:A,update:g}})).call(t,g=>{let A=g.oldData,t=g.update;const C=A[this._idProp],I=function(g){for(var A=arguments.length,t=new Array(A>1?A-1:0),C=1;Cg.id),oldData:Tr(C).call(C,g=>g.oldData),data:Tr(C).call(C,g=>g.updatedData)};return this._trigger("update",g,A),g.items}return[]}get(g,A){let t,C,I;FT(g)?(t=g,I=A):cr(g)?(C=g,I=A):I=g;const e=I&&"Object"===I.returnType?"Object":"Array",i=I&&eh(I),o=[];let n,s,r;if(null!=t)n=this._data.get(t),n&&i&&!i(n)&&(n=void 0);else if(null!=C)for(let g=0,A=C.length;g(A[t]=g[t],A),{}):g}_sort(g,A){if("string"==typeof A){const t=A;IT(g).call(g,(g,A)=>{const C=g[t],I=A[t];return C>I?1:Ct)&&(A=I,t=e)}return A||null}min(g){let A=null,t=null;for(const I of Ay(C=this._data).call(C)){var C;const e=I[g];"number"==typeof e&&(null==t||ee(g)&&i(g)),null==C?this._data.get(I):this._data.get(C,I)}getIds(g){if(this._data.length){const A=eh(this._options),t=null!=g?eh(g):null;let C;return C=t?A?g=>A(g)&&t(g):t:A,this._data.getIds({filter:C,order:g&&g.order})}return[]}forEach(g,A){if(this._data){var t;const C=eh(this._options),I=A&&eh(A);let e;e=I?C?function(g){return C(g)&&I(g)}:I:C,pa(t=this._data).call(t,g,{filter:e,order:A&&A.order})}}map(g,A){if(this._data){var t;const C=eh(this._options),I=A&&eh(A);let e;return e=I?C?g=>C(g)&&I(g):I:C,Tr(t=this._data).call(t,g,{filter:e,order:A&&A.order})}return[]}getDataSet(){return this._data.getDataSet()}stream(g){var A;return this._data.stream(g||{[gx]:IC(A=NT(this._ids)).call(A,this._ids)})}dispose(){var g;null!==(g=this._data)&&void 0!==g&&g.off&&this._data.off("*",this._listener);const A="This data view has already been disposed of.",t={get:()=>{throw new Error(A)},set:()=>{throw new Error(A)},configurable:!1};for(const g of er(YT.prototype))rm(this,g,t)}_onEvent(g,A,t){if(!A||!A.items||!this._data)return;const C=A.items,I=[],e=[],i=[],o=[],n=[],s=[];switch(g){case"add":for(let g=0,A=C.length;g{this.add(A.items)},update:(g,A)=>{this.update(A.items)},remove:(g,A)=>{this.remove(A.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(g,A,t,C){if(A===g)return.5;{const t=1/(A-g);return Math.max(0,(C-g)*t)}}},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},sp(this.options,this.defaultOptions),this.bindEventListeners()}bindEventListeners(){var g,A,t=this;this.body.emitter.on("_forceDisableDynamicCurves",function(g){let A=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];"dynamic"===g&&(g="continuous");let C=!1;for(const A in t.body.edges)if(Object.prototype.hasOwnProperty.call(t.body.edges,A)){const I=t.body.edges[A],e=t.body.data.edges.get(A);if(null!=e){const A=e.smooth;void 0!==A&&!0===A.enabled&&"dynamic"===A.type&&(void 0===g?I.setOptions({smooth:!1}):I.setOptions({smooth:{type:g}}),C=!0)}}!0===A&&!0===C&&t.body.emitter.emit("_dataChanged")}),this.body.emitter.on("_dataUpdated",()=>{this.reconnectEdges()}),this.body.emitter.on("refreshEdges",IC(g=this.refresh).call(g,this)),this.body.emitter.on("refresh",IC(A=this.refresh).call(A,this)),this.body.emitter.on("destroy",()=>{hp(this.edgesListeners,(g,A)=>{this.body.data.edges&&this.body.data.edges.off(A,g)}),delete this.body.functions.createEdge,delete this.edgesListeners.add,delete this.edgesListeners.update,delete this.edgesListeners.remove,delete this.edgesListeners})}setOptions(g){if(void 0!==g){ny.parseOptions(this.options,g,!0,this.defaultOptions,!0);let A=!1;if(void 0!==g.smooth)for(const g in this.body.edges)Object.prototype.hasOwnProperty.call(this.body.edges,g)&&(A=this.body.edges[g].updateEdgeType()||A);if(void 0!==g.font)for(const g in this.body.edges)Object.prototype.hasOwnProperty.call(this.body.edges,g)&&this.body.edges[g].updateLabelModule();void 0===g.hidden&&void 0===g.physics&&!0!==A||this.body.emitter.emit("_dataChanged")}}setData(g){let A=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const t=this.body.data.edges;if(QT("id",g))this.body.data.edges=g;else if(cr(g))this.body.data.edges=new VT,this.body.data.edges.add(g);else{if(g)throw new TypeError("Array or DataSet expected");this.body.data.edges=new VT}if(t&&hp(this.edgesListeners,(g,A)=>{t.off(A,g)}),this.body.edges={},this.body.data.edges){hp(this.edgesListeners,(g,A)=>{this.body.data.edges.on(A,g)});const g=this.body.data.edges.getIds();this.add(g,!0)}this.body.emitter.emit("_adjustEdgesForHierarchicalLayout"),!1===A&&this.body.emitter.emit("_dataChanged")}add(g){let A=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const t=this.body.edges,C=this.body.data.edges;for(let A=0;A1&&void 0!==arguments[1])||arguments[1];if(0===g.length)return;const t=this.body.edges;hp(g,g=>{const A=t[g];void 0!==A&&A.remove()}),A&&this.body.emitter.emit("_dataChanged")}refresh(){hp(this.body.edges,(g,A)=>{const t=this.body.data.edges.get(A);void 0!==t&&g.setOptions(t)})}create(g){return new ny(g,this.body,this.images,this.options,this.defaultOptions)}reconnectEdges(){let g;const A=this.body.nodes,t=this.body.edges;for(g in A)Object.prototype.hasOwnProperty.call(A,g)&&(A[g].edges=[]);for(g in t)if(Object.prototype.hasOwnProperty.call(t,g)){const A=t[g];A.from=null,A.to=null,A.connect()}}getConnectedNodes(g){const A=[];if(void 0!==this.body.edges[g]){const t=this.body.edges[g];void 0!==t.fromId&&A.push(t.fromId),void 0!==t.toId&&A.push(t.toId)}return A}_updateState(){this._addMissingEdges(),this._removeInvalidEdges()}_removeInvalidEdges(){const g=[];hp(this.body.edges,(A,t)=>{const C=this.body.nodes[A.toId],I=this.body.nodes[A.fromId];void 0!==C&&!0===C.isCluster||void 0!==I&&!0===I.isCluster||void 0!==C&&void 0!==I||g.push(t)}),this.remove(g,!1)}_addMissingEdges(){const g=this.body.data.edges;if(null==g)return;const A=this.body.edges,t=[];pa(g).call(g,(g,C)=>{void 0===A[C]&&t.push(C)}),this.add(t,!0)}}class HT{constructor(){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},_t(this.options,this.defaultOptions)}setOptions(g){const A=["useDefaultGroups"];if(void 0!==g)for(const t in g)if(Object.prototype.hasOwnProperty.call(g,t)&&-1===Jh(A).call(A,t)){const A=g[t];this.add(t,A)}}clear(){this._groups=new Zx,this._groupNames=[]}get(g){let A=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],t=this._groups.get(g);if(void 0===t&&A)if(!1===this.options.useDefaultGroups&&this._groupNames.length>0){const A=this._groupIndex%this._groupNames.length;++this._groupIndex,t={},t.color=this._groups.get(this._groupNames[A]),this._groups.set(g,t)}else{const A=this._defaultIndex%this._defaultGroups.length;this._defaultIndex++,t={},t.color=this._defaultGroups[A],this._groups.set(g,t)}return t}add(g,A){return this._groups.has(g)||this._groupNames.push(g),this._groups.set(g,A),A}}function XT(g){var A,t=g&&g.preventDefault||!1,C=g&&g.container||window,I={},e={keydown:{},keyup:{}},i={};for(A=97;A<=122;A++)i[String.fromCharCode(A)]={code:A-97+65,shift:!1};for(A=65;A<=90;A++)i[String.fromCharCode(A)]={code:A,shift:!0};for(A=0;A<=9;A++)i[""+A]={code:48+A,shift:!1};for(A=1;A<=12;A++)i["F"+A]={code:111+A,shift:!1};for(A=0;A<=9;A++)i["num"+A]={code:96+A,shift:!1};i["num*"]={code:106,shift:!1},i["num+"]={code:107,shift:!1},i["num-"]={code:109,shift:!1},i["num/"]={code:111,shift:!1},i["num."]={code:110,shift:!1},i.left={code:37,shift:!1},i.up={code:38,shift:!1},i.right={code:39,shift:!1},i.down={code:40,shift:!1},i.space={code:32,shift:!1},i.enter={code:13,shift:!1},i.shift={code:16,shift:void 0},i.esc={code:27,shift:!1},i.backspace={code:8,shift:!1},i.tab={code:9,shift:!1},i.ctrl={code:17,shift:!1},i.alt={code:18,shift:!1},i.delete={code:46,shift:!1},i.pageup={code:33,shift:!1},i.pagedown={code:34,shift:!1},i["="]={code:187,shift:!1},i["-"]={code:189,shift:!1},i["]"]={code:221,shift:!1},i["["]={code:219,shift:!1};var o=function(g){s(g,"keydown")},n=function(g){s(g,"keyup")},s=function(g,A){if(void 0!==e[A][g.keyCode]){for(var C=e[A][g.keyCode],I=0;I{this.activated=!0,this.configureKeyboardBindings()}),this.body.emitter.on("deactivate",()=>{this.activated=!1,this.configureKeyboardBindings()}),this.body.emitter.on("destroy",()=>{void 0!==this.keycharm&&this.keycharm.destroy()}),this.options={}}setOptions(g){void 0!==g&&(this.options=g,this.create())}create(){!0===this.options.navigationButtons?!1===this.iconsCreated&&this.loadNavigationElements():!0===this.iconsCreated&&this.cleanNavigation(),this.configureKeyboardBindings()}cleanNavigation(){if(0!=this.navigationHammers.length){for(let g=0;g{this._stopMovement()}),this.navigationHammers.push(I),this.iconsCreated=!0}bindToRedraw(g){var A;void 0===this.boundFunctions[g]&&(this.boundFunctions[g]=IC(A=this[g]).call(A,this),this.body.emitter.on("initRedraw",this.boundFunctions[g]),this.body.emitter.emit("_startRendering"))}unbindFromRedraw(g){void 0!==this.boundFunctions[g]&&(this.body.emitter.off("initRedraw",this.boundFunctions[g]),this.body.emitter.emit("_stopRendering"),delete this.boundFunctions[g])}_fit(){(new Date).valueOf()-this.touchTime>700&&(this.body.emitter.emit("fit",{duration:700}),this.touchTime=(new Date).valueOf())}_stopMovement(){for(const g in this.boundFunctions)Object.prototype.hasOwnProperty.call(this.boundFunctions,g)&&(this.body.emitter.off("initRedraw",this.boundFunctions[g]),this.body.emitter.emit("_stopRendering"));this.boundFunctions={}}_moveUp(){this.body.view.translation.y+=this.options.keyboard.speed.y}_moveDown(){this.body.view.translation.y-=this.options.keyboard.speed.y}_moveLeft(){this.body.view.translation.x+=this.options.keyboard.speed.x}_moveRight(){this.body.view.translation.x-=this.options.keyboard.speed.x}_zoomIn(){const g=this.body.view.scale,A=this.body.view.scale*(1+this.options.keyboard.speed.zoom),t=this.body.view.translation,C=A/g,I=(1-C)*this.canvas.canvasViewCenter.x+t.x*C,e=(1-C)*this.canvas.canvasViewCenter.y+t.y*C;this.body.view.scale=A,this.body.view.translation={x:I,y:e},this.body.emitter.emit("zoom",{direction:"+",scale:this.body.view.scale,pointer:null})}_zoomOut(){const g=this.body.view.scale,A=this.body.view.scale/(1+this.options.keyboard.speed.zoom),t=this.body.view.translation,C=A/g,I=(1-C)*this.canvas.canvasViewCenter.x+t.x*C,e=(1-C)*this.canvas.canvasViewCenter.y+t.y*C;this.body.view.scale=A,this.body.view.translation={x:I,y:e},this.body.emitter.emit("zoom",{direction:"-",scale:this.body.view.scale,pointer:null})}configureKeyboardBindings(){var g,A,t,C,I,e,i,o,n,s,r,a,d,h,l,c,u,p,f,v,b,m,y,w;(void 0!==this.keycharm&&this.keycharm.destroy(),!0===this.options.keyboard.enabled)&&(!0===this.options.keyboard.bindToWindow?this.keycharm=XT({container:window,preventDefault:!0}):this.keycharm=XT({container:this.canvas.frame,preventDefault:!0}),this.keycharm.reset(),!0===this.activated&&(IC(g=this.keycharm).call(g,"up",()=>{this.bindToRedraw("_moveUp")},"keydown"),IC(A=this.keycharm).call(A,"down",()=>{this.bindToRedraw("_moveDown")},"keydown"),IC(t=this.keycharm).call(t,"left",()=>{this.bindToRedraw("_moveLeft")},"keydown"),IC(C=this.keycharm).call(C,"right",()=>{this.bindToRedraw("_moveRight")},"keydown"),IC(I=this.keycharm).call(I,"=",()=>{this.bindToRedraw("_zoomIn")},"keydown"),IC(e=this.keycharm).call(e,"num+",()=>{this.bindToRedraw("_zoomIn")},"keydown"),IC(i=this.keycharm).call(i,"num-",()=>{this.bindToRedraw("_zoomOut")},"keydown"),IC(o=this.keycharm).call(o,"-",()=>{this.bindToRedraw("_zoomOut")},"keydown"),IC(n=this.keycharm).call(n,"[",()=>{this.bindToRedraw("_zoomOut")},"keydown"),IC(s=this.keycharm).call(s,"]",()=>{this.bindToRedraw("_zoomIn")},"keydown"),IC(r=this.keycharm).call(r,"pageup",()=>{this.bindToRedraw("_zoomIn")},"keydown"),IC(a=this.keycharm).call(a,"pagedown",()=>{this.bindToRedraw("_zoomOut")},"keydown"),IC(d=this.keycharm).call(d,"up",()=>{this.unbindFromRedraw("_moveUp")},"keyup"),IC(h=this.keycharm).call(h,"down",()=>{this.unbindFromRedraw("_moveDown")},"keyup"),IC(l=this.keycharm).call(l,"left",()=>{this.unbindFromRedraw("_moveLeft")},"keyup"),IC(c=this.keycharm).call(c,"right",()=>{this.unbindFromRedraw("_moveRight")},"keyup"),IC(u=this.keycharm).call(u,"=",()=>{this.unbindFromRedraw("_zoomIn")},"keyup"),IC(p=this.keycharm).call(p,"num+",()=>{this.unbindFromRedraw("_zoomIn")},"keyup"),IC(f=this.keycharm).call(f,"num-",()=>{this.unbindFromRedraw("_zoomOut")},"keyup"),IC(v=this.keycharm).call(v,"-",()=>{this.unbindFromRedraw("_zoomOut")},"keyup"),IC(b=this.keycharm).call(b,"[",()=>{this.unbindFromRedraw("_zoomOut")},"keyup"),IC(m=this.keycharm).call(m,"]",()=>{this.unbindFromRedraw("_zoomIn")},"keyup"),IC(y=this.keycharm).call(y,"pageup",()=>{this.unbindFromRedraw("_zoomIn")},"keyup"),IC(w=this.keycharm).call(w,"pagedown",()=>{this.unbindFromRedraw("_zoomOut")},"keyup")))}}class JT{constructor(g,A,t){var C,I,e,i,o,n,s,r,a,d,h,l,c;this.body=g,this.canvas=A,this.selectionHandler=t,this.navigationHandler=new _T(g,A),this.body.eventListeners.onTap=IC(C=this.onTap).call(C,this),this.body.eventListeners.onTouch=IC(I=this.onTouch).call(I,this),this.body.eventListeners.onDoubleTap=IC(e=this.onDoubleTap).call(e,this),this.body.eventListeners.onHold=IC(i=this.onHold).call(i,this),this.body.eventListeners.onDragStart=IC(o=this.onDragStart).call(o,this),this.body.eventListeners.onDrag=IC(n=this.onDrag).call(n,this),this.body.eventListeners.onDragEnd=IC(s=this.onDragEnd).call(s,this),this.body.eventListeners.onMouseWheel=IC(r=this.onMouseWheel).call(r,this),this.body.eventListeners.onPinch=IC(a=this.onPinch).call(a,this),this.body.eventListeners.onMouseMove=IC(d=this.onMouseMove).call(d,this),this.body.eventListeners.onRelease=IC(h=this.onRelease).call(h,this),this.body.eventListeners.onContext=IC(l=this.onContext).call(l,this),this.touchTime=0,this.drag={},this.pinch={},this.popup=void 0,this.popupObj=void 0,this.popupTimer=void 0,this.body.functions.getPointer=IC(c=this.getPointer).call(c,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},_t(this.options,this.defaultOptions),this.bindEventListeners()}bindEventListeners(){this.body.emitter.on("destroy",()=>{clearTimeout(this.popupTimer),delete this.body.functions.getPointer})}setOptions(g){if(void 0!==g){np(["hideEdgesOnDrag","hideEdgesOnZoom","hideNodesOnDrag","keyboard","multiselect","selectable","selectConnectedEdges"],this.options,g),xp(this.options,g,"keyboard"),g.tooltip&&(_t(this.options.tooltip,g.tooltip),g.tooltip.color&&(this.options.tooltip.color=pp(g.tooltip.color)))}this.navigationHandler.setOptions(this.options)}getPointer(g){return{x:g.x-(A=this.canvas.frame.canvas,A.getBoundingClientRect().left),y:g.y-dp(this.canvas.frame.canvas)};var A}onTouch(g){(new Date).valueOf()-this.touchTime>50&&(this.drag.pointer=this.getPointer(g.center),this.drag.pinched=!1,this.pinch.scale=this.body.view.scale,this.touchTime=(new Date).valueOf())}onTap(g){const A=this.getPointer(g.center),t=this.selectionHandler.options.multiselect&&(g.changedPointers[0].ctrlKey||g.changedPointers[0].metaKey);this.checkSelectionChanges(A,t),this.selectionHandler.commitAndEmit(A,g),this.selectionHandler.generateClickEvent("click",g,A)}onDoubleTap(g){const A=this.getPointer(g.center);this.selectionHandler.generateClickEvent("doubleClick",g,A)}onHold(g){const A=this.getPointer(g.center),t=this.selectionHandler.options.multiselect;this.checkSelectionChanges(A,t),this.selectionHandler.commitAndEmit(A,g),this.selectionHandler.generateClickEvent("click",g,A),this.selectionHandler.generateClickEvent("hold",g,A)}onRelease(g){if((new Date).valueOf()-this.touchTime>10){const A=this.getPointer(g.center);this.selectionHandler.generateClickEvent("release",g,A),this.touchTime=(new Date).valueOf()}}onContext(g){const A=this.getPointer({x:g.clientX,y:g.clientY});this.selectionHandler.generateClickEvent("oncontext",g,A)}checkSelectionChanges(g){!0===(arguments.length>1&&void 0!==arguments[1]&&arguments[1])?this.selectionHandler.selectAdditionalOnPoint(g):this.selectionHandler.selectOnPoint(g)}_determineDifference(g,A){const t=function(g,A){const t=[];for(let C=0;C{const A=g.node;!1===g.xFixed&&(A.x=this.canvas._XconvertDOMtoCanvas(this.canvas._XconvertCanvasToDOM(g.x)+C)),!1===g.yFixed&&(A.y=this.canvas._YconvertDOMtoCanvas(this.canvas._YconvertCanvasToDOM(g.y)+I))}),this.body.emitter.emit("startSimulation")}else{if(g.srcEvent.shiftKey){if(this.selectionHandler.generateClickEvent("dragging",g,A,void 0,!0),void 0===this.drag.pointer)return void this.onDragStart(g);this.body.selectionBox.position.end={x:this.canvas._XconvertDOMtoCanvas(A.x),y:this.canvas._YconvertDOMtoCanvas(A.y)},this.body.emitter.emit("_requestRedraw")}if(!0===this.options.dragView&&!g.srcEvent.shiftKey){if(this.selectionHandler.generateClickEvent("dragging",g,A,void 0,!0),void 0===this.drag.pointer)return void this.onDragStart(g);const t=A.x-this.drag.pointer.x,C=A.y-this.drag.pointer.y;this.body.view.translation={x:this.drag.translation.x+t,y:this.drag.translation.y+C},this.body.emitter.emit("_requestRedraw")}}}onDragEnd(g){if(this.drag.dragging=!1,this.body.selectionBox.show){var A;this.body.selectionBox.show=!1;const t=this.body.selectionBox.position,C={minX:Math.min(t.start.x,t.end.x),minY:Math.min(t.start.y,t.end.y),maxX:Math.max(t.start.x,t.end.x),maxY:Math.max(t.start.y,t.end.y)},I=eh(A=this.body.nodeIndices).call(A,g=>{const A=this.body.nodes[g];return A.x>=C.minX&&A.x<=C.maxX&&A.y>=C.minY&&A.y<=C.maxY});pa(I).call(I,g=>this.selectionHandler.selectObject(this.body.nodes[g]));const e=this.getPointer(g.center);this.selectionHandler.commitAndEmit(e,g),this.selectionHandler.generateClickEvent("dragEnd",g,this.getPointer(g.center),void 0,!0),this.body.emitter.emit("_requestRedraw")}else{const A=this.drag.selection;A&&A.length?(pa(A).call(A,function(g){g.node.options.fixed.x=g.xFixed,g.node.options.fixed.y=g.yFixed}),this.selectionHandler.generateClickEvent("dragEnd",g,this.getPointer(g.center)),this.body.emitter.emit("startSimulation")):(this.selectionHandler.generateClickEvent("dragEnd",g,this.getPointer(g.center),void 0,!0),this.body.emitter.emit("_requestRedraw"))}}onPinch(g){const A=this.getPointer(g.center);this.drag.pinched=!0,void 0===this.pinch.scale&&(this.pinch.scale=1);const t=this.pinch.scale*g.scale;this.zoom(t,A)}zoom(g,A){if(!0===this.options.zoomView){const t=this.body.view.scale;let C;g<1e-5&&(g=1e-5),g>10&&(g=10),void 0!==this.drag&&!0===this.drag.dragging&&(C=this.canvas.DOMtoCanvas(this.drag.pointer));const I=this.body.view.translation,e=g/t,i=(1-e)*A.x+I.x*e,o=(1-e)*A.y+I.y*e;if(this.body.view.scale=g,this.body.view.translation={x:i,y:o},null!=C){const g=this.canvas.canvasToDOM(C);this.drag.pointer.x=g.x,this.drag.pointer.y=g.y}this.body.emitter.emit("_requestRedraw"),tthis._checkShowPopup(A),this.options.tooltipDelay))),!0===this.options.hover&&this.selectionHandler.hoverObject(g,A)}_checkShowPopup(g){const A=this.canvas._XconvertDOMtoCanvas(g.x),t=this.canvas._YconvertDOMtoCanvas(g.y),C={left:A,top:t,right:A,bottom:t},I=void 0===this.popupObj?void 0:this.popupObj.id;let e=!1,i="node";if(void 0===this.popupObj){const g=this.body.nodeIndices,A=this.body.nodes;let t;const I=[];for(let i=0;i0&&(this.popupObj=A[I[I.length-1]],e=!0)}if(void 0===this.popupObj&&!1===e){const g=this.body.edgeIndices,A=this.body.edges;let t;const I=[];for(let e=0;e0&&(this.popupObj=A[I[I.length-1]],i="edge")}void 0!==this.popupObj?this.popupObj.id!==I&&(void 0===this.popup&&(this.popup=new Zp(this.canvas.frame)),this.popup.popupTargetType=i,this.popup.popupTargetId=this.popupObj.id,this.popup.setPosition(g.x+3,g.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"))}_checkHidePopup(g){const A=this.selectionHandler._pointerToPositionObject(g);let t=!1;if("node"===this.popup.popupTargetType){if(void 0!==this.body.nodes[this.popup.popupTargetId]&&(t=this.body.nodes[this.popup.popupTargetId].isOverlappingWith(A),!0===t)){const A=this.selectionHandler.getNodeAt(g);t=void 0!==A&&A.id===this.popup.popupTargetId}}else void 0===this.selectionHandler.getNodeAt(g)&&void 0!==this.body.edges[this.popup.popupTargetId]&&(t=this.body.edges[this.popup.popupTargetId].isOverlappingWith(A));!1===t&&(this.popupObj=void 0,this.popup.hide(),this.body.emitter.emit("hidePopup"))}}class qT{getDistances(g,A,t){const C={},I=g.edges;for(let g=0;g2&&void 0!==arguments[2]&&arguments[2];const C=this.distanceSolver.getDistances(this.body,g,A);this._createL_matrix(C),this._createK_matrix(C),this._createE_matrix();let I=0;const e=Math.max(1e3,Math.min(10*this.body.nodeIndices.length,6e3));let i=1e9,o=0,n=0,s=0,r=0,a=0;for(;i>.01&&I1&&a<5;){a+=1,this._moveNode(o,n,s);var h=js(this._getEnergy(o),3);r=h[0],n=h[1],s=h[2]}}}_getHighestEnergyNode(g){const A=this.body.nodeIndices,t=this.body.nodes;let C=0,I=A[0],e=0,i=0;for(let o=0;o2&&void 0!==arguments[2]?arguments[2]:void 0;this.fake_use(g,A,t),this.abstract()}getTreeSize(g){return this.fake_use(g),this.abstract()}sort(g){this.fake_use(g),this.abstract()}fix(g,A){this.fake_use(g,A),this.abstract()}shift(g,A){this.fake_use(g,A),this.abstract()}}class AD extends gD{constructor(g){super(),this.layout=g}curveType(){return"horizontal"}getPosition(g){return g.x}setPosition(g,A){let t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;void 0!==t&&this.layout.hierarchical.addToOrdering(g,t),g.x=A}getTreeSize(g){const A=this.layout.hierarchical.getTreeSize(this.layout.body.nodes,g);return{min:A.min_x,max:A.max_x}}sort(g){IT(g).call(g,function(g,A){return g.x-A.x})}fix(g,A){g.y=this.layout.options.hierarchical.levelSeparation*A,g.options.fixed.y=!0}shift(g,A){this.layout.body.nodes[g].x+=A}}class tD extends gD{constructor(g){super(),this.layout=g}curveType(){return"vertical"}getPosition(g){return g.y}setPosition(g,A){let t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;void 0!==t&&this.layout.hierarchical.addToOrdering(g,t),g.y=A}getTreeSize(g){const A=this.layout.hierarchical.getTreeSize(this.layout.body.nodes,g);return{min:A.min_y,max:A.max_y}}sort(g){IT(g).call(g,function(g,A){return g.y-A.y})}fix(g,A){g.x=this.layout.options.hierarchical.levelSeparation*A,g.options.fixed.x=!0}shift(g,A){this.layout.body.nodes[g].y+=A}}var CD,ID,eD,iD,oD,nD,sD,rD,aD,dD={};function hD(){return eD?ID:(eD=1,function(){if(CD)return dD;CD=1;var g=st(),A=he().every;g({target:"Array",proto:!0,forced:!Ca()("every")},{every:function(g){return A(this,g,arguments.length>1?arguments[1]:void 0)}})}(),ID=gC()("Array","every"))}function lD(){if(oD)return iD;oD=1;var g=Ng(),A=hD(),t=Array.prototype;return iD=function(C){var I=C.every;return C===t||g(t,C)&&I===t.every?A:I},iD}function cD(){return sD?nD:(sD=1,nD=lD())}var uD=C(aD?rD:(aD=1,rD=cD()));function pD(g,A){const t=new uO;return pa(g).call(g,g=>{var A;pa(A=g.edges).call(A,g=>{g.connected&&t.add(g)})}),pa(t).call(t,g=>{const t=g.from.id,C=g.to.id;null==A[t]&&(A[t]=0),(null==A[C]||A[t]>=A[C])&&(A[C]=A[t]+1)}),A}function fD(g,A,t,C){var I;const e=hl(null),i=cw(I=[...Ay(C).call(C)]).call(I,(g,A)=>g+1+A.edges.length,0),o=t+"Id",n="to"===t?1:-1;for(const I of C){var s=js(I,2);const d=s[0],h=s[1];if(!C.has(d)||!g(h))continue;e[d]=0;const l=[h];let c,u=0;for(;c=l.pop();){var r,a;if(!C.has(d))continue;const g=e[c.id]+n;if(pa(r=eh(a=c.edges).call(a,g=>g.connected&&g.to!==g.from&&g[t]!==c&&C.has(g.toId)&&C.has(g.fromId))).call(r,C=>{const I=C[o],i=e[I];(null==i||A(g,i))&&(e[I]=g,l.push(C[t]))}),u>i)return pD(C,e);++u}}return e}class vD{constructor(){this.childrenReference={},this.parentReference={},this.trees={},this.distributionOrdering={},this.levels={},this.distributionIndex={},this.isTree=!1,this.treeIndex=-1}addRelation(g,A){void 0===this.childrenReference[g]&&(this.childrenReference[g]=[]),this.childrenReference[g].push(A),void 0===this.parentReference[A]&&(this.parentReference[A]=[]),this.parentReference[A].push(g)}checkIfTree(){for(const g in this.parentReference)if(this.parentReference[g].length>1)return void(this.isTree=!1);this.isTree=!0}numTrees(){return this.treeIndex+1}setTreeIndex(g,A){void 0!==A&&void 0===this.trees[g.id]&&(this.trees[g.id]=A,this.treeIndex=Math.max(A,this.treeIndex))}ensureLevel(g){void 0===this.levels[g]&&(this.levels[g]=0)}getMaxLevel(g){const A={},t=g=>{if(void 0!==A[g])return A[g];let C=this.levels[g];if(this.childrenReference[g]){const A=this.childrenReference[g];if(A.length>0)for(let g=0;gg-A);for(const C of t)g.set(C,A++);for(const A in this.levels)Object.prototype.hasOwnProperty.call(this.levels,A)&&(this.levels[A]=g.get(this.levels[A]))}getTreeSize(g,A){let t=1e9,C=-1e9,I=1e9,e=-1e9;for(const i in this.trees)if(Object.prototype.hasOwnProperty.call(this.trees,i)&&this.trees[i]===A){const A=g[i];t=Math.min(A.x,t),C=Math.max(A.x,C),I=Math.min(A.y,I),e=Math.max(A.y,e)}return{min_x:t,max_x:C,min_y:I,max_y:e}}hasSameParent(g,A){const t=this.parentReference[g.id],C=this.parentReference[A.id];if(void 0===t||void 0===C)return!1;for(let g=0;g{this.setupHierarchicalLayout()}),this.body.emitter.on("_dataLoaded",()=>{this.layoutNetwork()}),this.body.emitter.on("_resetHierarchicalLayout",()=>{this.setupHierarchicalLayout()}),this.body.emitter.on("_adjustEdgesForHierarchicalLayout",()=>{if(!0!==this.options.hierarchical.enabled)return;const g=this.direction.curveType();this.body.emitter.emit("_forceDisableDynamicCurves",g,!1)})}setOptions(g,A){if(void 0!==g){const t=this.options.hierarchical,C=t.enabled;if(op(["randomSeed","improvedLayout","clusterThreshold"],this.options,g),xp(this.options,g,"hierarchical"),void 0!==g.randomSeed&&this._resetRNG(g.randomSeed),!0===t.enabled)return!0===C&&this.body.emitter.emit("refresh",!0),"RL"===t.direction||"DU"===t.direction?t.levelSeparation>0&&(t.levelSeparation*=-1):t.levelSeparation<0&&(t.levelSeparation*=-1),this.setDirectionStrategy(),this.body.emitter.emit("_resetHierarchicalLayout"),this.adaptAllOptionsForHierarchicalLayout(A);if(!0===C)return this.body.emitter.emit("refresh"),sp(A,this.optionsBackup)}return A}_resetRNG(g){this.initialRandomSeed=g,this._rng=Xu(this.initialRandomSeed)}adaptAllOptionsForHierarchicalLayout(g){if(!0===this.options.hierarchical.enabled){const A=this.optionsBackup.physics;void 0===g.physics||!0===g.physics?(g.physics={enabled:void 0===A.enabled||A.enabled,solver:"hierarchicalRepulsion"},A.enabled=void 0===A.enabled||A.enabled,A.solver=A.solver||"barnesHut"):"object"==typeof g.physics?(A.enabled=void 0===g.physics.enabled||g.physics.enabled,A.solver=g.physics.solver||"barnesHut",g.physics.solver="hierarchicalRepulsion"):!1!==g.physics&&(A.solver="barnesHut",g.physics={solver:"hierarchicalRepulsion"});let t=this.direction.curveType();if(void 0===g.edges)this.optionsBackup.edges={smooth:{enabled:!0,type:"dynamic"}},g.edges={smooth:!1};else if(void 0===g.edges.smooth)this.optionsBackup.edges={smooth:{enabled:!0,type:"dynamic"}},g.edges.smooth=!1;else if("boolean"==typeof g.edges.smooth)this.optionsBackup.edges={smooth:g.edges.smooth},g.edges.smooth={enabled:g.edges.smooth,type:t};else{const A=g.edges.smooth;void 0!==A.type&&"dynamic"!==A.type&&(t=A.type),this.optionsBackup.edges={smooth:{enabled:void 0===A.enabled||A.enabled,type:void 0===A.type?"dynamic":A.type,roundness:void 0===A.roundness?.5:A.roundness,forceDirection:void 0!==A.forceDirection&&A.forceDirection}},g.edges.smooth={enabled:void 0===A.enabled||A.enabled,type:t,roundness:void 0===A.roundness?.5:A.roundness,forceDirection:void 0!==A.forceDirection&&A.forceDirection}}this.body.emitter.emit("_forceDisableDynamicCurves",t)}return g}positionInitially(g){if(!0!==this.options.hierarchical.enabled){this._resetRNG(this.initialRandomSeed);const A=g.length+50;for(let t=0;tC){const e=g.length;for(;g.length>C&&t<=A;){t+=1;const A=g.length;t%3==0?this.body.modules.clustering.clusterBridges(I):this.body.modules.clustering.clusterOutliers(I);if(A==g.length&&t%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*e)})}t>A&&console.info("The clustering didn't succeed within the amount of interations allowed, progressing with partial result."),this.body.modules.kamadaKawai.solve(g,this.body.edgeIndices,!0),this._shiftToCenter();const e=70;for(let A=0;A0){let g,A,t=!1,C=!1;for(A in this.lastNodeOnLevel={},this.hierarchical=new vD,this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,A)&&(g=this.body.nodes[A],void 0!==g.options.level?(t=!0,this.hierarchical.levels[A]=g.options.level):C=!0);if(!0===C&&!0===t)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===C){const g=this.options.hierarchical.sortMethod;"hubsize"===g?this._determineLevelsByHubsize():"directed"===g?this._determineLevelsDirected():"custom"===g&&this._determineLevelsCustomCallback()}for(const g in this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,g)&&this.hierarchical.ensureLevel(g);const g=this._getDistribution();this._generateMap(),this._placeNodesByHierarchy(g),this._condenseHierarchy(),this._shiftToCenter()}}}_condenseHierarchy(){var g=this;let A=!1;const t={},C=(g,A)=>{const t=this.hierarchical.trees;for(const C in t)Object.prototype.hasOwnProperty.call(t,C)&&t[C]===g&&this.direction.shift(C,A)},I=()=>{const g=[];for(let A=0;A{if(!A[g.id]&&(A[g.id]=!0,this.hierarchical.childrenReference[g.id])){const t=this.hierarchical.childrenReference[g.id];if(t.length>0)for(let g=0;g1&&void 0!==arguments[1]?arguments[1]:1e9,C=1e9,I=1e9,e=1e9,i=-1e9;for(const o in A)if(Object.prototype.hasOwnProperty.call(A,o)){const n=g.body.nodes[o],s=g.hierarchical.levels[n.id],r=g.direction.getPosition(n),a=js(g._getSpaceAroundNode(n,A),2),d=a[0],h=a[1];C=Math.min(d,C),I=Math.min(h,I),s<=t&&(e=Math.min(r,e),i=Math.max(r,i))}return[e,i,C,I]},o=(g,A)=>{const t=this.hierarchical.getMaxLevel(g.id),C=this.hierarchical.getMaxLevel(A.id);return Math.min(t,C)},n=(g,A,t)=>{const C=this.hierarchical;for(let I=0;I1)for(let A=0;A2&&void 0!==arguments[2]&&arguments[2];const n=g.direction.getPosition(t),s=g.direction.getPosition(C),r=Math.abs(s-n),a=g.options.hierarchical.nodeSpacing;if(r>a){const n={},s={};e(t,n),e(C,s);const r=o(t,C),d=i(n,r),h=i(s,r),l=d[1],c=h[0],u=h[2];if(Math.abs(l-c)>a){let t=l-c+a;t<-u+a&&(t=-u+a),t<0&&(g._shiftBlock(C.id,t),A=!0,!0===I&&g._centerParent(C))}}},r=(g,C)=>{const I=C.id,o=C.edges,n=this.hierarchical.levels[C.id],s=this.options.hierarchical.levelSeparation*this.options.hierarchical.levelSeparation,r={},a=[];for(let g=0;g{let t=0;for(let C=0;C{let t=0;for(let C=0;C{let t=this.direction.getPosition(C);const I={};for(let C=0;C{const I=this.direction.getPosition(C);if(void 0===t[C.id]){const g={};e(C,g),t[C.id]=g}const o=i(t[C.id]),n=o[2],s=o[3],r=g-I;let a=0;r>0?a=Math.min(r,s-this.options.hierarchical.nodeSpacing):r<0&&(a=-Math.min(-r,n-this.options.hierarchical.nodeSpacing)),0!=a&&(this._shiftBlock(C.id,a),A=!0)})(c),c=l(g,o),(g=>{const t=this.direction.getPosition(C),I=js(this._getSpaceAroundNode(C),2),e=I[0],i=I[1],o=g-t;let n=t;o>0?n=Math.min(t+(i-this.options.hierarchical.nodeSpacing),g):o<0&&(n=Math.max(t-(e-this.options.hierarchical.nodeSpacing),g)),n!==t&&(this.direction.setPosition(C,n),A=!0)})(c)},a=g=>{let t=this.hierarchical.getLevels();t=t.toReversed();for(let C=0;C{let t=this.hierarchical.getLevels();t=t.toReversed();for(let C=0;C{for(const g in this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,g)&&this._centerParent(this.body.nodes[g])},l=()=>{let g=this.hierarchical.getLevels();g=g.toReversed();for(let A=0;A{const g=I();let A=0;for(let t=0;t0&&Math.abs(o)0&&(i=this.direction.getPosition(C[g-1])+e),this.direction.setPosition(A,i,t),this._validatePositionAndContinue(A,t,i),I++}}}}_placeBranchNodes(g,A){var t;const C=this.hierarchical.childrenReference[g];if(void 0===C)return;const I=[];for(let g=0;gA&&void 0===this.positionedNodes[C.id]))return;{const A=this.options.hierarchical.nodeSpacing;let i;i=0===t?this.direction.getPosition(this.body.nodes[g]):this.direction.getPosition(I[t-1])+A,this.direction.setPosition(C,i,e),this._validatePositionAndContinue(C,e,i)}}const e=this._getCenterPosition(I);this.direction.setPosition(this.body.nodes[g],e,A)}_validatePositionAndContinue(g,A,t){if(this.hierarchical.isTree){if(void 0!==this.lastNodeOnLevel[A]){const C=this.direction.getPosition(this.body.nodes[this.lastNodeOnLevel[A]]);if(t-C{var t;-1!==Jh(t=this.body.edgeIndices).call(t,g.id)&&A.push(g)}),A}_getHubSizes(){const g={};hp(this.body.nodeIndices,A=>{const t=this.body.nodes[A],C=this._getActiveEdges(t).length;g[C]=!0});const A=[];return hp(g,g=>{A.push(Number(g))}),IT(A).call(A,function(g,A){return A-g}),A}_determineLevelsByHubsize(){const g=(g,A)=>{this.hierarchical.levelDownstream(g,A)},A=this._getHubSizes();for(let t=0;t{const t=this.body.nodes[A];C===this._getActiveEdges(t).length&&this._crawlNetwork(g,A)})}}_determineLevelsCustomCallback(){this._crawlNetwork((g,A,t)=>{let C=this.hierarchical.levels[g.id];void 0===C&&(C=this.hierarchical.levels[g.id]=1e5);const I=(Ff.cloneOptions(g,"node"),Ff.cloneOptions(A,"node"),void Ff.cloneOptions(t,"edge"));this.hierarchical.levels[A.id]=C+I}),this.hierarchical.setMinLevelToZero()}_determineLevelsDirected(){var g;const A=cw(g=this.body.nodeIndices).call(g,(g,A)=>(g.set(A,this.body.nodes[A]),g),new Zx);"roots"===this.options.hierarchical.shakeTowards?this.hierarchical.levels=function(g){return fD(A=>{var t,C;return uD(t=eh(C=A.edges).call(C,A=>g.has(A.toId))).call(t,g=>g.from===A)},(g,A)=>A{var t,C;return uD(t=eh(C=A.edges).call(C,A=>g.has(A.toId))).call(t,g=>g.to===A)},(g,A)=>A>g,"from",g)}(A),this.hierarchical.setMinLevelToZero()}_generateMap(){this._crawlNetwork((g,A)=>{this.hierarchical.levels[A.id]>this.hierarchical.levels[g.id]&&this.hierarchical.addRelation(g.id,A.id)}),this.hierarchical.checkIfTree()}_crawlNetwork(){let g=arguments.length>0&&void 0!==arguments[0]?arguments[0]:function(){},A=arguments.length>1?arguments[1]:void 0;const t={},C=(A,I)=>{if(void 0===t[A.id]){let e;this.hierarchical.setTreeIndex(A,I),t[A.id]=!0;const i=this._getActiveEdges(A);for(let t=0;t{if(t[g])return;t[g]=!0,this.direction.shift(g,A);const I=this.hierarchical.childrenReference[g];if(void 0!==I)for(let g=0;g{const t=this.hierarchical.parentReference[A];if(void 0!==t)for(let A=0;A{const t=this.hierarchical.parentReference[A];if(void 0!==t)for(let C=0;C{this._clean()}),this.body.emitter.on("_dataChanged",IC(I=this._restore).call(I,this)),this.body.emitter.on("_resetData",IC(e=this._restore).call(e,this))}_restore(){!1!==this.inMode&&(!0===this.options.initiallyActive?this.enableEditMode():this.disableEditMode())}setOptions(g,A,t){void 0!==A&&(void 0!==A.locale?this.options.locale=A.locale:this.options.locale=t.locale,void 0!==A.locales?this.options.locales=A.locales:this.options.locales=t.locales),void 0!==g&&("boolean"==typeof g?this.options.enabled=g:(this.options.enabled=!0,sp(this.options,g)),!0===this.options.initiallyActive&&(this.editMode=!0),this._setup())}toggleEditMode(){!0===this.editMode?this.disableEditMode():this.enableEditMode()}enableEditMode(){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())}disableEditMode(){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())}showManipulatorToolbar(){if(this._clean(),this.manipulationDOM={},!0===this.guiEnabled){var g,A;this.editMode=!0,this.manipulationDiv.style.display="block",this.closeDiv.style.display="block";const t=this.selectionHandler.getSelectedNodeCount(),C=this.selectionHandler.getSelectedEdgeCount(),I=t+C,e=this.options.locales[this.options.locale];let i=!1;!1!==this.options.addNode&&(this._createAddNodeButton(e),i=!0),!1!==this.options.addEdge&&(!0===i?this._createSeperator(1):i=!0,this._createAddEdgeButton(e)),1===t&&"function"==typeof this.options.editNode?(!0===i?this._createSeperator(2):i=!0,this._createEditNodeButton(e)):1===C&&0===t&&!1!==this.options.editEdge&&(!0===i?this._createSeperator(3):i=!0,this._createEditEdgeButton(e)),0!==I&&(t>0&&!1!==this.options.deleteNode||0===t&&!1!==this.options.deleteEdge)&&(!0===i&&this._createSeperator(4),this._createDeleteButton(e)),this._bindElementEvents(this.closeDiv,IC(g=this.toggleEditMode).call(g,this)),this._temporaryBindEvent("select",IC(A=this.showManipulatorToolbar).call(A,this))}this.body.emitter.emit("_redraw")}addNodeMode(){var g;if(!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode="addNode",!0===this.guiEnabled){var A;const g=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(g),this._createSeperator(),this._createDescription(g.addDescription||this.options.locales.en.addDescription),this._bindElementEvents(this.closeDiv,IC(A=this.toggleEditMode).call(A,this))}this._temporaryBindEvent("click",IC(g=this._performAddNode).call(g,this))}editNode(){!0!==this.editMode&&this.enableEditMode(),this._clean();const g=this.selectionHandler.getSelectedNodes()[0];if(void 0!==g){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!==g.isCluster){const A=sp({},g.options,!1);if(A.x=g.x,A.y=g.y,2!==this.options.editNode.length)throw new Error("The function for edit does not support two arguments (data, callback)");this.options.editNode(A,g=>{null!=g&&"editNode"===this.inMode&&this.body.data.nodes.getDataSet().update(g),this.showManipulatorToolbar()})}else alert(this.options.locales[this.options.locale].editClusterError||this.options.locales.en.editClusterError)}else this.showManipulatorToolbar()}addEdgeMode(){var g,A,t,C,I;if(!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode="addEdge",!0===this.guiEnabled){var e;const g=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(g),this._createSeperator(),this._createDescription(g.edgeDescription||this.options.locales.en.edgeDescription),this._bindElementEvents(this.closeDiv,IC(e=this.toggleEditMode).call(e,this))}this._temporaryBindUI("onTouch",IC(g=this._handleConnect).call(g,this)),this._temporaryBindUI("onDragEnd",IC(A=this._finishConnect).call(A,this)),this._temporaryBindUI("onDrag",IC(t=this._dragControlNode).call(t,this)),this._temporaryBindUI("onRelease",IC(C=this._finishConnect).call(C,this)),this._temporaryBindUI("onDragStart",IC(I=this._dragStartEdge).call(I,this)),this._temporaryBindUI("onHold",()=>{})}editEdgeMode(){if(!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode="editEdge","object"==typeof this.options.editEdge&&"function"==typeof this.options.editEdge.editWithoutDrag&&(this.edgeBeingEditedId=this.selectionHandler.getSelectedEdgeIds()[0],void 0!==this.edgeBeingEditedId)){const g=this.body.edges[this.edgeBeingEditedId];return void this._performEditEdge(g.from.id,g.to.id)}if(!0===this.guiEnabled){var g;const A=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(A),this._createSeperator(),this._createDescription(A.editEdgeDescription||this.options.locales.en.editEdgeDescription),this._bindElementEvents(this.closeDiv,IC(g=this.toggleEditMode).call(g,this))}if(this.edgeBeingEditedId=this.selectionHandler.getSelectedEdgeIds()[0],void 0!==this.edgeBeingEditedId){var A,t,C,I;const g=this.body.edges[this.edgeBeingEditedId],e=this._getNewTargetNode(g.from.x,g.from.y),i=this._getNewTargetNode(g.to.x,g.to.y);this.temporaryIds.nodes.push(e.id),this.temporaryIds.nodes.push(i.id),this.body.nodes[e.id]=e,this.body.nodeIndices.push(e.id),this.body.nodes[i.id]=i,this.body.nodeIndices.push(i.id),this._temporaryBindUI("onTouch",IC(A=this._controlNodeTouch).call(A,this)),this._temporaryBindUI("onTap",()=>{}),this._temporaryBindUI("onHold",()=>{}),this._temporaryBindUI("onDragStart",IC(t=this._controlNodeDragStart).call(t,this)),this._temporaryBindUI("onDrag",IC(C=this._controlNodeDrag).call(C,this)),this._temporaryBindUI("onDragEnd",IC(I=this._controlNodeDragEnd).call(I,this)),this._temporaryBindUI("onMouseMove",()=>{}),this._temporaryBindEvent("beforeDrawing",A=>{const t=g.edgeType.findBorderPositions(A);!1===e.selected&&(e.x=t.from.x,e.y=t.from.y),!1===i.selected&&(i.x=t.to.x,i.y=t.to.y)}),this.body.emitter.emit("_redraw")}else this.showManipulatorToolbar()}deleteSelected(){!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode="delete";const g=this.selectionHandler.getSelectedNodeIds(),A=this.selectionHandler.getSelectedEdgeIds();let t;if(g.length>0){for(let A=0;A0&&"function"==typeof this.options.deleteEdge&&(t=this.options.deleteEdge);if("function"==typeof t){const C={nodes:g,edges:A};if(2!==t.length)throw new Error("The function for delete does not support two arguments (data, callback)");t(C,g=>{null!=g&&"delete"===this.inMode?(this.body.data.edges.getDataSet().remove(g.edges),this.body.data.nodes.getDataSet().remove(g.nodes),this.body.emitter.emit("startSimulation"),this.showManipulatorToolbar()):(this.body.emitter.emit("startSimulation"),this.showManipulatorToolbar())})}else this.body.data.edges.getDataSet().remove(A),this.body.data.nodes.getDataSet().remove(g),this.body.emitter.emit("startSimulation"),this.showManipulatorToolbar()}_setup(){!0===this.options.enabled?(this.guiEnabled=!0,this._createWrappers(),!1===this.editMode?this._createEditButton():this.showManipulatorToolbar()):(this._removeManipulationDOM(),this.guiEnabled=!1)}_createWrappers(){var g,A;(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!==(g=null===(A=this.options.locales[this.options.locale])||void 0===A?void 0:A.close)&&void 0!==g?g:this.options.locales.en.close),this.closeDiv.style.display=this.manipulationDiv.style.display,this.canvas.frame.appendChild(this.closeDiv))}_getNewTargetNode(g,A){const t=sp({},this.options.controlNodeStyle);t.id="targetNode"+Sf(),t.hidden=!1,t.physics=!1,t.x=g,t.y=A;const C=this.body.functions.createNode(t);return C.shape.boundingBox={left:g,right:g,top:A,bottom:A},C}_createEditButton(){var g;this._clean(),this.manipulationDOM={},tp(this.editModeDiv);const A=this.options.locales[this.options.locale],t=this._createButton("editMode","vis-edit vis-edit-mode",A.edit||this.options.locales.en.edit);this.editModeDiv.appendChild(t),this._bindElementEvents(t,IC(g=this.toggleEditMode).call(g,this))}_clean(){this.inMode=!1,!0===this.guiEnabled&&(tp(this.editModeDiv),tp(this.manipulationDiv),this._cleanupDOMEventListeners()),this._cleanupTemporaryNodesAndEdges(),this._unbindTemporaryUIs(),this._unbindTemporaryEvents(),this.body.emitter.emit("restorePhysics")}_cleanupDOMEventListeners(){for(const A of Va(g=this._domEventListenerCleanupQueue).call(g,0)){var g;A()}}_removeManipulationDOM(){this._clean(),tp(this.manipulationDiv),tp(this.editModeDiv),tp(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}_createSeperator(){let g=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;this.manipulationDOM["seperatorLineDiv"+g]=document.createElement("div"),this.manipulationDOM["seperatorLineDiv"+g].className="vis-separator-line",this.manipulationDiv.appendChild(this.manipulationDOM["seperatorLineDiv"+g])}_createAddNodeButton(g){var A;const t=this._createButton("addNode","vis-add",g.addNode||this.options.locales.en.addNode);this.manipulationDiv.appendChild(t),this._bindElementEvents(t,IC(A=this.addNodeMode).call(A,this))}_createAddEdgeButton(g){var A;const t=this._createButton("addEdge","vis-connect",g.addEdge||this.options.locales.en.addEdge);this.manipulationDiv.appendChild(t),this._bindElementEvents(t,IC(A=this.addEdgeMode).call(A,this))}_createEditNodeButton(g){var A;const t=this._createButton("editNode","vis-edit",g.editNode||this.options.locales.en.editNode);this.manipulationDiv.appendChild(t),this._bindElementEvents(t,IC(A=this.editNode).call(A,this))}_createEditEdgeButton(g){var A;const t=this._createButton("editEdge","vis-edit",g.editEdge||this.options.locales.en.editEdge);this.manipulationDiv.appendChild(t),this._bindElementEvents(t,IC(A=this.editEdgeMode).call(A,this))}_createDeleteButton(g){var A;let t;t=this.options.rtl?"vis-delete-rtl":"vis-delete";const C=this._createButton("delete",t,g.del||this.options.locales.en.del);this.manipulationDiv.appendChild(C),this._bindElementEvents(C,IC(A=this.deleteSelected).call(A,this))}_createBackButton(g){var A;const t=this._createButton("back","vis-back",g.back||this.options.locales.en.back);this.manipulationDiv.appendChild(t),this._bindElementEvents(t,IC(A=this.showManipulatorToolbar).call(A,this))}_createButton(g,A,t){let C=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"vis-label";return this.manipulationDOM[g+"Div"]=document.createElement("button"),this.manipulationDOM[g+"Div"].className="vis-button "+A,this.manipulationDOM[g+"Label"]=document.createElement("div"),this.manipulationDOM[g+"Label"].className=C,this.manipulationDOM[g+"Label"].innerText=t,this.manipulationDOM[g+"Div"].appendChild(this.manipulationDOM[g+"Label"]),this.manipulationDOM[g+"Div"]}_createDescription(g){this.manipulationDOM.descriptionLabel=document.createElement("div"),this.manipulationDOM.descriptionLabel.className="vis-none",this.manipulationDOM.descriptionLabel.innerText=g,this.manipulationDiv.appendChild(this.manipulationDOM.descriptionLabel)}_temporaryBindEvent(g,A){this.temporaryEventFunctions.push({event:g,boundFunction:A}),this.body.emitter.on(g,A)}_temporaryBindUI(g,A){if(void 0===this.body.eventListeners[g])throw new Error("This UI function does not exist. Typo? You tried: "+g+" possible are: "+Tl(Fr(this.body.eventListeners)));this.temporaryUIFunctions[g]=this.body.eventListeners[g],this.body.eventListeners[g]=A}_unbindTemporaryUIs(){for(const g in this.temporaryUIFunctions)Object.prototype.hasOwnProperty.call(this.temporaryUIFunctions,g)&&(this.body.eventListeners[g]=this.temporaryUIFunctions[g],delete this.temporaryUIFunctions[g]);this.temporaryUIFunctions={}}_unbindTemporaryEvents(){for(let g=0;g{t.destroy()});const C=g=>{let t=g.keyCode,C=g.key;"Enter"!==C&&" "!==C&&13!==t&&32!==t||A()};g.addEventListener("keyup",C,!1),this._domEventListenerCleanupQueue.push(()=>{g.removeEventListener("keyup",C,!1)})}_cleanupTemporaryNodesAndEdges(){for(let t=0;t=0;g--)if(I[g]!==this.selectedControlNode.id){e=this.body.nodes[I[g]];break}if(void 0!==e&&void 0!==this.selectedControlNode)if(!0===e.isCluster)alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError);else{const g=this.body.nodes[this.temporaryIds.nodes[0]];this.selectedControlNode.id===g.id?this._performEditEdge(e.id,C.to.id):this._performEditEdge(C.from.id,e.id)}else C.updateEdgeType(),this.body.emitter.emit("restorePhysics");this.body.emitter.emit("_redraw")}_handleConnect(g){if((new Date).valueOf()-this.touchTime>100){this.lastTouch=this.body.functions.getPointer(g.center),this.lastTouch.translation=_t({},this.body.view.translation),this.interactionHandler.drag.pointer=this.lastTouch,this.interactionHandler.drag.translation=this.lastTouch.translation;const A=this.lastTouch,t=this.selectionHandler.getNodeAt(A);if(void 0!==t)if(!0===t.isCluster)alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError);else{const g=this._getNewTargetNode(t.x,t.y);this.body.nodes[g.id]=g,this.body.nodeIndices.push(g.id);const A=this.body.functions.createEdge({id:"connectionEdge"+Sf(),from:t.id,to:g.id,physics:!1,smooth:{enabled:!0,type:"continuous",roundness:.5}});this.body.edges[A.id]=A,this.body.edgeIndices.push(A.id),this.temporaryIds.nodes.push(g.id),this.temporaryIds.edges.push(A.id)}this.touchTime=(new Date).valueOf()}}_dragControlNode(g){const A=this.body.functions.getPointer(g.center),t=this.selectionHandler._pointerToPositionObject(A);let C;void 0!==this.temporaryIds.edges[0]&&(C=this.body.edges[this.temporaryIds.edges[0]].fromId);const I=this.selectionHandler._getAllNodesOverlappingWith(t);let e;for(let g=I.length-1;g>=0;g--){var i;if(-1===Jh(i=this.temporaryIds.nodes).call(i,I[g])){e=this.body.nodes[I[g]];break}}if(g.controlEdge={from:C,to:e?e.id:void 0},this.selectionHandler.generateClickEvent("controlNodeDragging",g,A),void 0!==this.temporaryIds.nodes[0]){const g=this.body.nodes[this.temporaryIds.nodes[0]];g.x=this.canvas._XconvertDOMtoCanvas(A.x),g.y=this.canvas._YconvertDOMtoCanvas(A.y),this.body.emitter.emit("_redraw")}else this.interactionHandler.onDrag(g)}_finishConnect(g){const A=this.body.functions.getPointer(g.center),t=this.selectionHandler._pointerToPositionObject(A);let C;void 0!==this.temporaryIds.edges[0]&&(C=this.body.edges[this.temporaryIds.edges[0]].fromId);const I=this.selectionHandler._getAllNodesOverlappingWith(t);let e;for(let g=I.length-1;g>=0;g--){var i;if(-1===Jh(i=this.temporaryIds.nodes).call(i,I[g])){e=this.body.nodes[I[g]];break}}this._cleanupTemporaryNodesAndEdges(),void 0!==e&&(!0===e.isCluster?alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError):void 0!==this.body.nodes[C]&&void 0!==this.body.nodes[e.id]&&this._performAddEdge(C,e.id)),g.controlEdge={from:C,to:e?e.id:void 0},this.selectionHandler.generateClickEvent("controlNodeDragEnd",g,A),this.body.emitter.emit("_redraw")}_dragStartEdge(g){const A=this.lastTouch;this.selectionHandler.generateClickEvent("dragStart",g,A,void 0,!0)}_performAddNode(g){const A={id:Sf(),x:g.pointer.canvas.x,y:g.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(A,g=>{null!=g&&"addNode"===this.inMode&&this.body.data.nodes.getDataSet().add(g),this.showManipulatorToolbar()})}else this.body.data.nodes.getDataSet().add(A),this.showManipulatorToolbar()}_performAddEdge(g,A){const t={from:g,to:A};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(t,g=>{null!=g&&"addEdge"===this.inMode&&(this.body.data.edges.getDataSet().add(g),this.selectionHandler.unselectAll(),this.showManipulatorToolbar())})}else this.body.data.edges.getDataSet().add(t),this.selectionHandler.unselectAll(),this.showManipulatorToolbar()}_performEditEdge(g,A){const t={id:this.edgeBeingEditedId,from:g,to:A,label:this.body.data.edges.get(this.edgeBeingEditedId).label};let C=this.options.editEdge;if("object"==typeof C&&(C=C.editWithoutDrag),"function"==typeof C){if(2!==C.length)throw new Error("The function for edit does not support two arguments (data, callback)");C(t,g=>{null==g||"editEdge"!==this.inMode?(this.body.edges[t.id].updateEdgeType(),this.body.emitter.emit("_redraw"),this.showManipulatorToolbar()):(this.body.data.edges.getDataSet().update(g),this.selectionHandler.unselectAll(),this.showManipulatorToolbar())})}else this.body.data.edges.getDataSet().update(t),this.selectionHandler.unselectAll(),this.showManipulatorToolbar()}}var yD,wD,xD,ED,OD,TD,DD;function ND(){return xD?wD:(xD=1,yD||(yD=1,st()({target:"Number",stat:!0},{isNaN:function(g){return g!=g}})),wD=Tg().Number.isNaN)}function kD(){return OD?ED:(OD=1,ED=ND())}var RD=C(DD?TD:(DD=1,TD=kD()));class PD{constructor(g,A,t,C){var I;if(this.body=g,this.images=A,this.groups=t,this.layoutEngine=C,this.body.functions.createNode=IC(I=this.create).call(I,this),this.nodesListeners={add:(g,A)=>{this.add(A.items)},update:(g,A)=>{this.update(A.items,A.data,A.oldData)},remove:(g,A)=>{this.remove(A.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(g,A,t,C){if(A===g)return.5;{const t=1/(A-g);return Math.max(0,(C-g)*t)}}},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=wp(this.defaultOptions),this.bindEventListeners()}bindEventListeners(){var g,A;this.body.emitter.on("refreshNodes",IC(g=this.refresh).call(g,this)),this.body.emitter.on("refresh",IC(A=this.refresh).call(A,this)),this.body.emitter.on("destroy",()=>{hp(this.nodesListeners,(g,A)=>{this.body.data.nodes&&this.body.data.nodes.off(A,g)}),delete this.body.functions.createNode,delete this.nodesListeners.add,delete this.nodesListeners.update,delete this.nodesListeners.remove,delete this.nodesListeners})}setOptions(g){if(void 0!==g){if(Wy.parseOptions(this.options,g),void 0!==g.opacity&&(RD(g.opacity)||!mv(g.opacity)||g.opacity<0||g.opacity>1?console.error("Invalid option for node opacity. Value must be between 0 and 1, found: "+g.opacity):this.options.opacity=g.opacity),void 0!==g.shape)for(const g in this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,g)&&this.body.nodes[g].updateShape();if(void 0!==g.font||void 0!==g.widthConstraint||void 0!==g.heightConstraint)for(const g of Fr(this.body.nodes))this.body.nodes[g].updateLabelModule(),this.body.nodes[g].needsRefresh();if(void 0!==g.size)for(const g in this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,g)&&this.body.nodes[g].needsRefresh();void 0===g.hidden&&void 0===g.physics||this.body.emitter.emit("_dataChanged")}}setData(g){let A=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const t=this.body.data.nodes;if(QT("id",g))this.body.data.nodes=g;else if(cr(g))this.body.data.nodes=new VT,this.body.data.nodes.add(g);else{if(g)throw new TypeError("Array or DataSet expected");this.body.data.nodes=new VT}if(t&&hp(this.nodesListeners,function(g,A){t.off(A,g)}),this.body.nodes={},this.body.data.nodes){const g=this;hp(this.nodesListeners,function(A,t){g.body.data.nodes.on(t,A)});const A=this.body.data.nodes.getIds();this.add(A,!0)}!1===A&&this.body.emitter.emit("_dataChanged")}add(g){let A,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const C=[];for(let t=0;t1&&void 0!==arguments[1]?arguments[1]:Wy)(g,this.body,this.images,this.groups,this.options,this.defaultOptions)}refresh(){let g=arguments.length>0&&void 0!==arguments[0]&&arguments[0];hp(this.body.nodes,(A,t)=>{const C=this.body.data.nodes.get(t);void 0!==C&&(!0===g&&A.setOptions({x:null,y:null}),A.setOptions({fixed:!1}),A.setOptions(C))})}getPositions(g){const A={};if(void 0!==g){if(!0===cr(g)){for(let t=0;t{this.body.emitter.emit("startSimulation")},0)):console.error("Node id supplied to moveNode does not exist. Provided: ",g)}}class MD{constructor(g,A,t){this.body=g,this.physicsBody=A,this.setOptions(t),this._rng=Xu("BARNES HUT SOLVER")}setOptions(g){this.options=g,this.thetaInversed=1/this.options.theta,this.overlapAvoidanceFactor=1-Math.max(0,Math.min(1,this.options.avoidOverlap))}solve(){if(0!==this.options.gravitationalConstant&&this.physicsBody.physicsNodeIndices.length>0){let g;const A=this.body.nodes,t=this.physicsBody.physicsNodeIndices,C=t.length,I=this._formBarnesHutTree(A,t);this.barnesHutTree=I;for(let e=0;e0&&this._getForceContributions(I.root,g)}}_getForceContributions(g,A){this._getForceContribution(g.children.NW,A),this._getForceContribution(g.children.NE,A),this._getForceContribution(g.children.SW,A),this._getForceContribution(g.children.SE,A)}_getForceContribution(g,A){if(g.childrenCount>0){const t=g.centerOfMass.x-A.x,C=g.centerOfMass.y-A.y,I=Math.sqrt(t*t+C*C);I*g.calcSize>this.thetaInversed?this._calculateForces(I,t,C,A,g):4===g.childrenCount?this._getForceContributions(g,A):g.children.data.id!=A.id&&this._calculateForces(I,t,C,A,g)}}_calculateForces(g,A,t,C,I){0===g&&(A=g=.1),this.overlapAvoidanceFactor<1&&C.shape.radius&&(g=Math.max(.1+this.overlapAvoidanceFactor*C.shape.radius,g-C.shape.radius));const e=this.options.gravitationalConstant*I.mass*C.options.mass/Math.pow(g,3),i=A*e,o=t*e;this.physicsBody.forces[C.id].x+=i,this.physicsBody.forces[C.id].y+=o}_formBarnesHutTree(g,A){let t;const C=A.length;let I=g[A[0]].x,e=g[A[0]].y,i=g[A[0]].x,o=g[A[0]].y;for(let t=1;t0&&(ni&&(i=n),so&&(o=s))}const n=Math.abs(i-I)-Math.abs(o-e);n>0?(e-=.5*n,o+=.5*n):(I+=.5*n,i-=.5*n);const s=Math.max(1e-5,Math.abs(i-I)),r=.5*s,a=.5*(I+i),d=.5*(e+o),h={root:{centerOfMass:{x:0,y:0},mass:0,range:{minX:a-r,maxX:a+r,minY:d-r,maxY:d+r},size:s,calcSize:1/s,children:{data:null},maxWidth:0,level:0,childrenCount:4}};this._splitBranch(h.root);for(let I=0;I0&&this._placeInTree(h.root,t);return h}_updateBranchMass(g,A){const t=g.centerOfMass,C=g.mass+A.options.mass,I=1/C;t.x=t.x*g.mass+A.x*A.options.mass,t.x*=I,t.y=t.y*g.mass+A.y*A.options.mass,t.y*=I,g.mass=C;const e=Math.max(Math.max(A.height,A.radius),A.width);g.maxWidth=g.maxWidthA.x?C.maxY>A.y?"NW":"SW":C.maxY>A.y?"NE":"SE",this._placeInRegion(g,A,I)}_placeInRegion(g,A,t){const C=g.children[t];switch(C.childrenCount){case 0:C.children.data=A,C.childrenCount=1,this._updateBranchMass(C,A);break;case 1:C.children.data.x===A.x&&C.children.data.y===A.y?(A.x+=this._rng(),A.y+=this._rng()):(this._splitBranch(C),this._placeInTree(C,A));break;case 4:this._placeInTree(C,A)}}_splitBranch(g){let A=null;1===g.childrenCount&&(A=g.children.data,g.mass=0,g.centerOfMass.x=0,g.centerOfMass.y=0),g.childrenCount=4,g.children.data=null,this._insertRegion(g,"NW"),this._insertRegion(g,"NE"),this._insertRegion(g,"SW"),this._insertRegion(g,"SE"),null!=A&&this._placeInTree(g,A)}_insertRegion(g,A){let t,C,I,e;const i=.5*g.size;switch(A){case"NW":t=g.range.minX,C=g.range.minX+i,I=g.range.minY,e=g.range.minY+i;break;case"NE":t=g.range.minX+i,C=g.range.maxX,I=g.range.minY,e=g.range.minY+i;break;case"SW":t=g.range.minX,C=g.range.minX+i,I=g.range.minY+i,e=g.range.maxY;break;case"SE":t=g.range.minX+i,C=g.range.maxX,I=g.range.minY+i,e=g.range.maxY}g.children[A]={centerOfMass:{x:0,y:0},mass:0,range:{minX:t,maxX:C,minY:I,maxY:e},size:.5*g.size,calcSize:2*g.calcSize,children:{data:null},maxWidth:0,level:g.level+1,childrenCount:0}}_debug(g,A){void 0!==this.barnesHutTree&&(g.lineWidth=1,this._drawBranch(this.barnesHutTree.root,g,A))}_drawBranch(g,A,t){void 0===t&&(t="#FF0000"),4===g.childrenCount&&(this._drawBranch(g.children.NW,A),this._drawBranch(g.children.NE,A),this._drawBranch(g.children.SE,A),this._drawBranch(g.children.SW,A)),A.strokeStyle=t,A.beginPath(),A.moveTo(g.range.minX,g.range.minY),A.lineTo(g.range.maxX,g.range.minY),A.stroke(),A.beginPath(),A.moveTo(g.range.maxX,g.range.minY),A.lineTo(g.range.maxX,g.range.maxY),A.stroke(),A.beginPath(),A.moveTo(g.range.maxX,g.range.maxY),A.lineTo(g.range.minX,g.range.maxY),A.stroke(),A.beginPath(),A.moveTo(g.range.minX,g.range.maxY),A.lineTo(g.range.minX,g.range.minY),A.stroke()}}class zD{constructor(g,A,t){this.body=g,this.physicsBody=A,this.setOptions(t)}setOptions(g){this.options=g}solve(){let g,A,t,C;const I=this.body.nodes,e=this.physicsBody.physicsNodeIndices,i=this.physicsBody.forces;for(let o=0;o0){const g=I.edges.length+1,e=this.options.centralGravity*g*I.options.mass;C[I.id].x=A*e,C[I.id].y=t*e}}}class ZD extends MD{constructor(g,A,t){super(g,A,t),this._rng=Xu("FORCE ATLAS 2 BASED REPULSION SOLVER")}_calculateForces(g,A,t,C,I){0===g&&(A=g=.1*this._rng()),this.overlapAvoidanceFactor<1&&C.shape.radius&&(g=Math.max(.1+this.overlapAvoidanceFactor*C.shape.radius,g-C.shape.radius));const e=C.edges.length+1,i=this.options.gravitationalConstant*I.mass*C.options.mass*e/Math.pow(g,2),o=A*i,n=t*i;this.physicsBody.forces[C.id].x+=o,this.physicsBody.forces[C.id].y+=n}}class SD{constructor(g,A,t){this.body=g,this.physicsBody=A,this.setOptions(t)}setOptions(g){this.options=g,this.overlapAvoidanceFactor=Math.max(0,Math.min(1,this.options.avoidOverlap||0))}solve(){const g=this.body.nodes,A=this.physicsBody.physicsNodeIndices,t=this.physicsBody.forces,C=this.options.nodeDistance;for(let I=0;I{this.initPhysics()}),this.body.emitter.on("_layoutFailed",()=>{this.layoutFailed=!0}),this.body.emitter.on("resetPhysics",()=>{this.stopSimulation(),this.ready=!1}),this.body.emitter.on("disablePhysics",()=>{this.physicsEnabled=!1,this.stopSimulation()}),this.body.emitter.on("restorePhysics",()=>{this.setOptions(this.options),!0===this.ready&&this.startSimulation()}),this.body.emitter.on("startSimulation",()=>{!0===this.ready&&this.startSimulation()}),this.body.emitter.on("stopSimulation",()=>{this.stopSimulation()}),this.body.emitter.on("destroy",()=>{this.stopSimulation(!1),this.body.emitter.off()}),this.body.emitter.on("_dataChanged",()=>{this.updatePhysicsData()})}setOptions(g){if(void 0!==g)if(!1===g)this.options.enabled=!1,this.physicsEnabled=!1,this.stopSimulation();else if(!0===g)this.options.enabled=!0,this.physicsEnabled=!0,this.startSimulation();else{this.physicsEnabled=!0,np(["stabilization"],this.options,g),xp(this.options,g,"stabilization"),void 0===g.enabled&&(this.options.enabled=!0),!1===this.options.enabled&&(this.physicsEnabled=!1,this.stopSimulation());const A=this.options.wind;A&&"function"!=typeof A&&(("number"!=typeof A.x||RD(A.x))&&(A.x=0),("number"!=typeof A.y||RD(A.y))&&(A.y=0)),this.timestep=this.options.timestep}this.init()}init(){let g;"forceAtlas2Based"===this.options.solver?(g=this.options.forceAtlas2Based,this.nodesSolver=new ZD(this.body,this.physicsBody,g),this.edgesSolver=new jD(this.body,this.physicsBody,g),this.gravitySolver=new BD(this.body,this.physicsBody,g)):"repulsion"===this.options.solver?(g=this.options.repulsion,this.nodesSolver=new GD(this.body,this.physicsBody,g),this.edgesSolver=new jD(this.body,this.physicsBody,g),this.gravitySolver=new zD(this.body,this.physicsBody,g)):"hierarchicalRepulsion"===this.options.solver?(g=this.options.hierarchicalRepulsion,this.nodesSolver=new SD(this.body,this.physicsBody,g),this.edgesSolver=new FD(this.body,this.physicsBody,g),this.gravitySolver=new zD(this.body,this.physicsBody,g)):(g=this.options.barnesHut,this.nodesSolver=new MD(this.body,this.physicsBody,g),this.edgesSolver=new jD(this.body,this.physicsBody,g),this.gravitySolver=new zD(this.body,this.physicsBody,g)),this.modelOptions=g}initPhysics(){!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"))}startSimulation(){var g;!0===this.physicsEnabled&&!0===this.options.enabled?(this.stabilized=!1,this.adaptiveTimestep=!1,this.body.emitter.emit("_resizeNodes"),void 0===this.viewFunction&&(this.viewFunction=IC(g=this.simulationStep).call(g,this),this.body.emitter.on("initRedraw",this.viewFunction),this.body.emitter.emit("_startRendering"))):this.body.emitter.emit("_redraw")}stopSimulation(){let g=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.stabilized=!0,!0===g&&this._emitStabilized(),void 0!==this.viewFunction&&(this.body.emitter.off("initRedraw",this.viewFunction),this.viewFunction=void 0,!0===g&&this.body.emitter.emit("_stopRendering"))}simulationStep(){const g=Aa();this.physicsTick();(Aa()-g<.4*this.simulationInterval||!0===this.runDoubleSpeed)&&!1===this.stabilized&&(this.physicsTick(),this.runDoubleSpeed=!0),!0===this.stabilized&&this.stopSimulation()}_emitStabilized(){let g=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.stabilizationIterations;(this.stabilizationIterations>1||!0===this.startedStabilization)&&$l(()=>{this.body.emitter.emit("stabilized",{iterations:g}),this.startedStabilization=!1,this.stabilizationIterations=0},0)}physicsStep(){this.gravitySolver.solve(),this.nodesSolver.solve(),this.edgesSolver.solve(),this.moveNodes()}adjustTimeStep(){!0===this._evaluateStepQuality()?this.timestep=1.2*this.timestep:this.timestep/1.2.3))return!1;return!0}moveNodes(){const g=this.physicsBody.physicsNodeIndices;let A=0,t=0;for(let C=0;CC&&(g=g>0?C:-C),g}_performStep(g){const A=this.body.nodes[g],t=this.physicsBody.forces[g];if(this.options.wind)if("function"==typeof this.options.wind){const A=this.options.wind(g);A&&"object"==typeof A&&("number"!=typeof A.x||RD(A.x)||(t.x+=A.x),"number"!=typeof A.y||RD(A.y)||(t.y+=A.y))}else t.x+=this.options.wind.x,t.y+=this.options.wind.y;const C=this.physicsBody.velocities[g];this.previousStates[g]={x:A.x,y:A.y,vx:C.x,vy:C.y},!1===A.options.fixed.x?(C.x=this.calculateComponentVelocity(C.x,t.x,A.options.mass),A.x+=C.x*this.timestep):(t.x=0,C.x=0),!1===A.options.fixed.y?(C.y=this.calculateComponentVelocity(C.y,t.y,A.options.mass),A.y+=C.y*this.timestep):(t.y=0,C.y=0);return Math.sqrt(Math.pow(C.x,2)+Math.pow(C.y,2))}_freezeNodes(){const g=this.body.nodes;for(const A in g)if(Object.prototype.hasOwnProperty.call(g,A)&&g[A].x&&g[A].y){const t=g[A].options.fixed;this.freezeCache[A]={x:t.x,y:t.y},t.x=!0,t.y=!0}}_restoreFrozenNodes(){const g=this.body.nodes;for(const A in g)Object.prototype.hasOwnProperty.call(g,A)&&void 0!==this.freezeCache[A]&&(g[A].options.fixed.x=this.freezeCache[A].x,g[A].options.fixed.y=this.freezeCache[A].y);this.freezeCache={}}stabilize(){let g=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.options.stabilization.iterations;"number"!=typeof g&&(g=this.options.stabilization.iterations,console.error("The stabilize method needs a numeric amount of iterations. Switching to default: ",g)),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=g,!0===this.options.stabilization.onlyDynamicEdges&&this._freezeNodes(),this.stabilizationIterations=0,$l(()=>this._stabilizationBatch(),0)):this.ready=!0}_startStabilizing(){return!0!==this.startedStabilization&&(this.body.emitter.emit("startStabilizing"),this.startedStabilization=!0,!0)}_stabilizationBatch(){const g=()=>!1===this.stabilized&&this.stabilizationIterations{this.body.emitter.emit("stabilizationProgress",{iterations:this.stabilizationIterations,total:this.targetIterations})};this._startStabilizing()&&A();let t=0;for(;g()&&t0&&void 0!==arguments[0]?arguments[0]:()=>{};fN(this,ON,new EN),fN(this,TN,new EN),fN(this,DN,void 0),vN(DN,this,g)}get sizeNodes(){return bN(ON,this).size}get sizeEdges(){return bN(TN,this).size}getNodes(){return bN(ON,this).getSelection()}getEdges(){return bN(TN,this).getSelection()}addNodes(){bN(ON,this).add(...arguments)}addEdges(){bN(TN,this).add(...arguments)}deleteNodes(g){bN(ON,this).delete(g)}deleteEdges(g){bN(TN,this).delete(g)}clear(){bN(ON,this).clear(),bN(TN,this).clear()}commit(){const g={nodes:bN(ON,this).commit(),edges:bN(TN,this).commit()};for(var A=arguments.length,t=new Array(A),C=0;C{this.updateSelection()})}setOptions(g){if(void 0!==g){op(["multiselect","hoverConnectedEdges","selectable","selectConnectedEdges"],this.options,g)}}selectOnPoint(g){let A=!1;if(!0===this.options.selectable){const t=this.getNodeAt(g)||this.getEdgeAt(g);this.unselectAll(),void 0!==t&&(A=this.selectObject(t)),this.body.emitter.emit("_requestRedraw")}return A}selectAdditionalOnPoint(g){let A=!1;if(!0===this.options.selectable){const t=this.getNodeAt(g)||this.getEdgeAt(g);void 0!==t&&(A=!0,!0===t.isSelected()?this.deselectObject(t):this.selectObject(t),this.body.emitter.emit("_requestRedraw"))}return A}_initBaseEvent(g,A){const t={};return t.pointer={DOM:{x:A.x,y:A.y},canvas:this.canvas.DOMtoCanvas(A)},t.event=g,t}generateClickEvent(g,A,t,C){let I=arguments.length>4&&void 0!==arguments[4]&&arguments[4];const e=this._initBaseEvent(A,t);if(!0===I)e.nodes=[],e.edges=[];else{const g=this.getSelection();e.nodes=g.nodes,e.edges=g.edges}void 0!==C&&(e.previousSelection=C),"click"==g&&(e.items=this.getClickedItems(t)),void 0!==A.controlEdge&&(e.controlEdge=A.controlEdge),this.body.emitter.emit(g,e)}selectObject(g){let A=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.options.selectConnectedEdges;return void 0!==g&&(g instanceof Wy?(!0===A&&this._selectionAccumulator.addEdges(...g.edges),this._selectionAccumulator.addNodes(g)):this._selectionAccumulator.addEdges(g),!0)}deselectObject(g){!0===g.isSelected()&&(g.selected=!1,this._removeFromSelection(g))}_getAllNodesOverlappingWith(g){const A=[],t=this.body.nodes;for(let C=0;C1&&void 0!==arguments[1])||arguments[1];const t=this._pointerToPositionObject(g),C=this._getAllNodesOverlappingWith(t);return C.length>0?!0===A?this.body.nodes[C[C.length-1]]:C[C.length-1]:void 0}_getEdgesOverlappingWith(g,A){const t=this.body.edges;for(let C=0;C1&&void 0!==arguments[1])||arguments[1];const t=this.canvas.DOMtoCanvas(g);let C=10,I=null;const e=this.body.edges;for(let g=0;g0&&(this.generateClickEvent("deselectEdge",A,g,I),t=!0),C.nodes.deleted.length>0&&(this.generateClickEvent("deselectNode",A,g,I),t=!0),C.nodes.added.length>0&&(this.generateClickEvent("selectNode",A,g),t=!0),C.edges.added.length>0&&(this.generateClickEvent("selectEdge",A,g),t=!0),!0===t&&this.generateClickEvent("select",A,g)}getSelection(){return{nodes:this.getSelectedNodeIds(),edges:this.getSelectedEdgeIds()}}getSelectedNodes(){return this._selectionAccumulator.getNodes()}getSelectedEdges(){return this._selectionAccumulator.getEdges()}getSelectedNodeIds(){var g;return Tr(g=this._selectionAccumulator.getNodes()).call(g,g=>g.id)}getSelectedEdgeIds(){var g;return Tr(g=this._selectionAccumulator.getEdges()).call(g,g=>g.id)}setSelection(g){let A=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!g||!g.nodes&&!g.edges)throw new TypeError("Selection must be an object with nodes and/or edges properties");if((A.unselectAll||void 0===A.unselectAll)&&this.unselectAll(),g.nodes)for(const t of g.nodes){const g=this.body.nodes[t];if(!g)throw new RangeError('Node with id "'+t+'" not found');this.selectObject(g,A.highlightEdges)}if(g.edges)for(const A of g.edges){const g=this.body.edges[A];if(!g)throw new RangeError('Edge with id "'+A+'" not found');this.selectObject(g)}this.body.emitter.emit("_requestRedraw"),this._selectionAccumulator.commit()}selectNodes(g){let A=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(!g||void 0===g.length)throw"Selection must be an array with ids";this.setSelection({nodes:g},{highlightEdges:A})}selectEdges(g){if(!g||void 0===g.length)throw"Selection must be an array with ids";this.setSelection({edges:g})}updateSelection(){for(const g in this._selectionAccumulator.getNodes())Object.prototype.hasOwnProperty.call(this.body.nodes,g.id)||this._selectionAccumulator.deleteNodes(g);for(const g in this._selectionAccumulator.getEdges())Object.prototype.hasOwnProperty.call(this.body.edges,g.id)||this._selectionAccumulator.deleteEdges(g)}getClickedItems(g){const A=this.canvas.DOMtoCanvas(g),t=[],C=this.body.nodeIndices,I=this.body.nodes;for(let g=C.length-1;g>=0;g--){const e=I[C[g]].getItemsOnPoint(A);t.push.apply(t,e)}const e=this.body.edgeIndices,i=this.body.edges;for(let g=e.length-1;g>=0;g--){const C=i[e[g]].getItemsOnPoint(A);t.push.apply(t,C)}return t}}class RN{constructor(g,A){var t,C;this.body=g,this.canvas=A,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",IC(t=this.fit).call(t,this)),this.body.emitter.on("animationFinished",()=>{this.body.emitter.emit("_stopRendering")}),this.body.emitter.on("unlockNode",IC(C=this.releaseNode).call(C,this))}setOptions(){let g=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.options=g}fit(g){let A=arguments.length>1&&void 0!==arguments[1]&&arguments[1];g=function(g,A){const t=_t({nodes:A,minZoomLevel:Number.MIN_VALUE,maxZoomLevel:1},null!=g?g:{});if(!cr(t.nodes))throw new TypeError("Nodes has to be an array of ids.");if(0===t.nodes.length&&(t.nodes=A),!("number"==typeof t.minZoomLevel&&t.minZoomLevel>0))throw new TypeError("Min zoom level has to be a number higher than zero.");if(!("number"==typeof t.maxZoomLevel&&t.minZoomLevel<=t.maxZoomLevel))throw new TypeError("Max zoom level has to be a number higher than min zoom level.");return t}(g,this.body.nodeIndices);const t=this.canvas.frame.canvas.clientWidth,C=this.canvas.frame.canvas.clientHeight;let I,e;if(0===t||0===C)e=1,I=Ff.getRange(this.body.nodes,g.nodes);else if(!0===A){let A=0;for(const g in this.body.nodes)if(Object.prototype.hasOwnProperty.call(this.body.nodes,g)){!0===this.body.nodes[g].predefinedPosition&&(A+=1)}if(A>.5*this.body.nodeIndices.length)return void this.fit(g,!1);I=Ff.getRange(this.body.nodes,g.nodes);e=12.662/(this.body.nodeIndices.length+7.4147)+.0964822;e*=Math.min(t/600,C/600)}else{this.body.emitter.emit("_resizeNodes"),I=Ff.getRange(this.body.nodes,g.nodes);const A=t/(1.1*Math.abs(I.maxX-I.minX)),i=C/(1.1*Math.abs(I.maxY-I.minY));e=A<=i?A:i}e>g.maxZoomLevel?e=g.maxZoomLevel:e1&&void 0!==arguments[1]?arguments[1]:{};if(void 0!==this.body.nodes[g]){const t={x:this.body.nodes[g].x,y:this.body.nodes[g].y};A.position=t,A.lockedOnNode=g,this.moveTo(A)}else console.error("Node: "+g+" cannot be found.")}moveTo(g){if(void 0!==g){if(null!=g.offset){if(null!=g.offset.x){if(g.offset.x=+g.offset.x,!mv(g.offset.x))throw new TypeError('The option "offset.x" has to be a finite number.')}else g.offset.x=0;if(null!=g.offset.y){if(g.offset.y=+g.offset.y,!mv(g.offset.y))throw new TypeError('The option "offset.y" has to be a finite number.')}else g.offset.x=0}else g.offset={x:0,y:0};if(null!=g.position){if(null!=g.position.x){if(g.position.x=+g.position.x,!mv(g.position.x))throw new TypeError('The option "position.x" has to be a finite number.')}else g.position.x=0;if(null!=g.position.y){if(g.position.y=+g.position.y,!mv(g.position.y))throw new TypeError('The option "position.y" has to be a finite number.')}else g.position.x=0}else g.position=this.getViewPosition();if(null!=g.scale){if(g.scale=+g.scale,!(g.scale>0))throw new TypeError('The option "scale" has to be a number greater than zero.')}else g.scale=this.body.view.scale;void 0===g.animation&&(g.animation={duration:0}),!1===g.animation&&(g.animation={duration:0}),!0===g.animation&&(g.animation={}),void 0===g.animation.duration&&(g.animation.duration=1e3),void 0===g.animation.easingFunction&&(g.animation.easingFunction="easeInOutQuad"),this.animateView(g)}else g={}}animateView(g){if(void 0===g)return;this.animationEasingFunction=g.animation.easingFunction,this.releaseNode(),!0===g.locked&&(this.lockedOnNodeId=g.lockedOnNode,this.lockedOnNodeOffset=g.offset),0!=this.easingTime&&this._transitionRedraw(!0),this.sourceScale=this.body.view.scale,this.sourceTranslation=this.body.view.translation,this.targetScale=g.scale,this.body.view.scale=this.targetScale;const A=this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight}),t=A.x-g.position.x,C=A.y-g.position.y;var I,e;(this.targetTranslation={x:this.sourceTranslation.x+t*this.targetScale+g.offset.x,y:this.sourceTranslation.y+C*this.targetScale+g.offset.y},0===g.animation.duration)?null!=this.lockedOnNodeId?(this.viewFunction=IC(I=this._lockedRedraw).call(I,this),this.body.emitter.on("initRedraw",this.viewFunction)):(this.body.view.scale=this.targetScale,this.body.view.translation=this.targetTranslation,this.body.emitter.emit("_requestRedraw")):(this.animationSpeed=1/(60*g.animation.duration*.001)||1/60,this.animationEasingFunction=g.animation.easingFunction,this.viewFunction=IC(e=this._transitionRedraw).call(e,this),this.body.emitter.on("initRedraw",this.viewFunction),this.body.emitter.emit("_startRendering"))}_lockedRedraw(){const g=this.body.nodes[this.lockedOnNodeId].x,A=this.body.nodes[this.lockedOnNodeId].y,t=this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight}),C=t.x-g,I=t.y-A,e=this.body.view.translation,i={x:e.x+C*this.body.view.scale+this.lockedOnNodeOffset.x,y:e.y+I*this.body.view.scale+this.lockedOnNodeOffset.y};this.body.view.translation=i}releaseNode(){void 0!==this.lockedOnNodeId&&void 0!==this.viewFunction&&(this.body.emitter.off("initRedraw",this.viewFunction),this.lockedOnNodeId=void 0,this.lockedOnNodeOffset=void 0)}_transitionRedraw(){let g=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.easingTime+=this.animationSpeed,this.easingTime=!0===g?1:this.easingTime;const A=Ep[this.animationEasingFunction](this.easingTime);if(this.body.view.scale=this.sourceScale+(this.targetScale-this.sourceScale)*A,this.body.view.translation={x:this.sourceTranslation.x+(this.targetTranslation.x-this.sourceTranslation.x)*A,y:this.sourceTranslation.y+(this.targetTranslation.y-this.sourceTranslation.y)*A},this.easingTime>=1){var t;if(this.body.emitter.off("initRedraw",this.viewFunction),this.easingTime=0,null!=this.lockedOnNodeId)this.viewFunction=IC(t=this._lockedRedraw).call(t,this),this.body.emitter.on("initRedraw",this.viewFunction);this.body.emitter.emit("animationFinished")}}getScale(){return this.body.view.scale}getViewPosition(){return this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight})}}const PN="string",MN="boolean",zN="number",BN="array",ZN="object",SN=["arrow","bar","box","circle","crow","curve","diamond","image","inv_curve","inv_triangle","triangle","vee"],FN={borderWidth:{number:zN},borderWidthSelected:{number:zN,undefined:"undefined"},brokenImage:{string:PN,undefined:"undefined"},chosen:{label:{boolean:MN,function:"function"},node:{boolean:MN,function:"function"},__type__:{object:ZN,boolean:MN}},color:{border:{string:PN},background:{string:PN},highlight:{border:{string:PN},background:{string:PN},__type__:{object:ZN,string:PN}},hover:{border:{string:PN},background:{string:PN},__type__:{object:ZN,string:PN}},__type__:{object:ZN,string:PN}},opacity:{number:zN,undefined:"undefined"},fixed:{x:{boolean:MN},y:{boolean:MN},__type__:{object:ZN,boolean:MN}},font:{align:{string:PN},color:{string:PN},size:{number:zN},face:{string:PN},background:{string:PN},strokeWidth:{number:zN},strokeColor:{string:PN},vadjust:{number:zN},multi:{boolean:MN,string:PN},bold:{color:{string:PN},size:{number:zN},face:{string:PN},mod:{string:PN},vadjust:{number:zN},__type__:{object:ZN,string:PN}},boldital:{color:{string:PN},size:{number:zN},face:{string:PN},mod:{string:PN},vadjust:{number:zN},__type__:{object:ZN,string:PN}},ital:{color:{string:PN},size:{number:zN},face:{string:PN},mod:{string:PN},vadjust:{number:zN},__type__:{object:ZN,string:PN}},mono:{color:{string:PN},size:{number:zN},face:{string:PN},mod:{string:PN},vadjust:{number:zN},__type__:{object:ZN,string:PN}},__type__:{object:ZN,string:PN}},group:{string:PN,number:zN,undefined:"undefined"},heightConstraint:{minimum:{number:zN},valign:{string:PN},__type__:{object:ZN,boolean:MN,number:zN}},hidden:{boolean:MN},icon:{face:{string:PN},code:{string:PN},size:{number:zN},color:{string:PN},weight:{string:PN,number:zN},__type__:{object:ZN}},id:{string:PN,number:zN},image:{selected:{string:PN,undefined:"undefined"},unselected:{string:PN,undefined:"undefined"},__type__:{object:ZN,string:PN}},imagePadding:{top:{number:zN},right:{number:zN},bottom:{number:zN},left:{number:zN},__type__:{object:ZN,number:zN}},label:{string:PN,undefined:"undefined"},labelHighlightBold:{boolean:MN},level:{number:zN,undefined:"undefined"},margin:{top:{number:zN},right:{number:zN},bottom:{number:zN},left:{number:zN},__type__:{object:ZN,number:zN}},mass:{number:zN},physics:{boolean:MN},scaling:{min:{number:zN},max:{number:zN},label:{enabled:{boolean:MN},min:{number:zN},max:{number:zN},maxVisible:{number:zN},drawThreshold:{number:zN},__type__:{object:ZN,boolean:MN}},customScalingFunction:{function:"function"},__type__:{object:ZN}},shadow:{enabled:{boolean:MN},color:{string:PN},size:{number:zN},x:{number:zN},y:{number:zN},__type__:{object:ZN,boolean:MN}},shape:{string:["custom","ellipse","circle","database","box","text","image","circularImage","diamond","dot","star","triangle","triangleDown","square","icon","hexagon"]},ctxRenderer:{function:"function"},shapeProperties:{borderDashes:{boolean:MN,array:BN},borderRadius:{number:zN},interpolation:{boolean:MN},useImageSize:{boolean:MN},useBorderWithImage:{boolean:MN},coordinateOrigin:{string:["center","top-left"]},__type__:{object:ZN}},size:{number:zN},title:{string:PN,dom:"dom",undefined:"undefined"},value:{number:zN,undefined:"undefined"},widthConstraint:{minimum:{number:zN},maximum:{number:zN},__type__:{object:ZN,boolean:MN,number:zN}},x:{number:zN},y:{number:zN},__type__:{object:ZN}},GN={configure:{enabled:{boolean:MN},filter:{boolean:MN,string:PN,array:BN,function:"function"},container:{dom:"dom"},showButton:{boolean:MN},__type__:{object:ZN,boolean:MN,string:PN,array:BN,function:"function"}},edges:{arrows:{to:{enabled:{boolean:MN},scaleFactor:{number:zN},type:{string:SN},imageHeight:{number:zN},imageWidth:{number:zN},src:{string:PN},__type__:{object:ZN,boolean:MN}},middle:{enabled:{boolean:MN},scaleFactor:{number:zN},type:{string:SN},imageWidth:{number:zN},imageHeight:{number:zN},src:{string:PN},__type__:{object:ZN,boolean:MN}},from:{enabled:{boolean:MN},scaleFactor:{number:zN},type:{string:SN},imageWidth:{number:zN},imageHeight:{number:zN},src:{string:PN},__type__:{object:ZN,boolean:MN}},__type__:{string:["from","to","middle"],object:ZN}},endPointOffset:{from:{number:zN},to:{number:zN},__type__:{object:ZN,number:zN}},arrowStrikethrough:{boolean:MN},background:{enabled:{boolean:MN},color:{string:PN},size:{number:zN},dashes:{boolean:MN,array:BN},__type__:{object:ZN,boolean:MN}},chosen:{label:{boolean:MN,function:"function"},edge:{boolean:MN,function:"function"},__type__:{object:ZN,boolean:MN}},color:{color:{string:PN},highlight:{string:PN},hover:{string:PN},inherit:{string:["from","to","both"],boolean:MN},opacity:{number:zN},__type__:{object:ZN,string:PN}},dashes:{boolean:MN,array:BN},font:{color:{string:PN},size:{number:zN},face:{string:PN},background:{string:PN},strokeWidth:{number:zN},strokeColor:{string:PN},align:{string:["horizontal","top","middle","bottom"]},vadjust:{number:zN},multi:{boolean:MN,string:PN},bold:{color:{string:PN},size:{number:zN},face:{string:PN},mod:{string:PN},vadjust:{number:zN},__type__:{object:ZN,string:PN}},boldital:{color:{string:PN},size:{number:zN},face:{string:PN},mod:{string:PN},vadjust:{number:zN},__type__:{object:ZN,string:PN}},ital:{color:{string:PN},size:{number:zN},face:{string:PN},mod:{string:PN},vadjust:{number:zN},__type__:{object:ZN,string:PN}},mono:{color:{string:PN},size:{number:zN},face:{string:PN},mod:{string:PN},vadjust:{number:zN},__type__:{object:ZN,string:PN}},__type__:{object:ZN,string:PN}},hidden:{boolean:MN},hoverWidth:{function:"function",number:zN},label:{string:PN,undefined:"undefined"},labelHighlightBold:{boolean:MN},length:{number:zN,undefined:"undefined"},physics:{boolean:MN},scaling:{min:{number:zN},max:{number:zN},label:{enabled:{boolean:MN},min:{number:zN},max:{number:zN},maxVisible:{number:zN},drawThreshold:{number:zN},__type__:{object:ZN,boolean:MN}},customScalingFunction:{function:"function"},__type__:{object:ZN}},selectionWidth:{function:"function",number:zN},selfReferenceSize:{number:zN},selfReference:{size:{number:zN},angle:{number:zN},renderBehindTheNode:{boolean:MN},__type__:{object:ZN}},shadow:{enabled:{boolean:MN},color:{string:PN},size:{number:zN},x:{number:zN},y:{number:zN},__type__:{object:ZN,boolean:MN}},smooth:{enabled:{boolean:MN},type:{string:["dynamic","continuous","discrete","diagonalCross","straightCross","horizontal","vertical","curvedCW","curvedCCW","cubicBezier"]},roundness:{number:zN},forceDirection:{string:["horizontal","vertical","none"],boolean:MN},__type__:{object:ZN,boolean:MN}},title:{string:PN,undefined:"undefined"},width:{number:zN},widthConstraint:{maximum:{number:zN},__type__:{object:ZN,boolean:MN,number:zN}},value:{number:zN,undefined:"undefined"},__type__:{object:ZN}},groups:{useDefaultGroups:{boolean:MN},__any__:FN,__type__:{object:ZN}},interaction:{dragNodes:{boolean:MN},dragView:{boolean:MN},hideEdgesOnDrag:{boolean:MN},hideEdgesOnZoom:{boolean:MN},hideNodesOnDrag:{boolean:MN},hover:{boolean:MN},keyboard:{enabled:{boolean:MN},speed:{x:{number:zN},y:{number:zN},zoom:{number:zN},__type__:{object:ZN}},bindToWindow:{boolean:MN},autoFocus:{boolean:MN},__type__:{object:ZN,boolean:MN}},multiselect:{boolean:MN},navigationButtons:{boolean:MN},selectable:{boolean:MN},selectConnectedEdges:{boolean:MN},hoverConnectedEdges:{boolean:MN},tooltipDelay:{number:zN},zoomView:{boolean:MN},zoomSpeed:{number:zN},__type__:{object:ZN}},layout:{randomSeed:{undefined:"undefined",number:zN,string:PN},improvedLayout:{boolean:MN},clusterThreshold:{number:zN},hierarchical:{enabled:{boolean:MN},levelSeparation:{number:zN},nodeSpacing:{number:zN},treeSpacing:{number:zN},blockShifting:{boolean:MN},edgeMinimization:{boolean:MN},parentCentralization:{boolean:MN},direction:{string:["UD","DU","LR","RL"]},sortMethod:{string:["hubsize","directed"]},shakeTowards:{string:["leaves","roots"]},__type__:{object:ZN,boolean:MN}},__type__:{object:ZN}},manipulation:{enabled:{boolean:MN},initiallyActive:{boolean:MN},addNode:{boolean:MN,function:"function"},addEdge:{boolean:MN,function:"function"},editNode:{function:"function"},editEdge:{editWithoutDrag:{function:"function"},__type__:{object:ZN,boolean:MN,function:"function"}},deleteNode:{boolean:MN,function:"function"},deleteEdge:{boolean:MN,function:"function"},controlNodeStyle:FN,__type__:{object:ZN,boolean:MN}},nodes:FN,physics:{enabled:{boolean:MN},barnesHut:{theta:{number:zN},gravitationalConstant:{number:zN},centralGravity:{number:zN},springLength:{number:zN},springConstant:{number:zN},damping:{number:zN},avoidOverlap:{number:zN},__type__:{object:ZN}},forceAtlas2Based:{theta:{number:zN},gravitationalConstant:{number:zN},centralGravity:{number:zN},springLength:{number:zN},springConstant:{number:zN},damping:{number:zN},avoidOverlap:{number:zN},__type__:{object:ZN}},repulsion:{centralGravity:{number:zN},springLength:{number:zN},springConstant:{number:zN},nodeDistance:{number:zN},damping:{number:zN},__type__:{object:ZN}},hierarchicalRepulsion:{centralGravity:{number:zN},springLength:{number:zN},springConstant:{number:zN},nodeDistance:{number:zN},damping:{number:zN},avoidOverlap:{number:zN},__type__:{object:ZN}},maxVelocity:{number:zN},minVelocity:{number:zN},solver:{string:["barnesHut","repulsion","hierarchicalRepulsion","forceAtlas2Based"]},stabilization:{enabled:{boolean:MN},iterations:{number:zN},updateInterval:{number:zN},onlyDynamicEdges:{boolean:MN},fit:{boolean:MN},__type__:{object:ZN,boolean:MN}},timestep:{number:zN},adaptiveTimestep:{boolean:MN},wind:{x:{number:zN},y:{number:zN},__type__:{object:ZN,function:"function"}},__type__:{object:ZN,boolean:MN}},autoResize:{boolean:MN},clickToUse:{boolean:MN},locale:{string:PN},locales:{__any__:{any:"any"},__type__:{object:ZN}},height:{string:PN},width:{string:PN},__type__:{object:ZN}},jN={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]}}},LN=(g,A,t)=>{var C,I;return!(!bd(g).call(g,"physics")||!bd(C=jN.physics.solver).call(C,A)||t.physics.solver===A||"wind"===A)||!(!bd(g).call(g,"physics")||!bd(g).call(g,"wind")||"x"!==A&&"y"!==A||"function"!=typeof(null==t||null===(I=t.physics)||void 0===I?void 0:I.wind))};var VN=Object.freeze({__proto__:null,allOptions:GN,configuratorHideOption:LN,configureOptions:jN});function YN(g,A,t){var C,I,e,i;if(!(this instanceof YN))throw new SyntaxError("Constructor must be called with the new operator");this.options={},this.defaultOptions={locale:"en",locales:Df,clickToUse:!1},_t(this.options,this.defaultOptions),this.body={container:g,nodes:{},nodeIndices:[],edges:{},edgeIndices:[],emitter:{on:IC(C=this.on).call(C,this),off:IC(I=this.off).call(I,this),emit:IC(e=this.emit).call(e,this),once:IC(i=this.once).call(i,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 wf(()=>this.body.emitter.emit("_requestRedraw")),this.groups=new HT,this.canvas=new Mf(this.body),this.selectionHandler=new kN(this.body,this.canvas),this.interactionHandler=new JT(this.body,this.canvas,this.selectionHandler),this.view=new RN(this.body,this.canvas),this.renderer=new zf(this.body,this.canvas),this.physics=new LD(this.body),this.layoutEngine=new bD(this.body),this.clustering=new Uy(this.body),this.manipulation=new mD(this.body,this.canvas,this.selectionHandler,this.interactionHandler),this.nodesHandler=new PD(this.body,this.images,this.groups,this.layoutEngine),this.edgesHandler=new KT(this.body,this.images,this.groups),this.body.modules.kamadaKawai=new $T(this.body,150,.05),this.body.modules.clustering=this.clustering,this.canvas._create(),this.setOptions(t),this.setData(A)}TC(YN.prototype),YN.prototype.setOptions=function(g){if(null===g&&(g=void 0),void 0!==g){!0===Fp.validate(g,GN)&&console.error("%cErrors have been found in the supplied options object.",Sp);if(op(["locale","locales","clickToUse"],this.options,g),void 0!==g.locale&&(g.locale=function(g,A){try{const C=js(A.split(/[-_ /]/,2),2),I=C[0],e=C[1],i=null!=I?I.toLowerCase():null,o=null!=e?e.toUpperCase():null;if(i&&o){const A=i+"-"+o;if(Object.prototype.hasOwnProperty.call(g,A))return A;var t;console.warn(Qd(t="Unknown variant ".concat(o," of language ")).call(t,i,"."))}if(i){const A=i;if(Object.prototype.hasOwnProperty.call(g,A))return A;console.warn("Unknown language ".concat(i))}return console.warn("Unknown locale ".concat(A,", falling back to English.")),"en"}catch(g){return console.error(g),console.warn("Unexpected error while normalizing locale ".concat(A,", falling back to English.")),"en"}}(g.locales||this.options.locales,g.locale)),g=this.layoutEngine.setOptions(g.layout,g),this.canvas.setOptions(g),this.groups.setOptions(g.groups),this.nodesHandler.setOptions(g.nodes),this.edgesHandler.setOptions(g.edges),this.physics.setOptions(g.physics),this.manipulation.setOptions(g.manipulation,g,this.options),this.interactionHandler.setOptions(g.interaction),this.renderer.setOptions(g.interaction),this.selectionHandler.setOptions(g.interaction),void 0!==g.groups&&this.body.emitter.emit("refreshNodes"),"configure"in g&&(this.configurator||(this.configurator=new zp(this,this.body.container,jN,this.canvas.pixelRatio,LN)),this.configurator.setOptions(g.configure)),this.configurator&&!0===this.configurator.options.enabled){const g={nodes:{},edges:{},layout:{},interaction:{},manipulation:{},physics:{},global:{}};sp(g.nodes,this.nodesHandler.options),sp(g.edges,this.edgesHandler.options),sp(g.layout,this.layoutEngine.options),sp(g.interaction,this.selectionHandler.options),sp(g.interaction,this.renderer.options),sp(g.interaction,this.interactionHandler.options),sp(g.manipulation,this.manipulation.options),sp(g.physics,this.physics.options),sp(g.global,this.canvas.options),sp(g.global,this.options),this.configurator.setModuleOptions(g)}void 0!==g.clickToUse?!0===g.clickToUse?void 0===this.activator&&(this.activator=new Mp(this.canvas.frame),this.activator.on("change",()=>{this.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")}},YN.prototype._updateVisibleIndices=function(){const g=this.body.nodes,A=this.body.edges;this.body.nodeIndices=[],this.body.edgeIndices=[];for(const A in g)Object.prototype.hasOwnProperty.call(g,A)&&(this.clustering._isClusteredNode(A)||!1!==g[A].options.hidden||this.body.nodeIndices.push(g[A].id));for(const t in A)if(Object.prototype.hasOwnProperty.call(A,t)){const C=A[t],I=g[C.fromId],e=g[C.toId],i=void 0!==I&&void 0!==e;!this.clustering._isClusteredEdge(t)&&!1===C.options.hidden&&i&&!1===I.options.hidden&&!1===e.options.hidden&&this.body.edgeIndices.push(C.id)}},YN.prototype.bindEventListeners=function(){this.body.emitter.on("_dataChanged",()=>{this.edgesHandler._updateState(),this.body.emitter.emit("_dataUpdated")}),this.body.emitter.on("_dataUpdated",()=>{this.clustering._updateState(),this._updateVisibleIndices(),this._updateValueRange(this.body.nodes),this._updateValueRange(this.body.edges),this.body.emitter.emit("startSimulation"),this.body.emitter.emit("_requestRedraw")})},YN.prototype.setData=function(g){if(this.body.emitter.emit("resetPhysics"),this.body.emitter.emit("_resetData"),this.selectionHandler.unselectAll(),g&&g.dot&&(g.nodes||g.edges))throw new SyntaxError('Data must contain either parameter "dot" or parameter pair "nodes" and "edges", but not both.');if(this.setOptions(g&&g.options),g&&g.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);");const A=pf(g.dot);return void this.setData(A)}if(g&&g.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);");const A=bf(g.gephi);return void this.setData(A)}this.nodesHandler.setData(g&&g.nodes,!0),this.edgesHandler.setData(g&&g.edges,!0),this.body.emitter.emit("_dataChanged"),this.body.emitter.emit("_dataLoaded"),this.body.emitter.emit("initPhysics")},YN.prototype.destroy=function(){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;for(const g in this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,g)&&delete this.body.nodes[g];for(const g in this.body.edges)Object.prototype.hasOwnProperty.call(this.body.edges,g)&&delete this.body.edges[g];tp(this.body.container)},YN.prototype._updateValueRange=function(g){let A,t,C,I=0;for(A in g)if(Object.prototype.hasOwnProperty.call(g,A)){const e=g[A].getValue();void 0!==e&&(t=void 0===t?e:Math.min(e,t),C=void 0===C?e:Math.max(e,C),I+=e)}if(void 0!==t&&void 0!==C)for(A in g)Object.prototype.hasOwnProperty.call(g,A)&&g[A].setValueRange(t,C,I)},YN.prototype.isActive=function(){return!this.activator||this.activator.active},YN.prototype.setSize=function(){return this.canvas.setSize.apply(this.canvas,arguments)},YN.prototype.canvasToDOM=function(){return this.canvas.canvasToDOM.apply(this.canvas,arguments)},YN.prototype.DOMtoCanvas=function(){return this.canvas.DOMtoCanvas.apply(this.canvas,arguments)},YN.prototype.findNode=function(){return this.clustering.findNode.apply(this.clustering,arguments)},YN.prototype.isCluster=function(){return this.clustering.isCluster.apply(this.clustering,arguments)},YN.prototype.openCluster=function(){return this.clustering.openCluster.apply(this.clustering,arguments)},YN.prototype.cluster=function(){return this.clustering.cluster.apply(this.clustering,arguments)},YN.prototype.getNodesInCluster=function(){return this.clustering.getNodesInCluster.apply(this.clustering,arguments)},YN.prototype.clusterByConnection=function(){return this.clustering.clusterByConnection.apply(this.clustering,arguments)},YN.prototype.clusterByHubsize=function(){return this.clustering.clusterByHubsize.apply(this.clustering,arguments)},YN.prototype.updateClusteredNode=function(){return this.clustering.updateClusteredNode.apply(this.clustering,arguments)},YN.prototype.getClusteredEdges=function(){return this.clustering.getClusteredEdges.apply(this.clustering,arguments)},YN.prototype.getBaseEdge=function(){return this.clustering.getBaseEdge.apply(this.clustering,arguments)},YN.prototype.getBaseEdges=function(){return this.clustering.getBaseEdges.apply(this.clustering,arguments)},YN.prototype.updateEdge=function(){return this.clustering.updateEdge.apply(this.clustering,arguments)},YN.prototype.clusterOutliers=function(){return this.clustering.clusterOutliers.apply(this.clustering,arguments)},YN.prototype.getSeed=function(){return this.layoutEngine.getSeed.apply(this.layoutEngine,arguments)},YN.prototype.enableEditMode=function(){return this.manipulation.enableEditMode.apply(this.manipulation,arguments)},YN.prototype.disableEditMode=function(){return this.manipulation.disableEditMode.apply(this.manipulation,arguments)},YN.prototype.addNodeMode=function(){return this.manipulation.addNodeMode.apply(this.manipulation,arguments)},YN.prototype.editNode=function(){return this.manipulation.editNode.apply(this.manipulation,arguments)},YN.prototype.editNodeMode=function(){return console.warn("Deprecated: Please use editNode instead of editNodeMode."),this.manipulation.editNode.apply(this.manipulation,arguments)},YN.prototype.addEdgeMode=function(){return this.manipulation.addEdgeMode.apply(this.manipulation,arguments)},YN.prototype.editEdgeMode=function(){return this.manipulation.editEdgeMode.apply(this.manipulation,arguments)},YN.prototype.deleteSelected=function(){return this.manipulation.deleteSelected.apply(this.manipulation,arguments)},YN.prototype.getPositions=function(){return this.nodesHandler.getPositions.apply(this.nodesHandler,arguments)},YN.prototype.getPosition=function(){return this.nodesHandler.getPosition.apply(this.nodesHandler,arguments)},YN.prototype.storePositions=function(){return this.nodesHandler.storePositions.apply(this.nodesHandler,arguments)},YN.prototype.moveNode=function(){return this.nodesHandler.moveNode.apply(this.nodesHandler,arguments)},YN.prototype.getBoundingBox=function(){return this.nodesHandler.getBoundingBox.apply(this.nodesHandler,arguments)},YN.prototype.getConnectedNodes=function(g){return void 0!==this.body.nodes[g]?this.nodesHandler.getConnectedNodes.apply(this.nodesHandler,arguments):this.edgesHandler.getConnectedNodes.apply(this.edgesHandler,arguments)},YN.prototype.getConnectedEdges=function(){return this.nodesHandler.getConnectedEdges.apply(this.nodesHandler,arguments)},YN.prototype.startSimulation=function(){return this.physics.startSimulation.apply(this.physics,arguments)},YN.prototype.stopSimulation=function(){return this.physics.stopSimulation.apply(this.physics,arguments)},YN.prototype.stabilize=function(){return this.physics.stabilize.apply(this.physics,arguments)},YN.prototype.getSelection=function(){return this.selectionHandler.getSelection.apply(this.selectionHandler,arguments)},YN.prototype.setSelection=function(){return this.selectionHandler.setSelection.apply(this.selectionHandler,arguments)},YN.prototype.getSelectedNodes=function(){return this.selectionHandler.getSelectedNodeIds.apply(this.selectionHandler,arguments)},YN.prototype.getSelectedEdges=function(){return this.selectionHandler.getSelectedEdgeIds.apply(this.selectionHandler,arguments)},YN.prototype.getNodeAt=function(){const g=this.selectionHandler.getNodeAt.apply(this.selectionHandler,arguments);return void 0!==g&&void 0!==g.id?g.id:g},YN.prototype.getEdgeAt=function(){const g=this.selectionHandler.getEdgeAt.apply(this.selectionHandler,arguments);return void 0!==g&&void 0!==g.id?g.id:g},YN.prototype.selectNodes=function(){return this.selectionHandler.selectNodes.apply(this.selectionHandler,arguments)},YN.prototype.selectEdges=function(){return this.selectionHandler.selectEdges.apply(this.selectionHandler,arguments)},YN.prototype.unselectAll=function(){this.selectionHandler.unselectAll.apply(this.selectionHandler,arguments),this.selectionHandler.commitWithoutEmitting.apply(this.selectionHandler),this.redraw()},YN.prototype.redraw=function(){return this.renderer.redraw.apply(this.renderer,arguments)},YN.prototype.getScale=function(){return this.view.getScale.apply(this.view,arguments)},YN.prototype.getViewPosition=function(){return this.view.getViewPosition.apply(this.view,arguments)},YN.prototype.fit=function(){return this.view.fit.apply(this.view,arguments)},YN.prototype.moveTo=function(){return this.view.moveTo.apply(this.view,arguments)},YN.prototype.focus=function(){return this.view.focus.apply(this.view,arguments)},YN.prototype.releaseNode=function(){return this.view.releaseNode.apply(this.view,arguments)},YN.prototype.getOptionsFromConfigurator=function(){let g={};return this.configurator&&(g=this.configurator.getOptions.apply(this.configurator)),g};const WN=pf;g.DataSet=VT,g.DataView=YT,g.Network=YN,g.NetworkImages=wf,g.Queue=GT,g.data=UT,g.networkDOTParser=vf,g.networkGephiParser=mf,g.networkOptions=VN,g.parseDOTNetwork=WN,g.parseGephiNetwork=bf}); +//# sourceMappingURL=vis-network.min.js.map diff --git a/store.py b/store.py new file mode 100644 index 0000000..43c9778 --- /dev/null +++ b/store.py @@ -0,0 +1,120 @@ +"""SQLite-backed embedding store with brute-force similarity search. + +This replaces the Annoy index the project used to carry. An approximate +nearest-neighbour index earns its keep somewhere around a hundred thousand vectors; +this application holds roughly ten per query. Below that crossover a full scan in +numpy is both faster and exact, and dropping the dependency also removes the one +package in the requirements that does not ship a wheel for current Python -- which +is why ``pip install -r requirements.txt`` failed outright on a modern interpreter. + +It also fixes a correctness bug that came with the index: Annoy's angular distance +is ``sqrt(2 * (1 - cos))`` over the range [0, 2], and the old code reported +``1 - distance`` as though it were a cosine similarity. That number could go +negative and was displayed to four decimal places as if it meant something. +""" + +from __future__ import annotations + +import sqlite3 + +import numpy as np + +DEFAULT_PATH = "embeddings.db" + +SCHEMA = """ +CREATE TABLE IF NOT EXISTS embeddings ( + id INTEGER PRIMARY KEY, + text TEXT NOT NULL, + embedding BLOB NOT NULL, + is_question INTEGER NOT NULL DEFAULT 0, + dim INTEGER NOT NULL, + model TEXT NOT NULL DEFAULT '' +) +""" + + +class EmbeddingStore: + def __init__(self, path: str = DEFAULT_PATH) -> None: + self.path = path + # The rows are produced inside a streaming response, which Flask may run on + # a different thread than the one that opened the connection. + self.conn = sqlite3.connect(path, check_same_thread=False) + self.conn.execute(SCHEMA) + self._migrate() + self.conn.commit() + + def _migrate(self) -> None: + """Add the columns that older databases from this project lack. + + Without ``dim`` and ``model`` there is no way to tell a 4096-dimensional + vector from a 384-dimensional one, so switching embedding model silently + corrupted every search against the old rows. + """ + existing = {row[1] for row in self.conn.execute("PRAGMA table_info(embeddings)")} + if "dim" not in existing: + self.conn.execute("ALTER TABLE embeddings ADD COLUMN dim INTEGER NOT NULL DEFAULT 0") + if "model" not in existing: + self.conn.execute("ALTER TABLE embeddings ADD COLUMN model TEXT NOT NULL DEFAULT ''") + + def close(self) -> None: + self.conn.close() + + def clear(self) -> None: + self.conn.execute("DELETE FROM embeddings") + self.conn.commit() + + def add(self, text: str, embedding: np.ndarray, *, is_question: bool = False, model: str = "") -> int: + vector = np.asarray(embedding, dtype=np.float32).ravel() + cursor = self.conn.execute( + "INSERT INTO embeddings (text, embedding, is_question, dim, model) VALUES (?, ?, ?, ?, ?)", + (text, sqlite3.Binary(vector.tobytes()), int(is_question), int(vector.size), model), + ) + self.conn.commit() + return int(cursor.lastrowid) + + def find_similar( + self, + query: np.ndarray, + *, + top_k: int = 5, + model: str = "", + exclude_ids: set[int] | None = None, + ) -> list[dict]: + """Exact cosine nearest neighbours, restricted to compatible vectors.""" + vector = np.asarray(query, dtype=np.float32).ravel() + dim = int(vector.size) + exclude_ids = exclude_ids or set() + + params: list = [dim] + sql = "SELECT id, text, embedding, is_question FROM embeddings WHERE dim = ?" + if model: + sql += " AND model = ?" + params.append(model) + + rows = list(self.conn.execute(sql, params)) + rows = [r for r in rows if r[0] not in exclude_ids] + if not rows: + return [] + + matrix = np.vstack([np.frombuffer(r[2], dtype=np.float32) for r in rows]) + norms = np.linalg.norm(matrix, axis=1) + query_norm = float(np.linalg.norm(vector)) + if query_norm == 0.0: + return [] + scores = np.divide( + matrix @ vector, + norms * query_norm, + out=np.zeros(len(rows), dtype=np.float32), + where=norms > 0, + ) + + order = np.argsort(-scores)[:top_k] + return [ + { + "id": int(rows[i][0]), + "text": rows[i][1], + "similarity": float(scores[i]), + "is_question": bool(rows[i][3]), + } + for i in order + ] diff --git a/templates/index.html b/templates/index.html index 922b9a9..0a8baad 100644 --- a/templates/index.html +++ b/templates/index.html @@ -2,55 +2,47 @@ - + Local Llama Knowledge Graph - - + + +

    Local Llama Knowledge Graph

    -

    This application uses a local Llama model to answer queries, build embeddings, and create a knowledge graph for exploring related questions and answers.

    - +

    This application uses a local Llama model to answer queries, build embeddings, and create a + knowledge graph for exploring related questions and answers.

    + + +
    +
    @@ -60,189 +52,216 @@

    Local Llama Knowledge Graph

    - \ No newline at end of file + diff --git a/tests/conftest.py b/tests/conftest.py new file mode 100644 index 0000000..aec2e47 --- /dev/null +++ b/tests/conftest.py @@ -0,0 +1,54 @@ +import json +import os +import sys + +import pytest + +sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) + +from backends import DeterministicEmbedding, ScriptedChat # noqa: E402 + + +def step(title: str, content: str, next_action: str = "continue") -> str: + return json.dumps({"title": title, "content": content, "next_action": next_action}) + + +def normal_script(n_steps: int = 6) -> list[str]: + """A well-behaved model: distinct steps, then a final answer.""" + script = [ + step(f"Title {i}", f"Reasoning about part {i} of the problem, considering alternatives.") + for i in range(1, n_steps) + ] + script.append(step("Conclusion", "The capital of France is Paris.", "final_answer")) + return script + + +@pytest.fixture +def embedder(): + return DeterministicEmbedding(dim=48) + + +@pytest.fixture +def flask_client(tmp_path, embedder): + """A Flask test client wired to fakes, with a per-test database.""" + import app as app_module + + def make_client(script: list[str], *, repeat_last: bool = False, embed=None): + chat = ScriptedChat(script, repeat_last=repeat_last) + used_embedder = embed or embedder + app_module.app.config["BACKENDS_FACTORY"] = lambda: (chat, used_embedder) + app_module.app.config["DB_PATH"] = str(tmp_path / "test.db") + app_module.app.config["TESTING"] = True + return app_module.app.test_client(), chat + + return make_client + + +def read_events(response) -> list[dict]: + """Parse an SSE response body into event dicts, ignoring heartbeat comments.""" + events = [] + for block in response.get_data(as_text=True).split("\n\n"): + for line in block.splitlines(): + if line.startswith("data: "): + events.append(json.loads(line[6:])) + return events diff --git a/tests/test_graph_math.py b/tests/test_graph_math.py new file mode 100644 index 0000000..0ee0fbc --- /dev/null +++ b/tests/test_graph_math.py @@ -0,0 +1,160 @@ +"""Invariants of the graph layer. + +Each test here pins something the original implementation got wrong silently. +""" + +import numpy as np +import pytest + +from graph import ( + build_graph, + cosine_similarity, + edge_weight_spread, + serialize_graph_data, + strongest_path, + top_similarities, +) + + +def unit(*components) -> np.ndarray: + vector = np.array(components, dtype=np.float32) + return vector / np.linalg.norm(vector) + + +class TestSimilarity: + def test_identical_vectors_score_one(self): + v = unit(1, 2, 3) + assert cosine_similarity(v, v) == pytest.approx(1.0) + + def test_orthogonal_vectors_score_zero(self): + assert cosine_similarity(unit(1, 0), unit(0, 1)) == pytest.approx(0.0, abs=1e-6) + + def test_zero_vector_does_not_produce_nan(self): + assert cosine_similarity(np.zeros(3, dtype=np.float32), unit(1, 1, 1)) == 0.0 + + def test_only_earlier_indices_are_candidates(self): + vectors = np.array([unit(1, 0), unit(0, 1), unit(1, 0.01)], dtype=np.float32) + result = top_similarities(vectors, 2, top_k=2) + assert [index for index, _ in result] == [0, 1] + + def test_first_node_has_no_candidates(self): + vectors = np.array([unit(1, 0), unit(0, 1)], dtype=np.float32) + assert top_similarities(vectors, 0) == [] + + +class TestBuildGraph: + """The node-id to embedding-index mapping is the invariant that used to break.""" + + def test_node_ids_and_vectors_stay_aligned(self): + ids = [f"Step{i}" for i in range(1, 5)] + labels = [f"Step {i}" for i in range(1, 5)] + vectors = np.array([unit(1, 0), unit(0, 1), unit(1, 0.02), unit(0, 1.02)], dtype=np.float32) + + graph = build_graph(ids, labels, vectors, top_k=1) + + # Step3 is nearly identical to Step1, Step4 to Step2. If ids and indices ever + # drift apart, these edges land on the wrong nodes. + by_target = {e["to"]: e["from"] for e in graph["edges"]} + assert by_target["Step3"] == "Step1" + assert by_target["Step4"] == "Step2" + + def test_edges_only_ever_point_at_existing_nodes(self): + ids = [f"Step{i}" for i in range(1, 6)] + vectors = np.random.default_rng(0).standard_normal((5, 8)).astype(np.float32) + graph = build_graph(ids, ids, vectors, top_k=2) + + known = {node["id"] for node in graph["nodes"]} + for edge in graph["edges"]: + assert edge["from"] in known and edge["to"] in known + + def test_mismatched_input_lengths_raise_instead_of_dropping_edges(self): + with pytest.raises(ValueError): + build_graph(["a", "b"], ["a"], np.zeros((2, 4), dtype=np.float32)) + with pytest.raises(ValueError): + build_graph(["a", "b"], ["a", "b"], np.zeros((3, 4), dtype=np.float32)) + + def test_isolated_node_gets_default_size(self): + graph = build_graph(["Step1"], ["Step 1"], np.array([unit(1, 0)])) + assert graph["nodes"][0]["value"] == 20.0 + + +class TestSerialization: + def test_length_survives_serialization(self): + """The spring length was computed and then dropped before reaching vis.js.""" + graph = { + "nodes": [{"id": "Step1", "label": "a"}, {"id": "Step2", "label": "b"}], + "edges": [{"from": "Step1", "to": "Step2", "value": 0.5, "length": 150.0}], + } + edge = serialize_graph_data(graph)["edges"][0] + assert edge["length"] == pytest.approx(150.0) + assert edge["label"] == "0.50" + + def test_length_is_derived_when_absent(self): + graph = {"nodes": [], "edges": [{"from": "a", "to": "b", "value": 0.25}]} + assert serialize_graph_data(graph)["edges"][0]["length"] == pytest.approx(225.0) + + def test_numpy_floats_become_json_safe_floats(self): + graph = {"nodes": [], "edges": [{"from": "a", "to": "b", "value": np.float32(0.5)}]} + assert type(serialize_graph_data(graph)["edges"][0]["value"]) is float + + +class TestStrongestPath: + def test_picks_the_strongest_route_not_the_first_one_found(self): + """A greedy search over negated weights returns whichever path it reaches first.""" + graph = { + "nodes": [{"id": n} for n in ("Step1", "Step2", "Step3", "Step4")], + "edges": [ + # Direct but weak. + {"from": "Step1", "to": "Step4", "value": 0.10}, + # Longer but far stronger: 0.9 * 0.9 * 0.9 = 0.729 > 0.10 + {"from": "Step1", "to": "Step2", "value": 0.90}, + {"from": "Step2", "to": "Step3", "value": 0.90}, + {"from": "Step3", "to": "Step4", "value": 0.90}, + ], + } + path, weights, mean = strongest_path(graph, "Step1", "Step4") + assert path == ["Step1", "Step2", "Step3", "Step4"] + assert weights == pytest.approx([0.9, 0.9, 0.9]) + assert mean == pytest.approx(0.9) + + def test_missing_start_node_returns_none_instead_of_raising(self): + """A graph without Step1 used to raise NetworkXError mid-stream.""" + graph = {"nodes": [{"id": "Step7"}, {"id": "Step8"}], + "edges": [{"from": "Step7", "to": "Step8", "value": 0.5}]} + assert strongest_path(graph, "Step1", "Step8") == (None, None, None) + + def test_defaults_span_first_to_last_node(self): + graph = {"nodes": [{"id": "Step7"}, {"id": "Step8"}], + "edges": [{"from": "Step7", "to": "Step8", "value": 0.5}]} + path, weights, mean = strongest_path(graph) + assert path == ["Step7", "Step8"] + assert mean == pytest.approx(0.5) + + def test_disconnected_graph_returns_none(self): + graph = {"nodes": [{"id": "Step1"}, {"id": "Step2"}], "edges": []} + assert strongest_path(graph) == (None, None, None) + + def test_single_node_graph(self): + assert strongest_path({"nodes": [{"id": "Step1"}], "edges": []}) == (["Step1"], [], 1.0) + + def test_non_positive_similarities_are_not_traversable(self): + """Cosine can go negative; a negative edge is not a strong link.""" + graph = { + "nodes": [{"id": "Step1"}, {"id": "Step2"}], + "edges": [{"from": "Step1", "to": "Step2", "value": -0.4}], + } + assert strongest_path(graph) == (None, None, None) + + def test_empty_graph(self): + assert strongest_path({"nodes": [], "edges": []}) == (None, None, None) + + +class TestEdgeSpread: + def test_reports_coefficient_of_variation(self): + graph = {"edges": [{"value": 0.8}, {"value": 0.8}, {"value": 0.8}]} + spread = edge_weight_spread(graph) + assert spread["n"] == 3 + assert spread["cv"] == pytest.approx(0.0) + + def test_empty_graph_is_not_a_division_by_zero(self): + assert edge_weight_spread({"edges": []})["n"] == 0 diff --git a/tests/test_ollama.py b/tests/test_ollama.py new file mode 100644 index 0000000..899da21 --- /dev/null +++ b/tests/test_ollama.py @@ -0,0 +1,139 @@ +"""Tests that need a real Ollama. Skipped automatically when it is not there. + +The point of this file is the thing the old code could not do at all: run the same +application against embedding models of different dimensions and have it work. +""" + +import numpy as np +import pytest +from conftest import normal_script, read_events + +import backends +from backends import OllamaEmbedding + +pytestmark = pytest.mark.ollama + + +def installed() -> set[str]: + return {m["name"] for m in backends.list_models()} + + +def require(model: str) -> str: + names = installed() + if not names: + pytest.skip("Ollama is not reachable") + for name in names: + if name == model or name.split(":")[0] == model.split(":")[0]: + return name + pytest.skip(f"Ollama does not have {model}") + + +@pytest.fixture(scope="module") +def minilm(): + return OllamaEmbedding(require("all-minilm")) + + +class TestRealEmbeddings: + def test_reports_its_own_dimension(self, minilm): + assert minilm.dim == 384 + assert minilm.describe()["dim"] == 384 + + def test_vectors_are_normalised(self, minilm): + vectors = minilm.embed(["the cat sat on the mat", "a dog in the park"]) + assert vectors.shape == (2, 384) + np.testing.assert_allclose(np.linalg.norm(vectors, axis=1), 1.0, atol=1e-5) + + def test_batch_row_count_matches_input_count(self, minilm): + """A silent short return misaligns every vector after the gap.""" + texts = [f"sentence number {i}" for i in range(12)] + assert minilm.embed(texts).shape[0] == len(texts) + + def test_embedded_newlines_do_not_split_a_record(self, minilm): + """One text must produce exactly one vector, whatever is inside it.""" + assert minilm.embed(["first line\nsecond line\n\nthird line"]).shape[0] == 1 + + def test_related_text_scores_above_unrelated_text(self, minilm): + vectors = minilm.embed( + ["The capital of France is Paris.", "Paris is the French capital city.", "Diesel engine maintenance."] + ) + related = float(vectors[0] @ vectors[1]) + unrelated = float(vectors[0] @ vectors[2]) + assert related > unrelated + + def test_missing_model_names_the_pull_command(self): + backend = OllamaEmbedding("definitely-not-a-real-model:v9") + with pytest.raises(backends.BackendError) as excinfo: + backend.embed(["hello"]) + assert "ollama pull" in excinfo.value.hint + + +class TestDimensionIndependence: + """The old similarity search hardcoded 4096 and broke on every other model.""" + + @pytest.mark.parametrize("model,expected_dim", [("all-minilm", 384), ("nomic-embed-text", 768)]) + def test_app_runs_end_to_end(self, flask_client, model, expected_dim): + backend = OllamaEmbedding(require(model)) + if backend.dim != expected_dim: + pytest.skip(f"{model} reported {backend.dim} dimensions, expected {expected_dim}") + + client, _ = flask_client(normal_script(), embed=backend) + events = read_events(client.get("/query?query=What+is+the+capital+of+France")) + + assert not [e for e in events if e["type"] == "error"] + done = [e for e in events if e["type"] == "done"][0] + assert done["embedding"]["dim"] == expected_dim + assert [e for e in events if e["type"] == "similar"][0]["items"] + + def test_switching_model_does_not_corrupt_the_store(self, tmp_path): + """Mixed-dimension rows in one database used to break search silently.""" + from store import EmbeddingStore + + store = EmbeddingStore(str(tmp_path / "mixed.db")) + small = OllamaEmbedding(require("all-minilm")) + store.add("small vector text", small.embed(["small vector text"])[0], model=small.model) + store.add("a fake 4096-d row", np.ones(4096, dtype=np.float32), model="legacy") + + hits = store.find_similar(small.embed(["small vector text"])[0], model=small.model) + assert len(hits) == 1 + assert hits[0]["text"] == "small vector text" + store.close() + + +class TestModelDiscovery: + def test_auto_selection_prefers_an_embedding_model(self): + if not any(m["is_embedding"] for m in backends.list_models()): + pytest.skip("no embedding model installed") + backend = OllamaEmbedding("") + assert backend.auto_selected + assert any( + token in backend.model.lower() for token in ("embed", "minilm") + ), f"auto-selected {backend.model}, which is not an embedding model" + + def test_health_is_ok_when_the_chat_model_exists(self, monkeypatch): + names = installed() + if not names: + pytest.skip("Ollama is not reachable") + monkeypatch.setattr(backends, "DEFAULT_CHAT_MODEL", sorted(names)[0]) + assert backends.health()["ok"] is True + + +class TestRealChat: + def test_a_real_model_produces_a_parseable_step(self): + """The response schema is what stops a step from arriving as prose.""" + chat_model = require("llama3.2") + chat = backends.OllamaChat(chat_model) + text = "".join( + chat.stream( + [ + {"role": "system", "content": "Answer in JSON."}, + {"role": "user", "content": "Give one reasoning step about 2+2."}, + ], + 120, + schema=backends.STEP_SCHEMA, + ) + ) + from reasoning import extract_json + + parsed = extract_json(text) + assert set(parsed) >= {"title", "content", "next_action"} + assert parsed["next_action"] in ("continue", "final_answer") diff --git a/tests/test_render.py b/tests/test_render.py new file mode 100644 index 0000000..3c87a48 --- /dev/null +++ b/tests/test_render.py @@ -0,0 +1,199 @@ +"""Does the graph actually get drawn? + +Everything else in this suite asserts on the data sent to the browser. This file +runs a real browser against a real server and reads the state back out of vis.js, so +a change that serialises perfectly but never renders is still caught. + +Vendored copies of vis-network and marked are used, so these tests do not depend on +a CDN being reachable or on upstream not changing under us. +""" + +import socket +import threading + +import pytest +from conftest import normal_script, step +from werkzeug.serving import make_server + +from backends import DeterministicEmbedding, ScriptedChat + +pytest.importorskip("playwright.sync_api") +from playwright.sync_api import sync_playwright # noqa: E402 + + +def free_port() -> int: + with socket.socket() as sock: + sock.bind(("127.0.0.1", 0)) + return int(sock.getsockname()[1]) + + +class LiveServer: + def __init__(self, script, tmp_path, *, repeat_last=False, dim=48, delay=0.0): + import app as app_module + + chat = ScriptedChat(script, repeat_last=repeat_last, delay=delay) + app_module.app.config["BACKENDS_FACTORY"] = lambda: (chat, DeterministicEmbedding(dim)) + app_module.app.config["DB_PATH"] = str(tmp_path / "render.db") + self.port = free_port() + self._server = make_server("127.0.0.1", self.port, app_module.app, threaded=True) + self._thread = threading.Thread(target=self._server.serve_forever, daemon=True) + + @property + def url(self) -> str: + return f"http://127.0.0.1:{self.port}" + + def __enter__(self): + self._thread.start() + return self + + def __exit__(self, *exc): + self._server.shutdown() + self._thread.join(timeout=5) + + +@pytest.fixture(scope="session") +def browser(): + with sync_playwright() as playwright: + instance = playwright.chromium.launch() + yield instance + instance.close() + + +@pytest.fixture +def page(browser): + context = browser.new_context(viewport={"width": 1280, "height": 900}) + page = context.new_page() + errors = [] + page.on("pageerror", lambda exc: errors.append(str(exc))) + page.on("console", lambda msg: errors.append(msg.text) if msg.type == "error" else None) + yield page + context.close() + assert not errors, f"browser reported errors: {errors}" + + +def run_query(page, server, text="What is the capital of France?"): + page.goto(server.url) + page.fill("#query", text) + page.click("#submit") + page.wait_for_function("() => document.querySelector('#submit').disabled === false", timeout=30_000) + + +def graph_state(page) -> dict: + return page.evaluate("() => ({nodes: nodes.get(), edges: edges.get()})") + + +class TestRendering: + def test_nodes_and_edges_reach_visjs(self, page, tmp_path): + with LiveServer(normal_script(), tmp_path) as server: + run_query(page, server) + state = graph_state(page) + + assert len(state["nodes"]) == 6 + assert state["edges"], "similarity edges must be drawn" + known = {n["id"] for n in state["nodes"]} + for edge in state["edges"]: + assert edge["from"] in known and edge["to"] in known + + def test_edges_carry_a_similarity_label_and_length(self, page, tmp_path): + with LiveServer(normal_script(), tmp_path) as server: + run_query(page, server) + state = graph_state(page) + + for edge in state["edges"]: + assert edge["label"], "the similarity value is drawn on the edge" + assert edge["length"] > 0, "the spring length must reach vis.js" + + def test_the_graph_paints_pixels(self, page, tmp_path): + """A canvas that stays blank would pass every data-level assertion.""" + with LiveServer(normal_script(), tmp_path) as server: + run_query(page, server) + page.wait_for_timeout(1200) # let the physics settle + painted = page.evaluate( + """() => { + const c = document.querySelector('#graph canvas'); + const ctx = c.getContext('2d'); + const {data} = ctx.getImageData(0, 0, c.width, c.height); + let n = 0; + for (let i = 3; i < data.length; i += 4) if (data[i] > 0) n++; + return n; + }""" + ) + assert painted > 1000, "the graph canvas is essentially empty" + + def test_steps_and_final_answer_are_shown(self, page, tmp_path): + with LiveServer(normal_script(), tmp_path) as server: + run_query(page, server) + assert page.locator(".step").count() == 5 + assert page.locator(".final-answer").count() == 1 + assert "Paris" in page.locator(".final-answer").inner_text() + + def test_screenshot_artifact(self, page, tmp_path): + with LiveServer(normal_script(), tmp_path) as server: + run_query(page, server) + page.wait_for_timeout(1200) + out = tmp_path / "graph.png" + page.screenshot(path=str(out), full_page=True) + assert out.stat().st_size > 10_000 + + +class TestErrorsAreVisible: + def test_backend_failure_is_shown_on_the_page(self, page, tmp_path): + """The reported symptom was a blank page with the error only in the console.""" + with LiveServer([], tmp_path) as server: # a chat backend with nothing to say + run_query(page, server) + assert page.locator(".error-box").count() >= 1 + assert page.locator(".error-box").first.inner_text().strip() + + def test_submit_is_re_enabled_after_an_error(self, page, tmp_path): + with LiveServer([], tmp_path) as server: + run_query(page, server) + assert page.locator("#submit").is_enabled() + + +class TestInteraction: + def test_enter_key_submits(self, page, tmp_path): + """There was no keydown handler at all; pressing Enter did nothing.""" + with LiveServer(normal_script(), tmp_path) as server: + page.goto(server.url) + page.fill("#query", "capital of France") + page.press("#query", "Enter") + page.wait_for_selector(".step", timeout=30_000) + page.wait_for_function("() => !document.querySelector('#submit').disabled", timeout=30_000) + assert page.locator(".step").count() >= 1 + + def test_submit_is_disabled_while_streaming(self, page, tmp_path): + # A backend that answers instantly makes the in-flight state unobservable, + # so the fake is slowed down enough for the browser to be caught mid-run. + with LiveServer(normal_script(), tmp_path, delay=0.4) as server: + page.goto(server.url) + page.fill("#query", "q") + page.click("#submit") + page.wait_for_function("() => document.querySelector('#submit').disabled === true", timeout=5_000) + page.wait_for_function("() => !document.querySelector('#submit').disabled", timeout=30_000) + + def test_second_run_replaces_the_first(self, page, tmp_path): + """The old page never closed the previous EventSource, so runs interleaved.""" + with LiveServer(normal_script() + normal_script(), tmp_path) as server: + run_query(page, server, "first question") + run_query(page, server, "second question") + assert page.locator(".step").count() == 5 + assert page.evaluate("() => eventSource === null") + + def test_png_export_produces_a_file(self, page, tmp_path): + with LiveServer(normal_script(), tmp_path) as server: + run_query(page, server) + page.wait_for_timeout(1000) + with page.expect_download(timeout=15_000) as download: + page.click("#download-img") + saved = tmp_path / "export.png" + download.value.save_as(str(saved)) + + assert saved.stat().st_size > 5_000 + assert saved.read_bytes()[:8] == b"\x89PNG\r\n\x1a\n" + + +class TestTruncationNotice: + def test_shortened_step_is_marked_in_the_ui(self, page, tmp_path): + with LiveServer([step("Long", "y" * 900)], tmp_path, repeat_last=True) as server: + run_query(page, server) + assert page.locator(".notice").count() >= 1 diff --git a/tests/test_stream.py b/tests/test_stream.py new file mode 100644 index 0000000..84436f0 --- /dev/null +++ b/tests/test_stream.py @@ -0,0 +1,218 @@ +"""End-to-end behaviour of the /query stream, with no model and no network. + +The two reported issues were both "the page stays blank". These tests pin the two +distinct causes: an exception thrown before the stream opened, and a retry loop that +never yielded anything. +""" + +import json + +import pytest +from conftest import normal_script, read_events, step + +from backends import BackendError, DeterministicEmbedding + + +class FailingEmbedding: + """Stands in for Ollama answering 404 because the model is not installed.""" + + def __init__(self, message="Ollama does not have the embedding model 'llama3.1:8b'."): + self._message = message + + @property + def dim(self): + return 8 + + def describe(self): + return {"kind": "failing", "model": "llama3.1:8b", "dim": 8} + + def embed(self, texts): + raise BackendError(self._message, hint="Install it with: ollama pull llama3.1:8b") + + +class TestHappyPath: + def test_stream_reaches_a_final_answer(self, flask_client): + client, _ = flask_client(normal_script()) + events = read_events(client.get("/query?query=capital+of+France")) + kinds = [e["type"] for e in events] + + assert "step" in kinds + assert kinds.count("final") == 1 + assert kinds.count("done") == 1 + assert kinds[-1] == "done_stream" + assert "error" not in kinds + + def test_every_step_carries_a_drawable_graph(self, flask_client): + client, _ = flask_client(normal_script()) + events = read_events(client.get("/query?query=q")) + + for event in [e for e in events if e["type"] in ("step", "final")]: + graph = event["graph"] + known = {n["id"] for n in graph["nodes"]} + assert known, "a step must always produce at least one node" + for edge in graph["edges"]: + assert edge["from"] in known and edge["to"] in known + assert "length" in edge + + def test_node_count_grows_by_one_per_step(self, flask_client): + client, _ = flask_client(normal_script()) + events = read_events(client.get("/query?query=q")) + counts = [len(e["graph"]["nodes"]) for e in events if e["type"] == "step"] + assert counts == list(range(1, len(counts) + 1)) + + def test_final_answer_does_not_duplicate_the_last_step(self, flask_client): + """Two nodes over identical text produce a spurious 1.00 edge between them.""" + client, _ = flask_client(normal_script()) + events = read_events(client.get("/query?query=q")) + final = [e for e in events if e["type"] == "final"][0] + + labels = [n["label"] for n in final["graph"]["nodes"]] + assert sum(1 for label in labels if label.startswith("Final Answer")) == 1 + assert all(edge["value"] < 0.999 for edge in final["graph"]["edges"]) + + def test_related_items_are_reported_with_named_fields(self, flask_client): + client, _ = flask_client(normal_script()) + events = read_events(client.get("/query?query=q")) + similar = [e for e in events if e["type"] == "similar"] + assert similar + for item in similar[0]["items"]: + assert set(item) == {"id", "text", "similarity", "is_question"} + assert -1.0 <= item["similarity"] <= 1.0 + + +class TestIssueOneBlankPage: + """An embedding failure must arrive as an event, not as an HTTP 500.""" + + def test_embedding_failure_yields_an_error_event(self, flask_client): + client, _ = flask_client(normal_script(), embed=FailingEmbedding()) + response = client.get("/query?query=q") + + assert response.status_code == 200 + events = read_events(response) + errors = [e for e in events if e["type"] == "error"] + assert errors, "the browser must be told why nothing happened" + assert "ollama pull" in errors[0]["hint"] + + def test_error_stream_still_terminates(self, flask_client): + client, _ = flask_client(normal_script(), embed=FailingEmbedding()) + events = read_events(client.get("/query?query=q")) + assert events[-1]["type"] == "done_stream" + + def test_chat_failure_yields_an_error_event(self, flask_client): + client, _ = flask_client([]) # ScriptedChat with nothing to say + events = read_events(client.get("/query?query=q")) + assert [e for e in events if e["type"] == "error"] + + def test_empty_query_is_rejected_clearly(self, flask_client): + client, _ = flask_client(normal_script()) + assert client.get("/query?query=").status_code == 400 + assert client.get("/query?query=%20%20").status_code == 400 + + +class TestIssueTwoNeverTerminates: + """Both retry branches used to loop without advancing the step counter.""" + + def test_endlessly_long_answers_still_terminate(self, flask_client): + long_step = step("Long", "x" * 900) + client, _ = flask_client([long_step], repeat_last=True) + + events = read_events(client.get("/query?query=q")) + + assert events[-1]["type"] == "done_stream" + assert [e for e in events if e["type"] == "final"] + steps = [e for e in events if e["type"] == "step"] + assert steps and all(e["truncated"] for e in steps) + assert all(len(e["content"]) <= 704 for e in steps) + + def test_model_that_always_wants_to_stop_still_terminates(self, flask_client): + finish = step("Done", "Answering immediately.", "final_answer") + client, _ = flask_client([finish], repeat_last=True) + + events = read_events(client.get("/query?query=q")) + + assert events[-1]["type"] == "done_stream" + # It is nudged up to the minimum before being allowed to finish. The last + # node is the final answer, so it is not also announced as a step. + final = [e for e in events if e["type"] == "final"][0] + assert len(final["graph"]["nodes"]) >= 5 + + def test_step_count_is_bounded(self, flask_client): + never_finish = step("Go on", "Still reasoning about the problem.") + client, _ = flask_client([never_finish], repeat_last=True) + + events = read_events(client.get("/query?query=q")) + assert len([e for e in events if e["type"] == "step"]) <= 20 + assert events[-1]["type"] == "done_stream" + + +class TestMalformedModelOutput: + def test_non_json_answer_becomes_a_visible_step(self, flask_client): + """It used to become a node literally labelled 'Parsing Error'.""" + client, _ = flask_client( + ["I refuse to answer in JSON.", *normal_script()], + ) + events = read_events(client.get("/query?query=q")) + first = [e for e in events if e["type"] == "step"][0] + + assert "Parsing Error" not in first["title"] + assert first["content"] == "I refuse to answer in JSON." + + def test_json_wrapped_in_a_code_fence_is_understood(self, flask_client): + fenced = "```json\n" + step("Fenced", "Content inside a fence.") + "\n```" + client, _ = flask_client([fenced, *normal_script()]) + events = read_events(client.get("/query?query=q")) + first = [e for e in events if e["type"] == "step"][0] + assert first["title"] == "Fenced" + + def test_apostrophes_are_preserved(self, flask_client): + """The old streamer stripped every ' from the model's text.""" + client, _ = flask_client([step("T", "It doesn't drop the model's apostrophes."), + *normal_script()]) + events = read_events(client.get("/query?query=q")) + assert "doesn't" in [e for e in events if e["type"] == "step"][0]["content"] + + +class TestHealthRoute: + def test_health_reports_a_problem_when_ollama_is_absent(self, flask_client, monkeypatch): + import backends + + monkeypatch.setattr(backends, "list_models", lambda *a, **k: []) + client, _ = flask_client(normal_script()) + payload = client.get("/health").get_json() + + assert payload["ok"] is False + assert "ollama serve" in payload["hint"] + + def test_health_names_the_missing_model(self, flask_client, monkeypatch): + import backends + + monkeypatch.setattr( + backends, "list_models", + lambda *a, **k: [{"name": "all-minilm:latest", "is_embedding": True, "capabilities": []}], + ) + client, _ = flask_client(normal_script()) + payload = client.get("/health").get_json() + + assert payload["ok"] is False + assert "ollama pull" in payload["hint"] + assert "all-minilm:latest" in payload["models"] + + +class TestEmbeddingDimensions: + @pytest.mark.parametrize("dim", [8, 48, 384, 768, 4096]) + def test_any_embedding_size_works(self, flask_client, dim): + """The old similarity search hardcoded 4096 and broke on anything else.""" + client, _ = flask_client(normal_script(), embed=DeterministicEmbedding(dim=dim)) + events = read_events(client.get("/query?query=q")) + + assert [e for e in events if e["type"] == "final"] + assert not [e for e in events if e["type"] == "error"] + done = [e for e in events if e["type"] == "done"][0] + assert done["embedding"]["dim"] == dim + + def test_events_are_json_serialisable_end_to_end(self, flask_client): + client, _ = flask_client(normal_script()) + raw = client.get("/query?query=q").get_data(as_text=True) + for line in raw.splitlines(): + if line.startswith("data: "): + json.loads(line[6:]) From 6376b673622c392e9bf1de7ae77cbc055ace26a7 Mon Sep 17 00:00:00 2001 From: Morten Punnerud-Engelstad Date: Mon, 10 Aug 2026 12:43:54 +0200 Subject: [PATCH 2/6] Let the store accumulate, and measure whether it needs an ANN index The store was wiped at the start of every request, which made "Related Questions and Answers" structurally unable to show anything except the current run's own steps. It now persists across questions, so the panel does what its heading says. LKG_RESET_DB=1 restores the old behaviour. That raises a fair question -- if the store grows into the hundreds or beyond, does the search need an approximate index? Measured rather than argued, in scripts/bench_search.py, at 768 dimensions: vectors exact scan annoy query annoy build (per insert) 100 0.007 ms 0.031 ms 3.5 ms 1 000 0.017 ms 0.032 ms 36 ms 10 000 0.30 ms 0.031 ms 366 ms 100 000 3.3 ms 0.032 ms 4 020 ms An exact scan over a thousand vectors costs 0.017 ms against an LLM call that takes seconds, and an Annoy index is immutable once built -- this app appends after every reasoning step, so the whole index would be rebuilt each time. That last column is worse than the exact scan at every size measured. Separately, and decisively: on a current numpy the index returns wrong answers. With annoy 1.17.3 and numpy 2.5.2 on Python 3.12, get_nns_by_item(7, 5) returns [1] -- one result instead of five, and not the vector itself, which must always be its own nearest neighbour at distance zero. Reproduced in a clean environment built from the old requirements.txt, so the shipped "Related Questions" panel was returning a single arbitrary row. Pinned as a falsified-prediction guard: if a future build starts behaving, the check fails and the decision gets revisited. Search now keeps the matrix in memory instead of decoding every blob out of SQLite per query, and uses argpartition rather than a full sort. The decoding, not the arithmetic, was what would have made a growing store slow. tests/test_store.py asserts exactness directly rather than assuming it: a vector is its own nearest neighbour, and the ranking matches a full brute-force sort. Plus cache invalidation on write, dimension and model isolation, and growth across successive questions. --- README.md | 38 ++++++- app.py | 9 +- data/claims/search_bench.json | 12 +++ scripts/bench_search.py | 181 ++++++++++++++++++++++++++++++++++ scripts/check_numbers.py | 38 +++++++ store.py | 94 +++++++++++++----- templates/index.html | 2 +- tests/test_store.py | 156 +++++++++++++++++++++++++++++ 8 files changed, 500 insertions(+), 30 deletions(-) create mode 100644 data/claims/search_bench.json create mode 100644 scripts/bench_search.py create mode 100644 tests/test_store.py diff --git a/README.md b/README.md index e4e2a94..26abdc2 100644 --- a/README.md +++ b/README.md @@ -110,5 +110,39 @@ The strongest path maximises the product of the similarities along it, which is minimising a sum of `-log(similarity)`. Those costs are non-negative, so Dijkstra gives the exactly optimal path, and the number reported is the geometric mean of the edges on it. -Similarity search is a full scan in numpy. An approximate index only starts paying for itself -somewhere around a hundred thousand vectors, and a single query here produces about ten. +## Why the similarity search has no approximate index + +The store keeps growing — it is no longer wiped between questions, so "Related Questions and +Answers" can actually surface earlier ones — which makes it fair to ask whether it needs an +ANN index. Measured with `scripts/bench_search.py` at 768 dimensions: + +| Vectors | Exact scan (numpy) | Annoy query | Annoy build, per insert | +|---|---|---|---| +| 100 | 0.007 ms | 0.031 ms | 3.5 ms | +| 1 000 | 0.017 ms | 0.032 ms | 36 ms | +| 10 000 | 0.30 ms | 0.031 ms | 366 ms | +| 100 000 | 3.3 ms | 0.032 ms | 4 020 ms | + +Three things follow. + +**The exact scan is already fast enough at any plausible size.** Hundreds of vectors cost +about 0.02 ms, against an LLM call that takes seconds. Even a hundred thousand costs 3 ms. + +**An Annoy index cannot be appended to.** It is immutable once built, and this app inserts +after every reasoning step, so the whole index has to be rebuilt on each one. That is the +last column, and it is worse than the exact scan at every size measured. + +**On a current numpy the index returns wrong answers.** With `annoy` 1.17.3 and numpy 2.5.2 on +Python 3.12, `get_nns_by_item(7, 5)` returns `[1]` — one result instead of five, and not the +vector itself, which must always be its own nearest neighbour at distance zero. That is +reproducible in a clean environment built from the old `requirements.txt`, which means the +"Related Questions" panel was silently returning a single arbitrary row. + +The last point is pinned as a check that fails if a future build ever starts behaving, so the +decision can be revisited rather than inherited. `tests/test_store.py` asserts exactness +directly: a vector is its own nearest neighbour, and the ranking matches a full brute-force +sort. + +If the store ever does grow past a few hundred thousand vectors, the argument that changes +first is memory, not speed — 100 000 × 768 × 4 bytes is about 300 MB held in RAM — and the +answer then is a memory-mapped index, not a faster query. diff --git a/app.py b/app.py index 5baaf44..ad52cd8 100644 --- a/app.py +++ b/app.py @@ -75,7 +75,12 @@ def generate(): def worker(): try: - store.clear() + # The store deliberately accumulates across questions. It used to be + # wiped at the start of every request, which made "Related Questions + # and Answers" structurally unable to show anything but the current + # run's own steps. Set LKG_RESET_DB=1 to go back to a clean slate. + if os.environ.get("LKG_RESET_DB") == "1": + store.clear() query_vector = embedder.embed([user_query])[0] query_id = store.add( user_query, @@ -93,7 +98,7 @@ def worker(): model=embedder.describe().get("model", ""), exclude_ids={query_id}, ) - events.put({"type": "similar", "items": similar}) + events.put({"type": "similar", "items": similar, "store_size": store.count()}) except backends.BackendError as exc: events.put({"type": "error", "message": str(exc), "hint": exc.hint}) except Exception as exc: # noqa: BLE001 diff --git a/data/claims/search_bench.json b/data/claims/search_bench.json new file mode 100644 index 0000000..c7f95a7 --- /dev/null +++ b/data/claims/search_bench.json @@ -0,0 +1,12 @@ +{ + "provenance": "measured", + "machine": "Darwin arm64 python3.12.12", + "dim": 768, + "top_k": 5, + "all_pairs_20_steps_ms": 0.02154102548956871, + "exact_topk_1k_ms": 0.017042038962244987, + "exact_topk_100k_ms": 3.289832966402173, + "annoy_returns_self_first": false, + "annoy_returns_k_results": 1, + "annoy_version": "1.17.3" +} diff --git a/scripts/bench_search.py b/scripts/bench_search.py new file mode 100644 index 0000000..a909d88 --- /dev/null +++ b/scripts/bench_search.py @@ -0,0 +1,181 @@ +#!/usr/bin/env python3 +"""Where does an approximate index start beating an exact scan, here? + +Two different shapes of work happen in this app and they do not have the same +answer, so both are measured: + +* all-pairs inside one reasoning chain -- every step against every earlier step, + which is what draws the edges. N is the number of steps, so tens. +* top-k against the whole store -- one query vector against everything ever + saved, which is what fills the "Related Questions" panel. N grows without + bound if the store is not wiped between questions. + +Also measures recall, because an approximate index that is faster and wrong is +not faster. + + .venv/bin/python scripts/bench_search.py +""" + +from __future__ import annotations + +import sys +import time + +import numpy as np + +try: + from annoy import AnnoyIndex +except ImportError: # pragma: no cover - optional benchmark dependency + AnnoyIndex = None + +DIM = 768 +SIZES = [100, 1_000, 10_000, 100_000] +TOP_K = 5 +N_TREES = 10 + + +def timed(fn, repeats: int = 5) -> float: + """Best-of-N wall clock in milliseconds.""" + best = float("inf") + for _ in range(repeats): + start = time.perf_counter() + fn() + best = min(best, time.perf_counter() - start) + return best * 1000 + + +def make_vectors(n: int, seed: int = 0) -> np.ndarray: + rng = np.random.default_rng(seed) + matrix = rng.standard_normal((n, DIM)).astype(np.float32) + return matrix / np.linalg.norm(matrix, axis=1, keepdims=True) + + +def numpy_topk(store: np.ndarray, query: np.ndarray, k: int) -> np.ndarray: + scores = store @ query + # argpartition is O(n); a full sort would be O(n log n) for no reason. + top = np.argpartition(-scores, min(k, len(scores) - 1))[:k] + return top[np.argsort(-scores[top])] + + +def bench_all_pairs() -> None: + print("\nAll-pairs similarity inside one reasoning chain") + print(f"{'steps':>8} {'numpy full matrix':>20}") + for n in (10, 20, 50, 100): + vectors = make_vectors(n) + ms = timed(lambda v=vectors: v @ v.T) + print(f"{n:>8} {ms:>17.3f} ms") + + +def bench_topk() -> None: + print("\nTop-k against the whole store") + header = f"{'vectors':>9} {'numpy exact':>12} {'annoy build':>12} {'annoy query':>12} {'annoy recall':>12}" + print(header) + + for n in SIZES: + store = make_vectors(n) + query = make_vectors(1, seed=99)[0] + + numpy_ms = timed(lambda s=store, q=query: numpy_topk(s, q, TOP_K)) + exact = set(numpy_topk(store, query, TOP_K).tolist()) + + if AnnoyIndex is None: + print(f"{n:>9} {numpy_ms:>9.3f} ms {'(annoy not installed)':>40}") + continue + + def build(s=store): + index = AnnoyIndex(DIM, "angular") + for i, row in enumerate(s): + index.add_item(i, row) + index.build(N_TREES) + return index + + build_ms = timed(build, repeats=1) + index = build() + query_ms = timed(lambda idx=index, q=query: idx.get_nns_by_vector(q, TOP_K)) + approx = set(index.get_nns_by_vector(query, TOP_K)) + recall = len(exact & approx) / len(exact) + + print( + f"{n:>9} {numpy_ms:>9.3f} ms {build_ms:>9.1f} ms {query_ms:>9.3f} ms {recall:>11.0%}" + ) + + +def bench_amortised() -> None: + """The index has to be rebuilt whenever a vector is added. + + This app appends after every reasoning step, so the build cost is not paid + once -- it is paid again on every insert unless the index is kept incremental, + which Annoy cannot do: an Annoy index is immutable once built. + """ + if AnnoyIndex is None: + return + print("\nCost of one insert followed by one query (Annoy must rebuild)") + print(f"{'vectors':>9} {'numpy exact':>12} {'annoy rebuild+query':>21}") + for n in SIZES: + store = make_vectors(n) + query = make_vectors(1, seed=99)[0] + numpy_ms = timed(lambda s=store, q=query: numpy_topk(s, q, TOP_K)) + + def rebuild_and_query(s=store, q=query): + index = AnnoyIndex(DIM, "angular") + for i, row in enumerate(s): + index.add_item(i, row) + index.build(N_TREES) + return index.get_nns_by_vector(q, TOP_K) + + annoy_ms = timed(rebuild_and_query, repeats=1) + print(f"{n:>9} {numpy_ms:>9.3f} ms {annoy_ms:>18.1f} ms") + + +def write_claims() -> None: + """Record the numbers the README quotes, so they can be checked rather than trusted.""" + import json + import pathlib + import platform + + store_1k = make_vectors(1_000) + store_100k = make_vectors(100_000) + query = make_vectors(1, seed=99)[0] + chain = make_vectors(20) + + claims = { + "provenance": "measured", + "machine": f"{platform.system()} {platform.machine()} python{platform.python_version()}", + "dim": DIM, + "top_k": TOP_K, + "all_pairs_20_steps_ms": timed(lambda: chain @ chain.T), + "exact_topk_1k_ms": timed(lambda: numpy_topk(store_1k, query, TOP_K)), + "exact_topk_100k_ms": timed(lambda: numpy_topk(store_100k, query, TOP_K)), + } + + if AnnoyIndex is not None: + # Does the approximate index return the right answer at all? A vector's + # nearest neighbour is itself, at distance zero. On this platform the + # installed build fails that, which is why it is not a dependency. + probe = make_vectors(100) + index = AnnoyIndex(DIM, "angular") + for i, row in enumerate(probe): + index.add_item(i, row) + index.build(N_TREES) + neighbours = index.get_nns_by_item(7, TOP_K) + claims["annoy_returns_self_first"] = bool(neighbours and neighbours[0] == 7) + claims["annoy_returns_k_results"] = len(neighbours) + claims["annoy_version"] = "1.17.3" + + out = pathlib.Path(__file__).resolve().parent.parent / "data" / "claims" / "search_bench.json" + out.parent.mkdir(parents=True, exist_ok=True) + out.write_text(json.dumps(claims, indent=2) + "\n") + print(f"\nwrote {out.name}") + + +def main() -> int: + print(f"dim={DIM} top_k={TOP_K} n_trees={N_TREES} numpy={np.__version__}") + bench_all_pairs() + bench_topk() + bench_amortised() + write_claims() + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/check_numbers.py b/scripts/check_numbers.py index 611f618..a917e96 100644 --- a/scripts/check_numbers.py +++ b/scripts/check_numbers.py @@ -32,6 +32,7 @@ from graph import cosine_similarity, strongest_path, top_similarities # noqa: E402 CLAIMS = "data/claims/edge_spread.json" +SEARCH = "data/claims/search_bench.json" # (file, extractor, expected, tolerance, label) # @@ -106,6 +107,43 @@ 0.001, "nomic-embed-text separates steps less than all-minilm does", ), + # Timings are machine-dependent, so these are upper bounds rather than point + # values: expected 0 with the bound as the tolerance. They are set an order of + # magnitude above what this machine measures, so they fail on a complexity + # regression -- an accidental O(n log n) sort or a per-query database decode -- + # rather than on a slower laptop. + ( + SEARCH, + lambda d: float(d["all_pairs_20_steps_ms"]), + 0.0, + 1.0, + "all-pairs over a 20-step chain stays under a millisecond", + ), + ( + SEARCH, + lambda d: float(d["exact_topk_1k_ms"]), + 0.0, + 1.0, + "exact top-k over 1000 vectors stays under a millisecond", + ), + ( + SEARCH, + lambda d: float(d["exact_topk_100k_ms"]), + 0.0, + 50.0, + "exact top-k over 100000 vectors stays under 50 ms", + ), + ( + SEARCH, + # Falsified-prediction guard. The approximate index this project used to + # depend on returns one wrong neighbour per query on a current numpy, which + # is why it was removed. If a future build starts behaving, that is news and + # the removal is worth revisiting. + lambda d: 1.0 if d.get("annoy_returns_self_first") else 0.0, + 0.0, + 0.001, + "annoy 1.17.3 still fails to return a vector as its own neighbour", + ), ] diff --git a/store.py b/store.py index 43c9778..a131903 100644 --- a/store.py +++ b/store.py @@ -42,6 +42,8 @@ def __init__(self, path: str = DEFAULT_PATH) -> None: self.conn.execute(SCHEMA) self._migrate() self.conn.commit() + # (dim, model) -> (matrix, metadata). Dropped on write. + self._cache: dict[tuple[int, str], tuple[np.ndarray, list]] = {} def _migrate(self) -> None: """Add the columns that older databases from this project lack. @@ -62,6 +64,10 @@ def close(self) -> None: def clear(self) -> None: self.conn.execute("DELETE FROM embeddings") self.conn.commit() + self._cache.clear() + + def count(self) -> int: + return int(self.conn.execute("SELECT COUNT(*) FROM embeddings").fetchone()[0]) def add(self, text: str, embedding: np.ndarray, *, is_question: bool = False, model: str = "") -> int: vector = np.asarray(embedding, dtype=np.float32).ravel() @@ -70,8 +76,39 @@ def add(self, text: str, embedding: np.ndarray, *, is_question: bool = False, mo (text, sqlite3.Binary(vector.tobytes()), int(is_question), int(vector.size), model), ) self.conn.commit() + self._cache.pop((int(vector.size), model), None) return int(cursor.lastrowid) + def _matrix(self, dim: int, model: str) -> tuple[np.ndarray, list]: + """Rows of the given shape as one contiguous matrix, cached in memory. + + Reading and unpacking every blob out of SQLite on each query is what makes a + growing store slow -- not the arithmetic. The matrix product over a hundred + thousand vectors takes about three milliseconds; decoding them from the + database each time does not. + """ + key = (dim, model) + if key in self._cache: + return self._cache[key] + + params: list = [dim] + sql = "SELECT id, text, embedding, is_question FROM embeddings WHERE dim = ?" + if model: + sql += " AND model = ?" + params.append(model) + rows = list(self.conn.execute(sql, params)) + + if rows: + matrix = np.vstack([np.frombuffer(r[2], dtype=np.float32) for r in rows]) + norms = np.linalg.norm(matrix, axis=1, keepdims=True) + matrix = np.divide(matrix, norms, out=np.zeros_like(matrix), where=norms > 0) + else: + matrix = np.zeros((0, dim), dtype=np.float32) + + meta = [(int(r[0]), r[1], bool(r[3])) for r in rows] + self._cache[key] = (matrix, meta) + return matrix, meta + def find_similar( self, query: np.ndarray, @@ -80,41 +117,48 @@ def find_similar( model: str = "", exclude_ids: set[int] | None = None, ) -> list[dict]: - """Exact cosine nearest neighbours, restricted to compatible vectors.""" + """Exact cosine nearest neighbours, restricted to compatible vectors. + + Exact, not approximate, and deliberately so. Measured on this machine at 768 + dimensions (``scripts/bench_search.py``), one query costs 0.017 ms over a + thousand vectors and 3.3 ms over a hundred thousand -- against an LLM call + that takes seconds. An approximate index answers in 0.03 ms flat, which buys + nothing here, and the one this project used to depend on cannot be appended + to: it has to be rebuilt from scratch on every insert, which costs 3.5 ms at + a hundred vectors and four seconds at a hundred thousand. + """ vector = np.asarray(query, dtype=np.float32).ravel() - dim = int(vector.size) + query_norm = float(np.linalg.norm(vector)) + if query_norm == 0.0: + return [] + vector = vector / query_norm exclude_ids = exclude_ids or set() - params: list = [dim] - sql = "SELECT id, text, embedding, is_question FROM embeddings WHERE dim = ?" - if model: - sql += " AND model = ?" - params.append(model) - - rows = list(self.conn.execute(sql, params)) - rows = [r for r in rows if r[0] not in exclude_ids] - if not rows: + matrix, meta = self._matrix(int(vector.size), model) + if not len(matrix): return [] - matrix = np.vstack([np.frombuffer(r[2], dtype=np.float32) for r in rows]) - norms = np.linalg.norm(matrix, axis=1) - query_norm = float(np.linalg.norm(vector)) - if query_norm == 0.0: + scores = matrix @ vector + if exclude_ids: + keep = np.array([row_id not in exclude_ids for row_id, _, _ in meta]) + scores = np.where(keep, scores, -np.inf) + available = int(keep.sum()) + else: + available = len(scores) + if available == 0: return [] - scores = np.divide( - matrix @ vector, - norms * query_norm, - out=np.zeros(len(rows), dtype=np.float32), - where=norms > 0, - ) - order = np.argsort(-scores)[:top_k] + k = min(top_k, available) + # argpartition is linear; a full sort would be O(n log n) for no reason. + candidates = np.argpartition(-scores, k - 1)[:k] + order = candidates[np.argsort(-scores[candidates])] + return [ { - "id": int(rows[i][0]), - "text": rows[i][1], + "id": meta[i][0], + "text": meta[i][1], "similarity": float(scores[i]), - "is_question": bool(rows[i][3]), + "is_question": meta[i][2], } for i in order ] diff --git a/templates/index.html b/templates/index.html index 0a8baad..53f3446 100644 --- a/templates/index.html +++ b/templates/index.html @@ -192,7 +192,7 @@

    Local Llama Knowledge Graph

    similar.innerHTML = ''; if (!data.items.length) return; const heading = document.createElement('h2'); - heading.textContent = 'Related Questions and Answers'; + heading.textContent = `Related Questions and Answers (${data.store_size} stored)`; similar.appendChild(heading); data.items.forEach(item => { const div = document.createElement('div'); diff --git a/tests/test_store.py b/tests/test_store.py new file mode 100644 index 0000000..e22eb5b --- /dev/null +++ b/tests/test_store.py @@ -0,0 +1,156 @@ +"""The embedding store: exactness, growth across questions, and mixed models. + +Exactness is the point of these. The index this project used to depend on returns +the wrong neighbour on a current numpy (see scripts/bench_search.py and the +README), so "the search is exact" is now a property with a test behind it rather +than an assumption. +""" + +import numpy as np +import pytest +from conftest import normal_script, read_events + +from store import EmbeddingStore + + +def unit(rng, dim=32): + v = rng.standard_normal(dim).astype(np.float32) + return v / np.linalg.norm(v) + + +@pytest.fixture +def store(tmp_path): + s = EmbeddingStore(str(tmp_path / "s.db")) + yield s + s.close() + + +class TestExactness: + def test_a_vector_is_its_own_nearest_neighbour(self, store): + """The failure mode that made the old index useless.""" + rng = np.random.default_rng(0) + vectors = [unit(rng) for _ in range(50)] + for i, v in enumerate(vectors): + store.add(f"text {i}", v, model="m") + + for i in (0, 7, 23, 49): + hits = store.find_similar(vectors[i], top_k=1, model="m") + assert hits[0]["text"] == f"text {i}" + assert hits[0]["similarity"] == pytest.approx(1.0, abs=1e-5) + + def test_ranking_matches_a_full_brute_force_sort(self, store): + rng = np.random.default_rng(1) + vectors = [unit(rng) for _ in range(200)] + for i, v in enumerate(vectors): + store.add(f"text {i}", v, model="m") + + query = unit(rng) + matrix = np.vstack(vectors) + expected = np.argsort(-(matrix @ query))[:5] + + hits = store.find_similar(query, top_k=5, model="m") + assert [h["text"] for h in hits] == [f"text {i}" for i in expected] + # Scores must be monotonically decreasing. + assert all(a["similarity"] >= b["similarity"] for a, b in zip(hits, hits[1:], strict=False)) + + def test_requesting_more_than_exists_is_not_an_error(self, store): + rng = np.random.default_rng(2) + store.add("only one", unit(rng), model="m") + assert len(store.find_similar(unit(rng), top_k=10, model="m")) == 1 + + def test_excluded_ids_never_appear(self, store): + rng = np.random.default_rng(3) + target = unit(rng) + row_id = store.add("the query itself", target, model="m") + for i in range(20): + store.add(f"other {i}", unit(rng), model="m") + + hits = store.find_similar(target, top_k=5, model="m", exclude_ids={row_id}) + assert all(h["id"] != row_id for h in hits) + assert len(hits) == 5 + + def test_excluding_everything_returns_nothing(self, store): + rng = np.random.default_rng(4) + ids = {store.add(f"t{i}", unit(rng), model="m") for i in range(3)} + assert store.find_similar(unit(rng), model="m", exclude_ids=ids) == [] + + def test_empty_store(self, store): + assert store.find_similar(np.ones(32, dtype=np.float32), model="m") == [] + + +class TestCacheInvalidation: + def test_a_new_row_is_visible_to_the_next_search(self, store): + """The in-memory matrix must not outlive a write.""" + rng = np.random.default_rng(5) + store.add("first", unit(rng), model="m") + target = unit(rng) + store.find_similar(target, model="m") # warms the cache + + store.add("second", target, model="m") + hits = store.find_similar(target, top_k=1, model="m") + assert hits[0]["text"] == "second" + + def test_clear_empties_the_cache_too(self, store): + rng = np.random.default_rng(6) + v = unit(rng) + store.add("gone", v, model="m") + store.find_similar(v, model="m") + store.clear() + assert store.find_similar(v, model="m") == [] + assert store.count() == 0 + + +class TestMixedModels: + def test_dimensions_never_mix(self, store): + rng = np.random.default_rng(7) + small = unit(rng, 32) + store.add("384-ish row", small, model="small") + store.add("legacy 4096 row", np.ones(4096, dtype=np.float32), model="legacy") + + hits = store.find_similar(small, model="small") + assert [h["text"] for h in hits] == ["384-ish row"] + + def test_same_dimension_different_model_is_kept_apart(self, store): + rng = np.random.default_rng(8) + v = unit(rng, 32) + store.add("from model A", v, model="A") + store.add("from model B", v, model="B") + + assert [h["text"] for h in store.find_similar(v, model="A")] == ["from model A"] + assert [h["text"] for h in store.find_similar(v, model="B")] == ["from model B"] + + +class TestGrowthAcrossQuestions: + """The store accumulates now; it used to be wiped at the start of each request.""" + + def test_a_later_question_can_see_an_earlier_one(self, flask_client): + client, _ = flask_client(normal_script() + normal_script()) + + read_events(client.get("/query?query=What+is+the+capital+of+France")) + events = read_events(client.get("/query?query=Tell+me+about+French+cities")) + + similar = [e for e in events if e["type"] == "similar"][0] + assert similar["store_size"] > 6, "the second run must still see the first run's rows" + assert similar["items"] + + def test_store_size_grows_monotonically(self, flask_client): + client, _ = flask_client(normal_script() * 3) + + sizes = [] + for i in range(3): + events = read_events(client.get(f"/query?query=question+{i}")) + sizes.append([e for e in events if e["type"] == "similar"][0]["store_size"]) + + assert sizes == sorted(sizes) and len(set(sizes)) == 3 + + def test_hundreds_of_rows_stay_fast_and_exact(self, store): + """The scale actually in question: hundreds of rows across many questions.""" + rng = np.random.default_rng(9) + vectors = [unit(rng, 384) for _ in range(500)] + for i, v in enumerate(vectors): + store.add(f"row {i}", v, model="m") + + assert store.count() == 500 + hits = store.find_similar(vectors[321], top_k=3, model="m") + assert hits[0]["text"] == "row 321" + assert hits[0]["similarity"] == pytest.approx(1.0, abs=1e-5) From 3c980b015d81f53f9240416c1e5b741b195b5f69 Mon Sep 17 00:00:00 2001 From: Morten Punnerud-Engelstad Date: Mon, 10 Aug 2026 12:50:48 +0200 Subject: [PATCH 3/6] Read embeddings from inside a model, not just from an endpoint An embedding API hands back one pooled vector from the top of the stack. layers.py taps a chosen point inside a local model instead, which also makes a model with no embedding endpoint usable, since a forward pass is all that is required: LKG_EMBED_BACKEND=hf LKG_HF_MODEL=HuggingFaceTB/SmolLM2-135M \ LKG_HF_LAYER=blocks.-1 python app.py Verified end to end: the graph is built from layer -1 inside SmolLM2-135M (576 dimensions) with llama3.2:3b doing the reasoning. Layers are addressed structurally rather than by a per-architecture path. blocks.0, blocks.12, blocks.-1, blocks.-1.mlp, or any explicit dotted path. The block stack is found by taking the longest nn.ModuleList whose children share one class, which covers Llama, Qwen, Mistral, Gemma, Phi, GPT-2, GPT-NeoX, Falcon, BERT, ViT and CLIP with no lookup table. Three things here are load-bearing and are the usual sources of a silently wrong layer comparison: - Hooks that pool inside the hook, not output_hidden_states=True. The flag materialises (n_layers+1, batch, tokens, hidden) before pooling, which is several gigabytes on an 8B model at a realistic batch and context. - Intermediate blocks emit the raw residual stream while the model's own last hidden state has already been through the final norm. That norm is applied to every layer, otherwise two layers are compared across two different spaces and the result looks plausible rather than broken. - Last-token pooling has to skip padding, on either side. Pooling the pad instead of the last real token is the classic version of this bug. make sweep reports how well each layer separates one topic from another, over the same four-topic corpus used for the embedding-model table. On SmolLM2-135M separation grows roughly seventyfold with depth, from 0.002 at blocks.0 to 0.148 at blocks.29. The first block is the control: it sees each token before any context is mixed in, so it cannot tell the topics apart, and its near-zero score is what says the deeper numbers are real rather than an artefact of the metric. All four claims are pinned in check_numbers. 24 new tests. The addressing and pooling logic runs against synthetic modules so it needs no download; the tests that need real weights are marked hf. One of them asserts that two different layers do not return the same answer, because if they did the hook would not be tapping where it claims. --- Makefile | 8 + README.md | 50 +++++- app.py | 26 ++- data/claims/layer_sweep.json | 44 +++++ layers.py | 305 +++++++++++++++++++++++++++++++++++ pyproject.toml | 1 + scripts/__init__.py | 0 scripts/check_numbers.py | 32 ++++ scripts/layer_sweep.py | 118 ++++++++++++++ tests/test_layers.py | 249 ++++++++++++++++++++++++++++ 10 files changed, 827 insertions(+), 6 deletions(-) create mode 100644 data/claims/layer_sweep.json create mode 100644 layers.py create mode 100644 scripts/__init__.py create mode 100644 scripts/layer_sweep.py create mode 100644 tests/test_layers.py diff --git a/Makefile b/Makefile index 90f601f..c490f32 100644 --- a/Makefile +++ b/Makefile @@ -26,6 +26,14 @@ test-ollama: measure: $(PY) scripts/measure.py +# How well does each layer of a local model separate topics? Needs torch. +sweep: + $(PY) scripts/layer_sweep.py + +# Exact scan versus an approximate index, at several store sizes. +bench: + $(PY) scripts/bench_search.py + check-numbers: $(PY) scripts/check_numbers.py diff --git a/README.md b/README.md index 26abdc2..51c905e 100644 --- a/README.md +++ b/README.md @@ -62,6 +62,52 @@ the *drawing* even though it is the weaker retriever. Both work. Any embedding size works — nothing in the code assumes a dimension. +## Embeddings from inside a model + +An embedding endpoint gives you one pooled vector from the top of the stack. You can instead +tap a chosen point *inside* a local model — which also makes models with no embedding API +usable, since a forward pass is all that is required: + +```bash +pip install torch transformers + +LKG_EMBED_BACKEND=hf \ +LKG_HF_MODEL=HuggingFaceTB/SmolLM2-135M \ +LKG_HF_LAYER=blocks.-1 \ +python app.py +``` + +Layers are addressed structurally, not by a per-architecture path: `blocks.0`, `blocks.12`, +`blocks.-1`, `blocks.-1.mlp`, or any explicit dotted module path. The block stack is found by +looking for the longest `nn.ModuleList` whose children share one class, which covers Llama, +Qwen, Mistral, Gemma, Phi, GPT-2, GPT-NeoX, Falcon, BERT, ViT and CLIP without a lookup table. +`LKG_HF_POOLING` selects `last` (default, and the only architecturally correct choice for a +decoder under a causal mask), `mean`, or `cls`. + +### Does the depth matter? + +`make sweep` runs the same four-topic corpus through several layers and reports how far each +one puts steps of the same topic from steps of a different topic. On `SmolLM2-135M`: + +| Layer | Within topic | Across topics | Separation | +|---|---|---|---| +| `blocks.0` | 0.998 | 0.996 | **0.002** | +| `blocks.7` | 0.895 | 0.834 | 0.062 | +| `blocks.15` | 0.914 | 0.863 | 0.051 | +| `blocks.22` | 0.893 | 0.780 | 0.113 | +| `blocks.29` | 0.926 | 0.779 | **0.148** | + +The first block cannot tell the topics apart at all — it sees each token before any context +has been mixed in — and that near-zero is the control that says the separation deeper in is +real rather than an artefact of the metric. Separation grows roughly seventyfold with depth. + +Two details that quietly ruin a layer comparison if you skip them, and which this handles: +intermediate blocks emit the raw residual stream while the model's own last hidden state has +already been through the final norm, so that norm is applied to every layer to put them in one +space; and the states are captured with forward hooks that pool inside the hook rather than +with `output_hidden_states=True`, which would materialise every layer at once — several +gigabytes on an 8B model before any pooling happens. + ## Development ```bash @@ -69,7 +115,9 @@ make venv # uv-based environment, including a headless browser for the make all # ruff + pytest + the documented numbers, in one gate make test # unit, stream and browser tests; no model needed make test-ollama # the tests that need a live Ollama -make measure # re-measure the table above into data/claims/ +make measure # re-measure the embedding-model table into data/claims/ +make sweep # re-measure the per-layer separation table (needs torch) +make bench # exact scan vs an approximate index, at several store sizes ``` `make all` runs `scripts/check_numbers.py`, which resolves every measurable claim in this diff --git a/app.py b/app.py index ad52cd8..75bc757 100644 --- a/app.py +++ b/app.py @@ -30,11 +30,27 @@ def _sse(event: dict) -> str: def make_backends() -> tuple: - """Build the default backends. Tests replace this.""" - return ( - backends.OllamaChat(backends.DEFAULT_CHAT_MODEL), - backends.OllamaEmbedding(backends.DEFAULT_EMBED_MODEL), - ) + """Build the default backends. Tests replace this. + + Set LKG_EMBED_BACKEND=hf to embed from inside a local model instead of from an + embedding endpoint, which is what makes a model with no embedding API usable and + lets you point at a specific depth: + + LKG_EMBED_BACKEND=hf LKG_HF_MODEL=HuggingFaceTB/SmolLM2-135M \ + LKG_HF_LAYER=blocks.-1 python app.py + """ + chat = backends.OllamaChat(backends.DEFAULT_CHAT_MODEL) + + if os.environ.get("LKG_EMBED_BACKEND") == "hf": + from layers import HiddenStateEmbedding + + return chat, HiddenStateEmbedding( + os.environ.get("LKG_HF_MODEL", "HuggingFaceTB/SmolLM2-135M"), + layer=os.environ.get("LKG_HF_LAYER", "blocks.-1"), + pooling=os.environ.get("LKG_HF_POOLING", "last"), + ) + + return chat, backends.OllamaEmbedding(backends.DEFAULT_EMBED_MODEL) @app.route("/") diff --git a/data/claims/layer_sweep.json b/data/claims/layer_sweep.json new file mode 100644 index 0000000..aa5949b --- /dev/null +++ b/data/claims/layer_sweep.json @@ -0,0 +1,44 @@ +{ + "provenance": "measured", + "measured_at": "2026-08-10T10:46:38+00:00", + "model": "HuggingFaceTB/SmolLM2-135M", + "n_blocks": 30, + "dim": 576, + "pooling": "last", + "final_norm_applied": true, + "layers": { + "blocks.0": { + "within_topic": 0.9976432065169016, + "across_topic": 0.9957032010511115, + "separation": 0.0019400054657900956, + "mean_abs": 0.9961249232292175 + }, + "blocks.7": { + "within_topic": 0.8954060484965642, + "across_topic": 0.8336415079732736, + "separation": 0.06176454052329061, + "mean_abs": 0.8470685482025146 + }, + "blocks.15": { + "within_topic": 0.9141085694233576, + "across_topic": 0.8629755915866958, + "separation": 0.05113297783666182, + "mean_abs": 0.8740914463996887 + }, + "blocks.22": { + "within_topic": 0.8931873053312301, + "across_topic": 0.7799073490831587, + "separation": 0.11327995624807141, + "mean_abs": 0.8045334219932556 + }, + "blocks.29": { + "within_topic": 0.9263378192981084, + "across_topic": 0.7784764518340429, + "separation": 0.14786136746406553, + "mean_abs": 0.8106202483177185 + } + }, + "best_layer": "blocks.29", + "best_separation": 0.14786136746406553, + "first_layer_separation": 0.0019400054657900956 +} diff --git a/layers.py b/layers.py new file mode 100644 index 0000000..dfe4622 --- /dev/null +++ b/layers.py @@ -0,0 +1,305 @@ +"""Read embeddings from inside a model, not just from an embedding endpoint. + +Ollama and every other embedding API hand back one pooled vector from the top of +the stack. This module taps a chosen point *inside* a transformer instead, so the +same application can ask what the reasoning steps look like at layer 4, at layer +16, and at the output -- including for models that expose no embedding endpoint at +all, because a forward pass is all that is required. + +Three things here are load-bearing and are the usual sources of silently wrong +layer comparisons: + +* **Hooks, not ``output_hidden_states=True``.** The flag materialises + ``(n_layers + 1, batch, tokens, hidden)`` before you pool it, which is several + gigabytes on an 8B model at a realistic batch and context. A hook that pools + inside itself and drops the tensor never allocates that. +* **The last layer is normalised and the others are not.** In Hugging Face decoder + models the per-layer hidden states are the raw residual stream, while the final + entry has already been through the model's final norm. Comparing them without + applying that norm yourself compares vectors from two different spaces, and the + result looks plausible rather than broken. +* **Layer addresses are not ``model.model.layers``.** That path is a Llama detail. + The block stack is found structurally instead, which covers Llama, Qwen, Mistral, + Gemma, Phi, GPT-2, GPT-NeoX, Falcon, BERT, ViT and CLIP without a per-architecture + table. + +Requires the optional extras: pip install torch transformers +""" + +from __future__ import annotations + +import weakref +from typing import Any + +import numpy as np + +POOLINGS = ("last", "mean", "cls") + + +def _require_torch(): + try: + import torch + except ImportError as exc: # pragma: no cover - depends on the environment + raise ImportError( + "Reading internal layers needs PyTorch. Install it with:\n" + " pip install torch transformers" + ) from exc + return torch + + +def find_block_stack(model) -> tuple[str, Any]: + """Locate the repeated transformer blocks, structurally. + + Returns ``(name, module_list)`` for the longest ``nn.ModuleList`` whose children + are all instances of one class. That is what a transformer block stack looks + like in every architecture worth supporting, and it needs no per-model table. + """ + torch = _require_torch() + + best: tuple[str, Any] | None = None + for name, module in model.named_modules(): + if not isinstance(module, torch.nn.ModuleList) or len(module) < 2: + continue + kinds = {type(child).__name__ for child in module} + if len(kinds) != 1: + continue + if best is None or len(module) > len(best[1]): + best = (name, module) + + if best is None: + raise ValueError( + "Could not find a repeated block stack in this model. Address a module " + "explicitly instead, for example layer='encoder.layer.6'." + ) + return best + + +def find_final_norm(model): + """The normalisation applied after the last block, if the architecture has one. + + Needed to bring intermediate layers into the same space as the final one. Absent + on some architectures, in which case cross-layer comparison is still possible but + the scales differ and that is worth knowing. + """ + for path in ("model.norm", "transformer.ln_f", "model.final_layernorm", + "gpt_neox.final_layer_norm", "encoder.final_layer_norm", "norm", "ln_f"): + try: + return model.get_submodule(path) + except AttributeError: + continue + return None + + +def resolve_layer(model, address: str): + """Turn a layer address into a module. + + Accepts ``blocks.N`` and ``blocks.-N`` against the detected block stack, an + optional sub-path such as ``blocks.-1.mlp``, or any dotted module path. + """ + if not address.startswith("blocks"): + return model.get_submodule(address) + + stack_name, stack = find_block_stack(model) + parts = address.split(".") + if len(parts) < 2: + raise ValueError(f"Layer address {address!r} needs an index, e.g. 'blocks.-1'") + + try: + index = int(parts[1]) + except ValueError as exc: + raise ValueError(f"Layer address {address!r} has a non-numeric index") from exc + + if not -len(stack) <= index < len(stack): + raise IndexError( + f"Layer {index} is out of range: this model has {len(stack)} blocks " + f"({stack_name}.0 .. {stack_name}.{len(stack) - 1})" + ) + + full = f"{stack_name}.{index % len(stack)}" + if len(parts) > 2: + full = full + "." + ".".join(parts[2:]) + return model.get_submodule(full) + + +def describe_layers(model) -> dict: + """What can be addressed on this model. Useful when picking a layer.""" + stack_name, stack = find_block_stack(model) + return { + "block_stack": stack_name, + "n_blocks": len(stack), + "block_type": type(stack[0]).__name__, + "addresses": [f"blocks.{i}" for i in range(len(stack))], + "sub_modules": [name for name, _ in stack[0].named_children()], + "has_final_norm": find_final_norm(model) is not None, + } + + +def pool(hidden, attention_mask, how: str): + """Reduce ``(batch, tokens, hidden)`` to ``(batch, hidden)``. + + ``last`` is the architecturally correct choice for a decoder-only model: under a + causal mask only the final position has attended to the whole sequence. ``mean`` + often scores better on retrieval benchmarks anyway, so both are offered rather + than one being assumed. + """ + torch = _require_torch() + + if how == "cls": + return hidden[:, 0] + if how == "mean": + mask = attention_mask.unsqueeze(-1).to(hidden.dtype) + return (hidden * mask).sum(1) / mask.sum(1).clamp(min=1e-9) + if how == "last": + # Works for both padding sides. Getting this wrong pools the padding. + left_padded = bool((attention_mask[:, -1].sum() == attention_mask.shape[0]).item()) + if left_padded: + return hidden[:, -1] + index = attention_mask.sum(dim=1) - 1 + return hidden[torch.arange(hidden.size(0), device=hidden.device), index] + raise ValueError(f"Unknown pooling {how!r}, expected one of {POOLINGS}") + + +class HiddenStateEmbedding: + """An ``EmbeddingBackend`` that reads a chosen layer inside a local model. + + >>> probe = HiddenStateEmbedding("HuggingFaceTB/SmolLM2-135M", layer="blocks.8") + >>> probe.embed(["some text"]).shape + (1, 576) + """ + + def __init__( + self, + model_name: str, + *, + layer: str = "blocks.-1", + pooling: str = "last", + apply_final_norm: bool = True, + device: str | None = None, + max_length: int = 512, + batch_size: int = 8, + ) -> None: + torch = _require_torch() + from transformers import AutoModel, AutoTokenizer + + if pooling not in POOLINGS: + raise ValueError(f"Unknown pooling {pooling!r}, expected one of {POOLINGS}") + + self.model_name = model_name + self.layer = layer + self.pooling = pooling + self.max_length = max_length + self.batch_size = batch_size + + self.device = device or ("mps" if torch.backends.mps.is_available() else "cpu") + self.tokenizer = AutoTokenizer.from_pretrained(model_name) + if self.tokenizer.pad_token is None: + self.tokenizer.pad_token = self.tokenizer.eos_token + self.model = AutoModel.from_pretrained(model_name).to(self.device).eval() + + self._module = resolve_layer(self.model, layer) + self._final_norm = find_final_norm(self.model) if apply_final_norm else None + self.applies_final_norm = self._final_norm is not None + self._dim: int | None = None + + @property + def dim(self) -> int: + if self._dim is None: + self._dim = int(self.embed(["dimension probe"]).shape[1]) + return self._dim + + def describe(self) -> dict: + return { + "kind": "hidden-state", + "model": f"{self.model_name}@{self.layer}", + "dim": self.dim, + "layer": self.layer, + "pooling": self.pooling, + "final_norm_applied": self.applies_final_norm, + "device": str(self.device), + } + + def embed(self, texts) -> np.ndarray: + items = [" ".join(str(t).split()) or " " for t in texts] + if not items: + return np.zeros((0, self._dim or 0), dtype=np.float32) + + chunks = [ + self._embed_batch(items[i : i + self.batch_size]) + for i in range(0, len(items), self.batch_size) + ] + matrix = np.vstack(chunks).astype(np.float32) + self._dim = int(matrix.shape[1]) + norms = np.linalg.norm(matrix, axis=1, keepdims=True) + np.divide(matrix, norms, out=matrix, where=norms > 0) + return matrix + + def _embed_batch(self, items: list[str]) -> np.ndarray: + torch = _require_torch() + + batch = self.tokenizer( + items, return_tensors="pt", padding=True, truncation=True, max_length=self.max_length + ).to(self.device) + + captured: dict[str, Any] = {} + # A weak reference keeps the hook from holding this object alive through the + # closure, which is a real leak when probes are created per layer. + self_ref = weakref.ref(self) + + def hook(_module, _args, output): + probe = self_ref() + if probe is None: + return + hidden = output[0] if isinstance(output, tuple) else output + hidden = hidden.detach() + # Intermediate blocks emit the raw residual stream while the model's own + # last hidden state has already been normalised. Applying the final norm + # here is what puts every layer in one comparable space. + if probe._final_norm is not None: + hidden = probe._final_norm(hidden) + captured["pooled"] = pool(hidden, batch["attention_mask"], probe.pooling).float().cpu() + + handle = self._module.register_forward_hook(hook) + try: + with torch.inference_mode(): + self.model(**batch) + finally: + handle.remove() + + if "pooled" not in captured: + raise RuntimeError( + f"The hook on {self.layer!r} never fired. That module is not on this " + "model's forward path; use describe_layers() to see what is." + ) + return captured["pooled"].numpy() + + +class MultiLayerProbe: + """Read several layers in a single forward pass. + + Comparing layers is the whole point, and running the model once per layer costs + N times as much for exactly the same computation. + """ + + def __init__(self, model_name: str, layers: list[str], **kwargs) -> None: + self.model_name = model_name + self.layers = list(layers) + first = HiddenStateEmbedding(model_name, layer=self.layers[0], **kwargs) + self.probes = {self.layers[0]: first} + for layer in self.layers[1:]: + probe = HiddenStateEmbedding.__new__(HiddenStateEmbedding) + probe.__dict__.update(first.__dict__) + probe.layer = layer + probe._module = resolve_layer(first.model, layer) + probe._dim = None + self.probes[layer] = probe + + def embed(self, texts) -> dict[str, np.ndarray]: + return {layer: probe.embed(texts) for layer, probe in self.probes.items()} + + def describe(self) -> dict: + return { + "kind": "multi-layer", + "model": self.model_name, + "layers": self.layers, + "info": describe_layers(self.probes[self.layers[0]].model), + } diff --git a/pyproject.toml b/pyproject.toml index fd10dcd..f383b81 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -2,6 +2,7 @@ testpaths = ["tests"] markers = [ "ollama: needs a running Ollama with the models named in the README", + "hf: needs torch, transformers and a downloadable Hugging Face model", ] filterwarnings = ["error::DeprecationWarning"] diff --git a/scripts/__init__.py b/scripts/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/scripts/check_numbers.py b/scripts/check_numbers.py index a917e96..50522ef 100644 --- a/scripts/check_numbers.py +++ b/scripts/check_numbers.py @@ -33,6 +33,7 @@ CLAIMS = "data/claims/edge_spread.json" SEARCH = "data/claims/search_bench.json" +SWEEP = "data/claims/layer_sweep.json" # (file, extractor, expected, tolerance, label) # @@ -144,6 +145,37 @@ 0.001, "annoy 1.17.3 still fails to return a vector as its own neighbour", ), + ( + SWEEP, + lambda d: 1.0 if d.get("provenance") == "measured" else 0.0, + 1.0, + 0.001, + "layer sweep is measured, not inherited", + ), + ( + SWEEP, + # The first block sees each token before any context has been mixed in, so it + # cannot tell one topic from another. Near-zero here is the control that says + # the separation measured deeper in is real and not an artefact of the metric. + lambda d: float(d["first_layer_separation"]), + 0.0, + 0.02, + "the first block separates topics by almost nothing", + ), + ( + SWEEP, + lambda d: float(d["best_separation"]), + 0.148, + 0.06, + "the deepest block separates topics by about 0.15", + ), + ( + SWEEP, + lambda d: 1.0 if d["best_separation"] > 5 * max(d["first_layer_separation"], 1e-6) else 0.0, + 1.0, + 0.001, + "depth separates topics several times better than the first block", + ), ] diff --git a/scripts/layer_sweep.py b/scripts/layer_sweep.py new file mode 100644 index 0000000..be9a059 --- /dev/null +++ b/scripts/layer_sweep.py @@ -0,0 +1,118 @@ +#!/usr/bin/env python3 +"""How well does each layer of a model separate one topic from another? + +The point of reading inside a model is that "the embedding" is not one thing. This +sweeps a set of layers over the same fixed reasoning-step corpus and reports, per +layer, how far apart it puts steps from the same topic versus steps from different +topics. That separation is the quantity that decides whether a graph drawn from +that layer means anything. + +The corpus is the one in scripts/measure.py: four unrelated topics of six steps +each. Same texts through every layer, so the number describes the layer. + + .venv/bin/python scripts/layer_sweep.py [model] [layer ...] +""" + +from __future__ import annotations + +import json +import pathlib +import statistics +import sys +from datetime import datetime, timezone + +ROOT = pathlib.Path(__file__).resolve().parent.parent +sys.path.insert(0, str(ROOT)) + +import numpy as np # noqa: E402 + +from scripts.measure import TOPICS # noqa: E402 + +DEFAULT_MODEL = "HuggingFaceTB/SmolLM2-135M" + + +def separation(vectors: np.ndarray, labels: list[str]) -> dict: + """Mean within-topic similarity minus mean across-topic similarity. + + A layer that scores near zero is not distinguishing the topics at all, whatever + its absolute similarities look like. + """ + similarity = vectors @ vectors.T + same, different = [], [] + for i in range(len(labels)): + for j in range(i + 1, len(labels)): + (same if labels[i] == labels[j] else different).append(float(similarity[i, j])) + + within = statistics.fmean(same) + across = statistics.fmean(different) + return { + "within_topic": within, + "across_topic": across, + "separation": within - across, + "mean_abs": float(np.abs(similarity[np.triu_indices(len(labels), 1)]).mean()), + } + + +def main() -> int: + model_name = sys.argv[1] if len(sys.argv) > 1 else DEFAULT_MODEL + requested = sys.argv[2:] + + try: + from layers import MultiLayerProbe, describe_layers + except ImportError as exc: + print(exc) + return 1 + + texts, labels = [], [] + for topic, steps in TOPICS.items(): + texts.extend(steps) + labels.extend([topic] * len(steps)) + + if not requested: + from layers import HiddenStateEmbedding + + probe = HiddenStateEmbedding(model_name, layer="blocks.-1") + n = describe_layers(probe.model)["n_blocks"] + # Evenly spaced through the stack, always including the first and the last. + requested = [f"blocks.{i}" for i in sorted({0, n // 4, n // 2, 3 * n // 4, n - 1})] + del probe + + print(f"model={model_name} texts={len(texts)} topics={len(TOPICS)}") + multi = MultiLayerProbe(model_name, requested) + info = describe_layers(multi.probes[requested[0]].model) + print(f"block stack: {info['block_stack']} ({info['n_blocks']} x {info['block_type']}), " + f"final norm applied: {info['has_final_norm']}\n") + + results = {} + print(f"{'layer':>12} {'within':>8} {'across':>8} {'separation':>11}") + for layer, vectors in multi.embed(texts).items(): + stats = separation(vectors, labels) + results[layer] = stats + print(f"{layer:>12} {stats['within_topic']:>8.4f} {stats['across_topic']:>8.4f} " + f"{stats['separation']:>11.4f}") + + best = max(results, key=lambda k: results[k]["separation"]) + print(f"\nbest separation: {best} ({results[best]['separation']:.4f})") + + payload = { + "provenance": "measured", + "measured_at": datetime.now(timezone.utc).isoformat(timespec="seconds"), + "model": model_name, + "n_blocks": info["n_blocks"], + "dim": int(multi.probes[requested[0]].dim), + "pooling": multi.probes[requested[0]].pooling, + "final_norm_applied": info["has_final_norm"], + "layers": results, + "best_layer": best, + "best_separation": results[best]["separation"], + "first_layer_separation": results[requested[0]]["separation"], + } + out = ROOT / "data" / "claims" / "layer_sweep.json" + out.parent.mkdir(parents=True, exist_ok=True) + out.write_text(json.dumps(payload, indent=2) + "\n") + print(f"wrote {out.relative_to(ROOT)}") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/tests/test_layers.py b/tests/test_layers.py new file mode 100644 index 0000000..89df6c6 --- /dev/null +++ b/tests/test_layers.py @@ -0,0 +1,249 @@ +"""Reading embeddings from inside a model. + +The addressing and pooling logic is tested against synthetic modules, so it runs +everywhere with no download. The tests that need real weights are marked ``hf`` and +skipped when torch or the model is unavailable. +""" + +import numpy as np +import pytest + +torch = pytest.importorskip("torch") +nn = torch.nn + +from layers import ( # noqa: E402 + describe_layers, + find_block_stack, + find_final_norm, + pool, + resolve_layer, +) + + +class Block(nn.Module): + def __init__(self, dim=8): + super().__init__() + self.mlp = nn.Linear(dim, dim) + self.attn = nn.Linear(dim, dim) + + def forward(self, x): + return self.mlp(x) + self.attn(x) + + +class OtherBlock(nn.Module): + def __init__(self, dim=8): + super().__init__() + self.proj = nn.Linear(dim, dim) + + def forward(self, x): + return self.proj(x) + + +class ToyModel(nn.Module): + """Shaped like a decoder: an embedding, a block stack, a final norm.""" + + def __init__(self, n_blocks=6, dim=8): + super().__init__() + self.embed_tokens = nn.Embedding(20, dim) + self.layers = nn.ModuleList([Block(dim) for _ in range(n_blocks)]) + self.norm = nn.LayerNorm(dim) + + def forward(self, x): + h = self.embed_tokens(x) + for block in self.layers: + h = block(h) + return self.norm(h) + + +class TestBlockStackDetection: + def test_finds_the_repeated_stack(self): + name, stack = find_block_stack(ToyModel(n_blocks=6)) + assert name == "layers" + assert len(stack) == 6 + + def test_prefers_the_longest_uniform_stack(self): + class TwoStacks(nn.Module): + def __init__(self): + super().__init__() + self.adapters = nn.ModuleList([OtherBlock() for _ in range(3)]) + self.layers = nn.ModuleList([Block() for _ in range(9)]) + + name, stack = find_block_stack(TwoStacks()) + assert name == "layers" and len(stack) == 9 + + def test_ignores_a_mixed_module_list(self): + class Mixed(nn.Module): + def __init__(self): + super().__init__() + # Longer, but heterogeneous: not a block stack. + self.mixed = nn.ModuleList([Block(), OtherBlock(), Block(), OtherBlock()]) + self.layers = nn.ModuleList([Block() for _ in range(3)]) + + name, _ = find_block_stack(Mixed()) + assert name == "layers" + + def test_a_model_with_no_stack_says_so(self): + class Flat(nn.Module): + def __init__(self): + super().__init__() + self.fc = nn.Linear(8, 8) + + with pytest.raises(ValueError, match="block stack"): + find_block_stack(Flat()) + + def test_describe_layers_lists_what_can_be_addressed(self): + info = describe_layers(ToyModel(n_blocks=4)) + assert info["n_blocks"] == 4 + assert info["block_type"] == "Block" + assert info["addresses"] == ["blocks.0", "blocks.1", "blocks.2", "blocks.3"] + assert set(info["sub_modules"]) == {"mlp", "attn"} + assert info["has_final_norm"] is True + + +class TestLayerAddressing: + def test_positive_index(self): + model = ToyModel(n_blocks=6) + assert resolve_layer(model, "blocks.2") is model.layers[2] + + def test_negative_index_counts_from_the_end(self): + model = ToyModel(n_blocks=6) + assert resolve_layer(model, "blocks.-1") is model.layers[5] + assert resolve_layer(model, "blocks.-2") is model.layers[4] + + def test_sub_module_of_a_block(self): + model = ToyModel(n_blocks=6) + assert resolve_layer(model, "blocks.3.mlp") is model.layers[3].mlp + + def test_explicit_dotted_path_bypasses_detection(self): + model = ToyModel(n_blocks=6) + assert resolve_layer(model, "layers.1.attn") is model.layers[1].attn + + def test_out_of_range_reports_the_available_range(self): + with pytest.raises(IndexError, match="6 blocks"): + resolve_layer(ToyModel(n_blocks=6), "blocks.99") + + def test_non_numeric_index_is_rejected(self): + with pytest.raises(ValueError, match="non-numeric"): + resolve_layer(ToyModel(), "blocks.middle") + + def test_final_norm_is_found(self): + assert isinstance(find_final_norm(ToyModel()), nn.LayerNorm) + + +class TestPooling: + def setup_method(self): + # Two sequences of three tokens; the second is padded to length two. + self.hidden = torch.tensor( + [[[1.0, 0.0], [2.0, 0.0], [3.0, 0.0]], + [[4.0, 0.0], [5.0, 0.0], [0.0, 0.0]]] + ) + self.mask = torch.tensor([[1, 1, 1], [1, 1, 0]]) + + def test_last_token_skips_right_padding(self): + """Pooling the pad instead of the last real token is the classic bug.""" + out = pool(self.hidden, self.mask, "last") + assert out[0, 0].item() == pytest.approx(3.0) + assert out[1, 0].item() == pytest.approx(5.0) + + def test_last_token_handles_left_padding(self): + hidden = torch.tensor([[[0.0, 0.0], [1.0, 0.0], [2.0, 0.0]]]) + mask = torch.tensor([[0, 1, 1]]) + assert pool(hidden, mask, "last")[0, 0].item() == pytest.approx(2.0) + + def test_mean_ignores_padding(self): + out = pool(self.hidden, self.mask, "mean") + assert out[0, 0].item() == pytest.approx(2.0) + assert out[1, 0].item() == pytest.approx(4.5) + + def test_cls_takes_the_first_token(self): + out = pool(self.hidden, self.mask, "cls") + assert out[0, 0].item() == pytest.approx(1.0) + + def test_unknown_pooling_is_rejected(self): + with pytest.raises(ValueError, match="Unknown pooling"): + pool(self.hidden, self.mask, "median") + + +HF_MODEL = "HuggingFaceTB/SmolLM2-135M" + + +@pytest.fixture(scope="module") +def probe(): + pytest.importorskip("transformers") + from layers import HiddenStateEmbedding + + try: + return HiddenStateEmbedding(HF_MODEL, layer="blocks.-1") + except Exception as exc: # offline, or the model is not cached + pytest.skip(f"{HF_MODEL} unavailable: {exc}") + + +@pytest.mark.hf +class TestRealModel: + def test_produces_normalised_vectors_of_the_model_width(self, probe): + vectors = probe.embed(["one", "two", "three"]) + assert vectors.shape == (3, probe.dim) + np.testing.assert_allclose(np.linalg.norm(vectors, axis=1), 1.0, atol=1e-5) + + def test_related_text_scores_above_unrelated(self, probe): + v = probe.embed( + ["The capital of France is Paris.", + "Paris is the French capital city.", + "Diesel engine maintenance schedules."] + ) + assert float(v[0] @ v[1]) > float(v[0] @ v[2]) + + def test_the_same_text_always_gives_the_same_vector(self, probe): + a = probe.embed(["deterministic please"]) + b = probe.embed(["deterministic please"]) + np.testing.assert_allclose(a, b, atol=1e-5) + + def test_batching_does_not_shift_a_vector_onto_the_wrong_text(self, probe): + """The invariant that matters at a batch boundary. + + Not elementwise equality: padding changes the shapes the kernels see, so a + batched run differs from a single one in the fourth decimal. What must hold + is that each vector still belongs to its own text -- the failure mode is a + vector sliding onto its neighbour, and that shows up as an off-diagonal + maximum, not as small noise. + """ + texts = [f"sentence number {i}" for i in range(10)] + one_by_one = np.vstack([probe.embed([t]) for t in texts]) + batched = probe.embed(texts) + + agreement = batched @ one_by_one.T + assert np.all(agreement.diagonal() > 0.999), "a vector drifted from its own text" + assert np.array_equal(agreement.argmax(axis=1), np.arange(len(texts))), ( + "a vector matches another text better than its own" + ) + + def test_different_layers_give_different_answers(self, probe): + """If two layers agree exactly, the hook is not tapping where it claims.""" + from layers import MultiLayerProbe + + out = MultiLayerProbe(HF_MODEL, ["blocks.0", "blocks.-1"]).embed(["a probe sentence"]) + assert not np.allclose(out["blocks.0"], out["blocks.-1"], atol=1e-3) + + def test_depth_separates_topics_better_than_the_first_layer(self, probe): + """The whole point of the feature, as an assertion.""" + from layers import MultiLayerProbe + from scripts.layer_sweep import separation + + texts = ["The capital of France is Paris.", "Paris is the French capital.", + "Diesel engines need oil changes.", "Servicing a diesel engine."] + labels = ["fr", "fr", "eng", "eng"] + + out = MultiLayerProbe(HF_MODEL, ["blocks.0", "blocks.-1"]).embed(texts) + first = separation(out["blocks.0"], labels)["separation"] + last = separation(out["blocks.-1"], labels)["separation"] + assert last > first + + def test_a_module_off_the_forward_path_is_reported(self, probe): + from layers import HiddenStateEmbedding + + stray = HiddenStateEmbedding.__new__(HiddenStateEmbedding) + stray.__dict__.update(probe.__dict__) + stray._module = torch.nn.Linear(4, 4) # never called by the model + stray._dim = None + with pytest.raises(RuntimeError, match="never fired"): + stray.embed(["anything"]) From 5fafba519d027606072068e50deee2cc815cf9d2 Mon Sep 17 00:00:00 2001 From: Morten Punnerud-Engelstad Date: Mon, 10 Aug 2026 13:10:25 +0200 Subject: [PATCH 4/6] Package as mpe-lkg on PyPI, and test on Linux, macOS and Windows pip install mpe-lkg mpe-lkg Published: https://pypi.org/project/mpe-lkg/0.2.0/ The modules move to src/mpe_lkg/ so there is a real package to install, with templates and the vendored JS inside the wheel. Root app.py stays as a shim: this has been a clone-and-run-app.py project since 2024 and the README said so for two years, so `python app.py` keeps working from a clone whether or not the package is installed. New entry points: mpe-lkg start the app mpe-lkg doctor say what is missing and the exact ollama pull command, exiting non-zero so it works in a script python -m mpe_lkg from mpe_lkg import create_app, health Pure Python, so the artefact is a single py3-none-any wheel: one file for Linux, macOS and Windows on every supported interpreter, nothing compiled at install time. On the question of writing this in Rust for the Python binding: it would not be easier here. PyO3 turns one universal wheel into a matrix of per-OS, per-architecture, per-ABI wheels needing cibuildwheel, and the codebase is Flask, numpy and networkx -- a rewrite means reimplementing an HTTP server, SSE streaming and a graph library to get identical behaviour. The WASM argument is real but it is a different project: running the embedding model in the browser needs the model itself compiled to WASM, which is not a binding question. Green on three platforms does not require it, as this commit shows. CI is three workflows, one per platform, so each carries its own badge: - Linux, the primary gate: Python 3.10 to 3.13, browser tests, the documented-numbers check, and a fresh-venv install of the built wheel. - macOS and Windows: one Python version each. The platform axis is what these are for; the version axis is already covered on Linux. All three cache pip via setup-python, and cache the Playwright browsers under a key that includes the Playwright version -- roughly 100 MB per job that would otherwise be downloaded every run. Windows is the one most likely to find a real bug here, and the comment in that workflow says why: an open SQLite handle cannot be deleted, path separators differ, and pytest's temporary directories are cleaned up differently. Verified before spending Actions minutes: the suite passes locally on Python 3.10, 3.11, 3.12 and 3.13, the wheel installs into a clean venv and serves its templates, and `pip install mpe-lkg` from PyPI works end to end. pypi.yml publishes on a v* tag, after checking that the tag matches the version in pyproject. --- .github/workflows/ci.yml | 41 ----- .github/workflows/linux.yml | 89 +++++++++ .github/workflows/macos.yml | 58 ++++++ .github/workflows/pypi.yml | 83 +++++++++ .github/workflows/windows.yml | 63 +++++++ .gitignore | 5 + README.md | 82 +++++++-- app.py | 167 ++--------------- pyproject.toml | 58 ++++++ scripts/check_numbers.py | 3 +- scripts/layer_sweep.py | 5 +- scripts/measure.py | 5 +- scripts/screenshot.py | 3 +- src/mpe_lkg/__init__.py | 36 ++++ src/mpe_lkg/__main__.py | 6 + src/mpe_lkg/app.py | 169 ++++++++++++++++++ backends.py => src/mpe_lkg/backends.py | 0 src/mpe_lkg/cli.py | 56 ++++++ graph.py => src/mpe_lkg/graph.py | 0 layers.py => src/mpe_lkg/layers.py | 0 reasoning.py => src/mpe_lkg/reasoning.py | 4 +- .../mpe_lkg/static}/vendor/marked.umd.js | 0 .../mpe_lkg/static}/vendor/purify.min.js | 0 .../mpe_lkg/static}/vendor/vis-network.min.js | 0 store.py => src/mpe_lkg/store.py | 0 .../mpe_lkg/templates}/index.html | 0 tests/conftest.py | 11 +- tests/test_graph_math.py | 2 +- tests/test_layers.py | 10 +- tests/test_ollama.py | 8 +- tests/test_render.py | 4 +- tests/test_store.py | 2 +- tests/test_stream.py | 6 +- 33 files changed, 732 insertions(+), 244 deletions(-) delete mode 100644 .github/workflows/ci.yml create mode 100644 .github/workflows/linux.yml create mode 100644 .github/workflows/macos.yml create mode 100644 .github/workflows/pypi.yml create mode 100644 .github/workflows/windows.yml create mode 100644 src/mpe_lkg/__init__.py create mode 100644 src/mpe_lkg/__main__.py create mode 100644 src/mpe_lkg/app.py rename backends.py => src/mpe_lkg/backends.py (100%) create mode 100644 src/mpe_lkg/cli.py rename graph.py => src/mpe_lkg/graph.py (100%) rename layers.py => src/mpe_lkg/layers.py (100%) rename reasoning.py => src/mpe_lkg/reasoning.py (98%) rename {static => src/mpe_lkg/static}/vendor/marked.umd.js (100%) rename {static => src/mpe_lkg/static}/vendor/purify.min.js (100%) rename {static => src/mpe_lkg/static}/vendor/vis-network.min.js (100%) rename store.py => src/mpe_lkg/store.py (100%) rename {templates => src/mpe_lkg/templates}/index.html (100%) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml deleted file mode 100644 index db71cb3..0000000 --- a/.github/workflows/ci.yml +++ /dev/null @@ -1,41 +0,0 @@ -name: CI - -on: - push: - branches: [main] - pull_request: - -jobs: - test: - runs-on: ubuntu-latest - strategy: - fail-fast: false - matrix: - python-version: ["3.10", "3.12", "3.13"] - - steps: - - uses: actions/checkout@v4 - - - uses: actions/setup-python@v5 - with: - python-version: ${{ matrix.python-version }} - - - name: Install - run: | - python -m pip install --upgrade pip - pip install -r requirements-dev.txt - - - name: Install browser for the render tests - run: python -m playwright install chromium --only-shell --with-deps - - # One gate: lint, tests and the documented numbers pass together. Keeping - # check_numbers as a separate optional target is how a README drifts away - # from what the code actually does. - - name: Lint - run: python -m ruff check . - - - name: Test - run: python -m pytest tests/ -q -m "not ollama" - - - name: Check documented numbers - run: python scripts/check_numbers.py diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml new file mode 100644 index 0000000..6de70a9 --- /dev/null +++ b/.github/workflows/linux.yml @@ -0,0 +1,89 @@ +# Linux — the primary gate, and the cheap one. Full Python matrix, browser tests +# included, plus the documented-numbers check. +# +# The package is pure Python (one py3-none-any wheel), so nothing is compiled here; +# what the three OS workflows actually prove is that the *runtime* behaves the same +# everywhere — path handling, SQLite file locking, threading, and the browser render. +name: Linux + +on: + push: + branches: [main] + pull_request: + workflow_dispatch: + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + # A superseded PR run is wasted runner time. A push to main is not cancelled: + # when CI goes red we want to know which commit did it. + cancel-in-progress: ${{ github.event_name == 'pull_request' }} + +jobs: + test: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + python-version: ["3.10", "3.11", "3.12", "3.13"] + + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + cache: pip + cache-dependency-path: pyproject.toml + + - name: Install + run: | + python -m pip install --upgrade pip + pip install -e ".[dev]" + + # Browsers are ~100 MB and never change between runs; downloading them on + # every job is the single most wasteful thing this workflow could do. + # The key includes the Playwright version, so a bump invalidates it. + - name: Playwright version + id: pw + run: echo "version=$(python -c 'import playwright; print(playwright.__version__)')" >> "$GITHUB_OUTPUT" + + - name: Cache Playwright browsers + id: pw-cache + uses: actions/cache@v4 + with: + path: ~/.cache/ms-playwright + key: pw-${{ runner.os }}-${{ steps.pw.outputs.version }} + + - name: Install browser + # --only-shell is the headless shell alone: about a third of the download, + # and the tests never open a headed browser. + run: python -m playwright install chromium --only-shell --with-deps + if: steps.pw-cache.outputs.cache-hit != 'true' + + - name: Install browser dependencies + # System libraries are not in the cached browser directory. + run: python -m playwright install-deps chromium + if: steps.pw-cache.outputs.cache-hit == 'true' + + - name: Lint + run: python -m ruff check . + + - name: Test + run: python -m pytest tests/ -q -m "not ollama" + + # One gate: lint, tests and the documented numbers pass together. Keeping this + # as a separate optional target is how a README drifts from what the code does. + - name: Check documented numbers + run: python scripts/check_numbers.py + + - name: Build the wheel + run: | + pip install build + python -m build + + - name: Wheel installs and runs clean + run: | + python -m venv /tmp/fresh + /tmp/fresh/bin/pip install --quiet dist/*.whl + /tmp/fresh/bin/mpe-lkg --version + /tmp/fresh/bin/python -c "import mpe_lkg; a = mpe_lkg.create_app(); assert a.test_client().get('/').status_code == 200" diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml new file mode 100644 index 0000000..f9d0df9 --- /dev/null +++ b/.github/workflows/macos.yml @@ -0,0 +1,58 @@ +# macOS — one Python version, full suite including the browser render tests. +# +# A single version on purpose: macOS runners cost ten times a Linux minute, and the +# Python-version axis is already covered on Linux. What this run is actually for is +# the platform axis — arm64, a different SQLite build, a different browser build. +name: macOS + +on: + push: + branches: [main] + pull_request: + workflow_dispatch: + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: ${{ github.event_name == 'pull_request' }} + +jobs: + test: + runs-on: macos-latest + + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-python@v5 + with: + python-version: "3.12" + cache: pip + cache-dependency-path: pyproject.toml + + - name: Install + run: | + python -m pip install --upgrade pip + pip install -e ".[dev]" + + - name: Playwright version + id: pw + run: echo "version=$(python -c 'import playwright; print(playwright.__version__)')" >> "$GITHUB_OUTPUT" + + - name: Cache Playwright browsers + id: pw-cache + uses: actions/cache@v4 + with: + path: ~/Library/Caches/ms-playwright + key: pw-${{ runner.os }}-${{ steps.pw.outputs.version }} + + - name: Install browser + run: python -m playwright install chromium --only-shell + if: steps.pw-cache.outputs.cache-hit != 'true' + + - name: Lint + run: python -m ruff check . + + - name: Test + run: python -m pytest tests/ -q -m "not ollama" + + - name: Check documented numbers + run: python scripts/check_numbers.py diff --git a/.github/workflows/pypi.yml b/.github/workflows/pypi.yml new file mode 100644 index 0000000..4ef60f5 --- /dev/null +++ b/.github/workflows/pypi.yml @@ -0,0 +1,83 @@ +# Publish to PyPI on a version tag. +# +# The package is pure Python, so there is exactly one artefact to build -- a +# py3-none-any wheel that serves Linux, macOS and Windows on every supported +# interpreter. No cibuildwheel matrix, no cross-compilation, nothing to sign per +# platform. +# +# Publishing is gated on the three OS workflows being green for the same commit; +# a tag is not a reason to skip the tests. +name: PyPI + +on: + push: + tags: ["v*"] + workflow_dispatch: + inputs: + dry_run: + description: "Build and check only, do not upload" + type: boolean + default: true + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-python@v5 + with: + python-version: "3.12" + cache: pip + cache-dependency-path: pyproject.toml + + - name: Install + run: | + python -m pip install --upgrade pip + pip install -e ".[dev]" build twine + + - name: Lint + run: python -m ruff check . + + # Browser tests are skipped here: the OS workflows already ran them for this + # commit. What must not be skipped is that the code imports and behaves. + - name: Test + run: python -m pytest tests/ -q -m "not ollama" --ignore=tests/test_render.py + + - name: Build + run: python -m build + + - name: Check metadata + run: python -m twine check dist/* + + - name: The tag must match the version in pyproject + if: startsWith(github.ref, 'refs/tags/v') + run: | + TAG="${GITHUB_REF_NAME#v}" + PKG=$(python -c "import tomllib,pathlib;print(tomllib.loads(pathlib.Path('pyproject.toml').read_text())['project']['version'])") + echo "tag=$TAG pyproject=$PKG" + test "$TAG" = "$PKG" || { echo "::error::tag $TAG does not match version $PKG"; exit 1; } + + - uses: actions/upload-artifact@v4 + with: + name: dist + path: dist/ + + publish: + needs: build + runs-on: ubuntu-latest + if: startsWith(github.ref, 'refs/tags/v') || inputs.dry_run == false + environment: pypi + permissions: + id-token: write # for trusted publishing, once it is configured + steps: + - uses: actions/download-artifact@v4 + with: + name: dist + path: dist/ + + - uses: pypa/gh-action-pypi-publish@release/v1 + with: + # Remove this once Trusted Publishing is set up for the project on PyPI, + # which removes the need to hold a token at all. + password: ${{ secrets.PYPI_API_TOKEN }} diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml new file mode 100644 index 0000000..42a0027 --- /dev/null +++ b/.github/workflows/windows.yml @@ -0,0 +1,63 @@ +# Windows — the platform most likely to find a real bug in this codebase. +# +# Not because of the language, but because of the file semantics: an open SQLite +# handle cannot be deleted on Windows, path separators differ, and the temporary +# directories pytest hands out are cleaned up differently. Those are exactly the +# places a store-backed web app breaks. +name: Windows + +on: + push: + branches: [main] + pull_request: + workflow_dispatch: + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: ${{ github.event_name == 'pull_request' }} + +jobs: + test: + runs-on: windows-latest + + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-python@v5 + with: + python-version: "3.12" + cache: pip + cache-dependency-path: pyproject.toml + + - name: Install + run: | + python -m pip install --upgrade pip + pip install -e ".[dev]" + + - name: Playwright version + id: pw + shell: bash + run: echo "version=$(python -c 'import playwright; print(playwright.__version__)')" >> "$GITHUB_OUTPUT" + + - name: Cache Playwright browsers + id: pw-cache + uses: actions/cache@v4 + with: + path: ~\AppData\Local\ms-playwright + key: pw-${{ runner.os }}-${{ steps.pw.outputs.version }} + + - name: Install browser + run: python -m playwright install chromium --only-shell + if: steps.pw-cache.outputs.cache-hit != 'true' + + - name: Lint + run: python -m ruff check . + + - name: Test + run: python -m pytest tests/ -q -m "not ollama" + + - name: Check documented numbers + run: python scripts/check_numbers.py + + - name: Console script works + run: mpe-lkg --version diff --git a/.gitignore b/.gitignore index ae53cc3..296c3a0 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,8 @@ embeddings.ann # what was measured, and scripts/check_numbers.py verifies the README against them. .DS_Store + +# Build artefacts +dist/ +build/ +*.egg-info/ diff --git a/README.md b/README.md index 51c905e..1cd804b 100644 --- a/README.md +++ b/README.md @@ -1,34 +1,70 @@ # Local Knowledge Graph +[![Linux](https://github.com/punnerud/Local_Knowledge_Graph/actions/workflows/linux.yml/badge.svg?branch=main)](https://github.com/punnerud/Local_Knowledge_Graph/actions/workflows/linux.yml) +[![macOS](https://github.com/punnerud/Local_Knowledge_Graph/actions/workflows/macos.yml/badge.svg?branch=main)](https://github.com/punnerud/Local_Knowledge_Graph/actions/workflows/macos.yml) +[![Windows](https://github.com/punnerud/Local_Knowledge_Graph/actions/workflows/windows.yml/badge.svg?branch=main)](https://github.com/punnerud/Local_Knowledge_Graph/actions/workflows/windows.yml) +[![PyPI](https://img.shields.io/pypi/v/mpe-lkg.svg)](https://pypi.org/project/mpe-lkg/) +[![Python](https://img.shields.io/pypi/pyversions/mpe-lkg.svg)](https://pypi.org/project/mpe-lkg/) + ![Example](example.png) Ask a local Llama model a question, watch it reason step by step, and see the steps drawn as a knowledge graph where the edges are the semantic similarity between them. -## Requirements +Everything runs on your machine. Nothing is uploaded anywhere. -- Python 3.10 or newer -- [Ollama](https://ollama.com) running locally -- One chat model and, ideally, one embedding model +## Install ```bash -ollama pull llama3.2:3b # or llama3.1:8b, or any chat model you already have -ollama pull nomic-embed-text # optional but recommended, see "Which embedding model" below +pip install mpe-lkg +mpe-lkg ``` -## Installation +Then open . + +`mpe-lkg doctor` reports whether Ollama is reachable, which models are installed, and the exact +`ollama pull` command for anything missing. It exits non-zero when something is wrong, so it +works in a script. + +
    +Install from source instead ```bash git clone https://github.com/punnerud/Local_Knowledge_Graph cd Local_Knowledge_Graph -python3 -m venv .venv && .venv/bin/pip install -r requirements.txt -.venv/bin/python app.py +python3 -m venv .venv +.venv/bin/pip install -e . +.venv/bin/mpe-lkg ``` -Then open . +`python app.py` still works from a clone as it always has — it is a shim over the same code. + +
    + +
    +Use it from Python + +```python +from mpe_lkg import create_app, health + +print(health()) # {'ok': True, 'models': [...], ...} +create_app().run(port=5100) +``` -If the app cannot find what it needs it says so on startup and at -, naming the exact `ollama pull` command that fixes it. +
    + +### You also need Ollama + +[Ollama](https://ollama.com) running locally, with one chat model and, ideally, one embedding +model: + +```bash +ollama pull llama3.2:3b # or llama3.1:8b, or any chat model you already have +ollama pull nomic-embed-text # optional but recommended, see "Which embedding model" below +``` + +Python 3.10 or newer. The wheel is `py3-none-any`, so there is nothing to compile and the same +artefact serves Linux, macOS and Windows — all three are tested on every push. ## Configuration @@ -74,7 +110,7 @@ pip install torch transformers LKG_EMBED_BACKEND=hf \ LKG_HF_MODEL=HuggingFaceTB/SmolLM2-135M \ LKG_HF_LAYER=blocks.-1 \ -python app.py +mpe-lkg ``` Layers are addressed structurally, not by a per-architecture path: `blocks.0`, `blocks.12`, @@ -148,11 +184,12 @@ browser. Both are bounded now, and the stream sends a heartbeat while the model | File | Responsibility | |---|---| -| `app.py` | Flask routes and server-sent-event framing | -| `backends.py` | Chat and embedding backends, model discovery, health checks | -| `reasoning.py` | The step-by-step loop | -| `graph.py` | Similarity, graph construction, strongest path | -| `store.py` | SQLite storage and exact nearest-neighbour search | +| `src/mpe_lkg/app.py` | Flask routes and server-sent-event framing | +| `src/mpe_lkg/backends.py` | Chat and embedding backends, model discovery, health checks | +| `src/mpe_lkg/reasoning.py` | The step-by-step loop | +| `src/mpe_lkg/graph.py` | Similarity, graph construction, strongest path | +| `src/mpe_lkg/store.py` | SQLite storage and exact nearest-neighbour search | +| `src/mpe_lkg/layers.py` | Embeddings read from inside a model | The strongest path maximises the product of the similarities along it, which is the same as minimising a sum of `-log(similarity)`. Those costs are non-negative, so Dijkstra gives the @@ -194,3 +231,12 @@ sort. If the store ever does grow past a few hundred thousand vectors, the argument that changes first is memory, not speed — 100 000 × 768 × 4 bytes is about 300 MB held in RAM — and the answer then is a memory-mapped index, not a faster query. + +## Licence + +MIT. + +--- + +Published to PyPI as `mpe-lkg` — **M**orten **P**unnerud-**E**ngelstad **L**ocal +**K**nowledge **G**raph. diff --git a/app.py b/app.py index 75bc757..ad660d6 100644 --- a/app.py +++ b/app.py @@ -1,164 +1,17 @@ -"""Local Knowledge Graph -- Flask entry point. +#!/usr/bin/env python3 +"""Compatibility shim: `python app.py` still works after the move to src/mpe_lkg. -Thin by design: routing, server-sent-event framing, and process configuration. The -model backends live in ``backends.py``, the graph maths in ``graph.py``, the storage -in ``store.py``, and the reasoning loop in ``reasoning.py``. +The project has been a clone-and-run-app.py app since 2024 and the README said so +for two years, so that has to keep working whether or not the package is installed. +Everything real lives in src/mpe_lkg/. """ -from __future__ import annotations +import pathlib +import sys -import json -import os -import queue -import threading - -from flask import Flask, Response, jsonify, render_template, request - -import backends -from reasoning import reason -from store import EmbeddingStore - -app = Flask(__name__) - -DB_PATH = os.environ.get("LKG_DB", "embeddings.db") -# How long to wait for the next event before telling the browser we are still alive. -HEARTBEAT_SECONDS = float(os.environ.get("LKG_HEARTBEAT", "5")) - - -def _sse(event: dict) -> str: - return f"data: {json.dumps(event)}\n\n" - - -def make_backends() -> tuple: - """Build the default backends. Tests replace this. - - Set LKG_EMBED_BACKEND=hf to embed from inside a local model instead of from an - embedding endpoint, which is what makes a model with no embedding API usable and - lets you point at a specific depth: - - LKG_EMBED_BACKEND=hf LKG_HF_MODEL=HuggingFaceTB/SmolLM2-135M \ - LKG_HF_LAYER=blocks.-1 python app.py - """ - chat = backends.OllamaChat(backends.DEFAULT_CHAT_MODEL) - - if os.environ.get("LKG_EMBED_BACKEND") == "hf": - from layers import HiddenStateEmbedding - - return chat, HiddenStateEmbedding( - os.environ.get("LKG_HF_MODEL", "HuggingFaceTB/SmolLM2-135M"), - layer=os.environ.get("LKG_HF_LAYER", "blocks.-1"), - pooling=os.environ.get("LKG_HF_POOLING", "last"), - ) - - return chat, backends.OllamaEmbedding(backends.DEFAULT_EMBED_MODEL) - - -@app.route("/") -def index(): - return render_template("index.html") - - -@app.route("/health") -def health(): - """Why nothing is happening, in terms a user can act on.""" - return jsonify(backends.health(backends.DEFAULT_BASE_URL)) - - -@app.route("/query", methods=["GET", "POST"]) -def query(): - if request.method == "POST": - user_query = (request.json or {}).get("query", "") - else: - user_query = request.args.get("query", "") - user_query = user_query.strip() - - if not user_query: - return jsonify({"error": "No query provided"}), 400 - - chat, embedder = app.config.get("BACKENDS_FACTORY", make_backends)() - - def generate(): - """Stream events, and keep talking even while the model is thinking. - - The reasoning loop runs on a worker thread and hands events over a queue, so - this generator can emit a heartbeat during the long silence before a slow - model produces its first token. Without it a browser sees an open connection - and no data, which is indistinguishable from the app being broken. - """ - store = EmbeddingStore(app.config.get("DB_PATH", DB_PATH)) - events: queue.Queue = queue.Queue() - sentinel = object() - - def worker(): - try: - # The store deliberately accumulates across questions. It used to be - # wiped at the start of every request, which made "Related Questions - # and Answers" structurally unable to show anything but the current - # run's own steps. Set LKG_RESET_DB=1 to go back to a clean slate. - if os.environ.get("LKG_RESET_DB") == "1": - store.clear() - query_vector = embedder.embed([user_query])[0] - query_id = store.add( - user_query, - query_vector, - is_question=True, - model=embedder.describe().get("model", ""), - ) - for event in reason(user_query, chat=chat, embedder=embedder, store=store): - events.put(event) - if event["type"] == "error": - return - similar = store.find_similar( - query_vector, - top_k=5, - model=embedder.describe().get("model", ""), - exclude_ids={query_id}, - ) - events.put({"type": "similar", "items": similar, "store_size": store.count()}) - except backends.BackendError as exc: - events.put({"type": "error", "message": str(exc), "hint": exc.hint}) - except Exception as exc: # noqa: BLE001 - events.put({"type": "error", "message": f"{type(exc).__name__}: {exc}", "hint": ""}) - finally: - events.put(sentinel) - - thread = threading.Thread(target=worker, daemon=True) - thread.start() - - try: - while True: - try: - event = events.get(timeout=HEARTBEAT_SECONDS) - except queue.Empty: - yield ": heartbeat\n\n" - continue - if event is sentinel: - break - yield _sse(event) - yield _sse({"type": "done_stream"}) - finally: - thread.join(timeout=1.0) - store.close() - - return Response( - generate(), - mimetype="text/event-stream", - headers={"Cache-Control": "no-cache", "X-Accel-Buffering": "no"}, - ) +sys.path.insert(0, str(pathlib.Path(__file__).resolve().parent / "src")) +from mpe_lkg.app import app, run # noqa: E402,F401 (re-exported for old imports) if __name__ == "__main__": - status = backends.health(backends.DEFAULT_BASE_URL) - if not status["ok"]: - print(f"\n {status['problem']}\n {status['hint']}\n") - else: - print(f"\n Ollama at {status['base_url']} — models: {', '.join(status['models'])}\n") - - # Bound to localhost with the debugger off by default. The previous default of - # debug=True on 0.0.0.0 exposed the Werkzeug console to the whole network. - app.run( - host=os.environ.get("LKG_HOST", "127.0.0.1"), - port=int(os.environ.get("LKG_PORT", "5100")), - debug=os.environ.get("LKG_DEBUG", "") == "1", - threaded=True, - ) + run() diff --git a/pyproject.toml b/pyproject.toml index f383b81..aae9741 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,8 +1,65 @@ +[build-system] +requires = ["hatchling"] +build-backend = "hatchling.build" + +[project] +name = "mpe-lkg" +version = "0.2.0" +description = "Local Knowledge Graph: a local LLM reasons step by step, and the steps become a graph." +readme = "README.md" +requires-python = ">=3.10" +license = { text = "MIT" } +authors = [{ name = "Morten Punnerud-Engelstad" }] +keywords = ["llm", "ollama", "knowledge-graph", "embeddings", "reasoning", "visualization"] +classifiers = [ + "Development Status :: 4 - Beta", + "Framework :: Flask", + "Intended Audience :: Science/Research", + "License :: OSI Approved :: MIT License", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Topic :: Scientific/Engineering :: Artificial Intelligence", + "Topic :: Scientific/Engineering :: Visualization", +] + +# Pure Python, so the wheel is py3-none-any: one artefact for Linux, macOS and +# Windows, with nothing to compile at install time. +dependencies = [ + "Flask>=3.0", + "numpy>=1.24", + "networkx>=3.0", + "requests>=2.28", +] + +[project.optional-dependencies] +# Reading embeddings from inside a model. Heavy, and genuinely optional. +layers = ["torch>=2.1", "transformers>=4.44"] +dev = ["pytest>=8.0", "playwright>=1.48", "ruff>=0.6"] + +[project.urls] +Homepage = "https://github.com/punnerud/Local_Knowledge_Graph" +Issues = "https://github.com/punnerud/Local_Knowledge_Graph/issues" + +[project.scripts] +mpe-lkg = "mpe_lkg.cli:main" + +[tool.hatch.build.targets.wheel] +packages = ["src/mpe_lkg"] + +[tool.hatch.build.targets.sdist] +include = ["src/mpe_lkg", "tests", "scripts", "README.md", "Makefile", "pyproject.toml"] + [tool.pytest.ini_options] testpaths = ["tests"] +pythonpath = ["src"] markers = [ "ollama: needs a running Ollama with the models named in the README", "hf: needs torch, transformers and a downloadable Hugging Face model", + "browser: needs a Playwright browser", ] filterwarnings = ["error::DeprecationWarning"] @@ -16,3 +73,4 @@ ignore = ["E501"] [tool.ruff.lint.per-file-ignores] "tests/*" = ["E402"] +"app.py" = ["E402"] diff --git a/scripts/check_numbers.py b/scripts/check_numbers.py index 50522ef..2296129 100644 --- a/scripts/check_numbers.py +++ b/scripts/check_numbers.py @@ -25,11 +25,12 @@ import sys ROOT = pathlib.Path(__file__).resolve().parent.parent +sys.path.insert(0, str(ROOT / "src")) sys.path.insert(0, str(ROOT)) import numpy as np # noqa: E402 -from graph import cosine_similarity, strongest_path, top_similarities # noqa: E402 +from mpe_lkg.graph import cosine_similarity, strongest_path, top_similarities # noqa: E402 CLAIMS = "data/claims/edge_spread.json" SEARCH = "data/claims/search_bench.json" diff --git a/scripts/layer_sweep.py b/scripts/layer_sweep.py index be9a059..abbf26d 100644 --- a/scripts/layer_sweep.py +++ b/scripts/layer_sweep.py @@ -22,6 +22,7 @@ from datetime import datetime, timezone ROOT = pathlib.Path(__file__).resolve().parent.parent +sys.path.insert(0, str(ROOT / "src")) sys.path.insert(0, str(ROOT)) import numpy as np # noqa: E402 @@ -58,7 +59,7 @@ def main() -> int: requested = sys.argv[2:] try: - from layers import MultiLayerProbe, describe_layers + from mpe_lkg.layers import MultiLayerProbe, describe_layers except ImportError as exc: print(exc) return 1 @@ -69,7 +70,7 @@ def main() -> int: labels.extend([topic] * len(steps)) if not requested: - from layers import HiddenStateEmbedding + from mpe_lkg.layers import HiddenStateEmbedding probe = HiddenStateEmbedding(model_name, layer="blocks.-1") n = describe_layers(probe.model)["n_blocks"] diff --git a/scripts/measure.py b/scripts/measure.py index 60eb8ac..abf6b5f 100644 --- a/scripts/measure.py +++ b/scripts/measure.py @@ -24,10 +24,11 @@ from datetime import datetime, timezone ROOT = pathlib.Path(__file__).resolve().parent.parent +sys.path.insert(0, str(ROOT / "src")) sys.path.insert(0, str(ROOT)) -import backends # noqa: E402 -from graph import build_graph, edge_weight_spread # noqa: E402 +from mpe_lkg import backends # noqa: E402 +from mpe_lkg.graph import build_graph, edge_weight_spread # noqa: E402 # Four unrelated topics, each a plausible chain of reasoning steps. TOPICS = { diff --git a/scripts/screenshot.py b/scripts/screenshot.py index 3e1b82e..867434e 100644 --- a/scripts/screenshot.py +++ b/scripts/screenshot.py @@ -15,12 +15,13 @@ import threading ROOT = pathlib.Path(__file__).resolve().parent.parent +sys.path.insert(0, str(ROOT / "src")) sys.path.insert(0, str(ROOT)) from playwright.sync_api import sync_playwright # noqa: E402 from werkzeug.serving import make_server # noqa: E402 -import app as app_module # noqa: E402 +import mpe_lkg.app as app_module # noqa: E402 def free_port() -> int: diff --git a/src/mpe_lkg/__init__.py b/src/mpe_lkg/__init__.py new file mode 100644 index 0000000..e583a15 --- /dev/null +++ b/src/mpe_lkg/__init__.py @@ -0,0 +1,36 @@ +"""Local Knowledge Graph — a local LLM reasons step by step, and the steps become a graph. + + pip install mpe-lkg + mpe-lkg + +Or from Python: + + from mpe_lkg import create_app + create_app().run(port=5100) +""" + +from __future__ import annotations + +__version__ = "0.2.0" + +__all__ = ["__version__", "create_app", "main", "health"] + + +def create_app(): + """The Flask application. Imported lazily so `import mpe_lkg` stays cheap.""" + from .app import app + + return app + + +def main(argv: list[str] | None = None) -> int: + from .cli import main as _main + + return _main(argv) + + +def health(base_url: str | None = None) -> dict: + """Is Ollama reachable, and does it have what this needs?""" + from . import backends + + return backends.health(base_url or backends.DEFAULT_BASE_URL) diff --git a/src/mpe_lkg/__main__.py b/src/mpe_lkg/__main__.py new file mode 100644 index 0000000..41c9497 --- /dev/null +++ b/src/mpe_lkg/__main__.py @@ -0,0 +1,6 @@ +"""``python -m mpe_lkg``.""" + +from .cli import main + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/src/mpe_lkg/app.py b/src/mpe_lkg/app.py new file mode 100644 index 0000000..bf10860 --- /dev/null +++ b/src/mpe_lkg/app.py @@ -0,0 +1,169 @@ +"""Local Knowledge Graph -- Flask entry point. + +Thin by design: routing, server-sent-event framing, and process configuration. The +model backends live in ``backends.py``, the graph maths in ``graph.py``, the storage +in ``store.py``, and the reasoning loop in ``reasoning.py``. +""" + +from __future__ import annotations + +import json +import os +import queue +import threading + +from flask import Flask, Response, jsonify, render_template, request + +from . import backends +from .reasoning import reason +from .store import EmbeddingStore + +app = Flask(__name__) + +DB_PATH = os.environ.get("LKG_DB", "embeddings.db") +# How long to wait for the next event before telling the browser we are still alive. +HEARTBEAT_SECONDS = float(os.environ.get("LKG_HEARTBEAT", "5")) + + +def _sse(event: dict) -> str: + return f"data: {json.dumps(event)}\n\n" + + +def make_backends() -> tuple: + """Build the default backends. Tests replace this. + + Set LKG_EMBED_BACKEND=hf to embed from inside a local model instead of from an + embedding endpoint, which is what makes a model with no embedding API usable and + lets you point at a specific depth: + + LKG_EMBED_BACKEND=hf LKG_HF_MODEL=HuggingFaceTB/SmolLM2-135M \ + LKG_HF_LAYER=blocks.-1 python app.py + """ + chat = backends.OllamaChat(backends.DEFAULT_CHAT_MODEL) + + if os.environ.get("LKG_EMBED_BACKEND") == "hf": + from .layers import HiddenStateEmbedding + + return chat, HiddenStateEmbedding( + os.environ.get("LKG_HF_MODEL", "HuggingFaceTB/SmolLM2-135M"), + layer=os.environ.get("LKG_HF_LAYER", "blocks.-1"), + pooling=os.environ.get("LKG_HF_POOLING", "last"), + ) + + return chat, backends.OllamaEmbedding(backends.DEFAULT_EMBED_MODEL) + + +@app.route("/") +def index(): + return render_template("index.html") + + +@app.route("/health") +def health(): + """Why nothing is happening, in terms a user can act on.""" + return jsonify(backends.health(backends.DEFAULT_BASE_URL)) + + +@app.route("/query", methods=["GET", "POST"]) +def query(): + if request.method == "POST": + user_query = (request.json or {}).get("query", "") + else: + user_query = request.args.get("query", "") + user_query = user_query.strip() + + if not user_query: + return jsonify({"error": "No query provided"}), 400 + + chat, embedder = app.config.get("BACKENDS_FACTORY", make_backends)() + + def generate(): + """Stream events, and keep talking even while the model is thinking. + + The reasoning loop runs on a worker thread and hands events over a queue, so + this generator can emit a heartbeat during the long silence before a slow + model produces its first token. Without it a browser sees an open connection + and no data, which is indistinguishable from the app being broken. + """ + store = EmbeddingStore(app.config.get("DB_PATH", DB_PATH)) + events: queue.Queue = queue.Queue() + sentinel = object() + + def worker(): + try: + # The store deliberately accumulates across questions. It used to be + # wiped at the start of every request, which made "Related Questions + # and Answers" structurally unable to show anything but the current + # run's own steps. Set LKG_RESET_DB=1 to go back to a clean slate. + if os.environ.get("LKG_RESET_DB") == "1": + store.clear() + query_vector = embedder.embed([user_query])[0] + query_id = store.add( + user_query, + query_vector, + is_question=True, + model=embedder.describe().get("model", ""), + ) + for event in reason(user_query, chat=chat, embedder=embedder, store=store): + events.put(event) + if event["type"] == "error": + return + similar = store.find_similar( + query_vector, + top_k=5, + model=embedder.describe().get("model", ""), + exclude_ids={query_id}, + ) + events.put({"type": "similar", "items": similar, "store_size": store.count()}) + except backends.BackendError as exc: + events.put({"type": "error", "message": str(exc), "hint": exc.hint}) + except Exception as exc: # noqa: BLE001 + events.put({"type": "error", "message": f"{type(exc).__name__}: {exc}", "hint": ""}) + finally: + events.put(sentinel) + + thread = threading.Thread(target=worker, daemon=True) + thread.start() + + try: + while True: + try: + event = events.get(timeout=HEARTBEAT_SECONDS) + except queue.Empty: + yield ": heartbeat\n\n" + continue + if event is sentinel: + break + yield _sse(event) + yield _sse({"type": "done_stream"}) + finally: + thread.join(timeout=1.0) + store.close() + + return Response( + generate(), + mimetype="text/event-stream", + headers={"Cache-Control": "no-cache", "X-Accel-Buffering": "no"}, + ) + + +def run(host: str | None = None, port: int | None = None, debug: bool | None = None) -> None: + """Start the server, after saying whether the model backend is actually there.""" + status = backends.health(backends.DEFAULT_BASE_URL) + if not status["ok"]: + print(f"\n {status['problem']}\n {status['hint']}\n") + else: + print(f"\n Ollama at {status['base_url']} — models: {', '.join(status['models'])}\n") + + # Bound to localhost with the debugger off by default. The previous default of + # debug=True on 0.0.0.0 exposed the Werkzeug console to the whole network. + app.run( + host=host or os.environ.get("LKG_HOST", "127.0.0.1"), + port=port or int(os.environ.get("LKG_PORT", "5100")), + debug=os.environ.get("LKG_DEBUG", "") == "1" if debug is None else debug, + threaded=True, + ) + + +if __name__ == "__main__": + run() diff --git a/backends.py b/src/mpe_lkg/backends.py similarity index 100% rename from backends.py rename to src/mpe_lkg/backends.py diff --git a/src/mpe_lkg/cli.py b/src/mpe_lkg/cli.py new file mode 100644 index 0000000..5991dc1 --- /dev/null +++ b/src/mpe_lkg/cli.py @@ -0,0 +1,56 @@ +"""The ``mpe-lkg`` command.""" + +from __future__ import annotations + +import argparse +import json +import sys + + +def build_parser() -> argparse.ArgumentParser: + from . import __version__ + + parser = argparse.ArgumentParser( + prog="mpe-lkg", + description="Local Knowledge Graph — a local LLM reasons step by step, " + "and the steps become a graph.", + epilog="Needs Ollama running locally. Run 'mpe-lkg doctor' to check.", + ) + parser.add_argument("--version", action="version", version=f"mpe-lkg {__version__}") + parser.add_argument("--host", default=None, help="default 127.0.0.1") + parser.add_argument("--port", type=int, default=None, help="default 5100") + parser.add_argument("--debug", action="store_true", help="Flask debugger; not on a shared network") + parser.add_argument( + "command", nargs="?", default="serve", choices=["serve", "doctor"], + help="serve (default) starts the web app; doctor reports what is missing", + ) + return parser + + +def doctor() -> int: + """Say exactly what is wrong and what command fixes it.""" + from . import backends + + status = backends.health(backends.DEFAULT_BASE_URL) + print(json.dumps(status, indent=2)) + if status["ok"]: + print("\nEverything the app needs is present.") + return 0 + print(f"\n{status['problem']}\n{status['hint']}", file=sys.stderr) + return 1 + + +def main(argv: list[str] | None = None) -> int: + args = build_parser().parse_args(argv) + + if args.command == "doctor": + return doctor() + + from .app import run + + run(host=args.host, port=args.port, debug=args.debug or None) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/graph.py b/src/mpe_lkg/graph.py similarity index 100% rename from graph.py rename to src/mpe_lkg/graph.py diff --git a/layers.py b/src/mpe_lkg/layers.py similarity index 100% rename from layers.py rename to src/mpe_lkg/layers.py diff --git a/reasoning.py b/src/mpe_lkg/reasoning.py similarity index 98% rename from reasoning.py rename to src/mpe_lkg/reasoning.py index c57acb3..5325a40 100644 --- a/reasoning.py +++ b/src/mpe_lkg/reasoning.py @@ -13,8 +13,8 @@ import time from collections.abc import Iterator -from backends import STEP_SCHEMA, BackendError, ChatBackend, EmbeddingBackend -from graph import build_graph, edge_weight_spread, serialize_graph_data, strongest_path +from .backends import STEP_SCHEMA, BackendError, ChatBackend, EmbeddingBackend +from .graph import build_graph, edge_weight_spread, serialize_graph_data, strongest_path MAX_STEPS = 20 MIN_STEPS = 5 diff --git a/static/vendor/marked.umd.js b/src/mpe_lkg/static/vendor/marked.umd.js similarity index 100% rename from static/vendor/marked.umd.js rename to src/mpe_lkg/static/vendor/marked.umd.js diff --git a/static/vendor/purify.min.js b/src/mpe_lkg/static/vendor/purify.min.js similarity index 100% rename from static/vendor/purify.min.js rename to src/mpe_lkg/static/vendor/purify.min.js diff --git a/static/vendor/vis-network.min.js b/src/mpe_lkg/static/vendor/vis-network.min.js similarity index 100% rename from static/vendor/vis-network.min.js rename to src/mpe_lkg/static/vendor/vis-network.min.js diff --git a/store.py b/src/mpe_lkg/store.py similarity index 100% rename from store.py rename to src/mpe_lkg/store.py diff --git a/templates/index.html b/src/mpe_lkg/templates/index.html similarity index 100% rename from templates/index.html rename to src/mpe_lkg/templates/index.html diff --git a/tests/conftest.py b/tests/conftest.py index aec2e47..6900c79 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,12 +1,15 @@ import json -import os +import pathlib import sys import pytest -sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) +# Works whether or not the package is installed, and identically on Windows. +ROOT = pathlib.Path(__file__).resolve().parent.parent +sys.path.insert(0, str(ROOT / "src")) +sys.path.insert(0, str(ROOT)) -from backends import DeterministicEmbedding, ScriptedChat # noqa: E402 +from mpe_lkg.backends import DeterministicEmbedding, ScriptedChat # noqa: E402 def step(title: str, content: str, next_action: str = "continue") -> str: @@ -31,7 +34,7 @@ def embedder(): @pytest.fixture def flask_client(tmp_path, embedder): """A Flask test client wired to fakes, with a per-test database.""" - import app as app_module + import mpe_lkg.app as app_module def make_client(script: list[str], *, repeat_last: bool = False, embed=None): chat = ScriptedChat(script, repeat_last=repeat_last) diff --git a/tests/test_graph_math.py b/tests/test_graph_math.py index 0ee0fbc..6e49095 100644 --- a/tests/test_graph_math.py +++ b/tests/test_graph_math.py @@ -6,7 +6,7 @@ import numpy as np import pytest -from graph import ( +from mpe_lkg.graph import ( build_graph, cosine_similarity, edge_weight_spread, diff --git a/tests/test_layers.py b/tests/test_layers.py index 89df6c6..1bcf694 100644 --- a/tests/test_layers.py +++ b/tests/test_layers.py @@ -11,7 +11,7 @@ torch = pytest.importorskip("torch") nn = torch.nn -from layers import ( # noqa: E402 +from mpe_lkg.layers import ( # noqa: E402 describe_layers, find_block_stack, find_final_norm, @@ -170,7 +170,7 @@ def test_unknown_pooling_is_rejected(self): @pytest.fixture(scope="module") def probe(): pytest.importorskip("transformers") - from layers import HiddenStateEmbedding + from mpe_lkg.layers import HiddenStateEmbedding try: return HiddenStateEmbedding(HF_MODEL, layer="blocks.-1") @@ -219,14 +219,14 @@ def test_batching_does_not_shift_a_vector_onto_the_wrong_text(self, probe): def test_different_layers_give_different_answers(self, probe): """If two layers agree exactly, the hook is not tapping where it claims.""" - from layers import MultiLayerProbe + from mpe_lkg.layers import MultiLayerProbe out = MultiLayerProbe(HF_MODEL, ["blocks.0", "blocks.-1"]).embed(["a probe sentence"]) assert not np.allclose(out["blocks.0"], out["blocks.-1"], atol=1e-3) def test_depth_separates_topics_better_than_the_first_layer(self, probe): """The whole point of the feature, as an assertion.""" - from layers import MultiLayerProbe + from mpe_lkg.layers import MultiLayerProbe from scripts.layer_sweep import separation texts = ["The capital of France is Paris.", "Paris is the French capital.", @@ -239,7 +239,7 @@ def test_depth_separates_topics_better_than_the_first_layer(self, probe): assert last > first def test_a_module_off_the_forward_path_is_reported(self, probe): - from layers import HiddenStateEmbedding + from mpe_lkg.layers import HiddenStateEmbedding stray = HiddenStateEmbedding.__new__(HiddenStateEmbedding) stray.__dict__.update(probe.__dict__) diff --git a/tests/test_ollama.py b/tests/test_ollama.py index 899da21..6e70209 100644 --- a/tests/test_ollama.py +++ b/tests/test_ollama.py @@ -8,8 +8,8 @@ import pytest from conftest import normal_script, read_events -import backends -from backends import OllamaEmbedding +from mpe_lkg import backends +from mpe_lkg.backends import OllamaEmbedding pytestmark = pytest.mark.ollama @@ -86,7 +86,7 @@ def test_app_runs_end_to_end(self, flask_client, model, expected_dim): def test_switching_model_does_not_corrupt_the_store(self, tmp_path): """Mixed-dimension rows in one database used to break search silently.""" - from store import EmbeddingStore + from mpe_lkg.store import EmbeddingStore store = EmbeddingStore(str(tmp_path / "mixed.db")) small = OllamaEmbedding(require("all-minilm")) @@ -132,7 +132,7 @@ def test_a_real_model_produces_a_parseable_step(self): schema=backends.STEP_SCHEMA, ) ) - from reasoning import extract_json + from mpe_lkg.reasoning import extract_json parsed = extract_json(text) assert set(parsed) >= {"title", "content", "next_action"} diff --git a/tests/test_render.py b/tests/test_render.py index 3c87a48..1453c60 100644 --- a/tests/test_render.py +++ b/tests/test_render.py @@ -15,7 +15,7 @@ from conftest import normal_script, step from werkzeug.serving import make_server -from backends import DeterministicEmbedding, ScriptedChat +from mpe_lkg.backends import DeterministicEmbedding, ScriptedChat pytest.importorskip("playwright.sync_api") from playwright.sync_api import sync_playwright # noqa: E402 @@ -29,7 +29,7 @@ def free_port() -> int: class LiveServer: def __init__(self, script, tmp_path, *, repeat_last=False, dim=48, delay=0.0): - import app as app_module + import mpe_lkg.app as app_module chat = ScriptedChat(script, repeat_last=repeat_last, delay=delay) app_module.app.config["BACKENDS_FACTORY"] = lambda: (chat, DeterministicEmbedding(dim)) diff --git a/tests/test_store.py b/tests/test_store.py index e22eb5b..ec5fe57 100644 --- a/tests/test_store.py +++ b/tests/test_store.py @@ -10,7 +10,7 @@ import pytest from conftest import normal_script, read_events -from store import EmbeddingStore +from mpe_lkg.store import EmbeddingStore def unit(rng, dim=32): diff --git a/tests/test_stream.py b/tests/test_stream.py index 84436f0..321519e 100644 --- a/tests/test_stream.py +++ b/tests/test_stream.py @@ -10,7 +10,7 @@ import pytest from conftest import normal_script, read_events, step -from backends import BackendError, DeterministicEmbedding +from mpe_lkg.backends import BackendError, DeterministicEmbedding class FailingEmbedding: @@ -174,7 +174,7 @@ def test_apostrophes_are_preserved(self, flask_client): class TestHealthRoute: def test_health_reports_a_problem_when_ollama_is_absent(self, flask_client, monkeypatch): - import backends + from mpe_lkg import backends monkeypatch.setattr(backends, "list_models", lambda *a, **k: []) client, _ = flask_client(normal_script()) @@ -184,7 +184,7 @@ def test_health_reports_a_problem_when_ollama_is_absent(self, flask_client, monk assert "ollama serve" in payload["hint"] def test_health_names_the_missing_model(self, flask_client, monkeypatch): - import backends + from mpe_lkg import backends monkeypatch.setattr( backends, "list_models", From 89b6524fd17f67ca8e453038e329304b11603d53 Mon Sep 17 00:00:00 2001 From: Morten Punnerud-Engelstad Date: Mon, 10 Aug 2026 13:47:41 +0200 Subject: [PATCH 5/6] Give each CI job a distinct name Three workflows each had a job called "test", so they produced three check contexts called "test". Branch protection identifies a required check by its context name, and cannot distinguish two identically named ones -- so requiring "macOS passed" was not expressible. The checks are now Linux 3.10 .. 3.13, macOS, and Windows. --- .github/workflows/linux.yml | 4 ++++ .github/workflows/macos.yml | 2 ++ .github/workflows/windows.yml | 2 ++ 3 files changed, 8 insertions(+) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 6de70a9..ebc90af 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -20,6 +20,10 @@ concurrency: jobs: test: + # Named explicitly so the check context is unambiguous. Three workflows with a + # job called "test" produce three checks called "test", and branch protection + # cannot then require a specific one. + name: Linux ${{ matrix.python-version }} runs-on: ubuntu-latest strategy: fail-fast: false diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml index f9d0df9..4f41978 100644 --- a/.github/workflows/macos.yml +++ b/.github/workflows/macos.yml @@ -17,6 +17,8 @@ concurrency: jobs: test: + # Explicit, so branch protection can require this exact context. + name: macOS runs-on: macos-latest steps: diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 42a0027..66e2349 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -18,6 +18,8 @@ concurrency: jobs: test: + # Explicit, so branch protection can require this exact context. + name: Windows runs-on: windows-latest steps: From 791a91a620388e26377fa1f0c01d803f7572de71 Mon Sep 17 00:00:00 2001 From: Morten Punnerud-Engelstad Date: Mon, 10 Aug 2026 13:52:39 +0200 Subject: [PATCH 6/6] Tidy the repository root People screenshot a project's GitHub page and share it, so the file listing is part of the first impression. The root is now five directories and four files: .github/ docs/ scripts/ src/ tests/ .gitignore Makefile README.md pyproject.toml - .DS_Store was tracked. Removed from the index and from disk. - example.png moves to docs/, alongside docs/claims/ (was data/claims/). - requirements.txt and requirements-dev.txt are gone. pyproject.toml already declares the same dependencies and the [dev] extra, and two files listing the same thing is one file that will drift. --- .DS_Store | Bin 6148 -> 0 bytes .gitignore | 2 +- Makefile | 8 +++++--- README.md | 8 ++++---- {data => docs}/claims/edge_spread.json | 0 {data => docs}/claims/layer_sweep.json | 0 {data => docs}/claims/search_bench.json | 0 example.png => docs/example.png | Bin requirements-dev.txt | 4 ---- requirements.txt | 4 ---- scripts/bench_search.py | 2 +- scripts/check_numbers.py | 6 +++--- scripts/layer_sweep.py | 2 +- scripts/measure.py | 4 ++-- scripts/screenshot.py | 2 +- 15 files changed, 18 insertions(+), 24 deletions(-) delete mode 100644 .DS_Store rename {data => docs}/claims/edge_spread.json (100%) rename {data => docs}/claims/layer_sweep.json (100%) rename {data => docs}/claims/search_bench.json (100%) rename example.png => docs/example.png (100%) delete mode 100644 requirements-dev.txt delete mode 100644 requirements.txt diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index bf857f4bb280f3b297757d5bc7e49af71b3f38b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKJxc^J5S`I0PHe8UOry2;4|2!a+1($|^F+a2c0uj;*ZH69d@nP~Ek>{q5t)JH zO)?+JKG-B9BD#LwEkzb0GDjmSm5Ok>YC3S|8Bj}(R<7kqZsoDPt0el1Q{4Me*>fj@ z?CpQKx#_#XwtRY4_v-ql*|z-_Ruc63aQU+O%5(Qk&*6T5<#VJ92?m0JU?3O>27Z(Q z+}V`*v0?PVKrj#td@#WCA)yho<7ilp4s@ji0P-1K1UhR8#w5q=I2ytNQ40lHsCtQ^ z7LNJke%Wy}v~W=`KGau!FJ82)j{K>(i)O>=8.0 -playwright>=1.48 -ruff>=0.6 diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index 113f1be..0000000 --- a/requirements.txt +++ /dev/null @@ -1,4 +0,0 @@ -Flask>=3.0 -numpy>=1.24 -networkx>=3.0 -requests>=2.28 diff --git a/scripts/bench_search.py b/scripts/bench_search.py index a909d88..5dde49d 100644 --- a/scripts/bench_search.py +++ b/scripts/bench_search.py @@ -162,7 +162,7 @@ def write_claims() -> None: claims["annoy_returns_k_results"] = len(neighbours) claims["annoy_version"] = "1.17.3" - out = pathlib.Path(__file__).resolve().parent.parent / "data" / "claims" / "search_bench.json" + out = pathlib.Path(__file__).resolve().parent.parent / "docs" / "claims" / "search_bench.json" out.parent.mkdir(parents=True, exist_ok=True) out.write_text(json.dumps(claims, indent=2) + "\n") print(f"\nwrote {out.name}") diff --git a/scripts/check_numbers.py b/scripts/check_numbers.py index 2296129..c956050 100644 --- a/scripts/check_numbers.py +++ b/scripts/check_numbers.py @@ -32,9 +32,9 @@ from mpe_lkg.graph import cosine_similarity, strongest_path, top_similarities # noqa: E402 -CLAIMS = "data/claims/edge_spread.json" -SEARCH = "data/claims/search_bench.json" -SWEEP = "data/claims/layer_sweep.json" +CLAIMS = "docs/claims/edge_spread.json" +SEARCH = "docs/claims/search_bench.json" +SWEEP = "docs/claims/layer_sweep.json" # (file, extractor, expected, tolerance, label) # diff --git a/scripts/layer_sweep.py b/scripts/layer_sweep.py index abbf26d..5bee22a 100644 --- a/scripts/layer_sweep.py +++ b/scripts/layer_sweep.py @@ -108,7 +108,7 @@ def main() -> int: "best_separation": results[best]["separation"], "first_layer_separation": results[requested[0]]["separation"], } - out = ROOT / "data" / "claims" / "layer_sweep.json" + out = ROOT / "docs" / "claims" / "layer_sweep.json" out.parent.mkdir(parents=True, exist_ok=True) out.write_text(json.dumps(payload, indent=2) + "\n") print(f"wrote {out.relative_to(ROOT)}") diff --git a/scripts/measure.py b/scripts/measure.py index abf6b5f..aeed031 100644 --- a/scripts/measure.py +++ b/scripts/measure.py @@ -12,7 +12,7 @@ so the observed spread across them can set the tolerance in check_numbers.py -- a single run would give a number with no error bar. -Writes data/claims/edge_spread.json. Run with: make measure +Writes docs/claims/edge_spread.json. Run with: make measure """ from __future__ import annotations @@ -121,7 +121,7 @@ def main() -> int: f"cv={result['cv']:.4f}+/-{result['cv_stdev']:.4f} edges={result['n']}" ) - out = ROOT / "data" / "claims" / "edge_spread.json" + out = ROOT / "docs" / "claims" / "edge_spread.json" out.parent.mkdir(parents=True, exist_ok=True) out.write_text(json.dumps(results, indent=2) + "\n") print(f"\nwrote {out.relative_to(ROOT)}") diff --git a/scripts/screenshot.py b/scripts/screenshot.py index 867434e..56da991 100644 --- a/scripts/screenshot.py +++ b/scripts/screenshot.py @@ -32,7 +32,7 @@ def free_port() -> int: def main() -> int: question = sys.argv[1] if len(sys.argv) > 1 else "Can you give the 5 biggest cities in population size in order?" - out = pathlib.Path(sys.argv[2] if len(sys.argv) > 2 else "example.png") + out = pathlib.Path(sys.argv[2] if len(sys.argv) > 2 else "docs/example.png") app_module.app.config["DB_PATH"] = str(ROOT / "embeddings.db") port = free_port()